Linux 内存管理新特性 - Memory folios 解读

💡 原文中文,约11100字,阅读约需27分钟。
📝

内容提要

本文介绍了Linux内核中的新数据结构folio,它是对page的一层包装,解决了page的多重含义和冗余调用的问题。folio的引入减少了冗余的compound_head调用,给开发者提供了更直观的提示,同时修复了潜在的bug。folio已经在Linux内核的文件系统中得到了应用,并在后续版本中将进一步扩展。尽管folio并不完美,但它是在正确方向上迈出的重要一步。

🎯

关键要点

  • folio 是 Linux 内核中新引入的数据结构,用于表示单个页或复合页。
  • folio 解决了 page 的多重含义和冗余调用的问题,减少了 compound_head 调用。
  • folio 的结构与 page 完全一致,可以直接使用 folio->flags。
  • folio 允许函数声明只期望 head page,从而减少了对 page 类型的判断。
  • folio 的引入修复了潜在的 bug,减少了开发者的判断分支。
  • folio-5.16 已经合入 Linux 内核,主要集中在 memcg、filemap 和 writeback 部分。
  • 社区对 folio 的命名和实现有不同意见,但最终达成一致。
  • folio 提供了对 base pages 和 compound pages 的统一视图,促进了复合页在 page cache 中的广泛应用。
  • 后续版本计划将更多文件系统转换为 folio,并支持多页 folio。
  • FS 开发者应将使用 buffer head 的文件系统转换为使用 iomap 进行 I/O。
➡️

继续阅读