文件系统测试工具 – Vdbench(5.04.06)
Vdbench是一个由Oracle基于Java语言开发的I/O负载性能测试工具,适用于Windows/Linux平台的磁盘和网络文件系统。
1 术语
- General, Host Definition (HD), Replay Group (RG), Storage Definition (SD), Workload Definition (WD) and Run Definition (RD)
- IOPS: 每秒钟文件系统的IO数目
- Latency: 每个操作的延时
- OPS: 文件系统的性能评估参数,每秒钟执行的操作数
2 文件系统
文件系统参数文件定义顺序为:HD、FSD、FWD、RD
2.1 HD(Host Define)
非必选项,单机运行时不需要配置HD参数,一般只有在多主机联机测试时才需要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh
hd=hd1,system=node241
hd=hd2,system=node242
hd=hd3,system=node243
- hd= 标识主机定义的名称,多主机运行时,可以使用hd1、hd2、hd3...区分
- system= 主机IP地址或主机名
- vdbench= vdbench执行文件存放路径,当多主机存放路径不同时,可在hd定义时单独指定
- user= slave和master通信使用用户
- shell= 可选值为
rsh
、ssh
或vdbench
,默认值为rsh
,多主机联机测试时,mater和slave主机间通信方式 当参数值为rsh
时,需要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式 当参数值为ssh
时,需要配置master和slave主机ssh互信,通常Linux主机联机时使用此通信方式 当参数值为vdbench
,需要在所有slave主机运行vdbench rsh
启用vdbench本身的rsh守护进程,通常Window主机联机时使用此通信方式
2.2 FSD(File System Define)
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
- fsd= 标识文件系统定义的名称,多文件系统时(
fsd1
、fsd2
、fsd3
...),可以指定default
(将相同的参数作为所有fsd的默认值) - anchor= 文件写入根目录
- depth= 创建目录层级数(即目录深度)
- width= 每层文件夹的子文件夹数
- files= 测试文件个数(vdbench测试过程中会生成多层级目录结构,实际只有最后一层目录会生成测试文件)
- size= 每个测试文件大小
- **distribution= ** 可选值为
bottom
或all
,默认为bottom
--当参数值为bottom
时,程序只在最后一层目录写入测试文件 --当参数值为all
时,程序在每一层目录都写入测试文件 - shared= 可选值为
yes
或no
,默认值为no
,一般只有在多主机联机测试时指定 vdbench不允许不同的slave之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了shared=yes,那么不同的slave可以平分一个目录下所有的文件来进行访问,相当于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写 --当多主机联机测试时,写入的根目录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
2.3 FWD(FileSystem Workload Defile)
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
- fwd= 标识文件系统工作负载定义的名称,多文件系统工作负载定义时,可以使用fwd1、fwd2、fwd3...区分
- fsd= 标识此工作负载使用文件存储定义的名称
- host= 标识此工作负载使用主机
- operation= 可选值为
read
或write
,文件操作方式 - rdpct= 可选值为
0
~100
,读操作占比百分比,一般混合读写时需要指定,当值为60时,则混合读写比为6:4 - fileio=
可选值为random
或sequential
,标识文件 I/O 将执行的方式 - fileselect=
random
或sequential
,标识选择文件或目录的方式 - xfersizes= 数据传输(读取和写入操作)处理的数据大小(即单次IO大小)
- threads= 此工作负载的并发线程数量
2.4 RD(Run Define)
rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10
- rd= 标识文件系统运行定义的名称。
- fwd= 标识文件系统工作负载定义的名称。
- fwdrate= 每秒执行的文件系统操作数量。设置为max,表示不做任何限制,按照最大强度自适应
- format= 可选值为
yes
、no
或restart
,标识预处理目录和文件结构的方式 --yes表示删除目录和文件结构再重新创建 --no表示不删除目录和文件结构 --restart表示只创建未生成的目录或文件,并且增大未达到实际大小的文件 - elapsed= 默认值为
30
,测试运行持续时间(单位为秒) - interval= 结果输出打印时间间隔(单位为秒)
3 块设备
块设备参数文件定义顺序为:HD、SD、WD、RD
3.1 HD(Host Define)
非必选项,单机运行时不需要配置HD参数,一般只有在多主机联机测试时才需要配置
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh
hd=hd1,system=node241
hd=hd2,system=node242
hd=hd3,system=node243
- hd= 标识主机定义的名称,多主机运行时,可以使用hd1、hd2、hd3...区分
- system= 主机IP地址或主机名
- vdbench= vdbench执行文件存放路径,当多主机存放路径不同时,可在hd定义时单独指定
- user= slave和master通信使用用户
- shell= 可选值为
rsh
、ssh
或vdbench
,默认值为rsh
,多主机联机测试时,mater和slave主机间通信方式 当参数值为rsh
时,需要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式 当参数值为ssh
时,需要配置master和slave主机ssh互信,通常Linux主机联机时使用此通信方式 当参数值为vdbench
,需要在所有slave主机运行vdbench rsh
启用vdbench本身的rsh守护进程,通常Window主机联机时使用此通信方式
3.2 SD(Storage Define)
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
- sd= 标识存储定义的名称
- hd= 标识主机定义的名称
- lun= 写入块设备,如:/dev/sdb, /dev/sdc...
- openflags= 通过设置为
o_direct
,以无缓冲缓存的方式进行读写操作 - threads= 对SD的最大并发I/O请求数量
3.3 WD(Workload Define)
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
- wd= 标识工作负载定义的名称
- sd= 标识存储定义的名称
- seekpct= 可选值为
0
或100
(也可使用sequential
或random
表示),默认值为100
,随机寻道的百分比,设置为0
时表示顺序,设置为100
时表示随机。 - rdpct= 读取请求占请求总数的百分比,设置为0时表示写,设置为100时表示读
- xfersize= 要传输的数据大小。默认设置为4k
- skew= 非必选项,一般在多个工作负载时需要指定,表示该工作负载占总工作量百分比(skew总和为100)
3.4 RD(Run Define)
rd=rd1,wd=wd*,iorate=max,maxdata=400GB,warmup=30,elapse=604800,interval=5
- rd= 标识运行定义的名称
- wd= 标识工作负载定义的名称
- iorate= 常用可选值为
100
、max
,此工作负载的固定I/O速率 --当参数值为100
时,以每秒100个I/Os的速度运行工作负载,当参数值设置为一个低于最大速率的值时,可以达到限制读写速度的效果 --当参数值为max
时,以最大的I/O速率运行工作负载,一般测试读写最大性能时,该参数值均为max
- warmup= 预热时间(单位为秒),默认情况下vdbench会将第一个时间间隔输出数据排除在外,程序在预热时间内的测试不纳入最终测试结果中(即预热结束后,才开始正式测试) --当
interval
为5、elapsed
为600时,测试性能为2
elapsed/interval
(avg_2-120)时间间隔内的平均性能 --当interval
为5、warmup
为60、elapsed
为600时,测试性能为1+(warmup/interval)
(warmup+elapsed)/interval
(avg_13-132)时间间隔内的平均性能 - maxdata= 读写数据大小,通常情况下,当运行
elapsed
时间后测试结束;当同时指定elapsed
和maxdata
参数值时,以最快运行完的参数为准(即maxdata
测试时间小于elapsed
时,程序写完elapsed
数据量后结束) --当参数值为100
以下时,表示读写数据量为总存储定义大小的倍数(如maxdata=2,2个存储定义(每个存储定义数据量为100G),则实际读写数据大小为400G) --当参数值为100
以上时,表示数据量为实际读写数据量(可以使用单位M、G、T等) - elapsed= 默认值为
30
,测试运行持续时间(单位为秒) - interval= 报告时间间隔(单位为秒)
4 示例
hd=default,vdbench=/home/admin/vdbench,shell=ssh,user=admin
hd=hd1,system=10.*.*.*
hd=hd2,system=10.*.*.*
hd=hd3,system=10.*.*.*
hd=hd4,system=10.*.*.*
hd=hd5,system=10.*.*.*
hd=hd6,system=10.*.*.*
fsd=default,depth=2,width=5,files=20,size=1048580000,openflags=o_direct
fsd=fsd1,anchor=/home/admin/qbli/mnt/fv1
fsd=fsd2,anchor=/home/admin/qbli/mnt/fv2
fsd=fsd3,anchor=/home/admin/qbli/mnt/fv3
fsd=fsd4,anchor=/home/admin/qbli/mnt/fv4
fsd=fsd5,anchor=/home/admin/qbli/mnt/fv5
fsd=fsd6,anchor=/home/admin/qbli/mnt/fv6
fwd=default,operation=write,xfersize=(200,5,1000,5,10000,30,120000,30,360000,30),fileio=random,fileselect=random,threads=300
fwd=format,threads=32,xfersize=40000
fwd=fwd1,fsd=fsd1,host=hd1,rdpct=5
fwd=fwd2,fsd=fsd2,host=hd2,rdpct=5
fwd=fwd3,fsd=fsd3,host=hd3,rdpct=5
fwd=fwd4,fsd=fsd4,host=hd4,rdpct=5
fwd=fwd5,fsd=fsd5,host=hd3,rdpct=30
fwd=fwd6,fsd=fsd6,host=hd4,rdpct=30
rd=rd1,fwd=(fwd1-fwd6),fwdrate=max,format=restart,elapsed=390000,interval=1
hd=default,vdbench=/home/admin/vdbench,shell=ssh,user=admin
hd=hd1,system=10.*.*.*
hd=hd2,system=10.*.*.*
fsd=default,depth=2,width=20,files=20,size=1m,openflags=o_direct
fsd=fsd1,anchor=/home/admin/qbli/mnt/m1
fsd=fsd2,anchor=/home/admin/qbli/mnt/m2
fwd=default,operation=read,xfersize=4k,fileio=random,fileselect=random,threads=64
fwd=format,xfersize=4k,threads=64
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd2,host=hd2
rd=rd1,fwd=(fwd1-fwd2),fwdrate=max,format=restart,elapsed=900,interval=1
版权声明:本文为liqingbing12原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。