Learning
토픽 19 / 85·CPU 스케줄링

Linux CFS 스케줄러 (Completely Fair Scheduler)

Linux CFS 스케줄러 (Completely Fair Scheduler)

Linux의 기본 프로세스 스케줄러로, 가상 런타임(vruntime)을 기반으로 Red-Black 트리에서 가장 적게 실행된 프로세스를 선택하여 공정한 CPU 시간 배분 보장

목적: 공정한 CPU 분배, 대화형 응답성, 확장성, 단순성

특징: 가상 런타임 기반, Red-Black 트리, 가중치(nice), O(log N) 선택

가상 런타임(vruntime): 실제 실행 시간을 가중치로 정규화한 값, 낮을수록 우선

동작 원리

Nice 값과 가중치: nice -20(최우선) ~ +19(최저), 가중치는 1.25배씩 변화

타임슬라이스: 고정 슬라이스 없음, 실행 가능 태스크 수에 따라 동적 조정

그룹 스케줄링(CFS Group Scheduling): cgroup 기반 CPU 대역폭 제어, 컨테이너 격리

대역폭 제어: cpu.cfs_quota_us / cpu.cfs_period_us로 CPU 제한

장점: 공정성 보장, 대화형 응답성, 확장성, 단순한 설계

단점: 실시간 보장 없음, 캐시 지역성 고려 미흡, 오버헤드(RB-Tree)

적용사례: Linux 2.6.23+(2007), 일반 워크로드, 서버, 데스크톱

비교: CFS(공정/vruntime) vs O(1)(우선순위/배열) vs EEVDF(가상데드라인/최신)

연관: 스케줄링, Red-Black Tree, cgroup, 가상 런타임, Linux 커널