Apple XNU의 Clutch Scheduler: 계층적 스레드 스케줄링의 혁신

전통적인 스케줄링의 한계

Apple XNU 커널의 Clutch Scheduler는 클러스터 내 스레드 스케줄링을 위한 혁신적인 설계로, 각 스레드를 개별적으로 처리하는 대신 워크로드 그룹으로 계층적으로 조직화한다.

전통적인 Mach 스케줄러는 다음과 같은 문제를 겪었다:

부정확한 회계: 스레드 레벨 CPU 회계는 더 많은 스레드를 생성하도록 유도한다

낮은 격리성: 전역 시스템 부하 기반 우선순위 감쇠로 인해 관련 없는 스레드가 UI 반응성을 방해한다

3단계 계층 구조

스케줄러는 세 가지 레벨에서 작동한다:

1. Scheduling Bucket 레벨

Earliest Deadline First (EDF) 알고리즘을 사용하여 다음에 실행할 QoS 클래스를 선택한다. 각 버킷은 사전 정의된 worst-case execution latency (WCEL)를 가지고 있어, 높은 우선순위 작업의 반응성을 보장하면서 낮은 우선순위 작업의 starvation을 방지한다.

2. Thread Group 레벨

QoS 버킷 내에서 스레드 그룹 간 선택은 "voluntary blocking time과 CPU 사용 시간의 비율"을 기반으로 한 상호작용성 점수를 사용한다. 이는 배치 처리보다 대화형 워크로드에 보상을 준다.

3. Thread 레벨

스레드 그룹 내에서는 전통적인 Mach timesharing을 사용하며, CPU 집약적인 스레드에 페널티를 주고 bursty한 대화형 스레드에 보상을 주기 위해 우선순위 감쇠를 사용한다.

Edge Scheduler 확장

Edge Scheduler는 다중 클러스터 지원을 추가한다:

클러스터별 스케줄링 지연 시간 메트릭

클러스터 부하 및 선호 배치 기반 스레드 마이그레이션

크로스 클러스터 로드 밸런싱을 위한 외부 스레드 추적

이기종 코어 간 장시간 실행 워크로드를 위한 "stir-the-pot" 라운드 로빈

의의

Clutch Scheduler는 macOS와 iOS의 반응성과 전력 효율성을 크게 개선했다. 계층적 접근 방식을 통해 시스템은 대화형 애플리케이션에 우선순위를 주면서도 백그라운드 작업이 공정한 CPU 시간을 받도록 보장한다. 이는 Apple Silicon의 효율성 및 성능 코어를 활용하는 멀티 클러스터 아키텍처에서 특히 중요하다.