There have been some recent reports from users observing performance issues when running VMware Workstation on Windows 11 along with using recent Intel (12th Gen and later) Hybrid CPUs, which introduces a new hybrid big.LITTLE architecture for Intel's x86 consumer CPUs.
This new Intel Hybrid CPU contains two types of CPU cores: Performance-cores (P-cores) and Efficiency-cores (E-cores) into the same physical CPU die, which follows a simliar design to Apple Silicon CPUs. For information about the new Intel hybrid Intel CPUs, check out this resource HERE.
At first glance, most users had assumed this was due to Virtual Machines being scheduled to run on the less powerful E-Cores, this was problematic even for non-VMware use cases and with the recent introduction of Intel Thread Director, this was supposed to have been improved with Windows 11.
However, after some internal testing, the Intel Hybrid CPU may not actually be the culprit.
Since I had access to a recent Intel Hybrid CPU via Intel 13 NUC Pro with Intel i7-1360P (4P + 8E Cores), I was able to help validate some observations that was made by our Engineering teams regarding the performance issue.
We found that if you just launched VMware Workstation without the "Run as administrator", the performance of the workload would be impacted. I had confirmed this behavior by simply running the PassMark CPU-only Benchmark inside of a Windows 11 VM using latest VMware Workstation Pro 17.
Here is the result for running VMware Workstation with the non-admin role:
Here is the result for running VMware Workstation with the admin role:
As you can see, the performance immediately improves quite significantly!
VMware Engineering is still investigating the issue and is also working with Microsoft to better understand what is happening. For now, starting VMware Workstation with the "Run as administrator" should mitigate the performance impact until a better solution is available. I believe we will also be publishing an official VMware KB with more information, so stay tuned for those details and I will update the blog post once that is available for those intersted.
Interestingly, earlier this week I caught an article about a new tool from Bitmum called CoreDirector that can help manage which applications can run on the P and E-Cores.
After installing CoreDirector, you simply add the executable name or pattern, in our case for VMware Workstation it is vmware.exe and that is supposed to ensure these applications do not use the E-Cores.
Here is the result for running VMware Workstation with the non-admin role running on the P-Cores:
Here is the result for running VMware Workstation with the admin role running on the P-Cores:
Using the more capable P-Cores, you can see the performance does help a bit further but only when running with the admin role.
While CoreDirector can be used to pin the entire VMware Workstation application and all of its VMs to run exclusively on the P-Cores, you might want finer control on which VMs get access the P-Cores. In VMware Workstation, you can indeed exclude certain VMs from being scheduled on the E-Cores by adding the list of processors to use or not use into a VM's VMX file.
For my setup, I have an Intel i7-1360P which contains 4 x P-Cores and 8 x E-Cores, each P-Core is Hyperthread capable (assuming you have not disabled that in the BIOS). This means in total, I have 16 Processors and if you want to exclude the VM from using all the E-Cores, we need to add the following to the VM's VMX file:
processor8.use = "FALSE"
processor9.use = "FALSE"
processor10.use = "FALSE"
processor11.use = "FALSE"
processor12.use = "FALSE"
processor13.use = "FALSE"
processor14.use = "FALSE"
processor15.use = "FALSE"
Since I have 16 processors, the counter starts at 0 and ends at 15 with the last 8 processors being the E-Cores. Depending on your total P and E-Core count (including Hyperthreading), your entries will vary.
Here is the result for running VMware Workstation with the non-admin role and only the VM running on the P-Cores:
Here is the result for running VMware Workstation with the admin role and only VM running on the P-Cores:
If you are not seeing a noticeable performance impact for running VMs on both the P and E-Cores, you can keep things simple without having to pin either the VM and/or VMware Workstation but if you want to make full use of the P-Cores for certain workloads, this would be best way to achieve this on a per-VM basis.
powercfg /powerthrottling disable /path "C:\Program Files (x86)\VMware\VMware Workstation\x64\vmware-vmx.exe"
Hi William, a bit off topic but is it possible to do something similar in ESXi 8? Or even differentiate P and E cores somehow in ESXi 8. I'm aware of the two options to 1. disable E cores or 2. add the boot command but unfortunately my mini pc does not have the option in the BIOS to disable cores so I was wondering if it was possible to identify and segregate them as assign only P cores to a VM or only E cores to a VM so they all match for that VM in case the VM itself also does not support a mix. Hope that makes sense. Thanks