当前位置: 首页 > news >正文

灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常

1. 功耗现象

灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常

1.1测试数据

飞行模式+静音模式+插耳机

原生音乐播放器

DriverOnly

32.5mA

User版本

45mA

1.2 电流波形现象

上述看怀疑 CPU 未进入 Deep idle 导致?

2. Deep idle 分析

Deep idle是一种CPU进入空闲后的状态,也就是在idle进程执行的。简单地说,MTK会在CPU进入空闲的情况下,再去关闭一些不必要的power domain,以达到最省电的目的。通俗的理解就是CPU的空闲状态,即 CPU0 单核运行,其他CPUX不运行,即处于关核状态

2.1 是否能进 Deep idle

1.方法 :写入一个不释放的锁,查看待机电流和kernel日志

·adb shell "echo test > /sys/power/wake_lock"

2.测试现象 测试机的电流还是比参考机大,即无法进入 Deep idle 状态

2.2 分析 deep idle被block的情况

1.看CNT(dpidle,rgidle),如果dpidle一点没变,说明从没进过deep idle;有变化也不说明一定是正常的,要看变化的量。

2.再看 dpidle_block_cnt 这一组数值的增加值,一般可以看到每个blocker的计数都有所增加,关键要看哪个是主要的:

·如果主要是cpu,说明系统不只一颗cpu在运行,检查cpu loading;

·如果主要是tmr,说明有任务繁忙,调度比较频繁,检查cpu loading;

·如果主要是clk,那么看dpidle_block_mask,bit不为0的clk id就是嫌疑对象。

以下是 Kernel 日志 灭屏时间段为 13:39:57 ~ 14:17:31

<6>[  187.391041]  (0)[180:wdtk-0][thread:180][RT:187391030060] 2019-06-06 13:39:59.895301 UTC;android time 2019-06-06 13:39:59.895301

<4>[  187.524049] -(0)[0:swapper/0][Power/swap]CNT(dpidle,rgidle): [0] = (0,252679), [1] = (0,43671), [2] = (0,36229), [3] = (0,30398), 

<4>[  187.524068] -(0)[0:swapper/0][Power/swap]dpidle_block_cnt: [by_cpu] = 43533, [by_clk] = 17433, [by_tmr] = 0, [by_oth] = 0, [by_vtg] = 0, [by_frm] = 0, 

<4>[  187.524089] -(0)[0:swapper/0][Power/swap]dpidle_block_mask: 0x00000000, 0x00000000, 0x00000000, 0x00000011, 0x00000000, 0x00000010, 0x00002c03, 0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 

根据上述日志发现导致无法进入Deep idle原因是 dpidle_block_cnt: [by_cpu] 为主,CPU loading大导致,如何查cpu loading具体情况?这里的CPU loading信息我们需要抓Ftrace文件进行分析

3. Ftrace分析

抓取日志见其他博客的 Ftrace 抓取方法,可以使用本文的sh脚本

#!/system/bin/sh

rm -rf /sdcard/idle_log/*

mkdir /sdcard/idle_log;

i=0;

while [ i -le 3000 ];

do

## cat $i;

echo $i >> /sdcard/idle_log/dpidle_state.txt;

echo $i >> /sdcard/idle_log/soidle_state.txt;

echo $i >> /sdcard/idle_log/idle_state.txt;

echo $i >> /sdcard/idle_log/cpu.txt;

i=$(($i+1));

## print looping counts

cat /sys/kernel/debug/cpuidle/dpidle_state  >>/sdcard/idle_log/dpidle_state.txt;

cat /sys/kernel/debug/cpuidle/soidle_state  >>/sdcard/idle_log/soidle_state.txt;

cat /sys/kernel/debug/cpuidle/idle_state >> /sdcard/idle_log/idle_state.txt;

## cat /sys/devices/system/cpu/cpufreq/all_time_in_state >> /sdcard/idle_log/cpu.txt

echo cpu_online_info >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/online >> /sdcard/idle_log/cpu.txt;

## cat /sys/devices/system/cpu/cpu0/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu1/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu2/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu3/online >> /sdcard/idle_log/cpu.txt;

##busybox usleep 2000000;

sleep 2;

done

查看 Ftrace 分析结果,在Google浏览器输入下述调试网址,即可加载Ftrace文件

·chrome://tracing/

综合上述不管是使用Ftrace 还是使用脚本工具,都检查到灭屏情况,功耗异常的机器无法进入Deep idle状态,且cpu loading 大,且2个CPU运行,由于这个问题是4.28号的修改导致,即内部改出来的问题,是否CPU策略变更?

4. CPU的实验测试

做一个 Disable CPU hotplug 实验

adb shell "echo 0 > /proc/hps/enabled"

关闭 CPU hotplug,机器电流恢复正常了

5. 查看CPU相关修改记录

·git diff e7a305d576a44042c8fa4f36c57b1a4e9ebdf515 961171a11857523e1296b6ba572cbbc55582d73e

发现确实存在 CPU_hotplug 相关的修改记录

user@chuanghangren-Lenovo-Product:/local/sda/local_sourcecode/xxx/kernel-4.9-lc$ git diff e7a305d576a44042c8fa4f36c57b1a4e9ebdf515 961171a11857523e1296b6ba572cbbc55582d73e

diff --git a/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h b/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

index b250cca..bad7a20 100755

--- a/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

+++ b/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

@@ -22,7 +22,7 @@

/* CONFIG - compile time */

#define HPS_TASK_PRIORITY              (MAX_RT_PRIO - 3)

-#define HPS_TIMER_INTERVAL_MS          100

+#define HPS_TIMER_INTERVAL_MS          20

#define HPS_PERIODICAL_BY_WAIT_QUEUE        (1)

#define HPS_PERIODICAL_BY_TIMER             (2)

@@ -35,17 +35,17 @@

#define CPU_DMIPS_BIG_LITTLE_DIFF      70

/* CONFIG - runtime (execute time interval : 100 ms */

-#define DEF_CPU_UP_THRESHOLD           95

-#define DEF_CPU_UP_TIMES               2

-#define DEF_CPU_DOWN_THRESHOLD         85

-#define DEF_CPU_DOWN_TIMES             8

+#define DEF_CPU_UP_THRESHOLD           75

+#define DEF_CPU_UP_TIMES               1

+#define DEF_CPU_DOWN_THRESHOLD         30

+#define DEF_CPU_DOWN_TIMES             50

#define DEF_TLP_TIMES                  1

#define EN_CPU_INPUT_BOOST             1

#define DEF_CPU_INPUT_BOOST_CPU_NUM    2

#define EN_CPU_RUSH_BOOST              1

-#define DEF_CPU_RUSH_BOOST_THRESHOLD   98

+#define DEF_CPU_RUSH_BOOST_THRESHOLD   80

#define DEF_CPU_RUSH_BOOST_TIMES       1

#define EN_HPS_LOG                     1

查看具体修改原因:产品需要dEQP-EGL CTS测试,就必须合入此patch,不然会导致CTS fail。这块芯片比较久了,性能不太好,需要尽量的去开核 确保perfect

CPU hotplug patch会导致dEQP-EGL

CTS fail。具体如下:

[Initial condition]

1. [gms]_alps-mp-p0.mp user

2. Select stay awake

3. Lock screen select none

4. connect WiFi AP

[Steps]

1. run cts in windows

2. input run cts -m CtsDeqpTestCases -t dEQP-EGL.functional.get_frame_timestamps*"

[Actual Result]

dEQP-EGL.functional.get_frame_timestamps#rgb565_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Buffer displayed before rendering completed.!(1292160634076 -2

dEQP-EGL.functional.get_frame_timestamps#rgb565_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57889844 < 49642383

dEQP-EGL.functional.get_frame_timestamps#rgb888_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57920384 < 49665288

dEQP-EGL.functional.get_frame_timestamps#rgb888_no_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Buffer displayed before rendering completed.!(1305430597769 < -2

dEQP-EGL.functional.get_frame_timestamps#rgba8888_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57916176 < 49662132

dEQP-EGL.functional.get_frame_timestamps#rgba8888_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57910252 < 49657689

dEQP-EGL.functional.get_frame_timestamps#rgba8888_no_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57910944 < 49658208

基于产品需求定义,需确保 CTS 测试通过,故维持该 CPU hotplug 修改策略。

相关文章:

灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常

1. 功耗现象 灭屏情况下&#xff0c;飞行模式静音模式插耳&#xff0c;播放音乐&#xff0c;电流异常 1.1测试数据 飞行模式静音模式插耳机 原生音乐播放器 DriverOnly 32.5mA User版本 45mA 1.2 电流波形现象 上述看怀疑 CPU 未进入 Deep idle 导致&#xff1f; 2. …...

面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制

&#x1f3af;导读&#xff1a;本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则&#xff0c;利用负载均衡将请求转发至不同的后端服务&#xff0c;并集成了Token验证过滤器以确保API的安全访问&#xff0c;同时支持白名单路…...

Jmeter负载测试如何找到最大并发用户数?

在性能测试中&#xff0c;当我们接到项目任务时&#xff0c;很多时候我们是不知道待测接口能支持多少并发用户数的。此时&#xff0c;需要我们先做负载测试&#xff0c;通过逐步加压&#xff0c;来找到最大并发用户数。那么当我们找到一个区间&#xff0c;怎么找到具体的值呢&a…...

Spark-Streaming集成Kafka

Spark Streaming集成Kafka是生产上最多的方式&#xff0c;其中集成Kafka 0.10是较为简单的&#xff0c;即&#xff1a;Kafka分区和Spark分区之间是1:1的对应关系&#xff0c;以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整&#xff0c;下面我们…...

移植 OLLVM 到 Android NDK,Android Studio 中使用 OLLVM

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ OLLVM、LLVM 与 Android NDK 在 Android NDK 中&#xff0c;LLVM/Clang 是默认的编译器。自 Android NDK r18 开始&#xff0c;Google 弃用了 GCC&#xff0c…...

DAY36|动态规划Part04|LeetCode:1049. 最后一块石头的重量 II、494. 目标和、474.一和零

目录 LeetCode:1049. 最后一块石头的重量 II 基本思路 C代码 LeetCode:494. 目标和 基本思路 C代码 LeetCode:474.一和零 基本思路 C代码 LeetCode:1049. 最后一块石头的重量 II 力扣代码链接 文字讲解&#xff1a;LeetCode:1049. 最后一块石头的重量 II 视频讲解&…...

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…...

障碍感知 | 基于KD树的障碍物快速处理(附案例分析与ROS C++仿真)

目录 1 障碍处理与KD树2 KD树核心原理2.1 KD树的构造2.2 KD树的查找 3 仿真实现3.1 KD树基本算法3.2 ROS C仿真 1 障碍处理与KD树 在机器人感知系统中&#xff0c;传感器&#xff08;如激光雷达、摄像头等&#xff09;会采集周围的环境数据&#xff0c;例如代价地图、八叉树地…...

Electron -- Electron Fiddle(一)

Electron Fiddle 是一个由 Electron 团队开发的开源工具&#xff0c;它允许开发者快速创建、运行和调试 Electron 应用。这个工具提供了一个简洁的界面&#xff0c;使用户无需配置复杂的开发环境&#xff0c;就能快速体验和学习 Electron。强烈建议将其安装为学习工具。 学习它…...

详解Redis的常用命令

目录 KEYS 语法 EXISTS 语法 DEL 语法 EXPIRE 语法 TTL 语法 TYPE 语法 Redis数据结构和内部编码 KEYS 返回所有满⾜样式&#xff08;pattern&#xff09;的 key。 返回值&#xff1a;匹配 pattern 的所有 key。 语法 ⽀持如下统配样式: h?llo matches hello, ha…...

elasticache备份

Elasticsearch 本地快照操作流程 配置快照存储路径 在 elasticsearch.yml 文件中配置以下字段以指定数据、日志和快照存储路径&#xff1a;path:data: /data/data # 数据存储路径logs: /data/log # 日志存储路径repo: /data/snapshot # 快照存储路径确保路径 /dat…...

Tomcat负载均衡全解析

一、Java项目概述 (一)Java语言特点 Java是一种计算机应用语言,在开发王者和管理系统等方面有着广泛的应用。它具有开源免费的特性,不过需要注意的是,虽然语言本身开源,但是后期开发工具可能会收取费用。 (二)、JDK和Tomcat 1,JDK:作为Java语言的开发工具,在Linu…...

[LeetCode-Python版] 定长滑动窗口8——2461. 长度为 K 子数组中的最大和

题目 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和&#xff1a; 子数组的长度是 k&#xff0c;且 子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件&#xff0c;返回 0 。…...

springboot476基于vue篮球联盟管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统篮球联盟管理系统信息管理难度大&#xff0c;容错率低&am…...

预约参观华为基地,见证行业巅峰

✨ 大家好呀&#xff01;今天要跟大家分享一个超酷的体验&#xff0c;关于华为的参观学习之旅&#xff01;&#x1f680; 华为成立于1987年&#xff0c;位于深圳&#xff0c;是全球领先的信息与通信技术&#xff08;ICT&#xff09;解决方案供应商哦&#xff01;他们专注于科技…...

【Flink-scala】DataSet编程模型介绍及数据源

DataStream 学习 1.DataStream编程模型总结 文章目录 DataStream 学习介绍一、DataSet编程模型二、数据源1.文件类数据源2.集合类数据源3.通用类数据源4第三方文件系统 介绍 Flink把批处理看成是一个流处理的特例&#xff0c;因此可以在底层统一的流处理引擎上&#xff0c;同…...

Odrive源码分析(四) 位置爬坡算法

Odrive中自带一个简单的梯形速度爬坡算法&#xff0c;本文分析下这部分代码。 代码如下&#xff1a; #include <cmath> #include "odrive_main.h" #include "utils.hpp"// A sign function where input 0 has positive sign (not 0) float sign_ha…...

[Unity Shader][图形渲染] Shader数学基础11 - 复合变换详解

在图形学与Shader编程中,复合变换是将平移、旋转和缩放等基本几何变换组合在一起,从而实现更复杂的物体变换效果。复合变换的本质是通过矩阵的串联操作,依次应用多个变换。 本文将介绍复合变换的数学原理、矩阵计算方法及注意事项,并结合实际编程中的实现细节帮助你掌握其…...

使用Python实现智能家居控制系统:开启智慧生活的钥匙

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

使用 HTML5 Canvas 实现动态蜈蚣动画

使用 HTML5 Canvas 实现动态蜈蚣动画 1. 项目概述 我们将通过 HTML 和 JavaScript 创建一个动态蜈蚣。蜈蚣由多个节段组成&#xff0c;每个节段看起来像一个小圆形&#xff0c;并且每个节段上都附带有“脚”。蜈蚣的头部会在画布上随机移动。 完整代码在底部&#xff01;&…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...