sched(7) - wariua/manpages-ko GitHub Wiki

NAME

sched - CPU ์Šค์ผ€์ค„๋ง ๊ฐœ์š”

DESCRIPTION

๋ฆฌ๋ˆ…์Šค 2.6.23๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ CFS, ์ฆ‰ "Completely Fair Scheduler"์ด๋‹ค. CFS ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ด์ „์˜ "O(1)" ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋Œ€์ฒดํ•˜์˜€๋‹ค.

API ์š”์•ฝ

๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” 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: ์„ ์ž…์„ ์ถœ ์Šค์ผ€์ค„๋ง

SCHED_FIFO๋Š” 0๋ณด๋‹ค ๋†’์€ ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ SCHED_FIFO ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ํ•ญ์ƒ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ SCHED_OTHER, SCHED_BATCH, SCHED_IDLE ์Šค๋ ˆ๋“œ๋ฅผ ์ฆ‰์‹œ ์„ ์ ํ•˜๊ฒŒ ๋œ๋‹ค. SCHED_FIFO๋Š” ์‹œ๊ฐ„ ๋ถ„ํ•  ์—†๋Š” ๋‹จ์ˆœํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ๋“ฌ์ด๋‹ค. SCHED_FIFO ์ •์ฑ…์œผ๋กœ ์Šค์ผ€์ค„๋ง ๋˜๋Š” ์Šค๋ ˆ๋“œ์—๊ฒŒ ๋‹ค์Œ ๊ทœ์น™๋“ค์ด ์ ์šฉ๋œ๋‹ค.

  1. ์‹คํ–‰ ์ค‘์ธ SCHED_FIFO ์Šค๋ ˆ๋“œ๊ฐ€ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ์„ ์ ๋˜๋ฉด ์ž๊ธฐ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ์„ ๋‘์— ๋จธ๋ฌผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ๋ชจ๋‘ ๋‹ค์‹œ ๋ธ”๋ก ๋˜์ž๋งˆ์ž ์‹คํ–‰์„ ์žฌ๊ฐœํ•œ๋‹ค.

  2. ๋ธ”๋ก ๋œ SCHED_FIFO ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ์ž๊ธฐ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ๋์— ์‚ฝ์ž…๋œ๋‹ค.

  3. sched_setscheduler(2), sched_setparam(2), sched_setattr(2), pthread_setschedparam(3), pthread_setschedprio(3) ํ˜ธ์ถœ ๋•Œ๋ฌธ์— pid๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ์‹คํ–‰ ๊ฐ€๋Šฅ์ธ SCHED_FIFO ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ์˜ ๋ชฉ๋ก ๋‚ด ์œ„์น˜์— ๋Œ€ํ•œ ์˜ํ–ฅ์€ ์Šค๋ ˆ๋“œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

    • ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒฝ์šฐ ๊ทธ ์ƒˆ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ๋์— ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋กœ ์ธํ•ด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์„ ์ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    • ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ ๋ชฉ๋ก์—์„œ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

    • ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ด๋ ค๊ฐ€๋Š” ๊ฒฝ์šฐ ๊ทธ ์ƒˆ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ์„ ๋‘์— ๋“ค์–ด๊ฐ„๋‹ค.

    POSIX.1-2008์— ๋”ฐ๋ฅด๋ฉด pthread_setschedprio(3) ์™ธ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•ด ์Šค๋ ˆ๋“œ ์šฐ์„ ์ˆœ์œ„๋ฅผ (๋˜๋Š” ์ •์ฑ…์„) ๋ฐ”๊พธ๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ทธ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ๋์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

  4. sched_yield(2)๋ฅผ ํ˜ธ์ถœํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ชฉ๋ก ๋์œผ๋กœ ๊ฐ„๋‹ค.

์ด ์™ธ์˜ ์–ด๋–ค ์ด๋ฒคํŠธ๋„ ๊ฐ™์€ ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ ์Šค๋ ˆ๋“œ ๋Œ€๊ธฐ ๋ชฉ๋ก ๋‚ด์—์„œ SCHED_FIFO ์ •์ฑ…์œผ๋กœ ์Šค์ผ€์ค„ ๋œ ์Šค๋ ˆ๋“œ๋ฅผ ์˜ฎ๊ธฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

SCHED_FIFO ์Šค๋ ˆ๋“œ๋Š” I/O ์š”์ฒญ ๋•Œ๋ฌธ์— ๋ธ”๋ก ๋˜๊ฑฐ๋‚˜, ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์„ ์ ๋˜๊ฑฐ๋‚˜, sched_yield(2)๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋ˆ๋‹ค.

SCHED_RR: ๋ผ์šด๋“œ ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง

SCHED_RR์€ SCHED_FIFO๋ฅผ ๊ฐ„๋‹จํžˆ ๊ฐœ์„ ํ•œ ๊ฒƒ์ด๋‹ค. ์œ„์—์„œ SCHED_FIFO์— ๋Œ€ํ•ด ๊ธฐ์ˆ ํ•œ ๋‚ด์šฉ์ด ๋ชจ๋‘ SCHED_RR์— ์ ์šฉ๋œ๋‹ค. ๋‹จ, ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ตœ๋Œ€๋กœ ์–ด๋–ค ๋‹จ์œ„ ์‹œ๊ฐ„(quantum) ๋™์•ˆ๋งŒ ๋Œ ์ˆ˜ ์žˆ๋‹ค. SCHED_RR ์Šค๋ ˆ๋“œ๊ฐ€ ๊ทธ ๋‹จ์œ„ ์‹œ๊ฐ„ ์ด์ƒ์˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋™์ž‘ํ–ˆ์œผ๋ฉด ์ž๊ธฐ ์šฐ์„ ์ˆœ์œ„์˜ ๋ชฉ๋ก ๋์œผ๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค. SCHED_RR ์Šค๋ ˆ๋“œ๊ฐ€ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์„ ์ ๋˜์—ˆ๋‹ค๊ฐ€ ๊ทธ ๋’ค์— ์‹คํ–‰์„ ์žฌ๊ฐœํ•˜๋ฉด ์ž๊ธฐ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋‹จ์œ„ ์‹œ๊ฐ„์—์„œ ๋งŒ๋ฃŒ ์•ˆ ๋œ ๋ถ€๋ถ„์„ ์ฑ„์šฐ๊ฒŒ ๋œ๋‹ค. sched_rr_get_interval(2)์„ ์‚ฌ์šฉํ•ด ๋‹จ์œ„ ์‹œ๊ฐ„ ๊ธธ์ด๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

SCHED_DEADLINE: ์‚ฐ๋ฐœ ํƒœ์Šคํฌ ๋ชจ๋ธ ๋งˆ๊ฐ ์Šค์ผ€์ค„๋ง

๋ฒ„์ „ 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: ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ์‹œ๊ณต์œ  ์Šค์ผ€์ค„๋ง

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 ๊ธฐ๋Šฅ ๋ฐ ๊ทธ๋ฃน ์Šค์ผ€์ค„๋ง์— ๋Œ€ํ•œ ์ ˆ๋“ค์— ๋‚˜์ด์Šค ๊ฐ’์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์ด ์žˆ๋‹ค.

SCHED_BATCH: ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง

(๋ฆฌ๋ˆ…์Šค 2.6.16๋ถ€ํ„ฐ.) SCHED_BATCH๋Š” ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„ 0์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ •์ฑ…์€ (๋‚˜์ด์Šค ๊ฐ’์— ๊ธฐ๋ฐ˜ํ•œ) ๋™์  ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์ผ€์ค„ ํ•œ๋‹ค๋Š” ๋ฉด์—์„œ SCHED_OTHER์™€ ๋น„์Šทํ•˜๋‹ค. ์ฐจ์ด๋Š” ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ํ•ญ์ƒ ์Šค๋ ˆ๋“œ๊ฐ€ CPU ์ง‘์•ฝ์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ์Šค์ผ€์ค„๋Ÿฌ์—์„œ ๊นจ์–ด๋‚˜๊ธฐ ๋™์ž‘์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์Šค์ผ€์ค„๋ง ํŽ˜๋„ํ‹ฐ๋ฅผ ์ฃผ์–ด์„œ ์Šค์ผ€์ค„๋ง ๊ฒฐ์ • ๋•Œ ๊ทธ ์Šค๋ ˆ๋“œ๋ฅผ ์•ฝ๊ฐ„ ๋ƒ‰๋Œ€ํ•˜๊ฒŒ ๋œ๋‹ค.

๋น„๋Œ€ํ™”ํ˜•์ด์ง€๋งŒ ์ž๊ธฐ ๋‚˜์ด์Šค ๊ฐ’์„ ๋‚ฎ์ถ”๊ณ  ์‹ถ์ง€๋Š” ์•Š์€ ์ž‘์—…๋“ค์—, ๊ทธ๋ฆฌ๊ณ  (์ž‘์—…์˜ ํƒœ์Šคํฌ๋“ค ์‚ฌ์ด์—์„œ) ๋Œ€ํ™”์„ฑ์ด ๊ณผ๋„ํ•œ ์„ ์ ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š” ๊ฒฐ์ •๋ก ์  ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ์›ํ•˜๋Š” ์ž‘์—…๋“ค์— ์ด ์ •์ฑ…์ด ์œ ์šฉํ•˜๋‹ค.

SCHED_IDLE: ์•„์ฃผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—… ์Šค์ผ€์ค„๋ง

(๋ฆฌ๋ˆ…์Šค 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)์„ ๋ณด๋ผ.

์‹ค์‹œ๊ฐ„ ๋ฐ ๋งˆ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ CPU ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œํ•˜๊ธฐ

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)๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

autogroup ๊ธฐ๋Šฅ

๋ฆฌ๋ˆ…์Šค 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 ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ์‚ฌ์šฉํ•ด ์ง„์งœ ์‹ค์‹œ๊ฐ„ ์šฐ์„ ์ˆœ์œ„์™€ ์ตœ์†Œํ•œ์˜ ์ตœ์•… ์Šค์ผ€์ค„๋ง ์ง€์—ฐ์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ๋ฆฐ๋‹ค.

NOTES

cgroups(7) CPU ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์˜ CPU ์†Œ๋ชจ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

์›๋ž˜ ํ‘œ์ค€ ๋ฆฌ๋ˆ…์Šค๋Š” ๋ฐฐ๊ฒฝ ํ”„๋กœ์„ธ์Šค์™€ ๋Œ€ํ™”ํ˜• ์‘์šฉ, ์•ฝํ•œ ์‹ค์‹œ๊ฐ„ ์‘์šฉ(๋งˆ๊ฐ ์‹œ๊ฐ„์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์ผœ์•ผ ํ•˜๋Š” ์‘์šฉ)์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ์šด์˜ ์ฒด์ œ์˜€๋‹ค. ๋ฆฌ๋ˆ…์Šค ์ปค๋„ 2.6์—์„œ ์ปค๋„ ์„ ์ ์ด ๊ฐ€๋Šฅํ•ด์กŒ๊ณ  ์ƒˆ๋กœ ๋„์ž…๋œ O(1) ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ™œ์„ฑ ํƒœ์Šคํฌ์˜ ์ˆ˜์™€ ์ƒ๊ด€์—†์ด ์Šค์ผ€์ค„์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ๊ณ ์ •์ด๊ณ  ๊ฒฐ์ •๋ก ์ ์ž„์„ ๋ณด์žฅํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ปค๋„ ๋ฒ„์ „ 2.6.17๊นŒ์ง€๋Š” ์ง„์ •ํ•œ ์‹ค์‹œ๊ฐ„ ์ปดํ“จํŒ…์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์•˜๋‹ค.

SEE ALSO

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

โš ๏ธ **GitHub.com Fallback** โš ๏ธ