Jedną z najciekawszych zapowiedzi tegorocznej odsłony konferencji Microsoft Build były duże zmiany Windows Subsystem for Linux. Świat obiegły informacje, że oto w Windowsie pojawi się „pełne jądro Linuksa”, a Microsoft zaczął zachwalać dwucyfrowe wzrosty wydajności w stosunku do pierwszej odsłony WSL-a. Teraz przyszedł czas na weryfikację tych obietnic.
Gwoli przypomnienia – Microsoft podczas Builda zapowiedział gruntowne architektoniczne zmiany w linuksowym subsystemie. Tłumaczącą wywołania systemowe (izolowane procesy Pico z linuksowymi binarkami są przetwarzane przez LxCore/LXSS na wywołania API Windowsa) warstwę zastąpiono… no właśnie. Microsoft długo ociągał się z przyznaniem, że Windows Subsystem for Linux 2 to tak naprawdę maszyna wirtualna.
Zobacz też: Windows Subsystem for Linux 2 – jądro Linux tego lata trafi do Windowsa
Już wtedy zwracaliśmy uwagę, że trudno, aby maszyna wirtualna, choćby najlepiej zoptymalizowana, była szybsza (szczególnie w kwestii czasu uruchamiania) niż wykorzystywany wcześniej subsystem. Mimo to Microsoft zarzekał się, że podczas testu polegającego na rozpakowaniu archiwum tarball WSL 2 poradził sobie aż 200-krotnie szybciej niż poprzednik. W obsłudze poleceń git
, npm
czy cmake
odnotowano natomiast nawet 5-krotne przyśpieszenie.
![wsl2-test-2 wsl2-test-2](/img/static/blog/zrzut_ekranu_z_2019-06-15_12-38-05.png.webp)
Kolejną przewagą WSL-a 2 nad poprzednikiem miała być także pełna kompatybilność wywołań systemowych. W rezultacie programiści i administratorzy będą mogli korzystać z wielu nowych narzędzi, na czele z Dockerem czy FUSE. Microsoft obiecywał także wyeliminowanie wszystkich wąskich gardeł, które dławiły wydajność pierwszej odsłony Windows Subsystem for Linux. Uwagę w zwracało jednak, że korporacja zdecydowała się na utrzymywanie w Windowsie obu odsłon WSL-a jednocześnie – „dwójka” zatem musiała mieć te czy inne braki.
Zobacz też: Wiadomo więcej o WSL 2. Zmiany w architekturze rozczarowują
Dziś mamy już okazję, przekonać się, ile w zapowiedziach Microsoftu było prawdy. Windows Subsystem for Linux 2 pojawił się w kompilacjach testowych dystrybuowanych w ramach programu Windows Insider. Co więcej, wydajność nowego „subsystemu” zdążył już wstępnie przetestować nieoceniony Michael Larabel, znany szerzej jako Phoronix.
![wsl2-test wsl2-test](/img/static/blog/zrzut_ekranu_z_2019-06-15_12-36-48.png.webp)
Nie chcemy być tymi, którzy mówią „a nie mówiłem”, ale… potwierdziły się nasze obawy co do spadków wydajności. Maszyna wirtualna jest zwyczajnie wolniejsza niż pierwsza odsłona WSL-a wykorzystująca warstwę tłumaczącą wywołania systemowe. Druga odsłona „subsystemu” poległa w benchmarkach Chaos Group, Blendera czy PyBench. WSL 2 wypadł także kiepsko w benchmarkach Golang. Sam Larabel rezultaty przeprowadzonych testów wydajności podsumowuje następująco:
Z początku byliśmy podekscytowani perspektywą WSL2, gdy usłyszeliśmy, że rozwiąże problemy wąskiego gardła na I/O, które były plagą WSL2. Niestety, po testach nie jesteśmy już tak entuzjastyczni. Przynajmniej na razie WSL 2 jest znacznie mniej wydajny przy faktyczny obłożeniu CPU w porównaniu WSL 1. Przynajmniej wydajność I/O jest nieco lepsza. Mamy nadzieję, że Microsoft będzie kontynuował pracę nad poprawą wydajności WSl2
Microsoftowi trzeba oddać, że faktycznie rozprawił się z wąskimi gardłami interfejsu I/O, co widoczne jest po wynikach obsługi poleceń Gita. Zbliżył się on do natywnej wydajności Ubuntu instalowanego „na metalu”. Z całościowymi wynikami testów wydajności Windows Subsystem for Linux 2 zapoznać można się na blogu Michael Larabela.