ioprio_set(2) - wariua/manpages-ko GitHub Wiki
ioprio_get, ioprio_set - I/O ์ค์ผ์ค๋ง ํด๋์ค ๋ฐ ์ฐ์ ์์ ์ป๊ธฐ/์ค์ ํ๊ธฐ
int ioprio_get(int which, int who);
int ioprio_set(int which, int who, int ioprio);์ฃผ์: ์ด ์์คํ ํธ์ถ์ ๋ํ glibc ๋ํผ๊ฐ ์๋ค. NOTES ์ฐธ๊ณ .
ioprio_get() ๋ฐ ioprio_set() ์์คํ
ํธ์ถ์ ํ ๊ฐ ๋๋ ์ฌ๋ฌ ์ค๋ ๋์ I/O ์ค์ผ์ค๋ง ํด๋์ค์ ์ฐ์ ์์๋ฅผ ์ป๊ณ ์ค์ ํ๋ค.
which์ who ์ธ์๋ ์์คํ
ํธ์ถ์ ๋์ ๋์์ด ๋๋ ์ค๋ ๋(๋ค)์ ๋ํ๋ธ๋ค. which ์ธ์๋ who๋ฅผ ํด์ํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ฉฐ ๋ค์ ๊ฐ๋ค ์ค ํ๋์ด๋ค.
IOPRIO_WHO_PROCESS-
who๊ฐ ํ๋ก์ธ์ค ID๋ ์ค๋ ๋ ID์ด๋ฉฐ ๋จ์ผ ํ๋ก์ธ์ค ๋ด์ง ์ค๋ ๋๋ฅผ ๋ํ๋ธ๋ค.who๊ฐ 0์ด๋ฉด ํธ์ถ ์ค๋ ๋๊ฐ ๋์์ด๋ค. IOPRIO_WHO_PGRP-
who๊ฐ ํ๋ก์ธ์ค ๊ทธ๋ฃน ID์ด๋ฉฐ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๊ตฌ์ฑ์ ๋ชจ๋๋ฅผ ๋ํ๋ธ๋ค.who๊ฐ 0์ด๋ฉด ํธ์ถ์๊ฐ ๊ตฌ์ฑ์์ธ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ด ๋์์ด๋ค. IOPRIO_WHO_USER-
who๊ฐ ์ฌ์ฉ์ ID์ด๋ฉฐ ์ค์ UID๊ฐ ์ผ์นํ๋ ํ๋ก์ธ์ค ๋ชจ๋๋ฅผ ๋ํ๋ธ๋ค.
ioprio_get() ํธ์ถ ์์ which๊ฐ IOPRIO_WHO_PGRP์ด๋ IOPRIO_WHO_USER์ด๊ณ who์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ์๋ ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค ์ ์ฒด์์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๋ฐํํ๊ฒ ๋๋ค. ์ด๋ค ์ฐ์ ์์๊ฐ ๋ ๋๋ค๋ ๊ฒ์ ๋ ๋์ ์ฐ์ ์์ ํด๋์ค์ ์ํ๊ฑฐ๋ (IOPRIO_CLASS_RT๊ฐ ๊ฐ์ฅ ๋์ ์ฐ์ ์์ ํด๋์ค์ด๊ณ IOPRIO_CLASS_IDLE์ด ๊ฐ์ฅ ๋ฎ์) ์๋๋ฉด ๊ฐ์ ์ฐ์ ์์ ํด๋์ค์ ์ํ๋ฉด์ ์ฐ์ ์์ ๋จ๊ณ๊ฐ ๋ ๋์ ๊ฒ์ด๋ค (๋ฎ์ ์ฐ์ ์์ ์๊ฐ ๋์ ์ฐ์ ์์ ๋จ๊ณ๋ฅผ ๋ปํจ).
ioprio_set()์ ์ฃผ๋ ioprio ์ธ์๋ ๋์ ํ๋ก์ธ์ค(๋ค)์ ๋ถ์ฌํ ์ค์ผ์ค๋ง ํด๋์ค์ ์ฐ์ ์์ ๋ชจ๋๋ฅผ ๋ํ๋ด๋ ๋นํธ ๋ง์คํฌ์ด๋ค. ๋ค์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด ioprio ๊ฐ์ ํฉ์น๊ฑฐ๋ ๋ถํดํ๋ค.
IOPRIO_PRIO_VALUE(class, data)- ์ด ๋งคํฌ๋ก๋ ์ค์ผ์ค๋ง ํด๋์ค(
class)์ ์ฐ์ ์์(data)๋ฅผ ๋ฐ์์ ๋ ๊ฐ์ ํฉ์นioprio๊ฐ์ ๋ง๋ค์ด ๋งคํฌ๋ก ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ค. IOPRIO_PRIO_CLASS(mask)- ์ด ๋งคํฌ๋ก๋
mask(ioprio๊ฐ)๋ฅผ ๋ฐ์์ I/O ํด๋์ค ์์๋ฅผ ๋ฐํํ๋ค. ์ฆIOPRIO_CLASS_RT,IOPRIO_CLASS_BE,IOPRIO_CLASS_IDLE์ค ํ๋๋ฅผ ๋ฐํํ๋ค. IOPRIO_PRIO_DATA(mask)- ์ด ๋งคํฌ๋ก๋
mask(ioprio๊ฐ)๋ฅผ ๋ฐ์์ ์ฐ์ ์์(data) ์์๋ฅผ ๋ฐํํ๋ค.
์ค์ผ์ค๋ง ํด๋์ค์ ์ฐ์ ์์์ ๋ํ ์ถ๊ฐ ์ ๋ณด์ ioprio๋ฅผ 0์ผ๋ก ์ง์ ํ์ ๋์ ์๋ฏธ์ ๋ํด์ NOTES ์ ์ ์ฐธ๊ณ ํ๋ผ.
์ฝ๊ธฐ์ ๋๊ธฐ์ ์ธ (O_DIRECT, O_SYNC) ์ฐ๊ธฐ์์ I/O ์ฐ์ ์์๋ฅผ ์ง์ํ๋ค. ๋น๋๊ธฐ ์ฐ๊ธฐ์๋ I/O ์ฐ์ ์์๋ฅผ ์ง์ํ์ง ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋งฅ๋ฝ ๋ฐ์์ ๊ฐ์๋๋ฏ๋ก ํ๋ก๊ทธ๋จ๋ณ ์ฐ์ ์์๊ฐ ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฑ๊ณต ์ ioprio_get()์ which์ who๋ก ์ง์ ํ ๊ธฐ์ค์ ๋ง๋ ํ๋ก์ธ์ค๋ค ์ค ๊ฐ์ฅ ๋์ I/O ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์ ioprio ๊ฐ์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno๋ฅผ ์ค์ ํ๋ค.
์ฑ๊ณต ์ ioprio_set()์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno๋ฅผ ์ค์ ํ๋ค.
EINVAL-
which๋ioprio์ ์ ํจํ์ง ์์ ๊ฐ.ioprio์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ค์ผ์ค๋ฌ ํด๋์ค์ ์ฐ์ ์์๋ NOTES ์ ์ฐธ๊ณ . EPERM- ํธ์ถ ํ๋ก์ธ์ค์๊ฒ ์ง์ ํ ํ๋ก์ธ์ค(๋ค)์๊ฒ ๊ทธ
ioprio๋ฅผ ๋ถ์ฌํ ํน๊ถ์ด ์๋ค.ioprio_set()์ ํ์ํ ํน๊ถ์ ๋ํ ์์ธํ ๋ด์ฉ์ NOTES ์ ์ฐธ๊ณ . ESRCH-
which์who์ ์ง์ ๋ด์ฉ์ ์ผ์นํ๋ ํ๋ก์ธ์ค๋ฅผ ์ฐพ์ ์ ์๋ค.
๋ฆฌ๋ ์ค ์ปค๋ 2.6.13๋ถํฐ ์ด ์์คํ ํธ์ถ๋ค์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ด ์์คํ ํธ์ถ๋ค์ ๋ฆฌ๋ ์ค ์ ์ฉ์ด๋ค.
glibc์์ ์ด ์์คํ ํธ์ถ์ ๋ํผ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. syscall(2)์ ์ด์ฉํด ํธ์ถํด์ผ ํ๋ค.
๋ ์ด์์ ํ๋ก์ธ์ค ๋ด์ง ์ค๋ ๋๊ฐ I/O ๋ฌธ๋งฅ์ ๊ณต์ ํ ์ ์๋ค. clone(2)์ CLONE_IO ํ๋๊ทธ๋ฅผ ์จ์ ํธ์ถํ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ ๋ค. ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก๋ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ค์ด ๊ฐ์ I/O ๋ฌธ๋งฅ์ ๊ณต์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋์ I/O ์ฐ์ ์์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์ค๋ ๋ ๊ฐ๊ฐ์ ioprio_set()์ ํธ์ถํด์ผ ํ ์๋ ์๋ค. ๊ทธ๋ ํ์ํ ์ค๋ ๋ ID๋ gettid(2)๋ clone(2)์ด ๋ฐํํ ๊ฐ์ด๋ค.
I/O ์ฐ์ ์์๋ฅผ ์ง์ํ๋ I/O ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ ๋์๋ง ์ด ์์คํ ํธ์ถ๋ค์ ํจ๋ ฅ์ด ์๋ค. ์ปค๋ 2.6.17 ํ์ฌ ๊ทธ๋ฐ ์ ์ผํ ์ค์ผ์ค๋ฌ๋ Completely Fair Queuing (CFQ) I/O ์ค์ผ์ค๋ฌ์ด๋ค.
์ค๋ ๋์ ์ด๋ค I/O ์ค์ผ์ค๋ฌ๋ ์ค์ ํ์ง ์์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก I/O ์ฐ์ ์์๊ฐ CPU ๋์ด์ค ๊ฐ(setpriority(2))์ ๋ฐ๋ฅธ๋ค. ๋ฆฌ๋
์ค ์ปค๋ ๋ฒ์ 2.6.24 ์ ์์๋ ioprio_set()์ผ๋ก I/O ์ฐ์ ์์๋ฅผ ํ๋ฒ ์ค์ ํ๊ณ ๋๋ฉด I/O ์ค์ผ์ค๋ง ๋์์ ๊ธฐ๋ณธ์ผ๋ก ๋๋๋ฆด ๋ฐฉ๋ฒ์ด ์์๋ค. ๋ฆฌ๋
์ค 2.6.24๋ถํฐ๋ ioprio๋ฅผ 0์ผ๋ก ์ง์ ํด์ ๊ธฐ๋ณธ I/O ์ค์ผ์ค๋ง ๋์์ผ๋ก ๋๋๋ฆด ์ ์๋ค.
I/O ์ค์ผ์ค๋ฌ๋ ํน์ ํ์ผ /sys/block/<device>/queue/scheduler๋ฅผ ํตํด ์ฅ์น๋ณ๋ก ์ ํํ๋ค.
/sys ํ์ผ ์์คํ
์ ํตํด ํ์ฌ I/O ์ค์ผ์ค๋ฌ๋ฅผ ๋ณผ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ช
๋ น์ ํ์ฌ ์ปค๋์ ์ ์ฌ๋ ๋ชจ๋ ์ค์ผ์ค๋ฌ๋ค์ ๋ชฉ๋ก์ ๋ณด์ฌ ์ค๋ค.
$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
๊บฝ์ ๊ดํธ๊ฐ ์ณ์ง ๊ฒ ๊ทธ ์ฅ์น(์ฌ๊ธฐ์ sda)์ ์ค์ ์ฌ์ฉ ์ค์ธ ์ค์ผ์ค๋ฌ์ด๋ค. ๋ค๋ฅธ ์ค์ผ์ค๋ฌ๋ฅผ ์ ํํ๋ ค๋ฉด ์ด ํ์ผ์ ์ ์ค์ผ์ค๋ฌ์ ์ด๋ฆ์ ๊ธฐ๋กํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ช
๋ น์ sda ์ฅ์น์ ์ค์ผ์ค๋ฌ๋ฅผ cfq๋ก ์ค์ ํ๋ค.
$ su
Password:
# echo cfq > /sys/block/sda/queue/scheduler
(CFQ Time Sliced๋ผ๊ณ ๋ ํ๋) ๋ฒ์ 3๋ถํฐ CFQ์์๋ CPU ์ค์ผ์ค๋ง๊ณผ ๋น์ทํ I/O ๋์ด์ค ๋จ๊ณ๋ฅผ ๊ตฌํํ๋ค. ๊ทธ ๋์ด์ค ๋จ๊ณ๋ค์ ์ธ ๊ฐ์ง ์ค์ผ์ค๋ง ํด๋์ค๋ก ๋ฌถ์ผ๋ฉฐ, ๊ฐ ํด๋์ค๋ง๋ค ํ ๊ฐ ์ด์์ ์ฐ์ ์์ ๋จ๊ณ๊ฐ ์๋ค.
-
IOPRIO_CLASS_RT(1) - ์ค์๊ฐ I/O ํด๋์ค์ด๋ค. ์ด ์ค์ผ์ค๋ง ํด๋์ค์๋ ๋ค๋ฅธ ์ด๋ค ํด๋์ค๋ณด๋ค ๋์ ์ฐ์ ์์๋ฅผ ์ค๋ค. ์ฆ ์ด ํด๋์ค์ ํ๋ก์ธ์ค๋ค์ ๋งค๋ฒ ์ต์ฐ์ ๋์คํฌ ์ ๊ทผ๊ถ์ ์ค๋ค. ๋ฐ๋ผ์ ์ด I/O ํด๋์ค๋ ์กฐ์ฌํด์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. I/O๊ฐ ์ค์๊ฐ์ธ ํ๋ก์ธ์ค ํ๋๊ฐ ์ ์ฒด ์์คํ ์ ๊ตถ๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์๊ฐ ํด๋์ค ๋ด์๋ 8๋จ๊ณ์ ํด๋์ค ๋ฐ์ดํฐ(์ฐ์ ์์)๊ฐ ์์ด์ ์ด ํ๋ก์ธ์ค๊ฐ ๊ฐ ์๋น์ค๋ง๋ค ์ ํํ ์ผ๋ง๋ ์ค๋ ๋์คํฌ๋ฅผ ํ์๋ก ํ๋์ง ๊ฒฐ์ ํ๋ค. ๊ฐ์ฅ ๋์ ์ค์๊ฐ ์ฐ์ ์์ ๋จ๊ณ๋ 0์ด๊ณ ๊ฐ์ฅ ๋ฎ์ ๋จ๊ณ๋ 7์ด๋ค. ํฅํ์๋ ์ํ๋ ๋ฐ์ดํฐ ์๋๋ฅผ ์ ๋ฌํด์ ๋ ์ง์ ์ ์ผ๋ก ์ฑ๋ฅ๊ณผ ์ฐ๊ฒฐ๋๋๋ก ๋ฐ๋ ์๋ ์๋ค.
-
IOPRIO_CLASS_BE(2) - ์ต์ ์ค์ผ์ค๋ง ํด๋์ค์ด๋ค. ํน๋ณํ I/O ์ฐ์ ์์๋ฅผ ์ค์ ํ์ง ์์ ํ๋ก์ธ์ค๋ค์ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ํด๋์ค ๋ฐ์ดํฐ(์ฐ์ ์์)๋ ํ๋ก์ธ์ค๊ฐ ์ผ๋ง๋ ๋ง์ I/O ๋์ญํญ์ ์ป๊ฒ ๋ ์ง ๊ฒฐ์ ํ๋ค. ์ต์ ์ฐ์ ์์ ๋จ๊ณ๋ค์ CPU ๋์ด์ค ๊ฐ๊ณผ ์ ์ฌํ๋ค. (getpriority(2) ์ฐธ๊ณ .) ์ฐ์ ์์ ๋จ๊ณ๋ ์ต์ ์ค์ผ์ค๋ง ํด๋์ค ๋ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ๋ํ ์๋์ ์ฐ์ ๋๋ฅผ ๊ฒฐ์ ํ๋ค. ์ฐ์ ์์ ๋จ๊ณ์ ๋ฒ์๋ 0(์ต๊ณ )์์ 7(์ต์ )๊น์ง์ด๋ค.
-
IOPRIO_CLASS_IDLE(3) - ์ ํด ์ค์ผ์ค๋ง ํด๋์ค์ด๋ค. ์ด ๋จ๊ณ์์ ๋์ํ๋ ํ๋ก์ธ์ค๋ ๋์คํฌ๋ฅผ ํ์๋ก ํ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ ๋์๋ง I/O ์๊ฐ์ ์ป๋๋ค. ์ ํด ํด๋์ค์๋ ํด๋์ค ๋ฐ์ดํฐ๊ฐ ์๋ค. ํ๋ก์ธ์ค์ ์ด ์ฐ์ ์์ ํด๋์ค๋ฅผ ๋ถ์ฌํ ๋๋ ์ฃผ์ํ ํ์๊ฐ ์๋๋ฐ, ๋ ๋์ ์ฐ์ ๋์ ํ๋ก์ธ์ค๋ค์ด ๊ณ์ํด์ ๋์คํฌ์ ์ ๊ทผํ๋ฉด ๊ทธ ํ๋ก์ธ์ค๊ฐ ๊ตถ์ฃผ๋ฆฌ๊ฒ ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
CFQ I/O ์ค์ผ์ค๋ฌ์ ๋ํ ์ถ๊ฐ ๋ด์ฉ๊ณผ ์์ ํ๋ก๊ทธ๋จ์ ์ปค๋ ์์ค ํ์ผ Documentation/block/ioprio.txt๋ฅผ ์ฐธ๊ณ ํ๋ผ.
๋ ๊ฐ์ง ๊ธฐ์ค์ ๋ฐ๋ผ ํ๋ก์ธ์ค ์ฐ์ ์์ ๋ณ๊ฒฝ์ด ํ๊ฐ๋๊ฑฐ๋ ๊ฑฐ๋ถ๋๋ค.
- ํ๋ก์ธ์ค ์์ ๊ถ
- ๋นํน๊ถ ํ๋ก์ธ์ค๋ ํธ์ถ ํ๋ก์ธ์ค์ ์ค์ UID๋ ์คํจ UID์ ์ผ์นํ๋ ์ค์ UID๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์ ๋ํด์๋ง I/O ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋ค.
CAP_SYS_NICE์ญ๋ฅ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. - ์ํ๋ ์ฐ์ ์์
- ์์ฃผ ๋์ ์ฐ์ ์์(
IOPRIO_CLASS_RT)๋ฅผ ์ค์ ํ๋ ค๋ฉดCAP_SYS_ADMIN์ญ๋ฅ์ด ํ์ํ๋ค. ์ปค๋ ๋ฒ์ 2.6.24๊น์ง์์๋ ์์ฃผ ๋ฎ์ ์ฐ์ ์์(IOPRIO_CLASS_IDLE)๋ฅผ ์ค์ ํ๋ ๋ฐ๋CAP_SYS_ADMIN์ด ํ์ํ์ง๋ง ๋ฆฌ๋ ์ค 2.6.25๋ถํฐ๋ ํ์ํ์ง ์๋ค.
ioprio_set() ํธ์ถ ์ ๋ ๊ท์น ๋ชจ๋๋ฅผ ๋ฐ๋ผ์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ํธ์ถ์ด EPERM ์ค๋ฅ๋ก ์คํจํ๊ฒ ๋๋ค.
์ด ํ์ด์ง์์ ๊ธฐ์ ํ๋ ํจ์ ์ํ๊ณผ ๋งคํฌ๋ก๋ฅผ ์ ์ํ๋ ์ ์ ํ ํค๋ ํ์ผ์ glibc์์ ์์ง ์ ๊ณตํ์ง ์๋๋ค. linux/ioprio.h์์ ์ ์ ํ ์ ์๋ค์ ์ฐพ์ ์ ์๋ค.
ionice(1), getpriority(2), open(2), capabilities(7), cgroups(7)
๋ฆฌ๋
์ค ์ปค๋ ์์ค ํธ๋ฆฌ์ Documentation/block/ioprio.txt
2019-03-06