MTK 相机内存知识点

news2024/10/7 10:19:14

4a7a1dbe7b26e6c7d6dea364bea228a3.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点

一、Camera 内存包含哪些内容
二、VSS/RSS/PSS/USS 内存介绍
三、内存查看常用命令
四、内存泄漏相关知识点
五、参考文献

一、Camera 内存包含哪些内容

1.1 Camera 内存介绍

从Camera 角度理解Total RAM分为:Free(剩余内存)、Others(非Camera 模块)、Camera APP、cameraserver、camerahalserver、以及Linux Kernel。
另外,整个手机不只有Linux,还有其他作业系统同时运行,所以也会切走一块Reserved,比如:modem。

1.2 Camera 总内存包含哪些

Camera 总内存包含:Camera app、cameraserver、camerahalserver 这三个进程的内存。

1.3 Camera 内存拆解

Camera 内存拆解主要包含 ION内存,Non-ion内存两个。

1.3.1 Non-ion

1.CPU 可存取,没有特别要求,通常会是这一类(比如:堆 HEAP、栈 Stack、全局变量 Global Variable等等)
2.因为各种技术成熟(虚拟地址空间 Virtual Address space ,CPU L1/L2/L3 缓存,Zram Swap... ...)此类对系统负担较轻

1.3.2 ION
  1. 可以给硬体存取(GPU /ISP ...),可跨进程,跨Kernel进行内容分享(3A tunning data from userspace to kernel driver)

  2. 可以存放Camera Frame Buffers

二、 VSS/RSS/PSS/USS 内存介绍

内存占用规律 VSS >= RSS >= PSS >= USS

2.1 VSS

Virtual Set Size 虚拟耗用内存(包含共享库占用的内存,以及分配单未使用的内存)
很少被用于判断一个进程的真实内存使用量

2.2 RSS

Resident Set Size 实际使用物理内存(包含共享库占用的内存)
不能准确反映单进程内存占用情况

2.3 PSS

Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存,按照进程数等比例划分)

2.4 USS

Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
当进程中存在可疑内存泄漏时,USS 是最佳观察数据

三、 内存查看常用命令

3.1 Camera 内存查看常用基础命令
adb 命令备注
adb shell cat /proc/meminfo系统角度的内存使用情况
adb shell dumpsys meminfo系统角度dump 所有进程的内存情况
adb shell dumpsys meminfo 【pid】指定进程的meminfo
adb shell cat sys/kernel/debug/ion/ion_mm_heap需要root ,Kernel 5.1 之前
adb shell cat /proc/dma_heap/all_heaps需要root ,Kernel 5.1 之后
adb shell cat /proc/"查询进程的【pid】"/smaps需要root ,non-ion
adb shell showmap "查询进程的【pid】"需要root ,non-ion
adb shell pmap "查询进程的【pid】"需要root ,non-ion
3.2 Camera 内存基础命令说明
// 查看系统总内存
adb shell cat /proc/meminfo
// dumpsys camera 相关的meminfo 
adb shell dumpsys meminfo com.android.camera
adb shell dumpsys meminfo cameraserver
adb shell dumpsys meminfo camerahalserver
// 查看系统ION 内存(root版本+kernel 5.1 之前) MTK ion_view_v2.2.py 可以解析
adb shell cat sys/kernel/debug/ion/ion_mm_heap
// 查看系统ION 内存(root版本+kernel 5.1之后)MTK dma_buf_view_v1.0.py 可以解析
adb shell cat /proc/dma_heap/all_heaps
//查看 Camera 相关non-ion 内存占用 mtk parse_smap.awk 脚本可以解析
adb shell cat /proc/"pidof camera app/cameraserver/camerahalserver"/smaps
// 通常我们调试时候需要实时监测内存,这个时候使用while do循环比较好,跟grep 配合会更好
adb shell "while true;do  “添加响应的adb指令” ;done"
// dumpsys hal 内存
adb shell "while true;do dumpsys meminfo camerahalserver;done"
// dumpsys hal 总内存
adb shell "while true;do dumpsys meminfo camerahalserver|grep 'TOTAL PSS';done"
// dumpsys hal  Native HEAP(non-ion)
adb shell "while true;do dumpsys meminfo camerahalserver|grep 'Native Heap:';done"
// dumpsys hal  ion内存 grep Graphics:或者 EGL mtrack
adb shell "while true;do dumpsys meminfo camerahalserver|grep 'Graphics:';done"

四、内存泄漏相关知识点

内存泄漏特点:
持续增长/存在明显波动增长,并且在退出Camera 后不释放。

补充说明:

  • 持续增长/存在明显波动增长,退出Camera后释放,并非泄漏,但可能不合理。

  • 持续增长/存在明显波动增长至少需要 > 50MB 才有机会去分析,因为Camera波动几MB,甚至几十MB都是正常的。

4.1 如何确定内存泄漏进程以及泄漏类型
  • 1.通过 dumpsys meminfo 找到是哪个进程有泄漏(如:camera app,camerahalserver)

  • 2.通过dumpsys meminfo [pid] 找到是 ion 内存泄漏还是non-ion 泄漏
    如果是ion 泄漏,需要dump ion_mm_heap, 查看与 orphaned 孤儿进程相关的段落,比如 total orphaned ,orphaned buffer list:
    根据经验一般这个 total orphaned 达到GB等级,极有可能内存泄漏。
    如果是non-ion,需要dump smaps,查收是malloc 泄漏还是mmap泄漏。针对性的开malloc debug+coredump,或者mmap debug+coredump

4.2 内存泄漏Debug 手法
4.2.1 检测coredump 是否开启(eng,userdebug 版本默认开启)

查看命令如下:

// enable 开启,disable 关闭
C:\Users\Administrator>adb shell "getprop|grep 'vendor.aeev.core'"
[persist.vendor.aeev.core.direct]: [enable]
[persist.vendor.aeev.core.dump]: [enable]
// 如需关闭,请设置disable
C:\Users\Administrator>adb shell setprop persist.vendor.aeev.core.direct disable

C:\Users\Administrator>adb shell setprop persist.vendor.aeev.core.dump disable

C:\Users\Administrator>adb shell "getprop|grep 'vendor.aeev.core'"
[persist.vendor.aeev.core.direct]: [disable]
[persist.vendor.aeev.core.dump]: [disable]

C:\Users\Administrator>

或者在init.aee.customer.rc 以及在init.aee.system.rc 中设置属性enable

4.2.2 malloc 内存debug 方法
  1. eng或者userdebug 版本参考命令

// 打开backtrace 触发NE的层数 8层
C:\Users\Administrator>adb shell "echo libc.debug.malloc.options="backtrace=8 guard=8 leak_track">>/data/local.prop"

C:\Users\Administrator>adb shell "echo libc.debug.malloc.program=camerahalserver>>/data/local.prop"

C:\Users\Administrator>adb reboot
// 重启后确认malloc debug 开关是否生效
C:\Users\Administrator>adb shell "getprop | grep malloc"
[libc.debug.malloc.options]: [backtrace=8 guard=8 leak_track]
[libc.debug.malloc.program]: [camerahalserver]

backtrace =8 表示 触发NE后backtrace 有8层,不能太多,否则预览容易黑屏或者卡顿,8层自测camera预览已经比较卡了。

或者通过setprop 进行设置,重启后失效

C:\Users\Administrator>adb shell "setprop libc.debug.malloc.options 'backtrace=8 guard=8 leak_track'"

C:\Users\Administrator>adb shell "setprop libc.debug.malloc.program camerahalserver"

C:\Users\Administrator>adb shell "getprop | grep malloc"
[libc.debug.malloc.options]: [backtrace=8 guard=8 leak_track]
[libc.debug.malloc.program]: [camerahalserver]

C:\Users\Administrator>adb shell pkill camera*
4.2.3 mmap debug 内存方法

需要先使用adb shell echo $LD_PRELOAD 查看是已经加载libudf.so ? 如果没有,需要修改代码
这个需要参考MTK 文档。

五、参考文献

014_ISP7_相机内存优化.pdf

【腾讯文档】Camera学习知识库
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

cfae040f02ac928ca22c762c1c44bebe.jpeg

点击阅读原文,为大佬点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepFaceLive AI实时换脸软件安装流程

第一:设置虚拟内存≥32G 在安装DeepFaceLive前,需把电脑的虚拟内存设置≥32G。鼠标移到左下角WIN处,右击后选择【系统】模块。 在显示的【系统信息】页面选择【高级系统设置】。 在显示的【系统属性】页面中,选择【高级】选项&…

【MySQL数据库 | 第四篇】SQL通用语法及分类

目录 🤔SQL通用语法: 😊语句: 😊注释: 🤔SQL语句分类: 😊1.DDL语句: 😊2.DML语句: 😊3.DQL语言: &…

不写代码也能年薪百万?Prompt+低代码开发实战

👉腾小云导读 近期 AIGC 狂潮席卷,“前端走向穷途”“低代码时代终结”的言论甚嚣尘上。事实上 GPT 不仅不会干掉低代码,反而会大幅度促进低代码相关系统的开发。本文会介绍 GPT Prompt Engineering 的基本原理,以及如何帮助低代码…

elementui大型表单校验

一般很大的表单都会被拆解开,校验,,不会写在一个页面,,就会有多个 el-form ,,主页要集合所有el-form的数据,,所以有一个map来接收,传送表单数据,&…

【Android】脱壳之frida-dexdump小计

前言 最近在挖客户端漏洞时,遇到了加壳的情况,之前没解决过,遇到了就解决一下。特此记录。 本文详细介绍了frida-dexdump脱壳原理相关知识并且在实战中进行了脱壳操作。 基本知识 1. Frida-dexdump frida-dexdump通过以下步骤实现DEX文件…

qemu+buildroot+linux arm64虚拟化-宿主系统wsl2

文章目录 1.qemu2.buildroot配置编译 3.linux kernel下载交叉编译工具链 linux kernel 5.16配置内核config_kernel.shbuild_kernel.sh 4.启动虚拟机start_qemu.sh参数解释运行 环境: wls2、qemu8.2、buildroot、linuxkernel 1.qemu https://buildroot.org/download…

基于Android studio的商城系统(源码+文档超详细+数据库)

基于Android平台的图书商城系统,该系统包括客户端和服务器端两个部分。后端使用技术SSM,数据库使用的是轻量数据库MySQL,客户端采用Android SDK 设计,创新点为组件的运用和样式的设计。 系统在传统页面和技术的基础上进行美化和升…

AlexNet

目录 论文信息论文名称论文别名发表期刊论文地址 论文详解摘要精简翻译和总结批注 1.引言1.1 指出问题和可改进方向1.2本文贡献1.3 批注 2.数据集2.1 批注 3.模型结构3.1 ReLU3.2 多GPU分布式训练3.3 Local Response Normalization(LRN 局部响应归一化)3…

【Java】Java核心要点总结:62

文章目录 1. 线程中的线程是怎么创建的,是一开始就随着线程池的启动创建好的吗?2. 既然Volatile能够保证变量的可见性,是否意味着基于其的运算是并发安全的3. ThreadLoadl是什么 有哪些使用场景4. ThreadLoadl是怎么解决并发安全的5. 有人说要…

WPF开发txt阅读器3:目录控件

文章目录 目录提取列表控件整改 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录 目录提取 在实现标题类之后,就可以实战演习一番。首先在mainWindow中添加Catalog类 public Catalog catalog;然后更改 然后在标题栏中添加…

【高危】泛微 e-cology9 存在任意用户登录漏洞

漏洞描述 泛微协同管理应用平台(e-cology)是一套企业大型协同管理平台。 泛微e-cology9部分版本中存在前台任意用户登录漏洞,由于系统默认配置固定密钥进行用户身份验证。 当存在/mobile/plugin/1/ofsLogin.jsp文件时(可能通过插件方式安装&#xff0…

TCP/IP详解(一)

TCP/IP协议是Internet互联网最基本的协议,其在一定程度上参考了七层OSI(Open System Interconnect,即开放式系统互联)模型 OSI参考模型是国际组织ISO在1985年发布的网络互联模型,目的是为了让所有公司使用统一的规范来…

基于stata的DID平行趋势检验

前言 DID平行趋势检验定义 定义:评估两变量数据之间是否会存在某种同幅度增减情况的相关关系检验方法 重要性:为何要做平行趋势检验?平行趋势检验在DID模型中是非常重要的一步,用于验证处理组和对照组在干预前的趋势是否平行。只…

微信服务商快速进件,商户自己提交资料,减少工作量

大家好,我是小悟 用好技术,让经营更高效。为了减少服务商工作量,移动端服务商进件来了,分为移动端和管理端。 移动端 包括四大模块,主体资料、经营资料、法人资料和银行账户。 点击顶部步骤条可以切换,…

在IDE中使用altair无法显示绘图结果

同学们以及熟悉Pycharm编辑运行python代码。正如文章末尾给出的pycharm运行altair的建议方法视觉效果一般。 因为数据可视化在IDE实现效果不理想,这是因为altair使用Vega和Vega-Lite语法来创建交互式图表,而IDE无法直接渲染这些图表。 习惯了pycharm的同学是时候考虑…

Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较以及为什么禁止使用double直接构造BigDecimal

场景 阿里Java开发手册嵩山版中明确指出: 1、BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法 equals()方法会比较值和精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度 2、禁止使用构造方法BigDeci…

深度学习简介

什么是深度学习? 一、深度学习–神经网络简介 深度学习(Deep Learning)(也称为深度结构学习【Deep Structured Learning】、层次学习【Hierachical Learning】或者 深度机器学习【Deep Machine Learning】)是一类算法…

CSDN送了我一本书:《写作脑科学》| 记我与写博客

文章目录 收到之前收到之后番外——我与写博客从日记开始写博客至今 收到之前 CSDN有个深读计划的活动,在报名者中抽取一些小伙伴免费送书,但是收到书籍后需要写一篇书评,否则不能继续参加下次的活动。要求写书评可能是出版社或作者希望可以…

Little’s Law 利特尔法则

1 A simple definition: Little’s Law states that the long-term average number of customers in a stable system L L L is equal to the long-term average effective arrival rate, λ \lambda λ, multiplied by the average time a customer spends in the system, …

ISO21434 网络安全验证(八)

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 五、输出 一、概述 本条款描述了该项目的车辆级别的网络安全验证活动。该项目被考虑在车辆层面的操作环境以及系列生产的配置。 二、目标 本条款的目的是: 验证网络安全目…