Предположим, вы разработчик, который использует WSL2. С какими основными проблемами вы сталкиваетесь?
- WSL2 медленно работает при сетевом обращении из Windows. К примеру, из Microsoft Edge, Chrome или другого браузера.
- WSL2 при каждом запуске меняет свой виртуальный IP адрес. Приходится править локальный файл hosts
- Поддержка systemd. Неудобное управление сервисам.
Если с третьей проблемой проблема решается обновлением до последней версии ядра, то с первой и второй, проблемами приходится мучаться. Но, если немного подумать, то и эти проблемы решаются.
Решение проблемы смены IP адреса WSL2
Если вы запустите ipconfig /all и внимательно посмотрите на свойства Ethernet adapter vEthernet (WSL), то обратите внимание, что поднят Link-local IPv6 Address и ему отдается «предпочтение» «Preferred». Далее, в документации Microsoft заявлено, что последняя версия ядра поддерживает обращение к сервисам WSL2 через localhost.
В случае, если вы пропишете в Windows в файле hosts 127.0.0.1, то ничего не случиться. Раньше это работало, с новым ядром нет. Но! Если пропишите ::1 и укажите имя хоста WSL2, то все начнет работать как часы и не надо теперь заниматься ерундой и каждый новый запуск WSL2 вносить изменения в hosts.
С этой проблемой разобрались. Пока. До следующего обновления.
Решение проблемы с производительностью
В WSL2 по умолчанию мапятся локальные диски из Windows. Удобно. Но если вы свой код разместите на этих дисках, то потеряете в производительности от 70% до 80%. Как решать?
Весь код должен быть внутри WSL2. А тяжелый контент, к примеру картинки или еще какие-то большие файлы, можно разместить на дисках Windows.
Плюс есть еще несколько интересных параметров, которые настраиваются в файле .wslconfig и влияют на производительность WSL2
Секция [wsl2]
Включаем классическую консоль Linux. Удобно контролировать запуск WSL2. После старта машины, окно можно закрыть.
debugConsole=true
Не используете GUI, то зачем оно нужно? Отключаем булевым параметром.
guiApplications=false
Чтобы WSL2не кушала все ресурсы, ограничиваем ее параметрами:
processors=4
memory=8GB
Если нужен SWAP, то добавляем:
swap=4Gb
swapFile=c:\\WSL2\\swap.vxdx
В среде WSL2 вы не работаете с виртуализацией? То тогда не надо тратить ресурсы:
nestedVirtualization=false
Ну и чтобы работало решение проблемы с меняющимся IP адресом, прописываем параметр:
localhostForwarding=true
На этом пока все. Остались вопросы? Посмотрите на эту статью.