vdbench基础使用指南

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

[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]# 

上传后解压及使用

[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测试配置文件

// 屏蔽不必要的回显
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

文件系统配置文件

// 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

配置解释

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、create、delete、open、close、read、write、getattr 和 setattr。选择要执行的单个文件操作。
* rdpct= (仅)读取和写入操作的百分比。
* threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。
运行定义:
* fwd= 要使用的文件系统工作负载定义的 ID。
* fwdrate= 每秒执行的文件系统操作数量。
* format= yes / no / only / restart / clean / directories。在开始运行之前要执行的操作。
* operations= 覆盖 fwd 操作。选项相同。

重删压缩

vdbench基础使用指南

dedupunit:保持业务IO是unit的倍数即可,常规下保持一致压缩率会更好
dedupflipflop:默认关闭,修改为yes时,会严重影响定长重删的重删率.(触发数据翻转,让本应该重复的数据,变的不重复)。相似重删,影响不大

#compratio=2
dedupratio=2
dedupunit=64K

fsd=fsd1,anchor=/mnt/ded,depth=1,width=1,files=100,size=100m,openflags=o_direct
fwd=fwd1,fsd=fsd*,operation=write,xfersize=64k,fileio=random,fileselect=random,threads=8
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,warmup=0,elapsed=180,interval=1

多配置文件自动执行脚本

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守护进程

./vdbench rsh

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

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

注意点

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

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互信

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

3、多主机时间同步

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

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.

设置方法:

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不可同时使用

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

出错排查思路:

运行时添加-o参数输出
运行出错停止后查看报错输出:
[root@rhel7 ~]# vim qq/hd1-0.stdout.html
// qq是运行时指定的输出目录
// hd1代表主机
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
AnsibleOps工具

Ansible-playbook详解

2025-4-1 11:58:04

LinuxOps工具

vdbench在ARM服务器上出现共享库aarch64.so问题

2025-4-3 11:45:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
Index