performance - Linux在内存模式下如何处理Intel的Optane持久内存模块?

标签 performance linux-kernel intel cpu-architecture persistent-memory

我想知道当底层系统在内存模式下使用持久内存模块(近内存 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/

相关文章:

python - MySQL Python 查询大型数据库的时间太长

performance - Scala 与 Earth Box 中基于树的算法

linux - kern_path() : Failed to return parent path in new 4. 4.* Linux 内核

assembly - 英特尔 8080 : How to MOV DE to B?

c++ - 英特尔 C++ 编译器将对象中的 vptr(指向虚函数表的指针)存储在哪里?

PHP回显性能

c# - 非托管 C++ 应用程序中性能更好的 WPF 对话框

linux - 本地处理的数据包上的 netfilter 事件(netfilter C 内核模块代码)

android - Android Q中访问/proc/net/tcp

android-studio - 无法安装英特尔 HAXM,并出现错误:无法配置驱动程序 :unknown error . 无法打开驱动程序