通过网络/PCIe 虚拟化访问 PCIe 卡

通过网络/PCIe 虚拟化访问 PCIe 卡

我需要通过 LAN 访问 PCIe 卡。我想知道是否有现成的虚拟化解决方案,或者我是否需要创建自己的解决方案。

场景如下:我需要在服务器 A 上使用 PCIe 卡,但该 PCIe 卡物理上位于服务器 B 中。服务器 A 和 B 通过 LAN 连接。出于安全原因,我需要能够这样做。两台服务器都运行 Linux。

我发现的一个可能的解决方案是索卡特。使用此工具,我可以监听服务器 A 上的端口,将所有传入的数据包传输到服务器 B 上的 socat 监听器,然后将数据发送到 PCIe 设备。但是,这都是理论上的,我不知道这是否会奏效。

我想到另一种可能性是在服务器 A 上创建一个虚拟 PCIe 设备,它通过 LAN 向服务器 B 发送数据。但同样,我不知道这是否可行。

你能帮助我想出一个解决这个问题的好方法吗?

答案1

如果性能不是问题,你可以在主机 A 上编写一个 pcie 驱动程序,将 pcie 请求转发到网络堆栈,然后通过 LAN 将其发送到主机 B,另一个驱动程序接收此数据包并将其提供给 pcie 卡....如果它是性能密集型应用程序,并且 pcie 卡支持多种功能,那么我建议你使用快速结构交换机。这将帮助您将不同的卡功能分配给不同的主机。因此,两个主机都应能够通过 pcie 同时访问卡。您将从共享 pcie 卡获得接近原生 pcie 的性能。而且这也是使用原生驱动程序。

答案2

不久前我看到了一些非常简单的方法可以做到这一点:

1

https://www.missinglinkelectronics.com/images/files/papers/EW2016-Session18-MLE-PCIeOverIP_r09.pdf

相关内容