供应商白皮书说:5Mpps没有问题。 我已经打到120kpps的墙了。 瓶颈在哪里?

惠普在其QLogic(fka Broadcom)NetXtreme II适配器 (包括我正在testing的特定NIC )上的白皮书 (第7页)指出,对于高达每秒256个字节的数据包,它们的小数据包性能高于5,000,000数据包/秒。

在我的一个应用程序的testing中,除了单纯的UDP接收部分之外,我禁用了所有的处理,只能达到120,000包/秒。 报文均匀分布在12个组播组上。

我注意到有一个内核 (两个sockets上有12个内核),当我调整UDP发送速率时,负载逐渐增加, 最大值为12万 。 但我不知道这个核心在做什么,为什么。 这不是我的应用程序中的单线程瓶颈,因为如果我为所有多播组运行单个应用程序实例,或者每个处理1个多播组的12个实例都无关紧要。 所以瓶颈不是我的接收器应用程序。

MSI已启用(通过设备pipe理器中的“按types查看资源”视图进行validation),并且在NIC设置中也启用了RSS,有8个队列。 那么坚持那一个核心呢? 目前所有的网卡卸载function都处于开启状态,但closures它们并没有帮助。

那么瓶颈在哪里呢?

系统详情:

  • ProLiant BL460c Gen9
  • 英特尔至强E5-2670 v3(2 x 12核心)
  • HP FlexFabric 10Gb双端口536FLB网卡
  • Windows 2012 R2

在NIC设置中也启用了RSS,有8个队列。

不幸的是,这并不意味着RSS正在被使用

netsh int tcp show global 

结果显示:

 TCP Global Parameters ---------------------------------------------- Receive-Side Scaling State : disabled 

运行后(顺便说一句,没有重新启动)

 netsh int tcp set global rss=enabled 

RSS开始工作,以前堆在那个可怜的核心上的负载现在被均匀地分布在2个NUMA节点之一上的许多核上。

我还没有证实这是否能够让我处理广告中的Mpps负载,但是最大限度地提高了最高限额来达到我需要的标准。