Использование zSwap для оптимизации работы микро VPS-серверов


Если у вас есть небольшой, а следовательно очень бюджетный VPS-сервер, то вы определенно сильно ограничены по объему доступной оперативной памяти. Естественно, что если вы ограничены по объему доступной оперативной памяти, то скорее всего вы вечно сидите в свопе и пытаетесь выжать хоть немного доступной памяти.

Оптимизация работы с файлом подкачки в Linux

Скорее всего в такой ситуации вы оказались не от хорошей жизни, но и даже в такой ситуации можно немного извернуться и выжать немного производительности из того что у вас есть и поможет нам в этом две волшебные технологии: zSwap и lz4. Используя связку этих технологий мы можем организовать довольно быструю компрессию данных данных помещаемых на раздел подкачки виртуальной памяти.

  • zSwap - это подсистема ядра которая сжимает данные перед помещением их на раздел или файл "подкачки" минимизируя число дисковых операций
  • lz4 - относительно новая технология сжатия обеспечивающая неплохой баланс между степенью сжатия и скоростью работы

Но, опять же хочу сказать, что то, что я описываю, это уже последнее к чему стоит обращаться, так как в любом случае дисковая подсистема это обычно самое узкое место серверной инфраструктуры, а компрессия данных накладывает дополнительные накладные расходы на процессорное время.

Как активировать zSwap в Ubuntu Linux

Теперь, если вас все устраивает и я надеюсь, что вы такие финты будете не на хайлоаде откалывать, то тогда погнали.

Первое, что надо сделать, это добавить ядерный модуль lz4 к модулям используемым при сборке initramfs и пересобрать initramfs:

# echo lz4 >> /etc/initramfs-tools/modules
# echo lz4_compress >> /etc/initramfs-tools/modules
# update-initramfs -u

Я надеюсь, вы поняли, что сейчас мы говорим про Ubuntu Linux (ну и к Debian тоже применимо).

Второе, это добавляем к параметрам загрузки ядра опции использования zSwap. Для чего в файле /etc/default/grub измените параметр GRUB_CMDLINE_LINUX добавив соответствующие опции:

GRUB_CMDLINE_LINUX="zswap.enabled=1 zswap.compressor=lz4"

Обновляем загрузчик grub и перезагружаем сервер:

# update-grub
# reboot

После перезагрузки сервера хотелось бы убедиться, что компрессия раздела подкачки используется и для этого выполните следующие команды:

# dmesg | grep zswap:
[    1.609806] zswap: loaded using pool lz4/zbud

Так мы проверяем, что zswap загружен.

# cat /sys/module/zswap/parameters/enabled
Y

И последней проверкой мы проверяем, что он активен.