我试图通过numa_distance()和其他相关函数(来自第一个链接),但无法理解。我只是想了解linux如何计算两个节点之间的NUMA距离,当这个距离据说根据架构和NUMA互连而变化时。
我参考了以下链接:
答案 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表所声称的那样糟糕。