set_mempolicy(2) - wariua/manpages-ko GitHub Wiki
set_mempolicy - ์ค๋ ๋์ ๊ทธ ์์๋ค์ ๊ธฐ๋ณธ NUMA ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ ์ค์ ํ๊ธฐ
#include <numaif.h>
long set_mempolicy(int mode, const unsigned long *nodemask,
unsigned long maxnode);
-lnuma
๋ก ๋งํฌ.
set_mempolicy()
๋ ํธ์ถ ์ค๋ ๋์ NUMA ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
์ ์ค์ ํ๋ค. ์ ์ฑ
์ ์ ์ฑ
๋ชจ๋์ 0๊ฐ ์ด์์ ๋
ธ๋๋ค๋ก ์ด๋ค์ง๋ฉฐ ์ด๋ฅผ mode
, nodemask
, maxnode
์ธ์๋ก ์ง์ ํ ๊ฐ๋ค๋ก ์ค์ ํ๋ค.
NUMA ๋จธ์ ์๋ CPU๋ค๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ ์ ์ค๋ ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ ๋ ธ๋์์ ํ ๋นํ ์ง ๊ท์ ํ๋ค.
์ด ์์คํ
ํธ์ถ์ ์ค๋ ๋์ ๊ธฐ๋ณธ ์ ์ฑ
์ ์ง์ ํ๋ค. mbind(2)๋ก ์ค์ ํ ๋ ๊ตฌ์ฒด์ ์ธ ์ ์ฑ
์ ํต์ ๋ฅผ ๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์๋ค ์ธ์ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์์ ์ค๋ ๋ ์ ์ฑ
์ด ํ์ด์ง ํ ๋น์ ์ ์ดํ๋ค. ์ค๋ ๋ ๊ธฐ๋ณธ ์ ์ฑ
์ ๋ํ mmap(2) ํธ์ถ์ MAP_PRIVATE
ํ๋๊ทธ๋ก ์ฌ์ฉํด ๋งต ํด์ ๊ทธ ์ค๋ ๋์์๋ง ์ฝ๋(์ ์ฌํ๋) ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ๊ณผ ์ ๊ทผ ๋ฐฉ์๊ณผ ๋ฌด๊ดํ๊ฒ mmap(2) ํธ์ถ์ MAP_SHARED
ํ๋๊ทธ๋ก ์ฌ์ฉํด ๋งต ํ ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ์ ํ์ด์ง ํ ๋น์ ์ ์ดํ๋ค. ์ค๋ ๋๋ฅผ ์ํด ์ ํ์ด์ง๋ฅผ ํ ๋นํ ๋์๋ง ์ ์ฑ
์ด ์ ์ฉ๋๋ค. ์ต๋ช
๋ฉ๋ชจ๋ฆฌ์์๋ ์ค๋ ๋๊ฐ ํ์ด์ง๋ฅผ ์ฒ์ ๊ฑด๋๋ฆด ๋์ด๋ค.
mode
์ธ์์๋ MPOL_DEFAULT
, MPOL_BIND
, MPOL_INTERLEAVE
, MPOL_PREFERRED
, MPOL_LOCAL
(์๋์์ ์์ธํ ์ค๋ช
ํจ) ์ค ํ๋๋ฅผ ์ง์ ํด์ผ ํ๋ค. MPOL_DEFAULT
๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ชจ๋์์ ํธ์ถ์๊ฐ nodemask
์ธ์๋ฅผ ํตํด ๋ชจ๋๋ฅผ ์ ์ฉํ ๋
ธ๋๋ฅผ ์ง์ ํด์ผ ํ๋ค.
mode
์ธ์์ ์ ํ์ ์ผ๋ก ๋ชจ๋ ํ๋๊ทธ๊ฐ ํฌํจ๋ ์ ์๋ค. ์ง์ํ๋ ๋ชจ๋ ํ๋๊ทธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
-
MPOL_F_STATIC_NODES
(๋ฆฌ๋ ์ค 2.6.26๋ถํฐ) - ๋น์ด ์์ง ์์
nodemask
๊ฐ ๋ฌผ๋ฆฌ์ ๋ ธ๋ ID๋ค์ ๋ํ๋ธ๋ค. ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ cpuset ๋ฌธ๋งฅ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์ด ํ์ฉํ๋ ๋ ธ๋ ์งํฉ์ด ๋ฐ๋ ๋ ๋ฆฌ๋ ์ค์์nodemask
๋ฅผ ์ฌ์ฌ์ ํ์ง ์๋๋ค. -
MPOL_F_RELATIVE_NODES
(๋ฆฌ๋ ์ค 2.6.26๋ถํฐ) - ๋น์ด ์์ง ์์
nodemask
๊ฐ ํ๋ก์ธ์ค์ ํ์ฌ cpuset์ด ํ์ฉํ๋ ๋ ธ๋ ID ์งํฉ์ ๋ํ ์๋์ ์ธ ๋ ธ๋ ID๋ค์ ๋ํ๋ธ๋ค.
nodemask
๋ ๋
ธ๋ ID๋ค์ ๋นํธ ๋ง์คํฌ๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๊ทธ ๋นํธ ๋ง์คํฌ์๋ ์ต๋ maxnode
๊ฐ๊น์ง์ ๋นํธ๊ฐ ๋ด๊ฒจ ์๋ค. ๋นํธ ๋ง์คํฌ ํฌ๊ธฐ๋ฅผ sizeof(unsigned long)
์ ๋ค์ ๋ฐฐ์๋ก ์ฌ๋ฆผ ํ์ง๋ง ์ปค๋์์๋ maxnode
๊ฐ๊น์ง์ ๋นํธ๋ง ์ฌ์ฉํ๋ค. nodemask
๊ฐ์ด NULL์ด๊ฑฐ๋ maxnode
๊ฐ์ด 0์ด๋ฉด ๋น ๋
ธ๋ ์งํฉ์ ๋ํ๋ธ๋ค. maxnode
์ ๊ฐ์ด 0์ด๋ฉด nodemask
์ธ์๋ฅผ ๋ฌด์ํ๋ค.
nodemask
๊ฐ ํ์์ธ ๊ฒฝ์ฐ์ ๊ทธ ์ธ์๋ ์จ๋ผ์ธ์ด๊ณ , (MPOL_F_STATIC_NODES
๋ชจ๋ ํ๋๊ทธ๋ฅผ ์ง์ ํ์ง ์์์ผ๋ฉด) ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์ด ํ์ฉํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ ๋
ธ๋๋ฅผ ์ ์ด๋ ํ ๊ฐ๋ ํฌํจํด์ผ ํ๋ค. mode
์ MPOL_F_STATIC_NODES
๊ฐ ์ค์ ๋ผ ์๊ณ ํ์์ธ nodemask
์ ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์ด ํ์ฉํ๋ ๋
ธ๋๊ฐ ํ๋๋ ๋ด๊ฒจ ์์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
์ด ์ง์ญ ํ ๋น์ผ๋ก ๋๋์๊ฐ๋ค. ์ฆ ํ๋ก์ธ์ค์ cpuset ๋ฌธ๋งฅ์ด nodemask
์ ์ง์ ํ ๋
ธ๋๋ฅผ ํ๋ ์ด์ ํฌํจํ๊ฒ ๋ ๋๊น์ง๋ ์ค์ง์ ์ผ๋ก ์ง์ ํ ์ ์ฑ
์ ๋ฌด์ํ๋ค.
mode
์ธ์์ ๋ค์ ๊ฐ๋ค ์ค ํ๋๊ฐ ํฌํจ๋ผ์ผ ํ๋ค.
MPOL_DEFAULT
- ์ด ๋ชจ๋๋ ๊ธฐ๋ณธ๊ณผ ๋ค๋ฅธ ์ค๋ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
์ ๋ชจ๋ ์ ๊ฑฐํด์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ
์ ์์คํ
๊ธฐ๋ณธ ์ ์ฑ
์ผ๋ก "ํํด"์ํค๊ฒ ํ๋ค. ์์คํ
๊ธฐ๋ณธ ์ ์ฑ
์ "์ง์ญ ํ ๋น"์ด๋ค. ์ฆ ํ ๋น์ ์ด๋ฐํ CPU์ ๋
ธ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
nodemask
๋ฅผ NULL๋ก ์ง์ ํด์ผ ํ๋ค. "์ง์ญ ๋ ธ๋"์ ์ ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด "์ธ๊ทผ" ๋ ธ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ค ์๋ํ๊ฒ ๋๋ค. MPOL_BIND
- ์ด ๋ชจ๋๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์
nodemask
์ ์ง์ ํ ๋ ธ๋๋ค๋ก ์ ์ฝํ๋ ์๊ฒฉํ ์ ์ฑ ์ ์ง์ ํ๋ค.nodemask
์ ๋ ธ๋๊ฐ ์ฌ๋ฌ ๊ฐ ์์ผ๋ฉด ๋ ธ๋ ID์ ์ซ์ ๊ฐ์ด ๊ฐ์ฅ ๋ฎ์ ๋ ธ๋์์ ํ์ด์ง ํ ๋น์ ํ๋ค. ๊ทธ ๋ ธ๋์ ์ ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ด์ง๋ฉดnodemask
์ ์ง์ ํ ๋ค์์ผ๋ก ๋ฎ์ ID์ ๋ ธ๋์์ ํ ๋น์ ํ๊ณ , ๊ทธ๋ฐ ์์ผ๋ก ์ง์ ํ ๋ ธ๋๋ค ์ด๋์๋ ์ ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ ๋๊น์ง ์งํํ๋ค.nodemask
์ ์ง์ ํ์ง ์์ ์ด๋ค ๋ ธ๋์์๋ ํ์ด์ง๋ฅผ ํ ๋นํ์ง ์๋๋ค. MPOL_INTERLEAVE
- ์ด ๋ชจ๋์์๋
nodemask
์ ์ง์ ํ ๋ ธ๋๋ค ๋ด์์ ๋ ธ๋ ID ์์์ ๋ฐ๋ผ ๊ต๋๋ก ํ์ด์ง ํ ๋น์ ํ๋ค. ํ์ด์ง๋ค๊ณผ ๊ทธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ฌ๋ฌ ๋ ธ๋๋ก ๋ถ์ฐ์ํด์ผ๋ก์จ ์ง์ฐ๋ณด๋ค๋ ๋์ญํญ์ ์ต์ ํ ํ๋ค. ํ์ง๋ง ๋จ์ผ ํ์ด์ง์ ๋ํ ์ ๊ทผ์ ์ฌ์ ํ ๋จ์ผ ๋ ธ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ผ๋ก ์ ํ๋๋ค. MPOL_PREFERRED
- ์ด ๋ชจ๋๋ ํ ๋น ์ ํธ ๋
ธ๋๋ฅผ ์ค์ ํ๋ค. ์ปค๋์ด ๋จผ์ ๊ทธ ๋
ธ๋์์ ํ์ด์ง๋ฅผ ํ ๋นํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ทธ ์ ํธ ๋
ธ๋์ ์ ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด "์ธ๊ทผ" ๋
ธ๋๋ก ํํดํ๋ค.
nodemask
์ ๋ ธ๋ ID๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ๋ฉด ๋ง์คํฌ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์ ํธ ๋ ธ๋๋ก ์ ํํ๊ฒ ๋๋ค.nodemask
๋ฐmaxnode
์ธ์๊ฐ ๋น ์งํฉ์ ๋ํ๋ด๋ ๊ฒฝ์ฐ์๋ ์ด ์ ์ฑ ์ด (์์ ๋ ผ์ํ ์์คํ ๊ธฐ๋ณธ ์ ์ฑ ๊ฐ์) "์ง์ญ ํ ๋น"์ ์ง์ ํ๋ค. -
MPOL_LOCAL
(๋ฆฌ๋ ์ค 3.8๋ถํฐ) - ์ด ๋ชจ๋๋ "์ง์ญ ํ ๋น"์ ๋ํ๋ธ๋ค. ์ฆ ํ ๋น์ ์ด๋ฐํ CPU์ ๋
ธ๋("์ง์ญ ๋
ธ๋")์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
nodemask
๋ฐmaxnode
์ธ์๊ฐ ๋น ์งํฉ์ ๋ํ๋ด์ผ ํ๋ค. "์ง์ญ ๋ ธ๋"์ ์ ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ปค๋์ ๋ค๋ฅธ ๋ ธ๋์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์๋ํ๊ฒ ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ปค๋์ด ํญ์ "์ง์ญ ๋ ธ๋"์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฒ ๋๋ค. ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์ด "์ง์ญ ๋ ธ๋"๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉด ์ปค๋์ด ๋ค๋ฅธ ๋ ธ๋์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์๋ํ๊ฒ ๋๋ค. ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์์ ํ์ฉํ๊ฒ ๋๋ฉด ์ปค๋์ด ํญ์ "์ง์ญ ๋ ธ๋"์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฒ ๋๋ค.
execve(2)๋ฅผ ๊ฑฐ์น๋ฉด์ ์ค๋ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ ์ด ๋ณด์กด๋๋ฉฐ, fork(2)๋ clone(2)์ผ๋ก ์์ฑํ ์์์ด ์ ์ฑ ์ ๋ฌผ๋ ค๋ฐ๋๋ค.
์ฑ๊ณต ์ set_mempolicy()
๋ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno
๋ฅผ ์ค์ ํ๋ค.
EFAULT
-
nodemask
์maxnode
๋ก ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์์ ์ผ๋ถ ๋ด์ง ์ ์ฒด๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ์ฃผ์ ๊ณต๊ฐ ๋ฐ์ ๊ฐ๋ฆฌํจ๋ค. EINVAL
-
mode
๊ฐ ์ ํจํ์ง ์๋ค. ๋๋mode
๊ฐMPOL_DEFAULT
์ด๊ณnodemask
๊ฐ ๋น์ด ์์ง ์๊ฑฐ๋,mode
๊ฐMPOL_BIND
๋MPOL_INTERLEAVE
์ด๊ณnodemask
๊ฐ ๋น์ด ์๋ค. ๋๋maxnode
๊ฐ ๋ํ๋ด๋ ๋นํธ๋ค์ด ํ ํ์ด์ง๋ฅผ ๋๋๋ค. ๋๋ ์ง์ํ๋ ๊ฐ์ฅ ํฐ ๋ ธ๋ ID๋ณด๋ค ํฐ ๋ ธ๋ ID๋ฅผnodemask
์ ํ ๊ฐ ์ด์ ์ง์ ํ๋ค. ๋๋nodemask
๋ก ์ง์ ํ ๋ ธ๋ ID๋ค ์ค์์ ์จ๋ผ์ธ์ด๊ณ ํ๋ก์ธ์ค์ ํ์ฌ cpuset ๋ฌธ๋งฅ์์ ํ์ฉ๋๋ ๊ฒ ์๊ฑฐ๋, ์ง์ ํ ๋ ธ๋๋ค ์ค์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ ๊ฒ ์๋ค. ๋๋mode
์ธ์์MPOL_F_STATIC_NODES
์MPOL_F_RELATIVE_NODES
๋ฅผ ํจ๊ป ์ง์ ํ๋ค. ENOMEM
- ์ฌ์ฉ ๊ฐ๋ฅํ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์๋ค.
๋ฆฌ๋
์ค ์ปค๋ ๋ฒ์ 2.6.7์์ set_mempolicy()
์์คํ
ํธ์ถ์ด ์ถ๊ฐ๋์๋ค.
์ด ์์คํ ํธ์ถ์ ๋ฆฌ๋ ์ค ์ ์ฉ์ด๋ค.
ํ์ด์ง๋ฅผ ์ค์์ผ๋ก ๋ด๋ณด๋ผ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฑ ์ ๊ธฐ์ตํด ๋์ง ์๋๋ค. ๊ทธ ํ์ด์ง๋ฅผ ๋๋๋ฆด ๋๋ ํ์ด์ง ํ ๋น ์์ ์ ์ ์ฉ ์ค์ธ ์ค๋ ๋ ๋ด์ง ๋ฉ๋ชจ๋ฆฌ ๋ฒ์ ์ ์ฑ ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ๋ํ ์ ๋ณด๋ numa(7)๋ฅผ ๋ณด๋ผ.
get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), numa(7), numactl(8)
2017-09-15