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 |
В конце файла делаем переход на новую строку!
Сохраняем файл и перезагружаемся.
1 |
$ sudo reboot |
Проверяем:
1 2 3 |
$ swapon -s Имя файла Тип Размер Исп-но Приоритет /swap.img file 3999996 0 -2 |
Оптимизация SWAP
Оптимизация сводится к настройке двух параметров.
Параметр ядра swappiness
Параметры от 0 до 100. При значениях близких к нулю, ядро не переносит данные на диск, если в этом нет крайней необходимости.
Определение используемого параметра swappiness:
1 2 3 |
$ cat /proc/sys/vm/swappiness 30 |
Исходя из действующего значения принимаете решение об изменении. Изменим значение до 10:
1 2 3 |
$ sudo sysctl -w vm.swappiness=10 vm.swappiness = 10 |
параметр -w для сохранения этой настройки после перезагрузки.
Параметр ядра vfs_cache_pressure
Показывает системе какое время нужно хранить открытые. Значение по умолчанию 100. При значениях близких к нулю, ядро будет держать их в памяти как можно дольше.
Определение используемого параметра vfs_cache_pressure:
1 2 3 |
$ cat /proc/sys/vm/vfs_cache_pressure 100 |
Исходя из действующего значения принимаете решение об изменении. Изменим значение до 1000:
1 2 3 |
$ sudo sysctl -w vm.vfs_cache_pressure=1000 vm.vfs_cache_pressure = 1000 |
Значительное увеличение vfs_cache_pressure за пределы 100 может отрицательно сказаться на производительности. Для восстановления кода необходимо использовать различные блокировки для поиска свободных каталогов и объектов inode. При vfs_cache_pressure = 1000 он будет искать в десять раз больше свободных объектов, чем есть.
Вывод
Внимательней подходите к настройке SWAP так как в будущем будет меньше проблем при обслуживании системы. Не уделяя должного внимания на такой кажущийся пустяк я не раз получал сюрпризы при работе Linux.
Thanks for excellent info I was looking for this info for my mission.