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.
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.
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.