summaryrefslogtreecommitdiffstats
path: root/fs/make_panic
diff options
context:
space:
mode:
Diffstat (limited to 'fs/make_panic')
-rwxr-xr-xfs/make_panic162
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";
+ }
+}
+
+
+