XenServer

Optimisation NUMA dans XenServer 9

Présentation

L’accès mémoire non uniforme (NUMA) est une architecture mémoire multiprocesseur dans laquelle la mémoire est divisée en nœuds attachés à des sockets de processeur spécifiques. L’accès à la mémoire sur le nœud NUMA local a une latence plus faible que l’accès à la mémoire sur un nœud distant. Lorsque les vCPU de la VM et leur mémoire sont colocalisées sur le même nœud NUMA, les charges de travail peuvent atteindre une latence d’accès mémoire plus faible et de meilleures performances.

Comparaison entre UMA et NUMA

  • Les hôtes UMA (Uniform Memory Access) présentent un seul nœud de mémoire physique aux processeurs.
  • Les hôtes NUMA exposent plusieurs nœuds de mémoire. Les processeurs ont une latence plus faible lorsqu’ils accèdent à la mémoire de leur nœud local que de nœuds distants.

Avantages du placement NUMA optimisé

  • Amélioration de la réactivité des applications et du débit des charges de travail.
  • Densité de VM plus élevée par hôte, réduisant le besoin d’hôtes supplémentaires et le coût global de l’infrastructure.

Limitations

  • Si aucun nœud NUMA unique sur un hôte ne dispose de suffisamment de mémoire libre pour une VM, XS9 démarre la VM avec la mémoire répartie sur plusieurs nœuds pour permettre à la VM de démarrer.
  • Lorsque la mémoire est répartie, la VM utilise plusieurs nœuds NUMA (NUMA nodes > 1) et n’est pas optimisée NUMA.
  • Les améliorations de performances varient en fonction de la charge de travail, du benchmark et du type de processeur.

Surveiller et dépanner

Les métriques RRD par VM (désactivées par défaut) aident à surveiller le comportement NUMA et la planification des vCPU.

Métriques

  • Nœuds NUMA (numa_nodes): Nombre de nœuds NUMA utilisés par la VM. La valeur 1 indique optimisé ; les valeurs supérieures à 1 indiquent non optimisé.
  • Nœud NUMA de mémoire X (memory_numa_node_X): Quantité de mémoire de la VM allouée à partir du nœud NUMA physique X. La valeur 0 signifie aucune mémoire de ce nœud.
  • vCPU exécutables (tout) (runnable_any): Pourcentage de temps pendant lequel au moins un vCPU est prêt mais aucun pCPU n’est disponible. C’est un indicateur précoce de contention CPU.
  • Somme des vCPU exécutables (runnable_vcpus): Pourcentage de ralentissement attendu sur tous les vCPU en raison des retards de planification.
  • vCPU non affins NUMA (numa_node_nonaffine_vcpus): Pourcentage de temps pendant lequel les vCPU s’exécutent sur des pCPU qui ne se trouvent pas dans le même nœud NUMA que la mémoire de la VM. Des valeurs plus élevées indiquent une latence d’accès à la mémoire accrue.

Numa

Liste de contrôle de débogage

  1. Vérifiez NUMA nodes pour voir combien de nœuds NUMA la VM utilise.
  2. Vérifiez vCPUs runnable any pour la contention de planification au niveau du domaine.
  3. Vérifiez vCPUs runnable sum pour les retards de planification au niveau du vCPU.
  4. Vérifiez NUMA non-affine vCPUs pour les violations d’affinité NUMA et la latence associée.

Activer les métriques et exporter les échantillons

Les métriques RRD par VM sont désactivées par défaut. Pour activer une métrique (par exemple, runnable_any) pour une VM et exporter un échantillon :

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

Configurer le placement NUMA (CLI xe)

L’optimisation du placement NUMA est activée par défaut sur les hôtes XS9. Aucune action n’est requise pour l’activer.

Pour désactiver l’optimisation du placement NUMA sur un hôte, définissez la politique d’affinité NUMA de l’hôte sur 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-->

Lorsqu’elle est activée par défaut, la valeur de la politique est default_policy. Lorsqu’elle est désactivée, la valeur est any.

Optimisation NUMA dans XenServer 9