这是我到目前为止所做的:
使用更多的 Rx/Tx 缓冲区可以最大程度地提高默认值的性能。我在每个适配器上将 RSS 队列设置为 4,并将第二个端口上的启动 RSS CPU 指定为 0 以外的值(在我使用的 PC 上是 16,有 16 个内核,32 个 HT)。
通过观看 ProcessExplorer,我受到 CPU 处理大量传入中断的能力的限制,即使启用了 RSS。我在 2.x 模式下使用 PCIe x8(电气)插槽。两个适配器中的每一个都与 5GT/sec x8 总线连接。
操作系统响应能力无关紧要,I/O 吞吐量才是。我受到客户无法处理巨型数据包的限制。
接下来我应该尝试哪些设置?
详细信息:双 Xeon-E5 2665、32 GB RAM、RAID0 中的 8 个 SSD(用于 NIC 性能验证的 RAMDrive)、通过 IIS/FTP 从 400 个客户端尽快移动的 1TB 数据。
回应评论:
实际读取吞吐量为 650 MB/秒,通过一对 10Gb/秒的链接,进入 RAM 驱动器
防病毒和防火墙已关闭,AFAICT。(在这种情况下,我可以很好地控制 PC 上安装的内容。我如何确定没有过滤器会降低性能?我将不得不跟进,好点。)
在 Process Explorer 中,我看到 CPU 持续运行的一段时间(红色,内核时间),但网络和磁盘 I/O 停止
最大 RSS 处理器为默认值,16
X520-DA2 设备的两个实例都支持消息信号中断,MessageNumberLimit 设置为 18。这是我在低端桌面卡上看到的内容
高性能 NIC 的问题之一是现代 PC 架构难以跟上。但是,在您的情况下,这并不是问题所在。让我解释。
CPU 必须做很多工作来处理 TCP 数据包。这会影响吞吐量。在您的情况下,限制事物的不是网络硬件,而是服务器使网络链接饱和的能力。
最近,我们看到处理从 CPU 转移到 NIC,如校验和卸载。英特尔还增加了一些功能来帮助进一步减少负载。这很酷,我确信所有优化功能都已打开。
正如您所提到的,巨型帧 - 实际上这在一定程度上有助于吞吐量。但不如RDMA多。
大多数 10GBit 以太网硬件都有一个很好的未充分利用的功能,称为 RDMA 或远程直接内存访问。它允许 NIC 通过网络进行内存到内存的复制,而无需 CPU 的干预。好吧,好的,CPU 告诉 NIC 做什么,然后 NIC 完成其余的工作。问题是,它还没有被太多使用。但它正在到达那里。显然,在最新版本的 Microsoft Windows Server 2012 中,他们有一个叫做SMB Direct的东西。它使用 RDMA。所以,如果你想增加吞吐量,你想使用它。
您是否能够将一些测试硬件放在一起并将其安装到那里以查看它的性能?
顺便说一句,我不确定你是否会在 10Gbit 上看到它,但快速 RAM 有助于 RDMA,尤其是 56Gbit Infiniband。一般来说,最好使用服务器支持的最快 RAM。
另请注意我在上面放置的 SMB Direct 链接上的此评论:
更新:由于某种原因,看起来并非所有 10GBit NIC 都支持 RDMA。因此,首先检查您的模型的功能。
我的另一个想法是用于进行测试的协议类型可能会影响结果。即 TCP 开销之上的协议开销。我建议您考虑使用可以在不接触硬盘驱动器的情况下进行测试的东西,例如 iperf。它的某个地方有一个 Windows 端口。
我想这个问题:为什么我的千兆债券不能提供至少 150 MB/s 的吞吐量?和你的问题有关。我在那里谈论的是戴尔 PowerEdge 6950。答案基本上是“使用巨型帧”来减少中断。我可以想象调整网卡的卸载引擎可能对您有所帮助,但我不知道如何在 W2K8R2 上这样做。
想法: 增加网卡缓冲区的数量,提高缓冲区中数据包的中断触发,这样每个中断都会处理更多的数据包(即将它们传递到 OS-IP 堆栈)。
请参阅此链接:使用 ethtool 为 10 Gb 设置合并参数,这就是我所指的。
您的 CPU 利用率屏幕截图显示了 2 个潜在瓶颈:
解决前者:
至于后者(不知道您实际使用的是什么应用程序):
如果在用户模式下 1 核心最大化表明您的单线程(或单线程瓶颈)应用程序,它应该是
使用多个核心,这可能是微不足道的,也可能不是微不足道的。
此外,作为您的应用程序(如果它确实是您的应用程序),显然在 NUMA 节点 #1 上运行,但内核的数据包处理是在 NUMA 节点 #0 上完成的,
例如,通过右键单击任务管理器中的进程,您可以选择更改它,至少在 Win2012R2 中是这样。我试过了,对我来说没有帮助,但值得一试,因为它可能会提高缓存命中率。
顺便说一句,有问题的机器正在发送吗?接收?两个都?在配置系统性能方面,发送和接收几乎完全不相关,尽管我上面的建议涵盖了两者。