move_pages(2) - wariua/manpages-ko GitHub Wiki
move_pages - ํ๋ก์ธ์ค์ ๊ฐ๋ณ ํ์ด์ง๋ค์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ฎ๊ธฐ๊ธฐ
#include <numaif.h>
long move_pages(int pid, unsigned long count, void **pages,
const int *nodes, int *status, int flags);
-lnuma
๋ก ๋งํฌ.
move_pages()
๋ ํ๋ก์ธ์ค pid
์ ์ง์ ํ pages
๋ฅผ nodes
๋ก ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ๋
ธ๋๋ค๋ก ์ฎ๊ธด๋ค. ์ด๋ ๊ฒฐ๊ณผ๊ฐ status
์ ๋ฐ์๋๋ค. flags
๋ ์ด๋ํ ํ์ด์ง๋ค์ ๋ํ ์ ์ฝ์ ๋ํ๋ธ๋ค.
pid
๋ ์ด๋ํ ํ์ด์ง๋ค์ด ์๋ ํ๋ก์ธ์ค์ ID์ด๋ค. pid
๊ฐ 0์ด๋ฉด move_pages()
๋ ํธ์ถ ํ๋ก์ธ์ค์ ํ์ด์ง๋ฅผ ์ฎ๊ธด๋ค.
๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ์ด์ง๋ฅผ ์ฎ๊ธฐ๋ ค๋ฉด ๋ค์ ํน๊ถ์ด ํ์ํ๋ค.
-
4.12๊น์ง์ ์ปค๋: ํธ์ถ์์๊ฒ ํน๊ถ(
CAP_SYS_NICE
)์ด ์๊ฑฐ๋ ํธ์ถ ํ๋ก์ธ์ค์ ์ค์ ๋ด์ง ์คํจ ์ฌ์ฉ์ ID๊ฐ ๋์ ํ๋ก์ธ์ค์ ์ค์ ๋ด์ง saved-set ์ฌ์ฉ์ ID์ ์ผ์นํด์ผ ํ๋ค. -
์ด์ ๊ท์น ํ์์๋ ์ปค๋์์ ์ ์ ํ ์ฌ๋ฌ ๊ฐ์ ์ฃผ์๋ค์ ํธ์ถ์๊ฐ ์์๋ผ ์ ์์ด์ ํธ์ถ์์ ๊ฐ์ UID๊ฐ ์์ ํ๋ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ ๋ฐฐ์น ๋์ํ๊ฐ ๋ฌด๋ ฅํ ๋ ์ ์์๊ณ , ๊ทธ๋์ ๋ฆฌ๋ ์ค 4.13๋ถํฐ ๊ท์น์ด ๋ฐ๋์๋ค. ๋ฆฌ๋ ์ค 4.13๋ถํฐ๋ ๋์ ํ๋ก์ธ์ค์ ๋ํ ptrace ์ ๊ทผ ๋ชจ๋
PTRACE_MODE_READ_REALCREDS
๊ฒ์ฌ๋ก ํ๊ฐ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค. ptrace(2) ์ฐธ๊ณ .
count
๋ ์ฎ๊ธธ ํ์ด์ง ๊ฐ์์ด๋ค. ์ธ ๋ฐฐ์ด pages
, nodes
, status
์ ํฌ๊ธฐ๋ฅผ ๊ท์ ํ๋ค.
pages
๋ ์ฎ๊ฒจ์ผ ํ ํ์ด์ง๋ค์ ๋ํ ํฌ์ธํฐ๋ค์ ๋ฐฐ์ด์ด๋ค. ์ด ํฌ์ธํฐ๋ค์ ํ์ด์ง ๊ฒฝ๊ณ์ ๋ง์ถฐ ์ ๋ ฌ๋ผ ์์ด์ผ ํ๋ค. pid
๋ก ์ง์ ํ ํ๋ก์ธ์ค์๊ฒ ๋ณด์ด๋ ์ฃผ์๋ก ์ง์ ํ๋ค.
nodes
๋ ๊ฐ ํ์ด์ง์ ๋ํด ์ํ๋ ์์น๋ฅผ ์ง์ ํ ์ ์๋ค์ ๋ฐฐ์ด์ด๋ค. ๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ ๋
ธ๋ ๋ฒํธ์ด๋ค. nodes
๊ฐ NULL์ผ ์๋ ์๋๋ฐ, ๊ทธ ๊ฒฝ์ฐ move_pages()
๋ ํ์ด์ง๋ฅผ ์ฎ๊ธฐ์ง ์๊ณ ๋์ ๊ฐ ํ์ด์ง๊ฐ ํ์ฌ ์๋ฆฌํ ๋
ธ๋๋ฅผ status
๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ์ฎ๊ฒจ์ผ ํ ํ์ด์ง๋ค์ ์์๋ด๊ธฐ ์ํด ๊ฐ ํ์ด์ง์ ์ํ๋ฅผ ์ป์ด์ผ ํ ์ ์๋ค.
status
๋ ์ ์๋ค์ ๋ฐฐ์ด์ด๋ฉฐ ๊ฐ ํ์ด์ง์ ์ํ๋ฅผ ๋ฐํํ๋ค. move_pages()
๊ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ์ง ์์ ๊ฒฝ์ฐ์๋ง ๋ฐฐ์ด์ด ์ ํจํ ๊ฐ๋ค์ ๋ด๊ณ ์๋ค.
flags
๋ ์ฎ๊ธธ ํ์ด์ง์ ์ข
๋ฅ๋ฅผ ์ง์ ํ๋ค. MPOL_MF_MOVE
๋ ํ๋ก์ธ์ค์์ ๋ฐฐํ์ ์ผ๋ก ์ฌ์ฉ ์ค์ธ ํ์ด์ง๋ค๋ง ์ฎ๊ธฐ๋ผ๋ ๋ป์ด๋ค. MPOL_MF_MOVE_ALL
์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ ๊ณต์ ํ๋ ํ์ด์ง๋ค๋ ์ฎ๊ธธ ์ ์๋ค๋ ๋ป์ด๋ค. MPOL_MF_MOVE_ALL
์ ์ฐ๋ ค๋ฉด ํ๋ก์ธ์ค๊ฐ ํน๊ถ(CAP_SYS_NICE
)์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
status
๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ผ๋ก ๋ค์ ๊ฐ๋ค์ ๋ฐํํ ์ ์๋ค.
0..MAX_NUMNODES
- ํ์ด์ง๊ฐ ์๋ฆฌํ ๋ ธ๋๋ฅผ ๋ํ๋ธ๋ค.
-EACCES
- ํ์ด์ง๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋งต ํ๊ณ ์์ด์
MPOL_MF_MOVE_ALL
์ ์ง์ ํด์ผ๋ง ์ฎ๊ธธ ์ ์๋ค. -EBUSY
- ํ์ด์ง๊ฐ ํ์ฌ ์ฌ์ฉ ์ค์ด์ด์ ์ฎ๊ธธ ์ ์๋ค. ๋์ค์ ๋ค์ ์๋ํ๋ผ. ํ์ด์ง๋ก I/O๋ฅผ ํ๋ ์ค์ด๊ฑฐ๋ ๋ค๋ฅธ ์ปค๋ ์๋ธ์์คํ ์์ ํ์ด์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ก๊ณ ์๋ ๊ฒฝ์ฐ์ด๋ค.
-EFAULT
- ์ ๋ก ํ์ด์ง์ด๊ฑฐ๋ ํ๋ก์ธ์ค๊ฐ ๋งต ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
-EIO
- ํ์ด์ง๋ฅผ ๋ด๋ ค ์ธ ์ ์๋ค. ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋๋ฐ ๋ณ๊ฒฝ๋ ํ์ด์ง๋ฅผ ์ฎ๊ธธ ์ ์๊ฒ ํด ์ฃผ๋ ์ด์ ํจ์๋ฅผ ํ์ผ ์์คํ ์์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ฅผ ์ฎ๊ธฐ๊ธฐ ์ํด์ ์๋๋ก ๊ธฐ๋กํด์ผ ํ๋ค.
-EINVAL
- ๋ณ๊ฒฝ๋ ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์๋ค. ํ์ผ ์์คํ ์์ ์ด์ ํจ์๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ํ์ด์ง๋ฅผ ๋ด๋ ค ์ธ ์ ์๋ค.
-ENOENT
- ํ์ด์ง๊ฐ ์กด์ฌํ์ง ์๋๋ค.
-ENOMEM
- ๋์ ๋ ธ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค.
์ฑ๊ณต ์ move_pages()
๋ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno
๋ฅผ ์ค์ ํ๋ค.
E2BIG
- ์ฎ๊ธธ ํ์ด์ง๊ฐ ๋๋ฌด ๋ง๋ค.
EACCES
- ํ ๋์ ๋ ธ๋๋ฅผ ํ์ฌ cpuset์์ ํ์ฉํ์ง ์๋๋ค.
EFAULT
- ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ์ ๊ทผํ ์ ์๋ค.
EINVAL
-
MPOL_MF_MOVE
๋ฐMPOL_MF_MOVE_ALL
์ธ์ ํ๋๊ทธ๋ฅผ ์ง์ ํ๊ฑฐ๋ ์ปค๋ ์ค๋ ๋์ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ค๋ ์๋๊ฐ ์ด๋ค์ก๋ค. ENODEV
- ํ ๋์ ๋ ธ๋๊ฐ ์จ๋ผ์ธ์ด ์๋๋ค.
ENOENT
- ์ด๋์ด ํ์ํ ํ์ด์ง๋ฅผ ์ฐพ์ง ๋ชปํ๋ค. ๋ชจ๋ ํ์ด์ง๊ฐ ์ด๋ฏธ ๋์ ๋ ธ๋์ ์๊ฑฐ๋, ์กด์ฌํ์ง ์๊ฑฐ๋, ์ฃผ์๊ฐ ์ ํจํ์ง ์๊ฑฐ๋, ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋งต ํ๊ณ ์์ด์ ์ฎ๊ธธ ์ ์๋ค.
EPERM
- ํธ์ถ์๊ฐ ์ถฉ๋ถํ ํน๊ถ(
CAP_SYS_NICE
) ์์ดMPOL_MF_MOVE_ALL
์ ์ง์ ํ๋ค. ๋๋ ํธ์ถ์๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ํ ํ๋ก์ธ์ค์ ํ์ด์ง๋ฅผ ์ฎ๊ธฐ๋ ค๊ณ ์๋ํ๋๋ฐ ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํ ํน๊ถ(CAP_SYS_NICE
)์ ๊ฐ์ง๊ณ ์์ง ์์๋ค. ESRCH
- ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค.
๋ฆฌ๋
์ค ๋ฒ์ 2.6.18์์ move_pages()
๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ค.
์ด ์์คํ ํธ์ถ์ ๋ฆฌ๋ ์ค ์ ์ฉ์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ๋ํ ์ ๋ณด๋ numa(7)๋ฅผ ๋ณด๋ผ.
get_mempolicy(2)๋ฅผ MPOL_F_MEMS_ALLOWED
ํ๋๊ทธ๋ก ์ฌ์ฉํ๋ฉด ํ์ฌ cpuset์์ ํ์ฉํ๋ ๋
ธ๋๋ค์ ์งํฉ์ ์ป์ ์ ์๋ค. ์ฐธ๊ณ ๋ก ๊ทธ ์ ๋ณด๋ ์๋ ๋ด์ง ์๋์ผ๋ก ์ด๋ค์ง๋ cpuset ์ฌ๊ตฌ์ฑ์ผ๋ก ์ธํด ์ธ์ ๋ ๋ฐ๋ ์ ์๋ค.
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง๋ค์ ์์น(๋
ธ๋)๊ฐ ์ง์ ์ฃผ์(mbind(2)) ๋ฐ/๋๋ ์ง์ ํ๋ก์ธ์ค(set_mempolicy(2))์ ๋ํด ์ค์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
๊ณผ ์ด๊ธ๋๊ฒ ๋ ์๋ ์๋ค. ๋ค์ ๋งํด ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
์ด move_pages()
์์ ์ฐ๋ ๋ชฉ์ ์ง ๋
ธ๋๋ฅผ ์ ์ฝํ์ง ์๋๋ค.
<numaif.h>
ํค๋๋ glibc์ ํฌํจ๋์ด ์์ง ์์ผ๋ฉฐ libnuma-devel
๋ด์ง ๊ทธ์ ๋น์ทํ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ๋ค.
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8)
, numastat(8)
2017-09-15