Was ist Non-Uniform Memory Access (NUMA)?
Non-Uniform Memory Access (NUMA) ist ein Computerspeicherdesign, das in Multiprozessorsystemen verwendet wird, bei denen die Speicherzugriffszeit je nach Speicherort relativ zum Prozessor variiert. In einer NUMA-Architektur verfügt jeder Prozessor über einen eigenen lokalen Speicher. Er kann zwar auch auf Speicher zugreifen, der an andere Prozessoren angeschlossen ist, dieser Zugriff ist jedoch langsamer, da Verbindungen und möglicherweise andere Prozessoren durchlaufen werden müssen, was zusätzliche Latenz und Bandbreitenkonflikte mit sich bringt.
NUMA wurde entwickelt, um die Skalierbarkeitsbeschränkungen herkömmlicher symmetrischer Multiprozessorsysteme (SMP) zu beheben, bei denen alle Prozessoren einen einzigen Speicherpool gemeinsam nutzen. Durch die Gruppierung des Speichers näher an jedem Prozessor verbessert NUMA die Speichereffizienz und die Gesamtleistung, insbesondere in Systemen mit einer großen Anzahl von Zentralprozessoren (CPUs) oder Kernen.
Moderne Betriebssysteme und Anwendungen, die für NUMA optimiert sind, können Speicher so zuweisen, dass die Daten lokal auf dem Prozessor verbleiben, der die Berechnung ausführt, wodurch die Latenz minimiert und der Durchsatz erhöht wird. NUMA wird häufig in Servern, Hochleistungsrechnern (HPC-Systemen) und Unternehmens-Workloads eingesetzt, die umfangreiche Speicher- und Rechenressourcen erfordern.
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 Remote-Speicher zugreifen können.
Der Zugriff auf den lokalen Speicher (Speicher, der physisch an denselben Knoten angeschlossen ist) ist schneller und hat eine geringere Latenz. Wenn ein Prozessor auf einen Remote-Speicher (Speicher, der sich auf einem anderen Knoten befindet) zugreift, entsteht aufgrund des Verbindungspfads zwischen den Knoten eine zusätzliche Latenz. Dieser Latenzunterschied macht den „nicht einheitlichen“ Aspekt von NUMA aus.
Moderne NUMA-Systeme sind darauf angewiesen, dass die System-Firmware, das Betriebssystem und die Anwendungen NUMA-fähig sind. NUMA-fähige Software versucht, Speicher zuzuweisen und Prozesse so zu planen, dass Aufgaben und ihr Speicher auf demselben Knoten nahe beieinander bleiben. Dies reduziert den Knoten-übergreifenden Speicherverkehr und optimiert die Leistung.
NUMA wird in der Regel in Systemen mit zwei oder mehr CPU-Sockeln implementiert, beispielsweise in Servern und Hochleistungs-Computing-Plattformen. Jeder Sockel verfügt über einen eigenen Speichercontroller und einen lokalen dynamischen Direktzugriffsspeicher (DRAM), wobei die Systemverbindung, beispielsweise Intel® Ultra Interconnect (UPI) oder AMD Fabric, die Sockel miteinander verbindet und bei Bedarf den Zugriff auf den Remote-Speicher ermöglicht.
NUMA und Systemarchitekturdesign
Da Multi-Socket-Systeme in modernen Rechenzentren und Unternehmensinfrastrukturen immer häufiger zum Einsatz kommen, ist es von entscheidender Bedeutung, den Einfluss von NUMA auf die Systemarchitektur zu verstehen. 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 hat direkte Auswirkungen auf die Anwendungsleistung, insbesondere bei Workloads, die horizontal über mehrere Kerne und Sockel skaliert werden.
Zu den Designüberlegungen gehören auch Regeln für die Speicherbelegung, NUMA-Konfigurationseinstellungen auf BIOS-Ebene und die physische Anordnung der Komponenten. Systemarchitekten müssen berücksichtigen, wie Anwendungen mit Speicher- und Rechenressourcen interagieren, um sicherzustellen, dass die Hardware-Kapazitäten voll ausgeschöpft werden. Schlecht optimierte Hardwarekonfigurationen können zu einem suboptimalen NUMA-Verhalten führen, einschließlich übermäßiger Fernspeicherzugriffe und erhöhter Latenzzeiten.
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 zugrunde liegende Speichertopologie berücksichtigt. Betriebssysteme wie Linux und Windows Server bieten Unterstützung für NUMA auf Kernel-Ebene und ermöglichen damit Funktionen wie Prozessoraffinität, Speicherbindung und NUMA-fähiges Scheduling. Diese Mechanismen tragen dazu bei, dass Threads auf CPUs geplant werden, die schnellen Zugriff auf die Speicherbereiche haben, die sie am häufigsten nutzen.
Anwendungsentwickler und Systemadministratoren können die Leistung durch den Einsatz von NUMA-spezifischen APIs und Tuning-Verfahren weiter verbessern. Parallele Programmierframeworks wie OpenMP und MPI bieten Optionen zur Steuerung der Thread-Platzierung und Speicherlokalität. Bei Unternehmens- und HPC-Workloads kann dieser Optimierungsgrad die Speicherlatenz erheblich reduzieren und den Durchsatz erhöhen, insbesondere bei der Ausführung auf Multi-Socket-Systemen mit großem Speicherbedarf.
NUMA-Anwendungsfälle und Vorteile
NUMA bietet Leistungsvorteile für Workloads, die einen hohen Grad an Parallelität und großen Speicherbedarf erfordern. Durch die Reduzierung des nodübergreifenden Speicherzugriffs 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 High Performance Computing profitieren wissenschaftliche Simulationen, Modellierungen und groß angelegte Datenanalyse-Workloads von NUMA, da dadurch die Latenz beim Speicherzugriff über mehrere CPU-Sockel hinweg reduziert wird.
Virtualisierungsplattformen
Hypervisoren und virtuelle Maschinen können für die Verwendung von NUMA-fähigem Scheduling optimiert werden, wodurch sichergestellt wird, dass virtuelle CPUs und ihr Speicher auf demselben physischen Knoten verbleiben.
In-Memory-Datenbanken
NUMA trägt dazu bei, einen Speicherzugriff mit geringer Latenz in Datenbanksystemen aufrechtzuerhalten, die große Datenmengen direkt im RAM speichern.
Groß angelegte Unternehmensanwendungen
NUMA verbessert die Reaktionsfähigkeit und den Durchsatz von Unternehmenssoftware, wie beispielsweiseERP-Systemen (Enterprise Resource Planning), die Zugriff auf große Speicherbereiche über mehrere Kerne hinweg benötigen.
FAQs
- 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 die Leistung und Skalierbarkeit, indem sie Konflikte um gemeinsam genutzte Speicherressourcen reduziert. - Was ist eine NUMA-Topologie?
Die NUMA-Topologie beschreibt, wie CPUs, Speicher und Verbindungen physisch und logisch in einem System angeordnet sind. Sie definiert, welche Prozessoren mit welchen Speicherbereichen verbunden sind und wie der Zugriff zwischen den Knoten erfolgt. Das Verständnis der Systemtopologie hilft dabei, die Speicherzuweisung und die Anwendungsleistung zu optimieren. - Ist NUMA für die Virtualisierung wichtig?
Ja, NUMA spielt eine entscheidende Rolle bei der Virtualisierung, da es dazu beiträgt, eine optimale Speicher- und CPU-Platzierung für virtuelle Maschinen sicherzustellen. Wenn ein Hypervisor NUMA-fähig ist, kann er virtuelle CPUs und den zugehörigen Speicher innerhalb desselben physischen Knotens halten, 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 einigen Fällen muss sie möglicherweise im System-BIOS oder in den UEFI-Einstellungen aktiviert werden. Nach der Aktivierung stellt das System die NUMA-Topologie dem Betriebssystem zur Verfügung, um die Planung und Speicherzuweisung zu optimieren. - Was passiert, wenn Software nicht NUMA-fähig ist?
Wenn Software nicht NUMA-fähig ist, kann sie möglicherweise nur ineffizient über Knoten hinweg auf den Speicher zugreifen, was zu einer höheren Latenz und geringerer Leistung führt. Dies kann in Multi-Socket-Systemen mit großen Speicherpools zu einem Engpass führen, insbesondere bei hoher Auslastung.