我想知道当底层系统在内存模式下使用持久内存模块(近内存 DRAM 缓存和 NVRAM 作为主内存)时,Linux 内核是否做了任何特殊的操作或执行了任何优化。我尝试查看 drivers/nvdimm,但似乎这里的所有内容都以在 App Direct 模式下使用为中心,在 DAX 文件中进行 MMAP,但在内存模式下,它在语义和语法上与使用 DRAM 没有什么不同。
Linux 是否采用了任何优化,或者一切都由硬件处理?有人可以将我链接到 Linux 内核中执行内存模式优化的位置吗?提前致谢!
最佳答案
上游Linux v5.2-rc1引入了内核参数page_alloc.shuffle
,这是一个 bool 标志,如果以下两个条件都为真,则自动启用:
- 无法通过将
page_alloc.shuffle=0
添加到内核参数列表来手动禁用它。 - 内核正在具有支持 ACPI 6.2 的固件的系统上运行,并且固件已通过异构内存属性表 (HMAT) 与内核进行通信,表明系统至少在其中一个内存域中具有内存端缓存.
启用此参数后,内核页面分配器会随机化其空闲列表,以减少内存端缓存的冲突。
自动启用该功能的系统示例包括带有部分或全部配置为在缓存模式下运行的 MCDRAM 的 KNL/KNM,以及带有部分或全部配置为在内存模式下运行的持久内存的 CSX/CPX。在所有这些系统上,都有一个直接映射的内存端缓存,尽管许多实现细节有所不同。
空闲列表改组可提供可持续的良好性能,但不一定是最佳或接近最佳的。这与由于良好的内存端缓存利用率而首先以高性能运行相反,但随着时间的推移,由于缓存冲突的增加,性能逐渐下降。
也就是说,我认为没有人测试过空闲列表改组对在内存模式下运行的持久内存的系统性能的影响,即使它是自动启用的。
目前内核中没有接受其他潜在的内存模式优化。
关于performance - Linux在内存模式下如何处理Intel的Optane持久内存模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66282496/