【问题标题】:How do I know if my server has NUMA?我如何知道我的服务器是否有 NUMA?
【发布时间】:2012-06-22 23:24:42
【问题描述】:

从 Java Garbage Collection 跳出来,我遇到了JVM settings for NUMA。奇怪的是,我想检查我的 CentOS 服务器是否具有 NUMA 功能。是否有 *ix 命令或实用程序可以获取此信息?

【问题讨论】:

    标签: linux jvm kernel processor numa


    【解决方案1】:

    我不是这里的专家,但这里有一些东西:

    方框 1,没有 NUMA:

    ~$ dmesg | grep -i numa
    [    0.000000] No NUMA configuration found
    

    方框 2,一些 NUMA:

    ~$ dmesg | grep -i numa
    [    0.000000] NUMA: Initialized distance table, cnt=8
    [    0.000000] NUMA: Node 4 [0,80000000) + [100000000,280000000) -> [0,280000000)
    

    【讨论】:

    • 我的甚至没有说“没有 NUMA 配置”,完全匹配(linux 2.6.18 / centos)...
    • dmesg 对我来说也没有提到“NUMA”,因为它为时过早。 grep /var/log/dmesg 相反,因为它更有可能拥有完整的日志。 (“NUMA 已关闭”是什么意思?)
    • 对我来说,dmesg 也没有提到“NUMA”,但我无法访问需要 root 权限的 /var/log/dmesg。我运行find /proc|grep -i numa 并看到了一些numa_maps 文件。我猜这也是启用NUMA的标志。
    • 在 dmesg 中检查 Numa 相关消息的方法是不可靠的。首先,由于 dmesg 读取内核环形缓冲区,消息可能在您 grep 时已经消失。即假阴性。您无法将此与内核太早或被充分剥离以至于 Numa 消息完全不存在的情况区分开来。
    • 我从来没有说过它是可靠的。它只是其中一种工具。
    【解决方案2】:

    我认为之前的这个问题是类似的:How to confirm NUMA?

    特别是,您可以在此处查看 NUMA 手册页: http://man7.org/linux/man-pages/man7/numa.7.html

    从那里你会看到:

    $ find /proc -name numa_maps
    /proc/1/task/1/numa_maps
    /proc/1/numa_maps
    /proc/2/task/2/numa_maps
    /proc/2/numa_maps
    /proc/3/task/3/numa_maps
    [etc if you have numa]
    

    你可以像这样获得更多细节:

    $ grep NUMA=y /boot/config-`uname -r`
    CONFIG_NUMA=y
    CONFIG_K8_NUMA=y
    CONFIG_X86_64_ACPI_NUMA=y
    CONFIG_ACPI_NUMA=y
    
    $ numactl --hardware
    available: 2 nodes (0-1)
    node 0 size: 18156 MB
    node 0 free: 9053 MB
    node 1 size: 18180 MB
    node 1 free: 6853 MB
    node distances:
    node   0   1
      0:  10  20
      1:  20  10
    

    【讨论】:

      【解决方案3】:

      对于 Redhat 4、5、6 和 7 系统,可以尝试以下方法来确定是否禁用了 NUMA 配置:

      numactl --show 不显示多个节点

      # numactl --show
      policy: default
      preferred node: current
      physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
      cpubind: 0
      nodebind: 0
      membind: 0
      

      或者 numactl --hardware 没有列出多个节点

      # 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 16 17 18 19 20 21 22 23
      node 0 size: 524163 MB
      node 0 free: 505253 MB
      node distances:
      node   0
        0:  10
      

      【讨论】:

        【解决方案4】:

        您也可以从 lscpu 命令获取此信息:

        lscpu | grep -i numa
        NUMA node(s):          2
        NUMA node0 CPU(s):     0-19,40-59
        NUMA node1 CPU(s):     20-39,60-79
        

        【讨论】:

          【解决方案5】:

          您也可以只从/sys 查询信息(这是numactl 之类的工具在下面所做的)。正如其他人指出的那样,使用 dmesg 将是不可靠的,因为它通常没有无限缓冲。

          要了解当前可用的 NUMA 节点数量,请执行以下操作:

          cat /sys/devices/system/node/online
          0-3
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-30
            • 2014-03-13
            • 1970-01-01
            • 2014-10-22
            • 2016-08-20
            • 1970-01-01
            相关资源
            最近更新 更多