Since everybody else is giving great info about limits, reservations, shares, etc. (check out some excellent articles from duncans Yellow-Bricks and Frank Denneman their blogs), I have something to add also: the impact of using "low-normal-high" shares.
I've been at a customer once which had big performance issues. VMs were slow and they tried to solve that with shares, limits, reservations, making a big pile of unmanageable virtualization mess.
One example: they had 1 VM which they felt was not very important, so they gave it 1 vCPU and the 'low' shares setting. An other VM, a SQL database server was given 4 CPUs with the 'high' shares setting. Now in a worst case scenario (when both VMs are active and need the same resources) the ratio is: 1:16!
Now how do I get this figure? Well, we (should) all know the shares values: low : normal : high = 1 : 2 : 4
CPU default share value is 1000 shares/vCPU. So the less important VM gets 500 shares, the 4 core database server gets 8000 shares. So once in the 17 times the less important VM was able to do CPU, and sixteen in the 17 times the database server was given access to the CPU.
On top of that, the physical server only had 4 cores, this wasn't the only servers running on the system AND they were running performance management tools which sampled every know counter in Windows and streamed that to the above mentioned database server ON THE SAME TIME.
My point is this: the low - normal - high ratio in somewhat extreme in my point of view and is misused quite often.
So what's my view on this??? Well, try to stay away from multi core VMs. If you are running multicore VMs, don't overcommit (at least not too much) and put them on a dedicated cluster. Why not overcommitting? Well, duh, you gave it multiple CPUs, so apparently those VMs need to do some processing which is very important. And since it's that important, don't overcommit. Should make sense. Else give it one vCPU.
Also, try not to use the somewhat extreme 'low-normal-high' share setting. I would say: "If a VM is more important, use a custom setting of 1200 shares/vCPU. If a VM is less important, use a custom setting of 800 shares/vCPU". That way the ratio between them isn't that extreme and nature is more balanced.
By the way, it's a relative figure, so if you leave nothing at normal (so 1000 shares) and you change all your VMs to 800 and 1200 shares (which I would not recommend anyway), you could have also done this:
Leave the less important VMs on normal and put the more important to: 1500 Leave the more important VMs on normal and put the less important to: 666
In the end the ratio is still the same, get it?
May I add vSphere has an excellent overview of all your shares, limits, reservations AND the % shares in a 'worst case allocation'? Check out the 'Resource Allocation' tab on cluster level and/or resource pool level.

|