内存管理-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 of process */ #define SUID_DUMP_ROOT 2 /* Dump as root */ /* coredump filter bits */ #define MMF_DUMP_ANON_PRIVATE 2 #define MMF_DUMP_ANON_SHARED 3 #define MMF_DUMP_MAPPED_PRIVATE 4 #define MMF_DUMP_MAPPED_SHARED 5 #define MMF_DUMP_ELF_HEADERS 6 #define MMF_DUMP_HUGETLB_PRIVATE 7 #define MMF_DUMP_HUGETLB_SHARED 8 #define MMF_DUMP_DAX_PRIVATE 9 #define MMF_DUMP_DAX_SHARED 10 #define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ #define MMF_VM_HUGEPAGE 17 /* set when VM_HUGEPAGE is set on vma */ #define MMF_HAS_UPROBES 19 /* has uprobes */ #define MMF_RECALC_UPROBES 20 /* MMF_HAS_UPROBES can be wrong */ #define MMF_OOM_SKIP 21 /* mm is of no interest for the OOM killer */ #define MMF_UNSTABLE 22 /* mm is unstable for copy_from_user */ #define MMF_HUGE_ZERO_PAGE 23 /* mm has ever used the global huge zero page */ #define MMF_DISABLE_THP 24 /* disable THP for all VMAs */ #define MMF_OOM_VICTIM 25 /* mm is the oom victim */ #define MMF_OOM_REAP_QUEUED 26 /* mm was queued for oom_reaper */ #define MMF_MULTIPROCESS 27 /* mm is shared between processes */ #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP)
2. 各标志含义
mm->flags 不全是独立布尔位,低位一部分是“多位字段”(例如 dumpable、coredump filter), 高位才大多是独立 one-bit 开关。
2.1 低位字段:core dump 相关策略位
(1) MMF_DUMPABLE_BITS(位 0-1,2 bit)
含义:进程是否可 dump(SUID_DUMP_*)
0: SUID_DUMP_DISABLE,这两位都是0,禁止 core dump。
1: SUID_DUMP_USER(1),按用户身份 dump。
2: SUID_DUMP_ROOT(2),按 root 策略 dump(较特殊).
说明:这是字段,不是单个 flag;通常由 set_dumpable() / prctl 相关路径修改。
(2) coredump filter 位(位 2-10)
这些位决定 core 文件中“包含哪些类型的内存段”,对应 /proc/<pid>/coredump_filter:
MMF_DUMP_ANON_PRIVATE(2):匿名私有映射
MMF_DUMP_ANON_SHARED(3):匿名共享映射
MMF_DUMP_MAPPED_PRIVATE(4):文件私有映射
MMF_DUMP_MAPPED_SHARED(5):文件共享映射
MMF_DUMP_ELF_HEADERS(6):ELF 头
MMF_DUMP_HUGETLB_PRIVATE(7):hugetlb 私有映射
MMF_DUMP_HUGETLB_SHARED(8):hugetlb 共享映射
MMF_DUMP_DAX_PRIVATE(9):DAX 私有映射
MMF_DUMP_DAX_SHARED(10):DAX 共享映射
说明:这部分也是字段集合(mask),不是单独“状态事件”。
2.2 mm 级 one-bit 标志
MMF_VM_MERGEABLE(16) 含义:该 mm 允许 KSM 合并相同匿名页(MADV_MERGEABLE 相关全局效果)。
MMF_VM_HUGEPAGE(17) 含义:mm 处于可被 khugepaged 处理的状态(可理解为 THP/khugepaged 倾向开启)。
MMF_HAS_UPROBES(19) 含义:该 mm 当前含有 uprobes 相关映射/状态。
MMF_RECALC_UPROBES(20) 含义:MMF_HAS_UPROBES 可能不准确,需要重新计算。
MMF_OOM_SKIP(21) 含义:OOM killer 选 victim 时,跳过这个 mm(“不感兴趣”)。
MMF_UNSTABLE(22) 含义:该 mm 在某些路径上被视为“不稳定”,例如 copy_from_user 相关路径要特别处理。
MMF_HUGE_ZERO_PAGE(23) 含义:该 mm 曾使用过全局 huge zero page。
MMF_DISABLE_THP(24) 含义:对该 mm 全局禁用 THP(所有 VMA 层面)。
MMF_OOM_VICTIM(25,5.4 有) 含义:该 mm 已被 OOM 选为 victim。
MMF_OOM_REAP_QUEUED(26) 含义:该 mm 已经加入 oom reaper 队列,等待回收其用户态映射页。
几个常用组合掩码:
MMF_DUMPABLE_MASK: 提取位 0-1 的 dumpable 字段。
MMF_DUMP_FILTER_MASK: 提取位 2-10 的 coredump_filter 字段。
MMF_DISABLE_THP_MASK: 只取 MMF_DISABLE_THP 那一位(1<<24)。
MMF_INIT_MASK: 新建 mm 时初始化保留的位集合(5.4 中主要含 dumpable/filter/disable_thp)。
3. mm->flags 与 vma->flags 区别
vma->vm_flags 用于指定每段区间自己的属性(如 VM_READ/WRITE/EXEC、VM_DONTDUMP)。mm->flags 用于整个进程地址空间的全局状态(如 OOM、KSM、THP 全局禁用)。
4. 版本差异
从 5.4 到 6.x,mm->flags 有变动,新增 MMF_MULTIPROCESS、MMF_HAS_PINNED、MMF_HAS_MDWE、MMF_VM_MERGE_ANY,某些 OOM 相关位在不同版本有调整(例如 MMF_OOM_VICTIM 的存在与使用路径)。
posted on 2026-04-22 17:09 Hello-World3 阅读(3) 评论(0) 收藏 举报
浙公网安备 33010602011771号