Как настроить перестановку?

Мне нужен пошаговый, простой и легкий способ настройки перестановки.

3 ответа

Решение

Ядро Linux предоставляет настраиваемый параметр, который контролирует частоту использования файла подкачки, который называется swappiness.

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

В системе Ubuntu по умолчанию установлено значение 60, что означает, что файл подкачки будет использоваться довольно часто, если использование памяти составляет около половины моей оперативной памяти. Вы можете проверить значение swapiness вашей собственной системы, запустив:

one@onezero:~$ cat /proc/sys/vm/swappiness
60

Поскольку у меня есть 4 ГБ ОЗУ, я бы хотел уменьшить это значение до 10 или 15. Файл подкачки будет использоваться только тогда, когда мое использование ОЗУ составляет около 80 или 90 процентов. Чтобы изменить значение подкачки системы, откройте /etc/sysctl.conf как корень. Затем измените или добавьте эту строку в файл:

vm.swappiness = 10

Перезагрузитесь, чтобы изменения вступили в силу.

Вы также можете изменить значение, пока ваша система еще работает с:

sysctl vm.swappiness=10

Вы также можете очистить свой своп, запустив swapoff -a а потом swapon -a как root вместо перезагрузки для достижения того же эффекта.

Чтобы рассчитать формулу свопа:

free -m (total) / 100 = A

A * 10

root@onezero:/home/one# free -m
             total       used       free     shared    buffers     cached
Mem:          3950       2262       1687          0        407        952
-/+ buffers/cache:        903       3047
Swap:         1953          0       1953

итого 3950 / 100 = 39,5 * 10 = 395

Так что это означает, что, когда осталось 10% (395 МБ) оперативной памяти, он начнет использовать своп.


Помогите . Убунту. Своп

Что такое перестановка

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к более медленному времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  • swappiness может иметь значение от 0 до 100.
  • swappiness=0:
    • Ядро версии 3.5 и новее: отключает подкачку.
    • Версия ядра старше 3.5: предотвращает выгрузку процессов из физической памяти как можно дольше.
  • swappiness=1:
    • Ядро версии 3.5 и выше: минимальная перестановка без ее полного отключения.
  • swappiness=100:
    • Говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кеш.

Смотрите http://en.wikipedia.org/wiki/Swappiness.

Настройка по умолчанию в Ubuntu swappiness=60, Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность типовой установки Ubuntu на рабочем столе. Значение swappiness=10 рекомендуется, но не стесняйтесь экспериментировать.


пример

Начал использовать своп на 91%:

введите описание здесь Поскольку я сконфигурировал свою систему & vm для использования ОЗУ на 90%, на 90% не было перестановки.

После этого я открыл несколько приложений, таких как Firefox & Shutter, и он начал обмениваться, потому что использование ОЗУ превышает 90%.

Мне нужен пошаговый, простой и легкий способ настроить swappiness.

Я хотел бы разъяснить уже имеющиеся здесь ответы, добавив:

  1. Очень краткое изложение того, как изменить swappiness.
  2. Некоторые цитаты из последнего исходного кода ядра Linux ( ) о том, что на самом деле означает «подкачка» и каковы ее диапазоны.

Итак, вот оно:

1. Как настроить подкачку

      # read current swappiness setting
sysctl vm.swappiness
# or (same thing)
cat /proc/sys/vm/swappiness

# change setting to zero
sudo sysctl vm.swappiness=0

Приведенные выше команды не сохраняются при перезагрузке. Чтобы сделать настройку постоянной, вам нужно использоватьsudoи отредактируйте файл, чтобы добавить желаемую настройку подкачки в конец. Пример:

      # edit the file with the `nano` editor
sudo nano /etc/sysctl.conf

Добавьте это в конец "/etc/sysctl.conf":

      # my custom swappiness setting
vm.swappiness=0

Если вы решите отредактировать только этот файл,swappinessнастройка, а не установка с помощьюsudo sysctl vm.swappiness=0, затем, чтобы активировать новую настройку, установленную в файле, вам потребуется либо перезагрузить компьютер , либо вызвать следующую команду для перезагрузки файла конфигурации:

      # reload just the "/etc/sysctl.conf" config file
sudo sysctl --load

# or: from `man sysctl`:
#
#       Load settings from all system configuration files.
#       /run/sysctl.d/*.conf
#       /etc/sysctl.d/*.conf
#       /usr/local/lib/sysctl.d/*.conf
#       /usr/lib/sysctl.d/*.conf
#       /lib/sysctl.d/*.conf
#       /etc/sysctl.conf
sudo sysctl --system

В конце выполнения любой из вышеуказанных команд терминал выведет это на стандартный вывод:

vm.swappiness = 0

Чтобы узнать, какие у вас текущие настройки/etc/sysctl.conf:

      cat /etc/sysctl.conf

2. Что такое swappiness, прямо из уст разработчиков ядра Linux

Загрузите исходный код Linux самостоятельно, следуя моим инструкциям здесь: см. здесь, как его загрузить, если интересноГде и как получить официальный исходный код ядра Linux .

Как показано в стабильном репозитории Linux отgit blame Documentation/admin-guide/sysctl/vm.rst, эта документация была написана Peter W Morreale, Mauro Carvalho Chehab и Johannes Weiner ( исходный код ядра см. здесь ) (выделение добавлено, форматирование слегка изменено):

обмен

==========

Этот элемент управления используется для определения приблизительной относительной стоимости операций ввода-вывода при подкачке и подкачке файловой системы в виде значения от 0 до 200. При значении 100 виртуальная машина предполагает равную стоимость операций ввода-вывода и, таким образом, будет в равной степени оказывать нагрузку на память к кэшу страниц и страницам с буферизацией подкачки; более низкие значения означают более дорогой ввод-вывод подкачки, более высокие значения указывают на более дешевый.

Имейте в виду, что шаблоны ввода-вывода файловой системы при нехватке памяти, как правило, более эффективны, чем случайный ввод-вывод подкачки. Оптимальное значение потребует экспериментов, а также будет зависеть от рабочей нагрузки.

Значение по умолчанию — 60.

Для подкачки в памяти, такой как zram или zswap, а также гибридных установок, которые имеют подкачку на более быстрых устройствах, чем файловая система, можно рассматривать значения выше 100. Например, если случайный ввод-вывод на устройство подкачки в среднем в 2 раза быстрее, чем ввод-вывод из файловой системы, степень подкачки должна быть равна 133 (x + 2x = 200, 2x = 133,33).

При значении 0 ядро ​​не будет инициировать своп до тех пор, пока количество свободных страниц и страниц с файловой резервной копией не станет меньше верхнего предела в зоне.

Таким образом, значения больше не находятся в диапазоне от 0 до 100. По состоянию на этот хэш коммита c843966c556d7 от 3 июня 2020 г. значение теперь находится в диапазоне от 0 до 200.

Хэш коммита 497a6c1b09902b22ceccc0f25ba4dd623e1ddb7d прямо перед этим заявлял следующее:

обмен

==========

Этот элемент управления используется для определения того, насколько агрессивно ядро ​​будет подкачивать страницы памяти. Более высокие значения увеличивают агрессивность, более низкие значения уменьшают объем свопа. Значение 0 указывает ядру не инициировать своп до тех пор, пока количество свободных страниц и страниц с файловой резервной копией не станет меньше верхней отметки в зоне.

Значение по умолчанию — 60.

Значение swappiness по умолчанию было60возвращаясь, по крайней мере, к версии ядра Linux v2.6.12-rc2, 18 лет назад (по состоянию на 2005 г.), как показано git blameв mm/vmscan.cфайл, где он установлен, здесь .

Какой swappiness я должен использовать?

Я очень рекомендую ! Это заставляет мою машину работать намного лучше. Из моего анекдота :

Я обнаружил, что установка swappiness на 0 значительно повышает производительность моей системы с 32 ГБ ОЗУ, файлом подкачки 64 ГБ на высокоскоростном твердотельном накопителе m.2 и постоянной нехваткой оперативной памяти.

Если для swappiness установлено значение по умолчанию 60, я регулярно получаю 1-2-минутные периоды блокировки во время работы (как показано наtop), чтобы попытаться подкачать память для какого-нибудь приложения, потребляющего память, например Chrome, Slack, Eclipse или Google Meet (в Chrome). Я бы начал получать эти зависания при заполнении ОЗУ на 80%. В это время компьютер будет полностью непригоден для использования — даже я не смогу набрать текст в терминале или щелкнуть меню.

Установка swappiness на 0 значительно помогла! . Я начал не получать действительно высокую загрузку ЦП до тех пор, пока ОЗУ не было заполнено на 90%, пространство подкачки по-прежнему использовалось бы много, но более эффективно, и когда моя ОЗУ почти заполнялась, мой компьютер становился очень вялым, но все еще едва пригодным для использования, а не полностью непригодным для использования. !

См. некоторые из моих симптомов здесь, которые, как я первоначально думал, были связаны с ошибкой в ​​​​Google Meet, но теперь думаю, что это связано с подкачкой памяти, замедляющей работу моего компьютера:

В моей системе:

  • Сvm.swappiness=60, я бы видел 1-2 минуты 100% блокировки ЦП, начиная с примерно 79% использования ОЗУ, каждые 4-6 минут, навсегда. Это было особенно усугублено и заметно https://github.com/ElectricRCAircraftGuy/bug_reports/issues/3#issue . -1177137900при использовании Google Meet .
  • Сvm.swappiness=0, этого бы не случилось. Я был бы в порядке при использовании 80% ОЗУ и начал бы видеть большую медлительность, но не полную блокировку, как раньше, при использовании 90% ОЗУ.
    • Даже если swappiness установлен на 0, я бы увидел некоторое использование (несколько МБ) подкачки, используемой уже от 0 до 3% используемой ОЗУ, и у меня было бы интенсивное использование подкачки от 80% до 90% используемой ОЗУ.

Использованная литература:

  1. https://linuxize.com/post/how-to-change-the-swappiness-value-in-linux/ — где я узнал о большинстве команд sysctl выше
  2. https://www.cyberciti.biz/faq/reload-sysctl-conf-on-linux-using-sysctl/ — где я узналsysctl --systemcmd выше

Связанный:

  1. kswapd0занимает много ресурсов процессора - полезно, но эта цитата совершенно неверна:

    где 0 — это оставшийся процент от 100, при котором следует использовать SWAP (когда у вас осталось 0% ОЗУ, SWAP начнет принимать данные).

  2. Мои ответы - мне нужна была эта информация о подкачке. для них:

    1. ***** Очень полезно - я часто ссылаюсь на это: Проблема: Eclipse и индексатор Eclipse занимают все мои ресурсы / CPU%
    2. в моем ответе здесьUnix и Linux: чем отличаются настройки swappiness от 0 до swapoff

Для обмена ZRAM без каких-либо фактических разделов / файлов подкачки используйте 100. Он предварительно сжимает все, что может быть предварительно сжат, оставляя кеш нетронутым и быстро распаковывает данные по мере необходимости (также, без реального свопа вам нужно будет увеличить admin_reserve_kbytes x2 или даже x4, чтобы избежать зависания всей системы при нехватке ОЗУ вместо того, чтобы сбросить голодное приложение).

Для SSD с фактическим разделом подкачки используйте 1. Это предотвратит подкачку как можно дольше, жертвуя кешем (но кеш можно легко перечитать с SSD).

Другие вопросы по тегам