Улучшение производительности 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
Ссылки на материалы: