内存管理-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)    收藏  举报

导航