Zakładając dość niedawny system operacyjny Linux, czy istnieje prosty sposób ustalenia, do którego węzła NUMA należy gniazdo PCIe, do którego podłączone jest urządzenie?
Zakładając dość niedawny system operacyjny Linux, czy istnieje prosty sposób ustalenia, do którego węzła NUMA należy gniazdo PCIe, do którego podłączone jest urządzenie?
Odpowiedzi:
Musisz przejść do folderu odpowiedniego gniazda PCIe, na przykład eth0:
cd /sys/class/net/eth0/device
gdzie znajdziesz numa_node, local_cpus, local_cpulist, trzy interesujące Cię pliki. Możesz je po prostu cat i zobaczyć żądane dane.
Możesz także użyć hwloc ( http://www.open-mpi.de/projects/hwloc/ ), jeśli znasz identyfikator urządzenia. Jeśli jednak masz 2 takie same urządzenia (na przykład procesory graficzne), jedynym sposobem na poznanie węzła NUMA, z którym związane jest fizyczne gniazdo, jest zapoznanie się z instrukcją płyty głównej.
W przypadku Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ) znajduje się na stronie 223.
O ile znalazłem, zaakceptowana odpowiedź działa tylko w przypadku kart sieciowych. Według odpowiedzi GuillermoMA, hwloc da ci prawdziwą ofertę, nawet jeśli nie jest tak czytelna. lstopo
znajduje się w pakiecie hwloc (przynajmniej na 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 to oczywiście CPU0, a NUMANode L # 1 to CPU1. Następnie możesz wziąć swój ulubiony numer PCI z powyższego, np. 14e4: 16a1, i dowiedzieć się, co to jest, oraz jego adres PCI do dalszej analizy z 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)
Na jednym z moich komputerów karta Emulex Fibre Channel nie pojawiła się na lstopo
wyjściu. Znalazłem go lstopo --whole-io
, wykonując proces wyszukiwania wstecznego (przewiń w prawo, jeśli musisz, aby zobaczyć numer szesnastkowy 10df, za którym grepuję):
# 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
Usuń powyższe polecenie pipp grep i półautomatycznie przeszukaj dane wyjściowe, aby znaleźć urządzenie na pełnym lstopo --whole-io
ekranie (pozostawione jako ćwiczenie dla czytnika).
lspci -nn | grep PCINUMBER
uczyniło mój dzień. Mam dwa Samsunga 970 Pro i to polecenie pomogło mi je zidentyfikować na podstawie danych ltopo
wyjściowych. Dziękuję Ci.
numa_node = -1
ilocal_cpulist = 0-15
. To nie może być prawda, mam 2 numery węzłów, co potwierdza hwloc.