推广 热搜: 公司  快速  上海  中国    未来  企业  政策  教师  系统 

手机功耗问题解决方案手机定位系统「手机功耗问题解决方案」

   日期:2025-01-25     作者:rdu537    caijiyuan   评论:0    移动:http://keair.bhha.com.cn/mobile/news/7901.html
核心提示:极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能  本篇文章主要介绍

极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

 

本篇文章主要介绍手机开发中的功耗部分知识点功耗直接影响到手机的待机时间,通过阅读本篇文章,您将收获以下内容:

一、手机功耗问题浅析博文
二、Sleep 、suspend
三、SPM (System Power Manager)
四、Deep idle
五、SODI (screen on deep idle)
六、systrace/ftrace
七、wireshark
八、layerdump
九、如何确定阻止进入suspend的原因
十、如何分析wakelock(wakeup source)持锁问题
十一、如何看SPM的状态是否正确
十二、如何查找待机唤醒源
十三、如何找到阻止进入deep idle / SODI的元凶

手机功耗问题直接影响到手机的待机时长,因此,解决功耗篇问题对于智能机十分必要。
之前有写过一个功耗浅析的文章,可以先参考下
手机功耗问题浅析博文

这里的确切的说是的 ,也就是进入状态;因为对整个系统来说,进是整个系统睡眠的先决条件,我们也是从是否进入开始,从的角度来说,进入就是完全不跑了,停在里面。

从灭屏到进入的大体流程框架如下:

从灭屏到`CPU`进入suspend的大体流程框架

相关code路径

因为整个系统不只是,还包括等子系统
CPU 进入 WFI 后,整个系统就依靠一颗  来控制睡眠/唤醒的流程,它会去关注各个子系统的状态

SPM =System Power Manager
它掌控着之后系统是否能掉到最小电流的关键逻辑,你可以把它理解成一个投票机制,当系统的关键资源)没有任何人使用的时候,它就会让系统进入一个真正的深睡状态(最小电流)只要它检测到有任何资源请求还没释放,系统就无法降到底电

所以在底电问题上的流程中,我们不仅仅要看有没有成功,还要看的状态是否正确,里面有一个可编程控制器。在进去之前会把的写入,然后就依据的逻辑来控制的工作

跟强相关的一个东西就是系统中的时钟请求信号,也就是时钟开关的控制逻辑;因为系统工作在最小电流的时候,只依靠时钟工作;因此要判断系统是不是已经到深睡状态,就要看有没有关闭

时钟的控制逻辑概要如下图

26M 时钟控制逻辑

所以从上图我们就可以看到, 有没有关,就只要看这个信号有没有关闭;而对这个信号的输出以及子系统的信号输入,都会记录在的寄存器里面,这个就是我们通过排查的依据

代码路径

Deep idle 基本概念

首先顾名思义,这是一种进入空闲后的状态,也就是在进程中执行的

简单地说,会在进入空闲的情况下,再去关闭一些不必要的,以达到最省电的目的,因为空闲的时候,其实系统中有不少的也是不需要运行的,不这样做的话,就仅仅是这块的电省下来 ,达不到省电的目的。

Mediatek的做法是在在进入进程后,会去判断当前系统的状态是否满足进入更省电状态的条件,首先就会检查是否能进入,因为dpidle最省电

系统进入dpidle需要满足的条件是

  • 单核(BY_CPU
  • 预设的能block deep idle的所有clock都已经关闭(BY_CLOCK
  • CPU在2ms内没有从idle task调度出去的需求(BY_TMR
  • BY_VTG / BY_OTH的case很少(BY_OTH在个别平台跟TEE(SPI指纹模块)有关

我们可以从波形上检查系统是否进入deep idle

下图中电流的底部就是的状态,在播放的状态大约
如果没有进,这个底部会被抬高

deep idle的状态

也是由来控制它的执行逻辑,跟一样,在进去之前会把的写入,这个跟是完全不一样的。

SODI:Screen On Deep Idle
跟类似,是SPM的另外一种工作模式.的进入条件跟 是类似的,区别只是要检查的跟不完全一样 ,对功耗的影响相对于是不一样的

前面讲过了的差别,其实就很容易理解这一点:因为下,CPU不用送数据出去,因此可以不用送,这整条路径上的东西都可以关闭,而且跟VDO相比也可以做更多省电的;所以对的省电效果会比VDO的效果更明显,是否进入SODI也可以从波形上明显地看到

下图示的波形比较

CMD mode:SODI on(左) vs SODI off(右)

CMD mode

VDO mode:SODI on(左) vs SODI off(右)

VDO mode

重点关注波形的形状,电流下降的数值不同平台不一样

 也是我们分析功耗问题常用的工具,可以帮你定位到是谁在使用CPU,也可以用来分析idle状态下的毛刺波形是谁触发的,来定位。

为什么要使用
是我们用来分析的一个工具.通常用来定位开数据连接的待机功耗问题,查找是哪个在使用数据可以在公共网络上下载到,一般公司负责这些部门也会有这个工具

怎么使用
首先需要在抓时,打开中的,就可以找到对应的文件

netlog

 

用打开这个文件,界面如下

用wireshark打开这个.cap文件

有时候最前面的【时间戳】格式会不对,会跟对不上,如果遇到了,可以通过如下菜单调整

时间戳格式

查看图层的 命令

下面是界面的图层:

launcher的图层

系统没有进入,主要的原因是 因为系统有锁导致.

锁一般分为

  • 通过拿锁
  • 以及.

分析上层持锁的问题
目前的log 默认不会打开,可以通过修改

通过:搜索关键字total_time= 来确定持锁的时间.

的锁默认不会打印出来,一般是待机结束后通过节点来获取

名称解释active_count:对应wakeup source被激活的次数.event_count:被信号唤醒的次数wakeup_count:中止suspend的次数.expire_count:对应wakeup source超时的次数.active_since:上一次还活跃的时间点.时间单位跟kernel log前缀时间是一样(kernel单调递增时间).total_time:对应wakeup source活跃的总时长.max_time:对应的wakeup source持续活跃最长的一次时间.last_change:上一次wakeup source变化的时间(从持锁到释放or释放到持锁),时间单位跟kernel log前缀时间是一样(kernel单调递增时间).prevent_suspend_time:对应wakeup source阻止进入autosleep的总累加时间.

一般情况下:
如果是复现机,前面没有捉,也没有,只有一份
可以看下,一般时间越大越可能是阻止系统进入的.

如果测试前后,都有捉  请对比两份的的差值.
差值时间跟灭屏的时间对得上,一般就是这个锁引起的问题.

比两份`wakeup_sources.log`的`total time`的差值

把捉出来的复制到表格中,比较好对齐,一个是比较好计算.

image.png

其中,的时间有 也就是总共有

image.png

或者在待机测试结束后通过命令

底层的锁

上层的锁

待机被唤醒之后,确认:大部分最后的bit位是不是 f or ff, 说明系统还有模块咬住,系统并没有最后进入真正的.

譬如下面的 最后 位是 0 都是有问题的

 0

0

系统场景的唤醒源如下

  • EINT
  • CONN
  • CLDMA

EINT:

PMIC的唤醒.

  • a.Powerkey
    唤醒后面的会有 pwrkey_int_handler

  • b. rtc alarm
    唤醒后面的会有 alarm time is up

rtc alarm

具体类型的唤醒包,可以确认
从里面搜索关键字 wakeup alarm

 wakeup alarm 

一般的唤醒,除了第三方APK之外,有时会遇到类似的唤醒.
确认具体android的唤醒的原因,需要确定唤醒后,紧接着发下来的事件.

 Broadcast: Intent { act=android.content.syncmanager.SYNC_ALARM· flg=0x114 (has extras) } ordered=true userid=0 callerApp=null·

搜索android.content.syncmanager.SYNC_ALARM ,可以定位到
进一步找对应owner确认.

phone apk的唤醒

数据网络的定时恢复.

  • c. others

有关键字EINT.is pending*
序号:,,需要结合DCT跟cat /proc/interrupts

1.通过DCT

通过DCT

2.对应的序号是

CLDMA:
确认唤醒的关键字CLDMA_MDwakeup source

CLDMA 唤醒源确认

 

常用的唤醒的channel

[channel 10]

channel 10

 

常见的AT command的唤醒:参考下面【常见AT 命令解析】

命令解释AT +ECOPSPLMN信息变化.搜网的次数AT: CREG CGREG (一个是CS,一个是PS)网络PDP状态变化的次数AT:CGEV (PDN activate/deactivate)VOLTE功能导致唤醒的次数AT: CIREPI CIREPH CNEMS1 CIREG EIMSLTE数据连接AT: EDRBSTATE

[channel 14]
一般是跟一起产生,小区消息变化,会记录小区的信息到.

[channel20/24]
数据连接的唤醒.

channel20/24

使用打开

winshark

main log里面搜索IP 地址

[channel32]
获取状态所造成的唤醒. 这部分情况比较少,确认贵司是否有相关的

[channel34]
 跟有部分频段是重叠的,需要把频段的信息通知所造成的唤醒. 这部分属于正常的

[channel55]
网络的唤醒.

[channel6/42]
这是打开造成的,分析功耗问题除非发现跟有关系,否则捉时不要打开modem log

具体的channel 对应的定义可以参考

N版本

L版本
/kernel-3.10/include/mach/mt_ccci_common.h

[channel 14与10]常见AT 命令解析,注意红色字体部分字段

网络切换状态AT:

信号强度相关AT

网络注册状态AT:

网络VOLTE支持情况上报

image.png

如果是由于CLOCK 卡住,请参考下面的flow

Debug节点/sys/kernel/debug/cpuidle/

从节点中确认/sys/kernel/debug/cpuidle/dpidle_state

其中里面的数值对应的bit位为的,代表对应的卡住系统进入省电idle了.
从上图看

以此类推

N版本对应平台的clock ID:

cg_clk_id

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

本文地址:http://keair.bhha.com.cn/news/7901.html    康宝晨 http://keair.bhha.com.cn/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新资讯
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号