自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 (六)Linux 调度器 - 实时调度器

Linux内核实时进程调度机制分析 摘要:本文详细分析了Linux内核中实时进程的调度机制。实时进程采用RT调度器管理,支持SCHED_FIFO和SCHED_RR两种策略,优先级高于普通进程。关键数据结构包括运行队列rq、实时运行队列rt_rq和调度实体sched_rt_entity等。RT调度器使用优先级队列组织任务,维护100个优先级链表。系统通过带宽控制机制(默认周期1s,运行时间0.95s)限制实时任务执行。调度流程包含任务选择(pick_next_task_rt)、入队出队(enqueue/deq

2026-01-21 19:07:21 653

原创 (五)Linux 调度器 - CFS调度器

Linux的完全公平调度器(CFS)采用红黑树管理调度实体,通过虚拟运行时间(vruntime)实现公平调度。CFS核心数据结构包括调度类sched_class、运行队列rq/cfs_rq和调度实体sched_entity,使用面向对象设计实现调度策略。调度流程包含任务入队/出队、时间片计算和任务选择:通过权重分配运行时间,将vruntime最小的任务优先调度;每个调度tick更新运行时信息并检查抢占;任务切换时通过pick_next_task_fair选择下一个任务。CFS实现了高效的O(log n)调度

2026-01-19 19:59:10 836

原创 (四)Linux 调度 - 组调度及带宽控制

摘要:Linux组调度(task_group)通过cgroup实现进程分组和CPU资源分配,解决多用户资源公平性问题。内核使用task_group结构组织CFS和RT组调度,通过权重和带宽控制机制分配CPU时间。带宽控制利用cfs_bandwidth结构管理周期限额,通过定时器实现时间配额的分发和回收。系统采用层次化调度架构,从根节点向下遍历进行资源分配,支持通过/sys文件系统动态调整组权重和带宽参数,实现细粒度的CPU资源控制。

2026-01-19 19:55:37 452

原创 (三)Linux 调度器 - 进程切换

本文分析了ARM架构下Linux内核的进程切换机制。主要内容包括:1) 抢占机制分为用户抢占和内核抢占,通过设置TIF_NEED_RESCHED标志触发,在异常/中断返回或系统调用等时机执行;2) 内核抢占模型有三种,通过preempt_count控制抢占时机;3) 上下文切换涉及地址空间切换和寄存器保存/恢复,包含页表切换和缓存刷新等开销。文章详细阐述了进程切换的关键数据结构、触发条件和执行流程,揭示了Linux内核在多任务处理中的调度机制。

2026-01-19 19:53:07 689

原创 (二)Linux 调度器 - CPU负载

本文介绍了CPU负载的概念及其在Linux内核中的计算方法。CPU负载反映进程对系统产生的压力,其计算方式类似于大桥通行能力,1.0表示单核满负荷。内核通过全局CPU平均负载(包括1/5/15分钟均值)、运行队列负载和PELT(Per-entity load tracking)三种方式跟踪负载状态。其中,PELT方法通过跟踪每个调度实体(task或task_group)的负载贡献,采用1024us为周期进行分段计算,并随时间进行衰减处理。这些负载数据为调度器负载均衡和其他子系统(如DVFS)提供决策依据,有

2026-01-19 19:50:52 787

原创 (一)Linux 调度器 - 基础

本文主要介绍了Linux内核中进程和调度的核心概念。进程是资源分配的最小单位,线程是CPU调度的最小单位,二者都通过task_struct结构描述。进程状态包括运行、就绪、阻塞等多种互斥状态。Linux提供了5种调度器(Stop、Deadline、RT、CFS、IDLE),通过运行队列管理调度实体。调度程序通过schedule()、schedule_tick()等函数实现进程切换和周期性调度,支持从毫秒到纳秒不同精度的调度。文章还介绍了任务分组机制和调度相关的关键数据结构和函数,如rq运行队列和task_g

2026-01-19 19:47:35 794

原创 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 1728

原创 【WALT】top task相关代码详解

首先看一下与top task有关的结构体。top_tasks_bitmap是一个位图,一个位有两种状态,即 0 和 1。位图本质上是数组,适用于大规模数据,但数据状态又不是很多的情况,通常是用来判断某个数据是否存在。top_task_bitmap 的作用是可以快速找到当前 CPU 的运行队列在上一个窗口(prev)和当前窗口(curr)中有哪些区间在执行任务。

2025-04-09 16:13:57 498

原创 【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 1549

原创 【WALT】update_window_start() 代码详解

【代码】【WALT】update_window_start() 代码详解。

2025-04-08 21:54:18 330

原创 【WALT】WALT入口 update_task_ravg()

在任务满足条件后,在不同情况下根据任务的开始时间、窗口的开始时间以及当前时间来计算任务在当前及之前M哥窗口中的运行时间。WALT算法根据历史窗口中的值计算任务的demand,根据桶算法计算任务的perd_demand,并将demand 与 pred_demand 统计进任务所在的CPU 的 rq(runqueue)中。在任务满足条件后,在不同情况下根据任务的开始时间、窗口的开始时间以及当前时间来计算任务在当前及上一个窗口中的运行时间,将不同窗口内的运行时间进行归一化,并根据任务的状态统计进任务的。

2025-04-08 21:51:17 1068 1

原创 【WALT】update_history()代码详解

update_history函数,涉及任务历史数据处理、demand和pred_demand计算,以及如何将这些值应用于CPU负载管理和任务信息更新。

2025-04-08 20:04:22 720

原创 【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 682

原创 【WALT】update_cpu_busy_time() 代码详解 & busytime 路径负载计算

消耗最多CPU时间的任务。对影响时间要求高的任务(如UI渲染、触摸事件处理)。频繁访问内存、缓存或I/O的任务,可能导致系统瓶颈。

2025-04-08 19:29:48 1010 1

原创 【WALT】update_task_demand()代码详解

函数主要处理任务运行时间的累加和窗口更新,涉及任务在旧窗口和新窗口中的时间处理,以及任务状态的判断。通过对任务运行时间的精确跟踪,WALT算法能够更准确地评估系统负载。

2025-04-07 20:21:02 1006

原创 Android Binder调用的优先级

在Android系统中,Binder是进程间通信(IPC)的核心机制。Binder调用涉及优先级继承(Priority Inheritance),这是一种解决优先级反转问题的机制。优先级反转是指高优先级任务因为等待低优先级任务持有的资源而被阻塞,而低优先级任务又因为中等优先级任务的抢占而无法释放资源,从而导致高优先级任务长时间无法执行。

2025-03-25 20:09:15 1433

原创 Android中的setInheritRT

在Android开发中,setInheritRT方法的作用于线程调度策略相关。主要用于控制子线程是否继承父线程的实时(Real-time)调度属性。

2025-03-21 16:23:40 852

原创 流水线(Pipeline)

在现代 CPU 设计中,流水线(Pipeline) 是将指令处理拆分为多个阶段以提高执行效率的关键技术。为了更精细地分析性能,流水线通常被分为 前端流水线(Frontend Pipeline) 和 后端流水线(Backend Pipeline)。

2025-03-14 17:30:27 1709

原创 I/O 基础知识和概念

这个输出显示了系统的资源使用情况,包括 CPU、内存、交换空间和进程状态。系统内存几乎全部被使用,交换空间未被使用,可能意味着内存压力较大。进程 com.le123.ysdq 消耗了大量的 CPU 和内存资源。同步是“等待”的方式,任务按顺序执行。异步是“不等待”的方式,任务并行执行,完成后通过回调等方式通知。阻塞表示调用方必须等待任务完成才能继续执行。非阻塞表示调用方不必等待任务完成,可以继续执行其他操作。同步与异步:描述任务是否等待完成。同步等待,异步不等待。阻塞与非阻塞。

2025-02-11 14:23:42 919

原创 Linux内核组成

Linux内核主要由外加一个组成。

2025-01-26 14:50:40 477

原创 Linux 内核进程调度

CPU消耗型进程需要高的吞吐率,IO消耗型进程需要强的响应性,这两点都是调度器需要考虑的。为了更快响应IO消耗型进程,内核提供了一个抢占(preempt)机制,使优先级更高的进程,去抢占优先级低的进程运行。

2025-01-26 14:24:08 1442

原创 Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)

简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。

2025-01-07 21:42:01 1565

原创 Android Binder 进程间通信

Linux 中的系统内存可以分为两个不同的区域:内核空间和用户空间。内核空间是内核(即操作系统的核心)执行(即运行)并提供其服务的地方。内存由 RAM(随机存取存储器)单元组成,其内容可以以极高的速度访问(即读取和写入),但只能临时保留(即,在使用时或最多在电源保持开启时保留)。它的目的是保存当前正在使用的程序和数据,从而充当 CPU(中央处理器)和速度慢得多的存储之间的高速中介,后者通常由一个或多个硬盘驱动器 (HDD) 组成。用户空间是用户进程(即内核以外的所有内容)运行的内存位置的集合。

2024-12-19 20:08:04 1607

原创 应用冷启动详细流程分析(附源码)

应用启动速度是用户体验的核心指标之一,无论是Google还是手机厂商还是应用开发者,都在不断地优化启动时间,为了更快一点而努力。想优化应用启动流程,就必须要对应用启动流程有充分的认识与了解。下文将会基于AndroidU的源码,结合systrace,来剖析应用冷启动的全流程。

2024-11-07 10:40:25 1308

原创 Android Input的流程和原理

当输入设备可用时,Linux内核会在/dev/input/下创建对应名为event0~n或其他名称的设备节点。而当输入设备不可用时,则会将对应的节点删除。Android输入系统的工作原理概括来说,就是监控/dev/input/下的所有设备节点,当某个节点有数据可读时,将数据读出并进行一系列的翻译加工,然后再所有的窗户中寻找合适的事件接收者,并派发给它。

2024-10-25 20:03:56 3306

原创 响应速度相关知识

响应速度是应用App性能的重要指标之一。响应慢通常表现为点击效果延迟,操作等待或白屏时间长等,主要场景包括:应用启动场景,包括冷启动、热启动、温启动等。界面跳转场景,包括应用内页面跳转、App之间跳转。其他非跳转的点击场景(开关、弹窗、长按、控件选择、单击、双击等)。亮灭屏、开关机、解锁、人脸识别、拍照、视频加载等场景。

2024-10-09 20:21:44 2624 2

原创 Android中的Hardware Layer

通过上面的对比以及推荐的三篇文章的阅读,你应该对硬件渲染和软件渲染的区别了然于胸,这里总结一下:硬件渲染情况下,app 存在主线程和渲染线程;软件渲染情况下, app 只有主线程没有渲染线程。硬件渲染情况下,app 最终绘制是借助 GPU 来实现;软件渲染情况下, app 最终绘制是使用 CPU 来实现(调用 skia 库)。硬件渲染情况下,App 的性能是要优于软件渲染的。

2024-10-08 15:20:26 1911

原创 卡顿丢帧分析

系统开发的过程中,由很多引起Android卡顿的原因,但是用户和测试感受最直观的是正在使用的应用掉帧和不流畅。由于测试和用户没有办法直接确定卡顿的原因,所以一般会直接将Bug提到我们这里,所有我们的角色更像是一个卡顿问题接口人,负责分析引起卡顿的原因,再把Bug分配给对应的模块负责人去解决,如框架\App\多媒体\Display\BSP等。

2024-10-08 15:10:55 4343

原创 一帧图像绘制过程(详解)

文档主要从一帧图像的起始、数据来源、图像绘制、图像显示五个方面来讲述一帧图像的生成过程。

2024-09-09 16:17:50 2869

原创 Android的logcat日志详解

Android 日志系统为日志消息保留了多个环形缓冲区,但并非多有的日志消息都会发送到默认的环形缓冲区。缓冲区描述举例radio输出通信系统的日志,包含无线装置/电话相关消息events输出event模块的日志main主日志缓冲区(默认),不包含系统和崩溃日志消息system输出系统日志crash输出崩溃日志all输出所有缓冲区日志default输出main、system、crash缓冲区日志。

2024-09-06 20:21:35 3279

原创 抓取trace

首先打开。滚动到。找到(或)并连续点击7次,直到看到“您已进入开发者模式”的提示。找到系统跟踪,打开【显示跟踪"快捷设置"功能块】和【跟踪可调试的应用】。打开后会出现虫子图标(开始记录)。打开虫子,然后点开几个应用,然后关闭虫子(停止记录)。使用adb命令(获取记录信息)。

2024-09-05 21:30:40 1309 1

原创 synchronized详细

synchronized是Java中实现线程同步的关键字,用于保护共享资源的访问,确保在多线程环境中同一时间只有一个线程能够访问特定的代码段或方法。它提供了互斥性,可见性和有序性三个基本特征,确保了线程间操作的原子性和数据的一致性。互斥性:当一个线程进入了synchronized代码块或方法时,其他视图进入该同步区域的线程必须等待,直至拥有锁的线程执行完毕并释放锁。这确保了在同一时间只能有一个线程访问共享资源,避免了竞态条件和数据不一致的问题。

2024-08-28 16:39:20 1570

原创 API帮助文档下载

① 打开官网。② 往下滑,找到 java11 下的 Documentation Download 选项,点击下载。③ 解压之后,找到并打开docs → api → index.html。

2024-08-26 10:38:30 1229

原创 原码、反码、补码(计算机底层)

大家看一下数轴,黄色小狗使我们预期的效果,黑色的小狗是实际的效果。我们正常都是认为从1000000变成10000001这个过程是加一,但是因为是负数的原因所以是减一,所以结果与我们的预期相反。因为反码中的0是有两种表现形式11111111(00000000),这导致我们计算过程中,如果没有跨0计算是没有任何问题的,但是如果跨0了,会有一个误差。在-2的基础上+1正常为-1,但是实际上这个值为-3。负数在运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。

2024-08-13 17:08:12 5306 3

原创 ADB详细(从下载安装到灵活运用)

ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。

2024-08-12 16:01:38 73273 2

原创 Maven下载、安装、配置与使用

进入Maven官网,按下图依次操作。上述步骤下载的是最新版本的Maven,如果想要下载其他版本,则需按下图依次操作。

2024-08-12 14:54:07 2117

原创 计算机中的数据存储

本章主要讲的是计算机数据存储的知识,感兴趣的小伙伴可以阅读以下。

2024-08-09 19:11:40 1095

原创 Android四大组件、七大布局详解

Android四大组件、七大布局详细内容。

2024-07-30 21:29:03 5953

原创 ADB基础

ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。

2024-07-29 21:31:14 1944

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除