⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 make-tapestry-rrk-graph.pl

📁 基于chord算法的p2p文件系统。A p2p file system based on chord.
💻 PL
字号:
#!/usr/bin/perl -wuse strict;# collapse each log into one data point, print to STDOUTmy @logs = @ARGV;my %starts = ();my $bucket_factor = 5000;foreach my $log (@logs) {    if( !( -f $log ) ) {	print STDERR "$log is not a file, skipping.\n";	next;    }    my $base = 0;     my $redun = 0;    my $rln = 0;    my $stabtimer = 0;    if( $log =~ /-(\d+)-(\d+)-(\d+)-(\d+).dat$/ ) {	$base = $1;	$redun = $2;	$rln = $3;	$stabtimer = $4;    } else {	print STDERR "bad log name $log\n";    }    open( LOG, "<$log" ) or die( "Couldn't open $log" );    my %correct_lat = ();    my %incorrect_lat = ();    my %failed_lat = ();    my %lives = ();    my %joinstarts = ();    while(<LOG>) {	if( /(\d+) \d+ [\w\-]+ (\d) (\d) -?(\d+) (\d+) .+ .+ .+ (\d+)/ ) {	    my $time = $1;	    my $complete = $2;	    my $correct = $3;	    my $hops = $4;	    my $failures = $5;	    my $start = $6;	    my $lats;	    my $key = int( $start/$bucket_factor );	    $starts{$key} = 1;	    if( $complete eq "1" ) {		if( $correct eq "1" ) {		    if( !defined $correct_lat{ $key } ) {			$correct_lat{ $key } = "";		    }		    $correct_lat{ $key } .= "$time ";		} else {		    if( !defined $incorrect_lat{ $key } ) {			$incorrect_lat{ $key } = "";		    }		    $incorrect_lat{ $key } .= "$time ";		}	    } else {		if( !defined $failed_lat{ $key } ) {		    $failed_lat{ $key } = "";		}		$failed_lat{ $key } .= "$time ";	    }	} elsif( /^joinstart (\d+) (\d+)/ ) {	    $joinstarts{$1} = $2;	} elsif( /^join (\d+) (\d+)/ ) {	    my $key = int( $2/$bucket_factor );#	    $starts{$key} = 1;	    if( !defined $lives{$key} ) {		$lives{$key} = 0;	    }	    $lives{$key}++;	    $joinstarts{$1} = 0;	} elsif( /^crash (\d+) (\d+) (\d)/ ) {	    my $key = int( $2/$bucket_factor );#	    $starts{$key} = 1;	    if( !defined $lives{$key} ) {		$lives{$key} = 0;	    }	    if( $3 eq "1" ) {		$lives{$key}--;	    }	    $joinstarts{$1} = 0;	} else {	    # nothing	}    }    close( LOG );    foreach my $k (keys(%joinstarts)) {	if( $joinstarts{$k} ) {#	    print "joinfail: $k " . $joinstarts{$k} . "\n";	}    }    $log =~ s/\.dat/\-rrk\.dat/;        open( LOG, ">$log" ) or die( "Couldn't open $log" );	    print LOG "# complete% correct% ave_lat count num_live\n";     my $currlive = 0;    foreach my $t (sort {$a <=> $b} keys(%starts)) {	# for each key, figure out the completed and correctness lines,	# as well as average latency		my $corr = $correct_lat{$t};	if( !defined $corr ) {	    $corr = "";	}	my $incorr = $incorrect_lat{$t};	if( !defined $incorr ) {	    $incorr = "";	}	my $fail = $failed_lat{$t};	if( !defined $fail ) {	    $fail = "";	}	my @corrs = split( /\s+/, $corr );	my @incorrs = split( /\s+/, $incorr );	my @fails = split( /\s+/, $fail );	my $total = ($#corrs+1) + ($#incorrs+1) + ($#fails+1);	my $comper = (($#corrs+1) + ($#incorrs+1))/$total;	my $corrper = ($#corrs+1)/(($#corrs+1) + ($#incorrs+1));	my $tot_lat = 0;	foreach my $l (@corrs) {	    $tot_lat += $l;	}	foreach my $l (@incorrs) {	    $tot_lat += $l;	}	foreach my $l (@fails) {	    $tot_lat += $l;	}	my $avlat = $tot_lat/$total;	if( defined $lives{$t} ) {	    $currlive += $lives{$t};	}	print LOG "" . ($t*$bucket_factor) . " $comper $corrper $avlat $total $currlive\n";    }        close( LOG );    # gnuplot it    my $gp = "/tmp/rrk$$.gnuplot";    open( GP, ">$gp" ) or die( "couldn't open $gp" );    my $eps = $log;    $eps =~ s/dat/eps/;    print GP <<End;set terminal postscript color "Times-Roman" 22set output "$eps"set ylabel "Percent"set y2label "average latency"set title "Tapestry - 1024 nodes - 5 retries - ($base,$redun,$rln,$stabtimer)"set xlabel "Time"set yrange [0:1]set y2ticsset ytics nomirrorplot "$log" using (\$1/1000):(\$2) t "% Complete" with lines, \\     "$log" using (\$1/1000):(\$3) t "% Correct" with lines, \\     "$log" using (\$1/1000):(\$4)  axes x1y2 t "Ave Latency" with linesEnd    close( GP );    system( "gnuplot $gp; rm -f $gp" ) and die( "Couldn't do it" );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -