Linux CFS

Linux CFS vruntime 비교

CFS는 고정 queue보다 각 task가 받은 가중 시간인 vruntime을 기준으로 다음 실행 대상을 고른다. nice 값과 red-black tree가 이 정책을 구현한다.

01

가장 덜 실행된 task 선택

CFS는 vruntime이 가장 작은 task를 선택해 공정한 진행을 맞춘다.

02

가중치를 반영한다

nice 값이 높은 task는 vruntime 증가가 상대적으로 빠르거나 CPU share가 줄어든다.

03

실행 후 다시 배치한다

task가 실행된 만큼 vruntime을 갱신하고 tree 안의 위치를 바꾼다.

vruntime
공정성 좌표 실제 실행 시간을 weight로 보정한 값이다.
작을수록 덜 받은 task다.
nice
가중치 입력 사용자 우선순위 힌트가 CPU share 계산에 반영된다.
절대 보장이 아니다.
rbtree
정렬 구조 vruntime 기준으로 task를 정렬해 왼쪽 끝을 빠르게 찾는다.
ready queue 구현 세부다.
latency
응답성 목표 sched_latency와 min_granularity가 slice 계산에 영향을 준다.
너무 작은 slice는 overhead를 키운다.

선택 기준 · 가중치 · 튜닝 점검

CFS 지연 비교 CFS가 priority queue가 아니라 vruntime 순서를 기준으로 고른다는 점을 설명하는가.
가중치 nice가 task의 vruntime 증가와 CPU share에 어떻게 영향을 주는가.
튜닝 latency와 granularity를 바꾸면 context switch와 응답성이 어떻게 달라지는가.

선택 직관

pick task with smallest vruntime
run for slice
update vruntime
insert back into rb-tree