I/O 스케줄러(CFQ, Deadline, MQ-Deadline) 비교와 사용 사례

I/O 스케줄러(CFQ, Deadline, MQ-Deadline) 비교와 사용 사례

리눅스에서 I/O 스케줄러는 디스크 요청을 어떤 순서와 기준으로 처리할지 결정하는 핵심 구성 요소다.
같은 스토리지라도 어떤 I/O 스케줄러를 사용하느냐에 따라 지연 시간, 처리량, 응답 일관성이 크게 달라질 수 있다.
이 글에서는 CFQ, Deadline, MQ-Deadline 세 가지 대표적인 I/O 스케줄러의 구조적 차이와 특성, 그리고 실제 사용 사례를 비교 분석한다.

1. I/O 스케줄러의 역할과 중요성

I/O 스케줄러는 커널 블록 계층에서 다음 역할을 수행한다.

  • 디스크 요청의 순서 결정
  • 읽기/쓰기 요청 간 우선순위 조정
  • 지연(latency)과 처리량(throughput) 균형 유지
  • 특정 워크로드의 굶주림(starvation) 방지

HDD, SATA SSD, NVMe SSD처럼 스토리지 특성이 달라지면서 스케줄러의 설계 방식도 함께 진화해 왔다.

2. CFQ(Completely Fair Queuing) 스케줄러

CFQ는 전통적인 리눅스 기본 I/O 스케줄러로, 프로세스 간 공정성을 최우선으로 설계되었다.

동작 방식

  • 프로세스별로 독립적인 I/O 큐 생성
  • 각 큐에 동일한 시간 슬라이스 할당
  • Round-Robin 방식으로 요청 처리
  • 읽기/쓰기 요청을 공정하게 분배

장점

  • 여러 프로세스가 동시에 I/O를 수행할 때 공정성 우수
  • 데스크톱 환경에서 체감 반응성 양호
  • 특정 프로세스의 I/O 독점 방지

단점

  • 큐 관리 오버헤드 큼
  • SSD, 특히 NVMe 환경에서는 비효율적
  • 높은 처리량이 필요한 서버 환경에는 부적합

대표 사용 사례

  • HDD 기반 데스크톱 시스템
  • 다중 사용자 환경
  • 인터랙티브 작업이 많은 시스템

3. Deadline 스케줄러

Deadline 스케줄러는 지연 시간의 상한선을 보장하는 것을 목표로 한다.

동작 방식

  • 읽기/쓰기 요청을 각각 정렬 큐로 관리
  • 요청마다 deadline(최대 대기 시간) 부여
  • deadline 초과 요청을 우선 처리
  • 읽기 요청을 쓰기보다 우선시

장점

  • 읽기 지연 최소화
  • I/O starvation 방지
  • 예측 가능한 응답 시간

단점

  • 공정성은 CFQ보다 낮음
  • 복잡한 워크로드에서 처리량 손해 가능

대표 사용 사례

  • 데이터베이스 서버
  • 로그 처리 시스템
  • 읽기 지연에 민감한 서버 환경

4. MQ-Deadline 스케줄러

MQ-Deadline은 Deadline 스케줄러를 **멀티큐 블록 계층(Multi-Queue)**에 맞게 재설계한 현대적인 스케줄러다.

등장 배경

  • NVMe, 고성능 SSD의 병렬 처리 능력 활용 필요
  • 단일 큐 기반 스케줄러의 병목 해결

동작 방식

  • CPU 코어별 독립 I/O 큐 사용
  • 각 큐에서 Deadline 정책 적용
  • 락 경합 최소화
  • 스토리지 병렬성 극대화

장점

  • NVMe SSD에서 매우 우수한 성능
  • 낮은 지연과 높은 처리량 동시 확보
  • 멀티코어 환경에서 확장성 뛰어남

단점

  • HDD 환경에서는 큰 이점 없음
  • 설정에 대한 이해 없이 사용하면 효과 체감이 적을 수 있음

대표 사용 사례

  • NVMe SSD 기반 서버
  • 고성능 데이터 처리 시스템
  • 컨테이너·가상화 환경

5. 구조적 차이 요약

CFQ, Deadline, MQ-Deadline의 핵심 차이는 설계 철학과 큐 구조에 있다.

  • CFQ: 프로세스 중심 공정성, 단일 큐 기반
  • Deadline: 지연 보장 중심, 단일 큐 기반
  • MQ-Deadline: 지연 보장 + 멀티큐 병렬 처리

스토리지 성능이 높아질수록 공정성보다 병렬성·지연 관리가 더 중요해진다.

6. 스토리지 유형별 권장 스케줄러

HDD

  • CFQ 또는 Deadline
  • 물리적 탐색 비용이 크기 때문에 요청 정렬 중요

SATA SSD

  • Deadline 또는 MQ-Deadline
  • 낮은 지연과 안정성 중시

NVMe SSD

  • MQ-Deadline 또는 none
  • 스토리지 자체 큐 관리 능력을 최대한 활용

NVMe 환경에서는 커널 스케줄러 개입을 최소화하는 것이 오히려 성능에 도움이 되는 경우도 많다.

7. 실제 운영 환경에서의 선택 기준

I/O 스케줄러 선택 시 고려해야 할 요소는 다음과 같다.

  • 스토리지 종류(HDD, SSD, NVMe)
  • 워크로드 특성(랜덤/순차, 읽기/쓰기 비율)
  • 지연 민감도
  • 멀티코어 활용 여부

예를 들어

  • DB 서버: Deadline 또는 MQ-Deadline
  • 컨테이너 플랫폼: MQ-Deadline
  • 개인용 데스크톱(HDD): CFQ

8. 성능 테스트와 검증의 중요성

I/O 스케줄러는 환경에 따라 성능 차이가 크게 나타난다.
따라서 변경 시에는 반드시 다음을 확인해야 한다.

  • 평균 I/O 지연 시간
  • P99, P999 latency
  • 처리량 변화
  • CPU 사용률

fio, iostat, blktrace 같은 도구를 활용한 실측 기반 검증이 필수다.

9. 정리 및 결론

I/O 스케줄러는 단순 설정 항목이 아니라 스토리지 성능을 결정짓는 핵심 요소다.
CFQ는 공정성 중심, Deadline은 지연 보장 중심, MQ-Deadline은 고성능 병렬 처리 중심이라는 명확한 차이를 가진다.

핵심 요약

  • HDD 환경: CFQ 또는 Deadline
  • SSD 환경: Deadline
  • NVMe 환경: MQ-Deadline 또는 none
  • 최종 선택은 반드시 실측 결과 기반으로 결정

워크로드에 맞는 I/O 스케줄러 선택은 시스템의 안정성과 성능을 동시에 끌어올리는 가장 확실한 방법 중 하나다.

댓글 남기기