Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

您的 EC2 实例的处理器状态控制

C 状态控制当核心处于空闲状态时可以进入的睡眠级别。C 状态从 C0 (最浅空闲状态,此时核心完全唤醒并在执行指令) 开始编号,一直增进到 C6 (最深空闲状态,此时核心关闭)。P 状态控制核心的所需性能 (以 CPU 频率的形式)。P 状态从 P0 (最高性能设置,此时核心可以使用 Intel 睿频加速技术提高频率) 开始编号,然后从 P1 (请求最大基准频率的 P 状态) 一直增加到 P15 (可能最低的频率)。

以下实例类型为操作系统提供了控制处理器 C 状态和 P 状态的功能:

  • 通用型: m4.10xlarge | m4.16xlarge

  • 计算优化: c4.8xlarge

  • 存储优化: d2.8xlarge | i3.8xlarge | i3.16xlarge | h1.8xlarge | h1.16xlarge

  • 加速计算: f1.16xlarge | g3.16xlarge | p2.16xlarge | p3.16xlarge

  • 内存优化: r4.8xlarge | r4.16xlarge | x1.16xlarge | x1.32xlarge | x1e.8xlarge | x1e.16xlarge | x1e.32xlarge

以下实例类型为操作系统提供了控制处理器 C 状态的功能:

  • 通用型: m5.12xlarge | m5.24xlarge

  • 计算优化: c5.9xlarge | c5.18xlarge

改变 C 状态或 P 状态设置可以增加处理器性能一致性,减少延迟,还可以针对特定工作负载对实例进行调校。默认 C 状态和 P 状态设置可提供最大性能,是大多数工作负载的最佳选择。但是,如果您的应用程序更适合以牺牲较高的单核或双核频率的方式来降低延迟,或需要在较低频率下保持稳定性能 (而不适合使用突发式睿频加速频率),那么可以考虑运用对这些实例可用的 C 状态或 P 状态设置。

以下部分介绍了不同的处理器状态配置以及如何监控配置效果。这些步骤专为 Amazon Linux 编写并供其使用,但也适用于搭载 Linux 内核版本 3.9 及更高版本的其他 Linux 分发版。有关其他 Linux 分发版和处理器状态控制的更多信息,请参阅您系统的特定文档。

注意

此页面中的示例使用 turbostat 实用工具 (默认情况下可在 Amazon Linux 上获得) 来显示处理器频率和 C 状态信息,并使用 stress 命令 (可通过运行 sudo yum install -y stress 进行安装) 来模拟工作负载。

具有最大睿频加速频率的最高性能

这是 Amazon Linux AMI 的默认处理器状态控制配置,推荐大多数工作负载使用。此配置可提供最高性能,且变化更少。允许非活动核心进入深层睡眠状态可提供单核或双核进程所需的热空间,以达到最大睿频加速潜能。

以下示例显示了具有两个有效执行工作且达到其最大处理器睿频加速频率的核心的 c4.8xlarge 实例。

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [30680] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.54 3.44 2.90 0 9.18 0.00 85.28 0.00 0.00 0.00 0.00 0.00 94.04 32.70 54.18 0.00 0 0 0 0.12 3.26 2.90 0 3.61 0.00 96.27 0.00 0.00 0.00 0.00 0.00 48.12 18.88 26.02 0.00 0 0 18 0.12 3.26 2.90 0 3.61 0 1 1 0.12 3.26 2.90 0 4.11 0.00 95.77 0.00 0 1 19 0.13 3.27 2.90 0 4.11 0 2 2 0.13 3.28 2.90 0 4.45 0.00 95.42 0.00 0 2 20 0.11 3.27 2.90 0 4.47 0 3 3 0.05 3.42 2.90 0 99.91 0.00 0.05 0.00 0 3 21 97.84 3.45 2.90 0 2.11 ... 1 1 10 0.06 3.33 2.90 0 99.88 0.01 0.06 0.00 1 1 28 97.61 3.44 2.90 0 2.32 ... 10.002556 sec

在此示例中,vCPU 21 和 vCPU 28 均以其最大睿频加速频率运行,因为其他核心已进入 C6 睡眠状态以节省性能,并为正在工作的核心提供性能和热空间。vCPU 3 和 vCPU 10 (分别与 vCPU 21 和 vCPU 28 共享一个处理器) 均处于等待指令的 C1 状态。

在以下示例中,所有 18 个核心均在有效执行工作,因此没有达到最大睿频加速频率的空间,但这些核心都在以 3.2 GHz 的“所有核心睿频加速”速度运行。

[ec2-user ~]$ sudo turbostat stress -c 36 -t 10 stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd stress: info: [30685] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 99.27 3.20 2.90 0 0.26 0.00 0.47 0.00 0.00 0.00 0.00 0.00 228.59 31.33 199.26 0.00 0 0 0 99.08 3.20 2.90 0 0.27 0.01 0.64 0.00 0.00 0.00 0.00 0.00 114.69 18.55 99.32 0.00 0 0 18 98.74 3.20 2.90 0 0.62 0 1 1 99.14 3.20 2.90 0 0.09 0.00 0.76 0.00 0 1 19 98.75 3.20 2.90 0 0.49 0 2 2 99.07 3.20 2.90 0 0.10 0.02 0.81 0.00 0 2 20 98.73 3.20 2.90 0 0.44 0 3 3 99.02 3.20 2.90 0 0.24 0.00 0.74 0.00 0 3 21 99.13 3.20 2.90 0 0.13 0 4 4 99.26 3.20 2.90 0 0.09 0.00 0.65 0.00 0 4 22 98.68 3.20 2.90 0 0.67 0 5 5 99.19 3.20 2.90 0 0.08 0.00 0.73 0.00 0 5 23 98.58 3.20 2.90 0 0.69 0 6 6 99.01 3.20 2.90 0 0.11 0.00 0.89 0.00 0 6 24 98.72 3.20 2.90 0 0.39 ...

通过限制深层 C 状态实现高性能和低延迟

C 状态控制当核心处于非活动状态时可能进入的睡眠级别。您可能需要控制 C 状态来调校系统的延迟与性能。将核心置于睡眠状态需要时间,尽管睡眠中的核心可为其他核心提供更多空间以加速至更高频率,但该睡眠中的核心也需要时间来重新唤醒并执行工作。例如,如果某个负责处理网络数据包中断的核心处于睡眠状态,那么在处理此类中断时可能会出现延迟。您可以将系统配置为不使用深层 C 状态,这可以降低处理器的反应延迟,但反过来也会减少其他核心达到睿频加速频率可用的空间。

禁用深层睡眠状态的常见情形是 Redis 数据库应用程序,该应用程序将数据库存储在系统内存中,以实现最快速的查询响应。

限制 Amazon Linux 上的深层睡眠状态

  1. 使用所选编辑器打开 /boot/grub/grub.conf 文件。

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 编辑第一个条目的 kernel 行并添加 intel_idle.max_cstate=1 选项,将 C1 设为空闲核心的最深层 C 状态。

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. 保存文件并退出您的编辑器。

  4. 重启实例以启用新的内核选项。

    [ec2-user ~]$ sudo reboot

以下示例显示的 c4.8xlarge 实例具有两个以“所有核心睿频加速”核心频率有效执行工作的核心。

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5322] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.56 3.20 2.90 0 94.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00 131.90 31.11 199.47 0.00 0 0 0 0.03 2.08 2.90 0 99.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 67.23 17.11 99.76 0.00 0 0 18 0.01 1.93 2.90 0 99.99 0 1 1 0.02 1.96 2.90 0 99.98 0.00 0.00 0.00 0 1 19 99.70 3.20 2.90 0 0.30 ... 1 1 10 0.02 1.97 2.90 0 99.98 0.00 0.00 0.00 1 1 28 99.67 3.20 2.90 0 0.33 1 2 11 0.04 2.63 2.90 0 99.96 0.00 0.00 0.00 1 2 29 0.02 2.11 2.90 0 99.98 ...

在此示例中,vCPU 19 和 vCPU 28 的核心均以 3.2 GHz 的频率运行,而其他核心处于等待指令的 C1 C 状态。虽然运行中的核心没有达到其最大睿频加速频率,但非活动核心对新请求的响应速度将比其处于深层 C6 C 状态时快得多。

变化最少的基准性能

您可以通过 P 状态减少处理器频率的变化。P 状态控制核心的所需性能 (以 CPU 频率的形式)。大多数工作负载在 P0 状态下性能更好,该状态要求采用睿频加速频率。但是,您可能需要调校系统以获得稳定性能而非突发式性能,而突发式性能可能会在启用睿频加速频率后出现。

Intel 高级矢量扩展 (AVX 或 AVX2) 工作负载能够以较低的频率较好地运行,而 AVX 指令也可以使用更多性能。通过禁用睿频加速来以较低的频率运行处理器,可以降低所使用的性能并保持更稳定的速度。有关优化您的实例配置和 AVX 工作负载的更多信息,请参阅 http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf

此部分介绍了如何限制深层睡眠状态以及禁用睿频加速 (通过请求 P1 P 状态),从而为这些类型的工作负载提供低延迟和最少的处理器速度变化。

限制 Amazon Linux 上的深层睡眠状态并禁用睿频加速

  1. 使用所选编辑器打开 /boot/grub/grub.conf 文件。

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 编辑第一个条目的 kernel 行并添加 intel_idle.max_cstate=1 选项,将 C1 设为空闲核心的最深层 C 状态。

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. 保存文件并退出您的编辑器。

  4. 重启实例以启用新的内核选项。

    [ec2-user ~]$ sudo reboot
  5. 如果您需要 P1 P 状态提供的较少的处理器速度变化,请执行以下命令禁用睿频加速。

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. 在工作负载完成后,您可以使用以下命令重新启用睿频加速。

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

以下示例显示的 c4.8xlarge 实例具有两个以基准核心频率有效执行工作的 vCPU,这两个 vCPU 均没有启用睿频加速。

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5389] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.59 2.90 2.90 0 94.41 0.00 0.00 0.00 0.00 0.00 0.00 0.00 128.48 33.54 200.00 0.00 0 0 0 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 65.33 19.02 100.00 0.00 0 0 18 0.04 2.90 2.90 0 99.96 0 1 1 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 1 19 0.04 2.90 2.90 0 99.96 0 2 2 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0 2 20 0.04 2.90 2.90 0 99.96 0 3 3 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 3 21 99.95 2.90 2.90 0 0.05 ... 1 1 28 99.92 2.90 2.90 0 0.08 1 2 11 0.06 2.90 2.90 0 99.94 0.00 0.00 0.00 1 2 29 0.05 2.90 2.90 0 99.95

vCPU 21 和 vCPU 28 的核心以 2.9 GHz 的基准处理器速度有效执行工作,而所有非活动核心也在 C1 C 状态下以基准速度运行,准备接受指令。