以编程方式确定 NUMA 节点或 PCI 总线、设备、通用 PCI 设备的功能编号
Posted
技术标签:
【中文标题】以编程方式确定 NUMA 节点或 PCI 总线、设备、通用 PCI 设备的功能编号【英文标题】:Programmatically determine NUMA node or PCI bus, device, function number of generic PCI device 【发布时间】: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
条目,我不知道如何使用它。
谢谢!
【问题讨论】:
【参考方案1】:Sysfs
来救援!假设你的设备是/dev/fb0
,那么
$ cat /sys/class/graphics/fb0/device/numa_node
0
会给你NUMA节点。
在文本模式下打开/sys/class/graphics/fb0/device/numa_node
并从中读取将产生"0\n"
(0x30
,0x0A
)。
【讨论】:
以上是关于以编程方式确定 NUMA 节点或 PCI 总线、设备、通用 PCI 设备的功能编号的主要内容,如果未能解决你的问题,请参考以下文章