全部產品
Search
文件中心

Elastic Compute Service:調整C-state狀態以降低vCPU的響應延遲

更新時間:Aug 06, 2024

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深度休眠,不同執行個體規格、不同鏡像回顯有所不同,以實際為準。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 查看當前系統使用的CPUidle driver以及支援的C-states。

    說明

    如果執行以下命令沒有顯示相應的CPUidle driver,您可能需要更新鏡像。

    cpupower idle-info

    返回資訊如下圖所示,Number of idle states表示支援的C-states數量,Available idle states表示支援的具體C-states狀態。

    image

  3. 修改/etc/default/grub檔案中C-states相關參數。

    1. 開啟/etc/default/grub檔案。

      sudo vim /etc/default/grub
    2. i鍵進入編輯模式。

    3. 找到GRUB_CMDLINE_LINUX=行,在參數末尾添加intel_idle.max_cstate=1和processor.max_cstate=1選項,將空閑vCPU的最大C-state限制為C1。

      image

    4. Esc鍵,輸入:wq,按Enter鍵關閉並儲存設定檔。

    5. 重建GRUB設定檔。

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  4. 重設執行個體,使配置生效。

    sudo reboot
  5. 查看當前系統使用的CPUidle driver以及支援的C-states。

    cpupower idle-info

    返回資訊如下圖所示,說明系統僅支援2種C-states狀態(POLL、C1)。

    image