M365Con 2027 – bezpłatna konferencja online · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Wydajność systemu plików WSL: dlaczego dostęp między systemami operacyjnymi spowalnia Twój kod

By ·

Dowiedz się, dlaczego dostęp do plików między systemami operacyjnymi spowalnia WSL. Poznaj najlepsze praktyki dotyczące natywnego magazynu Linux i przyspieszania przepływów pracy deweloperskiej.

Automatically translated with AI from the original post. Read the English original

Cover: Windows Subsystem for Linux (WSL) - Simply Explained

Dowiedz się, dlaczego mieszanie systemów plików Windows i Linux w podsystemie Windows dla Linux (WSL) tworzy poważne wąskie gardła wydajnościowe. Poznaj kluczowe zasady przechowywania katalogów projektów po właściwej stronie granicy systemu operacyjnego, aby znacząco przyspieszyć zadania kompilacji wymagające intensywnej pracy dysku, instalację pakietów i operacje git.

Najważniejsze wnioski

Zrozumienie podziału systemów plików Windows i Linux

Jednym z najczęstszych błędów, na jakie napotykają deweloperzy przy przejściu na podsystem Windows dla Linux, jest niewłaściwe umiejscowienie plików. Windows i Linux zarządzają swoją pamięcią masową w zupełnie innych paradygmatach architektonicznych. Gdy uruchamiasz WSL 2, korzystasz z prawdziwego jądra Linux działającego w lekkiej maszynie wirtualnej. Oznacza to, że dystrybucja Linux posiada własny, odizolowany, natywny system plików Linux, działający zgodnie ze standardami POSIX.

Z kolei standardowe środowisko Windows opiera się na systemie NTFS i wykorzystuje litery dysków, takie jak dysk C:. Aby przełamać tę barierę, WSL automatycznie montuje dyski Windows w środowisku Linux w katalogu /mnt/ – na przykład dysk C jest widoczny jako /mnt/c. Choć pozwala to odczytywać i zapisywać każdy plik na komputerze hosta z poziomu terminala Linux, wiąże się to z ukrytym, bardzo kosztownym obciążeniem wydajnościowym, znanym jako ścieżka translacji na granicy systemów.

Dlaczego dostęp do plików między systemami się ślimaczy

Za każdym razem, gdy narzędzie Linux odczytuje lub zapisuje plik znajdujący się po stronie Windows, żądanie musi przejść przez granicę między lekką maszyną wirtualną a systemem hosta Windows. Dla pojedynczego pliku tekstowego lub małego skryptu narzut translacji jest niezauważalny. Nowoczesne przepływy pracy deweloperskiej rzadko jednak obejmują tylko jeden plik.

Rozważ, co się dzieje, gdy uruchamiasz polecenie takie jak npm install lub git clone w katalogu projektu znajdującym się w /mnt/c/my-project. Operacje te generują tysiące drobnych żądań utworzenia i modyfikacji plików w szybkim tempie. Każdy z tych małych plików ponosi koszt przekroczenia granicy. Łącznie efekt jest taki, że operacje, które powinny trwać sekundy, mogą ciągnąć się minutami, co prowadzi wielu deweloperów do błędnego przekonania, że sam WSL jest z natury wolny, podczas gdy winowajcą jest po prostu zła lokalizacja katalogów.

Różnice w wielkości liter i konflikty uprawnień

Wydajność to nie jedyna ofiara przekraczania granicy systemów operacyjnych. Zasady działania systemu plików również kolidują ze sobą w sposób, który psuje aplikacje. Natywny główny katalog systemu plików Linux jest ściśle rozróżniający wielkość liter. Dwa pliki o nazwach Script.js i script.js są traktowane jako zupełnie odrębne obiekty. System plików Windows NTFS domyślnie nie rozróżnia wielkości liter.

Ponadto narzędzia wiersza poleceń Linuksa w dużym stopniu polegają na flagach własności i uprawnień zarządzanych przez narzędzia takie jak chmod i chown. Systemy plików Windows nie odwzorowują tych uprawnień natywnie w sposób, jakiego oczekują narzędzia Linuksa. Gdy uruchamiasz kod na granicy systemów, dowiązania symboliczne mogą nie zostać poprawnie rozwiązane, a skrypty budowania mogą zgłaszać niejasne błędy, ponieważ nie mogą zastosować uprawnień plików wymaganych przez środowisko uruchomieniowe.

Najlepsze praktyki szybkich przepływów pracy w WSL

Aby uniknąć tych pułapek wydajnościowych i zachować płynne środowisko programistyczne, warto przestrzegać dwóch podstawowych zasad. Po pierwsze, zawsze przechowuj projekty Linuksa w natywnym systemie plików Linux (w katalogu domowym, na przykład ~/projects/), a projekty oparte wyłącznie na Windows trzymaj po stronie Windows.

Po drugie, wykorzystaj nowoczesne narzędzia, aby połączyć interfejs użytkownika bez poświęcania szybkości wykonywania. Nie musisz rezygnować ulubionych edytorów z Windows. Dzięki rozszerzeniu Remote - WSL dla Visual Studio Code możesz otworzyć projekt przechowywany w całości w natywnym systemie plików Linux, korzystając jednocześnie z responsywnego, znanego interfejsu graficznego Windows. Edytor działa w Windows, ale wykonywanie kodu, testowanie i zarządzanie pakietami odbywają się z maksymalną szybkością w środowisku Linux.

Podsumowanie i kolejne kroki

Opanowanie granic systemów plików to najważniejszy krok w przekształcaniu WSL z frustrującego eksperymentu w codzienne narzędzie pracy. Dbając o to, by narzędzia i pliki znajdowały się po właściwej stronie podziału systemu operacyjnego, eliminujesz opóźnienia i unikasz niejasnych błędów uprawnień.

Szerszy obraz tego, jak ta funkcja integruje się z nowoczesnymi przepływami pracy programistycznej i chmurowymi, znajdziesz w pełnym odcinku podcastu M365 FM. Posłuchaj całej rozmowy, aby poznać skróty instalacji, porównania wersji i sposób, w jaki WSL łączy lokalne maszyny z infrastrukturą chmury Azure!

Często zadawane pytania

Gdzie powinienem przechowywać pliki projektów podczas korzystania z WSL?

Pliki projektów powinny znajdować się w natywnym systemie plików Linux (na przykład w katalogu domowym, np. ~/my-project), a nie na zamontowanych dyskach Windows (takich jak /mnt/c/), aby zapewnić maksymalną szybkość odczytu i zapisu.

Dlaczego polecenie npm install jest wolne na dysku Windows w WSL?

Menedżery pakietów, takie jak npm czy pip, podczas instalacji tworzą tysiące drobnych plików. Gdy są zapisywane przez granicę systemów operacyjnych na dysku Windows NTFS, każdy pojedynczy plik wiąże się z narzutem translacji, co powoduje znaczne wąskie gardła wydajności.

Czy mogę używać Visual Studio Code do edycji plików przechowywanych w systemie plików Linux?

Tak. Po zainstalowaniu rozszerzenia Remote - WSL dla Visual Studio Code możesz natywnie otwierać, edytować i debugować pliki znajdujące się w dystrybucji Linux WSL, korzystając ze standardowego interfejsu edytora Windows.

Jaka jest różnica w sposobie, w jaki Windows i Linux obsługują nazwy plików?

Systemy plików Linux są ściśle rozróżniające wielkość liter (traktują File.txt i file.txt jako różne pliki), natomiast Windows NTFS domyślnie nie rozróżnia wielkości liter. Uruchamianie narzędzi Linuksa w katalogach hostowanych w Windows często powoduje błędy kompilacji z powodu tych różnic w działaniu.

Visual Studio Code

Related articles

RSS