En supposant un système d'exploitation Linux assez récent, existe-t-il un moyen facile de déterminer à quel nœud NUMA l'emplacement PCIe, où un périphérique est branché, appartient?
En supposant un système d'exploitation Linux assez récent, existe-t-il un moyen facile de déterminer à quel nœud NUMA l'emplacement PCIe, où un périphérique est branché, appartient?
Réponses:
Vous devez vous rendre dans le répertoire de l'emplacement PCIe en question, par exemple eth0
:
cd /sys/class/net/eth0/device
où vous trouverez numa_node
, local_cpus
et local_cpulist
, les trois dossiers d'intérêt pour vous. Vous pouvez juste cat
les voir et voir les données souhaitées.
Vous pouvez également utiliser hwloc ( http://www.open-mpi.de/projects/hwloc/ ) si vous connaissez l'ID de l'appareil. Cependant, si vous avez 2 du même périphérique (par exemple, des GPU), la seule façon de connaître le nœud NUMA auquel l'emplacement physique est associé est de consulter le manuel de la carte mère.
Pour l'Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ), c'est à la page 223.
La réponse acceptée ne fonctionne que pour les cartes réseau, pour autant que je sache. Selon la réponse de GuillermoMA, hwloc vous donnera la vraie affaire même si elle n'est pas aussi lisible. lstopo
se trouve dans le paquet hwloc (au moins sur 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 est, bien sûr, CPU0 et NUMANode L # 1 est CPU1. Vous pouvez ensuite prendre votre numéro PCI préféré à partir de ce qui précède, par exemple 14e4: 16a1, et découvrir de quoi il s'agit, et son adresse PCI pour une analyse plus approfondie à partir de 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)
Sur une de mes machines, une carte Emulex Fibre Channel n'apparaissait pas dans la lstopo
sortie. Je l'ai trouvé en utilisant lstopo --whole-io
, en effectuant le processus de recherche inversée (faites défiler vers la droite si vous le devez, pour voir le numéro hexadécimal 10df que je convoite):
# 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
Supprimez la commande piped grep ci-dessus et fouillez la sortie semi-manuellement pour trouver le périphérique en plein lstopo --whole-io
écran (à gauche comme exercice pour le lecteur).
lspci -nn | grep PCINUMBER
fait ma journée. J'ai deux Samsung 970 Pro et cette commande m'a aidé à les identifier à partir de la ltopo
sortie. Je vous remercie.
numa_node = -1
etlocal_cpulist = 0-15
. Cela ne peut pas être vrai, j'ai 2 nœuds numa comme confirmé par hwloc.