- Swap (Русский)
- Contents
- Пространство подкачки
- Раздел подкачки
- Активация используя systemd
- Отключение подкачки
- Файл подкачки
- Вручную
- Создание файла подкачки
- Удаление файла подкачки
- Автоматически
- systemd-swap
- Подкачка с USB устройства
- Шифрование подкачки
- Производительность
- Swappiness
- VFS cache pressure
- Приоритет
- Использование zswap или zram
- Чередование
- Сжатие оперативной памяти linux
- Выбор: zram или zswap
- Решение:
- Сжатие оперативной памяти linux
- SWAP для Linux
- Введение
- Нужен SWAP или нет?
- Размер SWAP
- Варианты размещения SWAP
- SWAP-раздел
- SWAP-файл
- ZRAM и ZSWAP
Swap (Русский)
Эта страница дает ознакомление с пространством подкачки и подкачкой страниц в GNU/Linux. Охватывает создание, активацию файлов и разделов подкачки.
Linux делит свою физическую RAM (оперативную память) на кусочки памяти, называемые страницами. Подкачка (swapping) это процесс, когда страницы памяти копируются на предварительно сконфигурированное пространство на жестком диске, называемое пространством подкачки, чтобы освободить эту страницу из памяти. Суммарный размер оперативной памяти и пространства подкачки это количество доступной виртуальной памяти.
Поддержка подкачки обеспечивается ядром Linux и утилитами в пользовательском пространстве из util-linux пакета.
Contents
Пространство подкачки
Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей, расширить виртуальную память за пределы установленной оперативной памяти (RAM), а также для сохранения данных при гибернации (suspend-to-disk).
Иногда стоит включать Swap в зависимости от установленной оперативной памяти и количества требований для запуска желаемых программ. Если количество оперативной памяти меньше требуемого, тогда стоит включить подкачку. Это позволяет избежать состояния нехватки памяти (OOM), при котором механизм ядра Linux, OOM Killer, будет автоматически пытаться освободить память, убивая процессы. Чтобы увеличить количество виртуальной памяти до требуемого уровня, добавьте необходимую разницу как пространство подкачки. Например, если программа требует 7,5 GB памяти для запуска, а у вас установлено 4 GB оперативной памяти, добавьте разницу 3,5 GB как подкачку. В будущем добавляйте больше пространства к подкачке, учитывая требования. Это вопрос личных предпочтений если вы считаете, что программы должны быть убиты, вместо включения подкачки. Самый большой недостаток в подкачке это снижение производительности, см. раздел #Производительность
Для проверки статуса подкачки, используйте:
free также покажет недостаток памяти, который может быть исправлен включением или увеличением подкачки.
Раздел подкачки
Раздел подкачки может быть создан различными GNU/Linux утилитами разметки. Разделы подкачки обычно обозначаются как тип 82 . Хотя есть возможность использовать разные типы как подкачку, рекомендуется использовать тип 82 , в большинстве случаев systemd, будет автоматически определять его и монтировать (см. ниже)
Для установки раздела как область Linux подкачки, можно использовать mkswap . Например:
Для подключения устройства как подкачку:
Чтобы подключить этот раздел подкачки при загрузке, добавьте запись в fstab:
где может быть получен из команды:
Активация используя systemd
Активация разделов подкачки в systemd базируется на двух различных механизмах. Оба исполняются в /usr/lib/systemd/system-generators . Генераторы запускаются при старте системы и создают нативные systemd юниты для монтирования. Первый systemd-fstab-generator , читает fstab, чтобы генерировать юниты, включая юнит для подкачки. Второй systemd-gpt-auto-generator , осматривает корневой диск, чтобы генерировать юниты. Это операция проходит только на GPT дисках и может идентифицировать разделы подкачки по их тип коду 82 .
Отключение подкачки
Чтобы деактивировать определенное пространство подкачки:
Также можно использовать -a ключ, чтобы деактивировать все пространства подкачки.
С тех пор, как systemd управляет подкачкой, она вновь будет активирована при старте системы, для долговременного отключения автоматической активации найденных пространств подкачки, выполните systemctl —type swap , чтобы найти связанные со .swap юниты и замаскируйте (systemctl mask юнит) их.
Файл подкачки
Как альтернатива к созданию целого раздела, файл подкачки даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если дисковое пространство ограничено (например, небольшие SSD)
Вручную
Создание файла подкачки
Использовать под суперпользователем fallocate , чтобы создать файл подкачки размером на свой выбор (M = Mebibytes, G = Gibibytes). Например создание 512 MiB файла подкачки:
Установите права доступа (всеми читаемый файл подкачки это огромная локальная уязвимость)
После создания файла нужного размера, форматируйте его в подкачку:
Активируйте файл подкачки:
В завершении, отредактируйте fstab, добавив запись для файла подкачки:
Удаление файла подкачки
Чтобы удалить файл подкачки, сначала нужно отключить подкачку, а затем файл может быть удален:
В завершении, удалите соответствующую запись из /etc/fstab .
Автоматически
systemd-swap
Установить systemd-swap пакет. Установить swapfc_enabled=1 в Swap File Chunked разделе файла /etc/systemd/swap.conf . Start/enable systemd-swap сервис. Посетить страницу авторов на GitHub для получения подробностей и установить рекомендуемую конфигурацию.
Подкачка с USB устройства
Благодаря модульности, предлагаемой Linux, мы можем иметь множество разделов подкачки на различных устройствах. Если у вас полностью заполнен жесткий диск, то можно использовать USB устройство как временный раздел подкачки. Однако, этот метод имеет серьёзные недостатки:
- USB устройство медленнее чем жесткий диск
- Flash память имеет ограниченное количество циклов записи. Использование его как раздела подкачки, может быстро убить его.
Чтобы добавить USB устройство как подкачку, сначала необходимо разметить USB флешку для подкачки как описано в секции #Раздел подкачки.
Далее откройте /etc/fstab и добавьте
в опции монтирования первоначальной записи подкачки, таким образом USB подкачка будет иметь приоритет записи над старым разделом.
Данная инструкция будет работать и для других устройств хранения, таких как SD карты и т.д.
Шифрование подкачки
Производительность
Операции подкачки как правило существенно медленнее чем непосредственный доступ к RAM. Отключение подкачки полностью для повышения производительности, иногда может привести к ухудшению, поскольку это уменьшает доступную память для VFS кеша, вызывая более частые и дорогостоящие операции ввода/вывода.
Значения подкачки можно настроить, чтобы помочь производительности:
Swappiness
Swappiness sysctl параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку наперёд. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах.
Чтобы проверить текущее значение swappiness:
Чтобы временно установить значение swappiness:
Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл sysctl
Чтобы проверить и больше узнать, почему оно так работает, посмотрите эту статью.
VFS cache pressure
Другой sysctl параметр, который действует на производительность подкачки это vm.vfs_cache_pressure , он контролирует склонность ядра к применению памяти, которая используется для кэширования VFS caches, напротив кэширования страниц и подкачки. Увеличение этого значения увеличивает коэффициент с которым VFS caches применяется[2] [устаревшая ссылка 2020-08-06] . Для подробной информации смотри документацию ядра Linux.
Приоритет
Если у вас больше одного файла или раздела подкачки, вы должны учитывать присвоение приоритетного значения (от 0 до 32767) для каждой области подкачки. Система будет использовать области подкачки с высоким приоритетом, перед использованием областей с низким приоритетом. Например, если у вас быстрый диск ( /dev/sda ) и медленный ( /dev/sdb ), назначьте высокий приоритет для подкачки расположенной на быстром устройстве. Приоритет может быть назначен в fstab как pri параметр:
Или как параметр в swapon —priority
Если две или более областей будут иметь одинаковый приоритет и он будет самым высоким из доступным приоритетов, то страницы будут распределяться по кругу между областями.
Использование zswap или zram
Zswap это особенность ядра Linux, обеспечивающая сжатие обратного кэша для страниц подкачки. Она увеличивает производительность и уменьшает операции ввода/вывода. ZRAM создаёт виртуальный сжатый файл подкачки в памяти, как альтернатива файлу подкачки на диске.
Чередование
Нет необходимости использовать RAID для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в /etc/fstab . Для подробной информации смотри The Software-RAID HOWTO.
Источник
Сжатие оперативной памяти linux
Когда оперативная память заканчивается, компьютер становится очень медленным, так как идёт обращение к файлу подкачки (swap) на жестком диске. Для решения этой проблемы придуман модуль zswap. По умолчанию он в операционной системе Linux отключен, но можно его задействовать.
Почему мне потребовалось использовать zswap? Установлены 2 планки по 2 Гбайт, но физически материнская плата поддерживает лишь 3 Гбайт — таково ограничение материнской платы на базе чипсета Intel 82945. На другом компьютере, тоже под Linux, установлены планки ОЗУ 1 Гбайт и 2 Гбайт (всего 3 Гбайт), их обычно хватает для работы в Интернет. Но иногда при открытии больших PDF файлов или картинок ОЗУ может заканчиваться.
Выбор: zram или zswap
zram применяют для постоянного сжатия страниц — в памяти выделяют раздел swap, в который происходит выгрузка сжатых страниц памяти как в обычный файл подкачки, но в быстром ОЗУ.
zswap не выделяет раздел в памяти — лишь динамический объем (пул) в ОЗУ, в который попадают лишь те страницы, которые являются кандидатами для попадания в физический файл swap. Перед помещением в пул страницы также сжимаются.
Поскольку объём памяти достаточно большой, мне не нужно постоянное сжатие ОЗУ, как это делает zram. Требуется обеспечить отсутствие свопинга на диск в случае, когда ОЗУ близко к заполнению.
Решение:
- В строке загрузчика GRUB, которая отвечает за передачу параметров ядра, указываю вызов модуля ZSwap:
sudo nano /etc/default/grub
исправил строку GRUB_CMDLINE_LINUX_DEFAULT на следующую:
GRUB_CMDLINE_LINUX_DEFAULT=»noresume zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 zswap.max_pool_percent=50″
GRUB_CMDLINE_LINUX=»»
- Обновил конфигурацию GRUB:
sudo update-grub
- Разрешил загрузку модулей для расширенного сжатия
sudo nano /etc/initramfs-tools/modules
lz4
lz4_compress
z3fold
и сохранил изменения.
- Запустил перегенерацию (сборку) ядра:
sudo update-initramfs -u
Перезагрузка системы
sudo reboot
До настройки модуля сжатия ОЗУ не было.
dmesg | grep zswap
После первого включения без модулей lz4, lz4compress команда dmesg выводила
[ 2.690663] zswap: loaded using pool lzo/zbud
После окончательной настойки с включением модуя lz4, lz4compress и z3fold вывод команды dmesg следующий:
[ 2.734842] zswap: loaded using pool lz4/z3fold
Источник
Сжатие оперативной памяти linux
Если вы не знаете, почему SWAP нужен даже если вам хватает объёма RAM, настоятельно рекомендую прочитать эту статю:
https://habrahabr.ru/company/flant/blog/348324 (https://vk.com/multi_linux_community?w=wall-114916478..).
И так, мы выяснили, почему SWAP нужен всем, но это не отменят того, что HDD работают медленнее всех прочих видов памяти, поэтому плохо подходят для таких целей, а SSD имеют ограниченный ресурс перезаписей, поэтому использование SWAP на них будет приводить к ускоренному их износу.
Поэтому если у вас достаточно большой объём RAM, вы можете разместить ваш SWAP в RAM. Тогда это уже будет называться ZRAM. Это даст вам наивысшую скорость работы подкачки, потому что RAM является самым быстрым видом памяти в компьютере и отсутствие необходимости для SWAP использовать SSD и/или HDD.
Модуль ядра zram (ранее называемый compcache) обеспечивает сжатое блочное устройство в ОЗУ. Если вы используете его в качестве устройства подкачки, оперативная память сможет вмещать в себе гораздо больше информации, поскольку эта информация будет сживаться на лету, но из-за этого нагрузка на CPU станет больше, чем обычно. Тем не менее, это намного быстрее, чем использование жесткого диска в качестве SWAP. Если система часто обращается к подкачке (SWAP), это может улучшить отзывчивость. Использование ZRAM также является хорошим способом сокращения количества циклов чтения/записи на диск из-за обмена данными со SWAP на SSD, либо на HDD.
Аналогичные преимущества (при одинаковых затратах) могут быть достигнуты с использованием zswap, а не zram. Эти двое, как правило, схожи в своём предназначении, но работают они несколько по-разному: zswap работает как сжатый кеш RAM, но они оба не требуют (и не позволяют) расширенной конфигурации пользовательского пространства. Кроме того, zswap работает только в паре со swap на диске, а zram работает только с оперативной памятью.
Пример настройки. Чтобы настроить одно сжатое zram-устройство lz4 с емкостью 32 ГБ и приоритетом выше обычного (только для текущего сеанса):
# modprobe zram
# echo lz4 > /sys/block/zram0/comp_algorithm
# echo 32G > /sys/block/zram0/disksize
# mkswap —label zram0 /dev/zram0
# swapon —priority 100 /dev/zram0
Чтобы снова отключить его, перезагрузитесь или выполните:
Источник
SWAP для Linux
SWAP один из важных параметров для стабильной работы операционной системы Linux. Споров о том как правильно использовать в интернете существует масса. Для правильной настройки надо иметь понимание для чего используется ваша система.
Введение
Постараюсь коротко рассказать основные моменты которые надо учитывать и дать практические советы проверенные на личном опыте.
Нужен SWAP или нет?
Однозначно нужен! Можно обойтись и без него, но тогда имейте в виду, что:
- SWAP используется при организации режима сна и при его отсутствии про этот режим можно забыть,
- Если SWAP отсутствует и память будет исчерпана тогда компьютер зависнет и потребуется выполнять полный сброс (hard reset). У меня был случай когда браузер Chrome скушал всю память и повесил систему.
Если в первом случае вы можете отказаться от использования режима сна, то во втором никто и никогда не даст вам гарантии что какая-то используемая вами программа не даст сбой и заполнив всю память не повесит систему.
Размер SWAP
Советов по размеру множество, но мы остановимся на советах разработчиков Red Hat (CentOS):
- Если памяти 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 на диске, в ОЗУ хранится только сжатый кэш.
Источник