本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您的 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.24xlarge
g5.24xlarge
g5.48xlarge
g6.24xlarge
g6.48xlarge
inf1.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.613.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 上的深層休眠狀態
-
使用您選取的編輯器開啟
/etc/default/grub
檔案。[ec2-user ~]$
sudo vim /etc/default/grub
-
編輯
GRUB_CMDLINE_LINUX_DEFAULT
行,並新增intel_idle.max_cstate=1
和processor.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=0intel_idle.max_cstate=1
選項為 Intel 型執行個體設定 C-state 限制,而processor.max_cstate=1
選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。 -
儲存檔案並結束您的編輯器。
-
執行下列命令來重建開機組態。
[ec2-user ~]$
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
重新啟動執行個體以啟用新的核心選項。
[ec2-user ~]$
sudo reboot
限制 Amazon Linux AMI 上的深層休眠狀態
-
使用您選取的編輯器開啟
/boot/grub/grub.conf
檔案。[ec2-user ~]$
sudo vim /boot/grub/grub.conf
-
編輯第一個項目的
kernel
行,並新增intel_idle.max_cstate=1
和processor.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.imgintel_idle.max_cstate=1
選項為 Intel 型執行個體設定 C-state 限制,而processor.max_cstate=1
選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。 -
儲存檔案並結束您的編輯器。
-
重新啟動執行個體以啟用新的核心選項。
[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.673.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
-
使用您選取的編輯器開啟
/etc/default/grub
檔案。[ec2-user ~]$
sudo vim /etc/default/grub
-
編輯
GRUB_CMDLINE_LINUX_DEFAULT
行,並新增intel_idle.max_cstate=1
和processor.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=0intel_idle.max_cstate=1
選項為 Intel 型執行個體設定 C-state 限制,而processor.max_cstate=1
選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。 -
儲存檔案並結束您的編輯器。
-
執行下列命令來重建開機組態。
[ec2-user ~]$
grub2-mkconfig -o /boot/grub2/grub.cfg
-
重新啟動執行個體以啟用新的核心選項。
[ec2-user ~]$
sudo reboot
-
當您需要
P1
P-state 提供的低處理器速度變異,請執行下列命令以停用 Turbo Boost。[ec2-user ~]$
sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
-
工作負載完成時,您可使用下列命令重新啟用 Turbo Boost。
[ec2-user ~]$
sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
限制 Amazon Linux AMI 上的深層休眠狀態並停用 Turbo Boost
-
使用您選取的編輯器開啟
/boot/grub/grub.conf
檔案。[ec2-user ~]$
sudo vim /boot/grub/grub.conf
-
編輯第一個項目的
kernel
行,並新增intel_idle.max_cstate=1
和processor.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.imgintel_idle.max_cstate=1
選項為 Intel 型執行個體設定 C-state 限制,而processor.max_cstate=1
選項則為 AMD 型執行個體設定 C-state 限制。將這兩個選項加入您的組態中是安全的做法。這允許單一組態在 Intel 和 AMD 上設定所需的行為。 -
儲存檔案並結束您的編輯器。
-
重新啟動執行個體以啟用新的核心選項。
[ec2-user ~]$
sudo reboot
-
當您需要
P1
P-state 提供的低處理器速度變異,請執行下列命令以停用 Turbo Boost。[ec2-user ~]$
sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
-
工作負載完成時,您可使用下列命令重新啟用 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.922.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 下同時以基準速度運作並準備好接受指令。