Как ускорить работу с WSL2

Предположим, вы разработчик, который использует WSL2. С какими основными проблемами вы сталкиваетесь?

  1. WSL2 медленно работает при сетевом обращении из Windows. К примеру, из Microsoft Edge, Chrome или другого браузера.
  2. WSL2 при каждом запуске меняет свой виртуальный IP адрес. Приходится править локальный файл hosts
  3. Поддержка 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

На этом пока все. Остались вопросы? Посмотрите на эту статью.