numactl 只检测一个节点,它应该是两个

Posted

技术标签:

【中文标题】numactl 只检测一个节点,它应该是两个【英文标题】:numactl detects only one node where it should be two 【发布时间】:2012-08-20 17:06:23 【问题描述】:

我在 serverfault 中问过这个问题,但一周没有回应。

我有一个双 Xeon E5522 2.26Ghz CPU(一个主板上有两个四核 CPU)。据我所知,这是一个 NUMA 架构。这台机器正在运行带有 3.2 内核的 ubuntu 服务器 12.04。

fdyn@fdyn-0:~/dev/numa_test$ uname -a
Linux fdyn-0 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64    x86_64 x86_64 GNU/Linux

内核应该是 numa-aware

fdyn@fdyn-0:~$ grep NUMA=y /boot/config-3.2.0-23-generic 
CONFIG_NUMA=y
CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_ACPI_NUMA=y

问题是“numactl”不能识别这两个节点,它将它视为一台大型 SMP 机器。

~$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
node 0 size: 32756 MB
node 0 free: 31036 MB
node distances:
node   0 
  0:  10 

我需要整个环境都支持 NUMA,这样我就可以编写一个 numa 应用程序。 ¿ 忽略这一点是否安全? ¿ 怎样做才能使 numactl 识别这 2 个节点?

【问题讨论】:

您是否检查过 Bios 中是否启用了 NUMA?某些系统(例如 Mac Pro)会直接禁用它,而无法启用它。其他人仅在显式启用时才允许 NUMA 控件。如果确实受支持,请查看您的硬件制造商的文档。 pmjordan,正如您所指出的,这确实是安装了 ubuntu 服务器的 mac-pro。真的没办法启用吗?? 据我所知没有,虽然我没有 Mac Pro,因此没有尝试过。尝试在谷歌上搜索任何固件或 MSR(特定于型号的寄存器)黑客。不过,我不会抱有希望。我认为 Apple 禁用它是因为 OSX 根本不支持 NUMA。 我会搜索你的建议,谢谢! 【参考方案1】:

根据 cmets 的规定,NUMA 需要固件支持。根据主板的不同,这可能意味着您需要在 BIOS 设置工具中启用它。

某些硬件(尤其是 Apple 的 Mac Pro)没有相应的设置,并且 NUMA 控件在这些机器上不起作用。您也许可以在网上找到非官方的解决方法——如果幸运的话,Apple 不会锁定特定型号的寄存器 (MSR) 来启用它。您也许可以从 intel 找到有关 NUMA 的 MSR 文档,并使用 msr.ko 内核模块写入相关的 MSR。默认情况下,所有内存访问都在两个节点之间交错。

【讨论】:

【参考方案2】:

你可以伪造 numa 节点,我在单处理器系统上做这个来测试 numa 的东西

只需将参数传递给内核

numa=fake=2 将创建 2 个假 numa 节点

更多信息在这里:http://linux-hacks.blogspot.hk/2009/07/fake-numa-nodes-in-linux.html

【讨论】:

以上是关于numactl 只检测一个节点,它应该是两个的主要内容,如果未能解决你的问题,请参考以下文章

numactl --hardware 显示不正确的信息

宋宝华:为什么numactl内存绑定对代码段不起作用

numactl 和 move_pages 不匹配

将 tmpfs 或 ramfs 绑定到特定的内存节点

Mongodb 使用numactl 启动

leetcode-峰值检测