I’ve recently had a developer ask me why the socket calculation in VMware vSphere 6.5 is seemingly so different than the legacy 5.5 environment he was used to and I found it difficult to verbally walk him through the changes so I went ahead and quickly wrote up an explanation, which I thought would be useful to blog in case I need to explain it again in the future.
First off, the following VMware blog does a great job with explaining this but I try not to respond to people with a link as they may feel I haven’t put much effort into an answer.
Virtual Machine vCPU and vNUMA Rightsizing – Rules of Thumb
Here is the write up I sent:
The following are the two parameters we are presented with when attempting to allocate processors and cores to the VM:
Cores per Socket
The CPU value is used to determine the total amount of cores that we want to present to the VM.
The Cores per Socket is a setting we use to determine the amount of physical sockets that VM would have. By this, I mean that if we wanted the VM to have, say, 10 cores of processing power, we can use either of the three settings:
Cores per Socket: 1
The above would yield a socket configuration of 10:
Cores per Socket: 5
The above would yield a socket configuration of 2:
Cores per Socket: 2
The above would yield a socket configuration of 5:
The Cores per Socket actually has no bearing on the amount of usable cores available to the VMs as it is used to determine how many sockets are presented to yield the amount of cores available.
With the above in mind, it is not possible to have a Cores per Socket value that is higher than the CPU value because that would equate to a total amount of cores that is higher than the CPU value or the last socket would need to have zero cores for math to work. The following are options help demonstrate this:
Note how the maximum value allowed for Cores per Socket is always equal to or less than value of the CPU.
If I took the last example of having 16 for the value of CPU and configuring 8 cores per socket then that configuration would consist of 2 physical sockets with 8 cores each totaling 16 CPUs:
You’ve probably already noticed but the math is basically CPU divide by Cores Per Socket.
This has been a significant change to what was previously used to in version 5.5 (the above is 6.5) where the calculation makes more sense to many who have used that environment:
Notice how the way the older version calculates the cores is simply Number of virtual sockets multiple by the Number of cores per socket.