一、CPU 节能概念
随着 CPU 的发展,Intel 出现了 EIST 技术,它可以动态的调整 CPU 的频率。当 CPU 使用率地下或者接近 0 时候,能降低 CPU 频率并且降压,从而降低功耗和发热。当检测到 CPU 使用率增高,它会马上回到原始工作频率,但是你必须考虑 CPU 被唤醒的时间,并且确保它会再次 100%运行。这一系列的过程通常被称为“C-states”或“C-modes”,它是从 C0 开始的。
随着 C-states 的不断增加,CPU 睡眠模式就更深,即更多的电路和信号被关闭,并且 CPU 将需要更多时间返回到 C0 模式,即唤醒。
对于每个模式也有不同的名称与不同功耗的子模式,从而唤醒时间级别等。
而在一些 case 中,CPU 节能会带一些不稳定的因素,如 unstable issue 或performance issue,所以我们可以通过系统层面来 disable CPU 节能。
二、常见的几种 C-states
C0 :工作状态,CPU 完全运行。
C1 :停止状态,主 CPU 停止内部时钟经由软件;总线接口单元和 APIC 保持全速运行。C3 :深度睡眠,止所有CPU 内部和外部时钟。
C6 : 深度功率下降, 将CPU 内部电压降低到任何值,包括 0V。
更多状态请查看下面链接:
https://www.dell.com/support/article/us/en/19/qna41893/what-is-c-state?lang=en
三、Linux 系统上查看 CPU 节能
1.Linux 下命令快速查看
从图可以看出当前超线程 cpu NHz 各有不同,说明都不是跑在 C0 模式下。
- 使用 i7z 工具检查
它是 Linux 下查看 C-state 的小工具,使用简单,直接上传 i7z_64bit 文件到系统里,命令添加可执行权限,如:chmod +x i7z_64bit,然后直接执行 ./i7z_64bit,就能看到下面的信息。
从这个图我们可以看到目前所有核心都没有 100%在 C0 的状态。
所有核心都运行 C0 模式下:
图中红框部分说明,所有核心都工作在 C0 模式下,没有降频的发生。
四、从系统层面禁止 CPU 节能
- RHEL6.X 的调整方法
RHEL6.X 的设置相对比较简单,可直接在系统 grub 中添加:intel_idle.max_cstate=0 和 idle=poll 这两个参数,如下图:
修改完成后保存退出,重启系统。
2.RHEL7.X 的调整方法
1)修改配置文件添加“intel_idle.max_cstate=0 processor.max_cstate=1 intel_pstate=disable idle=poll”设置。
[root@localhost ~]# cat /etc/default/grub
2)编辑 grub2 文件。
3)重启系统
4)检查当前 CPU MHz