
在 Linux 7.0 合并窗口中,周三合并了一些额外的内存管理 “MM” 更新。这最近三个十几个补丁中最有趣的是对文件支持的巨型页批量解除映射的支持。
支持对大 folios 进行批量检查引用和解映射的补丁,在回收文件支持的大 folios 方面显示出非常出色的性能数据。这项工作由阿里巴巴工程师王宝林完成。他在之前的补丁系列中解释过:
“目前,folio_referenced_one() 总是顺序检查每个 PTE 的年轻标志,这对于巨型页来说效率不高。这种低效在回收干净的文件支持的巨型页时尤为明显,此时 folio_referenced() 被观察到是一个显著的性能热点。
此外,在支持连续 PTE 的 Arm 架构上,已经存在一种优化,用于清除连续范围内 PTE 的年轻标志。然而,这并不足够。我们可以将其扩展为对整个大页(可能超过连续范围:CONT_PTE_SIZE)执行批量操作。”
当补丁系列完成对文件大页的批量解除映射时,数据才会出来,而且非常诱人:
“性能测试:
在一个内存 cgroup 中,通过 mmap()分配 10G 干净的文件后备页,并尝试通过 memory.reclaim 接口回收 8G 文件后备页。我可以在我的 Arm64 32 核服务器上观察到 75%的性能提升(在我的 X86 机器上也有 50%+的性能提升),使用这个补丁。”
一些不错的提升,并且随着 Linux 内核中 folios 的日益增多。
对那些对最新合并到 Linux 7.0 的这些补丁感兴趣的人,请查看这个 MM 拉取请求。
转自 Linux 7.0 Speeds Up Reclaiming File-Backed Large Folios By 50~75% – Phoronix
Linuxeden开源社区