Как изменить swappiness

Сегодня мы будем говорить о файле подкачки в Linux. Расскажем для чего он нужен, как создать, изменить размер или удалить. В общем, все, что вам может

Сегодня мы будем говорить о файле подкачки в Linux. Расскажем для чего он нужен, как создать, изменить размер или удалить. В общем, все, что вам может понадобиться при работе со swap.

В операционной системе Linux, как и в других ОС, файл подкачки нужен для страховки оперативной памяти. Когда установленный объем ОЗУ заканчивается, используется именно выделенная область из файла подкачки. Это может понадобиться в двух случаях:

  • Для того чтобы при полной занятости и, как следствие, отсутствия свободной оперативной памяти, компьютер не тормозил.
  • Для распределения приоритетов (важным процессам отдается физическая оперативная память, а второстепенным файл подкачки Linux).

Сам по себе swap — это отдельный логический раздел вашего диска либо просто файл на системном разделе. Чаще всего он создается именно при установке операционной системы. Но создать swap linux можно и после завершения инсталляции ОС.

В последних версиях операционной системы Ubuntu Linux файл подкачки создается автоматически вне зависимости от того, хотите вы этого или нет. При этом его размер составляет около 1 Гб.

Как посмотреть swap в Linux

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

free -h

Используемая команда отображает размер файла подкачки вашей операционной системы. Однако, по ее результатам мы не можем определить – это файл подкачки или раздел подкачки. Поэтому будем использовать дополнительный другую команду, чтобы посмотреть swap linux. Вводим в терминал следующее:

swapon --show

Как видите, в нашем случае под swap выделено 1.4 Гб и это файл. То есть, он находится не на отдельном разделе, а на том же диске, на котором установлена операционная система.

Если это будет отдельный логический том, то под надписью «TYPE» мы увидим слово «partition».

Если бы файл подкачки в вашей операционной системе отсутствовал, результат работы команды freeh выглядел бы примерно так:

То есть, вместо каких-либо данных о файле подкачки вы увидите нули.

Если вы удостоверились в том, что файл подкачки отсутствует, можно переходить к его созданию. Пример, приведенный ниже, будет показан с использованием операционной системы Ubuntu 18.04, но работать это должно и на других дистрибутивах Linux.

Шаг 1: Создаем swap файл

Давайте создадим файл подкачки для нашей Ubuntu. Для примера его размер составит 1 Гб. Запустите терминал и введите команду, приведенную ниже:

sudo fallocate -l 1G /swapfile

Для обеспечения безопасности файла обязательно устанавливаем на него нужные права.

sudo chmod 600 /swapfile

При этом вместо «swapfile» мы можем указать любое другое название.

Шаг 2: Создание файловой системы

Создание swap linux ещё не завершено. Теперь необходимо указать нашей операционной системе, что созданный объект должен использоваться как файл подкачки. Для этого мы будем использовать команду, приведенную ниже:

sudo mkswap /swapfile

Если все сделано верно, результат будет выглядеть так:

Шаг 3: Активируем файл подкачки

Хорошо, теперь наш Linux понимает, что это файл подкачки, но этого недостаточно. Нам также необходимо включить SWAP:

sudo swapon /swapfile

Давайте проверим, все ли мы сделали правильно:

swapon --show

Отлично, операционная система распознала наш файл подкачки и начала его использовать. Мы видим тип в поле TYPE и размер в поле SIZE.

Шаг 4. Сохранение изменений после перезагрузки

Все операции, которые мы предприняли выше, временны. Как только компьютер будет перезагружен, они отменятся. Для того чтобы сделать изменения постоянными, нам необходимо дописать кое-какую информацию в /etc/fstab. Для этого поступаем так:

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

sudo cp /etc/fstab /etc/fstab.back

После этого можно переходить непосредственно к добавлению нужных нам данных. Нам надо добавить в файл такую строчку:

/swapfile none swap sw 0 0

Это реализуется через текстовый редактор, запущенный с правами суперпользователя, либо при помощи введенной в терминал команды:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Готово. Изменения сохранены и файл подкачки не сбросится после перезагрузки операционной системы.

Настройка swappiness

Дальше будет рассмотрена настройка swap linux. У файла подкачки существуют параметры, которые сообщают ОС, как часто его нужно использовать. Это явление называется «свопингом» и может иметь значение в пределах 0 — 100. Если это значение ближе к 100, ядро будет перемещать в раздел подкачки больше информации чтобы освободить память. При значениях ближе к нулю, система будет использовать подкачку только при крайней необходимости.

К примеру, в версии Ubuntu Linux для рабочего стола устанавливается параметр 60, а в серверных редакциях операционной системы — 1. Для того чтобы проверить, какой параметр используется в нашей ОС, вводим в терминал такую команду:

cat /proc/sys/vm/swappiness

Как видите, в нашем случае «свопинг» установлен как 60. Если же вы хотите поменять swappiness, можете воспользоваться оператором, цифра в конце которого и будет новым значением:

sudo sysctl vm.swappiness=25

Как и в случае с конфигурацией файла подкачки, данный параметр изначально будет временным и обнулится при следующей перезагрузке. Для того чтобы сделать его постоянным, в самом конце файла /etc/sysctl.conf записываем значение vm.swappiness=25.

vi /etc/sysctl.conf

vm.swappiness=25

Для этого можно воспользоваться, например, текстовым редактором, запущенным с администраторскими полномочиями.

Размер swap файла в Linux

Существует сразу несколько вариантов, позволяющих увеличить файл подкачки linux или уменьшить его. Однако, прежде чем их рассмотреть, необходимо напомнить об одном очень важном моменте:

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

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

sudo swapoff /swapfile

Вторым этапом меняем размер файла подкачки, воспользовавшись командой, приведенной ниже. При этом размер вашего swap файла нужно указать вместо параметра 2G (2 гигабайта):

sudo fallocate -l 2G /swapfile

Теперь форматируем полученный файл в файловую систему swap:

sudo mkswap /swapfile

А затем включаем его обратно:

sudo swapon /swapfile

При этом операционная система Linux позволяет использовать сразу несколько swap.

Как удалить файл подкачки в Linux

Если по каким-то причинам файл подкачки вам не нужен, можете удалить его. Для этого сначала надо отключить swap linux:

sudo swapoff /swapfile

А потом удаляем:

sudo rm /swapfile

Не забудьте установить права на вновь созданный файл подкачки так, как мы описывали это выше.

В заключение

Надеемся теперь концепция файла подкачки в Linux ясна вам на 100%. Можете переходить к практике и проверять наличие swap на вашем компьютере или ноутбуке, его настройке, созданию или даже удалению. Если в результате у вас останутся какие-то вопросы, предложения или замечания, можете задать их нам, воспользовавшись формой комментирования ниже.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Разрушая мифы о свопности

Обмен — это метод, при котором данные в оперативной памяти (ОЗУ) записываются в специальное место на жестком диске — раздел подкачки или файл подкачки — для освобождения ОЗУ.

В Linux есть параметр, называемый значением swappiness. Существует много путаницы в отношении того, что контролирует этот параметр. Наиболее распространенное неправильное описание подкачки — это то, что оно устанавливает порог для использования ОЗУ, и когда количество используемой ОЗУ достигает этого порога, начинается подкачка.

Это заблуждение, которое повторялось так часто, что теперь оно получило мудрость. Если (почти) все остальные скажут вам, что именно так работает подмена, почему вы должны верить нам, когда мы говорим, что это не так?

Просто. Мы собираемся доказать это.

Ваша оперативная память разделена на зоны

Linux не считает вашу оперативную память одним большим однородным пулом памяти. Он считает, что он разделен на ряд различных регионов, называемых зонами. Какие зоны присутствуют на вашем компьютере, зависит от того, является ли он 32-разрядным или 64-разрядным . Вот упрощенное описание возможных зон на компьютере с архитектурой x86 .

  • Прямой доступ к памяти (DMA) : это 16 МБ памяти. Зона получила свое название, потому что давным-давно существовали компьютеры, которые могли только осуществлять прямой доступ к памяти в этой области физической памяти.
  • Прямой доступ к памяти 32 : несмотря на свое название, прямой доступ к памяти 32 (DMA32) является зоной, встречающейся только в 64-битном Linux. Это 4 ГБ памяти. Linux, работающая на 32-битных компьютерах, может использовать DMA только для этого объема ОЗУ (если только они не используют ядро ​​с физическим расширением адреса (PAE)), то есть как зона получила свое имя. Хотя на 32-битных компьютерах он называется HighMem.
  • Нормальный : на 64-битных компьютерах нормальная память — это все ОЗУ объемом более 4 ГБ (примерно). На 32-битных машинах это оперативная память от 16 МБ до 896 МБ.
  • HighMem : это существует только на 32-битных компьютерах Linux. Это все ОЗУ выше 896 МБ, включая ОЗУ более 4 ГБ на достаточно больших машинах.

Значение PAGESIZE

ОЗУ выделяется в страницах, которые имеют фиксированный размер. Этот размер определяется ядром во время загрузки, определяя архитектуру компьютера. Обычно размер страницы на компьютере с Linux составляет 4 Кбайт.

Вы можете увидеть размер своей страницы с помощью команды getconf :

  getconf PAGESIZE 

getconf PAGESIZE

Зоны привязаны к узлам

Зоны привязаны к узлам. Узлы связаны с центральным процессором (ЦП) . Ядро будет пытаться выделить память для процесса, запущенного на ЦП, с узла, связанного с этим ЦП.

Концепция привязки узлов к процессорам позволяет устанавливать смешанные типы памяти на специализированных многопроцессорных компьютерах с использованием архитектуры неоднородного доступа к памяти .

Это все очень высокого класса. Средний компьютер с Linux будет иметь один узел, который называется ноль. Все зоны будут принадлежать этому узлу. Чтобы увидеть узлы и зоны на вашем компьютере, загляните в файл /proc/buddyinfo . Мы будем использовать less чтобы сделать это:

  less / proc / buddyinfo 

less / proc / buddyinfo в окне терминала

Это вывод 64-битного компьютера, на котором исследовалась эта статья:

  Узел 0, зона DMA 1 1 1 0 2 1 1 0 1 1 3
 Узел 0, зона DMA32 2 67 58 19 8 3 3 1 1 1 17 

Существует один узел, узел ноль. Этот компьютер имеет только 2 ГБ оперативной памяти, поэтому нет «нормальной» зоны. Есть только две зоны, DMA и DMA32.

Каждый столбец представляет количество доступных страниц определенного размера. Например, для зоны DMA32, чтение слева:

  • 2 : есть 2 из 2 ^ ( 0 * PAGESIZE) фрагментов памяти.
  • 67 : 67 из 2 ^ ( 1 * PAGE_SIZE) фрагментов памяти.
  • 58 : доступно 58 из 2 ^ ( 2 * PAGESIZE) фрагментов памяти.
  • И так далее, вплоть до…
  • 17 : есть 17 из 2 ^ ( 512 * СТРАНИЦ) частей.

Но на самом деле единственная причина, по которой мы смотрим на эту информацию — это видеть взаимосвязь между узлами и зонами.

Страницы файлов и анонимные страницы

Отображение памяти использует наборы записей таблицы страниц для записи, какие страницы памяти используются и для чего.

Отображения памяти могут быть:

  • Файл с резервной копией : Отображения с файловой поддержкой содержат данные, которые были прочитаны из файла. Это может быть любой файл. Важно отметить, что если система освободила эту память и ей нужно было снова получить эти данные, их можно будет снова прочитать из файла. Но если данные были изменены в памяти, эти изменения должны быть записаны в файл на жестком диске, прежде чем память будет освобождена. Если этого не произойдет, изменения будут потеряны.
  • Аноним : Анонимная память — это отображение памяти без файла или устройства, поддерживающего его. Эти страницы могут содержать оперативную память, запрашиваемую программами для хранения данных, или для таких вещей, как стек и куча . Поскольку за данными этого типа нет файлов, необходимо выделить специальное место для хранения анонимных данных. Это место — раздел подкачки или файл подкачки. Анонимные данные записываются для обмена перед освобождением анонимных страниц.
  • Резервное копирование устройства : устройства обрабатываются через файлы блочных устройств, которые можно рассматривать как файлы . Данные могут быть прочитаны и записаны в них. В отображении памяти, поддерживаемом устройством, хранятся данные с устройства.
  • Общий доступ : несколько записей таблицы страниц могут отображаться на одной странице ОЗУ. Доступ к ячейкам памяти через любое из отображений покажет те же данные. Различные процессы могут очень эффективно взаимодействовать друг с другом, изменяя данные в этих совместно наблюдаемых местах памяти. Совместно используемые записи сопоставлений являются распространенным средством достижения высокопроизводительных межпроцессных взаимодействий.
  • Копирование при записи : Копирование при записи — это метод ленивого размещения. Если запрашивается копия ресурса, уже находящегося в памяти, запрос удовлетворяется путем возврата сопоставления исходному ресурсу. Если один из процессов, «разделяющих» ресурс, пытается записать в него, ресурс должен действительно реплицироваться в памяти, чтобы можно было внести изменения в новую копию. Таким образом, выделение памяти происходит только при первой команде записи.

Для замены нам нужны только первые два списка: страницы файлов и анонимные страницы.

Swappiness

Вот описание перестановки из документации Linux на GitHub :

"This control is used to define how aggressive (sic) the kernel will swap memory pages. Higher values will increase aggressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.

The default value is 60."

Это звучит так, как будто своппинг становится интенсивнее. Интересно, что в нем говорится, что установка своппинга на ноль не отключает своп. Он указывает ядру не менять местами, пока не будут выполнены определенные условия. Но обмен может все же произойти.

Давайте копать глубже. Вот определение и значение по умолчанию vm_swappiness в файле исходного кода ядра vmscan.c :

/*
* From 0 .. 100. Higher means more swappy.
*/
int vm_swappiness = 60;

Значение своппинга может варьироваться от 0 до 100. Опять же, комментарий, безусловно, звучит так, как будто значение свопинга влияет на объем обмена, причем более высокая цифра ведет к большему обмену.

Далее в файле исходного кода мы видим, что новой переменной под названием swappiness присваивается значение, которое возвращается функцией mem_cgroup_swappiness() . Еще vm_swappiness трассировка через исходный код покажет, что значение, возвращаемое этой функцией — vm_swappiness . Так что теперь переменная swappiness установлена ​​равной любому значению vm_swappiness .

int swappiness = mem_cgroup_swappiness(memcg);

И немного дальше в том же файле исходного кода , мы видим это:

/*
* With swappiness at 100, anonymous and file have the same priority.
* This scanning priority is essentially the inverse of IO cost.
*/
anon_prio = swappiness;
file_prio = 200 - anon_prio;

Это интересно. Два отличных значения получены из swappiness . anon_prio и file_prio содержат эти значения. Когда один увеличивается, другой уменьшается, и наоборот .

Значение подкачки в Linux фактически устанавливает соотношение между двумя значениями.

Золотое сечение

Страницы файлов содержат данные, которые можно легко извлечь, если освободить эту память. Linux может просто прочитать файл снова. Как мы уже видели, если данные файла были изменены в оперативной памяти, эти изменения должны быть записаны в файл, прежде чем страница файла может быть освобождена. Но, так или иначе, файловая страница в оперативной памяти может быть переполнена чтением данных из файла. Так зачем добавлять эти страницы в раздел подкачки или файл подкачки? Если вам снова понадобятся эти данные, вы можете также прочитать их обратно из исходного файла вместо избыточной копии в пространстве подкачки. Таким образом, страницы файла не хранятся в разделе подкачки. Они «хранятся» обратно в исходном файле.

С анонимными страницами нет никакого основного файла, связанного со значениями в памяти. Значения на этих страницах были получены динамически. Вы не можете просто прочитать их обратно из файла. Единственный способ восстановить анонимные значения памяти страницы — это сохранить данные где-нибудь до освобождения памяти. И это то, что держит своп. Анонимные страницы, на которые вы будете ссылаться снова.

Но учтите, что как для файловых страниц, так и для анонимных страниц освобождение памяти может потребовать записи на жесткий диск. Если данные страницы файла или данные анонимной страницы изменились с момента последней записи в файл или для замены, необходима запись в файловую систему. Для извлечения данных потребуется чтение файловой системы. Оба типа восстановления страницы являются дорогостоящими. Попытка уменьшить ввод и вывод на жесткий диск за счет минимизации перестановки анонимных страниц только увеличивает объем ввода и вывода на жесткий диск, необходимый для обработки файловых страниц, записываемых и считываемых из файлов.

Как видно из последнего фрагмента кода, есть две переменные. Один называется file_prio для «приоритет файла», а другой называется anon_prio для «приоритет анонимный».

  • Переменная anon_prio установлена ​​в значение подкачки Linux.
  • Значение file_prio установлено на 200 минус значение anon_prio .

Эти переменные содержат значения, которые работают в тандеме. Если они оба установлены на 100, они равны. Для любых других значений anon_prio уменьшится со 100 до 0, а file_prio увеличится со 100 до 200. Два значения file_prio в сложный алгоритм, который определяет, работает ли ядро ​​Linux с предпочтением восстановления (освобождения) файловых страниц или анонимным страницы.

Вы можете думать о file_prio как о готовности системы освободить файловые страницы, а о anon_prio — о готовности системы освободить анонимные страницы. Чего эти значения не делают, так это устанавливают какой-либо триггер или порог, когда будет использоваться своп. Это решено в другом месте.

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

Когда своп фактически включается?

Мы установили, что значение подкачки в Linux устанавливает предпочтительный тип страниц памяти, которые будут сканироваться для возможного восстановления. Это хорошо, но что-то должно решить, когда своп собирается сработать.

Каждая зона памяти имеет верхний и нижний отметки. Это системные значения. Это проценты оперативной памяти в каждой зоне. Именно эти значения используются в качестве пороговых значений запуска свопа.

Чтобы проверить, какие у вас /proc/zoneinfo и нижние отметки уровня воды, загляните в файл /proc/zoneinfo с помощью этой команды:

  меньше / proc / zoneinfo 

less / proc / zoneinfo в окне терминала

Каждая из зон будет иметь набор значений памяти, измеренных в страницах. Вот значения для зоны DMA32 на тестовом компьютере. Низкая отметка составляет 13966 страниц, а верхняя отметка — 16759 страниц:

Значения водяного знака DMA32 в окне терминала

  • В нормальных условиях работы, когда объем свободной памяти в зоне падает ниже нижнего уровня зоны, алгоритм подкачки начинает сканирование страниц памяти в поисках памяти, которую он может восстановить, принимая во внимание относительные значения anon_prio и file_prio .
  • Если для Linux значение подкачки установлено равным нулю, подкачка происходит, когда объединенное значение файловых страниц и свободных страниц меньше верхней отметки.

Таким образом, вы можете видеть, что вы не можете использовать значение подкачки в Linux, чтобы влиять на поведение подкачки в отношении использования ОЗУ. Просто так не работает.

Что должно быть установлено Swapiness?

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

И вы должны иметь в виду, что подкачка не просто используется как механизм для освобождения оперативной памяти, когда у вас заканчивается свободное место в памяти. Своп является важной частью хорошо функционирующей системы, и без него для Linux становится очень трудно достичь разумного управления памятью.

Изменение значения подкачки в Linux имеет мгновенный эффект; вам не нужно перезагружаться. Таким образом, вы можете вносить небольшие корректировки и контролировать эффекты. В идеале вы должны делать это в течение нескольких дней с различными видами активности на вашем компьютере, чтобы попытаться найти наиболее подходящую для вас идеальную настройку.

Вот некоторые моменты для рассмотрения:

  • Попытка «отключить подкачку» путем установки значения подкачки в Linux на ноль просто переводит активность, связанную со свопом, на активность, связанную с файлами.
  • Если у вас устаревшие механические жесткие диски, вы можете попытаться уменьшить значение подкачки в Linux, чтобы сместить анонимную страницу и уменьшить отток разделов подкачки. Конечно, когда вы выключаете одну настройку, другая настройка увеличивается. Уменьшение оттока подкачки, вероятно, увеличит отток файловой системы. Но ваш компьютер может быть счастливее, предпочитая один метод другому. Действительно, единственный способ узнать наверняка — это попытаться увидеть.
  • Для одноцелевых серверов, таких как серверы баз данных, вы можете получить рекомендации от поставщиков программного обеспечения для баз данных. Очень часто эти приложения имеют свои собственные специально разработанные процедуры кеширования файлов и управления памятью, на которые вам лучше положиться. Поставщики программного обеспечения могут предложить значение перестановки Linux в соответствии со спецификацией машины и рабочей нагрузкой.
  • Для среднего пользователя настольного компьютера с относительно новым оборудованием? Оставь как есть.

Как установить значение подкачки в Linux

Прежде чем изменить значение своппинга, вам необходимо знать его текущее значение. Если вы хотите немного уменьшить его, вопрос немного меньше, чем что? Вы можете узнать с помощью этой команды:

  cat / proc / sys / vm / swappiness 

cat / proc / sys / vm / swappiness

Чтобы настроить значение подкачки, используйте команду sysctl :

  sudo sysctl vm.swappiness = 45 

sudo sysctl vm.swappiness = 45 в окне терминала

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

Фактически, если вы перезагрузите компьютер, значение подкачки вернется к значению по умолчанию, равному 60. Когда вы закончите экспериментировать и определились с новым значением, которое хотите использовать, вы можете сделать его постоянным при перезагрузках, добавив его в /etc/sysctl.conf Файл /etc/sysctl.conf . Вы можете использовать любой редактор, который вы предпочитаете. Используйте следующую команду для редактирования файла с помощью редактора nano :

  sudo nano /etc/sysctl.conf 

sudo nano /etc/sysctl.conf в окне терминала

Когда откроется nano , прокрутите до конца файла и добавьте эту строку. Мы используем 35 в качестве значения постоянного обмена. Вы должны заменить значение, которое вы хотите использовать.

  vm.swappiness = 35 

/Etc/sysctl.conf в редакторе нано в окне терминала

Чтобы сохранить изменения и выйти из nano , нажмите «Ctrl + O», нажмите «Enter» и нажмите «Ctrl + Z».

Управление памятью сложное

Управление памятью сложно. И именно поэтому для обычного пользователя обычно лучше оставить это ядру.

Легко думать, что вы используете больше оперативной памяти, чем вы. Такие утилиты, как top и free могут произвести неправильное впечатление. Linux будет использовать свободную оперативную память для различных своих целей, например для кэширования диска. Это искусственно увеличивает показатель «используемой» памяти и уменьшает показатель «свободной» памяти. Фактически, ОЗУ, используемое в качестве дискового кэша, помечается как «использованное» и «доступное», потому что оно может быть восстановлено в любое время, очень быстро.

Для непосвященных это может показаться, что своп не работает или что значение своппинга нужно изменить.

Как всегда, дьявол кроется в деталях. Или, в этом случае, демон. Демон обмена ядрами.

Место подкачки — это часть жесткого диска, которая используется при заполнении оперативной памяти. Пространство подкачки может быть выделенным разделом подкачки или файлом подкачки .

Когда в системе Linux заканчивается физическая память, неактивные страницы перемещаются из ОЗУ в область подкачки.

Swappiness — это свойство ядра Linux, которое устанавливает баланс между заменой страниц из физической памяти в пространство подкачки и удалением страниц из кеша страниц. Он в основном определяет, как часто система будет использовать пространство подкачки.

В этой статье объясняется, как изменить значение swappiness в системах Linux.

Проверка значения замены

Чтобы проверить текущее значение подкачки в вашей системе, используйте следующую команду cat :

cat /proc/sys/vm/swappiness

Значение swappiness по умолчанию в большинстве дистрибутивов Linux — 60:

60

Хотя значение подкачки 60 подходит для большинства пользователей, в некоторых случаях вам может потребоваться установить более низкое значение.

Еще одна команда, которую вы можете использовать для определения значения подкачки, — это sysctl :

sysctl vm.swappiness
vm.swappiness = 60

Изменение значения подкачки

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

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

Доступ к памяти подкачки происходит намного медленнее, чем прямой доступ к физической памяти. Более низкое значение параметра swappiness, скорее всего, улучшит общую производительность системы. Для обычной настольной установки рекомендуется значение 10. Для большинства серверов баз данных рекомендуется значение подкачки 0 или 1.

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

Например, чтобы установить значение swappiness на 10 во время выполнения, введите следующую команду от имени пользователя root или sudo :

sudo sysctl vm.swappiness=1

Чтобы сделать параметр подкачки постоянным при перезагрузке, откройте /etc/sysctl.conf текстовом редакторе :

sudo nano /etc/sysctl.conf

Найдите параметр vm.swappiness и измените его значение. Если этот параметр не существует, добавьте в файл следующую строку:

/etc/sysctl.conf

Выводы

Мы показали вам, как изменить значение параметра swappiness.

Если у вас есть отзыв, оставьте комментарий ниже.

I need a step-by-step, simple and easy way to configure swappiness.

I’d like to expound upon the answers already here by adding:

  1. A very concise summary of how to change the swappiness.
  2. Some quotes from the latest Linux kernel source code (see here for how to download it if interested) on what «swappiness» really means, and what its ranges really are.

So, here it goes:

1. How to configure swappiness

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

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

The above commands are not persistent across reboots. To make the setting persistent, you need to use sudo and edit the file at /etc/sysctl.conf to add your desired swappiness setting to the end of it. Example:

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

Add this to the end of «/etc/sysctl.conf»:

# my custom swappiness setting
vm.swappiness=0

If you choose to only edit that file to set your custom swappiness setting, rather than setting it with sudo sysctl vm.swappiness=0, then to activate your new setting as set in the file, you will need to either reboot or call the following command to reload the config file:

# 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

At the end of running either of the above commands, the terminal will print this to stdout:

vm.swappiness = 0

To see what your current settings are in /etc/sysctl.conf:

cat /etc/sysctl.conf

2. What is swappiness, straight from the Linux kernel developers’ mouths

Download the Linux source code yourself by following my instructions here: Where and how to get the official Linux kernel source code.

As shown in the Linux Stable repo by git blame Documentation/admin-guide/sysctl/vm.rst, this documentation was written by Peter W Morreale, Mauro Carvalho Chehab, and Johannes Weiner (see the kernel source code here) (emphasis added, & formatting slightly modified):

swappiness

==========

This control is used to define the rough relative IO cost of swapping
and filesystem paging, as a value between 0 and 200. At 100, the VM
assumes equal IO cost and will thus apply memory pressure to the page
cache and swap-backed pages equally; lower values signify more
expensive swap IO, higher values indicates cheaper.

Keep in mind that filesystem IO patterns under memory pressure tend to
be more efficient than swap’s random IO. An optimal value will require
experimentation and will also be workload-dependent.

The default value is 60.

For in-memory swap, like zram or zswap, as well as hybrid setups that
have swap on faster devices than the filesystem, values beyond 100 can
be considered. For example, if the random IO against the swap device
is on average 2x faster than IO from the filesystem, swappiness should
be 133 (x + 2x = 200, 2x = 133.33).

At 0, the kernel will not initiate swap until the amount of free and
file-backed pages is less than the high watermark in a zone.

So, values do not range between 0 and 100 anymore. As of this commit hash c843966c556d7 on Jun 3, 2020, the value now ranges from 0 to 200.

The commit hash 497a6c1b09902b22ceccc0f25ba4dd623e1ddb7d right before that stated this instead:

swappiness

==========

This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap. A value of 0 instructs the kernel not to
initiate swap until the amount of free and file-backed pages is less
than the high water mark in a zone.

The default value is 60.

The default swappiness value has been 60 going back at least to Linux kernel version v2.6.12-rc2, 18 years ago (as of 2005), as shown by git blame in the mm/vmscan.c file where it is set, here.

Which swappiness should I use?

I highly recommend vm.swappiness=0! It makes my machine run soooo much better. From my anecdote in my answer here:

I have found that setting swappiness to 0 significantly improves the performance of my system which has 32 GB RAM, a 64 GB swap file on a high-speed m.2 SSD, and which is continually running out of RAM.

With swappiness set to the default of 60, I’d regularly get 1 to 2 minute lockup periods while kswapd0 is running (as shown by top) to try to swap memory for some memory hog application like Chrome, Slack, Eclipse, or Google Meet (within Chrome). I’d start to get these lockups at 80% full RAM. The computer would be completely unusable during this time—unable even for me to type into a terminal or click on a menu.

Setting swappiness to 0 significantly helped!. I started not getting really high CPU usage until 90% RAM full, swap space would still get used plenty—but more efficiently, and when my RAM did get almost full my computer would become very sluggish, but still barely usable rather than completely unusable!

See some of my symptoms here, which I originally thought were due to a bug in Google Meet, but now think were due to memory swap making my computer slow: https://github.com/ElectricRCAircraftGuy/bug_reports/issues/3#issue-1177137900

On my system:

  • With vm.swappiness=60, I’d see 1 to 2 minutes of 100% CPU lockup starting at about 79% RAM usage, every 4 to 6 minutes, forever. This was particularly exacerbated and prominent when using Google Meet.
  • With vm.swappiness=0, that wouldn’t happen. I’d be fine at 80% RAM usage, and would start to see major sluggishness, but not total lockup like before, by 90% RAM usage.
    • Even with swappiness set to 0, I’d see some usage (a few MB) of swap used as early as 0 to 3% of RAM used, and I’d have heavy swap usage by 80% to 90% RAM used.

References:

  1. https://linuxize.com/post/how-to-change-the-swappiness-value-in-linux/ — where I learned most of the sysctl cmds above
  2. https://www.cyberciti.biz/faq/reload-sysctl-conf-on-linux-using-sysctl/ — where I learned the sysctl --system cmd above

Related:

  1. kswapd0 is taking a lot of cpu — useful, but this quote is totally wrong though:

    where 0 is the percent left out of 100 at which SWAP should be used (when you have 0% RAM left, SWAP will start taking in data).

  2. My answers—I needed this swappiness info. for them:

    1. *****Very useful—I reference this one a lot: Problem: Eclipse and the Eclipse indexer take up all my resources / CPU%
    2. Unix & Linux: what is the different between settings swappiness to 0 to swapoff

Понравилась статья? Поделить с друзьями:
  • Как изменить timeline framerate davinci resolve
  • Как изменить svg шрифт
  • Как изменить svchost
  • Как изменить textview kotlin
  • Как изменить sudoers file