首页 > 生活分享 > 免费教学 > 由Google、OPPO、ARM、华为等大厂程序员贡献的Linux Large Folios大页在社区和产品的现状和未来

由Google、OPPO、ARM、华为等大厂程序员贡献的Linux Large Folios大页在社区和产品的现状和未来

发布时间:2024-04-12 14:15:25来源: 15210273549

在 Linux 内核中,一个 folio 可以只包含 1 个 page,也可以包含多个 page。当一个 folio 包含多个 page 的时候,我们称它为一个 large folio,在中文社区,我们一般称呼其为大页。采用 large folio 可潜在带来诸多好处,比如:

1. TLB miss 减小,比如许多硬件都支持 PMD 映射,可以直接把 2MB 做成一个 large folio,只占用一个 TLB entry;部分硬件支持 contiguous PTE 映射,比如 ARM64 可以让 16 个连续的 page 通过 CONT-PTE 只占一个 TLB entry。
2. page fault 次数减小,比如 do_anonymous_page() 在某个 PTE 的 page fault 后,直接申请一个 large folio 并映射一个 CONT-PTE 的话,则剩下的 15 个 PTE 不再发生 page fault。
3. 降低 LRU 的规模和内存 reclamation 的成本,以 large folio 为单位进行回收,整个 large folio 在 folio_referenced() 等的反向映射成本低于多个 small folio 单独进行 rmap 的成本;try_to_unmap_one() 理论上也如此。
4. 潜在的以更大粒度在 zRAM/zsmalloc 进行压缩/解压的机会,从而降低压缩/解压的 CPU 利用率、提高压缩率。比如 64KiB 的 large folio 整体压缩,比分成 16个4KiB 的 small folio 来进行压缩,有明显优势。
在 Linux 内核的整个内存管理中,large folios 将与 small folios(只有一个page)混合存在。比如在 LRU 链表上,挂在上面的 folio 既可能是 large,也可能是 small;一个进程的某个 VMA 里面的内存,可由 large folios 和 small folios 混合组成;文件的 pagecache 上,不同的 offset 上面对应的可能是 small folios 也可能是 large folios。

 


文件页 large folios
Linux 社区在文件页方面,发展出多个文件系统支持 large folio。这类文件系统会通过 mapping_set_large_folios()告诉 page cache 这层,它支持 large folio:
afs
bcachefs
erofs非压缩文件
xfs
而 pagecache 这层,则会关注到这一情况,在 mapping_large_folio_support() 为真的情况下,允许申请 large folios 来填充 pagecache 的 xarray:


目前文件页 large folios 支持的文件系统非常有限,所以在许多行业还没法用起来,比如手机行业广泛使用的 erofs、f2fs 等。目前我们看到,社区里面华为公司 Zhang Yi 正在完成一个 patchset:ext4: use iomap for regular file's buffered IO path and enable large foilo[1],寻求对 ext4 的 iomap 和 large folios 支持。Zhang Yi 提供的性能数据,在某种意义上可以证明文件系统支持 large folios 的好处:

 


匿名页 large folios
社区里面 ARM 公司 Ryan Roberts 是这个项目的主要发起者以及相关 patchset 的主要贡献者之一。目前匿名页相关的 patchset 有多个议题,部分已经merge,部分在 Andrew Morton 的 mm tree 迭代,部分还在社区讨论或萌芽阶段。
1. Ryan Roberts(ARM)贡献的 Multi-size THP for anonymous memory[2]
这个 patchset,允许匿名页发生缺页中断的时候,申请多种不同 size 的 PTE-mapped 的 large folios。而内核原先的 THP 主要针对的是 PMD-mapped 的2MiB size,在支持多种 size 后,我们把 multi-size THP 简称为 mTHP。现在 /sys/kernel/mm/transparent_hugepage 目录下面,会有多个 hugepages- 子目录:


比如你开启 64KiB 的 large folios:


这样在发生 PF 的时候,do_anonymous_page () 可以申请 64KiB 的 mTHP,并一次性透过 set_ptes 把 16 个 PTE 全部设置上:


后面 15 个 PTE 就不会再发生 PF 了。Ryan 的 patchset,保持了 mTHP 与之前THP在ABI方面的兼容,比如之前的MADV_HUGEPAGE、MADV_NOHUGEPAGE 针对 mTHP 仍然适用。
2、 Ryan Roberts(ARM)贡献的 Transparent Contiguous PTEs for User Mappings[3]
这个 patchset 主要让 mTHP 可以自动用上 ARM64 的 CONT-PTE,即 16 个 PTE 对应的 PFN 如果物理连续且自然对界,则设 CONT bit 以便让它们只占用一个 TLB entry。Ryan 的这个 patchset 比较精彩的地方在于,mm 的 core 层其实不必意识到 CONT-PTE 的存在(因为不是啥硬件 ARCH 都有这个优化),保持了 PTE 相关 API 向 mm 的完全兼容,而在 ARM64 arch 的实现层面,自动加上或者去掉 CONT bit。
比如原先 16 个 PTE 满足 CONT 的条件,如果有人 unmap 掉了其中 1 个 PTE 或者 mprotect 改变了 16 个 PTE 中一部分 PTE 的属性导致 CONT 不再能满足,set_ptes() 调用的 contpte_try_unfold() 则可将 CONT bit 自动 unfold 掉:


CONT-PTE 的采用有效提升了一些 benchmark 的性能,比如内核编译:

免费教学更多>>

2024年最强的安卓游戏平板排行榜 这次的电脑故障,估计很多维修老手也无从下手! 三星显示取得包括劣化补偿装置的显示装置专利 三星Galaxy S25系列手机高清渲染图曝光:骁龙8至尊版芯片 惠普Thunderbolt 4 Ultra G6拓展坞亮相,可提供180/280W输出 2024全球PC市场:联想第一,苹果第四 联想拯救者宣布推出Angry Miao联名款磁轴键盘ice ring 63 RT “向新同往,合创未来”2025年融安县青年创业创新协会新春年会圆满举行 中国有数 | 增量贡献度93%!中国新能源汽车加速领跑全球 CCTV5直播,浙江稠州大将回归,北京北汽拒绝连败!上演强强对抗 上汽与宁德时代深化战略合作,上汽大众去年全年销售120万辆 小鹏G7完成工信部申报,官方称“或许是25万级最能打的SUV” 五年破50万交付!理想汽车如何从新势力到豪华“顶流” 蔚来纯电小车firefly萤火虫完成申报:4米车身、2.6米轴距 合创“暴雷”后续:广汽与股东支付员工工资,埃安提供售后服务 广汽与华为的再次合作能够腾飞吗? 2025为何看涨广汽埃安?三大品牌基因加持掌握爆款密码 没有800V没有FSD,特斯拉继续挤牙膏!怪不得雷军底气十足 特斯拉Model Y喊话“尽管对比”,小鹏、华为等国产新能源车企“接招” 特斯拉终于“还手”了 深圳康佳电子科技取得基于场景的智能家居控制方法专利 单反相机将来的地位怎样会像胶片相机一样重新翻红吗 浙江乌镇街科技取得一种基于 FPGA 的双光谱相机专利 2025必看!! 美国最新反转恐怖片震撼来袭,蓝牙相机引爆恐怖循环 浙江元冠取得隐藏式蓝牙音箱专利,有助于隐藏音箱节省空间 廉价蓝牙耳机惊天秘密:简单电路,竟藏着高科技? 【亲测 30 + 款】历时 2 个月,万字长文深度剖析开放式耳机! 小米的逆袭?正经人谁用71键!带彩屏的小米机械键盘MK71 Pro实测 DIY从入门到放弃:固态硬盘的M.2/PCIe/NVMe都是啥意思? DIY小技巧:英特尔CES又发新品 14代酷睿/酷睿Ultra怎么搭配主板?