Tentukan simpul NUMA perangkat PCIe

9

Dengan asumsi OS Linux yang cukup baru, apakah ada cara mudah untuk menentukan ke NUMA mana simpul PCIe slot, di mana perangkat dicolokkan, milik?


sumber

Jawaban:

10

Anda harus pergi ke direktori slot PCIe yang dimaksud, misalnya eth0:

 cd /sys/class/net/eth0/device

di mana Anda akan menemukan numa_node,, local_cpusdan local_cpulist, tiga file yang menarik bagi Anda. Anda bisa hanya catmereka, dan melihat data yang diinginkan.

MariusMatutiae
sumber
Hah, saya dapat numa_node = -1dan local_cpulist = 0-15. Itu tidak benar, saya punya 2 numa node yang dikonfirmasi oleh hwloc.
Navin
3

Anda juga dapat menggunakan hwloc ( http://www.open-mpi.de/projects/hwloc/ ) jika Anda tahu id perangkat. Namun, jika Anda memiliki 2 perangkat yang sama (misalnya, GPU), satu-satunya cara untuk mengetahui simpul NUMA di mana slot fisik terkait adalah dengan melihat manual motherboard.

Untuk Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) ada di halaman 223.

GuillermoMA
sumber
Jika benar, itu mungkin tergantung arsitektur. Sebagai contoh, beberapa generasi terakhir prosesor Intel Xeon, jembatan akar PCIe ada pada chip CPU itu sendiri. Dengan demikian, mengetahui soket CPU di mana bus PCIe perangkat berada merupakan persyaratan inti untuk pengoperasian. Ini dibuktikan dengan jawaban "/ sys / class ..." di atas dalam kasus ini. Pada sistem yang sama ini, dua CPU identik pada soket yang berbeda akan menunjukkan perangkat NUMA yang berbeda. Atau, pada kebanyakan sistem, perangkat pada bus yang berbeda akan memiliki alamat PCIe yang berbeda secara signifikan, misalnya 1a: 00.0 pada soket 1, dan 89: 00.0 pada soket 2.
Paul
2

Jawaban yang diterima hanya berfungsi untuk kartu jaringan, sejauh yang saya temukan. Per jawaban GuillermoMA, hwloc akan memberi Anda real deal bahkan jika itu tidak terbaca. lstopoditemukan dalam paket hwloc (setidaknya di 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, tentu saja, CPU0 dan NUMANode L # 1 adalah CPU1. Anda kemudian dapat mengambil nomor PCI favorit Anda dari yang di atas, misalnya 14e4: 16a1, dan menemukan apa itu, dan alamat PCI-nya untuk analisis lebih lanjut dari 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)

Di salah satu mesin saya, kartu Emulex Fibre Channel tidak muncul di lstopooutput. Saya menemukannya menggunakan lstopo --whole-io, dengan melakukan proses pencarian terbalik (gulir ke kanan jika Anda harus, untuk melihat nomor hex 10df yang saya terima):

# 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

Hapus perintah grep yang disalurkan, di atas, dan cari-cari melalui output semi-manual untuk menemukan perangkat dalam lstopo --whole-iotampilan penuh (dibiarkan sebagai latihan untuk pembaca).

Mike S
sumber
lspci -nn | grep PCINUMBERmembuatku bahagia. Saya memiliki dua Samsung 970 Pro dan perintah itu membantu saya mengidentifikasi mereka dari ltopooutput. Terima kasih.
pietrop
0

Satu dapat menggunakan: # cat /sys/bus/pci/devices/<PCI device>/numa_node

Dapatkan alamat perangkat PCI menggunakan # lspci -nn

Keliman
sumber