【问题标题】:Mapping Virtual Memory to DRAM将虚拟内存映射到 DRAM
【发布时间】:2019-02-14 06:59:25
【问题描述】:

我正在尝试将 U-Space 分配的虚拟内存 (shm) 映射到特定的 DIMM。 我成功地使用 get_user_pages_remote 检索 pfns 作为指向 vmemory 的起始指针,然后使用 page_to_pfn 将每个 page 结构转换为 pfn(顺便说一句,这些 pfns 是进一步用于为专有的图像采集卡设备创建分散收集表并完美地完成工作)。但是,我没有找到一种方法来识别每个物理地址(pfn)来自哪个物理 DIMM(DRAM)。互联网搜索产生了一些 DRAM 地址映射方案,但所有这些方案都可以处理模块内部导航,即:行、列、组、通道和排名,所有前者都依赖于内存提供程序架构,例如https://www.betriebssysteme.org/wp-content/uploads/2017/04/Hillenbrand.pdf。另一方面,深入研究 SMBIOS 规范https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf,可以从 /dev/mem (dmidecode -t memory) 检索系统驻留 DIMM 属性,但是我无法将这两个信息源链接在一起并最终映射页面。

我们将不胜感激。

谢谢,

尤尔。

【问题讨论】:

    标签: memory-management linux-kernel shared-memory ram


    【解决方案1】:

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

    TLB 隐藏了虚拟到物理映射的复杂性,而 DRAM 内存控制器隐藏了物理到 DRAM 映射的复杂性。 (而且您可能认为物理意味着物理!)您需要了解更多关于物理到 DRAM 地址映射的一般信息,以及您的内存控制器以及 BIOS 如何配置它。 A good tutorial on physical to DRAM address mappingAnother using a particular Sandy Bridge system.A sample Micron data sheet。您需要查看系统的启动逻辑,因为它将设置内存控制器。我不知道是否有办法查询内存控制器的配置。操作系统可能不会触及该配置,而是相信 BIOS 做了正确的事情。可以凭经验确定这些事情。 RowHammer 论文将是寻找它的好地方。

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 2015-09-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多