安装部署
下载与解压
从Oracle官网或可信源获取vdbench压缩包(如vdbench50407.zip
)。使用unzip
命令解压至目标目录:
官网需要注册账号才能下载,网盘链接:https://pan.quark.cn/s/369db2feab82
unzip vdbench50407.zip -d /opt/vdbench
环境依赖
确保系统已安装Java 1.8或更高版本,通过以下命令验证:
java -version
若未安装,可通过包管理器安装(如yum install java-1.8.0-openjdk
)。
权限配置
为脚本添加可执行权限:
chmod +x /opt/vdbench/vdbench
参数配置
主配置文件(如test.conf
)
vdbench通过文本文件定义测试参数,以下为常见配置示例:
- 基础磁盘测试
块设备测试(顺序:HD → SD → WD → RD)
hd=default,vdbench=/opt/vdbench,jvms=1
hd=hd1,system=192.168.1.100
sd=sd1,hd=hd1,lun=/dev/sdb,openflags=o_direct,threads=4
wd=wd1,sd=sd1,xfersize=4k,rdpct=100,seekpct=0
rd=rd1,wd=wd1,iorate=max,elapsed=60,interval=10
hd
: 定义主机和vdbench路径。sd
: 存储设备配置,指定LUN和线程数。wd
: 工作负载定义,设置I/O大小(xfersize
)、读写比例(rdpct
)。rd
: 运行参数,如测试时长(elapsed
)和结果间隔(interval
)。
- 文件系统测试
# 示例:多级目录随机读
fsd=fsd1, anchor=/mnt/test, depth=2, width=10, files=100, size=1M # 文件系统定义
fwd=fwd1, fsd=fsd1, operation=read, xfersize=4k, fileio=random # 文件工作负载
rd=rd1, fwd=fwd1, fwdrate=100, elapsed=30 # 运行定义:100%速率
fsd
: 定义文件系统目录结构和文件属性。fwd
: 文件操作类型(operation
)和I/O模式(fileio
)。
关键参数说明:
openflags=o_direct:禁用缓存,贴近真实性能。
seekpct=100:100%随机访问;0为顺序访问。
rdpct:读操作占比(0=纯写,100=纯读)。
iorate=max:最大化压测;可设固定值(如iorate=500限制IOPS)。
depth/width/files:目录深度/宽度/文件数,生成复杂文件树。
测试执行
启动测试
进入vdbench目录并运行:
./vdbench -f test.conf -o output_dir
-f
: 指定配置文件路径。-o
: 输出目录,存储日志和结果。
实时监控
测试期间可通过-jn
选项启用实时监控(需配合-j
参数定义端口):
./vdbench -f test.conf -o output_dir -j 10.0.0.1 -jn
结果分析
关键指标
- IOPS: 每秒I/O操作数,反映吞吐能力。
- 吞吐量(MB/s): 数据传输速率。
- 延迟(ms): 平均响应时间,包括
avg
、max
、stddev
。
日志文件解析
output_dir/flatfile.html
- 汇总测试结果,包含各时间段的性能数据。
- 图表展示IOPS、吞吐量、延迟趋势。
output_dir/totals.html
- 测试总览,显示平均值、最大值和标准差。
错误日志(
errorlog.html
)- 检查I/O错误或超时问题,如
SD_SEE_ERR
或SD_TIMEOUT
。
- 检查I/O错误或超时问题,如
自定义分析脚本
可通过awk
或Python提取特定数据:
awk '/interval/ {print $4,$6,$8}' output_dir/summary.html | grep -v "0.000"
高级调优
参数优化建议
xfersize
: 根据应用场景调整(如4k随机、128k顺序)。threads
: 增加并发数以提升压力,但需避免系统过载。openflags
: 使用o_direct
绕过缓存获取真实磁盘性能。
多节点测试
在hd
中定义多个主机,并通过shell=ssh
指定通信方式:
hd=hd1,system=node1,shell=ssh
hd=hd2,system=node2,shell=ssh
典型测试场景模板
场景1:云盘最大随机读IOPS
sd=sd1, lun=/dev/vdb, openflags=o_direct
wd=wd1, sd=sd1, rdpct=100, seekpct=100, xfersize=4k
rd=rd1, wd=wd1, iorate=max, elapsed=300, warmup=60
场景2:NFS文件混合读写
fsd=fsd1, anchor=/nfs_share, depth=1, width=50, files=1000, size=128k
fwd=fwd1, fsd=fsd1, operation=read, rdpct=70, xfersize=64k
rd=rd1, fwd=fwd1, fwdrate=max, elapsed=600