7 min read

OSTEP 10 Multi-CPU Scheduling

Table of Contents

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง์˜ ๊ธฐ๋ณธ์„ ์•Œ์•„๋ณด์ž. ๋‚˜์ค‘์— ๋ณ‘ํ–‰์„ฑ(concurrency)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ๋‹ค์‹œ ๋ณต์Šตํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

์ตœ๊ทผ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜์˜ ์นฉ์— ๋‚ด์žฅ๋œ ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋Œ€์ค‘ํ™” ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „ํ†ต์ ์ธ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ์˜ค์ง ํ•˜๋‚˜์˜ CPU๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ‘๋ ฌ(parallel) ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๋™์‹œ์„ฑ(Concurrency) vs ๋ณ‘๋ ฌ์„ฑ(Parallelism) ์ฐธ๊ณ  OSTEP 10 Multi-CPU Scheduling-1688397745618.jpeg

๋ณดํ†ต ์“ฐ๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์ฝ”์–ด์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด ์ด๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

์šด์˜์ฒด์ œ๋„ ์ด์— ๋Œ€์‘ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด CPU ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์€ ๋‹จ์ผ CPUํ™˜๊ฒฝ์—์„œ ๋…ผ์˜๋œ ๋‚ด์šฉ์ด๋‹ค. ์ด๋ฅผ ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋„๋ก ํ™•์žฅํ•ด๋ณด์ž. ํ•ต์‹ฌ ์งˆ๋ฌธ : ์—ฌ๋Ÿฌ CPU์— ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์Šค์ผ€์ค„ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€

1. ๋ฐฐ๊ฒฝ: ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ๊ตฌ์กฐ

๋‹จ์ผ CPU ํ•˜๋“œ์›จ์–ด์™€ ๋ฉ€ํ‹ฐ CPU ํ•˜๋“œ์›จ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€? ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์„œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ , ๊ทธ๋ฆฌ๊ณ  ํ•˜๋“œ์›จ์–ด ์บ์‹œ์˜ ์‚ฌ์šฉ ๋ฐฉ์‹์—์„œ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๊ธด ์–ด๋ ค์šฐ๋‹ˆ, ๊ฐœ๋…์ ์œผ๋กœ๋งŒ ๋‹ค๋ค„๋ณด์ž.

๋‹จ์ผ CPU ์‹œ์Šคํ…œ์—๋Š” ํ•˜๋“œ์›จ์–ด ์บ์‹œ ๊ณ„์ธต์ด ์กด์žฌํ•œ๋‹ค. ์บ์‹œ๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•˜๋Š” ์ž‘๊ณ  ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ์บ์‹œ๋Š” ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋Œ€์‹  ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋ฉด ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์€ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์บ์‹œ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

์บ์‹œ๋Š” ์ง€์—ญ์„ฑ(locality)์— ๊ธฐ๋ฐ˜ํ•œ๋‹ค.

  • ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ(temporal locality): ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ ์ ‘๊ทผ๋˜๋ฉด ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ๋‹ค์‹œ ์ ‘๊ทผ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค. ex) ๋ฃจํ”„์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ ‘๊ทผ๋˜๋Š” ๋ณ€์ˆ˜
  • ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ(spatial locality): ํ”„๋กœ๊ทธ๋žจ์ด ์ฃผ์†Œ x์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋ฉด, x ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ ‘๊ทผ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค. ex) ์ „์ฒด ๋ฐฐ์—ด์„ ์ฐจ๋ก€๋Œ€๋กœ ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

OSTEP 10 Multi-CPU Scheduling-1688409586302.jpeg

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์— ์—ฌ๋Ÿฌ CPU๊ฐ€ ์กด์žฌํ•˜๊ณ , ํ•˜๋‚˜์˜ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

CPU 1์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ฃผ์†Œ A์— ์จ์žˆ๋Š” ๊ฐ’ D๋ฅผ ์ฝ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๊ฐ’ D๋ฅผ ์ฝ๊ณ  ๊ฐ’์„ Dโ€™์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด ๋•Œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ์บ์‹œ์— Dโ€™ ๊ฐ’์„ ์“ฐ๊ณ  ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋‚˜์ค‘์— ๋ฐ˜์˜ํ•œ๋‹ค. ์ด ๋•Œ CPU 2์—์„œ ์ฃผ์†Œ A์˜ ๊ฐ’์„ ์ฝ์œผ๋ฉด Dโ€™๊ฐ€ ์•„๋‹Œ D๋ฅผ ์ฝ๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ (cache coherence) ๋ผ๊ณ  ํ•œ๋‹ค. ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ? ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณ„์† ๊ฐ์‹œํ•˜๊ณ , ๊ด€๋ฆฌํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐฑ์‹ ํ•  ๋•Œ ๊ณต์œ ๋˜๋„๋ก, ๋ฒ„์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ๋ฒ„์Šค ์Šค๋ˆ„ํ•‘ ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฒ„์Šค ์Šค๋ˆ„ํ•‘

์บ์‹œ๊ฐ€ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฒ„์Šค์˜ ํ†ต์‹  ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋‹ค, ์บ์‹œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฌดํšจํ™” ์‹œํ‚ค๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์บ์‹œ์— ๊ธฐ๋กํ•œ๋‹ค.

2. ๋™๊ธฐํ™”

์บ์‹œ๊ฐ€ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, ์šด์˜์ฒด์ œ๋Š” ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

CPU๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ตฌ์กฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ, ์˜ฌ๋ฐ”๋ฅธ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฝ๊ณผ ๊ฐ™์€ ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์ด ์‚ฌ์šฉ๋œ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. OSTEP 10 Multi-CPU Scheduling-1688410677868.jpeg ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ๋‘ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋ฃจํ‹ด์œผ๋กœ ์ง„์ž…ํ–ˆ์„ ๋•Œ, tmptmp ํฌ์ธํ„ฐ์—๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ธฐ๋ก๋˜๊ณ , ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ํ•ด์ œํ•˜๊ฒŒ ๋œ๋‹ค. ๋‘ ๋ฒˆ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ, ํ•œ ๋ฒˆ๋งŒ ์ง€์›Œ์กŒ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ๋ฝ์„ ๊ฑธ์–ด์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ„๋‹จํ•œ mutex๋ฅผ ํ• ๋‹นํ•˜๊ณ  (pthread_mutex_t m;) ๋ฃจํ‹ด์˜ ์‹œ์ž‘์— lock(&m), ๋งˆ์ง€๋ง‰์— unlock(&m) ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ CPU์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก, ๋™๊ธฐํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๋Š” ์—ฐ์‚ฐ์€ ๋งค์šฐ ๋А๋ ค์ง„๋‹ค.

3. ์บ์‹œ ์นœํ™”์„ฑ

CPU์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ํ•ด๋‹น CPU ์บ์‹œ์™€ TLB์— ์ƒ๋‹นํ•œ ์–‘์˜ ์ •๋ณด๋ฅผ ์˜ฌ๋ ค ๋†“๋Š”๋ฐ, ์ด ๋•Œ๋ฌธ์— ๋‹ค์Œ ๋ฒˆ์— ์‹คํ–‰ ๋  ๋•Œ ๋™์ผํ•œ CPU์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค. ํ•ด๋‹น CPU ์บ์‹œ์— ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์บ์‹œ ์ผ๊ด€์„ฑ ํ”„๋กœํ† ์ฝœ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ CPU์—์„œ ์‹คํ–‰๋˜๋”๋ผ๋„ ์ œ๋Œ€๋กœ ์‹คํ–‰์€ ๋˜๊ฒ ์ง€๋งŒ, ๋‹ค๋ฅธ CPU์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์บ์‹œ์— ๋‹ค์‹œ ํƒ‘์žฌํ•ด์•ผ ํ•œ๋‹ค.

CPU ์บ์‹œ(CPU Cache) ๋Š” CPU์™€ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ์‚ฌ์ด์— ์œ„์น˜ํ•˜์—ฌ, CPU๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ๋†“๋Š” ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. CPU๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ, ๋จผ์ € CPU ์บ์‹œ์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ CPU ์บ์‹œ์— ์žˆ์œผ๋ฉด โ€˜์บ์‹œ ํžˆํŠธ(Cache Hit)โ€˜๋ผ๊ณ  ํ•˜๋ฉฐ, ์—†์œผ๋ฉด โ€˜์บ์‹œ ๋ฏธ์Šค(Cache Miss)โ€˜๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐ˜๋ฉด, TLB(Translation Lookaside Buffer) ๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ€์†ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์บ์‹œ์ด๋‹ค. CPU๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋จผ์ € TLB๋ฅผ ์กฐํšŒํ•œ๋‹ค. TLB์— ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด โ€˜TLB ํžˆํŠธโ€™๋ผ๊ณ  ํ•˜๊ณ , ์—†์œผ๋ฉด โ€˜TLB ๋ฏธ์Šคโ€™๋ผ๊ณ  ํ•œ๋‹ค.

๋‘ ๊ธฐ์ˆ  ๋ชจ๋‘ CPU์˜ ์ž‘์—…์„ ๊ฐ€์†ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์ด์ง€๋งŒ, ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์™€ ๊ทธ ์—ญํ• ์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. CPU ์บ์‹œ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด ๋ฐ์ดํ„ฐ๋Š” CPU๊ฐ€ ์ง์ ‘ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฐ˜๋ฉด์—, TLB๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ์™€ ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ฐ„์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ด ์ •๋ณด๋Š” CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, CPU ์บ์‹œ๋Š” โ€˜๋ฌด์—‡โ€™์„ ์ €์žฅํ•˜๋Š” ๋ฐ˜๋ฉด, TLB๋Š” โ€˜์–ด๋””์—โ€™ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

4. ๋‹จ์ผ ํ ์Šค์ผ€์ค„๋ง

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์˜ ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ์—์„œ ํ•˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ, ๊ทธ๋Œ€๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๋‹จ์ผ ํ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง(single queue multiprocessor scheduling, SQMS) ์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

์•„์ฃผ ๋‹จ์ˆœํ•˜๋‹ค. CPU๊ฐ€ 1๊ฐœ์ผ ๋•Œ๋Š” ์ž‘์—…์„ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•ด์„œ ์‹คํ–‰ํ–ˆ๊ณ , CPU๊ฐ€ 2๊ฐœ์ผ ๋•Œ๋Š” ์ž‘์—…์„ ๋‘๊ฐœ์”ฉ ์„ ํƒํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ ์ด ์žˆ๋‹ค.

  1. ํ™•์žฅ์„ฑ (scalability) ๊ฒฐ์—ฌ: ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋‹ค์ˆ˜์˜ CPU์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ์— ๋ฝ์„ ์‚ฝ์ž…ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์‹คํ–‰์‹œํ‚ฌ ๋‹ค์Œ ์ž‘์—…์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค(๋™์‹œ์— ๊ฐ™์€ ์ž‘์—… ๊ณ ๋ฅด๋ฉด?). CPU ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๋ฝ์€ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ์ €ํ•˜์‹œํ‚จ๋‹ค.
  2. ์บ์‹œ ์นœํ™”์„ฑ (cache affinity): ๊ฐ CPU๋Š” ๊ณต์œ  ํ์—์„œ ๋‹ค์Œ ์ž‘์—…์„ ์„ ํƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์ž‘์—…์€ CPU๋ฅผ ์˜ฎ๊ฒจ๋‹ค๋‹ˆ๊ฒŒ ๋œ๋‹ค. OSTEP 10 Multi-CPU Scheduling-1688411970608.jpeg ํŠน์ • ์ž‘์—…๋“ค์— ๋Œ€ํ•ด์„œ ์บ์‹œ ์นœํ™”์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์Šค์ผ€์ค„๋งํ•˜๊ณ , ๋‹ค๋ฅธ ์ž‘์—…๋“ค์€ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ๋กœ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์ •์ฑ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง„๋‹ค. OSTEP 10 Multi-CPU Scheduling-1688412107270.jpeg

5. ๋ฉ€ํ‹ฐ ํ ์Šค์ผ€์ค„๋ง

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์‹œ์Šคํ…œ์€ CPU๋งˆ๋‹ค ํ๋ฅผ ํ•˜๋‚˜์”ฉ ๋‘”๋‹ค. ์ด ๋ฐฉ์‹์„ ๋ฉ€ํ‹ฐ ํ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง(multi-queue multiprocessor scheduling, MQMS)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ฐ๊ฐ์˜ ํ๋Š” ๋ผ์šด๋“œ ๋กœ๋นˆ๊ฐ™์€ ํŠน์ • ์Šค์ผ€์ค„๋ง ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค. ์ž‘์—…์ด ์—ฌ๋Ÿฌ ์Šค์ผ€์ค„๋ง ํ ์ค‘ ํ•˜๋‚˜์— ๋ฐฐ์น˜๋œ๋‹ค.

OSTEP 10 Multi-CPU Scheduling-1688412265974.jpeg

Q0Q0์— AA, CC๊ฐ€ ๋ฐฐ์น˜๋˜์—ˆ๊ณ , Q1Q1์— BB, DD๊ฐ€ ๋ฐฐ์น˜๋˜์—ˆ๋‹ค.

OSTEP 10 Multi-CPU Scheduling-1688412327426.jpeg

๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์ด๋ผ๋ฉด ์ด๋ ‡๊ฒŒ ์Šค์ผ€์ค„๋ง ๋  ๊ฒƒ์ด๋‹ค.

SQMS์— ๋น„ํ•ด ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค. CPU ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ํ์˜ ๊ฐœ์ˆ˜๋„ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ๋ฝ์— ๋Œ€ํ•œ ๊ฑฑ์ •์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋˜ MQMS๋Š” ์บ์‹œ ์นœํ™”์ ์ด๋‹ค. ์ž‘์—…์ด ๊ฐ™์€ CPU์—์„œ ๊ณ„์† ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ ๊ณ„์† ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ MQMS๋Š” ์›Œํฌ๋กœ๋“œ์˜ ๋ถˆ๊ท ํ˜• (load imbalance) ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

OSTEP 10 Multi-CPU Scheduling-1688412473870.jpeg

์ด๋ ‡๊ฒŒ Q0Q0์— ์žˆ๋Š” ๋ชจ๋“  ์ž‘์—…๋“ค์ด ์ข…๋ฃŒ๋œ๋‹ค๋ฉด

OSTEP 10 Multi-CPU Scheduling-1688413591826.jpeg

CPU 0์€ ์ผ์„ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…์„ ๋‹ค๋ฅธ CPU๋กœ ์ด์ฃผ (migration) ์‹œํ‚ด์œผ๋กœ์จ ์›Œํฌ๋กœ๋“œ์˜ ๊ท ํ˜•์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

OSTEP 10 Multi-CPU Scheduling-1688412633462.jpeg

Q0Q0์— ์ž‘์—…์ด ํ•˜๋‚˜, Q1Q1์— ์ž‘์—…์ด ๋‘ ๊ฐœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด์ฃผ ์—†์ด ๊ทธ๋ƒฅ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ž‘์—… A๊ฐ€ ๋‚จ๋“ค๋ณด๋‹ค 2๋ฐฐ์˜ CPU ์ž์›์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค.

OSTEP 10 Multi-CPU Scheduling-1688412683555.jpeg

์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์—…์„ ์ง€์†์ ์œผ๋กœ ์ด์ฃผ์‹œ์ผœ, ์›Œํฌ๋กœ๋“œ์˜ ๊ท ํ˜•์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. A,B,DA, B, D ๋ชจ๋‘ 8๋ฒˆ์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ๋ฐ›์•˜๋‹ค. ์ž‘์—…์ด ์ ๊ฒŒ ํ• ๋‹น๋œ ํ๊ฐ€, ๋‹ค๋ฅธ ํ๋ฅผ ๊ฐ€๋” ๊ฒ€์‚ฌํ•œ๋‹ค. ์ž‘์—…์ด ๋งŽ๋‹ค๋ฉด, ์ž‘์—…์„ ๊ฐ€์ ธ์™€์„œ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

6. Linux ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋Ÿฌ

Linux์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ O(1) ์Šค์ผ€์ค„๋Ÿฌ, Completely Fair Scheduler(CFS), ๊ทธ๋ฆฌ๊ณ  BFS ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์žˆ๋‹ค. ์ด๋“ค ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํŠน์„ฑ๊ณผ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • O(1) ์Šค์ผ€์ค„๋Ÿฌ: ์ด๋Š” ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์œผ๋กœ, ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ž‘์—…์„ ์„ ํƒํ•œ๋‹ค. ์ƒํ˜ธ์ž‘์šฉ์„ ์šฐ์„ ์‹œํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
  • CFS: ์ด๋Š” ๊ฒฐ์ •๋ก ์ ์ธ ๋น„๋ก€๋ฐฐ๋ถ„ ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ค„๋งํ•œ๋‹ค. ๋ณดํญ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— ๊ฐ€๊น๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • BFS: ์ด๋Š” ์œ ์ผํ•˜๊ฒŒ ๋‹จ์ผ ํ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋น„๋ก€๋ฐฐ๋ถ„ ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ค„๋งํ•œ๋‹ค. ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ Earliest Eligible Virtual Deadline First(EEVDF)์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ๋‹ค.

7. ์š”์•ฝ

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง์—๋Š” ํฌ๊ฒŒ ๋‹จ์ผ ํ ๋ฐฉ์‹๊ณผ ๋ฉ€ํ‹ฐ ํ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • ๋‹จ์ผ ํ ๋ฐฉ์‹: ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์›Œํฌ๋กœ๋“œ์˜ ๊ท ํ˜•์„ ์ž˜ ๋งž์ถ”๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋งŽ์€ ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ํ™•์žฅ์„ฑ๊ณผ ์บ์‹œ ์นœํ™”์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค.
  • ๋ฉ€ํ‹ฐ ํ ๋ฐฉ์‹: ํ™•์žฅ์„ฑ์ด ์ข‹๊ณ  ์บ์‹œ ์นœํ™”์„ฑ์„ ์ž˜ ๋‹ค๋ฃจ๋Š” ๋ฐ˜๋ฉด, ์›Œํฌ๋กœ๋“œ์˜ ๋ถˆ๊ท ํ˜•์— ์ทจ์•ฝํ•˜๊ณ  ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๋‹ค.

OSTEP ๊ต์žฌ ์ฐธ๊ณ