CFS : Completely fair process scheduling in Linux
CFS는 매우 효율적인 방법으로, 모든 작업에 프로세서 자원을 공정하게 할당한다
cpu bound
라고도 하고, compute bound
라고도 한다.runnable
하며 I/O bound는 주로 blocked
된다fixed timeslice
: 고정된 시간 할당, 특정 프로세스가 일을 다 못 끝내면 다시 스케줄됨.fixed timeslices
& explicit priorities
ex) 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.