返回所有文章
工程 / TSENGCHEN BLOG

RV1126B-NPU-Temperature-Frequency-Control-Guide

09_Engineering/RV1126B NPU temputure monitor · RV1126B-NPU-Temperature-Frequency-Control-Guide

09_Engineering · 第 4 / 7 篇

保留原笔记正文与技术内容,仅脱敏敏感信息。配图按作者要求保留原样。

RV1126B NPU 温度限频修改指南

目的:给 NPU 增加温度分级限频。温度升高后先降频,避免持续高频直到触发过温关机。

1. 要改哪里

项目内容
实际修改文件/home/user/SDK/rk3xxx/kernel-6.1/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts
增加位置文件末尾
不用修改rknpu_devfreq.c、TSADC 驱动、rv1126b.dtsi

在 rv1126b-evb4-v10.dts 末尾加入以下完整代码:

&npu_opp_table {
	rockchip,temp-freq-table = <
		80000  600000
		90000  510000
		100000 396000
	>;
};

若文件已有 &npu_opp_table,只加入或替换其中的 rockchip,temp-freq-table,不要新建第二个同名节点。

2. 为什么这样改

原有 115°C Linux critical 和 120°C TSADC T_SHUT 是最后的安全保护。此表用于提前控制功耗:温度超过 80°C、90°C、100°C 时,NPU 最高频率分别限制为 600、510、396 MHz。

每项格式为 <温度 最高频率>:温度单位为毫摄氏度,频率单位为 kHz。驱动使用“严格大于”,因此温度正好 80°C 时不会触发第一档;表必须按温度从低到高排列。

RV1126B 的 NPU OPP 表有 396/510/600 MHz,但没有 RV1126 参考表中的 300 MHz,不能直接照抄 100000 300000。

3. 为什么不用改系数或驱动

NPU Devfreq 已注册到 Rockchip System Monitor。System Monitor 读取 rockchip,temp-freq-table 后,通过 Devfreq QoS 限制 NPU 最高频率。

dynamic-power-coefficient、#cooling-cells 和 thermal cooling map 属于另一套 Linux thermal cooling-device 方案,本次使用该表时不是必需项。

相关源码仅供查看:

用途路径
温度限频实现/home/user/SDK/rk3xxx/kernel-6.1/drivers/soc/rockchip/rockchip_system_monitor.c
NPU Devfreq/home/user/SDK/rk3xxx/kernel-6.1/drivers/rknpu/rknpu_devfreq.c
RV1126 参考表/home/user/SDK/rk3xxx/kernel-6.1/arch/arm/boot/dts/rv1126.dtsi

4. 编译

先确认当前目标:

cd /home/user/SDK/rk3xxx
readlink -f device/rockchip/.chip
grep RK_KERNEL_DTS_NAME output/defconfig

预期 DTS 名称为 rv1126b-evb4-v10。完成 DTS 修改后:

cd /home/user/SDK/rk3xxx
./build.sh kernel

构建完成后,按当前板卡流程更新包含新 DTB 的内核镜像。

5. 板端测试

检查 NPU 压测程序和模型:

ls -l /usr/bin/rknn_common_test \
  /usr/share/model/RV1126B/mobilenet_v1.rknn \
  /usr/share/model/dog_224x224.jpg

先跑 10 次推理:

rknn_common_test /usr/share/model/RV1126B/mobilenet_v1.rknn \
  /usr/share/model/dog_224x224.jpg 10

持续压测:

rknn_common_test /usr/share/model/RV1126B/mobilenet_v1.rknn \
  /usr/share/model/dog_224x224.jpg 100000 >/dev/null 2>&1 &

找到 NPU devfreq 目录:

for d in /sys/class/devfreq/*; do
  printf '%s: ' "$d"
  cat "$d/name"
done

假设目录为 /sys/class/devfreq/fde40000.npu,持续观察温度和频率:

while true; do
  cat /sys/class/thermal/thermal_zone0/temp
  cat /sys/class/devfreq/fde40000.npu/cur_freq
  sleep 2
done

通过条件:温度超过 80°C、90°C、100°C 后,cur_freq 分别不高于 600000、510000、396000 kHz。cur_freq 可以更低,这是正常的 Devfreq 调节结果。

首次验证可临时改低阈值,例如 50000、60000、70000;验证后恢复为实际热设计阈值并重新构建。

6. 常见问题

现象处理方法
超过阈值仍不降频确认新 DTB 已启动;查看 `dmesg
压测程序不存在Buildroot 使能 BR2_PACKAGE_RKNPU2_EXAMPLE=y 后重建 rootfs
80°C 正好不生效正常,触发条件是严格大于阈值
频率不是表中数值表定义的是最高频率,不是强制固定频率

npu_freq_scaling.sh 是手动频率切换脚本,不适合验证自动温度限频。

09_Engineering · 文档目录
上一篇RK3576-Industrial-Minimal-Buildroot-Guide下一篇RV1126B-NPU-Temperature-Limit-Test-Result