tlp踩坑及最终配置
TLP 手册里写得太含糊了,实际行为和字面意思完全不一样!
真实行为:
| 参数 | 字面意思 | 实际行为(i915 核显) |
|---|---|---|
| INTEL_GPU_MIN_FREQ_ON_AC | 最小频率 | 几乎没用,i915 驱动基本忽略它,最低频率还是会掉到 200~300MHz |
| INTEL_GPU_MAX_FREQ_ON_AC | 最大频率 | 关键!这个值 = 你强行给核显设置的“频率上限”。只要这个值被写进去,核显就永远不会超过这个频率,但更重要的是:只要这个值被设置了,i915 驱动就进入“固定频率模式”,哪怕你什么都不干,它也会尽量往这个频率靠,导致空闲频率也居高不下! |
也就是说:
- 你写了 INTEL_GPU_MAX_FREQ_ON_AC = 1450,就等价于:“核显,给我一直跑 1400MHz 左右,别降频了!”
- 你写了 INTEL_GPU_MAX_FREQ_ON_AC = 900,就变成:“核显,给我一直跑 850~900MHz 左右,别降了!”
根据 Linux 社区(尤其是 Arch Linux 论坛和 GitHub 上的 i915 驱动相关讨论)的广泛报告和经验,你的总结是真实的。
为什么 INTEL_GPU_MAX_FREQ_ON_AC 会导致高空闲频率?
这个问题涉及到 Linux i915 驱动处理 GPU 频率调节(也称为RC6 状态、渲染空闲状态和频率控制)的方式:
-
⚙️ i915 驱动的频率控制
-
i915 驱动通常使用一个内核组件——
intel_pstate或者早期的intel_cpufreq——来管理 CPU 和集成 GPU 的频率。 -
在默认(自适应)模式下,驱动会根据当前的工作负载和功耗限制,动态地在 最小频率 (Min) 和 最大频率 (Max) 之间进行调节。当系统空闲时,驱动会积极地将频率降到最低(例如 200MHz 或 300MHz),以进入低功耗状态(RC6)。
-
-
⚠️ 设定最大频率的副作用
-
当你通过 TLP 或直接通过
/sys文件系统(通常是/sys/class/drm/card0/gt_max_freq_mhz)写入一个最大频率值时,你实际上是在给驱动程序设置了一个硬性上限。 -
然而,在某些版本的内核和驱动中,一旦你手动设置了最大频率,驱动程序的内部调频机制可能会切换到一个更激进或更不灵活的模式(有时被称为 “固定性能状态” 或 “限制模式”)。
-
在这种模式下,驱动可能不再积极地寻找最低频率或进入深度 RC6 状态,而是更倾向于在接近最大设置值(例如 到 )的范围内波动,即使当前负载为零。
-
核心原因推测: 驱动可能将用户设定的最大频率视为一个“性能期望”,认为用户不希望 GPU 降到太低的频率,以确保随时都能快速响应,从而牺牲了空闲功耗。
-
-
📉
INTEL_GPU_MIN_FREQ_ON_AC几乎无效- 至于
INTEL_GPU_MIN_FREQ_ON_AC,它通常会被驱动忽略,因为驱动的默认行为就是在空闲时尽可能地降频到芯片支持的最低频率。如果你想提升最低频率,通常需要使用i915.enable_guc等内核参数来启用更高级的电源管理功能,或者直接修改内核的最小时钟寄存器,而 TLP 的这个配置项往往只对少数非常老的核显有效,或在特定配置下才有效。
- 至于
💡 结论和最佳实践
| 参数 | 字面意思 | 社区实测/源码行为 |
|---|---|---|
INTEL_GPU_MAX_FREQ_ON_AC | 设置频率上限 | 关键:强制设置上限,并可能导致 i915 驱动进入**“高空闲频率模式”**。 |
INTEL_GPU_MIN_FREQ_ON_AC | 设置频率下限 | 通常被忽略,驱动仍会降到最低原生频率(200-300MHz)。 |
最佳实践:
如果你想要最好的功耗控制和低空闲温度,通常的建议是不要设置 INTEL_GPU_MAX_FREQ_ON_AC(即让 TLP 保持其默认或注释状态),让 i915 驱动完全自主控制频率。只有在你需要限制高性能游戏时的发热或功耗时,才将其设置为一个低于默认睿频的值。
目前的配置:
tlp = { enable = true; settings = { # 核心CPU能耗性能策略: CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance"; CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
# CPU 睿频 (Turbo Boost): CPU_BOOST_ON_AC = 1; CPU_BOOST_ON_BAT = 0;
# 硬件 P-States 动态睿频: CPU_HWP_DYN_BOOST_ON_AC = 1; CPU_HWP_DYN_BOOST_ON_BAT = 0;
# 平台电源配置文件(固件级): PLATFORM_PROFILE_ON_AC = "performance"; PLATFORM_PROFILE_ON_BAT = "low-power";
# PCIE (PCI Express) 主动状态电源管理 (ASPM): PCIE_ASPM_ON_AC = "default"; PCIE_ASPM_ON_BAT = "powersave";
# 新增:CPU频率缩放Governor CPU_SCALING_GOVERNOR_ON_AC = "powersave"; CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
# 新增:CPU最小/最大性能百分比 CPU_MIN_PERF_ON_AC = 0; CPU_MAX_PERF_ON_AC = 100; CPU_MIN_PERF_ON_BAT = 0; CPU_MAX_PERF_ON_BAT = 80; # 根据需求调整
# 掉电保护:电池模式下加快数据刷盘 MAX_LOST_WORK_SECS_ON_BAT = 15;
# NVIDIA独显电源管理 RUNTIME_PM_ON_AC = "auto"; RUNTIME_PM_ON_BAT = "auto";
# USB、声音、WiFi优化 USB_AUTOSUSPEND = 1; SOUND_POWER_SAVE_ON_AC = 0; SOUND_POWER_SAVE_ON_BAT = 1; WIFI_POWERSAVE_ON_AC = 0; WIFI_POWERSAVE_ON_BAT = 1; # DEVICES_TO_DISABLE_ON_STARTUP = "bluetooth"; # 可选,禁用启动时设备 }; };文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!