vdbench工具

〇、工具准备

1)安装java

    安装命令:rpm -i ./jre-8u231-linux-x64.rpm

2)下载vdbench工具

    进入目录,加执行权限,然后测试vdbench是否可用,命令如下

    # cd /home/tecs/vdbench50406/

    # chmod +x vdbench

    # ./vdbench -t

一、什么是vdbench

    由java语言编写的一个磁盘IO负载生成器,主要用来测试块设备的存储,也可以测试文件,优点如下:

        1、可以测试整个集群的io(把整个测试io进行叠加,这样测试的时候可以把全部的虚机全部启动)

        2、测试报告会根据主机统计io

        3、报告还会根据设备显示io的延迟信息(记录每个io操作的用时),可以保证io是否稳定

二、命令参数说明

./vdbench -f {filename} -o {exportpath}

常用选项

    -t: 运行5秒的块设备测试,用于测试vdbench是否可用。

    -tf: 运行5秒的文件系统测试,用于测试vdbench是否可用。

    -f perfile: 加上参数文件prefile,进行实际测试。

    -v: 开启数据校验

    -vr: 写入数据的同时也进行数据校验,通常用于测试时间比较长的情况。

    -v是写入完再校验 -vr是边写入边校验

    -o xxx: 将输出文件的路径另为其它路径,默认是保存在当前目录的output目录中。

    其它选项: -j , -jn , -jr

vdbench涉及参数可以分为 块存储 和 文件系统 两部分,每部分又是按组进行划分的

所有的参数都需要定义到一个参数文件当中,在被读取的时候都是按顺序进行的,所以在定义时需要按指定的顺序进行定义

块存储参数文件的定义顺序: HD, SD, WD, RD

文件系统参数文件的定义顺序: HD, FSD, FWD, RD

  • HD 主机定义

  • SD 存储定义

  • WD 工作负载定义

  • RD 运行定义

  • FSD 文件系统存储定义

  • FWD 文件工作负载定义

2.1 块设备参数说明

块设备参数文件定义顺序为:HD、SD、WD、RD

1)HD(Host Define)
hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=hd1,system=localhost
  • 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主机联机时使用此通信方式

2)SD(Storage Define)
sd=sd1,host=hd1,lun=/dev/mapper/mpatha,openflags=o_direct,thread=16
sd=sd2,host=hd1,lun=/dev/mapper/mpathb,openflags=o_direct,thread=16
sd=sd3,host=hd1,lun=/dev/mapper/mpathc,openflags=o_direct,thread=16
  • sd= 标识存储定义的名称

  • host= 标识主机定义的名称

  • lun= 写入块设备(原始磁盘、磁带或文件系统的名称),linux使用sdb盘,则指定路径为/dev/sdb;

  • openflags= 通过设置为o_direct或directio,用于打开一个 lun 或一个文件的 flag_list,为了贴近真实场景,一般在这里选择o_direct,绕过缓存机制,直接写盘。

  • threads= 对SD的最大并发I/O请求数量,默认为 8。

3)WD(Workload Define)
wd=wd1,sd=sd*,seekpct=100,rdpct=30,xfersize=8k,skew=100
  • wd= 标识工作负载定义的名称

  • sd= 标识存储定义的名称,sd*代表对所有的sd存储都进行测试

  • seekpct= 可选值为0或100(也可使用sequential或random表示),默认值为100,随机寻道的百分比,设置为0时表示顺序,设置为100时表示随机。

  • rdpct= 读取请求占请求总数的百分比,设置为0时表示写,设置为100时表示读

  • skew= 非必选项,一般在多个工作负载时需要指定,表示该工作负载占总工作量百分比(skew总和为100)

  • xfersize= 要传输的数据大小。默认设置为4

  • rhpct= 读取命中百分比。默认设置为 0。

  • whpct= 写入命中百分比。默认设置为 0。

  • iorate= 此工作负载的固定 I/O 速率。

4)RD(Run Define)
rd=rd1,wd=wd*,iorate=5000,elapse=1000000000,interval=1,warmup=60
  • rd= 标识运行定义的名称

  • wd= 标识工作负载定义的名称

  • iorate= 常用可选值为100max,此工作负载的固定I/O速率,不能超过指定值

        --当参数值为100时,以每秒100个I/Os的速度运行工作负载,当参数值设置为一个低于最大速率的值时,可以达到限制读写速度的效果

        --当参数值为max时,以最大的I/O速率运行工作负载,一般测试读写最大性能时,该参数值均为max

  • elapsed= 默认值为30,测试运行持续时间(单位为秒),(设置长时间的运行,可能会使得数据更加稳定)

  • interval= 报告时间间隔(单位为秒),1表示每隔1秒钟打印一次结果。

  • 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时间后测试结束;当同时指定elapsedmaxdata参数值时,以最快运行完的参数为准(即maxdata测试时间小于elapsed时,程序写完elapsed数据量后结束)
        --当参数值为100以下时,表示读写数据量为总存储定义大小的倍数(如maxdata=2,2个存储定义(每个存储定义数据量为100G),则实际读写数据大小为400G)
        --当参数值为100以上时,表示数据量为实际读写数据量(可以使用单位M、G、T等)

  • pause= 在下一次运行之前休眠的时间,以秒为单位。

2.2 文件系统参数说明

 文件系统参数文件定义顺序为:HD、FSD、FWD、RD

1)HD(Host Define)
hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=client1,system=localhost

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主机联机时使用此通信方式

2)FSD(File System Define)
fsd=fsd1,anchor=/mnt,depth=2,width=10,files=20,size=100M

fsd= 标识文件系统定义的名称,多文件系统时(fsd1、fsd2、fsd3…),可以指定default(将相同的参数作为所有fsd的默认值)

openflags= 通过设置为o_direct或directio,以无缓冲缓存的方式进行读写操作

anchor= 文件写入目录,linux指定路径为/dir01;windows指定路径为E:\dir01;

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

sd=fsd1,anchor=/dir1,depth=2,width=3,files=2,size=128k
以上述参数为例,生成目录结构及测试文件如下:
最后一层文件夹数=3^2=9 最后一层文件数=9*2=18
/dir1/
├── no_dismount.txt
├── vdb.1_1.dir
│   ├── vdb.2_1.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   ├── vdb.2_2.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   └── vdb.2_3.dir
│       ├── vdb_f0001.file
│       └── vdb_f0002.file
├── vdb.1_2.dir
│   ├── vdb.2_1.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   ├── vdb.2_2.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   └── vdb.2_3.dir
│       ├── vdb_f0001.file
│       └── vdb_f0002.file
├── vdb.1_3.dir
│   ├── vdb.2_1.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   ├── vdb.2_2.dir
│   │   ├── vdb_f0001.file
│   │   └── vdb_f0002.file
│   └── vdb.2_3.dir
│       ├── vdb_f0001.file
│       └── vdb_f0002.file
└── vdb_control.file

12 directories, 20 files

3)FWD(FileSystem Workload Defile)
fwd=fwd1,fsd=fsd1,operation=write,xfersize=4k,fileio=sequential,fileselect=random,openflags=o_direct,threads=2

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、默认情况下,预填数据工作负载定义为threads=8,xfersize=128k,即预填数据使用8线程,IO大小为128K

    如需更改默认预填数据工作负载定义,则需要增加参数指定线程数和IO大小(fwd=format,threads=nn,xfersize=nn)

4)RD(Run Define)
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=100000,interval=1

rd= 标识文件系统运行定义的名称。

fwd= 标识文件系统工作负载定义的名称。

fwdrate= 每秒执行的文件系统操作数量。设置为max,表示不做任何限制,按照最大强度自适应

format= 可选值为no、yes、或restart,标识预处理目录和文件结构的方式

    no:默认参数值,不执行format预处理操作,如测试目录不存在文件时,vdbench会由于无可用文件读写而异常退出

    yes:表示删除测试目录已有文件结构,并且重新创建新的文件结构

restart:表示只创建未生成的目录或文件,并且增大未达到实际大小的文件

elapsed= 默认值为30,测试运行持续时间(单位为秒)

interval= 结果输出打印时间间隔(单位为秒)

三、运行使用

3.1 单机运行

1)块设备脚本

示例如下,单节点针对3裸盘测试,8k顺序写,测试时间100s,预热时间(warmup)60s,报告时间间隔1s

参数文件添加messagescan=no可以过滤掉多余的系统日志,测试时不建议加入

[root@host-192-168-177-112 vdbench50406]# cat tt
hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=hd1,system=localhost

sd=sd1,host=hd1,lun=/dev/mapper/mpatha,openflags=o_direct,thread=16
sd=sd2,host=hd1,lun=/dev/mapper/mpathb,openflags=o_direct,thread=16
sd=sd3,host=hd1,lun=/dev/mapper/mpathc,openflags=o_direct,thread=16
wd=wd1,sd=sd*,seekpct=100,rdpct=30,xfersize=8k,skew=100

rd=rd1,wd=wd*,iorate=5000,elapse=100,interval=1,warmup=60

运行结果如下,总共是100+60s:

[root@host-192-168-177-112 vdbench50406]# ./vdbench -f tt
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Vdbench distribution: vdbench50406 Wed July 20 15:49:52 MDT 2016
For documentation, see 'vdbench.pdf'.

11:36:48.020 input argument scanned: '-ftt'
11:36:48.153 Starting slave: /home/tecs/vdbench50406/vdbench SlaveJvm -m 100.100.177.112 -n localhost-10-220728-11.36.47.988 -l hd1-0 -p 5570
11:36:48.500 All slaves are now connected
11:36:50.001 Starting RD=rd1; I/O rate: 5000; elapsed=100 warmup=60; For loops: None

Jul 28, 2022  interval        i/o   MB/sec   bytes   read     resp     read    write     resp     resp queue  cpu%  cpu%
                             rate  1024**2     i/o    pct     time     resp     resp      max   stddev depth sys+u   sys
11:39:27.043       157    5079.00    39.68    8192  29.38    2.079    0.599    2.695   19.519    1.986  10.5   1.0   0.7
11:39:28.043       158    4966.00    38.80    8192  30.35    2.526    0.934    3.220   18.950    2.921  12.6   0.6   0.4
11:39:29.042       159    5051.00    39.46    8192  29.02    2.128    0.617    2.746   16.737    1.988  10.7   0.7   0.5
11:39:30.046       160    4904.00    38.31    8192  29.71    1.979    0.554    2.581   12.318    1.775   9.7   0.8   0.5
11:39:30.056avg_61-160    5001.18    39.07    8192  29.99    2.208    0.657    2.872  103.630    2.531  11.0   0.8   0.6
11:39:30.715 Vdbench execution completed successfully. Output directory: /home/tecs/vdbench50406/output

vdbench会直接打印出在运行期间的所有指标的平均值,比如上面倒数第二行显示avg_61-160表示运行第61秒至第160秒里各参数的平均数

2)文件系统脚本

示例如下,

单节点针对3裸盘测试,8k顺序写,测试时间100s,预热时间(warmup)60s,报告时间间隔1s

参数文件添加messagescan=no可以过滤掉多余的系统日志,最好不要添加

hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=client1,system=localhost

#文件写入目录/mnt,目录层数2,每层文件夹的子文件夹数为10,那总子共文件夹个数就是10^2=100,最后一层每个目录文件数20,一共是100*20=2000个文件数,文件大小1M
fsd=fsd1,anchor=/mnt,depth=2,width=10,files=20,size=1M

#文件操作方式为write,单次写入4k,IO方式连续sequential,文件/目录选择随机random,无缓冲写入,线程为2
fwd=fwd1,fsd=fsd1,operation=write,xfersize=4k,fileio=sequential,fileselect=random,openflags=o_direct,threads=2

#每秒操作数不做限制,yes表示删除测试目录已有文件结构,并且重新创建新的文件结构,测试时间100000s,间隔1s
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=100000,interval=1

测试结果:

io rate:io操作速度,通过rd运行定义参数iorate控制

MB/sec:每秒读写总速度,

bytes i/o:每个读写I/O传输数据量(即单个读写I/O大小),单位为字节B,可以通过wd工作负载定义参数xfersize控制

read pct :读取请求占请求总数的百分比,可以通过wd工作负载定义参数rdpct控制,0就是全写,100是全读

resp time:请求响应时间(读写时延),单位为毫秒ms

read resp:读取请求响应时间,单位为毫秒ms

write resp:写入请求响应时间,单位为毫秒ms

resp max:最大请求响应时间,单位为毫秒ms

resp stddev:响应标准差(越小越好)

queue depth:读写I/0队列深度

cpu% sys+u:内核态空间及用户态空间CPU占用率

cpu% sys:内核态空间CPU占用率 ,处理器利用率

3.2 输出文件

主要查看summary.html和totals.html。

  • totals.html:记录所有数据计算之后的平均数据汇总。一般测试结果从该文件取值,除第一个间隔外所有间隔的加权平均值

        

image.png

  • summary.html:总体结果,记录所有的数据信息,显示每个报告间隔内总体性能情况及工作负载情况,以及除第一个间隔外的所有间隔的加权平均

  • errorlog.html:运行测试启用数据校验时,它可能会包含一些错误信息

  • flatfile.html: vdbench 生成的一种逐列的 ASCII 格式的信息,可以使用parseflat参数解析结果

  • histogram.html:一种包含报告柱状图的响应时间、文本格式的文件

  • logfile.html:包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途

  • parmfile.html:包含测试运行配置参数信息

四、测试说明

4.1 测试总结

    1)线程数(thread)一般设置为客户端CPU线程数总大小 grep 'processor' /proc/cpuinfo | sort -u | wc -l

    2)测试总数据量需要为客户端内存大小两倍

    3)测试读模型时需要清理客户端缓存信息 sync;echo 3 > /proc/sys/vm/drop

    4)后台跑vdbench:nohup ./vdbench -f 执行文件名 -o 存储文件名 &

[root@host-192-168-215-194 vdbench50406]# nohup ./vdbench -f fstt &
[3] 1055887
nohup: ignoring input and appending output to 'nohup.out'

    5)实时查看:tail -f nohup.out   

    6)查看平均值:cat nohup.out | grep avg 

4.2 常见测试场景

    1)1M顺序写,seekpat=0表示顺序寻道,rdpact=0表示全写

messagescan=no
hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=hd1,system=localhost

sd=sd1,host=hd1,lun=/dev/mapper/mpathu,openflags=o_direct,thread=128
wd=wd1,sd=sd*,seekpct=0,rdpct=0,xfersize=1M
rd=rd1,wd=wd*,iorate=max,elapse=100000,interval=1,warmup=6

    2)8K随机读写,seekpat=100表示随机寻道,rdpact=30表示30读,70写

messagescan=no
hd=default,vdbench=/home/tecs/vdbench50406,user=root,shell=ssh
hd=hd1,system=localhost
sd=sd1,host=hd1,lun=/dev/mapper/mpathaa,openflags=o_direct,thread=32
wd=wd1,sd=sd*,seekpct=100,rdpct=30,xfersize=8k
rd=rd1,wd=wd*,iorate=11000,elapse=1000000000,interval=1,warmup=60

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vdbench是一个功能强大的存储性能测试工具,用于评估和优化存储设备的性能。以下是关于Vdbench测试的操作手册: 1. 下载和安装:首先,从官方网站或GitHub下载Vdbench的最新版本,并解压缩到合适的目录。然后,根据操作系统(如Windows、Linux、Solaris等),执行安装程序。 2. 配置测试环境:在进行Vdbench测试之前,需要配置测试环境。这包括指定测试目标设备(如磁盘、存储阵列等),确定测试目标的访问方式(如随机、顺序等),以及设置工作负载的吞吐量和延迟要求等参数。 3. 编写模型文件:模型文件是Vdbench测试的核心。它定义了测试的各种参数和设置,包括设备、访问模式、负载特性等。通过简单的文本编辑器,按照Vdbench提供的语法规则编写模型文件,并保存为以.vdb结尾的文件。 4. 运行测试:在命令行界面中,使用vdbench命令来执行测试。通过指定模型文件和输出目录等参数,启动测试程序。 5. 监控和收集结果:Vdbench测试运行期间,可以使用vdbench命令来监控测试进度和性能指标。除此之外,Vdbench还会生成详细的测试报告和结果文件,以供后续分析和评估。 6. 分析和优化:根据Vdbench测试的结果,可以对存储设备的性能进行分析和优化。通过调整测试参数和配置,比较不同测试方案的结果,发现潜在的瓶颈和问题,并提出相应的改进方法。 总结:Vdbench测试操作手册主要包括下载和安装Vdbench工具、配置测试环境、编写模型文件、运行测试、监控和收集结果,以及分析和优化存储性能。通过使用Vdbench,可以客观地评估存储设备的性能,并提供调优建议,以满足不同应用场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值