【 MM 】聊聊 TTU 和 RMAP

• 1 分钟阅读 • memory

开篇有必要做个名词解释,
TTU - Try To Umap
RMAP - Reverse map
选择一起聊它们两个,想必它们固然是伴有着千丝万缕的联系。
没错,当内核做出以下操作时,不得不从page的角度出发反向去找到对该page的所有映射,然后一一解除。
1、内存回收时,因为被回收的page要被写入swap或disk,后续不在原因的位置上
2、内存迁移时,通常会在compaction过程中涉及,原page要被移动到其它位置上

我们把从vma出发到物理page的映射称为正映射,从物理page反推到vma的映射称之为反映射。
下面我们正式从kernel中举例分别走一下两个映射对应的流程。
一、正映射
我们以新页面分配为例,系统中的页面通常分为anon页和file页,所以我们也要分开来看,
1、new anon page
当用户空间malloc申请页面后,kernel中由于存在写时分配优化机制,通过在申请时只会分配一个vma,只有当这段空间真正地被写入数据时,所涉及的page才会被分配出来,当未分配前访问到该page时会触发page_fault异常,而新的page就是在异常里面被分配的。
malloc申请的页面属于anon页,在异常中分配的路径通常如下(正常分配情况,不考虑swap),

static vm_fault_t __do_page_fault(struct mm_struct *mm, unsigned long addr,
                                  unsigned int mm_flags, unsigned long vm_flags,
                                  struct pt_regs *regs)
{
    struct vm_area_struct *vma = find_vma(mm, addr);
    
    if (unlikely(!vma))
        return VM_FAULT_BADMAP;
    ...
}

接下来我们重点看来do_anonymous_page

好,我们重点看来do_anonymous_page

2、new file page
反映射

文章标签: memory

上一篇 : 【 MM 】聊聊 OOM 选目标原则
下一篇 : 【 SCHED 】聊聊 Thermal
阅读进度 0%