vdbench 数据校验测试方法
[root@dntosu001 vdbench]# cat pbd.conf
*sd: storage definition
*wd: workload definition
*rd: run definition
*validate= yes(-v)/read_after_write(-vr)/no_preread(-vw)/time(-vt)
*journal= yes/recover/only/noflush
monitor=/root/vdbench/shutdown
data_errors=(1000000000,6000)
sd=sd1,lun=/dev/pbd0,size=500g,journal=/root/journal,openflags=o_direct,threads=256
wd=wd1,sd=sd1,xfersize=8192,rdpct=0
rd=pbdtets,wd=wd1,iorate=max,elapsed=30m,interval=1
参数说明:
journal:指定数据存储路径,使用数据校验功能时可以通过设置journal保存测试数据,第二次运行vdbench时通过journal参数读取
上次的测试数据.
data_errors:当发生io错误时,如果error总数超过1000000000或者运行时间超过6000s则退出
threads: 并行io数,默认为8
open_flags=o_direct: 测试裸块设备时,必须是o_direct
xfersize: 测试数据块大小,默认4096,4k
monitor: 通过ctrl-c,kill关闭vdbench,下次恢复journal继续校验数据将失败,设置monitor后,vdbench将检查参数指定的文
件内容,通过设置文件可以正常关闭vdbench
[root@dntosu001 vdbench]# ./vdbench -f pbd.conf -jn -v
[-jn: 将测试数据异步方式写入journal日志,同步方式性能太差,测不出压力]
[-v: 启用数据校验功能]
-jn,-v参数可以放入配置文件pbd.conf中(journal=noflush,validate=yes)
测试一段时间后,dd写入数据到pbd0,模拟数据丢失
[root@dntosu001 vdbench]# echo "end_vdbench" > /root/vdbench/shutdown
正常关闭vdbench
[root@dntosu001 vdbench]# ./vdbench -f pbd.conf -jnr -v
启动vdbench,并读取上次测试数据进行校验并继续测试. 校验完成结果:
localhost-0: 16:35:47.087 total amount of key blocks read and validated: 13,904,362; key blocks marked in error: 0
dd写后会立马报错.
vdbench errorlog分析
写入时间戳: 0x53c4c79d79c66
[root@dntosu002 ~]# python
python 2.7.5 (default, nov 20 2015, 02:00:19)
[gcc 4.8.5 20150623 (red hat 4.8.5-4)] on linux2
type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> int(0x53c4c79d79c66)
1473674042907750
>>> s, ms = divmod(1473674042907750, 1000000)
>>> '%s.%06d' % (time.strftime('%y-%m-%d %h:%m:%s', time.gmtime(s)), ms)
'2016-09-12 09:54:02.907750'
读取errorlog中报错的块数据内容
[root@dntosu001 vdbench]# ./vdbench print /dev/pbd0 0x29acab6000 8192