HP 的关于其 QLogic (fka Broadcom) NetXtreme II 适配器的白皮书包括我正在测试的特定 NIC,声明(第 7 页)对于高达 256 字节/包的小数据包性能高于 5,000,000 数据包/秒。
在我测试的一个应用中,我禁用了除 UDP 接收部分之外的所有处理,最高只能达到 120,000 个数据包/秒。数据包均匀分布在 12 个多播组中。
我注意到一个核心(2 个插槽上各有 12 个核心)当我提高 UDP 发送速率时,负载会逐渐增加,最多约为 120,000。但我不知道该核心在做什么以及为什么这样做。这不是我的应用程序中的单线程瓶颈,因为无论我为所有多播组运行应用程序的单个实例,还是运行 12 个实例(每个实例处理 1 个多播组),都无关紧要。因此瓶颈不在我的接收器应用程序。
MSI 已启用(通过设备管理器中的“按类型查看资源”视图) 和 RSS 也在 NIC 设置中启用,具有 8 个队列。那么什么会粘在那一个核心上呢?所有 NIC 卸载功能目前都已启用,但关闭它们并没有帮助。
那么瓶颈可能在哪里呢?
系统详细信息:
- ProLiant BL460c Gen9
- 英特尔至强 E5-2670 v3(2 x 12 核)
- HP FlexFabric 10Gb 双端口 536FLB 网卡
- Windows 2012 R2
答案1
RSS 也在 NIC 设置中启用,具有 8 个队列。
不幸的是,这并不意味着 RSS 被使用,因为
netsh int tcp show global
显示:
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled
运行后(顺便说一下,无需重启)
netsh int tcp set global rss=enabled
RSS 开始工作,之前堆积在那个可怜的核心上的负载现在均匀分布在两个 NUMA 节点之一的多个核心上。
我还没有验证这是否能让我处理广告中所说的 Mpps 负载,但是上限已经被提升到足以对我所需要的进行基准测试。