sched_setattr(2) - wariua/manpages-ko GitHub Wiki
sched_setattr, sched_getattr - ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ์์ฑ ์ค์ ํ๊ณ ์ป๊ธฐ
#include <sched.h>
int sched_setattr(pid_t pid, struct sched_attr *attr,
unsigned int flags);
int sched_getattr(pid_t pid, struct sched_attr *attr,
unsigned int size, unsigned int flags);
sched_setattr()
์์คํ
ํธ์ถ์ pid
๋ก ์ง์ ํ ID์ ์ค๋ ๋๋ฅผ ์ํ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ์ฐ๊ด ์์ฑ๋ค์ ์ค์ ํ๋ค. pid
๊ฐ 0์ด๋ฉด ํธ์ถ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ์์ฑ์ ์ค์ ํ๊ฒ ๋๋ค.
policy
์ ์ง์ ํ ์ ์๋ ๊ฐ์ผ๋ก ํ์ฌ ๋ฆฌ๋
์ค์์๋ ๋ค์์ "์ผ๋ฐ" (์ฆ ๋น์ค์๊ฐ) ์ค์ผ์ค๋ง ์ ์ฑ
๋ค์ ์ง์ํ๋ค.
SCHED_OTHER
- ํ์ค ๋ผ์ด๋ ๋ก๋น ์๊ณต์ ์ ์ฑ
SCHED_BATCH
- "๋ฐฐ์น" ๋ฐฉ์ ํ๋ก์ธ์ค ์คํ
SCHED_IDLE
- ์์ฃผ ๋ฎ์ ์ฐ์ ์์์ ๋ฐฐ๊ฒฝ ์์ ์คํ
์คํ ๊ฐ๋ฅ ์ค๋ ๋๋ค ๊ฐ์ด๋ฐ ์คํํ ๊ฒ์ ์ ํํ๋ ๋ฐฉ์์ ์ ๋ฐํ๊ฒ ์ ์ดํด์ผ ํ๋ ํน์ํ ์๊ฐ ์ ์ฝ์ ์์ฉ๋ค์ ์ํด ๋ค์ํ "์ค์๊ฐ" ์ ์ฑ
๋ค๋ ์ง์ํ๋ค. ํ๋ก์ธ์ค์์ ์ธ์ ์ด ์ ์ฑ
๋ค์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ๊ท์น์ sched(7)๋ฅผ ๋ณด๋ผ. policy
์ ์ง์ ํ ์ ์๋ ์ค์๊ฐ ์ ์ฑ
๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
SCHED_FIFO
- ์ ์ ์ ์ถ ์ ์ฑ
SCHED_RR
- ๋ผ์ด๋ ๋ก๋น ์ ์ฑ
๋ฆฌ๋ ์ค์์๋ ๋ค์ ์ ์ฑ ๋ ์ง์ํ๋ค.
SCHED_DEADLINE
- ๋ง๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ . ์์ธํ ๋ด์ฉ์ sched(7) ์ฐธ๊ณ .
attr
์ธ์๋ ์ง์ ํ ์ค๋ ๋๋ฅผ ์ํ ์ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ์์ฑ๋ค์ ๊ท์ ํ๋ ๊ตฌ์กฐ์ฒด์ ๋ํ ํฌ์ธํฐ์ด๋ค. ์ด ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ ํํ์ด๋ค.
struct sched_attr {
u32 size; /* ์ด ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ */
u32 sched_policy; /* ์ ์ฑ
(SCHED_*) */
u64 sched_flags; /* ํ๋๊ทธ */
s32 sched_nice; /* ๋์ด์ค ๊ฐ (SCHED_OTHER,
SCHED_BATCH) */
u32 sched_priority; /* ๊ณ ์ ์ฐ์ ์์ (SCHED_FIFO,
SCHED_RR) */
/* ๋๋จธ์ง ํ๋๋ค์ SCHED_DEADLINE ์ฉ */
u64 sched_runtime;
u64 sched_deadline;
u64 sched_period;
};
์ด ๊ตฌ์กฐ์ฒด์ ํ๋๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
size
-
์ด ํ๋๋
sizeof(struct sched_attr)
์ฒ๋ผ ํด์ ๊ตฌ์กฐ์ฒด์ ๋ฐ์ดํธ ๋จ์ ํฌ๊ธฐ๋ก ์ค์ ํด์ผ ํ๋ค. ์ ๊ณตํ ๊ตฌ์กฐ์ฒด๊ฐ ์ปค๋ ๊ตฌ์กฐ์ฒด๋ณด๋ค ์์ผ๋ฉด ์ถ๊ฐ ํ๋๋ค์ด '0'์ธ ๊ฒ์ผ๋ก ์์ ํ๋ค. ์ ๊ณตํ ๊ตฌ์กฐ์ฒด๊ฐ ์ปค๋ ๊ตฌ์กฐ์ฒด๋ณด๋ค ํฌ๋ฉด ์ปค๋์์๋ ๋ชจ๋ ์ถ๊ฐ ํ๋๋ค์ด 0์ธ์ง ๊ฒ์ฌํ๋ค. 0์ด ์๋๋ฉดsched_setattr()
์ดE2BIG
์ค๋ฅ๋ก ์คํจํ๋ฉฐ ์ปค๋ ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ๋ด๋๋กsize
๋ฅผ ๊ฐฑ์ ํ๋ค.์ฌ์ฉ์ ๊ณต๊ฐ
sched_attr
๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๊ฐ ์ปค๋ ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ์ ์ผ์นํ์ง ์์ ๋์ ์ ๋์ ๋ฐฉ์์ ํตํด ํฅํ ์ธํฐํ์ด์ค ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋๋ฌด ํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ์ด์ํ ์์ฉ์ด ์์ ๋ ํฅํ์ ์ปค๋sched_attr
๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๊ฒ ๋๋ค. ๋ํ ํฅํ์ ๋ ํฐ ์ฌ์ฉ์ ๊ณต๊ฐsched_attr
๊ตฌ์กฐ์ฒด๋ฅผ ์๊ณ ์๋ ์์ฉ์์ ์๊ธฐ๊ฐ ์ง๊ธ ๊ทธ ํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ง์ํ์ง ์๋ ์ค๋๋ ์ปค๋ ์์์ ๋์ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ค. sched_policy
- ์ด ํ๋๋ ์์ ๋์ดํ `SCHED_*` ๊ฐ๋ค ์ค ํ๋๋ก ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ํ๋ธ๋ค.
sched_flags
-
์ด ํ๋๋ ์ค์ผ์ค๋ง ๋์ ๋ฐฉ์์ ์ ์ดํ๋ ๋ค์ ํ๋๊ทธ๋ฅผ 0๊ฐ ์ด์ OR ํด์ ๋ด๋๋ค.
SCHED_FLAG_RESET_ON_FORK
- fork(2)๋ก ์์ฑ๋ ์์์ด ํน๊ถ์ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ฌผ๋ ค๋ฐ์ง ์๋๋ค. ์์ธํ ๋ด์ฉ์ sched(7) ์ฐธ๊ณ .
-
SCHED_FLAG_RECLAIM
(๋ฆฌ๋ ์ค 4.13๋ถํฐ) - ์ด ํ๋๊ทธ๋
SCHED_DEADLINE
์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค์๊ฐ ์ค๋ ๋์์ ์ ์ด ๋์ญํญ์ ๊ฐ์ ธ๋ค ์ธ ์ ์๋๋ก ํ๋ค. -
SCHED_FLAG_DL_OVERRUN
(๋ฆฌ๋ ์ค 4.16๋ถํฐ) -
์ด ํ๋๊ทธ๋
SCHED_DEADLINE
์ค๋ ๋๊ฐ ์คํ ์๊ฐ์ ์ด๊ณผํ์ ๋ ์์ฉ์์ ์๋ฆผ์ ๋ฐ์ ์ ์๋๋ก ํ๋ค. (์๋ฅผ ๋ค๋ฉด) ๋ ์ธ๋ฐํ ์คํ ์๊ฐ ๊ณ์ฐ์ด๋ ๋ถ์ ํํ ๋งค๊ฐ๋ณ์ ํ ๋น ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. ์๋ฆผ์SIGXCPU
์๊ทธ๋ ํํ์ด๊ณ ์ด๊ณผ ๋๋ง๋ค ์์ฑ๋๋ค.๊ทธ
SIGXCPU
์๊ทธ๋์ ์ค๋ ๋๊ฐ ์๋๋ผ ํ๋ก์ธ์ค๋ฅผ ํฅํ๋ค. (signal(7) ์ฐธ๊ณ .) ์ด๋ ๋ฒ๊ทธ๋ผ๊ณ ๋ณผ ์๋ ์๋ค.sched_setattr()
์ ์ค๋ ๋๋ณ ์์ฑ์ ์ค์ ํ๋ ๋ฐ ์ฐ์ด๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ์คํ ์๊ฐ์ด ์ด๊ณผํ ์ค๋ ๋๊ฐ ์๋ ํ๋ก์ธ์ค ๋ด ์ค๋ ๋๋ก ํ๋ก์ธ์ค ์งํฅ ์๊ทธ๋์ด ์ ๋ฌ๋๋ฉด ์์ฉ์์๋ ์ด๋ ์ค๋ ๋์์ ์ด๊ณผ๊ฐ ์ผ์ด๋ฌ๋์ง ์ ๋ฐฉ๋ฒ์ด ์๋ค.
sched_nice
- ์ด ํ๋๋ `sched_policy`๋ฅผ `SCHED_OTHER`๋ `SCHED_BATCH`๋ก ์ง์ ํ ๋ ์ค์ ํ ๋์ด์ค ๊ฐ์ ๋ํ๋ธ๋ค. ๋์ด์ค ๊ฐ์ -20(๋์ ์ฐ์ ์์)์์ +19(๋ฎ์ ์ฐ์ ์์)๊น์ง ๋ฒ์์ ์์ด๋ค. sched(7) ์ฐธ๊ณ .
sched_priority
- ์ด ํ๋๋ `sched_policy`๋ฅผ `SCHED_FIFO`๋ `SCHED_RR`๋ก ์ง์ ํ ๋ ์ค์ ํ ๊ณ ์ ์ฐ์ ์์๋ฅผ ๋ํ๋ธ๋ค. ์ด ์ ์ฑ ๋ค์์ ํ์ฉํ๋ ์ฐ์ ์์ ๋ฒ์๋ฅผ sched_get_priority_min(2)๊ณผ sched_get_priority_max(2)๋ฅผ ์ด์ฉํด ์์๋ผ ์ ์๋ค. ๋ค๋ฅธ ์ ์ฑ ์์๋ ์ด ํ๋๋ฅผ 0์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
sched_runtime
- ์ด ํ๋๋ ๋ง๊ฐ ์ค์ผ์ค๋ง์ "๋ฐํ์" ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ธ๋ค. ๋๋ ธ์ด ๋จ์๋ก ๋ํ๋ธ ๊ฐ์ด๋ค. ์ด ํ๋์ ๋ค์์ ๋ ํ๋๋ `SCHED_DEADLINE` ์ค์ผ์ค๋ง์์๋ง ์ด๋ค. ๋ ์์ธํ ๋ด์ฉ์ sched(7)๋ฅผ ๋ณด๋ผ.
sched_deadline
- ์ด ํ๋๋ ๋ง๊ฐ ์ค์ผ์ค๋ง์ "๋ง๊ฐ" ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ธ๋ค. ๋๋ ธ์ด ๋จ์๋ก ๋ํ๋ธ ๊ฐ์ด๋ค.
sched_period
- ์ด ํ๋๋ ๋ง๊ฐ ์ค์ผ์ค๋ง์ "์ฃผ๊ธฐ" ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ธ๋ค. ๋๋ ธ์ด ๋จ์๋ก ๋ํ๋ธ ๊ฐ์ด๋ค.
flags
์ธ์๋ ํฅํ ์ธํฐํ์ด์ค ํ์ฅ์ ์ํ ๊ฒ์ด๋ค. ํ์ฌ ๊ตฌํ์์๋ 0์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
sched_getattr()
์์คํ
ํธ์ถ์ pid
๋ก ์ง์ ํ ID์ ์ค๋ ๋๋ฅผ ์ํ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ๊ด๋ จ ์์ฑ๋ค์ ๊ฐ์ ธ์จ๋ค. pid
๊ฐ 0์ด๋ฉด ํธ์ถ ์ค๋ ๋์ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ์์ฑ์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
size
์ธ์๋ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์๋ ค์ ธ ์๋ sched_attr
๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋ก ์ค์ ํด์ผ ํ๋ค. ๊ทธ ๊ฐ์ด ์ ์ด๋ ์ต์ด ๊ณต๊ฐ๋ sched_attr
๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋งํผ์ ๋์ด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด EINVAL
์ค๋ฅ๋ก ํธ์ถ์ด ์คํจํ๋ค.
์ป์ด ๋ธ ์ค์ผ์ค๋ง ์์ฑ๋ค์ด attr
์ด ๊ฐ๋ฆฌํค๋ sched_attr
๊ตฌ์กฐ์ฒด์ ํ๋๋ค๋ก ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปค๋์์ attr.size
๋ฅผ ์๊ธฐ sched_attr
๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋ก ์ค์ ํ๋ค.
ํธ์ถ์๊ฐ ์ ๊ณตํ attr
๋ฒํผ๊ฐ ์ปค๋์ sched_attr
๊ตฌ์กฐ์ฒด๋ณด๋ค ํฌ๋ฉด ์ฌ์ฉ์ ๊ณต๊ฐ ๊ตฌ์กฐ์ฒด์ ์ถ๊ฐ ๋ฐ์ดํธ๋ค์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค. ํธ์ถ์๊ฐ ์ ๊ณตํ ๊ตฌ์กฐ์ฒด๊ฐ ์ปค๋์ sched_attr
๊ตฌ์กฐ์ฒด๋ณด๋ค ์๊ณ ์ ๊ณต๋ ๋ฒ์ ๋ฐ์์ ์ปค๋์ด ๊ฐ์ ๋ฐํํด์ผ ํ๋ฉด sched_getattr()
์ด E2BIG
์ค๋ฅ๋ก ์คํจํ๋ค. sched_setattr()
์์์ฒ๋ผ ์ด๋ฐ ๋์ ๋ฐฉ์์ ํตํด ํฅํ ์ธํฐํ์ด์ค ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
flags
์ธ์๋ ํฅํ ์ธํฐํ์ด์ค ํ์ฅ์ ์ํ ๊ฒ์ด๋ค. ํ์ฌ ๊ตฌํ์์๋ 0์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
์ฑ๊ณต ์ sched_setattr()
๊ณผ sched_getattr()
์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ ์์ธ์ ๋ํ๋ด๋๋ก errno
๋ฅผ ์ค์ ํ๋ค.
sched_getattr()
๊ณผ sched_setattr()
๋ชจ๋ ๋ค์ ์ด์ ๋ก ์คํจํ ์ ์๋ค.
EINVAL
-
attr
์ด NULL์ด๊ฑฐ๋,pid
๊ฐ ์์์ด๊ฑฐ๋,flags
๊ฐ 0์ด ์๋๋ค. ESRCH
- ID๊ฐ
pid
์ธ ์ค๋ ๋๋ฅผ ์ฐพ์ ์ ์๋ค.
๋๋ถ์ด sched_getattr()
์ด ๋ค์ ์ด์ ๋ก ์คํจํ ์ ์๋ค.
E2BIG
-
size
์attr
๋ก ์ง์ ํ ๋ฒํผ๊ฐ ๋๋ฌด ์๋ค. EINVAL
-
size
๊ฐ ์ ํจํ์ง ์๋ค. ์ฆ,sched_attr
๊ตฌ์กฐ์ฒด์ ์ต์ด ๋ฒ์ (48๋ฐ์ดํธ)๋ณด๋ค ์๊ฑฐ๋ ์์คํ ํ์ด์ง ํฌ๊ธฐ๋ณด๋ค ํฌ๋ค.
๋๋ถ์ด sched_setattr()
์ด ๋ค์ ์ด์ ๋ก ์คํจํ ์ ์๋ค.
E2BIG
-
size
์attr
๋ก ์ง์ ํ ๋ฒํผ๊ฐ ์ปค๋ ๊ตฌ์กฐ์ฒด๋ณด๋ค ํฌ๋ฉฐ ์ถ๊ฐ ๋ฐ์ดํธ๋ค ์ค ์ผ๋ถ๊ฐ 0์ด ์๋๋ค. EBUSY
-
SCHED_DEADLINE
์น์ธ ํต์ ์คํจ. sched(7) ์ฐธ๊ณ . EINVAL
-
attr.sched_policy
๊ฐ ์๋ ค์ง ์ ์ฑ ์ด ์๋๊ฑฐ๋,attr.sched_flags
๊ฐSCHED_FLAG_RESET_ON_FORK
์ธ์ ํ๋๊ทธ๋ฅผ ๋ด๊ณ ์๊ฑฐ๋,attr.sched_priority
๊ฐ ์ ํจํ์ง ์๊ฑฐ๋,attr.sched_policy
๊ฐSCHED_DEADLINE
์ธ๋ฐattr
๋ด์ ๋ง๊ฐ ์ค์ผ์ค๋ง ๋งค๊ฐ๋ณ์๊ฐ ์ ํจํ์ง ์๋ค. EPERM
- ํธ์ถ์๊ฐ ์ ์ ํ ํน๊ถ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
EPERM
-
pid
๋ก ์ง์ ํ ์ค๋ ๋์ CPU ์นํ์ฑ ๋ง์คํฌ์ ์์คํ ์ ๋ชจ๋ CPU๋ค์ด ํฌํจ๋ผ ์์ง ์๋ค. (sched_setaffinity(2) ์ฐธ๊ณ .)
๋ฆฌ๋ ์ค 3.14์์ ์ด ์์คํ ํธ์ถ๋ค์ด ์ฒ์ ๋ฑ์ฅํ๋ค.
์ด ์์คํ ํธ์ถ๋ค์ ๋นํ์ค ๋ฆฌ๋ ์ค ํ์ฅ์ด๋ค.
sched_setattr()
์ sched_setscheduler(2), sched_setparam(2), nice(2), ๊ทธ๋ฆฌ๊ณ (ํน์ ์ฌ์ฉ์์๊ฒ ์ํ ๋ชจ๋ ํ๋ก์ธ์ค๋ ํน์ ๊ทธ๋ฃน์ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๋ ๊ฒ์ ์ ์ธํ๊ณ ) setpriority(2)์ ์์์งํฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ ์ฌํ๊ฒ sched_getattr()
์ sched_getscheduler(2), sched_getparam(2), ๊ทธ๋ฆฌ๊ณ (๋ถ๋ถ์ ์ผ๋ก) getpriority(2)์ ์์์งํฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฆฌ๋
์ค ๋ฒ์ 3.15๊น์ง์์ ERRORS ์ ์์ ๊ธฐ์ ํ๋ ๊ฒฝ์ฐ์ sched_setattr()
์ด E2BIG
๋์ EFAULT
์ค๋ฅ๋ก ์คํจํ๋ค.
chrt(1)
, 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_setschedparam(3), pthread_setschedparam(3), pthread_setschedprio(3), capabilities(7), cpuset(7), sched(7)
2019-03-06