Улучшение производительности SWAP

Чтобы улучшить производительность системы рекомендуется два варианта:

  1. Установка планировщика BFQ
  2. Уменьшить частоту использования swap

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

Анонимная память - это данные приложений, которые они хранят в памяти. Перенос в swap редкоиспользуемой анонимной памяти может повышать производительность системы, потому что RAM будет использоваться для текущих задач, и не будет хранить редко используемые данные.

Помимо анонимной памяти, есть еще файловая память, выделенная для кэширования файлов, для ускорения работы с файловой системой диска. Простыми словами, при работе с файлом, его содержимое переносится в оперативную память. Когда RAM памяти становится мало, файловый кэш сразу сбрасывается на диск, т.е. физически вносятся изменения в файлы, которые были отредактированы. Файловый кэш не нужно переносить в swap.

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

anon_prio = vm.swappiness
file_prio = 200 - anon_prio

Значение swappiness=1 приведет к тому, что сначала будет cбрасываться файловый кэш на диск, а затем выгружаться анонимная память в swap. Параметр swappiness=100, будет означать, что одинаковый приоритет у файлового кэша и анонимной памяти. Слишком высокое значение swappiness, будет означать что сначала освобождается анонимная память в swap, а затем сбрасываться файловый кэш, что может привести к тормозам и некорректной работе системы.

Не рекомендуется ставить значение swappiness=0, т.к. оно приводит к отключению алгоритма вытеснения страниц в swap, до тех пор, пока не наступит состояние конкуренции за память. Поэтому рекомендуется поставить значение 1.

По умолчанию это значение равно 60.

Если у вас swap на HDD диске, то рекомендуется уменьшить приоритет анонимной памяти, создайте файл /etc/sysctl.d/10-swap.conf со следующим содержимым:

vm.swappiness = 10

Если у вас swap на SSD диске, то рекомендуется установить равный приоритет анонимной памяти и файловой.

vm.swappiness = 100

Рекомендуется создавать swap размером 2 гб и более.

Вообще постоянный сброс файлового кэша на диск, тоже является проблемой, т.к. возрастает I/O. Поэтому если у вас начинает работать swap, то стоит подумать об увеличении RAM. И желательно размер RAM подбирать так, что при обычной рабочей нагрузки 20% RAM должны быть свободны.

Чтобы освободить файловый кэш, существует команда:

echo 3 > /proc/sys/vm/drop_caches

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

sync -f

Ссылки на материалы:

  1. Установка планировщика I/O BFQ на Ubuntu 18.04
  2. В защиту swap'а: распространенные заблуждения
  3. Нужен ли swap в Linux?