SWAP для Linux

SWAP один из важных параметров для стабильной работы операционной системы Linux. Споров о том как правильно использовать в интернете существует масса. Для правильной настройки надо иметь понимание для чего используется ваша система.
Содержимое
Введение
Постараюсь коротко рассказать основные моменты которые надо учитывать и дать практические советы проверенные на личном опыте.
Нужен SWAP или нет?
Однозначно нужен! Можно обойтись и без него, но тогда имейте в виду, что:
- SWAP используется при организации режима сна и при его отсутствии про этот режим можно забыть,
- Если SWAP отсутствует и память будет исчерпана тогда компьютер зависнет и потребуется выполнять полный сброс (hard reset). У меня был случай когда браузер Chrome скушал всю память и повесил систему.
Если в первом случае вы можете отказаться от использования режима сна, то во втором никто и никогда не даст вам гарантии что какая-то используемая вами программа не даст сбой и заполнив всю память не повесит систему.
Размер SWAP
Советов по размеру множество, но мы остановимся на советах разработчиков Red Hat (CentOS):
- Если памяти < 2G то необходимый объем S = M *2
- Если памяти > 2G то необходимый объем S = M + 2
При современных объемах жестких дисков я бы не стал жалеть места на размер SWAP и уверяю вас что экономия места в данном случае может привести к гораздо большим проблемам.
Варианты размещения SWAP
Вариантов несколько:
- на разделе диска,
- в файле,
- или в оперативной памяти использую zRAM.
Исторически в Linux SWAP размещался на разделе, но в современных дистрибутивах производительность SWAP-файла не уступает SWAP-разделу и это весьма радует.
SWAP-раздел
Когда вы точно знаете, что размер оперативной памяти меняться не будет и вы точно уверены в размере SWAP разумно выделить раздел при установке системы.
SWAP-файл
Использование файла очень удобно особенно когда нет точного понимания какие будут окончательные аппаратные параметры системы. Файл можно создать в любом удобном месте и необходимым вам размером. Ниже я расскажу как это сделать.
ZRAM и ZSWAP
Вариант с использованием этих вариантов требует наличие хорошего опыт в использовании Linux систем. На мой взгляд данный способ имеет смысл использовать с хорошим знанием системы на которой это будет работать.
ZRAM — это модуль ядра Linux, позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз. ZRAM создает сжатое блочное устройство в ОЗУ которое чаще всего используется как swap. При этом степень сжатия данных получается в среднем 3:1. Это означает что на 1 гигабайт подкачки будет использовано в 333 мегабайт физической памяти.
ZSWAP — отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные. По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит свопинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш.
Проверка наличия SWAP
Проверка наличие:
1
|
$ swapon -s
|
Если пусто, значит его нет.
Можно проверить используя утилиту htop.
Создание SWAP-файла
Создадим файл c именем swap размером 4 G в папке корне системы /:
1
2
3
4
|
$ sudo dd if=/dev/zero of=/swap.img bs=1024 count=4000000
4000000+0 записей получено
4000000+0 записей отправлено
4096000000 байт (4,1 GB, 3,8 GiB) скопирован, 45,6991 s, 89,6 MB/s
|
Форматируем файл в формат свопа:
1
2
3
4
|
$ sudo mkswap /swap.img
mkswap: /swap.img: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 3,8 GiB (4095995904 bytes)
без метки, UUID=6a46beca-c117-4c53-8b05-3641fc85b7e1
|
Подключаем файл к системе:
1
2
|
$ sudo swapon /swap.img
swapon: /swap.img: insecure permissions 0644, 0600 suggested.
|
Проверяем результат работы:
1
2
3
|
$ sudo swapon -s
Имя файла Тип Размер Исп-но Приоритет
/swap.img file 3999996 0 -2
|
Сделаем чтобы swap монтировался при загрузке. Для этого добавляем в fstab необходимый параметр:
1
2
3
4
|
$ nano /etc/fstab
# Подключим swap при загрузке
/swap.img swap swap defaults 0 0
|
В конце файла делаем переход на новую строку!
Сохраняем файл и перезагружаемся.
1
|
$ sudo reboot
|
Проверяем:
1
2
3
|
$ swapon -s
Имя файла Тип Размер Исп-но Приоритет
/swap.img file 3999996 0 -2
|
Оптимизация SWAP
Оптимизация сводится к настройке двух параметров.
Параметр ядра swappiness
Параметры от 0 до 100. При значениях близких к нулю, ядро не переносит данные на диск, если в этом нет крайней необходимости.
Определение используемого параметра swappiness:
1
2
|
$ cat /proc/sys/vm/swappiness
30
|
Исходя из действующего значения принимаете решение об изменении. Изменим значение до 10:
1
2
|
$ sudo sysctl -w vm.swappiness=10
vm.swappiness = 10
|
параметр -w для сохранения этой настройки после перезагрузки.
Параметр ядра vfs_cache_pressure
Показывает системе какое время нужно хранить открытые. Значение по умолчанию 100. При значениях близких к нулю, ядро будет держать их в памяти как можно дольше.
Определение используемого параметра vfs_cache_pressure:
1
2
|
$ cat /proc/sys/vm/vfs_cache_pressure
100
|
Исходя из действующего значения принимаете решение об изменении. Изменим значение до 1000:
1
2
|
$ sudo sysctl -w vm.vfs_cache_pressure=1000
vm.vfs_cache_pressure = 1000
|
Значительное увеличение vfs_cache_pressure за пределы 100 может отрицательно сказаться на производительности. Для восстановления кода необходимо использовать различные блокировки для поиска свободных каталогов и объектов inode. При vfs_cache_pressure = 1000 он будет искать в десять раз больше свободных объектов, чем есть.
Вывод
Внимательней подходите к настройке SWAP так как в будущем будет меньше проблем при обслуживании системы. Не уделяя должного внимания на такой кажущийся пустяк я не раз получал сюрпризы при работе Linux.