我正在调查是否可以在Windows中实现HPC应用程序,使用十几个或多达200个多播组 (即使用MSI-X和RSS I can ),可以高速接收小型UDP多播数据报(大多数为100-400字节)扩展到多个内核),每个数据包进行一些处理,然后将其发送出去。 通过TCP发送,我尽可能地达到了(6.4Gb / sec),而不用打墙,但以高的速率接收数据报就成了一个问题。
在最近一次在Windows 2012 R2上使用2端口10Gb以太网网卡的高规格NUMA机器的testing中 ,我只能每秒接收数十万个UDP数据报 (早期丢弃,即没有实际处理数据)使用2×12核心消除我的应用程序的处理开销,看看它有多快),testing的12个多播组的核心部分似乎分布在一个NUMA节点的8个或10个核心上(设置了最大RSS队列到16) – 尽pipe与.net应用程序,所以本机应用程序应该能够更快。
但是,即使Len Holgate在他的高性能Windows RIOtesting中也只能使用1024字节的UDP有效载荷接收500kpps的UDP数据包 。
在QLogic的白皮书 (未提及的操作系统)中,“multithreading超小型数据包路由”(包括接收和后续发送?)的限制被设置为5.7Mpps 。 在有关Linuxnetworking的 文章中 ,每个内核的限制被设置为1Mpps到2Mpps (据报道,或多或less线性扩展),甚至有15Mpps的特殊解决scheme绕过内核。
例如netmap
可以在10GigE链路上以线速( 14.88Mpps )产生stream量,只需一个以900Mhz运行的内核。 这相当于每个数据包大约60-65个时钟周期,并且随着内核和时钟频率(4个内核,线速率在450 MHz以下)实现了良好的扩展。 在接收方面达到类似的利率 。
那么,我可以通过使用与供应商无关的API来使用标准的以太网(而不是以太网 )来使用Windows 2012 R2和标准的以太网NIC吗?
它可能绕过内核和使用安装hpc的netdirect。 请参阅https://msdn.microsoft.com/en-us/library/cc904344(v=vs.85).aspx我无法find任何perf数据(我怀疑它会有所不同,因为它使用NIC硬件更直接其他API),但它应该与Linux中的其他内核旁路解决scheme(内核旁路是内核旁路)编辑:所以,如果你要拒绝实际使用提供的硬件,不要指望你可以从一个标准网卡使用所需的驱动程序。 没有融合的以太网是必需的(我不知道这是怎么产生的),但这就是如何提供商的硬件function的操作系统驱动程序,我不知道为什么你甚至提到qlogic文件(这是专指使用他们的nic硬件 – 你说你不想这样做)与netmap纸(使用修改的驱动程序)相同。