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)。