[Tool] vdbench的介绍与使用

1. 前言

Vdbench 是由 Oracle 开发的一款磁盘 I/O 工作负载生成器,主要用于对裸盘和文件系统进行测试和基准测试。它用 Java 编写,支持多种操作系统平台,具备丰富功能,可生成多种类型的存储 I/O 工作负载,还能进行详细的性能报告。

2. 语法

vdbench –f parmfile

parmfile 中定义测试需要的各种参数,所有的参数必须按照顺序定义,否则会运行失败。对于裸盘测试,参数按照 General, HD, RG, SD, WD and RD 顺序定义。对于文件系统,参数按照 General, HD, FSD, FWD and RD 顺序定义。

3. 参数

3.1. 块设备(裸盘)

块设备参数文件定义顺序为:HD、SD、WD、RD

3.1.1. HD(Host Define)

hd=default,vdbench=/opt/vdbench50407,user=root,shell=ssh
hd=hd1,system=node1
hd=hd2,system=node2
hd=hd3,system=node3
  • hd: 标识主机定义的名称,多主机运行时,可以使用 hd1、hd2、hd3...区分。通常情况下hd=default是定义 hd 共同参数。如果某个 hd 定义需要定义不同参数,可以在该 hd 定义中单独定义。
  • system: 指定主机的名称,可以是 IP 地址或者主机名。
  • user: slave 和 master 通信使用用户。
  • shell: 多主机测试时,mater 和 slave 主机间通信方式。默认值为rsh,可选值为rshsshvdbench
    • 当参数值为rsh时,需要配置 master 和 slave 主机 rsh 互信,考虑到 rsh 使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式。
    • 当参数值为ssh时,需要配置 master 和 slave 主机 ssh 互信,通常 Linux 主机时使用此通信方式。
    • 当参数值为vdbench,需要在所有 slave 主机运行 vdbench rsh 启用 vdbench 本身的 rsh 守护进程,通常 Window 主机时使用此通信方式。

在单机模式下,无需定义 HD。

3.1.2. SD(Storage Define)

sd=default,lun=/dev/sdb,openflags=o_direct,threads=6
sd=sd1,hd=hd1
sd=sd3,hd=hd2
sd=sd6,hd=hd3
  • sd: 标识存储定义的名称。通常情况下sd=default是定义 sd 共同参数。如果某个 sd 定义需要定义不同参数,可以在该 sd 定义中单独定义。
  • hd: 标识主机定义的名称。
  • lun: 写入块设备,linux 使用 sdb 盘,则指定路径为/dev/sdb;windows 使用 G 盘,则指定路径为\.\G:。
  • openflags: 通过设置为 o_direct 或 directio,以无缓冲缓存的方式进行读写操作。
  • threads: 对 SD 的最大并发 I/O 请求数量。

对于裸盘测试,设置线程数必须通过 SD 的 threads 参数定义,不能通过 WD 的 threads 参数定义,因为二者代表的含义不同。但是对于文件系统测试而言,只能通过 FWD 的 threads 参数设置线程数,因为 FSD 没有 threads 参数。

3.1.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.1.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: 报告时间间隔(单位为秒)。

3.2. 文件系统

文件系统参数文件定义顺序为:HD、FSD、FWD、RD

3.2.1. HD(Host Define)

hd=default,vdbench=/opt/vdbench50407,user=root,shell=ssh
hd=hd1,system=node1
hd=hd2,system=node2
hd=hd3,system=node3
  • hd: 标识主机定义的名称,多主机运行时,可以使用 hd1、hd2、hd3...区分。通常情况下hd=default是定义 hd 共同参数。如果某个 hd 定义需要定义不同参数,可以在该 hd 定义中单独定义。
  • system: 指定主机的名称,可以是 IP 地址或者主机名。
  • user: slave 和 master 通信使用用户。
  • shell: 多主机测试时,mater 和 slave 主机间通信方式。默认值为rsh,可选值为rshsshvdbench
    • 当参数值为rsh时,需要配置 master 和 slave 主机 rsh 互信,考虑到 rsh 使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式。
    • 当参数值为ssh时,需要配置 master 和 slave 主机 ssh 互信,通常 Linux 主机时使用此通信方式。
    • 当参数值为vdbench,需要在所有 slave 主机运行 vdbench rsh 启用 vdbench 本身的 rsh 守护进程,通常 Window 主机时使用此通信方式。

在单机模式下,无需定义 HD。

3.2.2. FSD(File System Define)

fsd=default,openflags=directio,depth=2,width=3,files=2,size=128k
fsd=fsd1,anchor=/mnt/test1
fsd=fsd2,anchor=/mnt/test2
fsd=fsd3,anchor=/mnt/test3
  • fsd: 标识文件系统定义的名称,多文件系统时(fsd1、fsd2、fsd3...),可以指定 default(将相同的参数作为所有 fsd 的默认值)。
  • openflags: 通过设置为 o_direct 或 directio,以无缓冲缓存的方式进行读写操作。
  • anchor: 文件写入目录,linux 指定路径为/dir01;windows 指定路径为 E:\dir01。
  • depth: 创建目录层级数(即目录深度)。
  • width: 每层文件夹的子文件夹数。
  • files: 测试文件个数(vdbench 测试过程中会生成多层级目录结构,实际只有最后一层目录会生成测试文件)。
  • size: 每个测试文件大小。
  • distribution: 可选值为 bottom 或 all,默认为 bottom。
    • 当参数值为 bottom 时,程序只在最后一层目录写入测试文件。
    • 当参数值为 all 时,程序在每一层目录都写入测试文件。
  • shared: 可选值为 yes 或 no,默认值为 no,一般只有在多主机测试时指定。
    • vdbench 不允许不同的 slave 之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了 shared=yes,那么不同的 slave 可以平分一个目录下所有的文件来进行访问,相当于每个 slave 有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写。
    • 当多主机测试时,写入的根目录 anchor 为同一个路径时,需要指定参数值为 yes。

文件和目录计算公式如下:

  • 最后一层生成文件夹个数:width^depth
  • 测试文件个数:(width^depth)*files

3.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: 此工作负载的并发线程数量。

3.2.4. RD(Run Define)

rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10
  • rd: 标识文件系统运行定义的名称。
  • fwd: 标识文件系统工作负载定义的名称。
  • fwdrate: 每秒执行的文件系统操作数量。设置为 max,表示不做任何限制,按照最大强度自适应。
  • format: 可选值为 no、yes、或 restart,标识预处理目录和文件结构的方式。
    • no: 默认参数值,不执行 format 预处理操作,如测试目录不存在文件时,vdbench 会由于无可用文件读写而异常退出。
    • yes: 表示删除测试目录已有文件结构,并且重新创建新的文件结构。
    • restart: 表示只创建未生成的目录或文件,并且增大未达到实际大小的文件。
  • elapsed: 默认值为 30,测试运行持续时间(单位为秒)。
  • interval: 结果输出打印时间间隔(单位为秒)。

4. 实例

单节点针对裸盘测试,1M 顺序写,测试时间 600s,预热时间 60s,报告时间间隔 2s。

sd=sd1,lun=/dev/sdb,openflag=o_direct,threads=32
wd=wd1,sd=sd1,seekpct=0,rdpct=0,xfersize=1M
rd=rd1,wd=wd1,iorate=max,warmup=60,elapsed=600,interval=2

单节点针对文件系统测试,1M 顺序写,目录深度为 2,每层目录数为 3,每个目录文件数为 10,每个文件大小为 200M,测试时间为 600s,报告时间时间 2s。

fsd=fsd1,anchor=/mnt/test,depth=2,width=3,files=10,size=200M
fwd=fwd1,fsd=fsd1,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=32
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=600,interval=5

三节点针对裸盘测试,1M 顺序写,测试数据量为 400G,预热时间 30s,报告间隔 5s。

hd=default,vdbench=/opt/vdbench50407,user=root,shell=ssh
hd=hd1,system=node1
hd=hd2,system=node2
hd=hd3,system=node3

sd=default,lun=/dev/sdb,openflags=o_direct,threads=32
sd=sd1,hd=hd1
sd=sd2,hd=hd2
sd=sd3,hd=hd3

wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M
rd=rd1,wd=wd1,iorate=max,maxdata=100M,elapsed=64800,warmup=30,interval=5

三节点针对文件系统测试,1M 顺序写,目录深度为 2,每层目录数为 3,每个目录文件数为 10000,每个文件大小为 200M,测试时间为 600s,报告间隔 1s。

hd=default,vdbench=/opt/vdbench50407,user=Micah,shell=vdbench
hd=hd1,system=node1
hd=hd2,system=node2
hd=hd3,system=node3

fsd=fsd1,anchor=/mnt/test1,depth=2,width=3,files=10000,size=200M
fsd=fsd2,anchor=/mnt/test2,depth=2,width=3,files=10000,size=200M
fsd=fsd3,anchor=/mnt/test3,depth=2,width=3,files=10000,size=200M

fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=32
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd2,host=hd2
fwd=fwd3,fsd=fsd3,host=hd3

rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=1

5. 参考

posted on 2026-01-12 15:07  CC在认真做笔记  阅读(11)  评论(0)    收藏  举报