Одним из возможных выходов из этой непростой ситуации может быть использование модуля ядра zswap, который перед выгрузкой страниц в раздел подкачки сначала старается сжать их и оставить в оперативной памяти. Внешне этот эффект проявляется так, что оперативной памяти как будто стало больше и выгрузка страниц в раздел подкачки осуществляется гораздо реже.
Для сжатия страниц памяти воспользуемся новым алгоритмом сжатия LZ4, который обладает более высокой производительностью по сравнению с предлагаемым по умолчанию алгоритмом сжатия LZO. Несмотря на то, что LZ4 сжимает чуть хуже, он меньше грузит процессор. Таким образом соблюдается более приемлемый баланс между экономией памяти и нагрузкой на процессор.
Модули ядра для поддержки LZ4
Для начала впишем в файл /etc/initramfs-tools/modules модули ядра, реализующие быстрый алгоритм сжатия LZ:lz4 lz4_compressИ пересоберём образ загрузочной файловой системы, чтобы в него попали добавленные нами модули:
# update-initramfs -u -k all
Модуль ядра для сжатия страниц подкачки
Теперь прописываем автоматическое включение zswap при загрузке ядра в конфигурации загрузчика GRUB в файле /etc/default/grub. Для этого добавим ряд новых настроек в GRUB_CMDLINE_LINUX_DEFAULT:zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=80Значение настроек:
- zswap.enabled=1 - включает использование zswap,
- zswap.compressor=lz4 - выбирает более быстрый алгоритм сжатия lz4 вместо алгоритма сжатия по умолчанию lzo,
- zswap.max_pool_percent=80 - разрешает использовать до 80 процентов оперативной памяти для хранения сжатых данных.
# update-grubВсё готово, теперь нужно перезагрузить систему. Очень редкое действие, но этом случае перезагрузка действительно необходимо, т.к. загрузить модули без перезагрузки мне лично не удалось:
# reboot
Проверка
После перезагрузки можно проверить, работает ли модуль и какой алгоритм сжатия используется:$ dmesg | grep zswap: [ 0.830940] zswap: loading zswap [ 0.835122] zswap: using lz4 compressor
2 комментария:
Спасибо, очень толково, четко и кратко Одна из немногих статей по делу Для новичков я бы добавил
sudo echo 'lz4' >> /etc/initramfs-tools/modules
sudo echo 'lz4_compress' >> /etc/initramfs-tools/modules
cat /etc/initramfs-tools/modules
Почитайте внимательно, эти действия уже описаны. А выполнять echo через sudo нет смысла.
Отправить комментарий