In the early versions of esx, when a 4vcpu vm wants to use cpu time, there had to be 4pcpu's (physical cpu's) free/availlabe. is this still in esxi 6?
I found some different statements about that:
- VMware Relaxed Co-Scheduling in ESX 3.x and Later Versions : In the previous example of the 4-vCPU virtual machine, the virtual machine can make forward progress even if there is only one idle pCPU available https://www.vmware.com/files/pdf/techpaper/VMware-vSphere-CPU-Sched-Perf.pdf (site 8/26)
- On a Blogpost about CPU ready time: Whenever a VM is scheduled to a processor, all of the cores must be available for the VM to be scheduled or the VM cannot be scheduled at all
Has somebody a "right" answer?
I would lean toward the vendor documentation more than a blog post honestly. Relaxed Co-Scheduling does allow the idle CPU's to have a greater skew by not requiring there always be enough pCPU to schedule every vCPU. The drawback is if you have vCPU's that are always idle, then the skew between the leading vCPU and the trailing vCPU get's to a point where the leading vCPU must be co-stopped to allow the trailing vCPU to catch up. This is important as most operating systems run a tick on each CPU to keep system time and also gauge CPU utilization. When you have vCPU's that are always idle, thanks to Relaxed Co-Scheduling the tick is not scheduled, so the time of return of the tick to the kernel is large, and thus the kernel has no choice but to assume the CPU is being heavily used because these ticks are background priority tasks. Similarly the leading CPU that has to Co-Stop also causes the tick to take a long time to respond, once again making the kernel think the CPU is heavily used.
So while Relaxed Co-Scheduling does allow the vCPU's to become skewed by not requiring every vCPU be scheduled on the host at once, this can lead to both performance increase in some cases but also lead to severe performance degradation because too many vCPU's get assigned to a VM, and the majority of them are idle.