Memory management 将虚拟内存映射到DRAM

Memory management 将虚拟内存映射到DRAM,memory-management,linux-kernel,shared-memory,ram,Memory Management,Linux Kernel,Shared Memory,Ram,我正在尝试将U空间分配的虚拟内存shm映射到特定的DIMM。 我成功地使用get_user_pages_remote作为vmemory的起始指针检索了pfn,然后使用page_to_pfnbtw将每个页面结构转换为pfn。这些pfn进一步用于为专有帧抓取器设备创建散集表,并完美地完成了这项工作。但是,我没有找到一种方法来识别每个物理地址pfn来自哪个物理DIMM DRAM。Internet搜索产生了一些DRAM地址映射方案,但所有这些方案都需要在mmodule导航中处理,即:行、列、列、通道和列

我正在尝试将U空间分配的虚拟内存shm映射到特定的DIMM。 我成功地使用get_user_pages_remote作为vmemory的起始指针检索了pfn,然后使用page_to_pfnbtw将每个页面结构转换为pfn。这些pfn进一步用于为专有帧抓取器设备创建散集表,并完美地完成了这项工作。但是,我没有找到一种方法来识别每个物理地址pfn来自哪个物理DIMM DRAM。Internet搜索产生了一些DRAM地址映射方案,但所有这些方案都需要在mmodule导航中处理,即:行、列、列、通道和列,而前者都依赖于内存提供程序体系结构,例如,另一方面,挖掘SMBIOS规范,系统驻留的DIMM属性可以从/dev/mem dmidecode-t内存中检索,但是我无法将这两个信息源链接在一起并最终映射页面

如有任何建议,将不胜感激

谢谢


Yoel.

您真正想问的是将物理地址映射到DRAM。一般来说,没有单一的答案,在给定的系统上,可能没有特定的地址位。您需要了解内存几何结构以及内存控制器的配置方式。在Linux上,有一个可以通过SPD协议查询DRAM芯片本身的程序,它可能会告诉您一些关于内存几何结构的信息,但不会告诉您物理到DRAM地址映射或其配置。您的内存控制器可能会对地址位进行置乱,以实现更高的并行性,并避免银行震荡。你必须进入杂草丛中


TLB隐藏了虚拟到物理映射的复杂性,而DRAM内存控制器隐藏了物理到DRAM映射的复杂性。你可能认为肉体就是肉体!您需要了解更多有关物理到DRAM地址映射的一般信息,以及内存控制器,尤其是BIOS如何配置它。您需要查看系统的引导逻辑,因为它将设置内存控制器。我不知道是否有办法查询内存控制器的配置。操作系统可能不会触及该配置,而是相信BIOS做了正确的事情。也许可以通过经验来确定这些事情。RowHammer papers将是一个寻找它的好地方。

您真正想问的是将物理地址映射到DRAM。一般来说,没有单一的答案,在给定的系统上,可能没有特定的地址位。您需要了解内存几何结构以及内存控制器的配置方式。在Linux上,有一个可以通过SPD协议查询DRAM芯片本身的程序,它可能会告诉您一些关于内存几何结构的信息,但不会告诉您物理到DRAM地址映射或其配置。您的内存控制器可能会对地址位进行置乱,以实现更高的并行性,并避免银行震荡。你必须进入杂草丛中

TLB隐藏了虚拟到物理映射的复杂性,而DRAM内存控制器隐藏了物理到DRAM映射的复杂性。你可能认为肉体就是肉体!您需要了解更多有关物理到DRAM地址映射的一般信息,以及内存控制器,尤其是BIOS如何配置它。您需要查看系统的引导逻辑,因为它将设置内存控制器。我不知道是否有办法查询内存控制器的配置。操作系统可能不会触及该配置,而是相信BIOS做了正确的事情。也许可以通过经验来确定这些事情。RowHammer papers将是一个寻找的好地方