We have a custom and VERY bespoke application that runs on a Windows 2008R2 server. It's primary function is to connect to many tens of thousands of IP addresses as quickly as possible and interrogate a specific TCP port - essentially a network scanner, but heavily customised to our requirements. There's no NAT between the server and the destination addresses, and the application doesn't consume any great amount of memory or CPU.
The application (based on .NET) is optimised and we're confident the code is as tight as it can be. However, the rate at which the application can move through the IP addresses seems to be limited to a combination of the Windows TCP stack and the hardware it's running on - at the moment it's on a low-end, barely-server-class box.
As performance of this application is paramount, we're planning on moving it to new higher-spec server, probably a HP DL360 G8. However, we could potentially run several instances of the application on separate machines simultaneously, and therefore I'd like to explore the option of using the new server as a virtual host.
We'd probably be using VMWare ESXi, with Hyper-V as an alternative option. However, I'm unsure if the packet-intensive application, running in virtual machines on the server would simply move the bottleneck to the hypervisor?
The DL360 has 4 NICs: we could potentially "connect" 4 virtual machines to each of the 4 NICs and run them in parallel. Does VMWare/Hyper-V effectively pass through the traffic directly to the NIC, therefore giving "native" network performance, or is there an element of translation between guest OS and hardware that could potentially cause a bottleneck of packets at the hypervisor?