找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1526

积分

0

好友

222

主题
发表于 3 天前 | 查看: 8| 回复: 0

一、准备工作与环境配置

1. 获取Vdbench工具

从Oracle官方网站下载最新版本的Vdbench工具包:

下载地址:http://www.oracle.com/technetwork/server-storage/vdbench-downloads-1901681.html

2. 部署工具包

将下载的工具包上传至测试服务器,并解压到指定目录。Vdbench为绿色软件,无需编译安装。

  • Linux示例:上传至/root目录,解压到vdbench50406文件夹,并赋予可执行权限。
  • Windows:解压到任意目录即可。

3. 安装Java运行环境

确保系统中已安装正确版本的JRE(Java Runtime Environment)。

  • Linux:建议使用JRE 1.7.45或更高版本。
  • Windows:将JRE安装路径添加到系统环境变量PATH中。
  • AIX:需单独获取,版本需在1.6.20以上。

4. 验证工具可用性

在工具目录下执行快速测试命令,以检查环境是否配置正确。

# Linux
./vdbench -t

# Windows (在命令行中)
vdbench -t

说明-t参数会启动一个简短的演示测试,对一个磁盘区域进行5秒的随机混合读写IOPS测试,并输出结果,用于快速验证工具是否可正常运行。

5. 运行完整测试

执行一次完整测试通常包含三个步骤:

  1. 准备好待测试的存储设备(LUN)。
  2. 编写测试参数配置文件(文件后缀名不限,如.txt.vdb)。
  3. 执行命令:vdbench -f 参数文件 -o 输出目录
    说明:编辑参数文件时,避免使用中文标点。若未指定-o参数,测试结果将默认输出到当前目录下的output文件夹中。

二、测试参数文件详解

Vdbench的参数文件通常由以下5个部分组成,它们共同定义了测试的全局设置、主机、存储、负载模型和运行方式。

  1. Global (全局参数)
  2. Host Description (HD, 主机定义)
  3. Storage Description (SD, 存储定义)
  4. Workload Description (WD, 负载定义)
  5. Run Description (RD, 运行定义)

1. Global 全局参数

此部分定义适用于整个测试的通用设置。

参数名称 定义
dedupratio=xxx 设定数据重删比率。
compratio=xxx 设定数据压缩比率(使用LZ算法生成数据)。
dedupunit=xk 设定重删数据块大小,需参考存储厂商建议配置。
histogram 收集并统计I/O响应时间的分布情况。
messagescan=xxx 定义是否扫描系统日志(yes/no/nodiskplay),建议设为no以避免无关日志干扰。

示例配置

messagescan=no
histogram=(default,100u,200u,300u,…,9m,10m,…,30m,40m,50m…)
dedupratio=2
compratio=3
dedupunit=8k

技术要点

  • 若不指定重删压缩参数,工具默认生成1:1的数据。
  • 存储最终达到的实际压缩比可能低于设定值,这取决于存储的压缩算法和落盘块大小。
  • histogram参数会生成详细的时延分布HTML报告。默认配置通常已满足大多数性能数据分析需求。

2. Host Description (HD) 主机定义

在多主机联机测试场景下必须定义,用于指定参与测试的服务器。

参数名称 定义
hd=default 后续参数作为所有主机的默认值。
hd=host_label 定义主机标签,用于标识和引用。
system=system_name 指定主机IP地址或主机名(多机测试时使用)。
vdbench=工具路径 指定远程主机上vdbench的安装路径(所有主机需一致)。
shell=rsh|ssh|vdbench 指定联机使用的命令协议。Linux推荐ssh,Windows可用vdbench

示例配置(Linux多机)

hd=default,shell=ssh,vdbench=/root/vdbench504,user=root
hd=hd1,system=192.168.1.1
hd=hd2,system=192.168.1.2

配置前提:使用ssh时,需配置主控机与所有主机间的SSH免密互信,并将主机信息写入主控机的/etc/hosts文件。

3. Storage Description (SD) 存储定义

定义测试的目标存储设备(磁盘/LUN)及相关I/O设置。

参数名称 定义
sd=default 后续参数作为所有存储设备的默认值。
sd=sd_id 定义一个存储设备标识。
hd=host_label (多机测试)指定该存储设备所属的主机。
lun=path 指定测试对象的设备路径。<br>Linux: /dev/sdb, /dev/mapper/mpatha<br>Windows: D:\\\.\PhysicalDrive2<br>AIX: /dev/rhdisk1
threads=xxx 设定每个LUN的I/O并发线程数。
openflags=xxx 设置I/O模式,通常用于启用Direct I/O绕过缓存。<br>Linux: o_direct<br>Windows: directio
size=nnn 指定测试区域大小,默认为整个LUN。

示例配置

# Linux单机,Direct IO
sd=default,threads=12,openflags=o_direct
sd=sd11,lun=/dev/sdb
sd=sd12,lun=/dev/sdc

存储配置推荐

  • 当单主机性能或链路成为瓶颈时,建议采用多主机联机测试。
  • 为充分压测存储性能,建议至少配置8个LUN参与测试。
  • 测试空间总量应大于存储缓存容量的5倍,以避免缓存命中率虚高。
  • 若存储启用了重删、压缩或Thin功能,在正式性能测试前,需先用非零、非重删压缩数据将测试空间填充一遍(预埋)。

4. Workload Description (WD) 负载定义

定义具体的I/O负载模型,即测试的访问模式。

参数名称 定义
wd=default 后续参数作为所有负载的默认值。
wd=wd_id 定义一个负载标识。
sd=sd_id 指定施加此负载的存储设备,可用sd*代表所有设备。
rdpct=xxx 设定读操作所占的百分比(默认100%)。
seekpct=xxx 设定随机I/O的比例。100random为全随机;0sequential为全顺序。
xfersize=xx[k/m] 设定每次I/O操作的数据块大小,默认4k。支持定义混合块大小。

示例配置

# 8KB数据块,全随机访问,70%读 + 30%写
wd=wd_stress,sd=sd*,seekpct=100,rdpct=70,xfersize=8k

高级技巧xfersize参数支持定义混合I/O,例如xfersize=(8k,50,16k,30,2k,20)表示50%的I/O为8k,30%为16k,20%为2k。

5. Run Description (RD) 运行定义

定义测试如何执行,包括时间、强度等运行参数。

参数名称 定义
rd=default 后续参数作为所有运行定义的默认值。
wd=wd_id 指定要执行的负载。
iorate=xxx 限定I/O速率(IOPS)。可设固定值(如100)、递增序列(如(100-1000,100))或max(最大压力)。
elapsed=xxx 测试总运行时间(单位:秒)。
interval=xxx 测试结果打印输出间隔(单位:秒)。
warmup=xxx 设定预热时间,此期间的数据不计入最终统计结果。

数据预埋(填充)示例
在正式性能测试前,通常需要先进行数据填充,以构建稳定的重删压缩状态或覆盖整个测试空间。

# 定义存储设备(这里以8个LUN为例)
sd=default,threads=4,openflags=o_direct
sd=sd11,lun=/dev/sdb
sd=sd12,lun=/dev/sdc
... (sd13 到 sd18)

# 设置填充负载:256KB,100%顺序写
wd=wd_fill,sd=sd*,seekpct=0,rdpct=0,xfersize=256k

# 运行填充任务:以最大速率运行直到空间写满或超时(这里设为100小时)
rd=run_fill,wd=wd_fill,iorate=max,elapsed=360000,interval=1

三、测试脚本示例与结果分析

测试脚本示例

以下是两个完整的测试脚本示例,涵盖了单机和多机场景。

1. 单主机性能测试脚本 (single_host_test.vdb):

# 全局参数:模拟2:1重删,3:1压缩
dedupratio=2
compratio=3
dedupunit=8k

# 定义测试存储:8个LUN,每LUN12并发,Direct IO
sd=default,threads=12,openflags=o_direct
sd=sd11,lun=/dev/sdb
sd=sd12,lun=/dev/sdc
sd=sd13,lun=/dev/sdd
sd=sd14,lun=/dev/sde
sd=sd15,lun=/dev/sdf
sd=sd16,lun=/dev/sdg
sd=sd17,lun=/dev/sdh
sd=sd18,lun=/dev/sdi

# 定义负载模型:8KB,100%随机,70%读,30%写
wd=wd1,sd=sd*,xfersize=8k,rdpct=70,seekpct=100

# 定义运行方式:预热300秒,正式测试1800秒(30分钟),每秒打印结果
rd=run1,wd=wd1,iorate=max,elapsed=1800,interval=1,warmup=300

2. 多主机联机性能测试脚本 (multi_host_test.vdb):

# 全局参数
dedupratio=2
compratio=3
dedupunit=8k

# 主机定义:两台主机,使用SSH连接
hd=default,shell=ssh,vdbench=/home/vdbench504,user=root
hd=hd1,system=192.168.1.1
hd=hd2,system=192.168.1.2

# 存储定义:每台主机使用4个LUN,共8个LUN
sd=default,threads=12,openflags=o_direct
sd=sd11,hd=hd1,lun=/dev/sdb
sd=sd12,hd=hd1,lun=/dev/sdc
sd=sd13,hd=hd1,lun=/dev/sdd
sd=sd14,hd=hd1,lun=/dev/sde
sd=sd21,hd=hd2,lun=/dev/sdb
sd=sd22,hd=hd2,lun=/dev/sdc
sd=sd23,hd=hd2,lun=/dev/sdd
sd=sd24,hd=hd2,lun=/dev/sde

# 负载模型:8KB,100%随机,70%读,30%写
wd=wd1,sd=sd*,xfersize=8k,rdpct=70,seekpct=100

# 运行方式
rd=run1,wd=wd1,iorate=max,elapsed=1800,interval=1,warmup=300

测试结果解读

执行测试后,Vdbench会在命令行界面实时打印结果,并在-o指定的输出目录(默认为./output)生成详细报告文件。

1. 实时输出关键指标
Linux命令行操作界面,每秒(根据interval设置)会打印一行统计数据,主要关注以下列:

  • i/o rate: 当前IOPS。
  • MB/sec: 当前带宽。
  • bytes i/o: 平均I/O大小(混合负载下为加权平均)。
  • read pct: 读操作百分比。
  • resp time: 平均I/O响应时延(毫秒)。
  • read/write resp: 读/写平均响应时延(毫秒)。
  • resp max: 最大响应时延(毫秒)。
  • queue depth: 总体队列深度(总并发数)。

2. 生成的结果文件
测试结束后,在输出目录中会生成以下关键文件:

  • parmfile.html: 记录的测试参数文件,用于复现测试。
  • summary.html: 详细的测试结果汇总,与命令行输出一致。
  • totals.html: 整个测试周期的平均性能结果。
  • histogram.html: I/O响应时间的详细分布直方图,是分析时延特性的关键。
  • errorlog.html & logfile.html: 当测试过程中出现异常时,用于排查和定位问题。



上一篇:家庭宽带测速不达标怎么办?从罗永浩维权案例看路由器配置与网络排障
下一篇:log4j异步日志RingBuffer机制解析:“不丢日志”策略如何导致服务雪崩
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 21:13 , Processed in 0.218271 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表