一、 概述
1.1 内容简介
Vdbench 是一个命令行使用程序,旨在帮助工程师和客户生成用于验证存储性能和存储数据完
整性的磁盘 I/O 负载。还可通过输入文本文件指定 Vdbench 执行参数。它是一个免费的工具,容
易使用,而且常常用于测试和基准测试。
本指南向读者介绍 Vdbench 工具在在 Linux 和 Windows 平台安全使用,对快速学习该工具提
供参考。
文档包含以下内容:
- 安装配置
- 常用参数详解
- 常用测试用例
1.2 产品版本
产品名称
版本
描述
Vdbench5.04.07性能测试工具Linux 客户端CentOS 7.6 X64Linux 操作系统Windows 客户端Windows 2012 R2 X64Windows 操作系统
1.3 读者对象
本文档主要适用于如下工程师:
- 部门工程师
- 合作伙伴技术工程师
- 客户技术工程师
二、 下载地址
官网下载链接: Vdbench Downloads
3.1 Linux 安装步骤
3.1.1 上传所需软件
使用 winscp 或者 filezilla 将所需软件上传至/root/目录下
Linux 对应版本操作系统的 iso
vdbench50407.zip
3.1.2 配置 YUM 源安装 java 环境
检查是否已经安装 java,如已安装,请跳过本步骤(3.1.2),继续执行 3.1.3 步骤即可。
rpm -qa|grep ^java
输出如下,则说明已经安装 java。
3.1.2.1 本地 YUM 源安装(推荐)
1、如无法接入外网情况下,可考虑配置本地 YUM 源进行安装相关依赖包;使用 winscp 或者 filezilla 将 Linux 对应版本操作系统的 iso 上传至/root/目录下
mount -o loop /root/<对应版本操作系统>.iso /media/
yum-config-manager --add-repo=file:
///media
rpm --
import
/etc/pki/rpm-gpg/RPM-GPG-KEY-*
yum clean all
yum makecache
yum repolist
2、安装 java
yum install -y java-
1.8
.
0
-openjdk
3.1.2.2 互联网 YUM 源安装
1、确定本机可以访问互联网
2、配置 DNS
#vim /etc/resolv.conf
//在这个文件中插入如下内容
nameserver
114.114
.
114.114
ping www.baidu.com
输出如下,则说明可以正常访问互连网且域名解析正常;否则请检查网络和 DNS 的配置。
3、使用系统自带 CentOS-Base.repo 配置文件即可
备注:如果没有该配置文件则可以手动新建编辑 CentOS-Base.repo 文件
# vi /etc/yum.repos.d/CentOS-Base.repo
//在这个文件中插入如下内容
[base]
name=CentOS-$releasever - Base
mirrorlist=http:
//mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&i
nfra=$infra
#baseurl=http:
//mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=
1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http:
//mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=upda
tes&infra=$infra
#baseurl=http:
//mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=
1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http:
//mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extra
s&infra=$infra
#baseurl=http:
//mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=
1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
4、安装 java
yum install -y java-
1.8
.
0
-openjdk
3.1.3 安装 Vdbench
Vdbench 无需安装,解压 vdbench50407.zip 即可。
mkdir /root/vdbench50407
mv /root/vdbench50407.zip /root/vdbench50407
unzip /root/vdbench50407/vdbench50407.zip
3.1.4 验证 Vdbench 是否安装成功
执行以下命令检查是否安装成功:
/root/vdbench50407/vdbench -t
看到结尾输入如下,则说明安装成功:
3.2 Windows 安装步骤
3.2.1 上传所需软件
使用远程桌面将所需软件上传至 C 盘目录下
- jre-8u241-windows-x64.exe
- vdbench50407.zip
3.2.2 安装 java
a) 双击“jre-8u241-windows-x64.exe”
b) 点击“安装”,开始安装
c) 完成安装
3.2.3 安装 Vdbench
Vdbench 无需安装,解压 vdbench50407.zip 即可。
3.2.4 验证 Vdbench 是否安装成功
win + R,打开命令行窗口
依次进入到 Vdbench 所在的文件夹,执行.\vdbench -t
看到结尾输入如下,则说明安装成功:
四、 常用参数详解
4.1 块设备常用参数
4.1.1 主机定义(HD)
hd:主机定义
system= IP 地址或网络名称
4.1.2 存储定义(SD)
sd= 标识存储的名称。
host= 存储所在的主机的 ID。
lun= 原始磁盘、磁带或文件系统的名称。Vdbench 也可为您创建一个磁盘。
threads= 对 SD 的最大并发 I/O 请求数量。默认为 8。
hitarea= 调整读取命中百分比的大小。默认为 1m
openflags= 用于打开一个 lun 或一个文件的 flag_list
4.1.3 工作负载定义(WD)
wd= 标识工作负载的名称
sd= 要使用的存储定义的 ID
host= 要运行此工作负载的主机的 ID。默认设置为 localhost
rdpct= 读取请求占请求总数的百分比,为 100,则为读;为 0,则为写。
rhpct= 读取命中百分比。默认设置为 0。
whpct= 写入命中百分比。默认设置为 0。
xfersize= 要传输的数据大小。默认设置为 4k。
seekpct= 随机寻道的百分比。可为随机值,为 0 则为顺序;为 100 则为随机。
4.1.4 工作负载定义(RD)
rd= 标识运行的名称。
wd= 用于此运行的工作负载的 ID。
iorate= 一个或多个 I/O 速率XSKY Vdbench 工具安装使用标准文档
interval=报告间隔序号
elapsed= time:以秒为单位的运行持续时间。默认设置为 30。
warmup= time:加热期,最终会被忽略
4.2 文件系统常用参数
4.2.1 主机定义(HD)
hd:主机定义
system= IP 地址或网络名称
4.2.2 文件存储定义(FSD)
fsd= 标识文件系统定义的名称
anchor= 将在其中创建目录结构的目录
width= 要在定位符下创建的目录数
depth= 要在定位符下创建的级别数
files= 要在最低级别创建的文件数
sizes=将创建的文件大小
openflags= 用于打开一个 lun 或一个文件的 flag_list
4.2.3 文件工作负载定义(FWD)
fwd= 标识文件系统工作负载定义的名称。
fsd= 要使用的文件系统定义的 ID。
host= 要用于此工作负载的主机的 ID。
fileio= random 或 sequential,表示文件 I/O 将执行的方式。
fileselect= random 或 sequential,标识选择文件或目录的方式。
xfersizes= 数据传输(读取和写入操作)处理的数据大小。
operation= mkdir、rmdir、create、delete、open、close、read、write、getattr 和 setattr。
选择要执行的单个文件操作。
threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。
4.2.4 运行定义(RD)
rd= 标识运行的名称。
fwd= 要使用的文件系统工作负载定义的 ID。
interval=报告间隔序号
fwdrate= 每秒执行的文件系统操作数量。
format= yes / no / only / restart / clean / directories。在开始运行之前要执行的操作。
yes:是每次都会先删除目录文件,再重新创建
restart:每次起的时候会先校验文件、目录是否全,不全的补上
elapsed= time:以秒为单位的运行持续时间。
五、 使用方法
5.1 Linux 使用方法
/root/vdbench50407/vdbench -f parmfile
5.2 Windows 使用方法
c:\vdbench50407\vdbench.bat -f parmfile
六、 常用测试脚本
6.1 Linux 常用测试脚本
6.1.1 块存储常用测试脚本
//定义主机的默认参数,Vdbench 的路径为/root/vdbench50407,用户为 root,shell 为 ssh
hd=
default
,vdbench=/root/vdbench50407,user=root,shell=ssh
//定义 3 个主机,标签为 hd1-3,ip 为 44.8.16.205-207
hd=hd1,system=
44.8
.
16.205
hd=hd2,system=
44.8
.
16.206
hd=hd3,system=
44.8
.
16.207
//定义存储的默认参数,openflags 采用 O_direct,卷大小为 100G,线程为 8 个。
sd=
default
,openflags=o_direct,size=100GB,threads=
8
//定义 6 个存储,分别是主机 hd1 的 sdn、sdo 的卷,主机 hd2 的 sdn、sdo 的卷,主机 hd3 的sdn、sdo 的卷
sd=sd1,hd=hd1,lun=/dev/sdn
sd=sd2,hd=hd1,lun=/dev/sdo
sd=sd3,hd=hd2,lun=/dev/sdn
sd=sd4,hd=hd2,lun=/dev/sdo
sd=sd5,hd=hd3,lun=/dev/sdn
sd=sd6,hd=hd3,lun=/dev/sdo
//定义工作负载 RandomCase1,4k 100%随机写
wd=RandomCase1,rdpct=
0
,seekpct=
100
,xfersize=4k
//定义工作负载 RandomCase2,4k 100%随机读
wd=RandomCase2,rdpct=
100
,seekpct=
100
,xfersize=4k
//定义工作负载 RandomCase3,1M 100%顺序写
wd=RandomCase3,rdpct=
0
,seekpct=
0
,xfersize=1024k
//定义工作负载 RandomCase4,1M 100%顺序读
wd=RandomCase4,rdpct=
100
,seekpct=
0
,xfersize=1024k
//定义运行默认参数,打印间隔为 1s,io 速率为最大
rd=
default
,interval=
1
,iorate=max
//定义运行任务 TestCase1,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 4k 随机写测试)
rd=TestCase1,wd=RandomCase1,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase2,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 4k 随机读测试)
rd=TestCase2,wd=RandomCase2,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase3,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 1M 顺序写测试)
rd=TestCase3,wd=RandomCase3,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase4,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 1M 顺序读测试)
rd=TestCase4,wd=RandomCase4,sd=sd*,warmup=
120
,elapsed=
60
6.1.2 文件存储常用测试脚本
//定义主机的默认参数,Vdbench 的路径为/root/vdbench50407,用户为 root,shell 为 ssh
hd=
default
,vdbench=/root/vdbench50407,user=root,shell=ssh
//定义 3 个主机,标签为 hd1-3,ip 为 44.8.16.205-207
hd=hd1,system=
44.8
.
16.205
hd=hd2,system=
44.8
.
16.206
hd=hd3,system=
44.8
.
16.207
//定义文件存储的默认参数,文件夹的深度为 3,广度为 8,共计 512 个文件夹。
fsd=
default
,depth=
3
,width=
8
//定义文件存储 fsd1,目录为/test-nas/4k,最下层每个文件夹里有 512 个文件,每个文件大小为4k。
fsd=fsd1,anchor=/test-nas/4k,files=
512
,size=4k,shared=yes
//定义文件存储 fsd2,目录为/test-nas/4k,最下层每个文件夹里有 32 个文件,每个文件大小为1m。
fsd=fsd2,anchor=/test-nas/1m,files=
32
,size=1m,shared=yes
//定义默认文件工作负载,线程为 16 个,openflags 采用 O_direct,传输数据的大小为 512k。
fwd=
default
,threads=
16
,openflags=o_direct,xfersize=512k
//定义文件工作负载 fwd1,主机为 hd1-hd3,文件存储定义为 fsd1,单个文件为顺序写,文件选择方式为随机。
fwd=fwd1,hd=(hd1,hd2,hd3),fsd=fsd1,operation=write,fileio=sequential,fileselect=random
//定义文件工作负载 fwd2,主机为 hd1-hd3,文件存储定义为 fsd1,单个文件为顺序读,文件选择方式为随机。
fwd=fwd2,hd=(hd1,hd2,hd3),fsd=fsd1,operation=read,fileio=sequential,fileselect=random
//定义文件工作负载 fwd3,主机为 hd1-hd3,文件存储定义为 fsd2,单个文件为顺序写,文件选择方式为随机。
fwd=fwd3,hd=(hd1,hd2,hd3),fsd=fsd2,operation=write,fileio=sequential,fileselect=random
//定义文件工作负载 fwd4,主机为 hd1-hd3,文件存储定义为 fsd2,单个文件为顺序读,文件选择方式为随机。
fwd=fwd4,hd=(hd1,hd2,hd3),fsd=fsd2,operation=read,fileio=sequential,fileselect=random
//定义运行 rd1,文件工作负载为 fwd1,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd1,fwd=fwd1,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd2,文件工作负载为 fwd2,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd2,fwd=fwd2,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd3,文件工作负载为 fwd3,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd3,fwd=fwd3,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd4,文件工作负载为 fwd4,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd4,fwd=fwd4,interval=
1
,format=restart,fwdrate=max,elapsed=
60
fsd=fsd1,anchor=/testing_dir,depth=1,width=1,file=100000,size=10m,openflags=o_direct
fwd=fwd1,fsd=fsd1,operation=read,xfersize=1m,fileio=random,fileselect=random,threads=64
rd=rd1,fwd=fwd1,fwdrate=max,format=no,forrdpct=(0),elapsed=120,interval=2,pause=1m
6.2 Windows 常用测试脚本
6.2.1 块存储常用测试脚本
//定义主机的默认参数,Vdbench 的路径为 c:\vdbench50407,shell 为 vdbench
hd=
default
,vdbench=c:\vdbench50407,shell=vdbench
//定义 3 个主机,标签为 hd1-3,ip 为 44.8.16.205-207
hd=hd1,system=
44.8
.
16.205
hd=hd2,system=
44.8
.
16.206
hd=hd3,system=
44.8
.
16.207
//定义存储的默认参数,openflags 采用 directio,卷大小为 90G(设置为创建的卷的 90%),线程为 8 个。
sd=
default
,openflags=directio,size=90GB,threads=
8
//定义 6 个存储,分别是主机 hd1 的磁盘 id 为 1、2 的磁盘,主机 hd2 的磁盘 id 为 1、2 的磁盘,主机 hd3 的磁盘 id 为 1、2 的磁盘
sd=sd1,hd=hd1,lun=\\.\physicaldrive1
sd=sd2,hd=hd1,lun=\\.\physicaldrive2
sd=sd3,hd=hd2,lun=\\.\physicaldrive1
sd=sd4,hd=hd2,lun=\\.\physicaldrive2
sd=sd5,hd=hd3,lun=\\.\physicaldrive1
sd=sd6,hd=hd3,lun=\\.\physicaldrive2
//定义工作负载 RandomCase1,4k 100%随机写
wd=RandomCase1,rdpct=
0
,seekpct=
100
,xfersize=4k
//定义工作负载 RandomCase2,4k 100%随机读
wd=RandomCase2,rdpct=
100
,seekpct=
100
,xfersize=4k
//定义工作负载 RandomCase3,1M 100%顺序写
wd=RandomCase3,rdpct=
0
,seekpct=
0
,xfersize=1024k
//定义工作负载 RandomCase4,1M 100%顺序读
wd=RandomCase4,rdpct=
100
,seekpct=
0
,xfersize=1024k
//定义运行默认参数,打印间隔为 1s,io 速率为最大
rd=
default
,interval=
1
,iorate=max
//定义运行任务 TestCase1,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 4k 随机写测试)
rd=TestCase1,wd=RandomCase1,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase2,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 4k 随机读测试)
rd=TestCase2,wd=RandomCase2,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase3,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 1M 顺序写测试)
rd=TestCase3,wd=RandomCase3,sd=sd*,warmup=
120
,elapsed=
60
//定义运行任务 TestCase4,使用工作负载 RandomCase1,使用存储为所有定义存储,预热120s,运行 60s。(执行 1M 顺序读测试)
rd=TestCase4,wd=RandomCase4,sd=sd*,warmup=
120
,elapsed=
60
6.2.2 文件存储常用测试脚本
//定义主机的默认参数,Vdbench 的路径为 c:\vdbench50407,shell 为 vdbench
hd=
default
,vdbench=c:\vdbench50407,shell=vdbench
//定义 3 个主机,标签为 hd1-3,ip 为 44.8.16.205-207
hd=hd1,system=
44.8
.
16.205
hd=hd2,system=
44.8
.
16.206
hd=hd3,system=
44.8
.
16.207
//定义文件存储的默认参数,文件夹的深度为 3,广度为 8,共计 512 个文件夹。
fsd=
default
,depth=
3
,width=
8
//定义文件存储 fsd1,目录为/test-nas/4k,最下层每个文件夹里有 512 个文件,每个文件大小为4k。
fsd=fsd1,anchor=X:\4k,files=
512
,size=4k,shared=yes
//定义文件存储 fsd2,目录为/test-nas/4k,最下层每个文件夹里有 32 个文件,每个文件大小为1m。
fsd=fsd2,anchor=X:\1m,files=
32
,size=1m,shared=yes
//定义默认文件工作负载,线程为 16 个,openflags 采用 directio,传输数据的大小为 512k。
fwd=
default
,threads=
16
,openflags=directio,xfersize=512k
//定义文件工作负载 fwd1,主机为 hd1-hd3,文件存储定义为 fsd1,单个文件为顺序写,文件选择方式为随机。
fwd=fwd1,hd=(hd1,hd2,hd3),fsd=fsd1,operation=write,fileio=sequential,fileselect=random
//定义文件工作负载 fwd2,主机为 hd1-hd3,文件存储定义为 fsd1,单个文件为顺序读,文件选择方式为随机。
fwd=fwd2,hd=(hd1,hd2,hd3),fsd=fsd1,operation=read,fileio=sequential,fileselect=random
//定义文件工作负载 fwd3,主机为 hd1-hd3,文件存储定义为 fsd2,单个文件为顺序写,文件选方式为随机。
fwd=fwd3,hd=(hd1,hd2,hd3),fsd=fsd2,operation=write,fileio=sequential,fileselect=random
//定义文件工作负载 fwd4,主机为 hd1-hd3,文件存储定义为 fsd2,单个文件为顺序读,文件选择方式为随机。
fwd=fwd4,hd=(hd1,hd2,hd3),fsd=fsd2,operation=read,fileio=sequential,fileselect=random
//定义运行 rd1,文件工作负载为 fwd1,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd1,fwd=fwd1,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd2,文件工作负载为 fwd2,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd2,fwd=fwd2,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd3,文件工作负载为 fwd3,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd3,fwd=fwd3,interval=
1
,format=restart,fwdrate=max,elapsed=
60
//定义运行 rd4,文件工作负载为 fwd4,打印间隔为 1s,运行前执行的操作为 restart,执行文件操作的速率为最大,执行时间为 60s。
rd=rd4,fwd=fwd4,interval=
1
,format=restart,fwdrate=max,elapsed=
60
七、 测试结果解读
7.1 输出结果
最后输出结果如下,则说明测试完成:
Vdbench execution completed successfully. Output directory: /root/vdbench50407/output
7.2 输出文件说明
每次运行后,Vdbench 会创建一个包含以下文件的 output 文件夹:
errorlog.html:当为测试启用了数据验证(-jn)时,它可包含一些数据块中的错误的相关信息
flatfile.html:包含 Vdbench 生成的一种逐列的 ASCII 格式的信息。
histogram.html:种包含报告柱状图的响应时间、文本格式的文件。
logfile.html:包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途
parmfile.html:显示已包含用于测试的每项内容的最终结果
resourceN-M.html、resourceN.html、resourceN.var_adm_msgs.html:摘要报告、stdout/stderr 报告、主机 N 的摘要报告。
sdN.histogram.html、sdN.html:每个 N 存储定义的柱状图和存储定义 “N” 报告。
summary.html:主要报告文件,显示为在每个报告间隔的每次运行生成的总工作负载,以及除第一个间隔外的所有间隔的加权平均值。
7.3 summary.html 文件说明 7.3.1 块存储 sunmary.html 说明
interval:打印间隔
I/O rate:每秒平均 I/O 率
MB sec:每秒平均带宽
bytes I/O:平均 I/O 大小
read pct:平均读百分比
resp time:平均读写响应时间
read resp:平均读响应时间
write resp:平均写响应时间
resp max:最大响应时间 mb/sec
resp stddev:响应时间的标准偏差
queue depth:Vdbench 计算的平均 I/O 队列深度
cpu% sys+usr:CPU 使用率(sys+usr)
cpu% sys:CPU 使用率(sys)
7.3.2 文件存储 sunmary.html 说明
ReqstdOps(rate/resp):每秒处理请求的个数(速率/响应时间)
cpu%(total/sys):CPU 使用率(total/sys)
read pct:读百分比
read(rate/resp):读(速率/响应时间)
write(rate/resp):写(速率/响应时间)
mb/sec(read/write):带宽(读/写)
mb/sec total:总的读写带宽
xfer size:平均传输大小
mkdir(rate/resp):创建文件夹(速率/响应时间)
rmdir(rate/resp):移除文件夹(速率/响应时间)
create(rate/resp):创建文件(速率/响应时间)
open(rate/resp):打开文件(速率/响应时间)
close(rate/resp):关闭文件(速率/响应时间)
delete(rate/resp):删除文件(速率/响应时间)
版权归原作者 每天读点书学堂 所有, 如有侵权,请联系我们删除。