一、使用场景

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.shprintf "       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的散热效率

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

Android 读取CPU/GPU运行参数(MTK平台)相关推荐

  1. Android系统定制源码修改 - MTK平台

                                         Android系统定制源码修改 -  MTK平台  1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...

  2. Android 系统性能优化(57)---MTK 平台开关机、重启时间优化

    MTK 平台开关机.重启时间优化  开关机.重启时间优化   开机性能优化:是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义:  有些产品设计开机动画非常酷炫,动画图片过多.高帧率 ...

  3. android 性能优化---(2) MTK 平台开机时间优化

    一.在工程模式开启MTKLogger, 开机后取日志bootprof  adb pull /storage/emulated/0/mtklog/mobilelog/APLog_2018_0309_10 ...

  4. mtk android 笔记,Android驱动笔记(9)——MTK平台Sensor Bring Up

    sensor的img位于scp.img 9.1.在成熟的平台Bring Up 在已知的平台上驱动并验证一个器件是很常见的工作.因为管脚等基本不需要重新配置.所以只需要按照一般步骤驱动即可.驱动代码位置 ...

  5. Android 系统性能优化(12)---MTK 平台UX性能分析方法

    1.Android UX 性能分析 UX 性能 KPI - App Launch.FPS.Game.Benchmark • 建议所有机型都做UX 测试,建立各厂家机型性能内部数据库 • 测试指标的选取 ...

  6. android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)

    来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...

  7. Android 系统性能优化(75)---MTK 平台perfomance问题的基本信息确认

    perfomance问题的基本信息确认   在debug performance问题时候,常常遇到由于debug功能导致的performance问题.  1:确认是否为eng版本? adb shell ...

  8. Android Q MTK平台开关机铃声

    google 默认开机动画代码在framework/base/cmds/bootanimation MTK 开机动画代码在vendor/mediatek/proprietary/operator/fr ...

  9. GPS之MTK平台代码小结以及gps协议注释

            分类:             通信硬件与通讯协议              2014-10-20 09:55     337人阅读     评论(0)     收藏     举报   ...

最新文章

  1. HDU 2066 一个人的旅行
  2. 武汉大学计算机学院学生寝,多彩青春一路同行——记武大计算机学院计科2班...
  3. net use命令详解
  4. 某公司有一台打印、复印一体机,需要将购买成本分年均摊到隔年的费用中。请编写一个程序,根据用户输入的购买金额和预计使用年限计算每年的分摊费用。要求对输入异常进行适当的处理。
  5. oracle 删除系统用户,Oracle数据库如何创建和删除用户
  6. 不借助任何变量进行变量交换
  7. Docker系列五~docker安装php-fpm
  8. matlab 异步程序代码,正弦波电压源供电时三相异步电动机系统动态运行MATLAB仿真源程序...
  9. 风险预测模型_【期刊导读】长期NA治疗的慢乙肝患者也有专属肝癌风险预测模型...
  10. HDU2020 绝对值排序【入门】
  11. Python + Graphviz 绘制神经网络结构图
  12. 康托尔连续统假设(CH)不成立
  13. ES6 对象数组查找某一个对象
  14. python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
  15. 学历证书查询唯一网站
  16. 推荐搜索的冷启动问题
  17. SQL SERVER 为现有表中增加列
  18. 2020年白领年终奖报告来了,平均值为7826元
  19. 2016年8月27日 星期六 --出埃及记 Exodus 16:28
  20. ytu1904——寄居蟹与海葵

热门文章

  1. 怎么做表情包微信gif?好用的制作方法介绍
  2. mysql insert 返回值是什么_各种SQL Insert 返回值
  3. python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘) ...
  4. 评估酒店营销效果的12个重要KPI指标
  5. 数据库组成和存储引擎
  6. 《C++面向对象程序设计》董正言、张聪版内容概括
  7. 面试必问题之Docker分布式搭建
  8. 树莓派4B使用MJPG-Streamer
  9. Python文本分析(NLTK,jieba,snownlp)
  10. Ubuntu 18.04 安装搜狗输入法