HyperThreading (HT) technology is adopted again with recent Intel processors. Typically, two logical processors are presented per physical core. As these two logical processors compete for the same pipeline in a core, the computational capacity of one logical processor is less than that of a core. Utilizing both logical processors provides 10% - 30% higher throughput than when only one logical processor is used. Therefore, the capacity of each logical processor when both processors are busy is about 55% - 65% of a single logical processor running alone on the core.
To optimally utilize CPU capacity on a system, the CPU scheduler prefers a fully idle core to a partially idle core when it schedules a vCPU. Here, a fully idle core means that both logical processors on the core are idle while a partially idle core means that only one of the logical processors is idle.
The co-scheduling algorithm avoids scheduling a vCPU of an SMP virtual machine to a processor on which a sibling vCPU is running (or queued). This prevents sibling vCPUs from competing for the same processor because this results in higher costop and ready time.
Co-scheduling on an HT processor extends this notion further by considering the logical processor as above but also by looking at the sibling logical processor to avoid scheduling sibling vCPUs of an SMP virtual machine on the same physical core. The scheduler thus tries to equalize the resources each vCPU gets as well as to maximize the overall performance of the virtual machine.
Caution: DontShareCoreWithinVM is an advanced parameter and should only be changed under guidance from VMware Support or after thorough testing in the your environment.