diff options
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/test/benchmark-report')
-rw-r--r-- | debian/htdig/htdig-3.2.0b6/test/benchmark-report | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/test/benchmark-report b/debian/htdig/htdig-3.2.0b6/test/benchmark-report new file mode 100644 index 00000000..20de00d5 --- /dev/null +++ b/debian/htdig/htdig-3.2.0b6/test/benchmark-report @@ -0,0 +1,290 @@ +# +# Part of the ht://Dig package <http://www.htdig.org/> +# Copyright (c) 1999-2004 The ht://Dig Group +# For copyright details, see the file COPYING in your distribution +# or the GNU Library General Public License (LGPL) version 2 or later +# <http://www.gnu.org/copyleft/lgpl.html> +# +# +# Use the result from WordMonitor (--input=file) and generate a report in +# benchmark/<--output=name>-YYYY-MM-DD/index.html. +# If --comment='bla bla' is provided it is copied in the comment.txt file. +# +use strict; +use Getopt::Long; +use File::Path; +use POSIX qw(strftime); + +my($report) = "unknown"; +my($verbose); +my($comment) = ""; +my($dir); + +sub main { + my($file) = "monitor.out"; + + GetOptions("input=s" => \$file, + "output=s" => \$report, + "comment=s" => \$comment, + "verbose=i" => \$verbose, + ); + + my($timestamp) = strftime("%Y-%m-%d", localtime); + $dir = "benchmark/$report-$timestamp"; + if(-d $dir) { + print STDERR "directory $dir exists, will not override: abort\n"; + exit(1); + } + mkpath($dir, 0, 0777) or die "cannot mkdirp $dir : $!"; + my($cmds) = "$dir/README"; + open(CMDS, ">$cmds") or die "cannot open $cmds for writing : $!"; + report(build($file)); + close(CMDS); + my($file) = "$dir/monitor.rrd"; + unlink($file) or die "cannot unlink $file : $!"; +} + +sub report { + my($started, $finished, @fields) = @_; + + my($file) = "$dir/config.html"; + open(FILE, ">$file") or die "cannot open $file for writing : $!"; + print FILE "<body bgcolor=#ffffff>\n<pre>"; + close(FILE); + run("uname -a >> $file"); + run("cat /proc/cpuinfo >> $file") if(-f "/proc/cpuinfo"); + run("cat /proc/meminfo >> $file") if(-f "/proc/meminfo"); + + $file = "$dir/comment.html"; + open(FILE, ">$file") or die "cannot open $file for writing : $!"; + print FILE "<body bgcolor=#ffffff>\n<pre>"; + if(!$comment) { + print FILE "No comment\n"; + } else { + print FILE $comment; + } + close(FILE); + + # + # Generate a graph for each value + # + my(%vlabel) = ( + 'Write' => 'Pages', + 'Read' => 'Pages', + 'P_IBTREE' => 'Pages', + 'P_LBTREE' => 'Pages', + 'P_UNKNOWN' => 'Pages', + 'Put' => 'Put', + 'Get__0_' => 'Get', + 'Get__NEXT_' => 'Get', + 'Get__SET_RANGE_' => 'Get', + 'Get__Other_' => 'Get', + 'LEVEL' => 'Level', + 'PGNO' => 'Pages', + 'CMP' => 'Compare', + ); + my(%hlabel) = ( + 'Write' => 'Write/second', + 'Read' => 'Read/second', + 'P_IBTREE' => 'Internal B-Tree nodes read + write / second', + 'P_LBTREE' => 'Leaf B-Tree nodes read + write / second', + 'P_UNKNOWN' => 'Unknown pages read + write / second', + 'Put' => 'Put / second', + 'Get__0_' => 'Get(0) / second', + 'Get__NEXT_' => 'Get(DB_NEXT) / second', + 'Get__SET_RANGE_' => 'Get(DB_SET_RANGE) / second', + 'Get__Other_' => 'Get(???) / second', + 'LEVEL' => 'Height of the B-Tree', + 'PGNO' => 'Size of the B-Tree in pages', + 'CMP' => 'Key compare / second', + ); + + my(@graphs); + my($field); + foreach $field (@fields) { + my($image) = "$dir/$field.gif"; + my($hlabel) = exists($hlabel{$field}) ? "--title '$hlabel{$field}'" : ""; + my($vlabel) = exists($vlabel{$field}) ? "--vertical-label '$vlabel{$field}'" : ""; + run("rrdtool graph $image --start $started --end $finished $hlabel $vlabel DEF:in=$dir/monitor.rrd:$field:AVERAGE 'LINE2:in#FF0000' >/dev/null"); + } + + # + # Generate a cumulated graph for compression rates + # + my(%rate) = ( + 'Compress_1_1' => 1, + 'Compress_1_2' => 2, + 'Compress_1_3' => 3, + 'Compress_1_4' => 4, + 'Compress_1_5' => 5, + 'Compress_1_6' => 6, + 'Compress_1_7' => 7, + 'Compress_1_8' => 8, + 'Compress_1_9' => 9, + 'Compress_1_10' => 10, + 'Compress_1__10' => 11, + ); + my(%color) = ( + 'Compress_1_1' => "#ff0000", + 'Compress_1_2' => "#ee1100", + 'Compress_1_3' => "#dd2200", + 'Compress_1_4' => "#cc3300", + 'Compress_1_5' => "#bb4400", + 'Compress_1_6' => "#996600", + 'Compress_1_7' => "#778800", + 'Compress_1_8' => "#55aa00", + 'Compress_1_9' => "#33cc00", + 'Compress_1_10' => "#11ee00", + 'Compress_1__10' => "#00ff00", + ); + my($last_total); + my(@lines); + foreach $field (@fields) { + next if($field !~ /^Compress/); + my($cdef) = ""; + my($total) = "cmpr$rate{$field}"; + if($last_total) { + $total = "total$rate{$field}"; + $cdef = "CDEF:$total=$last_total,cmpr$rate{$field},+"; + } + $last_total = $total; + push(@lines, "DEF:cmpr$rate{$field}=$dir/monitor.rrd:$field:AVERAGE $cdef 'LINE1:$total$color{$field}:1/$rate{$field}'"); + } + run("rrdtool graph $dir/compress.gif --start $started --end $finished --title 'Compression rate comparison / second' --vertical-label 'Pages' @lines >/dev/null"); + + # + # Build home page + # + $file = "$dir/index.html"; + open(FILE, ">$file") or die "cannot open $file for writing : $!"; + print FILE <<EOF; +<body bgcolor=#ffffff> +<center> +[<a href=config.html>Configuration</a> | <a href=comment.html>Comment</a> | <a href=monitor.out>Samples</a> | <a href=compress.html>Compression</a>] +<p> +EOF + print FILE <<EOF; +<br> +<img src="compress.gif"> +<br> +In the graph above, the area under each line is the number of pages +compressed in the corresponding proportions. The bottom line is always 1/1 +compression. For instance the area between the 1/11 line and the 1/10 line +shows how many pages were compressed in a proportion equal or better than 1/11. +In <a href=compress.html>the compression report</a> an individual graph is +shown for each line. +<br> +EOF + + foreach $field (@fields) { + next if($field =~ /^Compress/); + print FILE <<EOF; +<br> +<img src="$field.gif"> +<br> +EOF + } + print FILE "</center>\n"; + close(FILE); + + # + # Build compression details page + # + $file = "$dir/compress.html"; + open(FILE, ">$file") or die "cannot open $file for writing : $!"; + print FILE <<EOF; +<body bgcolor=#ffffff> +<center> +[<a href=index.html>Home page</a>] +<p> +EOF + print FILE <<EOF; +<br> +<img src="compress.gif"> +<br> +EOF + + foreach $field (@fields) { + next if($field !~ /^Compress/); + print FILE <<EOF; +$field +<br> +<img src="$field.gif"> +<br> +EOF + } + print FILE "</center>\n"; + close(FILE); +} + +sub run { + my($cmd) = @_; + + system($cmd); + print STDERR "$cmd\n" if($verbose); + print CMDS "$cmd\n"; +} + +sub build { + my($file) = @_; + + system("cp $file $dir"); + my(@fields); + my($started); + my($step); + my($heartbeat); + my($finished); + my(@updates); + open(FILE, "<$file") or die "cannot open $file for reading : $!"; + while(<FILE>) { + if(/WordMonitor starting/) { + ($started) = <FILE> =~ /^Started:(\d+)/; + ($step) = <FILE> =~ /^Period:(\d+)/; + $heartbeat = $step * 2; + my(@ds); + @fields = split(':', scalar(<FILE>)); + shift(@fields); # get rid of Time field + pop(@fields); # get rid of last empty field + my($field); + foreach $field (@fields) { + my($type) = $field =~ /^(.)\./; + $field =~ s/^..//; + $field =~ s/[^a-z0-9_]/_/gi; + if($type eq 'C') { + push(@ds, "DS:$field:COUNTER:$heartbeat:U:U"); + } elsif($type eq 'G') { + push(@ds, "DS:$field:GAUGE:$heartbeat:0:U"); + } else { + print STDERR "Unknown type $type for field $field\n"; + exit(1); + } + } + my($ds) = join(' ', @ds); + my($rra) = "RRA:AVERAGE:0.5:1:2000"; + my($cmd) = "rrdtool create $dir/monitor.rrd --step $step --start $started $ds $rra"; + run("rm -f $dir/monitor.rrd ; $cmd"); + next; + } + next if(/-------------/ || /^\s*$/); + chop; # remove new line + chop; # remove last : + ($finished) = m/^(\d+):/; + print STDERR "$_\n" if($verbose); + push(@updates, $_); + if(@updates > 50) { + run("rrdtool update $dir/monitor.rrd " . join(' ', @updates)); + @updates = (); + } + } + if(@updates) { + run("rrdtool update $dir/monitor.rrd " . join(' ', @updates)); + } + close(FILE); + + print STDERR "started = $started, finished = $finished\n" if($verbose); + return ($started, $finished, @fields); +} + +main(); + + |