【问题标题】:Programmatically determine NUMA node or PCI bus, device, function number of generic PCI device以编程方式确定 NUMA 节点或 PCI 总线、设备、通用 PCI 设备的功能编号
【发布时间】:2021-10-07 21:16:44
【问题描述】:

我几乎需要和Programmatically determine NUMA node or PCI bus, device, function number of Direct3D9Ex device一样的东西

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

因此,我的代码会打开一个设备文件,例如/dev/mydev0/dev/mydev1 等。我可以拥有其中的几个设备文件,它们可以位于不同的 NUMA 节点上。我需要弄清楚的是应用程序代码中该设备所属的NUMA节点(如果有)。

我正在为这些设备编写设备驱动程序。我了解device_create 返回的struct device 的指针具有该字段

#ifdef CONFIG_NUMA;
  int numa_node;
#endif;

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

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

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

谢谢!

【问题讨论】:

    标签: linux kernel pci numa


    【解决方案1】:

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

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

    会给你NUMA节点。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2022-01-14
      相关资源
      最近更新 更多