CFS : Completely fair process scheduling in Linux
CFS는 매우 효율적인 방법으로, 모든 작업에 프로세서 자원을 공정하게 할당한다
cpu bound라고도 하고, compute bound라고도 한다.runnable 하며 I/O bound는 주로 blocked 된다fixed timeslice : 고정된 시간 할당, 특정 프로세스가 일을 다 못 끝내면 다시 스케줄됨.fixed timeslices & explicit prioritiesex) target latency = 20ms 일 때, task의 개수가 4개라면 각 task는 5ms의 timeslice를 얻음
*timeslice : context switching 간격
N은 가변적임. 몇몇 프로세스들은 block하거나, block되었던 프로세스들이 runnable하게 되기 때문 따라서 timeslice는 고정적이지 않다.
minimum granularity란, process에 부과된 최소 timeslice이다. 따라서, minimum granularity가 timeslice보다 크면, 시스템은 과부화될 것
context switch는 overhead를 불러일으킴 => CFS는 최소화하려고 함, virtual runtime(vruntime)을 추적해 먼저 실행시키도록 앞으로 가져옴
CFS rescheduling 빈도 계산
target latency(TL)= 20ms
minimum granularity(MG) = 4ms
TL / MG = 20 / 4 = 5
=> 5개의 TASK 허용
만약 task가 5개라면 timeslice는 4ms
이것은 MG와 동일함. (task * MG) = 20ms마다 reschedule 될 것임
interactive task : user input이 많음, I/O bound. 비교적 낮은 vruntime을 가짐 스케줄링 라인의 앞쪽으로 가게 될 것임
SMP(Symmetrical multiprocessing) 지원
- 같은 scheduling policy를 가진 processor가 아니면 따로 분리해서 생각
scheduling group 형성 가능.
- single vruntime을 가짐. (vruntime-sharing)
time-ordered red-black tree아래의 자료를 읽고 요약한 포스팅입니다
CFS: Completely fair process scheduling in Linux
By Marty Kalin
February 5, 2019.