microsoft / WSL

Issues found on WSL
https://docs.microsoft.com/windows/wsl
MIT License
17.33k stars 814 forks source link

[wsl2] filesystem performance is much slower than wsl1 in /mnt #4197

Open ioweb-gr opened 5 years ago

ioweb-gr commented 5 years ago

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.

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.

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: https://github.com/microsoft/WSL/issues/4197#issuecomment-604592340_

anedisi commented 4 years ago

it is really slow, not only for git but for everything that's watching files, my dev server that is watching files takes forever to restart. i'ts adding 30s plus for every restart/reload, this is kinda deal-breaker for me after investing time to try it instead linux as my dev machine where the restart almost instant.

ioweb-gr commented 4 years ago

I'm not sure whether this was worth kicking out vmware for wsl. I'm pretty sure I could map stuff through samba and have faster file access. I've been going through release notes and I do not see a single release that was focused on improving performance in /mnt.

Plus I've been using windows tools more often now to unzip, untar, commit etc etc than when WSL started

toxmc commented 4 years ago

I will be use WSL1 until WSL2 solve this problem.

nhanledev commented 4 years ago

Just try out the WSL 2 today on Build 19013.vb_release.191025-1609 and notice the performance drop on /mnt/. I have to continue to work in a VM until this is fixed, because there are no way to work with PHPStorm/WebStorm without accessing files in mounted drives.

ioweb-gr commented 4 years ago

Fyi. With every passing version it's getting worse instead of improving. I can't even run composer anymore because it times out checking out git repositories. Reverted to WSL1 today on my main instance

kliakos commented 4 years ago

Any roadmap on fixing this issue?

justeene commented 4 years ago

Folder /mnt/c is too slow. image

rudzboy commented 4 years ago

Rarely rollbacking has been so satisfiying. How is this even released...

fredgalvao commented 4 years ago

I've started noticing recently that disk activity on /mnt/d (SSD on C:, HDD on D:) is reaching 100% easily sometimes, even when there's nothing intentionally using anything on that disc or any folder/file inside it (see edit below) I couldn't trace what exactly is triggering this activity or being accessed there, but I can say that almost nothing has changed on my use pattern or on the linux image to justify this, other than constant fast-ring updates. It does feel, through my anedoctal evidence, that IO is not getting much better with time.

Let me know if there's any way I can monitor in details such a scenario involving WSL2 so that I can provide more information and maybe help identify bottlenecks.

I'm really hoping WSL2 will improve on IO the same way it has improved recently on memory usage (it's amazing now).

EDIT: I was so into the *nix mindset that I had forgotten I have access to the amazing Resource Monitor from Windows, which now shows that the thing getting constantly bombarded is pagefyle.sys, though not only by vmmem. I can say now that this issue on my case is not really immediately IO then, but overall resource consumption (that is only augmented by a suboptimal IO environment). The thing is, I have RAM available for everything to fit in there, but a lot of disk activity still routes to windows virtual memory...

ilqvya commented 4 years ago

just use docker inside linux vm ;)

Also i don'k understand, why there is no ways to get access to windows drives without network just with forwarding read&writes to nt kernel...

seems like the project is developing by early-courses students

digitalfiz commented 4 years ago

Still experiencing this in December... wsl2 is pretty much unusable if you need to work out of any thing not already in the linux file system.

ArthurJam commented 4 years ago

Just +1

cpbotha commented 4 years ago

I did some measurements using the latest slow ring WSL2 as of today and wrote them up in this blog post: https://vxlabs.com/2019/12/06/wsl2-io-measurements/

WSL 2 is currently about 5x slower than WSL 1 accessing files on NTFS.

However, WSL 2 is showing such great potential everywhere else, so I really hope that MS is able to address this issue also!

daniel-pospisil commented 4 years ago

The same here - starting a node project (using AdonisJS framework) takes about 30s on WSL2 while around 5s on WSL1. I have to go back until this is solved..

gabtzi commented 4 years ago

Is.this impossible to fix?

ctivanovich commented 4 years ago

Yeah, somehow the newest insider build got even slower.

ioweb-gr commented 4 years ago

So far I've converted all my machines to WSL1 again until this gets better. Please do let us know when there are updates regarding this so we can retest for you.

thomascooper commented 4 years ago

I just wanted to +1 this as well

arryanggaputra commented 4 years ago

+1

chx commented 4 years ago

My primary use case is running phpstorm in the Windows GUI and Linux command line tools on the same set of files. I do not look forward to switch to phpstorm on Linux as support is (obviously) lesser and one of the reasons I didn't even try native Linux on the current laptop is hotplugging GPUs all the time (TB3 eGPU) and so I really do not wish to touch X unless there's some X Server which doesn't go hardware level but then how's performance? Anyways, I hope this gets resolved. It seems we got from the frying pan into fire.

sameronline commented 4 years ago

Agreed @chx , This file access performance issues is just killer and making the wsl2 not usable, sticking to wsl1 for now

moigagoo commented 4 years ago

Please cut it with those “me too” comments. The issue is there, well-documented, acknowledged, probably being addressed. There's absolutely no need to constantly remind all 44 subscribers that there's still nothing new here.

The issue affects you, we get it. Just add a reaction to the initial comment, subscribe, and do NOT comment unless you have anything useful to add to what's already been said.

findjobs-deploy commented 4 years ago

Moigagoo: thank you for fighting for all of the subscribers that can't handle the notification spam, but other people lending their support to an issue to attempt to get a major problem fixed is not a problem for everyone. Open-source github issues users generally follow the accepted "+1/me too" pattern, but for those who are inconvenienced by the notifications, you can just instead bookmark this page and unsubscribe to the notifications. I am not looking to start an internet fight or trolling competition, but personally I appreciate the "+1"s here and on many issues I track, so I am defending those following this path. stop notifications

I am also affected by the issue referenced here and hope that this has enough traction that it is being working on actively. Look forward to testing the fix when its available.

anedisi commented 4 years ago

i kinda don't mind the notifications, and somehow was hoping for some sort of the official comment. for me i jumped back to linux and invested more time there. i just cannot work with this performance and i got tired of all the workarounds. im suprised that they would release this kind of quality even for beta.

ioweb-gr commented 4 years ago

I think that some regular status updates (if there are any) on the progress of this issue from people who are overseeing this project would probably stop people spamming

craigloewen-msft commented 4 years ago

Hi everyone, thank you for the discussion here on /mnt performance in WSL2. We realize this is a dealbreaker for many of you commenting here, and we are looking into ways to improve this, and make the file system performance faster in /mnt drives.

As of right now, if you can move your project over to the Linux file system, please consider doing so and using a WSL2 distro running Linux applications accessing files in your Linux file system for faster file performance. If your use case requires you to access Windows files, please feel free to move back to a WSL1 distro, or consider having a WSL1 distro and a WSL2 distro side by side for your different applications.

We'll be sure to post any updates on this thread as soon as they are available. Thank you for your patience!

havenchyk commented 4 years ago

@craigloewen-msft ~I'm new here, could you please clarify, what do you mean by "move your project over to the Linux file system"? Should I format a part of my disk in linux format and somehow tell wsl to use it?~ ah, now I see that the problem is in mnt, sorry

archfz commented 4 years ago

Yes, this is a dealbreaker. I was very excited to hear about WSL2 and the performance improvement just to find that it actually is much slower. My use case is using and IDE from windows on code that also want to run/test in linux.

rm-bergmann commented 4 years ago

@archfz most IDE's should be able to connect remotely to the WSL2 IP address. Have you tried that? I'm using VScode and the VScode remote plugin and it works well, and it is much faster than WSL1 on windows filesystem, especially with docker applications.

archfz commented 4 years ago

As I understand jetbrains support is not yet ready.

ScottBurfieldMills commented 4 years ago

@archfz JetBrains IDEs complain that it is a network drive and file watching may be limited/not work.

https://youtrack.jetbrains.com/issue/IDEA-197573

lucasctd commented 4 years ago

A workaround for this is to create a NFS Server on Windows 10 and mount it on WSL 2. I have some Wordpress apps running on docker and it was very slow to load anything. After I have created the NFS server on Windows 10, mounted it on (in my case) /var/nfs and started my containers from this folder, my applications got running really faster.

andrewleech commented 4 years ago

A workaround for this is to create a NFS Server on Windows 10 and mount it on WSL 2.

Hi @lucasctd, what nfs server did you use? Did you find a built in method or is it a third party application? Thanks!

lucasctd commented 4 years ago

@andrewleech I am using Allegro NFS Server. Unfortunately it's not free, im using its trial version. I will look for a free one later xD.

artit-io commented 4 years ago

Just fix the issues with WSL1, please.

I use it from the very beginning and switched from OSX to Windows because of this.

Using a VM for development is a horrible pain in many-many ways, that's why people left you for a mac in the first place including me.

Big Chinese giants started selling laptops with Linux on them and the competition is growing with a speed we have never experienced.

Only a proper Windows - Linux integration can keep up with a working Linux desktop.

This is a major threat to your business and you have no control over it apart from WSL1. In a few years, half of the world will not be able to run their software on windows if you stick with VMs.

Windows Vista was a pile of flowers and you haven't given up, you can do it with WSL1 too.

ghost commented 4 years ago

+1

hparadiz commented 4 years ago

Incredible. I'm on 19035, doing basic package installs.

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 120 installs, 0 updates, 0 removals
  - Installing google/apiclient-services (v0.65): Loading from cache

It's been sitting like that for 10 minutes running unzip under the hood. How big is that zip you ask? 7.5 Megabytes

It's a lot of small text files.

WSL was released with some serious hype. I've spent the time to get all our developers using it just so we can get some cheaper windows laptops but at this point I'm spending more time trying to support this configuration than it would cost to simply get Macbooks for everyone.

If you release WSL2 like this my recommendation will be to drop Windows entirely.

nmiodice commented 4 years ago

@hparadiz I've since downgraded from WSL2 -> WSL1 until the performance issues are resolved. The main limitation of this is that I cannot run docker naively, so I have docker desktop for windows running. WSL1 is amazingly fast for my use cases, which include heavy usage of docker, java and python.

Really looking forward to being able to migrate my workflow to WSL2, though, as I'm sure we all are.

EDIT: Or, you can of course, not work in a /mnt/ drive, which should resolve your performance issues, albeit with other downsides.

andreialecu commented 4 years ago

@hparadiz @nmiodice just move your files to ~ (under the linux partition) and it will be almost as fast as native linux.

acirulis commented 4 years ago

@andreialecu I did it - inside WSL2 linux partion everything IS fast & smooth. However - I am using Windows based PHPSTORM IDE, which cannot access those files. I can map a network drive (\wsl$\ubuntu\home...) but then it is slow again.

MordantWastrel commented 4 years ago

Is it possible to get some indication of whether we are looking at weeks or months for a resolution?

We are also in the 'Docker + WSL2' boat and can get by for a while if there's a fix on the horizon, but if not we're better served by holding off on running Docker natively as we can't move our development environments into the linux filesystem completely.

hparadiz commented 4 years ago

The other devs on my team want to use Sourcetree as a GUI for Git and since they are running it as a Windows app the code must be on a windows drive. Putting the code into the Linux partition is not a solution.

innovoix commented 4 years ago

WSL is super cool! I am so excited to try WSL2 (but I will wait for GA 😄)! The comments on filesystem performance in Linux (not /mnt) are very promising!

just move your files to ~ (under the linux partition) and it will be almost as fast as native linux.

Also this tweet: https://twitter.com/benhillis/status/1212819586539646976

2020 is going to be a huge year for Window Subsystem for Linux with the GA of #WSL2 and some incredible unannounced new features.

Can't wait to know more about the unannounced new features. Maybe Microsoft Build 2020? 🤔

I miss easier and better WSL integration from Visual Studio 2019 and Jetbrain IDEs (Rider).

I am OK with having my code in Linux if I can open projects (sln, csproj) with Visual Studio 2019 or Jetbrains Rider. Is that possible? Other comments and issues are telling me that it's not possible right now.

I would love to install nodejs and git only in Linux and use on all my projects. I have web projects that runs on classic .Net Framework and .Net core. Would be great to open them with Visual Studio 2019 but use git, webpack, npm and other nodejs tools (for front-end parts in a .Net project) with WSL and have nodejs to run "almost as fast as native linux".

kamkie commented 4 years ago

I am OK with having my code in Linux if I can open projects (sln, csproj) with Visual Studio 2019 or Jetbrains Rider. Is that possible? Other comments and issues are telling me that it's not possible right now.

you can map wsl distros as network drive in windows and then open project in ide (Intellij and other JetBrains ids from 2019.3 even can see $wsl paths without mapping as network drive) performance in ide is acceptable for my projects

bog-h commented 4 years ago

I can confirm the issue. OS Build 19041.84 WSL2 with Ubuntu-18.04 LTS Docker under the WSL2 (without Docker Desktop)

docker-compose has next services:

Pure Symfony 5 project. docker-compose up -d from /mnt/c/users/****/symfony Welcome page loading around 2.8 seconds from ~/symfony Welcome page loading around 50 ms

What I can say, I thought that local development using Windows 10 is real, but current problem with the mnt performance and issue with systemctl (docker cannot run automatically on wsl2 start), make it pointless.

With hope in the best wsl future, Bogdan.

timesnewmen commented 4 years ago

I can confirm the issue. OS Build 19041.84 WSL2 with Ubuntu-18.04 LTS Docker under the WSL2 (without Docker Desktop)

docker-compose has next services:

  • php-fpm
  • nginx
  • postgresql
  • adminer

Pure Symfony 5 project. docker-compose up -d from /mnt/c/users/****/symfony Welcome page loading around 2.8 seconds from ~/symfony Welcome page loading around 50 ms

What I can say, I thought that local development using Windows 10 is real, but current problem with the mnt performance and issue with systemctl (docker cannot run automatically on wsl2 start), make it pointless.

With hope in the best wsl future, Bogdan.

There is a project help you to enable systemd in WSL2. wsl2-hacks

itspers commented 4 years ago

A workaround for this is to create a NFS Server on Windows 10 and mount it on WSL 2. I have some Wordpress apps running on docker and it was very slow to load anything. After I have created the NFS server on Windows 10, mounted it on (in my case) /var/nfs and started my containers from this folder, my applications got running really faster.

hi @lucasctd can you please tell little more about how you did this? Like install that NFS server, configure it to export some directory and then in wsl 'sudo mount %windowsIP%:/someexport ...'? Maybe it need more advanced preconfiguration or firewall tweaks?

odinnix commented 4 years ago

@lucasctd @itspers I've setup FreeNAS on my windows box but am not able to connect to it in WSL - tried a few different IP's. Can you share your setup/progress?

bog-h commented 4 years ago

Not the perfect, but the working solution for the Intellij idea/PHPStorm/WebStorm. You need to have:

On every autosave, the file watcher will run the sync script, which is using rsync to sync the files between mnt and linux partition. The only one problem, this sync process can take around 4-7 seconds, but the project is working fast.

I can share my example with the comment on the important moments, so, you can modify it for your own purpose. HOWEVER, I hope WSL2 team will fix this problem!

start.sh #!/bin/bash

sudo service docker start

#important, copy the whole project to the linux folder, to speed up initial start of rsync

cp -a /mnt/c/Users/bogh/projects/symfony/ /var/www/symfony/ --progress --no-perms --no-owner --no-group --cvs-exclude

chmod -R 777 /var/www/symfony/var/log/

chmod -R 777 /var/www/symfony/public/

#shellcheck disable=SC2164

cd /var/www/symfony/

docker-compose up

sync.bat

#important, exclude can be different for you as the name of the folders

bash -c "rsync -rvWS /mnt/c/Users/bogh/projects/symfony/ /var/www/symfony/ --no-perms --no-owner --no-compress --exclude .idea/ --exclude .git/ --exclude .docker/ --exclude /var/cache/"

File watchers (select a folder only with the source code, to speed up the file watchers)

image

itspers commented 4 years ago

@bog-h what is benefits of such complex solution?

i now using next setup:

  1. project placed inside wsl2
  2. php run in native linux docker inside wsl (even dont use docker for windows) – speed is basically 1:1 to native linux
  3. $wsl mounted to network drive W:\
  4. PhpStrom pointed to folder in network drive – complaining about network drive, slow indexing, but after indexing works fast enough

so i basically choose slower IDE, but faster webserver execution for PHP

but since Jetbrains is not going to make normal wsl support in nearest year, and vscode will remain just fancy text editor forever, and even if WSL team will improve /mnt/c read speeds somehow – it will be anyway not so fast as native

for Microsoft problem is solved by VSCode extension, for Jetbrains problem doesnt exists – too small percent of users involved