FIO verify_state_load和触发器不起作用

时间:2017-09-26 12:23:00

标签: linux testing io kernel

我试图在关机后使用fio验证存储数据, 为此目的,使用fio使用--trigger-file选项写入中途停止fio操作(并模拟断电)。
然后使用fio选项读取--verify_state_load以仅检查设法完成的部分数据,但验证失败,似乎state_load无效(如果写入作业未终止,则读取验证将按预期正常工作部分通过触发器。)

是否有使用trigger / state_load的限制,我必须注意吗?

写作业参数:

[global]
verify_fatal=1
do_verify=0
loops=1
group_reporting=1
filename=/dev/nvme0n1
cpus_allowed=0-7
cpus_allowed_policy=split
runtime=0
verify=crc32c-intel
direct=1
rw=randwrite
verify_offset=100
ioengine=libaio
iodepth=32
size=200mb
bs=4096
verify_backlog=16384.0

[job_0]
size=209715200
offset=0

[job_1]
size=209715200
offset=1744830464

[job_2]
size=209715200
offset=3489660928

[job_3]
size=209715200
offset=5234491392

[job_4]
size=209715200
offset=6979321856

[job_5]
size=209715200
offset=8724152320

[job_6]
size=209715200
offset=10468982784

[job_7]
size=209715200
offset=12213813248

阅读工作参数:

[global]
verify_fatal=1
do_verify=1
loops=1
group_reporting=1
filename=/dev/nvme0n1
cpus_allowed=0-7
verify_state_load=1
cpus_allowed_policy=split
runtime=0
verify=crc32c-intel
direct=1
rw=read
verify_offset=100
ioengine=libaio
iodepth=32
size=1mb
bs=4096
verify_backlog=16384.0

[job_0]
size=1048576
offset=0

[job_1]
size=1048576
offset=1744830464

[job_2]
size=1048576
offset=3489660928

[job_3]
size=1048576
offset=5234491392

[job_4]
size=1048576
offset=6979321856

[job_5]
size=1048576
offset=8724152320

[job_6]
size=1048576
offset=10468982784

[job_7]
size=1048576
offset=1221381324

阅读工作中的错误:

  

开始8个过程       job_5:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       job_4:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       job_7:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       job_6:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       job_3:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       job_2:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       验证:错误的标题偏移466944,希望20480在文件/ dev / nvme0n1偏移20480,长度4096       验证:错误的标题偏移462848,想要24576在文件/ dev / nvme0n1偏移24576,长度4096       job_0:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息?       fio:pid = 1920,err = 84 / file:io_u.c:1985,func = io_u_queued_complete,error =多字节或宽字符无效或不完整

2 个答案:

答案 0 :(得分:0)

<强>更新

我认为这最终是由@RonenWeiss在https://github.com/axboe/fio/issues/468上提出的。在那里,一个fio维护者建议看到的问题是因为数据的写入是用rw=randwrite完成的,但单独的阶段“验证”是使用rw=read完成的,因为fio基于重新生成关闭作业参数的数据,第二阶段是向第一阶段生成不同的数据,从而报告不匹配。如果第二阶段使用rw=randread,则不应存在不匹配(假设数据已正确保存;-)。

原始回复

嗯,你最好直接向fio人询问这个问题(如果你选择这样做,请看看https://github.com/axboe/fio/blob/master/REPORTING-BUGS,并确保你使用的是最新版本的fio并查看{{3}了解那些可能的版本。

你的工作看起来有点奇怪(verify_backlog没有取小数,你可以在阅读工作中使size成为全局,但你不断重复它,runtime是0等)。立即脱颖而出的是,在你的“验证”工作中,你使用与原始工作不同的大小,这可能不会有一个圆满的结局,但我不能说这是肯定的问题。

不幸的是,你的工作既大又复杂,这使得难以发现问题(我非常随意,所以如果我在30秒内看不到问题,我通常会默默地继续前进)。如果您在使用fio作业时遇到问题,我强烈建议您将作业参数剥离到最低限度仍然会导致问题发生(例如,只有一个作业可以解决问题吗?只有一个作业?有多少选项可以你从全局变量中删除问题继续发生?)。这样,像我这样的人有一个减少诊断问题的借口; - )

答案 1 :(得分:0)

我的问题似乎是因为我使用fio rw = randwrite来生成数据并分离rw =读取作业以在触发后验证数据,使用rw = randread来验证数据解决了我的问题