TDP电源功耗切换推演

结论

对第三方方案(「ryzenadj 硬 TDP 墙 + power-profiles-daemon/tuned 策略切换 + systemd cgroup 后台约束」三层组合)的复核结论:大方向成立,但有四处必须修正 —— ① 它与 TLP 互斥,不能像原文那样并列启用;② 原文隐含的「AMD 平台性能档(platform_profile)」在本机是空实现,实际调频走 amd_pstate 的 EPP;③ 给 nix-daemon 限流的建议在本机无收益且有害(瓶颈在窄带下载,不在 CPU);④ 原文通篇漏掉了风扇控制 —— 而本机风扇 PWM 恰好是可写的,这才是 GPD 电源工具的核心卖点之一。

补充一句定位:本机已经在用 power-profiles-daemon(桌面环境默认拉起,三档均可用),所以「启用 ppd」不是待办项,而是现状基线。

本机实测现状

判据实测
可用档位performance / balanced(当前)/ power-saver 三档齐全
调频驱动amd-pstate-epp;governor powersave;EPP balance_performance
平台性能档不存在 —— /sys/firmware/acpi/platform_profile 无此文件,ppd 自报 PlatformDriver: placeholder
TDP 工具ryzenadj 未安装,但在 nixpkgs 中(求值得 0.19.0)
其他电源工具tuned / tlp / auto-cpufreq 均未安装(后两者在 nixpkgs 中)
风扇可控性有 PWM 接口:专属风扇 hwmon 节点暴露 pwm1(当前 137/255)与 pwm1_enable(当前 2=自动),转速 3071 RPM;权限 root 可写
温度源k10temp 提供 CPU 温度(当前 61 °C)
后台限流nix-daemon 当前无任何限制(CPUQuota/MemoryMax 均为 infinity)

逐条裁决

#原文说法裁决依据 / 修正点
1Linux 无与 GPD 工具对等的单一工具,靠组合实现✅ 采信本机确无对等工具;三层机制各自存在
2ryzenadj 已收录 nixpkgs✅ 采信本机 nixpkgs 求值 ryzenadj.version = 0.19.0
3三层组合(TDP 墙 / 策略切换 / cgroup)✅ 采信(框架)但层次归属需按 4/5 修正;且缺风扇层(见 12)
4「power-profiles-daemon 或 tuned」二选一✅ 采信tuned-ppd 与 ppd 提供同一 D-Bus 接口,只能留一个
5「可选:services.tlp.enable = true;」与前两者并列启用❌ 驳回TLP 与 ppd 是互斥的电源管理层:两者都要接管调频/governor/EPP,同时开启会互相覆盖、行为不可预期。本机已在用 ppd ⇒ 不得再加 TLP
6tuned 可「映射到 ppd 接口」⚠️ 修正不是叠加而是替换:tuned-ppd 是 ppd 的兼容替代守护(同接口)。开 tuned = 不用 ppd
7(隐含)AMD 平台性能档可用❌ 修正本机平台档是空实现(placeholder);真实调节点是 amd_pstate 的 EPP,不是 platform_profile
8ryzenadj 重启失效,需服务/脚本在启动时应用✅ 采信SMU 参数非持久化,符合
9给 nix-daemon 限 CPUQuota=50% / MemoryMax=2G⚠️ 修正本机当前完全未限流。但受限于窄带代理,大构建的瓶颈是下载而非 CPU ⇒ 限 CPU 无收益;限内存反而可能让并行构建失败。不建议照抄数值
10写脚本绑快捷键复现「一键切换」体验✅ 采信可行;且本机已有桌面环境可绑定
11内核正在加入 AMD DPTCi,未来可减少对 ryzenadj 依赖⚠️ 存疑本机内核模块树中未见 dptc 相关;平台档驱动亦缺位 ⇒ 短期内不成立,标未复核
12(原文缺失)风扇曲线控制❌ 重大遗漏GPD 电源工具的主要卖点之一就是风扇曲线。本机专属风扇 hwmon 节点已暴露 pwm1/pwm1_enable(root 可写)⇒ 三层框架完全没覆盖这一层
13(原文缺失)本机已启用 ppd➕ 补充原文「整合方案」里的 services.power-profiles-daemon.enable = true; 对已是桌面默认的机器属重复声明

本机可用的四层方案

层机制本机现状落地方式(声明式)
① 硬功耗墙ryzenadj 写 SMU 的 STAPM / Fast / Slow 三档功耗限未安装,包在 nixpkgs加入系统包 + 一个在启动时套用默认档的服务(参数重启即失效)
② 策略切换power-profiles-daemon 切 EPP / 调度倾向已在运行,三档可用现状即可用;若要自定义档位语义可改用 tuned-ppd(替换而非叠加)
③ 风扇曲线专属风扇 hwmon 的 pwm1 + pwm1_enable可写(root),当前自动模式写温度—转速映射的服务(或人工脚本);原文未覆盖
④ 后台约束systemd cgroup 的 CPUQuota / MemoryMax / IOWeight未限流按需给具体服务加;本机不建议限 nix-daemon(见裁决 9)

「一键切换」= 一层脚本同时设置 ① ryzenadj 三档功耗 + ② powerprofilesctl set …(+ 可选 ③ 风扇曲线),再绑到桌面快捷键 —— 这就复现了 GPD 工具的操作体验。

不建议照搬的部分

  • TLP 与 ppd 并列启用 —— 互斥,会互相覆盖。二选一。
  • 给 nix-daemon 限流 —— 本机瓶颈是窄带下载,限 CPU 无收益;限内存可能让并行构建失败。
  • 指望平台性能档(platform_profile) —— 本机是空实现,调节要走 EPP。
  • 「未来 DPTCi 可替代 ryzenadj」 —— 本机内核未见该驱动,暂不可作为决策依据。

复核命令

powerprofilesctl list && powerprofilesctl get        # 档位齐全性与当前档
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver # 实际调频驱动(应为 amd-pstate-epp)
cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference # 当前 EPP
cat /sys/firmware/acpi/platform_profile # 平台档是否真的存在(本机无此文件)
for h in /sys/class/hwmon/*/; do echo "$(cat $h/name) $h"; done # 找风扇节点,看有无 pwm1
systemctl show nix-daemon -p CPUQuotaPerSecUSec -p MemoryMax # 后台是否被限流
nix-instantiate --eval -E 'with import <nixpkgs> {}; ryzenadj.version' # 确认包在 nixpkgs

边界

  • 本文是对第三方方案的复核与重排,不是实施记录 —— 本机未安装 ryzenadj,未改任何电源配置。
  • 功耗档的实际瓦数上限、风扇曲线是否真有传感器支撑,均未实测(需在真机上逐步试)。
  • 「DPTCi 驱动」一节的判断基于本机内核模块树的检索,未查上游内核 changelog ⇒ 标未复核。
  • 原文中的示例数值(15 W / 45 W / CPUQuota 50% 等)仅为示意,未在本机验证。