随笔分类 -  内存管理

内存管理-5-page->flags
摘要:一、简介 1. page->flags 定义 struct page 的 flags 是一个位图。真正“业务语义位”主要来自 enum pageflags。同一个物理位在不同页面类型下可能被复用(别名),这是 page->flags 最容易误解的点。 enum pageflags { //page- 阅读全文

posted @ 2026-04-22 21:07 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-5-mm_struct->flags
摘要:一、mm->flags 简介 基于msm-5.4 1. 标志定义 //linux/sched/coredump.h #define SUID_DUMP_DISABLE 0 /* No setuid dumping */ #define SUID_DUMP_USER 1 /* Dump as user 阅读全文

posted @ 2026-04-22 17:09 Hello-World3 阅读(3) 评论(0) 推荐(0)

内存管理-5-vm_area_struct->vm_flags
摘要:一、vma->flags 简介 vma->vm_flags 标志,控制的是一个 VMA 在内核里的行为属性。里面的每个标志都是位掩码。可以把它理解成:同样都是一段虚拟地址区间,不同 flag 决定了这段区间能不能扩展、是否参与 core dump、是否是 I/O 映射、fork 时怎么继承、缺页时怎 阅读全文

posted @ 2026-04-22 16:01 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-66-默认关闭内核配置汇总
摘要:一、CONFIG_SPECULATIVE_PAGE_FAULT 性能考量。 CONFIG_SPECULATIVE_PAGE_FAULT 的核心作用是:在低竞争条件下,尝试无锁处理页面错误,避免长时间持有 mmap_lock,以降低足迹锁竞争和上下文切换开销。 1. 它解决的问题 传统页面错误处理必须 阅读全文

posted @ 2026-04-22 11:06 Hello-World3 阅读(3) 评论(0) 推荐(0)

内存管理-45-zram-3-writeback
摘要:一、简介 zram 是一个基于内存的块设备, 通常用作压缩swap分区。页面被换出时不写到磁盘, 而是压缩后存在内存中,节省1/O并加速swap。进程页面换出 --> zram压缩存储(在RAM中) --> 进程缺页时解压换回。 但是 zram 在内存压力下是有困境的,zram 本质还是占内存。当系 阅读全文

posted @ 2026-04-22 09:50 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-31-每进程内存统计-5-/proc/pid/maps
摘要:一、简介 1. 打印内容 8295:/ # cat /proc/584/maps 62217e2000-62218e8000 r--p 00000000 fc:00 166440964 /system/bin/surfaceflinger 62218e8000-6221d75000 r-xp 001 阅读全文

posted @ 2026-04-21 21:29 Hello-World3 阅读(1) 评论(0) 推荐(0)

内存管理-63-VMA-2-vmacache
摘要:基于msm-5.4 一、vmacache简介 1. 实现文件 mm/vmacache.c include/linux/vmacache.h 默认编译,没有配置宏。 2. 它要解决的问题 把海量重复的、局部性很强的 VMA 查询挡在红黑树查询之前。内核里大量路径都会查 VMA,例如: (1) page 阅读全文

posted @ 2026-04-18 14:56 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-65-内存诊断-1-malloc debug
摘要:一、README.md翻译 注: 本文翻译自A12的 android/bionic/libc/malloc_debug/README.md 1. Malloc Debug Malloc debug 是一种用于调试 native 内存问题的方法。它可以帮助检测内存破坏、内存泄漏以及 use-after 阅读全文

posted @ 2026-04-17 16:26 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-63-VMA-1-VMA的创建与销毁
摘要:基于msm-5.4 一、VMA创建路径汇总 1. mmap()系统调用-用户态请求映射 syscall_mmap_pgoff() [fs/exec.c] ↓ ksys_mmap_pgoff() [mm/mmap.c] ↓ vm_mmap_pgoff() ↓ do_mmap() [mm/mmap.c] 阅读全文

posted @ 2026-04-15 13:51 Hello-World3 阅读(5) 评论(0) 推荐(0)

内存管理-55-命令行工具-3-free
摘要:一、简介 1. 帮助信息 / # free --help Toybox 0.8.4-android 多调用二进制文件:https://landley.net/toybox (参见 toybox --help) 用法:free [-bkmgt] 显示物理内存和交换空间的总量、可用空间和已用空间。 -b 阅读全文

posted @ 2026-04-11 16:11 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-55-命令行工具-2-vmstat
摘要:注: 除了这个命令行工具外,还有一个 /proc/vmstat 文件节点。 一、简介 1. 帮助信息 / # vmstat --help Toybox 0.8.4-android 多调用二进制文件:https://landley.net/toybox (参见 toybox --help) 用法:vm 阅读全文

posted @ 2026-04-11 16:03 Hello-World3 阅读(4) 评论(0) 推荐(0)

内存管理-5-物理内存数据结构-5-struct mm_struct
摘要:基于msm-5.4 一、struct mm_struct 简介 struct mm_struct { //mm_types.h struct { //这里还有一个struct,用于随机存储的 struct vm_area_struct *mmap; struct rb_root mm_rb; u64 阅读全文

posted @ 2026-04-09 15:41 Hello-World3 阅读(3) 评论(0) 推荐(0)

内存管理-5-物理内存数据结构-4-struct address_space
摘要:基于msm-5.4 一、简介 在 Linux 内存管理里,struct address_space 可以理解为“一个可缓存、可映射对象在内核中的内存视图描述符”。 最常见的对象是文件 inode,对应 inode.i_mapping。它把这几个关键维度绑在一起:(1) 页缓存管理(哪些页在 page 阅读全文

posted @ 2026-04-02 17:27 Hello-World3 阅读(7) 评论(0) 推荐(0)

内存管理-5-物理内存数据结构-3-struct page
摘要:基于msm-5.4 一、struct page简介 物理页帧,系统中的每个物理页面都有一个与之关联的 struct page,用于跟踪我们当前正在使用该页面的用途。请注意,我们无法跟踪哪些任务正在使用页面,但如果它是页面缓存页面,rmap 结构可以告诉我们谁在映射它。 如果您使用 alloc_pag 阅读全文

posted @ 2026-04-02 10:41 Hello-World3 阅读(10) 评论(0) 推荐(0)

内存管理-5-物理内存数据结构-2-struct zone
摘要:基于msm-5.4 一、struct zone简介 描述一个内存区。内存可以按照不同的用途与类型划分为不同的区域,zone结构表示内存区域,系统存在的zone见 enum zone_type 成员。 ZONE_DMA: 表示这片区域用于DMA,一般是给x86使用的,64位上将其取消掉了,arm系统上 阅读全文

posted @ 2026-04-02 10:34 Hello-World3 阅读(6) 评论(0) 推荐(0)

内存管理-61-内存回收-1-理论学习
摘要:申请分配页的时候,页分配器首先尝试使用低水线分配页。如果使用低线分配失败,说明内存轻微不足,页分配器将会唤醒每内存节点的页回收内核线程(kswapd)异步回收页,然后尝试使用最低水线分配页。如果使用最低水线分配失败,说明内在严重不足,页分配器将会直接回收页。 物理页根据是否有存储设备支持分为两类。 阅读全文

posted @ 2026-04-01 17:35 Hello-World3 阅读(18) 评论(0) 推荐(0)

内存管理-43-Swap-1-命令行工具实现
摘要:一、mkswap 基于 A13 + msm-5.4 1. 简介 源码位置: /android/external/toybox/toys/other/mkswap.c 该命令对要成为swap后端的设备的首页写一些格式化的内容(也就意味着用于swap的少一页),没有调用swap相关系统调用。 使用: / 阅读全文

posted @ 2026-03-31 11:29 Hello-World3 阅读(8) 评论(0) 推荐(0)

内存管理-45-zram/swap-3-chatGPT
摘要:一、Android中内存Swap交换是如何实现的? Android 里的 Swap 本质是 Linux 内核虚拟内存机制,但实现上和桌面 Linux 最大区别是:主力后端通常是 zram(压缩内存),不是磁盘分区。 1. 整体链路 (1) 进程申请匿名页(heap/stack/mmap anon)( 阅读全文

posted @ 2026-03-30 14:13 Hello-World3 阅读(41) 评论(0) 推荐(0)

内存管理-60-zsmalloc-1-理论
摘要:一、mm/zsmalloc.c 文件的作用 mm/zsmalloc.c 是 Linux 内核里 zsmalloc 分配器 的实现文件,主要作用是给 zram/zswap 这类“压缩后小对象”场景提供高效内存分配。一句话总结:它不是通用 kmalloc 替代品,而是专门为“可变长度压缩块”设计的内存池 阅读全文

posted @ 2026-03-28 11:46 Hello-World3 阅读(6) 评论(0) 推荐(0)

内存管理-59-内存管理相关锁
摘要:1. p->alloc_lock spinlock_t 类型。 保护 ->fs、->files、->mm、->group_info、->comm 和密钥环订阅,并与 wait4() 同步。也用于 procfs。同时锁定 task.io_context 的最终版本。同时保护 ->cpuset 和 -> 阅读全文

posted @ 2026-03-27 17:08 Hello-World3 阅读(4) 评论(0) 推荐(0)

导航