业务的一个数据库节点使用的是浪潮TS860服务器,突然发现业务访问在一段时间持续变慢,经排查,发现数据库节点存在性能问题,经厂商工程师检测服务器确认CPU工作频率异常,工作频率远低于CPU硬件基准频率(2.5GHz),运行速度只有1.187GHz
然后通过远程带外管理方式连接服务器控制台,重启服务器进入BIOS并修改BIOS配置,关闭CPU节能模式后恢复正常。
bios调整方法:
进入主板bios,找到cpu设置选项,找到名为“EIST”或“Intel SpeedStep technology”或“C1E”的选项,然后将其设为“disabled”。
图示:
备注:
随机读写性能是固态硬盘SSD的关键指标,其单位为IOPS,即每秒进行读写(I/O接口)操作的次数。它对应整个系统的总线带宽。当我们开启CPU节能选项,CPU的频率降下来,发送指令随之变慢,I/0接口处理的操作次数减少,因此IOPS的影响最深。
CPU节能模式有关知识补充:
一、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。
如何从OS层面查看cpu节能模式是否打开或关闭:
1、Linux下快速查看
从图上可以看出当前超线程cpu MHz各有不同,说明都不是跑在C0模式下。
2、使用i7z工具查看
Linux下查看C-state的小工具,使用简单,直接上传i7z_64bit文件到系统里,命令添加可执行权限,如:chmod +x i7z_64bit,然后直接执行 ./i7z_64bit
2、CentOS 7.x 节电及处理器调频设置
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为修改后处理器频率状态
3、CentOS 6.x 节电及处理器调频设置
部分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才可生效)
原文地址:https://blog.51cto.com/xjsunjie/2363029