一、介绍
vdbench是一个IO负载生成工具,用于测试存储的IO,可以测试磁盘和文件系统的性能。vdbench采用java编写,需要测试环境中有jre才能够运行。
二、使用
vdbench包解压后可以直接使用,执行./vdbench -t进行最简单的测试,此命令会在使用如下配置进行一个最简单的负载测试,此次测试的配置如下
sd=sd1,lun=/var/tmp/quick_vdbench_test,size=10m
wd=wd1,sd=sd1,xf=4k,rdpct=50
rd=rd1,wd=wd1,iorate=100,elapsed=5,interval=1
./vdbench -t命令会在/tmp目录下创建一个临时文件,临时文件大小是10m,执行一个5秒钟的测试,测试执行4k大小的io读写,50%的读50%的写操作,io rate限制在100,每隔1秒钟输出一次测试结果,最后的测试结果输出到vdbench/output/summary.html中。
三、使用
vdbench执行测试时需要编写一个测试配置文件
3.1 单客户端块设备测试
只是用一个客户端进行vdbench测试
一个单客户端测试配置文件格式如下:
sd=sd1,lun=/dev/dm-2,openflags=o_direct
wd=wd1,sd=sd1,xfersize=8k,rdpct=70,seekpct=0
rd=run1,wd=wd1,iorate=max,elapsed=30,interval=1,warmup=180,thread=5
将上述测试文件命名为mytest,并执行测试
./vdbench -f mytest
测试结果存放在output目录中。
上述配置文件中,
第一行:sd为自定义名称,用于表示测试的目标,当有多个目标的时候可以写多个sd=xxx,lun表示测试使用的卷名称,可以是一个文件也可以是一个磁盘设备,openflags=o_direct表示以无缓存的方式进行读写操作。
第二行:wd是自定义的工作负载名称,sd=sd1表示此工作负载使用了sd1对应的设备,xfersize为操作数据的大小,rdpct表示读操作的比例,seekpct表示随机操作的百分比,如果是0表示顺序操作。
第三行:rd是自定义的运行名称,wd=wd1表示运行的是wd1对应的工作负载,iorate=max表示以最大速率运行,elapsed表示运行的测试时长,单位是秒,interval表示测试结果输出间隔,warmup是预测试时长,这段时长不会统计到最终测试结果中,threads表示测试使用的线程数目。
3.2 多客户端块设备测试
vdbench也支持多客户端协同测试,需要保证各个客户端上都能够正常运行vdbench,并且客户端之间能够通过ssh进行免密访问,下面是一个采用多客户端进行测试的配置文件
hd=default,vdbench=/home/vdbench,user=root,shell=ssh
hd=host1,system=100.1.1.101
hd=host2,system=100.1.1.102
sd=sd1,hd=host1,lun=/dev/dm-1
sd=sd2,hd=host1,lun=/dev/dm-2
sd=sd3,hd=host1,lun=/dev/dm-3
sd=sd4,hd=host2,lun=/dev/dm-4
sd=sd5,hd=host2,lun=/dev/dm-5
sd=sd6,hd=host2,lun=/dev/dm-6
wd=wd1,sd=sd*,seekpct=100,rdpct=70,xfersize=8k
rd=default,iorate=max,elapsed=30,interval=1,warmup=10,threads=10
第一列说明了客户端测试的默认设置,vdbench表明vdbench软件的存放位置,user是客户端用户名,shell=ssh表示通过ssh进行访问。
第二行hd=host1是客户端名称,system是客户端地址
第三行是第二个客户端的名称和地址
后面的sd是使用的测试磁盘,只是需要添加hd参数表示对应的是哪一个客户端,wd是测试负载,rd是运行设置,与单客户端一致。
3.3 单客户端文件测试
文件测试和块测试的区别在于,块存储测试会直接读取或写入数据,不管磁盘挂载状态,而文件存储测试在进行测试之前会先写入测试需要的文件,当所有的文件和目录都生成完毕后才会进行测试。下面是文件测试的一个配置文件
fsd=fsd1,anchor=/dir1,depth=2,width=2,files=4,size=128k
fwd=fwd1,fsd=fsd1,operation=read,xfersize=4k,fileio=sequential,fileselect=random,threads=2
rd=rd1,fwd=fwd1,fwdrate=100,format=yes,elapsed=10,interval=1
第一行fsd说明了测试的自定义文件系统名称,anchor为测试文件目录,depth是测试是的文件目录深度,width是测试时每个文件夹中的子文件夹个数,files是最后一层子文件夹中文件的数目,size是文件的大小。
第二行是测试负载,fwd是自定义负载名称,fsd表示使用的测试文件系统,operation为测试类型,可以是read或者write,xfersize是测试数据大小,fileio是文件操作方式,可以是random和sequential,threads是测试使用的线程数目,fileselect是使用文件的方式
第三行是运行参数,fwd表示使用哪个工作负载,fwdrate是测试速率,format是预处理方式,no为不删除现有文件直接测试,yes表示删除现有文件重新写入,restart表示如果存在目录,则直接运行,不删除目录,elapsed表示运行时长,interval表示输出结果的时间间隔。
3.4 多客户端文件测试
多客户端文件测试和多客户端块测试一样,需要各个客户端都能够运行vdbench,并且各个客户端都可以ssh无密码访问,下面是一个测试配置,不再赘述。
hd=default,vdbench=/home/vdbench50407,user=root,shell=ssh
hd=hd1,system=100.1.1.101
hd=hd2,system=100.1.1.102
fsd=fsd1,anchor=/tmp1,depth=2,width=10,files=2000,size=4M
fsd=fsd2,anchor=/tmp2,depth=2,width=10,files=2000,size=4M
fwd=fwd1,fsd=fsd1,host=hd1,operation=read,xfersize=4M,fileio=random,fileselect=random,threads=32
fwd=fwd2,fsd=fsd2,host=hd2,operation=read,xfersize=4M,fileio=random,fileselect=random,threads=32
rd=rd1,wd=wd1,iorate=max,elapsed=600,interval=5,warmup=30
四、测试结果查看
测试过程中会在屏幕上打印实时结果,测试完成后也会将对应的测试结果生成到文件中。
第一列:测试时间
第二列:interval:每一次interval的序号
第三列:i/o rate:每秒io操作数
第四列:MB/sec:每秒平均贷款
第五列:bytes i/o:每次io操作的字节大小
第六列:read pct:读百分比
第七列:resp time:平均响应时长
第八列:read resp:读操作平均响应时长
第九列:write resp:写操作平均响应时长
第十列:resp max:最大响应时长
第十一列:resp stddev:响应时长标准差
第十二列:queue depth:队列长度
在测试结束后,在output目录中生成了多个文件,各个文件的内容
errorlog:测试过程中产生的一些错误信息,包括io错误信息和数据无效信息
histogram.html:用于显示响应时间的柱状图,只有在文件测试后才有内容
logfile.html:用于调试的log
parmfile.html:配置参数信息
summary.html:全部测试数据
totals.html:记录数据计算后的平均值,最后的测试结果就存放在这个文件中,除了预测试外的所有间隔的加权平均值。