ry / ebb

web server

This URL has Read+Write access

ebb / benchmark / bench
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 1 #!/usr/bin/env ruby
2
3 require File.dirname(__FILE__) + "/server_test"
4 # supported servers: mongrel, emongrel, ebb, thin
5 # use another name an a already open port for anything else
6 usage = "e.g. server_bench response_size ebb:4001 mongrel:4002 other:4003"
7
8 benchmark = ARGV.shift
9
10 servers = []
11 ARGV.each do |server|
12 name, port = server.split(':')
13 servers << ServerTest.new(name, port)
14 end
15
16 trials = {
17 'response_size' => [0.1,1,5,7,10,15,18,20,23,25,30,40,45,50].map { |i|
18 bytes = (i*1024).to_i
19 [i, "ab -t 3 -q -c 50 http://0.0.0.0:PORT/bytes/#{bytes}"]
20 },
21 'wait_fib' => [1,20,40,60,80,100].map { |c|
27577de1 » Ryan Dahl 2008-03-10 small changes to work for r... 22 [c, "ab -t 3 -q -c #{c} http://0.0.0.0:PORT/periodical_activity/fibonacci/15"]
f3387b21 » Ryan Dahl 2008-03-10 Added worker threads option. 23 },
24 'wait' => [0.5,1,1.5,2,2.5,3,3.5].map { |t|
25 [t, "ab -t 6 -q -c 50 http://0.0.0.0:PORT/periodical_activity/wait/#{t}"]
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 26 },
0e2dc886 » Ryan Dahl 2008-02-27 web site and benchmark fixes 27 'post_size' => [0.1,1,5,7,10,15,18,20,23,25,30,35,37,40,45,50].map { |l|
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 28 size = (l * 1024).to_i
29 fn = "/tmp/ebb_post_trial_#{size}"
30 File.open(fn, 'w+') { |f| f.write("C"*size) } unless FileTest.exists?(fn)
9d780efa » Ryan Dahl 2008-02-28 many small bug fixes, mostl... 31 [l, "ab -t 6 -q -c 50 -p #{fn} http://0.0.0.0:PORT/test_post_length"]
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 32 },
e73fe87c » ryah 2008-04-10 updates to benchmark scripts 33 'concurrency' => [1,5,10,20,30,40,50,75,100].map { |c|
34 [c, "ab -t 10 -q -c #{c} http://0.0.0.0:PORT/bytes/1"]
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 35 }
36 }
37
38 unless trials.has_key? benchmark
39 puts("must specify valid benchmark: #{trials.keys.join(" or ")}")
40 exit 1
41 end
42
43 trap('INT') { exit(1) }
44 dumpfile = "#{benchmark}.dump"
45 begin
46 results = ServerTestResults.open(dumpfile)
47 servers.each { |s| s.start }
48 sleep 4
49 trials[benchmark].rand_each do |x, cmd|
50 servers.rand_each do |server|
51 result = server.trial(cmd)
52 if result.nil?
53 server.kill
54 sleep 0.5
55 server.start
56 sleep 2
57 else
58 result[:benchmark] = benchmark
59 result[:input] = x
60 results << result
61 end
27577de1 » Ryan Dahl 2008-03-10 small changes to work for r... 62 sleep 1
7897e7c5 » Ryan Dahl 2008-02-26 clean up benchmark scripts 63 end
64 puts "---"
65 end
66 ensure
67 puts "\n\nkilling servers"
68 servers.each { |server| server.kill }
69 results.write(dumpfile)
0e2dc886 » Ryan Dahl 2008-02-27 web site and benchmark fixes 70 end