您的 EC2 執行個體處理器狀態控制 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

您的 EC2 執行個體處理器狀態控制

C-state 可控制核心在閒置狀態要進入的休眠等級。C-state 從 C0 (最淺閒置狀態,此時核心處於喚醒狀態並執行指令) 開始編號,最高可到 C6 (最深閒置狀態,此時核心會關閉)。

P-state 則可控制所需的核心效能 (CPU 頻率)。P-state 從 P0 (最高效能設定,此時核心可視需要使用 Intel Turbo Boost 技術來提高頻率) 開始編號,之後則從 P1 (請求最大基準頻率的 P-state) 到 P15 (最低適用頻率)。

C-state 和 P-state

下列執行個體類型可供作業系統控制處理器的 C-state 和 P-state:

  • 一般用途: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-state

下列執行個體類型可供作業系統控制處理器的 C-state:

  • 一般用途: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.24xlargeg5.24xlargeg5.48xlargeg6.24xlargeg6.48xlargeinf1.24xlarge| p3dn.24xlarge p4d.24xlarge | p4de.24xlarge | vt1.24xlarge

AWS Graviton 處理器具有內建省電模式,並以固定頻率運作。因此,它們不能為作業系統提供控制 C-state 和 P-states 的能力。

建議您變更 C-state 或 P-state 設定來提高處理器效能穩定性、減少延遲或針對特定工作負載微調執行個體。預設 C-state 和 P-state 設定提供最大效能,適合多數工作負載使用。然而,若您的應用程式更適合犧牲較高的單核心或雙核心頻率以降低延遲,或在較低頻率更能展現穩定效能 (而不適合使用突增 Turbo Boost 頻率),請考慮嘗試調整這些執行個體的 C-state 或 P-state 設定。

下列各節會說明處理器狀態的不同組態,以及如何監控組態的效果。這些程序專為 Amazon Linux 撰寫並使用,然而,亦可能適用其他搭載 Linux 核心版本 3.9 或更新版本的 Linux 發行版本。如需其他 Linux 發行版本和處理器狀態控制的詳細資訊,請參閱您的系統特定文件。

注意

此頁面上的範例使用以下項目:

  • turbostat 公用程式,用於顯示處理器頻率和 C-state 資訊。根據預設,turbostat 執行個體在 Amazon Linux 上可用。

  • stress 命令,用於模擬工作負載。若要安裝 stress,首先透過執行 sudo amazon-linux-extras install epel 啟用 EPEL 儲存庫,然後執行 sudo yum install -y stress

若輸出未顯示 C-state 資訊,請將 --debug 選項併入命令 (sudo turbostat --debug stress <options>) 中。

具備最高 Turbo Boost 頻率的最佳效能

此為 Amazon Linux AMI 的預設處理器狀態控制組態,建議多數工作負載使用。此組態提供最佳效能,而且變異較低。允許未使用的核心進入更深的休眠狀態,可提供單核心或雙核心處理器達到最大 Turbo Boost 潛力所需的散熱餘裕。

下列範例以 c4.8xlarge 執行個體為例,其中具備兩個執行工作並達到最大處理器 Turbo Boost 頻率的運作中核心。

[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 和 28 均以最大 Turbo Boost 頻率運作,因為其他核心已進入 C6 休眠狀態以節省功耗,並讓工作中核心取得能力與散熱餘裕。vCPU 3 和 10 (個別與 vCPU 21 和 28 共享處理器核心) 處於等待指令的 C1 狀態。

在下列範例中,所有 18 個核心均運作中執行工作,因此沒有達到最大 Turbo Boost 的餘裕,但它們均以「All Core Turbo Boost」運作,速度達到 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-state 達到高效能與低延遲

C-state 可控制核心在未使用時要進入的休眠等級。建議您控制 C-state 來微調系統的延遲與效能。核心進入休眠狀態需要時間,而且雖然休眠核心讓其他核心更有餘裕加速至更高頻率,但是欲喚醒該休眠核心並開始執行工作也需要時間。例如,若負責處理網路封包中斷的核心處於休眠狀態,則處理此類中斷的服務就可能受到延遲。您可將系統設定為不使用深層 C-state,藉此減少處理器反應延遲,但同時也會壓縮其他核心進行 Turbo Boost 的餘裕。

停用深層休眠狀態常見於 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-state。

    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 選項為 Intel 型執行個體設定 C-state 限制,而 processor.max_cstate=1 選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 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-state。

    # 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 選項為 Intel 型執行個體設定 C-state 限制,而 processor.max_cstate=1 選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。

  3. 儲存檔案並結束您的編輯器。

  4. 重新啟動執行個體以啟用新的核心選項。

    [ec2-user ~]$ sudo reboot

下列範例以 c4.8xlarge 執行個體為例,其中具備兩個執行工作並以「All Core Turbo Boost」核心頻率運作的運作中核心。

[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 和 28 的核心以 3.2 GHz 運作,其他核心則處於等待指令的 C1 C-state。雖然運作中核心並未達到最大 Turbo Boost 頻率,但是未使用的核心將比處於深層 C6 C-state 更能夠快速回應新的請求。

以最低變異取得基準效能

您可使用 P-state 來減少處理器頻率的變異。P-state 則可控制所需的核心效能 (CPU 頻率)。多數工作負載以 P0 運作的效能較佳,此時會要求使用 Turbo Boost。然而,若要取得穩定效能,而非 Turbo Boost 啟用才出現的突增效能,建議您微調系統。

Intel Advanced Vector Extensions (AVX 或 AVX2) 工作負載能夠以較低頻率展現優異效能,而 AVX 指令也得以使用更多電力。停用 Turbo Boost 讓處理器以較低頻率運作,能夠減少功耗並保持速度穩定。如需有關最佳化 AVX 的執行個體組態與工作負載的詳細資訊,請參閱 Intel 網站

CPU 閒置驅動程式控制 P-state。較新世代 CPU 需要較新的 CPU 閒置驅動程式 (對應於核心層級),如下所示:

  • Linux 核心版本 5.6 及更高版本 (例如 m6i) – 支援 Intel 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

如果此命令的輸出表示缺乏支援,我們建議您將核心升級。

本節將說明如何限制深層休眠狀態並停用 Turbo Boost (透過請求 P1 P-state),為這些類型的工作負載提供低延遲及最小的處理器速度變異。

限制 Amazon Linux 2 上的深層休眠狀態並停用 Turbo Boost
  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-state。

    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 選項為 Intel 型執行個體設定 C-state 限制,而 processor.max_cstate=1 選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。

  3. 儲存檔案並結束您的編輯器。

  4. 執行下列命令來重建開機組態。

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 重新啟動執行個體以啟用新的核心選項。

    [ec2-user ~]$ sudo reboot
  6. 當您需要 P1 P-state 提供的低處理器速度變異,請執行下列命令以停用 Turbo Boost。

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  7. 工作負載完成時,您可使用下列命令重新啟用 Turbo Boost。

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
限制 Amazon Linux AMI 上的深層休眠狀態並停用 Turbo Boost
  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-state。

    # 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 選項為 Intel 型執行個體設定 C-state 限制,而 processor.max_cstate=1 選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。

  3. 儲存檔案並結束您的編輯器。

  4. 重新啟動執行個體以啟用新的核心選項。

    [ec2-user ~]$ sudo reboot
  5. 當您需要 P1 P-state 提供的低處理器速度變異,請執行下列命令以停用 Turbo Boost。

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. 工作負載完成時,您可使用下列命令重新啟用 Turbo Boost。

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

下列範例以 c4.8xlarge 執行個體為例,其中具備兩個執行工作並以基準核心頻率 (無 Turbo Boost) 運作的 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 和 28 的核心均以基準處理器速度 2.9 GHz 運作中執行工作,而且所有未使用的核心也在 C1 C-state 下同時以基準速度運作並準備好接受指令。