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

📄 merge-tapestry-dats-perinc.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 $perinc_low = shift(@ARGV);my $perinc_high = shift(@ARGV);my @logs = @ARGV;#my @stats = qw( ping repair );my @stats = qw( join nodelist mc ping backpointer mcnotify nn repair lookup );foreach my $log (@logs) {    if( !( -f $log ) ) {	print STDERR "$log is not a file, skipping.\n";	next;    }    open( LOG, "<$log" ) or die( "Couldn't open $log" );    print STDERR "$log\n";    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;    }    my $total_time = 0;    my $total_hops = 0;    my $total_failures = 0;    my $num_lookups = 0;    my $total_msgs = 0;    my $num_incorrect = 0;    my @rtlevels;    my @rtcounts;    while(<LOG>) {	if( /(\d+) \d+ [\w\-]+ (\d) (\d) -?(\d+) (\d+) .+ .+ .+/ ) {	    my $time = $1;	    my $complete = $2;	    my $correct = $3;	    my $hops = $4;	    my $failures = $5;	    $total_time += $time;	    $total_hops += $hops;	    $total_failures += $failures;	    $num_lookups++;	    if( !($complete eq "1" and $correct eq "1") ) { 		$num_incorrect++;	    }	} elsif( /(\d): average rtt=([\d\.]+)/ ) {	    if( !defined $rtlevels[$1] ) {		$rtlevels[$1] = 0;		$rtcounts[$1] = 0;	    }	    $rtlevels[$1] += $2;	    $rtcounts[$1]++;	} elsif( /(.+) (\d+) \d+$/ ) {	    my $stat = $1;	    my $msgs = $2;	    if( grep( /$stat/, @stats ) ) {		$total_msgs += $msgs;	    }	} elsif( /average lookup latency: ([\d\.]+)$/ ) {	    $num_lookups = -1;	    $total_time = $1;	} elsif( /average hops: ([\d\.]+)$/ ) {	    $num_lookups = -1;	    $total_hops = $1;	} elsif( /success rate: ([\d\.]+)$/ ) {	    $num_lookups = -1;	    $num_incorrect = $1;	} else {#	    die( "unrecognized line: $_" );	    next;	}    }    my $av_hop = $total_hops/$num_lookups;    my $av_time = $total_time/$num_lookups;    my $av_fail = $total_failures/$num_lookups;    my $succ_rate = (1-$num_incorrect/$num_lookups);    if( $num_lookups == -1 ) {	$av_hop = $total_hops;	$av_time = $total_time;	$succ_rate = $num_incorrect;    }    # only print it if this is an acceptable incorrectness rate#    if( ($num_incorrect*100/$num_lookups) > $perinc_low and#	($num_incorrect*100/$num_lookups) <= $perinc_high ) {	print "\# ";	for( my $i = 0; $i <= $#rtlevels; $i++ ) {	    print "$i:" . ($rtlevels[$i]/$rtcounts[$i]) . " ";	}	print "\n\# $base $redun $rln $stabtimer:\n";	print "$total_msgs $av_time $av_hop " . 	    " $succ_rate $av_fail $num_lookups\n";#    }    close( LOG );}

⌨️ 快捷键说明

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