一、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下图CentOS 7.3为修改前处理器频率状态 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 以下为修改前后对比
下图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设置各厂商大同小异,请自行查找。 |