Gibt es unter der Annahme eines relativ neuen Linux-Betriebssystems eine einfache Möglichkeit, festzustellen, zu welchem NUMA-Knoten der PCIe-Steckplatz gehört, an den ein Gerät angeschlossen ist?
Gibt es unter der Annahme eines relativ neuen Linux-Betriebssystems eine einfache Möglichkeit, festzustellen, zu welchem NUMA-Knoten der PCIe-Steckplatz gehört, an den ein Gerät angeschlossen ist?
Antworten:
Sie müssen in das Verzeichnis des betreffenden PCIe-Steckplatzes wechseln, zum Beispiel eth0
:
cd /sys/class/net/eth0/device
wo Sie finden numa_node
, local_cpus
und local_cpulist
die drei Dateien, die Sie interessieren. Sie können nur cat
sie und sehen die gewünschten Daten.
Sie können auch hwloc ( http://www.open-mpi.de/projects/hwloc/ ) verwenden, wenn Sie die Geräte-ID kennen. Wenn Sie jedoch zwei gleiche Geräte haben (z. B. GPUs), können Sie den NUMA-Knoten, dem der physische Steckplatz zugeordnet ist, nur anhand des Motherboard-Handbuchs ermitteln.
Für das Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) finden Sie es auf Seite 223.
Die akzeptierte Antwort funktioniert nur für Netzwerkkarten, soweit ich sie gefunden habe. Laut der Antwort von GuillermoMA gibt Ihnen hwloc das echte Angebot, auch wenn es nicht so gut lesbar ist. lstopo
befindet sich im hwloc-Paket (zumindest auf RHEL 7):
# lstopo
Machine (256GB)
NUMANode L#0 (P#0 128GB)
Socket L#0 + L3 L#0 (20MB)
L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#2)
L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#4)
L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#6)
L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4 + PU L#4 (P#8)
L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5 + PU L#5 (P#10)
L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6 + PU L#6 (P#12)
L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7 + PU L#7 (P#14)
HostBridge L#0
PCIBridge
PCI 1000:005d
Block L#0 "sda"
PCIBridge
PCI 14e4:16a1
Net L#1 "eth0"
PCI 14e4:16a1
Net L#2 "eth1"
PCI 14e4:16a1
Net L#3 "eth2"
PCI 14e4:16a1
Net L#4 "eth3"
PCI 8086:8d62
PCIBridge
PCIBridge
PCIBridge
PCIBridge
PCI 102b:0534
PCI 8086:8d02
Block L#5 "sr0"
NUMANode L#1 (P#1 128GB)
Socket L#1 + L3 L#1 (20MB)
L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8 + PU L#8 (P#1)
L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9 + PU L#9 (P#3)
L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10 + PU L#10 (P#5)
L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11 + PU L#11 (P#7)
L2 L#12 (256KB) + L1d L#12 (32KB) + L1i L#12 (32KB) + Core L#12 + PU L#12 (P#9)
L2 L#13 (256KB) + L1d L#13 (32KB) + L1i L#13 (32KB) + Core L#13 + PU L#13 (P#11)
L2 L#14 (256KB) + L1d L#14 (32KB) + L1i L#14 (32KB) + Core L#14 + PU L#14 (P#13)
L2 L#15 (256KB) + L1d L#15 (32KB) + L1i L#15 (32KB) + Core L#15 + PU L#15 (P#15)
HostBridge L#7
PCIBridge
PCI 15b3:1003
Net L#6 "eth4"
Net L#7 "eth5"
NUMANode L # 0 ist natürlich CPU0 und NUMANode L # 1 ist CPU1. Sie können dann Ihre Lieblings-PCI-Nummer aus dem oben genannten, z. B. 14e4: 16a1, entnehmen und herausfinden, was es ist, und seine PCI-Adresse zur weiteren Analyse von lspci
:
# lspci -nn | grep 14e4:16a1
01:00.0 Ethernet controller [0200]: Broadcom Corporation BCM57840 NetXtreme II 10 Gigabit Ethernet [14e4:16a1] (rev 11)
01:00.1 Ethernet controller [0200]: Broadcom Corporation BCM57840 NetXtreme II 10 Gigabit Ethernet [14e4:16a1] (rev 11)
01:00.2 Ethernet controller [0200]: Broadcom Corporation BCM57840 NetXtreme II 10 Gigabit Ethernet [14e4:16a1] (rev 11)
01:00.3 Ethernet controller [0200]: Broadcom Corporation BCM57840 NetXtreme II 10 Gigabit Ethernet [14e4:16a1] (rev 11)
Auf einem meiner Computer wurde keine Emulex Fibre Channel-Karte in der lstopo
Ausgabe angezeigt . Ich habe es gefunden lstopo --whole-io
, indem ich den Reverse-Lookup-Vorgang ausgeführt habe (scrollen Sie nach rechts, wenn Sie müssen, um die 10-dB-Hex-Zahl zu sehen, nach der ich greife):
# lspci -nn | grep -i emulex
03:00.0 Fibre Channel [0c04]: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter [10df:f100] (rev 03)
03:00.1 Fibre Channel [0c04]: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter [10df:f100] (rev 03)
# lstopo --whole-io | grep 10df
PCI 10df:f100
PCI 10df:f100
Entfernen Sie den Befehl piped grep oben und durchsuchen Sie die Ausgabe halbmanuell, um das Gerät in der Vollanzeige zu finden lstopo --whole-io
(als Übung für den Leser übrig).
lspci -nn | grep PCINUMBER
meinen Tag gerettet. Ich habe zwei Samsung 970 Pro und dieser Befehl hat mir geholfen, sie anhand der ltopo
Ausgabe zu identifizieren . Vielen Dank.
numa_node = -1
undlocal_cpulist = 0-15
. Das kann nicht richtig sein, ich habe 2 numa Knoten, wie von hwloc bestätigt.