Was ist Non-Uniform Memory Access (NUMA)?
Non-Uniform Memory Access (NUMA) ist ein Speicherdesign für Multiprozessorsysteme, bei dem die Speicherzugriffszeit je nach Speicherort relativ zum Prozessor variiert. In einer NUMA-Architektur verfügt jeder Prozessor über einen eigenen lokalen Speicher. Zwar kann er auch auf Speicher anderer Prozessoren zugreifen, dieser Zugriff ist jedoch aufgrund der notwendigen Verbindungen und potenzieller Kontakte zu anderen Prozessoren langsamer, was zu zusätzlicher Latenz und Bandbreitenkonflikten führt.
NUMA wurde entwickelt, um die Skalierungsbeschränkungen traditioneller symmetrischer Multiprocessing-Systeme (SMP) zu beheben, bei denen alle Prozessoren einen gemeinsamen Speicherpool nutzen. Durch die Gruppierung des Speichers näher an den einzelnen Prozessoren verbessert NUMA die Speicherzugriffseffizienz und die Gesamtleistung, insbesondere in Systemen mit einer großen Anzahl von Prozessoren (CPUs) oder Kernen.
Moderne Betriebssysteme und für NUMA optimierte Anwendungen können den Speicher so allokieren, dass die Daten lokal auf dem Prozessor gespeichert werden, der die Berechnung durchführt. Dadurch werden Latenzzeiten minimiert und der Durchsatz erhöht. NUMA wird häufig auf Servern, in Hochleistungsrechnersystemen (HPC) und in Unternehmensanwendungen eingesetzt, die umfangreiche Speicher- und Rechenressourcen benötigen.
Wie funktioniert NUMA?
In einem NUMA-System ist die Architektur in mehrere Knoten unterteilt. Jeder Knoten enthält einen oder mehrere Prozessoren (oder CPU-Sockel) sowie einen eigenen dedizierten Speicher. Diese Knoten sind miteinander verbunden, sodass die Prozessoren sowohl auf den lokalen als auch auf den entfernten Speicher zugreifen können.
Der Zugriff auf den lokalen Speicher (Speicher, der physisch mit demselben Knoten verbunden ist) ist schneller und latenzärmer. Greift ein Prozessor auf entfernten Speicher (Speicher auf einem anderen Knoten) zu, entsteht durch den Verbindungspfad zwischen den Knoten zusätzliche Latenz. Dieser Latenzunterschied definiert den „nicht-uniformen“ Aspekt von NUMA.
Moderne NUMA-Systeme setzen voraus, dass System-Firmware, Betriebssystem und Anwendungen NUMA-fähig sind. NUMA-fähige Software versucht, Speicher und Prozesse so zuzuweisen, dass Aufgaben und deren Speicher auf demselben Knoten nahe beieinander liegen. Dies reduziert den speicherübergreifenden Datenverkehr und optimiert die Leistung.
NUMA wird typischerweise in Systemen mit zwei oder mehr CPU-Sockeln implementiert, beispielsweise in Servern und Hochleistungsrechnern. Jeder Sockel verfügt über einen eigenen Speichercontroller und lokalen dynamischen Direktzugriffsspeicher (DRAM), wobei die Systemverbindung beispielsweise über Intel® erfolgt. Ultra Pfadverbindung (UPI) oder AMD Infinity Fabric verbindet die Sockets und ermöglicht bei Bedarf den Zugriff auf entfernte Speicher.
NUMA und Systemarchitekturdesign
Da Mehrkernsysteme in modernen Rechenzentren und Unternehmensinfrastrukturen immer häufiger eingesetzt werden, ist das Verständnis des Einflusses von NUMA auf die Systemarchitektur entscheidend. Hardwarehersteller entwickeln Server-Motherboards und CPU-Verbindungen unter Berücksichtigung von NUMA-Topologien, um optimale Datenpfade zwischen Prozessoren und Speicherbänken zu gewährleisten. Dies wirkt sich direkt auf die Anwendungsleistung aus, insbesondere bei Workloads, die horizontal über mehrere Kerne und Sockel skalieren.
Zu den Designüberlegungen gehören auch Speicherbelegungsregeln, NUMA-Konfigurationseinstellungen im BIOS und die physische Anordnung der Komponenten. Systemarchitekten müssen berücksichtigen, wie Anwendungen mit Speicher und Rechenressourcen interagieren, um die Hardwarekapazität optimal auszunutzen. Schlecht optimierte Hardwarekonfigurationen können zu suboptimalem NUMA-Verhalten führen, darunter übermäßiger Zugriff auf entfernte Speicherbereiche und erhöhte Latenz.
Softwareoptimierung für NUMA-Systeme
Damit NUMA sein volles Leistungspotenzial entfalten kann, muss die Software so konzipiert oder zumindest so konfiguriert sein, dass sie die zugrundeliegende Speichertopologie erkennt. Betriebssysteme wie beispielsweise Linux Und Windows Server bieten NUMA-Unterstützung auf Kernel-Ebene und ermöglichen so Funktionen wie Prozessoraffinität, Speicherbindung und NUMA-basiertes Scheduling. Diese Mechanismen tragen dazu bei, dass Threads auf CPUs mit schnellem Zugriff auf die von ihnen am häufigsten genutzten Speicherbereiche ausgeführt werden.
Anwendungsentwickler und Systemadministratoren können die Leistung durch die Nutzung NUMA-spezifischer APIs und Optimierungsmethoden weiter verbessern. Parallelprogrammierungsframeworks wie OpenMP und MPI bieten Optionen zur Steuerung der Thread-Platzierung und Speicherlokalität. Für Unternehmens- und HPC-Workloads kann diese Optimierungsebene die Speicherlatenz deutlich reduzieren und den Durchsatz erhöhen, insbesondere beim Betrieb auf Multi-Socket-Systemen mit großem Speicherbedarf.
Anwendungsfälle und Vorteile von NUMA
NUMA bietet Leistungsvorteile für Workloads, die hohe Parallelität und großen Speicherbedarf erfordern. Durch die Reduzierung speicherübergreifender Zugriffe und die bessere Nutzung der verfügbaren Bandbreite verbessert NUMA die Skalierbarkeit und trägt zur Beseitigung von Engpässen in Multi-Socket-Architekturen bei.
Hochleistungsrechnen (HPC)
Im Bereich des Hochleistungsrechnens profitieren wissenschaftliche Simulationen, Modellierungen und umfangreiche Datenanalysen von NUMA, da die Speicherzugriffslatenz über mehrere CPU-Sockel hinweg reduziert wird.
Virtualisierungsplattformen
Hypervisoren und virtuelle Maschinen können so optimiert werden, dass sie NUMA-fähiges Scheduling nutzen, wodurch sichergestellt wird, dass virtuelle CPUs und ihr Speicher auf demselben physischen Knoten verbleiben.
In-Memory-Datenbanken
NUMA trägt dazu bei, einen latenzarmen Speicherzugriff in Datenbanksystemen aufrechtzuerhalten, die große Datenmengen direkt im RAM speichern.
Großskalige Unternehmensanwendungen
NUMA verbessert die Reaktionsfähigkeit und den Durchsatz von Unternehmenssoftware, wie z. B. Enterprise Resource Planning ( ERP )-Systemen, die den Zugriff auf große Speicherbereiche über mehrere Kerne hinweg benötigen.
Häufig gestellte Fragen
- Was ist NUMA-Clustering?
NUMA-Clustering bezeichnet die Organisation von Prozessoren und Speicher in Knoten oder Clustern innerhalb eines NUMA-fähigen Systems. Jeder Cluster verfügt über einen eigenen lokalen Speicher, auf den die Prozessoren innerhalb eines Clusters mit geringerer Latenz zugreifen können. Diese Anordnung verbessert Leistung und Skalierbarkeit, indem sie die Konflikte um gemeinsam genutzte Speicherressourcen reduziert. - Was ist die NUMA-Topologie?
Die NUMA-Topologie beschreibt die physische und logische Anordnung von CPUs, Speicher und Verbindungen in einem System. Sie definiert, welche Prozessoren mit welchen Speicherbereichen verbunden sind und wie der Zugriff zwischen den Knoten erfolgt. Das Verständnis der Systemtopologie trägt zur Optimierung der Speicherverwaltung und der Anwendungsleistung bei. - Ist NUMA für die Virtualisierung wichtig?
Ja, NUMA spielt eine entscheidende Rolle bei der Virtualisierung, indem es die optimale Speicher- und CPU-Platzierung für virtuelle Maschinen sicherstellt. Wenn ein Hypervisor NUMA-fähig ist, kann er virtuelle CPUs und den zugehörigen Speicher auf demselben physischen Knoten unterbringen, wodurch Latenzzeiten reduziert und Leistungseinbußen vermieden werden. - Wie aktiviert man NUMA auf einem System?
NUMA-Unterstützung ist auf modernen Serverplattformen in der Regel standardmäßig aktiviert. In manchen Fällen muss sie jedoch im BIOS oder in den UEFI-Einstellungen aktiviert werden. Nach der Aktivierung stellt das System dem Betriebssystem die NUMA-Topologie zur Verfügung, um die Speicherplanung und -zuweisung zu optimieren. - Was passiert, wenn die Software nicht NUMA-fähig ist?
Wenn Software nicht NUMA-fähig ist, kann der Speicherzugriff über verschiedene Knoten hinweg ineffizient sein, was zu höheren Latenzen und geringerer Leistung führt. Dies kann in Systemen mit mehreren Sockeln und großen Speicherpools, insbesondere unter hoher Auslastung, zu einem Flaschenhals werden.