Bestimmen Sie den NUMA-Knoten des PCIe-Geräts

17359

Gibt es ein relativ neues Linux-Betriebssystem? Gibt es einen einfachen Weg festzustellen, zu welchem ​​NUMA-Knoten der PCIe-Steckplatz gehört, in den ein Gerät eingesteckt ist?

8

3 Antworten auf die Frage

8
MariusMatutiae

Sie müssen in den Ordner des betreffenden PCIe-Steckplatzes gehen, beispielsweise eth0:

 cd /sys/class/net/eth0/device 

wo sie numa_node, local_cpus, local_cpulist finden, die drei interes-dateien. Sie können sie einfach katzen und die gewünschten Daten anzeigen.

Huh, ich habe "numa_node = -1" und "local_cpulist = 0-15". Das kann nicht richtig sein, ich habe 2 Numa-Knoten, wie von hwloc bestätigt. Navin vor 8 Jahren 0
3
GuillermoMA

Sie können auch hwloc ( http://www.open-mpi.de/projects/hwloc/ ) verwenden, wenn Sie die Geräte-ID kennen. Wenn Sie jedoch über 2 gleiche Geräte verfügen (z. B. GPUs), können Sie den NUMA-Knoten, dem der physische Steckplatz zugeordnet ist, nur über das Motherboard-Handbuch erfahren.

Für das Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) ist es auf Seite 223.

Wenn ja, ist es wahrscheinlich architekturabhängig. In den vergangenen Generationen von Intel Xeon-Prozessoren befand sich beispielsweise die PCIe-Root-Bridge auf dem CPU-Chip. Daher ist die Kenntnis des CPU-Sockels, in dem sich der PCIe-Bus eines Geräts befindet, eine wesentliche Voraussetzung für den Betrieb. Dies wird durch die Antwort "/ sys / class ..." in diesem Fall belegt. Auf denselben Systemen würden zwei identische CPUs auf unterschiedlichen Sockeln unterschiedliche NUMA-Geräte anzeigen. Auf den meisten Systemen hätten Geräte auf unterschiedlichen Bussen alternativ deutlich unterschiedliche PCIe-Adressen, z. B. 1a: 00.0 an Buchse 1 und 89: 00.0 an Buchse 2. Paul vor 6 Jahren 0
1
Mike S

Die akzeptierte Antwort funktioniert nur für Netzwerkkarten, soweit ich sie gefunden habe. Laut GuillermoMAs Antwort gibt Ihnen hwloc den richtigen Deal, auch wenn es nicht so gut lesbar ist. lstopoist im hwloc-Paket enthalten (zumindest bei 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 Ihre Lieblings PCI - Nummer aus der oben dann, etwa durch 14E4: 16a1, und entdecken Sie, was es ist, und seine PCI - Adresse für die weitere Analyse aus 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 lstopoAusgabe angezeigt . Ich habe es gefunden lstopo --whole-io, indem ich den Reverse-Lookup-Prozess durchführte (scrollen Sie nach rechts, wenn Sie müssen, um die 10df-Hex-Zahl zu sehen, für die ich grep):

# 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 oben genannten Befehl "piped grep" und stöbern Sie halbaus manuell durch die Ausgabe, um das Gerät in der Vollanzeige zu finden lstopo --whole-io(links als Übung für den Leser).

lspci -nn | grep PCINUMBER` hat meinen Tag gemacht. Ich habe zwei Samsung 970 Pro, und dieser Befehl half mir, sie anhand der `ltopo'-Ausgabe zu identifizieren. Vielen Dank. pietrop vor 5 Jahren 0