是否有规范的编程方式来查询属于 NUMA 节点的核心集?

Posted

技术标签:

【中文标题】是否有规范的编程方式来查询属于 NUMA 节点的核心集?【英文标题】:Is there a canonical programmatic way to query for the set of cores belonging to a NUMA node? 【发布时间】:2018-06-25 20:57:53 【问题描述】:

可以使用以下 shell 命令获取属于每个 NUMA 节点的核心集。

$ lscpu | grep NUMA
NUMA node(s):          2
NUMA node0 CPU(s):     0-7,16-23
NUMA node1 CPU(s):     8-15,24-31

虽然解析此输出以确定属于每个 NUMA 节点的核心集并不困难,但依靠 shell 命令的格式化输出来收集此类信息是脆弱的。

Linux 中是否有规范的 API 来确定哪组内核属于哪个 NUMA 节点?

例如,/proc/sys 下的系统调用或一组文件。

【问题讨论】:

【参考方案1】:

根据lscpu和kernel documentation的源代码,相关信息似乎可以在每个NUMA节点的以下两个特殊路径中获得。

/sys/devices/system/node/nodeX/cpulist
/sys/devices/system/node/nodeX/cpumap

此外,可以从以下路径获取 NUMA 节点的名称。

/sys/devices/system/node/possible

【讨论】:

以上是关于是否有规范的编程方式来查询属于 NUMA 节点的核心集?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算对远程 NUMA 内存节点的内存访问?

网络适​​配器 NUMA

如何在 Windows 上将 c++11 线程关联设置为 NUMA 节点?

如何将所有内存分配限制到一个 NUMA 节点

在 windows 中获取当前线程的 NUMA 节点

不支持 NUMA 的 AWS EC2 实例