一、Sensor功耗问题分类

目前所遇到的sensor功耗问题主要包括以下几类:
待机功耗:

  • SSC子系统异常,导致系统无法进入AOSD
  • SSC子系统异常,导致频繁唤醒AP
  • SSC子系统的GPIO/PMIC配置错误,导致系统存在漏电

运行功耗:

  • SSC子系统的sensor工作模式异常,导致系统功耗增大
  • Android上层服务未正常关闭sensorservice,导致系统功耗增大

在sensor功耗问题的分析中,sensor自身工作行为所产生的耗电是非常小的,大多数功耗问题都是由SSC(Snapdragon Sensor Core)子系统异常或是Android上层服务异常调用sensorservice引起。

二、Sensor功耗问题分析方法

不同类型的sensor功耗问题有不同的分析方法,以下是一些通用的针对各类型sensor功耗问题的分析.

SSC子系统引起系统无法进入AOSD问题分析:

1.首先要确认系统待机时的是否是SSC子系统无法进入sleep而导致系统无法进入AOSD,可通过以下命令查看各个子系统的sleep count:
命令:

adb shell cat /sys/power/rpmh_stats/master_stats

输出如下:

APSS
Version:0x1
Sleep Count:0x2bf90
Sleep Last Entered At:0x48e7ec7af00
Sleep Last Exited At:0x48e7ecfe85e
Sleep Accumulated Duration:0x42b29deb96a
ADSP
Version:0x1
Sleep Count:0xf17
Sleep Last Entered At:0x48a16986465
Sleep Last Exited At:0x48a16980931
Sleep Accumulated Duration:0x487a6e075f7
CDSP
Version:0x1
Sleep Count:0x55
Sleep Last Entered At:0x1f39e3aadeb
Sleep Last Exited At:0x1f39e3a6d3b
Sleep Accumulated Duration:0x48e5fed220c
SLPI
Version:0x1
Sleep Count:0x1e341a
Sleep Last Entered At:0x48e7ed80b48
Sleep Last Exited At:0x48e7ed76c90
Sleep Accumulated Duration:0x473b8551197

其中子系统每进入sleep一次,相应的sleep count就会+1,如果某个subsystem的sleep count长时间没有增加,基本可断定该子系统无法进入sleep

2.接下来确认是否为sensor的使用导致SSC子系统异常,可用以下方法disable AP子系统与SSC子系统的通信来确认:
命令:

adb shell mv /vendor/lib64/libssc.so /vendor/lib64/libssc.so.bk
adb shell mv /vendor/lib/libssc.so /vendor/lib/libssc.so.bk
adb shell sync
adb reboot

3.若确认SSC异常与sensor使用无关,则请sensor team帮忙分析SSC无法进入LPM的原因
4.若确认SSC异常与sensor使用有关,则用如下命令确认系统灭屏时有哪些sensor正在被使用
命令:

adb shell dumpsys sensorservice

5.逐一关闭灭屏时正在使用的sensor,来找出引起SSC异常的sensor
6.关闭引起SSC异常的sensor,并使用如下命令验证该异常是SSC子系统自身引起,还是上层的sensor服务引起:

adb shell
自研校准 -d <simple_time_ms> <SensorName> & //校准的工具的使用

7.将结果反馈给sensor team进行进一步分析

SSC子系统频繁唤醒AP问题分析方法

1.分析待机时的bugreport日志,通过以下log确认SSC子系统存在多次唤醒AP:

All wakeup reasons:
Wakeup reason Abort:Last active Wakeup Source: SensorService_wakelock, handle processSensorService: 16m 50s 349ms (1025 times)
realtime
Wakeup reason Abort:Wakeup IRQ detected during suspend: 103qcom,glink-smem-native-xprt-dsps: 2m 7s 108ms (126 times) realtime

2.确认是否为sensor的使用导致SSC子系统异常,可用以下方法disable AP子系统与SSC子系统的通信来确认:
命令:

adb shell mv /vendor/lib64/libssc.so/vendor/lib64/libssc.so.bk
adb shell mv /vendor/lib/libssc.so/vendor/lib/libssc.so.bk
adb shell sync
adb reboot

3.若AP频繁唤醒是由sensor使用引起的,则通过以下命令找出系统灭屏时正在使用的sensor,并通过排除法来确定引起AP唤醒的sensor
命令:

adb shell dumpsys sensorservice

4.检查是否为上层服务将sensor错误配置成了Wakeup模式,导致AP不断被唤醒,如:

Connection Number: 4
Operating Mode: NORMAL
com.qualcomm.qti.internal.telephony.DynamicSarController | WakeLockRefCount 0 | uid 1001 | cache size 0 | max cache size 0
sar_detector Non-wakeup 0x0000001e | status: active | pending flush events 0
SAR ADUX1050 Wakeup0x00000025 | status: active | pending flush events 0
Hall Effect Sensor 0x00000034 | status: active | pending flush events 0

在以上log中,由于modem服务将SAR sensor异常设置成了Wakeup模式,导致SAR sensor每隔1s就会频繁唤醒AP

5.若上层服务的sensor配置没有问题,但系统还是存在频繁的AP唤醒,就需要sensor team检查是否为SSC子系统在使用sensor时出现异常,导致AP频繁唤醒。

如:之前遇到的安装微信及QQ后,系统会频繁上报SSC中断,导致AP无法睡眠,经分析是由于微信及QQ同时使用了Non-wakeup pedometer,导致大量sensor中断产生。
但其本质原因是由于SensorHub问题导致Non-wakeup sensor会异常唤醒AP。

SSC子系统的GPIO/PMIC配置错误导致系统漏电问题分析方法

1.分析GPIO/PMIC的漏电问题是在系统已经成功进入AOSD以后,此时各个子系统都已成功进入sleep,故很难从各subsystem看出问题

2.这时最简单的办法就是通过Trace32来dump系统进入AOSD之前的GPIO/PMIC状态,检查各GPIO/PMIC是否存在漏电

3.但有时由于条件所限在无法使用Trace32工具的情况下,就需要对比出问题前后的两个版本,从regression的角度来找出漏电

SSC子系统的sensor工作模式异常,导致系统功耗增大问题分析方法

1.sensor的工作模式异常导致的功耗问题主要出现在系统运行时,指可以使用interrupt mode的sensor被SSC子系统异常配置成了polling mode,导致功耗增大

2.分析方法主要是先通过dumpsys sensorservice找出系统使用了哪些sensor?再检查哪些sensor可以被配置成interrupt mode

3.若确认相应sensor可以工作在interrupt mode,却异常配成了polling mode,则找sensor team帮忙修正

功耗优化之Sensor功耗分析的更多相关文章

  1. iOS--App功耗优化

    良好的用户体验需要如下要素: 电池寿命长.随着能效降低,电池寿命也会降低.但用户想让自己的移动设备全天候待命. 速度快.iOS系统处理复杂操作时仍能提供很好的性能. 响应快.同一时刻消耗太多资源会使U ...

  2. 移动智能设备功耗优化系列--前言(NVIDIA资深project师分享)

    本文是嵌入式企鹅圈原创团队成员.NVIDIA资深开发project师Terry发表的第一篇文章,其将对"移动智能设备功耗优化"这个专题展开一个系列的总结分享. Terry毫无保留地 ...

  3. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  4. MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...

  5. 【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况

    前言 本文翻译自“为电池寿命做优化”系列文档中的其中一篇,用于介绍如何使用Battery Historian分析电源使用情况. 中国版官网原文地址为:https://developer.android ...

  6. mysql优化:慢查询分析、索引配置优化

    一.优化概述二.查询与索引优化分析a.性能瓶颈定位show命令慢查询日志explain分析查询profiling分析查询b.索引及查询优化三.配置优化 max_connections back_log ...

  7. golang gc 优化思路以及实例分析

    一个即将上线的go 写的高频服务,压测的时候发现 gc 特别高,高到10%-15% 左右了,本文记录下优化 gc 的过程和和思路.线上环境1.10. 首先,查看gc 是否有异常,我们可以使用 gctr ...

  8. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)

    http://www.taidous.com/article-667-1.html 前言 首先,这个系列文章做个大致的介绍,题目"浅谈Unity",因为公司和国内大部分3D手游开发 ...

  9. mysql优化----explain的列分析

    sql语句优化: : sql语句的时间花在哪儿? 答: 等待时间 , 执行时间. 等待时间:看是不是被锁住了,那就不是语句层面了是服务端层面了,看连接数内存. 执行时间:到底取出多少行,一次性取出1万 ...

随机推荐

  1. javaweb之浏览功能

    今天我们来写浏览功能,浏览主要是通过sql语句将数据库里的数据查出来,并显示在页面上. 一.dao层 在上一篇文章的基础上dao层加入浏览方法. public List<Course> l ...

  2. SecureCRT显示连接失败的原因

    问题描述:连接后像192.168.111.140那样的红色图标 原因:没有开启对应的虚拟机 解决办法:打开对应的虚拟机

  3. 用 JS(JavaScript )实现多选、全选、反选

    JS小例题 学习内容: 需求 总结: 学习内容: 需求 用 JavaScript 实现全选.反选.多选 实现代码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  4. EMS邮箱数据库常用命令(一)

    案例任务:创建名为"book"的邮箱数据库,数据库文件和日志文件存储位置为"c:\book". 键入以下命令. New-MailboxDatabase -Nam ...

  5. C语言---魔方阵

    魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...

  6. OllyDbg---汇编指令

    汇编指令 NOP 无操作 运行这条指令时,不会对寄存器.内存以及堆栈造成任何影响,也就是无操作. 当用一个短指令来替换一个长指令时,如果处理器没有错误,多余的空间将会被NOP填充. 适当数目的NOP指 ...

  7. java实现二叉树的Node节点定义手撕8种遍历(一遍过)

    java实现二叉树的Node节点定义手撕8种遍历(一遍过) 用java的思想和程序从最基本的怎么将一个int型的数组变成Node树状结构说起,再到递归前序遍历,递归中序遍历,递归后序遍历,非递归前序遍 ...

  8. Java学习day20

    一个简单的鼠标点击在窗口画点的程序 今天学习了键盘监听和Swing窗口 Swing可以理解为是AWT的升级版本,方法名字等大都相似,例如Frame和JFrame AWT如果要关闭窗口,需要使用窗口监听 ...

  9. Java学习day19

    今天学习了窗口监听.和鼠标监听 通过构建自己的输入框监听方法能够实现简单的加法计算器 明天学习Swing,做一个简单的基于鼠标点击操作的画板

  10. 手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)

    本文主要解决两个问题 C# Winform高DPI字体模糊. 高DPI下(缩放>100%), UI设计器一直提示缩放到100%, 如果不重启到100%,设计的控件会乱飞. 建立测试程序 新建.N ...