vdbench简介:
vdbench测试工具是由Oracle公司推出的一款免费的,多功能的,易上手的存储测试工具。它是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加或网络连接的存储的性能。目前,在Oracle官网上共有三个发布版本,其能够在windows和linux环境下运行,可用于测试文件系统或块设备基准性能。
本文使用vdbench对kvm+ceph虚拟机进行对比测试,kvm配置文件rbd cache分别采用none和writeback进行虚拟机部署。
本文测试结论仅作参考,实际效果建议采用多种工具及实际应用场景综合测评后进行评估
1. 部署vdbench
安装jdk环境
yum -y install java
下载 vdbench:Unauthorized Request
tar xzvf vdbench50407.tar.gz
2. field 定义
hd: host define (被测主机)
sd: storage define (测裸盘用)
wd: workload define
fsd: filesystem define (测文件系统用)
fwd: filesystem workload define
rd: run define (执行任务)
3. 脚本内容:test.txt
# vdbench script with test on filesystem
# 执行脚本在被测机器的/tmp/vdbench/下,使用root用户
hd=default,vdbench=/tmp/vdbench/,user=root,shell=ssh
#被测服务器列表(两台同配置8C8G虚拟机kvm+ceph,一台rbd cache采用none模式1.150,一台采用writeback模式1.151,部署系统后,在文件上执行读写对比测试)
hd=hd1,system=192.168.1.150
hd=hd2,system=192.168.1.151
# 在anchor对应目录下,创建50个文件,每个文件10MB,对这50个文件进行读写操作来测试
fsd=fsd1,anchor=/root/vd_files1,width=1,depth=1,openflags=O_DIRECT,files=50,sizes=10m
fsd=fsd2,anchor=/root/vd_files2,width=1,depth=1,openflags=O_DIRECT,files=50,sizes=10m
#4k random read 定义随机读规则
fwd=fwd1,fsd=fsd1,host=hd1,fileio=random,fileselect=random,xfersizes=4k,operation=read,threads=8
fwd=fwd6,fsd=fsd2,host=hd2,fileio=random,fileselect=random,xfersizes=4k,operation=read,threads=8
#4k random write 定义随机写规则
fwd=fwd2,fsd=fsd1,host=hd1,fileio=random,fileselect=random,xfersizes=4k,operation=write,threads=8
fwd=fwd7,fsd=fsd2,host=hd2,fileio=random,fileselect=random,xfersizes=4k,operation=write,threads=8
#4k random 7:3 定义随机读&写规则,读占70%
fwd=fwd3,fsd=fsd1,host=hd1,fileio=random,fileselect=random,xfersizes=4k,rdpct=70,threads=8
fwd=fwd8,fsd=fsd2,host=hd2,fileio=random,fileselect=random,xfersizes=4k,rdpct=70,threads=8
#4k sequential read 定义顺序读规则
fwd=fwd4,fsd=fsd1,host=hd1,fileio=sequential,fileselect=sequential,xfersizes=4k,operation=read,threads=8
fwd=fwd9,fsd=fsd2,host=hd2,fileio=sequential,fileselect=sequential,xfersizes=4k,operation=read,threads=8
#4k sequential write 定义顺序写规则
fwd=fwd5,fsd=fsd1,host=hd1,fileio=sequential,fileselect=sequential,xfersizes=4k,operation=write,threads=8
fwd=fwd10,fsd=fsd2,host=hd2,fileio=sequential,fileselect=sequential,xfersizes=4k,operation=write,threads=8
#4k sequential 7:3 定义顺序读&写规则, 读占70%
fwd=fwd11,fsd=fsd1,host=hd1,operation=read,fileio=sequential,xfersize=4K,skew=70,openflags=o_direct,threads=8
fwd=fwd12,fsd=fsd1,host=hd1,operation=write,fileio=sequential,xfersize=4K,skew=30,openflags=o_direct,threads=8
fwd=fwd13,fsd=fsd2,host=hd2,operation=read,fileio=sequential,xfersize=4K,skew=70,openflags=o_direct,threads=8
fwd=fwd14,fsd=fsd2,host=hd2,operation=write,fileio=sequential,xfersize=4K,skew=30,openflags=o_direct,threads=8
# 每次执行下一个任务前暂停20s,每个任务执行240s(前面的60s预热,会丢掉相应数据),每2s打印一次结果到屏幕
# 分别执行fwd6和fwd1 两个规则fwd (随机读-writeback和none两种模式盘)
rd=writeback_random_read,fwd=(fwd6),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_random_read,fwd=(fwd1),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
# 分别执行fwd7和fwd2 随机写
rd=writeback_random_write,fwd=(fwd7),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_random_write,fwd=(fwd2),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
# 分别执行fwd8和fwd3 随机读写
rd=writeback_random_rw,fwd=(fwd8),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_random_rw,fwd=(fwd3),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
# 分别执行fwd9和fwd4 顺序读
rd=writeback_seq_read,fwd=(fwd9),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_seq_read,fwd=(fwd4),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
# 分别执行fwd10和fwd5 顺序写
rd=writeback_seq_write,fwd=(fwd10),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_seq_write,fwd=(fwd5),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
# 分别执行fwd13&14和fwd11&12 顺序读写
rd=writeback_seq_rw,fwd=(fwd13-fwd14),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
rd=none_seq_rw,fwd=(fwd11-fwd12),fwdrate=max,format=no,pause=20,warmup=60,elapsed=180,interval=2
4. 执行./vdbench -f test.txt
5. 测试结果
从结果上看writeback相对none来看,除顺序读有一定程度的降低,其他场景ops均有大幅度提升