[Android稳定性] 第000篇 Android稳定性系列开篇 2024-12-15 2 条
[Android稳定性] 第000篇 Android稳定性系列开篇

本文集深入探讨了Android稳定性问题,分为方法篇、原理篇和问题篇三个部分。方法篇介绍了稳定性分析的方法,包括高通Android平台稳定性分析、watchdog分析流程、crash分析以及RCU Stall问题的分析等。原理篇详细解析了subsystem ramdump、mtdoops、minidump、blackbox等稳定性相关原理,以及高通平台watchdog机制和QCOM常见reboot类型流程。问题篇则列举了多种稳定性问题案例,如原子状态调度引起的死机、中断风暴导致的panic、内存分配失败、slab内存泄露等,并分析了其原因及解决方案。

[linux内存管理] 第 050 篇 深度分析 direct reclaim 机制 1日前 评论
[linux内存管理] 第 050 篇 深度分析 direct reclaim 机制

直接回收是 Linux 内存分配慢路径中的同步回收机制:当 kswapd 的后台回收跟不上分配需求、快路径已失败时,由分配线程“自己动手”回收页面,作为介于 kswapd 与 OOM 之间的第二道防线。整体流程发生在 __alloc_pages_slowpath 中:先尝试唤醒 kswapd 和常规分配,再进行内存压缩和预留内存使用,关键的第四阶段是 __alloc_pages_direct_reclaim,通过 __perform_reclaim 调用 try_to_free_pages 做实际回收,然后再用 get_page_from_freelist 重试分配;若仍失败,则一次性释放 H

[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制 3日前 评论
[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制

在上一节整体梳理内存回收机制之后,本篇聚焦“内脏细节”,系统性拆解 Linux 内核中实际扫描与释放页面的关键链路。文章围绕 kswapd 后台回收与直接回收两大路径展开:一条从 kswapd() → balance_pgdat() → shrink_node(),解析内核回收线程何时被唤醒、在何种回收程度下停止,以及它与页面分配器之间如何协同保持内存水位;

[Android稳定性] 第65篇 SELinux 设置为 permissive 模式后出现的 kernel panic 1周前 3 条
[Android稳定性] 第65篇 SELinux 设置为 permissive 模式后出现的 kernel panic

项目在 bringup 阶段发现,将手机 SELinux 设为 permissive 后系统会在进入 Android 前死机。通过 fulldump 与内核日志可见 panic 原因是 UBSAN 报告的数组越界,触发点位于 uzram 模块的 zram_submit_bio。借助自研工具 kernel-panic-killer,AI 自动还原异常路径:反汇编发现 zram_submit_bio 中通过 current_algo 计算压缩算法索引,逻辑为 algo = current_algo; 访问 zram->comps[algo - 1]。由于 current_algo 默认为未初始化的

[Android稳定性] 第64篇 blk_mq_tags Use-After-Free 导致系统级 I/O 死锁 2026-06-01 1 条
[Android稳定性] 第64篇 blk_mq_tags Use-After-Free 导致系统级 I/O 死锁

围绕 SPRD UMS9230 平台在 DDR Qualify.TT 测试中出现的冻屏问题,分析通过 ramdump、vmlinux 等工件定位到根因在内核 Block 层:blk_mq_tags 结构体发生 use-after-free,Scsi_Host.tag_set.tags 指针指向已被释放并被 cpumask/IRQ affinity 对象重用的 kmalloc-128 slab。内存中出现 “effective_affinity” 字符串,进一步印证该区域已被 IRQ 亲和性相关对象覆盖。由于 blk_mq_hw_ctx.tags 和 sched_tags 均为 NULL,当 E

[Android稳定性] 第63篇 EROFS 解压缩页面 Use-After-Free 导致 Kernel Panic 2026-06-01 评论
[Android稳定性] 第63篇 EROFS 解压缩页面 Use-After-Free 导致 Kernel Panic

围绕一次发生在 Qualcomm Ravelin SNP-AN00 平台上的 kernel panic,分析聚焦于 EROFS 压缩文件系统在 LZ4 解压过程中出现的 translation fault。根因是函数 z_erofs_lz4_decompress_partial 通过 __memcpy 访问压缩源页时,源页与目标页已被 page allocator 释放并填充为标准毒化值 dead000000000400,形成典型的 use-after-free。