If you want to use more than 64 cores in WSL2 (e.g. if you have AMD Threadripper 7980x), you can follow the steps:
-
Generate project
mkdir build cd build cmake ..
-
Open
build/Project.sln
and generate a x64 release build. -
Launch task manager, kill
wslservice.exe
process. -
Copy the generated
build/Release/computecore.dll
toC:\Program Files\WSL\
. -
Launch any WSL2 distribution, type
nproc
orlscpu
, you should see all cores.
Now you can see all cpus in WSL2, but actually, you might still can't use all of them. For example, if you run:
make -j`nproc`
from task manager, you might still see only 50% cpus are working. That because the default hyperV scheduler is Root
,
all tasks are still not scheduled cross all cpu groups. You can run the following command from powershell console to
check your current hyperV scheduler:
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1
If it outputs Hypervisor scheduler type is 0x4
, it means you are using Root scheduler. You need run the following
command to change the scheduler type to Core
:
bcdedit /set hypervisorschedulertype Core
Restart machine to take the settings effect. Note, if you enable bitlocker, you might need input the bitlocker key after restarting. So please save your bitlocker key before restarting.
Now, you can use full cores really!