Ssd

在進行同步 IO 基準測試時使用隊列深度是否有意義?

  • November 5, 2020

在進行同步 IO 基準測試時隊列深度 > 1 是否有意義?

我期待與 QD1 相同的結果,但 QD32 確實給出了更好的結果?

我以為它會被忽略。在選項的 fio手冊--iodepth中:

請注意,將 iodepth 增加到 1 以上不會影響同步 ioengine…

fio 命令:

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=1 --size=512MB --fsync=1  --filename=test.img 
Result:  5.210 IOPS / 20MB/s

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=32 --size=512MB --fsync=1  --filename=test.img 
Result: 20.100 IOPS /  79MB/s

(以下是參考fio

在進行同步 IO 基準測試時隊列深度 > 1 是否有意義?

否(這是一種簡化,但您可以閱讀特殊情況的 fio 文件)。

我雖然

$$ t $$它只會被忽略。

> > 請注意,將 iodepth 增加到 1 以上不會影響同步 ioengine… > > >

[顯示 iodepth 對posixaioioengine 有影響的範例]

posixaio一個同步 ioengine(aio = 非同步 I/O :-) 如果您查看https://github.com/axboe/fio/blob/fio-3.23/engines/posixaio.c#L246,您會注意到它沒有t 設置FIO_SYNCIO標誌(請參閱https://github.com/axboe/fio/blob/fio-3.23/ioengines.h#L65了解標誌的定義位置)。

當您使用iodepth> 1 的非同步 ioengine 時,根據定義,您是在嘗試創建非同步 I/O 基準。您可以(在某種程度上)通過使用 1 來模擬非同步 ioengine 的同步行為,iodepth但您會為使用冗餘非同步機制支付一些(可能很小)成本。或者,您可以改用純同步 I/O 引擎(查找名稱中帶有 sync 的 ioengine),您應該會發現這iodepth不會影響您使用它們的結果(因為它們是真正同步的!)。

引用自:https://unix.stackexchange.com/questions/617327