점점 더 많은 조직이 비즈니스 핵심 워크로드를 가상화, 하이퍼컨버지드 및 클라우드 인프라로 이전함에 따라 높은 동시성 환경에서의 성능이 최우선 과제가 되었습니다. VMware 대체 솔루션을 검토하는 팀에게 중요한 질문은 단순히 다른 플랫폼이 유사한 기능을 제공할 수 있는지 여부가 아니라 핵심 비즈니스 시스템에 필요한 지연 시간, 처리량 및 안정성을 유지할 수 있는지 여부입니다.
이러한 문제는 특히 금융 서비스 분야의 고빈도 거래 및 위험 관리, 의료 분야의 전자 건강 기록 시스템, 물류 분야의 창고 관리 시스템과 같이 메모리 사용량이 많은 애플리케이션에서 두드러지게 나타납니다. 이러한 애플리케이션의 메모리 접근 요구량 증가는 Redis, Apache Spark, SAP HANA, AI 엔진 또는 모델과 같은 백엔드 구성 요소와 밀접한 관련이 있습니다. 예를 들어 Redis는 메모리 접근 속도에 성능이 직접적인 영향을 받는 인메모리 데이터베이스입니다.
NUMA는 이제 주류 서버 CPU 아키텍처가 되었습니다. 따라서 NUMA 환경에서 메모리 접근 효율성을 향상시키는 것은 가상화 성능 최적화에 있어 중요한 요소입니다. 이 글에서는 Sangfor의 NUMA 최적화 기술과 이러한 기술이 VMware를 대체하는 과정에서 가상화 플랫폼이 고도로 동시 실행되는 비즈니스 크리티컬 워크로드를 지원하는 데 어떻게 도움이 되는지 설명합니다.
파트 1. NUMA 아키텍처 배경
초기 컴퓨터 시스템은 일반적으로 모든 연산 작업에 단일 프로세서를 사용했습니다. 응용 프로그램이 더욱 복잡해지고 요구 사항이 많아짐에 따라 단일 프로세서로는 고성능 컴퓨팅 요구 사항을 더 이상 충족할 수 없게 되었고, 시스템은 점차 멀티코어 아키텍처로 발전했습니다.
기존의 멀티코어 시스템은 일반적으로 대칭형 멀티프로세싱(SMP) 방식을 사용했습니다. SMP 방식에서는 모든 프로세서가 동등한 지위와 메모리 접근 권한을 갖습니다. 따라서 모든 스레드가 모든 프로세서에서 실행될 수 있어 효과적인 부하 분산이 가능하고 전반적인 성능과 처리량을 향상시킬 수 있습니다. 그러나 여러 코어가 메모리 접근을 위해 동일한 버스를 공유하기 때문에 코어 수가 증가함에 따라 버스가 병목 현상을 일으켜 확장성과 성능을 제한할 수 있습니다.

그림 1: 기존 SMP 아키텍처에서 공유 버스 메모리 접근 병목 현상.
NUMA는 SMP의 메모리 접근 병목 현상을 해결합니다. NUMA 아키텍처에서 시스템은 여러 노드로 나뉘며, 각 노드는 하나 이상의 프로세서, 로컬 메모리 및 I/O 장치를 포함합니다. 노드들은 AMD HyperTransport 또는 Intel QuickPath Interconnect(QPI)와 같은 고속 인터커넥트를 통해 통신합니다. 이를 통해 프로세서는 로컬 메모리에 먼저 접근할 수 있으므로 메모리 접근 지연 시간이 줄어들고 멀티프로세서 시스템의 성능이 향상됩니다.

그림 2: 노드별 CPU 및 메모리 할당을 특징으로 하는 멀티노드 NUMA 아키텍처.
NUMA 시스템에는 세 가지 유형의 노드가 있습니다.
- 로컬 노드: 특정 노드 내의 CPU들에게는 해당 노드가 로컬 노드입니다.
- 인접 노드: 로컬 노드에 인접한 노드.
- 원격 노드: 로컬 노드도 아니고 인접한 노드도 아닌 노드.
CPU 접근 속도는 노드 유형에 따라 다릅니다. 로컬 메모리 접근 속도가 가장 빠르고, 원격 메모리 접근 속도가 가장 느립니다. 일반적으로 토폴로지 거리가 멀어질수록 메모리 접근 속도는 느려집니다.
“NUMA: 개요”에서 크리스토프 라메터 박사는 2013년 고성능 2노드 서버에서 로컬 메모리에 대한 임의 접근 지연 시간이 약 100ns인 반면, 원격 메모리 접근은 약 50%의 지연 시간을 추가한다고 언급했습니다.
제2부. NUMA로 인해 발생한 과제들
리눅스에서 스레드는 CPU 스케줄링의 기본 단위이며, CPU 실행 큐의 태스크에 해당합니다. 커널은 각 태스크에 대해 상대적으로 유휴 상태인 CPU를 선택합니다. CPU 부하는 동적으로 변하기 때문에 커널은 로드 밸런싱을 사용하여 태스크를 덜 바쁜 CPU로 이동시킵니다. 따라서 기본적으로 태스크는 여러 CPU 간에 이동할 수 있습니다.
NUMA 환경에서 태스크는 노드 1의 CPU에서 노드 2의 CPU로 이동하는 동안에도 노드 1에 할당된 메모리에 계속 접근할 수 있어 노드 간 접근이 발생할 수 있습니다. Linux NUMA 밸런싱은 주기적으로 태스크 또는 메모리 페이지를 로컬 노드로 마이그레이션하지만, 모든 원격 메모리 접근을 완전히 차단할 수는 없습니다.
가상화 환경에서 각 VM vCPU는 호스트 운영 체제 스레드에 해당합니다. 여러 vCPU 스레드가 메모리를 공유하면서 서로 다른 NUMA 노드에서 실행되거나 노드 간에 마이그레이션되는 경우, VM이 여러 NUMA 노드에 걸쳐 메모리에 액세스하여 지연 시간이 증가할 수 있습니다.

그림 3: 노드 간 실행은 가상 머신의 원격 메모리 접근 속도를 향상시킬 수 있습니다.
파트 3. 일반적인 NUMA 스케줄링 접근 방식
업계에서는 일반적으로 다음과 같은 접근 방식을 사용합니다.
접근 방식 1: vCPU를 물리적 코어에 고정
관리자는 VM 리소스가 동일한 물리적 NUMA 노드 내에서 우선적으로 실행되도록 vCPU 고정을 수동으로 구성합니다.
접근 방식 2: 가상 머신에 할당할 NUMA 노드 수 지정
관리자는 NUMA 노드 수를 수동으로 구성하고 vCPU 및 메모리 리소스를 노드 전체에 균등하게 분배합니다.
접근 방식 3: NUMA 노드의 적응적 할당
스케줄러는 적합한 NUMA 노드를 가상 머신(VM)에 자동으로 할당합니다. VM의 CPU는 해당 노드에 제한적으로 사용되며, 지역성을 향상시키기 위해 로컬 메모리를 우선적으로 사용합니다. VM이 단일 NUMA 노드가 수용할 수 있는 것보다 많은 vCPU를 가지고 있는 경우, 여러 노드에 분산됩니다. NUMA 토폴로지는 게스트 운영 체제에 노출되어 토폴로지를 고려한 의사 결정을 내릴 수 있도록 하며, VM은 로드 밸런싱을 유지하기 위해 노드 간에 마이그레이션될 수 있습니다.
접근 방식 1과 2는 더 많은 제약을 부과하고, VM CPU 크기 조정에 신중을 기해야 하며, 정적 바인딩으로 인해 NUMA 노드 간 불균형을 초래할 수 있습니다. 따라서 적응형 할당은 동적인 운영 환경에 더 적합합니다.
4부. Sangfor NUMA 일정 세부정보
Sangfor HCI는 주로 적응형 NUMA 스케줄링을 사용합니다. 이를 통해 NUMA 노드 간 사용률을 균형 있게 조정하고 VM vCPU의 원격 메모리 접근을 줄여 전반적인 성능을 향상시킵니다.
적응형 NUMA 스케줄링은 다양한 애플리케이션 유형, 특히 메모리 내 작업이 빈번한 미들웨어에서 뚜렷한 최적화 효과를 제공합니다. Sangfor는 DM8, Redis, Memcached를 가상 머신에 배포하고 NUMA 스케줄링을 활성화 및 비활성화한 상태에서 벤치마킹했습니다. 그 결과, NUMA 스케줄링을 활성화했을 때 미들웨어 성능이 크게 향상되는 것을 확인할 수 있었습니다.

데이터베이스 워크로드: BenchmarkSQL을 사용한 Dameng DB(DM8)
BenchmarkSQL은 신규 주문, 결제, 주문 상태 조회, 배송 및 재고 수준 조회 등 TPC-C 스타일의 트랜잭션을 혼합하여 실행하는 관계형 데이터베이스 벤치마크 도구입니다. 결과로 나오는 tpmC 지표는 분당 처리된 신규 주문 트랜잭션 수를 나타내며, 값이 높을수록 성능이 우수함을 의미합니다. DM8 데이터베이스 테스트에는 BenchmarkSQL 5.0이 사용되었습니다. 다음 차트는 NUMA가 비활성화된 tpmC 결과를 100%로 정규화한 상대적 성능을 보여줍니다.

그림 4: NUMA 스케줄링 활성화 시와 비활성화 시의 DM8 트랜잭션 처리량 비교.
인메모리 캐싱: Redis 7.2.5
redis-benchmark는 Redis의 공식 성능 테스트 도구입니다. Sangfor는 이 도구를 사용하여 NUMA 스케줄링을 비활성화한 경우와 활성화한 경우에 1KB 값에 대한 GET 및 SET QPS를 테스트했습니다. QPS는 초당 읽기 또는 쓰기 작업 수를 나타냅니다.
redis-benchmark -t get -d 16 -c 100 -n 6000000 -r 60000000
redis-benchmark -t set -d 16 -c 100 -n 6000000 -r 60000000
다음 차트는 상대적인 성능을 보여주며, NUMA가 비활성화된 QPS 결과를 100%로 정규화했습니다.

그림 5: NUMA 스케줄링을 활성화했을 때 Redis 읽기/쓰기 QPS 성능 향상 정도.
키-값 캐싱: Memcached 6.27
memaslap은 Memcached에 포함된 성능 테스트 도구입니다. Sangfor는 NUMA 스케줄링을 비활성화 및 활성화한 상태에서 1KB 값에 대한 TPS(초당 트랜잭션 수)를 테스트하기 위해 이 도구를 사용했습니다.
memaslap -s 127.0.0.1:11211 -t 300s -T 8
다음 차트는 상대적인 성능을 보여주며, NUMA가 비활성화된 TPS 결과를 100%로 정규화했습니다.

그림 6: NUMA 스케줄링을 활성화했을 때 Memcached 트랜잭션 처리량의 상대적 증가율.
위 결과는 메모리 사용량이 많은 애플리케이션에 있어 뚜렷한 이점을 보여줍니다. 다음 섹션에서는 최적화 작동 방식을 설명합니다.
1. 적응형 NUMA 노드 할당
Sangfor는 VM vCPU를 적응적으로 분할하고 적절한 NUMA 노드에 스케줄링하여 원격 메모리 액세스를 줄입니다. VM vCPU 수가 하나의 NUMA 노드 코어 수보다 적으면 VM은 단일 노드에 스케줄링됩니다. VM에 필요한 코어 수가 하나의 노드에서 제공할 수 있는 것보다 많으면 여러 노드에 분산되고, 게스트 운영 체제는 토폴로지를 인식하여 결정을 내릴 수 있도록 vNUMA 토폴로지를 노출합니다.

그림 7: Sangfor 지능형 vCPU 파티셔닝 및 vNUMA 토폴로지 매핑.
균형 잡힌 사용률을 유지하기 위해 VM 배치는 NUMA 노드 전체의 현재 부하를 고려하여 사용량이 적은 노드를 선택합니다. 런타임 중에는 사용률 변화에 따라 VM이 노드 간에 마이그레이션될 수 있습니다. 우선순위가 높은 VM은 CPU, 메모리 대역폭 및 캐시 리소스에 대한 경쟁을 줄이기 위해 경쟁이 적은 노드에 우선적으로 배치됩니다.
2. 이기종 서버 플랫폼 최적화
일부 서버 플랫폼은 여러 개의 NUMA 노드를 포함하고 있으며, 노드 간 거리가 서로 다르고, 노드당 코어 수는 상대적으로 적습니다.

그림 8. 다중 노드 서버에서 토폴로지를 고려한 vNUMA 배치.
Sangfor는 NUMA 노드 간의 거리를 파악하고 동일한 VM의 여러 vNUMA 노드를 인접한 물리적 NUMA 노드에 우선적으로 배치합니다.
데이터 포워딩 성능을 더욱 향상시키기 위해 Sangfor는 VM과 데이터 플레인 프로세스 간의 NUMA 어피니티를 개발했습니다. VM과 데이터 포워딩 프로세스는 동일한 NUMA 노드에 스케줄링되어 로컬 메모리 접근이 향상됩니다. 다음 그림에서 DP는 데이터 플레인 프로세스를 나타냅니다.

그림 9. VM과 데이터 플레인 어피니티를 통해 처리가 로컬 메모리에 가깝게 유지됩니다.
Sangfor는 스토리지 전반에 걸쳐 NUMA의 이점을 극대화하기 위해 vCPU, QEMU, libnfs, aSAN 및 전체 I/O 경로에 관련된 기타 프로세스를 동일한 NUMA 노드에 배치합니다. 이를 통해 원격 메모리 접근을 방지할 수 있습니다. 대용량 메모리 페이지는 메모리 접근 성능을 더욱 향상시키고 처리 오버헤드를 줄이며 I/O 흐름 효율성을 높입니다.

그림 10. 가상 스토리지 I/O 경로 전체에 걸친 NUMA의 조정된 배치.
NIC 버퍼에서 가상 스토리지로 이동하는 데이터는 CPU 스레드에서 처리되어야 합니다. 네트워크 성능이 향상됨에 따라 단일 코어 버퍼 복사 효율성이 병목 현상이 될 수 있으며, NUMA 간 액세스는 효율성을 더욱 저하시킵니다. Sangfor는 여러 CPU 코어가 NIC 트래픽을 처리하고 NUMA 선호도를 적용할 수 있도록 합니다. 이를 통해 단일 코어 병목 현상을 제거하고 전송 지연 시간을 줄이며 동시성을 향상시킵니다. 내부 테스트 결과, 대기열 깊이가 높고 블록 크기가 큰 가상 머신 쓰기 성능이 20% 이상 향상되었습니다.

그림 11. NIC 버퍼와 가상 저장소 간의 멀티코어, NUMA 유사 처리.
3. 다른 산업 분야의 접근 방식과의 비교
업계별 지원 수준은 다양합니다. 어떤 벤더는 관리자가 각 VM vCPU가 실행되는 NUMA 노드를 구성할 수 있도록 허용하는 반면, 다른 벤더는 이 기능을 지원하지 않으며, VMware는 적응형 NUMA 스케줄링을 지원합니다.
Sangfor는 VM vCPU를 NUMA 노드에 자동으로 분할 및 배치하여 원격 메모리 액세스를 줄입니다. 각 vCPU의 위치를 수동으로 구성하는 방식과 비교하여 Sangfor의 적응형 NUMA 스케줄링은 vCPU 분할 및 배치를 자동화하고 노드 간 사용률을 균형 있게 조정하여 전반적인 성능을 향상시킵니다.
Sangfor는 기본적인 적응형 NUMA 구현과 비교하여 스토리지 서비스 스케줄링, 우선순위 VM 인식, 이기종 서버 플랫폼 및 VM 네트워크 선호도에 대한 최적화를 확장합니다. 이러한 개선 사항은 Sangfor 연구팀과 클라우드 제품팀의 공동 엔지니어링을 통해 이루어졌으며 실제 플랫폼 서비스 동작을 기반으로 설계되었습니다.
제5부. 요약
Sangfor의 적응형 NUMA 스케줄링은 다양한 인프라 시나리오에 최적화되어 애플리케이션의 메모리 접근 효율성을 향상시킵니다.
- VM vCPU를 NUMA 노드에 적응적으로 분할 및 배치하여 원격 메모리 액세스를 줄입니다.
- NUMA 노드 간에 VM을 마이그레이션하여 균형 잡힌 사용률을 유지하십시오.
- 우선순위가 높은 가상 머신을 식별하고 경쟁이 덜한 노드에 배치하여 CPU, 메모리 대역폭 및 캐시에 대한 경쟁을 줄입니다.
- NUMA 노드가 많고 노드 간 거리가 서로 다른 서버의 경우, 토폴로지 거리를 파악하고 관련 vNUMA 리소스를 가까운 물리적 NUMA 노드에 우선적으로 배치합니다.
- VM을 네트워크 데이터 플레인과 동일한 NUMA 노드에 배치하여 포워딩 성능을 향상시키는 VM 네트워크 선호도 옵션을 제공합니다.
- NUMA 인식 스케줄링을 가상 머신뿐만 아니라 스토리지 서비스에도 적용하십시오.
UnixBench 테스트 예시
UnixBench는 UNIX, BSD, Linux를 포함한 유닉스 계열 시스템에서 널리 사용되는 벤치마크 도구입니다. CPU, 파일 시스템, 메모리, 프로세스 성능 등 다양한 시스템 성능 요소를 측정합니다.

그림 12. UnixBench 테스트를 위한 가상 머신 구성.

그림 13. UnixBench 테스트를 위한 HCI 서버 하드웨어 구성.
테스트 결과: Sangfor HCI 6.9.0에서 NUMA를 활성화한 경우, 동일 호스트에서 동시에 실행되는 6개의 VM에 대한 UnixBench 종합 점수는 익명화된 비교 플랫폼보다 20.2% 높았습니다. 8개의 VM이 동시에 실행되는 경우에는 종합 점수가 34.17% 더 높았습니다.

그림 14. 동시 가상 머신 워크로드 조건에서 UnixBench 벤치마크 결과 비교.
본 문서에 제시된 벤치마크 결과는 특정 Sangfor 내부 테스트 환경을 반영한 것으로, 기술적 설명을 위한 것입니다. 실제 결과는 하드웨어, 소프트웨어 버전, 구성 및 워크로드에 따라 달라질 수 있습니다. 고객은 자체 서비스 수준 목표(SLO)에 맞춰 대표적인 애플리케이션을 검증해야 합니다.