개요
메모리에 접근하는 시간이 CPU와 메모리의 상대적인 위치에 따라 달라지는 컴퓨터 메모리 설계 방법. 각 CPU는 메모리의 일부를 자신의 지역 메모리(Local Memory)로 가지고 있으며 이 지역 메모리에 접근하는 속도는 원격 메모리(Remote Memory)에 접근하는 속도보다 훨씬 빠르다. 프로세서들간의 연결은 인텔 퀵패스 인터커넥트(QPI)를 통하여 이루어진다.
간단히 예를 들어 시스템에 CPU 소켓이 네 개 있고, 512GB의 메모리가 설치되어 있다면 물리 주소 0~128G-1번지까지의 메모리는 0번 소켓의, 128G~256G-1번지까지의 메모리는 1번 소켓의 지역 메모리가 되는 방식. 각 소켓에서 지역 메모리에 접근할 때에는 원격 메모리에 접근할 때보다 훨씬 빠르게 데이터를 읽고 쓸 수 있다. 하나의 CPU 소켓에 코어 여러개가 들어가 있을 수 있기에 같은 지역 메모리를 사용하는 CPU 코어들을 묶어서 하나의 NUMA 노드로 친다. 8코어 4소켓 CPU라면 (하이퍼스레딩을 가정하지 않을 때에) 0~7번 코어는 NUMA 노드 0번, 8~15번 코어는 NUMA 노드 1번과 같은 방식.
CC-NUMA
비록 캐시 일관성을 제공하지 않는 NUMA아키텍처는 설계와 제작이 용이하지만 현재의 폰 노이만 구조 프로그래밍 모델에서는 프로그래밍을 하기가 매우 어렵다. 따라서 현재 시장에 판매되고 있는 모든 NUMA 컴퓨터들은 캐시 일관성을 제공한다. 이것을 ccNUMA(cache-coherent NUMA)라고 분류한다.
CC-NUMA는 각 numa node간의 cache coherent를 일치시키는 시스템을 말한다. 만약 CPU1이 CPU2와 shared된 cache line이 있을 경우 CC-NUMA에서는 두 cache line이 하드웨어 동기화 로직으로 인하여 항상 같은 값을 가르키게 된다. 그러나 이러한 동기화 과정은 정상적인 memory access나 cache coherent와 비교하여 매우 느리다. 즉 NUMA환경에서는 메모리의 지역성을 살려서 작성하는 것이 매우 중요한 과제이기도 하다.