C-state用於控制CPU在不活動時可以進入的休眠層級,它從C0開始編號(CPU處於正常工作狀態),一直到C6(最深的休眠層級,此時CPU進入低功耗狀態)。當CPU進入較深的C-state時,其喚醒時延也會變大,在一些即時性要求較高的負載情境,會對效能產生影響。因此,當您對效能穩定性有一定的訴求時,建議您將C-state狀態改成C1,以降低vCPU的響應延遲。
背景資訊
當vCPU沒有負載時,讓vCPU處於較低的C-state狀態可以減少Hypervisor對HLT、MWAIT等指令的類比開銷,同時也能降低vCPU的喚醒時延。但是當作業系統讓vCPU進入更深的C-state時,將vCPU重新喚醒(比如網卡上有新的中斷)並執行指令需要一定的時間,這個喚醒時間開銷由CPU晶片架構決定。您可以配置作業系統禁用更深的C-state狀態,以降低vCPU的響應延遲。
操作步驟
本文以ecs.g8i.large、Alibaba Cloud Linux 3系統為例介紹如何禁用vCPU深度休眠,不同執行個體規格、不同鏡像回顯有所不同,以實際為準。
遠端連線ECS執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
查看當前系統使用的CPUidle driver以及支援的C-states。
說明如果執行以下命令沒有顯示相應的CPUidle driver,您可能需要更新鏡像。
cpupower idle-info返回資訊如下圖所示,
Number of idle states表示支援的C-states數量,Available idle states表示支援的具體C-states狀態。
修改
/etc/default/grub檔案中C-states相關參數。開啟/etc/default/grub檔案。
sudo vim /etc/default/grub按
i鍵進入編輯模式。找到
GRUB_CMDLINE_LINUX=行,在參數末尾添加intel_idle.max_cstate=1和processor.max_cstate=1選項,將空閑vCPU的最大C-state限制為C1。
按
Esc鍵,輸入:wq,按Enter鍵關閉並儲存設定檔。重建GRUB設定檔。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重設執行個體,使配置生效。
sudo reboot查看當前系統使用的CPUidle driver以及支援的C-states。
cpupower idle-info返回資訊如下圖所示,說明系統僅支援2種C-states狀態(POLL、C1)。
