XenServer
젠서버 9의 누마 최적화
개요
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에서 도메인 수준 스케줄링 경합을 확인합니다. -
vCPUs runnable sum에서 vCPU 수준 스케줄링 지연을 확인합니다. -
NUMA non-affine vCPUs에서 NUMA 선호도 위반 및 관련 지연 시간을 확인합니다.
메트릭 활성화 및 샘플 내보내기
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
<!--NeedCopy-->
누마 배치 구성 (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
<!--NeedCopy-->
기본적으로 활성화된 경우 정책 값은 default_policy입니다. 비활성화된 경우 값은 any입니다.
젠서버 9의 누마 최적화
복사 완료!
실패!