sched(7) - wariua/manpages-ko GitHub Wiki
sched - CPU ์ค์ผ์ค๋ง ๊ฐ์
๋ฆฌ๋ ์ค 2.6.23๋ถํฐ๋ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๊ฐ CFS, ์ฆ "Completely Fair Scheduler"์ด๋ค. CFS ์ค์ผ์ค๋ฌ๊ฐ ์ด์ ์ "O(1)" ์ค์ผ์ค๋ฌ๋ฅผ ๋์ฒดํ์๋ค.
๋ฆฌ๋ ์ค์์๋ CPU ์ค์ผ์ค๋ง ๋์ ๋ฐฉ์๊ณผ ์ ์ฑ , ํ๋ก์ธ์ค (๋ ์ ํํ๋ ์ค๋ ๋) ์ฐ์ ์์๋ฅผ ์ ์ดํ ์ ์๋ ๋ค์ ์์คํ ํธ์ถ๋ค์ ์ ๊ณตํ๋ค.
- nice(2)
- ํธ์ถ ์ค๋ ๋์ ๋์ด์ค ๊ฐ์ ์๋ก ์ค์ ํ๊ณ ์ ๋์ด์ค ๊ฐ์ ๋ฐํ.
- getpriority(2)
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน, ๋๋ ์ง์ ํ ์ฌ์ฉ์๊ฐ ์์ ํ ์ค๋ ๋๋ค์ ๋์ด์ค ๊ฐ ๋ฐํ.
- setpriority(2)
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน, ๋๋ ์ง์ ํ ์ฌ์ฉ์๊ฐ ์์ ํ ์ค๋ ๋๋ค์ ๋์ด์ค ๊ฐ ์ค์ .
- sched_setscheduler(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ๋งค๊ฐ๋ณ์ ์ค์ .
- sched_getscheduler(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ๋ฐํ.
- sched_setparam(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ๋งค๊ฐ๋ณ์ ์ค์ .
- sched_getparam(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ๋งค๊ฐ๋ณ์ ๊ฐ์ ธ์ค๊ธฐ.
- sched_get_priority_max(2)
- ์ง์ ํ ์ค์ผ์ค๋ง ์ ์ฑ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฐ์ ์์ ์ต๋๊ฐ ๋ฐํ.
- sched_get_priority_min(2)
- ์ง์ ํ ์ค์ผ์ค๋ง ์ ์ฑ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฐ์ ์์ ์ต์๊ฐ ๋ฐํ.
- sched_rr_get_interval(2)
- "๋ผ์ด๋ ๋ก๋น" ์ค์ผ์ค๋ง ์ ์ฑ ์ผ๋ก ์ค์ผ์ค ํ๋ ์ค๋ ๋๋ค์ ์ฐ๋ ๋จ์ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ.
- sched_yield(2)
- ํธ์ถ์๊ฐ CPU๋ฅผ ํฌ๊ธฐํด์ ์ด๋ค ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ๋๊ฒ ํ๊ธฐ.
- sched_setaffinity(2)
- (๋ฆฌ๋ ์ค ์ ์ฉ) ์ง์ ํ ์ค๋ ๋์ CPU ์นํ์ฑ ์ค์ .
- sched_getaffinity(2)
- (๋ฆฌ๋ ์ค ์ ์ฉ) ์ง์ ํ ์ค๋ ๋์ CPU ์นํ์ฑ ์ป๊ธฐ.
- sched_setattr(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ๋งค๊ฐ๋ณ์ ์ค์ . ์ด (๋ฆฌ๋ ์ค ์ ์ฉ) ์์คํ ํธ์ถ์ sched_setscheduler(2)์ sched_setparam(2)์ ํฌ๊ดํ๋ ๊ธฐ๋ฅ์ฑ์ ์ ๊ณตํ๋ค.
- sched_getattr(2)
- ์ง์ ํ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ๋งค๊ฐ๋ณ์ ๊ฐ์ ธ์ค๊ธฐ. ์ด (๋ฆฌ๋ ์ค ์ ์ฉ) ์์คํ ํธ์ถ์ sched_getscheduler(2)์ sched_getparam(2)์ ํฌ๊ดํ๋ ๊ธฐ๋ฅ์ฑ์ ์ ๊ณตํ๋ค.
์ค์ผ์ค๋ฌ๋ ์คํ ๊ฐ๋ฅ ์ค๋ ๋๋ค ์ค CPU๊ฐ ๋ค์์ผ๋ก ๋ฌด์์ ์คํํ ์ง ๊ฒฐ์ ํ๋ ์ปค๋ ๊ตฌ์ฑ ์์์ด๋ค. ๊ฐ ์ค๋ ๋์๋ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ๊ณ ์ (static) ์ค์ผ์ค๋ง ์ฐ์ ์์์ธ sched_priority
๊ฐ ์ฐ๊ณ๋ผ ์๋ค. ์ค์ผ์ค๋ฌ๋ ์์คํ
์ ๋ชจ๋ ์ค๋ ๋๋ค์ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ๊ณ ์ ์ฐ์ ์์์ ๊ธฐ๋ฐํ์ฌ ํ๋จ์ ๋ด๋ฆฐ๋ค.
์ผ๋ฐ ์ค์ผ์ค๋ง ์ ์ฑ
๋ค(SCHED_OTHER
, SCHED_IDLE
, SCHED_BATCH
) ์ค ํ๋๋ก ์ค์ผ์ค ๋๋ ์ค๋ ๋์ ๋ํด์ ์ค์ผ์ค๋ง ํ๋จ์ sched_priority
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. (0์ผ๋ก ์ง์ ๋์ด ์์ด์ผ ํ๋ค.)
์ค์๊ฐ ์ ์ฑ
๋ค(SCHED_FIFO
, SCHED_RR
) ์ค ํ๋๋ก ์ค์ผ์ค๋ง ๋๋ ํ๋ก์ธ์ค๋ 1(๋ฎ์)์์ 99(๋์)๊น์ง ๋ฒ์๋ก sched_priority
๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. (์ซ์๊ฐ ์์ํ๋ฏ ์ค์๊ฐ ์ค๋ ๋๋ ํญ์ ์ผ๋ฐ ์ค๋ ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.) ์ฐธ๊ณ : POSIX.1์์๋ ๊ตฌํ์ฒด๊ฐ ์ค์๊ฐ ์ ์ฑ
์ ์ต์ 32๊ฐ์ ๊ตฌ๋ณ๋๋ ์ฐ์ ์์๋ฅผ ์ง์ํ ๊ฒ์ ์๊ตฌํ๋ฉฐ, ์ด๋ค ์์คํ
๋ค์ ์ด ์ต์ํ๋ง ์ง์ํ๋ค. ์ด์ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์์๋ sched_get_priority_min(2)๊ณผ sched_get_priority_max(2)๋ฅผ ์ฌ์ฉํด ํน์ ์ ์ฑ
์ ์ง์๋๋ ์ฐ์ ์์ ๋ฒ์๋ฅผ ์์๋ด์ผ ํ ๊ฒ์ด๋ค.
๊ฐ๋
์ ์ผ๋ก ์ค์ผ์ค๋ฌ๋ ๊ฐ๋ฅํ ๊ฐ sched_priority
๊ฐ๋ง๋ค ์คํ ๊ฐ๋ฅ ์ค๋ ๋๋ค์ ๋ชฉ๋ก์ ์ ์งํ๋ค. ๋ค์์ผ๋ก ์คํํ ์ค๋ ๋๋ฅผ ์ ํด์ผ ํ๋ฉด ์ค์ผ์ค๋ฌ๋ ๋น์ด ์์ง ์์ ๊ฐ์ฅ ๋์ ๊ณ ์ ์ฐ์ ์์์ ๋ชฉ๋ก์ ์ฐพ์์ ๊ทธ ๋ชฉ๋ก ์ ๋์ ์๋ ์ค๋ ๋๋ฅผ ์ ํํ๋ค.
์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๊ฐ์ ๊ณ ์ ์ฐ์ ์์์ ์ค๋ ๋ ๋ชฉ๋ก ๋ด์์ ์ด๋๋ก ์ค๋ ๋๊ฐ ์ฝ์ ๋๊ณ ๊ทธ ๋ชฉ๋ก ๋ด์์ ์ด๋ป๊ฒ ์ด๋ํ๊ฒ ๋๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
๋ชจ๋ ์ค์ผ์ค๋ง์ ์ ์ ์ ์ด๋ค. ๊ทธ๋์ ๋ ๋์ ๊ณ ์ ์ฐ์ ์์์ ์ค๋ ๋๊ฐ ์คํ ์ค๋น๊ฐ ๋๋ฉด ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋๊ฐ ์ ์ ๋์ด ์๊ธฐ ๊ณ ์ ์ฐ์ ์์์ ๋๊ธฐ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ฒ ๋๋ค. ์ค์ผ์ค๋ง ์ ์ฑ ์ ๊ฐ์ ๊ณ ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์คํ ๊ฐ๋ฅ ์ค๋ ๋๋ค์ ๋ชฉ๋ก ๋ด์์ ์์๋ฅผ ๊ฒฐ์ ํ ๋ฟ์ด๋ค.
SCHED_FIFO
๋ 0๋ณด๋ค ๋์ ๊ณ ์ ์ฐ์ ์์๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ SCHED_FIFO
์ค๋ ๋๊ฐ ์คํ ๊ฐ๋ฅํด์ง๋ฉด ํญ์ ํ์ฌ ์คํ ์ค์ธ SCHED_OTHER
, SCHED_BATCH
, SCHED_IDLE
์ค๋ ๋๋ฅผ ์ฆ์ ์ ์ ํ๊ฒ ๋๋ค. SCHED_FIFO
๋ ์๊ฐ ๋ถํ ์๋ ๋จ์ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ๋ฌ์ด๋ค. SCHED_FIFO
์ ์ฑ
์ผ๋ก ์ค์ผ์ค๋ง ๋๋ ์ค๋ ๋์๊ฒ ๋ค์ ๊ท์น๋ค์ด ์ ์ฉ๋๋ค.
-
์คํ ์ค์ธ
SCHED_FIFO
์ค๋ ๋๊ฐ ๋ ๋์ ์ฐ์ ์์์ ๋ค๋ฅธ ์ค๋ ๋์ ์ํด ์ ์ ๋๋ฉด ์๊ธฐ ์ฐ์ ์์์ ๋ชฉ๋ก ์ ๋์ ๋จธ๋ฌผ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋์ ์ฐ์ ์์์ ์ค๋ ๋๋ค์ด ๋ชจ๋ ๋ค์ ๋ธ๋ก ๋์๋ง์ ์คํ์ ์ฌ๊ฐํ๋ค. -
๋ธ๋ก ๋
SCHED_FIFO
์ค๋ ๋๊ฐ ์คํ ๊ฐ๋ฅํด์ง๋ฉด ์๊ธฐ ์ฐ์ ์์์ ๋ชฉ๋ก ๋์ ์ฝ์ ๋๋ค. -
sched_setscheduler(2), sched_setparam(2), sched_setattr(2), pthread_setschedparam(3), pthread_setschedprio(3) ํธ์ถ ๋๋ฌธ์
pid
๊ฐ ๊ฐ๋ฆฌํค๋ ์คํ ์ค์ด๊ฑฐ๋ ์คํ ๊ฐ๋ฅ์ธSCHED_FIFO
์ค๋ ๋์ ์ฐ์ ์์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ ์ค๋ ๋์ ๋ชฉ๋ก ๋ด ์์น์ ๋ํ ์ํฅ์ ์ค๋ ๋ ์ฐ์ ์์๊ฐ ๋ฐ๋๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.-
์ค๋ ๋์ ์ฐ์ ์์๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒฝ์ฐ ๊ทธ ์ ์ฐ์ ์์์ ๋ชฉ๋ก ๋์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ก ์ธํด ํ์ฌ ์คํ ์ค์ธ ๊ฐ์ ์ฐ์ ์์์ ์ค๋ ๋๋ฅผ ์ ์ ํ ์๋ ์๋ค.
-
์ค๋ ๋์ ์ฐ์ ์์๊ฐ ๋ฐ๋์ง ์๋ ๊ฒฝ์ฐ ์คํ ๋ชฉ๋ก์์์ ์์น๊ฐ ๋ฐ๋์ง ์๋๋ค.
-
์ค๋ ๋์ ์ฐ์ ์์๊ฐ ๋ด๋ ค๊ฐ๋ ๊ฒฝ์ฐ ๊ทธ ์ ์ฐ์ ์์์ ๋ชฉ๋ก ์ ๋์ ๋ค์ด๊ฐ๋ค.
POSIX.1-2008์ ๋ฐ๋ฅด๋ฉด pthread_setschedprio(3) ์ธ์ ๋ฉ์ปค๋์ฆ์ ์ด์ฉํด ์ค๋ ๋ ์ฐ์ ์์๋ฅผ (๋๋ ์ ์ฑ ์) ๋ฐ๊พธ๋ฉด ์ค๋ ๋๊ฐ ๊ทธ ์ฐ์ ์์์ ๋ชฉ๋ก ๋์ ๋ค์ด๊ฐ์ผ ํ๋ค.
-
-
sched_yield(2)๋ฅผ ํธ์ถํ ์ค๋ ๋๊ฐ ๋ชฉ๋ก ๋์ผ๋ก ๊ฐ๋ค.
์ด ์ธ์ ์ด๋ค ์ด๋ฒคํธ๋ ๊ฐ์ ๊ณ ์ ์ฐ์ ์์์ ์คํ ๊ฐ๋ฅ ์ค๋ ๋ ๋๊ธฐ ๋ชฉ๋ก ๋ด์์ SCHED_FIFO
์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋ ์ค๋ ๋๋ฅผ ์ฎ๊ธฐ์ง ์์ ๊ฒ์ด๋ค.
SCHED_FIFO
์ค๋ ๋๋ I/O ์์ฒญ ๋๋ฌธ์ ๋ธ๋ก ๋๊ฑฐ๋, ๋ ๋์ ์ฐ์ ์์์ ์ค๋ ๋์๊ฒ ์ ์ ๋๊ฑฐ๋, sched_yield(2)๋ฅผ ํธ์ถํ ๋๊น์ง ๋๋ค.
SCHED_RR
์ SCHED_FIFO
๋ฅผ ๊ฐ๋จํ ๊ฐ์ ํ ๊ฒ์ด๋ค. ์์์ SCHED_FIFO
์ ๋ํด ๊ธฐ์ ํ ๋ด์ฉ์ด ๋ชจ๋ SCHED_RR
์ ์ ์ฉ๋๋ค. ๋จ, ๊ฐ ์ค๋ ๋๊ฐ ์ต๋๋ก ์ด๋ค ๋จ์ ์๊ฐ(quantum) ๋์๋ง ๋ ์ ์๋ค. SCHED_RR
์ค๋ ๋๊ฐ ๊ทธ ๋จ์ ์๊ฐ ์ด์์ ๊ธฐ๊ฐ ๋์ ๋์ํ์ผ๋ฉด ์๊ธฐ ์ฐ์ ์์์ ๋ชฉ๋ก ๋์ผ๋ก ๊ฐ๊ฒ ๋๋ค. SCHED_RR
์ค๋ ๋๊ฐ ๋ ๋์ ์ฐ์ ์์์ ์ค๋ ๋์๊ฒ ์ ์ ๋์๋ค๊ฐ ๊ทธ ๋ค์ ์คํ์ ์ฌ๊ฐํ๋ฉด ์๊ธฐ ๋ผ์ด๋ ๋ก๋น ๋จ์ ์๊ฐ์์ ๋ง๋ฃ ์ ๋ ๋ถ๋ถ์ ์ฑ์ฐ๊ฒ ๋๋ค. sched_rr_get_interval(2)์ ์ฌ์ฉํด ๋จ์ ์๊ฐ ๊ธธ์ด๋ฅผ ์ป์ด์ฌ ์ ์๋ค.
๋ฒ์ 3.14๋ถํฐ ๋ฆฌ๋
์ค์์๋ ๋ง๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ
(SCHED_DEADLINE
)์ ์ง์ํ๋ค. ์ด ์ ์ฑ
์ ํ์ฌ GEDF(Global Earliest Deadline First; ์ ์ญ ์ต๋จ ๋ง๊ฐ ์ฐ์ )์ CBS(Constant Bandwidth Server; ์ผ์ ๋์ญํญ ์๋ฒ)๋ฅผ ๊ฒฐํฉํด์ ๊ตฌํ๋์ด ์๋ค. ์ด ์ ์ฑ
๊ณผ ๊ด๋ จ ์์ฑ๋ค์ ์ค์ ํ๊ฑฐ๋ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ฆฌ๋
์ค ์ ์ฉ์ธ sched_setattr(2) ๋ฐ sched_getattr(2) ์์คํ
ํธ์ถ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ฐ๋ฐ ํ์คํฌ(sporadic task)๋ ์ผ๋ จ์ ์์ (job)์ด ์๊ณ ๊ฐ ์์ ์ด ์ฃผ๊ธฐ๋น ์ต๋ ํ ๋ฒ์ฉ ํ์ฑํ๋๋ ํ์คํฌ์ด๋ค. ๊ฐ ์์ ์๋ ์๋์ ๋ง๊ฐ ์๊ฐ์ด ์์ด์ ๊ทธ ์ ์ ์คํ์ด ๋๋์ผ ํ๋ฉฐ, ์์ ์คํ์ ํ์ํ CPU ์๊ฐ์ธ ์ฐ์ฐ ์๊ฐ์ด ์๋ค. ์ ์์ ์ ์คํํด์ผ ํด์ ํ์คํฌ๊ฐ ๊นจ์ด๋๋ ๋๋ฅผ ๋์ฐฉ ์๊ฐ์ด๋ผ๊ณ ํ๋ค. (์์ฒญ ์๊ฐ์ด๋ ์ถ๊ณ (release) ์๊ฐ์ด๋ผ๊ณ ๋ ํ๋ค.) ์์ ์๊ฐ์ ํ์คํฌ๊ฐ ์คํ์ ์์ํ๋ ์๊ฐ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ฐฉ ์๊ฐ์ ์๋์ ๋ง๊ฐ ์๊ฐ์ ๋ํด์ ์ ๋์ ๋ง๊ฐ ์๊ฐ์ ์ป๋๋ค.
๋ค์ ๋ํ๊ฐ ์ด ์ฉ์ด๋ค์ ๋ถ๋ช ํ ๋ณด์ฌ ์ค๋ค.
๋์ฐฉ/๊นจ์ด๋จ ์ ๋์ ๋ง๊ฐ ์๊ฐ
| ์์ ์๊ฐ |
| | |
v v v
-----x--------xoooooooooooooooo--------x--------x---
|<- ์ฐ์ฐ ์๊ฐ ->|
|<------- ์๋์ ๋ง๊ฐ ์๊ฐ ------>|
|<--------------- ์ฃผ๊ธฐ ------------------->|
sched_setattr(2)์ ์ด์ฉํด ์ค๋ ๋์ SCHED_DEADLINE
์ ์ฑ
์ ์ค์ ํ ๋ "๋ฐํ์(Runtime)", "๋ง๊ฐ(Deadline)", "์ฃผ๊ธฐ(Period)"๋ผ๋ ์ธ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ ์ ์๋ค. ์ด ๋งค๊ฐ๋ณ์๋ค์ด ์์ ์ธ๊ธํ ์ฉ์ด๋ค๊ณผ ๊ผญ ๋์ํ๋ ๊ฒ์ ์๋๋ค. ์ผ๋ฐ์ ๊ดํ์ ๋ฐํ์์ ํ๊ท ์ฐ์ฐ ์๊ฐ๋ณด๋ค (๊ฒฝ์ฑ ์ค์๊ฐ ํ์คํฌ์๋ ์ต์
์คํ ์๊ฐ๋ณด๋ค) ํฐ ์ด๋ค ๊ฐ์ผ๋ก, ๋ง๊ฐ์ ์๋์ ๋ง๊ฐ ์๊ฐ์ผ๋ก, ์ฃผ๊ธฐ๋ฅผ ํ์คํฌ์ ์ฃผ๊ธฐ๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ SCHED_DEADLINE
์ค์ผ์ค๋ง์์ ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
๋์ฐฉ/๊นจ์ด๋จ ์ ๋์ ๋ง๊ฐ ์๊ฐ
| ์์ ์๊ฐ |
| | |
v v v
-----x--------xooooooooooooooooo--------x--------x---
|<--- ๋ฐํ์ ------->|
|<------------- ๋ง๊ฐ ------------->|
|<--------------- ์ฃผ๊ธฐ -------------------->|
์ธ ๊ฐ์ง ๋ง๊ฐ ์ค์ผ์ค๋ง ๋งค๊ฐ๋ณ์๋ค์ด sched_attr
๊ตฌ์กฐ์ฒด์ sched_runtime
, sched_deadline
, sched_period
ํ๋์ ํด๋นํ๋ค. sched_setattr(2)์ ์ฐธ๊ณ ํ๋ผ. ์ด ํ๋๋ค์์๋ ๋๋
ธ์ด๋ก ๊ฐ์ ๋ํ๋ธ๋ค. sched_period
๋ฅผ 0์ผ๋ก ์ง์ ํ๋ฉด sched_deadline
๊ณผ ๊ฐ๊ฒ ๋๋ค.
์ปค๋์์๋ ๋ค์์ ์๊ตฌํ๋ค.
sched_runtime <= sched_deadline <= sched_period
๋๋ถ์ด ํ์ฌ ๊ตฌํ์์๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ด ์ต์ 1024์ฌ์ผ (์ฆ ๊ตฌํ์ฒด์ ํด์๋์ด๊ธฐ๋ ํ 1๋ง์ดํฌ๋ก์ด ์ด์ง ๋๋ ๊ฐ์ ๋์ด์ผ) ํ๊ณ 2^63๋ณด๋ค ์์์ผ ํ๋ค. ์ด ๊ฒ์ฌ๋ค ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด sched_setattr(2)์ด EINVAL
์ค๋ฅ๋ก ์คํจํ๋ค.
์ง์ ๋ ์๊ธฐ ๋ฐํ์์ ์ด๊ณผํ๋ ค ํ๋ ์ค๋ ๋๋ค์ CBS์์ ์ ์ดํ์ฌ ํ์คํฌ๋ค ๊ฐ์ ๊ฐ์ญ์ด ์๋๋ก ๋ณด์ฅํ๋ค.
๋ง๊ฐ ์ค์ผ์ค๋ง ๋ณด์ฅ์ ์ํด ์ปค๋์์๋ ์ฃผ์ด์ง ์ ์ฝ์์ SCHED_DEADLINE
์ค๋ ๋๋ค์ ์งํฉ์ด ์คํ ๊ฐ๋ฅํ์ง ์์ (์ค์ผ์ค ๊ฐ๋ฅํ์ง ์์) ์ํฉ์ ๋ฐฉ์งํด์ผ ํ๋ค. ๊ทธ๋์ ์ปค๋์์๋ SCHED_DEADLINE
์ ์ฑ
๋ฐ ์์ฑ์ ์ค์ ๋ด์ง ๋ณ๊ฒฝํ ๋ ์น์ธ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค. ์ด ์น์ธ ๊ฒ์ฌ(admission test)์์ ๋ณ๊ฒฝ์ด ์คํ ๊ฐ๋ฅํ์ง ๊ณ์ฐํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด sched_setattr(2)์ด EBUSY
์ค๋ฅ๋ก ์คํจํ๋ค.
์๋ฅผ ๋ค๋ฉด ํ์ฉ๋ฅ ์ดํฉ์ด ์ฌ์ฉ ๊ฐ๋ฅ CPU ์ด๊ฐ์ ์ดํ์ฌ์ผ ํ๋ค. (ํ์ง๋ง ์ด๊ฒ์ผ๋ก ๊ผญ ์ถฉ๋ถํ ๊ฒ์ ์๋๋ค.) ์ค๋ ๋๊ฐ ์ฃผ๊ธฐ๋ง๋ค ์ต๋๋ก ๋ฐํ์๋งํผ ๋ ์ ์์ผ๋ฏ๋ก ์ค๋ ๋์ ํ์ฉ๋ฅ ์ ๋ฐํ์์ ์ฃผ๊ธฐ๋ก ๋๋ ๊ฒ์ด๋ค.
SCHED_DEADLINE
์ ์ฑ
์ ์ค๋ ๋๋ฅผ ์น์ธํ ๋ ๋ณด์ฅํ๋ ์ฌํญ๋ค์ ์ถฉ์กฑํ๊ธฐ ์ํด SCHED_DEADLINE
์ค๋ ๋๋ ์์คํ
์์ (์ฌ์ฉ์๊ฐ ์ ์ด ๊ฐ๋ฅํ) ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ์ค๋ ๋์ด๋ค. ์ด๋ค SCHED_DEADLINE
์ค๋ ๋๊ฐ ์คํ ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋ ์ด๋ค ์ค๋ ๋๋ ์ ์ ํ๊ฒ ๋๋ค.
SCHED_DEADLINE
์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋ ์ค๋ ๋์ fork(2) ํธ์ถ์ ํฌํฌ ์ ์ด๊ธฐํ ํ๋๊ทธ(์๋ ์ฐธ๊ณ )๋ฅผ ์ค์ ํด ๋์ง ์์์ผ๋ฉด EAGAIN
์ค๋ฅ๋ก ์คํจํ๋ค.
SCHED_DEADLINE
์ค๋ ๋๊ฐ sched_yield(2)๋ฅผ ํธ์ถํ๋ฉด ํ์ฌ ์์
์ ๋ด๋๊ณ ์ ์ฃผ๊ธฐ๊ฐ ์์๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
SCHED_OTHER
๋ ๊ณ ์ ์ฐ์ ์์ 0์์๋ง ์ฌ์ฉํ ์ ์๋ค. (์ฆ, ์ค์๊ฐ ์ ์ฑ
ํ์ ์ค๋ ๋๊ฐ ํญ์ SCHED_OTHER
ํ๋ก์ธ์ค๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.) SCHED_OTHER
๋ ํน๋ณํ ์ค์๊ฐ ๋ฉ์ปค๋์ฆ์ด ํ์ํ์ง ์์ ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ํ ๋ฆฌ๋
์ค์ ํ์ค ์๊ณต์ ์ค์ผ์ค๋ฌ์ด๋ค.
๊ณ ์ ์ฐ์ ์์ 0์ ๋ชฉ๋ก์์ ๊ฑฐ๊ธฐ์๋ง ์ ํ๋ ๋์ ์ฐ์ ์์์ ๋ฐ๋ผ ์คํํ ์ค๋ ๋๋ฅผ ๊ณ ๋ฅธ๋ค. ๋์ ์ฐ์ ์์๋ ๋์ด์ค ๊ฐ(์๋ ์ฐธ๊ณ )์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ์ค๋ ๋๊ฐ ์คํ ์ค๋น ์ํ์ธ๋ฐ ์ค์ผ์ค๋ฌ์ ์ํด ์คํ์ด ๊ฑฐ์ ๋๋ ์๊ฐ ๋จ์๋ง๋ค ์ฆ๊ฐํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด SCHED_OTHER
์ค๋ ๋ ์ ์ฒด ์ฌ์ด์ ๊ณต์ ํ ์งํ์ด ๋ณด์ฅ๋๋ค.
๋ฆฌ๋
์ค ์ปค๋ ์์ค ์ฝ๋์์๋ SCHED_OTHER
์ ์ฑ
์ SCHED_NORMAL
์ด๋ผ๊ณ ์ด๋ค.
๋์ด์ค(nice) ๊ฐ์ ์ค์ผ์ค๋ง ํ๋จ ๋ CPU ์ค์ผ์ค๋ฌ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ํธํ๊ฑฐ๋ ๋ถํธํ๋๋ก ์ํฅ์ ์ค ์ ์๋ ์์ฑ์ด๋ค. SCHED_OTHER
๋ฐ SCHED_BATCH
(์๋ ์ฐธ๊ณ ) ํ๋ก์ธ์ค์ ์ค์ผ์ค๋ง์ ์ํฅ์ ์ค๋ค. nice(2), setpriority(2), sched_setattr(2)์ ์ด์ฉํด ๋์ด์ค ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
POSIX.1์ ๋ฐ๋ฅด๋ฉด ๋์ด์ค ๊ฐ์ ํ๋ก์ธ์ค๋ณ ์์ฑ์ด๋ค. ์ฆ, ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ด ํ ๋์ด์ค ๊ฐ์ ๊ณต์ ํด์ผ ํ๋ค. ํ์ง๋ง ๋ฆฌ๋ ์ค์์ ๋์ด์ค ๊ฐ์ ์ค๋ ์ค๋ณ ์์ฑ์ด๋ค. ์ฆ, ๋์ผ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ด ์๋ก ๋ค๋ฅธ ๋์ด์ค ๊ฐ์ ๊ฐ์ง ์๋ ์๋ค.
์ ๋์ค ์์คํ ๋ค ์ฌ์ด์์ ๋์ด์ค ๊ฐ์ ๋ฒ์๋ ๋ค์ํ๋ค. ์ต์ ๋ฆฌ๋ ์ค์์ ๊ทธ ๋ฒ์๋ -20(๋์ ์ฐ์ ์์)์์ +19(๋ฎ์ ์ฐ์ ์์)๊น์ง์ด๋ค. ๋ค๋ฅธ ์ด๋ ์์คํ ์์๋ ๊ทธ ๋ฒ์๊ฐ -20..20์ด๋ค. ์์ฃผ ์ด๊ธฐ์ (๋ฆฌ๋ ์ค 2.0 ์ ์) ๋ฆฌ๋ ์ค ์ปค๋์์๋ ๋ฒ์๊ฐ -๋ฌดํ..15์๋ค.
๋์ด์ค ๊ฐ์ด SCHED_OTHER
ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ์๋์ ์ค์ผ์ค๋ง์ ์ํฅ์ ์ฃผ๋ ์ ๋๋ ์ ๋์ค ์์คํ
์ข
๋ฅ์ ๋ฆฌ๋
์ค ์ปค๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค์ํ๋ค.
์ปค๋ 2.6.23์ CFS ์ค์ผ์ค๋ฌ๊ฐ ๋ฑ์ฅํ๋ฉด์ ๋ฆฌ๋ ์ค์์๋ ๋์ด์ค ๊ฐ์ ์๋์ ์ฐจ์ด๊ฐ ํจ์ฌ ํฐ ์ํฅ์ ์ฃผ๊ฒ ๋๋ ์๊ณ ๋ฆฌ๋ฌ์ ์ฑํํ๋ค. ํํ ๊ตฌํ์์ ๋ ํ๋ก์ธ์ค์ ๋์ด์ค ๊ฐ์ ๋จ์ ์ฐจ์ด๋ ์ค์ผ์ค๋ฌ๊ฐ ๋ ๋์ ์ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ์ ํธํ๋ ์ ๋์ 1.25๋งํผ์ ์ธ์๊ฐ ๋๋ค. ์ด ๋๋ฌธ์ ์์ฃผ ๋ฎ์ ๋์ด์ค ๊ฐ(+19)์ ์์คํ ์ ๋ค๋ฅธ ๋ ๋์ ์ฐ์ ์์ ์์ ์ด ์์ ๋ ํ๋ก์ธ์ค์๊ฒ ์ ๋ง ๊ฑฐ์ CPU๋ฅผ ์ฃผ์ง ์์ผ๋ฉฐ, ๋์ ๋์ด์ค ๊ฐ(-20)์ ํ์ํ ์์ฉ(๊ฐ๋ น ์ค๋์ค ์์ฉ)์๊ฒ CPU๋ฅผ ๋๋ถ๋ถ ์ค๋ค.
๋ฆฌ๋
์ค์์๋ RLIMIT_NICE
์์ ์ ํ์ ์ฌ์ฉํด ๋นํน๊ถ ํ๋ก์ธ์ค์ ๋์ด์ค ๊ฐ์ ์ฌ๋ฆด ์ ์๋ ํ๊ณ๋ฅผ ๊ท์ ํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ setrlimit(2)์ ๋ณด๋ผ.
์๋์ autogroup ๊ธฐ๋ฅ ๋ฐ ๊ทธ๋ฃน ์ค์ผ์ค๋ง์ ๋ํ ์ ๋ค์ ๋์ด์ค ๊ฐ์ ๋ํ ๋ ์์ธํ ๋ด์ฉ์ด ์๋ค.
(๋ฆฌ๋
์ค 2.6.16๋ถํฐ.) SCHED_BATCH
๋ ๊ณ ์ ์ฐ์ ์์ 0์์๋ง ์ฌ์ฉํ ์ ์๋ค. ์ด ์ ์ฑ
์ (๋์ด์ค ๊ฐ์ ๊ธฐ๋ฐํ) ๋์ ์ฐ์ ์์์ ๋ฐ๋ผ ์ค๋ ๋๋ฅผ ์ค์ผ์ค ํ๋ค๋ ๋ฉด์์ SCHED_OTHER
์ ๋น์ทํ๋ค. ์ฐจ์ด๋ ์ค์ผ์ค๋ฌ์์ ํญ์ ์ค๋ ๋๊ฐ CPU ์ง์ฝ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๊ฒ ๋ง๋ ๋ค๋ ์ ์ด๋ค. ๊ทธ์ ๋ฐ๋ผ ์ค์ผ์ค๋ฌ์์ ๊นจ์ด๋๊ธฐ ๋์์ ๋ํด ์ฝ๊ฐ์ ์ค์ผ์ค๋ง ํ๋ํฐ๋ฅผ ์ฃผ์ด์ ์ค์ผ์ค๋ง ๊ฒฐ์ ๋ ๊ทธ ์ค๋ ๋๋ฅผ ์ฝ๊ฐ ๋๋ํ๊ฒ ๋๋ค.
๋น๋ํํ์ด์ง๋ง ์๊ธฐ ๋์ด์ค ๊ฐ์ ๋ฎ์ถ๊ณ ์ถ์ง๋ ์์ ์์ ๋ค์, ๊ทธ๋ฆฌ๊ณ (์์ ์ ํ์คํฌ๋ค ์ฌ์ด์์) ๋ํ์ฑ์ด ๊ณผ๋ํ ์ ์ ์ ์ ๋ฐํ์ง ์๋ ๊ฒฐ์ ๋ก ์ ์ค์ผ์ค๋ง ์ ์ฑ ์ ์ํ๋ ์์ ๋ค์ ์ด ์ ์ฑ ์ด ์ ์ฉํ๋ค.
(๋ฆฌ๋
์ค 2.6.23๋ถํฐ.) SCHED_IDLE
์ ๊ณ ์ ์ฐ์ ์์ 0์์๋ง ์ฌ์ฉํ ์ ์๋ค. ์ด ์ ์ฑ
์์๋ ํ๋ก์ธ์ค ๋์ด์ค ๊ฐ์ด ์ด๋ค ์ํฅ๋ ์ฃผ์ง ์๋๋ค.
์ด ์ ์ฑ
์ ๊ทน๋๋ก ๋ฎ์ (SCHED_OTHER
๋ด์ง SCHED_BATCH
์ ์ฑ
์ +19 ๋์ด์ค ๊ฐ๋ณด๋ค ๋ ๋ฎ์) ์ฐ์ ์์๋ก ์์
์ ๋๋ฆฌ๊ธฐ ์ํ ๊ฒ์ด๋ค.
๊ฐ ์ค๋ ๋์๋ ํฌํฌ ์ ์ด๊ธฐํ(reset-on-fork) ํ๋๊ทธ๊ฐ ์๋ค. ์ด ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด fork(2)๋ก ์์ฑ๋ ์์์ด ํน๊ถ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ฌผ๋ ค๋ฐ์ง ์๋๋ค. ๋ค์ ์ค ํ ๋ฐฉ๋ฒ์ผ๋ก ํฌํฌ ์ ์ด๊ธฐํ ํ๋๊ทธ๋ฅผ ์ค์ ํ ์ ์๋ค.
-
sched_setscheduler(2) ํธ์ถ ์
policy
์ธ์์SCHED_RESET_ON_FORK
๋ฅผ OR ํ๊ธฐ. (๋ฆฌ๋ ์ค 2.6.32๋ถํฐ) -
sched_setattr(2) ํธ์ถ ์
attr.sched_flags
์SCHED_FLAG_RESET_ON_FORK
ํ๋๊ทธ ์ง์ ํ๊ธฐ.
์ด ๋ API์์ ์ฌ์ฉํ๋ ์์ ์ด๋ฆ์ด ๋ค๋ฅธ ๊ฒ์ ์ ์ํ๋ผ. ์ ์ฌํ๊ฒ sched_getscheduler(2) ๋ฐ sched_getattr(2)์ ์ด์ฉํด ํฌํฌ ์ ์ด๊ธฐํ ํ๋๊ทธ์ ์ํ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
ํฌํฌ ์ ์ด๊ธฐํ ๊ธฐ๋ฅ์ ๋ฏธ๋์ด ์ฌ์ ์์ฉ์ ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฉ์์ ์ฌ๋ฌ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํด์ RLIMIT_RTTIME
์์ ์ ํ(getrlimit(2) ์ฐธ๊ณ )์ ํํผํ๋ ๊ฒ์ ๋ง๋ ๋ฐ ์ธ ์ ์๋ค.
์๋ฐํ๊ฒ ๋งํ์๋ฉด ํฌํฌ ์ ์ด๊ธฐํ ํ๋๊ทธ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ ์ดํ ์์ฑ๋๋ ์์์ ๋ํด ๋ค์ ๊ท์น๋ค์ด ์ ์ฉ๋๋ค.
-
ํธ์ถ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ ์ด
SCHED_FIFO
๋SCHED_RR
์ด๋ฉด ์์ ํ๋ก์ธ์ค๋ค์์ ์ ์ฑ ์ดSCHED_OTHER
๋ก ์ด๊ธฐํ ๋๋ค. -
ํธ์ถ ํ๋ก์ธ์ค๊ฐ ์์ ๋์ด์ค ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์์ ํ๋ก์ธ์ค๋ค์์ ๋์ด์ค ๊ฐ์ด 0์ผ๋ก ์ด๊ธฐํ ๋๋ค.
ํฌํฌ ์ ์ด๊ธฐํ ํ๋๊ทธ๋ฅผ ์ผ๊ณ ๋๋ฉด ์ค๋ ๋๊ฐ CAP_SYS_NICE
์ญ๋ฅ์ ๊ฐ์ง ๊ฒฝ์ฐ์๋ง ๋๋๋ฆด ์ ์๋ค. fork(2)๋ก ์์ฑ๋ ์์ ํ๋ก์ธ์ค์์๋ ์ด ํ๋๊ทธ๊ฐ ๊บผ์ ธ ์๋ค.
๋ฆฌ๋
์ค ์ปค๋ 2.6.12 ์ ์์๋ ํน๊ถ(CAP_SYS_NICE
) ์ค๋ ๋๋ง 0 ์๋ ๊ณ ์ ์ฐ์ ์์๋ฅผ ์ค์ ํ (์ฆ ์ค์๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ค์ ํ ) ์ ์๋ค. ๋นํน๊ถ ์ค๋ ๋๊ฐ ํ ์ ์๋ ์ ์ผํ ๋ณ๊ฒฝ์ SCHED_OTHER
์ ์ฑ
์ ์ค์ ํ๋ ๊ฒ์ด๊ณ , ํธ์ถ์์ ์คํจ ์ฌ์ฉ์ ID๊ฐ ์ ์ฑ
๋ณ๊ฒฝ ๋์ ์ค๋ ๋(์ฆ pid
๋ก ์ง์ ํ ์ค๋ ๋)์ ์ค์ ์ฌ์ฉ์ ID๋ ์คํจ ์ฌ์ฉ์ ID์ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๋ค.
SCHED_DEADLINE
์ ์ฑ
์ ์ค์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ค๋ ๋์๊ฒ ํน๊ถ(CAP_SYS_NICE
)์ด ์์ด์ผ ํ๋ค.
๋ฆฌ๋
์ค 2.6.12๋ถํฐ RLIMIT_RTPRIO
์์ ์ ํ์ด ๋นํน๊ถ ์ค๋ ๋์ SCHED_RR
๋ฐ SCHED_FIFO
์ ์ฑ
์ ์ํ ๊ณ ์ ์ฐ์ ์์์ ์ํ์ ๊ท์ ํ๋ค. ์ค์ผ์ค๋ง ์ ์ฑ
๋ฐ ์ฐ์ ์์ ๋ณ๊ฒฝ์ ๋ํ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
-
๋นํน๊ถ ์ค๋ ๋์๊ฒ
RLIMIT_RTPRIO
์ฐ์ฑ ์ ํ์ด ์์ผ๋ฉด ํ์ฌ ์ฐ์ ์์์RLIMIT_RTPRIO
์ฐ์ฑ ์ ํ ์ค ๋์ ๊ฐ ์๋ก ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋ค๋ ์ ์ฝ ํ์ ์๊ธฐ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ์ฐ์ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. -
RLIMIT_RTPRIO
์ฐ์ฑ ์ ํ์ด 0์ด๋ฉด ์ฐ์ ์์๋ฅผ ๋ฎ์ถ๊ฑฐ๋ ๋น์ค์๊ฐ ์ ์ฑ ์ผ๋ก ์ ํํ๋ ๊ฒ๋ง ํ์ฉ๋๋ค. -
๊ฐ์ ๊ท์น๋ค ํ์์ ๋ค๋ฅธ ๋นํน๊ถ ์ค๋ ๋๊ฐ ์ด๋ฐ ๋ณ๊ฒฝ์ ํ ์๋ ์๋ค. ๋จ, ๋ณ๊ฒฝ์ ํ๋ ค๋ ์ค๋ ๋์ ์คํจ ์ฌ์ฉ์ ID๊ฐ ๋์ ์ค๋ ๋์ ์ค์ ์ฌ์ฉ์ ID๋ ์คํจ ์ฌ์ฉ์ ID์ ์ผ์นํด์ผ ํ๋ค.
-
SCHED_IDLE
์ ์ฑ ์๋ ํน๋ณํ ๊ท์น์ ์ ์ฉํ๋ค. ๋ฆฌ๋ ์ค ์ปค๋ 2.6.39 ์ ์์๋ ์ด ์ ์ฑ ์ผ๋ก ๋์ ์ค์ธ ๋นํน๊ถ ์ค๋ ๋๊ฐRLIMIT_RTPRIO
์์ ์ ํ๊ฐ๊ณผ ์๊ด์์ด ์๊ธฐ ์ ์ฑ ์ ๋ฐ๊ฟ ์ ์๋ค. ๋ฆฌ๋ ์ค ์ปค๋ 2.6.39๋ถํฐ๋ ๋์ด์ค ๊ฐ์ดRLIMIT_NICE
์์ ์ ํ(getrlimit(2) ์ฐธ๊ณ )์ด ํ์ฉํ๋ ๋ฒ์ ๋ด์ ๋ค์ด๊ฐ๊ธฐ๋ง ํ๋ฉดSCHED_BATCH
๋SCHED_OTHER
์ ์ฑ ์ผ๋ก ์ ํํ ์ ์๋ค.
ํน๊ถ(CAP_SYS_NICE
) ์ค๋ ๋๋ RLIMIT_RTPRIO
์ ํ์ ๋ฌด์ํ๋ค. ์ด์ ์ปค๋์์์ฒ๋ผ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ์ฐ์ ์์๋ฅผ ์์๋ก ๋ฐ๊ฟ ์ ์๋ค. RLIMIT_RTPRIO
์ ๋ํ ์์ธํ ๋ด์ฉ์ getrlimit(2)์ ๋ณด๋ผ.
SCHED_FIFO
๋ SCHED_RR
, SCHED_DEADLINE
์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋ ์ค๋ ๋์ ๋ธ๋ก ์๋ ๋ฌดํ ๋ฃจํ๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ๋ชจ๋ ์ค๋ ๋๊ฐ ์์ํ CPU์ ์ ๊ทผํ ์ ์๊ฒ ๋ง์ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ฆฌ๋
์ค 2.6.25 ์ ์์ ํญ์ฃผํ๋ ์ค์๊ฐ ํ๋ก์ธ์ค๊ฐ ์์คํ
์ ์ผ๋ฆฌ๋ ๊ฑธ ๋ง๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ํ
์คํธ ํ๋ ์์ฉ๋ณด๋ค ๋์ ๊ณ ์ ์ฐ์ ์์๋ก ์ค์ผ์ค ํ ์
ธ์ (์ฝ์์์) ์คํํด ๋๋ ๊ฒ์ด์๋ค. ๊ทธ๋ฌ๋ฉด ์์ํ ๋๋ก ๋ธ๋ก ๋ด์ง ์ ์งํ์ง ์๋ ์ค์๊ฐ ์์ฉ์ ๋น์ ์ค๋จ ์ํฌ ์ ์๋ค.
๋ฆฌ๋
์ค 2.6.25๋ถํฐ๋ ํญ์ฃผํ๋ ์ค์๊ฐ ๋ฐ ๋ง๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ค๋ฅธ ๊ธฐ๋ฒ๋ค์ด ์๋ค. ๊ทธ ์ค ํ๋๋ RLIMIT_RTTIME
์์ ์ ํ์ ์ฌ์ฉํด ์ค์๊ฐ ํ๋ก์ธ์ค๊ฐ ์๋ชจํ ์ ์๋ CPU ์๊ฐ์ ์ํ์ ์ค์ ํ๋ ๊ฒ์ด๋ค. ์์ธํ ๋ด์ฉ์ setrlimit(2)์ ๋ณด๋ผ.
๋ฆฌ๋
์ค ๋ฒ์ 2.6.25๋ถํฐ ์ ๊ณตํ๋ ๋ ๊ฐ์ /proc
ํ์ผ์ ์ฌ์ฉํ๋ฉด ๋น์ค์๊ฐ ํ๋ก์ธ์ค๋ค์ด ์ฌ์ฉํ ์ผ์ ์์ CPU ์๊ฐ์ ์์ฝํด ๋ ์ ์๋ค. ์ด ๋ฐฉ์์ผ๋ก CPU ์๊ฐ์ ์์ฝํด ๋๋ฉด (๊ฐ๋ น) ํญ์ฃผ ํ๋ก์ธ์ค๋ฅผ ์ฃฝ์ด๋ ๋ฐ ์ด์ฉํ ๋ฃจํธ ์
ธ์๊ฒ CPU ์๊ฐ์ด ์ข ํ ๋น๋ ์ ์๋ค. ๋ ํ์ผ ๋ชจ๋ ๋๋
ธ์ด ๋จ์๋ก ์๊ฐ ๊ฐ์ ์ง์ ํ๋ค.
-
/proc/sys/kernel/sched_rt_period_us
-
์ด ํ์ผ์ CPU ๋์ญํญ 100%์ ๋๋ฑํ ์ค์ผ์ค๋ง ์ฃผ๊ธฐ๋ฅผ ๋ํ๋ธ๋ค. ์ด ํ์ผ์ ๊ฐ์ 1์์
INT_MAX
๊น์ง ๋ฒ์์ผ ์ ์๊ณ , ๊ทธ๋์ 1๋ง์ดํฌ๋ก์ด์์ 35๋ถ๊น์ง์ ์กฐ์ ๋ฒ์๊ฐ ๋์จ๋ค. ์ด ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ 1,000,000(1์ด)์ด๋ค. /proc/sys/kernel/sched_rt_runtime_us
-
์ด ํ์ผ์ ๊ฐ์ "์ฃผ๊ธฐ" ์๊ฐ ์ค ์ผ๋ง๋งํผ์ ์์คํ
์ ์ค์๊ฐ ๋ฐ ๋ง๊ฐ ์ค์ผ์ค ํ๋ก์ธ์ค๋ค ์ ์ฒด๊ฐ ์ฌ์ฉํ ์ ์๋์ง ๋ํ๋ธ๋ค. ์ด ํ์ผ์ ๊ฐ์ -1์์
INT_MAX
-1๊น์ง ๋ฒ์์ผ ์ ์๋ค. -1์ ์ง์ ํ๋ฉด ๋ฐํ์์ด ์ฃผ๊ธฐ์ ๊ฐ๊ฒ ๋๋ค. ์ฆ, (์ปค๋ 2.6.25 ์ ์ ๋ฆฌ๋ ์ค ๋์์ฒ๋ผ) ๋น์ค์๊ฐ ํ๋ก์ธ์ค๋ค์ ์ํด CPU ์๊ฐ์ ๋ฐ๋ก ๋ผ์ด ๋์ง ์๋๋ค. ์ด ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ 950,000(0.95์ด)์ด๋ค. ์ฆ ์ค์๊ฐ ๋ด์ง ๋ง๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ ์ผ๋ก ๋๊ณ ์์ง ์์ ํ๋ก์ธ์ค๋ค์ ์ํด CPU ์๊ฐ 5%๊ฐ ์์ฝ๋์ด ์๋ค.
I/O๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ธ๋ก ๋ ๋์ ์ฐ์ ์์ ์ค๋ ๋๊ฐ ๋ค์ ์ค์ผ์ค ๋๊ธฐ๊น์ง๋ ์ด๋ ์ ๋์ ์๋ต ์๊ฐ์ด ์๋ค. ์ฅ์น ๋๋ผ์ด๋ฒ ์์ฑ์๊ฐ "๋๋ฆฐ" ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ด ์๋ต ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค.
fork(2)๋ฅผ ๊ฑฐ์น๋ฉด์ ์์ ํ๋ก์ธ์ค๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ๋งค๊ฐ๋ณ์๋ค์ ๋ฌผ๋ ค๋ฐ๋๋ค. execve(2)๋ฅผ ๊ฑฐ์น๋ฉด์ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ๋งค๊ฐ๋ณ์๋ค์ด ๋ณด์กด๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ค์๊ฐ ํ๋ก์ธ์ค์์๋ ํ์ด์ง ์ง์ฐ์ ํผํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์ ๊ทธ๊ธฐ๊ฐ ํ์ํ๋ค. mlock(2)์ด๋ mlockall(2)๋ก ๊ฐ๋ฅํ๋ค.
๋ฆฌ๋
์ค 2.6.38๋ถํฐ ์ปค๋์์ ์๋ ๋ฌถ๊ธฐ(autogrouping)๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ง์ ๋ณ๋ ฌ ๋น๋ ํ๋ก์ธ์ค๋ก (์ฆ make(1)
์ -j
ํ๋๊ทธ๋ก) ๋ฆฌ๋
์ค ์ปค๋์ ๋น๋ ํ ๋์ฒ๋ผ ์ฌ๋ฌ ํ๋ก์ธ์ค์ด๊ณ CPU ์ง์ฝ์ ์ธ ๋ถํ๊ฐ ์์ ๋์ ๋ํํ ๋ฐ์คํฌํฑ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
์ด ๊ธฐ๋ฅ์ CFS ์ค์ผ์ค๋ฌ์ ํจ๊ป ๋์ํ๋ฉฐ ์ปค๋์ด CONFIG_SCHED_AUTOGROUP
์ผ๋ก ๊ตฌ์ฑ๋ผ ์์ด์ผ ํ๋ค. ๋์ ์ค์ธ ์์คํ
์์ /proc/sys/kernel/sched_autogroup_enabled
ํ์ผ์ ํตํด ์ด ๊ธฐ๋ฅ์ ์ผ๊ณ ๋๋ค. 0 ๊ฐ์ ๊ธฐ๋ฅ์ ๋๊ณ 1 ๊ฐ์ ์ผ ๋ค. noautogroup
๋งค๊ฐ๋ณ์๋ก ์ปค๋์ ๋ถํ
ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ด ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ค.
setsid(2)๋ฅผ ํตํด ์ ์ธ์ ์ด ์๊ฒจ๋ ๋ ์๋ก์ด autogroup์ด ์์ฑ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ ํฐ๋ฏธ๋ ์ฐฝ์ ์์ํ ๋ ๊ทธ๋ ๊ฒ ๋๋ค. fork(2)๋ก ์์ฑ๋ ์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ์ autogroup ๋ฉค๋ฒ์ญ์ ๋ฌผ๋ ค๋ฐ๋๋ค. ๋ฐ๋ผ์ ์ธ์ ๋ด์ ํ๋ก์ธ์ค ๋ชจ๋๊ฐ ๊ฐ์ autogroup์ ๊ตฌ์ฑ์์ด๋ค. ๊ทธ๋ฌ๋ค ๊ทธ๋ฃน ๋ด์ ๋ง์ง๋ง ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ autogroup์ด ์๋์ผ๋ก ์ฌ๋ผ์ง๋ค.
์๋ ๋ฌถ๊ธฐ๊ฐ ์ผ์ ธ ์์ ๋ autogroup์ ๊ตฌ์ฑ์ ๋ชจ๋๊ฐ ๋์ผํ ์ปค๋ ์ค์ผ์ค๋ฌ "ํ์คํฌ ๊ทธ๋ฃน"์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ CFS ์ค์ผ์ค๋ฌ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ๋ฌ์ด ํ์คํฌ ๊ทธ๋ฃน๋ค ๊ฐ์ CPU ์ฌ์ดํด ๋ถ๋ฐฐ๋ฅผ ๊ท ๋ฑํ๊ฒ ํ๋ค. ์ด๊ฒ ๋ํํ ๋ฐ์คํฌํฑ ์ฑ๋ฅ์ ์ฃผ๋ ์ด๋์ ๋ค์ ์๋ฅผ ํตํด ์ ์ ์๋ค.
๊ฐ์ CPU๋ฅผ ๋๊ณ ๊ฒฝ์ํ๋ autogroup ๋ ๊ฐ๊ฐ ์๋ค๊ณ ํ์. (์ฆ, ๋จ์ผ CPU ์์คํ
์ด๊ฑฐ๋ SMP์์ taskset(1)
์ ์จ์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ CPU๋ก ๊ฐ๋๋ค๊ณ ํ์.) ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์๋ make -j10
์ผ๋ก ์ปค๋ ๋น๋๋ฅผ ์์ํด์ ์๊ธด CPU ์์ฃผ ํ๋ก์ธ์ค 10๊ฐ๊ฐ ์๋ค. ๋ค๋ฅธ ๊ทธ๋ฃน์๋ CPU ์์ฃผ ํ๋ก์ธ์ค 1๊ฐ๊ฐ ์๋๋ฐ, ๋ฐ๋ก ๋์์ ์ฌ์๊ธฐ์ด๋ค. ์๋ ๋ฌถ๊ธฐ์ ํจ๊ณผ๋ ๋ ๊ทธ๋ฃน์ด ๊ฐ๊ฐ CPU ์ฌ์ดํด์ ์ ๋ฐ์ฉ ๋ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ฆ, ๋์์ ์ฌ์๊ธฐ๊ฐ ์ฌ์ ํ์ง ์ ํ๋ฅผ ์ผ์ผํฌ ๋งํ 9%์ CPU ์ฌ์ดํด๋ง ๋ฐ๋ ๊ฒ ์๋๋ผ 50%๋ฅผ ๋ฐ๊ฒ ๋๋ค. SMP์์๋ ์ํฉ์ด ๋ ๋ณต์กํ์ง๋ง ์ผ๋ฐ์ ํจ๊ณผ๋ ๋์ผํ๋ค. ์ฆ, ๋ค์์ CPU ์์ฃผ ํ๋ก์ธ์ค๋ค์ด ์๋ autogroup์ด ์์คํ
์์ ๋ค๋ฅธ ์์
๋ค์ ํฌ์์ํค๋ฉฐ CPU ์ฌ์ดํด์ ๋
์ฐจ์งํ๊ฒ ๋์ง ์๊ฒ ์ค์ผ์ค๋ฌ๊ฐ ์์
๊ทธ๋ฃน๋ค ์ฌ์ด์ CPU ์ฌ์ดํด์ ๋ถ๋ฐฐํ๋ค.
/proc/[pid]/autogroup
ํ์ผ์ ํตํด ํ๋ก์ธ์ค์ autogroup(ํ์คํฌ ๊ทธ๋ฃน) ๋ฉค๋ฒ์ญ์ ๋ณผ ์ ์๋ค.
$ cat /proc/1/autogroup
/autogroup-1 nice 0
์ด ํ์ผ์ ์ด์ฉํด autogroup์ ํ ๋น๋ CPU ๋์ญํญ์ ๋ณ๊ฒฝํ ์๋ ์๋ค. ํ์ผ์ "๋์ด์ค" ๋ฒ์ ์์ ์๋ฅผ ์จ๋ฃ์ด์ autogroup์ ๋์ด์ค ๊ฐ์ ์ค์ ํ๋ฉด ๋๋ค. ํ์ฉ ๋ฒ์๋ +19(๋ฎ์ ์ฐ์ ์์)์์ -20(๋์ ์ฐ์ ์์)๊น์ง์ด๋ค. (์ด ๋ฒ์ ๋ฐ์ ๊ฐ์ ์จ๋ฃ์ผ๋ฉด write(2)
๊ฐ EINVAL
์ค๋ฅ๋ก ์คํจํ๊ฒ ๋๋ค.)
autogroup ๋์ด์ค ์ค์ ์ ์๋ฏธ๋ ํ๋ก์ธ์ค ๋์ด์ค ๊ฐ๊ณผ ๊ฐ๋, autogroup๋ค์ ์๋์ ๋์ด์ค ๊ฐ์ ๊ธฐ๋ฐํ autogroup ๋จ์์ CPU ์ฌ์ดํด ๋ถ๋ฐฐ์ ์ ์ฉํ๋ค. autogroup ๋ด์ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ CPU ์ฌ์ดํด์ autogroup์ (๋ค๋ฅธ autogroup๋ค์ ๋ํ) ๋์ด์ค ๊ฐ๊ณผ ํ๋ก์ธ์ค์ (๊ฐ์ autogroup ๋ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ๋ํ) ๋์ด์ค ๊ฐ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
cgroups(7) CPU ์ ์ด๋ฅผ ์ด์ฉํด ํ๋ก์ธ์ค๋ฅผ ๋ฃจํธ CPU cgroup์ด ์๋ cgroup์ ๋๋ฉด ์๋ ๋ฌถ๊ธฐ์ ํจ๊ณผ๋ฅผ ๋ฌด์ํ๊ฒ ๋๋ค.
autogroup ๊ธฐ๋ฅ์ ๋น์ค์๊ฐ ์ ์ฑ
๋ค(SCHED_OTHER
, SCHED_BATCH
, SCHED_IDLE
)๋ก ์ค์ผ์ค ๋ ํ๋ก์ธ์ค๋ค๋ง ๋ฌถ๋๋ค. ์ค์๊ฐ ๋ฐ ๋ง๊ฐ ์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋ ํ๋ก์ธ์ค๋ค์ ๋ฌถ์ง ์๋๋ค. ๊ทธ๋ฐ ํ๋ก์ธ์ค๋ค์ ์์ ๊ธฐ์ ํ ๊ท์น๋ค์ ๋ฐ๋ผ ์ค์ผ์ค ๋๋ค.
์ปค๋์ด CONFIG_FAIR_GROUP_SCHED
์ต์
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด (๋ณดํต ๊ทธ๋ ๋ค) ๋น์ค์๊ฐ ํ๋ก์ธ์ค๋ค์ (์ฆ SCHED_OTHER
, SCHED_BATCH
, SCHED_IDLE
์ ์ฑ
์ผ๋ก ์ค์ผ์ค ๋๋ ํ๋ก์ธ์ค๋ค์) ์ค์ผ์ค ํ ๋ CFS ์ค์ผ์ค๋ฌ์์ "๊ทธ๋ฃน ์ค์ผ์ค๋ง"์ด๋ผ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฃน ์ค์ผ์ค๋ง์์๋ "ํ์คํฌ ๊ทธ๋ฃน" ๋จ์๋ก ์ค๋ ๋๋ค์ ์ค์ผ์ค ํ๋ค. ํ์คํฌ ๊ทธ๋ฃน๋ค์๋ ๊ณ์ธต ๊ด๊ณ๊ฐ ์์ผ๋ฉฐ ์ต์์์๋ "๋ฃจํธ ํ์คํฌ ๊ทธ๋ฃน"์ด๋ผ๋ ์์คํ ์ ์ต์ด ํ์คํฌ ๊ทธ๋ฃน์ด ์๋ค. ๋ค์ ๊ฒฝ์ฐ์ ํ์คํฌ ๊ทธ๋ฃน์ด ์๊ธด๋ค.
-
CPU cgroup ๋ด์ ๋ชจ๋ ์ค๋ ๋๋ค์ด ํ์คํฌ ๊ทธ๋ฃน์ ํ์ฑํ๋ค. ์ด ํ์คํฌ ๊ทธ๋ฃน์ ๋ถ๋ชจ๋ ๋์ํ๋ ๋ถ๋ชจ cgroup์ ํ์คํฌ ๊ทธ๋ฃน์ด๋ค.
-
์๋ ๋ฌถ๊ธฐ๊ฐ ์ผ์ ธ ์๋ ๊ฒฝ์ฐ์ (์๋ฌต์ ์ผ๋ก) autogroup์ (์ฆ setsid(2)๋ก ์๊ฒจ๋ ๋์ผ ์ธ์ ์) ๋ค์ด๊ฐ ๋ชจ๋ ์ค๋ ๋๋ค์ด ํ์คํฌ ๊ทธ๋ฃน์ ํ์ฑํ๋ค. ๊ทธ๋์ ์ autogroup ๊ฐ๊ฐ์ ๋ณ๊ฐ์ ํ์คํฌ ๊ทธ๋ฃน์ด๋ค. ๋ฃจํธ ํ์คํฌ ๊ทธ๋ฃน์ ๊ทธ๋ฐ autogroup๋ค ๋ชจ๋์ ๋ถ๋ชจ์ด๋ค.
-
์๋ ๋ฌถ๊ธฐ๊ฐ ์ผ์ ธ ์๋ ๊ฒฝ์ฐ์ ๋ฃจํธ ํ์คํฌ ๊ทธ๋ฃน์ ์๋ฌต์ ์ผ๋ก ์ autogroup์ ๋ค์ด๊ฐ์ง ์์ ๋ฃจํธ CPU cgroup ๋ด์ ๋ชจ๋ ํ๋ก์ธ์ค๋ค๋ก ์ด๋ค์ง๋ค.
-
์๋ ๋ฌถ๊ธฐ๊ฐ ๊บผ์ ธ ์๋ ๊ฒฝ์ฐ์ ๋ฃจํธ ํ์คํฌ ๊ทธ๋ฃน์ ๋ฃจํธ CPU cgroup ๋ด์ ๋ชจ๋ ํ๋ก์ธ์ค๋ค๋ก ์ด๋ค์ง๋ค.
-
๊ทธ๋ฃน ์ค์ผ์ค๋ง์ด ๊บผ์ ธ ์๋ ๊ฒฝ์ฐ์๋ (์ฆ ์ปค๋์ด
CONFIG_FAIR_GROUP_SCHED
์์ด ๊ตฌ์ฑ๋์์ผ๋ฉด) ๊ฐ๋ ์ ์ผ๋ก ์์คํ ์์ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ด ํ ๊ฐ์ ํ์คํฌ ๊ทธ๋ฃน์ ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฃน ์ค์ผ์ค๋ง ํ์์ ์ค๋ ๋์ ๋์ด์ค ๊ฐ์ ๊ฐ์ ํ์คํฌ ๊ทธ๋ฃน์ ๋ค๋ฅธ ์ค๋ ๋๋ค์ ๋ํด์๋ง ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ์ํฅ์ ์ค๋ค. ์ด๋ก ์ธํด ์ ๋์ค ์์คํ
์ ์ ํต์ ๋์ด์ค ๊ฐ ์๋ฏธ๋ก ์ธก๋ฉด์์๋ ์ข ์์ธ์ธ ๊ฒฝ์ฐ๋ค์ด ์๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ์๋ ๋ฌถ๊ธฐ๊ฐ ์ผ์ ธ ์๋ ๊ฒฝ์ฐ์ (์ฌ๋ฌ ๋ฐฐํฌํ์์ ๊ธฐ๋ณธ์ผ๋ก ๊ทธ๋ ๋ค) ํ๋ก์ธ์ค์ setpriority(2)๋ nice(1)
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์ธ์
(๋ณดํต์ ๊ฐ์ ํฐ๋ฏธ๋ ์ฐฝ) ๋ด์์ ์คํ๋๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ๋ํ ์๋์ ์ค์ผ์ค๋ง์๋ง ์ํฅ์ ์ค๋ค.
๋ฐ๋๋ก (์๋ฅผ ๋ค์ด) ์์ดํ ์ธ์ ๋ค์์ ์ ์ผํ๊ฒ CPU ์์ฃผ ํ๋ก์ธ์ค์ธ ๋ ํ๋ก์ธ์ค๊ฐ ์์ ๋ (๊ฐ๋ น ์๋ก ๋ค๋ฅธ ํฐ๋ฏธ๋ ์ฐฝ๋ค์ด ์๊ณ ๊ฐ๊ฐ์ ์์ ๋ค์ด ์๋ก ๋ค๋ฅธ autogroup์ ๊ฒฐ์๋ผ ์์ ๋) ํ ์ธ์ ์ ์๋ ํ๋ก์ธ์ค์ ๋์ด์ค ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ค๋ฅธ ์ธ์ ์ ํ๋ก์ธ์ค์ ๋ํ ์ค์ผ์ค๋ฌ์ ๊ฒฐ์ ์ธก๋ฉด์์ ์ด๋ค ํจ๊ณผ๋ ์ฃผ์ง ์๋๋ค. ์ด๋ด ๋ ์ ์ฉํ ์ ์๋ ํด๊ฒฐ์ฑ ์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ด์ฉํด ํฐ๋ฏธ๋ ์ธ์ ๋ด์ ํ๋ก์ธ์ค ๋ชจ๋์ ๋ํ autogroup ๋์ด์ค ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
$ echo 10 > /proc/self/autogroup
์ปค๋ ๋ฒ์ 2.6.18๋ถํฐ ๋ฆฌ๋
์ค๋ ์กฐ๊ธ์ฉ ์ค์๊ฐ ์ญ๋์ ๊ฐ์ถ๊ณ ์๋ค. ๊ทธ ๋๋ถ๋ถ์ ์ด์ ์ realtime-preempt
ํจ์น ์ธํธ์์ ์จ ๊ฒ์ด๋ค. ๊ทธ ํจ์น๋ค์ด ์ฃผ ์ปค๋๋ก ์์ ํ ๋ณํฉ๋ ๋๊น์ง๋ ์ต๊ณ ์ ์ค์๊ฐ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด ํจ์น๋ค์ ์ค์นํด์ผ ํ๋ค. ๊ทธ ํจ์น๋ค์ patch-์ปค๋๋ฒ์ -rtํจ์น๋ฒ์ ํํ์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ (http://www.kernel.org/pub/linux/kernel/projects/rt/)์์ ๋ด๋ ค๋ฐ์ ์ ์๋ค.
ํจ์น๊ฐ ์ฃผ ์ปค๋์ ์์ ํ ํฌํจ๋๊ธฐ ์ ์ ๊ทธ ํจ์น ์์ด๋ ์ปค๋ ๊ตฌ์ฑ์ CONFIG_PREEMPT_NONE
, CONFIG_PREEMPT_VOLUNTARY
, CONFIG_PREEMPT_DESKTOP
์ด๋ผ๋ ์ธ ๊ฐ์ง ์ ์ ๊ณ์ธต๋ง ์ ๊ณต๋๋ค. ๊ฐ๊ฐ์ ์ต์
์ค์ผ์ค๋ง ์ง์ฐ์ ์ ํ ์ค์ฌ ์ฃผ์ง ์๊ฑฐ๋, ์กฐ๊ธ ์ค์ฌ ์ฃผ๊ฑฐ๋, ์๋นํ ์ค์ฌ ์ค๋ค.
ํจ์น๊ฐ ์ ์ฉ๋์ด ์๊ฑฐ๋ ์ฃผ ์ปค๋์ ์์ ํ ํฌํจ๋ ํ์๋ CONFIG_PREEMPT_RT
๋ผ๋ ์ถ๊ฐ ๊ตฌ์ฑ ํญ๋ชฉ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ค. ์ด๋ฅผ ์ ํํ๋ฉด ๋ฆฌ๋
์ค๊ฐ ์ ๋๋ก ๋ ์ค์๊ฐ ์ด์ ์ฒด์ ๋ก ๋ฐ๋๋ค. ๊ทธ๋ฌ๋ฉด FIFO ๋ฐ RR ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ฌ์ฉํด ์ง์ง ์ค์๊ฐ ์ฐ์ ์์์ ์ต์ํ์ ์ต์
์ค์ผ์ค๋ง ์ง์ฐ์ผ๋ก ์ค๋ ๋๋ฅผ ๋๋ฆฐ๋ค.
cgroups(7) CPU ์ ์ด๋ฅผ ์ฌ์ฉํด ํ๋ก์ธ์ค ๊ทธ๋ฃน์ CPU ์๋ชจ๋ฅผ ์ ํํ ์ ์๋ค.
์๋ ํ์ค ๋ฆฌ๋ ์ค๋ ๋ฐฐ๊ฒฝ ํ๋ก์ธ์ค์ ๋ํํ ์์ฉ, ์ฝํ ์ค์๊ฐ ์์ฉ(๋ง๊ฐ ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ง์ผ์ผ ํ๋ ์์ฉ)์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฒ์ฉ ์ด์ ์ฒด์ ์๋ค. ๋ฆฌ๋ ์ค ์ปค๋ 2.6์์ ์ปค๋ ์ ์ ์ด ๊ฐ๋ฅํด์ก๊ณ ์๋ก ๋์ ๋ O(1) ์ค์ผ์ค๋ฌ๊ฐ ํ์ฑ ํ์คํฌ์ ์์ ์๊ด์์ด ์ค์ผ์ค์ ํ์ํ ์๊ฐ์ด ๊ณ ์ ์ด๊ณ ๊ฒฐ์ ๋ก ์ ์์ ๋ณด์ฅํ๊ธฐ๋ ํ์ง๋ง ์ปค๋ ๋ฒ์ 2.6.17๊น์ง๋ ์ง์ ํ ์ค์๊ฐ ์ปดํจํ ์ด ๊ฐ๋ฅํ์ง ์์๋ค.
chcpu(1)
, chrt(1)
, lscpu(1)
, ps(1)
, taskset(1)
, top(1)
, getpriority(2), mlock(2), mlockall(2), munlock(2), munlockall(2), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2), sched_getparam(2), sched_getscheduler(2), sched_rr_get_interval(2), sched_setaffinity(2), sched_setparam(2), sched_setscheduler(2), sched_yield(2), setpriority(2), pthread_getschedparam(3), pthread_getaffinity_np(3), pthread_setaffinity_np(3), sched_getcpu(3), capabilities(7), cpuset(7)
Programming for the real world - POSIX.4 by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0.
๋ฆฌ๋
์ค ์ปค๋ ์์ค ํ์ผ Documentation/scheduler/sched-deadline.txt
, Documentation/scheduler/sched-rt-group.txt
, Documentation/scheduler/sched-design-CFS.txt
, Documentation/scheduler/sched-nice-design.txt
2019-08-02