1、背景
fio在做verify的时候到底下发了什么数据,又验证了什么数据呢?
1.1 hexdump
要查看块设备上的数据,有一个工具比较实用,hexdump,使用这个工具可以去查看文件的原始数据。现在用fio去写一些数据,jobfile如下
![](https://img.haomeiwen.com/i330043/9be5a5f94fbba915.png)
可以看到这一次是顺序写:
- bs 512字节
- verify_pattern=1234(十六进制04D2)
- size 10mb
现在使用hexdump来查看一下块设备的前1024字节的数据:
![](https://img.haomeiwen.com/i330043/68fd3c1bc0a5a9d9.png)
可以看到每个bs开始前会有一部分以acca开始的header数据,然后剩下的bs里面全部填充了jobfile指定的pattern
2、verify的header数据
在每个bs前面填充的数据是在fio的verify.c中定义的:
![](https://img.haomeiwen.com/i330043/86b89cec27f46f2c.png)
header的大小是40个字节,他记录了这个写下来的io的相关信息
2.1 verify=meta
如果使用默认的方式来verify,那就是只verify header的crc32校验,不去verify后面的data区域,这是执行最快的一种verify。
![](https://img.haomeiwen.com/i330043/54b8c1aa022c9db6.png)
另外,在data区域,fio会写随机的数据
2.2 verify = crc32
如果使用verify=crc32,整个4kb的数据会分为两个部分:
- header部分:前40字节,其中最后4个字节是header的crc32校验
- data部分:41~4096字节,其中最开始4个字节是data区域的crc32校验
在verify的时候,header是默认校验的,就是校验header的内容和header的crc校验,如果指定的verify=crc32,那么在校验header之后,还会校验data区域内容和data区域的crc。
![](https://img.haomeiwen.com/i330043/61881759aa3ff01c.png)
2.3 其他的verify方式
使用hexdump可以去调试其他各种verify的方式下发的数据内容,对于fio工具有一种方式可以在代码中输出log——dprint函数。
![](https://img.haomeiwen.com/i330043/1b5809a45d370de9.png)
可以看到调用dprint函数的时候需要输入FD_VERIFY,这是verify log类型的标识,其实还有别的log类型。
在执行fio是使用命令:
#指定查看verify的log
./fio --debug=verify /tmp/jobfile1
log如下:
![](https://img.haomeiwen.com/i330043/7d05335c6d5343f5.png)
第一个block的校验值是3093347643-->B860 BD38
正好对应到dump出来的data区域的crc32校验。
![](https://img.haomeiwen.com/i330043/96fc1c6d5d321c7f.png)
网友评论