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์ ์
๋ฐ์ดํธ ๋ฐฉ์ ์์ ๋ค์๊ณผ ๊ฐ๋ค.
/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