memcached 0.16.1 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +0 -0
- data/BENCHMARKS +44 -85
- data/CHANGELOG +2 -0
- data/ext/extconf.rb +20 -13
- data/ext/rlibmemcached.i +3 -0
- data/ext/rlibmemcached_wrap.c +1 -6
- data/lib/memcached/memcached.rb +11 -4
- data/memcached.gemspec +1 -1
- data/test/profile/benchmark.rb +3 -0
- data/test/profile/valgrind.rb +23 -2
- metadata +1 -1
- metadata.gz.sig +2 -1
data.tar.gz.sig
CHANGED
|
Binary file
|
data/BENCHMARKS
CHANGED
|
@@ -7,90 +7,49 @@ You can easily run your own benchmarks, as long as you have memcached itself on
|
|
|
7
7
|
|
|
8
8
|
== x86-64 OS X
|
|
9
9
|
|
|
10
|
-
These benchmarks were run on an OS X 10.5 Core 2 Duo machine (
|
|
10
|
+
These benchmarks were run on an OS X 10.5 Core 2 Duo machine (10,000 iterations):
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
12
|
+
Ruby 1.8.7p174
|
|
13
|
+
Loaded memcached 0.16.2
|
|
14
|
+
Loaded memcache-client 1.7.4
|
|
15
|
+
user system total real
|
|
16
|
+
set:plain:noblock:memcached:net 0.270000 0.110000 0.380000 ( 0.911797)
|
|
17
|
+
set:plain:noblock:memcached:uds 0.250000 0.060000 0.310000 ( 0.471307)
|
|
18
|
+
set:plain:memcached:net 0.640000 0.980000 1.620000 ( 3.662495)
|
|
19
|
+
set:plain:memcached:uds 0.500000 0.560000 1.060000 ( 1.962946)
|
|
20
|
+
set:plain:memcache-client 7.640000 3.200000 10.840000 ( 11.264549)
|
|
21
|
+
set:ruby:noblock:memcached:net 0.450000 0.110000 0.560000 ( 1.049771)
|
|
22
|
+
set:ruby:noblock:memcached:uds 0.420000 0.060000 0.480000 ( 0.581246)
|
|
23
|
+
set:ruby:memcached:net 0.890000 0.990000 1.880000 ( 4.022136)
|
|
24
|
+
set:ruby:memcached:uds 0.770000 0.590000 1.360000 ( 2.462128)
|
|
25
|
+
set:ruby:memcache-client 7.210000 3.000000 10.210000 ( 12.328381)
|
|
26
|
+
get:plain:memcached:net 0.730000 0.970000 1.700000 ( 3.866983)
|
|
27
|
+
get:plain:memcached:uds 0.650000 0.600000 1.250000 ( 2.477487)
|
|
28
|
+
get:plain:memcache-client 8.340000 2.910000 11.250000 ( 12.963698)
|
|
29
|
+
get:ruby:memcached:net 0.910000 0.930000 1.840000 ( 4.232627)
|
|
30
|
+
get:ruby:memcached:uds 0.750000 0.580000 1.330000 ( 2.107293)
|
|
31
|
+
get:ruby:memcache-client 9.180000 3.160000 12.340000 ( 13.018086)
|
|
32
|
+
multiget:ruby:memcached:net 0.510000 0.360000 0.870000 ( 1.286799)
|
|
33
|
+
multiget:ruby:memcached:uds 0.500000 0.270000 0.770000 ( 0.957104)
|
|
34
|
+
multiget:ruby:memcache-client 5.000000 1.140000 6.140000 ( 6.357939)
|
|
35
|
+
missing:ruby:memcached:net 0.990000 1.040000 2.030000 ( 3.863125)
|
|
36
|
+
missing:ruby:memcached:uds 0.860000 0.650000 1.510000 ( 2.375266)
|
|
37
|
+
missing:ruby:memcached:inline 0.960000 1.030000 1.990000 ( 3.810818)
|
|
38
|
+
missing:ruby:memcached:uds:inline 0.830000 0.640000 1.470000 ( 2.189629)
|
|
39
|
+
missing:ruby:memcache-client 7.690000 3.180000 10.870000 ( 11.838813)
|
|
40
|
+
mixed:ruby:noblock:memcached:net 1.840000 2.530000 4.370000 ( 8.177355)
|
|
41
|
+
mixed:ruby:noblock:memcached:uds 1.420000 1.050000 2.470000 ( 4.167074)
|
|
42
|
+
mixed:ruby:memcached:net 1.830000 1.980000 3.810000 ( 7.666954)
|
|
43
|
+
mixed:ruby:memcached:uds 1.520000 1.160000 2.680000 ( 4.286830)
|
|
44
|
+
mixed:ruby:memcache-client 17.980000 6.490000 24.470000 ( 26.107002)
|
|
45
|
+
hash:murmur 0.040000 0.000000 0.040000 ( 0.039768)
|
|
46
|
+
hash:default 0.040000 0.000000 0.040000 ( 0.041131)
|
|
47
|
+
hash:jenkins 0.050000 0.000000 0.050000 ( 0.051128)
|
|
48
|
+
hash:md5 0.090000 0.010000 0.100000 ( 0.092318)
|
|
49
|
+
hash:crc 0.040000 0.000000 0.040000 ( 0.036825)
|
|
50
|
+
hash:hsieh 0.020000 0.000000 0.020000 ( 0.020522)
|
|
51
|
+
hash:fnv1_32 0.050000 0.000000 0.050000 ( 0.044151)
|
|
52
|
+
hash:fnv1a_32 0.040000 0.000000 0.040000 ( 0.046496)
|
|
53
|
+
hash:fnv1_64 0.100000 0.000000 0.100000 ( 0.110565)
|
|
54
|
+
hash:fnv1a_64 0.050000 0.000000 0.050000 ( 0.052217)
|
|
52
55
|
|
|
53
|
-
== x86-64 Linux
|
|
54
|
-
|
|
55
|
-
These benchmarks were run on a RHEL4 Xeon machine (25,000 iterations):
|
|
56
|
-
|
|
57
|
-
user system total real
|
|
58
|
-
set:plain:noblock:memcached:net 0.560000 0.370000 0.930000 ( 1.492691)
|
|
59
|
-
set:plain:noblock:memcached:uds 0.500000 0.120000 0.620000 ( 0.837311)
|
|
60
|
-
set:plain:memcached:net 1.070000 1.350000 2.420000 ( 4.655494)
|
|
61
|
-
set:plain:memcached:uds 1.030000 0.590000 1.620000 ( 3.126471)
|
|
62
|
-
set:plain:memcache-client 19.270000 1.500000 20.770000 ( 24.860087)
|
|
63
|
-
set:ruby:noblock:memcached:net 1.090000 0.120000 1.210000 ( 2.583293)
|
|
64
|
-
set:ruby:noblock:memcached:uds 1.100000 0.120000 1.220000 ( 1.501633)
|
|
65
|
-
set:ruby:memcached:net 1.760000 1.410000 3.170000 ( 5.481738)
|
|
66
|
-
set:ruby:memcached:uds 1.750000 0.590000 2.340000 ( 4.040445)
|
|
67
|
-
set:ruby:memcache-client 19.490000 1.430000 20.920000 ( 24.545314)
|
|
68
|
-
get:plain:memcached:net 1.160000 1.200000 2.360000 ( 4.515177)
|
|
69
|
-
get:plain:memcached:uds 1.110000 0.630000 1.740000 ( 3.039308)
|
|
70
|
-
get:plain:memcache-client 22.100000 1.440000 23.540000 ( 26.822877)
|
|
71
|
-
get:ruby:memcached:net 1.770000 1.110000 2.880000 ( 5.029304)
|
|
72
|
-
get:ruby:memcached:uds 1.680000 0.600000 2.280000 ( 3.241249)
|
|
73
|
-
get:ruby:memcache-client 22.770000 1.430000 24.200000 ( 28.643709)
|
|
74
|
-
multiget:ruby:memcached:net 1.030000 0.420000 1.450000 ( 2.132928)
|
|
75
|
-
multiget:ruby:memcached:uds 1.080000 0.250000 1.330000 ( 1.914999)
|
|
76
|
-
multiget:ruby:memcache-client 13.410000 0.520000 13.930000 ( 15.359580)
|
|
77
|
-
missing:ruby:memcached:net 1.760000 1.290000 3.050000 ( 5.029804)
|
|
78
|
-
missing:ruby:memcached:uds 1.730000 0.620000 2.350000 ( 3.772379)
|
|
79
|
-
missing:ruby:memcached:inline 1.750000 1.220000 2.970000 ( 5.029707)
|
|
80
|
-
missing:ruby:memcached:uds:inline 1.620000 0.670000 2.290000 ( 3.612413)
|
|
81
|
-
missing:ruby:memcache-client 19.310000 1.360000 20.670000 ( 24.277446)
|
|
82
|
-
mixed:ruby:noblock:memcached:net 3.530000 2.310000 5.840000 ( 10.037807)
|
|
83
|
-
mixed:ruby:noblock:memcached:uds 3.270000 1.000000 4.270000 ( 6.980218)
|
|
84
|
-
mixed:ruby:memcached:net 3.760000 2.510000 6.270000 ( 10.478885)
|
|
85
|
-
mixed:ruby:memcached:uds 3.740000 1.190000 4.930000 ( 7.898747)
|
|
86
|
-
mixed:ruby:memcache-client 45.900000 2.870000 48.770000 ( 56.733674)
|
|
87
|
-
hash:hsieh 0.040000 0.000000 0.040000 ( 0.041816)
|
|
88
|
-
hash:md5 0.120000 0.000000 0.120000 ( 0.121045)
|
|
89
|
-
hash:fnv1_32 0.060000 0.000000 0.060000 ( 0.062099)
|
|
90
|
-
hash:fnv1a_32 0.060000 0.000000 0.060000 ( 0.063173)
|
|
91
|
-
hash:fnv1a_64 0.070000 0.000000 0.070000 ( 0.071170)
|
|
92
|
-
hash:default 0.080000 0.000000 0.080000 ( 0.081224)
|
|
93
|
-
hash:jenkins 0.050000 0.000000 0.050000 ( 0.053789)
|
|
94
|
-
hash:fnv1_64 0.090000 0.000000 0.090000 ( 0.089719)
|
|
95
|
-
hash:crc 0.080000 0.000000 0.080000 ( 0.079723)
|
|
96
|
-
hash:murmur 0.050000 0.000000 0.050000 ( 0.048248)
|
data/CHANGELOG
CHANGED
data/ext/extconf.rb
CHANGED
|
@@ -38,9 +38,7 @@ if !ENV["EXTERNAL_LIB"]
|
|
|
38
38
|
|
|
39
39
|
Dir.chdir(BUNDLE_PATH) do
|
|
40
40
|
|
|
41
|
-
cflags = "-fPIC"
|
|
42
|
-
cxxflags = cflags
|
|
43
|
-
ldflags = "-fPIC"
|
|
41
|
+
cxxflags = cflags = ldflags = "-fPIC"
|
|
44
42
|
extraconf = ''
|
|
45
43
|
|
|
46
44
|
# again... is there a better way to do this?
|
|
@@ -50,6 +48,12 @@ if !ENV["EXTERNAL_LIB"]
|
|
|
50
48
|
ldflags = "#{ldflags} #{archflags}"
|
|
51
49
|
extraconf = '--enable-dtrace --disable-dependency-tracking'
|
|
52
50
|
end
|
|
51
|
+
|
|
52
|
+
if ENV['DEBUG']
|
|
53
|
+
puts "Setting debug flags for libmemcached."
|
|
54
|
+
cflags << " -O0 -ggdb -DHAVE_DEBUG"
|
|
55
|
+
extraconf << " --enable-debug"
|
|
56
|
+
end
|
|
53
57
|
|
|
54
58
|
puts(cmd = "env CFLAGS='#{cflags}' LDFLAGS='#{ldflags}' ./configure --prefix=#{HERE} --without-memcached --disable-shared --disable-utils #{extraconf} 2>&1")
|
|
55
59
|
raise "'#{cmd}' failed" unless system(cmd)
|
|
@@ -58,7 +62,10 @@ if !ENV["EXTERNAL_LIB"]
|
|
|
58
62
|
puts(cmd = "make install || true 2>&1")
|
|
59
63
|
raise "'#{cmd}' failed" unless system(cmd)
|
|
60
64
|
end
|
|
61
|
-
|
|
65
|
+
|
|
66
|
+
unless ENV['DEBUG'] or ENV['DEV']
|
|
67
|
+
system("rm -rf #{BUNDLE_PATH}")
|
|
68
|
+
end
|
|
62
69
|
end
|
|
63
70
|
end
|
|
64
71
|
|
|
@@ -70,6 +77,15 @@ if !ENV["EXTERNAL_LIB"]
|
|
|
70
77
|
$LIBS << " -lmemcached_gem"
|
|
71
78
|
end
|
|
72
79
|
|
|
80
|
+
$CFLAGS.gsub! /-O\d/, ''
|
|
81
|
+
|
|
82
|
+
if ENV['DEBUG']
|
|
83
|
+
puts "Setting debug flags for gem."
|
|
84
|
+
$CFLAGS << " -O0 -ggdb -DHAVE_DEBUG"
|
|
85
|
+
else
|
|
86
|
+
$CFLAGS << " -O3"
|
|
87
|
+
end
|
|
88
|
+
|
|
73
89
|
if DARWIN
|
|
74
90
|
$CFLAGS.gsub! /-arch \S+/, ''
|
|
75
91
|
$CFLAGS << " #{archflags}"
|
|
@@ -83,13 +99,4 @@ if ENV['SWIG']
|
|
|
83
99
|
raise "'#{cmd}' failed" unless system(cmd)
|
|
84
100
|
end
|
|
85
101
|
|
|
86
|
-
$CFLAGS.gsub! /-O\d/, ''
|
|
87
|
-
|
|
88
|
-
if ENV['DEBUG']
|
|
89
|
-
puts "Setting debug flags."
|
|
90
|
-
$CFLAGS << " -O0 -ggdb -DHAVE_DEBUG"
|
|
91
|
-
else
|
|
92
|
-
$CFLAGS << " -O3"
|
|
93
|
-
end
|
|
94
|
-
|
|
95
102
|
create_makefile 'rlibmemcached'
|
data/ext/rlibmemcached.i
CHANGED
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
|
|
16
16
|
// Register libmemcached's struct free function to prevent memory leaks
|
|
17
17
|
%freefunc memcached_st "memcached_free";
|
|
18
|
+
%freefunc memcached_server_st "memcached_server_free";
|
|
19
|
+
|
|
20
|
+
// %trackobjects; // Doesn't fix any interesting leaks
|
|
18
21
|
|
|
19
22
|
//// Input maps
|
|
20
23
|
|
data/ext/rlibmemcached_wrap.c
CHANGED
|
@@ -11595,11 +11595,6 @@ fail:
|
|
|
11595
11595
|
}
|
|
11596
11596
|
|
|
11597
11597
|
|
|
11598
|
-
SWIGINTERN void
|
|
11599
|
-
free_memcached_server_st(struct memcached_server_st *arg1) {
|
|
11600
|
-
free((char *) arg1);
|
|
11601
|
-
}
|
|
11602
|
-
|
|
11603
11598
|
SWIGINTERN VALUE
|
|
11604
11599
|
_wrap_memcached_server_cursor(int argc, VALUE *argv, VALUE self) {
|
|
11605
11600
|
memcached_st *arg1 = (memcached_st *) 0 ;
|
|
@@ -13040,7 +13035,7 @@ SWIGEXPORT void Init_rlibmemcached(void) {
|
|
|
13040
13035
|
rb_define_method(cMemcachedServerSt.klass, "hostname=", _wrap_MemcachedServerSt_hostname_set, -1);
|
|
13041
13036
|
rb_define_method(cMemcachedServerSt.klass, "hostname", _wrap_MemcachedServerSt_hostname_get, -1);
|
|
13042
13037
|
cMemcachedServerSt.mark = 0;
|
|
13043
|
-
cMemcachedServerSt.destroy = (void (*)(void *))
|
|
13038
|
+
cMemcachedServerSt.destroy = (void (*)(void *)) memcached_server_free;
|
|
13044
13039
|
cMemcachedServerSt.trackObjects = 0;
|
|
13045
13040
|
rb_define_module_function(mRlibmemcached, "memcached_server_cursor", _wrap_memcached_server_cursor, -1);
|
|
13046
13041
|
rb_define_module_function(mRlibmemcached, "memcached_server_by_key", _wrap_memcached_server_by_key, -1);
|
data/lib/memcached/memcached.rb
CHANGED
|
@@ -137,9 +137,12 @@ Please note that when pipelining is enabled, setter and deleter methods do not r
|
|
|
137
137
|
# object.
|
|
138
138
|
#
|
|
139
139
|
def clone
|
|
140
|
-
|
|
141
|
-
memcached
|
|
142
|
-
|
|
140
|
+
# FIXME Memory leak
|
|
141
|
+
# memcached = super
|
|
142
|
+
# struct = Lib.memcached_clone(nil, @struct)
|
|
143
|
+
# memcached.instance_variable_set('@struct', struct)
|
|
144
|
+
# memcached
|
|
145
|
+
self.class.new(servers, options)
|
|
143
146
|
end
|
|
144
147
|
|
|
145
148
|
# Reset the state of the libmemcached struct. This is useful for changing the server list at runtime.
|
|
@@ -337,7 +340,11 @@ Please note that when pipelining is enabled, setter and deleter methods do not r
|
|
|
337
340
|
# Return the server used by a particular key.
|
|
338
341
|
def server_by_key(key)
|
|
339
342
|
ret = Lib.memcached_server_by_key(@struct, key)
|
|
340
|
-
|
|
343
|
+
if ret.is_a?(Array)
|
|
344
|
+
string = inspect_server(ret.first)
|
|
345
|
+
Rlibmemcached.memcached_server_free(ret.first)
|
|
346
|
+
string
|
|
347
|
+
end
|
|
341
348
|
end
|
|
342
349
|
|
|
343
350
|
# Return a Hash of statistics responses from the set of servers. Each value is an array with one entry for each server, in the same order the servers were defined.
|
data/memcached.gemspec
CHANGED
data/test/profile/benchmark.rb
CHANGED
|
@@ -11,6 +11,9 @@ begin; require 'memory'; rescue LoadError; end
|
|
|
11
11
|
|
|
12
12
|
ARGV << "--with-memcached" << "--with-memcache-client" if ARGV.join !~ /--with/
|
|
13
13
|
|
|
14
|
+
puts `uname -a`
|
|
15
|
+
puts "Ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
|
|
16
|
+
|
|
14
17
|
ARGV.each do |flag|
|
|
15
18
|
require_name = flag[/--with-(\w+)/, 1]
|
|
16
19
|
gem_name = flag[/--with-(.*)$/, 1]
|
data/test/profile/valgrind.rb
CHANGED
|
@@ -9,6 +9,8 @@ class Worker
|
|
|
9
9
|
def initialize(method_name, iterations)
|
|
10
10
|
@method = method_name || 'mixed'
|
|
11
11
|
@i = (iterations || 10000).to_i
|
|
12
|
+
|
|
13
|
+
puts "*** Running #{@method.inspect} test for #{@i} loops. ***"
|
|
12
14
|
|
|
13
15
|
@key1 = "key1-"*8
|
|
14
16
|
@key2 = "key2-"*8
|
|
@@ -102,17 +104,36 @@ class Worker
|
|
|
102
104
|
@i.times do
|
|
103
105
|
cache = @cache.clone
|
|
104
106
|
end
|
|
107
|
+
when "reset"
|
|
108
|
+
@i.times do
|
|
109
|
+
@cache.reset
|
|
110
|
+
end
|
|
105
111
|
when "servers"
|
|
106
112
|
@i.times do
|
|
107
113
|
@cache.servers
|
|
108
114
|
end
|
|
115
|
+
when "server_by_key"
|
|
116
|
+
@i.times do
|
|
117
|
+
@cache.server_by_key(@key1)
|
|
118
|
+
end
|
|
109
119
|
else
|
|
110
120
|
raise "No such method"
|
|
111
121
|
end
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
puts "*** Garbage collect. ***"
|
|
124
|
+
10.times do
|
|
125
|
+
GC.start
|
|
126
|
+
sleep 0.1
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
sts, server_sts, clients = 0, 0, 0
|
|
130
|
+
ObjectSpace.each_object(Memcached) { clients += 1 }
|
|
131
|
+
ObjectSpace.each_object(Rlibmemcached::MemcachedSt) { sts += 1 }
|
|
132
|
+
ObjectSpace.each_object(Rlibmemcached::MemcachedServerSt) { server_sts += 1 }
|
|
133
|
+
puts "*** Structs: #{sts} ***"
|
|
134
|
+
puts "*** Server structs: #{server_sts} ***"
|
|
135
|
+
puts "*** Clients: #{clients} ***"
|
|
114
136
|
end
|
|
115
|
-
|
|
116
137
|
end
|
|
117
138
|
|
|
118
139
|
Worker.new(ENV['METHOD'], ENV['LOOPS']).work
|
metadata
CHANGED
metadata.gz.sig
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
t�3I�r/G��&��2j#���ҩ�|���-8iwA�t ��ҡ�-��ѝ��}-�_a�~���a�.<O��&P�Si�c5v�`���.���v��YIu��Ff®m�<�(�f������u�ԅy0��6���}��X<-�8�w$� 9�o���MF{�� ck���j��]*�ݔŴBz$�GXN�
|
|
2
|
+
�a����������*���P�a��b&s���\���e�]G�&�*���v�2}e�g:l�
|