numa(7) - wariua/manpages-ko GitHub Wiki
numa - λΆκ· μΌ κΈ°μ΅ μ₯μΉ μ κ·Ό κ°μ
λΆκ· μΌ κΈ°μ΅ μ₯μΉ μ κ·Ό(Non-Uniform Memory Access; NUMA)μ λ©λͺ¨λ¦¬κ° μ¬λ¬ λ©λͺ¨λ¦¬ λ Έλλ€λ‘ λλ μ Έ μλ λ€μ€ νλ‘μΈμ μμ€ν μ κ°λ¦¬ν¨λ€. λ©λͺ¨λ¦¬ λ Έλμ μ κ·Ό μκ°μ΄ μ κ·Όνλ €λ CPUμ μ κ·Ό λμ λ Έλμ μλμ μμΉμ λ°λΌ λ¬λΌμ§λ€. (μ΄λ λ©λͺ¨λ¦¬ μ 체μ λν μ κ·Ό μκ°μ΄ λͺ¨λ CPUμκ² λμΌν λμΉν λ€μ€ νλ‘μΈμ μμ€ν κ³Ό λλΉλλ€.) λ³΄ν΅ NUMA μμ€ν μ κ° CPUμλ λ‘컬 λ©λͺ¨λ¦¬ λ Έλκ° μμ΄μ λ€λ₯Έ CPUμ λ‘μ»¬μΈ λ Έλμ λ©λͺ¨λ¦¬λ λͺ¨λ CPUκ° κ³΅μ νλ λ²μ€ μμ λ©λͺ¨λ¦¬λ³΄λ€ λΉ λ₯΄κ² κ·Έ λ΄μ©λ¬Όμ μ κ·Όν μ μλ€.
리λ
μ€ μ»€λμμ λ€μμ NUMA κ΄λ ¨ μμ€ν
νΈμΆμ ꡬννκ³ μλ€: get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2), set_mempolicy(2). νμ§λ§ μμ©μμλ λ³΄ν΅ libnuma
κ° μ 곡νλ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ κ² μ’λ€. μλμ "λΌμ΄λΈλ¬λ¦¬ μ§μ"μ 보λΌ.
μ΄ νμΌμ νλ‘μΈμ€μ 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>
- νμ¬ λμ€ν¬λ‘ κΈ°λ‘ μ€μΈ νμ΄μ§λ€μ κ°μ.
NUMA μΈν°νμ΄μ€λ₯Ό κ΄ν νλ νμ€μ΄ μλ€.
리λ
μ€μ NUMA μμ€ν
νΈμΆλ€κ³Ό /proc
μΈν°νμ΄μ€λ 컀λμ CONFIG_NUMA
μ΅μ
μΌλ‘ ꡬμ±νμ¬ λΉλ ν κ²½μ°μλ§ μ¬μ© κ°λ₯νλ€.
μμ€ν
νΈμΆ μ μλ€μ΄ νμνλ©΄ -lnuma
λ‘ λ§ν¬ νλΌ. libnuma
μ νμμ μΈ <numaif.h>
ν€λλ₯Ό numactl
ν¨ν€μ§μμ μ»μ μ μλ€.
νμ§λ§ μμ©μμ μ΄ μμ€ν
νΈμΆλ€μ μ§μ μ¬μ©νμ§ μλ κ² μ’λ€. 그보λ€λ numactl
ν¨ν€μ§μ numa(3) ν¨μλ€μ΄ μ 곡νλ κ³ μμ€ μΈν°νμ΄μ€λ₯Ό κΆμ₯νλ€. numactl
ν¨ν€μ§λ₯Ό (ftp://oss.sgi.com/www/projects/libnuma/download/ )μμ μ»μ μ μλ€. λν μΌλΆ 리λ
μ€ λ°°ν¬νμλ μ΄ ν¨ν€μ§κ° ν¬ν¨λμ΄ μλ€. μΌλΆ λ°°ν¬νμμλ λ³λμ numactl-devel
ν¨ν€μ§μ κ°λ°μ© λΌμ΄λΈλ¬λ¦¬μ ν€λκ° μλ€.
get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3), cpuset(7), numactl(8)
2012-08-05