发布于 ,更新于 

AMD P-STATE 折腾历程

介绍

amd-pstate 是 AMD CPU 性能扩展驱动程序,它在 Linux 内核的现代 AMD APU 和 CPU 系列上引入了新的 CPU 频率控制机制。新机制基于协作处理器性能控制 (CPPC),它提供比传统 ACPI 硬件 P-States 更精细的频率管理。当前的 AMD CPU/APU 平台使用 ACPI P-states 驱动程序来管理 CPU 频率和时钟,仅在 3 个 P-states 中切换。 CPPC 取代了 ACPI P-states 控件,并允许 Linux 内核使用灵活、低延迟的接口直接将性能提示传达给硬件 (摘自 Kernel Docs

折腾

这玩意支持 AMD ZEN 2 和更新版本,我的荣耀本使用 R7-4800H,理论上可以跑,于是按照 Aya 的博客 添加了内核参数

1
$ zfs set org.zfsbootmenu:commandline="rw amd_pstate=passive" zroot/ROOT

然后就没管了。

有一天忘记从哪里又看见了 AMD P-State,然后发现一个验证方法,跑了一下:

1
2
3
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver

acpi-cpufreq

我去,这我可忍不了。于是我先检查内核 module 有没有 AMD P-State 存在,结果是没有。但是检查内核 config

1
2
3
$ zcat /proc/config.gz | grep PSTATE

CONFIG_X86_AMD_PSTATE=y

那得了,这玩意都 built-in 了咋可能不存在?于是检查日志:

1
$ journalctl -b 0 | grep pstate

经过群友提醒,我使用翻译发现第一次设置的 passive 可能出了些幽灵字符导致无法识别,再设置一次才出现了根本问题

得到

1
_CPC object is not present in SBIOS

哈哈荣耀操你妈的,这问题不就一眼顶针了?傻逼厂商的傻逼主板又没有把 CPPC 的选项留给我自己设置捏。

tg 群里:
我:好像是硬件的问题,傻逼荣耀。
群友:试试 Smokeless_UMAF?discussion 里有 CPPC 相关的东西。

随后我想起来当时用 Smokeless_UMAF 把傻逼荣耀设置的 512M 显存干到 4G 的过程,心想这玩意也能设置?事实上,是的。

我手上有一个现成的 ventoy 盘,于是直接拿来使用,扔进去 为 ventoy 提前制作好的 img 镜像 就能启动了。

另外提醒一句,UMAF 基于一个漏洞,这个漏洞貌似联想在去年三月份就修复了,所以不一定能正常启动。蛤蛤,但是傻逼荣耀已经三年没更新过任何驱动了,所以我怕个吊,直接开干。
同时,这玩意不开源,恶意代码存在可能性待议,但是利用漏洞 Hack 主板设置肯定有变砖的风险存在。因此 USE AT YOUR OWN RISK。有条件的建议备份一下 BIOS(有刷写工具的情况下),或者直接买六七个 BIOS 芯片,坏了直接换上。

但是我电脑太冷门了,没有卖的,手上还没有刷写工具,但是保修期内,大不了送回去修,我还有机房电脑可以用。

按照 discussion #29 的做法,进入 Device Manager - AMD CBS - NBIO - SMU page,启用 CPPC,直接一路 esc 出来,它会提醒你选择是否保存,保存后会直接重启。

再次

1
2
3
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver

amd-pstate

就这样,没了,感谢阅读。