一、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. python pymysql连接数据库并创建表

    之前看菜鸟教程 #!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost"," ...

  2. numpy教程04---ndarray的索引

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  3. 两数之和_LeetCode_1

    LeetCode_1原题链接:https://leetcode-cn.com/problems/two-sum/ 剑指 Offer 57原题链接: https://leetcode-cn.com/pr ...

  4. 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装

    前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...

  5. Grafana中文汉化

    可视化图表 Grafana是一个通用的可视化工具.通过Grafana可以管理用户权限,数据分析,查看,导出,设置告警等. 仪表盘Dashboard 通过数据源定义好可视化的数据来源之后,对于用户而言最 ...

  6. 动手动脑3&课堂作业(四则运算与继承)

    先上结果 Java程序会先把所有的静态模块提取出来优先执行 四则运算主程序代码 1 import java.util.Scanner; 2 3 4 public class main { 5 publ ...

  7. Logistic regression中regularization失败的解决方法探索(文末附解决后code)

    在matlab中做Regularized logistic regression 原理: 我的代码: function [J, grad] = costFunctionReg(theta, X, y, ...

  8. nodejs mysql pool 只能插入10条记录或者较少记录

    BEGIN; 解决方案:从连接池获取到的Connection,执行完操作后,必须及时关闭! 即:connection.end(); 使用后发现console有打印出警告信息,大致意思为 end() 方 ...

  9. Metalama简介4.使用Fabric操作项目或命名空间

    使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题 Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架 Metalama简介2.利用Aspect在编译时进行消除重 ...

  10. ViewFlipper 简单应用

    AdvserView.java package com.earen.viewflipper; import android.content.Context; import android.graphi ...