关于 Intel-lpmd 在 Fedora 下的调教

Intel-lpmd:全称“Intel Low Power Mode Daemon”,是 Intel 官方出的一个号称可以改良“大小核调度”的后台调控服务,那既然是官方出的,肯定是有过人之处的,当然这个服务在官方看来仅仅支持大小核系列,非大小核 CPU 用它也没有意义。而且这个服务以“针对特定型号调教”为目标的,会允许用户或者 OEM 给出专门的 XML 配置文件来优化能耗。

之所以说这些,是因为这个服务前一阵应该是被 Fedora 设置为默认安装了,而且更巧的是前一阵 Fedora 推出了一个版本更新,更新中说明了这次增加了 Arrow Lake-H 与 WildCat Lake 两个 CPU 的支持。

c22ee555-d2a3-4aca-a3b1-9f55f73ebbb6.png

我作为 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_lpmd

ARL-H 的能耗比没感觉有太大提升 1215U 倒是效果显著,看网页整机功耗经常只有 5W。

👍❤️😂🎉🔥👀🤡🤔

1 条评论

  1. Karuboniru
    2026-09-17 21:47 GNU/Linux x64Firefox 156.0中国北京市北京市

    这东西在我电脑(13 代的老平台)上更加神秘,因为没有了 WLTHint 整套机制只能走占用率这个系统。而基于占用率识别的切换逻辑没有防抖——然后结果就是跑正常网页浏览的时候以 1 Hz 的频率左右横跳。

    以及你的配置的一个微妙的问题是 smp_affinity 在回到全核心启用的时候不会恢复,而是会全部变成 0xffff 的样子,结果就是设备 irq 在系统回到性能模式之后还绑定在 E/L 核上。

    👍👎🤡❤️🔥👀😂🤔

添加新评论

😂🤡😎😡😁😋😭😑

目录

__empty__