Kylin SP2系统BUG-待机状态CPU频率异常

系统更换引发的CPU频率“异常”与性能之谜

1. 问题背景:性能差异引发质疑

在研发中心处理售后升级的疑难问题时,我们遇到了一个颇具迷惑性的案例。在对多台海光7380双路服务器进行Unixbench整机性能对比时,发现其中一台机器的性能显著低于其他同配置机器。

最初的排查由售后完成,他们在为客户更换了操作系统并优化了内存插法后,性能恢复了正常。事情本该到此为止,但细心的客户发现了一个关键疑点:在待机状态下,新旧系统通过 
lscpu
 命令查看到的CPU频率存在巨大差异——原系统显示约2200 MHz,而新系统显示约2500 MHz

原系统:

CPU MHz:   2246

新系统

Kylin SP2系统BUG-待机状态CPU频率异常

客户据此并咨询了系统厂商(反馈此数值为机器物理性能,与系统无关)后,怀疑售后工程师是否在更换系统的过程中偷偷替换了硬件,以掩盖原有机器的故障。,这一质疑使得问题升级,最终移交至研发中心进行深度调查。

2. 技术侦查:排除硬件,锁定系统

面对客户的质疑,我们首先排除了硬件更换的可能性。

内存:经对比确认,前后硬件完全一致。内存插槽的调整虽然是为了NUMA平衡,但经过验证,它并非导致CPU频率显示异常的直接原因。

随后,我们开始聚焦于系统本身。通过横向对比CentOS、Kylin、UOS等多个操作系统,确认了一个关键现象:在不同系统上,
lscpu
 命令报告的CPU频率确实存在不一致。

3. 真相揭秘:被“遗忘”的 
acpi_idle
 驱动

最终的根因定位在操作系统内核层面。我们发现,出问题的SP2系统所使用的内核,没有集成或正确启用 
acpi_idle
 驱动

SP2系统查看cpu节能驱动信息

Kylin SP2系统BUG-待机状态CPU频率异常

SP2系统默认是没有管理节能状态的,SP3是开启,显示的节能状态最小是C1,这个地方按照实际对比的情况
1、没有节能管理的情况,CPU的频率只能高于基频1-3000MHZ,趋向于因为没有节能管理,所以CPU的频率会维持在一个较为平衡的状态
2、在SP3有节能管理的情况下,并且最小节能状态是C1的情况下,CPU工作时可用更快的从节能状态唤醒调控,所以CPU频率能达到2.5Ghz
3、另外针对最高是3.0Ghz的情况,做了实验,因为3.0是一个极限频率,无法全部核心都进入,绑定单核运行时可达到2.9GHZ。

以此观察是跟不同系统节能管理状态有关,操作系统升级SP2到SP3,可能内核方面也不止有这方面的优化

原理

当CPU处于空闲状态,系统会调用CPU Idle驱动来进行CPU调度使CPU核心进入低频率的状态以达到节能的效果


acpi_idle
 驱动的作用是什么?

这是Linux内核中用于管理CPU空闲状态的驱动程序。当CPU空闲时,它负责让CPU进入一系列名为“C-states”的低功耗状态(如C1, C2, C3)。CPU进入越深的C-state,功耗越低,但唤醒回最高性能状态的延迟也越高。如果该系统缺少或未正确使用此驱动,CPU可能无法有效地进入和退出低功耗状态,导致其在空闲时被“限制”在一个相对较低的性能/频率级别,无法迅速恢复到最高频率。


lscpu
 命令的原理是什么?


lscpu
 命令本身并不主动检测CPU的实时频率。它汇总显示的是从 
/proc/cpuinfo
 等系统接口读取到的信息,其中报告的CPU频率通常是内核检测到的当前频率标称的基础频率。当 
acpi_idle
 驱动缺失时,CPU长时间“卡”在了一个较低频率的状态,
lscpu
 读取并展示的正是这个被限制后的值,而非CPU所能达到的最大频率。

查看linux内核机制

内核在进行空闲cpu管理时执行的idle loop代码,会进行两步走,一是选择在CPU idle time management子系统选择空闲策略,二是进行驱动,控制硬件进入的空闲状态

Kylin SP2系统BUG-待机状态CPU频率异常

而且:CPUIdle governors独立于底层硬件

4. 解决方案与结论

我们为该SP2系统更新了包含完整驱动和正确电源管理配置的新内核。更新后,
lscpu
 显示的CPU频率恢复正常值(2500+ MHz),性能问题也随之解决。此问题后续发现也会影响CPU的能耗,导致待机状态下CPU持续保持高能耗

© 版权声明

相关文章

暂无评论

none
暂无评论...