$ ./go-memcached --helpUsage of ./go-memcached:-cacheFilesPath="": Path to cache file. Leave empty for anonymous non-persistent cache.Enumerate multiple files delimited by comma for creating a cluster of caches.This can increase performance only if frequently accessed items don't fit RAMand each cache file is located on a distinct physical storage.-cacheSize=100: Total cache capacity in Megabytes-deHashtableSize=16: Dogpile effect hashtable size-goMaxProcs=4: Maximum number of simultaneous Go threads-hotDataSize=0: Hot data size in bytes. 0 disables hot data optimization-hotItemsCount=0: The number of hot items. 0 disables hot items optimization-listenAddr=":11211": TCP address the server will listen to-maxItemsCount=1000000: Maximum number of items the server can cache-osReadBufferSize=229376: Buffer size in bytes for incoming requests in OS-osWriteBufferSize=229376: Buffer size in bytes for outgoing responses in OS-readBufferSize=4096: Buffer size in bytes for incoming requests-syncInterval=10s: Interval for data syncing. 0 disables data syncing-writeBufferSize=4096: Buffer size in bytes for outgoing responses
$ ./go-memcached-bench --helpUsage of ./go-memcached-bench:-connectionsCount=4: The number of TCP connections to memcache server-goMaxProcs=4: The maximum number of simultaneous worker threads in go-key="key": The key to query in memcache-maxPendingRequestsCount=1024: Maximum number of pending requests-osReadBufferSize=229376: The size of read buffer in bytes in OS-osWriteBufferSize=229376: The size of write buffer in bytes in OS-readBufferSize=4096: The size of read buffer in bytes-requestsCount=1000000: The number of requests to send to memcache-serverAddrs=":11211": Comma-delimited addresses of memcache servers to test-value="value": Value to store in memcache-workerMode="GetMiss": Worker mode. May be 'GetMiss', 'GetHit', 'Set', 'GetSetRand'-workersCount=512: The number of workers to send requests to memcache-writeBufferSize=4096: The size of write buffer in bytes
Aliaksandr Valialkin <val...@gmail.com> writes:Your description sounds like you've written something very much unlike
> Try go-memcached - fast memcached server written in Go. It can cache
> objects with up to 2Gb sizes. It also has no 250 byte limit on key
> sizes.
memcached.
Can you publish anything in more detail? Calling it "fast" with the
> According to my performance tests on Ubuntu 12.04 x64, go-memcached's
> speed is comparable to the original memcached.
feature list you have seems quite misleading. It can't be both.
There are really good reasons to avoid caching items over 1MB or so
(depending on your network topology). It stops becoming a cache at some
point and becomes a file server with entirely different semantics. You
no longer get to measure object retrieval latency in microseconds, for
example.
Older versions can do a few million fetches/sec, newest version was doing
11 million on some decent hardware and had much better thread scalability.
See the list archives and mc-crusher on my github page. Your numbers are
pretty good for a Go thing though? Maybe mc-crusher can push it harder,
too.
A couple things that might be interesting to also look at would be thelatency differences as well as how the difference is with my client.
The model of execution for high throughput is a bit different, though.
It does a reasonable job of keeping latency low as well.
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=GetSetRand -serverAddrs=localhost:11211Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetSetRand]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 6.505 seconds, 153735 qps======Response time histogram0 - 1ms: 8.078% ####1ms - 2ms: 27.502% ################2ms - 3ms: 20.569% ############3ms - 4ms: 13.805% ########4ms - 5ms: 10.310% ######5ms - 6ms: 7.031% ####6ms - 7ms: 4.992% ##7ms - 8ms: 3.720% ##8ms - 9ms: 2.343% #9ms -1h0m0s: 1.650%
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=GetSetRand -serverAddrs=localhost:11212Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11212]valueSize=[100]workerMode=[GetSetRand]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 6.323 seconds, 158144 qps======Response time histogram0 - 1ms: 7.183% ####1ms - 2ms: 28.385% #################2ms - 3ms: 23.208% #############3ms - 4ms: 14.602% ########4ms - 5ms: 8.901% #####5ms - 6ms: 6.471% ###6ms - 7ms: 5.205% ###7ms - 8ms: 3.330% #8ms - 9ms: 1.620%9ms -1h0m0s: 1.096%
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=Set -serverAddrs=localhost:11211
Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[Set]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 4.751 seconds, 210478 qps======Response time histogram0 - 1ms: 4.865% ##1ms - 2ms: 41.690% #########################2ms - 3ms: 34.394% ####################3ms - 4ms: 10.457% ######4ms - 5ms: 3.631% ##5ms - 6ms: 1.628%6ms - 7ms: 0.800%7ms - 8ms: 0.541%8ms - 9ms: 0.779%9ms -1h0m0s: 1.215%
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=Set -serverAddrs=localhost:11212Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11212]valueSize=[100]workerMode=[Set]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 3.653 seconds, 273750 qps======Response time histogram0 - 1ms: 14.373% ########1ms - 2ms: 52.608% ###############################2ms - 3ms: 24.008% ##############3ms - 4ms: 5.868% ###4ms - 5ms: 1.573%5ms - 6ms: 0.380%6ms - 7ms: 0.090%7ms - 8ms: 0.198%8ms - 9ms: 0.526%9ms -1h0m0s: 0.376%
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=GetHit -serverAddrs=localhost:11211Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetHit]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 5.548 seconds, 180237 qps======Response time histogram0 - 1ms: 18.723% ###########1ms - 2ms: 28.316% ################2ms - 3ms: 16.917% ##########3ms - 4ms: 10.734% ######4ms - 5ms: 8.590% #####5ms - 6ms: 6.320% ###6ms - 7ms: 4.390% ##7ms - 8ms: 3.401% ##8ms - 9ms: 1.671% #9ms -1h0m0s: 0.938%
$ ./go-memcached-bench -maxResponseTime=10ms -workerMode=GetHit -serverAddrs=localhost:11212Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[10ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11212]valueSize=[100]workerMode=[GetHit]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 5.170 seconds, 193434 qps======Response time histogram0 - 1ms: 15.962% #########1ms - 2ms: 32.185% ###################2ms - 3ms: 20.092% ############3ms - 4ms: 11.380% ######4ms - 5ms: 7.232% ####5ms - 6ms: 5.310% ###6ms - 7ms: 4.382% ##7ms - 8ms: 2.443% #8ms - 9ms: 0.788%9ms -1h0m0s: 0.224%
$ ./go-memcached-bench -maxResponseTime=3ms -workerMode=GetMiss -serverAddrs=localhost:11211Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[3ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetMiss]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 2.184 seconds, 457862 qps======Response time histogram0 - 300us: 2.086% #300us - 600us: 9.957% #####600us - 900us: 29.178% #################900us - 1.2ms: 29.746% #################1.2ms - 1.5ms: 13.432% ########1.5ms - 1.8ms: 6.574% ###1.8ms - 2.1ms: 3.510% ##2.1ms - 2.4ms: 1.781% #2.4ms - 2.7ms: 1.140%2.7ms -1h0m0s: 2.594% #
$ ./go-memcached-bench -maxResponseTime=3ms -workerMode=GetMiss -serverAddrs=localhost:11212Config:clientType=[new]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[3ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[1000000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11212]valueSize=[100]workerMode=[GetMiss]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 1.661 seconds, 601908 qps======Response time histogram0 - 300us: 1.282%300us - 600us: 19.876% ###########600us - 900us: 45.056% ###########################900us - 1.2ms: 23.344% ##############1.2ms - 1.5ms: 6.728% ####1.5ms - 1.8ms: 1.735% #1.8ms - 2.1ms: 0.782%2.1ms - 2.4ms: 0.543%2.4ms - 2.7ms: 0.253%2.7ms -1h0m0s: 0.402%
$ ./go-memcached-bench -clientType=original -requestsCount=100000 -workersCount=8 -maxResponseTime=5ms -serverAddrs=localhost:11211Config:clientType=[original]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[5ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[100000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetMiss]workersCount=[8]writeBufferSize=[4096]Preparing...donestarting...done! 1.864 seconds, 53659 qps======Response time histogram0 - 500us: 96.205% #########################################################500us - 1ms: 3.303% #1ms - 1.5ms: 0.390%1.5ms - 2ms: 0.090%2ms - 2.5ms: 0.009%2.5ms - 3ms: 0.002%3ms - 3.5ms: 0.001%3.5ms - 4ms: 0.000%4ms - 4.5ms: 0.000%4.5ms -1h0m0s: 0.000%
$ ./go-memcached-bench -clientType=original -requestsCount=100000 -workersCount=32 -maxResponseTime=5ms -serverAddrs=localhost:11211Config:clientType=[original]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[5ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[100000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetMiss]workersCount=[32]writeBufferSize=[4096]Preparing...donestarting...done! 2.145 seconds, 46627 qps======Response time histogram0 - 500us: 50.713% ##############################500us - 1ms: 25.730% ###############1ms - 1.5ms: 10.910% ######1.5ms - 2ms: 6.076% ###2ms - 2.5ms: 3.407% ##2.5ms - 3ms: 1.752% #3ms - 3.5ms: 0.798%3.5ms - 4ms: 0.379%4ms - 4.5ms: 0.139%4.5ms -1h0m0s: 0.096%
$ ./go-memcached-bench -clientType=original -requestsCount=100000 -workersCount=64 -maxResponseTime=5ms -serverAddrs=localhost:11211Config:clientType=[original]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[5ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[100000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetMiss]workersCount=[64]writeBufferSize=[4096]Preparing...donestarting...done! 2.234 seconds, 44755 qps======Response time histogram0 - 500us: 46.608% ###########################500us - 1ms: 1.363%1ms - 1.5ms: 12.748% #######1.5ms - 2ms: 13.391% ########2ms - 2.5ms: 4.616% ##2.5ms - 3ms: 6.118% ###3ms - 3.5ms: 4.462% ##3.5ms - 4ms: 2.845% #4ms - 4.5ms: 2.467% #4.5ms -1h0m0s: 5.382% ###
$ ./go-memcached-bench -clientType=original -requestsCount=100000 -workersCount=512 -maxResponseTime=50ms -serverAddrs=localhost:11211Config:clientType=[original]connectionsCount=[4]getRatio=[0.900000]goMaxProcs=[4]keySize=[16]maxPendingRequestsCount=[1024]maxResponseTime=[50ms]osReadBufferSize=[229376]osWriteBufferSize=[229376]requestsCount=[100000]readBufferSize=[4096]responseTimeHistogramSize=[10]serverAddrs=[localhost:11211]valueSize=[100]workerMode=[GetMiss]workersCount=[512]writeBufferSize=[4096]Preparing...donestarting...done! 2.342 seconds, 42698 qps======Response time histogram0 - 5ms: 47.483% ############################5ms - 10ms: 0.107%10ms - 15ms: 22.396% #############15ms - 20ms: 10.673% ######20ms - 25ms: 0.468%25ms - 30ms: 8.028% ####30ms - 35ms: 4.378% ##35ms - 40ms: 0.466%40ms - 45ms: 2.377% #45ms -1h0m0s: 3.624% ##
clientType=new, memcached: 223msclientType=new, go-memcached: 15msclientType=original, memcached: 245msclientType=original, go-memcached: 278ms
clientType=new, memcached: 215msclientType=new, go-memcached: 12msclientType=original, memcached: 227msclientType=original, go-memcached: 289ms
clientType=new, memcached: 15msclientType=new, go-memcached: 15msclientType=original, memcached: 153msclientType=original, go-memcached: 184ms
As you can see, go-memcached demonstrates much smaller maximum response times during tests with new client than memcached.clientType=new, memcached: 10msclientType=new, go-memcached: 10msclientType=original, memcached: 129msclientType=original, go-memcached: 150ms