Вчера мы рассказывали о ZRAM, как эффективном способе улучшить производительность ПК с небольшим объемом оперативной памяти за счет ее сжатия.
Сегодня расскажем о другой технологии – ZSWAP, которая позволяет создать также в оперативной памяти сжатый кеш страниц для файла подкачки.
Многие путают эти технологии, которые имеют разный принцип действия и разные назначения. Поэтому начнем с краткого ликбеза.
🔹 ZRAM – создает в памяти отдельное блочное устройство, которое использует как пространство подкачки с наивысшим приоритетом. Выгода получается за счет сжатия помещаемых в него данных.
Скажем у нас есть ПК с 2 ГБ ОЗУ, мы оставляем 1 ГБ, а на еще 1 ГБ создаем устройство ZRAM. Памяти остается мало, и система начинает свопить на устройство ZRAM. Но это та же оперативная память, поэтому происходит это практически также быстро, как доступ в память напрямую.
Но за счет сжатия мы можем поместить туда больше данных, так при типичном коэффициенте сжатия 2-3 мы получаем аналог ПК с 3-4 ГБ ОЗУ, что существенно улучшает быстродействие.
🔹 Теперь о ZSWAP, это именно сжатый горячий кеш дискового пространства подкачки в ОЗУ, и работает он именно как кеш. Холодные данные из него разжимаются и сбрасываются на диск.
Его основная цель – улучшить взаимодействие системы и пространства подкачки сократив дисковые операции, тем самым получив повышение производительности.
Но это не означает, что сначала будет до упора использоваться кеш, а только потом диск. Нет, кеш работает по принципу веса и частоты обращения к данным, поэтому это не прямой аналог и не замена ZRAM.
Перед тем как включать данную технологию посмотрим какие возможности поддерживаются, в первую очередь нас интересуют доступные алгоритмы сжатия. Для этого выполните:
cat /boot/config-`uname -r` | grep -i zswap
В выводе будет что-то вида:
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC=y
CONFIG_ZSWAP_ZPOOL_DEFAULT="zsmalloc"
Первая строка обозначает что ZSWAP поддерживается ядром, далее идут перечисления доступных алгоритмов сжатия, мы видим, что по умолчанию включен LZO, однако в настоящее время наиболее оптимально использовать представляющий лучшее сочетание скорости и сжатия ZSTD.
В качестве аллокатора используется zsmalloc, который оптимален для управления сильно фрагментированными наборами малых файлов.
Теперь включим сам ZSWAP, для этого откроем
/etc/default/grub и найдем там строку GRUB_CMDLINE_LINUX_DEFAULT, обычно в ней уже есть параметры, например: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Через пробел добавим еще несколько, приведя строку к виду:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=10 zswap.zpool=zsmalloc"
Разберем добавленные параметры:
▫️zswap.enabled=1 – включает ZSWAP
▫️zswap.compressor=zstd – выбирает механизм компрессии, в нашем случае zstd
▫️zswap.max_pool_percent=10 – указывает доступный процент памяти для использования, по умолчанию 20
▫️zswap.zpool=zsmalloc – определяет используемый аллокатор, в нашем случае можно не указывать, так как zsmalloc стоит по умолчанию.
После чего обновляем параметры загрузчика ядра:
update-grub
И перезагружаем компьютер.
Проверяем:
cat /sys/module/zswap/parameters/enabled
cat /sys/module/zswap/parameters/compressor
cat /sys/module/zswap/parameters/max_pool_percent
cat /sys/module/zswap/parameters/zpool
В ответ должны получить Y, zstd, 10 и zsmalloc.
Посмотреть использование и эффективность можно командой:
grep -i zswap /proc/meminfo
Указанные параметры – не догма, вы можете (и должны) их выбирать исходя из реальных параметров и показателей вашей системы.
