我想知道当底层系统在内存模式下使用持久内存模块(近内存 DRAM 缓存和 NVRAM 作为主内存)时,Linux 内核是否做了任何特别的事情或执行了任何优化。我试过查看驱动程序/nvdimm,但似乎这里的所有内容都集中在 App Direct 模式下,您在 DAX 文件中进行 MMAP,但在内存模式下,它在语义和语法上与使用 DRAM 没有什么不同。
Linux 是否采用了任何优化,或者一切都在硬件中处理?有人可以将我链接到在 Linux 内核中执行任何内存模式优化的位置吗?提前致谢!
我想知道当底层系统在内存模式下使用持久内存模块(近内存 DRAM 缓存和 NVRAM 作为主内存)时,Linux 内核是否做了任何特别的事情或执行了任何优化。我试过查看驱动程序/nvdimm,但似乎这里的所有内容都集中在 App Direct 模式下,您在 DAX 文件中进行 MMAP,但在内存模式下,它在语义和语法上与使用 DRAM 没有什么不同。
Linux 是否采用了任何优化,或者一切都在硬件中处理?有人可以将我链接到在 Linux 内核中执行任何内存模式优化的位置吗?提前致谢!
上游 Linux v5.2-rc1 引入了内核参数page_alloc.shuffle
,这是一个布尔标志,如果以下两个条件都为真,则自动启用:
page_alloc.shuffle=0
它不是通过添加到内核参数列表来手动禁用的。启用此参数后,内核页面分配器会随机分配其空闲列表,以期减少内存端缓存上的冲突。
自动启用它的系统示例包括具有 MCDRAM 的 KNL/KNM 部分或完全配置为在缓存模式下运行,以及 CSX/CPX 的持久性内存部分或完全配置为在内存模式下运行。在所有这些系统上,都有一个直接映射的内存端缓存,尽管许多实现细节不同。
自由列表改组提供了可持续的良好性能,但不一定是最优的或接近最优的。这与最初由于良好的内存端缓存利用率而以高性能运行相反,但随后由于缓存冲突的增加,性能会随着时间的推移而下降。
也就是说,我认为没有人测试过空闲列表混洗对在内存模式下运行持久内存的系统性能的影响,即使它是自动启用的。
目前内核中没有其他潜在的内存模式优化。