Рейтинг:4

Swappiness на WSL2 сбрасывается до 60

флаг cn

Недавно я попытался установить Ubuntu на Windows (WSL2). я попробовал бесплатно команда, и было использовано несколько блоков памяти подкачки. Я подумал об уменьшении подкачки, поэтому добавил запись vm.swappiness=10 в /etc/sysctl.conf. я пытался перезагрузить sysctl.conf, и это, кажется, сработало, Но когда я попытался закрыть WSL и начать новую сессию, swappiness был сброшен до значения по умолчанию 60.

Является ли Ubuntu на WSL2 переопределением этого параметра, чтобы снова сделать его 60?

heynnema avatar
флаг ru
Независимо от того, сколько оперативной памяти или настройка vm.swappiness, почти всегда будет использоваться какой-то своп. Если вы увидели только «использовано несколько блоков подкачки», оставьте vm.swappiness в покое.
Deekshith Anand avatar
флаг cn
@heynnema Ну, я имел в виду, что в этом утверждении использовался своп. Тем не менее, у меня достаточно оперативной памяти (16 гигов, вероятно, достаточно для моего варианта использования). После обновления sysctl.conf и его перезагрузки команда free показала, что используемый своп равен 0. Так что этот swappinness действительно работал. И я не хочу, чтобы эта штука постоянно писала под файл подкачки и изнашивала мой ssd.
heynnema avatar
флаг ru
Если вы посмотрите `free -h`, вы все равно увидите, что через некоторое время некоторые из них используются, даже если вы настроили vm.swappiness. Современные SSD не изнашиваются из-за замены.
Рейтинг:5
флаг vn

/etc/sysctl.conf обычно анализируется Systemd в Ubuntu при запуске (я полагаю, через systemd-sysctl.service). Начиная с WSL не использует системд, он не обрабатывается при выключении и перезапуске подсистемы WSL. Это похоже на то, что я описываю в своем ответе на этот вопрос о переполнении стека (нет необходимости читать это сейчас, но там есть более подробная информация, если вам это нужно).

Решение (также как я описываю в этом конкретном ответе) состоит в том, чтобы использовать ядроCommandLine настройка для ядра WSL2:

  • В вашей Windows %Профиль пользователя% каталог (обычно C:\Users\<имя пользователя>) создайте или отредактируйте файл .wslconfig со следующим:

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • Выйдите из Ubuntu на WSL (и любой другой экземпляр WSL)

  • Выпустить wsl --shutdown из PowerShell, CMD или меню «Пуск»

  • Рестарт

Вы должны найти это vm.swappiness теперь сохраняется. Обратите внимание, что поскольку все сеансы WSL2 используют одно и то же ядро, этот параметр будет действовать глобально. Это происходит независимо от того, как вы устанавливаете swappiness (или любой параметр ядра).

Также обратите внимание, что это было протестировано еще по крайней мере в Windows 10 build 18363 OP этого вопроса о переполнении стека.


Другие альтернативы

я верю .wslconfig вариант, вероятно, лучше всего подходит для этого, но вы также можете:

  • Использовать /etc/wsl.conf с [ботинок] раздел на Windows 11 для принудительного sysctl для запуска при каждом запуске.
  • Используйте свой профиль пользователя, чтобы запустить его вручную. Если вы пойдете по этому пути, используйте что-то вроде wsl.exe -u корневой sysctl --system чтобы не вводить пароль или настраивать sudoers.
Deekshith Anand avatar
флаг cn
Исправление .wslconfig работает и было протестировано на Windows 11! Потрясающий

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.