관리 메뉴

일서방

NUMA(Non-Uniform Memory Access , 비균일 메모리 접근) 본문

IT공부/리눅스커널이야기

NUMA(Non-Uniform Memory Access , 비균일 메모리 접근)

0asis 2025. 8. 19. 15:29

 

■ NUMA(Non-Uniform Memory Access)

- 다중 CPU(멀티 프로세서) 시스템에서 메모리를 효율적으로 관리하기 위해 사용하는 아키텍처

 

 

1. UMA(Uniform Memory  Access) : 모든 프로세서가 공용 BUS를 이용해서 메모리에 접근한다.

단점 : 0번 소켓에 있는 CPU가 메모리에 접근하는 동안 1번 소켓에 있는 CPU는 메모리에 접근할 수가 없다.

 

2. NUMA (Non-Uniform Memory Access , 비균일 메모리 접근)

※그림 출처 : https://medium.com/@lioie6478/numa-non-uniform-memory-access-architecture-9492b0f267e7

 

UMA랑 다른점은 로컬메모리의 접근이 동시에 이뤄질수 있다는 것이다. 1번 CPU가 자신의 로컬메모리에 접근하는동안 2번 CPU도 자신의 메모리에 접근할 수 있어서 성능이 향상된다. 하지만 로컬메몰의 양이 모자라면 다른 CPU에 붙어있는 메모리에 접근이 필요하게 되고 , 이때 메모리 접근에 시간이 소요되어 예상치 못한 성능 저하를 경험하게 된다. 그래서 로컬메모리에서 얼마나 많이 메모리가 접근이 일어나느냐가 성능 향상의 가장 중요한 포인트이다.

 

[NUMA 정책 확인]

명령어 : numactl --show

출력예시 : 

 

-policy : 현재 메모리 할당정책

  . default : 일반 커널 정책 사용

  . preferred :  특정 노드 우선 할당

  . bind : 특정 노드에만 우선 할당

  . interleave : 여러 노드에 교차로 할당

 

-preferred : 메모리 할당 우선순위를 주는 노드번호

-physcpubind : 메모리 할당 우선순위를 주는 노드번호

-cpubind : NUMA 노드 단위에서 바인딩된 CPU 노드

-nodebind : 프로세스가 바인딩된 NUMA 노드번호

 

[NUMA 하드웨어 토폴로지 확인]

명령어 : numactl -H

결과예시 : 

 

-available : 2 nodes(0-1)

  => NUMA 노드 갯수(여기서는 2개 : 0번,1번)

-node 0 cpus : 0 1 2 3

  => NUMA 노드 0에 속한 cpu번호들 (0~3번코어)

-node 0 size / free

  => NUMA 노드 0의 총 메모리 용량과 현재 사용 가능한 메모리

-node distance

  => NUMA 노드 간 접근비용

   . 자기 자신접근 비용은 항상 10(기준값)

   . 다른노드 접근은 보통 더 높은 값(여기서는 20)

   . 값이 클수록 원격 메모리 접근속도가 느리다는 뜻

 

[NUMA 메모리 사용 현황 확인]

명령어 : numastat -cm

- numastat : NUMA 시스템의 노드별 메모리 사용량 / 통계를 보여줌

옵션 -c : NUMA allocation policy(정책)에 따른 메모리 사용량 출력

옵션 -m : NUMA 노드별 메모리 통계 출력

 

결과예시 : 

 

항목 

- MemTotal : 해당노드에 할당된 전체 메모리 크기

- MemFree : 사용 가능한 메모리

- Dirty : 디스크와 동기화되지 않은 페이지 (즉, 메모리에만 반영되고 디스크에 안써진 변경분)

 

[메모리 할당정책 확인]

: cat /proc/<pid>/numa_maps

 

'IT공부 > 리눅스커널이야기' 카테고리의 다른 글

dirty Page  (0) 2025.08.25
TIME_WAIT 소켓이 서비스에 미치는 영향  (4) 2025.08.21
vmstat 명령어  (1) 2025.08.19
Valgrind를 이용해서 메모리 누수 잡기  (0) 2025.08.19
SWAP영역  (0) 2025.08.18