Vdbench测试步骤

安装Vdbench

在ARM服务器上执行Vdbench前需要重新编译vdbench源码,具体解决方法请参见https://goodcommand.readthedocs.io/zh_CN/latest/command/vdbench.html

  1. 下载Vdbench压缩包到所有client的“/home”目录下。

    下载链接:https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/utilities_drivers/vdbench/vdbench50407.zip

  2. 进入所有客户端“/home”目录下解压Vdbench压缩包。

    1
    cd /home && unzip vdbench50407.zip
    

  3. 安装Java。

    1
    yum -y install java
    

    Vdbench的使用依赖Java,若已安装,则可跳过本步骤。

  4. 测试Vdbench是否工作正常。

    1
    2
    3
    cd vdbench50407
    chmod +x vdbench
    ./vdbench -t
    

    若出现“Vdbench execution completed successfully”字段则说明Vdbench工作正常。

Vdbench测试模型

Vdbench通过执行工作负载配置文件运行,选取其中一台客户端执行即可,该客户端会通过负载配置文件中的其他客户端IP地址等信息自动登录到其他客户端执行测试。测试前需要先创建若干块设备镜像(image)并映射成客户端本地块设备(/dev/rbd0),Vdbench会直接对这些块设备进行读写测试。

创建Vdbench工作负载

本文以1个Ceph客户端,该客户端映射了3个RBD块设备,每个块设备读写最大容量为100G为例,在任意一个客户端上(本文使用client1)创建vdbench 4KB随机读工作负载。

1
vi /home/4k_randread.txt

添加以下内容:

  1. 为所有测试机设置统一的默认参数,请根据实际情况修改Vdbench路径,此处为“/home/vdbench50406”目录。
    1
    hd=default,vdbench=/home/vdbench50406,user=root,shell=ssh
    
  2. 定义测试机。
    1
    hd=hd1,system=client1
    

    相关参数如表1所示。

    表1 参数说明

    参数

    说明

    hd

    测试机的名称

    system

    主机IP地址或主机名

  3. 定义存储设备。
    1
    2
    3
    sd=sd10,host=hd1,lun=/dev/rbd0,openflags=o_direct,threads=16
    sd=sd11,host=hd1,lun=/dev/rbd1,openflags=o_direct,threads=16
    sd=sd12,host=hd1,lun=/dev/rbd2,openflags=o_direct,threads=16
    

    相关参数如表2所示。

    表2 参数说明

    参数

    说明

    sd

    存储的名称,必须全局唯一

    host

    存储所在的主机的ID

    lun

    裸盘盘符或文件系统名称,Vdbench可以为您创建一个磁盘,此处测试的盘符为Ceph块设备/dev/rbd

    openflags

    用于打开一个LUN或一个文件的标志位,一般这里设置为o_direct,绕过缓存机制,直接落盘

    threads

    对SD的最大并发IO请求数量,默认为8,可以根据需要调节

  4. 工作负载定义。
    1
    wd=wd1,sd=sd*,rdpct=100,seekpct=100,xfersize=4k
    

    相关参数如表3所示。

    表3 参数说明

    参数

    说明

    wd

    工作负载的名称

    sd

    要使用的存储ID

    rdpct

    读取请求占请求总数的百分比

    • rdpct=100:只有读请求
    • rdpct=0:只有写请求

    seekpct

    随机寻道百分比

    • seekpct=100:全部随机I/O
    • seekpct=0:全部顺序I/O

    xfersize

    数据块大小

  5. 运行定义。
    1
    rd=rd1,wd=wd1,iorate=max,elapsed=600,format=restart,maxdata=100G,interval=5,warmup=30
    

    相关参数如表4所示。

    表4 参数说明

    参数

    说明

    rd

    运行的名称

    wd

    用于此次运行的工作负载的ID

    iorate

    一种或多种IO速率

    • iorate=100:运行每秒100个IO的负载
    • iorate=(100,200,…):运行每秒100个IO的负载,然后再运行每秒200个IO的负载,依次下去
    • iorate=(100-1000,100):运行每秒100个IO的负载,一直运行到每秒1000个IO的负载,增量为100
    • iorate=max:允许工作负载以存储所能承受的最大IO速率进行IO下发,如果定义了不同比例的IO特性,就要根据比例进行最大速率的IO下发

    elapsed

    运行持续时间,单位秒

    maxdata

    最大容量

    interval

    终端报告间隔

    warmup

    加热时间

执行Vdbench测试

以4K随机读为例,其它场景可参考修改(执行读操作之前要确保块设备中有数据)。

Vdbench测试步骤创建好的4k_randread.txt负载为例进行说明:

1
2
cd /home
/home/vdbench50406/vdbench -f /home/4k_randread.txt -o 4k_randread_output

-f 指定待测试的工作负载配置文件;-o表示测试结果存放的目录。

收集测试结果

测试完成后默认会在当前目录下创建一个名为“output”的目录存放测试结果,若测试命令中添加-o参数指定结果输出路径,则测试结果存放到该路径下。

执行Vdbench测试的测试命令为例,会在“/home/4k_randread_output”目录下存放测试结果。

查看测试结果。

1
2
cd /home/4k_randread_output
cat totals.html

totals.html内容如下,其中i/o rate表示IOPS,MB/sec表示带宽, resp time表示时延: