Записки IT специалиста
Оперативная память сегодня недорога и доступна, но, тем не менее, продолжает оставаться достаточно дефицитным ресурсов. Это связано с несколькими факторами. Во-первых, аппетиты программного обеспечения к оперативной памяти постоянно растут, во-вторых, возможности расширения часто ограниченны аппаратными особенностями устройства. Но, если вы используете Linux, есть способ выйти за рамки этих ограничений и улучшить производительность системы при помощи zRam. Как это сделать — читайте в нашей статье.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
zRam — это модуль ядра Linux, создающий блочное устройство (RAM-диск) со сжатием на лету, которое подключается как раздел подкачки и позволяет тем самым увеличить предоставляемое системе количество памяти.
И вот здесь у многих читателей может возникнуть непонимание: как же так, системе и так не хватает памяти, а мы создаем в ней какие-то RAM-диски, да еще подключаем их как подкачку. С подкачкой вообще у многих начинающих Linux-пользователей взаимоотношения сложные, в то время как это один из важнейших инструментов, обеспечивающих производительную работу системы. Поэтому также рекомендуем вам ознакомиться со статьей:
Если же говорить коротко, то современные системы оперируют понятием виртуальной памяти, которая включает в себя как физическую память, так и пространства подкачки. Каждое приложение также получает собственное виртуальное адресное пространство, которое затем отражается на физическую память. Таким образом приложению все равно где физически находятся страницы памяти, главное — что приложение получило всю запрашиваемую память и может ее использовать.
Разница проявляется в скорости доступа. Так как скорость работы с дисками гораздо меньше скорости работы с памятью, то обращения к пространствам подкачки связано с определенным снижением производительности. Но в нашем случае мы получаем пространство подкачки в оперативной памяти и почти такое же быстрое как память.
А теперь о том, откуда берется дополнительная память и в чем выгода от использования zRam. Официальная документация предлагает ориентироваться на коэффициент сжатия памяти от 1:2 д 1:3, хотя на практике могут быть и более высокие результаты. Давайте возьмем самый слабый сценарий 1:2 и посмотрим, что у нас получится. Допустим у системы есть 2 ГБ физической памяти, полностью созданный и заполненный zRam такого же размера займет всего 1ГБ, таким образом у системы останется 1 ГБ физической памяти и добавится 2 ГБ практически столь же быстрой подкачки. Т.е. мы как-бы расширили размер оперативной памяти до 3 ГБ, пусть и за счет некоторого снижения скорости доступа и увеличения нагрузки на процессор.
Еще раз повторимся, любой процесс работает с виртуальным адресным пространством и для него нет разницы между данными в RAM и данными в подкачке, вся разница только в скорости доступа.
Далее мы рассмотрим, как настроить виртуальный диск подкачки при помощи zRam в Debian или Ubuntu, но данная инструкция также подойдет для всех основанных на этих ОС дистрибутивах.
Прежде всего установим пакет для работы с zRam:
Сразу же после установки будет создан и подключен как раздел подкачки виртуальный диск и запущена служба zramswap, но размер раздела там совсем скромный — 256 МБ, поэтому давайте настроим его под свои потребности. Для этого откроем /etc/default/zramswap и внесем в него некоторые изменения.
Прежде всего определимся с алгоритмом сжатия. Их приоритет в разных сценариях приведен сразу здесь, в комментариях. Если мы говорим о скорости, то, в порядке убывания, следует использовать lz4 > zstd > lzo, если о степени сжатия, то zstd > lzo > lz4. На наш взгляд, золотой серединой является zstd, поэтому раскомментируем и приведем к следующему виду опцию:
Теперь укажем размер создаваемого раздела, безопасно будет указать размер равный объему RAM, впоследствии это можно будет легко изменить. Для этого есть два варианта, указать значение в процентах:
Или жестко задав размер в МБ:
Ниже находится еще одна опция, указывающая приоритет раздела подкачки, чем больше число, тем выше приоритет. Обычно менять его не требуется, разве только что у вас уже есть несколько пространств подкачки с разным приоритетом, в таком случае значение следует изменить, чтобы созданное при помощи zRam пространство имело наивысший приоритет. По умолчанию значение приоритета — 100.
Для применения изменений достаточно перезапустить службу:
systemctl restart zramswap
Теперь давайте посмотрим на результаты, используя каждый раз идентичную нагрузку, проще всего это сделать при помощи браузера с одним и тем же набором страниц. Было, и пусть вас не смущает высокая нагрузка CPU, это воспроизведение HD-видео в браузере:
На первый взгляд разницы особо и не видно, в обоих случаях в подкачке около 500 МБ, но теперь они находятся в оперативной памяти, что положительно отзывается на реальном быстродействии системы, это заметно по отсутствию кратковременных задержек из-за обращения к страницам подкачки на дисковых устройствах.
Что здесь можно сделать еще? Давайте заставим систему более активно использовать подкачку. Зачем держать страницы в драгоценной памяти, когда их можно сжать и сбросить в не менее быстрый своп. Для этого откроем /etc/sysctl.conf и добавим или изменим при наличии опцию:
По умолчанию используется значение 60, максимальное — 200. Имеет смысл увеличить его до 160 — 180, наша задача — по максимуму использовать сжатую память, но не допускать выхода из zRam раздела.
Для применения изменений выполните:
Снова создадим нагрузку и посмотрим на результат:
Как видим, система стала гораздо активнее свопить, но быстродействие ее от этого не ухудшилось, даже наоборот, так как процессы, которым действительно нужна память, теперь ее практически сразу получают за счет более агрессивного использования пространства подкачки.
А теперь самое время оценить эффективность сжатой памяти, этот и многие другие парамерты можно посмотреть командой:
В выводе нас интересуют столбцы DATA и MEM-USED, отдельно их можно посмотреть командой:
Как видим в подкачке находится 1,1 ГБ данных, которые в сжатом виде занимают всего 231 МБ памяти, т.е. фактически мы получили коэффициент сжатия 1:4,7, это хороший результат, просто отличный. Опираясь на него, мы можем увеличить раздел zRam раздела на величину, превышающую объем памяти. Но будьте аккуратны. Прежде чем вносить изменения протестируйте сжатие под разными видами нагрузки, чтобы убедиться, что коэффициент остается постоянно высоким. В противном случае в подкачке могут оказаться данные с совершенно другим коэффициентом сжатия, и физическая память очень быстро закончится.
И еще один вопрос, который эпизодически поднимают в сети: нужно ли при использовании zRam выключать пространства подкачки на дисках? Нет, не нужно, так как в случае того, если вам не хватит zRam раздела именно следующий уровень подкачки поможет вам, хоть и со снижением производительности. сохранить работоспособность системы.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: