---
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-wjcc_cszd_009.html
sourcePath: /source/zh/kunpengsdss/testGuide/tstg/ceph-wjcc_cszd_009.html
indexId: 19154da9f07d9220d13a727d2408f6a3916d3bb49525ee8390c62aa8d195b02961
---
# 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地址等信息自动登录到其他客户端执行测试。


#### 创建Vdbench工作负载

本文以1个Ceph客户端为例，在任意一个客户端上（本文使用client1）创建vdbench 4KB随机读工作负载：

```
vi /home/4k_randread.txt
```

添加以下内容：

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

2. 定义测试机。
  1 hd=hd1,system=client1

  相关参数如表1所示。

**表1 参数说明**

| 参数 | 说明 |
| --- | --- |
| hd | 测试机的名称 |
| system | 主机IP地址或主机名 |


3. 文件系统定义。
  1 fsd=fsd1,anchor=/mnt/cephfs,depth=1,width=10,files=200,size=20m,shared=yes

  相关参数如表2所示。

**表2 参数说明**

| 参数 | 说明 |
| --- | --- |
| fsd | 标识文件系统的名称 |
| anchor | 将在其中创建目录结构的父目录，此处为 CephFS 挂载点 |
| depth | 要在定位符下创建的级别数 |
| width | 要在定位符下创建的目录数 |
| files | 要在最低级别创建的文件数 |
| size | 创建的文件大小 |
| shared | 所有主机共享fsd参数 |


4. 文件系统工作负载定义。
  1 2 fwd=default,xfersize=4k,fileio=random,fileselect=random,rdpct=100,threads=128 fwd=fwd1,fsd=fsd1,host=hd1

  相关参数如表3所示。

**表3 参数说明**

| 参数 | 说明 |
| --- | --- |
| fwd | default表示为所有工作负载设置统一的默认参数 |
| xfersize | 数据块大小 |
| fileio | 取值为random或sequential，表示文件IO将执行的方式 |
| fileselect | 取值为random或sequential，表示选择文件或目录的方式 |
| rdpct | 读写百分比 rdpct=100表示只有读请求 rdpct=0表示只有写请求 |
| operation | 取值为read或write，确定文件系统的操作 |
| threads | 此工作负载的并发线程数量 |
| fsd | 要使用的文件系统ID |
| host | 要用于此工作负载的主机ID |


5. 运行定义。
  1 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=5

  相关参数如表4所示。

**表4 参数说明**

| 参数 | 说明 |
| --- | --- |
| rd | 表示运行的名称 |
| fwd | 要使用的文件系统工作负载ID |
| fwdrate | 每秒执行的文件系统操作数量 |
| format | 表示预处理目录和文件结构方式 |
| elapsed | 以秒为单位的运行持续时间 |
| interval | 终端报告间隔 |


#### 执行Vdbench测试

本文默认每台客户端的“/mnt/cephfs”目录已挂载Ceph文件系统，创建100个子目录，每个子目录下包含200个文件，每个文件20MB（可用dd写满20MB）。若实际测试时，客户端内无测试文件，可参考以下步骤创建文件以供测试。

1. 创建文件生成脚本。
  1 vim create_file.sh

  1 2 3 4 5 6 7 8 #!/bin/bash for i in {1..10} do cd /mnt/cephfs mkdir $i cd $i seq 200 |xargs -i dd if=/dev/zero of={} bs=1024000 count=20 done

2. 执行脚本。
  1 bash create_file.sh


以创建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表示时延：
