vdbench是一个I/O工做负载生成器,一般用于验证数据完整性和度量直接附加(或网络链接)存储性能。它能够运行在windows、linux环境,可用于测试文件系统或块设备基准性能。html
vdbench版本包
下载连接java
jdk版本包
下载连接(windows)
下载连接(linux)node
解压缩jdk安装包至/opt
目录linux
tar -zxvf jdk-8u251-linux-x64.tar.gz -C /opt/
配置jdk环境变量shell
echo 'JAVA_HOME=/opt/jdk1.8.0_251' >> /root/.bashrc echo 'PATH=$JAVA_HOME/bin:$PATH' >> /root/.bashrc echo 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /root/.bashrc source /root/.bashrc
非必选项,如须要联机测试,则须要配置此项windows
示例使用三个客户端联机测试,使用客户端node241
做为主节点缓存
客户端主机名 | 客户端IP |
---|---|
node241 | 66.66.66.241 |
node242 | 66.66.66.242 |
node243 | 66.66.66.243 |
将每一个节点IP和主机名的映射关系写入到/etc/hosts
配置文件内安全
echo '66.66.66.241 node241' >> /etc/hosts echo '66.66.66.242 node242' >> /etc/hosts echo '66.66.66.243 node243' >> /etc/hosts
主节点生成公钥文件,并拷贝到其余从节点(配置主节点到从节点免秘钥登陆)bash
ssh-keygen ssh-copy-id node242 ssh-copy-id node243
解压缩vdbench安装包至/root/vdbench50406
目录内,切换到vdbench解压缩目录执行对应参数文件便可网络
unzip vdbench50406.zip -d /root/vdbench50406
部署jdk环境
直接安装jdk软件便可(环境变量在安装完成后会自动添加)
vdbench使用
解压缩vdbench软件包,切换到vdbench解压缩目录执行对应参数文件便可
5570
、5560
访问)rsyslog
,避免运行时出现其余日志文件打印信息messagescan=no
能够过滤掉多余的系统日志检查vdbench环境
./vdbench -t
运行测试模型
注:-f后接测试参数文件名,-o后接导出测试结果路径
./vdbench -f {filename} -o {exportpath}
创建rsh通讯
注:此命令是用于windows系统多主机联机跑vdbench时使用,由于windows操做系统不支持ssh,所以,vdbench提供了rsh的通讯方式。在目标主机上执行此工具后,vdbench将会启动一个java socket用于vdbench slave与master之间通讯
./vdbench rsh
vdbench可用于文件系统及块设备基准性能测试,如下主要介绍文件系统及块存储的经常使用测试参数
vdbench全部测试参数都定义到一个参数文件内,在运行时按照顺序被读取执行相应操做,在参数文件定义时须要执行顺序进行定义
文件系统参数文件定义顺序为:HD、FSD、FWD、RD
非必选项,单机运行时不须要配置HD参数,通常只有在多主机联机测试时才须要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243
rsh
、ssh
或vdbench
,默认值为rsh
,多主机联机测试时,mater和slave主机间通讯方式rsh
时,须要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,一般状况下不建议使用这种通讯方式ssh
时,须要配置master和slave主机ssh互信,一般Linux主机联机时使用此通讯方式vdbench
,须要在全部slave主机运行vdbench rsh
启用vdbench自己的rsh守护进程,一般Window主机联机时使用此通讯方式fsd=default,depth=2,width=3,files=2,size=128k fsd=fsd1,anchor=/mnt/client1 fsd=fsd2,anchor=/mnt/client2 fsd=fsd3,anchor=/mnt/client3
fsd1
、fsd2
、fsd3
...),能够指定default
(将相同的参数做为全部fsd的默认值)bottom
或all
,默认为bottom
bottom
时,程序只在最后一层目录写入测试文件all
时,程序在每一层目录都写入测试文件yes
或no
,默认值为no
,通常只有在多主机联机测试时指定anchor
为同一个路径时,须要指定参数值为yes
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node1 hd=hd2,system=node2 hd=hd3,system=node3 fsd=fsd1,anchor=/client/,depth=2,width=100,files=100,size=4k,shared=yes
计算公式以下:
最后一层生成文件夹个数=width
^depth
测试文件个数=(width
^depth
)*files
fsd=fsd1,anchor=/dir1,depth=2,width=3,files=2,size=128k 以上述参数为例,生成目录结构及测试文件以下: 最后一层文件夹数=3^2=9 最后一层文件数=9*2=18 /dir1/ ├── no_dismount.txt ├── vdb.1_1.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file ├── vdb.1_2.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file ├── vdb.1_3.dir │ ├── vdb.2_1.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ ├── vdb.2_2.dir │ │ ├── vdb_f0001.file │ │ └── vdb_f0002.file │ └── vdb.2_3.dir │ ├── vdb_f0001.file │ └── vdb_f0002.file └── vdb_control.file 12 directories, 20 files
fwd=default,operation=read,xfersize=4k,fileio=sequential,fileselect=random,threads=2 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 fwd=fwd3,fsd=fsd3,host=hd3
read
或write
,文件操做方式0
~100
,读操做占比百分比,通常混合读写时须要指定,当值为60时,则混合读写比为6:4可选值为random
或sequential
,标识文件 I/O 将执行的方式random
或sequential
,标识选择文件或目录的方式rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10
yes
、no
或restart
,标识预处理目录和文件结构的方式30
,测试运行持续时间(单位为秒)块设备参数文件定义顺序为:HD、SD、WD、RD
非必选项,单机运行时不须要配置HD参数,通常只有在多主机联机测试时才须要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243
rsh
、ssh
或vdbench
,默认值为rsh
,多主机联机测试时,mater和slave主机间通讯方式rsh
时,须要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,一般状况下不建议使用这种通讯方式ssh
时,须要配置master和slave主机ssh互信,一般Linux主机联机时使用此通讯方式vdbench
,须要在全部slave主机运行vdbench rsh
启用vdbench自己的rsh守护进程,一般Window主机联机时使用此通讯方式sd=sd1,hd=hd1,lun=/dev/sdb,openflags=o_direct,threads=6 sd=sd3,hd=hd2,lun=/dev/sdb,openflags=o_direct,threads=6 sd=sd6,hd=hd3,lun=/dev/sdb,openflags=o_direct,threads=6
o_direct
,以无缓冲缓存的方式进行读写操做wd=wd1,sd=sd*,seekpct=100,rdpct=100,xfersize=8k,skew=40 wd=wd2,sd=sd*,seekpct=100,rdpct=0,xfersize=8k,skew=10 wd=wd3,sd=sd*,seekpct=100,rdpct=100,xfersize=1024k,skew=40 wd=wd4,sd=sd*,seekpct=100,rdpct=0,xfersize=1024k,skew=10
0
或100
(也可以使用sequential
或random
表示),默认值为100
,随机寻道的百分比,设置为0
时表示顺序,设置为100
时表示随机。rd=rd1,wd=wd*,iorate=max,maxdata=400GB,warmup=30,elapse=604800,interval=5
100
、max
,此工做负载的固定I/O速率100
时,以每秒100个I/Os的速度运行工做负载,当参数值设置为一个低于最大速率的值时,能够达到限制读写速度的效果max
时,以最大的I/O速率运行工做负载,通常测试读写最大性能时,该参数值均为max
interval
为五、elapsed
为600时,测试性能为2
~elapsed/interval
(avg_2-120)时间间隔内的平均性能interval
为五、warmup
为60、elapsed
为600时,测试性能为1+(warmup/interval)
~(warmup+elapsed)/interval
(avg_13-132)时间间隔内的平均性能elapsed
时间后测试结束;当同时指定elapsed
和maxdata
参数值时,以最快运行完的参数为准(即maxdata
测试时间小于elapsed
时,程序写完elapsed
数据量后结束)100
如下时,表示读写数据量为总存储定义大小的倍数(如maxdata=2,2个存储定义(每一个存储定义数据量为100G),则实际读写数据大小为400G)100
以上时,表示数据量为实际读写数据量(可使用单位M、G、T等)30
,测试运行持续时间(单位为秒)[root@node241 vdbench50406]# cat Single-RawDisk.html sd=sd1,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd1,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,warmup=60,elapsed=600,interval=2 [root@node241 vdbench50406]# [root@node241 vdbench50406]# ./vdbench -f Single-RawDisk.html
E:\vdbench50406>more "Single FileSystem.txt" fsd=fsd1,anchor=E:\Sigle-FileSystem,depth=2,width=3,files=10,size=200M fwd=fwd1,fsd=fsd1,operation=write,xfersize=1M,fileio=sequential,fileselect=rando m,threads=2 rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=600,interval=5 E:\vdbench50406> E:\vdbench50406>vdbench -f "Single FileSystem.txt"
2、安装部署
,配置多主机ssh互信[root@node241 vdbench50406]# cat Multi-RawDisk hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243 sd=sd1,hd=hd1,lun=/dev/sdb,openflag=o_direct sd=sd2,hd=hd2,lun=/dev/sdb,openflag=o_direct sd=sd3,hd=hd3,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,maxdata=100M,elapsed=64800,warmup=30,interval=5 [root@node241 vdbench50406]# [root@node241 vdbench50406]# ./vdbench -f Multi-RawDisk
E:\vdbench50406>vdbench rsh
二、master主机运行测试参数文件便可
示例以下,三节点针对文件系统联机测试,1M顺序写,目录深度为2,每层目录数为3,每一个目录文件数为10000,每一个文件大小为200M,测试时间为600s,报告间隔1s
E:\vdbench50406>more "Multi FileSystem.txt" hd=default,vdbench=E:\vdbench50406,user=Micah,shell=vdbench hd=hd1,system=66.66.66.250 hd=hd2,system=66.66.66.252 fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=2,width=3,files=10000,size=200M fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=2,width=3,files=10000,size=200M fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=16 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=1 E:\vdbench50406> E:\vdbench50406>vdbench -f "Multi FileSystem.txt"
当vdbench运行完负载测试后,会在安装目录下生成
output
文件夹,里边包含测试结果文件
parseflat
参数解析结果./vdbench parseflat -i <flatfile.html> -o output.csv [-c col1 col2 ..] [-a] [-f col1 value1 col2 value2..] -i input flatfile, e.g. output/flatfile.html -o output CSV file name (default stdout) -c which column to write to CSV. Columns are written in the order specified -f filters: 'if (colX == valueX) ... ...' (Alphabetic compare) -a include only the 'avg' data. Default: include only non-avg data. -i是表示待分析的文件,这里写vdbench输出目录里的flatfile.html这个文件,写其它文件不能正常解析; -o是解析后的输出文件,能够手动指定存放目录。文件格式为CSV,此文件的列由-c参数指定,列的顺序为-c参数的顺序 -a是表示csv文件中只记录测试过程当中的avg值 示例以下: .\vdbench.bat parseflat -i D:\vdbench50406\output\flatfile.html -c run rate MB/sec seekpct rdpct bytes/io threads resp -o d:\output.csv -a vdbench parseflat arguments: Argument 0: -i Argument 1: D:\vdbench50406\output\flatfile.html Argument 2: -c Argument 3: run Argument 4: rate Argument 5: MB/sec Argument 6: seekpct Argument 7: rdpct Argument 8: bytes/io Argument 9: threads Argument 10: resp Argument 11: -o Argument 12: D:\output.csv Argument 13: -a 14:12:49.265 ParseFlat completed successfully.
#测试参数以下: hd=default,vdbench=E:\vdbench50406,user=Micah,shell=vdbench hd=hd1,system=66.66.66.250 hd=hd2,system=66.66.66.252 fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=2,width=3,files=10,size=4M fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=2,width=3,files=10,size=4M fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=2 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd2,host=hd2 rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=5 #测试结果以下: 18:47:03.001 Starting RD=format_for_rd1 六月 04, 2020 .Interval. .ReqstdOps... ...cpu%... read ....read..... ....write.... ..mb/sec... mb/sec .xfer.. ...mkdir.... ...rmdir.... ...create... ....open.... ...close.... ...delete... rate resp total sys pct rate resp rate resp read write total size rate resp rate resp rate resp rate resp rate resp rate resp 18:48:40.218 avg_2-20 57.6 6.244 13.4 2.99 0.0 0.0 0.000 57.6 6.244 0.00 7.20 7.20 131072 0.2 104.49 0.2 41.526 1.8 7527.0 1.8 192.01 1.8 7134.3 1.8 21.984 18:48:42.000 Starting RD=rd1; elapsed=600; fwdrate=max. For loops: None 18:58:42.205 avg_2-120 6.2 1.063 13.0 2.80 0.0 0.0 0.000 6.2 1.063 0.00 6.24 6.24 1048576 0.0 0.000 0.0 0.000 0.0 0.000 1.6 47.864 1.6 2401.1 0.0 0.000
totals.html
通常包括两个部分,第一部分为文件存储目录结构及数据填充的平均性能值,第二部分为执行测试过程当中除第一个时间间隔外全部时间间隔平均性能值,主要看第二部分的内容
Interval
报告间隔序号,测试结果通常为除第一个时间间隔外全部时间间隔加权平均值
如elapsed=600,interval=5,则性能结果为第2个间隔到第120个间隔的平均值(avg_2-120)
ReqstdOps
rd
运行定义参数fwdrate
控制fwdrate
为max
时,以最大I/O速率运行工做负载fwdrate
为低于最大I/0速率的一个数值时,能够限制读写速度,以固定I/O速率运行工做负载ms
cpu%
read pct
读取请求占总请求数百分比占比,当为0时表示写,当为100时表示读
read
ms
write
ms
mb/sec
xfersize
每一个读写I/O传输数据量(即单个读写I/O大小),单位为字节B
#测试参数以下: messagescan=no hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node241 hd=hd2,system=node242 hd=hd3,system=node243 sd=sd1,hd=hd1,lun=/dev/sdb,openflag=o_direct sd=sd2,hd=hd2,lun=/dev/sdb,openflag=o_direct sd=sd3,hd=hd3,lun=/dev/sdb,openflag=o_direct wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M rd=rd1,wd=wd1,iorate=max,elapsed=600,warmup=30,interval=5 #测试结果以下: <a name="_1143839598"></a><i><b>19:02:15.001 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=600 warmup=30; For loops: None</b></i> Jun 04, 2020 interval i/o MB/sec bytes read resp read write resp resp queue cpu% cpu% rate 1024**2 i/o pct time resp resp max stddev depth sys+u sys 19:12:46.068 avg_7-126 82.74 82.74 1048576 0.00 289.158 0.000 289.158 2092.803 155.103 23.9 16.3 14.2
interval
报告间隔序号,测试结果通常为除第一个时间时间外全部时间间隔加权平均值,若有设置预热时间,则这部分测试数据也须要排除在外
如elapsed=600,warmup=30,interval=5,则性能测试结果为第7个间隔到第126个间隔的平均值(avg_7-126)
i/o rate
每秒读写I/O个数(读写IOPS),能够经过rd
运行定义参数iorate
控制
当iorate
为max
时,以最大I/O速率运行工做负载
当iorate
为低于最大I/0速率的一个数值时,能够限制读写速度,以固定I/O速率运行工做负载
MB/sec
每秒读写速度(读写带宽)
注:按官方手册说明,
bytes i/0
每一个读写I/O传输数据量(即单个读写I/O大小),单位为字节B
,能够经过wd
工做负载定义参数xfersize
控制
read pct
读取请求占请求总数的百分比,能够经过wd
工做负载定义参数rdpct
控制
当rdpct
为0
时,表示测试模型为写
当rdpct
为100
时,表示测试模型为读
resp time
请求响应时间(读写时延),单位为毫秒ms
read resp
读取请求响应时间,单位为毫秒ms
write resp
写入请求响应时间,单位为毫秒ms
resp max
最大请求响应时间,单位为毫秒ms
resp stddev
请求响应时间标准误差,单位为毫秒ms
queue depth
读写I/0队列深度
cpu% sys+u
内核态空间及用户态空间CPU占用率
cpu% sys
内核态空间CPU占用率 2020年05月29日 16:00:16 Clear
grep 'processor' /proc/cpuinfo | sort -u | wc -l
sync;echo 3 > /proc/sys/vm/drop
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test01,depth=2,width=100,files=100,size=4M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=write,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test02,depth=2,width=100,files=100,size=4M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=read,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh hd=hd1,system=node21 hd=hd2,system=node22 hd=hd3,system=node23 hd=hd4,system=node24 hd=hd5,system=node25 hd=hd6,system=node26 fsd=fsd1,anchor=/client/test03,depth=2,width=100,files=100,size=8M,shared=yes fwd=format,threads=24,xfersize=1m fwd=default,xfersize=1m,fileio=random,fileselect=random,rdpct=60,threads=24 fwd=fwd1,fsd=fsd1,host=hd1 fwd=fwd2,fsd=fsd1,host=hd2 fwd=fwd3,fsd=fsd1,host=hd3 fwd=fwd4,fsd=fsd1,host=hd4 fwd=fwd5,fsd=fsd1,host=hd5 fwd=fwd6,fsd=fsd1,host=hd6 rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1