The CPU scheduler can use each logical processor independently to execute virtual machines, providing capabilities similar to traditional symmetric multiprocessing (SMP) systems. The VMkernel intelligently manages processor time to guarantee that the load is spread smoothly across processor cores in the system. Every 2-40 milliseconds (depending on the socket-core-thread topology), the VMkernel looks to migrate vCPUs from one logical processor to another to keep the load balanced. The VMkernel does its best to schedule virtual machines with multiple vCPUs on two different cores rather than on two logical processors on the same core. But if necessary, the VMkernel can map two vCPUs from the same virtual machine to threads on the same core.
If a logical processor has no work, it is put into a halted state. This action frees its execution resources and allows the virtual machine running on the other logical processor on the same core to use the full execution resources of the core. The VMkernel scheduler properly accounts for this halt time. So a virtual machine running with the full reources of a core is charged more than a virtual machine running on a half core. This approach to processor management ensures that the server does not violate the ESXi resource allocation rules.