zswap (Русский) - ArchWiki

Jump to content

# zswap (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи 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 с другим алгоритмом, нужно использовать параметр ядра, а соответствующий модуль ядра должен быть заранее загружен. Этого можно достичь, выполнив следующие шаги:

1. Добавьте модули, необходимые для выбранного алгоритма сжатия, в массив mkinitcpio (Русский)#MODULES.
2. Пересоберите образ initramfs.
3. Укажите выбранный алгоритм, изменив `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.

Category:

- Kernel (Русский)

Hidden category:

- Pages with dead links

zswap (Русский)
Add topic