GNU/Linux >> Tutoriels Linux >  >> Linux

Déterminer le nœud NUMA du périphérique PCIe

Vous devez vous rendre dans le répertoire du slot PCIe en question, par exemple eth0 :

 cd /sys/class/net/eth0/device

où vous trouverez numa_node , local_cpus , et local_cpulist , les trois fichiers qui vous intéressent. Vous pouvez simplement cat eux, et voir les données souhaitées.


Vous pouvez également utiliser hwloc (http://www.open-mpi.de/projects/hwloc/) si vous connaissez l'ID de l'appareil. Cependant, si vous avez 2 appareils identiques (par exemple, des GPU), la seule façon de connaître le nœud NUMA auquel l'emplacement physique est associé est de consulter le manuel de la carte mère.

Pour l'Asus Z9PE-D8 (http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf) c'est à la page 223.


La réponse acceptée ne fonctionne que pour les cartes réseau, pour autant que j'ai trouvé. Selon la réponse de GuillermoMA, hwloc vous donnera la vraie affaire même si ce n'est pas aussi lisible. lstopo se trouve dans le package hwloc (au moins sur 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"

Le NUMANode L#0 est, bien sûr, CPU0 et le NUMANode L#1 est CPU1. Vous pouvez ensuite prendre votre numéro PCI préféré parmi ceux ci-dessus, par exemple 14e4:16a1, et découvrir ce qu'il est, et son adresse PCI pour une analyse plus approfondie à partir 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)

Sur une de mes machines, une carte Emulex Fibre Channel n'apparaissait pas dans le lstopo production. Je l'ai trouvé en utilisant lstopo --whole-io , en effectuant le processus de recherche inversée (faites défiler vers la droite si nécessaire, pour voir le numéro hexadécimal 10df pour lequel je grep) :

# 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

Supprimez la commande grep canalisée, ci-dessus, et fouillez dans la sortie semi-manuellement pour trouver le périphérique dans le lstopo --whole-io complet affichage (à gauche comme exercice pour le lecteur).


Linux
  1. Comment désactiver/activer Numa pour la machine virtuelle (basée sur XEN)

  2. Comment savoir si mon serveur a NUMA ?

  3. Dispositif à boucle permanente ?

  4. Comment monter un appareil sous Linux ?

  5. Règle Udev pour correspondre à un périphérique USB à plusieurs nœuds

Répliquer une carte SD ?

Pci-stub Vs Vfio-pci?

Utilitaire Bluetooth de bas niveau ?

Comment installer Node.js sur Ubuntu 14.04

Déterminer la taille d'un périphérique bloc

Comment puis-je déterminer si un périphérique iscsi est un système de fichiers Linux monté ?