Download presentation
Presentation is loading. Please wait.
Published byHortense Stevenson Modified over 9 years ago
1
Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Operating System 6 주차 - Completely Fair Scheduler (1) - Real-Time Computing and Communications Lab. Hanyang University yjuly0708@hanyang.ac.kr rooterby@gmail.com
2
2 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 2 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Contents Linux Scheduler CFS (Completely Fair Scheduler) CFS Parameters CFS Source code (1) Kernel Functions Foreground & Background “top” command 과제 4 preview
3
3 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 3 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Linux Scheduler
4
4 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 4 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Linux Scheduler Linux Scheduler 는 Scheduler class 라는 이름으로 모듈 화 되어 있다. 각각의 Scheduler class 는 우선순위를 가지고 있다. Task 는 아래의 Scheduler class 중 1 개에 속해서, 해당 알 고리즘에 맞게 동작한다.
5
5 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 5 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS (Completely Fair Scheduler) CFS (Completely Fair Scheduler) Linux kernel version 2.6.23 이후로 기본 스케줄러로 사용되고 있 는 스케줄러 일반적인 여러 task 들에 대해 공정하게 CPU time 을 할당하기 위 해 도입 Basic concept 각각의 task 들이 가지는 weight 에 비례하여 CPU time 을 할당
6
6 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 6 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters CPU’s Run queue Linux 에서 각각의 CPU 는 자신의 run queue 를 가진다. Real-time task 들은 array 로 저장하고 일반적인 task 에 대해서는 Red-black tree 구조를 통해 task 를 저장 /kernel/sched/sched.h -> cfs_rq
7
7 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 7 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters Schedulable Entity 각각의 프로세스들은 자신의 task_struct 에 sched_entity 를 가짐 Task 의 weight 과 같은 linux scheduling 에 필요한 정보를 가지고 있음 /include/linux/sched.h
8
8 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 8 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters Task Priority 각각의 task 는 priority 에 따라서 CPU 를 할당 Priority 값이 작을수록 우선순위가 높다는 것을 의미 Non-real-time priority 의 경우 100 ~ 139 의 값을 가짐 (Nice value : -20 ~ 19, default is 0) Real-time priority 의 경우 0 ~ 99 의 값을 가짐
9
9 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 9 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters Nice value Nice value 란 모든 Unix system 에서 사용되는 표준 Priority. Linux 의 경우 각각의 task 에 대한 time slice 를 nice value 값을 이 용해 할당. kernel/sched/sched.h 에 각 nice value 값에 따른 task weight 값 이 정의되어 있음. Default : 0 (Weight = 1024)
10
10 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 10 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters Timeslice Task 가 preemption 되기 전 CPU 를 통해 수행된 시간 Timeslice 는 각 task 의 weight 에 따라서 proportional 하게 할당 됨
11
11 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 11 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Parameters Virtual Runtime (vruntime) “ideal multitasking” 을 수행하기 위해 제안됨 Nice value = 0 에 해당하는 weight 값과 자신의 weight 값의 상대 적인 비율에 따른 가상의 시간 (=vruntime) 을 계산함. Scheduler 는 vruntime 이 가장 작은 task 를 선택함. Red-black tree leftmost node
12
12 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 12 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Quiz 1. 프로세서가 100ms 동안 실행 한다고 가정하고 같은 nice 값을 가지는 task 가 2 개 (A, B) 존재한다면, 각각의 task 가 가지는 timeslice 는 어떻게 되는가 ? 만약 4 개 라면 ? 2. 프로세서가 100ms 동안 실행하고, nice 0 과 nice5 를 가지는 2 개의 task 가 실행된다. 각각의 task 가 가지는 timeslice 는 어떻게 되겠는가 ? 3. 프로세서가 100ms 동안 실행하고, 같은 nice 값을 갖는 task 가 2 개 있다. 스 케줄러는 20ms 주기로 context switching 을 한다고 가정하자. 60ms 의 시간 이 지났을 때, 각각의 task 가 실제 실행된 시간은 ? 4. 3 의 상황에서 만약 weight 가 3:1 인 task 가 2 개라면 ? 그리고 이때 virtual runtime 의 개념 을 CFS 는 어떻게 사용하는가 ? 5. task 의 nice value 가 작아질 수록 virtual runtime 은 어떻게 되겠는가 ? 그 리고 이때, 어떤 효과가 예상되는가 ?
13
13 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 13 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Overview of Scheduling Flow Timer interrupt 에 의해 CFS 의 scheduling tick 이 동작 각각의 scheduling tick 에 대해 1. 현재 running task 에 대해 virtual runtime 을 update 2. Virtual runtime 과 time slice 를 구한 뒤 (virtual runtime) ≥ (time slice) 를 만족하면, TIF_NEED_RESCHED flag 를 set 3. TIF_NEED_RESCHED 를 check Set 상태이면, run queue 에서 가장 작은 virtual runtime 값을 갖는 task 를 scheduling 함 Red-black tree 에 현재 running task 를 Enqueue Red-black tree 에서 left-most node 를 Dequeue
14
14 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 14 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code scheduler_tick task_tick -> task_tick_fair entity_tick update_curr calc_delta_fair check_preempt_tick sched_slice resched_task set_tsk_need_resched cfs_rq->nr_running > 1 = true? vruntime > time slice YES NO YES NO
15
15 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 15 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code scheduler_tick Timer interrupt 에 의해서 실행 현재 running task 에 대한 정보를 받아 task tick(= task_tick_fair) 을 실행
16
16 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 16 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code task_tick_fair CFS task 들에 대해 scheduling tick 을 수행 현재 task 의 sched_entity 를 받아 entity_tick 호출
17
17 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 17 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code entity_tick CFS 의 schedulable entity 의 정보를 update update_curr 를 호출하여 virtual runtime 을 update check_preempt_tick 를 호출하여 TIF_NEED_RESCHED 의 조건 을 검사
18
18 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 18 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code update_curr 프로세스의 vruntime 값을 갱신
19
19 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 19 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code calc_delta_fair 실제 time slice 값에 대하여 task 의 weight 비율에 따른 vruntime 을 계산 __calc_delta 를 호출하여 vruntime 계산
20
20 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 20 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code check_preempt_tick CFS 의 entity_tick 에 의해서 호출됨 ideal runtime 을 구하기 위해 time slice 를 구하는 sched_slice 함 수 호출 (virtual runtime) > time slice 이면, resched_task 호출
21
21 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 21 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code sched_slice 해당 task 에 대해 time slice 값을 반환 struct load_weight *load 는 cfs_rq 전체의 weight 를 뜻함. se->load.weight 은 현재 task 의 weight 을 뜻함.
22
22 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 22 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr CFS Source code resched_task 해당 task 가 rescheduling 되어야 함을 mark 하는 함수 set_tsk_need_resched 를 호출하여 TIF_NEED_RESCHED 를 set 시킴
23
23 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 23 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Kernel Functions access_ok 사용자 영역의 포인터를 검증하는데 사용되는 커널 함수 Def : int access_ok (type, address, size) Parameters Type : 접근 유형 (VERIFY_READ, VERIFY_WRITE) Address : 사용자 영역의 메모리 블록을 가리키는 포인터 Size : 블록 크기 Return : 성공일 때 0 을 반환 linux/include/asm/uaccess.h 에 정의되어 있음
24
24 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 24 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Kernel Functions copy_to_user, copy_from_user 커널과 유저 영역 사이에서 Data 를 복사 Def unsigned long copy_to_user(*to_user, *from_kernel, data_size) unsigned long copy_from_user(*to_kernel, *from_user, data_size) Parameters *to_user, *from_user : 사용자 영역의 Data pointer *to_kernel, *from_kernel : 커널 영역의 Data pointer Data_size : Data 의 크기
25
25 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 25 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Kernel Functions Example (Kernel code) User 로부터 integer 변수를 받아 커널에서 factorial 계산
26
26 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 26 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Kernel Functions Example (Kernel code) SYSCALL_DEFINE 사용 helloworld.c file 에 다음과 같이 추 가해 보았습니다. 비슷한 목적을 가진 시스템 콜에 대해서 1 개의 파일에 여러 개의 시스템 콜을 구현할 때 사용할 수 있습니다. 상단에 추가적으로 맵핑을 위해 linux/syscalls.h 를 추가해줍니다.
27
27 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 27 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Kernel Functions Example (User code) getfactorial 시스템 콜을 호출해 factorial 계산
28
28 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 28 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Foreground & Background ( 중복 ) 프로세스를 실행하는 방법은 크게 2 가지가 있다. Foreground 기본적으로 모든 프로세스는 foreground 로 실행된다. 키보드와 연결되어 있으며 결과를 직접적으로 스크린 혹은 터미널 창에 출 력한다. 꽤 긴 시간 동안 동작하는 프로그램을 실행시켰을 경우에는 그 시간 동안 터미널을 이용할 수 없게 되므로, 곤란한 경우가 생기게 된다. Background 키보드와 연결되지 않은 상태로 실행된다. 만약 이 프로세스가 키보드 입력을 필요로 할 경우에는, 입력을 기다린다. Background 로 프로세스를 실행하는 것의 장점은 한 프로세스가 동작하 고 있는 동안에도 다른 프로세스를 실행시킬 수 있다는 점이다. $./a.out & 를 통해 백그라운드로 실행할 수 있다.
29
29 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 29 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Foreground & Background ( 중복 ) Example> matrix source code 단순하게 100 x 100 행렬을 10^5 제곱하는 함수. 참고로 아래 프로그램은 input_matrix 의 초기화가 생략되어 있습니다.
30
30 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 30 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Foreground & Background ( 중복 ) Example> Foreground & Background Foreground 실행 -> 프로세스가 종료할 때 까지 다른 작업 못함. Background 실행 -> 다른 작업 가능 “ctrl + z” 프로세스 중지 -> foreground 프로세스 중지
31
31 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 31 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Foreground & Background ( 중복 ) Example> Foreground & Background command “jobs” 현재 실행되고 있는 프로세스들의 상태와, job 번호를 알 수 있다. Background -> Foreground $ fg %job 번호 (ex> fg %2)
32
32 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 32 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Foreground & Background ( 중복 ) Foreground -> Background $ bg %job 번호 foreground 에서 background 로 바꾸려면, 먼저 foreground 로 실행되고 있는 프로세스를 ctrl + z 로 중지 시킨 후 해야 한다.
33
33 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 33 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr “top” command Linux 에서 시스템 사용량을 확인 Usage : $ top [options]
34
34 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 34 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr “top” command Table 필드 정보 PID : 프로세스 ID (PID) USER : 프로세스를 실행시킨 사용자 ID PRI : 프로세스 우선순위 (nice value + 20) NI : task 의 Nice value VIRT : 가상 메모리 사용량 RES : 현재 Page 가 상주하고 있는 크기 (Resident Size) S : 프로세스 상태 (S : sleeping, R : running, W : swapped out process, Z : zombies) %CPU : 프로세스가 사용하는 CPU 사용률 %MEM : 프로세스가 사용하는 메모리 사용률 COMMAND : 실행된 명령어
35
35 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 35 Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr 과제 4 Preview Example>
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.