---
title: Vdbench测试步骤
description: "在ARM服务器上执行Vdbench前需要重新编译Vdbench源码，具体解决方法请参见Vdbench官方(https://goodcommand.readthedocs.io/zh_CN/latest/command/vdbench.html)。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/testGuide/tstg/ceph-kcc_cszd_008.html
sourcePath: /source/zh/kunpengsdss/testGuide/tstg/ceph-kcc_cszd_008.html
indexId: dfa8c94618e4c9e7ede1e748806c0c78f9c9579bbfe706039e51ab6f11ef2bac60
---
# Vdbench测试步骤

#### 安装Vdbench

在ARM服务器上执行Vdbench前需要重新编译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源码。

  a. 获取源码包    Vdbench Source Code Downloads (oracle.com)(https://www.oracle.com/downloads/server-storage/vdbench-source-downloads.html)
到“/home/vdbench50407”目录下。
  b. 解压Vdbench源码压缩包。
    1 cd vdbench50407 && unzip vdbench50407.src.zip

  c. 进入源码目录并创建目录。
    1 2 cd src mkdir linux

  d. 修改make.linux文件。
    1 2 cd Jni vim make.linux

    vdb变量改为源码包所在路径。

    java变量改为本机java的安装路径。

    删除以上4行中编译参数中的-m32和-m64参数。

    在vdbjni.h中char ptod_txt[256]前加上extern。

    在vdbjni.c 里面添加char ptod_txt[256]。

    在vdblinux.c中char ptod_txt[256]前加上extern。

  e. 编译。
    1 ./make.linux

  f. 拷贝动态库并重命名。
    1 2 cd /home cp vdbench50407/src/linux/linux64.so vdbench50407/linux/aarch64.so

5. 测试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随机读工作负载。

```
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负载为例进行说明：

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

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


#### 收集测试结果

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

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

查看测试结果。

```
cd /home/4k_randread_output
cat totals.html
```

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