I have a Dual proc 10 core (20 total cores) ESX host with 15 vms on it. Out of these 15 VMs one is a CPU beast (20 vCPUs) that has an app that will max out every CPU out of the 20 on the host.
We want this massive CPU hog to take take everything it can from the ESX host but only when the other 14 are not using CPU cycles. In short we want the beast vm to crunch numbers all day long when it can but relent any and all CPU the second the other 14 need even a touch of CPU.
I have created two resource pools. One for the beast VM and one for the rest of the servers. I assigned the beast VM low CPU shares and the other high.
Users are still complaining though that the 14 servers are slow when the beast VM is crunching CPU. Is there something I am missing. Or is there some overhead that makes this not work as I thought it would. Should I drop the core count on the beast VM to 18 so that the ESX host itself has a core or two to itself?
Each VM is getting it's ressource from it's ressource pool, which means if you haven't configured shares on a ressource pool level, both ressource pools will treated equally...with one ressource pool having multiple machines....the other ressource pool having only one machine!
One opportunity might be to give the ressource pool with the other machines a low reservation.
"I have created two resource pools. One for the beast VM and one for the rest of the servers. I assigned the beast VM low CPU shares and the other high."
I have already assigned the 1 beast CPU vm resource pool "low shares" A also have assigned the other resource pool to be high CPU shares.
We would rather not give the 1 resource pool with the other 14 machines any reservation. Doesn't that mean that when they are not doing anything that those CPU cycles would go to waste? Or is that just when there is contention.
I see where you are going with the two resource pools. If you have resource pools at the same level will split the available resources. For example I have 4000 shares configured between the two pools with pool 1 having 1000 and pool 2 having 3000. Pool 1 has a 25% share and pool 2 will have a 75% share. But if I have 10 VMs in Pool 2 each is only receiving a 10% share of the parent resources vs 25%. This is a super simplistic example but hopefully it explains the issue.
A CPU reservation will not waste cycles if the reservation is not being used.
I also ask if there is such a demanding VM why virtualize that server in the first place?