锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Vdbench工具文件系统测试记录

时间:2022-10-03 02:00:00 流量传感器hd1ko

Vdbench工具测试记录

文件系统通用参数说明

HD
  • Host Definition简称,即主机定义。只有在多台主机在线测试的情况下,或者需要重新设置单台主机JVM只有在数量时才有必要设置。
hd=default  #表示银行后续设置的所有参数将作为所有后续参数hd默认参数。 hd=host_label  #主机标签的确定主要用于交叉引用和报告输出 system=IP/hostname  #在线测试显示系统IP地址或网络名称。system=129.22.240.188表明IP为129.22.240.188的主;system=sysa表示网络名称为sysa还可以使用主机system=localhost表示当前主机。 vdbench=PATH  #确定远程主机vdbench的安装目录 shell=rsh|ssh|vdbench  #在线测试,windows使用vdbench自带远程 
FSD
  • Filesystem Storage Definition简称,即文件系统存储定义。必须设置此类参数,主要包括文件系统的挂载目录、目录结构、文件数量、文件大小等。
fsd=name #用来唯一标识一个文件系统存储定义,以便被fwd调用。 fsd=default #表示银行后续设置的所有参数将作为所有后续参数fsd默认参数。 anchor=/dir/ #表示在哪条路径下创建新的目录结构并进行测试。 shared=yes/no #Vdbench不允许不同的slave共享同一目录结构下的所有文件,因为它会带来巨大的成本,但允许它们共享目录结构。如果设置了shared=yes,那么不同的slave访问一个目录下的所有文件都可以平分,相当于每个文件slave有各自等分的访问区。 width=nn #确定需要创建的目录结构的宽度。 depth=nn #确定需要创建的目录结构的深度。 files=nn #在最底层的单个目录中创建多少个文件? sizes=(nn,nn,……) #可以确定单个文件或多个文件的大小。当描述多个文件的大小时,结对描述。第一个参数表示文件的大小,第二个参数表示文件在所有文件中的比例。比如:sizes=(4k,25,8k,20,16k,55)就表示所有文件中25%的文件大小为4k,20%的文件大小为8k,55%的文件大小为16k。如果设置为sizes=(nnn,0),Vdbench平均大小为nnn规则如下:nnn>10m,实际创建的文件大小为1m的倍数;nnn>1m,实际创建的文件大小为100k的倍数;nnn>100k,实际创建的文件大小为10k的倍数;nnn<100k,实际创建的文件大小为1k的倍数。 openflags=(flag,..) "仅在Solaris下一个应用程序可以将标志传输给文件系统open请求。目前支持的标志包括:O_DSYNC,O_RSYNC,O_SYNC。 total_size=nnn #创建新文件时,如果占用的空间达到参数的设定值,应及时停止文件创建。 "workingsetsize=nn (wss=nn)" 一般来说,depth,width,files和sizes文件系统共同决定了文件系统的数量和大小。total_size将用于确定实际使用的文件系统空间workingsetsize这些文件中将用于实际测试的工作文件子集的大小可以设置参数。例如,如果总文件占用2000g文件系统缓存的空间为32g,那么设置workingsetsize=32g工作子集中的文件将在测试热身阶段后停留在文件系统的缓存中。 count=(nn,mm) #能快速产生一系列顺序fsd,比如:fsd=fsd,anchor=/dir,count=(1,5)表示fsd1-fsd5.分别对应/dir1-/dir5 shared= 可选值为yes或no,默认值为no,多主机联机测试一般只指定 vdbench不允许不同的slave共享同一目录结构下的所有文件,因为这将带来巨大的成本,但它们允许共享同一目录结构。添加设置shared=yes,那么不同的slave访问所有文件可以平分为一个目录,相于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写 --当多主机联机测试时,写入的根目录anchor为同一个路径时,需要指定参数值为yes
FWD
  • Filesystem Workload Definition的简称,即文件系统工作负载定义。这类参数是必须设置的,主要是描述需要对哪些fsd执行哪种文件访问方式和哪种I/O负载类型的下发
fwd=name	
#用来唯一标识一个文件系统工作负载定义,以便被rd调用
fwd=default	
#表明该行中后续设置的所有参数都会作为后续所有fwd的默认参数。测试文件系统生成文件时默认配置 threads=8,xfersize=128k
fwd=format	
#按照指定的参数生成文件,需要在该参数后面指定threads和xfersize参数
fsd=(xx,…)	
#该参数确定该文件系统工作负载定义会作用于哪些文件系统存储定义,比如fsd=(fsd1,fsd2)
fileio=random/sequential	
#确定每个文件中I/O操作的类型,顺序或者是随机。一个随机的LBA地址会在传输的数据块大小的边界上产生。fileio=random表示随机I/O,fileI/O=sequential表示顺序I/O,fileio=(seq,delete)表示写前先删除文件。
rdpct=nn	
#设置混合读写时读I/O的比例,只用于随机读写时。Fileio为顺序时,两个参数互斥
fileselect=random/sequential	
#确定选择目录和文件的方式是顺序的还是随机的。
xfersizes=nn	
#确定I/O读写操作传输的数据块大小。可以确定一种大小,也可以确定多种大小。当描述多种数据块大小时,采用了结对描述的方式。一个对中的第一个参数表示数据块的大小,一个对中的第二个参数表示该大小的数据块在所有I/O中所占的比重。比如:xfersizes=(8k,50,16k,30,2k,20)就表示所有文件中50%的I/O的块大小为8k,30%的I/O的块大小为16k,20%的I/O的块大小为2k。
operation=xxxx	
#确定一种文件系统的操作,包括:mkdir,rmdir,create,delete,open,close,read,write,getattr和setattr。如果想要设定多种操作方式,则需在rd中设置operations参数。
threads=nn	
#确定有多少并行的线程来执行该工作负载,每个线程只处理一个文件,而不能多个线程同时处理一个文件。但是就算是不同的线程处理不同的文件,还是会遇到很多尴尬的场景,比如:在父目录和当前目录不存在的时候需要在当前目录下创建文件;读写一个还不存在的文件;读一个空文件;删除一个正在被读写的文件;当这些情况发生的时候Vdbench会自动分析和处理。比如想要写一个还不存在的文件,Vdbench会检查在本次运行中是否有新的文件会被创建,如果有,当前线程会睡眠200ms,让下一个操作继续。如果没有文件创建请求在排队的话就直接终止本次运行。在运行结束后,各种与该问题相关的统计数据都在logfile.html中报告出来。为了防止死,如果有10000个连续的线程睡眠而该期间没有一个操作被成功处理,Vdbench会自动终止。一般情况下,最好让线程数超过需要处理的文件的总数。
skew=nn	
#确定分配给该工作负载的I/O占所有I/O总数的比例。
stopafter=nn% 和 stopafter=nn 
#该参数可以设置对每个文件读多少数据写多少数据。可以设置stopafter=nn来表示对一个文件进行nn个I/O操作后停止对该文件的访问,可以设置stopafter=nn%来表示对一个文件进行文件大小的nn%操作后停止对该文件的访问。对于随机I/O,默认情况下,Vdbench会在100个I/O操作之后或者整个文件被访问完之后关闭该文件,然后访问其它文件。对于顺序I/O,Vdbench默认会访问完整个文件,设置该参数后会根据需要停止对该文件的访问,但是下次访问该文件时会从上次的结束点开始,对于写来说,就相当于是Append操作。
RD
  • Run Definition的简称,即运行定义。这类参数是必须设置的,主要是描述需要执行哪些fwd,需要产生多少操作数等等
fwd=(xx,yy,..)	
#确定本次运行中,哪些文件系统工作负载定义会被执行。可以执行单个工作负载,如fwd=fwd1;也可以执行多个工作负载,比如fwd=(fwd1,fwd2,fwd3),或者fwd=(fwd1-fwd3),或者fwd=fwd*
fwdrate=nn	
#表示每秒钟的操作数
fwdrate=100
#表示运行每秒100操作数的工作负载
fwdrate=(100,200,…)
#表示运行每秒100操作数的负载,再运行每秒200操作数的负载,依次下去
fwdrate=(100-1000,100)
#表示运行每秒从100到1000的操作数负载,增量为100
fwdrate=curve
#表示运行每秒操作数为梯度形态的工作负载
fwdrate=max
#表示运行每秒最大操作数的工作负载,不对操作数进行限制"
format=xxxx	
#该参数将确定是否需要在本次运行之前对目录和文件进行预处理。format=no表示不需要对目录和文件进行任何改变,前提是文件结构与fsd中的需求一致;format=yes表示会删除当前文件结构并且按当前fsd的要求生成新的文件结构;format=restart表示只创建那些不够的文件以及扩展那些文件大小不足的文件;format=only,与yes类似,但Vdbench不会执行当前rd;format=dir,与yes类似,但Vdbench只创建目录;format=clean,表示删除当前文件结构但不会执行当前rd
operations=xx	
#确定一个或多个文件系统操作,该参数会覆盖文件系统工作负载定义中的operation参数。举个例子,如果fsd中没有定义好文件结构,那么想要进行读文件测试的话,就需要设置operations=(mkdir,create,write,read),因为首先需要创建目录结构,再创建文件,再写文件,最后才能读文件。
foroperations=xx	
#该参数覆盖所有与operation有关的参数,允许以各种方式自动执行文件系统的各种操作。
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等)

单机测试-文件系统

范例脚本
#4KB场景100%写
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
#4KB场景100%读
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
#4KB场景70%读30%写
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
#较多node场景使用;注意:依赖sshpass包
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
#较少node场景下使用,注意:依赖sshpass包
PASS="Huawei12#$"
IP_list=(
10.0.0.150
10.0.0.152
)
#环境清理
rm -rf /root/.ssh/id_rsa
#生成ssh_key的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
范例脚本
#联机测试16K场景100%写
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
#联机测试16K场景100%读
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
#联机测试16K场景70%读30%写
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) 中来创建性能图表。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章