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

컴퓨터과학·AI
한 줄 정의: 여러 개의 프로세서가 각자 가까운 메모리에는 빠르게, 먼 메모리에는 느리게 접근하도록 설계된 다중 프로세서 메모리 구조.

쉽게 풀면

서버급 컴퓨터에는 CPU가 여러 개 들어 있는 경우가 많은데, 각 CPU마다 자기 옆에 붙은 전용 메모리가 있다. 자기 옆 메모리에 접근하면 빠르지만, 다른 CPU 옆에 있는 메모리에 접근하려면 더 먼 길을 돌아가야 해서 느려진다. 이런 구조를 NUMA라고 부른다. 대규모 서버에서 프로그램이 어떤 CPU와 어떤 메모리를 짝지어 쓰는지에 따라 성능 차이가 크게 날 수 있어, 고성능 컴퓨팅에서는 NUMA 배치를 신경 써서 최적화한다.

왜 중요한가

NUMA는 서버, 고성능 컴퓨팅 클러스터, 대규모 데이터베이스 시스템의 성능을 좌우하는 근본적인 하드웨어 제약이기 때문에 시스템 소프트웨어와 병렬 컴퓨팅 연구에서 빈번히 다뤄집니다. 스레드나 메모리 페이지가 어느 NUMA 노드에 배치되는지에 따라 동일한 코드라도 성능이 크게 달라질 수 있어, 운영체제 스케줄러나 메모리 관리자의 설계 논문에서 NUMA 인지(NUMA-aware) 최적화가 중요한 평가 기준이 됩니다. 최근에는 GPU와 가속기를 포함한 이기종 시스템에서도 유사한 비균일 접근 문제가 확장되어 다뤄지고 있습니다.

논문에서는 이렇게 쓰입니다

"프로세스를 NUMA 노드에 맞게 고정 배치하여 메모리 접근 지연을 줄였다."

프로그램이 실행되는 CPU와 그 프로그램이 쓰는 메모리를 같은 NUMA 영역으로 묶어 데이터 접근 속도를 개선했다는 뜻이다.

"분산 인메모리 데이터베이스는 NUMA 토폴로지를 인식하는 데이터 파티셔닝 기법을 적용하여 원격 메모리 접근 비율을 낮추었다."

대규모 데이터베이스 시스템 연구에서 NUMA 구조를 고려한 최적화 사례를 보여준다.

"딥러닝 학습 프레임워크에서 NUMA 노드 경계를 넘는 데이터 이동을 최소화하도록 워커 스레드를 배치하여 처리량을 개선하였다."

고성능 컴퓨팅 및 딥러닝 인프라 연구에서 NUMA를 고려한 시스템 설계 예시이다.

조금 더 깊게 보면

NUMA 시스템에서는 흔히 로컬 노드 접근 지연과 원격 노드 접근 지연의 비율을 나타내는 NUMA 팩터가 성능 분석의 기준으로 쓰이며, 운영체제는 이 정보를 바탕으로 프로세스나 메모리 페이지를 어느 노드에 둘지 스케줄링합니다. 리눅스 등의 운영체제는 `numactl` 같은 도구나 자동 페이지 마이그레이션 기능을 통해 NUMA 인지 배치를 지원하며, 논문에서는 이러한 배치 전략이 캐시 미스율이나 메모리 대역폭 활용도에 미치는 영향을 함께 측정하는 경우가 많습니다.

주의할 점

NUMA를 고려하지 않고 프로세스를 배치하면 코어 수를 늘려도 메모리 접근 지연 때문에 기대만큼 성능이 오르지 않을 수 있다.

관련 용어