您的 EC2 实例的处理器状态控制 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

C 状态控制当核心处于空闲状态时可以进入的睡眠级别。C 状态从 C0 (最浅空闲状态,此时核心完全唤醒并在执行指令) 开始编号,一直增进到 C6 (最深空闲状态,此时核心关闭)。

P 状态控制核心的所需性能 (以 CPU 频率的形式)。P 状态从 P0 (最高性能设置,此时核心可以使用 Intel 睿频加速技术提高频率) 开始编号,然后从 P1 (请求最大基准频率的 P 状态) 一直增加到 P15 (可能最低的频率)。

C 状态和 P 状态

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

  • 通用型:m4.10xlarge | m4.16xlarge | m5.metal | m5d.metal | m5n.metal | m5zn.metal | m6i.metal | m6id.metal | m7i.metal-24xl | m7i.metal-48xl

  • 计算优化型:c4.8xlarge | c5.metal | c5an.metal | c5adn.metal | c5n.metal | c6i.metal | c6id.metal | c7i.metal-24xl | c7i.metal-48xl

  • 内存优化型:r4.8xlarge | r4.16xlarge | r5.metal | r5b.metal | r5d.metal | r6i.metal | r7i.metal-24xl | r7i.metal-48xl | r7iz.metal-16xl | r7iz.metal-32xl | u-6tb1.metal | u-9tb1.metal | u-12tb1.metal | u-18tb1.metal | u-24tb1.metal | x1.16xlarge | x1.32xlarge | x1e.8xlarge | x1e.16xlarge | x1e.32xlarge | z1d.metal

  • 存储优化:d2.8xlarge |d3.metal |d3en.metal |i3.8xlarge |i3.16xlarge |i3.metal |i3en.metal |h1.8xlarge |h1.16xlarge

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

仅限 C 状态

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

  • 通用型:m5.12xlarge | m5.24xlarge | m5d.12xlarge | m5d.24xlarge | m5n.12xlarge | m5n.24xlarge | m5dn.12xlarge | m5dn.24xlarge | m6a.24xlarge | m6a.48xlarge | m6ad.metal | m6i.16xlarge | m6i.32xlarge | m7i.large | m7i.xlarge | m7i.2xlarge | m7i.4xlarge | m7i.8xlarge | m7i.12xlarge | m7i.16xlarge | m7i.24xlarge | m7i.48xlarge

  • 计算优化型:c5.9xlarge | c5.12xlarge | c5.18xlarge | c5.24xlarge | c5a.24xlarge | c5ad.24xlarge | c5d.9xlarge | c5d.12xlarge | c5d.18xlarge | c5d.24xlarge | c5n.9xlarge | c5n.18xlarge | c6a.24xlarge | c6a.32xlarge | c6a.48xlarge | c6i.16xlarge | c6i.32xlarge | c7i.large | c7i.xlarge | c7i.2xlarge | c7i.4xlarge | c7i.8xlarge | c7i.12xlarge | c7i.16xlarge | c7i.24xlarge | c7i.48xlarge

  • 内存优化型:r5.12xlarge | r5.24xlarge | r5d.12xlarge | r5d.24xlarge | r5n.12xlarge | r5n.24xlarge | r5dn.12xlarge | r5dn.24xlarge |r6a.24xlarge | r6a.48xlarge | r6i.16xlarge | r6i.32xlarge | r6id.32xlarge | r6in.32xlarge | r7i.large | r7i.xlarge | r7i.2xlarge | r7i.4xlarge | r7i.8xlarge | r7i.12xlarge | r7i.16xlarge | r7i.24xlarge | r7i.48xlarge | r7iz.large | r7iz.xlarge | r7iz.2xlarge | r7iz.4xlarge | r7iz.8xlarge | r7iz.12xlarge | r7iz.16xlarge | r7iz.32xlarge | u-6tb1.56xlarge | u-6tb1.112xlarge | u-9tb1.112xlarge | u-12tb1.112xlarge | u-18tb1.112xlarge | u-24tb1.112xlarge | z1d.6xlarge | z1d.12xlarge

  • 存储优化型:d3en.12xlarge | dl1.24xlarge | i3en.12xlarge | i3en.24xlarge | i4i.metal | r5b.12xlarge | r5b.24xlarge | i4i.16xlarge

  • 加速计算型:dl1.24xlarge | g5.24xlarge | g5.48xlarge | inf1.24xlarge | p3dn.24xlarge | p4d.24xlarge | p4de.24xlarge | vt1.24xlarge

Amazon Graviton 处理器具有内置的节能模式,并以固定频率运行。因此,它们不提供操作系统控制 C 状态和 P 状态的能力。

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

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

注意

本页上的示例使用以下内容:

  • 显示处理器频率和 C 状态信息的 turbostat 实用程序。默认情况下,turbostat 实用程序在 Amazon Linux 上提供。

  • 模拟工作负载的 stress 命令。若要安装 stress,首先通过运行 sudo amazon-linux-extras install epel 启用 EPEL 存储库,然后运行 sudo yum install -y stress

如果输出不显示 C 状态信息,请在命令中加入 --debug 选项 (sudo turbostat --debug stress <options>)。

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

这是 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 2 上的深层睡眠状态
  1. 使用所选编辑器打开 /etc/default/grub 文件。

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. 编辑 GRUB_CMDLINE_LINUX_DEFAULT 行并添加 intel_idle.max_cstate=1processor.max_cstate=1 选项,以将 C1 设置为空闲内核的最深层 C 状态。

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0

    intel_idle.max_cstate=1 选项用于为基于英特尔处理器的实例配置 C 状态限制,processor.max_cstate=1 选项用于为基于 AMD 处理器的实例配置 C 状态限制。您可以放心将这两个选项添加到配置中。这可实现通过单个配置在英特尔和 AMD 处理器上设置所需的行为。

  3. 保存文件并退出您的编辑器。

  4. 运行以下命令重新构建启动配置。

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 重启实例以启用新的内核选项。

    [ec2-user ~]$ sudo reboot
限制 Amazon Linux AMI 上的深层睡眠状态
  1. 使用所选编辑器打开 /boot/grub/grub.conf 文件。

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 编辑第一个条目的 kernel 行并添加 intel_idle.max_cstate=1processor.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 processor.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img

    intel_idle.max_cstate=1 选项用于为基于英特尔处理器的实例配置 C 状态限制,processor.max_cstate=1 选项用于为基于 AMD 处理器的实例配置 C 状态限制。您可以放心将这两个选项添加到配置中。这可实现通过单个配置在英特尔和 AMD 处理器上设置所需的行为。

  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 工作负载的更多信息,请参阅 英特尔公司网站

CPU 空闲驱动程序用于控制 P 状态。较新一代的 CPU 需要更新与内核级别对应的 CPU 空闲驱动程序,如下所示:

  • Linux 内核 5.6 及更高版本(例如 m6i)– 支持英特尔 Icelake。

  • Linux 内核 5.10 及更高版本(例如 m6a)– 支持 AMD Milan。

要检测正在运行的系统的内核是否识别 CPU,请运行以下命令。

if [ -d /sys/devices/system/cpu/cpu0/cpuidle ]; then echo "C-state control enabled"; else echo "Kernel cpuidle driver does not recognize this CPU generation"; fi

如果此命令的输出指示不支持,则建议您升级内核。

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

限制 Amazon Linux 2 上的深层睡眠状态并禁用睿频加速
  1. 使用所选编辑器打开 /etc/default/grub 文件。

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. 编辑 GRUB_CMDLINE_LINUX_DEFAULT 行并添加 intel_idle.max_cstate=1processor.max_cstate=1 选项,以将 C1 设置为空闲内核的最深层 C 状态。

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0

    intel_idle.max_cstate=1 选项用于为基于英特尔处理器的实例配置 C 状态限制,processor.max_cstate=1 选项用于为基于 AMD 处理器的实例配置 C 状态限制。您可以放心将这两个选项添加到配置中。这可实现通过单个配置在英特尔和 AMD 处理器上设置所需的行为。

  3. 保存文件并退出您的编辑器。

  4. 运行以下命令重新构建启动配置。

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 重启实例以启用新的内核选项。

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

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

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
限制 Amazon Linux AMI 上的深层睡眠状态并禁用睿频加速
  1. 使用所选编辑器打开 /boot/grub/grub.conf 文件。

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 编辑第一个条目的 kernel 行并添加 intel_idle.max_cstate=1processor.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 processor.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img

    intel_idle.max_cstate=1 选项用于为基于英特尔处理器的实例配置 C 状态限制,processor.max_cstate=1 选项用于为基于 AMD 处理器的实例配置 C 状态限制。您可以放心将这两个选项添加到配置中。这可实现通过单个配置在英特尔和 AMD 处理器上设置所需的行为。

  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 状态下以基准速度运行,准备接受指令。