--- /dev/null
+# This is part of "osstest", an automated testing framework for Xen.
+# Copyright (C) 2009-2013 Citrix Inc.
+#
+# 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;
+ my ($ok,$err)= run( command => "$gp $pfile.gp", verbose => 1 );
+ logm("WARNING: plotting file with \"$err\"") unless $ok;
+}
+
+1;
use IO::File;
use POSIX;
use Osstest::TestSupport;
+use Osstest::Benchmarking;
tsreadconfig();
$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).
"$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();