请选择 进入手机版 | 继续访问电脑版

vdbench工具简介

2017-6-9 10:37 2008 0
0
摘要: 工具简介 Vdbench是一款IO负载生成工具,可用于测试、基准测试存储产品(HD/SSD等等),这款工具由Java语言编写,并且完全免费。Vdbench使用简单,在装好java环境的情况下很好的兼容了包含但不仅限于windows和linux ...

工具简介
Vdbench是一款IO负载生成工具,可用于测试、基准测试存储产品(HD/SSD等等),这款工具由Java语言编写,并且完全免费。Vdbench使用简单,在装好java环境的情况下很好的兼容了包含但不仅限于windows和linux的多种系统。它被很多数据库测试人员测试数据库系统,而且它还是IOL-UNH实验室兼容性测试(IOL NVMe认证测试)的官方测试工具。当然它还不限于此,当你了解并熟练使用它后,它的很多功能都可以被兼容到你的测试当中去。

Vdbench官方下载网址:

因为vdbench可以生成raw I/O workload和文件系统I/O workload,所以它可以测试存储设备的裸盘性能和文件系统的性能,它还有数据校验的功能,校验能定位到某个具体的block。Vdbench的测试可以拆分成两部分:一部分是你对运行vdbench的参数选择;另一部分是你对生成IO负载的文件配置。
如果你想知道工具的测试环境是否没有问题,或者看一下工具生成的log结构,可以如下运行:
./vdbench –t (raw IO workload) 或者
./vdbench –tf (文件系统IO workload)

运行环境
一般情况下,Linux在安装系统的时候,可以勾选安装JDK环境,当然也可以在系统安装完成后自己配置java环境;但是一般windons系统不会带有java环境,需要自行安装,并且配置环境变量。检查是否具备java环境:
Linux: 在终端运行 java
Windows: 打开cmd窗口, 运行 java

首先,无论是windows还是linux,先下载jdk,然后安装。记住你的安装路径。
然后,进行环境变量的配置。
Windows:1. 右击计算机,选择属性,高级,环境变量;
      2. 在系统变量点击新建 JAVA_HOME,变量值为你安装的jdk路径,然后继续新建CLASSPATH,为%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 
        找到Path然后编辑添加 %JAVA_HOME%\bin; 
Linux:     1. vim /etc/profile
         2. 在底部添加如下几行:
              export JAVA_HOME=
              export PATH=$JAVA_HOME/bin:$PATH
              export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

            3. source /etc/profile

运行vdbench一般在工具所在目录下,使用管理员权限,形式如下:
./vdbench [- fxxx yyy zzz] [-o xxx] [-c x] [-s] [-k] [-e nn] [-I nn] [-w nn ] [-m nn] [-v] [-vr] [-vw][-vt] [-j] [-jr] [-jri] [-jm] [-jn]    [-jro] [-p nnn] [-t] [-l nnn] [ xxx=yyy,….]

Vdbench参数简介
-f  后面指定你的负载生成的配置文件
-o  指定你的log输出位置,默认是当前目录下自动生成的output文件夹,不要担心你指定的路径,会自动生成
-c  清除上次文件系统测试留下来的文件以及文件夹结构
-s  模拟运行你配置的参数文件,但不真正执行它的工作负载
-k  Solaris系统控制台 kstat统计
-e  vdbench应用运行时间,如果指定会覆盖配置文件的时间
-I   结果(Log)输出运行状态的时间间隔,以秒记,如果指定会覆盖参数文件的参数
-w  工作开始或工作线程之间的预热时间,但其并不及计入负载运行时间 (即“-e”参数时间)
-m  最大虚拟机数量,如果指定会覆盖参数文件的同等意义参数
-v/-vr/vw/-vt          指定会激活数据校验功能
-j/-jr/-jri/-jm/-jn/-jro   指定会激活数据校验功能,它与-v的区别在于它不惧怕vdbench或者系统的异常关闭
-p  若指定则会覆盖java socket端口号
-l  指定则会循环执行参数文件的IO负载,如果nnn没有给出则无休止的进行下去

Vdbench工具文件夹结构
Vdbench工具的文件夹一般命名规则为 vdbench+版本号。
aix、linux、hp、mac、windows、solaris 、solxx86文件夹是各种系统的库文件,通过调用它们来对各种系统进行vdbench的运行,这应该是整个工具的心脏部分;
classes文件夹是用来进行应用的各种修正改进的文件夹,也就是打补丁加功能;example[n]文件以及example文件夹是包含了各种简单负载的负载配置文件,是用来对此进行熟悉与学习的最佳路径;
vdbench是linux系统下的运行入口应用程序,vdbench.exe是windows系统下的入口运行应用;
vdbench pdf文档是工具的USER Guide,通过阅读此文档可以对工具的功能有一个直观的了解,是工具应用与学习的最佳老师。

负载配置:
同fio一样,Vdbench也可以自定义负载产生方式,这是工具的精髓所在。Vdbench的IO自定义是在 “-f” 参数后面的文件内,具体文件如何书写可以参考examples内的例子。
配置文件分为几大部分,下面讲解是按顺序进行,它应该同你的配置文件书写顺序相同:
General部分,一般参数设置。这个参数需要先与其他参数写入参数文件,这个参数就不详细解释了(如需了解请详参vdbench pdf用户指导)。里面经常用到的一个参数就是 data_errors=n ,通过定义这个值我们可以在存储设备I/O errors n次后停止工具的运行,重要用途就是在激活数据校验功能的时候,出现n次校验错误,停止工具的运行。
HD部分,定义主机部分。因为工具可以在本地运行,也可以远程运行,可以单jvm,也可以多jvm,当然还有一些其他的参量,那这些参量的设定就在这个部分。(如需了解请详参vdbench pdf用户指导)
RG部分,负载重复。指定此参数可以为您的测试提供便利,需要做的就是提供足够多的SD。
真正的负载产生配置文件的定义是下面的内容
SD/FSD部分,(raw disk or file system)存储定义部分。通过定义这一部分你可以定义你需要测试的的存储设备,包含选定存储设备、具体怎样操作的你的存储设备(比如线程数,openflags…)等等.。
WD部分,负载定义部分。这一部分定义了你对SD/FSD的操作内容,比如读写比例,transfer size大小,I/O比例等等。
RD部分,运行定义部分。这一部分定义了你的负载运行的相关动作。不如运行时间,iorate,还可以覆盖之前产生的某些参数等等。
由于参数太多我就不一一在这里进行分析了,如有兴趣可以去看USER GUIDE,接下来我们看一下IOL兼容性测试的脚本。打开配置文件,内容如下:

data_errors=1

sd=sd1,lun=/dev/nvme0n1,threads=128,openflags=o_direct

wd=wd1,sd=sd1,xfersize=4k,rdpct=50,seekpct=100,iorate=10000,priority=1

rd=random_write_read,wd=wd1,iorate=10000,elapsed=18,interval=1,forxfersize=(4k-2m,d)

要求运行方式: ./vdbench –f <上面的参数文件> -vr

因为测试指定了 –vr ,所以启动了数据校验功能。-vr的含义是写下去之后立马读上来做数据校验(即使你是100%写,也有读操作),所以其不保证数据一定写到了非易失性存储器内,也有可能数据在cache内就被读上来,因为数据校验总需要存储器一部分资源,因此在做数据校验的时候的测试性能并不能代表存储器性能,性能测试最好不要加数据校验功能。

Data_errors = 1 , 当出现IO error或者数据校验error的数量等于1时,vdbench停止运行。
Sd=sd1 ,指定了sd号,因此后面SD/RD的定义可以指定某一个sd或者某些sd的组合。lun=/dev/nvme0n1,指定了存储设备为块设备,设备位置为 /dev/nvme0n1。 threads=128 ,线程数为128。Openflags=o_direct,这里必须指定此参数,因为对SSD裸设备操作必须指定此参数,否则系统不会开放设备供vdbench操作。

Wd=wd1,同样是workload号码,供RD使用。Sd=sd1,指定了workload的操作设备。Xfersize=4k,读写操作块传输大小为4k(bs)。Rdpct为读比例,这里读写各占一半。Seekpct=100 ,100%随机读写。Iorate=10000指的是io速率是10000。priority=1,这里指的是负载的使用优先级为1,一般而言,I/O rate是由rd、ioarte、skew参数共同作用决定的,但是如果你想二外的加一些修正的I/O 速率,可以指定iorate,然后在后面还必须跟上这个priority参数才能生效。Iorate的应用情况是这样解释的,它可以模拟当这种情况:你播放存储设备上的影像时,如果我加了一些视频编辑的工作,那对存储设备的性能影响是什么。一般而言vdbench io是按顺序操作硬盘的,设备以及负载本身对于负载的顺序是没有优先级的,而现在有了这个参数vdbench内部有了一个队列,所以它现在允许负载有优先级的去操作设备,数字越小优先级越高,优先级越高的负载有限操作设备。

Rd=xxx,指定了运行的名称(只是一个名字)。Wd=指定了它所使用的负载。后面的iorate同WD,一般情况下它会覆盖上面已经制定的参数变量。Elapsed指定了运行时间,interval表示每1s输出1次运行时候的状态到屏幕以及log。forxfersize=(4k-2m,d)指的是xfersize从4k每次double(x2)一直到2m(4k,8k,16k…2M),他也同样恢复在WD定义的xfersize 。注意,这里的每次xfersize都会运行18s,直到把所有xfersize循环完。

Vdbench Log结构
Vdbench的log文件有很多,我在这里也就不一一介绍了,直说几个常分析的log。
Errorlog.html 这是eroorlog文件,记录了vdbench运行的error信息。包括IO error和数据校验都有体现。
Summary.html 这个是整个log文件结构导引,链接到其他各个log文件。如果出现数据校验错误也可以在此查看出错的是哪个block,以及是哪个或那些数据输了错。
Parafile.html 这个是你本次运行是vdbench scan进入的参数,也就你的配置文件信息,以及运行参数。


鲜花

握手

雷人

路过

鸡蛋
分享到

最新评论

    gaozh

    管理员
    这个人很懒什么都没写!
    • 3

    • 文章
    • 0

    • 收听
    • 0

    • 听众

    热门文章

    SSD社区微信公众号

    SSD社区微信公众号

    扫我关注
    返回顶部