ファイルシステムで書き込みが読み取りより優先されるのはなぜですか? (あるいはその逆も)

ファイルシステムで書き込みが読み取りより優先されるのはなぜですか? (あるいはその逆も)

LinuxファイルシステムのI / Oスケジューラが読み取り操作よりも書き込み操作を優先することを確認しています。 Linuxのバージョンは3.10.0-327.el7.x86_64です。

書き込み操作と読み取り操作が同時に行われる必要がある次の実験を行いました。

disk_dir=/mnt/ssd
nohup fio --name=${disk_dir}/seqread --ioengine=sync --iodepth=1 --rw=read --bs=4096k --direct=0 --size=10240M --numjobs=1 --runtime=600 --group_reporting &
nohup fio --name=${disk_dir}/seqwrite --ioengine=sync --iodepth=1 --rw=write --bs=4096k --direct=0 --size=10240M --numjobs=1 --runtime=600 --group_reporting &

dstat を使用してディスク I/O 帯域幅使用量を測定した結果、読み書き操作が同時に発生しないことがわかりました。

         Disk
     Read   Write
... |3072k  241M|  13k 4211B|   0     0 |3737  2062
... |3072k  258M|  13k 4308B|   0     0 |3532  2676
... |3584k  260M|  16k 4793B|   0     0 |3404  2057
... |3072k  261M|  13k 4211B|   0     0 |3438  2565
...
... (After Write operations all finished)
... 
... | 449M   40k|  13k 4211B|   0     0 |4752  5130
... | 449M   42k|  13k 4308B|   0     0 |4973  5861
... | 428M    0 |  16k 4793B|   0     0 |4630  4990
... | 382M    0 |  13k 4211B|   0     0 |4306  5206

読み取りまたは書き込み操作は、他の操作が完了するまで待つ必要があります。

結果はLinuxの他のスケジューラでも同じです。

noop, deadline: They prioritize Write.
cfq: It prioritizes Read.

私は何を逃したことがありませんか?実験自体が間違っているのではないか?誰でも私にアイデアを与えることができますか?

ありがとう

ベストアンサー1

I / Oスケジューラは思ったより複雑です。例えば、選択はcfq氷山の一角に過ぎない。多数の調整パラメータがあります。https://www.kernel.org/doc/Documentation/block/cfq-iosched.txt

また、ブロックデバイスを直接使用せずにfsを使用するいくつかのファイルシステム(およびそれチューニングパラメータ)も要因となります。

そのため、調整により状況がさらに悪化する可能性がありますのでご注意ください。

ただし、この特定の例では、書き込み指向性が少なくなるようにdeadline調整できます。write_starved

https://www.kernel.org/doc/Documentation/block/deadline-iosched.txt

おすすめ記事