Визначте на пристрої PCIe NUMA вузол


10

Якщо припустити досить недавню ОС Linux, чи існує простий спосіб визначити, до якого вузла NUMA належить слот PCIe, до якого приєднано пристрій?

Відповіді:


10

Ви повинні перейти до каталогу відповідного слота PCIe, наприклад eth0:

 cd /sys/class/net/eth0/device

де ви знайдете numa_node, local_cpusі local_cpulistтри цікаві для вас файли. Ви можете просто catїх і переглянути потрібні дані.


Так, я отримав numa_node = -1і local_cpulist = 0-15. Це не може бути правильним, у мене є два вузли numa, як підтверджено hwloc.
Навін

3

Ви також можете використовувати 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.


Якщо це правда, ймовірно, це залежить від архітектури. Наприклад, останні кілька поколінь процесорів Intel Xeon, кореневий міст PCIe знаходиться на самому чіпі процесора. Таким чином, знання центрального процесора, де знаходиться шина PCIe пристрою, є основною вимогою для роботи. Про це свідчить відповідь "/ sys / class ..." вище в цьому випадку. У цих же системах два однакових процесора на різних сокетах відображали б різні пристрої NUMA. Крім того, у більшості систем пристрої на різних шинах мали б суттєво різні адреси PCIe, наприклад, 1a: 00.0 у гнізді 1 та 89: 00.0 у гнізді 2.
Пол

3

Прийнята відповідь працює лише для мережевих карт, наскільки я знайшов. Відповідно до відповіді 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виході. Дякую.
пітроп

0

Можна скористатися: # cat /sys/bus/pci/devices/<PCI device>/numa_node

Отримайте адресу пристрою PCI за допомогою # lspci -nn

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.