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