diff options
-rw-r--r-- | runtime/bench2/bench.rb | 53 | ||||
-rw-r--r-- | runtime/bench2/itest.c | 9 |
2 files changed, 34 insertions, 28 deletions
diff --git a/runtime/bench2/bench.rb b/runtime/bench2/bench.rb index dbda5e13..3a1efc7c 100644 --- a/runtime/bench2/bench.rb +++ b/runtime/bench2/bench.rb @@ -6,7 +6,7 @@ # Public License (GPL); either version 2, or (at your option) any # later version. -# Where to fine laptop frequency files +# Where to find laptop frequency files MAXFILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" MINFILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq" @@ -22,7 +22,7 @@ class Bench @code = nil @file = nil @trans = 1 - @failures = "" + @failures = [] @results = [] if @@printed_header == 0 print_header @@ -34,6 +34,12 @@ class Bench break end end + # now do make + `make` + if $? != 0 || !File.exist?('itest') + puts "ERROR: Compiling itest failed\n" + exit + end end if @@runtime.nil? for path in ['/usr/share/systemtap/runtime', '/usr/local/share/systemtap/runtime'] @@ -54,23 +60,23 @@ class Bench def run compile - load @results = [] - @failures = "" + @failures = [] @@num_threads.each do |threads| - bench = []; sum=0 - threads.times {|cpu| fork {exec "./itest 1 > #{@dir}/bench#{cpu}"}} - threads.times {Process.waitpid(-1)} - threads.times {|x| bench[x] = `cat #{@dir}/bench#{x}`.split[0].to_i - @@ftime} - threads.times {|x| sum = sum + bench[x]} - @results[threads-1] = sum / (threads * threads) - end - `sudo killall -HUP stpd` - sleep 5 - File.open("#{@dir}/xxx.out") do |file| - file.each_line {|line| @failures += line if line =~ /WARNING/} + load + sum=0 + threads.times {|cpu| fork {exec "./itest #{threads} > #{@dir}/bench#{cpu}"}} + threads.times {Process.waitpid(-1)} # wait for itest(s) to exit + `sudo killall -HUP stpd` + Process.wait # wait for stpd to exit + threads.times {|x| sum = sum + `cat #{@dir}/bench#{x}`.split[0].to_i - @@ftime} + @results[threads] = sum / (threads * threads) + File.open("#{@dir}/xxx.out") do |file| + file.each_line do |line| + @failures[threads] = line.match(/were ([\d]*)/)[1] + end + end end - Process.wait cleanup end @@ -87,10 +93,11 @@ class Bench printf(" ") end printf(": %-20s", @desc) - @results.each {|x| printf("\t%d",x) unless x.nil? } + @@num_threads.each {|thread| printf("\t%5d",@results[thread])} printf("\n") - if @failures != "" - printf("%s\n", @failures) + @@num_threads.each do |thread| + printf("WARNING: %d transport failures with %d threads\n", \ + @failures[thread], thread) unless @failures[thread].nil? end end end @@ -121,7 +128,7 @@ class Bench end def load - args = "-rmq" + args = "-rmq -b 8" if @trans == RELAYFS then args = "-mq" end fork do exec "sudo #{@@stpd} #{args} #{@dir}/bench.ko > #{@dir}/xxx 2> #{@dir}/xxx.out" end sleep 5 @@ -218,14 +225,14 @@ obj-m := bench.o end puts "-"*64 check_cpuspeed - @@ftime = `./itest 5`.to_i + @@ftime = `./itest 1`.to_i puts "For comparison, function call overhead is #@@ftime nsecs." puts "Times below are nanoseconds per probe and include kprobe overhead." puts "-"*64 puts "+--- S = Script, R = Runtime" puts "|+-- * = Relayfs \tThreads" printf "|| NAME " - @@num_threads.each {|n| printf("\t%d",n)} + @@num_threads.each {|n| printf("\t %d",n)} printf "\n" end @@ -256,7 +263,7 @@ class Stapbench < Bench cleanup exit end - args = "-rmq" + args = "-rmq -b 8" if @trans == RELAYFS then args = "-mq" end fork do exec "sudo #{@@stpd} #{args} #{@dir}/bench.ko > #{@dir}/xxx 2> #{@dir}/xxx.out" end sleep 5 diff --git a/runtime/bench2/itest.c b/runtime/bench2/itest.c index dc385567..efba623a 100644 --- a/runtime/bench2/itest.c +++ b/runtime/bench2/itest.c @@ -28,7 +28,7 @@ uint64 stop() void usage(char *name) { - printf ("Usage %s [time]\nWhere \"time\" is millions of times to loop.\n", name); + printf ("Usage %s [num_threads]\nitest will call sys_getuid() 1000000/num_threads times.\n", name); exit(1); } @@ -42,16 +42,15 @@ int main(int argc, char *argv[]) if (argc == 2) { n = strtol(argv[1], NULL, 10); - if (n == 0) + if (n <= 0) usage(argv[0]); } - start(); - for (i = 0; i < n * 1000000; i++) + for (i = 0; i < 1000000/n; i++) getuid(); - nsecs = stop() / (n * 1000); + nsecs = stop() * n / 1000; /* returns nanosecs per call */ printf("%lld\n", nsecs); |