[OS] Linux CFS scheduler

kihongsi·2022년 6월 14일
0

OS

목록 보기
1/1

CFS?

Completely Fair Scheduler 즉, 완벽하게 공정한 스케줄러라는 의미

Linux 커널 2.6.23 버전 이후 적용된 기본 스케줄러

주요 개념

timeslice

스케줄러가 프로세스에게 부여한 실행 시간(time quantum)
스케줄러는 I/O interrupt, Timer interrupt 등 시스템 인터럽트가 발생했을 때 각 프로세스에게 남은 타임슬라이스를 체크한다.

preemptive scheduling

각 프로세스가 가지고 있는 timeslice가 0이 되었을 경우, 스케줄러는 해당 프로세스의 struct thread_info 구조체의 TIF_NEED_RESCHED 플래그를 설정함으로써 선점 스케줄링 대상으로 지정한다. 이후 문맥 교환이 일어난다.

priority

스케줄러는 다음에 실행할 프로세스를 선택하는 기준으로 우선순위를 사용한다.
우선 순위가 높은 프로세스일수록 CPU에서 가장 먼저 실행하며, 더 많은 타임 슬라이스를 할당한다.
리눅스는 우선순위를 총 140단계로 나눈다. (0-99: Real-time process / 100-139: 일반 프로세스)
이렇게 설정된 우선 순위를 기준으로 virtual runtime (가상 실행 시간) 을 설정한다.

vruntime

CFS는 프로세스 실행 밸런스를 조절하기 위해 가상 실행 시간이라는 개념을 사용한다.
가상 실행 시간은 프로세스가 여태까지 실행한 시간을 정규화한 시간 정보이다.
이 정규화 과정에는 load weight 등과 같은 여러 지표가 고려된다.
또한, CFS는 대기했던 시간에 상응하는 timeslice를 받을 수 있도록 보장한다.(대기자 공평성)

CFS는 ready 상태의 프로세스 중 vruntime이 최소인 프로세스를 다음에 실행할 프로세스로 선택한다.
우선 순위가 높은 프로세스일수록 vruntime이 서서히 증가한다. (실행 확률 증가)

| vruntime += (exec time) x (default weight / process weight)

vruntime이 저장된 자료구조

프로세스의 각 task descriptor 역할을 하는 &se.vruntime 필드에 vruntime 정보를 저장한다.

아..근데 졸려서 나중에 쓸거임

0개의 댓글