☰
高通平台实测情况分享(2): 温控cpufreq
2026/10/1 15:13:01 网站建设 项目流程

高通平台实测情况分享的第二篇。
上一篇验证驱动栈和设备树绑定,这篇继续分享实测的另一个指标温控cpufreq。

引言

实测的两台设备跑了同一套负载和采样脚本:

  • 第五代骁龙8至尊版(SM8850)(Canoe,Android 16 userdebug,kernel 6.17 mainline)。
  • 高通跃龙IQ-9075 EVK(QCS9075,Ubuntu 24.04.4,kernel 6.8.0-1080-qcom)。
    我们发现第五代骁龙8至尊版平台SM8850为密闭壳内被动散热,IQ-9075 EVK 开放空气加大散热片。同一段压测代码,两种散热与功耗策略,降频行为完全不同。

1. 两台机器的 CPU 拓扑

环境:IQ-9075 EVK(QCS9075,HTP V73,soc_model=77),Ubuntu 24.04.4。

IQ-9075:8 核 Cortex-A78C r0p2,两个 cpufreq policy 各管 4 核,频率表完全相同(1267.2–2361.6 MHz,14 档),governor 为 schedutil。同构分簇,没有大小核之分。

SM8850:8 核 Oryon 自研核(CPU implementer 0x51,part 0x002),两簇:

policy核频率范围档位governor
policy0cpu0-5384 – 3628.8 MHz28 档walt
policy6cpu6-7768 – 4396.8 MHz28 档walt

6+2 布局,大核簇频率上限 4.4GHz。governor 是 walt(Window Assisted Load Tracking),高通自研,替代了 schedutil。温区 88 个,IQ-9075 是 62 个。CPU 相关温区按核拆到 cpu-0-x-y / cpu-1-x-y 粒度。

SM8850 设备截图(设备信息与 8 核同 part 0x002、implementer 0x51):

/proc/cpuinfo里 8 个核 part 全为 0x002、implementer 0x51(Qualcomm),从 CPU part 分不出大小核,cpufreq policy 的频率上限(3628.8 对 4396.8 MHz)才是区分依据。自研核不走 ARM 的 part 编号体系,按 part 值区分簇的做法在这颗芯片上不成立。

负载程序是同一段纯浮点循环(sqrt 迭代,-O2),taskset 绑核;采样每秒记录各 policy 的scaling_cur_freq和代表温区。两台机器脚本逻辑一致,只有 policy 数和温区编号不同,SM8850 采 zone24(cpu-1-0-0)、zone17(cpullc-1-0)、zone47(ddr);IQ-9075 采 zone1(cpu-1-0-0)、zone10(soc-therm)、zone14(xo-therm)、zone11(nsp)。

SM8850 的一个读数陷阱:cpu-hw-trip-0/1两个温区恒定显示 105000,那是硬件跳闸阈值不是实测温度,可以忽略。

IQ-9075:全核满载 120 秒,零降频

每段负载之间空转冷却,起始温度 42-43°C。

场景policy0 均值policy4 均值soc-therm 起→止cpu 温区峰值
空闲 60s1483 MHz1469 MHz42.6 → 42.7°C41.9°C
单线程 60s2362 MHz1498 MHz42.7 → 42.8°C42.3°C
全核 120s2357 MHz2362 MHz42.8 → 43.8°C45.5°C

全核段 120 次采样,policy0 只有一次低于满频,出现在负载启动瞬间。policy4 全程钉在 2361.6 MHz。CPU 温区峰值 45.5°C,距 105°C 的 passive trip 还有约 60°C 余量。全部 cooling device 的cur_state全程为 0。A78C 全核满载的热负荷,在开放散热下推不到温控线。

SM8850:13 秒开始降频,稳态砍掉四成

同样的三段负载,结果完全不同。

场景policy0 均值policy6 均值cpu-1-0-0 起→止峰值
空闲 60s3629 MHz883 MHz36.6 → 36.3°C42.4°C
单线程 60s3629 MHz1027 MHz35.5 → 40.5°C43.2°C
全核 120s3545 MHz3124 MHz48.6 → 65.2°C97.7°C

全核段大核簇(policy6)的降频时间线:

时间freq6cpu-1-0-0cpullc-1-0
10s4397 MHz(满频)69.9°C73.8°C
20s3974 MHz78.0°C82.2°C
30s3648 MHz83.4°C88.0°C
50s2880 MHz90.3°C94.9°C
57-110s2669 → 2438 MHz90.3-96.9°C94.6-97.6°C

负载加上后 10 秒内温度就从 48°C 冲到 70°C,第 13 秒出现第一次降频(4397 → 4339),随后按温度阶梯式回落,一分钟内大核从 4.4GHz 压到 2.67GHz,降幅 39%。之后在 2438-2669 MHz 区间稳住,温度稳在 90-97°C。小核簇 policy0 只从 3629 降到 3398-3514(降幅 3-6%),温控优先保小核,砍大核,符合「大核单位频率发热远高于小核」的调控逻辑。

实机采样片段(8 线程 taskset 绑核起压,随后每 5 秒一行):

这一段记录的是压到 40 秒后的收尾阶段:p6 从 3129.6 MHz 两步落到 2668.8 MHz 后稳住不动,而 cpu 温区仍在 86.9 → 91.5°C 缓升。频率不再降,说明此时已进入用户态温控选定的稳态工作点,降频量刚够让温升趋缓。

一个值得注意的细节:降频发生时 cpu 温区读数 90-97°C,低于 zone24 的 passive trip 105°C,内核 thermal 框架的 cooling device(cpufreq-cpu0/cpufreq-cpu6)cur_state全程为 0。也就是说这不是内核 trip 触发的降频,设备上跑着thermal-engine-v2和android.hardware.thermal-service.qti两个用户态温控服务,按更保守的策略(大概率以 skin 温区为主控)提前介入。内核 sysfs 里看不到降温动作的执行者。

两个用户态服务在跑(pid 1753 / 29888),而cpufreq-cpu0 cur=0 max=27、cpufreq-cpu6 cur=0 max=28,27/28 级降频档位一级都没启用。排查手机温控问题时只盯 trip point 和 cooling device,会找错方向。

对照

项跃龙IQ-9075 EVK第五代骁龙8至尊版(参考机)
CPU8× A78C 同构6+2 Oryon
全核 120s 稳态频率2362 MHz(满频)大核 2438-2669 / 小核 3398-3514 MHz
大核降幅0%39-45%
首次降频时间未发生13s
CPU 温区峰值45.5°C97.7°C
降频执行者—用户态 thermal-engine-v2

两台设备的满载热负荷在触到温控线前能否被散掉,拆开看有两个因素叠加:

  • 一是芯片功耗,SM8850 的 Oryon 大核冲 4.4GHz,单位时间发热高于 A78C @2.36GHz;
  • 二是散热条件,IQ-9075 EVK 开放空气加大散热片,手机是密闭壳内被动散热。结果就是 IQ-9075 全核满载 120 秒 CPU 只到 45.5°C,距 105°C 的 passive trip 还有 60°C 余量。

对部署的含义:跑分或推理时延测试在 SM8850 这类设备上必须区分「冷机首帧」和「热机稳态」两种状态。大核稳态频率只有峰值的 55-61%,持续负载吞吐按冷机数据估算会高估近一倍;IQ-9075 EVK 上不存在这个问题。判断一台设备是否需要分开测,办法就是满载跑两分钟,看scaling_cur_freq有没有回落。

方法上的注意点

采样脚本里压测时长设为dur+5,比采样窗口长 5 秒,避免最后一秒负载先退出、频率回落污染数据。SM8850 全核段最后一个采样点 freq6=883 是负载已结束的正常回落,不计入稳态。

IQ-9075 空闲段 policy0 均值略高于 policy4,是后台服务(ssh、systemd)落在 cpu0-3 所致,两簇频率表相同,无性能差异。SM8850 空闲段 policy0 钉在满频 3629 也是同类现象(后台服务调度),walt 在轻载下倾向把任务集中到小核簇高频档运行。看空闲段的频率均值不能推断簇的性能差异,得看负载段。

两台设备都只在室温下测。IQ-9075 EVK 的「不降频」结论受散热条件保护:装进带外壳的产品形态,行为会向 SM8850 靠拢。负载类型也影响结果——本篇用的纯浮点循环主要压 CPU,若换成 GPU 或 NPU 重载(实际推理场景),功耗分布不同,降频时间线也会不同。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询