NUMA (ungleichmäßiger Speicherzugriff)
Kurz: Bei NUMA („Non-Uniform Memory Access”) hat jeder Prozessor seinen eigenen nahen Speicher, und Zugriffe auf den Speicher eines anderen Prozessors dauern länger.
Genauer: Server mit mehreren Prozessor-Sockeln oder vielen Chiplets teilen den Arbeitsspeicher in Bereiche („Knoten”). Der Zugriff auf den eigenen Knoten ist schnell, der auf einen fremden langsamer und mit weniger Durchsatz.
Im Detail
- Unterschied zu UMA: Dort sind alle Speicherzugriffe gleich schnell, typisch für Desktop-PCs mit einem Prozessor.
- Folge für Software: Ein Thread, der auf Knoten 0 läuft, aber Daten auf Knoten 1 liest, wird gebremst.
- Betriebssystem: Linux legt Speicher standardmäßig nahe am anfragenden Kern an („First Touch”) und versucht, Prozesse auf ihrem Knoten zu halten.
- Werkzeuge:
numactl --hardwarezeigt die Knoten,numactl --cpunodebind=0 --membind=0 programmbindet gezielt. - Datenbanken und KI: Falsch verteilte Last auf Mehr-Sockel-Servern kann Durchsatz kosten. Pinning und Speicherrichtlinien helfen.
- Auch bei Desktop-CPUs: Manche Ryzen-Threadripper-Modelle verhalten sich ähnlich.
Siehe auch: Speicherhierarchie und Cache-Lines