Post

[OS] Operating System(5-2): Real-time Scheduling

[OS] Operating System(5-2): Real-time Scheduling

๐Ÿ€ ์šด์˜์ฒด์ œ ์ „๊ณต ์ˆ˜์—… ์ •๋ฆฌ

NUMA and CPU Scheduling


๐Ÿ“šNUMA(Non-Uniform Memory Access): ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๊ท ์ผํ•˜์ง€ ์•Š์€ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์„ค๊ณ„

alt text

  • ๊ฐ CPU๊ฐ€ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฐ ์ ‘๊ทผ ์†๋„

๐Ÿ“šNUMA-aware OS:

  1. ๋ฉ”๋ชจ๋ฆฌ ๊ทผ์ ‘์„ฑ ์ตœ์ ํ™”: ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ CPU์— ๊ฐ€๊นŒ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น
  2. ์Šค๋ ˆ๋“œ ๋ฐฐ์น˜ ์ตœ์ ํ™”: ๊ด€๋ จ ์Šค๋ ˆ๋“œ๋“ค์„ ๊ฐ™์€ NUMA ๋…ธ๋“œ์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ  ํšจ์œจ์„ฑ์„ ๋†’์ž„
  3. ๋ฉ”๋ชจ๋ฆฌ ์ด๋™ ์ตœ์†Œํ™”: ๊ฐ€๋Šฅํ•œ ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ด๋™์‹œํ‚ค์ง€ ์•Š๊ณ  ๋™์ผํ•œ ๋…ธ๋“œ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ์œ ์ง€

โœ… NUMA ์‹œ์Šคํ…œ์—์„œ๋Š” load balancing๊ณผ memory access time ์‚ฌ์ด์˜ ๊ท ํ˜•์ด ์ค‘์š”ํ•˜๋‹ค
โ†’ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ตœ์ ํ™”ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋ถ„์‚ฐ๋˜์–ด ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๋ฉด ํŠน์ • ๋…ธ๋“œ์— ์ž‘์—…์ด ์ง‘์ค‘๋  ์ˆ˜ ์žˆ๋‹ค.

Real-time CPU Scheduling


์ผ๋ฐ˜ ์Šค์ผ€์ค„๋ง๊ณผ ์ฐจ์ด์  ์กด์žฌ

  • ์ •ํ•ด์ง„ ์‹œ๊ฐ„(Real-time) ์•ˆ์— ์ž‘์—…์ด ๋๋‚˜์•ผํ•จ ๋ฐ˜๋“œ์‹œ ๋น ๋ฅผ ํ•„์š”๋Š” ์—†๊ณ , ์ •ํ•ด์ง„ ์‹œ๊ฐ„์•ˆ์—๋งŒ ๋๋‚˜๋ฉด ๋˜๋Š” ์Šค์ผ€์ค„๋ง

  • soft real-time system: ํƒ€์ž„ ๋ฐ”์šด๋“œ์•ˆ์— ๋๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅ์„ ํ•˜๋Š” ์‹œ์Šคํ…œ(no guarantee)
    • ์ค‘์š”ํ•œ real-time task์— ์ตœ๊ณ  ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ
  • hard real-time system: ํƒ€์ž„ ๋ฐ”์šด๋“œ์•ˆ์— ๋ฌด์กฐ๊ฑด ๋๋‚ด์•ผํ•˜๋Š” ์‹œ์Šคํ…œ

โŒ ๋”œ๋ ˆ์ด๊ฐ€ ์กด์žฌ(Event latency)

  • ์–ด๋–ค ์‚ฌ๊ฑด(interrupt)์ด ๋ฐœ์ƒ ํ–ˆ์„ ๋•Œ ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ๊นŒ์ง€ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ

  • Event latency = interrupt latency + dispatch latency

โœ…์ง€์—ฐ ์‹œ๊ฐ„์˜ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•:

  1. interrupt latency: ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ์ ๋ถ€ํ„ฐ ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฃจํ‹ด(ISR)์ด ์‹œ์ž‘๋  ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„
    • ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ โ†’ ์ธํ„ฐ๋ŸฝํŠธ ํƒ€์ž… ๊ฒฐ์ • โ†’ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ โ†’ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด ์‹คํ–‰
  2. dispatch latency: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ CPU๋ฅผ ๋‹ค๋ฅธ ์ž‘์—…์œผ๋กœ ๊ต์ฒดํ•  ๋•Œ ์ง€์—ฐ ๋ฐœ์ƒ
    • hard real-time system์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ usec
interrupt latency

alt text

context switch: ํ˜„์žฌ ์ƒํƒœ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์Šค๋ƒ…์Šค๋ฅผ ์ฐ๊ธฐ ์œ„ํ•จ

Dispatch latency

alt text

์ž‘์—…์ด ์‹๋ณ„์ด ๋œ ํ›„ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ๊นŒ์ง€ ์ง€์—ฐ์‹œ๊ฐ„ Dispatch latency: conflicts(Preemption+Release) + dispatch

  • conflict phase:
    • Preemption: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์ด CPU๋ฅผ ๋บ๊ธฐ๋Š” ํ–‰์œ„
    • Release: ํ˜„์žฌ ์ž‘์—…์ด ์–ด๋–ค resource๋ฅผ ์žก๊ณ  ์žˆ์œผ๋ฉด ๋†“๊ฒŒํ•˜๋Š” ํ–‰์œ„

Priority-based Scheduling


  • real-time scheduling์€ ์„ ์ ํ˜• + ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง์ด๋‹ค. ์†Œํ”„ํŠธ ์‹ค์‹œ๊ฐ„๋งŒ ๋ณด์žฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ํ•˜๋“œ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด์— ๋”ํ•ด ๋ฐ๋“œ๋ผ์ธ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”
Periodic Process

๐Ÿ“šPeriodic Process: ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ CPU๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

alt text

t: processing time, d: deadline, p: period
0 โ‰ค t โ‰ค d โ‰ค p periodic task์˜ ๋นˆ๋„(rate)๋Š” 1/p

  • Admission-control algorithm - ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ deadline์„ ์š”์ฒญํ–ˆ์„ ๋•Œ:
    • ๋ฐ›์•„๋“ค์—ฌ์„œ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์ข…๋ฃŒ๋ฅผ ๋ณด์žฅ
    • ๋˜๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฃผ์š” real-time scheduling ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

Rate Monotonic Scheduling


๐Ÿ“šRate Monotonic Scheduling: ์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ •์  ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง
= static priority policy + preemption

  • ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์ˆ˜๋ก priority๊ฐ€ ๋‚ฎ์Œ
  • ์ฃผ๊ธฐโ†“ = ์šฐ์„ ์ˆœ์œ„ โ†‘
  • ์ฃผ๊ธฐโ†‘ = ์šฐ์„ ์ˆœ์œ„ โ†“

  • ๊ฐ€์ •: periodic process์˜ processing time, ์ฆ‰, CPU burst๋Š” ํ•ญ์ƒ ๊ฐ™๋‹ค

alt text

P1: p1=50, t1=20, d1=50
P2: p2=100, t2=35, d1=100

  • P1์˜ ์ฃผ๊ธฐ๊ฐ€ 50์ด๋ฏ€๋กœ 50๋‹จ์œ„๋กœ ๋ฐœ์ƒ๋จ
  • P1์˜ ์ฃผ๊ธฐ๊ฐ€ P2๋ณด๋‹ค ์งง์œผ๋ฏ€๋กœ P1์ด ๋จผ์ € ์‹คํ–‰, P2๊ฐ€ 30๋ฐ–์— ์‹คํ–‰ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ P1์ด ๋“ค์–ด์™€์„œ ์–‘๋ณดํ•ด์คŒ
  • CPU ํ™œ์šฉ๋„ ๊ณ„์‚ฐ:
    • ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ CPU ํ™œ์šฉ๋„ = t/p
    • ์ „์ฒด CPU ํ™œ์šฉ๋„ = ฮฃ(t/p)
    • ์œ„ ์˜ˆ์ œ: 20/50 + 35/100 = 0.4 + 0.35 = 0.75 = 75%
    • โ†’ ์Šค์ผ€์ค„๋ง ๊ฐ€๋Šฅ!

๊ทธ๋Ÿผ deadline์„ ์ง€ํ‚ค์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์— ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?

alt text

  • CPU utilization: 25/30 + 35/80 = 94%
    • 100%๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋ฐ ์™œ ์Šค์ผ€์ค„๋ง์ด ๋ถˆ๊ฐ€ํ•œ๊ฐ€?

โŒ Rate-monotonic scheduling ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ N๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šค์ผ€์ค„๋งํ•  ๋•Œ CPU Utilization์€ ๋‹ค์Œ ์‹์„ ๋„˜์„ ์ˆ˜ ์—†๋‹ค

  • $N(2^(1/N)-1)$
    • N=1, Max Utilization = 1(100%)
    • N=2, Max Utilization = 0.83 (83%)
    • N=infinte, Max Utilization = 0.69 โ†’ N์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ๋‹ค๋ฉด 69%์— ๊ทผ์ ‘ํ•œ๋‹ค.
  • ์ฆ‰ ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” 0.83์„ ๋„˜์–ด์„œ ์Šค์ผ€์ค„๋ง์ด ๋ถˆ๊ฐ€

Earliest Deadline First Scheduling (EDF)


deadline์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ง€ํ‘œ

  • deadline์ด ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Œ
  • deadline์ด ๋ฉ€์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์Œ

โœ…ํŠน์ง•:

  • EDF๋Š” process๊ฐ€ periodic์ผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ CPU burst๊ฐ€ ์ผ์ •ํ•  ํ•„์š”๋„ ์—†๋‹ค.
  • ๋‹ค๋งŒ ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ deadline์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์œผ๋ฉด ๋œ๋‹ค

alt text

P1: p1=50, t1=25, d1=50
P2: p2=80, t2=35, d1=80

  • EDF๋Š” ์ด๋ก ์ ์œผ๋กœ๋Š” optimal ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ†’ CPU utilization์„ 100%๊นŒ์ง€ ๊ฐ€๋Šฅ
  • ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์‹ค์—์„œ๋Š” context switching ๋“ฑ ์ถ”๊ฐ€ ๋น„์šฉ์œผ๋กœ ์ธํ•ด 100%๋ฅผ ์„ฑ์ทจํ•  ์ˆ˜ ์—†๋‹ค

Proportional Share Scheduling


๐Ÿ“šProportional Share Scheduling: CPU ์‹œ๊ฐ„์„ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๊ณต์ •ํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ์‹

โœ…ํŠน์ง•:

  • ์‹œ์Šคํ…œ์—๋Š” T shares(total share) ๊ฐ€ ํ• ๋‹น๋จ
  • ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ N๊ฐœ์˜ ๊ณต์œ (N < T)๋ฅผ ๋ฐ›์Œ
  • ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ N/T ๋น„์œจ๋งŒํผ์˜ ํ”„๋กœ์„ธ์„œ ์‹œ๊ฐ„์„ ๋ณด์žฅ

  • ์˜ˆ์‹œ:
    • T = 100shares
    • Process A: 50shares
    • Process B: 15shares
    • Process C: 20shares
    • โ†’ CPU Utilization = 85%
      • ๋งŒ์•ฝ D๊ฐ€ 30shares๋ฅผ ์š”์ฒญํ•˜๋ฉด ๊ฑฐ๋ถ€๋จ
      • ์ด๋ฏธ ํ• ๋‹น๋œ ๊ณต์œ (85๊ฐœ)์™€ ํ•ฉ์ณ์„œ 100๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋ฏ€๋กœ admission controller๊ฐ€ D์˜ ์š”์ฒญ์„ ๊ฑฐ๋ถ€

POSIX Real-Time Scheduling


๐Ÿ“šPOSIX: ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์—์„œ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€

  1. SCHED_FIFO:
    • FCFS ์ „๋žต์œผ๋กœ ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง
    • ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ ๊ฐ„์—๋Š” ์‹œ๊ฐ„ ๋ถ„ํ• (time-slicing)์ด ์—†์Œ
    • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์„ ์ ํ•  ์ˆ˜ ์žˆ์Œ
  2. SCHED_RR:
    • ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ ๊ฐ„์— ์‹œ๊ฐ„ ๋ถ„ํ• ์ด ๋ฐœ์ƒ
    • RR ๋ฐฉ์‹์œผ๋กœ ๋™์ผ, ์šฐ์„ ์ˆœ์œ„ ์Šค๋ ˆ๋“œ ๊ฐ„ CPU ์‹œ๊ฐ„ ๋ถ„๋ฐฐ
1
2
3
4
5
6
7
// ์Šค๋ ˆ๋“œ ์†์„ฑ์—์„œ ํ˜„์žฌ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๊ฐ€์ ธ์˜ด
pthread_attr_getsched_policy(pthread_attr_t *attr, int *policy)

// ์Šค๋ ˆ๋“œ ์†์„ฑ์— ์Šค์ผ€์ค„๋ง ์ •์ฑ…(policy)์„ ์„ค์ •
// ์ •์ฑ…์œผ๋กœ๋Š” SCHED_FIFO, SCHED_RR, SCHED_OTHER ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉ
// SCHED_OTHER: ๋น„์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
pthread_attr_setsched_policy(pthread_attr_t *attr, int policy)
This post is licensed under CC BY 4.0 by the author.