Ubuntu通过 RyzenAdj 控制AMD CPU的功耗、频率、温度阈值等(R9000k 2021 5900hx 3080)

概要

提示:在 R9000k 2021 5900hx 3080 上成功测试
Ubuntu通过 RyzenAdj 调整AMD CPU(Ryzen移动处理器)的电源管理设置。
github地址如下:https://github.com/FlyGoat/RyzenAdj
既可以被用于Linux,也有Windows的版本,具体详见github。

安装(编译)

提示:以下操作均在终端中

构建要求

构建此工具需要C和C++编译器以及cmake。它需要对NB PCI配置空间的特权访问,为了编译它,必须有可用的pcilib库和headers。

sudo apt update
sudo apt install cmake

在构建之前,请确保您有libpci依赖项。在基于Debian的发行版上,安装pcilib-dev软件包涵盖了这一点:

sudo apt update
sudo apt install libpci-dev

开始构建

git clone https://github.com/FlyGoat/RyzenAdj.git
cd RyzenAdj
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

示例(Demo)

如果我要将所有功率限制设置为45W,Tctl设置为90°C,那么命令行应该是:

sudo ./ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=90

夏季28度的情况下,实测 R9000k 2021 5900hx 3080 在此设置下跑深度学习温度压不住,会上升到100度。将所有功率限制设置为35W,Tctl设置为90°C时,温度能稳定在91度,最高偶尔会到92度。

sudo ./ryzenadj --stapm-limit=35000 --fast-limit=35000 --slow-limit=35000 --tctl-temp=90

通过以下命令可以查看当前的cpu的设置以检查有无修改成功

sudo ./ryzenadj --info

用法

提示:需要root权限

$./ryzenadj -h
Usage: ryzenadj [options]

 Ryzen Power Management adjust tool.

    -h, --help                            show this help message and exit

Options
    -i, --info                            Show information and most important power metrics after adjustment
    --dump-table                          Show whole power metric table before and after adjustment

Settings
    -a, --stapm-limit=<u32>               Sustained Power Limit         - STAPM LIMIT (mW)
    -b, --fast-limit=<u32>                Actual Power Limit            - PPT LIMIT FAST (mW)
    -c, --slow-limit=<u32>                Average Power Limit           - PPT LIMIT SLOW (mW)
    -d, --slow-time=<u32>                 Slow PPT Constant Time (s)
    -e, --stapm-time=<u32>                STAPM constant time (s)
    -f, --tctl-temp=<u32>                 Tctl Temperature Limit (degree C)
    -g, --vrm-current=<u32>               VRM Current Limit             - TDC LIMIT VDD (mA)
    -j, --vrmsoc-current=<u32>            VRM SoC Current Limit         - TDC LIMIT SoC (mA)
    -k, --vrmmax-current=<u32>            VRM Maximum Current Limit     - EDC LIMIT VDD (mA)
    -l, --vrmsocmax-current=<u32>         VRM SoC Maximum Current Limit - EDC LIMIT SoC (mA)
    -m, --psi0-current=<u32>              PSI0 VDD Current Limit (mA)
    -n, --psi0soc-current=<u32>           PSI0 SoC Current Limit (mA)
    -o, --max-socclk-frequency=<u32>      Maximum SoC Clock Frequency (MHz)
    -p, --min-socclk-frequency=<u32>      Minimum SoC Clock Frequency (MHz)
    -q, --max-fclk-frequency=<u32>        Maximum Transmission (CPU-GPU) Frequency (MHz)
    -r, --min-fclk-frequency=<u32>        Minimum Transmission (CPU-GPU) Frequency (MHz)
    -s, --max-vcn=<u32>                   Maximum Video Core Next (VCE - Video Coding Engine) (MHz)
    -t, --min-vcn=<u32>                   Minimum Video Core Next (VCE - Video Coding Engine) (MHz)
    -u, --max-lclk=<u32>                  Maximum Data Launch Clock (MHz)
    -v, --min-lclk=<u32>                  Minimum Data Launch Clock (MHz)
    -w, --max-gfxclk=<u32>                Maximum GFX Clock (MHz)
    -x, --min-gfxclk=<u32>                Minimum GFX Clock (MHz)
    -y, --prochot-deassertion-ramp=<u32>  Ramp Time After Prochot is Deasserted: limit power based on value, higher values does apply tighter limits after prochot is over
    --apu-skin-temp=<u32>                 APU Skin Temperature Limit    - STT LIMIT APU (degree C)
    --dgpu-skin-temp=<u32>                dGPU Skin Temperature Limit   - STT LIMIT dGPU (degree C)
    --apu-slow-limit=<u32>                APU PPT Slow Power limit for A+A dGPU platform - PPT LIMIT APU (mW)
    --skin-temp-limit=<u32>               Skin Temperature Power Limit (mW)
    --power-saving                        Hidden options to improve power efficiency (is set when AC unplugged): behavior depends on CPU generation, Device and Manufacture
    --max-performance                     Hidden options to improve performance (is set when AC plugged in): behavior depends on CPU generation, Device and Manufacture

可能会遇到的问题

实测发现,这个调整方法有可能会突然失效,我遇到的问题是:tdp成功调整为35w了,但是跑代码的时候tdp又变回了45w,但是在代码运行的过程中,再次调整就能将tdp稳定控制在35w。因此,只需要定时运行一下设置tdp的命令即可。
因为需要用到管理员权限,ubuntu自带的crontab很难用,我选择的是使用python来定时执行命令行,此时python需要用sudo来运行,因此还需要指定python的位置。

python代码如下,假设这个文件名为 limit_tdp.py

import os
import time
while 1:
	os.system('你的绝对路径/ryzenadj --stapm-limit=35000 --fast-limit=35000 --slow-limit=35000 --tctl-temp=90')
	time.sleep(10) # 每隔10秒执行一次
	print('成功执行')

在终端下执行代码,即可实现定时执行限制tdp的命令,保证电脑的tdp不会改变

sudo 你的python路径 limit_tdp.py

图形化界面 Ryzen Controller(可选)

提示:在 R9000k 2021 5900hx 3080 上成功安装,但是未能成功运行
Ryzen Controller
有Windows版和Linux版
gitlab地址如下:https://gitlab.com/ryzen-controller-team/ryzen-controller/
安装成功了,但是运行时就提示出错,图形化界面无法打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值