XenServer

Optimización NUMA en XenServer 9

Información general

El acceso a memoria no uniforme (NUMA) es una arquitectura de memoria multiprocesador en la que la memoria se divide en nodos conectados a zócalos de CPU específicos. El acceso a la memoria en el nodo NUMA local tiene una latencia menor que el acceso a la memoria en un nodo remoto. Cuando las vCPU de la VM y su memoria se ubican en el mismo nodo NUMA, las cargas de trabajo pueden lograr una latencia de acceso a la memoria más baja y un mejor rendimiento.

Comparación entre UMA y NUMA

  • Los hosts UMA (acceso uniforme a la memoria) presentan un único nodo de memoria física a las CPU.
  • Los hosts NUMA exponen varios nodos de memoria. Las CPU tienen una latencia menor al acceder a la memoria desde su nodo local que desde los nodos remotos.

Ventajas de la ubicación NUMA optimizada

  • Mejora de la capacidad de respuesta de las aplicaciones y el rendimiento de la carga de trabajo.
  • Mayor densidad de VM por host, lo que reduce la necesidad de hosts adicionales y el costo general de la infraestructura.

Limitaciones

  • Si ningún nodo NUMA único en un host tiene suficiente memoria libre para una VM, XS9 inicia la VM con la memoria distribuida en varios nodos para permitir que la VM se inicie.
  • Cuando la memoria está distribuida, la VM utiliza varios nodos NUMA (NUMA nodes > 1) y no está optimizada para NUMA.
  • Las mejoras de rendimiento varían según la carga de trabajo, el punto de referencia y el tipo de CPU.

Supervisar y solucionar problemas

Las métricas RRD por VM (deshabilitadas de forma predeterminada) ayudan a supervisar el comportamiento de NUMA y la programación de vCPU.

Métricas

  • Nodos NUMA (numa_nodes): Número de nodos NUMA utilizados por la VM. El valor 1 indica optimizado; los valores mayores que 1 indican no optimizado.
  • Nodo NUMA de memoria X (memory_numa_node_X): Cantidad de memoria de la VM asignada desde el nodo NUMA físico X. El valor 0 significa que no hay memoria de ese nodo.
  • vCPU ejecutables cualquiera (runnable_any): Porcentaje de tiempo en que al menos una vCPU está lista pero no hay ninguna pCPU disponible. Este es un indicador temprano de contención de CPU.
  • Suma de vCPU ejecutables (runnable_vcpus): Porcentaje de ralentización esperado en todas las vCPU debido a retrasos en la programación.
  • vCPU no afines a NUMA (numa_node_nonaffine_vcpus): Porcentaje de tiempo en que las vCPU se ejecutan en pCPU que no están en el mismo nodo NUMA que la memoria de la VM. Valores más altos indican una mayor latencia de acceso a la memoria.

Numa

Lista de comprobación de depuración

  1. Compruebe NUMA nodes para ver cuántos nodos NUMA utiliza la VM.
  2. Compruebe vCPUs runnable any para ver la contención de programación a nivel de dominio.
  3. Compruebe vCPUs runnable sum para ver los retrasos de programación a nivel de vCPU.
  4. Compruebe NUMA non-affine vCPUs para ver las infracciones de afinidad NUMA y la latencia relacionada.

Habilitar métricas y exportar muestras

Las métricas RRD por VM están deshabilitadas de forma predeterminada. Para habilitar una métrica (por ejemplo, runnable_any) para una VM y exportar una muestra:

# 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-->

Configurar la ubicación NUMA (CLI de xe)

La optimización de la ubicación NUMA está habilitada de forma predeterminada en los hosts XS9. No se requiere ninguna acción para activarla.

Para deshabilitar la optimización de la ubicación NUMA en un host, establezca la política de afinidad NUMA del host en 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-->

Cuando está habilitado de forma predeterminada, el valor de la política es default_policy. Cuando está deshabilitado, el valor es any.

Optimización NUMA en XenServer 9