Определить устройство PCIe NUMA узла

17329

Предполагая, что операционная система Linux довольно недавняя, существует ли простой способ определить, к какому узлу NUMA принадлежит слот PCIe, к которому подключено устройство?

8

3 ответа на вопрос

8
MariusMatutiae

Вы должны перейти в папку соответствующего слота PCIe, например, eth0:

 cd /sys/class/net/eth0/device 

где вы найдете numa_node, local_cpus, local_cpulist, три файла, которые вам интересны. Вы можете просто присмотреть за ними и посмотреть нужные данные.

Да, я получил `numa_node = -1` и` local_cpulist = 0-15`. Это не может быть правдой, у меня есть 2 узла numa, что подтверждено hwloc. Navin 8 лет назад 0
3
GuillermoMA

You can also use hwloc (http://www.open-mpi.de/projects/hwloc/) if you know the device id. However, if you have 2 of the same device (for instance, GPUs), the only way to know the NUMA node where the physical slot is associated to is to have a look at the motherboard manual.

For the Asus Z9PE-D8 (http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf) it's in page 223.

Если это правда, это, вероятно, зависит от архитектуры. Например, последние несколько поколений процессоров Intel Xeon корневой мост PCIe находится на самом чипе процессора. Таким образом, знание гнезда ЦП, где находится шина PCIe устройства, является основным требованием для работы. Об этом свидетельствует ответ "/ sys / class ..." выше в этом случае. В этих же системах два одинаковых ЦП на разных сокетах будут показывать разные устройства NUMA. Альтернативно, в большинстве систем устройства на разных шинах будут иметь существенно разные адреса PCIe, например, 1a: 00.0 на сокете 1 и 89: 00.0 на сокете 2. Paul 7 лет назад 0
1
Mike S

Принятый ответ работает только для сетевых карт, насколько я нашел. Согласно ответу GuillermoMA, hwloc даст вам реальную сделку, даже если она не так разборчива. lstopoнаходится в пакете hwloc (по крайней мере на 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 - это, конечно, CPU0, а NUMANode L # 1 - это CPU1. Затем вы можете взять свой любимый номер PCI из вышеприведенного, например, 14e4: 16a1, и узнать, что это такое, и его адрес PCI для дальнейшего анализа из 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) 

На одном из моих компьютеров карта Emulex Fibre Channel не отображалась на lstopoвыходе. Я нашел это lstopo --whole-io, выполнив процесс обратного поиска (если нужно, прокрутите вправо, чтобы увидеть шестнадцатеричное число 10df, к которому я прибегаю):

# 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 

Удалите приведенную выше команду piped grep и поройтесь в выходных данных полуручно, чтобы найти устройство на полном lstopo --whole-ioэкране (оставлено в качестве упражнения для читателя).

`lspci -nn | grep PCINUMBER` сделал мой день. У меня два Samsung 970 Pro, и эта команда помогла мне идентифицировать их по выводу `ltopo`. Спасибо. pietrop 6 лет назад 0

Похожие вопросы