Fork me on GitHub

07 2024 档案

摘要:1.概述 USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。 2.事件 dwc3 USB设备控制器事件使用dwc3_event数据结构描述,由4个 阅读全文
posted @ 2024-07-31 16:49 yooooooo 阅读(55) 评论(0) 推荐(0) 编辑
摘要:需要对比基线测试的情况; Kernel log: adb shell dmesg Event log: adb shell logcat –b events Logcat log: adb shell logcat lk boottime测试:(只适合LE) adb shell dmesg 搜索关键 阅读全文
posted @ 2024-07-30 15:00 yooooooo 阅读(251) 评论(0) 推荐(0) 编辑
摘要:1.jvm 堆内存(dalvik 堆内存) 每个Java应用程序在运行时都会拥有自己的JVM实例,这个实例会为其分配独立的堆内存空间。这意味着不同的应用程序之间不会共享堆内存。 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 阅读全文
posted @ 2024-07-26 16:50 yooooooo 阅读(609) 评论(0) 推荐(0) 编辑
摘要:1、运行需要检测内存泄露的程序 这里以“com.example.opengltest”程序为例。 2、点击Profiler按钮 3、点击SESIONS "+"号按钮选择设备,选择对应设备下的应用或进程 4、双击内存区块 5、操作应用程序要检测的部分或模块 6、关闭应用程序,多次点击鼠标右键“Forc 阅读全文
posted @ 2024-07-26 14:52 yooooooo 阅读(1643) 评论(0) 推荐(0) 编辑
摘要:由于项目需求,笔者最近在一台 Linux 服务器上部署了 ElasticSearch 集群,却发现运行过程中经常出现查询速度突然降低的问题,登录服务器后发现是物理内存不足,导致机器频繁发生页面交换。由于只是临时内存需求,没有提升配置的必要,而 ElasticSearch 中存储的数据主要是文本数据, 阅读全文
posted @ 2024-07-25 23:05 yooooooo 阅读(1134) 评论(0) 推荐(0) 编辑
摘要:ZRAM(压缩内存块设备)和传统的SWAP分区都是Linux系统中用来增加可用内存的方法,但它们的工作原理和实现方式有很大的区别: ZRAM 压缩内存:ZRAM使用压缩算法将数据存储在内存中。这样,当系统需要将数据写入swap空间时,它会首先将数据压缩,然后存储在RAM中。这意味着相同大小的物理内存 阅读全文
posted @ 2024-07-25 22:30 yooooooo 阅读(481) 评论(0) 推荐(0) 编辑
摘要:一、引文 随着CPU架构的发展,工艺的升级,带来性能提升,能效的提升(同性能下)。但是由于极限性能的增加,也带来了peak功耗的增加(大部分情况下,能效比的提升无法抵消这部分),CPU功耗优化一直是广大SOC厂商比较头疼的问题。 CPU功耗分为静态功耗和动态功耗: 静态功耗(static power 阅读全文
posted @ 2024-07-25 15:57 yooooooo 阅读(143) 评论(0) 推荐(0) 编辑
摘要:随着linux内核调度技术的不断演进,目前存在多个调度类(stop、deadline、rt、cfs、idle)以满足不同性质和要求的任务(task)的调度需求。对于用户空间来说,完全公平调度器(CFS)和实时调度器(RT)是绝大多数任务所使用的,但是基于POSIX Priority算法不足以支撑关于 阅读全文
posted @ 2024-07-24 23:36 yooooooo 阅读(155) 评论(0) 推荐(0) 编辑
摘要:proc文件系统(/proc/sys/kernel/) sched_child_runs_first /proc/sys/kernel/sched_child_runs_first是Linux内核中的一个配置文件,它用于控制调度器如何处理新创建的进程(即子进程)与它们的父进程之间的关系。 功能说明: 阅读全文
posted @ 2024-07-24 16:22 yooooooo 阅读(363) 评论(0) 推荐(0) 编辑
摘要:提高缓存命中率是优化系统性能的关键策略之一。以下是一些提高缓存命中率的有效方法: 数据局部性优化: 空间局部性:优化数据访问模式,使得数据访问在空间上连续,比如通过循环展开和数据重排。 时间局部性:确保数据在被访问后不久再次被访问,比如通过循环重排和数据重用。 缓存行对齐: 确保数据结构的布局与缓存 阅读全文
posted @ 2024-07-24 15:03 yooooooo 阅读(278) 评论(0) 推荐(0) 编辑
摘要:目录1.前言2.大纲3. Input触控事件处理流程3.1 系统机制分析3.2 结合Systrace分析4. 应用进程的创建与启动4.2 创建应用进程4.2.1 AMS 发送socket请求4.2.2 Zygote 处理socket请求4.2.3 应用进程初始化5. 应用主线程消息循环机制建立6. 阅读全文
posted @ 2024-07-21 19:40 yooooooo 阅读(450) 评论(1) 推荐(1) 编辑
摘要:目录一、Camx trace 调试开关设置1.设置 camxoverridesettings trace开关2. 重启后设置开启camx trace 开关二、Camera 冷启动阶段分解分析1. 从 TouchUp 到 ActivityStart 耗时2. 从 ActivityStart 到 App 阅读全文
posted @ 2024-07-18 23:15 yooooooo 阅读(125) 评论(0) 推荐(0) 编辑
摘要:Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi。 转载自使用PSI(Pressure Stall Information)监控服务器资源_Linux_gameneedless_InfoQ写作社区 1.概述 当 CPU、内存或 IO 设备争 阅读全文
posted @ 2024-07-18 18:33 yooooooo 阅读(228) 评论(0) 推荐(0) 编辑
摘要:1.各种MMU MMU是memory manage unit 内存管理单元; SMMU是system memory manage unit 系统内存管理单元; IOMMU和SMMU的功能基本相同,只是不同厂商的叫法 2.各种MMU的使用场景 MMU是cpu和各种处理器对应的内存管理单元; SMMU/ 阅读全文
posted @ 2024-07-18 17:32 yooooooo 阅读(308) 评论(0) 推荐(0) 编辑
摘要:Android JIT(Just-In-Time)编译是一种动态编译技术,在运行时将字节码转换为机器码,以提高应用程序的执行效率。与静态编译不同,JIT编译是在应用程序运行时进行的,因此可以在程序执行期间进行优化。 JIT编译的工作原理 启动时解释执行:应用程序启动时,字节码通过解释器逐行执行,确保 阅读全文
posted @ 2024-07-18 10:44 yooooooo 阅读(158) 评论(0) 推荐(0) 编辑
摘要:概要介绍 为了保证Android系统的顺滑体验,各个厂家都有针对性的对Android系统做了性能优化的方案。高通也基于AOSP开发了一套性能优化框架,本文叫做BoostFramework。本文将介绍下BoostFramework的基本框架。BoostFramework的结构框架 BoostFrame 阅读全文
posted @ 2024-07-17 16:24 yooooooo 阅读(162) 评论(0) 推荐(0) 编辑
摘要:什么是HIDL HIDL 全称为HAL interface definition language(发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL),Android O开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和F 阅读全文
posted @ 2024-07-17 15:07 yooooooo 阅读(758) 评论(0) 推荐(0) 编辑
摘要:JNI (Java Native Interface) 和 HAL (Hardware Abstraction Layer) 在 Android 系统中都扮演着与本地代码交互的重要角色,但它们的功能和应用场景有所不同。以下是它们之间的关系和区别: JNI (Java Native Interface 阅读全文
posted @ 2024-07-17 14:03 yooooooo 阅读(120) 评论(0) 推荐(0) 编辑
摘要:目录背景CPU调频概念实现验证线程CPU亲和性概念亲和性控制API应用层控制实现验证线程优先级概念实现验证 背景 为了进一步优化APP性能,最近针对如何提高应用对CPU的资源使用、以及在多线程环境下如何提高关键线程的执行优先级做了技术调研。本文是对技术调研过程的阶段性总结,将分别介绍普通应用如何调控 阅读全文
posted @ 2024-07-16 23:39 yooooooo 阅读(556) 评论(0) 推荐(0) 编辑
摘要:一、前言 本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出了几个 阅读全文
posted @ 2024-07-16 23:31 yooooooo 阅读(170) 评论(0) 推荐(0) 编辑
摘要:在操作系统和调度机制中,静态优先级和动态优先级是两种不同的进程优先级管理方式,它们在调度策略和优先级调整上有明显的区别。 静态优先级 定义: 静态优先级是在进程创建时设定,并在整个进程的生命周期内保持不变。 特点: 不会随着时间或进程行为变化。 通常由系统管理员或应用程序设置。 适用于实时系统或需要 阅读全文
posted @ 2024-07-16 23:10 yooooooo 阅读(253) 评论(0) 推荐(0) 编辑
摘要:在Linux系统中,nice值和静态优先级用于控制进程调度的优先级,但它们的范围和含义有所不同。让我们详细解释一下两者的区别和联系。 1. Nice值 范围:nice值的范围是从 -20 到 19。 -20:最高优先级。 19:最低优先级。 作用:nice值用于调整进程的相对优先级。nice值越低, 阅读全文
posted @ 2024-07-16 23:08 yooooooo 阅读(80) 评论(0) 推荐(0) 编辑
摘要:*注:基于Android11源码 ServiceManager进程是在init进程创建的,所以我们从init进程的main()开始分析: // 文件路径: system/core/init/main.cpp int main(int argc, char** argv) { ... if (!str 阅读全文
posted @ 2024-07-14 18:27 yooooooo 阅读(141) 评论(0) 推荐(0) 编辑
摘要:启动阶段使能event trace 同上,配置commandline: trace_event=sched:*,timer:*,irq:* trace_buf_size=40M ftrace=tracing_on 有上面的实例可以知道,ftrace除了能够在运行阶段动态配置使能和关闭,也可以利用命令 阅读全文
posted @ 2024-07-14 10:50 yooooooo 阅读(54) 评论(0) 推荐(0) 编辑
摘要:简介 高通 ramdump 可以解析出 ftrace,方便用于追踪 快省稳 问题。 kernelshark 是一个可以查看 trace event 的图形化工具,方便梳理和观察内核微观行为。 trace-cmd 是设置读取 ftrace 的命令行工具,kernelshark既可以记录数据,也可以图形 阅读全文
posted @ 2024-07-14 10:45 yooooooo 阅读(249) 评论(0) 推荐(0) 编辑
摘要:如果将block的内存属性配置成Non-cacheable,那么数据就不会被缓存到cache,那么所有observer看到的内存是一致的,也就说此时也相当于Outer Shareable。 其实官方文档,也有这一句的描述: 在B2.7.2章节 “Data accesses to memory loc 阅读全文
posted @ 2024-07-13 10:45 yooooooo 阅读(113) 评论(0) 推荐(0) 编辑
摘要:1. 关机流程 Android上层触发关机的入口很多,但最终几乎都是调用ShutdownThread.shutdown来实现。如下是一些常见的调用关机的点: StatusBarManagerService#shutdown, 这个主要是对接SystemUI(StatusBarManager是Andr 阅读全文
posted @ 2024-07-10 17:49 yooooooo 阅读(731) 评论(0) 推荐(0) 编辑
摘要:在 perf 工具生成的火焰图中看到 [kernel.kallsyms],通常意味着火焰图中包含内核符号,但这些符号没有被正确解析。这可能是由于以下几个原因导致的: 内核符号表不可用或不完整:perf 工具需要内核的符号表来解析这些符号。如果内核符号表不可用或不完整,可能会出现 [kernel.ka 阅读全文
posted @ 2024-07-10 11:51 yooooooo 阅读(361) 评论(0) 推荐(0) 编辑
摘要:很多时候,写代码是一件很爽的事情,但最后需要对APP进行瘦身、性能分析却是一件很棘手的事情。当需要对APP的性能进行分析时,Simpleperf是一个简单快捷的选择。 正文开始前,先奉上官方的资料: Simpleperf命令和选项参考 Simpleperf 用法 什么是Simpleperf Simp 阅读全文
posted @ 2024-07-09 18:33 yooooooo 阅读(507) 评论(0) 推荐(0) 编辑
摘要:1. 正文 Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的 阅读全文
posted @ 2024-07-09 17:35 yooooooo 阅读(225) 评论(0) 推荐(0) 编辑
摘要:1. 正文 1.1 线程状态查看 Systrace 会用不同的颜色来标识不同的线程状态, 在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么, 是 cpu 执行慢还是因为 Binder 调用, 又或是进行 io 操作, 又或是拿不到 cpu 时间 阅读全文
posted @ 2024-07-09 17:34 yooooooo 阅读(431) 评论(0) 推荐(0) 编辑
摘要:1.正文 今天来讲一下为何我们讲到流畅度,要首先说 60 帧。 我们先来理一下基本的概念: 60 fps 的意思是说,画面每秒更新 60 次 这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅 每秒 60 次,也就是 1/60 ~= 16.67 ms 要更新一次 在理解 阅读全文
posted @ 2024-07-09 17:34 yooooooo 阅读(60) 评论(0) 推荐(0) 编辑
摘要:Launcher的启动经过了三个阶段: 第一个阶段:SystemServer完成启动Launcher Activity的调用 第二个阶段:Zygote()进行Launcher进程的Fork操作 第三个阶段:进入ActivityThread的main(),完成最终Launcher的onCreate操作 阅读全文
posted @ 2024-07-05 16:15 yooooooo 阅读(530) 评论(0) 推荐(0) 编辑
摘要:1. 正文 1.1 线程状态查看 Systrace 会用不同的颜色来标识不同的线程状态, 在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么, 是 cpu 执行慢还是因为 Binder 调用, 又或是进行 io 操作, 又或是拿不到 cpu 时间 阅读全文
posted @ 2024-07-04 17:33 yooooooo 阅读(251) 评论(0) 推荐(0) 编辑
摘要:在 Linux 系统中,进程的 D 状态表示进程处于不可中断的睡眠状态 (Uninterruptible Sleep)。这种状态通常由进程等待某些资源或事件引起,这些资源或事件无法立即可用。以下是一些常见的导致进程进入 D 状态的原因: I/O 操作: 等待磁盘 I/O 完成:进程可能正在等待磁盘读 阅读全文
posted @ 2024-07-04 15:10 yooooooo 阅读(1595) 评论(0) 推荐(0) 编辑
摘要:QSSI 是 Qualcomm Single System Image 的缩写。 Android Q上开始支持QSSI。 QSSI 是用来编译system.img的3.1 QSSI编译注意事项 lunch qssi 编译system.img lunch target 编译其余的image 3.2 有 阅读全文
posted @ 2024-07-04 14:21 yooooooo 阅读(338) 评论(0) 推荐(0) 编辑
摘要:简介: Systrace允许监视和跟踪Android系统的行为(trace)。它会指明系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供建议的解决方案。但是不能确定具体有问题的代 阅读全文
posted @ 2024-07-04 11:52 yooooooo 阅读(89) 评论(0) 推荐(0) 编辑
摘要:在 Android 代码中增加 Atrace 跟踪,可以使用 Android 提供的 android.os.Trace 类。这允许你在应用代码中手动添加自定义的跟踪点,以捕获特定代码段的执行情况。以下是如何在 Android 代码中增加 Atrace 跟踪的步骤: 导入 android.os.Tra 阅读全文
posted @ 2024-07-02 21:36 yooooooo 阅读(704) 评论(0) 推荐(0) 编辑
摘要:前言 如果你接触过 跨进程通信 (IPC),那么你对Binder一定不陌生 虽然 网上有很多介绍 Binder的文章,可是存在一些问题:浅显的讨论Binder机制 或 一味讲解 Binder源码、逻辑不清楚,最终导致的是读者们还是无法形成一个完整的Binder概念 本文采用 清晰的图文讲解方式,按照 阅读全文
posted @ 2024-07-01 17:22 yooooooo 阅读(1027) 评论(0) 推荐(1) 编辑
摘要:1.1、冷启动和热启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动。 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在 阅读全文
posted @ 2024-07-01 11:44 yooooooo 阅读(259) 评论(0) 推荐(0) 编辑
摘要:前言 System Server是android 基本服务的提供者,是android系统运行的最基本需求,所有server运行在一个叫system_process的进程中,system_process进程是android java虚拟机跑的第一个进程,从Zygote 创建而来,是andorid系统最 阅读全文
posted @ 2024-07-01 10:23 yooooooo 阅读(212) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示