3,012
社区成员




请问如何测量QCS8550主板的功耗信息,想要了解一下目前是否提供相应的接口/工具/驱动可以获取CPU功耗信息?
一、设备启动及热管理引擎停止
等待设备并获取 root 权限
bash
adb wait-for-device root
重新挂载设备文件系统
bash
adb wait-for-device remount
停止热管理引擎
bash
adb shell stop thermal-engine
二、设置 CPU 频率和核心控制
以将 CPU7 设置为最大频率为例,同时关闭其他核心。需要注意的是,如果要热插拔 CPU0 - 5,应先关闭 CPU1 - 5,再关闭 CPU0。
关闭 CPU1 - 6
bash
adb shell "echo 0 > /sys/devices/system/cpu/cpu1/online"
adb shell "echo 0 > /sys/devices/system/cpu/cpu2/online"
adb shell "echo 0 > /sys/devices/system/cpu/cpu3/online"
adb shell "echo 0 > /sys/devices/system/cpu/cpu4/online"
adb shell "echo 0 > /sys/devices/system/cpu/cpu5/online"
adb shell "echo 0 > /sys/devices/system/cpu/cpu6/online"
关闭 CPU0
bash
adb shell "echo 0 > /sys/devices/system/cpu/cpu0/online"
设置 CPU7 为最大频率
bash
adb shell "echo Fmax > /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq"
adb shell "echo Fmax > /sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq"
三、将 DDR/LLCC 设置为最大频率
挂载 debugfs 文件系统
bash
adb shell mount -t debugfs none /sys/kernel/debug
将所有 CPU 核心的频率调节策略设置为性能模式
bash
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu5/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor"
adb shell "echo 'performance' > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor"
设置 DDR 为最大频率
bash
adb shell "echo “Fmax” > /sys/devices/system/cpu/bus_dcvs/DDR/soc:qcom,memlat:ddr:gold/min_freq"
adb shell "echo “Fmax” > /sys/devices/system/cpu/bus_dcvs/DDR/soc:qcom,memlat:ddr:prime/min_freq"
adb shell "cat /sys/devices/system/cpu/bus_dcvs/DDR/hw_max_freq > /sys/devices/system/cpu/bus_dcvs/DDR/boost_freq"
adb shell "cat /sys/devices/system/cpu/bus_dcvs/DDR/cur_freq"
adb shell "cat /d/clk/measure_only_mccc_clk/clk_measure"
adb shell "cat /sys/devices/system/cpu/bus_dcvs/DDRQOS/hw_max_freq > /sys/devices/system/cpu/bus_dcvs/DDRQOS/boost_freq"
adb shell "cat /sys/devices/system/cpu/bus_dcvs/DDRQOS/cur_freq"
设置 LLCC 为最大频率
bash
adb shell "echo “Fmax” > /sys/devices/system/cpu/bus_dcvs/LLCC/soc:qcom,memlat:llcc:gold/min_freq"
adb shell "echo “Fmax” > /sys/devices/system/cpu/bus_dcvs/LLCC/soc:qcom,memlat:llcc:prime/min_freq"
四、记录初始 CPU 传感器温度
在运行 GBV6 之前,记录初始的 CPU 传感器温度,作为后续对比的标准值。
五、运行 GBV6 测试
使用以下命令在指定核心上运行 GBV6 单核心测试:
bash
Taskset ./geekbench_aarch64 –single-core
六、断开 USB 连接并进行功率测量
断开 USB 电缆,关闭屏幕,开始进行功率测量,直到 GB 测试完成。
七、重新连接 USB 并记录 CPU 温度
连接 USB 电缆,记录 CPU 传感器温度。确保 CPU 结温(Tj)不会触发任何热缓解机制,否则会影响性能得分。可以使用以下命令检查温度:
bash
adb shell cat /sys/class/thermal/thermal_zone*/temp
八、获取功率值和 CPU 温度并计算功率
功率计算方法
每 16 个子测试对应一次功率报告。
采用每个子测试时间段内的加权平均功率(并非 16 个子测试的简单平均值)。
仅计算 16 个活跃时间段内的平均功率,不包括空闲时间。
计算公式为:平均功率 =(16 个子测试的能量总和)/(16 个子测试的活跃时间总和)。
示例:
第 1 次测试:平均功率(APC) = 100mW,持续时间 30 秒;
第 2 次测试:平均功率(APC) = 200mW,持续时间 70 秒;
……
第 16 次测试。
平均功率 = (100 * 30 + 200 * 70 + 第 3 次测试能量 + … + 第 16 次测试能量) / (30 秒 + 70 秒 + 第 3 次测试时间 + … + 第 16 次测试时间) = XXXXmW
CPU 核心功率计算
CPU 核心功率 = APC + L1 + L2
CPU 功率 = APCx_CX + APCx_MX + MxA(不考虑 PMIC 损耗)
这是测试一个核心的方法, 重复以上的操作可以测试不同的核心的方法.