Finding in the Wild | XenServer 9 – NUMA Node Drift

Ein interessantes Performance-Thema aus den aktuellen XenServer 9 Known Issues, das gerade in größeren Citrix-Umgebungen leicht übersehen werden kann.

Wenn die CPUs eines XenServer-Hosts vollständig ausgelastet sind, kann es zu sogenanntem NUMA Node Drift kommen.

Was bedeutet das?

Normalerweise versucht XenServer, die vCPUs einer VM auf dem NUMA-Node auszuführen, auf dem sich auch der zugehörige Arbeitsspeicher befindet.

Unter hoher CPU-Sättigung kann diese Zuordnung verloren gehen:

vCPU → NUMA Node 0
RAM → NUMA Node 1

Die CPU muss dann auf Speicher des anderen NUMA-Nodes zugreifen.

➡️ Höhere Latenz
➡️ Schlechtere Performance
➡️ Citrix-VDAs können spürbar langsamer werden

Das Gemeine daran:

Innerhalb des VDAs muss das zunächst gar nicht besonders auffällig aussehen.

Man sucht dann schnell in Windows, Citrix Policies, FSLogix, Storage oder der Anwendung – obwohl das eigentliche Problem auf Hypervisor-Ebene liegt.

XenServer 9 stellt dafür einen sehr interessanten Performance Counter bereit:

NUMA non-affine vCPUs

Steigt dieser Wert zusammen mit einer hohen Host-CPU-Auslastung, lohnt sich ein genauerer Blick auf die NUMA-Verteilung.

Der von XenServer dokumentierte Workaround ist ebenfalls bemerkenswert:

👉 Mindestens eine CPU auf dem Host frei lassen.

Dadurch kann XenServer die NUMA-Affinität wiederherstellen.

Mein Learning für Citrix-Performance-Analysen:

Nicht nur auf die CPU-Auslastung des VDAs schauen.

Bei stark ausgelasteten XenServer-Hosts auch immer die NUMA-Ebene mitprüfen.

Manchmal ist der VDA nicht langsam, weil ihm CPU fehlt – sondern weil seine CPU am falschen Speicher hängt. 😉

Optimierung von VMs durch NUMA

Einführung CPU & NUMA Architektur

Die Hauptaufgabe einer jeden CPU ist es Daten abzuarbeiten. Hier ist aber der Irrglaube, desto schneller die CPU (oder desto mehr CPUs ich zuordne), desto schneller werden die Daten abgearbeitet. Ganz so einfach ist das leider nicht, denn bevor die CPU die Daten abarbeiten kann, müssen diese vom langsameren System RAM ausgelesen werden und dies kann zu einer Latenz in der CPU führen. Ein erster Schritt der Hersteller um die Wartezeit auf die zu lesenden Daten zu minimieren, ist es einen internen Speicher Cache (lokaler RAM) an die CPU anzubinden, auf den der Zugriff um bis zu 95 % schneller ist.

Optimierung von VMs durch NUMA
„Optimierung von VMs durch NUMA“ weiterlesen