리눅스에서 프로세스 스케줄링 방식 변경 가능한가요?

kingofkobo의 이미지


요세 OS를 다시 한번 공부해보고 있는데요. 졸업한지 좀 되니까 잘 기억이 안나서.. ^^

근데 학교 다닐때야 이런것들이 있구나 하고 그냥 넘어갔는데.

실무를 하는 입장이 되니까 궁금한 것들이 있네요.

서론은 그만 자르고....

프로세스 스케줄링 방식에 보면 선점 비선점 부터 시작해서 FCFS / SJF 등등 여러가지 방식이 있자나요?

이제 이건 이론적인 이야기이고 실제 리눅스에서 어떠한 방식을 사용하는지?

또 스케줄링 방식을 커널 옵션에서 변경이 가능한지?

궁금하네요. ^^

rgbi3307의 이미지

리눅스 커널은 크게 2가지 방식으로 프로세스를 스케쥴링합니다.

1. Real Time Scheduling(RTS)
2. Completely Fair Scheduling(CFS)

커널소스 linux/include/linux/sched.h 파일에 보면 스케쥴정책이 다음과 같이 정의되어 있습니다.
32 /*
33 * Scheduling policies
34 */
35 #define SCHED_NORMAL 0
36 #define SCHED_FIFO 1
37 #define SCHED_RR 2
38 #define SCHED_BATCH 3
39 /* SCHED_ISO: reserved but not implemented yet */
40 #define SCHED_IDLE 5

위에서 SCHED_NORMAL, SCHED_FIFO, SCHED_RR는 Real Time Scheduling(RTS)에 해당하고
SCHED_BATCH, SCHED_IDLE는 Completely Fair Scheduling(CFS)에 해당합니다.

RTS는 리눅스 커널 초기부터 도입된 스케쥴링 정책이고
프로세스 우선순위(prio)에 따라서 plist 자료구조를 통하여 관리하고,
CFS는 2007년도(커널2.6 이후인듯) 부터 도입되었고
프로세스 대기시간을 공평(Fair)하게 관리하기 위해서 rbtree 자료구조가 도입된듯 합니다.
요즘 저도 이것들을 좀 분석해 보고 있네요...

아래는 스케쥴링을 담당하는 커널소스의 처음 헤더부분의 주석입니다.
(한글은 제가 번역해본 것임)

  1 /*
  2  *  kernel/sched.c
  3  *
  4  *  Kernel scheduler and related syscalls
  5  *
  6  *  Copyright (C) 1991-2002  Linus Torvalds
  7  *
  8  *  1996-12-23  Modified by Dave Grothe to fix bugs in semaphores and
  9  *              make semaphores SMP safe
 
		    >>세마포어에 관한 버그를 Dave Grothe가 수정함.
 
 10  *  1998-11-19  Implemented schedule_timeout() and related stuff
 11  *              by Andrea Arcangeli
 
		    >>Andrea Arcangeli에 의해서 schedule_timeout()이 구현됨.
 
 12  *  2002-01-04  New ultra-scalable O(1) scheduler by Ingo Molnar:
 13  *              hybrid priority-list and round-robin design with
 14  *              an array-switch method of distributing timeslices
 15  *              and per-CPU runqueues.  Cleanups and useful suggestions
 16  *              by Davide Libenzi, preemptible kernel bits by Robert Love.
 
		    >>Ingo Molnar에 의한 새로운 ultra-scalable O(1) 스케쥴러:
			distributing timeslices와 per-CPU runqueues를 통한 array-switch 방식의
			hybrid priority-list 와 round-robin 설계.
		    >>Davide Libenzi가 명확하고 유용한 것들을 제안.
		    >>Robert Love가 선점형 커널 제안.
 
 17  *  2003-09-03  Interactivity tuning by Con Kolivas.
 
		    >>Con Kolivas에 의한 Interactivity tuning(대화형 성능향상)
 
 18  *  2004-04-02  Scheduler domains code by Nick Piggin
 
 19  *  2007-04-15  Work begun on replacing all interactivity tuning with a
 20  *              fair scheduling design by Con Kolivas.
 
		    >>Con Kolivas에 의해서 fair scheduling이 설계되어 대화형 성능향상으로 교체되기 시작.
 
 21  *  2007-05-05  Load balancing (smp-nice) and other improvements
 22  *              by Peter Williams
 
		    >>Peter Williams에 의해서 Load balancing (smp-nice) 및 몇가지 기능 향상.
 
 23  *  2007-05-06  Interactivity improvements to CFS by Mike Galbraith
		    >>Mike Galbraith에 의해서 CFS 기능 향상
 
 24  *  2007-07-01  Group scheduling enhancements by Srivatsa Vaddagiri
 
 25  *  2007-11-29  RT balancing improvements by Steven Rostedt, Gregory Haskins,
 26  *              Thomas Gleixner, Mike Kravetz
 27  */

위의 주석을 보면, CFS는 2007년도에 Con Kolivas가 설계하여 적용했고
Mike Galbraith가 좀더 기능을 향상 했음을 알 수 있습니다.
2007년도에 많은 변화가 있었네요....

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

choissi의 이미지

로버트 러버가 쓴 리눅스 커널 책 보시면 좋을듯
http://www.informit.com/articles/article.aspx?p=101760

울랄라~ 호기심 천국~!!
http://www.ezdoum.com