如何查看我在 EC2 实例上运行的工作负载的 NUMA 统计数据?

上次更新日期:2021 年 7 月 23 日

我正在基于 Amazon Elastic Compute Cloud (Amazon EC2) Nitro 的实例上运行工作负载。我如何查看性能和 NUMA 统计数据?

简短描述

有多种因素可能会影响 EC2 实例上托管的应用程序的性能,包括 CPU 使用率过高、内存使用、EBS 卷、网络统计数据,或者应用程序是否为 NUMA 感知。NUMA 是指非一致性内存访问。在 NUMA 架构中,每个 CPU 都可以访问为其分配的内存,称为本地内存。每个 CPU 还可以访问分配给其他 CPU 的内存,称为外部内存。如果您的实例上托管的应用程序无 NUMA 感知能力,那么访问外部内存会产生一些额外的成本,并可能会影响性能。

联系应用程序供应商以确认您的应用程序是否有 NUMA 感知能力。

解决方法

查看 NUMA 统计数据

注意:要查看除 NUMA 统计数据之外的性能组成部分,请参阅如何排查与 EC2 实例上托管的网站连接缓慢的问题?

要查看 NUMA 统计数据,请执行以下操作:

1.    运行以下命令以确认实例类型是在单 NUMA 还是多 NUMA 节点中。

注意:实例类型 r5.16xlarge 有 2 个 NUMA 节点。

lscpu | grep -i numa
NUMA node(s): 2

2.    运行以下命令以安装 numactl 程序包:

sudo yum install numactl

3.    运行以下命令以检查 NUMA 拓朴:

sudo numactl -H

在以下输出示例中,NUMA 拓扑分为两个节点,即节点 0节点 1。节点 0 有 32 个 CPU 并分配到 255,225 MB 的内存。节点 1 拥有另一半 CPU(32 个)并分配到 254,924 MB 的内存。节点距离表示从另一个节点访问内存页面所涉及的延迟。

available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
node 0 size: 255140 MB
node 0 free: 254794 MB
node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
node 1 size: 255225 MB
node 1 free: 254924 MB
node distances:
node   0   1
0:  10  21
1:  21  10

4.    运行以下命令以检查 NUMA 策略:

sudo numastat

以下是该命令输出的示例:

node                       node0           node1
numa_hit                  314825          288025
numa_miss                      0               0
numa_foreign                   0               0
interleave_hit             37958           37620
local_node                311752          248476
other_node                  3073           39549

有关每项统计数据的详细说明,请参阅 Red Hat 客户门户上的 A.11.NUMASTAT

numa_foreignnuma_miss 统计数据的增加可能表明在 EC2 实例上运行的应用程序无 NUMA 感知能力。这可能会影响性能。要解决此问题,请在 grub 级别禁用 NUMA。或者,尝试将应用程序绑定到特定的 NUMA 节点。有关详细信息,请参阅操作系统优化中的第 8 步。

永久禁用 NUMA

要在 Amazon Linux 2、CentOS7 或 RHEL 7 上永久禁用 numa,请运行以下命令:

sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="numa=off
grub2-mkconfig -o /etc/grub2.cfg
reboot

这篇文章对您有帮助吗?


您是否需要账单或技术支持?