使用memtier_benchmark测试redis

安装

环境

CentOs8.3 64bit

准备工作

## 安装编译所需的工具
yum install -y autoconf
yum install -y automake
yum install -y make
yum install -y gcc-c++
yum install -y git
dnf config-manager --set-enabled PowerTools #启用PowerTools存储库的方法
## 安装需要的依赖库
yum install -y pcre-devel
yum install -y zlib-devel
yum install -y libmemcached-devel
yum install -y openssl-devel

 

安装libevent库

yum install -y libevent-devel

 

下载、编译、安装memtier_benchmark库

mkdir /env    #根目录下创建文件夹,用于下载memtier_benchmark
cd /env 
git clone https://github.com/RedisLabs/memtier_benchmark.git    #下载memtier_benchmark源码
cd memtier_benchmark    #进入源码目录
autoreconf -ivf 
./configure 
make    #编译生成可执行文件memtier_benchmark
make install    #安装到系统中

 

验证安装成功

memtier_benchmark --help

 

 

常用选项

memtier_benchmark是一款用于Memcached/Redis的NoSQL流量生成器和性能基准测试工具,可以在Shell中通过如下方式调用:

memtier_benchmark [options]

 

连接和通用选项

  • -s--server=ADDR
    服务器地址(默认值为localhost)。

  • -p--port=PORT
    服务器端口(默认值为6379)。

  • -S--unix-socket=SOCKET
    UNIX域套接字的名称(默认值为none)。

  • -P--protocol=PROTOCOL
    使用的协议(默认值为redis)。其他受支持的协议:memcache_text和memcache_binary.

  • -x--run-count=NUMBER
    完整测试的迭代执行次数。

  • -D--debug
    输出调试信息。

  • --client-stats=FILE
    生成每个客户端的统计文件。

  • --out-file=FILE
    输出结果文件的名称(默认值为stdout)。

  • --show-config
    运行基准测试之前,输出详细的配置信息。

  • --hide-histogram
    不输出详细的延迟柱状图。

  • --help
    输出帮助信息。

  • --version
    输出版本信息。

测试选项

  • -n--requests=NUMBER
    每个客户端发出的请求总数(默认值为10000)。若使用“allkeys”,则基准测试会使用整个测试键的范围。

  • -c--clients=NUMBER
    每个线程驱动的客户端的数量(默认值为50)。

  • -t--threads=NUMBER
    基准测试使用的线程数量(默认值为4)。

  • --test-time=SECS
    基准测试的持续时间,以秒为单位。

  • --ratio=RATIO
    SET和GET操作的比率(默认值为1:10)。

  • --pipeline=NUMBER
    管道请求的并发数量(默认值为1)。

  • --reconnect-interval=NUM
    执行重新连接之后的请求数量。

  • --multi-key-get=NUM
    使用Redis的MGET命令,这个命令最多可以一次获取NUM个键的值(默认值为0)。

  • -a--authenticate=CREDENTIALS
    登录Redis服务器时使用的凭证。根据使用的协议,可以是PASSWORD或USER:PASSWORD。

  • --select-db=DB
    当测试一台Redis服务器时,选择它的DB编号。

  • --distinct-client-seed
    每个客户端都使用一个不同的随机数种子。

  • --randomize
    基于时间戳的随机数种子(默认为常数值)。

对象选项

  • -d--data-size=SIZE
    对象数据的大小(默认值为32)。

  • --data-offset=OFFSET
    值的真实大小等于data-size + data-offset。基准测试将会使用Redis的SETRANGE和GETRANGE命令(默认值为0)。

  • -R--random-data
    基准测试将会使用随机化的测试数据。

  • --data-size-range=RANGE
    基准测试使用的测试数据的大小是随机的,数据大小在指定的范围之内(min-max)。

  • --data-size-list=LIST
    根据权重列表设置测试数据的大小(size1:weight1,..sizeN:weightN)。

    --data-size-list=4000:50,16000:50

    上面的样例代表4k大小的key值占比50%,16k大小的key值占比50%,当然,可以增加到3个key,只要权重的和是100%即可

  • --data-size-pattern=R|S
    当这个选项设置为R时,就需要和--data-size-range选项一起使用,测试数据的大小将会在指定的范围之内随机取值。当这个选项设置为S时,定义的测试数据大小将会在测试键的范围之内均匀分布,请参考--key-maximum选项。默认值为R。

  • --expiry-range=RANGE
    测试键的过期时间是一个随机值,这个随机值在指定的范围之内。

导入数据选项

  • --data-import=FILE
    从文件中读取对象数据。

  • --data-verify
    当基准测试结束时,执行数据验证过程。

  • --verify-only
    只执行--data-verify选项的数据验证过程,而不会执行其他测试。

  • --generate-keys
    为导入的对象生成测试键。

  • --no-expiry
    忽略导入数据中的过期信息。

测试键选项

  • --key-prefix=PREFIX
    测试键的前缀(默认值为“memtier-”)。

  • --key-minimum=NUMBER
    测试键ID的最小值(默认值为0)。

  • --key-maximum=NUMBER
    测试键ID的最大值(默认值为10000000)。

  • --key-pattern=PATTERN
    SET和GET操作的访问模式(默认值为R:R)。可以取以下值:
    G:高斯分布;
    R:均匀随机;
    S:连续访问;
    P:并行访问(在连续访问模式中,每个客户端都具有测试键范围的一个子集)。

  • --key-stddev
    高斯分布使用的标准偏差(默认值为测试键范围的1/6)。

  • --key-median
    高斯分布使用的期望值(默认值为测试键范围的中心值)。

等待选项

    • --wait-ratio=RATIO
      SET和WAIT操作的比率(默认不使用WAIT命令,默认值为1:0)。

    • --num-slaves=RANGE
      等待指定范围之内的随机数量的从机作出应答。

    • --wait-timeout=RANGE
      等待指定范围之内的时间,单位为毫秒(正太分布的中心值在这个范围的中间)

 

伪随机数据、高斯访问模式和范围操作

伪随机数据

memtier_benchmark基准测试工具能够生成随机化的测试数据,而数据大小则取决于已知的大小范围。首先,将--data-size-pattern选项设置为“S”(连续分配);

然后,通过--data-size-range选项指定随机化的测试数据的大小范围。以下示例将会产生基准测试的键空间,其中的测试数据的大小将会在4字节至204字节之间均匀取值:

memtier_benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 <additional parameters>

 

在示例中,我们已经使用--random-data选项来生成随机数据了;除此之外,我们还使用--key-minimum--key-maximum选项来控制测试键ID的取值范围,总共产生200个测试键。

第一个测试键,memtier-200,将会持有4字节的数据;下一个测试键,将会持有5字节的数据;以此类推,直到最后一个测试键,memtier-400,将会持有204字节的数据。

高斯访问模式

memtier_benchmark基准测试工具能够使用高斯分布(也叫做正态分布)来访问测试数据。在支持高斯访问模式之前,你可以将基准测试的访问模式设置为均匀随机分布或连续分布。

但是,为了更好的模拟真实用例,你可以使用这个新的选项,确保memtier_benchmark的测试键访问模式符合常见的高斯分布的钟型曲线。当使用高斯分布时,你还可以控制和设置标准偏差和期望值,它们是高斯分布的关键参数。例如,你可以通过以下参数调用这个基准测试工具:

memtier_benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 --key-pattern=G:G --key-stddev=10 --key-median=300 <additional parameters>

 

上述调用方式会将大部分的读/写访问集中在第100个(memtier-300)测试键上。

范围操作

memtier_benchmark基准测试工具支持Redis的SETRANGEGETRANGE命令,可用于代替SETGET命令。这个功能使得你在进行基准测试时,能够明显降低网络流量的消耗,同时你仍然可以使用较大的测试数据。

例如,你可以将测试键的值的大小设置为1MB,但是只会读取和写入最后一个字节,你可以通过以下参数调用这个基准测试工具:

memtier_benchmark --data-offset=1048575 --data-size=1 <additional parameters>

 

 

 

 

posted @ 2022-03-24 16:26  文十七  阅读(555)  评论(0编辑  收藏  举报