type
status
date
slug
summary
tags
category
icon
password
一、前言
1、介绍
vdbench是一个I/O工作负载生成器,通常用于验证数据完整性和度量直接附加(或网络连接)存储性能。它可以运行在windows、linux环境,可用于测试文件系统或块设备基准性能。
二、安装部署
1、Linux客户端
依赖java环境
在线安装:yum -y install java
离线安装:tar zxvf jd-.tar.gz -C /usr/lib/
在 /etc/profile 文件中添加环境变量配置:
执行profile文件:
source /etc/profile
执行java -version,显示java版本,即完成java安装。
配置免秘钥
非必选项,如需要联机测试,则需要配置此项
示例使用三个客户端联机测试,使用客户端node241作为主节点
客户端主机名 | 客户端IP |
node241 | 66.66.66.241 |
node242 | 66.66.66.242 |
node243 | 66.66.66.243 |
将每个节点IP和主机名的映射关系写入到/etc/hosts配置文件内
主节点生成公钥文件,并拷贝到其他从节点(配置主节点到从节点免秘钥登录)
- vdbench使用
解压缩vdbench安装包至/root/vdbench50406目录内,切换到vdbench解压缩目录执行对应参数文件即可
2、Windows客户端
- 部署jdk环境 直接安装jdk软件即可(环境变量在安装完成后会自动添加)
- vdbench使用 解压缩vdbench软件包,切换到vdbench解压缩目录执行对应参数文件即可
3、注意事项
- 在联机测试时,客户端的系统时间需保持一致,否则会出现时钟同步告警(this can lead to heartbeat issues)
- 客户端的防火墙要关闭(或者设置开放程序指定端口5570、5560访问)
- 关闭系统日志服务rsyslog,避免运行时出现其他日志文件打印信息 参数文件添加messagescan=no可以过滤掉多余的系统日志
三、常用操作
1、常用操作命令
检查vdbench环境
运行测试模型
注:-f后接测试参数文件名,-o后接导出测试结果路径
建立rsh通信
注:此命令是用于windows系统多主机联机跑vdbench时使用,因为windows操作系统不支持ssh,因此,vdbench提供了rsh的通信方式。在目标主机上执行此工具后,vdbench将会启动一个java socket用于vdbench slave与master之间通信
四、参数说明
vdbench可用于文件系统及块设备基准性能测试,以下主要介绍文件系统及块存储的常用测试参数
vdbench所有测试参数都定义到一个参数文件内,在运行时按照顺序被读取执行相应操作,在参数文件定义时需要执行顺序进行定义
1、文件系统
文件系统参数文件定义顺序为:HD、FSD、FWD、RD
1.1、HD(Host Define)
非必选项,单机运行时不需要配置HD参数,一般只有在多主机联机测试时才需要配置
- hd= 标识主机定义的名称,多主机运行时,可以使用hd1、hd2、hd3...区分
- system= 主机IP地址或主机名
- vdbench= vdbench执行文件存放路径,当多主机存放路径不同时,可在hd定义时单独指定
- user= slave和master通信使用用户
- shell= 可选值为rsh、ssh或vdbench,默认值为rsh,多主机联机测试时,mater和slave主机间通信方式 当参数值为rsh时,需要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式 当参数值为ssh时,需要配置master和slave主机ssh互信,通常Linux主机联机时使用此通信方式 当参数值为vdbench,需要在所有slave主机运行vdbench rsh启用vdbench本身的rsh守护进程,通常Window主机联机时使用此通信方式
1.2、FSD(File System Define)
- fsd= 标识文件系统定义的名称,多文件系统时(fsd1、fsd2、fsd3...),可以指定default(将相同的参数作为所有fsd的默认值)
- anchor= 文件写入根目录
- depth= 创建目录层级数(即目录深度)
- width= 每层文件夹的子文件夹数
- files= 测试文件个数(vdbench测试过程中会生成多层级目录结构,实际只有最后一层目录会生成测试文件)
- size= 每个测试文件大小
- distribution= 可选值为bottom或all,默认为bottom --当参数值为bottom时,程序只在最后一层目录写入测试文件 --当参数值为all时,程序在每一层目录都写入测试文件
- shared= 可选值为yes或no,默认值为no,一般只有在多主机联机测试时指定 vdbench不允许不同的slave之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了shared=yes,那么不同的slave可以平分一个目录下所有的文件来进行访问,相当于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写 --当多主机联机测试时,写入的根目录anchor为同一个路径时,需要指定参数值为yes
计算公式如下:
最后一层生成文件夹个数=width^depth 测试文件个数=(width^depth)*files
1.3、FWD(FileSystem Workload Defile)
- fwd= 标识文件系统工作负载定义的名称,多文件系统工作负载定义时,可以使用fwd1、fwd2、fwd3...区分
- fsd= 标识此工作负载使用文件存储定义的名称
- host= 标识此工作负载使用主机
- operation= 可选值为read或write,文件操作方式
- rdpct= 可选值为0~100,读操作占比百分比,一般混合读写时需要指定,当值为60时,则混合读写比为6:4
- fileio= 可选值为random或sequential,标识文件 I/O 将执行的方式
- fileselect= random或sequential,标识选择文件或目录的方式
- xfersizes= 数据传输(读取和写入操作)处理的数据大小(即单次IO大小)
- threads= 此工作负载的并发线程数量
1.4、RD(Run Define)
- rd= 标识文件系统运行定义的名称。
- fwd= 标识文件系统工作负载定义的名称。
- fwdrate= 每秒执行的文件系统操作数量。设置为max,表示不做任何限制,按照最大强度自适应
- format= 可选值为yes、no或restart,标识预处理目录和文件结构的方式 --yes表示删除目录和文件结构再重新创建 --no表示不删除目录和文件结构 --restart表示只创建未生成的目录或文件,并且增大未达到实际大小的文件
- elapsed= 默认值为30,测试运行持续时间(单位为秒)
- interval= 结果输出打印时间间隔(单位为秒)
2、块设备
块设备参数文件定义顺序为:HD、SD、WD、RD
1.1、HD(Host Define)
非必选项,单机运行时不需要配置HD参数,一般只有在多主机联机测试时才需要配置
- hd= 标识主机定义的名称,多主机运行时,可以使用hd1、hd2、hd3...区分
- system= 主机IP地址或主机名
- vdbench= vdbench执行文件存放路径,当多主机存放路径不同时,可在hd定义时单独指定
- user= slave和master通信使用用户
- shell= 可选值为rsh、ssh或vdbench,默认值为rsh,多主机联机测试时,mater和slave主机间通信方式 当参数值为rsh时,需要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式 当参数值为ssh时,需要配置master和slave主机ssh互信,通常Linux主机联机时使用此通信方式 当参数值为vdbench,需要在所有slave主机运行vdbench rsh启用vdbench本身的rsh守护进程,通常Window主机联机时使用此通信方式
1.2、SD(Storage Define)
- sd= 标识存储定义的名称
- hd= 标识主机定义的名称
- lun= 写入块设备,如:/dev/sdb, /dev/sdc...
- openflags= 通过设置为o_direct,以无缓冲缓存的方式进行读写操作
- threads= 对SD的最大并发I/O请求数量
1.3、WD(Workload Define)
- wd= 标识工作负载定义的名称
- sd= 标识存储定义的名称
- seekpct= 可选值为0或100(也可使用sequential或random表示),默认值为100,随机寻道的百分比,设置为0时表示顺序,设置为100时表示随机。
- rdpct= 读取请求占请求总数的百分比,设置为0时表示写,设置为100时表示读
- xfersize= 要传输的数据大小。默认设置为4k
- skew= 非必选项,一般在多个工作负载时需要指定,表示该工作负载占总工作量百分比(skew总和为100)
1.4、RD(Run Define)
- rd= 标识运行定义的名称
- wd= 标识工作负载定义的名称
- iorate= 常用可选值为100、max,此工作负载的固定I/O速率 --当参数值为100时,以每秒100个I/Os的速度运行工作负载,当参数值设置为一个低于最大速率的值时,可以达到限制读写速度的效果 --当参数值为max时,以最大的I/O速率运行工作负载,一般测试读写最大性能时,该参数值均为max
- warmup= 预热时间(单位为秒),默认情况下vdbench会将第一个时间间隔输出数据排除在外,程序在预热时间内的测试不纳入最终测试结果中(即预热结束后,才开始正式测试) --当interval为5、elapsed为600时,测试性能为2~elapsed/interval(avg_2-120)时间间隔内的平均性能 --当interval为5、warmup为60、elapsed为600时,测试性能为1+(warmup/interval)~(warmup+elapsed)/interval(avg_13-132)时间间隔内的平均性能
- maxdata= 读写数据大小,通常情况下,当运行elapsed时间后测试结束;当同时指定elapsed和maxdata参数值时,以最快运行完的参数为准(即maxdata测试时间小于elapsed时,程序写完elapsed数据量后结束) --当参数值为100以下时,表示读写数据量为总存储定义大小的倍数(如maxdata=2,2个存储定义(每个存储定义数据量为100G),则实际读写数据大小为400G) --当参数值为100以上时,表示数据量为实际读写数据量(可以使用单位M、G、T等)
- elapsed= 默认值为30,测试运行持续时间(单位为秒)
- interval= 报告时间间隔(单位为秒)
五、运行使用
1、单机运行
- Linux 示例如下,单节点针对裸盘测试,1M顺序写,测试时间600s,预热时间60s,报告时间间隔2s
- Window 示例如下,单节点针对文件系统测试,1M顺序写,目录深度为2,每层目录数为3,每个目录文件数为10,每个文件大小为200M,测试时间为600s,报告时间时间2s
2、联机运行
- Linux 1、按照二、安装部署,配置多主机ssh互信 2、master主机运行测试参数文件即可 示例如下,三节点针对裸盘联机测试,1M顺序写,测试数据量为400G,预热时间30s,报告间隔5s
- Window 1、所有slave主机运行vdbench本身rsh守护进程
2、master主机运行测试参数文件即可
示例如下,三节点针对文件系统联机测试,1M顺序写,目录深度为2,每层目录数为3,每个目录文件数为10000,每个文件大小为200M,测试时间为600s,报告间隔1s
六、结果分析
当vdbench运行完负载测试后,会在安装目录下生成output文件夹,里边包含测试结果文件
1、输出文件
- errorlog.html 当运行测试启用数据校验时,它可能会包含一些错误信息,如:
- 无效的密钥读取
- 无效的 lba 读取(一个扇区的逻辑字节地址)
- 无效的 SD 或 FSD 名称读取
- 数据损坏
- 坏扇区
- flatfile.html vdbench 生成的一种逐列的 ASCII 格式的信息,可以使用parseflat参数解析结果
- histogram.html 一种包含报告柱状图的响应时间、文本格式的文件
- logfile.html 包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途
- parmfile.html 包含测试运行配置参数信息
- summary.html 记录全部数据信息,显示每个报告间隔内总体性能情况及工作负载情况,以及除第一个间隔外的所有间隔的加权平均值
- totals.html 记录全部数据计算之后的平均值,一般测试结果从该文件取值,除第一个间隔外所有间隔的加权平均值
2、结果分析
2.1、文件系统
totals.html一般包括两个部分,第一部分为文件存储目录结构及数据填充的平均性能值,第二部分为执行测试过程中除第一个时间间隔外所有时间间隔平均性能值,主要看第二部分的内容
- Interval 报告间隔序号,测试结果一般为除第一个时间间隔外所有时间间隔加权平均值 如elapsed=600,interval=5,则性能结果为第2个间隔到第120个间隔的平均值(avg_2-120)
- ReqstdOps
- rate 每秒读写I/O个数(读写IOPS),可以通过rd运行定义参数fwdrate控制 当fwdrate为max时,以最大I/O速率运行工作负载 当fwdrate为低于最大I/0速率的一个数值时,可以限制读写速度,以固定I/O速率运行工作负载
- resp 读写请求响应时间(读写时延),单位为ms
- cpu%
- tatol 总的cpu占用率
- sys 系统cpu占用率
- read pct 读取请求占总请求数百分比占比,当为0时表示写,当为100时表示读
- read
- rate 每秒读I/O个数(读IOPS)
- resp 读请求响应时间(读时延),单位为ms
- write
- rate 每秒写I/O个数(写IOPS)
- resp 写请求响应时间(写时延),单位为ms
- mb/sec
- read 每秒读取速度
- write 每秒写入速度
- total 每秒读写速度总和
- xfersize 每个读写I/O传输数据量(即单个读写I/O大小),单位为字节B
2.2、块设备
- interval 报告间隔序号,测试结果一般为除第一个时间时间外所有时间间隔加权平均值,如有设置预热时间,则这部分测试数据也需要排除在外 如elapsed=600,warmup=30,interval=5,则性能测试结果为第7个间隔到第126个间隔的平均值(avg_7-126)
- i/o rate 每秒读写I/O个数(读写IOPS),可以通过rd运行定义参数iorate控制 当iorate为max时,以最大I/O速率运行工作负载 当iorate为低于最大I/0速率的一个数值时,可以限制读写速度,以固定I/O速率运行工作负载
- MB/sec 每秒读写速度(读写带宽) 注:按官方手册说明,
- bytes i/0 每个读写I/O传输数据量(即单个读写I/O大小),单位为字节B,可以通过wd工作负载定义参数xfersize控制
- read pct 读取请求占请求总数的百分比,可以通过wd工作负载定义参数rdpct控制 当rdpct为0时,表示测试模型为写 当rdpct为100时,表示测试模型为读
- resp time 请求响应时间(读写时延),单位为毫秒ms
- read resp 读取请求响应时间,单位为毫秒ms
- write resp 写入请求响应时间,单位为毫秒ms
- resp max 最大请求响应时间,单位为毫秒ms
- resp stddev 请求响应时间标准偏差,单位为毫秒ms
- queue depth 读写I/0队列深度
- cpu% sys+u 内核态空间及用户态空间CPU占用率
- cpu% sys 内核态空间CPU占用率 2020年05月29日 16:00:16 Clear
七、测试说明
1、测试总结
- 线程数(thread)一般设置为客户端CPU线程数总大小 grep 'processor' /proc/cpuinfo | sort -u | wc -l
- 测试总数据量需要为客户端内存大小两倍
- 测试读模型时需要清理客户端缓存信息 sync;echo 3 > /proc/sys/vm/drop
2、常见测试参数
- 4M顺序写 目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序写
- 4M顺序读 目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序读
- 8M混合读写 目录深度2、单级目录数100、单个目录文件数100、单文件大小8M、IO块大小1M、混合读写(读写比为6:4)
- Author:共倒金荷家万里
- URL:https://tangly1024.com/article/11140ef0-3786-8054-af03-d2c5fffafc0a
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts