为了实现NVMe SSD和其他PCIe设备之间的p2p通信,我想知道是否需要对Linux内核和NVMe驱动程序进行一些修改,或者其他什么?我应该做哪些修改?我已经搜索了几天,但是这方面的信息很少,我需要一些引用。 非常感谢!
最佳答案
有一个 NVMe 规范。称为“ Controller 内存缓冲区写入数据”的功能。反过来,CMB 写入数据支持 NVMe 设备与 PCIe 总线上其他设备之间的 P2P 事务。虽然大部分 CMB 规范已在最新的上游内核中实现,但 CMB 写入数据尚未实现。 CMB 的问题是它为这些 P2P 交易提供的内存非常少。这是尚未有人在上游实现该功能的原因之一。不过,您可以通过用户空间 NVMe 驱动程序/框架 SPDK 来使用它。
另请注意,有一个新的 NVMe 规范。称为持久内存区域的功能。这有更多的内存可供使用,我怀疑有人会在不久的将来将其贡献给上游。
https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2018/20180808_SOFT-201-1_Bates.pdf是有用的背景 Material 。
关于p2p - PCIe 设备之间的点对点通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39954133/