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?


For hyper-v: It depends. You want o go with SR-VIO enbled on the hardware card, the virtual network and - the NIC. Otherwise all packets go through a virtual switch, which will mean overhead. Given a decent network card this will result in a hardware queue assigned to the virtual machine, which is as fast as it gets in a virtualization layer.

| improve this answer | |

In VMware you can do also do SR-IOV, keep in mind that requires a network card that supports it. A good overview of SR-IOV by Scott Lowe, if you're not familiar with it. VMware also gives you the option to do "DirectPath I/O" where you give a guest direct access to a pci device, search for "DirectPath" in this PDF for more info. It's also worth noting that you might try it in VMware without using DirectPath or SR-IOV, the performance is really good as long as you use the VMXNET3 guest driver.

| improve this answer | |

We have done similar things on RHEV (or simply KVM) by using either SRIOV or if you're using Cisco UCS - with VMFEX - you need the Palo cards in the blades for this one.

Very large deployments in both cases (5 figure server numbers) working very well for a few years now.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.