Fio工具业余性研究(二)

1、背景

fio在做verify的时候到底下发了什么数据,又验证了什么数据呢?

1.1 hexdump

要查看块设备上的数据,有一个工具比较实用,hexdump,使用这个工具可以去查看文件的原始数据。现在用fio去写一些数据,jobfile如下


Fio工具业余性研究(二)_第1张图片
image.png

可以看到这一次是顺序写:

  • bs 512字节
  • verify_pattern=1234(十六进制04D2)
  • size 10mb

现在使用hexdump来查看一下块设备的前1024字节的数据:


Fio工具业余性研究(二)_第2张图片
image.png

可以看到每个bs开始前会有一部分以acca开始的header数据,然后剩下的bs里面全部填充了jobfile指定的pattern

2、verify的header数据

在每个bs前面填充的数据是在fio的verify.c中定义的:


Fio工具业余性研究(二)_第3张图片

header的大小是40个字节,他记录了这个写下来的io的相关信息

2.1 verify=meta

如果使用默认的方式来verify,那就是只verify header的crc32校验,不去verify后面的data区域,这是执行最快的一种verify。


Fio工具业余性研究(二)_第4张图片
image.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。

Fio工具业余性研究(二)_第5张图片
image.png

2.3 其他的verify方式

使用hexdump可以去调试其他各种verify的方式下发的数据内容,对于fio工具有一种方式可以在代码中输出log——dprint函数。


Fio工具业余性研究(二)_第6张图片
image.png

可以看到调用dprint函数的时候需要输入FD_VERIFY,这是verify log类型的标识,其实还有别的log类型。
在执行fio是使用命令:

 #指定查看verify的log
 ./fio --debug=verify   /tmp/jobfile1 

log如下:


Fio工具业余性研究(二)_第7张图片
image.png

第一个block的校验值是3093347643-->B860 BD38
正好对应到dump出来的data区域的crc32校验。


Fio工具业余性研究(二)_第8张图片

你可能感兴趣的:(Fio工具业余性研究(二))