Сжатие оперативной памяти linux

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)

Читайте также:  Назначение шкалы времени windows movie maker

Вручную

Создание файла подкачки

Использовать под суперпользователем 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 открыть файл по сети

Источник

Сжатие оперативной памяти linux

Когда оперативная память заканчивается, компьютер становится очень медленным, так как идёт обращение к файлу подкачки (swap) на жестком диске. Для решения этой проблемы придуман модуль zswap. По умолчанию он в операционной системе Linux отключен, но можно его задействовать.

Почему мне потребовалось использовать zswap? Установлены 2 планки по 2 Гбайт, но физически материнская плата поддерживает лишь 3 Гбайт — таково ограничение материнской платы на базе чипсета Intel 82945. На другом компьютере, тоже под Linux, установлены планки ОЗУ 1 Гбайт и 2 Гбайт (всего 3 Гбайт), их обычно хватает для работы в Интернет. Но иногда при открытии больших PDF файлов или картинок ОЗУ может заканчиваться.

Выбор: zram или zswap

zram применяют для постоянного сжатия страниц — в памяти выделяют раздел swap, в который происходит выгрузка сжатых страниц памяти как в обычный файл подкачки, но в быстром ОЗУ.

zswap не выделяет раздел в памяти — лишь динамический объем (пул) в ОЗУ, в который попадают лишь те страницы, которые являются кандидатами для попадания в физический файл swap. Перед помещением в пул страницы также сжимаются.

Поскольку объём памяти достаточно большой, мне не нужно постоянное сжатие ОЗУ, как это делает zram. Требуется обеспечить отсутствие свопинга на диск в случае, когда ОЗУ близко к заполнению.

Решение:

  1. В строке загрузчика 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=»»

  1. Обновил конфигурацию GRUB:

sudo update-grub

  1. Разрешил загрузку модулей для расширенного сжатия

sudo nano /etc/initramfs-tools/modules

lz4
lz4_compress
z3fold

и сохранил изменения.

  1. Запустил перегенерацию (сборку) ядра:

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 работает только с оперативной памятью.

Читайте также:  Windows live games error

Пример настройки. Чтобы настроить одно сжатое 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 или нет?

Однозначно нужен! Можно обойтись и без него, но тогда имейте в виду, что:

  1. SWAP используется при организации режима сна и при его отсутствии про этот режим можно забыть,
  2. Если 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 на диске, в ОЗУ хранится только сжатый кэш.

Источник

Оцените статью