[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.