#1 개념

1-1. 배경

  멀티 프로세싱이 널리 사용되면서 CPU 소켓 당 코어 수, 메모리 컨트롤러, 메모리 채널 및 마더보드의 CPU 소켓 수 등이 증가했다. 이러한 환경은 다수의 코어를 활용하여 연산 효율을 높이는 동시에 메모리 오버헤드 또한 발생시켰다. 각 코어가 임의의 데이터에 접근하기 위해 메모리 컨트롤러에 접근하는 것은 하드웨어적인 물리적 거리에 따른 지연시간을 초래한다. 간단한 예로, 아래 그림에서 CPU 소켓 0번의 코어가 CPU 소켓 1번에 연결된 메모리에 접근하려 할 때, 최대 2배의 지연시간이 발생할 수 있다. 이러한 이슈를 보완하기 위해 NUMA라는 개념이 도입되었다.

그림 1. NUMA architecture

1-2. 정의

   NUMA(Non-Uniform Memory Access)의 의미는 불균일 메모리 접근이라는 뜻으로 코어들의 메모리 접근 시간이 균일하지 않다는 것을 나타내며, 이는 주로 여러 CPU 소켓 및 여러 메모리 컨트롤러에 의해 지연 시간이 발생하는 시스템을 지칭한다. NUMA 아키텍처에서는 메모리 접근 시간을 균일화하는 것이 주요 과제로 다뤄지며, 이를 위해 같은 지역의 메모리를 사용하는 코어들을 그룹화하여 코어들의 메모리 접근 지연시간을 최소화하려는 노력이 이루어진다.

그림 2. NUMA Node Example

#2 사용법

2-1. 조회

  기본적으로 NUMA 노드와 관련된 명령어는 numactl을 사용하며 아래와 같은 명령어로 현재 시스템의 NUMA 구성을 조회활 수 있다.

numactl --show
numactl --hardware

2-2. 기타 명령어

# 프로세스 특정 메모리 바인딩
numactl --membind=0,1 --your_program_name 

# 프로세스 특정 코어 바인딩
numactl --physcpubind=0,2,4,6 -- your_program_name

# NUMA 노드 0에서 프로세스 실행
numactl --cpunodebind=0 --membind=0 your_program_name

 

 

참고 자료

'컴퓨터 과학 > 컴퓨터 구조' 카테고리의 다른 글

메모리 구조 (Memory Architecture)  (0) 2024.05.14
Memory Mapped I/O (MMIO)  (0) 2024.04.24

+ Recent posts