[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/27] ts-unixbench-reslts: process and plot bench results
On Wed, Dec 10, 2014 at 07:10:06PM +0100, Dario Faggioli wrote: > From: Dario Faggioli <raistlin@xxxxxxxx> > > Mangle the results of a run of unixbench a bit, so that > they can be plotted. This also produces a (gnu)plot script > and the plot itself. All is saved in $stash, for the > running flight and job. > > > This is done in a new Osstest/Benchmarking.pm module, as > the functions introduced may turn out useful somewhere else > too. > I would suggest using a dedicated commit for the introduction of Benchmarking.pm. > The results are read from the original unixbench results > file and a new file, with basically a table in it is > produced. Gnuplot uses such file as data for the plotting. > > A gnuplot script is produced and invoked (and saved in $stash) > rather than using the gnuplot perl binding because, this way, > one can modify the plotting commands a bit, and regen the > plot(s). > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx> > Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxx> > Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> > --- > Osstest/Benchmarking.pm | 115 > +++++++++++++++++++++++++++++++++++++++++++++++ > ts-unixbench-reslts | 17 +++++++ > 2 files changed, 132 insertions(+) > create mode 100644 Osstest/Benchmarking.pm > > diff --git a/Osstest/Benchmarking.pm b/Osstest/Benchmarking.pm > new file mode 100644 > index 0000000..0c5c538 > --- /dev/null > +++ b/Osstest/Benchmarking.pm > @@ -0,0 +1,115 @@ > +# This is part of "osstest", an automated testing framework for Xen. > +# Copyright (C) 2009-2013 Citrix Inc. 2009-2014 > +# > +# This program is free software: you can redistribute it and/or modify > +# it under the terms of the GNU Affero General Public License as published by > +# the Free Software Foundation, either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU Affero General Public License for more details. > +# > +# You should have received a copy of the GNU Affero General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > +# > + > +package Osstest::Benchmarking; > + > +use strict; > +use warnings; > + > +use IO::File; > +use IPC::Cmd qw[can_run run]; > + > +use Osstest; > +use Osstest::TestSupport; > + > +BEGIN { > + use Exporter (); > + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); > + $VERSION = 1.00; > + @ISA = qw(Exporter); > + @EXPORT = qw(unixbench_process_results > + unixbench_print_results > + unixbench_plot_results > + ); > + %EXPORT_TAGS = ( ); > + > + @EXPORT_OK = qw(); > +} > + > +#---------- manipulation of benchmarks results ---------- > + > +sub unixbench_process_results ($$) { > + my ($results_ref,$rfilen)= @_; > + my $h= new IO::File "< $rfilen" or die "$!"; > + > + my $par; > + while (<$h>) { > + my ($bench,$val,$idx); > + if (m/.*running ([0-9]*) parallel.*$/) { > + $par= $1; > + } > + if > (m/^(\S[a-zA-z0-9-\(\)\s]*)\s([0-9]+.[0-9]?)\s*([0-9]+.[0-9]?)\s*([0-9]+.[0-9]?)$/) > { > + $val= $3; > + $idx= $4; > + ($bench = $1) =~ s/\s+$//; > + $$results_ref->{"$bench"}{Result}{"$par"}= $val; > + $$results_ref->{"$bench"}{Index}{"$par"}= $idx; > + } > + next; > + } > + close($h); > +} > + > +sub unixbench_print_results ($$) { > + my ($results,$rfilen)= @_; > + open my $h, "|-", "tee $rfilen" or die "$!"; > + > + printf $h "%-50s","\"BENCHMARK NAME\""; > + foreach my $i (sort keys $results->{'Double-Precision Whetstone'}{Index}) { > + printf $h "%-15s","\"$i VCPUs\""; > + } > + print $h "\n"; > + foreach my $b (keys $results) { > + printf $h "%-50s","\"$b\""; > + foreach my $i (sort keys $results->{"$b"}{Index}) { > + printf $h "%-15s",$results->{$b}{Index}{$i}; > + } > + print $h "\n"; > + } > + close($h); > +} > + > +sub unixbench_plot_results ($$$) { > + my ($dataf,$num_cols,$pfile)= @_; > + my $h= new IO::File "> $pfile.gp" or die "$!"; > + > + printf $h <<EOF; > +set terminal png enhanced font > "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf" 8 size 800,600 > +set output '$pfile.png' > +set title 'Unixbench INDEXes for $flight.$job' > +set key outside center top horizontal noreverse noenhanced autotitles nobox > +set xtics mirror rotate by -45 out > +set style data histogram > +set style histogram cluster gap 1 > +set style fill solid border lt -1 > +set boxwidth 1 absolute > +set bmargin 13 > +set rmargin 14 > +SKIP_COL=1 > +NCOL=$num_cols > +HWIDTH=1.0/(NCOL+1.0) > +plot for [c=SKIP_COL+1:SKIP_COL+NCOL] '$dataf' using c:xtic(1) with > histograms title columnhead, \\ > + for [c=SKIP_COL+1:SKIP_COL+NCOL]'' every ::1 using 0:c:c with labels > notitle offset first -HWIDTH*(NCOL/2.0)+HWIDTH/2.0+(c-(SKIP_COL+1))*HWIDTH, > character 2 rotate by 90 > +EOF > + close($h); > + > + my $gp= can_run('gnuplot') or return; Need to install gnuplot before hand? > + my ($ok,$err)= run( command => "$gp $pfile.gp", verbose => 1 ); > + logm("WARNING: plotting file with \"$err\"") unless $ok; Fail the test case instead of issuing a warning? Wei. > +} > + > +1; > diff --git a/ts-unixbench-reslts b/ts-unixbench-reslts > index 6e5a9a8..b480d15 100755 > --- a/ts-unixbench-reslts > +++ b/ts-unixbench-reslts > @@ -21,6 +21,7 @@ use DBI; > use IO::File; > use POSIX; > use Osstest::TestSupport; > +use Osstest::Benchmarking; > > tsreadconfig(); > > @@ -46,6 +47,8 @@ $lresfile .= (defined($r{'unixbench_run_suffix'})) ? > $r{'unixbench_run_suffix'} : ''; > $lresfile = "unixbench$lresfile"; > > +our $results; > + > # Unixbench stores results in a subdirectory called 'results'. The file name > # is made up out of the box's hostname, today's date and a progressive id > # (e.g., results/benny-2014-07-02-01). > @@ -64,4 +67,18 @@ END > "$lresfile"); > } > > +sub process () { > + my $resf= "$stash/$gho->{Name}--$lresfile"; > + my $dataf= "$resf-DATA"; > + my $plotf= "$resf-PLOT"; > + > + unixbench_process_results(\$results,$resf); > + unixbench_print_results($results,$dataf); > + > + # For plotting we need to know the number of data columns > + my $ncols= keys $results->{'Double-Precision Whetstone'}{Index}; > + unixbench_plot_results($dataf,$ncols,$plotf); > +} > + > fetch(); > +process(); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |