2017-09-26 55 views
0

我試圖使用fio關機後,以驗證在存儲數據, 使用fio寫有--trigger-file選項爲此通過停止fio操作中途(和模擬斷電)。
然後用--verify_state_load選項--verify_state_load選項來檢查只管理完成的數據部分,但驗證失敗,看起來state_load沒有任何作用(如果寫入作業沒有被觸發器部分地終止,則讀取驗證將按預期正常工作)。FIO verify_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:沒有I/O通過libaio的執行,也許試試看--debug = io選項的細節? job_4:沒有I/O由libaio執行,也許嘗試--debug = io選項的詳細信息? job_7:沒有I/O由libaio執行,也許嘗試--debug = io選項的細節? job_6:沒有由libaio執行的I/O,也許嘗試--debug = io選項的詳細信息? job_3:沒有由libaio執行的I/O,也許試試看--debug = io選項的細節? job_2:沒有通過libaio執行I/O,或許可以嘗試--debug = io選項以獲取詳細信息? 驗證:錯誤標題偏移466944,文件/ dev/nvme0n1偏移20480處需要20480,長度4096 驗證:錯誤標題偏移462848,文件/ dev/nvme0n1偏移24576處需要24576,長度4096 job_0:沒有執行I/O通過libaio,也許嘗試--debug = io選項的細節? FIO:PID = 1920,ERR = 84 /文件:io_u.c:1985年,FUNC = io_u_queued_complete,錯誤=無效的或不完整的多字節字符或寬字符

回答

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請參閱https://github.com/axboe/fio/releases以瞭解可能的版本)。你的工作看起來有點奇怪(verify_backlog不帶小數,你可以在讀作業中使size成爲一個全局的,但你不斷重複它,runtime是0等)。立即脫穎而出的是,在你的「驗證」工作中,你使用與原始工作不同的尺寸,這可能不會有一個快樂的結局,但我不能說這是肯定的問題。

不幸的是,你的工作很複雜,很難發現問題(我很隨意,所以如果我在30秒內看不到問題,我通常會默默地繼續前進)。如果您在fio工作中遇到問題,我強烈建議您將工作參數降至最低限度,以使問題得以解決(例如,只有兩項工作才能解決問題?只有一項工作?可以選擇多少項你從全局變量中刪除問題繼續發生?)。這樣,像我這樣的人有一個避免診斷問題的藉口---)

+0

感謝anon,好像是我遇到的問題可能與使用隨機寫入有關,非隨機寫入似乎按照我預期的方式工作,但假定應該已經工作隨機 –

+0

@RenenWeiss啊很高興知道。我已經更新了答案 - 它看起來更好嗎? – Anon

0

我的問題似乎是因爲我使用fio rw = randwrite生成數據和分開rw =讀取作業以驗證數據後觸發,使用rw = randread驗證數據解決了我的問題