惠普在其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它们并没有帮助。
那么瓶颈在哪里呢?
系统详情:
在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负载,但是最大限度地提高了最高限额来达到我需要的标准。