PCI-Express分层体系结构 – 哪里是最薄弱的节点

我想知道PCI架构是分层的。 因此,即使我有两个PCIx4插槽,也可能无法充分利用它,因为这些插槽将连接在一个节点上,这可能会导致带宽不足以处理2个PCIex4。

我的问题的背景是:我试图利用八个PCIe 1GBit接口。 我有两个包装有2个端口的卡,一个包装有4个端口的卡。 我能够在4个NIC接口上获得最大值。 激活第5个端口后,每个接口的性能略有下降。 激活第6,第7和第8ht接口后也是如此。

主要问题是: 如何获得一台机器上的PCIe结构,“绘制”它,查看它的节点和连接,并推断出该树中最弱的节点?

每个PCIe(v1)通道应该舒适地处理2个1Gbe链路。

此时DDR2可以轻松处理10Gbe的数据速率。

一般来说,机器的PCIe布局是由芯片组来决定的,如果你能find英特尔的图表,或者你应该能够找出瓶颈的地方。

例如: Intel P45 / ICH10 http://www.intel.com/Assets/Image/diagram/p45_Block-Diagram.gif

如果您运行的是类Unix操作系统,则探测消息的启动时间通常会列举PCI总线上的所有内容,并向您显示如何安排它。 Linux系统有一个相同的lspci命令。

如果你的总线上需要更多的带宽,你可能需要研究一下带有UIO插槽的Supermicro服务器。 使用AOC-UG-14可让您至less将一个4端口千兆以太网卡保留在PCI总线之外。 2U主机可以有两个UIO插槽,另外我相信有三个额外的PCI插槽,这可能使您可以build立一台具有12个千兆以太网端口的机器,以充分发挥性能。

这不仅涉及到PCI架构,还涉及到所有芯片组的FSB,内存带宽和内部带宽。 注意Wazoox的评论 – 即使是最近的Xeon平台在高线速下也performance不佳。

从阅读你的其他意见,我明白你在做软件包生成,并通过你的gige nics推出。 如果您对如何生成数据不太明智,那么可能会使内存带宽饱和。 如果您在生成数据包时在内存中执行多个副本,DDR2将处理10Gb,实际上,您实际上正在进行更多的内部通信。

而且,如果所有8个内核都被固定了,那么你就没有跟上其中的任何一个。 无论是中断加载还是数据包生成过程中不良的代码path,都会遇到一些问题。 我build议先解决这个问题。 分析你的代码,并找出是否有明显的时间花费你的大部分时间。

如果这没有帮助,并根据您的使用要求,你可以考虑一些真正的networking处理/捕获/传输卡,如Endace的DAG卡(我build议用于PCI-E的DAG 7.5 G2 / G4 ) 。 这些不是中断驱动的,所以不会因为中断而增加处理负荷。 它们不是网卡,所以你必须构造整个数据包和有效载荷,并处理layer2,但这并不昂贵。

免责声明:我为Endace工作。