Inhaltsverzeichnis
Das Konzept der Speicherebene in NUMA:
Verwendung von numactl
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

Mar 03, 2022 am 06:00 AM
linux

Dieser Artikel vermittelt Ihnen relevantes Wissen über die Numa-Architektur in Linux. Ich hoffe, er wird Ihnen hilfreich sein.

Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

Der folgende Fall basiert auf Ubuntu 16.04 und ist auch auf andere Linux-Systeme anwendbar. Die Gehäuseumgebung, die ich verwendet habe, ist wie folgt:

Maschinenkonfiguration: 32 CPU, 64 GB Speicher

Das Konzept der Speicherebene in NUMA:

Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

1) Prozessorschicht: ein einzelner physischer Kern, der als Prozessorschicht bezeichnet wird. 2) Lokale Knotenschicht: Für alle Prozessoren in einem Knoten wird dieser Knoten als lokaler Knoten bezeichnet. 3) Heimatknotenschicht: Der Knoten neben dem lokalen Knoten wird als Heimatknoten bezeichnet. 4) Remote-Knotenschicht: Knoten, die keine lokalen Knoten oder Nachbarknoten sind, werden als Remote-Knoten bezeichnet. Die Geschwindigkeit, mit der die CPU auf den Speicher verschiedener Knotentypen zugreift, ist am schnellsten und die Geschwindigkeit beim Zugriff auf entfernte Knoten am langsamsten. Das heißt, die Zugriffsgeschwindigkeit hängt von der Entfernung des Knotens ab . Je weiter die Entfernung, desto langsamer ist die Zugriffsgeschwindigkeit. Diese Entfernung wird als Knotenentfernung bezeichnet. Anwendungen sollten versuchen, die Interaktion zwischen verschiedenen CPU-Modulen zu minimieren. Wenn die Anwendung in einem CPU-Modul fixiert werden kann, wird die Leistung der Anwendung erheblich verbessert.

** Lassen Sie uns über die Zusammensetzung des CPU-Chips mit dem Kunpeng 920-Prozessor sprechen: ** Jeder Super-Core-Cluster des Kunpeng 920-Prozessor-System-on-Chip enthält 6 Core-Cluster, 2 I/O-Cluster und 4 DDR-Controller. Jeder Super-Core-Cluster ist in einen CPU-Chip verpackt. Jeder Chip integriert vier 72-Bit-Hochgeschwindigkeits-DDR4-Kanäle (64-Bit-Daten plus 8-Bit-ECC) mit einer Datenübertragungsrate von bis zu 3200 MT/s. Ein einzelner Chip kann bis zu 512 GB × 4 DDR-Speicherplatz unterstützen. Der L3-Cache ist physisch in zwei Teile unterteilt: L3-Cache-TAG und L3-Cache-Daten. L3-Cache-TAG ist in jedem Kerncluster integriert, um die Abhörlatenz zu reduzieren. L3-Cache-Daten sind direkt mit dem On-Chip-Bus verbunden. Hydra Root Agent (Hydra Home Agent, HHA) ist ein Modul, das das Cache-Konsistenzprotokoll von Multi-Chip-Systemen verwaltet. POE_ICL ist ein vom System konfigurierter Hardwarebeschleuniger, der im Allgemeinen als Paketsequenzer, Nachrichtenwarteschlange, Nachrichtenverteilung oder zur Implementierung bestimmter Aufgaben eines bestimmten Prozessorkerns verwendet werden kann. Darüber hinaus ist jeder Super-Core-Cluster physisch mit einem Generic Interrupt Controller Distributor (GICD)-Modul konfiguriert, das mit der GICv4-Spezifikation von ARM kompatibel ist. Wenn in einem Single-Chip- oder Multi-Chip-System mehrere Super-Core-Cluster vorhanden sind, ist für die Systemsoftware nur ein GICD sichtbar.

Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

Verwendung von numactl

Linux bietet einen manuellen Optimierungsbefehl numactl (nicht standardmäßig installiert). Der Installationsbefehl unter Ubuntu lautet wie folgt:

sudo apt install numactl -y
Nach dem Login kopieren

Zunächst können Sie sich über man numactl oder numactl darüber informieren --h Die Funktion von Parametern und der Inhalt der Ausgabe. Überprüfen Sie den Numa-Status des Systems:

numactl --hardware
Nach dem Login kopieren

Führen Sie die folgenden Ergebnisse aus:

available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16047 MB
node 0 free: 3937 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 16126 MB
node 1 free: 4554 MB
node 2 cpus: 16 17 18 19 20 21 22 23
node 2 size: 16126 MB
node 2 free: 8403 MB
node 3 cpus: 24 25 26 27 28 29 30 31
node 3 size: 16126 MB
node 3 free: 7774 MB
node distances:
node   0   1   2   3
  0:  10  20  20  20
  1:  20  10  20  20
  2:  20  20  10  20
  3:  20  20  20  10
Nach dem Login kopieren

Lassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text)

Anhand der Ergebnisse aus diesem Bild und dem Befehl können Sie sehen, dass dieses System insgesamt 4 Knoten hat, von denen jeder 8 empfängt CPUs und 16G Speicher. Hierbei ist zu beachten, dass der von der CPU gemeinsam genutzte L3-Cache auch selbst den entsprechenden Speicherplatz erhält. Sie können den Numa-Status mit dem Befehl numastat überprüfen. Der Inhalt des Rückgabewerts:

numa_hit: Es soll Speicher auf diesem Knoten zugewiesen werden und wie oft er von diesem Knoten zugewiesen wurde; Speicher auf diesem Knoten zuweisen, aber er wurde schließlich von anderen Knoten zugewiesen

numa_foreign: Dies ist die Häufigkeit, mit der Speicher von diesem Knoten zugewiesen wird, wenn er auf anderen Knoten zugewiesen werden soll interleave_hit: die Häufigkeit, mit der der Speicher von diesem Knoten mithilfe der Interleave-Strategie zugewiesen wird.

local_node: Der Prozess auf diesem Knoten wird auf diesem Knoten zugewiesen. Die Häufigkeit, mit der der Speicher auf dem Knoten zugewiesen wird.

other_node: Dies ist die Häufigkeit, mit der dieser Knoten zugewiesen wird Andere Knotenprozesse werden auf dem Knoten zugewiesen

Hinweis: Wenn festgestellt wird, dass der Wert von numa_miss relativ hoch ist, bedeutet dies, dass die Zuweisungsstrategie angepasst werden muss. Beispielsweise ist die angegebene Prozesszuordnung an die angegebene CPU gebunden, wodurch die Speichertrefferrate verbessert wird.

root@ubuntu:~# numastat
                           node0           node1           node2           node3
numa_hit             19480355292     11164752760     12401311900     12980472384
numa_miss                5122680       122652623        88449951            7058
numa_foreign           122652643        88449935            7055         5122679
interleave_hit             12619           13942           14010           13924
local_node           19480308881     11164721296     12401264089     12980411641
other_node               5169091       122684087        88497762           67801
Nach dem Login kopieren

NUMA-Speicherzuweisungsstrategie

--localalloc oder -l: Gibt an, dass der Prozess die Speicherzuweisung vom lokalen Knoten anfordert. --membind=Knoten oder -m Knoten: Gibt an, dass der Prozess nur Speicherzuweisung von angegebenen Knoten anfordern kann. --preferred=node: Geben Sie einen empfohlenen Knoten an, um Speicher zu erhalten. Wenn die Erfassung fehlschlägt, versuchen Sie es mit einem anderen Knoten. --interleave=Knoten oder -i Knoten: Gibt an, dass der Prozess mithilfe des Round-Robin-Algorithmus interleaved Speicherzuweisung von den angegebenen Knoten anfordert.

 numactl --interleave=all mongod -f /etc/mongod.conf
Nach dem Login kopieren

因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当开启了swap,某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注NUMA架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略/Swap使用倾向),尽量去避免使用到Swap。

Node->Socket->Core->Processor

随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor数量。

Socket = Node

Socket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。

Core = 物理CPU

Core是物理概念,一个独立的硬件执行单元,对应于物理CPU;

Thread = 逻辑CPU = Processor

Thread是逻辑CPU,也就是Processo

lscpu的使用

显示格式:

  • Architecture:架构

  • CPU(s):逻辑cpu颗数

  • Thread(s) per core:每个核心线程,也就是指超线程

  • Core(s) per socket:每个cpu插槽核数/每颗物理cpu核数

  • CPU socket(s):cpu插槽数

  • L1d cache:级缓存(google了下,这具体表示表示cpu的L1数据缓存)

  • L1i cache:一级缓存(具体为L1指令缓存)

  • L2 cache:二级缓存

  • L3 cache:三级缓存

  • NUMA node0 CPU(s) :CPU上的逻辑核,也就是超线程

执行lscpu,结果部分如下:

root@ubuntu:~# lscpu
Architecture:          x86_64
CPU(s):                32
Thread(s) per core:    1
Core(s) per socket:    8
Socket(s):             4
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7
NUMA node1 CPU(s):     8-15
NUMA node2 CPU(s):     16-23
NUMA node3 CPU(s):     24-31
Nach dem Login kopieren

相关推荐:《Linux视频教程

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Numa-Architektur unter Linux sprechen (ausführliche Erklärung mit Bildern und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ich kann mich nicht als Stamm bei MySQL anmelden Ich kann mich nicht als Stamm bei MySQL anmelden Apr 08, 2025 pm 04:54 PM

Die Hauptgründe, warum Sie sich bei MySQL nicht als Root anmelden können, sind Berechtigungsprobleme, Konfigurationsdateifehler, Kennwort inkonsistent, Socket -Dateiprobleme oder Firewall -Interception. Die Lösung umfasst: Überprüfen Sie, ob der Parameter Bind-Address in der Konfigurationsdatei korrekt konfiguriert ist. Überprüfen Sie, ob die Root -Benutzerberechtigungen geändert oder gelöscht und zurückgesetzt wurden. Stellen Sie sicher, dass das Passwort korrekt ist, einschließlich Fall- und Sonderzeichen. Überprüfen Sie die Einstellungen und Pfade der Socket -Dateiberechtigte. Überprüfen Sie, ob die Firewall Verbindungen zum MySQL -Server blockiert.

C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen Apr 04, 2025 am 10:48 AM

C-Sprachbedingungskompilation ist ein Mechanismus zum selektiven Kompilieren von Codeblöcken, die auf Kompilierungszeitbedingungen basieren. Zu den Einführungsmethoden gehören: Verwenden von #IF- und #else -Direktiven, um Codeblöcke basierend auf den Bedingungen auszuwählen. Zu den häufig verwendeten bedingten Ausdrücken gehören STDC, _win32 und Linux. Praktischer Fall: Drucken Sie verschiedene Nachrichten entsprechend dem Betriebssystem. Verwenden Sie unterschiedliche Datentypen gemäß der Anzahl der Ziffern des Systems. Verschiedene Header -Dateien werden gemäß dem Compiler unterstützt. Die bedingte Kompilierung verbessert die Portabilität und Flexibilität des Codes und macht es an den Compiler-, Betriebssystem- und CPU -Architekturänderungen anpassbar.

【Rost-Selbststudie】 Einführung 【Rost-Selbststudie】 Einführung Apr 04, 2025 am 08:03 AM

1.0.1 Vorwort Dieses Projekt (einschließlich Code und Kommentare) wurde während meines Autodidakt-Rostes aufgezeichnet. Es kann ungenaue oder unklare Aussagen geben. Bitte entschuldigen Sie sich. Wenn Sie davon profitieren, ist es noch besser. 1.0.2 Warum ist Rustrust zuverlässig und effizient? Rost kann C und C mit ähnlicher Leistung, aber höherer Sicherheit ersetzen, und erfordert keine häufige Neukompilation, um auf Fehler wie C und C zu prüfen. Thread-Safe (stellen Sie sicher, dass Multi-Thread-Code vor der Ausführung sicher ist). Vermeiden Sie undefiniertes Verhalten (z. B. Array aus Grenzen, nicht initialisierte Variablen oder Zugriff auf den freien Speicher). Rust bietet moderne Sprachmerkmale wie Generika

Was sind die 5 grundlegenden Komponenten von Linux? Was sind die 5 grundlegenden Komponenten von Linux? Apr 06, 2025 am 12:05 AM

Die fünf grundlegenden Komponenten von Linux sind: 1. Der Kernel, Verwaltung von Hardware -Ressourcen; 2. Die Systembibliothek, die Funktionen und Dienste bereitstellt; 3. Shell, die Schnittstelle, in der Benutzer mit dem System interagieren können; 4. Das Dateisystem, das Daten speichert und organisiert; 5. Anwendungen, die Systemressourcen verwenden, um Funktionen zu implementieren.

Wie man MySQL löst, kann nicht gestartet werden Wie man MySQL löst, kann nicht gestartet werden Apr 08, 2025 pm 02:21 PM

Es gibt viele Gründe, warum MySQL Startup fehlschlägt und durch Überprüfung des Fehlerprotokolls diagnostiziert werden kann. Zu den allgemeinen Ursachen gehören Portkonflikte (prüfen Portbelegung und Änderung der Konfiguration), Berechtigungsprobleme (Überprüfen Sie den Dienst Ausführen von Benutzerberechtigungen), Konfigurationsdateifehler (Überprüfung der Parametereinstellungen), Datenverzeichniskorruption (Wiederherstellung von Daten oder Wiederaufbautabellenraum), InnoDB-Tabellenraumprobleme (prüfen IBDATA1-Dateien), Plug-in-Ladeversagen (Überprüfen Sie Fehlerprotokolle). Wenn Sie Probleme lösen, sollten Sie sie anhand des Fehlerprotokolls analysieren, die Hauptursache des Problems finden und die Gewohnheit entwickeln, Daten regelmäßig zu unterstützen, um Probleme zu verhindern und zu lösen.

Kann MySQL auf Android laufen? Kann MySQL auf Android laufen? Apr 08, 2025 pm 05:03 PM

MySQL kann nicht direkt auf Android ausgeführt werden, kann jedoch indirekt mit den folgenden Methoden implementiert werden: Die Verwendung der Leichtgewichtsdatenbank SQLite, die auf dem Android -System basiert, benötigt keinen separaten Server und verfügt über eine kleine Ressourcennutzung, die für Anwendungen für Mobilgeräte sehr geeignet ist. Stellen Sie sich remote eine Verbindung zum MySQL -Server her und stellen Sie über das Netzwerk zum Lesen und Schreiben von Daten über das Netzwerk eine Verbindung zur MySQL -Datenbank auf dem Remote -Server her. Es gibt jedoch Nachteile wie starke Netzwerkabhängigkeiten, Sicherheitsprobleme und Serverkosten.

Wo ist die C -Sprachfunktionsbibliothek? Wie füge ich die C -Sprachfunktionsbibliothek hinzu? Wo ist die C -Sprachfunktionsbibliothek? Wie füge ich die C -Sprachfunktionsbibliothek hinzu? Apr 03, 2025 pm 11:39 PM

Die C -Sprachfunktionsbibliothek ist eine Toolbox mit verschiedenen Funktionen, die in verschiedenen Bibliotheksdateien organisiert sind. Durch das Hinzufügen einer Bibliothek muss sie über die Befehlszeilenoptionen des Compiler angeben. Der GCC -Compiler verwendet beispielsweise die Option -L -Option, gefolgt von der Abkürzung des Bibliotheksnamens. Wenn sich die Bibliotheksdatei nicht unter dem Standard -Suchpfad befindet, müssen Sie die Option -L verwenden, um den Bibliotheksdateipfad anzugeben. Die Bibliothek kann in statische Bibliotheken und dynamische Bibliotheken unterteilt werden. Statische Bibliotheken sind direkt mit dem Programm zur Kompilierung verbunden, während dynamische Bibliotheken zur Laufzeit geladen werden.

Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Apr 08, 2025 am 11:54 AM

Die Lösung für den MySQL -Installationsfehler ist: 1. Überprüfen Sie die Systemumgebung sorgfältig, um sicherzustellen, dass die Anforderungen der MySQL -Abhängigkeitsbibliothek erfüllt werden. Unterschiedliche Betriebssysteme und Versionsanforderungen sind unterschiedlich. 2. Lesen Sie die Fehlermeldung sorgfältig durch und ergreifen Sie entsprechende Maßnahmen gemäß den Eingabeaufforderungen (z. B. fehlende Bibliotheksdateien oder unzureichende Berechtigungen), z. B. die Installation von Abhängigkeiten oder die Verwendung von SUDO -Befehlen; 3. Versuchen Sie bei Bedarf, den Quellcode zu installieren und das Kompilierungsprotokoll sorgfältig zu überprüfen. Dies erfordert jedoch eine bestimmte Menge an Linux -Kenntnissen und -erfahrung. Der Schlüssel zur letztendlichen Lösung des Problems besteht darin, die Systemumgebung und Fehlerinformationen sorgfältig zu überprüfen und auf die offiziellen Dokumente zu verweisen.

See all articles