Skip to content

VDBench 存储性能测试指南

概述

VDBench 是 Java 编写的存储性能测试工具,支持多种存储协议和复杂的工作负载模拟。本文档介绍 VDBench 的配置方法和测试场景。

前提条件

  • 已安装 Java 运行环境(JRE 1.6+)
  • 下载 VDBench 工具包
  • 具有 root 权限或相应目录的读写权限
  • 了解目标存储系统的性能特征

基础使用

1. 基本命令格式

bash
# Linux/Unix 系统
./vdbench -f config_file.conf -o /path/to/output_directory

# Windows 系统
.\vdbench.bat -f config_file.conf -o C:\path\to\output_directory

2. 命令参数说明

参数说明必需
-f指定配置文件路径
-o指定输出目录路径
-r启用资源监控
-t限制线程数
-c指定配置参数覆盖

测试场景配置

1. iSCSI 存储耐久性测试

测试目标

对 iSCSI 存储进行 10 天 50% 读/50% 写混合负载测试,验证长期稳定性。

配置文件:iscsi-endurance-test.conf

ini
# ==== VDBench: iSCSI Endurance Test (10 days) ====

# 全局设置
messagescan=no          # 禁用消息扫描
data_errors=1           # 启用数据错误检查
create_anchors=yes      # 创建锚点文件

# FSD: 定义文件系统结构
fsd=fsd_iscsi,anchor=/mnt/iscsi5,files=750000,size=(64K,50,256K,47,1M,2,10M,1)

# FWD: 定义工作负载
fwd=format,threads=32,xfersize=(4K,10,60K,20,28K,10,120K,20,256K,20,1M,20)
fwd=default,operation=write,xfersize=(4K,10,60K,20,28K,10,120K,20,256K,20,1M,20),fileio=random,fileselect=random,rdpct=50,threads=1
fwd=fwd_iscsi_test,fsd=fsd_iscsi

# RD: 定义运行参数
rd=run1,fwd=(format,fwd_iscsi_test),fwdrate=max,format=yes,elapsed=864000,interval=5

启动命令

bash
./vdbench -f iscsi-endurance-test.conf -o output_iscsi

关键参数说明

  • elapsed=864000:运行 10 天(864000 秒)
  • files=750000:创建 75 万个文件
  • size=(64K,50,256K,47,1M,2,10M,1):文件大小分布
  • rdpct=50:50% 读取,50% 写入

2. NFS 高并发压力测试

测试目标

对 NFS 存储进行 7 天 64 线程高并发测试,模拟真实业务负载。

配置文件:nfs-stress-test.conf

ini
# ==== VDBench: NFS High-Concurrency Stress Test (7 days) ====

# 全局设置
create_anchors=yes      # 创建锚点文件
data_errors=1           # 启用数据错误检查
messagescan=no          # 禁用消息扫描

# FSD: 定义复杂目录结构
fsd=fsd_nfs,anchor=/mnt/nfs4_2/linux4-2/,depth=4,width=10,files=2000,size=(64K,20,256K,45,512K,30,1M,5)

# FWD: 定义高并发工作负载
fwd=fwd_nfs_test,fsd=fsd_nfs,operation=write,xfersize=(8K,20,64K,30,128K,30,1M,20),fileio=random,fileselect=random,rdpct=50,threads=64,openflags=o_direct

# RD: 定义运行参数
rd=run1,fwd=fwd_nfs_test,fwdrate=max,format=restart,elapsed=604800,interval=1

启动命令

bash
./vdbench -f nfs-stress-test.conf -o output_nfs

关键参数说明

  • depth=4,width=10:创建 4 层深度,每层 10 个目录
  • threads=64:64 个并发线程
  • openflags=o_direct:使用 Direct I/O 绕过缓存
  • elapsed=604800:运行 7 天

3. Windows 文件系统快速验证

测试目标

Windows 系统快速性能验证,用于配置变更后的性能检查。

配置文件:windows-quick-validation.conf

ini
# ==== VDBench: Windows Filesystem Quick Validation (5 mins) ====

# 全局设置
messagescan=no          # 禁用消息扫描

# FSD: 定义文件系统
fsd=default,openflags=directio,depth=1,width=100,files=1000,size=96K
fsd=fsd_win,anchor=E:/test2

# FWD: 定义工作负载
fwd=fwd_win_test,fsd=fsd_win,rdpct=50,fileio=random,fileselect=random,xfersize=4K,threads=4

# RD: 定义运行参数
rd=run1,fwd=fwd_win_test,fwdrate=max,format=yes,warmup=10,elapsed=300,interval=1

启动命令

powershell
.\vdbench.bat -f windows-quick-validation.conf -o output_windows

关键参数说明

  • openflags=directio:Windows Direct I/O
  • warmup=10:10 秒预热时间
  • elapsed=300:运行 5 分钟
  • xfersize=4K:4KB 传输块大小

4. Linux 裸设备顺序测试

测试目标

Linux 裸设备顺序 I/O 性能测试,验证 SAN LUN 基本性能。

配置文件:linux-raw-sequential-test.conf

ini
# ==== VDBench: Linux Raw Device Sequential I/O Test (8 mins) ====

# SD: 定义存储设备
sd=default,threads=4,openflags=o_direct
sd=sd_raw,lun=/dev/mapper/mpatha

# WD: 定义工作负载
wd=wd_seq_test,sd=sd_raw,xfersize=4k,rdpct=50,seekpct=0

# RD: 定义运行参数
rd=run1,wd=wd_seq_test,iorate=max,elapsed=500,interval=1,warmup=20

启动命令

bash
./vdbench -f linux-raw-sequential-test.conf -o output_raw_device

关键参数说明

  • lun=/dev/mapper/mpatha:指定裸设备路径
  • seekpct=0:0% 随机寻道,即 100% 顺序 I/O
  • openflags=o_direct:Linux Direct I/O
  • warmup=20:20 秒预热时间

VDBench 组件详解

1. FSD (File System Definition)

定义文件系统结构和文件属性:

参数说明示例
anchor挂载点或根目录/mnt/test
files文件数量100000
size文件大小分布(64K,50,1M,50)
depth目录深度4
width目录宽度10

2. FWD (File Workload Definition)

定义文件工作负载:

参数说明示例
operation操作类型read/write
xfersize传输块大小4k/1M
fileio文件 I/O 模式random/sequential
rdpct读取百分比70
threads线程数32
openflags打开标志o_direct

3. SD (Storage Definition)

定义存储设备:

参数说明示例
lun设备路径/dev/sdb
threads线程数8
openflags打开标志o_direct

4. WD (Workload Definition)

定义工作负载参数:

参数说明示例
seekpct随机寻道百分比0(顺序)/100(随机)
rdpct读取百分比50
xfersize传输大小8k

5. RD (Run Definition)

定义运行参数:

参数说明示例
elapsed运行时间(秒)3600
warmup预热时间(秒)60
interval报告间隔(秒)10
format格式化选项yes/no/restart
fwdrateI/O 速率max

测试流程

1. 测试前准备

系统准备

bash
# 检查磁盘空间
df -h

# 检查网络连接(网络存储)
ping <storage_ip>

# 检查权限
ls -la /mnt/test

# 停止不必要服务
systemctl stop httpd

环境检查

bash
# 检查 Java 版本
java -version

# 检查 VDBench 版本
./vdbench -v

# 检查配置文件语法
./vdbench -f test.conf -c

2. 执行测试

启动测试

bash
# 启动测试
./vdbench -f config.conf -o output

# 后台运行
nohup ./vdbench -f config.conf -o output > test.log 2>&1 &

# 监控测试进度
tail -f output/summary.html

实时监控

bash
# 监控系统资源
top
iostat -x 1
sar -u 1

# 监控网络(网络存储)
iftop -i eth0

3. 结果分析

报告文件

  • summary.html:汇总报告
  • flatfile.html:详细数据
  • errorlog.html:错误日志
  • log.html:运行日志

关键指标

  • IOPS:每秒 I/O 操作数
  • 带宽:数据传输速率(MB/s)
  • 延迟:响应时间(ms)
  • CPU 使用率:处理器占用率
  • 错误率:I/O 错误比例

故障排查

常见问题

问题 1:Java 版本不兼容

java.lang.UnsupportedClassVersionError

解决方案:升级 Java 版本到 1.6+。

问题 2:权限不足

Permission denied: /mnt/test

解决方案:检查目录权限和用户权限。

问题 3:内存不足

OutOfMemoryError: Java heap space

解决方案:增加 Java 堆内存:

bash
export JAVA_OPTS="-Xmx4g -Xms2g"

问题 4:网络存储连接失败

Connection timed out

解决方案:检查网络连接和防火墙设置。

调试技巧

启用详细日志

bash
./vdbench -f config.conf -o output -debug

验证配置文件

bash
./vdbench -f config.conf -c

单步执行

bash
./vdbench -f config.conf -o output -pause

性能调优

1. 参数优化

文件大小分布

根据实际业务调整文件大小:

ini
# 小文件场景
size=(4K,40,8K,30,16K,20,64K,10)

# 大文件场景
size=(1M,30,4M,40,8M,20,16M,10)

线程数调整

根据系统 CPU 核心数调整:

ini
# CPU 核心数 * 2
threads=16  # 8 核 CPU

队列深度

根据存储设备特性调整:

ini
# SSD 设备
threads=32

# HDD 设备
threads=8

2. 系统优化

Linux 系统参数

bash
# 增加文件描述符限制
ulimit -n 65536

# 调整 I/O 调度器
echo noop > /sys/block/sdb/queue/scheduler

# 禁用 swap
swapoff -a

网络优化

bash
# 调整 TCP 缓冲区
echo 'net.core.rmem_max = 134217728' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 134217728' >> /etc/sysctl.conf

最佳实践

1. 测试策略

  • 建立性能基线用于对比
  • 多次测试取平均值
  • 不同时间段测试避免系统干扰
  • 结合实际业务场景设计测试

2. 结果管理

  • 标准化测试报告格式
  • 保存原始数据和配置文件
  • 建立历史性能数据库
  • 定期回顾和更新测试标准

3. 安全考虑

  • 测试数据使用非敏感信息
  • 测试环境与生产环境隔离
  • 定期清理测试数据
  • 监控测试对系统的影响

注意事项

  • 长时间测试需要监控系统资源
  • 网络存储测试需考虑网络带宽限制
  • SSD 测试建议进行预热
  • 测试前备份重要数据
  • 避免在生产环境高峰期测试
  • 定期更新 VDBench 版本以获取新功能

用心记录,持续学习 | CNB