Android 读取CPU/GPU运行参数(MTK平台)

一、使用场景

  Android运行一段世时间后,系统出现卡顿

二、分析&定位问题

  系统卡顿,同时又发现芯片温度很高,怀疑是温度过高导致CPU降频,因此我们要将一段时间内CPU的运行信息打印出来。这里我们想知道CPU温度与运行频率之间的关系,所以需要输出CPU的温度和频率参数,其次还一些辅助信息,例如时间和GPU的占用率。所以需要的数据项包括:时间、CPU温度、CPU频率、GPU占用率。为了获取一段时间内的数据,我们需要编写脚本间隔1s输出一组数据,建议观察5min左右。

1.编写shell脚本,新建文件cpu_util.sh,拷贝下面的文本保存到文件中

# Des : 间隔1s输出CPU/GPU运行信息
# Ver : V1.0
# usage:
#   adb root
#   adb remount
#   adb push cpu_util.sh /system/bin/
#   adb shell
#   ./system/bin/cpu_util.sh

printf "       time         cpu_temp   cpu0~3[max-min]<cur_HZ>    cpu4~7[max-min]<cur_HZ>    gpu_rate \n"
while true
do
#temp of CPU
cpu_temp_t=$(cat /sys/class/thermal/thermal_zone1/temp)
cpu_temp=$(awk 'BEGIN{printf "%.1f\n",('$cpu_temp_t'/'1000')}')

#rate of GPU
gpu_idle=$(cat /sys/module/ged/parameters/gpu_idle)
gpu_rate=$((100-${gpu_idle}))

printf "%s   %0.1f   [%7d-%7d]<%7d>  [%7d-%7d]<%7d>    %3s    %3s   \n" \
$(date "+%Y-%m-%d-%H:%M:%S") \
${cpu_temp}  \
$(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq) \
$(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq) \
$(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq) \
$(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_max_freq) \
$(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_min_freq) \
$(cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq) \
${gpu_rate} \

sleep 1
done

2.脚本中节点说明

/sys/class/thermal/thermal_zone1/temp                                            #CPU温度
/sys/module/ged/parameters/gpu_idle                                               #GPU空闲率
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq   #cpu0~3核最大频率 
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq   #cpu0~3核最小频率
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq    #cpu0~3核当前频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_max_freq  #cpu4~7核最大频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_min_freq  #cpu4~7核最小频率
/sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq    #cpu4~7核当前频率

 * 基于Android9.0平台,其他平台的路径可能有些许差异

 * 芯片总共8核,0~3核的策率为policy0,4~7核的策率为policy4

 

3.脚本用法说明,依次运行如下命令
#   adb root
#   adb remount
#   adb push cpu_util.sh /system/bin/
#   adb shell
#   ./system/bin/cpu_util.sh
 

三、分析数据

1.部分数据如下

2.读取3min左右的数据绘制成图表如下

从上图可以看出3min内CPU频率随着温度变化的关系,大概是温度达到75度左右开始,cpu0~3核频率开始急剧下降,最后降到最低的793000HZ,保持一段时间,当CPU温度低于75度左右开始频率变高。

测试发现系统卡顿时也是这段时间,所以得出结论,CPU温度升高导致降频率,进而导致系统运行卡顿。

定位到系统卡顿是因为CPU温度升高导致,后续可以从两方面进行优化:

 1)分析哪些应用占用CPU特别高,优化对应应用CPU占用率

 2)从硬件结构分析,提高CPU的散热效率

 

这次对系统卡顿问题的分析就到这里,分析步骤写的比较简单,如果哪些地方写的不对或者有哪些地方不懂的可以给我留言,谢谢!

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值