我正在从事一个项目,旨在将一部分内存(DRAM)从一台机器共享到另一台机器。我有两台机器(M1 和 M2,x86 Linux),M1 能够通过 NTB(非透明桥接器)访问 M2 的内存,NTB 是连接 M1 和 M2 的 PCIe 地址转换设备。具体来说,当 M1 读/写它的 MMIO 地址 0x400000000 时,它会被重定向到 M2 的物理地址 0x0,也就是 M2 的系统 RAM。基于这个翻译,我想把M2的一部分记忆给M1。
我首先使用 Linux 内存热插拔来“离线”M2 中的一段内存(128MB),以便 M2 不再使用它。在 M1,我将此远程内存添加到 M1 的内存分配器中,并通过检查 /proc/meminfo 额外的 128MB 在那里。我进一步配置了 M1 CPU 的 MTRR 以使这 128MB 不可缓存,因为远程内存不在本地内存总线中,并且超出了缓存一致性范围。例如,如果一个磁盘是 DMA 到/从这个远程内存,M1 的 CPU 的缓存是不知道的,因为读/写不通过 M1 的内存总线。
但是,在施加了一些工作量之后,我的 M1 无缘无故挂起(dmesg 中没有显示错误)。谁能给我一些建议?感谢!
关于内存热插拔: https ://www.kernel.org/doc/Documentation/memory-hotplug.txt