§ ZSWAP with LZ4

На днях выяснилось, что вместе с релизом ядра Linux 3.11 (Linux for Workgroups) в ядро была добавлена возможность сжатия алгоритмом LZ4. Для тех кто не в курсе что это такое - поясняю. Алгоритм LZ4 это алгоритм сжатия, основной целью которого является скорость работы. Он постепенно приходит на смену алгоритму LZO, при этом работает примерно на 20% быстрее на сжатие, и на 200% быстрее в распаковке, обеспечивая на 10-15% лучшее сжатие по сравнению с LZO.

Звучит круто, да только какая от этого практическая польза, спросите вы? А я сейчас расскажу, как при помощи этого сделать ваш Linux ещё быстрее!

Ранее я уже рассказывал о такой штуке как ZSWAP, которая позволяет сжимать содержимое памяти, что бы увеличить объем доступной для использования памяти и как можно дольше отложить выгрузку данных в swap на жесткий диск. Это приводит к тому, что система становится более отзывчивой, а диски живут дольше (особенно это касается SSD).

Так вот для сжатия памяти по умолчанию используется алгоритм LZO, что вроде как логично. Высокая скорость, многопоточность, низкое потребление процессорного времени и памяти. Но раз у нас есть алгоритм позволяющий сжимать лучше, и при этом работать почти вдвое быстрее - то почему бы нам не использовать его? Так давайте его и будем использовть.

Подобную схему я пробовал у себя трижды, и два раза она сработала. В качестве ядра, я использую последнее ядро от siduction с версией 3.12-0, по идее эта схема должна работать везде где используется ядро с поддержкой LZ4. Итак мы открываем файлик /etc/default/grub и меняем строчку на следующую.

GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=80 quiet"

Тут видно что мы передаем ядру три параметра про zswap

zswap.enabled=1 , для активизации модуля zswap

zswap.max_pool_percent=80 , указываем процент памяти который будет сжиматься (по умолчанию 20, но для систем с малым объемом рекомендуется ставить 70-80). За этот параметр стоит отдельное спасибо сказать sirocco.

Ну и напоследок самый вкусный параметр

zswap.compressor=lz4 , сообщает какой алгоритм компресии избрать.

После этого мы сохраняем изменения, и выполняем команду

sudo update-grub

что бы изменения применились, и перезагружаем машину.

Теперь у вас в выводе dmesg должна появиться строка

zswap: using lz4 compressor

И это значит что все прошло успешно.

Ранее я говорил что это сработало два раза из трех. У вас естественно возникает вопрос что было когда этот фокус не прокатил? А ничего не было, в dmesg я получил уведомление что lz4 недоступен и zswap продолжил использование алгоритма lzo. В причинах такого поведения я сейчас разбираюсь, и как появится какой либо результат, я обязательно отпишусь об этом в коментариях внизу.

Сразу скажу что особой "скорости" от этого улучшения я пока не почувствовал. На рабочем буке у меня 8 гиг оперативы, и там вся эта схема хороша только как опытная эксплуатация, до свапа там дело не доходит никогда, а на мелкобуке с гигагерцовым процессором и 2 гигами оперативы эффект не сильно ощутим. Но все же я думаю что он есть, как минимум лучше сжатие, меньше нагрузка на процессор и выше скорость работы позволят добавить минут 5-10 к жизни батарейки, что можно считать неплохим результатом для изменения одной строчки конфигурации :D


comments powered by Disqus