Puget Systems print logo

https://www.pugetsystems.com

Read this article at https://www.pugetsystems.com/guides/1832
Dr Donald Kinghorn (Scientific Computing Advisor )

Does Enabling WSL2 Affect Performance of Windows 10 Applications

Written on July 17, 2020 by Dr Donald Kinghorn
Share:

Introduction

The "Windows Subsystem for Linux", WSL, is one of the most interesting projects that Microsoft has ever implemented (in my opinion). Version 2 of WSL (WSL2) is even using a Linux kernel put together by Microsoft. You could probably call this "Microsoft Linux" without too much stretch of the imagination. This kernel replaces the kernel used in the Linux distributions that are installed into WSL2.

WSL2 offers improved performance over version 1 by providing more direct access to the host hardware drivers. Network and storage system performance in particular is greatly improved. Recent "Insider Dev Channel" builds of Win10 even allows access to the Windows NVIDIA display driver for GPU computing applications for WSL2 Linux applications! The performance improvements with WSL2 are largely because this version is running as a privileged virtual machine on to of MS Hyper-V. This means that at least low level support for the Hyper-V virtualization layer needs to be enabled to use it. In particular, the Windows feature "VirtualMachinePlatform" must be enabled for WSL2.

So what? Why would enabling "VirtualMachinePlatform" for WSL2 support be a concern?

Here's why;

When you enable "VirtualMachinePlatform" you have to reboot... After the reboot your Windows system is now a privileged virtual machine, VM-0, running on top of Hyper-V. Hyper-V is a "type 1" hypervisor. That means it is running as a virtualization layer directly on the bare-metal hardware. (like VMware ESXi for example) Your "host" Windows OS is running in a special Virtual Machine on top of that. This "could" potentially have negative effects on application performance on the host.

Note: "VirtualMachinePlatform" is not "full" Hyper-V. To completely enable Hyper-V, so that you could create and manage VM's, you also need to enable the feature called, ...you guessed it, "Hyper-V".

This leads to the question...

Does enabling WSL2 have a negative impact on Windows 10 applications caused by the need to enable "VirtualMachinePlatform"?

... essentially NO, but read on to see what we actually looked at with our tests.

I have been using a WSL2 a lot when I am working on a Windows 10 system. I find it makes development work MUCH more pleasant. I connect to it from the new Windows Terminal application and from VScode using an extension specifically for that purpose. ... I like it!

I don't notice any negative effects on "native" application performance. However, I was curious to see if "not noticing any effect" would hold up to actually application benchmark testing.

My "Puget Systems Labs" colleague William George graciously agreed to run our Windows test/benchmark suite on a Windows 10 system with and without WSL2 enabled and active.

Test platform

Test Platform
CPU AMD Ryzen 9 3900X
CPU Cooler Noctua NH-U12S
Motherboard Gigabyte X570 AORUS ULTRA
RAM 4x DDR4-2933 16GB (64GB total)
Video Card NVIDIA GeForce RTX 2080 Ti 11GB
Hard Drive Samsung 960 Pro 1TB
Software Windows 10 Pro 64-bit (1909 & 2004)

Results

The following table lists "summary results" for the various benchmarks that were run. (There were 367 individual benchmark "Result Types" in the original spreadsheet!) There were 2 test runs, both without WSL2 and VirtualMachinePlatform enabled (and active). The finial performance evaluation is the percent difference of the "with" and "without" result averages.

Note: The testing runs do not "use" WSL2. It's just that WSL2 and VirtualMachinePlatform is enabled for comparison.

Benchmark Application Result Type Win10 #1 Win10 #2 Win10 w/
WSL2 #1
Win10 w/
WSL2 #2
Average Difference
WSL2 enabled
PugetBench for Photoshop 0.9 (Photoshop 21.1.3) Overall Score 995 993 999 999 +0.50%
PugetBench for Lightroom Classic 0.91 (LR Classic 9.2) Overall Score 1122 1118 1116.5 1121.5 -0.09%
PugetBench for Premiere Pro 0.9 (Premiere Pro 14.2.0) Standard Overall Score 862 874 861 859 -0.93%
PugetBench for Premiere Pro 0.9 (Premiere Pro 14.2.0) Standard Export Score 96.1 98 95 95.2 -2.03%
PugetBench for Premiere Pro 0.9 (Premiere Pro 14.2.0) Standard Live Playback Score 76.3 76.8 77.1 76.6 +0.39%
PugetBench for After Effects 0.9 (After Effects 17.1x72) Overall Score 1056 1064 985 1082 -2.53%
PugetBench for AERender 0.9 (After Effects 17.1x72) Overall Score 1024 1007 999 985 -2.34%
PugetBench for DaVinci Resolve V0.8 BETA (DR 16.0.0.60) 4K Overall Score 1118 1118 1111 1120 -0.22%
GeekBench3 GeekBench Score Overall Multi Core 55310 55377 55487 55480 +0.25%
NeatBench (Neat Image 8.5.0 - Neat Video 5.1.0) Max CPU and GPU Result 39.9 39.4 39.8 39.3 -0.25%
NeatBench (Neat Image 8.5.0 - Neat Video 5.1.0) Max Peak CPU Only Result 25.6 25.5 25.6 25.6 +0.20%
CineBench R15.038 CPU Render Multi Core 3118.4 3118.2 3122.3 3132.3 +0.29%
Cinebench R20.060 CPU Render CB Score 7058.77 7060.13 7074.5 7072.27 +0.20%
OctaneBench 4.02.1 Total score 311.9 310.6 311.2 310.2 -0.18%
OctaneBench 2019 Total Score RTX On 1020 1020.8 1016.5 1017 -0.36%
OctaneBench 2019 Total Score RTX Off 309.1 309 309.2 309.4 +0.08%
V-Ray Benchmark 1.0.8 CPU 47 47 47 47 +0.00%
V-Ray Benchmark 1.0.8 GPU 49 49 48 48 -2.06%
V-Ray Next Benchmark 4.10.06 CPU Mode All CPUs 19744 19379 19627 19553 +0.15%
Pix4D 4.5.6 Rock Model Total 264 265 265 263 -0.19%
Pix4D 4.5.6 School Map Total 736 737 732 730 -0.75%
Redshift 2.6.41 Render Time Age of Vultures Scene 489 497 489 491 -0.61%
RealityCapture 1.0.3.10403 Rock Model Total 179.5 179.7 180 181 +0.50%
RealityCapture 1.0.3.10403 School Map Total 416.7 417.4 421.7 415.9 +0.42%

Notes:

  • The results with (+) are where the test with WSL2 enabled was faster and (-) where the test was slower.
  • You can see from the testing that there was negligible impact on performance.
  • There are a few places where there was a performance drop around 2%. That could be a "real" performance drop or just normal variation. However, all of the results greater than 2% were negative.

Conclusion

Again, I'd like to thank William George for running the test suite!

The testing results should ease worries about native application performance degradation caused by enabling WSL2. Even if there is a small drop in performance for some applications it is worth the trade-off in my opinion. However, we did not do any direct gaming performance testing! It is not because we are not gamers, most of us are, including myself, we just don't do that kind of testing at Puget Systems. If any objective gaming testing conducted in a similar way to what we did in this post then put a link in the comments.

Happy computing! --dbk @dbkinghorn -- Best wishes and stay safe!


Looking for a GPU Accelerated Workstation?

Puget Systems offers a range of poweful and reliable systems that are tailor-made for your unique workflow.

Configure a System!

Labs Consultation Service

Our Labs team is available to provide in-depth hardware recommendations based on your workflow.

Find Out More!

Why Choose Puget Systems?


Built specifically for you

Rather than getting a generic workstation, our systems are designed around your unique workflow and are optimized for the work you do every day.

Fast Build Times

By keeping inventory of our most popular parts, and maintaining a short supply line to parts we need, we are able to offer an industry leading ship time of 7-10 business days on nearly all our system orders.

We're Here, Give Us a Call!

We make sure our representatives are as accessible as possible, by phone and email. At Puget Systems, you can actually talk to a real person!

Lifetime Support/Labor Warranty

Even when your parts warranty expires, we continue to answer your questions and even fix your computer with no labor costs.

Click here for even more reasons!

Puget Systems Hardware Partners

Tags: WSL, Windows 10, benchmark, Programming
AMD_user

Is it possible to test WSL 2 with Ryzen threadripper 3990x, it seems to fail to detect all the cores.

Posted on 2020-07-23 05:16:42
Donald Kinghorn

I don't have access to TR 3990x right now but I'll see if I can arrange that.
If you don't mind trying a couple of things on your system maybe we can figure out what's going on. ...

First your Windows build number (using PowerShell)
(gwmi win32_operatingsystem).buildnumber

Then check your WSL Linux installs (from PowerShell) making sure that your Linux distro installs are using version 2 of WSL
wsl -l -v

Then start up a WSL Linux shell and look at a couple of things;
Check the kernel version number
uname -r

then check the number of CPU's (this should include SMT threads unless you have that disabled in the BIOS)
nproc

Then for a more low level view do (the last chunk of this output should be describing the last core/thread and give the processor number [numbering starts at 0])
cat / proc/cpuinfo

For the system I'm on right now (latest insider dev channel build) here is what I see (an Intel 9920X)


C:\Users\don> (gwmi win32_operatingsystem).buildnumber
20175
C:\Users\don> wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
Ubuntu-20.04-dev Stopped 2
Ubuntu-20.04-docker Stopped 2
Ubuntu-20.04-jhub Stopped 2
Ubuntu-20.04 Running 2


kinghorn@[U20.04]:/mnt/c/Users/don$ uname -r
4.19.121-microsoft-standard
kinghorn@[U20.04]:/mnt/c/Users/don$ nproc
24

kinghorn@[U20.04]:/mnt/c/Users/don$ cat /proc/cpuinfo
processor : 23
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Core(TM) i9-9920X CPU @ 3.50GHz
...

Posted on 2020-07-23 17:15:00
AMD_user

It is WSL2 running Ubuntu: 20.04. Windows build is 10.0.19041.329 and SMT is enabled. When I used the command "lscpu on ubuntu I get the following:

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 48 bits physical, 48 bits virtual
CPU(s): 64
On-line CPU(s) list: 0-63
Thread(s) per core: 2
Core(s) per socket: 32
Socket(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 49
Model name: AMD Ryzen Threadripper 3990X 64-Core Processor

I asked under the WSL Gihub page and it was confirmed today that it is a bug affecting the TR 3990x and dual CPUs:
https://github.com/microsof...

Not sure if you will be interested in looking into it, but this is one limiting factor of WSL2 for now.

Posted on 2020-07-24 00:12:53
Donald Kinghorn

Thank you for posting that GitHub issue link!

That is a very interesting thread ... one comment that caught my attention is
"Not sure if it is relevant but I am experiencing the same issue in hyper-V too." WSL2 is on top of Hyper-V so this is probably where core problem is. I was surprised to see the comments about only seeing 1 CPU socket on dual Xeon systems too.

This looks like it may be config bug (or oversight) by the WSL team. It could be a kernel issue too.

I'm on a recent WSL2 kernel ( I'm on an Insider Win10 and updated kernel so that I could try the GPU support in WSL2)
kinghorn@[U20.04]:/mnt/c/Users/don$ uname -r
4.19.121-microsoft-standard

MS has a kernel update guide ... not sure if you want to try this or just wait out an overall update fix. (the current update might not fix the issue )
https://docs.microsoft.com/...

Also,
Updates to WSL2 (and it's kernel) should come with the normal Windows updates. But you have to have
"Receive updates for other Microsoft products when updating Windows" set to ON in the "advanced setting" for Update to get them.

Posted on 2020-07-24 17:03:34
AMD_user

Since I am using Windows for other applications too, I would rather wait for a "stable" version. And Yes, It seems to be an issue rising from hyper-V and it is affecting WSL2.

Interestingly, Since I couldn't use Linux to run my MPI simulations, I tried to use MS MPI and run it but it also had the same issue!! I got concerned so I used Matlab and Julia (which both have their implementation for parallelization) and they ran fine. Not sure if they are linked issues or it just so happened that there are two separate bugs in Windows behaving the same way.

Posted on 2020-07-24 21:16:44
Donald Kinghorn

Yes there is something to be said for "stable" ... I just took a look at this post on AnandTech https://www.anandtech.com/s... I think his analysis of what is going is probably right, but there have been updates to everything since that was written in February (2020) Win 10 release 2004 may address some of the problems but obviously not all of them. I'm still curious to try check this out myself but I don't know if I can get hands on to a 3990x system any time soon.

You could try disabling SMT threads in the BIOS as a possible workaround. For jobs that are not bottle-necked by memory pipeline staging it shouldn't slow things down (may even speed things up) ... wishing you the best --Don

Posted on 2020-07-27 14:39:16