2019-07-01 21:52:01
来 源
中存储
存储基础知识
Vdbench是测试磁盘I / O工作负载的命令行实用程序,用于验证存储性能和存储数据完整性,常用语存储性能基准测试等,附下载及简介。

一、Vdbench存储性能测试工具简介

Vdbench是一个专门用于帮助工程师和客户生成磁盘I / O工作负载的命令行实用程序,用于验证存储性能和存储数据完整性。Vdbench执行参数也可以通过输入文本文件指定。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。

可以使用Vdbench测试磁盘和文件系统的读写性能。

Vdbench中常用的一些名词解释:

HD    主机定义

SD    存储定义 

WD   工作负载定义

RD    运行定义

FSD   文件系统存储定义

FWD  文件工作负载定义

二、Vdbench的安装和配置

1、linux下配置Vdbench

(1)下载Vdbench

下载地址:http://www.oracle.com/technetwork/cn/server-storage/Vdbench-downloads-1901681-zhs.html ,下载之后解压;

(2)然后安装java(Vdbench的运行依赖于java)

apt-get update

apt-get install java

java -version

(3)安装csh或者将csh从别的安装好了的系统拷贝到/bin目录下,Vdbench在linux上的运行需要csh来支撑。

     CSH,是一种计算机中的linux、unix命令,用来调用 C shell。

     C shell 是一个交互式命令解释器和一种命令编程语言,采用的语法类似于 C 编程语言。shell 是交互式地从终端键盘或者是从一个文件来执行命令的。这个 csh 命令调用了 C shell。当调用 csh 命令时就会执行,这是通过查找根目录和执行命令从 .cshrc 文件(用来存储用户化的用户信息)中,执行的条件是命令存在。如果 csh 命令作为一个登录 shell 运行,就会从 .cshrc 和 .login 文件中执行命令。

安装:apt-get install csh

查看:ls /bin/ |grep csh

(4)进入Vdbench相应目录下./Vdbench -t 来测试一下Vdbench的可用性,如果正常,会在目录下自动生成一个output目录。

root@node1:/home/Vdbench/Vdbench50406# ./Vdbench -t

显示如下信息:

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'.

00:06:57.521 input argument scanned: '-f/tmp/parmfile'

00:06:57.572 Starting slave: /home/Vdbench/Vdbench50406/Vdbench SlaveJvm -m localhost -n localhost-10-180813-00.06.57.396 -l localhost-0 -p 5570   

00:06:58.012 All slaves are now connected

00:06:59.001 Starting RD=rd1; I/O rate: 100; elapsed=5; For loops: None

Aug 13, 2018  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

00:07:00.046         1      49.00     0.05    1024  46.94    2.487    1.616    3.257   45.206    9.831   0.5  15.4   4.4

00:07:01.043         2     112.00     0.11    1024  52.68    3.808    2.381    5.397  103.290   17.076   0.1   4.6   0.5

00:07:02.044         3      92.00     0.09    1024  51.09   11.979    3.486   20.849  172.867   40.460   1.1   1.0   0.5

00:07:03.043         4      98.00     0.10    1024  53.06    1.574    1.413    1.757   43.221    7.044   0.2   3.0   0.0

00:07:04.053         5     106.00     0.10    1024  55.66    1.795    1.340    2.367   51.104    8.163   0.2   2.5   0.0

00:07:04.077   avg_2-5      91.40     0.09    1024  52.52    4.366    2.059    6.917  172.867   21.192   0.4   6.9   1.6

00:07:05.275 Vdbench execution completed successfully. Output directory: /home/Vdbench/Vdbench50406/output 

如果报错,则需修改Vdbench的权限:

root@node03:/home/Vdbench/Vdbench50406# chmod 777 Vdbench

2、Windows下配置Vdbench;

(1)解压Vdbench包(Vdbench的linux版本的包和windows是同一个),解压之后,下载32位的java,安装java,配置windows上java的环境变量;(注意:目前Vdbench在windows支持32位的java)

(2)打开dos窗口,切换到Vdbench目录,执行命令 Vdbench -t来测试Vdbench的可用性

三、Vdbench的使用

Vdbench的使用按照我的理解,就是先编写一个脚本,然后在Vdbench的安装目录下直接运行就好了。

1、脚本的编写

这部分可以参考解压后的examples文件夹下的脚本,比如create_files;也可以参考output目录下的parmfile.html

root@node1:/home/Vdbench/Vdbench50406/examples/filesys# cat create_files 

*

略过

*

fsd=fsd1,anchor=/dir,depth=1,width=1,files=10000,size=8k

fwd=fwd1,fsd=fsd1,operation=read,threads=16

rd=rd1,fwd=fwd*,fwdrate=100,format=yes,elapsed=5,interval=1

注:(1)anchor=/dir 这个需要把路径换成你ceph挂载的路径,我的是anchor=/home/baymax/cephfs 

2、Vdbench文件系统测试

  对于一个文件系统,配置以下参数:

(1)HD:主机定义。与虚拟块设备相同。

(2)FSD:文件系统定义

fsd= 标识文件系统定义的名称

anchor= 将在其中创建目录结构的目录

width= 要在定位符下创建的目录数

depth= 要在定位符下创建的级别数

files= 要在最低级别创建的文件数

sizes= (size,size,...) 将创建的文件大小

distribution= bottom(如果希望仅在最低级别创建文件)和 all(如果希望在所有目录中创建文件)

openflags= 用于打开一个文件系统 (Solaris) 的 flag_list

(3)FWD:文件系统工作负载定义

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

fsd= 要使用的文件系统定义的 ID。

host= 要用于此工作负载的主机的 ID。

fileio= random 或 sequential,表示文件 I/O 将执行的方式。

fileselect= random 或 sequential,标识选择文件或目录的方式。

xfersizes= 数据传输(读取和写入操作)处理的数据大小。

operation= mkdir、rmdir、create、delete、open、close、read、write、getattr 和 setattr。选择要执行的单个文件操作。

rdpct= (仅)读取和写入操作的百分比。

threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。

(4)RD:运行定义

fwd= 要使用的文件系统工作负载定义的 ID。

fwdrate= 每秒执行的文件系统操作数量。

format= yes / no / only / restart / clean / directories。在开始运行之前要执行的操作。

operations= 覆盖 fwd 操作。选项相同。

Vdbench文件系统测试Example:

fsd=fsd1,anchor=/mnt/cephfs02,depth=3,width=10,files=20,size(512,50,4k,50),openflags=o-direct

fwd=fwd1,fsd=fsd1,operation=write,xfersize=(4k,15,8k,35,1M,50),fileio=random,fileselect=random,threads=32

rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=20,interval=1

3、运行脚本

root@node1:/home/Vdbench/Vdbench50406# ./Vdbench -f examples/filesys/create_files -jn

   其中-jn是为了做数据校验,目前还不太懂。

4、输出结果

会回写输出一大堆东西,如果没有出现错误,最后会出现:

 Vdbench execution completed successfully. Output directory: /home/Vdbench/Vdbench50406/output

每次运行后,Vdbench 会创建一个包含以下文件的output文件夹:

(1)errorlog.html——当为测试启用了数据验证(-jn)时,它可包含一些数据块中的错误的相关信息:

无效的密钥读取

无效的 lba 读取(一个扇区的逻辑字节地址)

无效的 SD 或 FSD 名称读取

数据损坏,即使在使用错误的 lba 或密钥时

数据损坏

坏扇区

(2)flatfile.html——包含 Vdbench 生成的一种逐列的 ASCII 格式的信息。

(3)histogram.html——一种包含报告柱状图的响应时间、文本格式的文件。

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

(5)parmfile.html——显示已包含用于测试的每项内容的最终结果

(6)resourceN-M.html、resourceN.html、resourceN.var_adm_msgs.html

     摘要报告、stdout/stderr 报告、主机 N 的摘要报告

最后 “nn” 行文件 /var/adm/messages 和 /var/adm/messages。每个 M 个 JVM/Slave 的目标主机 N 和主机 N 上为 0。

(7)sdN.histogram.html、sdN.html——每个 N 存储定义的柱状图和存储定义 “N” 报告。

(8)summary.html——主要报告文件,显示为在每个报告间隔的每次运行生成的总工作负载,以及除第一个间隔外的所有间隔的加权平均值。

interval:报告间隔序号

I/O rate:每秒观察到的平均 I/O 速率

MB sec:传输的数据的平均 MB 数

bytes I/O:平均数据传输大小

read pct:平均读取百分比

resp time:以读/写请求持续时间度量的平均响应时间。所有 Vdbench 时间都以毫秒为单位。

resp max:在此间隔中观察到的最大响应时间。最后一行包含最大值总数。

resp stddev:响应时间的标准偏差

cpu% sys+usr:处理器繁忙 = 100(系统 + 用户时间)(Solaris、Windows、Linux)

cpu% sys:处理器利用率:系统时间

(9)swat_mon.txt,swat_mon_total.txt

Vdbench 与 Sun StorageTekTM Workload Analysis Tool (Swat) Trace Facility (STF) 相结合,支持重放使用 Swat 创建的一个轨迹的 I/O 工作负载。

Swat 使用 Create Replay File 选项创建和处理的轨迹文件会创建文件 flatfile.bin(flatfile.bin.gz 用于 Vdbench403 和更高版本),其中包含 Swat 所识别的每个 I/O 操作的一条记录。

这些文件包含一个格式化的报告,可将该报告导入 Swat Performance Monitor (SPM) 中来创建性能图表。 

四、Vdbench裸盘测试

1、对于一个块设备,配置以下参数:

(1)HD:主机定义

•    如果您希望展示当前主机,则设置 hd= localhost。如果希望指定一个远程主机,hd= label。

•    system= IP 地址或网络名称。

Example:

 hd=localhost,shell=ssh,Vdbench=/home/Vdbench/Vdbench50406,user=root

 hd=hd1,system=10.147.0.15

 hd=hd2,system=10.147.37.173

注意:Vdbench=dir ,这里的目录是指所有主机上的目录,这就表示,所有主机上的Vdbench目录都要一样,且对应的配置要放在Vdbench下面;

(2)SD:存储定义

•    sd= 标识存储的名称。

•    host= 存储所在的主机的 ID。

•    lun= 原始磁盘、磁带或文件系统的名称。Vdbench 也可为您创建一个磁盘。

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

•    hitarea= 调整读取命中百分比的大小。默认为 1m。

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

Example:

  sd=default,threads=32,openflags=o_direct,size=340G

  sd=sd1,hd=hd1,lun=/dev/sdb

  sd=sd2,hd=hd1,lun=/dev/sdc

  sd=sd3,hd=hd1,lun=/dev/sdd

  sd=sd4,hd=hd1,lun=/dev/sde

  sd=sd5,hd=hd1,lun=/dev/sdf

  sd=sd6,hd=hd1,lun=/dev/sdg

  sd=sd7,hd=hd1,lun=/dev/sdh

  sd=sd8,hd=hd1,lun=/dev/sdi

  sd=sd1,hd=hd2,lun=/dev/sdb

  sd=sd2,hd=hd2,lun=/dev/sdc

  sd=sd3,hd=hd2,lun=/dev/sdd

  sd=sd4,hd=hd2,lun=/dev/sde

  sd=sd5,hd=hd2,lun=/dev/sdf

  sd=sd6,hd=hd2,lun=/dev/sdg

  sd=sd7,hd=hd2,lun=/dev/sdh

  sd=sd8,hd=hd2,lun=/dev/sdi

  此配置区分了主机1和主机2,第一行是针对以下所有sd的通用配置;

(3)WD:工作负载定义

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

•    sd= 要使用的存储定义的 ID。

•    host= 要运行此工作负载的主机的 ID。默认设置为 localhost。

•    rdpct= 读取请求占请求总数的百分比。

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

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

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

•    seekpct= 随机寻道的百分比。可为随机值。

•    openflags= 用于打开一个 lun 或一个文件的 flag_list。

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

Example:

wd=wd1,sd=sd*,xfersize=4k,rdpct=0,seekpct=100

此配置,配置了块的大小,读的比例和随机比例;

(4)RD:运行定义

•    rd= 标识运行的名称。

•    wd= 用于此运行的工作负载的 ID。

•    iorate= (#,#,...) 一个或多个 I/O 速率。(这里可以控制运行的iops,如果不控制就设置成max)

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

•    warmup= time:加热期,最终会被忽略。

•    distribution= I/O 请求的分布:指数、统一或确定性。

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

•    openflags= 用于打开一个 lun 或一个文件的 flag_list。

Example:

rd=run1,wd=wd1,iorate=max,el=100000,in=1,warmup=600

此配置,配置了iorate(iops),运行时间,数据打印频率

Vdbench裸盘测试examples:

hd=localhost,shell=ssh,Vdbench=/home/Vdbench/Vdbench50406,user=root

hd=hd1,system=200.200.213.30

sd=default,threads=16,openflags=o_direct,size=30G

sd=sd1,hd=hd1,lun=/dev/sdb

sd=sd2,hd=hd1,lun=/dev/sdc

sd=sd3,hd=hd1,lun=/dev/sdb

sd=sd4,hd=hd1,lun=/dev/sdc

sd=sd5,hd=hd1,lun=/dev/sdb

sd=sd6,hd=hd1,lun=/dev/sdc

sd=sd7,hd=hd1,lun=/dev/sdb

sd=sd8,hd=hd1,lun=/dev/sdc

wd=wd1,sd=sd*,xfersize=4k,rdpct=0,seekpct=100

rd=run1,wd=wd1,iorate=max,el=100000,in=1,warmup=600

输出结果(部分):

Aug 13, 2018  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

07:37:56.397         1      85.00     0.33    4096   0.00 2968.303    0.000 2968.303 6136.625 1844.150 308.5  83.4  23.9

07:37:56.459         2      83.00     0.32    4096   0.00 3184.730    0.000 3184.730 7861.568 1795.753 348.0  95.5  68.2

07:37:56.478         3      23.00     0.09    4096   0.00 3441.907    0.000 3441.907 5995.742 1011.997  61.2  71.4  42.9

07:37:56.493         4       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000   0.7   NaN   NaN

07:37:56.647         5       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000   0.8  83.3  33.3

07:38:01.132         6       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000  40.8  85.7  33.3

07:38:01.162         7      44.00     0.17    4096   0.00 4070.731    0.000 4070.731 10818.509 2883.771 226.7  66.7  66.7

07:38:01.181         8       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000   1.4  88.9  11.1

07:38:01.201         9      26.00     0.10    4096   0.00 4508.067    0.000 4508.067 15048.031 2778.336  27.7  91.7  55.6

07:38:01.630        10       8.00     0.03    4096   0.00 1806.932    0.000 1806.932 4328.737 1174.638  48.3  90.0  86.7

07:38:01.760 Detailed reporting is running behind; reporting of intervals 11-27 has been skipped.

07:38:54.054        28       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000  15.9   NaN   NaN

07:39:01.272        29      17.00     0.07    4096   0.00 4937.274    0.000 4937.274 7454.897 1474.074  39.4   NaN   NaN

07:39:03.858 Detailed reporting is running behind; reporting of intervals 30-42 has been skipped.

07:39:59.480        89      84.00     0.33    4096   0.00 7764.630    0.000 7764.630 14029.705 2984.238 654.5  75.9  48.1

07:39:59.561        90       0.00     0.00       0   0.00    0.000    0.000    0.000    0.000    0.000   0.6   NaN   NaN

--------------------- 

作者:岳小岳 

来源:CSDN 

原文:https://blog.csdn.net/u012114090/article/details/81626430 

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。