zswap (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
zswap
. Дата последней синхронизации: 7 декабря 2024. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Параметры ядра
mkinitcpio (Русский)
zswap
— это функция ядра, предоставляющая сжатый кэш в оперативной памяти для страниц подкачки. Она перехватывает страницы памяти, выгружаемые в подкачку, и вместо выгрузки они сжимаются и сохраняются в пуле в ОЗУ. Когда пул заполняется или свободная память заканчивается,
давно не использовавшиеся страницы
(LRU) разжимаются и выгружаются в подкачку на диске, а затем их сжатые версии удаляются из пула.
Отличие от
zram
в том, что
zswap
работает в связке с обычной подкачкой, в то время как
zram
с созданным на нём
swap
— это самостоятельное устройство подкачки, которое расположено в ОЗУ и не требует использования обычной подкачки на диске.
Включение и выключение zswap
Совет
В ядрах
linux-hardened
,
linux-lts
,
linux-rt
и
linux-rt-lts
zswap
включен по умолчанию. Проверить это можно командой
zgrep CONFIG_ZSWAP_DEFAULT_ON /proc/config.gz
.
В ядре
linux
zswap
по умолчанию
отключен
. Для его переключения во время работы системы запишите
1
для включения или
0
для отключения в файл
/sys/module/zswap/parameters/enabled
. Изменения будут действовать до перезагрузки. Пример команды для отключения:
# echo 0 > /sys/module/zswap/parameters/enabled
Чтобы включить
zswap
навсегда, добавьте
zswap.enabled=1
в
параметры ядра
. Чтобы выключить
zswap
на ядрах, в которых он включен по умолчанию, добавьте
zswap.enabled=0
.
Настройка zswap
Текущие параметры
zswap
имеет несколько настраиваемых параметров. Посмотреть их текущие значения можно так:
$ grep -r . /sys/module/zswap/parameters/
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:zstd
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/zpool:zsmalloc
/sys/module/zswap/parameters/exclusive_loads:N
/sys/module/zswap/parameters/accept_threshold_percent:90
Описание параметров доступно в
документации zswap
.
Подробности о
exclusive_loads
параметре, которого на текущий момент нет в документации, написаны
в комментарии к исходному коду ядра
.
Посмотреть сообщение со статусом
zswap
, отображающееся при загрузке системы, можно так:
# dmesg | grep zswap:
[    0.317569] zswap: loaded using pool zstd/zsmalloc
Изменение параметров
С помощью sysfs
Каждый параметр можно изменить до следующей перезагрузки через интерфейс
sysfs
. Например, для изменения параметра
compressor
:
# echo lz4 > /sys/module/zswap/parameters/compressor
С помощью параметров ядра
Чтобы сделать изменения постоянными, нужно указать соответствующие настройки в параметры ядра, например
zswap.compressor=lz4
. Таким образом, для постоянной установки всех вышеперечисленных параметров необходимо добавить следующие
параметры ядра
:
zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
При изменении алгоритма сжатия через параметр загрузки необходимо обеспечить раннюю загрузку соответствующего модуля сжатия во время загрузки (смотрите раздел
#Алгоритм сжатия
).
Максимальный размер пула
Память для пула не выделяется заранее, он может расти до определённого предела в процентах от общего объёма доступной памяти, по умолчанию до 20%. При достижении этого порога страницы вытесняются из пула в устройство подкачки. Максимальный размер сжатого пула контролируется параметром
max_pool_percent
.
Распределитель пула сжатой памяти
Параметр
zpool
регулирует управление пулом сжатой памяти.
Распределитель
zbud
хранит 2 сжатых объекта в 1 странице памяти, что ограничивает коэффициент сжатия значением 2 или меньше.
Распределитель
z3fold
[
устаревшая ссылка
2025-08-16 ⓘ]
позволяет хранить до 3 сжатых объектов в одной странице. Коэффициент сжатия при использовании
z3fold
обычно составляет в среднем 2,7, в то время как для
zbud
он равен 1,7.
Начиная с версии ядра 6.3, доступен новый распределитель
zsmalloc
. Он хорошо работает в условиях малого количества доступной RAM и не тратит лишний раз память.
По умолчанию создаётся
zpool
типа
zsmalloc
. С помощью параметра ядра
zswap.zpool
можно выбрать другой распределитель во время загрузки. Распределитель данных также можно изменить позднее через интерфейс
sysfs
.
Алгоритм сжатия
Для сжатия страниц
zswap
использует модули, предоставляемые криптографическим API ядра. В официальных ядрах по умолчанию используется алгоритм сжатия
zstd
, но можно выбрать другой алгоритм с помощью параметра ядра
zswap.compressor=
. Доступны варианты
deflate
,
lzo
,
842
,
lz4
и
lz4hc
.
Можно переключить алгоритм в работающей системе через
sysfs
, но в этом случае
zswap
изначально запускается с
zstd
, а позже переключается на указанный алгоритм. Чтобы сразу запустить
zswap
с другим алгоритмом, нужно использовать параметр ядра, а соответствующий модуль ядра должен быть заранее загружен. Этого можно достичь, выполнив следующие шаги:
Добавьте модули, необходимые для выбранного алгоритма сжатия, в массив
mkinitcpio (Русский)#MODULES
.
Пересоберите образ initramfs
.
Укажите выбранный алгоритм, изменив
zswap.compressor=
в
параметрах ядра
.
При следующей загрузке посмотрите
#Текущие параметры
, чтобы проверить, использует ли
zswap
нужный алгоритм сжатия.
Статистика использования zswap
Чтобы посмотреть статистику
zswap
, используйте следующую команду:
# grep -r . /sys/kernel/debug/zswap
/sys/kernel/debug/zswap/same_filled_pages:26274
/sys/kernel/debug/zswap/stored_pages:159898
/sys/kernel/debug/zswap/pool_total_size:171565056
/sys/kernel/debug/zswap/written_back_pages:787323
/sys/kernel/debug/zswap/reject_compress_poor:0
/sys/kernel/debug/zswap/reject_compress_fail:15860
/sys/kernel/debug/zswap/reject_kmemcache_fail:0
/sys/kernel/debug/zswap/reject_alloc_fail:0
/sys/kernel/debug/zswap/reject_reclaim_fail:31
/sys/kernel/debug/zswap/pool_limit_hit:0
Смотрите также
zswap: How to determine whether it is compressing swap pages?
.
IBM Support Article "New Linux zswap compression functionality" (benchmarks images do not load)
.
Ask Ubuntu: zram vs. zswap vs. zcache
.
Arch Linux forum thread
.
LWN.net technical article by the main developer of zswap
.