- 博客(33)
- 收藏
- 关注
原创 WALT 调度与负载计算
任务入队的时候,无论哪一种调度类,最终都要执行fixup_cumulative_runnable_avg(),进行rq->walt_stats.cumulative_runnable_avg += demand 和 rq->walt_stats.pred_demands_sum += pred_demand。
2025-04-10 19:32:06
868
原创 【WALT】top task相关代码详解
首先看一下与top task有关的结构体。top_tasks_bitmap是一个位图,一个位有两种状态,即 0 和 1。位图本质上是数组,适用于大规模数据,但数据状态又不是很多的情况,通常是用来判断某个数据是否存在。top_task_bitmap 的作用是可以快速找到当前 CPU 的运行队列在上一个窗口(prev)和当前窗口(curr)中有哪些区间在执行任务。
2025-04-09 16:13:57
167
原创 【WALT】predict_and_update_buckets() 与 update_task_pred_demand() 代码详解
时会先判断上一个窗口中当前任务所执行的时间(归一化后)处于的等级bidx,根据bidx 和 数组 busy_buckets 来预测 pred_demand,然后对数据 busy_buckets 中下标非 bidx 的权重进行衰减,对下标为 bidx 的权重进行加强。如果任务的pred_demand 比 curr_window 大,就不更新,否则重新通过 get_pred_busy() 更新 pred_demand。新创建的任务没有历史执行时间的数据,因此没有办法进行预测,直接结束,返回runtime。
2025-04-09 14:45:31
976
原创 【WALT】WALT入口 update_task_ravg()
在任务满足条件后,在不同情况下根据任务的开始时间、窗口的开始时间以及当前时间来计算任务在当前及之前M哥窗口中的运行时间。WALT算法根据历史窗口中的值计算任务的demand,根据桶算法计算任务的perd_demand,并将demand 与 pred_demand 统计进任务所在的CPU 的 rq(runqueue)中。在任务满足条件后,在不同情况下根据任务的开始时间、窗口的开始时间以及当前时间来计算任务在当前及上一个窗口中的运行时间,将不同窗口内的运行时间进行归一化,并根据任务的状态统计进任务的。
2025-04-08 21:51:17
545
原创 【WALT】update_history()代码详解
update_history函数,涉及任务历史数据处理、demand和pred_demand计算,以及如何将这些值应用于CPU负载管理和任务信息更新。
2025-04-08 20:04:22
414
原创 【WALT】scale_exec_time() 代码详解
EAS主要针对异构CPU架构,如Arm big.LITTLE,因为这种架构有不同性能和功耗的CPU核心,不同CPU的最大算力、最大频率等都不同。这个值在设备树中给定,在运行该版本内核的 pixel 3xl 中,小核簇和大核簇的 max_possible_efficiency 分别是 1024 和 1740。中进行,簇内每个CPU的频率都是一致的,因此一个簇会拥有一个当前频率和一个最大频率,即policy->cpuinfo.max_freq;对于拥有多个CPU的簇来说,频率的计算在。
2025-04-08 19:52:16
463
原创 【WALT】update_cpu_busy_time() 代码详解 & busytime 路径负载计算
消耗最多CPU时间的任务。对影响时间要求高的任务(如UI渲染、触摸事件处理)。频繁访问内存、缓存或I/O的任务,可能导致系统瓶颈。
2025-04-08 19:29:48
568
原创 【WALT】update_task_demand()代码详解
函数主要处理任务运行时间的累加和窗口更新,涉及任务在旧窗口和新窗口中的时间处理,以及任务状态的判断。通过对任务运行时间的精确跟踪,WALT算法能够更准确地评估系统负载。
2025-04-07 20:21:02
751
原创 Android Binder调用的优先级
在Android系统中,Binder是进程间通信(IPC)的核心机制。Binder调用涉及优先级继承(Priority Inheritance),这是一种解决优先级反转问题的机制。优先级反转是指高优先级任务因为等待低优先级任务持有的资源而被阻塞,而低优先级任务又因为中等优先级任务的抢占而无法释放资源,从而导致高优先级任务长时间无法执行。
2025-03-25 20:09:15
962
原创 Android中的setInheritRT
在Android开发中,setInheritRT方法的作用于线程调度策略相关。主要用于控制子线程是否继承父线程的实时(Real-time)调度属性。
2025-03-21 16:23:40
706
原创 流水线(Pipeline)
在现代 CPU 设计中,流水线(Pipeline) 是将指令处理拆分为多个阶段以提高执行效率的关键技术。为了更精细地分析性能,流水线通常被分为 前端流水线(Frontend Pipeline) 和 后端流水线(Backend Pipeline)。
2025-03-14 17:30:27
856
原创 I/O 基础知识和概念
这个输出显示了系统的资源使用情况,包括 CPU、内存、交换空间和进程状态。系统内存几乎全部被使用,交换空间未被使用,可能意味着内存压力较大。进程 com.le123.ysdq 消耗了大量的 CPU 和内存资源。同步是“等待”的方式,任务按顺序执行。异步是“不等待”的方式,任务并行执行,完成后通过回调等方式通知。阻塞表示调用方必须等待任务完成才能继续执行。非阻塞表示调用方不必等待任务完成,可以继续执行其他操作。同步与异步:描述任务是否等待完成。同步等待,异步不等待。阻塞与非阻塞。
2025-02-11 14:23:42
642
原创 Linux 内核进程调度
CPU消耗型进程需要高的吞吐率,IO消耗型进程需要强的响应性,这两点都是调度器需要考虑的。为了更快响应IO消耗型进程,内核提供了一个抢占(preempt)机制,使优先级更高的进程,去抢占优先级低的进程运行。
2025-01-26 14:24:08
1237
原创 Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)
简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
2025-01-07 21:42:01
1150
原创 Android Binder 进程间通信
Linux 中的系统内存可以分为两个不同的区域:内核空间和用户空间。内核空间是内核(即操作系统的核心)执行(即运行)并提供其服务的地方。内存由 RAM(随机存取存储器)单元组成,其内容可以以极高的速度访问(即读取和写入),但只能临时保留(即,在使用时或最多在电源保持开启时保留)。它的目的是保存当前正在使用的程序和数据,从而充当 CPU(中央处理器)和速度慢得多的存储之间的高速中介,后者通常由一个或多个硬盘驱动器 (HDD) 组成。用户空间是用户进程(即内核以外的所有内容)运行的内存位置的集合。
2024-12-19 20:08:04
1265
原创 应用冷启动详细流程分析(附源码)
应用启动速度是用户体验的核心指标之一,无论是Google还是手机厂商还是应用开发者,都在不断地优化启动时间,为了更快一点而努力。想优化应用启动流程,就必须要对应用启动流程有充分的认识与了解。下文将会基于AndroidU的源码,结合systrace,来剖析应用冷启动的全流程。
2024-11-07 10:40:25
1033
原创 Android Input的流程和原理
当输入设备可用时,Linux内核会在/dev/input/下创建对应名为event0~n或其他名称的设备节点。而当输入设备不可用时,则会将对应的节点删除。Android输入系统的工作原理概括来说,就是监控/dev/input/下的所有设备节点,当某个节点有数据可读时,将数据读出并进行一系列的翻译加工,然后再所有的窗户中寻找合适的事件接收者,并派发给它。
2024-10-25 20:03:56
1841
原创 响应速度相关知识
响应速度是应用App性能的重要指标之一。响应慢通常表现为点击效果延迟,操作等待或白屏时间长等,主要场景包括:应用启动场景,包括冷启动、热启动、温启动等。界面跳转场景,包括应用内页面跳转、App之间跳转。其他非跳转的点击场景(开关、弹窗、长按、控件选择、单击、双击等)。亮灭屏、开关机、解锁、人脸识别、拍照、视频加载等场景。
2024-10-09 20:21:44
2012
2
原创 Android中的Hardware Layer
通过上面的对比以及推荐的三篇文章的阅读,你应该对硬件渲染和软件渲染的区别了然于胸,这里总结一下:硬件渲染情况下,app 存在主线程和渲染线程;软件渲染情况下, app 只有主线程没有渲染线程。硬件渲染情况下,app 最终绘制是借助 GPU 来实现;软件渲染情况下, app 最终绘制是使用 CPU 来实现(调用 skia 库)。硬件渲染情况下,App 的性能是要优于软件渲染的。
2024-10-08 15:20:26
1483
原创 卡顿丢帧分析
系统开发的过程中,由很多引起Android卡顿的原因,但是用户和测试感受最直观的是正在使用的应用掉帧和不流畅。由于测试和用户没有办法直接确定卡顿的原因,所以一般会直接将Bug提到我们这里,所有我们的角色更像是一个卡顿问题接口人,负责分析引起卡顿的原因,再把Bug分配给对应的模块负责人去解决,如框架\App\多媒体\Display\BSP等。
2024-10-08 15:10:55
2862
原创 Android的logcat日志详解
Android 日志系统为日志消息保留了多个环形缓冲区,但并非多有的日志消息都会发送到默认的环形缓冲区。缓冲区描述举例radio输出通信系统的日志,包含无线装置/电话相关消息events输出event模块的日志main主日志缓冲区(默认),不包含系统和崩溃日志消息system输出系统日志crash输出崩溃日志all输出所有缓冲区日志default输出main、system、crash缓冲区日志。
2024-09-06 20:21:35
2527
原创 抓取trace
首先打开。滚动到。找到(或)并连续点击7次,直到看到“您已进入开发者模式”的提示。找到系统跟踪,打开【显示跟踪"快捷设置"功能块】和【跟踪可调试的应用】。打开后会出现虫子图标(开始记录)。打开虫子,然后点开几个应用,然后关闭虫子(停止记录)。使用adb命令(获取记录信息)。
2024-09-05 21:30:40
711
原创 synchronized详细
synchronized是Java中实现线程同步的关键字,用于保护共享资源的访问,确保在多线程环境中同一时间只有一个线程能够访问特定的代码段或方法。它提供了互斥性,可见性和有序性三个基本特征,确保了线程间操作的原子性和数据的一致性。互斥性:当一个线程进入了synchronized代码块或方法时,其他视图进入该同步区域的线程必须等待,直至拥有锁的线程执行完毕并释放锁。这确保了在同一时间只能有一个线程访问共享资源,避免了竞态条件和数据不一致的问题。
2024-08-28 16:39:20
1392
原创 API帮助文档下载
① 打开官网。② 往下滑,找到 java11 下的 Documentation Download 选项,点击下载。③ 解压之后,找到并打开docs → api → index.html。
2024-08-26 10:38:30
865
原创 原码、反码、补码(计算机底层)
大家看一下数轴,黄色小狗使我们预期的效果,黑色的小狗是实际的效果。我们正常都是认为从1000000变成10000001这个过程是加一,但是因为是负数的原因所以是减一,所以结果与我们的预期相反。因为反码中的0是有两种表现形式11111111(00000000),这导致我们计算过程中,如果没有跨0计算是没有任何问题的,但是如果跨0了,会有一个误差。在-2的基础上+1正常为-1,但是实际上这个值为-3。负数在运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。
2024-08-13 17:08:12
4625
3
原创 ADB详细(从下载安装到灵活运用)
ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。
2024-08-12 16:01:38
19423
1
原创 Maven下载、安装、配置与使用
进入Maven官网,按下图依次操作。上述步骤下载的是最新版本的Maven,如果想要下载其他版本,则需按下图依次操作。
2024-08-12 14:54:07
1674
原创 ADB基础
ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。
2024-07-29 21:31:14
1422
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人