From cfd15a7dc39ebc39c6235da662cddaeef38e6c36 Mon Sep 17 00:00:00 2001 From: Tvrtko Ursulin Date: Tue, 23 May 2017 16:07:52 +0100 Subject: media-bench.pl: Add option to specify workloads directly New option (-w) allows direct pass-through to gem_wsim for cases when heterogenous workloads, or even additional parameters to gem_wsim need to be tested. Signed-off-by: Tvrtko Ursulin --- scripts/media-bench.pl | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'scripts') diff --git a/scripts/media-bench.pl b/scripts/media-bench.pl index d4da864e..fa41dfb5 100755 --- a/scripts/media-bench.pl +++ b/scripts/media-bench.pl @@ -38,6 +38,7 @@ my $idle_tolerance_pct = 2.0; my $show_cmds = 0; my $realtime_target = 0; my $wps_target = 0; +my $w_direct; my $balancer; my $nop; my %opts; @@ -152,15 +153,19 @@ sub run_workload sub trace_workload { my ($wrk, $b, $r, $c) = @_; - my @args = ( "-n $nop", "-w $wrk_root/$wrk", "-r $r", "-c $c"); + my @args = ( "-n $nop", "-r $r", "-c $c"); my $min_batches = 16 + $r * $c / 2; my @skip_engine; my %engines; my ($cmd, $file); + my $warg = defined $w_direct ? $wrk : "-w $wrk_root/$wrk"; + + push @args, "$b -R" unless $b eq ''; + push @args, $warg; - unshift @args, "$b -R" unless $b eq ''; unshift @args, '-q'; unshift @args, "$tracepl --trace $wsim"; + $cmd = join ' ', @args; show_cmd($cmd); system($cmd); @@ -200,6 +205,7 @@ sub trace_workload sub calibrate_workload { my ($wrk) = @_; + my $warg = defined $w_direct ? $wrk : "-w $wrk_root/$wrk"; my $tol = $tolerance; my $loops = 0; my $error; @@ -207,7 +213,7 @@ sub calibrate_workload $r = 23; for (;;) { - my @args = ( "-n $nop", "-w $wrk_root/$wrk", "-r $r"); + my @args = ( "-n $nop", "-r $r", $warg); my ($time, $wps); ($time, $wps) = run_workload(@args); @@ -230,15 +236,25 @@ sub calibrate_workload sub find_saturation_point { - my ($rr, @args) = @_; + my ($wrk, $rr, @args) = @_; my ($last_wps, $c, $swps); my $target = $realtime_target > 0 ? $realtime_target : $wps_target; my $r = $rr; + my ($warg, $wcnt); + + if (defined $w_direct) { + $warg = $wrk; + $wcnt = () = $wrk =~ /-[wW]/gi; + + } else { + $warg = "-w $wrk_root/$wrk"; + $wcnt = 1; + } for ($c = 1; ; $c = $c + 1) { my ($time, $wps); - ($time, $wps) = run_workload((@args, ("-r $r", "-c $c"))); + ($time, $wps) = run_workload((@args, ($warg, "-r $r", "-c $c"))); if ($c > 1) { my $delta; @@ -253,6 +269,7 @@ sub find_saturation_point $r = int($rr * ($client_target_s / $time)); } elsif ($c == 1) { $swps = $wps; + return ($c, $wps, $swps) if $wcnt > 1; } $last_wps = $wps; @@ -261,7 +278,7 @@ sub find_saturation_point return ($c - 1, $last_wps, $swps); } -getopts('hxn:b:W:B:r:t:i:R:T:', \%opts); +getopts('hxn:b:W:B:r:t:i:R:T:w:', \%opts); if (defined $opts{'h'}) { print <'; @@ -484,7 +506,7 @@ foreach my $wrk (@workloads) { ($r, $error) = calibrate_workload($wrk); say " ${client_target_s}s is $r workloads. (error=$error)"; - ($c, $wps, $swps) = find_saturation_point($r, @args); + ($c, $wps, $swps) = find_saturation_point($wrk, $r, @args); say " Saturation at $c clients ($wps workloads/s)."; push @args, "-c $c"; -- cgit v1.2.3