如何提高英特尔X520-DA2 10Gb网卡吞吐量,而不需要巨型数据包

以下是我迄今为止所做的:

使用更多的Rx / Tx缓冲器可提高默认的性能。 我在每个适配器上设置了RSS Queues为4,并且指定了将第二个端口上的RSS CPU设置为0以外(我使用的是16,内核32,HT)。

从观看ProcessExplorer,我受限于CPU处理大量传入中断的能力,即使启用了RSS。 我在2.x模式下使用PCIe x8(电子)插槽。 每个适配器都连接一个5GT /秒x8总线。

操作系统的响应并不重要,I / O吞吐量的确如此。 我受到客户无法处理巨型数据包的限制。

接下来我应该尝试什么设置?

详细信息:双Xeon-E5 2665,32GB RAM,RAID0(用于网卡性能validation的RAMDrive)8个固态硬盘,1TB数据通过IIS / FTP从400个客户端移动到ASAP。

在回应评论时:

实际读取吞吐量是650 MB /秒,在一对10Gb /秒的链路上,进入RAM驱动器

防病毒和防火墙closures,AFAICT。 (在这种情况下,我可以很好地控制PC上安装的内容,我怎样才能确定没有filter会降低性能?我将不得不跟进,这点很重要。)

在Process Explorer中,我可以看到CPU持续运行的时间(红色,内核时间),但networking和磁盘I / O停止

最大RSS处理器的默认值是16

消息信号中断在X520-DA2设备的两个实例上均受支持,MessageNumberLimit设置为18.以下是我在低桌面卡上看到的内容

一种检查MSI支持的方法

ProcExp摘要

在这里输入图像说明

高性能网卡的问题之一是现代PC架构有点麻烦。 但是,就你而言,这不是问题。 让我解释。

CPU必须做很多处理TCP数据包的工作。 这会影响吞吐量。 在你的情况下限制的事情不是networking硬件,而是服务器使networking链路饱和的能力。

在更近的时代,我们已经看到处理从CPU移动到NIC,如校验和卸载。 英特尔还增加了一些function来帮助进一步降低负载。 这很酷,我确定所有的优化function都打开了。

正如你所暗示的那样,巨型帧实际上有助于提高吞吐量。 但不如RDMA 。

大多数10GBit以太网硬件将具有非常好的利用率不足,称为RDMA或远程直接内存访问。 它允许NIC在没有CPU介入的情况下通过networking将内存复制到内存拷贝。 那么,好的CPU告诉网卡做什么,然后网卡做剩下的事情。 麻烦的是,它还没有使用太多。 但它到达了那里。 显然,在最新版本的Microsoft Windows Server 2012中,他们有一些名为SMB Direct的东西。 它使用RDMA。 所以,如果你想增加吞吐量,你想要使用它。

你能把一些testing硬件放在一起,并安装到那里看看它是如何执行的?

顺便说一下,我不确定你是否会看到10Gbit的内存,但快速的RAM可以帮助RDMA,尤其是56Gbit的Infiniband。 一般来说,最好使用你的服务器支持的最快的RAM。

还要注意上面提到的SMB直接链接上的这个评论:

如果您打算使用networking适配器的RDMAfunction,则不应配备支持RDMA的networking适配器。 组合时,networking适配器将不支持RDMA。


更新:看起来不是所有的10GBit网卡支持RDMA出于某种原因。 所以先检查你的模型的function。

我的另一个想法是用于testing的协议types可能会影响结果。 即在TCP开销之上的协议开销。 我build议你看看使用的东西,可以testing,而不必接触像iperf这样的硬盘。 有一个窗口的地方。

我想这个问题: 为什么我的吉比特债券不能提供至less150 MB / s的吞吐量? 与你的问题有关。 那里我正在谈论戴尔PowerEdge 6950。 答案基本上是“使用巨型帧”来减less中断。 我可以想象,调整网卡的卸载引擎可能会有所帮助,但我不知道如何在W2K8R2上这样做。

想法:提高网卡中的缓冲区数量,提高缓冲区中数据包的中断触发因此每个中断将处理更多的数据包(即将它们传递给OS-IP协议栈)。

看到这个链接: 设置聚合参数与ethtool为10 Gb这就是我所指的。

你的CPU使用率截图显示了2个潜在的瓶颈:

  1. 4个内核最大限度地做内核工作(即可能中断处理程序包的处理程序)
  2. 主要用户模式下有1个内核

为了解决前者:

  • 尝试更改中断审核设置,这取决于您的驱动程序不仅仅是打开/closures,您可以设置审核策略
  • 尝试禁用/启用所有的卸载function(在您的情况下,禁用可能是有益的,以便将您的(单核)NIC的function将卸载到您的(多核)处理器的潜在瓶颈)
  • 尝试启用“接收合并”(当接收TCP时),以及您的驱动程序可能提供的各种“大接收…”,“大传输…”等function
  • 你不能将你的RSS队列设置为高于4的值吗? 似乎只有你的2个端口中的一个正在被使用(正如你所说的你知道的,我假设你设置你的第二个端口至less4(或8,不知道HT是否必须被计算)
  • 如果可能的话,增加使用的不同TCP / UDP端口的数量,或者IP源/目标地址,因为一个地址/端口/协议5元组(或者非TCP / UDP业务的地址/协议3元组)总是会有无论您的RSS设置如何,都可以进入相同的核心

至于后者(不知道你实际使用的是什么应用程序):

如果在用户模式下最大化的1个核心表示您的单线程(或单线程瓶颈)应用程序,它应该是

  • 固定的,或者
  • 重新configuration(例如,如果可能,增加#工作者线程),或者
  • 重新devise

使用多个核心,这可能也可能不是微不足道的。

此外,作为您的应用程序(如果它确实是您的应用程序),显然运行在NUMA节点#1上,但内核的数据包处理是在NUMA节点#0上完成的,

  • 尝试将应用关联到NUMA节点#0

例如右键点击任务pipe理器中的进程,至less在Win2012R2中,您将可以select更改该进程。 我试了一下,对我来说没有帮助,但值得一试,因为它可能会提高caching命中率。

顺便说一句,有问题的机器发送? 接收? 都? 在configuration你的系统性能方面,发送和接收几乎是完全不相关的,尽pipe我上面的build议涵盖了两者。