Select Git revision
-
David Sehnal authoredDavid Sehnal authored
stressfs.pl 13.35 KiB
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long::Descriptive;
use Number::Bytes::Human qw(format_bytes parse_bytes);
use POSIX ":sys_wait_h";
use Time::HiRes qw(time);
use File::Basename;
$SIG{CHLD}='IGNORE';
# parametry a defaultni hodnoty
# TODO: do helpu pridat perldoc nize ulozeny
my ($opt, $usage) = describe_options(
'Pouziti:
stressfs [options]
volby --s* jsou pro male soubory
volby --b* jsou pro velke soubory',
[ 'path|p=s', 'path for testing directory (sfs_tmp)', { default => 'sfs_tmp' } ],
[ 'gen|g', 'vynutit nove generovani datove struktury, pro test nutny az 3x mnozstvi volneho mista, viz popis datovych struktur' ],
[ 'notest|n', 'netestovat, pouze generovani dat pokud je nezbytne' ],
[ 'count|c', 'negenerovat, netestovat, pouze odhadnout velikost struktury, ktera bude nutna pro vygenerovani' ],
[],
[ 'bcomp=i', 'pocet vlaken pro kompresi velkych souboru (1)', { default => 1 } ],
[ 'scomp=i', 'pocet vlaken pro kompresi malych souboru (1)', { default => 1 } ],
[ 'bdecomp=i', 'pocet vlaken pro dekompresi velkych souboru (1)', { default => 1 } ],
[ 'sdecomp=i', 'pocet vlaken pro dekompresi malych souboru (1)', { default => 1 } ],
[],
[ 'sdepth=i', 'hloubka adresarove struktury (3)', { default => 3 } ],
[ 'sdirmin=i', 'minimalni pocet podadresaru v kazde urovni (3)', { default => 3 } ],
[ 'sdirmax=i', 'maximalni pocet podadresaru v kazde urovni (9)', { default => 9 } ],
[ 'snummin=i', 'minimalni pocet souboru v jednotlivych adresarich (3)', { default => 3 } ],
[ 'snummax=i', 'maximalni pocet souboru v jednotlivych adresarich (20)', { default => 20 } ],
[ 'ssizemin=i','minimalni velikost souboru v B (0)', { default => 0 } ],
[ 'ssizemax=i','maximalni velikost souboru v B, max. 4GB (1024)', { default => 1024 } ],
[],
[ 'bdepth=i', 'hloubka adresarove struktury (2)', { default => 2 } ],
[ 'bdirmin=i', 'minimalni pocet podadresaru v kazde urovni (1)', { default => 1 } ],
[ 'bdirmax=i', 'maximalni pocet podadresaru v kazde urovni (3)', { default => 3 } ],
[ 'bnummin=i', 'minimalni pocet souboru v jednotlivych adresarich (3)', { default => 3 } ],
[ 'bnummax=i', 'maximalni pocet souboru v jednotlivych adresarich (9)', { default => 9 } ],
[ 'bsizemin=i','minimalni velikost souboru v B (1048576 = 1MB)', { default => 1024*1024 } ],
[ 'bsizemax=i','maximalni velikost souboru v B, max 4GB (1073741824 = 1GB)', { default => 1024*1024*1024 } ],
[],
[ 'help|h', 'tato napoveda a konec', { shortcircuit => 1 } ],
);
if ($opt->help) {
print `pod2text $0`;
print "\n";
print($usage->text);
exit 0;
}
my $tar_opts = "--warning=none";
my $tar_name = "archive.tar";
my $path = $opt->path;
my $forks = 0;
my %pids = ();
my $pid;
my %data = (); # zakladni informace o strukture zdrojovych dat
my $est_size = 0;
#########################################
### GENEROVANI A SPRAVA ZDROJOVYCH DAT
#########################################
# vypocet predpokladane velikosti
sub est_size {
my ($path, $depth, $dirmin, $dirmax, $nummin, $nummax, $sizemin, $sizemax) = @_;