How To Keep Processes Off E-Cores
A common challenge with heterogeneous CPUs like Intel 12th+ generation is the occasional undesirable scheduling of threads onto the efficient (E) cores, hampering their performance. This issue arises because most applications haven’t been, and may never be, adapted to provide hints to the scheduler regarding their thread load types, leaving Windows to make educated guesses. Fortunately, there are several approaches to discourage or completely prevent this behavior. In this guide, we will explore a few of these methods.
Efficiency Mode OFF Rule
The recommended way to prevent a process from having its threads scheduled to E-cores is to create an Efficiency Mode OFF rule with Process Lasso. This can be done by right-clicking the process and selecting ‘Efficiency Mode / Always / OFF’.
This will work even if you do not see the process listed as in Efficiency Mode, because its individual threads can be in Efficiency Mode even if the process as a whole isn’t. An Efficiency Mode OFF rule continuously keeps all of a process’s threads from being automatically relegated to the E-cores.
Although this method will keep most processes off the E-cores, it won’t absolutely forbid a determined application from using the E-cores.
CPU Affinity Rule
If you want to ensure that a process doesn’t use the E-cores, you can create a CPU affinity rule with Process Lasso. This will restrict the process to the P-cores. You can do this by right-clicking the process and selecting ‘CPU Affinity / Always / Select’, then unchecking the E-cores in the dialog, as demarcated by the ‘E’ character.
In some cases, where a determined process changes its own CPU affinity, you may also need to check menu item ‘Options / Forced Mode (continuously reapply settings)’.
CPU Sets are also a viable alternative.
Heterogenous Thread Scheduling Policy
Another method to discourage automatic scheduling to E-cores is to use ParkControl to tweak the Heterogenous Thread Scheduling Policy for Short and Long Running threads, respectively. This is a power plan attribute that controls the scheduler’s treatment of short and long running threads. You can set it to ‘Prefer Performant’ or ‘Performant’ to discourage scheduling threads to E-cores. This method will not prevent processes from choosing to schedule threads to E-cores.