Как стать автором
Обновить

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

Капитан очевидность лет 10 бубнит что переходить стоит, но сразу на Linux ;)

В общем резюме (с точки зрения скорости):


  • WSL1 — тормозят файловые операции через Linux API (?), сеть (?)
  • WSL2 — тормозит процессор, память (?)

Всё верно?


PS. интересно бы посмотреть относительно нативного Linux на той же машине.

Нет, немного иначе:


  • WSL1 = тормозят все системные вызовы, но больше всего связанные с файловыми операциями (ибо эмуляция средствами тормозной NTFS).
  • WSL2 = сильно тормозит доступ к файлам расположенным внутри винды (ибо доступ через виртуальную сеть с эмуляцией средствами тормозной NTFS), но остальное работает почти как в Linux.



Если учесть что в WSL1 принципиально не могут работать некоторые вещи, то самое рациональное решение — использовать WSL2 с размещением файлов в EXT4, а не в NTFS.

Я не вижу смысла в WSL2 что-то разврачивать внутри винды. У меня проекты развернуты в /var/www, и там же я делаю все сборки. А редактирую я их через \\wsl$\Ubuntu-20.04\var\www. Тут ситуация обратная. Доступ с винды на линуксовую файловую систему тоже чуть подтормаживает (впрочем єто не сильно раздражает).
PHPStorm не дает нормально работать с таким проектом. Слетит синхронизация для начала. Дальше могут начаться проблемы с правами.
Касательно wsl, правку в \\wsl не рекомендовали.
У меня на данный момент не работает только локальная история. Вот этот баг youtrack.jetbrains.com/issue/IDEA-241935. Самое основное для меня чо отлично работает Xdebug. Правда пришлось перейти на 2020.2 betta. Я думаю это решение пока подходит только тем кто готов немного поекперементировать.
>то самое рациональное решение — использовать WSL2 с размещением файлов в EXT4, а не в NTFS

дык сам MS про это чёрным по белому писал в анонсе wsl2.

Всё так, но (вероятно) не все читали (или поняли) анонс.
Видимо поэтому продолжаются какие-то сборы и сравнения мягкого с мелким ;)

например я, расскажите как это сделать? тоже заметил невероятную тормознутость всл2, думаю это из-за доступа к файлам
Насчет бенчмарков.
Вот вы их делаете в /mnt/c.
Но дело в том что /mnt — это ФС монтированая из Windows, отсюда и проблема с производительностью, т.к. linux с NTFS не очень.
Попробуйте тот же Jekyll генерировать в /home/username, должно быть наоборот ускорение в 2-5 раз (если верить этому)

Да, но причина немного в другом — эти операции выполняются тормозной NTFS (со всеми проблемами WSL1), но добавляются накладные расходы маршалинга через виртуальную сеть. А с NTFS в Linux всё более-менее.

WSL2
Всё что стоит сказать — а где моя сеть. Дважды переустанавливал и даже с нуля устанавливал, но автоматически сеть в Линуксе не цеплялась. И гайдов толком нет.

У меня брандмаур от drweb резал

ни антивируса, ни брендмауэра
Даже встроенные отключены и всё равно даже айпи адреса в виртуалке нет

Может уже не актуально, но лично мне помогло привязать WSL hab к физической сетевой карте в диспетчере hyper-v, после чего в wsl линуксе прописать шлюз и днс моей сети.

Сэры, никто не пробовал собрать на WSL систему для девелопмента и мультиплатформенной сборки?
Например в качестве оболочки — Visual Studio Code (например native Windows), а в качестве компиляторов бесплатные- Mingw-w64 и линуксовый GCC. Для унификации GUI — VxWidgets или даже QT.
У каждой свои плюсы и минусы. К счастью, пользоваться можно обеими одновременно. Если задача стоит сэмулировать реальный никс то использую wsl2, если же просто запустить что-то требуется из под никсов то пользую wsl1. Из-за особенностей wsl2 все gui приложения запускаю в wsl1 — гемороиться с пробросом порта икс сервера как-то не очень улыбается.
Разве в WSL1 не надо пробрасывать порт x-сервера?
Тем более, что в интернете уже есть решение, как для WSL2 назначать DISPLAY.
Я запускаю через MobaXTerm и там не надо делать ничего — просто запускаешь любое приложение и оно работает. Ну и WSL1 живет же в том же окружении что и винда и все порты доступны напрямую.
Ну, сейчас то же самое, только надо добавить одну строчку в .bashrc:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

Да, доступ портов, конечно, проще в wsl1.
Спасибо, проверю как нибудь) Но все еще есть случаи когда проще жить понимаю что локалхост что в винде, что в wsl один и тот же)
export DISPLAY=$(awk '/nameserver/{print $2;exit}'  /etc/resolv.conf):0
НЛО прилетело и опубликовало эту надпись здесь
Пользователей Wine о том же иногда хочется спросить.
НЛО прилетело и опубликовало эту надпись здесь
зачастую используют, чтобы пару игрушек запустить
А зачастую и не пару. А зачастую и не игрушек. А WSL тоже многим для пары-тройки мелких применений нужен.
У каждого свои причины, в общем.
пилят не линуксовые проекты, а кроссплатформенные. Под тот же .net core на много удобнее писать на винде в нормальной студии, а тестить в никсах на wsl2 в докерах, что бы получить production like среду.
НЛО прилетело и опубликовало эту надпись здесь
Сценарий с WSL2 это например фронт разработка. Когда тебе нужна ФИжма или Цеплин. А сама площадка в докер контейнере. К примеру. Ну или разрабатіваеш на домашнем компе на котором ещо и хочеш поиграть.
А если windows полностью устраивает, но изредка нужен специфический линуксовый софт
Я хочу внутри WSL2 развернуть докер, и обучать нейросети на своей видеокарте, но пока не разобрался как это сделать. Контейнер с jupyter lab запустил, а внутри
> torch.cuda.is_avaliable()
False

Вроде и драйвер под windows нужный поставил, с WDDM, и образ с кудой взял, а всё равно никак. Статьи вроде этой не особо помогают.
Вроде бы пока что только специальный tensorflow работает с wsl2, в pytorch ещё не завезли поддержку.
Если я ничего не путаю, wsl должен запускать неизменённые linux приложения? То есть разработчикам не нужно реализовывать какую-то специальную поддержку wsl, иначе зачем всё это?
В текущей стабильной версии wsl2 нет доступа к GPU. В инсайдерских версиях она появилась, для этого специально запилили драйвер и дополнительную виртуализацию, но работать с этим умеет только tensorflow (почему-то). Есть ещё мануал вот тут:
docs.microsoft.com/en-us/windows/win32/direct3d12/gpu-tensorflow-wsl
А нет, ошибаюсь, майки говорят, что в контейнере можно запускать что угодно: docs.microsoft.com/en-us/windows/win32/direct3d12/gpu-cuda-in-wsl
Но все туториалы по этой теме действительно в основном на tensorflow.
Там нужен обязательно билд из Windows Insider? Вроде же 2004 достаточно…
Нет, для поддержки GPU нужен билд из Windows Insider. Майки не успели доработать поддержку GPU в 2004. Читайте официальные инструкции Microsoft :)
Долго ждал wsl 2, удобный докер, все дела… Поставил 2004 билд винды, попользовался неделю, и отвалилась сеть у докера… И так и сяк пробовал поднять — не работает :)

Работаю с докером момента выхода 2004, никаких проблем. Посмотрите на значение mtu в интерфейсах. Если в докере другое — 1400 вместо 1500 на eth0, например, то сделайте у всех одинаковое. Или если же сидите через VPN, то посмотрите какое там на интерфейсе mtu и в WSL2 измените.

Ну вот зачем заниматься такими жесткими извращениями? То что разработано под линукс (почти все сервера и часть десктопов) нужно на нем и держать, остальное — на Windows.
Ну, кому-то может нужна Windows на рабочем компе как основная операционка, а окружение Linux для рабочих задач.

Мне, например, WSL очень заходит :) Я студент, мой ноут на винде, но почти весь научный софт, которым я пользуюсь, написан по linux. Поэтому WSL удобна.
Это пока у вас ПО которое без проблем работает на платформе для которой предназначено

Сравнивать WSL1 и WSL2 с прямым доступом к файловой системе хоста некорректно. На Phoronix например сравнивали честно (между хостовой файловой системой для WSL1 и виртуальной для WSL2), результаты получились довольно интересные.

WSL 2 был в 20 раз быстрее, чем WSL 1

Не могу сказать точно в какое количество раз, но очень ощутимо WSL1 стал быстрее после добавления всего его корня в исключения Windows Defender.

Это точно. Поделитесь что именно добавляли?
Еще было бы интересно как заставить касперского игнорировать wsl. Любые исключения не помогают.

Я добавлял соответствующий WSL пакет в %USERPROFILE%\AppData\Local\Packages — у меня это Ubuntu (есть в названии, типа CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc).


На этот счёт у них есть древний тикет с жалобами, но воз и ныне там. Народ в нём пишет что само по себе исключение якобы не помогает (хотя я явно это ощутил), и что нужно отключить Real Time Protection (причём в Group Policy, а не из UI) — но это можно делать только на системе в которой вы уверены и если вы уверены что фигне взяться неоткуда (обычно это не проблема, если комп только для разработки).


Впрочем, есть скрипт для PowerShell который отключает Real-Time только для WSL, путём добавления каждого бинарника оттуда в исключения RTP.


PS: Насчёт касперского не знаю, увы. Но если доверяете себе и системе, просто попробуйте его отключить хотя бы в качестве эксперимента.

Любители NPM и прочего вот этого вот всего пока что могут обходить WSL стороной, используйте решения, разработанные под Windows.

Держу проекты в wsl2, и использую vscode под виндой, у которого есть тонкий клиент для всех файловых операций и не только, и собственный сервер запущенный также в wsl2. Проблем никаких не знаю, стороной не обхожу. Возможно скоро и другие редакторы и IDE подтянутся, видел что многие пользователи продукции от JetBrains просят такую фичу.


В общем как только у меня появилась возможность перейти на wsl2, сразу ей воспользовался. И после уже наверное более полугода использования, еще с insider preview, почти всем доволен. До этого лет 10 сидел на линуксе и несколько лет на маке.

В PHPStorm не работает разве что локальная история. И то в версии 2020.2.1 обещали выкатить фикс. Так что любители JetBrains могут смело пользоваться (если локальная история не нужна :))

Я запутался, помогите. :)
Пишу код в винде в vs code. Все проекты живут в, условно, c:\users\username\box\dev\, потому что box\ — точка монтирования облачного хранилища, которое синкает все между компом и ноутом (читай: дропбокс).
Код запускается из wsl1, куда я хожу по ssh. Это, может быть, извращение, но ssh сессий все равно всегда открыто несколько, плюс-минус одна — не важно, зато все в одном месте — удобно. В wsl1 тот самый box\ примонтирован как отдельно как /win.
Продакшен для всего кода — линух, докера нет ибо не нужен, везде git push/pull.
Очень удобно, что при изменении сети на винде (отключился от одного впн, подключился к другому впн, вообще выключил впн) в wsl1 оказывается всё та же виндовая сеть и не надо давить никакие кнопки.
Ну и изредка из wsl1 что-то делаю с пачками больших файлов, которые откуда-то (из внешнего мира) появились на виндовом диске.


Стоит ли смотреть на wsl2 или черт с ним?

WSL2 даст нормальную поддержку всех системных вызовов Linux и ≈10-кратное ускорение операций с файлами, но только если их размещать "внутри Linux" (на EXT4, а не в Windows). Однако, доступ к "виндовым" файлам из WSL2 замедлится ≈вдвое.


Короче, для вас (видимо) что-либо поменяется принципиально только если убрать Windows-прокладку.

Стоит дополнить тем фактом, что после включения WSL2 вы потеряете возможность использовать нормально виртуализацию в системе, доступа к vt-x просто не будет ни у одного приложения. Из моего недавнего опыта, HAXM не установиться и не запустится, VirtualBox будет работать со странными глюками.
НЛО прилетело и опубликовало эту надпись здесь

Получается, WSL2 — просто красиво интегрированная в винду виртуалка

Это было черным по английскому написано ещё в пресс релизе wsl2

VMWare + wsl2 работают, у самого дома установлены, жизни радуются
Смешно говорить, но до сих пор есть процессоры, не поддерживающие нормальную аппаратную виртуализацию. У меня вот как раз такой, покупал давно и не думал о том, что это потенциально может понадобиться. WSL1 будет работать, WSL2 нет.
PS. Жалко что проект AndLinux заглох и не поддерживает Win64.
Меня WSL раздражает тем, что требует новую консоль, которая ломает Far.
Кроме того, HyperV конфликтует с VirtualBox (пришлось удалить).

В связи с этим возникает закономерный вопрос: зачем вообще нужен WSL, когда есть Sygwin и виртуальная машина, на которую можно установить любой Linux. Который при этом будет гарантированно быстро работать.
Чёт вы попутали. Какая новая консоль? Фар отлично работает. А WSL нужен затем, что он работает в разы удобнее, чем держать отдельную полноценную виртуалку с никсами.
Far Manager требует опции: «Use Legacy console (requires relaunch, affects all consoles)», а WSL 1 наоборот хотел не «legacy» консоль.

WSL2 — это и есть виртуалка, только неудобная и ограниченная только одной операционной системой. Ни тебе андроид запустить, ни мой любимый арч, ни CentOS, часто используемый в продакшене. Работает только на Windows Pro. Да ещё какие-то непонятные ограничения с GUI.
Зачем это надо вообще? Virtual Box бесплатен и работает как часы.

Я понимаю, что MS хочет перетянуть разработчиков на тёмную сторону. Но разработчикам то это зачем?
Никогда ничего в дефаултной инсталяции винды для установки фара не менял, всё работает «из коробки», так же как и WSL1/2.
>Зачем это надо вообще?

Ну например сценарий с VSC на много удобней.
1) старт Windows Terminal / Ubuntu / code ~/myproject (менее 1 секунды)
2) автоматом в винде стартует VSC и сразу работает в ремоут режиме с бекенд терминалкой на WSL (примерно 5 секунд)

С отдельной виртуалкой требуется на много больше возни начиная с её далеко не быстрого запуска и заканчивая менее удобной связкой VSC remote. Когда за день надо сотню раз позапускать всякий ансибл с докерами, экономия времени на всяких «преддействиях» просто огромная.
Не совсем понимаю ваш сценарий. Вы запускаете IDE в Windows или в Linux?
Если вам часто требуется Linux, то просто останавливайте его только в конце рабочего дня.
Зачем постоянно перезапускать виртуальную машину?
С том-то и дело, что с WSL это стало на столько «безшовно», что даже не задумываешься, что ты там запускаешь. Не нужно осознанно запускать виртуалку или IDE в винде. Просто открываешь терминал (у меня бубунта по дефаулту), из неё code /project и в винде стартует VSC. Либо VSC открываешь в винде нужный проект, а он автоматом стартует WSL. Бонус именно в безшовности, работаешь в единой целостной системе без лишних действий и «переключения контекста в голове — вот сча я в линухе, а сча в винде», причём всё теперь работает нативно и достаточно быстро.

Добрый день. Раз тут собрались активные пользователи wsl, то спрошу. Реально ли такое применение: front, npm. Хочется держать код под виндой, а собирать в "виртуалке". Пробовал делать через virtualbox, но наткнулся на ограничение — нтфс не понимает симлинки, и команда npm install в виртуалбокс вылетает с ошибкой. Есть ли какое решение? Или просто держать код в виртуалке, и править через удаленный доступ?

Да так самое удобное, работать через VSC на винде с «бекендом» VSC в WSL2. Quickstart — в WSL запустите code ~
Нтфс умеет делать виндовые симлинки. Как это перенесётся в wsl не тестил. Использую WSL 2 с самой ранней беты и на последний ноут вообще не поставил git, node, yarn, nvm в винду. WebStorm отлично цепляет линёвую ноду и дебаггер.
Из поста узнал что оптимально ещё и ext4 соорудить и хранить проекты на нём. Время доступа с винды к фалам увеличится вдвое, но вся сборка ускорится и скорее всего заработает обратно подписка на изменение фс через fs.watch.
Работал на первом WSL (разработка Rails + React). Было +- терпимо по скорости (i7 9750h, 16gb память, nvme ssd). Обновился до WSL2. Стало жутчайше тормозить (например тесты rspec работали 30 минут вместо примерно 4). Поставил Linux (благо с ubuntu 20.20 появилась поддержка моего железа из коробки) — ну просто офигеть как быстро стало. Не думал что НАСТОЛЬКО большая разница с bare metal.
Файлы проекта на NTFS или ext4 в WSL2? перенесите на ext4, проверьте как будет.
На ntfs были в обоих случаях. Сейчас все это дело снес уже, но на случай когда буду пробовать (а я когда-нибудь буду). У меня рабочие файлы лежали d:\Projects. Соответственно в WSL это /mnt/d/Projects.
Чтобы использовать ext4 — я должен их положить в ~/Projects (например), правильно? Как тогда к ним будет организован доступ RubyMine/VSCode?
Да, в home подойдёт, главное не в /mnt/дискВинды. Про RubyMine не скажу, а VSC работает через ремоут VSC сервер, который сам разворачивает в WSL. По факту надо просто запускать в WSL code ~/Projects/myproject и от сам стартанёт и сервер и IDE в винде.
Спасибо, надо попробовать будет. Тем более я пока RubyMine и не пользую совсем
А как в таком случае подключать проект в PHPStorm?
Я к файлам доступаюсь через \\wsl$\Ubuntu-20.04
Если Винда запускается в виде гостя в виртуалке, то запустится ли в ней WSL 2? Это ведь получается вложенная виртуализация.

Ещё в WSL1 не работают свежие версии libc (например, из Ubuntu 20.04). Фикс есть, но пока только в insider-сборках. Обновил Ubuntu, получил нерабочую систему, пришлось переходить на WSL2.

Перешёл на WSL2. Старт происходит с задержкой ~2 секунды. Бесит ужасно. Гуглил, менял всякие префсы, отключал поиск x11 и звука — ничего не помогает.
Пришлось откатиться на WSL1.
у меня первый старт секунд 5-7 (открытие windows terminal с убунтой), каждое следующее открытие — пол секунды максимум. i7 какой-то + SSD
Я как раз после тормозов терминала начал исследовать. В терминале убунта стоит дефолтным профилем.
Первый запуск — секунды две-три. Потом почти мгновенно. 3900x + nvme

Если закрыть все инстансы wsl и немного подождать (чтобы wsl --list --verbose писал что все stopped, это не сразу происходит), то следующий запуск снова тормозит.

Так это какая-то убунтовская приблуда на старте тупит, погуглите, люди у себя всякую фигню комментят и вроде бы помогает.

Не, не помогает. Последнее что нашёл — github.com/microsoft/WSL/issues/5289
Отключение UMIP не помогает. Такой вот лаг на 3 секунды.
image

Да, WSL2 это конечно хорошо, но как уже выше писали, работа с ФС на хосте это просто ад. Заходишь (zsh+git) в папку с проектом, и просто повисает секунд на 15, пока не прочитает состояние репозитория.
Также опечалило то, что не завезли поддержку IPv6 в WSL2, хотя в WSL1 работало все.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий