numactl:该系统不支持 NUMA 策略

numactl:该系统不支持 NUMA 策略

使用 numactl 时,我看到

numactl: this system does not support NUMA policy.

是不是因为某些内核配置没有启用?

确认 BIOS 启用了 NUMA。

lscpu 显示有 NUMA 节点。

答案1

简短回答

NUMA ACPI 可能已从 (A) BIOS 或 (B) cmdline 或 (C) 内核配置禁用。请参阅下面的详细信息。

更多细节

查看 numactl 源代码(来自github),我看到上面的错误来自 checknuma() 函数:

void checknuma(void)
{
    static int numa = -1;
    if (numa < 0) {
            if (numa_available() < 0)
                    complain("This system does not support NUMA policy");
    }
    numa = 0;
}

当 numa_available() 返回值小于 0 时,这会失败。只有当 get_mempolicy() 系统调用失败并显示错误代码 ENOSYS 时,才会发生这种情况:

int numa_available(void)
{
    if (get_mempolicy(NULL, NULL, 0, 0, 0) < 0 && errno == ENOSYS)
            return -1;

ENOSYS 错误与“功能未实现”相关,因此您的系统似乎不支持 NUMA。由于此支持很久以前就已添加到内核(内核 v2.6.7),因此这可能是配置问题:

  1. BIOS 中禁用了 NUMA 支持(您提到您已验证这一点)。
  2. NUMA ACPI 被禁用:

    1. cmdline - 检查 /prco/cmdline 中是否有 acpi=off
    2. 内核配置 - 检查 CONFIG_X86_64_ACPI_NUMA=y 和 CONFIG_ACPI_NUMA=y。

确保 CONFIG_NUMA=y 也已设置。查看更多详细信息本文

希望这可以帮助。

PS - 你没有提到你正在运行哪个内核以及它是裸机还是虚拟机/docker。如果是后者,get_mempolicy() sysctl 可能会被阻止。查看更多信息这里

相关内容