나는 CFQ에 관한 다음 진술이 모순적이라고 생각합니다.
- "비동기 요청의 경우 모든 프로세스의 모든 요청이 함께 일괄 처리됩니다.프로세스의 I/O 우선순위에 따라".
- IO 스케줄러가 비동기로 간주하는 유일한 요청은 정기적인 "버퍼링된" 쓰기입니다..
- "
ionice
비동기 쓰기 IO의 우선순위를 낮추지 않습니다.".
어떤 진술이 올바르지 않습니까? 아니면 둘 다 맞다면 왜 서로 모순되지 않습니까?
답변1
제 생각에는 2번과 3번의 진술이 틀렸다고 생각합니다.
사용자 프로세스는 다음을 sync_file_range()
사용하여 비동기 쓰기 IO를 생성할 수 있습니다. 이러한 IO는 호출 프로세스에 의해 직접 제출되므로 프로세스 IO 우선순위의 영향을 받을 수 있습니다.
sync_file_range()는 비동기 쓰기 저장이 트리거되도록 설계되었습니다. 현재 구현(Linux v4.20)에서는 쓰기 저장 모드 WB_SYNC_NONE을 사용하여 REQ_SYNC 설정을 방지합니다. 프로그램이 SYNC_FILE_RANGE_WAIT_AFTER 플래그를 포함하여 쓰기 저장을 기다리는 경우에도 마찬가지입니다. (그러나 v2.6.29와 v4.4 사이의 커널은 WB_SYNC_ALL을 잘못 사용했기 때문에 REQ_SYNC는 sync_file_range()에 의해 트리거된 모든 쓰기 저장에 사용되었습니다.)
비동기 write() 호출 중에 "직접 수집"을 수행해야 한다면 프로세스 IO 우선순위도 사용될 수 있습니다. 라고 한다2011년에 폐지됨.