New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[wsl2] filesystem performance is much slower than wsl1 in /mnt #4197
Comments
Can you post the results when doing the same test on a file on This is straight I/O on a single file where I would expect to see more or less the same perf between WSL1 and WSL2. My expectation was that WSL2 perf is better than WSL1 only when doing "namespace" operations (i.e. working on lots of small files, listing them, stat'ing them, etc.) As for the results on /mnt/e they are not very surprising, since I/O has to go through both the Linux and Windows file system stack in likely a new and unoptimized piece of code. |
|
I see, I'm assuming you're still refering to / and not /mnt folders about namespace operations. WSL 2root@LUCIANO-PC:/home/# dd if=/dev/zero of= 20000+0 records in WSL1root@LUCIANO-PC:/home/# dd if=/dev/zero of=~/testfile bs=1M count=10000 I'm thinking this has to do something with OS Caching because in task manager even though I can see the file being written, the disk usage write speed is unchanged while in wsl1 I can see it constantly at around 350mb/sec . As another interesting fact, the vmmem usage while writing the file is increasing rapidly. By the 3rd copy action all my RAM is used up (32GB). |
|
I'm also experiencing this after an upgrade to WSL2, only slow performance under /mnt, not /, slower than WSL1. I can post numbers as well if necessary. This is on |
|
I'm experiencing the same issue, |
|
When I run a |
|
Do we know what's at the root of this, and whether there are any other workarounds than downgrading? |
|
@definelicht - Yep we're working on improving the performance. In the meaning working out of your root file system (the ext4 volume) will have MUCH better performance. |
|
Indeed after the last update I can already see much better performance on WSL2. root@LUCIANO-PC:~# dd if=/dev/zero of=/mnt/e/testfile bs=1M count=10000 That's on an SSD and it's like 6 times faster than before. Still slower then WSL1 but it's definitely improved. --correction--- |
I got but |
|
I think this is a latency rather than a bandwidth issue, surfacing when a large number of files are accessed (e.g., when running |
can you share the cause of it? I'm curious |
|
can confirm a very bad performance on /mnt ( |
|
After switch configuration from WSL to WSL 2 (Build 18975), without any change on my distro, the server respond time incresed. Configuration : Debian buster Apache2.X / PHP-FPM 7.3 / MySQL WSL 1 : 0.5 sec With Docker (Ubuntu 18.04) WSL Tech preview i could not test on WSL 1, but WSL 2 takes over 30 sec... I suppose the issue is the same. |
|
This is my performance in a medium project: GIT_TRACE_PERFORMANCE=1 git status -sb -uno 13:20:04.630972 read-cache.c:2267 performance: 0.017249300 s: read cache .git/index File System exFat, the result is the same is other file system... |
|
I'm currently using the normal Docker Desktop with linux containers to run a PHP projekt during local development. The repo is in a normal Windows directory and gets mounted via volume bind in the docker container, so that I can easily manipulate the files through an IDE. The same setup on a native linux machine has always been multiple times faster and the "problem" (from what I've read) has always been attributed to the Linux VM that is used on Docker Desktop. Then WSL 2 was announced and I finally came around to set everything up. But when I ran our teststuite for the first time, I was pretty disappointed that the performance was actually much worse than before (40s on the Docker Deskop Linux VM setup vs 100s on the WSL2 setup). Subsequent investigation brought me to this thread. From what I've read here so far: Does it even make sense to switch to WSL 2 for local development yet if "bad performance" is your primary reason to do so? A "no" would be a totally acceptable answer - I just don't want to waste any more time on this if it's simply not ready yet. |
|
I know that wsl2 is a preview, but is there any hope that accessing \wsl$ from windows or /mnt from wsl will reach acceptable speeds? |
|
I'd also like to ask about this, doing a |
|
same with 1903 (18990.1) absolutely useless... |
|
I am also seeing this, accessing Windows files from the Linux environment is several orders of magnitude slower in WSL2 than in WSL1. |
|
I can get another M.2 just for WSL. But I need to edit files and manage repositories via windows. So need access to the files. I use VS Code but not sure what that extension does. |
|
@danrossi Is using WSL1 an option? If you need to work with files from Windows but need to use WSL to do it, the easiest way it seems is to use WSL1 for now. I pretty much keep both WSL1 and WSL2 versions installed for the primary WSL distro that I'm using because of this. |
Exactly, I'm cloning now my git projects directly inside WSL instead of another location that needs to go through /mnt. |
If you are moving your WSL2 to another drive, I suggest you to do an export of your actual WSL image. It takes seconds to minutes to export and import . You can still edit files and manage repositories via windows even if they are stored inside WSL with explorer manager and sublime text or any tool you want |
|
I don't understand how to mount the files in VS Code but going to make a clean install move files over and give it a try not a problem. I've backed up my old instance. |
Using the official WSL support in vscode is the best way to manage this, especially if you're already using vscode. There's heaps of guides online, try this official one https://code.visualstudio.com/docs/remote/wsl-tutorial |
|
Hello guys, so 5 years passed, the best way still get a new SSD and put everything in it? and this problem could be solved in future one day? |
I find that the filesystem performance has not improved, and it is the same as it was 5 years ago. Last week, I used WSL2 to transfer 500GB of files, but the speed was only 300MB/s. |
same.... and I decide to get a new SSD only for my wsl, wish it can solve all the problem |
|
The problem is not, and has never been a HDD performance issue - it's how they changed how filesystems are accessed. |
|
I saw a couple of comments suggesting WSL2 is using 9P still. https://virtio-fs.gitlab.io/ PS: my main use case for wsl is things like |
From a quick search I can only see reference to virtiofsd supporting windows as guests on linux hosts? edit: This probably should already be possible to use to get access to linux files from windows (eg. mount wsl home folder as a windows drive) though not the other way around (accessing windows drive files from within linux) |
As I understand it, virtiofsd is a rust userspace program that does ordinary file access (open/read/write/close &c), and talks to the guest via an AF_UNIX socket. If Windows can compile that and run it, I think it would work for /mnt/C. wsl.exe would need a small amount of plumbing to auto-start and auto-stop virtiofsd with the container, and to glue together the sockets/file-descriptors. For linux-on-linux, that is done by libvirtd (or just by hand). For actually booting the guest off it (i.e. This is speculation on my part - I have only ever used virtiosfd for linux-on-linux; I didn't even compile it myself, I just used what Debian shipped (which might even be the original pre-rust C version). So I guess the immediate step would be to try to compile and run virtiofsd on Windows as a regular (unprivileged) user -- that is definitely outside my personal skillset :-) |
|
Hi, I'm also experiencing dramatic slowdowns when files are stored outside the Linux filesystem. Could anyone confirm that WSL 2.0.0 that has just been released solves this issue or is this unrelated? https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/ |
|
Microsoft Windows [Version 10.0.22621.2283] : wsl 2. I still experience same issue. |
It's still very slow on WSL2 - 2.0.4 |
|
I continue to observe. On new WSL2 build nothing change :( Windows 11 23H2 |
|
Is this issue still planned to be fixed? |
I don't know about virtiofsd but doing a simple network share mount (CIFS/SMB3) may be an option with reasonable performance and fewer hard technical problems to resolve. |
|
WSL 2, version 2.0.9.0 |
|
I want to use WSL 2 for its USB features such that I can flash embedded devices but this slow git performance is completely and entirely holding me back from moving up to WSL 2. Has anyone come up with viable workarounds? Is USB possible in WSL 1? Sheesh... |
Due to microsoft/WSL#4197, git status is slow on WSL2 with repos in Windows filesystem. This patch fixes it by invoking git.exe instead of git in such cases. One may instead globally alias git with git.exe via .bashrc, but we would like to use linux's git in every occasions except for displaying powerline status.
|
Doesn't Microsoft understand that modern software development is heavily based on the ability to build/run containerised applications? They will loose the last couple windows devs with this shit show... |
|
Would alternatively be useful to have a way to create a Linux volume that lives outside of a single WSL2 instance. That way we could mount the volume to /home and it would be fast and external. |

I decided to open this as a separate issue because although it's related to the generic issue of filesystem performance it's directly related to WSL 2 while the other issues are for WSL 1 and it's showing very conflicting results.
Your Windows build number: (Type
verat a Windows Command Prompt)Version 10.0.18917 Build 18917
What you're doing and what's happening:
I'm testing filesystem write speed in /mnt using dd command. Performing the following tests
WSL2
root@LUCIANO-PC:/home/# dd if=/dev/zero of=/mnt/e/testfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 25.939 s, 40.4 MB/s
WSL1
root@LUCIANO-PC:/home/# dd if=/dev/zero of=/mnt/e/testfile bs=1M count=20000
20000+0 records in
20000+0 records out
20971520000 bytes (21 GB, 20 GiB) copied, 47.4897 s, 442 MB/s
On / it's actually the reverse. WSL2 is more than 2 times faster than WSL1.
I would expect the filesystem performance in /mnt to at least be on the same level but it's over 10 times slower.
Another interesting fact is that if I mount the same drive as a cifs share I get 3x performance
WSL 2 (cifs share)
root@LUCIANO-PC:/mnt/sambae# dd if=/dev/zero of=/mnt/sambae/testfile bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 84.001 s, 125 MB/s
An update of the current status because it's way too hidden in this thread.
Latest status report: #4197 (comment)_
The text was updated successfully, but these errors were encountered: