Skip to content

Instantly share code, notes, and snippets.

@sreeix
Created February 20, 2012 07:19
Show Gist options
  • Save sreeix/1868247 to your computer and use it in GitHub Desktop.
Save sreeix/1868247 to your computer and use it in GitHub Desktop.
Benchmarks Memcache
source :rubygems
gem "dalli", "~> 1.0.4", :require => ['dalli']
gem "trollop"
gem "statsample"
# gem "kgio"
#!/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}"
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