ZRAM/ZSWAP: различия между версиями
Дым (обсуждение | вклад) (→ZSWAP) |
Дым (обсуждение | вклад) (→ZSWAP) |
||
Строка 7: | Строка 7: | ||
В текущих сборках ядра в репозитории ALT технология ZSWAP по умолчанию не включена (от root): | В текущих сборках ядра в репозитории ALT технология ZSWAP по умолчанию не включена (от root): | ||
{{cmd|# grep -i zswap_default /boot/config-*-un-def-alt1}} | {{cmd|# grep -i zswap_default /boot/config-*-un-def-alt1}} | ||
/boot/config-5.10.163-std-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set | /boot/config-5.10.163-std-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set | ||
Строка 12: | Строка 13: | ||
/boot/config-6.4.4-un-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set | /boot/config-6.4.4-un-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set | ||
Включён ли ZSWAP, видно по содержимому {{path|/sys/module/zswap/parameters/enabled}} — '''N''' (по умолчанию), либо '''Y''' (да). | Включён ли ZSWAP, видно по содержимому {{path|/sys/module/zswap/parameters/enabled}} — '''N''' (по умолчанию), либо '''Y''' (да). Включить можно параметром ядра при загрузке, но вовсе не обязательно — достаточно прописать в этот файл правильную букву: | ||
{{cmd|# echo Y >/sys/module/zswap/parameters/enabled}} | |||
Юнит запуска/перезапуска/остановки: | Юнит запуска/перезапуска/остановки: |
Версия от 09:01, 21 июля 2023
ZSWAP
Модуль ядра Linux, который сжимает данные, перехватывая попытки записи страниц памяти в swap-раздел на диске. Интегрирован в поставку ядра начиная с версии 3.11, использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API.
Увеличивает скорость подкачки страниц памяти в системе путём предотвращения выгрузки их на физический носитель, сжимая страницы и размещая их в оперативке до тех пор, пока не появится необходимость использовать реальный файл подкачки на накопителе. Фактически выступает кэшем страниц между памятью и разделом подкачки. Страницы, выгружаемые в реальный раздел, не сжимаются. За счет того, что сжатая страница кэшируется в памяти и даже может быть никогда не выгружена в реальный раздел подкачки, уменьшается количество операций ввода-вывода, а вместе с этим — износ физических носителей, что особенно актуально для SSD.
В текущих сборках ядра в репозитории ALT технология ZSWAP по умолчанию не включена (от root):
# grep -i zswap_default /boot/config-*-un-def-alt1
/boot/config-5.10.163-std-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set /boot/config-6.1.37-un-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set /boot/config-6.4.4-un-def-alt1:# CONFIG_ZSWAP_DEFAULT_ON is not set
Включён ли ZSWAP, видно по содержимому /sys/module/zswap/parameters/enabled — N (по умолчанию), либо Y (да). Включить можно параметром ядра при загрузке, но вовсе не обязательно — достаточно прописать в этот файл правильную букву:
# echo Y >/sys/module/zswap/parameters/enabled
Юнит запуска/перезапуска/остановки:
развернуть/lib/systemd/system/zswap.service |
---|
Посмотреть текущие настройки и статистику можно скриптом[1], разместив его по доступному для рута пути, соответствующему значению в юните:
развернуть/usr/bin/zswap |
---|
развернутьПример вывода скрипта |
---|
ZRAM
Модуль ядра Linux, ранее известный как compcache. Создаёт в оперативной памяти сжатое блочное устройство (другими словами, RAM-диск со сжатием данных «на лету»), которое может использоваться, например, как устройство подкачки страниц, хранения временных файлов (/tmp) или же просто как RAM-диск общего назначения. Использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API — чаще всего LZO или LZ4.
Хотя стоимость оперативной памяти сейчас относительно низкая, ZRAM всё же даёт преимущество на компьютерах с малым количеством ОЗУ, при виртуализации и во встраиваемых системах, использующих флеш-память с ограниченным числом циклов перезаписи. Скорость обмена с оперативной памятью выше, чем с жёстким диском, поэтому ZRAM, с учётом сжатия, как правило, позволяет повысить производительность системы в целом. При этом использование алгоритмов сжатия увеличивает нагрузку на центральный процессор, но освобождает значительное количество ОЗУ по сравнению с использованием обычного RAM-диска.
ZRAM часто путают со сходным модулем zswap (см. выше), который сжимает данные, перехватывая попытки записи страниц памяти в swap-раздел на диске. Но в отличие от zswap, использовавшееся в качестве раздела подкачки zram-устройство до версии ядра 4.14 не имело возможности выгружать страницы памяти в какое-либо резервное хранилище. Начиная с указанной версии, для zram возможно указать любое другое блочное устройство в качестве резервного хранилища, куда могут выгружаться несжимаемые/неиспользуемые страницы памяти. При этом выгрузка страниц в резервное хранилище происходит в несжатом виде и — в отличие от ZSWAP — только по команде администратора системы.
Недостатки zram как раздела подкачки
При наличии в системе нескольких разделов подкачки zram-устройство, использующееся в качестве раздела подкачки страниц памяти, будет иметь более высокий приоритет, таким образом все выгружаемые страницы попадут в первую очередь в zram-устройство. При переполнении этого раздела вновь выгружаемые страницы будут попадать в следующие, более медленные, swap-разделы, в результате чего растёт вероятность возникновения LRU-инверсии.
Таким образом, использование zram-устройства в качестве раздела подкачки страниц имеет смысл при отсутствии в системе разделов подкачки других типов.
Настройка
В дистрибутиве уже есть пакет по фамилии alterator-zram-swap
для работы этого типа оптимизации памяти, но он:
- несколько выморочно высчитывает желаемый размер сжатого свопа;
- не учитывает уже, возможно, задействованной и несовместимой с ним технологии
zswap
(см. п. выше); - обременён двумя отдельными скриптами запуска и останова службы, когда достаточно одного на всё про всё.
Пакет, в общем-то, и не нужен: достаточно всего пары файлов — юнита и скрипта к нему. Ниже приведён мой вариант обоих, не из пакета.
Юнит:
развернуть/lib/systemd/system/zram-swap.service |
---|
Скрипт[2]:
развернуть/usr/bin/zram-swap |
---|
О скриптах
- ↑ Позволяет включать/выключать zswap, если тому не препятствует запущенный zram-swap или отсутствие задействованного своп-раздела.
- ↑ Переменные из шапки скрипта про долю отжираемой под своп оперативки COEFF и алгоритм сжатия COMPRESS можно вынести в отдельный конфиг /etc/sysconfig/zram-swap и рулить ими оттуда.