How many vCPUs can I have?
-
Technically you can over allocate resources to your VM's assuming your hypervisor supports it. Up to something like 200% in some cases of the number of cores you have.
What hypervisor are you using?
-
You can have SO many more than are useful. The question you are asking has a theoretical maximum, but beyond wondering what that is, it's not something you want to know. You should be asking how many you should have, not how many you can have.
It's like asking how much chocolate a human can eat before dying, rather than wondering if you can eat as much as would still taste good.
-
Remember, giving extra vCPUs that aren't needed lowers performance. You started by saying that you have heavy resource users. Then you finish by asking a question that implies you are looking to kill performance. That's why we are worried.
-
How many vCPU you can have is a factor solely of your hypervisor, which you didn't mention.
-
When setting up a VM, I actually start with 1 vCPU... If the system performs well in testing, then move it to production with 1vCPU... If it doesn't, then I'll move on up to 2 vCPUs and repeat the testing...
The reason is that when you have a VM with more than 1 vCPU, the system has to wait for that same number of cores to be ready to process instructions...
IE: With your SQL Server, you have 4 vCPUs... The Hypervisor/host has to wait until it has 4 Cores waiting on instructions before it gives any time to your SQL server.
Generally speaking that's not going to hurt things until your host gets busy with other VMs too.
-
@Joel said in How many VCPU’s can I have?:
Intel Xeon Silver 4114
This is a 20 thread processor. You've only allocated half of it. Half of the CPU will be completely idle as it is inaccessible in the current configuration.
-
@dafyre said in How many VCPU’s can I have?:
When setting up a VM, I actually start with 1 vCPU... If the system performs well in testing, then move it to production with 1vCPU... If it doesn't, then I'll move on up to 2 vCPUs and repeat the testing...
This is important. This is how performance testing has to be done.
-
@dafyre said in How many VCPU’s can I have?:
The reason is that when you have a VM with more than 1 vCPU, the system has to wait for that same number of cores to be ready to process instructions...
This is why using something like 18 out of the 20 threads would make sense. Hold two back for the system, and the rest just let go idle.
-
I suggest always setting a minimum of 2 vCPUs to allow access in case of a runaway thread within the guest.
When it comes to performance there are two boundaries to keep in mind:
1: Processor Physical Core Count
2: Memory per memory controller (NUMA Node)Our rule of thumb for #1 is # physical cores (pCores) -1
Our rule of thumb for #2 is a bit more flexible as a VM may not start if too much vRAM is assigned and it is bound by a NUMA boundary.
A performance hit can be had by too many vCPUs and vRAM assigned that crosses NUMA boundaries (can be set in the VM's properties). In both cases, bits are bounced around either between physical CPUs or between memory banks within each NUMA node. That bouncing around is lost CPU cycles right there.
-
@PhlipElder said in How many VCPU’s can I have?:
When it comes to performance there are two boundaries to keep in mind:
1: Processor Physical Core CountOur rule of thumb for #1 is # physical cores (pCores) -1
This should be by thread, not core count. In the AMD world, they are one and the same. In the Intel world, they are not, but are close. In the Power, ARM, and Sparc worlds, they can be wildly divergent.
-
@PhlipElder said in How many VCPU’s can I have?:
Our rule of thumb for #2 is a bit more flexible as a VM may not start if too much vRAM is assigned and it is bound by a NUMA boundary.
A performance hit can be had by too many vCPUs and vRAM assigned that crosses NUMA boundaries (can be set in the VM's properties). In both cases, bits are bounced around either between physical CPUs or between memory banks within each NUMA node. That bouncing around is lost CPU cycles right there.
With good awareness you can manage this pretty well by mapping out possible RAM bank overruns, or just using NUMA affinity. But that becomes more complex.
-
NUMA issues is a key reason why we often recommend a single proc with more cores than two procs with fewer cores each. No NUMA.
-
@scottalanmiller said in How many VCPU’s can I have?:
NUMA issues is a key reason why we often recommend a single proc with more cores than two procs with fewer cores each. No NUMA.
Don't some of the modern CPUs have multiple memory controllers per CPU thus multiple NUMA Nodes per CPU? I've seen drawings for such but not encountered in servers as of yet.
-
@PhlipElder said in How many VCPU’s can I have?:
@scottalanmiller said in How many VCPU’s can I have?:
NUMA issues is a key reason why we often recommend a single proc with more cores than two procs with fewer cores each. No NUMA.
Don't some of the modern CPUs have multiple memory controllers per CPU thus multiple NUMA Nodes per CPU? I've seen drawings for such but not encountered in servers as of yet.
They might, I've not seen it yet either.
-
TL;DR 20
-
-
The maximum you CAN have is 240 vCPUs per VM, which is a limitation of Hyper-V Server 2016.
-
@Obsolesce said in How many VCPU’s can I have?:
The maximum you CAN have is 240 vCPUs per VM, which is a limitation of Hyper-V Server 2016.
That said, Hyper-V will tell you that the percent of total system CPU resources given to a VM will be 100% if you allocate the same number of total threads you have to a VM.
-
@Obsolesce said in How many VCPU’s can I have?:
The maximum you CAN have is 240 vCPUs per VM, which is a limitation of Hyper-V Server 2016.
How did you determine that Hyper-V is involved?
-