XenServer 9의 NUMA 최적화
개요
NUMA(Non-Uniform Memory Access)는 메모리가 특정 CPU 소켓에 연결된 노드로 분할되는 다중 프로세서 메모리 아키텍처입니다. 로컬 NUMA 노드의 메모리에 액세스하는 것은 원격 노드의 메모리에 액세스하는 것보다 대기 시간이 짧습니다. VM vCPU와 해당 메모리가 동일한 NUMA 노드에 함께 배치되면 워크로드는 더 낮은 메모리 액세스 대기 시간과 더 나은 성능을 얻을 수 있습니다.
UMA와 NUMA 비교
-
UMA(Uniform Memory Access) 호스트는 단일 물리적 메모리 노드를 CPU에 제공합니다.
-
NUMA 호스트는 여러 메모리 노드를 노출합니다. CPU는 원격 노드보다 로컬 노드에서 메모리에 액세스할 때 대기 시간이 더 짧습니다.
최적화된 NUMA 배치 이점
-
향상된 애플리케이션 응답성 및 워크로드 처리량.
-
호스트당 더 높은 VM 밀도로 추가 호스트 및 전체 인프라 비용의 필요성을 줄입니다.
제한 사항
-
호스트의 단일 NUMA 노드에 VM에 충분한 여유 메모리가 없는 경우, XS9는 VM이 시작될 수 있도록 여러 노드에 메모리를 분산하여 VM을 시작합니다.
-
메모리가 분산되면 VM은 여러 NUMA 노드(
NUMA nodes > 1)를 사용하며 NUMA 최적화되지 않습니다. -
성능 향상은 워크로드, 벤치마크 및 CPU 유형에 따라 다릅니다.
모니터링 및 문제 해결
VM별 RRD 메트릭(기본적으로 비활성화됨)은 NUMA 동작 및 vCPU 스케줄링을 모니터링하는 데 도움이 됩니다.
메트릭
-
NUMA 노드 (
numa_nodes): VM에서 사용되는 NUMA 노드의 수입니다. 값 1은 최적화되었음을 나타내고, 1보다 큰 값은 최적화되지 않았음을 나타냅니다. -
메모리 NUMA 노드 X (
memory_numa_node_X): 물리적 NUMA 노드 X에서 할당된 VM 메모리 양입니다. 값 0은 해당 노드에서 메모리가 할당되지 않았음을 의미합니다. -
실행 가능한 vCPU (모두) (
runnable_any): 하나 이상의 vCPU가 준비되었지만 사용 가능한 pCPU가 없는 시간의 백분율입니다. 이는 CPU 경합의 초기 지표입니다. -
실행 가능한 vCPU 합계 (
runnable_vcpus): 스케줄링 지연으로 인해 모든 vCPU에서 예상되는 성능 저하 백분율입니다. -
NUMA 비선호 vCPU (
numa_node_nonaffine_vcpus): vCPU가 VM 메모리와 동일한 NUMA 노드에 있지 않은 pCPU에서 실행되는 시간의 백분율입니다. 값이 높을수록 메모리 액세스 지연 시간이 증가함을 나타냅니다.
디버그 체크리스트
-
NUMA nodes을(를) 확인하여 VM이 사용하는 NUMA 노드 수를 확인합니다. -
도메인 수준 스케줄링 경합에 대해
vCPUs runnable any을(를) 확인합니다. -
vCPU 수준 스케줄링 지연에 대해
vCPUs runnable sum을(를) 확인합니다. -
NUMA 선호도 위반 및 관련 지연 시간에 대해
NUMA non-affine vCPUs을(를) 확인합니다.
메트릭 활성화 및 샘플 내보내기
VM별 RRD 메트릭은 기본적으로 비활성화되어 있습니다. VM에 대한 메트릭(예:
runnable_any)을 활성화하고 샘플을 내보내려면 다음을 수행합니다.
# Enable the data source for a VM
xe vm-data-source-record uuid=<vm-uuid> data-source=runnable_any
# Export sample RRD output
rrd2csv VM:AVERAGE::runnable_any
NUMA 배치 구성 (xe CLI)
NUMA 배치 최적화는 XS9 호스트에서 기본적으로 활성화되어 있습니다. 이를 켜기 위해 별도의 조치가 필요하지 않습니다.
호스트에서 NUMA 배치 최적화를 비활성화하려면 호스트 NUMA 선호도 정책을
any으로 설정하십시오.
# View current policy
xe host-param-get uuid=<host-uuid> param-name=numa-affinity-policy
# Disable optimization
xe host-param-set uuid=<host-uuid> numa-affinity-policy=any
# Verify
xe host-param-get uuid=<host-uuid> param-name=numa-affinity-policy
기본적으로 활성화된 경우 정책 값은
default_policy입니다. 비활성화된 경우 값은 any입니다.