vdbench的安装和使用:PTNJ0106 插上对应的测试机
vdbench是一个I/O工作负载生成器,(模拟多线程去读,写)
vdbench用于测试文件系统或块设备基准性能
I/O:input/output输入输出量
1.安装java
2.安装CSH(用来调Cshell,vdbench在linux上运行需要csh支撑)
3.vdbench脚本执行:
./vdbench -t 测试是否可执行
./vdbench -f ./testcase/filename -o /testlog/seq_read_sdb_1
4.文件系统filesys
lun= 原始磁盘、磁带或文件系统的名称。vdbench 也可为您创建一个磁盘
5.日志类型:
3.1 errorlog.html:
6.常见定义
hd:host define(主机定义)
sd:storage define(存储定义)
wd:workload define(工作负载定义)
SD和WD的区别:sd是指存储块定义,不是fsd共享
fsd:filesystem define(文件系统定义)-针对挂载的xfs,或者远端的nfs文件系统
fwd:filesystem workload define(文件系统负载定义)
rd:run define(运行定义)
7.vdbench测试脚本解读(test on NFS,fwd测试,文件系统):
#单机不需要添加HD,否则会报错
hd=defalut(默认主机),vdbench=/home/petaio/Jim/VDBench_stab_FS(运行目录),user=root(根目录),shell=ssh(可以在多台主机调用vdbench软件,但要保证每个主机都有安装vdbench)
hd=hd1(主机定义,当有多个主机时编号递增),system=C04(可以是IP地址,也可以是主机名,host文件夹中对应的)
fsd=fsd1(文件系统定义),anchor=/test1(挂载点的目录),width=1(目录宽度,表示在test1下面创建几个同级目录),depth=1(目录深度,表示在test1创建几个子目录),openflags=o_direct(直写模式,不要用存储磁盘的缓存),files=50(写50个文件),size=10m(每个文件的大小)-根据存储容量和存储性能去更新数据
#以下是对50个文件进行多负载,多线程的读写的随机的,顺序的策略
#4k random read (4k随机读)--策略定义
fwd=fwd1,fsd=fsd1,host=hd1(可更换对应的host),fileio=random,xfersize=4k(块的大小),operation=read(操作为读),thread=32(32个线程)
fwd=fwd2,fsd=fsd1,host=hd1(可更换对应的host),fileio=random,xfersize=4k(块的大小),operation=read(操作为读),thread=32(32个线程)
fwd=fwd3,fsd=fsd1,host=hd1(可更换对应的host),fileio=random,xfersize=4k(块的大小),operation=read(操作为读),thread=32(32个线程)
fwd=fwd4,fsd=fsd1,host=hd1(可更换对应的host),fileio=random,xfersize=4k(块的大小),operation=read(操作为读),thread=32(32个线程)
#4k random write (4k随机写)
fwd=fwd5(文件系统负载定义),(关联存储定义内容),fsd=fsd1,host=hd1,fileio=random,xfersize=4k(块的大小),operation=write(操作为写),thread=32(32个线程)
#4k random 8:2 (4k随机读写权重,80%读,20%的写)
fwd=fwd9(文件系统负载定义),(关联存储定义内容),fsd=fsd1,host=hd1,fileio=random,xfersize=4k(块的大小),rdcpt=80(读操作的比例,默认100,80表示80%读,20%写),thread=32(32个线程)
#4k sequential read (4k顺序读)
fwd=fwd13(文件系统负载定义),(关联存储定义内容),fsd=fsd1,host=hd1,fileio=sequential,xfersize=4k(块的大小),operation=read(操作为读),thread=32(32个线程)
#4k sequential write (4k顺序写)
fwd=fwd17(文件系统负载定义),(关联存储定义内容),fsd=fsd1,host=hd1,fileio=sequential,xfersize=4k(块的大小),operation=write(操作为写),thread=32(32个线程)
#4k random 4:6 (4k顺序读写权重,80%读,20%的写)
fwd=fwd21(文件系统负载定义),(关联存储定义内容),fsd=fsd1,host=hd1,fileio=sequential,xfersize=4k(块的大小),rdcpt=40(读操作的比例,默认100,40表示40%读,60%写),thread=32(32个线程)
#真实运行的任务,取各组任务,各个策略来进行读写操作
rd=4kread(随便写),fwd=(fwd1-fwd4),fwdrate=max(fw速率最大),format=restart(重新执行该命令,会格式化掉先前写入的50个文件),elapesed=60(以秒为单位的运行持续时间),interval=3(每间隔3秒输出测试结果)
该脚本执行前先添加挂载点:
mkdir test
(把卷挂载到对应的目录下)
8. vdbench on lun(测试块设备,io测试)
hd=defalut(默认主机),vdbench=/home/petaio/Jim/VDBench_stab_FS(运行目录),user=root(根目录),shell=ssh(可以在多台主机调用vdbench软件,但要保证每个主机都有安装vdbench)
//定义主机
hd=hd1(主机定义,当有多个主机时编号递增),system=C04(可以是IP地址,也可以是主机名,host文件夹中对应的)
sd=sd1(存储定义),host=hd1,lun=/dev/nvme0n1(具体路径查询nvme list,对应的node参数),thread=32(线程)
//对卷的读写策略,对块的测试
wd=wd1,sd=sd1,xfersize=4k(块的大小,或1M),rdcpt=100(读写百分比),openflags=o_direct(直写模式,不要用存储磁盘的缓存)
wd=wd2,sd=sd2,xfersize=4k,seekpct=seq(随机寻道的百分比,seq/random),rdcpt=100(读写百分比),openflags=o_direct
rd=run1,wd=(wd1-wd2),iorate=max,elapesed=60(运行时间60s),interval=1
9.执行后报错如下:
file_open(), open /FSMT/vdb.1_1.dir/vdb.2_2.dir/vdb_f0006.file failed
Maximum native memory allocation: 1,572,864; Current allocation: 524,288
**原因分析**
默认vdbench限制了java内存使用量,测试期间java运行内存不足才导致测试异常中断。
- **处理措施**
修改vdbench运行脚本的java内存参数,最小内存为1G,最大内存为2G
```
[root@node40 vdbench50406]# cat vdbench
if [ "$1" == "SlaveJvm" ]; then
$java -client -Xmx2048m -Xms1024m -cp $cp Vdb.SlaveJvm $*
exit $?
else
$java -client -Xmx2048m -Xms1024m -cp $cp Vdb.Vdbmain $*
exit $?
fi
```
好文要顶 关注我
#单机测试块设备
sd=sd1,host=hd1,lun=/dev/nvme0n1,thread=32
#4k random read
wd=wd1,sd=sd1,xfersize=4k,rdpct=100,openflags=o_direct
rd=hhhhh,wd=(wd1-wd2),iorate=max,elapsed=60,interval=1



