From: Sage Weil Date: Tue, 5 May 2015 18:28:25 +0000 (-0700) Subject: src/script: remove obsolete scripts X-Git-Tag: v9.0.2~241^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c9a6e60eee8719472bcf71fffb20eb2557703f9d;p=ceph.git src/script: remove obsolete scripts These are mostly from gather graph data for very early versions of ceph and are not useful anymore. Signed-off-by: Sage Weil --- diff --git a/src/script/adjusttabs.pl b/src/script/adjusttabs.pl deleted file mode 100755 index 66edff2ac6c0..000000000000 --- a/src/script/adjusttabs.pl +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl - -my $tablen = shift @ARGV; -my $fn = shift @ARGV; - -my $tab = ' ' x $tablen; -open(I, $fn); -my $f; -my $oldtab = ' ' x 4; -while () { - if (my ($oldlen) = /\-\*\- .*tab-width:(\d)/) { - print "old length was $oldlen\n"; - $oldtab = ' ' x $oldlen; - s/tab-width:\d/tab-width:$tablen/; - } - s/\t/$oldtab/g; - $f .= $_; -} -close I; -open(O, ">$fn.new"); -print O $f; -close O; - -rename "$fn.new", $fn; diff --git a/src/script/build_debian_image.sh b/src/script/build_debian_image.sh deleted file mode 100755 index 556ebeda3e07..000000000000 --- a/src/script/build_debian_image.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/sh -x - -set -e - -image="$1" -root=/tmp/$$ -dist=squeeze - -srcdir=`dirname $0` - -# image -[ -e $image ] && echo $image exists && exit 1 -dd if=/dev/zero of=$image bs=1M seek=1023 count=1 -yes | mke2fs -j $image - -mkdir $root -mount -o loop $image $root - -cleanup() { - umount $root/proc || true - umount $root/sys || true - umount $root/dev/pts || true - umount $root -} -trap cleanup INT TERM EXIT - -debootstrap $dist $root http://http.us.debian.org/debian/ - -cat <> $root/etc/fstab -none /dev/pts devpts gid=5,mode=620 0 0 -proc /proc proc defaults 0 0 -sysfs /sys sysfs defaults 0 0 -none /sys/kernel/debug debugfs defaults 0 0 -tmpfs /tmp tmpfs defaults,size=768M 0 0 -none /host hostfs defaults 0 0 -EOF - -echo "uml" > $root/etc/hostname -mkdir $root/host - -# set up chroot -mount -t proc proc $root/proc -mount -t sysfs sysfs $root/sys -mount -t devpts devptr $root/dev/pts -o gid=5,mode=620 - -# set up network -cp $srcdir/network-from-cmdline $root/etc/init.d/network-from-cmdline -chroot $root update-rc.d network-from-cmdline defaults 20 - -# kcon_ helpers -cp $srcdir/kcon_most.sh $root/root/most.sh -cp $srcdir/kcon_all.sh $root/root/all.sh - -# fix up consoles -cat <> $root/etc/securetty - -# uml -tty0 -vc/0 -EOF - -cat <> $root/etc/inittab - -# uml just one console -c0:1235:respawn:/sbin/getty 38400 tty0 linux -EOF -grep -v tty[23456] $root/etc/inittab > $root/etc/inittab.new -mv $root/etc/inittab.new $root/etc/inittab - -# no root password -chroot $root passwd -d root - -# copy creating user's authorized_keys -mkdir $root/root/.ssh -chmod 700 $root/root/.ssh -cp ~/.ssh/authorized_keys $root/root/.ssh/authorized_keys -chmod 600 $root/root/.ssh/authorized_keys - -# packages -chroot $root apt-get -y --force-yes install ssh libcrypto\+\+ bind9-host - -exit 0 diff --git a/src/script/check_cache_dumps.pl b/src/script/check_cache_dumps.pl deleted file mode 100755 index 95bd28a47499..000000000000 --- a/src/script/check_cache_dumps.pl +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/perl - -my $epoch = shift || die "specify epoch"; - -my %auth; # mds -> id -> replica -> nonce -my %replica; # mds -> id -> auth -> nonce - -print "reading\n"; -for (my $i=0; -e "cachedump.$epoch.mds$i"; $i++) { - open(O,"cachedump.$epoch.mds$i"); - while () { - my ($name,$s); - ($name,$s) = /^\[(inode \d+) \S+ (\S+)/; - ($name,$s) = /^\[(dir \d+) \S+ (\S+)/ unless $name; - ($name,$s) = /^\[dentry (\S+) (\S+)/ unless $name; - if ($name) { - if ($s =~ /^auth/) { - $auth{$i}->{$name} = {}; - my ($rl) = $s =~ /\{(.*)\}/; - for my $r (split(/,/,$rl)) { - my ($who,$nonce) = $r =~ /(\d+)\=(\d+)/; - $auth{$i}->{$name}->{$who} = $nonce; - #print "auth $name rep by $who $nonce $s\n"; - } - } - else { - my ($a,$b,$n) = $s =~ /rep@(\d+)\,([\-\d]+)\.(\d+)/; - die $_ unless $a >= 0; - $replica{$i}->{$name}->{$a} = $n; - if ($b >= 0) { - $replica{$i}->{$name}->{$b} = $n; - } - } - } - } -} - -print "verifying replicas\n"; -for my $mds (keys %replica) { - for my $name (keys %{$replica{$mds}}) { - for my $auth (keys %{$replica{$mds}->{$name}}) { - if ($auth{$auth}->{$name}->{$mds}) { - if ($auth{$auth}->{$name}->{$mds} < $replica{$mds}->{$name}->{$auth}) { - print "problem: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has nonce $auth{$auth}->{$name}->{$mds}\n"; - } else { - print "ok: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has nonce $auth{$auth}->{$name}->{$mds}\n"; - } - } else { - print "??: mds$mds has $name from mds$auth nonce $replica{$mds}->{$name}->{$auth}, auth has no nonce\n"; - } - - } - } -} - - diff --git a/src/script/check_dendl.pl b/src/script/check_dendl.pl deleted file mode 100755 index b57bc0c061a6..000000000000 --- a/src/script/check_dendl.pl +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl - -my $in = 0; -my $line = 1; -while (<>) { - chomp; - my $l = $_; - my @w = split(/\s+/, $_); - for (@w) { - if (/^(\/\/)?dout\(\s*\-?\s*\d+\s*\)$/) { - warn "$line: dout without dendl: $l\n" if $in; - $in = 1; - } - elsif (/^derr\(\s*\-?\s*\d+\s*\)$/) { - warn "$line: dout without dendl: $l\n" if $in; - $in = 1; - } - elsif (/^dendl/) { - warn "$line: dendl without dout: $l\n" unless $in; - $in = 0; - } - } - $line++; -} diff --git a/src/script/check_mds_request_latency.pl b/src/script/check_mds_request_latency.pl deleted file mode 100755 index 0e19aad2c8be..000000000000 --- a/src/script/check_mds_request_latency.pl +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my %r; # reqid -> start -my %what; -my %lat_req; # latency -> request - -sub tosec($) { - my $v = shift; - my ($h, $m, $s) = split(/:/, $v); - my $r = $s + 60 * ($m + (60 * $h)); - #print "$v = $h $m $s = $r\n"; - return $r; -} - -while (<>) { - chomp; - my ($stamp) = /^\S+ (\S+)/; - - my ($req,$desc) = /\<\=\= client\d+ \S+ \d+ \=\=\=\= client_request\((\S+) ([^\)]+)/; - - if (defined $req) { - #print "$req\n"; # ($r{$req} - $stamp)\n"; - $r{$req} = $stamp; - $what{$req} = $desc; - next; - } - - my $who; - ($who, $req,$desc) = /\-\-\> (client\d+) \S+ \-\- client_reply\((\S+) ([^\)]+)/; - if (defined $req) { - $req =~ s/\?\?\?/$who/; - if (exists $r{$req}) { - my $len = tosec($stamp) - tosec($r{$req}); - #print "$req $len ($r{$req} - $stamp)\n"; - $lat_req{$len} = $req; - - delete $r{$req}; - } - } -} - - -for my $len (sort {$b <=> $a} keys %lat_req) { - my $req = $lat_req{$len}; - print "$len\t$req\t$what{$req}\n"; -} diff --git a/src/script/check_osd_request_latency.pl b/src/script/check_osd_request_latency.pl deleted file mode 100755 index fbaa504e7893..000000000000 --- a/src/script/check_osd_request_latency.pl +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my %r; # reqid -> start -my %lat_req; # latency -> request -my %desc; - -sub tosec($) { - my $v = shift; - my ($h, $m, $s) = split(/:/, $v); - my $r = $s + 60 * ($m + (60 * $h)); - #print "$v = $h $m $s = $r\n"; - return $r; -} - -while (<>) { - chomp; - my ($stamp) = /^\S+ (\S+) /; - - my ($who,$tid,$desc) = /osd\d+ <.. (\D+\d+) \S+ \d+ \S+ osd_op\((\S+) ([^\)]+)/; - if (defined $tid) { - my $req = "$tid"; - $r{$req} = $stamp unless exists $r{$req}; - $desc{$req} = $desc; - next; - } - - my ($who,$tid) = /\d+ -- \S+ osd\d+ --> (\D+\d+) \S+ \S+ osd_op_reply\((\S+) /; - if (defined $tid) { - my $req = "$tid"; - if (exists $r{$req}) { - my $len = tosec($stamp) - tosec($r{$req}); - - #print "$req $len ($r{$req} - $stamp)\n"; - $lat_req{$len} = $req; - - delete $r{$req}; - } - next; - } - -} - - -for my $len (sort {$b <=> $a} keys %lat_req) { - print "$len\t$lat_req{$len}\t$desc{$lat_req{$len}}\n"; -} diff --git a/src/script/check_pglog.sh b/src/script/check_pglog.sh deleted file mode 100755 index 48976f0a5135..000000000000 --- a/src/script/check_pglog.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -cosd=`which ceph-osd` -[ -z "$cosd" ] && cosd="./ceph-osd" - -bad=0 -for f in $1/current/meta/pglog* -do - echo -n "checking $f ... " - $cosd --dump-pg-log $f > /dev/null && echo ok || ( bad=1 && echo corrupt ) -done -exit $bad \ No newline at end of file diff --git a/src/script/clean_trace.pl b/src/script/clean_trace.pl deleted file mode 100755 index cb02ff7abe7c..000000000000 --- a/src/script/clean_trace.pl +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/perl - -my $n = 0; -while (<>) { - next unless /trace: /; - my $l = $'; $'; - print $l; -} diff --git a/src/script/comb.pl b/src/script/comb.pl deleted file mode 100755 index 1a0d4dcbe6c0..000000000000 --- a/src/script/comb.pl +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my $xaxis = shift @ARGV; -my @vars; -while (@ARGV) { - $_ = shift @ARGV; - last if ($_ eq '-'); - push(@vars, $_); -} -my @dirs; -while (@ARGV) { - $_ = shift @ARGV; - last if ($_ eq '-'); - push(@dirs, $_) if -d $_; -} -my @filt = @ARGV; -push( @filt, '.' ) unless @filt; - -print "#xaxis $xaxis -#vars @vars -#dirs @dirs -#filt @filt -"; - -sub load_sum { - my $fn = shift @_; - - open(I, "$fn"); - my $k = ; - chomp($k); - my @k = split(/\s+/,$k); - shift @k; - - my $s; - while () { - chomp; - s/^\#//; - next unless $_; - my @l = split(/\s+/,$_); - my $k = shift @l; - for my $f (@k) { - $s->{$k}->{$f} = shift @l; - } - - # clnode latency? - if ($fn =~ /cl/) { - $s->{$k}->{'wrlat'} = $s->{$k}->{'wrlsum'} / $s->{$k}->{'wrlnum'} if $s->{$k}->{'wrlnum'} > 0; - $s->{$k}->{'rlat'} = $s->{$k}->{'rlsum'} / $s->{$k}->{'rlnum'} if $s->{$k}->{'rlnum'} > 0; - $s->{$k}->{'lat'} = $s->{$k}->{'lsum'} / $s->{$k}->{'lnum'} if $s->{$k}->{'lnum'} > 0; - $s->{$k}->{'latw'} = $s->{$k}->{'lwsum'} / $s->{$k}->{'lwnum'} if $s->{$k}->{'lwnum'} > 0; - $s->{$k}->{'latr'} = $s->{$k}->{'lrsum'} / $s->{$k}->{'lrnum'} if $s->{$k}->{'lrnum'} > 0; - $s->{$k}->{'statlat'} = $s->{$k}->{'lstatsum'} / $s->{$k}->{'lstatnum'} if $s->{$k}->{'lstatnum'} > 0; - $s->{$k}->{'dirlat'} = $s->{$k}->{'ldirsum'} / $s->{$k}->{'ldirnum'} if $s->{$k}->{'ldirnum'} > 0; - } - } - return $s; -} - - -my %res; -my @key; -my %didkey; -for my $f (@filt) { - my @reg = split(/,/, $f); - #print "reg @reg\n"; - for my $d (@dirs) { - if ($f ne '.') { - my $r = (split(/\//,$d))[-1]; - my @db = split(/,/, $r); - #print "db @db\n"; - my $ok = 1; - for my $r (@reg) { - - $ok = 0 unless grep {$_ eq $r} @db; - } - next unless $ok; - } - #next if ($f ne '.' && $d !~ /$reg/); - #print "$d\n"; - my ($x) = $d =~ /$xaxis=([\d\.]+)/; - - for my $v (@vars) { - my ($what, $field) = $v =~ /^(.+)\.([^\.]+)$/; - #print "$what $field .. $v .. $f.$field\n"; - my $s = &load_sum("$d/sum.$what"); - - #print "\t$v"; - if ($field =~ /^sum=/) { - #warn "SUM field $field\n"; - push( @{$res{$x}}, $s->{'sum'}->{$'} ); #'}); - } else { - #warn "avg field $field\n"; - push( @{$res{$x}}, $s->{'avgval'}->{$field} ); - } - - push( @key, "$f.$field" ) unless $didkey{"$f.$field"}; - $didkey{"$f.$field"} = 1; - - if (0 && exists $s->{'avgvaldevt'}) { - push( @{$res{$x}}, $s->{'avgvaldevt'}->{$field} ); - push( @key, "$f.$field.dev" ) unless $didkey{"$f.$field.dev"}; - $didkey{"$f.$field.dev"} = 1; - } - } - } -} - -print join("\t", "#", @key) . "\n"; -for my $x (sort {$a <=> $b} keys %res) { - print join("\t", $x, @{$res{$x}}) . "\n"; -} diff --git a/src/script/convert_soe_trace.pl b/src/script/convert_soe_trace.pl deleted file mode 100755 index a6ec80312d0f..000000000000 --- a/src/script/convert_soe_trace.pl +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/perl - -# this reads in one of kristal's anonymized static traces from -# soe and makes it look like output from -# -# find . -exec ls -dilsn --time-style=+%s \{\} \; -# -# (which is what SyntheticClient likes to "import", and -# study_static.pl likes to analyze for hardlinks, dirsizes, etc.) - -while (<>) { - chomp; - my ($file, $ino, $size, $actime, $ctime, $mtime, $uid, $gid, $omode, $nlink) = split(/ /,substr($_,1)); - $file = '.' . $file; - my $nmode = oct($omode); - my $mode = '-...'; - $mode = 'd...' if (($nmode & 0170000) == 0040000); - $mode = 'f...' if (($nmode & 0170000) == 0100000); - $size = hex($size); - $mtime = hex($mtime); - $uid = hex($uid); - $gid = hex($gid); - print "$ino ? $mode ? $nlink $uid $gid $size $mtime $file\n"; -} - -__END__ - -soe format is -0. a space -1. full path of file name (MD5-ed and in base 64) -2. inode number -3. size of file in bytes (hex) -4. atime (hex) -5. ctime (hex) -6. mtime (hex) -7. uid (hex) -8. gid (hex) -9. mode (octal) -10. number of links diff --git a/src/script/find_auth_pins.pl b/src/script/find_auth_pins.pl deleted file mode 100755 index d37fb109a48d..000000000000 --- a/src/script/find_auth_pins.pl +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/perl - -my %pin; -my %hist; -my $l = 1; -my @pins; -while (<>) { - - #cdir:adjust_nested_auth_pins on [dir 163 /foo/ rep@13 | child] count now 0 + 1 - - if (/adjust_nested_auth_pins/) { - my ($what) = / (\w+)\]/; - $what =~ s/ 0x/ /; - $hist{$what} .= "$l: $_" - if defined $pin{$what}; - } - - # cinode:auth_pin on inode [1000000002625 /gnu/blah_client_created. 0x89b7700] count now 1 + 0 - - elsif (/auth_pin / && !/waiting/) { - #my ($what) = /\[(\w+ \w+) /; - my ($what) = / (\w+)\]/; - $what =~ s/ 0x/ /; - #print "$_ add_waiter $c $what\n"; - $pin{$what}++; - $hist{$what} .= "$l: $_"; - push( @pins, $what ) unless grep {$_ eq $what} @pins; - } - - # cinode:auth_unpin on inode [1000000002625 (dangling) 0x89b7700] count now 0 + 0 - - elsif (/auth_unpin/) { - #my ($what) = /\[(\w+ \w+) /;# / on (.*\])/; - my ($what) = / (\w+)\]/; - $what =~ s/ 0x/ /; - $pin{$what}--; - $hist{$what} .= "$l: $_"; - unless ($pin{$what}) { - delete $hist{$what}; - delete $pin{$what}; - @pins = grep {$_ ne $what} @pins; - } - } - $l++; -} - -for my $what (@pins) { - print "---- count $pin{$what} on $what -$hist{$what} -"; -} diff --git a/src/script/find_bufferleaks.pl b/src/script/find_bufferleaks.pl deleted file mode 100755 index 55abc720d606..000000000000 --- a/src/script/find_bufferleaks.pl +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl - -use strict; -my %buffers; - -my $l = 1; -while (<>) { - #print "$l: $_"; - - if (/^raw_(\w+) alloc (\S+)/) { - #print "alloc $2\n"; - $buffers{$2} = "$l: $_"; - } - if (/^raw_(\w+) free (\S+)/) { - #print "free $2\n"; - print "free without alloc at $l: $_" unless $buffers{$2}; - delete $buffers{$2}; - } - $l++; -} - -for my $x (sort {$buffers{$a} <=> $buffers{$b}} keys %buffers) { - print "leaked $buffers{$x}"; -} diff --git a/src/script/find_lost_bdev_ops.pl b/src/script/find_lost_bdev_ops.pl deleted file mode 100755 index ac1793b42dfa..000000000000 --- a/src/script/find_lost_bdev_ops.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl - -use strict; -my %op; - -my $line = 0; -while (<>) { - #print $line . $_ if /0x8d4f6a0/; - chomp; - $line++; - - #bdev(./ebofsdev/0)._submit_io bio(wr 269~1 usemap 0x4de33cc0) - if (my ($bio) = /_submit_io bio\(.*(0x\w+)\)/) { - $op{$bio} = $line; - } - - # cancel - #bdev(./ebofsdev/3)._cancel_io bio(wr 1525~1 bh_write 0x8a437b8) - if (my ($bio) = /_cancel_io bio\(.*(0x\w+)\)/ && - !(/FAILED/)) { - delete $op{$bio}; - } - - # finish - #bdev(./ebofsdev/3).complete_thread finishing bio(wr 1131~1 write_cnode 0x832c1f8) - if (my ($bio) = /complete_thread finishing bio\(.*(0x\w+)\)/) { - delete $op{$bio}; - } - -} - -for my $bio (keys %op) { - print "---- lost bio $bio\n"; -} diff --git a/src/script/find_lost_commit.pl b/src/script/find_lost_commit.pl deleted file mode 100755 index 73934248ad5c..000000000000 --- a/src/script/find_lost_commit.pl +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/perl - -use strict; -my %op; - -my $line = 0; -while (<>) { - #print "$line: $_"; - $line++; - - #osd3 do_op MOSDOp(client0.933 oid 100000000000008 0x84b4480) in pg[pginfo(4020000000d v 5662/0 e 2/1) r=0 active (0,5662]] - if (my ($from, $opno, $oid, $op) = /do_op MOSDOp\((\S+) op (\d+) oid (\d+) (\w+)\)/) { -# print "$op\n"; - if ($opno == 2 || $opno == 11 || $opno == 12 || $opno == 14 || $opno == 15) { - $op{$op} = $from; - } - } - - # commits - #osd1 op_modify_commit on op MOSDOp(client1.289 oid 100000100000002 0x51a2f788) - if (my ($op) = /op_modify_commit.* (\w+)\)/) { - delete $op{$op}; - } - #osd4 rep_modify_commit on op MOSDOp(osd3.289 oid 100000000000008 0x84b0980) - if (my ($op) = /rep_modify_commit.* (\w+)\)/) { - delete $op{$op}; - } - - # forwarded? - if (my ($op) = /sending (\w+) to osd/) { - delete $op{$op}; - } - -} - -for my $op (keys %op) { - print "---- lost op $op $op{$op}\n"; -} diff --git a/src/script/find_lost_objecter.pl b/src/script/find_lost_objecter.pl deleted file mode 100755 index a0c2089140e2..000000000000 --- a/src/script/find_lost_objecter.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl - -use strict; -my %ack; -my %commit; - -my $line = 0; -while (<>) { - #print "$line: $_"; - $line++; - - #client0.objecter writex_submit tid 21 osd0 oid 100000000000001 851424~100000 - if (my ($who, $tid) = /(\S+)\.objecter writex_submit tid\D+(\d+)\D+osd/) { -# print "$who.$tid\n"; - $ack{"$who.$tid"} = $line; - $commit{"$who.$tid"} = $line; - } - - #client1.objecter handle_osd_write_reply 304 commit 0 - #client1.objecter handle_osd_write_reply 777 commit 1 - if (my ($who, $tid, $commit) = /(\S+)\.objecter handle_osd_write_reply\D+(\d+)\D+commit\D+(\d)/) { -# print "$who.$tid\n"; - delete $ack{"$who.$tid"}; - delete $commit{"$who.$tid"} if $commit; - } - -} - -for my $op (keys %commit) { - print "---- lost commit $op $commit{$op}\n"; -} -for my $op (keys %ack) { - print "---- lost ack $op $commit{$op}\n"; -} diff --git a/src/script/find_pathpins.pl b/src/script/find_pathpins.pl deleted file mode 100755 index e4a7d81dfb7b..000000000000 --- a/src/script/find_pathpins.pl +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl - -my %pin; -my %hist; -my $l = 1; -my @pins; -while (<>) { - - # cinode:auth_pin on inode [1000000002625 /gnu/blah_client_created. 0x89b7700] count now 1 + 0 - - if (/path_pinned /) { - my ($dname, $dir) = /\[dentry (\S+) .* in \[dir (\d+) /; - $what = "$dname $dir"; - #print "$l pin $what\n"; - $pin{$what}++; - $hist{$what} .= "$l: $_"; - push( @pins, $what ) unless grep {$_ eq $what} @pins; - } - - # cinode:auth_unpin on inode [1000000002625 (dangling) 0x89b7700] count now 0 + 0 - - if (/path_unpinned/) { - my ($dname, $dir) = /\[dentry (\S+) .* in \[dir (\d+) /; - $what = "$dname $dir"; - #print "$l unpin $what\n"; - $pin{$what}--; - $hist{$what} .= "$l: $_"; - unless ($pin{$what}) { - delete $hist{$what}; - delete $pin{$what}; - @pins = grep {$_ ne $what} @pins; - } - } - $l++; -} - -for my $what (@pins) { - print "---- count $pin{$what} on $what -$hist{$what} -"; -} diff --git a/src/script/find_requests.pl b/src/script/find_requests.pl deleted file mode 100755 index 514489624941..000000000000 --- a/src/script/find_requests.pl +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl - -my %waiting; # context => what where what is "inode ..." or "dir ..." -my %hist; # context => history since waited -my @waiting; - -my $line = 0; -while (<>) { - - #print $line . $_ if /0x8d4f6a0/; - $line++; - if (/request_start/) { - my ($c) = /(0x\w+)/; - my ($what) = $'; #'; - chomp $what; - #print "$line add_waiter $c $what\n" if /0x8d4f6a0/; - $waiting{$c} = $what - if $what && !$waiting{$c}; - $hist{$c} .= "$line: $_"; - unless (grep {$_ eq $c} @waiting) { - push( @waiting, $c ); - } - } - #if (/finish_waiting/) { - # my ($c) = /(0x\w+)/; - # $hist{$c} .= "$line: $_"; - #} - if (/request_finish/ || - /request_forward/) { - my ($c) = /(0x\w+)/; - #print "took\n" if /0x8d4f6a0/; - delete $waiting{$c}; - delete $hist{$c}; - @waiting = grep {$_ ne $c} @waiting; - } -} - -for my $c (@waiting) { - print "---- lost request $c $waiting{$c} -$hist{$c} -"; -} diff --git a/src/script/find_waiters.pl b/src/script/find_waiters.pl deleted file mode 100755 index c89d2b1a49db..000000000000 --- a/src/script/find_waiters.pl +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl - -my %waiting; # context => what where what is "inode ..." or "dir ..." -my %hist; # context => history since waited -my @waiting; - -my $line = 0; -while (<>) { - #print $line . $_ if /0x8d4f6a0/; - $line++; - if (/add_waiter/) { - my ($c) = /(0x\w+)/; - my ($what) = / on (.*\])/; - #print "$line add_waiter $c $what\n" if /0x8d4f6a0/; - $waiting{$c} = $what - if $what && !$waiting{$c}; - $hist{$c} .= "$line: $_"; - unless (grep {$_ eq $c} @waiting) { - push( @waiting, $c ); - } - } - #if (/finish_waiting/) { - # my ($c) = /(0x\w+)/; - # $hist{$c} .= "$line: $_"; - #} - if (/take_waiting/) { - my ($c) = /(0x\w+)/; - if (/SKIPPING/) { - #print "skipping\n" if /0x8d4f6a0/; - $hist{$c} .= "$line: $_"; - } elsif (/took/) { - #print "took\n" if /0x8d4f6a0/; - delete $waiting{$c}; - delete $hist{$c}; - @waiting = grep {$_ ne $c} @waiting; - } else { - die "i don't understand: $_"; - } - } -} - -for my $c (@waiting) { - print "---- lost waiter $c $waiting{$c} -$hist{$c} -"; -} diff --git a/src/script/gprofnewsyn b/src/script/gprofnewsyn deleted file mode 100755 index 5d352e4e9e52..000000000000 --- a/src/script/gprofnewsyn +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/perl - -my @ranks = @ARGV; -unless (@ranks) { - @ranks = split(/\n/,`/bin/ls gmon`); -} -print "will do @ranks\n"; -for my $r (@ranks) { - print "$r\n"; - system "test -e gmon.out && rm gmon.out ; ln -f gmon/$r/gmon.out ; gprof newsyn > gmon/$r/o"; -} - diff --git a/src/script/grepblock b/src/script/grepblock deleted file mode 100755 index f5acf95732ab..000000000000 --- a/src/script/grepblock +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my $block = shift ARGV; -die unless int $block; - -while (<>) { - my $yes = 0; - for my $x (/(\d+\~\d+)/) { - my ($s,$l) = split(/\~/,$x); - $yes = 1 if ($block >= $s && $block < $s+$l); - } - print if $yes; -} diff --git a/src/script/merge_cdfs.pl b/src/script/merge_cdfs.pl deleted file mode 100755 index 98c22764fc8b..000000000000 --- a/src/script/merge_cdfs.pl +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl - -my %rows; # val -> [ count1, count2, ... ] - -my $filen = 0; -for my $file (@ARGV) { - open(I,"$file"); - while () { - next if /^\#/; - chomp; - my ($v, $c) = split(/\t/,$_); - $rows{$v}->[$filen] = $c; - } - $filen++; -} - -for my $v (sort {$a <=> $b} keys %rows) { - print "$v"; - for (my $i=0; $i < $filen; $i++) { - print "\t" . int($rows{$v}->[$i]); - } - print "\n"; - #print join("\t", $v, @{$rows{$v}}) . "\n"; -} diff --git a/src/script/merge_trace_rw.pl b/src/script/merge_trace_rw.pl deleted file mode 100644 index 378d629ef43f..000000000000 --- a/src/script/merge_trace_rw.pl +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my @file = <>; -sub get_op { - my @op = shift @file; - while (@file && - $file[0] !~ /^[a-z]+$/) { - push( @op, shift @file ); - } - #print "op = ( @op )\n"; - return @op; -} - -my $n = 0; -while (@file) { - my ($op, @args) = &get_op; - while ($op eq "read\n" || - $op eq "write\n") { - die unless scalar(@args) == 3; - my ($nop, @nargs) = &get_op; - if ($nop eq $op - && ($args[0] == $nargs[0] ) - && ($args[2] + $args[1] == $nargs[2]) - ) { - die unless scalar(@nargs) == 3; - $args[1] += $nargs[1]; - $args[1] .= "\n"; - die unless scalar(@args) == 3; - #print STDOUT "combining $n $op @args\n"; - $n++; - } else { -# print STDERR "not combinging\n"; - unshift( @file, $nop, @nargs ); - die unless scalar(@args) == 3; - last; - } - } - print $op; - print join('', @args); -} diff --git a/src/script/network-from-cmdline b/src/script/network-from-cmdline deleted file mode 100755 index a78f7ca908ab..000000000000 --- a/src/script/network-from-cmdline +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -e - -ip=`cat /proc/cmdline | sed 's/ /\n/g' | grep '^ip=' | cut -d = -f 2` -gw=`cat /proc/cmdline | sed 's/ /\n/g' | grep '^gw=' | cut -d = -f 2` -nm=`cat /proc/cmdline | sed 's/ /\n/g' | grep '^netmask=' | cut -d = -f 2` - -if [ -n "$ip" ]; then - echo - echo "Configuring eth0 with $ip netmask $nm gw $gw (via /proc/cmdline)" - ifconfig eth0 $ip netmask $netmask - route add default gw $gw -fi - -exit 0 diff --git a/src/script/perf-watch.py b/src/script/perf-watch.py deleted file mode 100755 index 0add1a9edd11..000000000000 --- a/src/script/perf-watch.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python - -import json -import argparse -import logging -import time -import commands - - -def parse_args(): - parser = argparse.ArgumentParser(description='watch ceph perf') - parser.add_argument( - '-v', '--verbose', - action='store_true', default=None, - help='be more verbose', - ) - parser.add_argument( - '-s', '--socket', - help='path to admin socket file', - ) - parser.add_argument( - 'vars', - nargs='+', - help='variable to watch, section.value', - ) - parser.add_argument( - '-t', '--time', - action='store_true', - default=False, - help='include relative time column', - ) - parser.add_argument( - '--absolute-time', - action='store_true', - default=False, - help='include absolute time column', - ) - args = parser.parse_args() - return args - - -def main(): - ctx = parse_args() - log = logging.getLogger(__name__) - loglevel = logging.INFO - if ctx.verbose: - loglevel = logging.DEBUG - - logging.basicConfig( - level=loglevel, - ) - - log.info('ctx %s', ctx) - - # check schema - (code, raw) = commands.getstatusoutput('./ceph --admin-daemon %s perf schema' % ctx.socket) - schema = json.loads(raw) - - # normalize var list - vars = [] - vartype = {} - for v in ctx.vars: - if v.find('.') < 0: - if v in schema: - for var in schema[v].iterkeys(): - vv = '%s.%s' % (v, var) - vars.append(vv) - vartype[vv] = int(schema[v][var]['type']) - - else: - (sec, var) = v.split('.') - if sec in schema and var in schema[sec]: - vars.append(v) - vartype[v] = int(schema[sec][var]['type']) - else: - log.warning('%s not present in schema', v) - - log.info('vars are %s', vars) - log.info('vartype is %s', vartype) - - varline = '#' - if ctx.time or ctx.absolute_time: - varline = varline + ' %8s' % 'time' - for v in vars: - varline = varline + (' %8s' % v) - - print_count = 0 - prev = None - start = time.time() - while True: - if print_count % 10 == 0: - print(varline) - print_count += 1 - - (code, raw) = commands.getstatusoutput('./ceph --admin-daemon %s perf dump' % ctx.socket) - perfstats = json.loads(raw) - if prev is None: - prev = perfstats - - vline = ' ' - now = time.time() - if ctx.absolute_time: - vline = '%10d' % int(now) - elif ctx.time: - vline = '%10d' % int(now - start) - - for v in vars: - (sec, var) = v.split('.') - val = 0 - if sec in perfstats and var in perfstats[sec]: - - formatstr = '%' + str(max(len(v), 8)) - if vartype[v] & 1: - formatstr = formatstr + 'f' - else: - formatstr = formatstr + 'd' - - val = 0 - if vartype[v] & 4: - den = (perfstats[sec][var]['avgcount'] - perfstats[sec][var]['avgcount']) - if den > 0: - val = (perfstats[sec][var]['sum'] - prev[sec][var]['sum']) / den - elif vartype[v] & 8: - val = perfstats[sec][var] - prev[sec][var] - else: - val = perfstats[sec][var] - - vline = vline + ' ' + (formatstr % val) - print(vline) - - prev = perfstats - time.sleep(1) - - -main() diff --git a/src/script/permute b/src/script/permute deleted file mode 100755 index 63dd910a1f91..000000000000 --- a/src/script/permute +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/perl - -use strict; -my @lines = <>; - -while (@lines) { - my $r = int rand(scalar(@lines)); - print $lines[$r]; - splice(@lines, $r, 1); -} diff --git a/src/script/plot.pl b/src/script/plot.pl deleted file mode 100755 index 77bd387ec4ac..000000000000 --- a/src/script/plot.pl +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my $dir = shift @ARGV; -my ($type,$subtype) = split(/\./, shift @ARGV); -$subtype = '.' . $subtype if $subtype; - -# list files -my @files; -my %fields; -for my $f (`ls $dir/$type*$subtype`) { - chomp $f; - next unless $f =~ /$type(\d+)$subtype$/; - push(@files, $f); - unless (%fields) { - open(I,$f); - while () { - next unless /^\#/; - my @f = split(/\t/,$_); - for (my $n=1; @f; $n++) { - my $f = shift @f; - $fields{$f} = $n; - #print "$f = $n\n"; - } - last; - } - close I; - } -} -#print "#files @files\n"; - -# get field names -my $var = shift @ARGV; -my $rest = join(' ', @ARGV); - -print "set style data lines\nset grid\n"; -print "set title \"$dir .. $var\"\n"; -if (scalar(@files) > 30) { print "set key off\n"; } -#for my $var (@ARGV) { - my @p; - for my $f (@files) { - my ($lastbit) = $f =~ /\/([^\/]+)$/; - push(@p, "\"$f\" u 1:$fields{$var} $rest t \"$lastbit\""); - } - print "plot " . join(',', @p) . "\n"; -#} -#print "pause 60000\n"; diff --git a/src/script/profonly.pl b/src/script/profonly.pl deleted file mode 100755 index 6a05dec473ca..000000000000 --- a/src/script/profonly.pl +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/perl - -my $rank = shift @ARGV; -my $args = join(' ',@ARGV); -if ($rank == $ENV{MPD_JRANK}) { - $c = "LD_PRELOAD=$ENV{'HOME'}/csl/obsd/src/pmds/gprof-helper.so ./newsyn $args"; -} else { - $c = "./newsyn.nopg $args"; -} - -#print "$rank: $c\n"; -system $c; diff --git a/src/script/runjob.pl b/src/script/runjob.pl deleted file mode 100755 index c432675d3383..000000000000 --- a/src/script/runjob.pl +++ /dev/null @@ -1,341 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Data::Dumper; - - -my $usage = "script/runset.pl [--clean] jobs/some/job blah\n"; - -my $clean; -my $use_srun = 0; -my $nobg = '&'; -my $in = shift || die $usage; -if ($in eq '--clean') { - $clean = 1; - $in = shift || die $usage; -} -if ($in eq '--srun') { - $use_srun = 1; - $in = shift || die $usage; -} -if ($in eq '--nobg') { - $nobg = ''; - $in = shift || die $usage; -} -my $tag = shift || die $usage; -my $fake = shift; - - -my ($job) = $in =~ /^jobs\/(.*)/; -my ($jname) = $job =~ /\/(\w+)$/; -$jname ||= $job; -die "not jobs/?" unless defined $job; -my $out = "log/$job.$tag"; -my $relout = "$job.$tag"; - - -my $cwd = `/bin/pwd`; -chomp($cwd); - - - -print "# --- job $job, tag $tag ---\n"; - - -# get input -my $raw = `cat $in`; -my $sim = eval $raw; -unless (ref $sim) { - print "bad input: $in\n"; - system "perl -c $in"; - exit 1; -} - -# prep output -system "mkdir -p $out" unless -d "$out"; - -open(W, ">$out/in"); -print W $raw; -close W; - -my $comb = $sim->{'_comb'}; -delete $sim->{'_comb'}; -my %filters; -my @fulldirs; - - - -sub reset { - print "reset: restarting mpd in 3 seconds\n"; - system "sleep 3 && (mpiexec -l -n 32 killall newsyn ; restartmpd.sh)"; - print "reset: done\n"; -} - - -if (`hostname` =~ /alc/ && !$use_srun) { - print "# this looks like alc\n"; - $sim->{'_psub'} = 'jobs/alc.tp'; -} - - -sub iterate { - my $sim = shift @_; - my $fix = shift @_ || {}; - my $vary; - my @r; - - my $this; - for my $k (sort keys %$sim) { - #next if $k =~ /^_/; - if (defined $fix->{$k}) { - $this->{$k} = $fix->{$k}; - } - elsif (ref $sim->{$k} eq 'HASH') { - # nothing - } - elsif ($k =~ /^_/ || !(ref $sim->{$k})) { - $this->{$k} = $sim->{$k}; - } - else { - #print ref $sim->{$k}; - if (!(defined $vary)) { - $vary = $k; - } - } - } - - if ($vary) { - #print "vary $vary\n"; - for my $v (@{$sim->{$vary}}) { - $this->{$vary} = $v; - push(@r, &iterate($sim, $this)); - } - } else { - - if ($sim->{'_dep'}) { - my @s = @{$sim->{'_dep'}}; - while (@s) { - my $dv = shift @s; - my $eq = shift @s; - - $eq =~ s/\$(\w+)/"\$this->{'$1'}"/eg; - $this->{$dv} = eval $eq; - #print "$dv : $eq -> $this->{$dv}\n"; - } - } - - push(@r, $this); - } - return @r; -} - - - -sub run { - my $h = shift @_; - - my @fn; - my @filt; - my @vals; - for my $k (sort keys %$sim) { - next if $k =~ /^_/; - next unless ref $sim->{$k} eq 'ARRAY'; - push(@fn, "$k=$h->{$k}"); - push(@vals, $h->{$k}); - next if $comb && $k eq $comb->{'x'}; - push(@filt, "$k=$h->{$k}"); - } - my $keys = join(",", @fn); - $keys =~ s/ /_/g; - my $fn = $out . '/' . $keys; - my $name = $jname . '_' . join('_',@vals); #$tag . '_' . $keys; - - push( @fulldirs, "" . $fn ); - - - # filters - $filters{ join(',', @filt) } = 1; - - - #system "sh $fn/sh.post" if -e "$fn/sh.post";# && !(-e "$fn/.post"); - - if (-e "$fn/.done") { - print "already done.\n"; - return; - } - system "rm -r $fn" if $clean && -d "$fn"; - system "mkdir $fn" unless -d "$fn"; - system "mkdir $fn/out" unless -d "$fn/out"; - - my $e = './newsyn'; - #$e = './tcpsynobfs' if $h->{'fs'} eq 'obfs'; - my $c = "$e"; - $c .= " --mkfs" unless $h->{'_no_mkfs'}; - - for my $k (keys %$h) { - next if $k =~ /^_/; - next if $h->{'_noarg'} && grep {$k eq $_} @{$h->{'_noarg'}}; - next if $h->{'_subst'} && grep {$k eq $_} @{$h->{'_subst'}}; - $c .= " --$k $h->{$k}"; - } - - if ($h->{'_custom'}) { - if ($h->{'_subst'}) { - for my $var (@{$h->{'_subst'}}) { - $h->{'_custom'} =~ s/\$$var/$h->{$var}/g; - } - } - $c .= ' ' . $h->{'_custom'}; - } - - $c .= " --log_name $relout/$keys"; - $c .= " --doutdir log/$relout/$keys/out"; - - my $post = "#!/bin/sh -script/sum.pl -start $h->{'_start'} -end $h->{'_end'} $fn/osd\\* > $fn/sum.osd -script/sum.pl -start $h->{'_start'} -end $h->{'_end'} $fn/mds? $fn/mds?? > $fn/sum.mds -script/sum.pl -start $h->{'_start'} -end $h->{'_end'} $fn/mds*.log > $fn/sum.mds.log -script/sum.pl -start $h->{'_start'} -end $h->{'_end'} $fn/clnode* > $fn/sum.cl -touch $fn/.post -"; - open(O,">$fn/sh.post"); - print O $post; - close O; - - my $killmin; - if ($h->{'_kill_after'}) { - $killmin = 1 + int ($h->{'_kill_after'} / 60); - $killmin = "-t $killmin"; - } - - $c = "bash -c \"ulimit -c 0 ; $c\""; - #$c = "bash -c \"$c\""; - - #print "h keys are " . join(' ', sort keys %$h) . "\n"; - - my $srun = "srun --wait=600 -x jobs/ltest.ignore -l $killmin -N $h->{'_n'} -p ltest"; - my $mpiexec = "mpiexec -l -n $h->{'_n'}"; - my $launch; - if ($use_srun) { - $launch = $srun; - } else { - $launch = $mpiexec; - } - - if ($sim->{'_psub'}) { - # template! - my $tp = `cat $sim->{'_psub'}`; - $tp =~ s/\$CWD/$cwd/g; - $tp =~ s/\$NAME/$name/g; - $tp =~ s/\$NUM/$h->{'_n'}/g; - $tp =~ s/\$OUT/$fn\/o/g; - $tp =~ s/\$DONE/$fn\/.done/g; - $tp =~ s/\$CMD/$c/g; - open(O,">$out/$name"); - print O $tp; - close O; - print "\npsub $out/$name\n"; - return; - } else { - # run - my $cmd = "\n$launch $c > $fn/o && touch $fn/.done";# - #my $cmd = "\n$launch $c > $fn/o ; touch $fn/.done"; - print "$cmd $nobg\n"; - my $r = undef; - unless ($fake) { - if ($sim->{'_pre'}) { - print "pre: $launch $sim->{'_pre'}\n"; - system "$launch $sim->{'_pre'}"; - } - $r = system $cmd; - if ($sim->{'_post'}) { - print "post: $launch $sim->{'_post'}\n"; - system "$launch $sim->{'_post'}"; - } - if ($r) { - print "r = $r\n"; - #&reset; - } - system "sh $fn/sh.post"; - } - return $r; - } -} - - - -my @r = &iterate($sim); -my $n = scalar(@r); -my $c = 1; -my %r; -my $nfailed = 0; -for my $h (@r) { - my $d = `date`; - chomp($d); - $d =~ s/ P.T .*//; - print "# === $c/$n"; - print " ($nfailed failed)" if $nfailed; - print " $d: "; - my $r = &run($h); - - if (!(defined $r)) { - # already done - } else { - if ($r) { - $nfailed++; - } - print "sleep $h->{'_sleep'}\n"; - sleep $h->{'_sleep'}; - } - - $c++; -} -print "$nfailed failed\n"; - - -my @comb; -if ($comb) { - my $x = $comb->{'x'}; - my @vars = @{$comb->{'vars'}}; - - print "\n\n# post\n"; - for my $p (@fulldirs) { - print "sh $p/sh.post\n"; - } - - my @filters = sort keys %filters; - my $cmd = "script/comb.pl $x @vars - @fulldirs - @filters > $out/c"; - print "$cmd\n"; - open(O,">$out/comb"); - print O "$cmd\n"; - close O; - system $cmd; - - print "\n\n"; - - my $plot; - $plot .= "set data style linespoints;\n"; - my $s = 2; - for my $v (@vars) { - my $c = $s; - $s++; - my @p; - for my $f (@filters) { - my $t = $f; - if ($comb->{'maptitle'}) { - for my $a (keys %{$comb->{'maptitle'}}) { - my $b = $comb->{'maptitle'}->{$a}; - $t =~ s/$a/$b/; - } - } - push (@p, "\"$out/c\" u 1:$c t \"$t\"" ); - $c += scalar(@vars); - } - $plot .= "# $v\nplot " . join(", ", @p) . ";\n\n"; - } - print $plot; - open(O,">$out/plot"); - print O $plot; - close O; -} - diff --git a/src/script/runset.pl b/src/script/runset.pl deleted file mode 100755 index 6805a2c9cf04..000000000000 --- a/src/script/runset.pl +++ /dev/null @@ -1,374 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Data::Dumper; - -=item sample input file - -# hi there -{ - # startup - 'n' => 30, # mpi nodes - 'sleep' => 10, # seconds between runs - 'nummds' => 1, - 'numosd' => 8, - 'numclient' => 400,#[10, 50, 100, 200, 400], - - # parameters - 'fs' => [ 'fakestore' ], - 'until' => 150, # --syn until $n ... when to stop clients - 'writefile' => 1, - 'writefile_size' => [ 4096, 65526, 256000, 1024000, 2560000 ], - 'writefile_mb' => 1000, - - 'custom' => '--tcp_skip_rank0 --osd_maxthreads 0'; - - # for final summation (script/sum.pl) - 'start' => 30, - 'end' => 120, - - '_psub' => 'alc.tp' # switch to psub mode! -}; - -=cut - -my $usage = "script/runset.pl [--clean] jobs/some/job blah\n"; - -my $clean; -my $use_srun; -my $nobg = '&'; -my $in = shift || die $usage; -if ($in eq '--clean') { - $clean = 1; - $in = shift || die $usage; -} -if ($in eq '--srun') { - $use_srun = 1; - $in = shift || die $usage; -} -if ($in eq '--nobg') { - $nobg = ''; - $in = shift || die $usage; -} -my $tag = shift || die $usage; -my $fake = shift; - - -my ($job) = $in =~ /^jobs\/(.*)/; -my ($jname) = $job =~ /\/(\w+)$/; -$jname ||= $job; -die "not jobs/?" unless defined $job; -my $out = "log/$job.$tag"; -my $relout = "$job.$tag"; - - -my $cwd = `/bin/pwd`; -chomp($cwd); - - - -print "# --- job $job, tag $tag ---\n"; - - -# get input -my $raw = `cat $in`; -my $sim = eval $raw; -unless (ref $sim) { - print "bad input: $in\n"; - system "perl -c $in"; - exit 1; -} - -# prep output -system "mkdir -p $out" unless -d "$out"; - -open(W, ">$out/in"); -print W $raw; -close W; - -my $comb = $sim->{'comb'}; -delete $sim->{'comb'}; -my %filters; -my @fulldirs; - - - -sub reset { - print "reset: restarting mpd in 3 seconds\n"; - system "sleep 3 && (mpiexec -l -n 32 killall newsyn ; restartmpd.sh)"; - print "reset: done\n"; -} - - -if (`hostname` =~ /alc/ && !$use_srun) { - print "# this looks like alc\n"; - $sim->{'_psub'} = 'jobs/alc.tp'; -} - - -sub iterate { - my $sim = shift @_; - my $fix = shift @_ || {}; - my $vary; - my @r; - - my $this; - for my $k (sort keys %$sim) { - next if $k =~ /^_/; - if (defined $fix->{$k}) { - $this->{$k} = $fix->{$k}; - } - elsif (ref $sim->{$k} eq 'HASH') { - # nothing - } - elsif (!(ref $sim->{$k})) { - $this->{$k} = $sim->{$k}; - } - else { - #print ref $sim->{$k}; - if (!(defined $vary)) { - $vary = $k; - } - } - } - - if ($vary) { - #print "vary $vary\n"; - for my $v (@{$sim->{$vary}}) { - $this->{$vary} = $v; - push(@r, &iterate($sim, $this)); - } - } else { - - if ($sim->{'_dep'}) { - my @s = @{$sim->{'_dep'}}; - while (@s) { - my $dv = shift @s; - my $eq = shift @s; - - $eq =~ s/\$(\w+)/"\$this->{'$1'}"/eg; - $this->{$dv} = eval $eq; - #print "$dv : $eq -> $this->{$dv}\n"; - } - } - - push(@r, $this); - } - return @r; -} - - - -sub run { - my $h = shift @_; - - my @fn; - my @filt; - my @vals; - for my $k (sort keys %$sim) { - next if $k =~ /^_/; - next unless ref $sim->{$k} eq 'ARRAY'; - push(@fn, "$k=$h->{$k}"); - push(@vals, $h->{$k}); - next if $comb && $k eq $comb->{'x'}; - push(@filt, "$k=$h->{$k}"); - } - my $keys = join(",", @fn); - $keys =~ s/ /_/g; - my $fn = $out . '/' . $keys; - my $name = $jname . '_' . join('_',@vals); #$tag . '_' . $keys; - - push( @fulldirs, "" . $fn ); - - - # filters - $filters{ join(',', @filt) } = 1; - - - #system "sh $fn/sh.post" if -e "$fn/sh.post";# && !(-e "$fn/.post"); - if (-e "$fn/.done") { - print "already done.\n"; - return; - } - system "rm -r $fn" if $clean && -d "$fn"; - system "mkdir $fn" unless -d "$fn"; - - my $e = './newsyn'; - #$e = './tcpsynobfs' if $h->{'fs'} eq 'obfs'; - my $c = "$e"; - $c .= " --mkfs" unless $h->{'no_mkfs'}; - $c .= " --$h->{'fs'}" if $h->{'fs'}; - $c .= " --syn until $h->{'until'}" if $h->{'until'}; - - $c .= " --syn writefile $h->{'writefile_mb'} $h->{'writefile_size'}" if $h->{'writefile'}; - $c .= " --syn rw $h->{'rw_mb'} $h->{'rw_size'}" if $h->{'rw'}; - $c .= " --syn readfile $h->{'readfile_mb'} $h->{'readfile_size'}" if $h->{'readfile'}; - $c .= " --syn makedirs $h->{'makedirs_dirs'} $h->{'makedirs_files'} $h->{'makedirs_depth'}" if $h->{'makedirs'}; - - for my $k ('nummds', 'numclient', 'numosd', 'kill_after', - 'osd_maxthreads', 'osd_object_layout', 'osd_pg_layout','osd_pg_bits', - 'mds_bal_rep', 'mds_bal_interval', 'mds_bal_max','mds_decay_halflife', - 'mds_bal_hash_rd','mds_bal_hash_wr','mds_bal_unhash_rd','mds_bal_unhash_wr', - 'mds_cache_size','mds_log_max_len', - 'mds_local_osd', - 'osd_age_time','osd_age', - 'osd_rep', - 'osd_pad_pg_log', - 'osd_balance_reads', - 'tcp_multi_out', - 'client_cache_stat_ttl','client_cache_readdir_ttl', - 'client_oc', - 'fake_osdmap_updates', - 'bdev_el_bidir', - 'file_layout_ssize','file_layout_scount','file_layout_osize','file_layout_num_rep', - 'meta_dir_layout_ssize','meta_dir_layout_scount','meta_dir_layout_osize','meta_dir_layout_num_rep', - 'meta_log_layout_ssize','meta_log_layout_scount','meta_log_layout_osize','meta_log_layout_num_rep') { - $c .= " --$k $h->{$k}" if defined $h->{$k}; - } - - $c .= ' ' . $h->{'custom'} if $h->{'custom'}; - - $c .= " --log_name $relout/$keys"; - - my $post = "#!/bin/sh -script/sum.pl -start $h->{'start'} -end $h->{'end'} $fn/osd\\* > $fn/sum.osd -script/sum.pl -start $h->{'start'} -end $h->{'end'} $fn/mds? $fn/mds?? > $fn/sum.mds -script/sum.pl -start $h->{'start'} -end $h->{'end'} $fn/mds*.log > $fn/sum.mds.log -script/sum.pl -start $h->{'start'} -end $h->{'end'} $fn/clnode* > $fn/sum.cl -touch $fn/.post -"; - open(O,">$fn/sh.post"); - print O $post; - close O; - - my $killmin = 1 + int ($h->{'kill_after'} / 60); - - $c = "bash -c \"ulimit -c 0 ; $c\""; - #$c = "bash -c \"$c\""; - - my $srun = "srun --wait=600 --exclude=jobs/ltest.ignore -l -t $killmin -N $h->{'n'} -p ltest"; - my $mpiexec = "mpiexec -l -n $h->{'n'}"; - my $launch; - if ($use_srun) { - $launch = $srun; - } else { - $launch = $mpiexec; - } - - if ($sim->{'_psub'}) { - # template! - my $tp = `cat $sim->{'_psub'}`; - $tp =~ s/\$CWD/$cwd/g; - $tp =~ s/\$NAME/$name/g; - $tp =~ s/\$NUM/$h->{'n'}/g; - $tp =~ s/\$OUT/$fn\/o/g; - $tp =~ s/\$DONE/$fn\/.done/g; - $tp =~ s/\$CMD/$c/g; - open(O,">$out/$name"); - print O $tp; - close O; - print "\npsub $out/$name\n"; - return; - } else { - # run - my $cmd = "\n$launch $c > $fn/o && touch $fn/.done";# - #my $cmd = "\n$launch $c > $fn/o ; touch $fn/.done"; - print "$cmd $nobg\n"; - my $r = undef; - unless ($fake) { - if ($sim->{'_pre'}) { - print "pre: $launch $sim->{'_pre'}\n"; - system "$launch $sim->{'_pre'}"; - } - $r = system $cmd; - if ($sim->{'_post'}) { - print "post: $launch $sim->{'_post'}\n"; - system "$launch $sim->{'_post'}"; - } - if ($r) { - print "r = $r\n"; - #&reset; - } - system "sh $fn/sh.post"; - } - return $r; - } -} - - - -my @r = &iterate($sim); -my $n = scalar(@r); -my $c = 1; -my %r; -my $nfailed = 0; -for my $h (@r) { - my $d = `date`; - chomp($d); - $d =~ s/ P.T .*//; - print "# === $c/$n"; - print " ($nfailed failed)" if $nfailed; - print " $d: "; - my $r = &run($h); - - if (!(defined $r)) { - # already done - } else { - if ($r) { - $nfailed++; - } - print "sleep $h->{'sleep'}\n"; - sleep $h->{'sleep'}; - } - - $c++; -} -print "$nfailed failed\n"; - - -my @comb; -if ($comb) { - my $x = $comb->{'x'}; - my @vars = @{$comb->{'vars'}}; - - print "\n\n# post\n"; - for my $p (@fulldirs) { - print "sh $p/sh.post\n"; - } - - my @filters = sort keys %filters; - my $cmd = "script/comb.pl $x @vars - @fulldirs - @filters > $out/c"; - print "$cmd\n"; - open(O,">$out/comb"); - print O "$cmd\n"; - close O; - system $cmd; - - print "\n\n"; - - my $plot; - $plot .= "set data style linespoints;\n"; - my $s = 2; - for my $v (@vars) { - my $c = $s; - $s++; - my @p; - for my $f (@filters) { - my $t = $f; - if ($comb->{'maptitle'}) { - for my $a (keys %{$comb->{'maptitle'}}) { - my $b = $comb->{'maptitle'}->{$a}; - $t =~ s/$a/$b/; - } - } - push (@p, "\"$out/c\" u 1:$c t \"$t\"" ); - $c += scalar(@vars); - } - $plot .= "# $v\nplot " . join(", ", @p) . ";\n\n"; - } - print $plot; - open(O,">$out/plot"); - print O $plot; - close O; -} - diff --git a/src/script/smooth.pl b/src/script/smooth.pl deleted file mode 100755 index 6cfbaf60ff92..000000000000 --- a/src/script/smooth.pl +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl - -my $n = shift @ARGV || 2; - -my %v; # t -> [..] -while (<>) { - chomp; - my @l = split(/\t/,$_); - my $t = shift @l; - if (int $t) { - $v{$t} = \@l; - } else { - print "$_\n"; - } -} - -for my $t (sort {$a <=> $b} keys %v) { - my $s = $t - $n/2; - my @v; - my $c = 0; - for (my $a=0; $a < $n; $a++) { - my $x = $t + $a; - next unless ($v{$x}); - my @o = @{$v{$x}}; - #print "$t: $x o @o\n"; - if (@v) { - for (my $y=0; $y<=$#o; $y++) { - $v[$y] += $o[$y]; - } - } else { - @v = @o; - } - #print "$t: $x v @v\n"; - $c++; - } - print "$t"; - for my $sum (@v) { - print "\t" . ($sum / $c); - } - print "\n"; -} diff --git a/src/script/study_find.pl b/src/script/study_find.pl deleted file mode 100755 index 6e6cccdf37c8..000000000000 --- a/src/script/study_find.pl +++ /dev/null @@ -1,224 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my $name = shift @ARGV || die; - -my $nfiles = 0; -my $ndirs = 0; -my $nreg = 0; -my $nhardlinks = 0; -my %nlinks; -my %ino_nlinks; -my %names; -my %dirsize; - -my %fnlen; - -my %hdepth; - -my $bytes; -my $ebytes; - -# -# output generated with -# -# find . -path ./.snapshot -prune -o -exec ls -dilsn --time-style=+%s \{\} \; -# -# find output looks like this: -#4495744 4 drwxrwxrwx 24 0 0 4096 1187290970 . -#2996320 8 drwxr-xr-x 189 0 1000 8192 1186594257 ./jangle -#28378499 4 drwxr-x--x 4 1068885 52673 4096 1162938122 ./jangle/cymcruise -#28378500 4 drwx--S--- 5 1068885 52673 4096 1162938122 ./jangle/cymcruise/Maildir -#28378501 4 drwx------ 2 1068885 52673 4096 1162938122 ./jangle/cymcruise/Maildir/tmp -#28378502 4 drwx------ 2 1068885 52673 4096 1162938122 ./jangle/cymcruise/Maildir/new -#28378503 4 drwx------ 2 1068885 52673 4096 1162938122 ./jangle/cymcruise/Maildir/cur -#28378504 4 -rw-r--r-- 1 1068885 52673 260 943743700 ./jangle/cymcruise/.alias -#999425 4 drwxr-xr-x 92 1125 100 4096 1186523060 . -#999426 0 lrwxrwxrwx 1 0 0 5 1177701093 ./root -> /root -#1015809 4 drwxr-xr-x 4 1289 1000 4096 1174584949 ./andrea -#541007 4 drwxr-xr-x 3 0 0 4096 1173111449 ./andrea/lux -#5014055 4 drwx--S--- 11 70228 51207 4096 1172250346 ./andrea/lux/Maildir - -# dirs we're currently counting in -my %numindir; - -sub finish_dir { - my $curdir = shift @_; - #print "finish_dir $numindir{$curdir} in $curdir\n"; - $dirsize{$numindir{$curdir}}++; - $ndirs++; - delete $numindir{$curdir}; -} - -my $curdir; -while (<>) { - #print; - chomp; - my ($ino, $blah, $mode, $nlink, $uid, $gid, $size, $mtime, @path) = split(/[ ]+/,$_); - my $file = join(' ',@path); - ($file) = split(/ \-\> /, $file); # ignore symlink dest - my @bits = split(/\//, $file); - my $depth = scalar(@bits); - my $f = pop @bits; - my $dir = join('/', @bits); - #print "file = '$file', dir = '$dir', curdir = '$curdir'\n"; - - if ($dir ne $curdir) { - for my $d (keys %numindir) { - #print "? $d vs $dir\n"; - &finish_dir($d) if ($d ne substr($dir, 0, length($d))); - } - $curdir = $dir; - } - - my $esize = 0; - $esize = int (($size-1)/4096)*4096 + 4096 if $size > 0; - $esize += 160; # for the inode? - $bytes += $size; - $ebytes += $esize; - - $nfiles++; - $numindir{$dir}++; - - $hdepth{$depth}++; - - my $fnlen = length($f); - $fnlen{$fnlen}++; - - if ($mode =~ /^d/) { - # find does depth-first search, so assume we descend, so that on empty dir we "back out" above and &finish_dir. - $numindir{$file} = 0; - $curdir = $file; - } else { - $nreg++ if $mode =~ /^f/; - if ($nlink > 1) { - #system "ls -aldi $file"; - $nhardlinks++; - $nlinks{$nlink}++; - $ino_nlinks{$ino} = $nlink; - push(@{$names{$ino}->{$dir}}, $file); - } - } -} -for my $d (keys %numindir) { - &finish_dir($d); -} - - - -my $nsamedir = 0; -open(LOG, ">$name.log"); -my %dirmap; # from dir -> to dir -for my $ino (keys %names) { - print LOG "# $ino\n"; - my @dirs = keys %{$names{$ino}}; - my $insamedir = 1 if scalar(@dirs) == 1; - for my $dir (@dirs) { - print LOG "#\t$dir\n"; - for my $fn (@{$names{$ino}->{$dir}}) { - print LOG "#\t\t$fn\n"; - $nsamedir++ if $insamedir; - } - } - - # stick in dirmap - for (my $i=0; $i<$#dirs; $i++) { - for (my $j=1; $j <= $#dirs; $j++) { - print LOG "# $dirs[$i] <-> $dirs[$j]\n"; - push(@{$dirmap{$dirs[$i]}->{$dirs[$j]}}, $ino); - push(@{$dirmap{$dirs[$j]}->{$dirs[$i]}}, $ino); - } - } -} - - -my $notherinsamedir = 0; -my $notherinsamedirs = 0; -for my $ino (keys %names) { - my @dirs = keys %{$names{$ino}}; - next unless (scalar(@dirs) > 1); - my $n = 0; - my $np = 0; - for (my $i=0; $i<$#dirs; $i++) { - for (my $j=$i+1; $j <= $#dirs; $j++) { - $np++; - if (scalar(@{$dirmap{$dirs[$i]}->{$dirs[$j]}}) > 1 || - scalar(@{$dirmap{$dirs[$j]}->{$dirs[$i]}}) > 1) { - $n++; - #print LOG "# $ino is not alone between $dirs[$i] and $dirs[$j] : @{$dirmap{$dirs[$j]}->{$dirs[$i]}}\n"; - } - } - } - if ($n) { - print LOG "# $ino\tfor $n / $np dir pairs, there is another hl between the same pair of dirs\n"; - $notherinsamedir += $ino_nlinks{$ino}; - $notherinsamedirs += ($n / $np) * $ino_nlinks{$ino}; - } else { - print LOG "# $ino is ALL ALONE\n"; - } -} -close LOG; -$notherinsamedirs = sprintf("%.1f",$notherinsamedirs); - - -sub do_cdf { - my $hash = shift @_; - my $num = shift @_; - my $fn = shift @_; - - open(CDF, ">$fn") if $fn; - print CDF "# $name\n"; - - my $median; - my $sum = 0; - my $p = 0; - my $lastv = 0; - for my $v (sort {$a <=> $b} keys %$hash) { - print CDF "$v\t$hash->{$v}\n"; - $p += $hash->{$v}; - $sum += $hash->{$v} * $v; - if (!(defined $median) && - $p >= ($num/2)) { - $median = $v; - } - } - if ($p != $num) { - warn "uh oh, BUG, $p != $num in cdf/median calculation\n"; - } - my $avg = sprintf("%.2f", $sum/$num); - print CDF "# avg $avg, median $median, sum $sum, num $num\n"; - return ($avg, $median); -} -close DSLOG; - - -# do cdfs -my ($avgdirsize, $mediandirsize) = &do_cdf(\%dirsize, $ndirs, "$name.ds"); -my ($avgfnlen, $medianfnlen) = &do_cdf(\%fnlen, $nfiles, "$name.fnlen"); -my ($avgdepth, $mediandepth) = &do_cdf(\%hdepth, $nfiles, "$name.hdepth"); - - -# stat fs -#my $df = `df $base`; -#my $line = (split(/\n/,$df))[1]; # second line -#my ($kb) = $df =~ /\s+\d+\s+(\d+)/; -my $gb = sprintf("%.1f",($ebytes / 1024 / 1024 / 1024)); - -open(O, ">$name.sum"); - -# final line -my $pad = '# ' . (' ' x (length($name)-2)); -print O "$pad\tgb\tfiles\tdirs\tdsavg\tdsmed\tfnavg\tfnmed\treg\tnl>1\tsmdr\tothers\totherss\tnlink=2\t=3\t=4\t...\n"; -print O "$name\t$gb\t$nfiles\t$ndirs\t$avgdirsize\t$mediandirsize\t$avgfnlen\t$medianfnlen\t$nreg\t$nhardlinks\t$nsamedir\t$notherinsamedir\t$notherinsamedirs"; -my $i = 2; -for (sort {$a <=> $b} keys %nlinks) { - while ($_ < $i) { - print O "\t0"; - } - print O "\t$nlinks{$_}"; - $i = $_ + 1; -} -print O "\n"; - -close O; diff --git a/src/script/study_hardlink_lifetimes.pl b/src/script/study_hardlink_lifetimes.pl deleted file mode 100755 index 012ef6009bb4..000000000000 --- a/src/script/study_hardlink_lifetimes.pl +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my %ns; # parent -> fn -> ino -my %nlink; # num links to each ino -my %since; # when it got its second link - -my @ignore = ('ll_getattr','ll_setattr','ll_forget','ll_fsync','ll_readlink','ll_statfs','ll_opendir','ll_releasedir','ll_flush','ll_release','ll_open','ll_read','ll_write'); - -my $when; - -my $sumage; -my $numage; - -sub unlink { - my ($p,$n) = @_; - my $i = $ns{$p}->{$n}; - my $new = --$nlink{$i}; - if ($new == 1) { - my $age = $when - $since{$i}; - #print "$since{$i} to $when on $i\t$age\n"; - delete $since{$i}; - - $numage++; - $sumage += $age; - - } elsif ($new == 0) { - delete $nlink{$i}; - } - delete $ns{$p}->{$n}; -} - - -my ($sec, $usec, $cmd); -$_ = <>; -while (1) { - # read trace record - chomp; - last unless $_ eq '@'; - - chomp(my $sec = <>); - chomp(my $usec = <>); - $when = sprintf("%d.%06d",$sec,$usec);# + ($usec / 1000000); - #$when = "$sec.$usec"; - - chomp($cmd = <>); - - #print "cmd $cmd\n"; - - if ($cmd eq 'll_lookup') { - chomp(my $p = <>); - chomp(my $n = <>); - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - } - - elsif ($cmd eq 'll_create') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; <>; <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_mknod') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_mkdir') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_symlink') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_link') { - chomp(my $i = <>); - chomp(my $p = <>); - chomp(my $n = <>); - $ns{$p}->{$n} = $i; - if (++$nlink{$i} == 2) { - $since{$i} = $when; - } - } - elsif ($cmd eq 'll_unlink' || - $cmd eq 'll_rmdir') { - chomp(my $p = <>); - chomp(my $n = <>); - &unlink($p, $n); - } - elsif ($cmd eq 'll_rename') { - chomp(my $p = <>); - chomp(my $n = <>); - chomp(my $np = <>); - chomp(my $nn = <>); - if ($ns{$np}->{$nn}) { - &unlink($np, $nn); - } - $ns{$np}->{$nn} = $ns{$p}->{$n}; - delete $ns{$p}->{$n}; - } - - # skip to @ - while (<>) { - last if $_ eq "@\n"; - print "$cmd: $_" - unless grep {$_ eq $cmd} @ignore; - } -} - -print "num $numage .. sum $sumage .. avg lifetime " . ($sumage / $numage) . "\n"; - -# dump hard link inos -for my $ino (keys %nlink) { - next if $nlink{$ino} < 2; - print "$ino\t$nlink{$ino}\n"; -} diff --git a/src/script/study_lookups.pl b/src/script/study_lookups.pl deleted file mode 100644 index 7a0784f3210a..000000000000 --- a/src/script/study_lookups.pl +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my @buckets = (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096); - -my %dir_miss; # dir(ino) -> last lookup miss -my %dir_has; # ino -> dentries we have - - -my %ns; # parent -> fn -> ino -my %nlink; # num links to each ino -my %since; # when it got its second link - -my @ignore = ('ll_getattr','ll_setattr','ll_forget','ll_fsync','ll_readlink','ll_statfs','ll_opendir','ll_releasedir','ll_flush','ll_release','ll_open','ll_read','ll_write'); - -my $when; - -my $sumage; -my $numage; - -sub unlink { - my ($p,$n) = @_; - my $i = $ns{$p}->{$n}; - my $new = --$nlink{$i}; - if ($new == 1) { - my $age = $when - $since{$i}; - #print "$since{$i} to $when on $i\t$age\n"; - delete $since{$i}; - - $numage++; - $sumage += $age; - - } elsif ($new == 0) { - delete $nlink{$i}; - } - delete $ns{$p}->{$n}; -} - - -my ($sec, $usec, $cmd); -$_ = <>; -while (1) { - # read trace record - chomp; - last unless $_ eq '@'; - - chomp(my $sec = <>); - chomp(my $usec = <>); - $when = sprintf("%d.%06d",$sec,$usec);# + ($usec / 1000000); - #$when = "$sec.$usec"; - - chomp($cmd = <>); - - #print "cmd $cmd\n"; - - if ($cmd eq 'll_lookup') { - chomp(my $p = <>); - chomp(my $n = <>); - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - } - - elsif ($cmd eq 'll_create') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; <>; <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_mknod') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_mkdir') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_symlink') { - chomp(my $p = <>); - chomp(my $n = <>); - <>; - chomp(my $r = <>); - $ns{$p}->{$n} = $r; - $nlink{$r} = 1; - } - elsif ($cmd eq 'll_link') { - chomp(my $i = <>); - chomp(my $p = <>); - chomp(my $n = <>); - $ns{$p}->{$n} = $i; - if (++$nlink{$i} == 2) { - $since{$i} = $when; - } - } - elsif ($cmd eq 'll_unlink' || - $cmd eq 'll_rmdir') { - chomp(my $p = <>); - chomp(my $n = <>); - &unlink($p, $n); - } - elsif ($cmd eq 'll_rename') { - chomp(my $p = <>); - chomp(my $n = <>); - chomp(my $np = <>); - chomp(my $nn = <>); - if ($ns{$np}->{$nn}) { - &unlink($np, $nn); - } - $ns{$np}->{$nn} = $ns{$p}->{$n}; - delete $ns{$p}->{$n}; - } - - # skip to @ - while (<>) { - last if $_ eq "@\n"; - print "$cmd: $_" - unless grep {$_ eq $cmd} @ignore; - } -} - -print "num $numage .. sum $sumage .. avg lifetime " . ($sumage / $numage) . "\n"; - -# dump hard link inos -for my $ino (keys %nlink) { - next if $nlink{$ino} < 2; - print "$ino\t$nlink{$ino}\n"; -} diff --git a/src/script/sum.pl b/src/script/sum.pl deleted file mode 100755 index 92ef9a9b222a..000000000000 --- a/src/script/sum.pl +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/perl - -use strict; -my $starttime = 1; -my $endtime = -1; - -my $avgrows = 0; - -while ($ARGV[0] =~ /^-/) { - $_ = shift @ARGV; - if ($_ eq '-avg') { - $avgrows = 1; - } - elsif ($_ eq '-start') { - $starttime = shift @ARGV; - } - elsif ($_ eq '-end') { - $endtime = shift @ARGV; - } - else { - die "i don't understand arg $_"; - } -} -my @files = @ARGV; - -if (scalar(@files) == 1 && $files[0] =~ /\*/) { - my ($dir, $pat) = $files[0] =~ /^(.*)\/([^\/]+)$/; - @files = (); - $pat =~ s/\*//; -# print "dir $dir pat $pat\n"; - opendir(D,"$dir"); - for my $f (readdir(D)) { - # print "$f\n"; - next unless $f =~ /^$pat/; - push(@files, "$dir/$f"); - } - closedir(D); - -# print "files = @files\n"; -} - -my @data; -for my $f (@files) { - open(I,$f); - push( @data, ); - close I; -} - -my %sum; # time -> name -> val -my %col; # colnum -> name .. colnums start at 0 (time doesn't count) -my %min; -my %max; -my %avg; -my %tcount; -my $files; -for (@data) { - chomp; - my @r = split(/\s+/,$_); - my $r = shift @r; - - # column headings? - if ($r =~ /^\#/) { - my $num = 0; - while (my $name = shift @r) { - $col{$num} = $name; - $num++; - } - next; - } - - next unless int $r; - next if $r < $starttime; - next if $endtime > 0 && $r > $endtime; - - $tcount{$r}++; - $files = $tcount{$r} if $tcount{$r} > $files; - #print "$r: @r\n"; - my $i = 0; - while (@r) { - my $v = shift @r; - $sum{$r}->{$col{$i}} += $v; # if $v > 0; - - $min{$col{$i}} = $v - if ($min{$col{$i}} > $v || !(defined $min{$col{$i}})); - $max{$col{$i}} = $v - if ($max{$col{$i}} < $v); - - $avg{$col{$i}} += $v; - $i++; - } -} - -## dump -my @c = sort {$a <=> $b} keys %col; -# cols -print join("\t",'#', map { $col{$_} } @c) . "\n"; -my $n = 0; -for my $k (sort {$a <=> $b} keys %sum) { - if ($avgrows) { - print join("\t",$k, #map int, - map { $sum{$k}->{$col{$_}}/$tcount{$k} } @c ) . "\n"; - } else { - print join("\t",$k, map { $sum{$k}->{$col{$_}} } @c ) . "\n"; - } - $n++; -} - -my $rows = $n || 1; -#my $files = $tcount{$starttime}; -my %avgval; - -## devt -#warn "rows $rows, files $files\n"; -my %avgvalvart; # std dev of each col avg, over time -for my $k (keys %avg) { - my $av = $avgval{$k} = $avg{$k} / ($rows*$files); - - my $var = 0.0; - for my $t (sort {$a <=> $b} keys %sum) { - my $a = $sum{$t}->{$k} / $files; - $var += ($a - $av) * ($a - $av); - } - - $avgvalvart{$k} = $var / $rows; -} - - - - -print "\n"; -print join("\t",'#', map { $col{$_} } @c) . "\n"; -print join("\t", '#minval', map { $min{$col{$_}} } @c ) . "\n"; -print join("\t", '#maxval', map { $max{$col{$_}} } @c ) . "\n"; -print join("\t", '#rows', map { $rows } @c) . "\n"; -print join("\t", '#files', map { $files } @c) . "\n"; -print join("\t", '#sum', - map { $avg{$col{$_}} } @c ) . "\n"; -print join("\t", '#avgval', #map int, - map { $avgval{$col{$_}} } @c ) . "\n"; -# map { ($rows*$files) ? ($_ / ($rows*$files)):0 } map { $avg{$col{$_}} } @c ) . "\n"; - -print join("\t", '#avgvalvart', - map { $avgvalvart{$col{$_}} } @c ) . "\n"; -print join("\t", '#avgvaldevt', - map { sqrt($_) } map { $avgvalvart{$col{$_}} } @c ) . "\n"; - -print join("\t", '#avgsum', #map int, - map { $_ / $rows } map { $avg{$col{$_}} } @c ) . "\n";