【ceph】vdbench的使用教程——裸盘测试和文件系统测试vdbanch
目录
bandaoyu,本文持续更新,连接:http://t.csdn.cn/7kaiZ
即看即用
1、下载 https://www.oracle.com/downloads/server-storage/vdbench-downloads.html
(外网不一定能访问下载,可以直接在csdn下载栏搜索。下载)
2、解压
文件夹中的vdbench.bat是个windows用,vdbench 给linux用
Linux
3、进入文件夹
./vdbench -t 测试一下可用性
运行测试模型
./vdbench -f {filename} -o {exportpath}
#注:-f后接测试参数文件/名脚本名,-o后接导出测试结果路径
脚本的编写
这部分可以参考解压后的examples文件夹下的脚本,比如create_files;也可以参考output目录下的parmfile.html
运行脚本
root@node1:/home/vdbench50406# ./vdbench -f examples/filesys/create_files -jn
其中-jn是为了做数据校验,见文章末尾解释。
输出结果
windows
3、进入文件夹
-
可以执行./vdbench.bat -t 测试一下可用性(需要安装jre/jdk,要配置好环境变量)
-
编写windows vdbench 脚本(或叫做配置文件) parmfile
-
./vdbench -f parmfile
这里的parmfile需要根据测试环境修改,可以参考output目录下的parmfile
样例:
dd if=/dev/zero of=/tmp/disk1 bs=4 count=1M
vim parmfile
sd=sd1,lun=/tmp/disk1 size=4m
wd=wd1,sd=sd1,xfersize=4096,readpct=100
rd=run1,wd=wd1,iorate=100,elapsed=10,interval=1
[root@localhost vdbench504]# ./vdbench -f parmfile.html
建立rsh通信
./vdbench rsh
注:此命令是用于windows系统多主机联机跑vdbench时使用,因为windows操作系统不支持ssh,因此,vdbench提供了rsh的通信方式。在目标主机上执行此工具后,vdbench将会启动一个java socket用于vdbench slave与master之间通信
详细说明
vdbench简介
vdbench 是一个磁盘I/O负载生成器,主要用于基准测试和存储产品的测试。
vdbench 是由java语言编写的,由oracle公司开发。
可以使用vdbench测试磁盘和文件系统的读写性能。
这个工具有以下优点:
- 1、能够每秒显示整个测试的io叠加,这样测试整个集群的io的时候,可以把所有虚机启动起来,然后进行io的压测,而不是去压单个rbd的iops,那个没有太大的意义,只能是一个数值,真正的环境大多也不是给一个业务使用的,也可以跑起一个业务以后,再看剩余的机器还能跑多少性能
- 2、在测试输出报告里面会根据主机统计一次io,这个面向的业务场景就是,比如某台主机上面可能挂载多块云盘,那么可以根据主机进行统计
- 3、在报告里面还会根据设备显示io个延时的信息,也就是只要是测试设备,每一个的性能指标都能查到,这个的好处就是检测集群里面的io是不是均匀的,如果做了qos,设备的测试性能值是不是跟设置限制一样
本文链接:https://www.codercto.com/a/49559.html
与fio的区别
这个比fio强大的是,既能够测试块接口也能测试文件接口,文件接口是去模拟写入文件,这个又和mdtest类似,但是mdtest主要是去测试元数据能力,vdbench则比较综合。
windows下载地址:
https://www.oracle.com/downloads/server-storage/vdbench-downloads.html
使用方法
下载 https://www.oracle.com/downloads/server-storage/vdbench-downloads.html
解压,文件夹中的vdbench.bat是个windows用,vdbench 给linux用。
使用方法:
1、编写脚本(或叫做配置文件)
这部分可以参考解压后的examples⽂件夹下的脚本,⽐如create_files;也可以参考output⽬录下的parmfile.html
fsd=fsd1,anchor=/dir,depth=1,width=1,files=10000,size=8k
fwd=fwd1,fsd=fsd1,operation=read,threads=16
rd=rd1,fwd=fwd*,fwdrate=100,format=yes,elapsed=5,interval=1
注:(1)anchor=/dir 这个需要把路径换成你ceph挂载的路径,我的是anchor=/home/baymax/cephfs
2、运行vdbench按脚本执行
./vdbench -f examples/filesys/create_files -jn
其中-jn是为了做数据校验,⽬前还不太懂。
3、输出结果
注意事项
- 在联机测试时,客户端的系统时间需保持一致,否则会出现时钟同步告警(this can lead to heartbeat issues)
- 客户端的防火墙要关闭(或者设置开放程序指定端口
5570
、5560
访问) - 关闭系统日志服务
rsyslog
,避免运行时出现其他日志文件打印信息
参数文件添加messagescan=no
可以过滤掉多余的系统日志
常用执行选项和参数文件说明
vdbench 测试工具涉及到的参数非常多,这些参数可以分为 块存储 和 文件系统 两部分,每 部分又是按组进行划分的。 所有的参数都需要定义到一个参数文件当中,在被读取的时候都是按顺序进行的,所以在定义 时需要按指定的顺序进行定义。
块存储参数文件的定义顺序: HD, SD, WD, RD
文件系统参数文件的定义顺序: HD, FSD, FWD, RD
HD, SD, WD, RD/HD, FSD, FWD, RD 配置文件中的关联依赖说明:
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh
#有3个客户端主机,分别命名为hd1、hd2、hd3,IP/hostname分别是:node241、node242、node243
hd=hd1,system=node241
hd=hd2,system=node242
hd=hd3,system=node243#待测试的存储分别命名为sd1、sd2、sd3,sd1指代的是lun=/dev/sdb,用客户端hd1测试,
sd2指代的是lun=/dev/sdc,用客户端hd2测试,sd3指代的是lun=/dev/sdb,用客户端hd3测试
sd=sd1,hd=hd1,lun=/dev/sdb,openflag=o_direct
sd=sd2,hd=hd2,lun=/dev/sdc,openflag=o_direct
sd=sd3,hd=hd3,lun=/dev/sdb,openflag=o_direct#定义我们的工作负载,名叫wd1,这个工作负载包括sd* (就是我们上面定义的sd1、sd2、sd3)
wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M#定义我们的vdbench要运行的内容,命名为rd1,要做的工作是我们上面定义的wd1
rd=rd1,wd=wd1,iorate=max,maxdata=100M,elapsed=64800,warmup=30,interval=5
【存储测试】vdbench存储性能测试工具 - https://www.cnblogs.com/luxf0/p/13321077.html
3.1 常用选项
-t: 运行5秒的块设备测试,用于测试vdbench是否可用。
-tf: 运行5秒的文件系统测试,用于测试vdbench是否可用。
-f perfile: 加上参数文件prefile,进行实际测试。
-v: 开启数据校验。
-vr: 写入数据的同时也进行数据校验,通常用于测试时间比较长的情况。
rsh: 运行rsh守护进程,用于windows联机运行测试。
-o xxx: 将输出文件的路径另为其它路径,默认是保存在当前目录的output目录中。
其它选项: -j , -jn , -jr
1、文件系统
文件系统参数文件定义顺序为:HD、FSD、FWD、RD
1.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主机联机时使用此通信方式
1.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
1.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= 此工作负载的并发线程数量
1.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= 结果输出打印时间间隔(单位为秒)
2、块设备(裸盘测试)
块设备参数文件定义顺序为:HD、SD、WD、RD
1.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主机联机时使用此通信方式
1.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请求数量
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)
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= 报告时间间隔(单位为秒)
运行使用
1、单机运行
- Linux 示例如下,单节点针对裸盘测试,1M顺序写,测试时间600s,预热时间60s,报告时间间隔2s
[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
- Window 示例如下,单节点针对文件系统测试,1M顺序写,目录深度为2,每层目录数为3,每个目录文件数为10,每个文件大小为200M,测试时间为600s,报告时间时间2s
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、联机运行
- 配置免秘钥登录
联机测试,需要配置此项
示例使用三个客户端联机测试,使用客户端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
主节点生成公钥文件,并拷贝到其他从节点(配置主节点到从节点免秘钥登录)
ssh-keygen
ssh-copy-id node242
ssh-copy-id node243
- Linux 1、按照
二、安装部署
,配置多主机ssh互信 2、master主机运行测试参数文件即可 示例如下,三节点针对裸盘联机测试,1M顺序写,测试数据量为400G,预热时间30s,报告间隔5s
[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
- Window 1、所有slave主机运行vdbench本身rsh守护进程
E:\vdbench50406>vdbench rsh
2、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
文件夹,里边包含测试结果文件
1、输出文件
- errorlog.html 当运行测试启用数据校验时,它可能会包含一些错误信息,如:
- 无效的密钥读取
- 无效的 lba 读取(一个扇区的逻辑字节地址)
- 无效的 SD 或 FSD 名称读取
- 数据损坏
- 坏扇区
- flatfile.html vdbench 生成的一种逐列的 ASCII 格式的信息,可以使用
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.
- histogram.html 一种包含报告柱状图的响应时间、文本格式的文件
- logfile.html 包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途
- parmfile.html 包含测试运行配置参数信息
- summary.html 记录全部数据信息,显示每个报告间隔内总体性能情况及工作负载情况,以及除第一个间隔外的所有间隔的加权平均值
- totals.html 记录全部数据计算之后的平均值,一般测试结果从该文件取值,除第一个间隔外所有间隔的加权平均值
2、结果分析
2.1、文件系统
#测试参数如下:
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
- rate 每秒读写I/O个数(读写IOPS),可以通过
rd
运行定义参数fwdrate
控制 当fwdrate
为max
时,以最大I/O速率运行工作负载 当fwdrate
为低于最大I/0速率的一个数值时,可以限制读写速度,以固定I/O速率运行工作负载 - resp 读写请求响应时间(读写时延),单位为
ms
- rate 每秒读写I/O个数(读写IOPS),可以通过
-
cpu%
- tatol 总的cpu占用率
- sys 系统cpu占用率
-
read pct 读取请求占总请求数百分比占比,当为0时表示写,当为100时表示读
-
read
- rate 每秒读I/O个数(读IOPS)
- resp 读请求响应时间(读时延),单位为
ms
-
write
- rate 每秒写I/O个数(写IOPS)
- resp 写请求响应时间(写时延),单位为
ms
-
mb/sec
- read 每秒读取速度
- write 每秒写入速度
- total 每秒读写速度总和
-
xfersize 每个读写I/O传输数据量(即单个读写I/O大小),单位为字节
B
2.2、块设备
#测试参数如下:
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
测试说明
1、测试总结
- 线程数(thread)一般设置为客户端CPU线程数总大小
grep 'processor' /proc/cpuinfo | sort -u | wc -l
- 测试总数据量需要为客户端内存大小两倍
- 测试读模型时需要清理客户端缓存信息
sync;echo 3 > /proc/sys/vm/drop
2、常见测试参数
- 4M顺序写 目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序写
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
- 4M顺序读 目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序读
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
- 8M混合读写 目录深度2、单级目录数100、单个目录文件数100、单文件大小8M、IO块大小1M、混合读写(读写比为6:4)
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
测试和思考
我们可以自己先问自己几个问题
- 1、如果集群里面有一台虚拟机在跑大带宽的业务,你去测试iops,性能能到多少,这个对应的是真实场景里面一个备份业务和一个数据库业务混用的情况
- 2、单机iops能到多少,如果几十台 服务器 都同时在跑的时候,单机的iops还能到多少?
- 3、多机并发的时候,单个机器上面的io会不会受到其他的机器的io的影响
- 4、性能在遇到scrub的时候,或者迁移的时候,能够还保留多少的性能,这个保留性能是否可控
- 5、集群写入到70%的时候,性能是多少,是初始的百分之多少,还够覆盖业务IO不?
本文来源:码农网
本文链接:https://www.codercto.com/a/49559.html
https://www.e-learn.cn/topic/3737957
可视化
vdbench测试实时可视化显示 | https://www.codercto.com/a/49559.html
摘抄和参考:
【存储测试】vdbench存储性能测试工具 https://www.cnblogs.com/luxf0/p/13321077.html
data_errors=(1000000000,6000)
data_errors:当发生IO错误时,如果error总数超过1000000000或者运行时间超过6000s则退出
参数:-jn
推荐参数:-jn
打开vdbench校验数据的参数为-v或-j,这个过程会为每一次写操作记录日志用于后续校验。
使用-v参数,则生成的校验日志直接保存于内存中,使用-j参数则生成一个校验日志的文件,第二次校验时,-jr即可进行日志恢复进行校验。-v直接记录于内存之中,速度更快,但如果存储系统出现重启或内存清理,那么-v参数记录的校验日志就丢失了;-j直接写到磁盘上,安全有保证但速度会慢一下,此时可选择-jn,异步写到磁盘上,速度和安全都有一定的保证。 数据校验原理
数据校验的工作流程如下:每一个在存储系统中的第一次写操作记录在一个表中,假定写操作的块大小是1m,那么这个块大小中的每512字节中包含的两项–8字节的逻辑字节地址(LBA)和一个字节的数据校验key值(标记是第几次写,范围为0-125,00代表创建写,01代表第一次覆盖写,以此类推,当到达126后折返00,重新来一轮)会被记录,这个过程为生成校验日志;第二次重新运行脚本(使用参数-jr或者-vr)则根据第一次记录的日志进行数据校验 vdbench 过滤多余系统日志
原文链接:https://blog.csdn.net/weixin_27758233/article/details/112920905
错误记录
vdbench Waiting for configuration information from slave hd1
解决:重启客户端