+.TH "MEMASLAP" "1" "April 08, 2011" "0.47" "libmemcached"
+.SH NAME
+memaslap \- libmemcached Documentation
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.\" Man page generated from reStructeredText.
+.
+.sp
+memaslap \- Load testing and benchmarking tool for memcached
+.SH SYNOPSIS
+.sp
+.nf
+.ft C
+memaslap [options]
+.ft P
+.fi
+.SH DESCRIPTION
+.sp
+\fBmemaslap\fP is a load generation and benchmark tool for memcached(1)
+servers. It generates configurable workload such as threads, concurrencies, connections,
+run time, overwrite, miss rate, key size, value size, get/set proportion,
+expected throughput, and so on. Furthermore, it also supports data
+verification, expire\-time verification, UDP, binary protocol, facebook test,
+replication test, multi\-get and reconnection, etc.
+.sp
+Memslap manages network connections like memcached with
+libevent. Each thread of memaslap is bound with a CPU core, all
+the threads don\(aqt communicate with each other, and there are several socket
+connections in each thread. Each connection keeps key size distribution,
+value size distribution, and command distribution by itself.
+.sp
+You can specify servers via the \fB\-\-servers\fP option or via the
+environment variable \fBMEMCACHED_SERVERS\fP.
+.SH FEATURES
+.sp
+Memslap is developed to for the following purposes:
+.sp
+Manages network connections with libevent asynchronously.
+.sp
+Set both TCP and UDP up to use non\-blocking IO.
+.sp
+Improves parallelism: higher performance in multi\-threads environments.
+.sp
+Improves time efficiency: faster processing speed.
+.sp
+Generates key and value more efficiently; key size distribution and value size distribution are configurable.
+.sp
+Supports get, multi\-get, and set commands; command distribution is configurable.
+.sp
+Supports controllable miss rate and overwrite rate.
+.sp
+Supports data and expire\-time verification.
+.sp
+Supports dumping statistic information periodically.
+.sp
+Supports thousands of TCP connections.
+.sp
+Supports binary protocol.
+.sp
+Supports facebook test (set with TCP and multi\-get with UDP) and replication test.
+.SH DETAILS
+.SS Effective implementation of network.
+.sp
+For memaslap, both TCP and UDP use non\-blocking network IO. All
+the network events are managed by libevent as memcached. The network module
+of memaslap is similar to memcached. Libevent can ensure
+memaslap can handle network very efficiently.
+.SS Effective implementation of multi\-threads and concurrency
+.sp
+Memslap has the similar implementation of multi\-threads to
+memcached. Memslap creates one or more self\-governed threads;
+each thread is bound with one CPU core if the system supports setting CPU
+core affinity.
+.sp
+In addition, each thread has a libevent to manage the events of the network;
+each thread has one or more self\-governed concurrencies; and each
+concurrency has one or more socket connections. All the concurrencies don’t
+communicate with each other even though they are in the same thread.
+.sp
+Memslap can create thousands of socket connections, and each
+concurrency has tens of socket connections. Each concurrency randomly or
+sequentially selects one socket connection from its socket connection pool
+to run, so memaslap can ensure each concurrency handles one
+socket connection at any given time. Users can specify the number of
+concurrency and socket connections of each concurrency according to their
+expected workload.
+.SS Effective implementation of generating key and value
+.sp
+In order to improve time efficiency and space efficiency,
+memaslap creates a random characters table with 10M characters. All the
+suffixes of keys and values are generated from this random characters table.
+.sp
+Memslap uses the offset in the character table and the length
+of the string to identify a string. It can save much memory.
+Each key contains two parts, a prefix and a suffix. The prefix is an
+uint64_t, 8 bytes. In order to verify the data set before,
+memaslap need to ensure each key is unique, so it uses the prefix to identify
+a key. The prefix cannot include illegal characters, such as ‘r’, ‘n’,
+‘0’ and ‘ ‘. And memaslap has an algorithm to ensure that.
+.sp
+Memslap doesn’t generate all the objects (key\-value pairs) at
+the beginning. It only generates enough objects to fill the task window
+(default 10K objects) of each concurrency. Each object has the following
+basic information, key prefix, key suffix offset in the character table, key
+length, value offset in the character table, and value length.
+.sp
+In the work process, each concurrency sequentially or randomly selects an
+object from the window to do set operation or get operation. At the same
+time, each concurrency kicks objects out of its window and adds new object
+into it.
+.SS Simple but useful task scheduling
+.sp
+Memslap uses libevent to schedule all the concurrencies of
+threads, and each concurrency schedules tasks based on the local task
+window. Memslap assumes that if each concurrency keeps the same
+key distribution, value distribution and commands distribution, from
+outside, memaslap keeps all the distribution as a whole.
+Each task window includes a lot of objects, each object stores its basic
+information, such as key, value, expire time, and so on. At any time, all
+the objects in the window keep the same and fixed key and value
+distribution. If an object is overwritten, the value of the object will be
+updated. Memslap verifies the data or expire\-time according to
+the object information stored in the task window.
+.sp
+Libevent selects which concurrency to handle based on a specific network
+event. Then the concurrency selects which command (get or set) to operate
+based on the command distribution. If it needs to kick out an old object and
+add a new object, in order to keep the same key and value distribution, the
+new object must have the same key length and value length.
+.sp
+If memcached server has two cache layers (memory and SSD), running
+memaslap with different window sizes can get different cache
+miss rates. If memaslap adds enough objects into the windows at
+the beginning, and the cache of memcached cannot store all the objects
+initialized, then memaslap will get some objects from the second
+cache layer. It causes the first cache layer to miss. So the user can
+specify the window size to get the expected miss rate of the first cache
+layer.
+.SS Useful implementation of multi\-servers , UDP, TCP, multi\-get and binary protocol
+.sp
+Because each thread is self\-governed, memaslap can assign
+different threads to handle different memcached servers. This is just one of
+the ways in which memaslap supports multiple servers. The only
+limitation is that the number of servers cannot be greater than the number
+of threads. The other way to support multiple servers is for replication
+test. Each concurrency has one socket connection to each memcached server.
+For the implementation, memaslap can set some objects to one
+memcached server, and get these objects from the other servers.
+.sp
+By default, Memslap does single get. If the user specifies
+multi\-get option, memaslap will collect enough get commands and
+pack and send the commands together.
+.sp
+Memslap supports both the ASCII protocol and binary protocol,
+but it runs on the ASCII protocol by default.
+Memslap by default runs on the TCP protocol, but it also
+supports UDP. Because UDP is unreliable, dropped packages and out\-of\-order
+packages may occur. Memslap creates a memory buffer to handle
+these problems. Memslap tries to read all the response data of
+one command from the server and reorders the response data. If some packages
+get lost, the waiting timeout mechanism can ensure half\-baked packages will
+be discarded and the next command will be sent.
+.SH USAGE
+.sp
+Below are some usage samples:
+.sp
+memaslap \-s 127.0.0.1:11211 \-S 5s
+.sp
+memaslap \-s 127.0.0.1:11211 \-t 2m \-v 0.2 \-e 0.05 \-b
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-w 40k \-S 20s \-o 0.2
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-T 4 \-c 128 \-d 20 \-P 40k
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-d 50 \-a \-n 40
+.sp
+memaslap \-s 127.0.0.1:11211,127.0.0.1:11212 \-F config \-t 2m
+.sp
+memaslap \-s 127.0.0.1:11211,127.0.0.1:11212 \-F config \-t 2m \-p 2
+.sp
+The user must specify one server at least to run memaslap. The
+rest of the parameters have default values, as shown below:
+.sp
+Thread number = 1 Concurrency = 16
+.sp
+Run time = 600 seconds Configuration file = NULL
+.sp
+Key size = 64 Value size = 1024
+.sp
+Get/set = 9:1 Window size = 10k
+.sp
+Execute number = 0 Single get = true
+.sp
+Multi\-get = false Number of sockets of each concurrency = 1
+.sp
+Reconnect = false Data verification = false
+.sp
+Expire\-time verification = false ASCII protocol = true
+.sp
+Binary protocol = false Dumping statistic information
+.sp
+periodically = false
+.sp
+Overwrite proportion = 0% UDP = false
+.sp
+TCP = true Limit throughput = false
+.sp
+Facebook test = false Replication test = false
+.SS Key size, value size and command distribution.
+.sp
+All the distributions are read from the configuration file specified by user
+with “—cfg_cmd” option. If the user does not specify a configuration file,
+memaslap will run with the default distribution (key size = 64,
+value size = 1024, get/set = 9:1). For information on how to edit the
+configuration file, refer to the “Configuration File” section.
+.sp
+The minimum key size is 16 bytes; the maximum key size is 250 bytes. The
+precision of proportion is 0.001. The proportion of distribution will be
+rounded to 3 decimal places.
+.sp
+The minimum value size is 1 bytes; the maximum value size is 1M bytes. The
+precision of proportion is 0.001. The proportion of distribution will be
+rounded to 3 decimal places.
+Currently, memaslap only supports set and get commands. And it
+supports 100% set and 100% get. For 100% get, it will preset some objects to
+the server.
+.SS Multi\-thread and concurrency
+.sp
+The high performance of memaslap benefits from the special
+schedule of thread and concurrency. It’s important to specify the proper
+number of them. The default number of threads is 1; the default number of
+concurrency is 16. The user can use “—threads” and “\-\-concurrency” to
+specify these variables.
+.sp
+If the system supports setting CPU affinity and the number of threads
+specified by the user is greater than 1, memaslap will try to
+bind each thread to a different CPU core. So if you want to get the best
+performance memaslap, it is better to specify the number of
+thread equal to the number of CPU cores. The number of threads specified by
+the user can also be less or greater than the number of CPU cores. Because
+of the limitation of implementation, the number of concurrencies could be
+the multiple of the number of threads.
+.INDENT 0.0
+.IP 1. 3
+.
+For 8 CPU cores system
+.UNINDENT
+.sp
+For example:
+.sp
+\-\-threads=2 \-\-concurrency=128
+.sp
+\-\-threads=8 \-\-concurrency=128
+.sp
+\-\-threads=8 \-\-concurrency=256
+.sp
+\-\-threads=12 \-\-concurrency=144
+.INDENT 0.0
+.IP 2. 3
+.
+For 16 CPU cores system
+.UNINDENT
+.sp
+For example:
+.sp
+\-\-threads=8 \-\-concurrency=128
+.sp
+\-\-threads=16 \-\-concurrency=256
+.sp
+\-\-threads=16 \-\-concurrency=512
+.sp
+\-\-threads=24 \-\-concurrency=288
+.sp
+The memaslap performs very well, when
+used to test the performance of memcached servers.
+Most of the time, the bottleneck is the network or
+the server. If for some reason the user wants to
+limit the performance of memaslap, there
+are two ways to do this:
+.sp
+Decrease the number of threads and concurrencies.
+Use the option “\-\-tps” that memaslap
+provides to limit the throughput. This option allows
+the user to get the expected throughput. For
+example, assume that the maximum throughput is 50
+kops/s for a specific configuration, you can specify
+the throughput equal to or less than the maximum
+throughput using “\-\-tps” option.
+.SS Window size
+.sp
+Most of the time, the user does not need to specify the window size. The
+default window size is 10k. For Schooner Memcached, the user can specify
+different window sizes to get different cache miss rates based on the test
+case. Memslap supports cache miss rate between 0% and 100%.
+If you use this utility to test the performance of Schooner Memcached, you
+can specify a proper window size to get the expected cache miss rate. The
+formula for calculating window size is as follows:
+.sp
+Assume that the key size is 128 bytes, and the value size is 2048 bytes, and
+concurrency=128.
+.sp
+1. Small cache cache_size=1M, 100% cache miss (all data get from SSD).
+win_size=10k
+.INDENT 0.0
+.IP 2. 3
+.
+cache_size=4G
+.UNINDENT
+.sp
+(1). cache miss rate 0%
+.sp
+win_size=8k
+.sp
+(2). cache miss rate 5%
+.sp
+win_size=11k
+.INDENT 0.0
+.IP 3. 3
+.
+cache_size=16G
+.UNINDENT
+.sp
+(1). cache miss rate 0%
+.sp
+win_size=32k
+.sp
+(2). cache miss
+.sp
+rate 5%
+.sp
+win_size=46k
+.sp
+The formula for calculating window size for cache miss rate 0%:
+.sp
+cache_size / concurrency / (key_size + value_size) * 0.5
+.sp
+The formula for calculating window size for cache miss rate 5%:
+.sp
+cache_size / concurrency / (key_size + value_size) * 0.7
+.SS Verification
+.sp
+Memslap supports both data verification and expire\-time
+verification. The user can use "\-\-verify=" or "\-v" to specify the proportion
+of data verification. In theory, it supports 100% data verification. The
+user can use "\-\-exp_verify=" or "\-e" to specify the proportion of
+expire\-time verification. In theory, it supports 100% expire\-time
+verification. Specify the "\-\-verbose" options to get more detailed error
+information.
+.sp
+For example: \-\-exp_verify=0.01 –verify=0.1 , it means that 1% of the objects
+set with expire\-time, 10% of the objects gotten will be verified. If the
+objects are gotten, memaslap will verify the expire\-time and
+value.
+.SS multi\-servers and multi\-clients
+.sp
+Memslap supports multi\-servers based on self\-governed thread.
+There is a limitation that the number of servers cannot be greater than the
+number of threads. Memslap assigns one thread to handle one
+server at least. The user can use the "\-\-servers=" or "\-s" option to specify
+multi\-servers.
+.sp
+For example:
+.sp
+\-\-servers=10.1.1.1:11211,10.1.1.2:11212,10.1.1.3:11213 \-\-threads=6 \-\-concurrency=36
+.sp
+The above command means that there are 6 threads, with each thread having 6
+concurrencies and that threads 0 and 3 handle server 0 (10.1.1.1); threads 1
+and 4 handle server 1 (10.1.1.2); and thread 2 and 5 handle server 2
+(10.1.1.3).
+.sp
+All the threads and concurrencies in memaslap are self\-governed.
+.sp
+So is memaslap. The user can start up several
+memaslap instances. The user can run memaslap on different client
+machines to communicate with the same memcached server at the same. It is
+recommended that the user start different memaslap on different
+machines using the same configuration.
+.SS Run with execute number mode or time mode
+.sp
+The default memaslap runs with time mode. The default run time
+is 10 minutes. If it times out, memaslap will exit. Do not
+specify both execute number mode and time mode at the same time; just
+specify one instead.
+.sp
+For example:
+.sp
+\-\-time=30s (It means the test will run 30 seconds.)
+.sp
+\-\-execute_number=100000 (It means that after running 100000 commands, the test will exit.)
+.SS Dump statistic information periodically.
+.sp
+The user can use "\-\-stat_freq=" or "\-S" to specify the frequency.
+.sp
+For example:
+.sp
+\-\-stat_freq=20s
+.sp
+Memslap will dump the statistics of the commands (get and set) at the frequency of every 20
+seconds.
+.sp
+For more information on the format of dumping statistic information, refer to “Format of Output” section.
+.SS Multi\-get
+.sp
+The user can use "\-\-division=" or "\-d" to specify multi\-get keys count.
+Memslap by default does single get with TCP. Memslap also supports data
+verification and expire\-time verification for multi\-get.
+.sp
+Memslap supports multi\-get with both TCP and UDP. Because of
+the different implementation of the ASCII protocol and binary protocol,
+there are some differences between the two. For the ASCII protocol,
+memaslap sends one “multi\-get” to the server once. For the
+binary protocol, memaslap sends several single get commands
+together as “multi\-get” to the server.
+.SS UDP and TCP
+.sp
+Memslap supports both UDP and TCP. For TCP,
+memaslap does not reconnect the memcached server if socket connections are
+lost. If all the socket connections are lost or memcached server crashes,
+memaslap will exit. If the user specifies the “\-\-reconnect”
+option when socket connections are lost, it will reconnect them.
+.sp
+User can use “\-\-udp” to enable the UDP feature, but UDP comes with some
+limitations:
+.sp
+UDP cannot set data more than 1400 bytes.
+.sp
+UDP is not supported by the binary protocol because the binary protocol of
+memcached does not support that.
+.sp
+UDP doesn’t support reconnection.
+.SS Facebook test
+.sp
+Set data with TCP and multi\-get with UDP. Specify the following options:
+.sp
+"\-\-facebook \-\-division=50"
+.sp
+If you want to create thousands of TCP connections, specify the
+.sp
+"\-\-conn_sock=" option.
+.sp
+For example: \-\-facebook \-\-division=50 \-\-conn_sock=200
+.sp
+The above command means that memaslap will do facebook test,
+each concurrency has 200 socket TCP connections and one UDP socket.
+.sp
+Memslap sets objects with the TCP socket, and multi\-gets 50
+objects once with the UDP socket.
+.sp
+If you specify "\-\-division=50", the key size must be less that 25 bytes
+because the UDP packet size is 1400 bytes.
+.SS Replication test
+.sp
+For replication test, the user must specify at least two memcached servers.
+The user can use “—rep_write=” option to enable feature.
+.sp
+For example:
+.sp
+\-\-servers=10.1.1.1:11211,10.1.1.2:11212 –rep_write=2
+.sp
+The above command means that there are 2 replication memcached servers,
+memaslap will set objects to both server 0 and server 1, get
+objects which are set to server 0 before from server 1, and also get objects
+which are set to server 1 before from server 0. If server 0 crashes,
+memaslap will only get objects from server 1. If server 0 comes
+back to life again, memaslap will reconnect server 0. If both
+server 0 and server 1 crash, memaslap will exit.
+.SS Supports thousands of TCP connections
+.sp
+Start memaslap with "\-\-conn_sock=" or "\-n" to enable this
+feature. Make sure that your system can support opening thousands of files
+and creating thousands of sockets. However, this feature does not support
+reconnection if sockets disconnect.
+.sp
+For example:
+.sp
+\-\-threads=8 \-\-concurrency=128 \-\-conn_sock=128
+.sp
+The above command means that memaslap starts up 8 threads, each
+thread has 16 concurrencies, each concurrency has 128 TCP socket
+connections, and the total number of TCP socket connections is 128 * 128 =
+16384.
+.SS Supports binary protocol
+.sp
+Start memaslap with "\-\-binary" or "\-B" options to enable this
+feature. It supports all the above features except UDP, because the latest
+memcached 1.3.3 does not implement binary UDP protocol.
+.sp
+For example:
+.sp
+\-\-binary
+.sp
+Since memcached 1.3.3 doesn\(aqt implement binary UDP protocol,
+memaslap does not support UDP. In addition, memcached 1.3.3 does not support
+multi\-get. If you specify "\-\-division=50" option, it just sends 50 get
+commands together as “mulit\-get” to the server.
+.SH CONFIGURATION FILE
+.sp
+This section describes the format of the configuration file. By default
+when no configuration file is specified memaslap reads the default
+one located at ~/.memaslap.cnf.
+.sp
+Below is a sample configuration file:
+.sp
+.nf
+.ft C
+***************************************************************************
+#comments should start with \(aq#\(aq
+#key
+#start_len end_len proportion
+#
+#key length range from start_len to end_len
+#start_len must be equal to or greater than 16
+#end_len must be equal to or less than 250
+#start_len must be equal to or greater than end_len
+#memaslap will generate keys according to the key range
+#proportion: indicates keys generated from one range accounts for the total
+generated keys
+#
+#example1: key range 16~100 accounts for 80%
+# key range 101~200 accounts for 10%
+# key range 201~250 accounts for 10%
+# total should be 1 (0.8+0.1+0.1 = 1)
+#
+# 16 100 0.8
+# 101 200 0.1
+# 201 249 0.1
+#
+#example2: all keys length are 128 bytes
+#
+# 128 128 1
+key
+128 128 1
+#value
+#start_len end_len proportion
+#
+#value length range from start_len to end_len
+#start_len must be equal to or greater than 1
+#end_len must be equal to or less than 1M
+#start_len must be equal to or greater than end_len
+#memaslap will generate values according to the value range
+#proportion: indicates values generated from one range accounts for the
+total generated values
+#
+#example1: value range 1~1000 accounts for 80%
+# value range 1001~10000 accounts for 10%
+# value range 10001~100000 accounts for 10%
+# total should be 1 (0.8+0.1+0.1 = 1)
+#
+# 1 1000 0.8
+# 1001 10000 0.1
+# 10001 100000 0.1
+#
+#example2: all value length are 128 bytes
+#
+# 128 128 1
+value
+2048 2048 1
+#cmd
+#cmd_type cmd_proportion
+#
+#currently memaslap only supports get and set command.
+#
+#cmd_type
+#set 0
+#get 1
+#
+#example: set command accounts for 50%
+# get command accounts for 50%
+# total should be 1 (0.5+0.5 = 1)
+#
+# cmd
+# 0 0.5
+# 1 0.5
+cmd
+0 0.1
+1.0 0.9
+.ft P
+.fi
+.SH FORMAT OF OUTPUT
+.sp
+At the beginning, memaslap displays some configuration information as follows:
+.sp
+servers : 127.0.0.1:11211
+.sp
+threads count: 1
+.sp
+concurrency: 16
+.sp
+run time: 20s
+.sp
+windows size: 10k
+.sp
+set proportion: set_prop=0.10
+.sp
+get proportion: get_prop=0.90
+.SS Where
+.sp
+servers : "servers"
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The servers used by memaslap.
+.UNINDENT
+.UNINDENT
+.sp
+threads count
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The number of threads memaslap runs with.
+.UNINDENT
+.UNINDENT
+.sp
+concurrency
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The number of concurrencies memaslap runs with.
+.UNINDENT
+.UNINDENT
+.sp
+run time
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How long to run memaslap.
+.UNINDENT
+.UNINDENT
+.sp
+windows size
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The task window size of each concurrency.
+.UNINDENT
+.UNINDENT
+.sp
+set proportion
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The proportion of set command.
+.UNINDENT
+.UNINDENT
+.sp
+get proportion
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The proportion of get command.
+.UNINDENT
+.UNINDENT
+.sp
+The output of dynamic statistics is something like this:
+.sp
+.nf
+.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+Get Statistics
+Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us)
+Avg(us) Std_dev Geo_dist
+Period 5 345826 69165 65.3 0 27 2198 203
+95.43 177.29
+Global 20 1257935 62896 71.8 0 26 3791 224
+117.79 192.60
+
+
+Set Statistics
+Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us)
+Avg(us) Std_dev Geo_dist
+Period 5 38425 7685 7.3 0 42 628 240
+88.05 220.21
+Global 20 139780 6989 8.0 0 37 3790 253
+117.93 224.83
+
+
+Total Statistics
+Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us)
+Avg(us) Std_dev Geo_dist
+Period 5 384252 76850 72.5 0 27 2198 207
+94.72 181.18
+Global 20 1397720 69886 79.7 0 26 3791 227
+117.93 195.60
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+.ft P
+.fi
+.SS Where
+.sp
+Get Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Statistics information of get command
+.UNINDENT
+.UNINDENT
+.sp
+Set Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Statistics information of set command
+.UNINDENT
+.UNINDENT
+.sp
+Total Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Statistics information of both get and set command
+.UNINDENT
+.UNINDENT
+.sp
+Period
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Result within a period
+.UNINDENT
+.UNINDENT
+.sp
+Global
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Accumulated results
+.UNINDENT
+.UNINDENT
+.sp
+Ops
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total operations
+.UNINDENT
+.UNINDENT
+.sp
+TPS
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Throughput, operations/second
+.UNINDENT
+.UNINDENT
+.sp
+Net
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The rate of network
+.UNINDENT
+.UNINDENT
+.sp
+Get_miss
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects can’t be gotten
+.UNINDENT
+.UNINDENT
+.sp
+Min
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The minimum response time
+.UNINDENT
+.UNINDENT
+.sp
+Max
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The maximum response time
+.UNINDENT
+.UNINDENT
+.sp
+Avg:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The average response time
+.UNINDENT
+.UNINDENT
+.sp
+Std_dev
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Standard deviation of response time
+.UNINDENT
+.UNINDENT
+.sp
+Geo_dist
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Geometric distribution based on natural exponential function
+.UNINDENT
+.UNINDENT
+.sp
+At the end, memaslap will output something like this:
+.sp
+.nf
+.ft C
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+Get Statistics (1257956 events)
+ Min: 26
+ Max: 3791
+ Avg: 224
+ Geo: 192.60
+ Std: 116.23
+ Log2 Dist:
+ 4: 0 10 84490 215345
+ 8: 484890 459823 12543 824
+ 12: 31
+
+ Set Statistics (139782 events)
+ Min: 37
+ Max: 3790
+ Avg: 253
+ Geo: 224.84
+ Std: 116.83
+ Log2 Dist:
+ 4: 0 0 4200 16988
+ 8: 50784 65574 2064 167
+ 12: 5
+
+ Total Statistics (1397738 events)
+ Min: 26
+ Max: 3791
+ Avg: 227
+ Geo: 195.60
+ Std: 116.60
+ Log2 Dist:
+ 4: 0 10 88690 232333
+ 8: 535674 525397 14607 991
+ 12: 36
+
+cmd_get: 1257969
+cmd_set: 139785
+get_misses: 0
+verify_misses: 0
+verify_failed: 0
+expired_get: 0
+unexpired_unget: 0
+written_bytes: 242516030
+read_bytes: 1003702556
+object_bytes: 152086080
+packet_disorder: 0
+packet_drop: 0
+udp_timeout: 0
+
+Run time: 20.0s Ops: 1397754 TPS: 69817 Net_rate: 59.4M/s
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+.ft P
+.fi
+.SS Where
+.sp
+Get Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Get statistics of response time
+.UNINDENT
+.UNINDENT
+.sp
+Set Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Set statistics of response time
+.UNINDENT
+.UNINDENT
+.sp
+Total Statistics
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Both get and set statistics of response time
+.UNINDENT
+.UNINDENT
+.sp
+Min
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The accumulated and minimum response time
+.UNINDENT
+.UNINDENT
+.sp
+Max
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The accumulated and maximum response time
+.UNINDENT
+.UNINDENT
+.sp
+Avg
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The accumulated and average response time
+.UNINDENT
+.UNINDENT
+.sp
+Std
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Standard deviation of response time
+.UNINDENT
+.UNINDENT
+.sp
+Log2 Dist
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Geometric distribution based on logarithm 2
+.UNINDENT
+.UNINDENT
+.sp
+cmd_get
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total get commands done
+.UNINDENT
+.UNINDENT
+.sp
+cmd_set
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total set commands done
+.UNINDENT
+.UNINDENT
+.sp
+get_misses
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects can’t be gotten from server
+.UNINDENT
+.UNINDENT
+.sp
+verify_misses
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects need to verify but can’t get them
+.UNINDENT
+.UNINDENT
+.sp
+verify_failed
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects with insistent value
+.UNINDENT
+.UNINDENT
+.sp
+expired_get
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects are expired but we get them
+.UNINDENT
+.UNINDENT
+.sp
+unexpired_unget
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many objects are unexpired but we can’t get them
+.UNINDENT
+.UNINDENT
+.sp
+written_bytes
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total written bytes
+.UNINDENT
+.UNINDENT
+.sp
+read_bytes
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total read bytes
+.UNINDENT
+.UNINDENT
+.sp
+object_bytes
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total object bytes
+.UNINDENT
+.UNINDENT
+.sp
+packet_disorder
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many UDP packages are disorder
+.UNINDENT
+.UNINDENT
+.sp
+packet_drop
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many UDP packages are lost
+.UNINDENT
+.UNINDENT
+.sp
+udp_timeout
+.INDENT 0.0
+.INDENT 3.5
+.sp
+How many times UDP time out happen
+.UNINDENT
+.UNINDENT
+.sp
+Run time
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total run time
+.UNINDENT
+.UNINDENT
+.sp
+Ops
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Total operations
+.UNINDENT
+.UNINDENT
+.sp
+TPS
+.INDENT 0.0
+.INDENT 3.5
+.sp
+Throughput, operations/second
+.UNINDENT
+.UNINDENT
+.sp
+Net_rate
+.INDENT 0.0
+.INDENT 3.5
+.sp
+The average rate of network
+.UNINDENT
+.UNINDENT
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-s, \-\-servers=
+.
+List one or more servers to connect. Servers count must be less than
+threads count. e.g.: \-\-servers=localhost:1234,localhost:11211
+.TP
+.B \-T, \-\-threads=
+.
+Number of threads to startup, better equal to CPU numbers. Default 8.
+.TP
+.B \-c, \-\-concurrency=
+.
+Number of concurrency to simulate with load. Default 128.
+.TP
+.B \-n, \-\-conn_sock=
+.
+Number of TCP socks per concurrency. Default 1.
+.TP
+.B \-x, \-\-execute_number=
+.
+Number of operations(get and set) to execute for the
+given test. Default 1000000.
+.TP
+.B \-t, \-\-time=
+.
+How long the test to run, suffix: s\-seconds, m\-minutes, h\-hours,
+d\-days e.g.: \-\-time=2h.
+.TP
+.B \-F, \-\-cfg_cmd=
+.
+Load the configure file to get command,key and value distribution list.
+.TP
+.B \-w, \-\-win_size=
+.
+Task window size of each concurrency, suffix: K, M e.g.: \-\-win_size=10k.
+Default 10k.
+.TP
+.B \-X, \-\-fixed_size=
+.
+Fixed length of value.
+.TP
+.B \-v, \-\-verify=
+.
+The proportion of date verification, e.g.: \-\-verify=0.01
+.TP
+.B \-d, \-\-division=
+.
+Number of keys to multi\-get once. Default 1, means single get.
+.TP
+.B \-S, \-\-stat_freq=
+.
+Frequency of dumping statistic information. suffix: s\-seconds,
+m\-minutes, e.g.: \-\-resp_freq=10s.
+.TP
+.B \-e, \-\-exp_verify=
+.
+The proportion of objects with expire time, e.g.: \-\-exp_verify=0.01.
+Default no object with expire time
+.TP
+.B \-o, \-\-overwrite=
+.
+The proportion of objects need overwrite, e.g.: \-\-overwrite=0.01.
+Default never overwrite object.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-R, \-\-reconnect
+.
+Reconnect support, when connection is closed it will be reconnected.
+.TP
+.B \-U, \-\-udp
+.
+UDP support, default memaslap uses TCP, TCP port and UDP port of
+server must be same.
+.TP
+.B \-a, \-\-facebook
+.
+Whether it enables facebook test feature, set with TCP and multi\-get with UDP.
+.TP
+.B \-B, \-\-binary
+.
+Whether it enables binary protocol. Default with ASCII protocol.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-P, \-\-tps=
+.
+Expected throughput, suffix: K, e.g.: \-\-tps=10k.
+.TP
+.B \-p, \-\-rep_write=
+.
+The first nth servers can write data, e.g.: \-\-rep_write=2.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-b, \-\-verbose
+.
+Whether it outputs detailed information when verification fails.
+.TP
+.B \-h, \-\-help
+.
+Display this message and then exit.
+.TP
+.B \-V, \-\-version
+.
+Display the version of the application and then exit.
+.UNINDENT
+.SH EXAMPLES
+.sp
+memaslap \-s 127.0.0.1:11211 \-S 5s
+.sp
+memaslap \-s 127.0.0.1:11211 \-t 2m \-v 0.2 \-e 0.05 \-b
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-w 40k \-S 20s \-o 0.2
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-T 4 \-c 128 \-d 20 \-P 40k
+.sp
+memaslap \-s 127.0.0.1:11211 \-F config \-t 2m \-d 50 \-a \-n 40
+.sp
+memaslap \-s 127.0.0.1:11211,127.0.0.1:11212 \-F config \-t 2m
+.sp
+memaslap \-s 127.0.0.1:11211,127.0.0.1:11212 \-F config \-t 2m \-p 2
+.SH HOME
+.sp
+To find out more information please check:
+\fI\%http://launchpad.org/libmemcached\fP
+.SH AUTHORS
+.sp
+Mingqiang Zhuang <\fI\%mingqiangzhuang@hengtiansoft.com\fP> (Schooner Technolgy)
+Brian Aker, <\fI\%brian@tangent.org\fP>
+.SH SEE ALSO
+.sp
+\fImemcached(1)\fP \fIlibmemcached(3)\fP \fImemcached_strerror(3)\fP
+.SH AUTHOR
+Brian Aker
+.SH COPYRIGHT
+2011, Brian Aker
+.\" Generated by docutils manpage writer.
+.\"
+.