Xác định nút NUMA của thiết bị PCIe


9

Giả sử hệ điều hành Linux khá gần đây, có một cách dễ dàng để xác định nút NUMA nào khe cắm PCIe, nơi thiết bị được cắm, thuộc về?

Câu trả lời:


10

Ví dụ, bạn phải truy cập vào thư mục của khe cắm PCIe eth0:

 cd /sys/class/net/eth0/device

nơi bạn sẽ tìm thấy numa_node, local_cpuslocal_cpulist, ba tệp bạn quan tâm. Bạn chỉ có thể cathọ, và xem dữ liệu mong muốn.


Huh, tôi đã nhận numa_node = -1local_cpulist = 0-15. Điều đó không thể đúng, tôi có 2 nút numa như được xác nhận bởi hwloc.
Navin

3

Bạn cũng có thể sử dụng hwloc ( http://www.open-mpi.de/projects/hwloc/ ) nếu bạn biết id thiết bị. Tuy nhiên, nếu bạn có 2 thiết bị giống nhau (ví dụ: GPU), cách duy nhất để biết nút NUMA nơi có khe cắm vật lý được liên kết là xem hướng dẫn sử dụng bo mạch chủ.

Đối với Asus Z9PE-D8 ( http://dlcdnet.asus.com/pub/ASUS/mb/LGA2011/Z9PE-D8-WS/Manual/e8726_z9pe-d8_ws.pdf ), nó ở trang 223.


Nếu đúng, nó có thể phụ thuộc vào kiến ​​trúc. Ví dụ, trong nhiều thế hệ bộ xử lý Intel Xeon trước đây, cầu nối gốc PCIe nằm trên chính chip CPU. Do đó, biết ổ cắm CPU nơi đặt bus PCIe của thiết bị là yêu cầu cốt lõi để vận hành. Điều này được chứng minh bằng câu trả lời "/ sys / class ..." ở trên trong trường hợp này. Trên cùng các hệ thống này, hai CPU giống nhau trên các ổ cắm khác nhau sẽ hiển thị các thiết bị NUMA khác nhau. Ngoài ra, trên hầu hết các hệ thống, các thiết bị trên các bus khác nhau sẽ có địa chỉ PCIe khác nhau đáng kể, ví dụ 1a: 00.0 trên socket 1 và 89: 00.0 trên socket 2.
Paul

2

Câu trả lời được chấp nhận chỉ hoạt động đối với thẻ mạng, theo như tôi đã tìm thấy. Theo câu trả lời của GuillermoMA, hwloc sẽ cung cấp cho bạn thỏa thuận thực sự ngay cả khi nó không dễ đọc. lstopođược tìm thấy trong gói hwloc (ít nhất là trên 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"

Tất nhiên, NUMANode L # 0 là CPU0 và NUMANode L # 1 là CPU1. Sau đó, bạn có thể lấy số PCI yêu thích của mình từ trên, ví dụ 14e4: 16a1 và khám phá xem đó là gì và địa chỉ PCI của nó để phân tích thêm từ 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)

Trên một trong các máy của tôi, thẻ Kênh sợi quang Emulex không hiển thị ở lstopođầu ra. Tôi đã tìm thấy nó bằng cách sử dụng lstopo --whole-io, bằng cách thực hiện quá trình tra cứu ngược lại (cuộn sang bên phải nếu bạn phải, để xem số hex 10df mà tôi grep cho):

# 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

Hủy bỏ lệnh grep đường ống, ở trên và lục lọi thông qua đầu ra bán thủ công để tìm thiết bị trong lstopo --whole-iomàn hình đầy đủ (bên trái là bài tập cho đầu đọc).


lspci -nn | grep PCINUMBERlàm cho ngày của tôi Tôi có hai Samsung 970 Pro và lệnh đó đã giúp tôi xác định chúng từ ltopođầu ra. Cảm ơn bạn.
pietrop

0

Người ta có thể sử dụng: # cat /sys/bus/pci/devices/<PCI device>/numa_node

Nhận địa chỉ thiết bị PCI bằng cách sử dụng # lspci -nn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.