Linux 如何在内存模式下处理英特尔的傲腾持久内存模块?

How does Linux handle Intel's Optane Persistent Memory Modules under Memory Mode?

我想知道当底层系统在内存模式(近内存 DRAM 缓存和 NVRAM 作为主内存)中使用持久内存模块时,Linux 内核是否做了任何特殊的事情或执行了任何优化。我试过查看 drivers/nvdimm,但似乎这里的所有内容都围绕在 App Direct 模式下使用,在该模式下,您在 DAX 文件中进行 MMAP,但在内存模式下,它在语义和句法上与使用 DRAM 没有什么不同。

Linux 是否采用了任何优化,或者一切都在硬件中处理?有人可以 link 我知道 Linux 内核中执行任何内存模式优化的地方吗?提前致谢!

上游Linux v5.2-rc1 引入了内核参数page_alloc.shuffle,这是一个布尔标志,如果以下两个条件都为真则自动启用:

  • 它不是通过在内核参数列表中添加page_alloc.shuffle=0来手动禁用的。
  • 内核在具有支持 ACPI 6.2 的固件的系统上 运行ning 并且固件已通过系统具有内存的异构内存属性 Table (HMAT) 与内核通信至少一个内存域中的端缓存。

启用此参数后,内核页面分配器会随机化其空闲列表,以减少内存端缓存的冲突。

自动启用它的系统示例包括 KNL/KNM 的 MCDRAM 在高速缓存模式下部分或完全配置为 运行,以及 CSX/CPX 的持久内存部分或完全配置在内存模式下配置为 运行。在所有这些系统上,都有一个直接映射的内存端缓存,尽管许多实现细节不同。

自由列表改组提供了可持续的良好性能,但不一定是最优的或接近最优的。这与 运行 起初由于良好的内存端缓存利用率而在高性能方面形成鲜明对比,但随后由于缓存冲突增加,性能随时间下降。

也就是说,我认为没有人测试过空闲列表改组对内存模式下具有持久内存 运行ning 的系统性能的影响,即使它是自动启用的。

目前内核中没有接受其他潜在的内存模式优化。