我有一张 FPGA 数据采集卡,可插入典型高端 Windows/Linux 工作站的 PCIe 插槽。我想将进入 FPGA 的数据传输到插入另一个 PCIe 插槽的 NVMe 驱动器。
我是否需要 FPGA 中的 NVMe 主机控制器来直接写入 NVMe 驱动器?
是否可以让主机中的 NVMe 控制器在 FPGA 和 NVMe 驱动器之间设置 DMA 传输,然后让它不再干扰?
我设想将数据零拷贝传输到 SSD,即不使用任何主机处理或内存。谢谢!
答案1
我认为您正在尝试执行点对点 DMA (P2PDMA) 操作,该操作会卸载 CPU 的 DMA 流量。请参阅这里了解一些背景知识。Linux 内核支持这里。
我是否需要 FPGA 中的 NVMe 主机控制器来直接写入 NVMe 驱动器?
您需要某种控制器来允许 P2PDMA 操作在没有 CPU 的情况下进行。
是否可以让主机中的 NVMe 控制器在 FPGA 和 NVMe 驱动器之间设置 DMA 传输,然后让它不再干扰?
我见过一些 NoLoad 加速器,例如艾迪康. 你可能会发现这简短的介绍也很有用。查看另一个 Eideticom 合作伙伴解决方案这里。
使用 Eideticom 的 NoLoad NVM Express 计算存储处理器和 Linux® p2pdma 框架可从 CPU 的内存子系统中消除 100% 的 DMA 流量。这极大地提高了在 CPU 上运行的应用程序的性能。