--- Quote Start ---
Thank you for the interesting insights. Can you achieve the said speeds through UDP, when you connect at the socket driver level (winsock2 on windows OS), or do you need to connect the device driver at a lower level?
--- Quote End ---
On Linux, we can achieve these throughputs with a socket connection using UDP, so it is through the OS's protocol stack and the standard sockets library. We have not benchmarked on Windows.
We had to do a fair amount of tweaking driver settings to achieve 500MB/s. The settings that made the most difference were the ring buffer size and the IRQ affinity. The ring buffer needed to be huge. The NIC IRQ affinity had to be set to one CPU, and the affinity of all other IRQ's had to be assigned to the remaining CPU's, so that the NIC's IRQ essentially had a dedicated CPU on which it was the only interrupt that would be serviced.