//
memtier_benchmark内存性能测试工具
//
最近在测试英特尔的傲腾可持久化内存,使用到了memtier_benchmark这个工具,在使用这个工具的时候,遇到了一些问题,我简单总结了一下,写在这里,后续如果有测试需求,可以参考下。
memtier_benchmark是类似redis-benchmark的内存测试工具,但是它又不仅限redis的测试,还可以覆盖memcache,它提供了丰富的选项和报表功能,能够产生各种各样的流量模拟。下面我们看下它的安装方法和主要参数。
memtier_benchmark安装方法还是有必要了解下的,因为我自己的安装的时候出现了一些小问题,这里给出一个经过测试的安装过程:
1、准备工作 ## 安装编译环境 yum install -y autoconf automake make gcc-c++ ## 安装依赖包 yum install -y pcre-devel zlib-devel libmemcached-devel wget git 2、安装libevent库,memtier_benchmark对于libevent库的版本要求比较高 # 使用下面的方法可以安装libevent-2.0.22的库: cd /root/Downloads wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz tar xvzf libevent-2.0.22-stable.tar.gz cd libevent-2.0.22-stable ./configure make && make install # 配置libevent库的环境变量 echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}" >> /etc/profile source /etc/profile ldconfig /usr/local/lib 3、下载、编译、安装memtier_benchmark的库 cd /root/Downloads git clone https://github.com/RedisLabs/memtier_benchmark.git cd memtier_benchmark autoreconf -ivf ./configure --prefix=/usr/local/memtier make && make install echo "export PATH=/usr/local/memtier/bin:${PATH}" >> /etc/profile source /etc/profile 4、运行帮助命令查看是否安装成功 memtier_benchmark --help
以上就是经过验证的安装过程。
下面我们来看常用的参数,当然,你也可以使用--help参数来查看使用手册,可能会得到更详细的结果,这里我介绍比较常见的参数。
-s --server:代表服务器地址,默认localhost
-p --port:代表端口,默认为redis的6379端口
-x --run-number:代表完整测试的重复次数
--client-stats=file:生成每个客户端的统计文件
--out-file=file:生成最后的统计结果
-n --request:每个客户端发出的请求数,默认是10000
-c --clients:每个线程驱动的客户端数量,默认是50
-t --thread:模拟的线程数量,默认是4
--test-time:测试的时间,这里时间最好不要太短,否则有可能捕捉不到bad case
--ratio=Ratio:set和get请求的比例,默认是1:10
--data-size:对象数据大小,默认是32
-R、--random-data:使用随机化的测试数据
--data-size-range:数据对象大小范围,可以写成32-512,代表32字节到512字节
--data-size-list:这个参数比较关键,它可以帮助你去对key值的大小进行配比,按照一定的比例去模拟key值,关于这个参数,手册上没有很清楚的讲述,也是查看了日本一位作者的测试报告才看到的,举例如下:
--data-size-list=4000:50,16000:50
上面的样例代表4k大小的key值占比50%,16k大小的key值占比50%,当然,你可以增加到3个key,只要权重的和是100%即可
--data-size-pattern=R|S 这个参数的取值只能是R或者S,R代表random,S代表sequence,试想,如果你的数据对象大小是在32-512字节之间,如何分配所有的字节大小呢?该参数就是帮你解决这个问题,配置成R,则会随机的在这个定义好的范围内去取值,配置成S则会顺序均匀生成32-512大小的key
有了上面的参数说明,我们现在可以看一个完整的命令怎么写了:
上面的命令代表:
测试本地6379端口,模拟并发线程4个,每个线程驱动100个客户端,其中4k大小的key占比50%,512k大小的key占比50%,总共测试1800s,读写比例10:1,将每个客户端的日志保存在/dir/client.txt中,将总的结果保存在/dir/result.txt中。
最后面,给出一个测试结果的内容,供大家参考:
4 Threads 100 Connections per thread 1800 Seconds ALL STATS ========================================================================= Type Ops/sec Hits/sec Misses/sec Latency KB/sec ------------------------------------------------------------------------- Sets 2218.15 --- --- 110.76500 558106.44 Gets 22179.61 102.75 22076.86 6.95500 26237.25 Waits 0.00 --- --- 0.00000 --- Totals 24397.76 102.75 22076.86 16.39300 584343.69 Request Latency Distribution Type <= msec Percent ------------------------------------------------------------------------ SET 1.500 0.00 SET 3.900 0.01 SET 4.000 0.01 SET 4.100 0.01 SET 4.200 0.02 SET 4.300 0.03 SET 4.400 0.03 SET 4.500 0.05 SET 4.600 0.06 SET 4.700 0.09 SET 4.800 0.14 ...... SET 330.000 99.98 SET 340.000 99.99 SET 350.000 100.00 SET 360.000 100.00 SET 370.000 100.00 --- GET 3.000 0.00 ....... GET 23.000 99.98 GET 24.000 99.99 GET 25.000 99.99 GET 26.000 99.99 GET 27.000 99.99 GET 28.000 100.00 GET 29.000 100.00 GET 30.000 100.00 GET 31.000 100.00 GET 32.000 100.00
有帮助的话还希望点下再看哈