Якщо припустити досить недавню ОС Linux, чи існує простий спосіб визначити, до якого вузла NUMA належить слот PCIe, до якого приєднано пристрій?
Якщо припустити досить недавню ОС Linux, чи існує простий спосіб визначити, до якого вузла NUMA належить слот PCIe, до якого приєднано пристрій?
Відповіді:
Ви повинні перейти до каталогу відповідного слота PCIe, наприклад eth0
:
cd /sys/class/net/eth0/device
де ви знайдете numa_node
, local_cpus
і local_cpulist
три цікаві для вас файли. Ви можете просто cat
їх і переглянути потрібні дані.
Ви також можете використовувати hwloc ( http://www.open-mpi.de/projects/hwloc/ ), якщо знаєте ідентифікатор пристрою. Однак якщо у вас є 2 одного пристрою (наприклад, графічних процесорів), єдиний спосіб дізнатися вузол NUMA, з яким пов'язаний фізичний слот, - ознайомитися з посібником з материнської плати.
Для Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) це на сторінці 223.
Прийнята відповідь працює лише для мережевих карт, наскільки я знайшов. Відповідно до відповіді 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 Fiber 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
Вийміть команду grep grep, подану вище, та прокопте вивід напівавтоматично, щоб знайти пристрій на повному lstopo --whole-io
дисплеї (залишений як вправа для читача).
lspci -nn | grep PCINUMBER
зробив мій день. У мене є два Samsung 970 Pro, і ця команда допомогла мені визначити їх на ltopo
виході. Дякую.
numa_node = -1
іlocal_cpulist = 0-15
. Це не може бути правильним, у мене є два вузли numa, як підтверджено hwloc.