谷歌工程师 James Houghton 已向内核发送了两轮补丁,用于将 HugeTLB 高粒度映射 (HGM) 的概念引入 Linux 内核。目前他共发送了 46 个处于 RFC 后状态的补丁集以供审核。
Linux 内存管理采用“分页机制”, 当运行内存需求量较大时,太大的(4K/2M/1G) 大小的页面会导致较多的 TLB miss 和缺页中断,从而大大影响应用程序性能。HugeTLB 相当于这种 hugepage 大页面的管理者,它记录 TLB 中的条目并指向到 Hugepage,Hugepage 页面的分配及释放,都由此模块负责。
HugeTLB HGM 允许 HugeTLB 页面以类似于 PTE 映射的透明大页面 (THP) 的方式进行高粒度映射。Google 将 HugeTLB HGM 引入 Linux 对 VM 实时迁移和内存故障处理有不小的优化。James 在邮件中阐述了 HugeTLB HGM 补丁系列的一些主要优势:
HugeTLB HGM 能够以快 100 倍的速度取消暂停 vCPU ,有助于客户机的稳定性,并且完全能够使用 1G 页面,可显著提高稳态客户机性能。
在通过网络完全复制一个大页面之后,我们希望将映射折叠到它通常的样子(例如,一个 PUD 对应一个 1G 页面)。但我们没有让内核自动执行此操作,而是让用户空间告诉我们折叠范围(通过 MADV_COLLAPSE)。
内存故障:当在 HugeTLB 页面中发现内存错误时,如果我们可以只取消映射包含错误的 PAGE_SIZE 部分,那将是非常理想的。使用高粒度映射可以做到这一点,但目前这个补丁系列没有解决这个问题。
最初,这种 HugeTLB 高粒度映射支持仅支持 x86_64,但也有针对 AArch64 和其他 CPU 架构的计划。通过内核补丁系列了解有关 HugeTLB HGM 支持的更多详细信息。