一、相关参数
(1)IOPS也即吞吐量(Throughput):每秒的IO数量
(2)带宽(Bandwidth):每秒传输的数据量(iops*iops_size).如:iops=20w,size=4kB,则带宽Bandwidth=20w*4KB ≈ 780MB
在存储领域有个不成文的规定,只要以IOPS来描述,那么就代表是小I/O(<32KB),以Bandwidth来描述,那就是大I/O(>32KB)
一、linux下块设备常用流量模型
经常更换流量模型可更容易发现错误。大块读写也容易出问题
随机比顺序延迟高、写比读延迟高
1.1OLTP
messagescan=no
data_errors=1
#单个服务器时,不需配置HD参数(主机参数)
hd=default,jvms=8,vdbench=/root/vdbench50406,user=root,shell=ssh
#hd=hd1,system=172.25.102.142
#hd=hd2,system=172.25.102.140
sd=default,openflags=o_direct,hitarea=1g,threads=16
sd=sd1,lun=/dev/dm-,count=(3,32) #对32个lun打流量,从dm3开始
#sd=sd1,lun=/dev/mapper/msdiskbjf #对指定lun打流量
#sd=sd2,lun=/dev/mapper/msdiskbjg
#sd=sd3,lun=/dev/mapper/msdiskbjh
#OLTP模型
wd=wd1,sd=sd*,seekpct=100,rdpct=100,xfersize=8k,skew=20
wd=wd2,sd=sd*,seekpct=100,rdpct=100,xfersize=4k,skew=45
wd=wd3,sd=sd*,seekpct=100,rdpct=0,xfersize=8k,skew=15
wd=wd4,sd=sd*,seekpct=0,rdpct=100,xfersize=64k,skew=10
wd=wd5,sd=sd*,seekpct=0,rdpct=0,xfersize=64k,skew=10
rd=rd1,wd=wd*,iorate=max,elapsed=200h,interval=1,warmup=20
1.2OLAP
messagescan=no
data_errors=1
hd=default,jvms=8,vdbench=/root/vdbench50406,user=root,shell=ssh
#hd=hd1,system=172.25.102.142
sd=default,openflags=o_direct,hitarea=1g,threads=16
sd=sd1,lun=/dev/dm-,count=(3,32) #对32个lun打流量,从dm3开始
#sd=sd1,lun=/dev/mapper/msdiskbjf #对指定lun打流量
#sd=sd2,lun=/dev/mapper/msdiskbjg
#sd=sd3,lun=/dev/mapper/msdiskbjh
#OLAP模型
wd=wd1,sd=sd*,seekpct=100,rdpct=100,xfersize=4k,skew=15
wd=wd2,sd=sd*,seekpct=100,rdpct=0,xfersize=4k,skew=5
wd=wd3,sd=sd*,seekpct=0,rdpct=100,xfersize=64k,skew=70
wd=wd4,sd=sd*,seekpct=0,rdpct=0,xfersize=64k,skew=10
rd=rd1,wd=wd*,iorate=max,elapsed=200h,interval=1,warmup=20
1.3小块随机读写
messagescan=no
data_errors=1
hd=default,jvms=8,vdbench=/root/vdbench50406,user=root,shell=ssh
#hd=hd1,system=172.25.102.142
sd=default,openflags=o_direct,hitarea=1g,threads=16
sd=sd1,lun=/dev/dm-,count=(3,32) #对32个lun打流量,从dm3开始
#sd=sd1,lun=/dev/mapper/msdiskbjf #对指定lun打流量
#sd=sd2,lun=/dev/mapper/msdiskbjg
#sd=sd3,lun=/dev/mapper/msdiskbjh
wd=wd1,sd=sd*,xfersize=16k,seekpct=0,rdpct=70 #小块读写:4/8/16k——
rd=rd1,wd=wd*,iorate=max,elapsed=200h,interval=1,warmup=20
1.4混合模型(不同模型交替使用)
messagescan=no
data_errors=1 #出现一个错误就中断流量
hd=default,jvms=8,vdbench=/root/vdbench50406,user=root,shell=ssh
#hd=hd1,system=172.25.102.142
sd=default,openflags=o_direct,hitarea=1g,threads=16
sd=sd1,lun=/dev/dm-,count=(3,100)
#混合多个模型:按照先后顺序打如下6个模型,并设置每个模型的时间
wd=wd1,sd=sd*,xfersize=4k,seekpct=100,rdpct=0
wd=wd2,sd=sd*,xfersize=8k,seekpct=0,rdpct=100
wd=wd3,sd=sd*,xfersize=16k,seekpct=100,rdpct=50
wd=wd4,sd=sd*,xfersize=1024k,seekpct=0,rdpct=80
wd=wd5,sd=sd*,xfersize=256k,seekpct=0,rdpct=50
wd=wd6,sd=sd*,xfersize=(512k,20,128k,20,32k,20,8k,20,4k,20),rdpct=30
rd=rd1,wd=wd1,iorate=10000,elapsed=8h,interval=1,warmup=30
rd=rd2,wd=wd2,iorate=5000,elapsed=8h,interval=1,warmup=30
rd=rd3,wd=wd3,iorate=10000,elapsed=8h,interval=1,warmup=30
rd=rd4,wd=wd4,iorate=10000,elapsed=6h,interval=1,warmup=30
rd=rd5,wd=wd5,iorate=5000,elapsed=6h,interval=1,warmup=30
rd=rd6,wd=wd6,iorate=10000,elapsed=200h,interval=1,warmup=30
1.5s数据预埋
Thin-LUN性能测试过程中,刚创建的THIN-LUN需要预埋数据,才能准确测试出实际性能,所以在第一次性能测试之前,需要使用vdbench预埋数据。
使用参数seekpct=eof,如果读取的是没有被写过的空的块设备时,性能会更好。但是不能准确的测试出真实性能。一般这个时候会先选择预埋 / 填充数据,再进行测试。模型如下:
seekpct 指定模型读写的方式:随机( seekpct=100)/顺序(seekpct=0); seekpct=eof 顺序。
seekpct=0和 seekpct=eof 的区别:
seekpct=0:到达卷/文件的末尾时,I/O会继续开始,覆盖预埋数据,直到 elapsed 时间到达
seekpct=eof :当所有的SD都完成时,会自动停止
注意:可以通过查看totals_optional.html文件查看预埋数据量
messagescan=no #不显示多于打印信息
data_errors=1 #出现1个错误就中断流量
report_run_totals=yes #可选的输出文件,记录完成的 i/o 总量。不需要记录io总量则不用添加
#dedupratio=3
#compratio=2.5 #重删压缩参数设置
#dedupunit=4k
#dedupsets=10%
hd=default,jvms=8,vdbench=/root/vdbench50407,user=root,shell=ssh
#hd=hd1,system=172.25.102.142
sd=default,openflags=o_direct,hitarea=1g,threads=8
#sd=sd1,lun=/dev/dm-,count=(33,20) #对20个lun打流量,从dm33开始
sd=sd1,lun=/dev/dm-,count=(33,20),size=50g #对指定LUN 预埋50GB数据
#sd=sd1,lun=/dev/mapper/msdiskbjf #对指定lun打流量
#sd=sd2,lun=/dev/mapper/msdiskbjg
#sd=sd3,lun=/dev/mapper/msdiskbjh
#wd=wd1,sd=sd*,xfersize=8k,seekpct=0,rdpct=80
wd=wd1,sd=sd*,xfersize=512k,seekpct=0,rdpct=80,seekpct=eof #预埋seekpct=eof,写满即停
rd=rd1,wd=wd*,iorate=max,elapsed=200h,interval=1,warmup=20
二、linux下的文件系统流量模型
(1)文件系统操作步骤
对文件系统使用vdbench流量模型,必须先挂载lun到linux操作系统,如下:
1. 创建文件系统:mkfs.ext4 /dev/mapper/dm-40
2. 创建文件夹: mkdir /mnt/dm40
3. 挂载lun到lun文件夹下:mount /dev/dm-40 /mnt/dm404.准备好文件系统模型,执行命令:./vdbench -f file.name -o output/0730-output
一次创建多个文件夹:mkdir dm{1..10} #创建10个文件夹:dm1 dm2...dm10
mkdir dm{1,5,13} #创建3个文件夹:dm1 dm5 dm13
注意事项:
- 使用df -h可以查看文件写入量
- 取消ITL关联时必须先取消挂载:umount /mnt/dm5
- 设备双点时也要先取消挂载
- 强制取消挂载:umount -l /mnt/dm5
- 清除环境时先取消挂载
- #调整文件系统的大小:对于已经挂载的文件系统,后续
#显示文件系统的最小值:resize2fs -P /dev/sda1
#设置文件大小为1k:resize2fs /dev/sdb4 1k
(2)参数解释
#参数介绍:
#anchor:挂在文件系统的目录(文件写入目录)
#depth: 创建目录层级数(目录深度)
#width:每层文件夹的子文件夹数
#shared:默认为no,当多主机时需设置shared=yes
#openflags= o_direct或directio:以无缓冲缓存的方式进行读写操作
#fileio=random/sequential: 文件io将执行的方式
#fileselect=random/sequential:选择文件或目录的方式
#预填数据工作负载定义为threads=8,xfersize=128k,即预填数据使用8线程,IO大小为128
messagescan=no
*report_run_totals=yes
data_errors=5
#fsd=fsd1,anchor=/mnt/dm-,count=(4,1),depth=1,width=1,files=20,size=1g
#fwd=fwd1,fsd=*,rdpct=30,openflags=o_direct,xfersize=(4k,15,256k,35,1M,50),fileio=random,fileselect=random,threads=20,stopafter=20g
#rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=2000h,interval=1
#挂载2个文件系统
fsd=fsd1,anchor=/mnt/dm40,depth=2,width=2,files=5,size=1g
fsd=fsd2,anchor=/mnt/dm41,depth=2,width=3,files=4,size=1g
#对多个挂载的lun写数据:从dm3开始的连续5个lun打流量:
#fsd=fsd1,anchor=/mnt/dm-,count=(3,5),depth=1,width=1,files=20,size=1g
fwd=fwd1,fsd=*,rdpct=30,openflags=o_direct,xfersize=(4k,15,8k,35,16k,50),fileio=random,fileselect=random,threads=16,stopafter=20g
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=2000h,interval=1
三、Windows下的流量模型
(1)测试裸盘操作步骤
1.将lun挂载到Windows操作系统
2.修改流量模型
3.执行:C:\vdbench504\vdbench.bat –f example7
#测试磁盘1,文件大小40M
sd=sd1,lun=\\.\physicaldrive1,size=40m
#数据传输大小1K,50%读,顺序
wd=wd1,sd=sd1,xf=1k,rdpct=50
#iorate每秒100个I/Os,elapsed运行时间5s,interval时间间隔1s
rd=rd1,wd=wd1,iorate=100,elapsed=5,interval=1