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

Evg*_*sky 18 networking performance udp windows-server-2012-r2

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

在我对一个应用程序的测试中,我禁用了除 UDP 接收部分之外的所有处理,我只能达到 120,000 个数据包/秒。数据包均匀分布在 12 个多播组上。

我注意到当我提高 UDP 发送速率并在 120,000 左右达到最大值时,有一个内核(2 个插槽上的每个内核中有 12 个内核)其负载逐渐增加。但我不知道那个核心在做什么以及为什么。这不是我的应用程序中的单线程瓶颈,因为我是否为所有多播组运行应用程序的单个实例或每个处理 1 个多播组的 12 个实例都没有关系。所以瓶颈不是我的接收器应用程序。

MSI 已启用(通过设备管理器中“资源类型”视图进行验证)并且 RSS 也在 NIC 设置中启用,具有 8 个队列。那么是什么执着于那个核心呢?所有 NIC 卸载功能当前都处于开启状态,但将它们关闭并没有帮助。

那么瓶颈可能在哪里呢?

系统详情:

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

Evg*_*sky 14

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

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

netsh int tcp show global
Run Code Online (Sandbox Code Playgroud)

显示:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled
Run Code Online (Sandbox Code Playgroud)

运行后(顺便说一句,无需重启)

netsh int tcp set global rss=enabled
Run Code Online (Sandbox Code Playgroud)

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

我还没有验证这是否可以让我处理宣传的 Mpps 负载,但是天花板已经被提升到足以对我需要的东西进行基准测试。