Suponiendo que el sistema operativo Linux es bastante reciente, ¿hay una manera fácil de determinar a qué nodo NUMA pertenece la ranura PCIe, donde está conectado un dispositivo?
Suponiendo que el sistema operativo Linux es bastante reciente, ¿hay una manera fácil de determinar a qué nodo NUMA pertenece la ranura PCIe, donde está conectado un dispositivo?
Respuestas:
Debe ir al directorio de la ranura PCIe en cuestión, por ejemplo eth0
:
cd /sys/class/net/eth0/device
donde se encuentra numa_node
, local_cpus
y local_cpulist
, los tres archivos de su interés. Puede simplemente cat
ellos y ver los datos deseados.
También puede usar hwloc ( http://www.open-mpi.de/projects/hwloc/ ) si conoce la identificación del dispositivo. Sin embargo, si tiene 2 del mismo dispositivo (por ejemplo, GPU), la única forma de conocer el nodo NUMA al que está asociada la ranura física es echar un vistazo al manual de la placa base.
Para el Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) está en la página 223.
La respuesta aceptada solo funciona para tarjetas de red, por lo que he encontrado. Según la respuesta de GuillermoMA, hwloc te dará el trato real incluso si no es tan legible. lstopo
se encuentra en el paquete hwloc (al menos en 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 es, por supuesto, CPU0 y NUMANode L # 1 es CPU1. Luego puede tomar su número PCI favorito de los anteriores, por ejemplo, 14e4: 16a1, y descubrir cuál es, y su dirección PCI para un análisis posterior 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)
En una de mis máquinas, una tarjeta de canal de fibra Emulex no apareció en la lstopo
salida. Lo encontré usando lstopo --whole-io
, realizando el proceso de búsqueda inversa (desplácese hacia la derecha si es necesario, para ver el número hexadecimal de 10df que busco):
# 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
Elimine el comando grep entubado, arriba, y revise la salida de forma semi-manual para encontrar el dispositivo en la lstopo --whole-io
pantalla completa (izquierda como ejercicio para el lector).
lspci -nn | grep PCINUMBER
me alegró el día. Tengo dos Samsung 970 Pro y ese comando me ayudó a identificarlos desde la ltopo
salida. Gracias.
Uno puede usar: # cat /sys/bus/pci/devices/<PCI device>/numa_node
Obtenga la dirección del dispositivo PCI utilizando # lspci -nn
numa_node = -1
ylocal_cpulist = 0-15
. Eso no puede ser correcto, tengo 2 nodos numa según lo confirmado por hwloc.