Created
February 20, 2012 07:19
-
-
Save sreeix/1868247 to your computer and use it in GitHub Desktop.
Benchmarks Memcache
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source :rubygems | |
gem "dalli", "~> 1.0.4", :require => ['dalli'] | |
gem "trollop" | |
gem "statsample" | |
# gem "kgio" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
begin | |
require "rubygems" | |
require "bundler" | |
rescue LoadError | |
raise "Could not load the bundler gem. Install it with `gem install bundler`." | |
end | |
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24") | |
raise RuntimeError, "Your bundler version is too old for Rails 2.3." + | |
"Run `gem install bundler` to upgrade." | |
end | |
require 'benchmark' | |
begin | |
# Set up load paths for all bundled gems | |
ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__) | |
Bundler.setup | |
rescue Bundler::GemNotFound | |
raise RuntimeError, "Bundler couldn't find some gems." + | |
"Did you run `bundle install`?" | |
end | |
Bundler.require :default | |
opts = Trollop::options do | |
opt :threads, "Number of threads", :default => 5 | |
opt :host, "hostname for memache", :default => 'localhost' | |
opt :port, "port for memache", :default => '11211' | |
opt :times, "number of times", :default => 5 | |
end | |
@data_packet = "abcdefghijklmnopqrstuvwxyz"*1000 | |
def spawn_and_execute(threads, repeats, server) | |
handles = [] | |
set_times = [] | |
get_times = [] | |
repeats.times do | |
threads.times do | |
handles << Thread.new { | |
Benchmark.bm do |b| | |
puts "starting down..." | |
dc = nil | |
begin | |
dc = Dalli::Client.new(server) | |
set_times << b.report {dc.set('abc', @data_packet)} | |
get_times << b.report {dc.get('abc')} | |
rescue | |
puts "Exceptions....." | |
ensure | |
dc.close if dc | |
end | |
puts "shutting down..." | |
end | |
} | |
end | |
handles.each {|handle| handle.join} | |
puts "Threads closed" | |
end | |
scaled_set = set_times.collect {|x| x.total}.to_scale | |
scaled_get = get_times.collect {|x| x.total}.to_scale | |
puts scaled_get.summary | |
puts scaled_set.summary | |
# puts "#{scaled_set.mean} ms #{scaled_set.sum}" | |
# puts "Get Mean -> #{scaled_get.mean * 1000} ms" | |
end | |
spawn_and_execute opts.threads, opts.times, "#{opts.host}:#{opts.port}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Preprod | |
Dalli -> | |
= Vector 2(GETS) | |
n :29999 | |
n valid:29999 | |
median: 0.09999999999999609 | |
mean: 0.1298 | |
std.dev.: 0.1004 | |
std.err.: 0.0006 | |
skew: 0.8908 | |
kurtosis: 0.3981 | |
= Vector 1(SETS) | |
n :29999 | |
n valid:29999 | |
median: 0.2800000000000029 | |
mean: 0.3019 | |
std.dev.: 0.1716 | |
std.err.: 0.0010 | |
skew: 0.6259 | |
kurtosis: 0.3769 | |
Errors 1 | |
Memcache-client -> | |
= Vector 2(GETS) | |
n :29993 | |
n valid:29993 | |
median: 0.26000000000000867 | |
mean: 0.2928 | |
std.dev.: 0.1832 | |
std.err.: 0.0011 | |
skew: 1.4156 | |
kurtosis: 3.5024 | |
= Vector 1(SETS) | |
n :29993 | |
n valid:29993 | |
median: 1.0399999999999938 | |
mean: 1.1204 | |
std.dev.: 0.5660 | |
std.err.: 0.0033 | |
skew: 0.7633 | |
kurtosis: 0.3360 | |
Errors 7 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment