我正在开展一个旨在将一部分内存(DRAM)从一台机器共享到另一台机器的项目。我有两台机器(M1和M2,x86 Linux),M1能够通过NTB(非透明网桥)访问M2的存储器,NTB是连接M1和M2的PCIe地址转换设备。具体来说,当M1读/写其MMIO地址0x400000000时,它将被重定向到M2的物理地址0x0,即M2的系统RAM。根据这个翻译,我想给M2一部分M2的内存。
我首先将Linux内存hotplug用于“离线”M2中的一段内存(128MB),以便M2不再使用它。在M1,我将这个远程内存添加到M1的内存分配器中,通过检查/ proc / meminfo,还有额外的128MB。我进一步配置M1 CPU的MTRR使这128MB无法访问,因为远程内存不在本地内存总线中,并且超出了缓存一致性范围。例如,如果磁盘与此远程存储器之间是DMA,则M1的CPU缓存无法识别,因为读/写不通过M1的存储器总线。
然而,在投入一些工作量之后,我的M1无缘无故地挂起(dmesg中没有出现错误)。有人能给我一些建议吗?谢谢!
关于内存hotplug: https://www.kernel.org/doc/Documentation/memory-hotplug.txt