关于 Intel-lpmd 在 Fedora 下的调教
Intel-lpmd:全称“Intel Low Power Mode Daemon”,是 Intel 官方出的一个号称可以改良“大小核调度”的后台调控服务,那既然是官方出的,肯定是有过人之处的,当然这个服务在官方看来仅仅支持大小核系列,非大小核 CPU 用它也没有意义。而且这个服务以“针对特定型号调教”为目标的,会允许用户或者 OEM 给出专门的 XML 配置文件来优化能耗。
之所以说这些,是因为这个服务前一阵应该是被 Fedora 设置为默认安装了,而且更巧的是前一阵 Fedora 推出了一个版本更新,更新中说明了这次增加了 Arrow Lake-H 与 WildCat Lake 两个 CPU 的支持。
我作为 Arrow Lake-H 用户也是第一时间更新,首先可以看到 LPMD 很成功的识别了我的处理器 ARL-H,并且启用了配置文件:/etc/intel_lpmd/intel_lpmd_config_F6_M197.xml,结果用了一会就感觉不对劲了,查看了一下这个配置文件,看到一开始的注释我就绷不住了。
<?xml version="1.0"?>
<!--
Intel Energy Optimizer (LPMD) configuration for Arrow Lake-H
(family 6, model 0xC5 / 197).
Performance (PerformanceDef=-1) -> LPMD_OFF -> all CPUs active
Balanced (BalancedDef= 0) -> LPMD_AUTO -> E+L cores only (P-cores parked)
Powersaver (PowersaverDef= 1) -> LPMD_ON -> L-cores only
Design: P-cores are NEVER used in Balanced mode. All WLT states use
ActiveLcores=ALL + ActiveEcores=ALL (topology-portable, not hardcoded
CPU numbers). EPP/EPB vary per WLT state to spread the power-performance
tradeoff across E+L cores. If the user wants P-cores, they select
Performance mode or disable LPMD.
我不知道这是用什么大脑想出来的调度模式,尤其是这句“ P-cores are NEVER used in Balanced mode”,大部分笔记本都是用 Balanced Mode,你这玩意直接让人家大核歇菜,那能耗比是上去了,性能岂不是一落千丈了?你就这么信任 Intel 的小核和小小核?
而且要命的是这玩意还成功推入了 Stable,我查看了一下好像还是默认预装的,不知道后续有多少人会遭殃。我看了下 Bug 列表已经有很多人炸了:
https://bugzilla.redhat.com/show_bug.cgi?id=2532653
修复也很简单,可以参考 Buglist 里的,也可以直接外包 AI 写一个:
我建议修改成这样:
<?xml version="1.0"?>
<Configuration>
<lp_mode_cpus></lp_mode_cpus>
<lp_mode_epp></lp_mode_epp>
<Mode>1</Mode>
<PerformanceDef>-1</PerformanceDef>
<BalancedDef>0</BalancedDef>
<PowersaverDef>1</PowersaverDef>
<HfiLpmEnable>0</HfiLpmEnable>
<WLTHintEnable>1</WLTHintEnable>
<WLTHintPollEnable>1</WLTHintPollEnable>
<HfiSuvEnable>0</HfiSuvEnable>
<WLTHintMask>15</WLTHintMask>
<IgnoreITMT>0</IgnoreITMT>
<States>
<CPUFamily> 6 </CPUFamily>
<CPUModel> 197 </CPUModel>
<CPUConfig> * </CPUConfig>
<State>
<ID> 1 </ID>
<Name> UTIL_IDLE </Name>
<WLTTypeMask> 3 </WLTTypeMask>
<ActiveLcores>ALL</ActiveLcores>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>1</IRQMigrate>
<EPP>192</EPP>
<EPB>8</EPB>
</State>
<State>
<ID> 2 </ID>
<Name> UTIL_IDLE_SUSTAIN </Name>
<WLTType> 2 </WLTType>
<ActivePcores>ALL</ActivePcores>
<ActiveLcores>ALL</ActiveLcores>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>0</IRQMigrate>
<EPP>64</EPP>
<EPB>4</EPB>
</State>
<State>
<ID> 3 </ID>
<Name> UTIL_IDLE_BURSTY </Name>
<WLTType> 3 </WLTType>
<ActivePcores>ALL</ActivePcores>
<ActiveLcores>ALL</ActiveLcores>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>0</IRQMigrate>
<EPP>128</EPP>
<EPB>6</EPB>
</State>
</States>
</Configuration>
基本策略就是在 Balance 下 P 核心只有在必要的时候启动,低负载可以适当关闭。
参考这个设置,我给另一个大小核的 1215U 的笔记本也写了一个独立的配置文件:/etc/intel_lpmd/intel_lpmd_config_F6_M154_T15.xml,如果你不知道你的 CPU 对应的配置文件,可以查看 lpmd 服务日志,看它寻找哪个文件,你就创造哪个文件.
<?xml version="1.0"?>
<Configuration>
<lp_mode_cpus></lp_mode_cpus>
<lp_mode_epp></lp_mode_epp>
<Mode>1</Mode>
<PerformanceDef>-1</PerformanceDef>
<BalancedDef>0</BalancedDef>
<PowersaverDef>1</PowersaverDef>
<HfiLpmEnable>1</HfiLpmEnable>
<WLTHintEnable>1</WLTHintEnable>
<WLTHintPollEnable>1</WLTHintPollEnable>
<HfiSuvEnable>0</HfiSuvEnable>
<WLTHintMask>15</WLTHintMask>
<util_entry_threshold>10</util_entry_threshold>
<util_exit_threshold>70</util_exit_threshold>
<IgnoreITMT>0</IgnoreITMT>
<States>
<CPUFamily> 6 </CPUFamily>
<CPUModel> 154 </CPUModel>
<CPUConfig> * </CPUConfig>
<State>
<ID> 1 </ID>
<Name> UTIL_IDLE </Name>
<WLTTypeMask> 3 </WLTTypeMask>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>1</IRQMigrate>
<EPP>192</EPP>
<EPB>8</EPB>
</State>
<State>
<ID> 2 </ID>
<Name> UTIL_IDLE_SUSTAIN </Name>
<WLTType> 2 </WLTType>
<ActivePcores>ALL</ActivePcores>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>0</IRQMigrate>
<EPP>64</EPP>
<EPB>4</EPB>
</State>
<State>
<ID> 3 </ID>
<Name> UTIL_IDLE_BURSTY </Name>
<WLTType> 3 </WLTType>
<ActivePcores>ALL</ActivePcores>
<ActiveEcores>ALL</ActiveEcores>
<IRQMigrate>0</IRQMigrate>
<EPP>128</EPP>
<EPB>6</EPB>
</State>
</States>
</Configuration>
同样的基本策略,写入文件后重启 lpmd 服务即可
systemctl restart intel_lpmd
systemctl status intel_lpmdARL-H 的能耗比没感觉有太大提升 1215U 倒是效果显著,看网页整机功耗经常只有 5W。

这东西在我电脑(13 代的老平台)上更加神秘,因为没有了 WLTHint 整套机制只能走占用率这个系统。而基于占用率识别的切换逻辑没有防抖——然后结果就是跑正常网页浏览的时候以 1 Hz 的频率左右横跳。
以及你的配置的一个微妙的问题是 smp_affinity 在回到全核心启用的时候不会恢复,而是会全部变成 0xffff 的样子,结果就是设备 irq 在系统回到性能模式之后还绑定在 E/L 核上。