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。
➡️