Search
๐Ÿ’พ

06 : Multiprocessor Scheduling

course
last review
2023/04/15
mastery
none
progress
not started
date
2023/03/21
4 more properties
Previous chapter

Header 1

SMP๋Š” Symmetric Multiprocessing์˜ ์•ฝ์–ด๋กœ ๋Œ€์นญํ˜• ๋‹ค์ค‘ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. SMP ์‹œ์Šคํ…œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ํ•œ ๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ๋Š” ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์ธํ•ด SMP ์‹œ์Šคํ…œ์€ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ SMP ์‹œ์Šคํ…œ์—์„œ๋Š” ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ์™€ ๊ฐ™์€ ๊ณ ๋ คํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
NUMA๋Š” Non-Uniform Memory Access๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, SMP์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ์™€ ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ๋น ๋ฅด์ง€๋งŒ ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, NUMA ์‹œ์Šคํ…œ์—์„œ๋Š” ํ”„๋กœ์„ธ์„œ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์—…์„ ์Šค์ผ€์ค„๋งํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Single-Queue Scheduling

Single-Queue Multiprocessor Scheduling (SQMS)๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ํ•˜๋‚˜์˜ ํ์—์„œ ์ž‘์—…์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๊ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ํ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ์›์ž์ ์œผ๋กœ ๋ณดํ˜ธ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, SQMS๋Š” SMP ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. SQMS๋Š” ๊ฐ ํ”„๋กœ์„ธ์„œ์˜ ๊ณต์ •ํ•œ ๋ถ„๋ฐฐ๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ, ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ผ์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Multi-Queue Scheduling

Linux CPU Schedulers

Completely Fair Scheduler (CFS)

vruntime

๊ฐ ํƒœ์Šคํฌ๋Š” virtual runtime์— ๊ธฐ๋ฐ˜ํ•œ R-B ํŠธ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.
Weighted runtime์€ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ nice value(-20~19)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
vruntime์˜ ์—…๋ฐ์ดํŠธ ๋ฐฉ์ •์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
vruntime=vruntime+DeltaExecร—Weight0WeightP\text{vruntime}=\text{vruntime} +\text{DeltaExec}\times \cfrac{Weight_0}{Weight_P}

/proc/<pid>/sched

Priority

prio = nice + 120
โ€ข
CFS : 100~139
โ€ข
0~99๋Š” real-time scheduler๊ฐ€ ์“ด๋‹ค.
nice ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š” renice ์ปค๋งจ๋“œ๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.
โ€ข
์œ ์ €๋Š” nice๋ฅผ -1~-20์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
โ€ข
root ๊ถŒํ•œ๋งŒ ๊ฐ€๋Šฅ

Control Group(cgroup)

Diving into Linux Kernel v5.11.8

โ€ข
Scheduling classes (/kernel/sched/sched.h)
struct sched_class{ void (*enqueue_task) {struct rq *rq, struct task_struct *p, int flags}; void (*dequeue_task) {struct rq *rq, struct task_struct *p, int flags}; ... struct tast_struct *(*pick_next_task)(struct rq *rq); ... int (*balance) (struct rq *rq, struct task_struct *prev, struct rq_flags *rf); ... }
C
๋ณต์‚ฌ
Next chapter