我发现,UDP RSS 队列不起作用的原因是什么:Intel(R) Ethernet Converged Network Adapter X550-T2 即使已配置也不会发送 Jumbo 包(其他 NIC 会发送),因此所有 UDP 包都大于默认的 1500MTU 被拆分成 IP 包。 IP 包没有端口,UDP-RSS-Hashing 算法不起作用。 即使它知道 IP 包是 UDP 包的一部分。
唯一的方法是将 iperf 发送端的 MTU 大小减小到物理 MTU。
此外,当使用默认的 WINSOCK API 时,Windows 不会从内核接收多个 UDP 包。 这将导致非常高的 CPU 负载。 要解决这个 iperf 应该使用 WSA Registered I/O API。
_最初由@Febbe在https://github.com/esnet/iperf/issues/1049#issuecomment -766829448_ 中发布
我很高兴您能够找出导致此问题的原因! 不幸的是,ESnet 在 Windows 上不支持 iperf3,所以如果有解决方案,它必须来自社区(以及不破坏支持平台的 iperf3)。
“ESnet 在 Windows 上不支持 iperf3”是否意味着您作为 ESnet 不会解决这个问题,但您会接受来自社区的 PR?
据我所知,RSS-Queues 也用于 Linux 平台,所以即使在那里,至少添加一个标志来禁止 udp 的包碎片,而不是使用默认的 -l 8K 标志是有意义的。
“ESnet 在 Windows 上不支持 iperf3”是否意味着您作为 ESnet 不会解决这个问题,但您会接受来自社区的 PR?
如果 PR 不破坏功能(如果可能,使用条件编译,树中有几个示例)或导致 iperf3 设计的设计发生重大变化,我们将从社区中获取 PR。 我们没有能力在我们的环境中实际测试特定于 Windows 的 PR,因此让 PR 被接受的最佳机会是它是否小巧且易于非 Windows 开发人员理解。
提交 PR #1119 添加用于设置不分段标志的选项。
最有用的评论
提交 PR #1119 添加用于设置不分段标志的选项。