是否可以使用与供应商无关的 API 通过 Windows 每秒处理数百万个数据报?

是否可以使用与供应商无关的 API 通过 Windows 每秒处理数百万个数据报?

我正在调查是否可以在 Windows 中实现 HPC 应用程序以高速率接收小型 UDP 多播数据报(大多为 100-400 字节),使用十几个或最多 200 个多播组(即使用 MSI-X 和 RSS,我可以扩展到多个核心),对每个数据包进行一些处理,然后将其发送出去。通过 TCP 发送,我设法达到了我需要的速度(6.4Gb/秒),没有遇到瓶颈,但以高 pps 速率接收数据报却成了问题。

在一个最近的测试在一台高规格的 NUMA 机器上,配有 2 端口 10Gb 以太网网卡,运行 Windows 2012 R2,我只能每秒接收数十万个 UDP 数据报(提前丢弃,即不实际处理数据,从等式中移除我的应用程序的处理开销,看看它有多快)使用 2x12 核心,测试的 12 个多播组的内核部分似乎分布在一个 NUMA 节点的 8 个或 10 个核心上(最大 RSS 队列设置为 16) - 尽管使用.net 应用程序,但本机应用程序应该能够运行得更快。

但即使伦·霍尔盖特 仅能以 500kpps 的速度接收 UDP 数据包他的高性能 Windows RIO 测试,使用1024字节的UDP有效负载。

QLogic 的白皮书(未提及测试中的操作系统)“多线程超小数据包路由”的限制(包括接收和后续发送?)设置为5.7Mpps。 在文章Linux 网络,限制设定为1Mpps 至 2Mpps每个核心(据报道或多或少呈线性增长),甚至15Mpps采用绕过内核的特殊解决方案。

例如网络地图

可以以线速率生成流量(14.88Mpps) 在 10GigE 链路上,只有一个内核以 900Mhz 的速度运行。这相当于每个数据包大约 60-65 个时钟周期,并且可以很好地随内核和时钟频率扩展(使用 4 个内核,线路速率可达到低于 450 MHz)。接收端也达到了类似的速率

那么,我可以使用 Windows 2012 R2 以及良好的标准以太网网卡来实现标准以太网(而不是例如融合以太网),使用与供应商无关的 API?

答案1

可以绕过内核并使用安装了 hpc 的 netdirect。请参阅https://msdn.microsoft.com/en-us/library/cc904344(v=vs.85).aspx我找不到任何 perf 数据(我怀疑它会因供应商而异,因为它比其他 API 更直接地使用 NIC 硬件),但它应该与 Linux 中的其他内核旁路解决方案相当(内核旁路就是内核旁路)编辑:所以如果你拒绝实际使用提供的硬件,就不要指望使用所需的驱动程序可以从标准 NIC 获得的性能。不需要融合以太网(我不确定这是怎么产生的),但这就是供应商向 OS 驱动程序公开硬件功能的方式,我不确定你为什么甚至参考 qlogic 论文(它特别提到使用他们的 nic 硬件 - 你说你不想做的事情)与 netmap 论文相同(使用修改后的驱动程序)。

相关内容