Resource pools is a way to logically abstract CPU and Memory resources to groups of virtual machines. Resource pools is a very complex thing and you need to know what the different options “Reservations”, “Limits” and “Shares” does and how they work.
A very common but (sometimes) misunderstood implementation of Resource Pools is the HIGH, NORMAL, LOW approach. You basicly create three resource pools. High (with HIGH cpu and Memory shares), Normal (With Normal cpu and memory) and Low (With Low cpu and memory shares). Then you drag and drop your virtual machines into the resource pool you want.
The CPU sheduler in VMKERNEL then uses a proportional share algorithm to give CPU and Memory to the VM’s.
This is a fine approach in SOME cases, that is if you know what this actually means. A lot of my customers are doing this to prioritize their virtual machines. They then expect a virtual machine in the HIGH resource pool to always get more CPU time than a virtual machine in the LOW resource pool. This is not the case.
Lets look at the shares to see what this implementation actually means. The shares value for High is 4, Normal 2 and Low 1:
Total shares = 7 (100%)
High 4 (57%)
Normal 2 (28%)
Low 1 (14%)
What this implementation actually does is carve up your ESX host resources or Cluster resources into three resource pools. In case of contention your high virtual machines will get 57% of the total resource, Normal 28% and Low 14%. If this is what you want great!
But if you wanted to make sure a High VM always gets more access to a CPU than a machine in Low this is not the case. Lets for instance look at the following case. You drop 2 virtual machines into the High resource pool, 4 machines into the Normal and 1 machine into the low and start a cpubusy script in each VM. This means that the 2 in high will share the 57% of the total resources. The 4 in Normal will share the 28% and the ONE in low will have the 14% to its own use. Lets look at the following screenshot from ESXTOP with this excact setup:
Look at the %USED coloumn. The fbp_low1 virtual machine gets 65% CPU usage, the 4 machines in Normal gets approx. 33% and the two in High gets 96%.
If you use this resource pool design to carve up you enviroment with minumum resources to your pools you got it right. But if you use this approach to always make sure a VM in HIGH always gets more CPU than a VM in Normal or Low this is NOT the case.