: 温控cpufreq)
高通平台实测情况分享的第二篇。上一篇验证驱动栈和设备树绑定这篇继续分享实测的另一个指标温控cpufreq。引言实测的两台设备跑了同一套负载和采样脚本第五代骁龙8至尊版(SM8850CanoeAndroid 16 userdebugkernel 6.17 mainline。高通跃龙IQ-9075 EVKQCS9075Ubuntu 24.04.4kernel 6.8.0-1080-qcom。我们发现第五代骁龙8至尊版平台SM8850为密闭壳内被动散热IQ-9075 EVK 开放空气加大散热片。同一段压测代码两种散热与功耗策略降频行为完全不同。1. 两台机器的 CPU 拓扑环境IQ-9075 EVKQCS9075HTP V73soc_model77Ubuntu 24.04.4。IQ-90758 核 Cortex-A78C r0p2两个 cpufreq policy 各管 4 核频率表完全相同1267.2–2361.6 MHz14 档governor 为 schedutil。同构分簇没有大小核之分。SM88508 核 Oryon 自研核CPU implementer 0x51part 0x002两簇policy核频率范围档位governorpolicy0cpu0-5384 – 3628.8 MHz28 档waltpolicy6cpu6-7768 – 4396.8 MHz28 档walt62 布局大核簇频率上限 4.4GHz。governor 是 waltWindow 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 0x51Qualcomm从 CPU part 分不出大小核cpufreq policy 的频率上限3628.8 对 4396.8 MHz才是区分依据。自研核不走 ARM 的 part 编号体系按 part 值区分簇的做法在这颗芯片上不成立。负载程序是同一段纯浮点循环sqrt 迭代-O2taskset 绑核采样每秒记录各 policy 的scaling_cur_freq和代表温区。两台机器脚本逻辑一致只有 policy 数和温区编号不同SM8850 采 zone24cpu-1-0-0、zone17cpullc-1-0、zone47ddrIQ-9075 采 zone1cpu-1-0-0、zone10soc-therm、zone14xo-therm、zone11nsp。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 全核满载的热负荷在开放散热下推不到温控线。SM885013 秒开始降频稳态砍掉四成同样的三段负载结果完全不同。场景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-010s4397 MHz满频69.9°C73.8°C20s3974 MHz78.0°C82.2°C30s3648 MHz83.4°C88.0°C50s2880 MHz90.3°C94.9°C57-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 devicecpufreq-cpu0/cpufreq-cpu6cur_state全程为 0。也就是说这不是内核 trip 触发的降频设备上跑着thermal-engine-v2和android.hardware.thermal-service.qti两个用户态温控服务按更保守的策略大概率以 skin 温区为主控提前介入。内核 sysfs 里看不到降温动作的执行者。两个用户态服务在跑pid 1753 / 29888而cpufreq-cpu0 cur0 max27、cpufreq-cpu6 cur0 max2827/28 级降频档位一级都没启用。排查手机温控问题时只盯 trip point 和 cooling device会找错方向。对照项跃龙IQ-9075 EVK第五代骁龙8至尊版参考机CPU8× A78C 同构62 Oryon全核 120s 稳态频率2362 MHz满频大核 2438-2669 / 小核 3398-3514 MHz大核降幅0%39-45%首次降频时间未发生13sCPU 温区峰值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有没有回落。方法上的注意点采样脚本里压测时长设为dur5比采样窗口长 5 秒避免最后一秒负载先退出、频率回落污染数据。SM8850 全核段最后一个采样点 freq6883 是负载已结束的正常回落不计入稳态。IQ-9075 空闲段 policy0 均值略高于 policy4是后台服务ssh、systemd落在 cpu0-3 所致两簇频率表相同无性能差异。SM8850 空闲段 policy0 钉在满频 3629 也是同类现象后台服务调度walt 在轻载下倾向把任务集中到小核簇高频档运行。看空闲段的频率均值不能推断簇的性能差异得看负载段。两台设备都只在室温下测。IQ-9075 EVK 的「不降频」结论受散热条件保护装进带外壳的产品形态行为会向 SM8850 靠拢。负载类型也影响结果——本篇用的纯浮点循环主要压 CPU若换成 GPU 或 NPU 重载实际推理场景功耗分布不同降频时间线也会不同。