linux如何计算两个numa节点之间的numa距离(任何numa库的内部逻辑,如libnuma..etc)?

时间:2018-03-19 04:25:17

标签: linux numa

我试图通过numa_distance()和其他相关函数(来自第一个链接),但无法理解。我只是想了解linux如何计算两个节点之间的NUMA距离,当这个距离据说根据架构和NUMA互连而变化时。

我参考了以下链接:

  1. https://github.com/jmesmon/numactl/blob/0df3f720e606a3706700e0487ba19d720f50c4b8/distance.c

  2. https://github.com/jmesmon/numactl/blob/0df3f720e606a3706700e0487ba19d720f50c4b8/numa.h

  3. https://github.com/jmesmon/numactl/blob/0df3f720e606a3706700e0487ba19d720f50c4b8/libnuma.c

2 个答案:

答案 0 :(得分:1)

在ACPI规范的内部(最新版本)中,您将找到名为“SLIT”/系统位置(距离)信息表的表的描述。该表只是一个数组(如d = array[numa_node][numa_node]),操作系统使用它来确定任何2个NUMA节点之间的相对距离;其中在10至254(255是用于“这些NUMA结构域之间没有连接”),其中的值10表示如何迅速在NUMA结构域的东西可以在同一个NUMA域访问的东西(最快时的阵列范围的值并且值254将慢25.4倍。

我假设固件使用硬编码值填充此表 - 例如主板制造商可能会做一些测量并确定足够好的值,以便主板支持所有型号的CPU。

固件将此表提供给操作系统。操作系统不会计算任何内容。

答案 1 :(得分:0)

距离是由固件在ACPI SLIT表中进行硬编码的,表示NUMA节点之间的相对内存延迟-距离“ 10”表示延迟为1倍,距离“ 20​​”表示延迟为“ 2倍”本地节点访问。 Linux在sysfs中公开了这些值,但是有很多方法可以访问它们(包括在需要时直接转储ACPI表)。

至少从我的测试http://www.codeblueprint.co.uk/2019/07/12/what-are-slit-tables.html来看,节点之间的实际内存延迟很少像ACPI表所声称的那样糟糕。