vdbench基础使用指南

免密互信(涉及多台主机)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@host01 vdbench]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FCvtOQWsh5E921PDIDYpJHT4hk11+zT9ZpvieEKpy8Y root@host01
The key's randomart image is:
+---[RSA 2048]----+
| .ooo=B.oo |
| .o=o=B .+. |
| =.=++o.o.. |
| . *+oooo . . |
| . .S .o +|
| . o oo|
| . o . o |
| .E .o.. |
| .o..o. |
+----[SHA256]-----+
[root@host01 vdbench]# ssh-copy-id 10.1.0.20
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.1.0.20 (10.1.0.20)' can't be established.
ECDSA key fingerprint is SHA256:aH0MCMlqXwgmg7lYSjk5lf9wDhDlDPfKoewAQN5xc1Q.
ECDSA key fingerprint is MD5:7c:57:f2:17:0b:e4:b2:cd:f2:1f:c1:ac:86:25:b1:0f.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.1.0.20's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '10.1.0.20'"
and check to make sure that only the key(s) you wanted were added.

[root@host01 vdbench]#

上传后解压及使用

1
2
3
4
5
6
7
8
[root@host01 ~]# unzip -q vdbench.zip 
[root@host01 ~]# cd vdbench/
[root@host01 vdbench]# ls
01_8k_read70 build_sds.txt example1 example3 example5 example7 hp mac solaris swatcharts.txt vdbench.bat vdbench.pdf
aix classes example2 example4 example6 examples linux readme.txt solx86 vdbench vdbench.jar windows
[root@host01 vdbench]# chmod +x vdbench
[root@host01 vdbench]# ./vdbench -t // 本地测试
[root@host01 vdbench]# ./vdbench -f 配置文件名 -o 输出目录

LUN测试配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 屏蔽不必要的回显
messagescan=no
// 指定多个主机,使用多个主机时用相同的用户实现免密链接是前提
// hd是统配符,如果不采用hd*则需要填写对应主机名
hd=default,vdbench=/vdbench/vdbench50406,user=root,shell=ssh
hd=hd1,system=192.168.234.42
hd=hd2,system=192.168.234.43
hd=hd3,system=192.168.234.44

sd=default,threads=36,openflags=o_direct
// 指定多个磁盘
sd=sd1,hd=hd1,lun=/dev/sdb
sd=sd2,hd=hd1,lun=/dev/sdc
sd=sd3,hd=hd2,lun=/dev/sdb
sd=sd4,hd=hd2,lun=/dev/sdc
sd=sd5,hd=hd3,lun=/dev/sdb
sd=sd6,hd=hd3,lun=/dev/sdc
// 工作负载定义
wd=wd1,sd=sd*,xfersize=8k,rdpct=70,seekpct=100
// 运行定义
rd=run1,wd=wd1,iorate=max,elapsed=600,interval=1,warmup=30

文件系统配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 4K_seq_100%read
messagescan=no
// 指定多个主机,使用多个主机时用相同的用户实现免密链接是前提
// hd是统配符,如果不采用hd*则需要填写对应主机名
hd=default,vdbench=/temp/vdbench50406/,user=root,shell=ssh
hd=host01,system=10.8.12.209
hd=host02,system=10.8.12.210
hd=host03,system=10.8.12.211
hd=host04,system=10.8.12.212
// 指定多个文件系统
fsd=default,depth=2,width=50,size=4k,files=1000,openflags=o_direct
fsd=fsd1,anchor=/data01
fsd=fsd2,anchor=/data02
// 工作负载定义
fwd=default,xfersize=4k,fileio=sequential,fileselect=sequential,threads=2,openflags=o_direct
fwd=fwd1,fsd=fsd1,host=host01
fwd=fwd2,fsd=fsd2,host=host01
fwd=fwd3,fsd=fsd3,host=host02
// 运行定义
rd=rd1,fwd=fwd*,fwdrate=max,operations=(read,write),rdpct=100,format=yes,elapsed=300,interval=1


// 8192K_random_70%read_30%write
messagescan=no

hd=default,vdbench=/temp/vdbench50406/,user=root,shell=ssh
hd=host01,system=10.8.12.209
hd=host02,system=10.8.12.210

fsd=default,depth=2,width=50,size=4k,files=1000,openflags=o_direct
fsd=fsd1,anchor=/data01
fsd=fsd2,anchor=/data02

fwd=default,xfersize=8192k,fileio=random,fileselect=random,threads=2,openflags=o_direct
fwd=fwd1,fsd=fsd1,host=host01
fwd=fwd2,fsd=fsd2,host=host01

rd=rd1,fwd=fwd*,fwdrate=max,operations=(read,write),rdpct=70,format=restart,elapsed=300,interval=1

配置解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
LUN
• wd= 标识工作负载的名称。
• sd= 要使用的存储定义的 ID。
• host= 要运行此工作负载的主机的 ID。默认设置为 localhost。
• rdpct= 读取请求占请求总数的百分比。
• rhpct= 读取命中百分比。默认设置为 0
• whpct= 写入命中百分比。默认设置为 0
• xfersize= 要传输的数据大小。默认设置为 4k。
• seekpct= 随机寻道的百分比。可为随机值。
• openflags= 用于打开一个 lun 或一个文件的 flag_list。
• iorate= 此工作负载的固定 I/O 速率。
运行定义:
• rd= 标识运行的名称。
• wd= 用于此运行的工作负载的 ID。
• iorate= (#,#,...) 一个或多个 I/O 速率。
max:不受控制的工作负载。
• elapsed= time:以秒为单位的运行持续时间。默认设置为 30
• warmup= time:加热期,最终会被忽略。
• distribution= I/O 请求的分布:指数、统一或确定性。
• pause= 在下一次运行之前休眠的时间,以秒为单位。
• openflags= 用于打开一个 lun 或一个文件的 flag_list、o_direct表示直接下盘、o_sync表示写到内存再下盘

文件系统:
• fsd= 标识文件系统定义的名称
• anchor= 将在其中创建目录结构的目录
• width= 要在定位符下创建的目录数
• depth= 要在定位符下创建的级别数
files= 要在最低级别创建的文件数
• sizes= (size,size,...) 将创建的文件大小
• distribution= bottom(如果希望仅在最低级别创建文件)和 all(如果希望在所有目录中创建文件)
• openflags= 用于打开一个文件系统 (Solaris) 的 flag_list
工作负载定义:
• fwd= 标识文件系统工作负载定义的名称。
• fsd= 要使用的文件系统定义的 ID。
• host= 要用于此工作负载的主机的 ID。
• fileio= random(随机) 或 sequential(顺序),表示文件 I/O 将执行的方式。
• fileselect= random 或 sequential,标识选择文件或目录的方式。
• xfersizes= 数据传输(读取和写入操作)处理的数据大小。
• operation= mkdir、rmdir、createdeleteopenclosereadwrite、getattr 和 setattr。选择要执行的单个文件操作。
• rdpct= (仅)读取和写入操作的百分比。
• threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。
运行定义:
• fwd= 要使用的文件系统工作负载定义的 ID。
• fwdrate= 每秒执行的文件系统操作数量。
format= yes / no / only / restart / clean / directories。在开始运行之前要执行的操作。
• operations= 覆盖 fwd 操作。选项相同。

多配置文件自动执行脚本

1
2
3
4
5
6
7
8
9
array_name=(test1 test2 test3)
for ((i=0; i<3; i++));
do
csh /vdbench/vdbench -f /vdbench/${array_name[$i]} -o /vdbench/${array_name[$i]}
sleep 30
done

## array_name:存放配置文件名称
## -o:代表输出文件,可采用一个配置文件用一个相同名称目录保存

windows联机测试

1、所有slave主机运行vdbench本身rsh守护进程

1
./vdbench rsh

此命令是用于windows系统多主机联机跑vdbench时使用,因为windows操作系统不支持ssh,因此,vdbench提供了rsh的通信方式。在目标主机上执行此工具后,vdbench将会启动一个java socket用于vdbench slave与master之间通信

2、master主机运行测试参数文件即可

注意点

1、防火墙放通或关闭(推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
RHEL6.X:
[root@rhel6 ~]# service iptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
[root@rhel6 ~]# setenforce 0

RHEL7.X:
[root@rhel7 ~]# systemctl stop firewalld
[root@rhel7 ~]# setenforce 0

SUSE11:
suse11:~ # service SuSEfirewall2_setup stop
suse11:~ # service SuSEfirewall2_init stop

SUSE12:
suse12:~ # systemctl stop SuSEfirewall2.service

Ubuntu16:
[root@ubuntu01 ~]# ufw disable

2、多主机ssh互信

1
2
3
最简单直接的方法:
[root@oracle01 ~]# ssh-keygen
[root@oracle01 ~]# ssh-copy-id 10.1.0.20

3、多主机时间同步

如果时间不同步,启动时不会报以下错误:

1
2
10:40:06.974 Clock synchronization warning: slave hd2-0 is 192 seconds out of sync. This can lead to heartbeat issues.
10:40:07.001 Clock synchronization warning: slave hd3-0 is 58 seconds out of sync. This can lead to heartbeat issues.

设置方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RHEL6.X
方法一:
[root@rhel6 ~]# date --set="05/31/16 18:16:00"

方法二:
// 设置硬件时钟
[root@rhel6 ~]# hwclock --set --date "21 Sep 2019 16:02:25"
//同步到系统时间
[root@rhel6 ~]# hwclock --hctosys

RHEL7.X
[root@rhel7 ~]# timedatectl set-time "2021-09-11 10:00:00"

SUSE:
suse11:~ # date --set="05/31/16 18:16:00"

5、依赖环境检查

​ java版本(vdbench目录下readme中有版本限制说明,vdbench.pdf中有详细信息)

​ csh

4、503版本文件系统测试fileio=sequential时和rdpct不可同时使用

1
2
hitarea参数越接近于IO大小,性能越好
rhpct命中百分比越大性能越好

出错排查思路:

1
2
3
4
5
运行时添加-o参数输出
运行出错停止后查看报错输出:
[root@rhel7 ~]# vim qq/hd1-0.stdout.html
// qq是运行时指定的输出目录
// hd1代表主机

vdbench基础使用指南
https://www.zhoumx.net/vdbench基础使用指南.html
作者
阿星
发布于
2022年9月7日
许可协议