NUMA

815 단어·2 분·원문(.md)

NUMA Non-Uniform Memory Access는 멀티프로세서 시스템에서 메모리에 접근하는 시간이 프로세서와 메모리의 물리적 위치에 따라 달라지는 메모리 구조다.

과거에는 모든 프로세서가 하나의 공유 버스를 통해 메모리를 접근하는 UMA(Uniform Memory Access) 방식을 사용했지만, 프로세서 수가 늘어남에 따라 발생하는 성능 병목 현상을 해결하기 위해 NUMA가 등장했다.

NUMA #

NUMA 구조에서 시스템은 여러 개의 NUMA Node로 나뉜다. 각 노드는 하나 이상의 cpu와 로컬 메모리를 포함한다.

  • 로컬 메모리: cpu가 자신이 속한 노드 안에 있는 메모리에 접근하는 경우다. 거리가 가깝고 전용통로를 사용하므로 속도가 매우 빠르다.
  • 원격 메모리: cpu가 다른 노드에 있는 메모리에 접근하는 경우다. 노드 사이를 연결하는 interconnect를 거쳐야하므로 latency가 발생해 속도가 상대적으로 느리다

UMA는 모든 cpu가 공통 버스를 통해 공유 메모리에 연결하고 모든 메모리 영역에 대해서 동일하다 그래서 cpu가 많아질수록 버스 병목 현상이 발생한다. 개인용 pc나 소규머 서버에서 사용된다.

NUMA는 cpu와 메모리가 노드 단위로 그룹화된다. 위치에 따라 접근 시간이 다르며 (로컬은 빠르고 원격은 느림) 노드를 추가하는 방식으로 확장이 가능하다. 확장성이 높고 대규모 워크로드용 서버, HPC, 클라우드용도로 사용된다.

NUMA 장단점 #

장점으로는 높은 확장성이다 수백 개의 cpu를 가진 대형 시스템을 구축할 수 있고 대역폭이 증가한다. 각 노드 자체 메모리 대역폭을 가지므로 시스템 전체의 데이터 처리 능력이 향상된다.

단점으로는 성능 불균형이다. 프로그램이 원격 메모리를 빈번하게 참조할 경우 성능이 급격하게 저하될 수 있다 최적화 필요가 필수인데 운영체제나 애플리케이션 수준에서 데이터와 프로세스를 동일한 노드에 배치하려는 NUMA aware 최적화가 필요하다.

최신 서버급 cpu intelXeon, AMD EPYC등 대부분 내부적으로 NUMA 구조를 사용한다.

  • 가상화(VMWare, KVM): 가상 머신이나 여러 NUMA 노드에 걸쳐 자원을 할당받지 않도록 설정하여 성능을 최적화 (이것도 numa)
  • DB: SQL Server, Oracle등은 NUMA 구조를 인식해 메모리 할당을 최적화 하는 기능을 내장하고 있다.
Operating-System/numa.md