Home | History | Annotate | Download | only in benchlog
      1 #!/usr/bin/perl
      2 # XXX
      3 
      4 sub table() {
      5 	my ($name) = @_;
      6 	print <<'EOF';
      7 <table border=0>
      8 <tr><th>System</th><th>PCRE</th><th>RE2</th></tr>
      9 EOF
     10 	foreach my $sys (@sys) {
     11 		my $ns_pcre = $data{$sys}->{sprintf($name, "PCRE")}->{'ns/op'};
     12 		my $ns_re2 = $data{$sys}->{sprintf($name, "RE2")}->{'ns/op'};
     13 		printf "<tr><td>%s</td><td>%.1f s</td><td>%.1f s</td></tr>\n", $sysname{$sys}, $ns_pcre/1000., $ns_re2/1000.;
     14 	}
     15 	print <<'EOF';
     16 <tr height=5><td colspan=3></td></tr>
     17 </table>
     18 EOF
     19 }
     20 
     21 @sizes = (
     22 	"8", "16", "32", "64", "128", "256", "512",
     23 	"1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", "512K",
     24 	"1M", "2M", "4M", "8M", "16M"
     25 );
     26 
     27 %color = (
     28 	"PCRE" => "0.7 0 0",
     29 	"RE2" => "0 0 1",
     30 );
     31 
     32 $ngraph = 0;
     33 
     34 sub graph() {
     35 	my ($name) = @_;
     36 	
     37 	my $sys = "wreck";
     38 	my $base = sprintf("regexp3g%d", ++$ngraph);
     39 
     40 	open(JGR, ">$base.jgr") || die "open >$base.jgr: $!";
     41 	printf JGR "bbox -20 -12 392 95\n";
     42 	printf JGR "newgraph clip x_translate 0.25 y_translate 0.25\n";
     43 	$ymax = 0;
     44 	%lastx = ();
     45 	%lasty = ();
     46 	foreach my $who ("PCRE", "RE2") {
     47 		printf JGR "newcurve pts\n";
     48 		for(my $i=0; $i<@sizes; $i++) {
     49 			my $key = sprintf("%s%s/%s", $name, $who, $sizes[$i]);
     50 			my $val = $data{$sys}->{$key}->{'MB/s'};
     51 			next if !defined($val);
     52 			if($val > $ymax) {
     53 				$ymax = $val;
     54 			}
     55 			$lastx{$who} = $i;
     56 			$lasty{$who} = $val;
     57 			printf JGR "$i %f (* %s *)\n", $val, $key;
     58 		}
     59 		my $color = $color{$who};
     60 		printf JGR "marktype none color $color linethickness 2 linetype solid label : $who\n";
     61 	}
     62 	my $n = @sizes;
     63 	printf JGR "xaxis min -1 max $n size 5 label : text size (bytes)\n";
     64 	printf JGR "  no_auto_hash_marks hash_labels fontsize 9\n";
     65 	for($i=0; $i<@sizes; $i+=3) {
     66 		printf JGR "  hash_at $i hash_label at $i : $sizes[$i]\n";
     67 	}
     68 	my $y = 1;
     69 	while(10*$y <= $ymax) {
     70 		$y = 10*$y;
     71 	}
     72 	for($i=2; $i<=10; $i++) {
     73 		if($i*$y > $ymax) {
     74 			$y = $i*$y;
     75 			last;
     76 		}
     77 	}
     78 	foreach my $who ("PCRE", "RE2") {
     79 		$x1 = $lastx{$who};
     80 		$y1 = $lasty{$who};
     81 		$x1 *= 1.01;
     82 		my $v = "vjc";
     83 		if($y1 < 0.05 * $y) {
     84 			$v = "vjb";
     85 			$y1 = 0.05 * $y;
     86 		}
     87 		printf JGR "newstring x $x1 y $y1 hjl $v : $who\n";
     88 	}
     89 	printf JGR "yaxis min 0 max $y size 1 label : speed (MB/s)\n";
     90 	printf JGR "  hash_labels fontsize 9\n";
     91 	# printf JGR "legend defaults font Times-Roman fontsize 10 x 0 y $y hjl vjt\n";
     92 
     93 	system("jgraph $base.jgr >$base.eps"); # die "system: $!";
     94 	system("gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dEPSCrop -sDEVICE=png16m -r100 -sOutputFile=$base.png -dBATCH -dQUIT -dQUIET -dNOPAUSE $base.eps");
     95 	
     96 	printf "<img src=$base.png>\n"
     97 	
     98 }
     99 
    100 sub skip() {
    101 	while(<>) {
    102 		if(/^<!-- -->/) {
    103 			print;
    104 			last;
    105 		}
    106 	}
    107 }
    108 
    109 @sys = ("r70", "c2", "wreck", "mini");
    110 %sysname = (
    111 	"r70" => "AMD Opteron 8214 HE, 2.2 GHz",
    112 	"c2" => "Intel Core2 Duo E7200, 2.53 GHz",
    113 	"wreck" => "Intel Xeon 5150, 2.66 GHz (Mac Pro)",
    114 	"mini" => "Intel Core2 T5600, 1.83 GHz (Mac Mini)",
    115 );
    116 
    117 %func = (
    118 	"table" => \&table,
    119 	"graph" => \&graph,
    120 	
    121 );
    122 
    123 foreach my $sys (@sys) {
    124 	open(F, "benchlog.$sys") || die "open benchlog.$sys: $!";
    125 	my %sysdat;
    126 	while(<F>) {
    127 		if(/^([A-Za-z0-9_\/]+)\s+(\d+)\s+(\d+) ns\/op/) {
    128 			my %row;
    129 			$row{"name"} = $1;
    130 			$row{"iter"} = $2;
    131 			$row{"ns/op"} = $3;
    132 			if(/([\d.]+) MB\/s/){
    133 				$row{"MB/s"} = $1;
    134 			}
    135 			$sysdat{$row{"name"}} = \%row;
    136 		}
    137 	}
    138 	close F;	
    139 	$data{$sys} = \%sysdat;
    140 }
    141 
    142 while(<>) {
    143 	print;
    144 	if(/^<!-- benchlog (\w+) -->/) {
    145 		$func{$1}();
    146 		skip();
    147 		next;
    148 	}
    149 	if(/^<!-- benchlog (\w+) ([%\w]+) -->/) {
    150 		$func{$1}($2);
    151 		skip();
    152 		next;
    153 	}
    154 }
    155 
    156