Luis Chamberlain 在周二发送了模块更改,并指出 Microsoft 工程师 Mike Rapoport 已经看到他的模块缓存补丁通过 Andrew Morton 的 MM 拉取合并。
“由于其他一些代码依赖关系,Mike Rapoport 将模块代码缓存到大页面的整个过程中,都是通过 Andrew Morton 的树进入的。这确实是此版本中 Linux 内核模块的最大亮点。有了它,我们共享了大量的模块页面,从 x86 开始。
上周,MM 引入了一些不错的性能优化、轻量级保护页等。该 pull 还从 Microsoft 的 Mike Rapoport 那里获得了补丁,用于使用大型 ROX 页面进行模块文本分配。
x86_64 上的补丁集开始使用大型只读执行 (ROX) 页面来分配可执行内存。Rapoport 对这些补丁进行了解释:
“为了支持模块文本的 ROX 分配,有必要处理对代码的修改,例如重新定位和替代修补,而无需对该内存进行写入访问。
一种选择是使用文本修补,但这会使模块加载速度非常慢,并且会暴露未最终形成的可执行代码。
更好的方法是让使用 ROX 权限分配的内存包含无效指令,并保留模块文本的可写但不可执行的副本。重新定位和替代补丁将使用 ROX 内存的地址在可写副本上完成。一旦模块完全准备好,更新的文本将使用文本修补一次性复制到 ROX 内存,并且可写副本将被释放。
添加对大型 ROX 页面缓存的支持的补丁是减轻 TLB 指令压力和提高性能的诱人之处:
“使用大页面映射文本区域可减轻 iTLB 压力并提高性能。”
此支持由新的 “ARCH_HAS_EXECMEM_ROX” 选项控制,最初仅支持/启用 x86_64 Linux 内核构建。在未来的内核周期中,这种 execmem ROX 支持可以扩展到其他 CPU 架构。
这些补丁已经在内核开发人员之间经过了七轮审查和讨论,现在 Linux 6.13 是上游。通过此拉取有关 Linux 6.13 的其他模块更改的更多详细信息。Linux 6.13 内核正在成为另一个非常令人兴奋的功能丰富的版本,并将于 2025 年初发布,出现在春季发行版中。