
任务调度器:从入门到放弃(一)
本文是关于Linux内核调度器的科普文章,作者XiaoGang通过内部项目复盘中的实际问题,引出了调度器的重要性和工作原理。文章主要内容包括: 1. 调度器的作用:CPU资源有限,但任务数量众多,调度器通过分时复用让用户感觉多个线程同时运行。 2. Linux的调度类:包括stop、deadline、realtime、fair和idle等,各有不同的优先级。 3. RT调度类与fair调度的区别:RT调度类按照优先级顺序选择任务,而fair调度类采用虚拟运行时间(virtual runtime)来决定任务的调度。 4. 调度器管理的任务:只有处于TASK_RUNNING状态的进程在调度器的管理范围内。 5. 比例调度的问题:通过大量低优先级线程可能占用较高资源配额。 6. cgroup的作用和问题:cgroup通过cpu.shares控制资源配额,解决比例调度问题,但同时也带来了一些新的挑战。 文章以实例和实验说明问题,深入浅出地解释了调度器的复杂机制。下周将更新续篇,继续探讨相关话题。
![[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_tstlhyw.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗
当前文章内容已隐藏,评论后可见。
![[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_ahgrdvk.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍
![[Android稳定性] 第047篇 [问题篇] Unexpected kernel BRK exception at EL1](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_ityiau2.webp?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第047篇 [问题篇] Unexpected kernel BRK exception at EL1
当前文章内容已隐藏,评论后可见。

【深入内核】linux ftrace详解
Ftrace(Function Tracer)是Linux内核自带的轻量级跟踪框架,用于记录内核内部事件和函数调用,帮助开发者分析系统执行路径、时序瓶颈和异常行为。Ftrace支持多种trace类型,包括function、function_graph、blk等,可以通过静态插桩和动态插桩两种方式实现。Ftrace可以通过配置内核参数和挂载debugfs文件系统来使能,并通过trace目录下的文件进行操作和管理。常见的trace event包括sched_switch、sched_wakeup、power/suspend_resume等,可以用于调试和分析系统性能和延迟问题。

高通平台xbl启动流程补充
这篇文章介绍了高通Android设备在启动过程中的XBL(eXtensible Boot Loader)阶段的详细启动流程。通过流程图和日志分析的方式,对XBL阶段的执行步骤进行了逐一解读,帮助理解从SBL到ABL之后的关键启动环节。
![[Android稳定性] 第046篇 [方法篇] 如何使用trace32恢复AOP现场?](https://halo-1259291793.cos.ap-shanghai.myqcloud.com/2025/06/a1dmnee.png?imageView2/0/w/800)
[Android稳定性] 第046篇 [方法篇] 如何使用trace32恢复AOP现场?
这篇文章介绍了使用hansei工具解析AOP/RPM以及使用trace32恢复AOP现场的过程,包括工具的获取、安装依赖库、执行工具、恢复前的准备工作以及恢复操作。
![[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00](https://halo-1259291793.cos.ap-shanghai.myqcloud.com/2025/06/lbivwl4.png?imageView2/0/w/800)
[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
在测试DDR TT和Reboot测试专项过程中,机器出现了多次dump,且dump根因相同。通过分析panic现场,发现是由于UFS初始化失败导致的。具体来说,是在`ufshcd_complete_dev_init`函数中,对`fDeviceInit`标志的轮询超时,导致无法挂载必要的分区,最终引发panic。 为了进一步定位问题,我们在`ufshcd_complete_dev_init`函数中添加了debug patch,增加了时间戳计算和日志输出。通过新的dump分析,发现异常发生在轮询`fDeviceInit`标志的过程中,时间从2.25秒突然跳到了7.15秒,中间没有日志输出,表明存在长时间阻塞。 通过trace32分析,发现一个名为`kworker/6:1`的线程出现了明显的异常,执行时间长达4386毫秒。进一步分析该线程的栈和寄存器信息,发现其最后一次执行的函数是`kfree_rcu_monitor()`,即用于回收内存的后台回调。结合CPU栈分析,发现大部分CPU都在执行串口输出相关的函数,如`qcom_geni_serial_poll_tx_done`。 综合以上分析,根本原因是UFS函数执行时被高优先级的串口输出调度出去。串口输出在持锁状态下运行,不允许调度,直到输出结束;同时,阻塞式串口写函数会主动spin等待硬件完成,长时间占用CPU,导致UFS函数无法正常执行,最终引发panic。

linux-dead-lock-detect-lockdep
本文主要介绍了死锁概念、AB-BA死锁的形成、Linux中的lockdep死锁检测模块及其使用实例。 摘要: 死锁是指多个进程因为长久等待已被其他进程占有的资源而陷入阻塞的状态。Linux中的lockdep模块可以检测死锁,它通过跟踪锁类之间的依赖关系来工作。文章介绍了死锁的概念,分析了AB-BA死锁的形成原因,并给出了lockdep的使用实例,说明了如何通过lockdep检测和修复死锁问题。
![[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/24/11/4PSuNS.png)
[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address
一、问题现象 老化测试时出现黑屏现象, 9/12: 今天已经确认的现象 使用9-11的版本 72台机器出现27 个黑屏,其中25个为USB问题引起的dump(2个是电量低关机),通过LOG分析是在老化45次重启测试的时候出问题(45次重启1个半小时),9-11版本带了高通的等待probe完成 wai