diff options
Diffstat (limited to 'fs/make_panic')
-rwxr-xr-x | fs/make_panic | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/fs/make_panic b/fs/make_panic new file mode 100755 index 0000000..fd27fb8 --- /dev/null +++ b/fs/make_panic @@ -0,0 +1,162 @@ +#!/usr/bin/perl + +############################################################# +############################################################# +## +## Copyright 2001 Sistina Software Inc. +## +## This is free software released under the GNU General +## Public License. There is no warranty for this +## software. See the file COPYING for details. +## +############################################################# +############################################################# + +use Getopt::Std; + +exit(1) unless getopts('s:f:e:hdqr:l:'); + +if (defined $opt_h) +{ + print << "EndHelp"; +Usage: make_panic [OPTION] + -e <iterations> number of iterations, infinite if not defined + -f <forks> number of processes to fork + -h help + -s <seed> seed for random number generator + -d drop seed so you could use it next time + -q Don't print out the status updates. (slient) + -r Number of directories + -l Number of files +EndHelp + + exit(0); +} + + +if (defined $opt_f) +{ + $opt_f = 1 if $opt_f <=0; + while (--$opt_f) + { + if ($pid = fork()) + { + #parent + } + elsif (defined $pid) + { + last; + } + else + { + die "Fork error $!"; + } + } +} + +if(defined $opt_s) +{ + $seed = $opt_s; +} +else +{ + $seed = time ^ $$; +} +if(defined($opt_d)) +{ + system("echo $seed > /make_panic_seed.$$"); +} +srand($seed); + +if (defined $opt_r) +{ + $dirs = $opt_r; +} +else +{ + $dirs = 50; +} + +if (defined $opt_l) +{ + $files = $opt_l; +} +else +{ + $files = 1000; +} + + +for ($x = 0; $x < $dirs; $x++) +{ + mkdir(sprintf("dir%.10u", $x), 0755); +} + +$last = time(); +$ops_at_last_tick = 0; + +while ( (defined $opt_e)?($opt_e-- > 0):1 ) +{ + $v = int(rand(6)); + + $x = int(rand($dirs)); + $y = int(rand($files)); + $file = sprintf("dir%.10u/file%.10u", $x, $y); + + if ($v == 0) + { + open(DATAFILE, ">> $file") || die; + close(DATAFILE); + } + elsif ($v == 1 || $v == 2) + { + $z = int(rand(1000000000)); + if (open(DATAFILE, "+< $file")) + { + seek(DATAFILE, $z, 0); + print DATAFILE "$z\n"; + close(DATAFILE); + } + } + elsif ($v == 3 || $v == 4) + { + $z = int(rand(1000000000)); + if (open(DATAFILE, "< $file")) + { + seek(DATAFILE, -100, 2); + read(DATAFILE, $tmp, 100) == 100; + close(DATAFILE); + } + } + elsif ($v == 5) + { + unlink "$file"; + } + + + $ops++; +# if ($ops % 250 == 0) +# { +# $new = time(); +# $last-- if ($new == $last); +# $rate = 250 / ($new - $last); +# $pretty_rate = sprintf("%.2f", $rate); +# $last = $new; +# } + + $new = time(); + + if ($new != $last) { + $rate = ($ops - $ops_at_last_tick) / ($new - $last); + $pretty_rate = sprintf("%.2f", $rate); + $ops_at_last_tick = $ops; + $last = $new; + } + + if( ! defined $opt_q ) { + print "$ops:$v: $pretty_rate\n"; + } +} + + + |