使用 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),因此这可能是配置问题:
- BIOS 中禁用了 NUMA 支持(您提到您已验证这一点)。
NUMA ACPI 被禁用:
- cmdline - 检查 /prco/cmdline 中是否有 acpi=off
- 内核配置 - 检查 CONFIG_X86_64_ACPI_NUMA=y 和 CONFIG_ACPI_NUMA=y。
确保 CONFIG_NUMA=y 也已设置。查看更多详细信息本文。
希望这可以帮助。
PS - 你没有提到你正在运行哪个内核以及它是裸机还是虚拟机/docker。如果是后者,get_mempolicy() sysctl 可能会被阻止。查看更多信息这里。