Vdbench工具测试记录
文件系统通用参数说明
HD
- Host Definition的简称,即主机定义。只有在多台主机联机测试的场合,或者需要对单台主机重新设置JVM数目的时候才有设置的必要。
hd=default
hd=host_label
system=IP/hostname
vdbench=PATH
shell=rsh|ssh|vdbench
FSD
- Filesystem Storage Definition的简称,即文件系统存储定义。这类参数是必须设置的,主要包含文件系统的挂载目录,目录结构,文件个数,文件大小等等。
fsd=name
fsd=default
anchor=/dir/
shared=yes/no
width=nn
depth=nn
files=nn
sizes=(nn,nn,……)
openflags=(flag,..) "仅在Solaris下适用,可以传递标识给文件系统的open请求。目前支持的标识有:O_DSYNC,O_RSYNC,O_SYNC。
total_size=nnn #创建新文件时,如果占用的空间达到了该参数的设定值,就要及时停止文件创建。
"workingsetsize=nn
(wss=nn)" 一般来说,depth,width,files和sizes等参数共同决定了文件系统的文件个数和大小。total_size会用来确定实际使用的文件系统空间,而workingsetsize参数可以设置这些文件中会用于实际测试的工作文件子集的大小。举个例子,如果总文件占用了200g的空间,文件系统缓存的大小是32g,那么设置workingsetsize=32g就会保证在测试的热身阶段之后,工作子集中的文件都驻留在文件系统缓存中。
count=(nn,mm)
shared= 可选值为yes或no,默认值为no,一般只有在多主机联机测试时指定 vdbench不允许不同的slave之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了shared=yes,那么不同的slave可以平分一个目录下所有的文件来进行访问,相当于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写 --当多主机联机测试时,写入的根目录anchor为同一个路径时,需要指定参数值为yes
FWD
- Filesystem Workload Definition的简称,即文件系统工作负载定义。这类参数是必须设置的,主要是描述需要对哪些fsd执行哪种文件访问方式和哪种I/O负载类型的下发
fwd=name
fwd=default
fwd=format
fsd=(xx,…)
fileio=random/sequential
rdpct=nn
fileselect=random/sequential
xfersizes=nn
operation=xxxx
threads=nn
skew=nn
stopafter=nn% 和 stopafter=nn
RD
- Run Definition的简称,即运行定义。这类参数是必须设置的,主要是描述需要执行哪些fwd,需要产生多少操作数等等
fwd=(xx,yy,..)
fwdrate=nn
fwdrate=100
fwdrate=(100,200,…)
fwdrate=(100-1000,100)
fwdrate=curve
fwdrate=max
format=xxxx
operations=xx
foroperations=xx
foroperations=(read,write,delete,rmdir)
fordepth=xx "该参数覆盖所有与depth有关的参数,允许以各种方式自动遍历文件系统的各种目录深度fordepth=5表示只运行depth=5的情况;fordepth=(5-10,1)表示执行一次运行,目录深度从5遍历到10,增量为1;forwidth=xx 该参数覆盖所有与width有关的参数,允许以各种方式自动遍历文件系统的各种目录宽度;forwidth=5表示只运行depth=5的情况;forwidth=(5-10,1)表示执行一次运行,目录宽度从5遍历到10,增量为1";
forfiles=xx "该参数覆盖所有与files有关的参数,允许以各种方式自动遍历文件系统的各种文件数目forfiles=5表示只运行files=5的情况;forfiles=(5-10,1)表示执行一次运行,文件数目从5遍历到10,增量为1";
forsizes=xx "该参数覆盖所有与sizes有关的参数,允许以各种方式自动遍历文件系统的各种大小的文件;forsizes=5k表示只运行sizes=5的情况;forsizes=(5k-10k,1k)表示执行一次运行,文件大小从5KB遍历到10KB,增量为1KB";
fortotal=xx "该参数覆盖所有与files有关的参数,允许创建文件来填充总的文件空间。fortotal=(10g,20g)表示执行一次运行,首先文件空间为10g,然后文件空间为20g,确保总的文件空间是一个递增的过程。"
forwss=xx "该参数覆盖所有与wss有关的参数,允许以各种方式自动遍历文件系统的各种大小的文件工作子集;forwss=16g表示只运行wss=16g的情况
forsizes=(16g,32g)表示执行一次wss=16g的运行,再执行一次wss=32g的运行。
maxdata= 读写数据大小,通常情况下,当运行elapsed时间后测试结束;当同时指定elapsed和maxdata参数值时,以最快运行完的参数为准(即maxdata测试时间小于elapsed时,程序写完elapsed数据量后结束) --当参数值为100以下时,表示读写数据量为总存储定义大小的倍数(如maxdata=2,2个存储定义(每个存储定义数据量为100G),则实际读写数据大小为400G) --当参数值为100以上时,表示数据量为实际读写数据量(可以使用单位M、G、T等)
单机测试-文件系统
范例脚本
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=4K,openflags=o_direct
fwd=fwd1,fsd=fsd*,operation=write,xfersize=4K,fileio=random,fileselect=random,threads=32
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=600,interval=1
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=4K,openflags=o_direct
fwd=fwd1,fsd=fsd*,operation=read,xfersize=4K,fileio=random,fileselect=random,threads=32
rd=rd1,fwd=fwd1,fwdrate=max,format=no,elapsed=600,interval=1
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=4K,openflags=o_direct
fwd=fwd1,fsd=fsd*,rdpct=70,xfersize=4K,fileio=random,fileselect=random,threads=32
rd=rd1,fwd=fwd1,fwdrate=max,format=restart,elapsed=600,interval=1
测试注意点
1.在负载参数文件中,必须要按照FSD->FWD->RD的顺序进行参数设置经常使用到的参数;
2.测试时需注意预埋文件即先执行写脚本format=yes,读脚本使用format=restart或者no,避免无意义的时间消耗;
3.批量执行fsd时可以使用fsd*或(fdsXX-fsdXX)的方式;
4.openfilags=o_direct可以绕过文件缓存,测试出的性能更加贴近真实读写;
5.在执行sh vdbench -f xxx.sh -jn时,jn参数是对文件校验,会有read值和open值;
6.在执行vdbench时最终输出的summary文件会被上次的数据覆盖,最好是添加-o参数指定存放位置;
7.如果有多个场景测试且目录容量足够的情况下,请先执行预埋脚本,先预埋所有场景数据在将后续写相关脚本的format改为restart,读相关脚本format改为no;这样可以提升测试效率
联机测试-文件系统
ssh互信说明与手动执行
1.只需要将主控端的公钥发送至从端即可
2.从端需全部挂载对应的目录
3.放置vdbench的目录路径需一致
ssh-keygen -f /root/.ssh/id_rsa -t rsa -P ''
ssh-copy-id -i /root/.ssh/id_rsa.pub <host1_name>
ssh-copy-id -i /root/.ssh/id_rsa.pub <host2_name>
ssh互信脚本脚本
#!/bin/bash
PASS="redhat"
END="160"
NET_name="eth0"
IP="$(ip a s "$NET_name" | awk -F'[ /]+' 'NR==3{print $3}')"
Segment=${IP%.*}.
rm -rf /root/.ssh/id_rsa
[ -e /root/SCANIP.log ] && echo "" > /root/SCANIP.log || touch /root/SCANIP.log
for((i=140;i<="$END";i++));do
ping -c1 -w1 "$Segment""$i" &>/dev/null && echo "$Segment""$i" >/root/SCANIP.log &
done
#删除空行
sed -Ei "/^$/d" /root/SCANIP.log
#生成ssh_key的rsa文件
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
while read -a line ;do
sshpass -p "$PASS" ssh-copy-id -i root@"$line"
done</root/SCANIP.log
#!/bin/bash
PASS="Huawei12#$"
IP_list=(
10.0.0.150
10.0.0.152
)
rm -rf /root/.ssh/id_rsa
ssh-keygen -f /root/.ssh/id_rsa -t rsa -P ''
for i in "${IP_list[@]}";do
sshpass -p "$PASS" ssh-copy-id -i root@"$i"
done
范例脚本
hd=default,vdbench=/root/vdbench,user=root,shell=ssh
hd=hd1,system=XX
hd=hd2,system=XX
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd2,anchor=/testdir_2,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd3,anchor=/testdir_3,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd4,anchor=/testdir_4,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fwd=format,xfersize=16k,threads=64
fwd=fwd1,fsd=fsd*,host=(hd1,hd2),operation=write,xfersize=16k,fileio=random,fileselect=random,threads=64
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=300,interval=1
hd=default,vdbench=/root/vdbench,user=root,shell=ssh
hd=hd1,system=XX
hd=hd2,system=XX
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd2,anchor=/testdir_2,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd3,anchor=/testdir_3,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd4,anchor=/testdir_4,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fwd=format,xfersize=16k,threads=64
fwd=fwd1,fsd=fsd*,host=(hd1,hd2),operation=read,xfersize=16k,fileio=random,fileselect=random,threads=64
rd=rd1,fwd=fwd*,fwdrate=max,format=no,elapsed=300,interval=1
hd=default,vdbench=/root/vdbench,user=root,shell=ssh
hd=hd1,system=XX
hd=hd2,system=XX
fsd=fsd1,anchor=/testdir_1,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd2,anchor=/testdir_2,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd3,anchor=/testdir_3,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fsd=fsd4,anchor=/testdir_4,depth=3,width=8,files=1000,size=16K,openflags=o_direct,shared=yes
fwd=format,xfersize=16k,threads=64
fwd=fwd1,fsd=fsd*,host=(hd1,hd2),rdpct=70,xfersize=16k,fileio=random,fileselect=random,threads=64
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=300,interval=1
测试注意点
1.shared=yes,会增加互信时目录检测次数,但如果设置为NO,vdbench就不会对相同文件进行读写,如果希望更贴近真实读写数据时请设置为YES;
2.host参数不可以类似fsd使用通配符"*|-",只可以使用"(fsd1,fds2)”的方式增加;
3.挂载选项推荐增加 vers=3,wsize=XXX,rsize=XXX 这些参数;
4.启动进程后可以到从端执行ps -ef|grep java查看是否有java-clent进程启动;
5.shared=yes与format=yes不可共存;当shared=yes时,format只可以选择no或restart
6.如果有多个场景测试且目录容量足够的情况下,请先执行预埋脚本,先预埋所有场景数据在将后续写相关脚本的format改为restart,读相关脚本format改为no;这样可以提升测试效率
输出结果
界面参数说明
interval:报告间隔序号
ReqstdOps是指每秒读的次数(一次读的大小是配置文件配置的xfersize=8k)
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:处理器利用率:系统时间
open :打开文件数
close :关闭文件数
rmdir:删除文件夹数
create:创建文件数
mkdir:创建文件夹数
delete:删除文件数
日志存放路径
在没有使用`-o`参数时,默认路径为../vdbench/output/summary.html下存放
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)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) 中来创建性能图表。