I have been struggling with a UDP performance issue for some time, and am just about out of ideas so I'm looking for some help. Our application relies heavily on UDP broadcast packets - specifically clients in other subnets elect one client in each subnet to individually send their messages, and then that one client in the different subnet re-broadcasts it to the entire subnet. Everything works fine in the physical world, never a problem. Once we've started to virtualize, the VMs that are acting as the broadcast clients are dropping UDP packets intermittently.
I've tried a number of things:
- Switched all of the clients to e1000 instead of vmxnet3 - we saw a lot of dropped UDP packets with vmxnet3
- Changed all esx hosts (DL380G6) to high performance power profile, eliminating any CPU throttling for power saving
- Increased e1000 tx and rx descriptors to max - 2048
- Added a second vCPU - again, lot's of dropped packets with one vCPU, disappeared with 2.
In the physical world, we use single-core Pentium 4s, 2.0 GHz, and there's never a problem. The DL380G6s have quad core, dual CPUs, and we're having problems constantly - missed UDP packets at the VM clients.
The switches aren't the issue either. We have physical clients connected to the same switches in the same sub-net, and they perform fine.
These are very, very low usage machines - typically running <100 MHz with dual CPUs. I suspect that when they get multiple UDP packets when they are idle, the first couple get dropped. The problem is that just dropping 1 or 2 packets can create a major issue in our application. Changing the application isn't an option, either.
The only thing I've been able to find that I haven't tried is this setting in the vmx file: monitor.idleLoopSpinUS I don't know that it will help much, so I'm reluctant to try it yet.
Can anyone suggest anything that might improve the performance of our bursty,, UDP application, to allow it to keep up with the intermittent UDP packets?
Any help or questions would be very appreciated!