直接 PCIe 到 PCIe 连接进行通信

Mar*_*ark 6 networking fedora pci

我有一种情况,我希望使用 PCIe x1 到 PCIe x1 电缆连接两个运行 Fedora 的主板。两块主板并排放置,间距1厘米。连接的目的是允许计算机 1 上的应用程序与计算机 2 上的不同应用程序进行通信,就像它们通过以太网连接一样。

计算机 1 通过以太网连接到网络,并且需要通过计算机 1 通过网络访问计算机 2。

我意识到,如果我用以太网电缆将计算机连接在一起,并桥接计算机 1 上的两个端口,那么我就会有一个解决方案。但我有充分的理由想要使用主板接头而不是后面板端口连接两台计算机。

我还意识到我可以将 PCIe 插入每个 PCIe 端口中的以太网设备,并在它们之间运行一条短以太网电缆。但我不想要这种复杂性。

我想知道是否可以使用 PCIe x1 板载端口通过简单的端口到端口电缆来实现该解决方案。

另一种方法是使用 COM 端口,但我的阅读表明我可以使用 PCIe 获得更好的性能?

tel*_*coM 9

事实上,与 COM 端口相比,使用 PCIe 会获得更好的性能...使用异常快速的 COM 端口,您可能会获得 0.92 Mbps 的传输速度,而使用单个 PCIe v3.x 链路可能会达到 7880 Mbps。

不幸的是,简单的端口到端口电缆在这里不是一个可能的解决方案。

卡插槽中的 PCIe 端口是专门的下游端口,必须与PCIe 卡本身中相应的上游端口进行通信。您正在尝试将一个下游端口连接到另一个下游端口,这是 PCIe 标准不允许的。

即使您可以解决该问题,也意味着两台计算机中的每一台都可以无限制地直接访问另一台计算机的系统总线。从本质上讲,它们将不再被视为两台独立的计算机,而更像是一个单一的 NUMA 系统,其两半之间存在相当严重的瓶颈(如果您仅使用单个 PCIe x1 连接)。如果没有任何方法来同步系统两半之间的访问,您只能牺牲硬件复杂性来解决非常棘手的编程问题。由于两半都是设计为独立运行的常规主板,因此即使进行最低限度的必要硬件同步改造也可能是不可能的。

但您试图实现的概念并不新鲜:它被称为非透明桥在 Linux 内核中,自内核版本 3.9 起就存在支持此类功能的基础设施。现在有支持 NTB 的硬件实现(您会注意到这些大多是相当重要的服务器级硬件的一部分)。甚至还有一个ntb_netdev驱动程序可以使 NTB 链路看起来像一个非常快的以太网设备。

所以...为了实现你的想法,你必须研究一些现有的 NTB 芯片,选择一款适合你的需求,为其设计 PCB(处理高频信号!),构建它,开发必要的补丁Linux 内核支持您的具体实现,并最终调试整个事情。

虽然真正神奇的硬件工程师可能会称其为“简单”,但对于不打算用其解决方案填充多个数据中心的普通人来说,一根短以太网电缆会简单得多。