Подсистема Windows для Linux (Windows Subsystem for Linux, WSL) вскоре должна стать заметно стабильнее и реже приводить к сбоям основной Windows.
Windows Subsystem for Linux получила архитектурное обновление, которое должно повысить стабильность подсистемы при высокой нагрузке. Microsoft ограничила объем оперативной памяти и процессорных ресурсов, доступных среде Linux. Благодаря этому пользовательские процессы больше не смогут забрать все ресурсы, необходимые для работы служебных компонентов WSL в Windows.
До внедрения этого исправления пользователи могли запускать ресурсоемкие процессы, например компиляцию ПО, которые регулярно вызывали в виртуальной Linux-среде события Out-of-Memory – нехватку оперативной памяти. В результате завершались не только активные приложения: процесс мог потребить все ресурсы, необходимые для работы ядра WSL. Из-за этого подсистема зависала, причем ее работа не восстанавливалась даже после того, как нагрузка на память снижалась.
Исправление Microsoft вводит жесткое ограничение ресурсов для виртуальной Linux-среды с помощью механизма изоляции. Благодаря этому у служебных процессов WSL всегда должен оставаться минимальный объем ОЗУ и вычислительной мощности процессора. Теперь, если пользователь начнет компилировать программу в Linux-среде и процесс исчерпает доступные ресурсы, завершится только этот процесс, а не вся подсистема WSL.
Для реализации нового механизма система помещает все запущенные пользователем Linux-среды в отдельную ограниченную контрольную группу под названием wsl-user. Для этой группы устанавливается лимит оперативной памяти, который на 32 МиБ (мебибайт, около 33,6 МБ) меньше общего объема памяти хост-системы. Доступная процессорная мощность, в свою очередь, ограничивается значением на 0,01 ядра ниже общей производительности процессора. Такого небольшого резерва должно быть достаточно, чтобы WSL могла поддерживать работу критически важных фоновых процессов, обмен данными с Windows и управление Linux-средами.
Еще одна важная деталь заключается в том, что WSL пришлось полностью перейти на Linux cgroup v2 – вторую версию механизма контрольных групп. К сожалению, это может нарушить совместимость со старыми рабочими нагрузками, которые зависят от предыдущей версии системы. Пользователям, которым по-прежнему необходима cgroup v1, следует добавить параметр IsolateDistroCgroup = false в файл .wslconfig. В этом случае новые механизмы изоляции применяться не будут.
Изменение также дает еще одно преимущество. При одновременном запуске нескольких Linux-дистрибутивов пользователи больше не должны сталкиваться с блокировкой их инициализации.
Новая архитектура размещает экземпляры systemd каждого дистрибутива в отдельных контрольных группах. Благодаря этому разные Linux-среды смогут загружаться независимо друг от друга.