numa(7) - wariua/manpages-ko GitHub Wiki

NAME

numa - 뢈균일 κΈ°μ–΅ μž₯치 μ ‘κ·Ό κ°œμš”

DESCRIPTION

뢈균일 κΈ°μ–΅ μž₯치 μ ‘κ·Ό(Non-Uniform Memory Access; NUMA)은 λ©”λͺ¨λ¦¬κ°€ μ—¬λŸ¬ λ©”λͺ¨λ¦¬ λ…Έλ“œλ“€λ‘œ λ‚˜λˆ μ Έ μžˆλŠ” 닀쀑 ν”„λ‘œμ„Έμ„œ μ‹œμŠ€ν…œμ„ 가리킨닀. λ©”λͺ¨λ¦¬ λ…Έλ“œμ˜ μ ‘κ·Ό μ‹œκ°„μ΄ μ ‘κ·Όν•˜λ €λŠ” CPU와 μ ‘κ·Ό λŒ€μƒ λ…Έλ“œμ˜ μƒλŒ€μ  μœ„μΉ˜μ— 따라 달라진닀. (μ΄λŠ” λ©”λͺ¨λ¦¬ 전체에 λŒ€ν•œ μ ‘κ·Ό μ‹œκ°„μ΄ λͺ¨λ“  CPUμ—κ²Œ λ™μΌν•œ λŒ€μΉ­ν˜• 닀쀑 ν”„λ‘œμ„Έμ„œ μ‹œμŠ€ν…œκ³Ό λŒ€λΉ„λœλ‹€.) 보톡 NUMA μ‹œμŠ€ν…œμ˜ 각 CPUμ—λŠ” 둜컬 λ©”λͺ¨λ¦¬ λ…Έλ“œκ°€ μžˆμ–΄μ„œ λ‹€λ₯Έ CPU에 둜컬인 λ…Έλ“œμ˜ λ©”λͺ¨λ¦¬λ‚˜ λͺ¨λ“  CPUκ°€ κ³΅μœ ν•˜λŠ” λ²„μŠ€ μƒμ˜ λ©”λͺ¨λ¦¬λ³΄λ‹€ λΉ λ₯΄κ²Œ κ·Έ λ‚΄μš©λ¬Όμ— μ ‘κ·Όν•  수 μžˆλ‹€.

NUMA μ‹œμŠ€ν…œ 호좜

λ¦¬λˆ…μŠ€ μ»€λ„μ—μ„œ λ‹€μŒμ˜ NUMA κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ κ΅¬ν˜„ν•˜κ³  μžˆλ‹€: get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2), set_mempolicy(2). ν•˜μ§€λ§Œ μ‘μš©μ—μ„œλŠ” 보톡 libnumaκ°€ μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€. μ•„λž˜μ˜ "라이브러리 지원"을 보라.

/proc/[number]/numa_maps (λ¦¬λˆ…μŠ€ 2.6.14λΆ€ν„°)

이 νŒŒμΌμ€ ν”„λ‘œμ„ΈμŠ€μ˜ NUMA λ©”λͺ¨λ¦¬ μ •μ±…κ³Ό 할당에 λŒ€ν•œ 정보λ₯Ό ν‘œμ‹œν•œλ‹€.

각 행은 ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ λ²”μœ„μ— λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆλ‹€. μ—¬λŸ¬ 정보듀에 λ”ν•΄μ„œ κ·Έ λ©”λͺ¨λ¦¬ λ²”μœ„μ— λŒ€ν•œ μ‹€νš¨ λ©”λͺ¨λ¦¬ μ •μ±…, 그리고 κ·Έ νŽ˜μ΄μ§€λ“€μ΄ μ–΄λŠ λ…Έλ“œ μƒμ—μ„œ ν• λ‹Ήλ˜μ—ˆλŠ”μ§€λ₯Ό 보여 μ€€λ‹€.

numa_mapsλŠ” 읽기 μ „μš© νŒŒμΌμ΄λ‹€. /proc/<pid>/numa_mapsλ₯Ό 읽을 λ•Œ 컀널이 κ·Έ ν”„λ‘œμ„ΈμŠ€μ˜ 가상 μ£Όμ†Œ 곡간을 ν›‘μ–΄μ„œ λ©”λͺ¨λ¦¬κ°€ μ–΄λ–»κ²Œ 쓰이고 μžˆλŠ”μ§€ μ•Œλ € 주게 λœλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ κ³ μœ ν•œ λ©”λͺ¨λ¦¬ λ²”μœ„λ§ˆλ‹€ ν•œ 쀄씩 ν‘œμ‹œλœλ‹€.

각 ν–‰μ˜ 첫 번째 ν•„λ“œλŠ” λ©”λͺ¨λ¦¬ λ²”μœ„μ˜ μ‹œμž‘ μ£Όμ†Œμ΄λ‹€. 이 ν•„λ“œλ₯Ό λ²”μœ„μ˜ 끝 μ£Όμ†Œμ™€ μ ‘κ·Ό κΆŒν•œ 및 곡유 같은 여타 정보λ₯Ό λ‹΄κ³  μžˆλŠ” /proc/<pid>/maps 파일의 λ‚΄μš©κ³Ό μ—°κ΄€μ‹œν‚¬ 수 μžˆλ‹€.

두 번째 ν•„λ“œλŠ” ν˜„μž¬ κ·Έ λ©”λͺ¨λ¦¬ λ²”μœ„μ— 효λ ₯이 μžˆλŠ” λ©”λͺ¨λ¦¬ 정책을 보여 μ€€λ‹€. 참고둜 κ·Έ μ‹€νš¨ 정책이 λ°˜λ“œμ‹œ ν”„λ‘œμ„ΈμŠ€κ°€ κ·Έ λ©”λͺ¨λ¦¬ λ²”μœ„μ— λŒ€ν•΄ μ„€μΉ˜ν–ˆλ˜ 정책인 것은 μ•„λ‹ˆλ‹€. ꡬ체적으둜 ν”„λ‘œμ„ΈμŠ€κ°€ κ·Έ λ²”μœ„μ— "default" 정책을 μ„€μΉ˜ν–ˆλ‹€λ©΄ κ·Έ λ²”μœ„μ˜ μ‹€νš¨ 정책은 ν”„λ‘œμ„ΈμŠ€ 정책이 λ˜λŠ”λ°, μ΄λŠ” "default"일 μˆ˜λ„ 있고 아닐 μˆ˜λ„ μžˆλ‹€.

ν–‰μ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„μ—λŠ” λ©”λͺ¨λ¦¬ λ²”μœ„ λ‚΄μ—μ„œ ν• λ‹Ήλœ νŽ˜μ΄μ§€λ“€μ— λŒ€ν•œ λ‹€μŒκ³Ό 같은 정보가 λ“€μ–΄μžˆλ‹€.

N<node>=<nr_pages>
<node>에 ν• λ‹Ήλœ νŽ˜μ΄μ§€ 개수. <nr_pages>λŠ” ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ§€ν•‘ ν•œ νŽ˜μ΄μ§€λ“€λ§Œ ν¬ν•¨ν•œλ‹€. νŽ˜μ΄μ§€ 이전과 λ©”λͺ¨λ¦¬ 회수 λ•Œλ¬Έμ— 이 λ©”λͺ¨λ¦¬ λ²”μœ„μ— μ—°κ³„λœ νŽ˜μ΄μ§€λ“€μ΄ μΌμ‹œμ μœΌλ‘œ 맀핑이 ν•΄μ œλ˜μ—ˆμ„ μˆ˜λ„ μžˆλ‹€. 그런 νŽ˜μ΄μ§€λ“€μ€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ κ·Έ νŽ˜μ΄μ§€λ“€μ— μ ‘κ·Όν•˜λ € μ‹œλ„ν•œ ν›„μ—λ§Œ λ‚˜νƒ€λ‚  μˆ˜λ„ μžˆλ‹€. λ©”λͺ¨λ¦¬ λ²”μœ„κ°€ 곡유 λ©”λͺ¨λ¦¬ μ˜μ—­μ΄λ‚˜ 파일 맀핑을 λ‚˜νƒ€λ‚΄λŠ” κ²½μš°μ—λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ™μ‹œμ— ν•΄λ‹Ή λ©”λͺ¨λ¦¬ λ²”μœ„ 내에 μΆ”κ°€ νŽ˜μ΄μ§€λ“€μ„ λ§€ν•‘ ν•˜κ³  μžˆμ„ μˆ˜λ„ μžˆλ‹€.
file=<filename>
λ©”λͺ¨λ¦¬ λ²”μœ„μ˜ 기반이 λ˜λŠ” 파일. 파일이 private으둜 λ§€ν•‘ λ˜μ–΄ μžˆλ‹€λ©΄ μ“°κΈ° 접근이 이 λ©”λͺ¨λ¦¬ λ²”μœ„μ—μ„œ COW (Copy-On-Write) νŽ˜μ΄μ§€λ“€μ΄ μƒμ„±ν–ˆμ„ μˆ˜λ„ μžˆλ‹€. 그런 νŽ˜μ΄μ§€λ“€μ€ 읡λͺ… νŽ˜μ΄μ§€λ‘œ ν‘œμ‹œλœλ‹€.
heap
λ©”λͺ¨λ¦¬ λ²”μœ„κ°€ νž™μ— 쓰인닀.
stack
λ©”λͺ¨λ¦¬ λ²”μœ„κ°€ μŠ€νƒμ— 쓰인닀.
huge
κ±°λŒ€ λ©”λͺ¨λ¦¬ λ²”μœ„. ν‘œμ‹œλœ νŽ˜μ΄μ§€ κ°œμˆ˜λŠ” κ±°λŒ€ νŽ˜μ΄μ§€λ“€κ³Ό λΉ„μ •κ·œ 크기 νŽ˜μ΄μ§€λ“€μ΄λ‹€.
anon=<pages>
λ²”μœ„ λ‚΄μ˜ 읡λͺ… νŽ˜μ΄μ§€ 개수.
dirty=<pages>
λ”λŸ¬μ›Œμ§„ νŽ˜μ΄μ§€ 개수.
mapped=<pages>
λ§€ν•‘ 된 νŽ˜μ΄μ§€ 총개수. dirty 및 anon νŽ˜μ΄μ§€λ“€κ³Ό λ‹€λ₯Έ 경우.
mapmax=<count>
ν›‘λŠ” λ™μ•ˆ λ§Œλ‚œ μ΅œλŒ€ mapcount (ν•œ νŽ˜μ΄μ§€λ₯Ό λ§€ν•‘ ν•˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 수). ν•΄λ‹Ή λ©”λͺ¨λ¦¬ λ²”μœ„ λ‚΄μ—μ„œ 이뀄지고 μžˆλŠ” 곡유의 정도λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
swapcache=<count>
μŠ€μ™‘ μž₯μΉ˜μ— 연계 ν•­λͺ©μ΄ μžˆλŠ” νŽ˜μ΄μ§€λ“€μ˜ 개수.
active=<pages>
ν™œλ™ λͺ©λ‘μ˜ νŽ˜μ΄μ§€ 개수. 이 λ²”μœ„μ˜ νŽ˜μ΄μ§€ κ°œμˆ˜μ™€ λ‹€λ₯Έ κ²½μš°μ—λ§Œ 이 ν•„λ“œκ°€ 보인닀. μ‘°λ§Œκ°„ μŠ€μ™€νΌμ— μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ 제거될 μˆ˜λ„ μžˆλŠ” λΉ„ν™œλ™ νŽ˜μ΄μ§€λ“€μ΄ λ©”λͺ¨λ¦¬ λ²”μœ„ 내에 μ’€ μ‘΄μž¬ν•œλ‹€λŠ” λœ»μ΄λ‹€.
writeback=<pages>
ν˜„μž¬ λ””μŠ€ν¬λ‘œ 기둝 쀑인 νŽ˜μ΄μ§€λ“€μ˜ 개수.

CONFORMING TO

NUMA μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΄€ν• ν•˜λŠ” ν‘œμ€€μ΄ μ—†λ‹€.

NOTES

λ¦¬λˆ…μŠ€μ˜ NUMA μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€κ³Ό /proc μΈν„°νŽ˜μ΄μŠ€λŠ” 컀널을 CONFIG_NUMA μ˜΅μ…˜μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ λΉŒλ“œ ν•œ κ²½μš°μ—λ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

라이브러리 지원

μ‹œμŠ€ν…œ 호좜 μ •μ˜λ“€μ΄ ν•„μš”ν•˜λ©΄ -lnuma둜 링크 ν•˜λΌ. libnuma와 ν•„μˆ˜μ μΈ <numaif.h> 헀더λ₯Ό numactl νŒ¨ν‚€μ§€μ—μ„œ 얻을 수 μžˆλ‹€.

ν•˜μ§€λ§Œ μ‘μš©μ—μ„œ 이 μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ„ 직접 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 게 μ’‹λ‹€. κ·Έλ³΄λ‹€λŠ” numactl νŒ¨ν‚€μ§€μ˜ numa(3) ν•¨μˆ˜λ“€μ΄ μ œκ³΅ν•˜λŠ” κ³ μˆ˜μ€€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ꢌμž₯ν•œλ‹€. numactl νŒ¨ν‚€μ§€λ₯Ό (ftp://oss.sgi.com/www/projects/libnuma/download/ )μ—μ„œ 얻을 수 μžˆλ‹€. λ˜ν•œ 일뢀 λ¦¬λˆ…μŠ€ λ°°ν¬νŒμ—λ„ 이 νŒ¨ν‚€μ§€κ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€. 일뢀 λ°°ν¬νŒμ—μ„œλŠ” λ³„λ„μ˜ numactl-devel νŒ¨ν‚€μ§€μ— 개발용 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 헀더가 μžˆλ‹€.

SEE ALSO

get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3), cpuset(7), numactl(8)


2012-08-05

⚠️ **GitHub.com Fallback** ⚠️