I/O SCHEDULER

저장장치 특성에 따라 큐 정렬과 지연 시간 제어가 달라진다

HDD는 헤드 이동을 줄이는 정렬이 중요하고, SSD와 NVMe는 병합, 마감 시간, 큐 깊이 제어가 더 큰 의미를 갖는다.

await와 %util `iostat -xz`에서 await가 높으면 요청 대기 시간이 길고, %util이 100%에 가까우면 장치가 포화 상태에 가깝다.
none

NVMe와 빠른 SSD

커널 큐에서 재정렬하지 않고 장치 내부 병렬성과 컨트롤러 큐를 활용한다.

mq-deadline

읽기 지연 제한

요청에 만료 시간을 두어 쓰기 병합 중에도 읽기 요청이 오래 밀리지 않게 한다.

bfq

데스크탑 반응성

프로세스별 I/O 예산을 나누어 대용량 복사가 편집기나 브라우저를 굳게 만들지 않도록 한다.

kyber

목표 지연 시간

읽기와 쓰기의 큐 깊이를 조정해 고성능 장치에서 latency target을 맞추려 한다.

요청 병합 인접한 4KB 요청을 더 큰 순차 I/O로 합치면 장치 명령 수가 줄어든다.
ionice 백업은 idle 클래스로 낮추고, 데이터베이스 I/O는 간섭을 줄여 배치한다.
Zero-Copy `sendfile()`은 사용자 공간 복사를 건너뛰어 파일 전송 경로를 짧게 만든다.