파일 시스템에서 쓰기가 읽기보다 우선적으로 나타나는 이유는 무엇입니까? (혹은 그 반대로도)

파일 시스템에서 쓰기가 읽기보다 우선적으로 나타나는 이유는 무엇입니까? (혹은 그 반대로도)

Linux 파일 시스템 I/O 스케줄러가 읽기 작업보다 쓰기 작업을 우선시하는지 확인하고 있습니다. 리눅스 버전은 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

관련 정보