본문 바로가기
Computer Architecture

다시 정리하는 NUMA

by hyeyoo 2022. 1. 21.
※ 이 블로그의 글은 글쓴이가 공부하면서 정리하여 쓴 글입니다.
※ 최대한 내용을 검토하면서 글을 쓰지만 틀린 내용이 있을 수 있습니다.
※ 만약 틀린 부분이 있다면 댓글로 알려주세요.
 

NUMA: Non-Uniform Memory Access

NUMA: Non-Uniform Memory Access 메모리 관련 부분을 공부하다보니 NUMA가 많이 나와서 정리해본다. 이 글은 Christoph Lameter의 2013년 문서 "NUMA: An Overview"를 리뷰한 것이다. NUMA는 멀티 프로세서 환경..

hyeyoo.com

이전에 정리했던 NUMA 글은 컴퓨터에서 CPU와 접근하려는 물리 주소에 따라서 접근하는 지연시간이 다를 수 있다는 것과, 그래서 왜 메모리 할당자와 스케줄러가 NUMA 아키텍처를 고려해야 하는지, NUMA 아키텍처에서의 allocation policy와 reclamation 등을 다루었다. 그런데 NUMA에 대해서 생각해보니 아직 왜 NUMA라는 방식이 생겼는지를 이해하지 못해서 논문을 좀더 찾아봤다.

Problem

Von Neumann Architecture

폰 노이만 구조 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

위 사진은 폰 노이만 구조를 나타낸다. 컴퓨터는 Input Device에서 입력을 받고 Control Unit과 ALU로 연산을 수행하며 연산을 수행할 때 필요한 코드/데이터는 Memory Unit에서 가져온다. 연산 결과도 다시 Memory Unit에 저장되며 결과의 일부는 사용자가 이해할 수 있는 형태로 Output Device에서 표현된다. 우리가 흔히 접하는 프로세서들은 모두 이 폰 노이만 구조를 따르고 있다. (물론 다른 구조도 있을거다 뉴로모픽 컴퓨터라던가 음음..) 폰 노이만 구조에서 큰 문제점은 프로세서의 속도가 아무리 빨라져도 메모리의 접근 속도와 대역폭 때문에 프로세서의 빠른 성능을 충분히 활용하기 어렵다는 점이다.

On Multiprocessors / Multicore processors

안그래도 메모리의 성능 때문에 프로세서가 제 성능을 발휘하지 못하는 상황에서, 프로세서의 수가 늘어나면 문제는 더 심각해진다. 안그래도 버스의 대역폭은 정해져있는데 무작정 프로세서 수만 늘리면 이를 버스가 감당할 수 없기 때문이다.

shared memory multiprocessors architecture

Solution

이 문제에 대한 해결 방법은 캐시의 도입과 캐시에 계층 구조 도입, 버스에 계층 구조를 도입해서 버스의 트래픽을 최소화 / 분산하는 것이다.

Cache

File:Cache Hierarchy Updated.png - Wikimedia Commons

아까 폰 노이만 구조에서는 프로세서의 성능이 빨라져도 메모리의 속도가 느리면 프로세서를 잘 활용하지 못한다고 했다. 그런 점에서 프로세서와 메모리에 캐시라는 더 비싸고 빠른 캐시 메모리를 저장해두면, 적어도 자주 접근하는 요소에 대해서는 메모리의 느린 접근 속도를 극복할 수 있다. 메모리에서 데이터를 읽는게 100 cycles 정도 걸리는데 반해 L1 캐시는 0.5 ~ 2.5 cycles 정도면 충분하므로 캐시를 잘 활용하면 지연시간을 극적으로 개선할 수 있다. 그리고 캐시에 많이 접근할 수록 버스의 트래픽이 줄어든다.

TMI지만 캐시는 초기에는 단일 캐시 컨트롤러가 존재했다가 이후에 계층적 구조로 바뀌었다.  캐시에 계층 구조가 도입되면 버스 트래픽이 단일 캐시보다 더 줄어든다. 그리고 초기에는 캐시 컨트롤러가 프로세서 바깥에 있었는데 요즘은 프로세서 내부에 캐시가 있다.

Hierarchical Bus Architecture

계층적 버스 구조의 한 예시

캐시는 버스의 트래픽을 감소시키고, 접근 지연시간을 줄여서 프로세서가 더 빨리 일을 처리하게 해준다. 하지만 캐시를 잘 활용해도 프로세서가 많아지면 결국 버스가 포화되어 극심한 병목이 생긴다. 단일 버스를 공유하는 구조에선 프로세서의 개수가 증가해도 버스가 병목이 되므로 시스템 성능의 확장에 한계가 있다. 이 문제를 극복하기 위해서 나온  해결 방안이 물리 주소의 범위에 따라서 메모리의 그룹을 나누고, 계층 구조의 버스를 도입한 것이다. 이 구조에서는 버스를 계층적으로 나누어서 global bus의 트래픽을 분산한다.

계층적 버스 구조에서는 local node의 데이터 접근이 가장 빠르고, remote node에 접근할땐 버스를 여러번 거쳐야 하므로 지연 시간이 커진다. 그리고 프로세서의 캐시와는 별도로 node 내부에도 캐시가 존재해서 remote node의 데이터를 캐시에 담아서 global bus의 트래픽을 최대한 줄인다. 이러한 것을 NUMA 아키텍처라고 부른다.

Hierarchical Cache / Bus Architecture for Shared Memory Multiprocessors

계층적 캐시 구조에서의 캐시 동기화 매커니즘을 다시 정의하고, 계층적 버스 구조를 도입했을 때의 성능을 시뮬레이션하는 논문이다. 이 논문에서는 NUMA라는 말을 안 쓰긴 하는데 이 논문이 발표된 1970년대 즈음부터 NUMA 아키텍처 연구가 진행된 것 같다.

 

Hierarchical cache/bus architecture for shared memory multiprocessors | Proceedings of the 14th annual international symposium o

Overall Acceptance Rate 649 of 3,670 submissions, 18%

dl.acm.org

 

 

댓글