以编程方式确定 NUMA 节点或 PCI 总线、设备、通用 PCI 设备的功能编号

Programmatically determine NUMA node or PCI bus, device, function number of generic PCI device

我非常需要和 Programmatically determine NUMA node or PCI bus, device, function number of Direct3D9Ex device

一样的东西

我正在寻找一种方法来以编程方式确定特定 PCI 设备连接到哪个 NUMA 节点,以便我可以为该节点上的主机到设备传输分配内存。

因此,我的代码打开了一个设备文件,如 /dev/mydev0/dev/mydev1 等。我可以拥有多个这样的设备文件,它们可以位于不同的 NUMA 节点上。我需要弄清楚的是 应用程序代码 .

中该设备所属的 NUMA 节点(如果有的话)

我正在为这些设备编写设备驱动程序。我知道 struct device returned by device_create 的指针有字段

#ifdef CONFIG_NUMA;
  int numa_node;
#endif;

我的想法是通过自定义驱动程序中的自定义 ioctl 调用导出该值。

我想问的是,是否有更标准的方法将 /dev 条目映射到 NUMA 节点,以便 应用程序 可以弄清楚并使用类似于 numa_bind 这样内存分配发生在正确的节点上。

我也知道我可以用 lspci 检查 PCI 设备的 NUMA 节点。根据 /dev 条目,我看不出如何使用它。

谢谢!

Sysfs 救援!假设您的设备是/dev/fb0,那么

$ cat  /sys/class/graphics/fb0/device/numa_node
0

会给你NUMA节点。

以文本模式打开 /sys/class/graphics/fb0/device/numa_node 并从中读取将产生 "0\n"0x300x0A)。