linux 如何计算两个 numa 节点之间的 numa 距离(任何 numa 库的内部逻辑,例如 libnuma..etc )?
How does linux calculate numa distance between two numa nodes ( internal logic of any numa library such as libnuma..etc )?
我试图通过 numa_distance() 和其他相关函数(从第一个 link 开始),但无法理解。我只是想了解 linux 如何计算两个节点之间的 NUMA 距离,据说这个距离根据体系结构和 NUMA interlink.
而变化
我提到了以下 links:
在 ACPI 规范(最新版本)中,您会找到对名为 "SLIT"/系统位置(距离)信息 Table 的 table 的描述。 table 只是一个数组(如 d = array[numa_node][numa_node]
),操作系统使用它来确定任意 2 个 NUMA 节点之间的相对距离;其中数组中的值范围从 10 到 254(255 用于 "no connection between these NUMA domains"),其中值 10 表示 NUMA 域中的某些内容访问同一 NUMA 域中的内容的速度(最快的情况)和值 254 会慢 25.4 倍。
我假设固件使用 hard-coded 值填充此 table - 例如主板制造商可能会进行一些测量并确定 value/s 对于主板支持的所有 CPU 型号来说都足够好。
固件将此 table 提供给 OS。 OS 不计算任何东西。
距离由 ACPI SLIT 表中的固件硬编码,表示 NUMA 节点之间的相对内存延迟——距离“10”表示延迟为 1 倍,距离“20”表示延迟为“2 倍”延迟比本地节点访问。 Linux 在 sysfs 中公开了这些值,但是有很多方法可以访问它们(如果您愿意,可以直接转储 ACPI 表)。
节点之间的实际内存延迟很少像 ACPI 表声称的那样糟糕,至少从我的测试来看,http://www.codeblueprint.co.uk/2019/07/12/what-are-slit-tables.html。
我试图通过 numa_distance() 和其他相关函数(从第一个 link 开始),但无法理解。我只是想了解 linux 如何计算两个节点之间的 NUMA 距离,据说这个距离根据体系结构和 NUMA interlink.
而变化我提到了以下 links:
在 ACPI 规范(最新版本)中,您会找到对名为 "SLIT"/系统位置(距离)信息 Table 的 table 的描述。 table 只是一个数组(如 d = array[numa_node][numa_node]
),操作系统使用它来确定任意 2 个 NUMA 节点之间的相对距离;其中数组中的值范围从 10 到 254(255 用于 "no connection between these NUMA domains"),其中值 10 表示 NUMA 域中的某些内容访问同一 NUMA 域中的内容的速度(最快的情况)和值 254 会慢 25.4 倍。
我假设固件使用 hard-coded 值填充此 table - 例如主板制造商可能会进行一些测量并确定 value/s 对于主板支持的所有 CPU 型号来说都足够好。
固件将此 table 提供给 OS。 OS 不计算任何东西。
距离由 ACPI SLIT 表中的固件硬编码,表示 NUMA 节点之间的相对内存延迟——距离“10”表示延迟为 1 倍,距离“20”表示延迟为“2 倍”延迟比本地节点访问。 Linux 在 sysfs 中公开了这些值,但是有很多方法可以访问它们(如果您愿意,可以直接转储 ACPI 表)。
节点之间的实际内存延迟很少像 ACPI 表声称的那样糟糕,至少从我的测试来看,http://www.codeblueprint.co.uk/2019/07/12/what-are-slit-tables.html。