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