周三,Linux 7.0合并窗口期迎来了一些额外的内存管理(MM)更新。在最新提交的三十多个补丁中,最引人注目的是对文件支持的大页(large folio)批量取消映射的支持。
这些支持大页批量引用检查和取消映射的补丁,在回收文件支持的大页时展现出非常出色的性能数据。这项工作由阿里巴巴工程师王宝林(Baolin Wang)完成。他在补丁系列中解释道:
“目前,folio_referenced_one()总是按顺序检查每个页表项(PTE)的年轻标志(young flag),这对于大页来说效率低下。在回收干净的文件支持大页时,这种低效尤为明显,folio_referenced()被观察到一个显著的性能瓶颈。
此外,在支持连续页表项(contiguous PTEs)的ARM架构上,已经存在针对连续范围内页表项清除年轻标志的优化。然而,这还不够。我们可以将其扩展为对整个大页(其大小可能超过连续范围:CONT_PTE_SIZE)执行批量操作。”
当补丁系列以文件大页的批量取消映射作为结尾时,性能数据得以呈现,并且相当诱人:
“性能测试: 在一个内存控制组(memory cgroup)中通过mmap()分配10G干净的文件支持大页,并尝试通过memory.reclaim接口回收8G文件支持大页。在我的Arm64 32核服务器上,我可以观察到75%的性能提升(在我的X86机器上也有超过50%的提升)。”
随着大页在Linux内核中的使用日益增多,这些补丁带来了显著的性能增益。
有关这些已合并至Linux 7.0的最新补丁,感兴趣的读者可以查看此MM拉取请求。