調(diào)整C-state狀態(tài)以降低vCPU的響應(yīng)延遲
C-state用于控制CPU在不活動(dòng)時(shí)可以進(jìn)入的休眠級(jí)別,它從C0開始編號(hào)(CPU處于正常工作狀態(tài)),一直到C6(最深的休眠級(jí)別,此時(shí)CPU進(jìn)入低功耗狀態(tài))。當(dāng)CPU進(jìn)入較深的C-state時(shí),其喚醒時(shí)延也會(huì)變大,在一些實(shí)時(shí)性要求較高的負(fù)載場景,會(huì)對(duì)性能產(chǎn)生影響。因此,當(dāng)您對(duì)性能穩(wěn)定性有一定的訴求時(shí),建議您將C-state狀態(tài)改成C1,以降低vCPU的響應(yīng)延遲。
背景信息
當(dāng)vCPU沒有負(fù)載時(shí),讓vCPU處于較低的C-state狀態(tài)可以減少Hypervisor對(duì)HLT、MWAIT等指令的模擬開銷,同時(shí)也能降低vCPU的喚醒時(shí)延。但是當(dāng)操作系統(tǒng)讓vCPU進(jìn)入更深的C-state時(shí),將vCPU重新喚醒(比如網(wǎng)卡上有新的中斷)并執(zhí)行指令需要一定的時(shí)間,這個(gè)喚醒時(shí)間開銷由CPU芯片架構(gòu)決定。您可以配置操作系統(tǒng)禁用更深的C-state狀態(tài),以降低vCPU的響應(yīng)延遲。
操作步驟
本文以ecs.g8i.large、Alibaba Cloud Linux 3系統(tǒng)為例介紹如何禁用vCPU深度休眠,不同實(shí)例規(guī)格、不同鏡像回顯有所不同,以實(shí)際為準(zhǔn)。
遠(yuǎn)程連接ECS實(shí)例。
具體操作,請(qǐng)參見通過密碼或密鑰認(rèn)證登錄Linux實(shí)例。
查看當(dāng)前系統(tǒng)使用的CPUidle driver以及支持的C-states。
說明如果執(zhí)行以下命令沒有顯示相應(yīng)的CPUidle driver,您可能需要更新鏡像。
cpupower idle-info
返回信息如下圖所示,
Number of idle states
表示支持的C-states數(shù)量,Available idle states
表示支持的具體C-states狀態(tài)。修改
/etc/default/grub
文件中C-states相關(guān)參數(shù)。打開/etc/default/grub文件。
sudo vim /etc/default/grub
按
i
鍵進(jìn)入編輯模式。找到
GRUB_CMDLINE_LINUX=
行,在參數(shù)末尾添加intel_idle.max_cstate=1和processor.max_cstate=1選項(xiàng),將空閑vCPU的最大C-state限制為C1。按
Esc
鍵,輸入:wq
,按Enter
鍵關(guān)閉并保存配置文件。重新生成GRUB配置文件。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重置實(shí)例,使配置生效。
sudo reboot
查看當(dāng)前系統(tǒng)使用的CPUidle driver以及支持的C-states。
cpupower idle-info
返回信息如下圖所示,說明系統(tǒng)僅支持2種C-states狀態(tài)(POLL、C1)。