2025-11-03
[linux内存管理] 第000篇 Linux内存管理系列开篇
系列深入剖析Linux内存管理在ARM64架构下的原理与实现,覆盖物理内存初始化流程、核心分配器机制(如buddy、slab、vmalloc、CMA等)、缺页异常处理、页面回收、内存节点解析等关键环节,结合Kernel 5.15源码与丰富补充资料,帮助读者系统理解底层架构与内存管理优化要点
2024-12-15
[Android稳定性] 第000篇 Android稳定性系列开篇
本文集深入探讨了Android稳定性问题,分为方法篇、原理篇和问题篇三个部分。方法篇介绍了稳定性分析的方法,包括高通Android平台稳定性分析、watchdog分析流程、crash分析以及RCU Stall问题的分析等。原理篇详细解析了subsystem ramdump、mtdoops、minidump、blackbox等稳定性相关原理,以及高通平台watchdog机制和QCOM常见reboot类型流程。问题篇则列举了多种稳定性问题案例,如原子状态调度引起的死机、中断风暴导致的panic、内存分配失败、slab内存泄露等,并分析了其原因及解决方案。
1日前
[linux内存管理] 第 048 篇 从 alloc_pages() 开始:快慢路径下的内存回收策略
2日前
[linux内存管理] 第 047 篇 Linux 内存回收(Memory Reclaim)总体架构
Memory Reclaim 是 Linux 内存管理的重要组成部分,也是理解内核内存管理的关键。本文以 Linux 5.15 为主线,从整体架构的角度梳理 Memory Reclaim 的工作流程、核心模块及源码结构,为后续深入分析页面回收机制做好铺垫。
6日前
[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 默认为未初始化的
2026-06-01
[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
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。
2026-04-10
[linux内存管理] 第046篇 Page Cache脏页回写机制深入分析
围绕 Linux‑6.1 的 Page Cache 脏页回写机制展开,承接上一篇“脏页标记”,完整追踪数据从被修改到落盘的路径。先提炼回写要解决的三大问题:何时触发、由谁执行、如何高效写回;再从历史演进切入,对比早期全局 pdflush/kupdated 与现代按设备划分的 bdi_writeback 框架,重点解析 backing_dev_info、bdi_writeback 等核心结构中与脏页控制、阈值、速率限制和等待队列相关的关键字段。通过源码路径展示回写线程从 bdi_queue_work 被唤醒,到 wb_workfn 轮询任务、wb_do_writeout 扫描 inode 链表并
2026-03-06
[linux内存管理] 第045篇 per-CPU变量的静态与动态分配
延续前一篇对 per-CPU 基础与初始化的分析,这一部分聚焦于内核中的静态 per-CPU 变量及其使用方式。之后将问题的重点放在了动态per-CPU变量的分配逻辑上,并通过一个案例来分析分配逻辑的内部细节。