Supponendo che il sistema operativo Linux sia abbastanza recente, esiste un modo semplice per determinare a quale nodo NUMA appartiene lo slot PCIe, a cui è collegato un dispositivo?
Supponendo che il sistema operativo Linux sia abbastanza recente, esiste un modo semplice per determinare a quale nodo NUMA appartiene lo slot PCIe, a cui è collegato un dispositivo?
Risposte:
È necessario andare alla directory dello slot PCIe in questione, ad esempio eth0
:
cd /sys/class/net/eth0/device
dove troverai numa_node
, local_cpus
e local_cpulist
, i tre file che ti interessano. Puoi solo cat
loro e vedere i dati desiderati.
Puoi anche usare hwloc ( http://www.open-mpi.de/projects/hwloc/ ) se conosci l'ID del dispositivo. Tuttavia, se si dispone di 2 dello stesso dispositivo (ad esempio, GPU), l'unico modo per conoscere il nodo NUMA a cui è associato lo slot fisico è quello di dare un'occhiata al manuale della scheda madre.
Per l'Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) è nella pagina 223.
La risposta accettata funziona solo per le schede di rete, per quanto ne ho trovato. Secondo la risposta di GuillermoMA, hwloc ti darà il vero affare anche se non è così leggibile. lstopo
si trova nel pacchetto hwloc (almeno su 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 è, ovviamente, CPU0 e NUMANode L # 1 è CPU1. Puoi quindi prendere il tuo numero PCI preferito da quanto sopra, ad esempio 14e4: 16a1, e scoprire di cosa si tratta, e il suo indirizzo PCI per ulteriori analisi da 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)
Su una delle mie macchine, una scheda Emulex Fibre Channel non è stata visualizzata lstopo
nell'output. L'ho trovato usando lstopo --whole-io
, eseguendo il processo di ricerca inversa (scorrere verso destra, se necessario, per vedere il numero esadecimale 10df per il quale cerco):
# 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
Rimuovi il comando grep convogliato, sopra, e fruga nell'output semi-manualmente per trovare il dispositivo nella lstopo --whole-io
visualizzazione completa (lasciato come esercizio per il lettore).
lspci -nn | grep PCINUMBER
ha reso la mia giornata. Ho due Samsung 970 Pro e quel comando mi ha aiutato a identificarli ltopo
dall'output. Grazie.
numa_node = -1
elocal_cpulist = 0-15
. Non può essere esatto, ho 2 nodi numa come confermato da hwloc.