五、存储测试工具 vdbench

一、概念

Vdbench 是 Oracle 开源 Java 编写的存储性能压测工具 ,支持裸块设备、文件系统、多客户端集群压测,可测 IOPS、带宽、延迟、数据校验,擅长模拟真实文件目录业务负载(优于 FIO 文件场景)。

二、vdbench 四大核心配置块

1、HD(Host Definition 主机定义)

全局默认模板

hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh,jvms=2

多节点

hd=hd1,system=ipv4_1

hd=hd2,system=ipv4_2

  • system:远端主机 IP / 主机名,主机之间建立 ssh 免密

  • shell=ssh:Linux 集群标配,要求免密 ssh 互通,单机不要该参数

  • jvms:单台机器启动多少个 Java 进程分担压力

  • hd=localhost:单节点本地测试可简写

2、FSD(File System Definition 文件池结构定义)

定义共享目录、目录层级、文件数量、单文件大小

fsd=fsd1,anchor=/testShare1/64KB/,depth=2,width=50,files=300,size=64k,shared=yes

  • anchor:共享存储挂载根目录

  • depth:目录层数,目录层级结构

  • width:目录数量,目录层级结构

  • files:底层存储每个子目录文件数量

  • size:底层存储单文件大小

  • shared=yes:多节点读写同一套文件池(NFS/CephFS 必备),单机值为:no

3、FWD(File Workload Definition 文件负载模板)

定义文件创建、读写、删除的压力规则;支持多模板(format/default)

格式化专用模

fwd=format,threads=24,xfersize=32k,openflags=o_direct

业务读写默认模板

fwd=default,rdpct=60,fileio=random,threads=24

绑定主机执行负载

fwd=fwd1,fsd=fsd1,host=hd1

fwd=fwd2,fsd=fsd1,host=hd2

  • fwd 参数介绍:

    • fwd=format:系统内置名称,专门初始化创建文件

    • fwd=default:业务读写默认配置,不带参数的 fwd 自动继承

    • fwd1/fwd2:实际执行负载实例,只绑定资源、不写压力参数

  • xfersize:单次 IO 传输块大小,也就是每次读写操作一次性读写多少数据

  • openflags:是否绕过操作系统 Page Cache 页缓存,决定测出来的是缓存性能还是底层存储真实硬件性能,扩展组合,直写 + 强制落盘(o_direct,o_sync)

  • fileio=random/sequential:文件内偏移随机 / 顺序读写

  • fileselect=random:随机挑选文件操作

  • host=hd1:指定在哪台 HD 节点执行压力

4、RD(Run Definition 运行调度定义)

文件场景关键字段换成 fwd=fwd*fwdrate

rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,warmup=60

  • fwdrate=max:文件场景限速参数,打满性能;填数字为限制 IOPS 上限

  • format=restart:文件初始化策略

    • restart:先校验已有文件,齐全就复用;缺失 / 大小不对就补建,不全盘删除重建

    • yes:强制清空本次 fsd 对应的整套目录结构,全部删除后从零完整重建所有文件

    • no:完全不执行任何创建、修复文件动作,直接进入读写压测

  • elapsed:正式压测时长 (秒)

  • warmup:预热时间,消除缓存波动

  • interval:几秒输出一次实时性能日志

三、vdbench 配置案例

1、单节点测试案例

messagescan=no

hd=localhost,vdbench=/root/vdbench50406,user=root

fsd=fsd1,anchor=/testShare1/64KB/,depth=2,width=50,files=300,size=64k,shared=no

fwd=format,threads=24,xfersize=32k,openflags=o_direct

fwd=default,xfersize=32k,fileio=random,fileselect=random,rdpct=60,threads=24,openflags=o_direct

fwd=fwd1,fsd=fsd1

rd=rd1,fwd=fwd*,fwdrate=max,format=restart,warmup=60,elapsed=600,interval=1

2、多节点测试案例

messagescan=no

hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh

hd=hd1,system=ipv4_1

hd=hd2,system=ipv4_2

fsd=fsd1,anchor=/testShare1/64KB/,depth=2,width=50,files=300,size=64k,shared=yes

fwd=format,threads=24,xfersize=32k,openflags=o_direct

fwd=default,xfersize=32k,fileio=random,fileselect=random,rdpct=60,threads=24,openflags=o_direct

fwd=fwd1,fsd=fsd1,host=hd1

fwd=fwd2,fsd=fsd1,host=hd2

rd=rd1,fwd=fwd*,fwdrate=max,format=restart,warmup=60,elapsed=600,interval=1

四、vdbench 输出分析

html 文件 html 说明
anchors.html 文件系统测试专用,汇总所有 fsd=xxx 的 anchor 挂载目录、目录层级 (width/depth)、文件数量、单文件大小、预分配规则;快速核对你配置的测试文件结构是否和预期一致。
config.html 完整解析后的运行配置:HD/SD/FSD/FWD/RD 全部参数展开、默认值覆盖、命令行附加参数 (-i/-jn/-w 等)、Java 环境、操作系统版本;核对实际生效配置,排查参数写错不生效问题。
errorlog.html 仅开启 -jn 数据校验时生成:校验失败、数据块错乱、读写不匹配、CRC 错误、文件损坏记录;验证存储数据可靠性、纠删 / 副本是否丢数据必看。
flatfile.html 结构化原始性能 CSV 格式数据,全量 interval 细粒度数值;可复制到 Excel/Python 绘图、自定义二次分析、批量对比多轮测试曲线。
format.historgram.html 格式化阶段单独的时延分布直方图:预埋写操作的各区间延迟计数,看预埋阶段存储是否已经瓶颈。
format.html 文件系统格式化预埋全过程日志:创建目录树、生成测试文件、填充初始数据、文件大小校验、每个 fsd 的格式化耗时、写入量、IO 性能;预埋慢、文件创建失败排查用。
fsd1.histogram.html fsd1 读写 I/O 延迟分布直方图,横轴时延区间、纵轴 IO 数量,直观看长尾高延迟占比(判断抖动、慢盘、缓存颠簸)。
fsd1.html 单个文件系统定义 fsd1 独立性能报表:该目录下所有聚合 IO、IOPS、带宽、读写时延、线程深度;多挂载点对比性能时分开看每个 fsd 表现。
fwd1.histogram.html fwd1 负载单独时延直方图,区分读写延迟分布。
fwd1.html 文件系统工作负载 fwd1 明细:绑定 fsd1 的线程数、文件随机 / 顺序模式、块大小、实时每个 interval 的负载指标;多 fwd 负载拆分时看单任务压力。
histogram.html 全局合并读写延迟直方图,所有 fsd/fwd 负载合在一起的延迟分布,整体抖动、长尾延迟最直观参考。
localhost-0.html 本地第一个工作进程(slave 进程 0)资源细分,单机一般只有localhost-0。
localhost-0.stdout.html 本地子进程 stdout/stderr 日志,Java 子线程异常、系统调用报错、挂载点访问权限报错在这里。
localhost.html 本机系统资源总监控:CPU 使用率、内存、磁盘繁忙度、队列、系统负载;判断性能瓶颈是存储本身还是客户端 CPU / 内存顶满。
localhost.var_adm_msgs.html 抓取系统 /var/adm/messages 系统日志;内核 IO 报错、硬件故障、文件系统报错、OOM、挂载掉线会同步记录在此。
logfile.html 控制台标准输出完整副本,vdbench 运行全程打印日志、阶段切换、定时打点、内部调试信息;通用排错首选日志文件。
parmfile.html 原样保留你输入的.conf脚本原文 + 命令行启动参数,原始配置存档,方便复现测试场景、对比多轮配置差异。
parmscan.html 配置语法扫描日志:vdbench 加载脚本时的解析过程、警告、参数冲突、无效参数、弃用参数提示;配置报错、参数不识别时看这里定位语法问题。
skew.html 负载倾斜统计:多线程 / 多 fwd 之间 IO 分配不均程度、每个线程完成 IO 量差值;排查线程调度不均、锁竞争、元数据瓶颈。
status.html 测试运行状态快照:预热阶段、格式化阶段、正式压测阶段、结束收尾的分段时间、每个阶段是否正常跑完、异常终止标记;排查测试中途中断、时长不对先用它。
summary.html 总汇总报告,每一个 interval(采样周期)的全局指标:总 IOPS、总带宽 MB/s、平均读写时延、读写占比、队列深度、总成功 IO 数。打开报告优先看这个,判断整体性能表现。
swat_mon.bin 二进制 SPM (Swat Performance Monitor) 格式文件,对接 Oracle SWAT 工具做深度负载回放与性能可视化;普通对比测试一般不用,仅专业存储分析场景导入专用工具绘图。
totals.html 全周期平均值,只输出整个测试全程最终汇总数值(无 interval 分段),用于最终归档对比:总平均 IOPS、总带宽、总平均时延、最大最小时延、总数据读写总量。

快速排查优先级

  1. 看结果:summary.html → totals.html → histogram.html
  2. 核对配置:config.html/parmfile.html
  3. 报错异常:errorlog.html → logfile.html → localhost.var_adm_msgs.html
  4. 分挂载点对比:fsd1.html/fwd1.html 及各自 histogram
  5. 二次绘图分析:flatfile.html
  6. 配置语法问题:parmscan.html
  7. 预埋慢 / 失败:format.html + format.historgram.html

totals.html 分析:

  • 第一轮:RD=format_for_rd1(文件预埋格式化阶段)
  • 第二轮:RD=rd1(正式 600s 只读压力测试)
  • 所有数值是全周期平均汇总值,不是每秒 interval 采样,是整段测试最终均值。
字段 数值 含义
ReqstdOps(总 IOPS) 167.8 预埋阶段整体操作速率 167.8 ops/s
resp(总平均时延,单位 ms) 0.010 整体操作平均耗时 0.010ms
cpu% sys(系统 CPU 占比) 2.1 内核态 CPU 使用率 2.1%
cpu% pct(总 CPU 占比) 1.42 整机客户端总 CPU 占用很低,无 CPU 瓶颈
read rate / read resp 0.0 / 0.000 格式化阶段无读 IO
write rate(写 IOPS) 167.8 预埋全是写入操作,写 IOPS = 总 IOPS
write resp(写平均时延 ms) 0.010 写入平均延迟 0.01ms,写入响应极快
mb/sec read 0.00 无读带宽
mb/sec write 0.66 写入带宽 0.66MB/s
mb/sec total 0.66 总带宽等于写带宽
xfer size 4095 单次写入块大小 4KB(和测试配置 4k 匹配)

关键对比与结论

  1. 负载形态差异
    • format 阶段:纯 4K 写 + 大量目录 / 文件创建元数据,IOPS 167.8
    • rd1 压测:纯 4K 读,IOPS 509.3,读性能≈写入 3 倍
  2. 延迟表现极好 读平均延迟 0.003ms,写预埋 0.010ms,说明底层存储介质(共享存储 / 云盘)响应速度快,无明显抖动。
  3. 客户端资源无瓶颈 两轮 CPU 占用都<3%,可以加更多 fwd 线程、加大并发,压榨存储真实上限。
  4. 块大小严格生效 format xfer=4095、rd1=4096,都是标准 4KB 块,配置参数生效无误。
  5. 带宽换算验证 4KB * 509.3 IOPS = 1.989 MB/s,和报表 total mb/sec=1.99 完全匹配,数值精准无误差。

五、实操调优步骤

  1. 基准起步:先设置单 fwd threads = 逻辑核数 ×2
  2. 跑 600s 看 totals.html 里 cpu% pct
    • CPU <30%:线程翻倍继续加压
    • CPU 70%~80%:接近客户端瓶颈,不要再加
    • CPU>90%:线程过高,降线程防调度抖动
  3. 同步观察指标:
    • IOPS 不再上涨、延迟持续走高 → 瓶颈在存储 / 网络,不是客户端 CPU
    • IOPS 随线程线性上涨、延迟平稳 → 还能继续加线程
相关推荐
AOwhisky5 小时前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
ZStack开发者社区7 小时前
ZSTACK · 答客问 | 什么时候该升级,什么时候再等等
网络·云计算
2601_961875247 小时前
法考资料全套2026|客观题|主观题|资料已整理
阿里云·云计算·腾讯云·azure·七牛云存储·csdn开发云·火山引擎
SaaS_Product9 小时前
同步盘操作教程:如何自动同步文件
人工智能·云计算·saas·onedrive
精益数智小屋10 小时前
拆解项目管理计划的核心功能:用项目管理计划解决跨部门协作难题
大数据·人工智能·数据分析·云计算·软件工程
容器魔方13 小时前
Karmada v1.18 版本发布!新增混合云溢出式调度能力
人工智能·云原生·容器·华为云·云计算
AOwhisky14 小时前
学习自测与解析:Redis系列第一期与第二期核心知识点详解
运维·数据库·redis·学习·云计算
腾讯蓝鲸智云14 小时前
【运维自动化-监控平台】初识蓝鲸监控
运维·自动化·云计算·sass·paas
翼龙云_cloud14 小时前
阿里云代理商:阿里云 CPFS 通用版创建与删除全指南
阿里云·云计算·云服务器