Enterprise Infrastructure Intelligence ● Certified engineers online · Fast response guaranteed
리눅스/OS

Linux I/O Scheduler의 구조와 작동 원리

Linux 커널의 I/O Scheduler는 블록 디바이스에 제출되는 읽기/쓰기 요청들의 실행 순서를 결정하는 블록 계층의 핵심 구성요소입니다. CFQ, BFQ, mq-deadline 등 여러 스케줄러는 디스크 접근 지연 최소화, 공정성 보장, 응답성 확보라는 상충하는 목표를 구현 전략에 따라 다르게 조율합니다.

2026.09.08  ·  41회  · 

I/O Scheduler의 역할과 위치

Linux 블록 I/O 계층에서 I/O Scheduler는 커널이 블록 디바이스에 제출할 읽기/쓰기 요청들의 순서를 결정합니다. 응용 프로그램 또는 커널이 I/O 요청을 발행하면, 블록 계층은 CPU별 소프트웨어 큐에 요청을 먼저 큐잉한 후, 요청들을 병합하고 정렬한 뒤, I/O Scheduler를 통해 디스패치 큐로 옮깁니다. Scheduler의 선택은 시스템 성능에 직접적인 영향을 미치므로 워크로드와 디바이스 특성에 맞춘 튜닝이 필수입니다.

주요 Scheduler 유형과 알고리즘

CFQ(Completely Fair Queuing)는 프로세스별 큐를 생성하여 각 큐에 시간 슬라이스를 할당하는 방식으로 공정성을 제공하며, 장시간 사용되어 왔습니다. BFQ(Budget Fair Queueing)는 CFQ의 코드 기반을 상속하면서 더 정확한 스케줄링 정책을 구현하여 대역폭 비례 배분과 낮은 지연시간을 동시에 달성합니다. mq-deadline은 멀티큐 디바이스에 최적화되어 있으며, 요청당 최대 지연시간을 제한하면서 높은 처리량을 유지합니다. none(NOOP)은 FIFO 큐만 유지하며 재정렬하지 않으므로 하이퍼바이저나 더 하단의 I/O 계층에서 스케줄링을 담당할 때 유용합니다.

실무에서 주의할 설계 고려사항

BFQ의 경우 아이들링(idling) 설정은 회전식 HDD에서는 유지하되 NVMe 같은 빠른 디바이스에서는 비활성화하여 처리량을 극대화할 수 있습니다. 또한 low_latency 모드 활성화 시 대화형 응용과 실시간 응용의 우선순위가 자동으로 상향되므로, 엄격한 대역폭 보장이 필요하면 이 모드를 비활성화해야 합니다. /sys/block/<device>/queue/scheduler를 통해 실행 중에 Scheduler를 동적으로 변경할 수 있으므로, 운영 환경에서 다양한 워크로드의 성능을 측정한 후 최적의 선택을 결정하는 것이 권장됩니다.

WIKIDATA WORKSTATION
AI·렌더링에 최적화된
전문가용 워크스테이션
NVIDIA RTX GPU · 최대 192GB 메모리 · ECC 지원