Почему WSL 2 в 13 раз быстрее, чем WSL: впечатления от Insider Preview

Автор оригинала: Dave Rupert
  • Перевод
Microsoft готовит релиз Windows May 2020 Update (20H1). Это обновление будет содержать несколько приятных улучшений пользовательского интерфейса, но для разработчиков и других посвященных важнее то, что в новой версии Windows появится WSL 2 (Windows Subsystem for Linux). Это актуальная информация для тех, кто хотел перейти на ОС Windows, но никак не решался.

Dave Rupert установил WSL 2 на свой 13-дюймовый ноутбук Surface и первые результаты
приятно удивили:




Вторая версия WSL в 13 раз быстрее первой! Не каждый день вы бесплатно получаете 13-кратное повышение производительности. Я почувствовал озноб и проронил скупую мужскую слезу, когда впервые увидел эти результаты. Почему? Ну, в основном я оплакивал то потерянное время, которое накопилось за 5 лет работы с первой версией WSL.

И это не просто цифры. В WSL 2 установка npm, сборка, упаковка, просмотр файлов, перезагрузка горячих модулей, запуск серверов — почти всё, что я ежедневно использую как веб-разработчик, стало работать значительно быстрее. По ощущениям это похоже на то, как если бы я снова сел за Mac (или, возможно, лучше, так как Apple в последние несколько лет радикально ограничивает свои процессоры в пользу увеличения времени автономной работы).

Откуда такая прыть?


Как они добились 13-кратного роста производительности? Раньше, когда я задумался о переходе на Mac, я тоже накидывал какие-то варианты, правда, сугубо на уровне допущений. Дело в том, что запись на диск и системные вызовы Linux обходились достаточно дорого (с точки зрения временных затрат) из-за архитектуры первой версии WSL. И теперь угадайте, на что в значительной степени опирается современная веб-разработка? Да. Когда вы собираете воедино кучу зависимостей и фрагментов кода при каждом сохранении файла, вы на самом деле выполняете много операций записи на диск и системных вызовов для десятков тысяч файлов.

Как только вы узнаёте об этом на своём горьком опыте, после этого трудно всё забыть. Вы начинаете постепенно впадать в депрессию, когда представляете, насколько медленно и печально всё это работает. И вы понимаете, что ваш мир больше не будет прежним и инструмент, который вам нравился, больше не кажется полезным и эффективным.

К счастью, команда WSL пошла на риск и полностью переписала подсистему. В WSL 2 эти проблемы были решены: разработчики встроили в Windows собственную виртуальную машину Linux и поручили файловые операции сетевому диску VHD (Virtual Hardware Disk). Компромисс заключается в том, что при первом запуске вы должны потратить время, чтобы раскрутить виртуальную машину. Это время исчисляется миллисекундами и лично для меня едва заметно. Я, например, жду с удовольствием, так как знаю, ради чего всё это.

Где теперь будут жить файлы?


Чтобы в полной мере воспользоваться преимуществами WSL 2, вы захотите переместить файлы проекта из /mnt/c/Users/<имя пользователя>/ в новый домашний каталог ~/Linux на новом VHD. Вы можете увидеть содержимое этого диска в сети, перейдя в \\\\ wsl $ \\ <имя дистрибутива> \\ <имя пользователя> \\ home или введя команду explorer.exe из вашей оболочки Bash.

Это настоящая файловая система Linux, и она действует и ведёт себя так, как вы ожидаете. Я создал папку ~/projects, в которой живут все мои репозитории проектов и затем я открываю проекты в Visual Studio Code, используя команду code.

А что с VS Code?


Установка WSL-расширения для удаленной разработки на VS Code (VS Code Remote — WSL) является последним этапом, обеспечивающим комфортную работу разработчика. Расширение позволяет VS Code выполнять все свои операции (команды git, консоли, установку расширений и так далее), взаимодействуя с виртуальной машиной Linux напрямую. Это делает весь процесс очень автономным.

Сначала я был немного расстроен из-за необходимости установки этого расширения, потому что мне нужно было переустановить то, что я установил и настроил до этого. Но теперь я оценил это по достоинству, потому что появился специальный слой визуализации который показывает, в какой среде я работаю и где живут мои файлы. Это сделало процесс веб-разработки на Windows более прозрачным и намного упростило использование пользовательского интерфейса для управления версиями в VS Code.

Слёзы счастья и надежда на светлое будущее


Меня не покидает ощущение радости при мысли о следующем релизе Windows May 2020 Update и оптимизированной подсистемы Linux, которая просто летает на моём мощном игровом компьютере. Возможно, есть ещё некоторые проблемы, о которых я пока не знаю, но после Insider Preview я сделал вывод, что команда WSL решила большинство проблем.

Кроме того, не стоит забывать, что Windows Terminal тоже хорош! Они как будто бы услышали мои жалобы на отсутствие вкладок, JSON Settings и потребность «чувствовать себя крутым» в Windows. Это по-прежнему странно звучит, но Windows Terminal — пожалуй, лучший терминал для Windows.

Проработав в Windows 5 лет, я многое пережил: неспособность установить Rails, борьбу с искусственными оболочками Cygwin. Я сидел в первом ряду на той самой конференции Build 2016, когда компания Microsoft анонсировала первую версию WSL. И тогда у меня появилась надежда, что веб-разработка на Windows наконец выйдет на новый уровень. Без сомнения, WSL 2 — самое большое улучшение, которое я видел с тех пор, и, похоже, мы на пороге новой эры.



На правах рекламы


Если для работы необходимы Windows-серверы, то вам однозначно к нам — автоматическая установка Windows Server 2012, 2016 или 2019 на тарифах с 2 ГБ RAM или выше, лицензия уже входит в стоимость. Всего от 21 руб в сутки! А еще у нас есть вечные серверы ;)

VDSina.ru — хостинг серверов
Серверы в Москве и Амстердаме

Комментарии 80

    0
    Если WSL2 работает как VM, скорее всего на Hyper-V, то, как понимаю, внутри вирутальной машины с Windows 10 ее не запустить?
      +1
      Ну под Hyper-V можно запускать вложенные VM. Так что в теории работать будет.
        +1
        Сейчас вложенная виртуализация работает только с Intel. АМД в планах
          0
          У меня Ryzen и тоже наткнулся на данную проблему
        +1
        почему нет, вполне можно запустить.
        0
        DNS перестал отваливаться в WSL?
          0

          нет, надо перезапускать hyperv адаптер (например после выхода компьютера из сна)

          –15
          Как же мало надо для счастья…
          Написать не «WSL1 в 13 раз тормознее WSL2», а несколько иначе. На тех же фактах.
            +6
            Эм. Это Вы как раз пытаетесь менять формулировки как Вам удобнее. WSL2 это развитие WSL1, и потому как раз всё логично, что говорится о том, что стало быстрее чем было.
              –3
              Еще логичнее сравнить linapp@Linux > ...@WSL2 > ...@WSL1 на одной и той же машине.
              Как принято сравнивать winapp@wine@Linux > winapp@Windows на одной и той же машине.
              Вот так было бы честнее.

              А пока это «быстрее в 13 раз» — акробатика с фактами.
                +1
                А это коим боком? Статья то вообще не про это. О производительности виртуалок под гипервизором и так вполне все известно.
                  –4
                  А виртуалки и гипервизоры тут каким боком?
                  Статья вообще не о них.
                +1
                Но ведь WSL2 это не развитие WSL1, а решение той же задачи кардинально другим методом.
                Практически всю работу по поддержке ELF и транслированию вызовов и просто выбросили и воткнули немного допиленное ядро линукса в виртуалку в HyperV, сделав интерфейсы уже к ней.
              +5

              В посте отсутствует ответ на вопрос из заголовка.


              Дело в том, что запись на диск и системные вызовы Linux обходились достаточно дорого (с точки зрения временных затрат) из-за архитектуры первой версии WSL.

              Ну и почему они обходились достаточно дорого? Что конкретно не так с архитектурой WSL1? Что делает трансляцию системных вызовов дорогой? Лично для меня совершенно контринтуитивно, что виртуальная машина должна по какой-то причине работать быстрее чем вайн наоборот. У меня такое чувство, будто в WSL1 просто наговнокодили.

                +4

                А что, вайн работает со скоростью натуральной винды?

                  +2

                  Субъективно, всяко быстрее винды в виртуалке (впрочем, сравнение не совсем честное)

                    –1

                    А при чём тут виртуалка?

                      +2

                      Вы пост-то читали? WSL2 это виртуалка, вот при чём.

                        –5
                        WSL2 — это не виртуалка.
                        Это слой совместимости.
                        Но «поручили файловые операции сетевому диску VHD» (со слов автора).
                        И нет — виртуальный сетевой диск != виртуальная машина.
                          +2

                          WSL2 — это именно виртуалка с линуксом:


                          WSL 2 использует последнюю и самую новую технологию виртуализации для запуска ядра Linux внутри упрощенной служебной виртуальной машины.

                          Основное отличие лишь в том, что эта виртуалка хорошо интегрирована с виндой.

                            –1
                            … и не очень хорошо с собственно Linux'ом.
                            Ключевое — «упрощенной» и «Ядро Linux в WSL 2 создано собственными силами на основе».
                            То есть уже не Linux, но еще не Windows. Или наоборот.
                            И если потери производительности Windows-приложений в Linux (в виртуальной Windows или под Wine) довольно хорошо известны (речь о единицах процентов), то как работает эта стройная система костылей подсистема Windows — реально интересно.

                            PS. чисто по-женски интересно — какая религия запрещает эффективным манагерам Microsoft сделать нормальный транслятор вызовов абсолютно открытой OS?
                            Команде Wine не мешает почти полная закрытость Windows — даже глюки недокументированные фичи повторяют.
                              +1
                              … и не очень хорошо с собственно Linux'ом.
                              Ключевое — «упрощенной» и «Ядро Linux в WSL 2 создано собственными силами на основе».

                              Опять таки вы путаете подход использованный при создании WSL1 и WSL2.


                              То что вы пишете это именно про WSL1, где действительно кастомное ядро Linux, в котором системные вызовы Linux пробрасываются/транслируются в системные вызовы Windows. Из-за чего в WSL1 получилось много проблем с совместимостью и целый список не работающих фич и софта.


                              PS. чисто по-женски интересно — какая религия запрещает эффективным манагерам Microsoft сделать нормальный транслятор вызовов абсолютно открытой OS?

                              Но в Microsoft поняли, что так не пойдёт (трансляцией) и решили переделать всё с нуля используя свою технологию виртуализации Hyper-V (поддерживает аппаратную виртуализацию на базе Intel VT либо AMD SVM). Т.е. WSL2 это уже полноценный образ Linux. Назвали всё это WSL2.


                              Чисто технически у WSL1 и WSL2 задача одна, а реализация разная. Новая реализация очевидно сильно лучше. Складывается вопрос почему раньше так не сделали, а пошли более жёстким, больным путём.


                              Чисто теоретически если бы это был не Microsoft вместо Hyper-V мог бы быть и KVM и XEN.

                                +1
                                Чисто технически — почему транслировать WinAPI в Linux (и даже в X) получается, а взад — плохо?
                                  0

                                  Я бы сказал от части криворукость и легаси. Windows 10 это ядро Windows 7 с навешенными брокерами функционала Windows 8 (только того, который решили оставить).

                                    0
                                    Об этом и речь в моем первом комменте.
                                    Вместо «мы устали топтаться по своим граблям, поэтому по-быстрому слепила из того, что было» пишут «применили экстремально новейшие технологии».
                                    А вместо «теперь WSL тормозит только в 3 раза относительно нативного Linux, а не в 40, как раньше» пишут «ускорилось в 13 раз».
                                    Ализар отдыхает.
                                    +1

                                    "Чисто технически" вся ядра NT принципиально не умеют две вещи:


                                    • уменьшение размера файла меньше за-mmap-ленного размера (неустранимый баг №902);
                                    • уведомительную (advisory) блокировку файлов (неустранимый баг №1927);

                                    Теоретически M$ конечно могут это "починить" (сделали же clone/fork), но отказались (видимо) из-за трудоемкости и бесперспективности (всё выходило в разы медленнее чем в Linux).

                                    0
                                    В данной реализации с ней могут быть проблемы если захочется на том же хосте паралелльно поднять виртуалку на Virtual Box, например.
                                    Ну и пока не работает на хостах с AMD
                                      0
                                      VirtualBox и Hyper-V уже умеют работать вместе с 6 версии
                                        +1
                                        VirtualBox при этом работает оооочень медленно и печально. Возможно, даже в 13 раз.
                                +1
                                WSL2 — это не виртуалка.
                                Это слой совместимости.

                                Это вы путаете как раз с WSL1, который по сути и был слоем совместимости (подмена системных вызовов Linux системными вызовами Windows).


                                А вот WSL2 это именно виртуалка в Hyper-V. С рядом настроек для проброса и шаринга.

                                  0
                                  Ну ок, не успел за рекламой уследить.
                                  WSL2 — это какбывиртуалка.
                                  Хотя исходной целью был просто слой совместимости.
                                    +1

                                    Именно, точнее она чуть шире чем просто слой совместимости, тут скорее экосистема для разработки. Вот только в WSL1 этот слой был очень корявый и не совместимый как выяснилось.


                                    В WSL2 это виртуалка, в которую ставится дополнительно связующий софт (именно слой совместимости между Windows и Linux). Стоит ещё отметить что дистрибутивы операционок в Microsoft Store распространяются и поддерживаются разработчиками этих операционок. Так например Ubuntu это облачный образ с настройками для лучшей работы именно в Hyper-V.


                                    P.S. Я этим уже пользуюсь пол года и мне нравится реализация именно WSL2. Microsoft так же оставили возможность выбора режима WSL1 или WSL2 как по умолчанию для новых дистрибутивов, так и выбор конкретному дистрибутиву. И ещё пока есть проблема в WSL2, на уровне организации виртуальной сети (пока не умеет в IPv6, с января имеется тикет на решение, но появится это решение скорее всего через несколько релизов после Майского).

                              0

                              Я пост читал, если что, и отвечал относительно 1й версии, которая транслирует вызовы, прямо как вайн, но от «криворуких» из МС.

                                0

                                Ну вот и сравниваем вайн и виртуалку по аналогии с WSL1 и WSL2, всё правильно.

                          0
                          В среднем по больнице (если исключить тяжелую графику) — практически да.
                          Если приложение нормально написано, то разницы нет или нечувствительно.
                          А многие вещи работают даже быстрее.
                          +1
                          Ну и почему они обходились достаточно дорого? Что конкретно не так с архитектурой
                          WSL1? Что делает трансляцию системных вызовов дорогой?

                          Возможно сами файловые операции обходились слишком дорого по сравнению с Linux.
                          Например, мне известно приложение (грубо говоря распаковщик архивов) которое изначально разрабатывалось на Linux, а потом было перенесено на Windows и там работало в несколько раз медленнее. И это исправили, барабанная дробь, пулом потоков для вызова CloseHandle. Потому что антивирус как раз в этот момент подключался в работу, а разработчики не ожидали что операция "закрыть дескриптор файла" может быть медленной и соответственно программа была не рассчитана на "зависание" в этой точке и ждала "закрытия файла" хотя могла бы читать следующий файл из архива использовать ЦПУ для "разжатия" и т.п.


                          И конечно в чем смысл транслятора системных вызовов если каждое приложение под него нужно адаптировать,
                          проще запустить в вирт. машине и игнорировать антивирусы.

                            0
                            В WSL 1 была прослойка, которая прокидывала все системные вызовы Linux в Windows API. И понятно, что это приводило к накладным расходам на преобразования всех параметров и структур.
                              +1

                              Вы просто перефразировали процитированный мной фрагмент. Ну так почему эти накладные расходы оказались больше накладных расходов на виртуальную машину? На то же хранение файлов в виртуалке тоже неизбежно будут какие-то накладные расходы, виртуальные диски всё равно на тот же NTFS кладутся в итоге.

                                0
                                Потому что в WSL 1 нужно эмулировать все вызовы к системе (к стати так все вызовы и не были реализованы, поэтому не все приложения там работали — WSL vs WSL 2). А в WSL 2 ядро Linux нативно работает с VHD и учитывает особенности этого взаимодействия.
                                Плюс давно уже виртуалки не уступают в производительности хосту, потому что по сути работают просто рядом с хостовой системой, которая также управляется Hyper-V гипервизром.
                                  +1

                                  Тут где-то в комментариях рассказывали, что тормозят в основном файлы.


                                  Если в виртуалке обычный виртуальный диск с каким-нибудь ext4, то он будет храниться в виде файла на реальном NTFS-диске, а значит будет как минимум два вызова: сперва запись ext4 в виртуалке, потом запись этого ext4 на NTFS, а если диск динамического размера, то добавятся накладные расходы на управление этой динамикой, плюс фрагментацию ФС на хосте никто не отменял.


                                  Если же паравиртуализация, какой-то специальный драйвер ФС или типа того, то это опять же трансляция обращений к драйверу в какие-нибудь вызовы на стороне хоста.


                                  Так что я всё равно не понимаю, почему трансляция системных вызовов должна быть медленнее виртуальной машины.

                                    0
                                    Есть разница между тем как тупо записать блок данных в NTFS, который был изменен в ext4 в vhd-файле. И совсем другое превратить запрос к ext4 в запрос к NTFS (хотя в WSL 1 используется lxfs). Поднятие дерева файлов, их атрибуты. В этом случае нужно хранить мапинг не просто блок к блоку, а еще и структуру одной файловой системы к структуре другой.
                              +6
                              У меня такое чувство, будто в WSL1 просто наговнокодили.

                              Не в WSL1, а несколько раньше.
                              И не "наговнокодили", а скорее не решились устранять недостатки дизайна.


                              Многие вещи в ядре NT начинались с отличного дизайна и были заимплеменчены достаточно хорошо, но некоторые были буквально "назло бабушке уши отморожу": процессы и треды, 1/3 инфраструктуры виртуальной памяти, файловая система — там адовы накладные расходы. Потом дополнительно добавили ведро дёгтя (win32sys), а ради мифа совместимости не стали упрощать IRP-стек.


                              В результате имеем то что имеем — WSL1 работает со скоростью нативных системных вызовов Windows 10 (затраты на трансляцию там погоды не делают), а WSL2 почти догоняет нативное ядро Linux.


                              Поэтому вместо сопоставления WSL1/WSL2 корректнее сформулировать "При некоторой усредненно-взвешенной оценке ядро Windows 10 выполняет системные вызовы в 13 раз медленнее Linux" — и это действительно так.

                                0

                                А вот это уже интереснее

                              0

                              Чисто теоретически, возможно ли грузить WSL2 со службами автоматически при запуске системы, иметь доступ по SSH и к иксам по VNC извне?

                                0

                                Думаю можно. Также как можно делать сейчас в первой wsl

                                +3
                                Это актуальная информация для тех, кто хотел перейти на ОС Windows, но никак не решался.

                                Хех забавно, обычно переходят в другую сторону
                                  +2
                                  Как это всё будет работать в виртуальных машинах Windows?
                                  Windows ведь может быть запущена, как под их родным гипервизором HyperV, так и под VirtualBox, QEMU, KVM, VmWare и т.д.
                                  Запустится ли WSL2 под «вторым» слоем виртуализации (nested virtualization), или работоспособной будет только 1ая версия WSL, или версия 2, но только под HyperV с включённой опцией вложенной виртуализации (которую, например хостер может не захотеть включать для вашей… виртуальной машины)
                                    +1
                                    Но зачем? WSL в основном предназначена для разработки и отладки чего-то линуксового не вылезая из винды. Зачем запускать на виртуалке у хостера винду, чтобы в ней запустить WSL, в которой запустить линуксовое приложение? Мне сложно придумать достойное применение такому завороту.
                                      0

                                      Я с Windows не работаю, но первое что приходит на ум это VDI для разработчиков. Там WSL2 уже будет вторым слоем.

                                      0

                                      Ну это просто ограничение, задаваемое выбором того что у MS имеется — hyper-v.

                                      –5
                                      микрософту осталось сделать последний шаг — убрать из этого всего Винду и оставить только Линукс.
                                        +2
                                        Когда-то читал статью о разработке первой WSL. Там эмулировались вызовы linux-а через window-ое окружение. Сейчас как я понимаю, всю WSL переписали с нуля, встроив чистый linux. Так был ли в итоге смысл в WSL1? Или она появилась лишь вследствие всем известного «фатального недостатка»?
                                          0
                                          Так же можно спросить, нужен ли Wine при наличии виртуализации? И идея как раз в том, чтобы отказаться от виртуализации. Но по какой-то не очень понятной мне причине, трансляция вызовов оказалась значительно медленнее.
                                            0
                                            Возможно wine был бы и не нужен, если бы винда была бесплатная
                                              0
                                              Добыть винду бесплатно или не очень дорого не проблема, полагаю, все мы знаем как. По мне так проще, чем бороться с Вайном. Гораздо нужнее Вайн становится, когда ты большую часть времени работаешь в линуксе и лишь иногда надо запустить виндовое приложение.
                                          –1
                                          Для меня самый важный вопрос, а что там с докером? В WSL1 мне так и не далось его использовать для работы с рабочим проектом. Я развернул докер по инструкции, через эмуляцию и Docker for Windows, контейнеры даже поднялись, но всё сломалось на монтировании. Как и у многих. Кажется теперь докер должен работать лучше, ведь он не будет эмулироваться отдельно.
                                          +2
                                          К сожалению, при работающем WSL2 можно попрощаться с VirtualBox и VmWare. Нет, возможно после пары бубнов они и заработают, но в разы медленнее чем без Hyper-V.

                                          С другой стороны, при наличии любой другой VM, WSL2 уже не становится особо нужным — единственная удобная вещь это интеграция, хотя как правило нужен лишь доступ к файлам из хоста в линукс, а это просто делается самбой.

                                          Что же касается тормознутости WSL1 — если добавить его в исключения для антивирусов (включая Defender) — всё очень даже шустро становится. Не без глюков конечно но всё же далеко не как черепаха.
                                            0
                                            см. ниже мой комментарий.
                                              0
                                              Это здорово, но непонятно что будет с производительностью. VirtualBox уже разработали, но всё очень тормознуто (видимо за счёт вложенности), поэтому есть подозрения что у vmware лучше не получится.
                                            0
                                            А тем временем vmware разрабатывает hyper-v совместимый workstation.
                                            Что позволит одновременно пользоваться как и виртуалками на базе hyper-v (WSL2 + эмуляторы android, в моем случае), так и одновременно крутить виртуалки на базе vmware.

                                              0

                                              Буквально недавно выпустили, работает на вложенной виртуализации (минус AMD) и нет поддержки VT-d. Работать оно работает, но производительность совсем не радует.

                                              0
                                              Вот бы было решение наоборот, чтобы эффективно винду запускать под GNU/Linux для тяжёлого софта. Да, про KVM с пробросом видео я в курсе. Но это неудобно, т.к. хост лишается мощной карточки да и плюс накладные расходы и ограничения вируальной машины.
                                                +4
                                                Почему никто не пишет, что на локальной ФС ничего стало невозможно собирать с этой WSL2? Я уж думал после появления WSL никогда не вспомню про mingw/cygwin но WSL2 не может работать с ntfs практически совсем никак, все на вид в 13 раз медленней, т.е. проекты больше собирать абсолютно невозможно. Видимо, все бенчмарки как раз эту разницу и измеряют.

                                                Вообще интересно как это произошло. Огромный отдел работал над интеграцией линукса в винду с общей файловой системой и системными вызовами и вдруг пришел какой-то румяный менеджер, скачал из инета виртуалку, и не прогадал ведь — в результате у разных субьектов из статей на глазах скупые слезы счастья.

                                                P. S. Раньше на WSL1 у меня был баш доступен и весь линукс прямо на винде, было может не супер быстро но я особо не замечал, собирал огромные штуки собирал типа всяких бустов. Сейчас это почти невозможно сделать без копирования на виртуальный диск, все тормозит просто неимоверно Лучше бы померили во сколько раз медленнее стало на ntfs, а не во сколько раз быстрее на ext4.
                                                  0

                                                  WSL1 для работы с NTFS, он никуда не уходит и останется доступным, а WSL2 для работы с виртуальным диском. Да, сделали неудобно, и возможно в документации нужно было точнее объяснить что для чего.

                                                    0
                                                    Еще как уходит. Невозможно иметь WSL1 и WSL2 одновременно в одной системе.
                                                      0

                                                      Вы ошибаетесь

                                                        0
                                                        Как это сделать-то? Версия wsl переключается глобально командой wsl --set-version которая может часами конвертировать root в другую файловую систему.
                                                          +1
                                                          Можно поставить больше чем 1 wsl-систему и для каждой установить какая версия wsl будет использоваться (не обязательно устанавливать из Store, можно установить напрямую)

                                                          Посмотреть список установленных систем и версий wsl:
                                                          wsl --list --verbose

                                                          Сменить версию для какой-то конкретной (например Ubuntu-20.04):
                                                          wsl --set-version Ubuntu-20.04 2

                                                          Для запуска другой версии:
                                                          wsl -d Ubuntu-20.04


                                                            –1
                                                            Что произойдет с подсистемой WSL 1? Будет ли прекращена ее поддержка?
                                                            В настоящее время не планируется объявлять подсистему WSL 1 нерекомендуемой. Вы можете запускать дистрибутивы WSL 1 и WSL 2 параллельно, обновлять их и переходить на более раннюю версию дистрибутива в любое время. Добавление WSL 2 в качестве новой архитектуры для команды WSL представляет собой лучшую платформу, которая предоставляет отличные возможности для запуска среды Linux в Windows.

                                                            Может потому что Вы конвертируете один и тот же образ между WSL1 и WSL2 а не исопльзуете отдельные дистрибутивы?
                                                              –1
                                                              WSL по умолчанию всё равно одна, ставится через wsl --setdefault, по другому как я понимаю никак. впрочем такое переключение быстрее чем конвертация диска. но и в целом копировать весь рабочий код на бинарный блоб внутри виртуалки не очень здорово. Сборка на NTFS у WSL2 в десятки раз медленней чем из WSL1. Даже не в 13, а примерно в сто, у меня терпения не хватает дождаться до конца, оно еле шевелится.
                                                                0
                                                                Померил время сборки на мелком относительно проекте (все с нуля на холодную):

                                                                WSL2/ext4: 9 секунд i.imgur.com/hdZPNbc.jpg
                                                                WSL2/ntfs: 14 МИНУТ (в 93 раза медленней) i.imgur.com/5r97IVU.jpg
                                                                WSL1: 33 секунды i.imgur.com/2j2m2yU.jpg

                                                                Issue с бенчмарками github.com/microsoft/WSL/issues/4197 (без сборки, просто блоками в dd, даже сетевой диск получается в 3 раза быстрее ntfs.

                                                                Микрософт напишет, конечно, «вы просто не держите файлы так», но у меня на рабочем ссд разделе нет места под целый дополнительный линукс, там придется резервировать дополнительно гигов десять наверное и перетаскивать туда все проекты.

                                                                Upd: да, для запуска баша вместо wsl --setdefault NAME && bash можно использовать и wsl -d NAME, это ни на что особенно не влияет
                                                                  0
                                                                  Не знаю кто минусы проставил и зачем (объяснитесь) но по-моему очевидно, что WSL2 способна заменить WSL1 только для специфических сценариев когда есть возможность все держать внутри виртуальной машины.

                                                                  На NTFS разделе WSL2 почти в сто раз медленней чем WSL1 а так же MSYS, CYGWIN и полноценно заменить их не может.

                                                                  Можно частично решить эту проблему, проставив сетевые симлинки с "\\wsl$\" на NTFS, но этот кусок проекта будет все равно физически лежать внутри VM в файле VМDK.

                                                                  Кроме git clone / git pull и, собственно, сборки, предполагается, что проект еще надо в промежутках как-то разрабатывать, тестировать и отлаживать.
                                                                    0
                                                                    MSYS2: 2 минуты 14 cекунд: i.imgur.com/MnlPKeP.jpg

                                                                    Brief summary:
                                                                    image

                                                                      +1

                                                                      Ожидаемые цифры:


                                                                      • NTFS в разы медленнее EXT4.
                                                                      • В WSL1 минимальные накладные расходы при натягивании Linux-операций на NTFS (эмуляция внутри ядра).
                                                                      • В MSYS2 накладных расходов больше, т.е. больше системных вызовов, которые отрабатывают со скоростью windows (выполняются ядром Windows и драйвером NTFS).
                                                                      • Худший случай при доступе к NTFS из WSL2. Добавляется эмуляция Linux-операций через SMB, и все это обслуживает службой на стороне windows с выполнением в NTFS.

                                                                      Единственный способ получить скорость достаточно очевиден — избавиться от медленных компонентов (NTFS, ядра и служб Windows).

                                                    0
                                                    Ага, а проблеми с VPN так и не пофиксили :(
                                                      0

                                                      Это все конечно очень классно, но когда в WSL2 завезут поддержку GPU?

                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                      Самое читаемое