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



我试着浏览了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

在 ACPI 规范的(最新版本(中,您将找到名为"SLIT"/系统位置(距离(信息表的表的说明。此表只是一个数组(如 d = array[numa_node][numa_node](,操作系统使用它来确定任何 2 个 NUMA 节点之间的相对距离;其中,数组中的值范围为 10 到 254(255 用于"这些 NUMA 域之间没有连接"(,其中值 10 表示 NUMA 域中的某些内容访问同一 NUMA 域中的某些内容的速度(最快情况(,值 254 将慢 25.4 倍。

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

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

距离由 ACPI SLIT 表中的固件硬编码,表示 NUMA 节点之间的相对内存延迟 - 距离"10"表示延迟为 1x,距离"20"表示延迟比本地节点访问高"2 倍"。Linux 在 sysfs 中公开这些值,但有很多方法可以访问它们(包括直接转储 ACPI 表,如果你喜欢的话(。

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

最新更新