NUMA(누마)가 VM 성능에 미치는 영향
VM에 CPU와 메모리를 충분히 할당했는데도 성능이 기대만큼 나오지 않는 경우가 있습니다. CPU 사용률은 높지 않은데 DB 응답 시간이 느리거나, vCPU와 메모리를 증설해도 처리 속도가 크게 개선되지 않는 상황입니다.
이런 경우 확인해 볼 항목 중 하나가 NUMA(누마, Non-Uniform Memory Access)입니다. NUMA는 CPU와 메모리의 물리적인 위치에 따라 접근 속도가 달라지는 메모리 기술입니다. 특히 멀티 소켓 서버나 대용량 VM에서 성능에 영향을 줄 수 있습니다.
NUMA 최적화의 핵심
VM이 사용하는 CPU와 메모리를 가능한 한 가까운 NUMA 노드에 배치해 원격 메모리 접근을 줄이는 것입니다. CPU와 메모리를 얼마나 할당했는지뿐 아니라, 실제로 어디에 배치되어 있는지도 중요합니다.
NUMA란? CPU마다 가까운 메모리가 다릅니다
일반적으로 서버에 장착된 모든 CPU는 시스템 메모리에 접근할 수 있습니다. 하지만 CPU와 메모리 사이의 물리적인 거리에 따라 접근 시간이 달라질 수 있습니다.
NUMA 환경에서는 CPU와 가까운 메모리를 하나의 영역으로 묶어 관리하며, 이를 NUMA 노드라고 합니다. CPU는 자신이 속한 노드의 메모리에 상대적으로 빠르게 접근할 수 있습니다.
예를 들어 CPU 소켓이 2개인 서버라면 각각의 소켓에 연결된 CPU 코어와 메모리가 별도의 NUMA 노드를 이룰 수 있습니다. 다만 실제 노드 수는 CPU 아키텍처와 BIOS 설정에 따라 달라지므로 반드시 소켓 수와 일치하지는 않습니다.
NUMA 노드 0
CPU 0
↕ 로컬 메모리 접근
메모리 0
CPU 0이 같은 노드의 메모리 0에 접근하면 상대적으로 낮은 지연 시간으로 데이터를 처리할 수 있습니다.
NUMA 노드 1
CPU 1
↕ 로컬 메모리 접근
메모리 1
CPU 1도 가까운 메모리를 우선 활용할 수 있으며, 필요하면 다른 노드의 메모리에도 접근할 수 있습니다.
로컬 메모리와 원격 메모리, 왜 성능 차이가 날까?
CPU가 같은 NUMA 노드의 메모리를 사용하는 것을 로컬 메모리 접근(Local Memory Access)이라고 합니다.
반대로 다른 NUMA 노드에 연결된 메모리를 사용하면 원격 메모리 접근(Remote Memory Access)이 발생합니다. 이때는 노드 간 연결 경로를 거치기 때문에 메모리 접근 지연이 늘어나고, 사용 가능한 대역폭에도 영향을 받을 수 있습니다.
| 구분 | 로컬 메모리 | 원격 메모리 |
|---|---|---|
| 접근 대상 | 같은 NUMA 노드 | 다른 NUMA 노드 |
| 메모리 지연 | 상대적으로 낮음 | 상대적으로 높음 |
| 데이터 전송 | 로컬 메모리 경로 이용 | 노드 간 연결 경로 이용 |
| 성능 영향 | 메모리 접근 효율에 유리 | 메모리 집약적 작업에서 병목 가능 |
이러한 차이는 특히 메모리에 자주 접근하는 인메모리 DB, 대규모 데이터 분석, 고성능 연산 환경에서 중요합니다. 실제 성능 차이는 CPU 모델과 메모리 대역폭, 애플리케이션 특성에 따라 달라집니다.
VM에 CPU와 메모리를 많이 할당해도 느려질 수 있는 이유
NUMA가 VM 성능에 영향을 주는 대표적인 상황은 VM이 사용하는 CPU와 메모리가 여러 NUMA 노드에 분산되는 경우입니다.
다음과 같은 물리 서버를 예로 들어보겠습니다.
| 구분 | CPU 코어 | 메모리 |
|---|---|---|
| NUMA 노드 0 | 16 Core | 128GB |
| NUMA 노드 1 | 16 Core | 128GB |
| 서버 전체 | 32 Core | 256GB |
이 서버에 12 vCPU와 64GB 메모리를 사용하는 VM을 생성한다면, 자원 여유가 충분할 경우 하나의 NUMA 노드에 CPU와 메모리를 배치할 수 있습니다.
반면 24 vCPU와 160GB 메모리를 사용하는 대용량 VM이라면 단일 NUMA 노드의 메모리 용량을 초과합니다. 따라서 다른 노드의 메모리까지 활용해야 할 가능성이 높아지고, CPU와 메모리의 배치 관계가 성능에 영향을 주게 됩니다.
소규모 VM
12 vCPU / 64GB
단일 NUMA 노드의 자원으로 충분히 운영할 수 있다면 원격 메모리 접근을 줄이는 데 유리합니다.
대용량 VM
24 vCPU / 160GB
여러 NUMA 노드의 자원을 활용할 수 있으므로 CPU 스케줄링과 메모리 할당 위치를 함께 살펴야 합니다.
단, vCPU 수가 물리 코어 수보다 많다고 해서 반드시 여러 NUMA 노드에 분산되는 것은 아닙니다. 가상화 환경에서는 CPU 오버커밋이 가능하기 때문입니다. 실제 배치는 하이퍼바이저의 스케줄링과 메모리 정책, 다른 VM의 사용량 등에 영향을 받습니다.
vNUMA는 무엇이고, 언제 필요할까?
vNUMA(Virtual NUMA)는 물리 서버의 NUMA 개념을 가상머신에도 적용할 수 있도록 게스트 OS에 가상 NUMA 노드를 제공하는 기능입니다.
vNUMA를 적절히 설정하면 게스트 OS는 자신에게 할당된 CPU와 메모리가 어떤 NUMA 노드에 속하는지 인식할 수 있습니다. 이를 바탕으로 CPU 스케줄링과 메모리 할당을 효율적으로 수행할 수 있습니다.
특히 대용량 VM이나 NUMA를 인식하는 DB·분석 애플리케이션에서 최적화를 검토할 가치가 있습니다.
vNUMA 설정 시 주의사항
vNUMA를 활성화해도 실제 CPU와 메모리가 자동으로 동일한 물리 NUMA 노드에 고정되는 것은 아닙니다. 게스트 OS에 제공하는 가상 NUMA 정보와 호스트의 실제 CPU·메모리 배치를 함께 고려해야 합니다.
또한 모든 VM에 vNUMA를 활성화할 필요는 없습니다. 소규모 VM에서는 기본 CPU 스케줄링만으로 충분한 경우가 많으며, 설정 변경에 따른 효과는 실제 성능 측정으로 검증해야 합니다.
NUMA 최적화가 필요한 VM은 어떻게 판단할까?
NUMA 설정을 변경하기 전에 먼저 VM의 자원 규모와 실제 워크로드를 확인해야 합니다. 특히 다음 항목을 점검하는 것이 좋습니다.
| 점검 항목 | 확인 내용 |
|---|---|
| 물리 NUMA 노드 | 노드 수, 노드별 CPU 코어 및 메모리 용량 |
| VM 자원 | 할당된 vCPU와 메모리, 단일 노드 수용 가능 여부 |
| vNUMA 설정 | 게스트 OS의 NUMA 인식 여부와 노드별 자원 할당 |
| 메모리 사용 위치 | 로컬·원격 메모리 사용 현황 및 노드별 여유 용량 |
| 실제 성능 | DB 처리량, 응답 시간, 메모리 사용률 및 지연 |
Linux에서 NUMA 노드를 확인하는 방법
Linux 기반 가상화 호스트에서는
lscpu, numactl, numastat 명령어로
NUMA 관련 정보를 확인할 수 있습니다.
1. CPU와 NUMA 노드 확인
lscpu
출력 결과에서 NUMA node(s)와
NUMA node0 CPU(s) 등의 항목을 확인합니다.
노드 수와 각 노드에 연결된 논리 CPU를 파악할 수 있습니다.
2. 노드별 메모리와 접근 거리 확인
numactl --hardware
NUMA 노드별 메모리 용량과 여유 공간,
노드 간 상대적인 메모리 접근 거리를 보여줍니다.
numactl 패키지가 설치되어 있어야 합니다.
3. NUMA 메모리 할당 현황 확인
numastat
numastat -p <PID>
특정 프로세스가 어느 NUMA 노드의 메모리를 사용하는지 확인할 수 있습니다. VM을 실행하는 QEMU 프로세스의 PID를 지정하면 해당 프로세스의 노드별 메모리 분포도 살펴볼 수 있습니다.
다만 이 값은 메모리 사용 현황을 나타내는 통계이므로 원격 접근에 따른 지연 시간을 직접 보여주는 것은 아닙니다. 실제 효과는 설정 변경 전후의 워크로드 성능을 비교해 판단해야 합니다.
NUMA 설정 시 주의해야 할 점
01
모든 VM에 적용하지 않기
일반적인 소규모 VM은 기본 설정으로 충분할 수 있습니다. NUMA 설정은 실제 성능 개선이 필요한 경우 우선 검토합니다.
02
과도한 CPU 고정 주의
CPU Affinity나 메모리 할당 범위를 지나치게 제한하면 오히려 자원 활용률이 떨어지거나 VM 간 경합이 증가할 수 있습니다.
03
마이그레이션 고려
특정 물리 NUMA 노드에 강하게 종속된 설정은 다른 서버로 VM을 이동할 때 제약이 될 수 있습니다.
여러 서버를 하나의 클러스터로 운영하는 HCI 환경에서는 노드마다 CPU 모델이나 NUMA 구성이 다를 수도 있습니다. 따라서 HA와 라이브 마이그레이션 대상 서버에서도 VM이 필요한 자원을 확보할 수 있는지 확인해야 합니다.
SmartECM 기반 가상화 환경에서 NUMA를 고려해야 하는 이유
SmartECM은 KVM 기반 가상화를 활용하는 프라이빗 클라우드 플랫폼입니다. KVM 기반 환경에서도 물리 서버의 NUMA 특성은 VM 성능에 영향을 줄 수 있습니다.
특히 대용량 DB, 인메모리 애플리케이션, 분석 서버처럼 CPU와 메모리를 많이 사용하는 VM이라면 단순히 vCPU 수나 메모리 용량만 늘리는 것으로 충분하지 않을 수 있습니다.
SmartECM의 기반 기술인 Proxmox VE는 게스트에 NUMA 정보를 제공하는 설정을 지원합니다. 다만 SmartECM에서 실제 사용할 수 있는 설정과 적용 방법은 제품 버전별로 확인해야 하며, 물리 NUMA 노드의 자원 상태와 클러스터 운영 조건까지 함께 검토하는 것이 좋습니다.
VM 성능은 자원의 양뿐 아니라 배치에도 영향을 받습니다
NUMA는 CPU와 메모리가 실제로 어디에 배치되어 있는지가 성능에 영향을 준다는 점을 보여줍니다. 원격 메모리 접근이 많아지면 메모리 집약적인 워크로드에서는 불필요한 지연이 발생할 수 있습니다.
모든 VM에 NUMA 튜닝이 필요한 것은 아닙니다. 하지만 멀티 소켓 서버나 대용량 메모리를 사용하는 VM이라면 물리 NUMA 노드, vCPU 배치, 메모리 할당 현황을 함께 점검할 가치가 있습니다.
NUMA 최적화의 목적은 CPU와 메모리를 더 많이 할당하는 것이 아니라, 이미 보유한 자원을 효율적으로 활용하는 것입니다. VM 성능이 기대에 미치지 못한다면 전체 CPU 사용률과 메모리 용량뿐 아니라 실제 자원 배치도 확인해 보시기 바랍니다.
- 다음글 VM 복제(Clone)와 템플릿(Template), 언제 어떻게 사용할까? 26.10.12