0
@@ -32,6 +32,10 @@ class ServerTestResults
0
+ @results.first[:benchmark]
0
def write(filename='results.dump')
0
puts "writing dump file to #{filename}"
0
File.open(filename, 'w+') do |f|
0
@@ -51,12 +55,12 @@ class ServerTestResults
0
@results.map {|r| r[:server] }.uniq.sort
0
- def data(server, what=:size)
0
server_data = @results.find_all { |r| r[:server] == server }
0
- ticks = server_data.map { |d| d[what] }.uniq
0
+ ticks = server_data.map { |d| d[:input] }.uniq
0
- measurements = server_data.find_all { |d| d[what] == c }.map { |d| d[:rps] }
0
+ measurements = server_data.find_all { |d| d[:input] == c }.map { |d| d[:rps] }
0
datas << [c, measurements.avg]
0
@@ -127,142 +131,25 @@ class ServerTest
0
Rack::Handler::Thin.run(app, :Port => @port)
0
- def trial(options = {})
0
- concurrency = options[:concurrency] || 50
0
- size = options[:size] || 20 * 1.kilobyte
0
- requests = options[:requests] || 500
0
+ cmd = ab_cmd.sub('PORT', @port)
0
- print "#{@name} (c=#{concurrency},s=#{size}) "
0
- r = %x{ab -t 3 -q -c #{concurrency} http://0.0.0.0:#{@port}/bytes/#{size}}
0
- # Complete requests: 1000
0
- return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
- if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
- :concurrency => concurrency,
0
- :requests => requests,
0
- :requests_completed => completed_requests,
0
- def wait_trial(concurrency)
0
+ puts "#{@name} (#{cmd})"
0
- print "#{@name} (c=#{concurrency}) "
0
- r = %x{ab -t #{3} -q -c #{concurrency} http://0.0.0.0:#{@port}/periodical_activity/fibonacci/20}
0
- # Complete requests: 1000
0
- return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
- if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
- :concurrency => concurrency,
0
- :requests_completed => completed_requests,
0
- def post_trial(size = 1, concurrency = 10)
0
- print "#{@name} (c=#{concurrency},posting=#{size}) "
0
- fn = "/tmp/ebb_post_trial_#{size}"
0
- unless FileTest.exists?(fn)
0
- File.open(fn, 'w+') { |f| f.write("C"*size) }
0
- r = %x{ab -t 6 -q -c #{concurrency} -p #{fn} http://0.0.0.0:#{@port}/test_post_length}
0
return nil unless r =~ /Requests per second:\s*(\d+\.\d\d)/
0
if r =~ /Complete requests:\s*(\d+)/
0
- completed_requests = $1.to_i
0
+ requests_completed = $1.to_i
0
- puts "#{rps} req/sec (#{completed_requests} completed)"
0
+ puts " #{rps} req/sec (#{requests_completed} completed)"
0
- :concurrency => concurrency,
0
- :requests_completed => completed_requests,
0
+ :requests_completed => requests_completed,
0
-$servers << ServerTest.new('emongrel', 4001) do
0
- require 'swiftcore/evented_mongrel'
0
- Rack::Handler::Mongrel.run(app, :Port => 4001)
0
-$servers << ServerTest.new('ebb', 4002) do
0
- require File.dirname(__FILE__) + '/../ruby_lib/ebb'
0
- server = Ebb::Server.new(app, :port => 4002)
0
-$servers << ServerTest.new('mongrel', 4003) do
0
- Rack::Handler::Mongrel.run(app, :Port => 4003)
0
-$servers << ServerTest.new('thin', 4004) do
0
- Rack::Handler::Thin.run(app, :Port => 4004)
0
-benchmark_type = ARGV.shift
0
-trap('INT') { exit(1) }
0
-dumpfile = "#{benchmark_type}.dump"
0
- results = ServerTestResults.open(dumpfile)
0
- $servers.each { |s| s.start }
0
- ServerTest.send("#{benchmark_type}_scale").each do |s|
0
- $servers.rand_each do |server|
0
- if r = server.send("#{benchmark_type}_trial", s)
0
- puts "error! restarting server"
0
- sleep 0.2 # give the other process some time to cool down?
0
- puts "\n\nkilling servers"
0
- $servers.each { |server| server.kill }
0
- results.write(dumpfile)
0
\ No newline at end of file
Comments
No one has commented yet.