Linux / 服务器 · 2018年1月30日 31

CPU节能简介,查看机器是否开启节能及OS中关闭节能方法。

一、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。

三、快速查看处理器节能是否打开

1. Linux 下命令快速查看

从图可以看出当前超线程cpu NHz各有不同,说明都不是跑在C0模式下。

2、使用i7z工具查看

Linux下查看C-state的小工具,使用简单,直接上传i7z_64bit文件到系统里,命令添加可执行权限,如:chmod +x i7z_64bit,然后直接执行 ./i7z_64bit

i7z下载

四、如发现线上机器节电调频开启,处理方法

CentOS 7.x 节电及处理器调频设置

1、  CentOS7.3 OS中使用了 Intel P-state ,导致机器BIOS关闭节电设置后,处理器的频率依旧处于频繁跳动状态。通过grub禁用 Intel P-state解决OS控制处理器频率问题。操作如下:

禁用Intel P-state

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/ intel_pstate=disable intel_idle.max_cstate=0 processor.max_cstate=1 idle=poll"/}' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

此前有同学提到的方案为修改scaling_governor为performance,此方案再使用过程中处理器频率会有瞬间掉频的情况。故不推荐。

以下为修改前后对比

下图CentOS 7.3为修改前处理器频率状态

下图CentOS 7.3为修改后处理器频率状态

CentOS 6.x 节电及处理器调频设置

1、  部分SuperMicro、dell 老机型(如 R510  R610)机器在BIOS关闭节电不生效,由于从rhel 6 开始,操作系统默认会通过intel_idle驱动来控制cpu的节能状态,而忽略BIOS设置.所以要通过添加启动参数禁用intel_idle,让linux系统通过ACPI调用BIOS设置来彻底实现禁用节能.所以手动Linux kernel配置参数(grub文件)里增加以下参数来禁用操作系统底层驱动的节能功能在grub中添加intel_idle.max_cstate=0  idle=poll

重启生效,部分没有在BIOS关闭节电的老机器也可直接用此方法,使处理器频率运行在最高频率。

修改示例如下 (修改当前使用kernel才可生效)

 

使用了grub2装机的系统修改grub细节稍有不同,可按照下图修改,注意是修改的grub.cfg

 

此文档关闭节电方法都是基于OS进行操作,BIOS设置各厂商大同小异,请自行查找。

转载请务必标注来源,否则将追究法律责任。