OS Modern Scheduler

CFS vruntime에서 EEVDF와 NUMA 부하 분산까지

현대 스케줄러는 공정성, 지연 시간, 실시간성, 멀티코어 locality를 동시에 맞추기 위해 실행 시간과 deadline 신호를 함께 본다.

01

vruntime 누적

CFS는 실제 실행 시간을 가중치로 보정한 vruntime을 쌓아 공정성을 계산한다.

fair share
02

다음 태스크 선택

runqueue에서 가장 작은 vruntime 또는 eligible deadline 기준 태스크를 고른다.

pick next
03

그룹 제어

cgroups와 nice 값은 태스크별 CPU 몫을 바꾸어 컨테이너와 사용자 그룹을 제한한다.

weight
04

코어 간 이동

NUMA 거리와 cache locality를 고려해 바쁜 CPU와 한가한 CPU 사이 부하를 조정한다.

balance
CFS
공정성을 중심으로 CPU 시간을 나누는 일반 목적 스케줄러다. 낮은 vruntime 태스크가 먼저 선택되어 장기적으로 몫이 맞춰진다.
interactive workloads
EEVDF
eligible virtual deadline으로 지연 시간 요구를 더 직접 반영한다. 공정성과 latency를 함께 다루기 위한 Linux의 새 방향이다.
latency aware
NUMA
CPU가 한가해도 먼 메모리 노드로 옮기면 성능이 떨어질 수 있다. affinity, migration cost, cache warmth를 함께 본다.
locality matters

현대 스케줄링 관찰 지점

대기 시간 평균 CPU 사용률보다 interactive task의 wakeup latency를 본다.
격리 cgroups 제한이 특정 서비스의 CPU 독점을 막는지 확인한다.
이동 비용 NUMA 환경에서는 migration 증가가 cache miss와 함께 나타나는지 본다.

관찰 키워드

runqueue -> vruntime/virtual deadline -> pick_next_task
load balance -> affinity -> NUMA locality