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