同期IOをベンチマークするときにキュー深度を使用するのは合理的ですか?

同期IOをベンチマークするときにキュー深度を使用するのは合理的ですか?

同期IOをベンチマークするときのキューサイズ> 1は意味がありますか?

QD1でも同じ結果を期待しましたが、QD32が実際に良い結果を出すのでしょうか?

私はそれが無視されると思った。ピオから手動オプションの場合--iodepth:

ioDeepthを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

答え1

(以下をご覧ください。ペオ)

同期IOをベンチマークするときのキューサイズ> 1は意味がありますか?

いいえ(簡単に説明しましたが、読むことができます。特別な場合のfioドキュメント)。

無視されると思います。

ioDeepthを1以上に増やしても同期されたioengineには影響しません。

posixaio[ioDeepthがioengineに与える影響を示す例]

posixaioioエンジンの同期(aio = 非同期I/O:-)視聴したらhttps://github.com/axboe/fio/blob/fio-3.23/engines/posixaio.c#L246フラグが設定されていないことがわかりますFIO_SYNCIO(参照https://github.com/axboe/fio/blob/fio-3.23/ioengines.h#L65フラグの位置を定義するために使用されます)。

1より大きい非同期ioengineを使用すると、iodepth定義に従って非同期I / Oベンチマークを作成しようとします。 1を使用して非同期ioengineの同期動作をある程度エミュレートできますが、冗長非同期iodepthメカニズムを使用すると、わずかな(おそらく小さい)オーバーヘッドを支払うことになります。または純粋な同期I / Oエンジン(名前にsyncを含むioengineを見つけます。iodepth)そしてこれが結果に影響を与えないことを知る必要があります(実際に同期されているからです!)。

関連情報