Производительность Raspberry Pi: добавляем ZRAM и изменяем параметры ядра

Автор оригинала: Hayden James
  • Перевод
Пару недель назад я опубликовал обзор Pinebook Pro. Поскольку Raspberry Pi 4 тоже основана на ARM, то для неё вполне подходят некоторые из оптимизаций, упомянутых в предыдущей статье. Хотел бы поделиться этими хитростями и узнать, проявятся ли у вас такие же улучшения в производительности.

После установки Raspberry Pi в свою домашнюю серверную я заметил, что в моменты дефицита оперативной памяти она становилась очень невосприимчивой и даже подвисала. Чтобы решить эту проблему, я добавил ZRAM и внёс несколько изменений в параметры ядра.

Активация ZRAM на Raspberry Pi




ZRAM создаёт в оперативной памяти блочное хранилище с именем /dev/zram0 (или 1, 2, 3 и т. д.). Записанные туда страницы сжимаются и сохраняются в памяти. Это позволяет обеспечить очень быстрый ввод-вывод, а также освобождает память за счёт сжатия.

Raspberry Pi 4 поставляется с 1, 2, 4 или 8 ГБ оперативной памяти. Я буду использовать модель 1 ГБ, поэтому скорректируйте инструкцию в зависимости от своей модели. С 1 ГБ ZRAM дефолтный файл подкачки (медленный!) будет использоваться реже. Я использовал такой скрипт zram-swap для установки и автоматической настройки.

Инструкции приводятся в репозитории по ссылке выше. Установка:

git clone https://github.com/foundObjects/zram-swap.git
cd zram-swap && sudo ./install.sh

Если хотите отредактировать конфиг:

vi /etc/default/zram-swap

Кроме того, можно активировать ZRAM путём установки zram-tools. Если используете этот метод, обязательно отредактируйте конфиг в файле /etc/default/zramswap, и установите около 1 ГБ ZRAM:

sudo apt install zram-tools

После установки можете просмотреть статистику хранилища ZRAM следующей командой:

sudo cat /proc/swaps
Filename				Type		Size	Used	Priority
/var/swap                               file		102396	0	-2
/dev/zram0                              partition	1185368	265472	5
pi@raspberrypi:~ $

Добавляем параметры ядра для лучшего использования ZRAM


Теперь исправим поведение системы, когда Raspberry Pi переходит на подкачку в последний момент, что часто приводит к подвисаниям. Добавим несколько строчек в файл /etc/sysctl.conf и перезагрузимся.

Эти строки 1) оттянут неизбежное исчерпание памяти, увеличив давление на кэш ядра и 2) раньше начинают подготовку к исчерпанию памяти, заранее инициируя подкачку. Но это будет гораздо более эффективная подкачка сжатой памяти через ZRAM!

Вот строки, которые нужно добавить в конце файла /etc/sysctl.conf:

vm.vfs_cache_pressure=500
vm.swappiness=100
vm.dirty_background_ratio=1
vm.dirty_ratio=50

Затем перезагружаем систему или активируем правки следующей командой:

sudo sysctl --system

vm.vfs_cache_pressure=500 увеличивает давление на кэш, что увеличивает склонность ядра к рекультивации памяти, используемой для кэширования объектов каталогов и индексов. Вы будете использовать меньше памяти в течение более длительного периода времени. Резкое падение производительности сводится на нет за счёт более раннего свопинга.

vm.swappiness=100 увеличивает параметр, насколько агрессивно ядро будет свопить страницы памяти, так как мы сначала используем ZRAM.

vm.dirty_background_ratio=1 & vm.dirty_ratio=50 — фоновые процессы начнут запись сразу по достижении лимита 1%, но система не будет принудительно выполнять синхронный ввод-вывод, пока не достигнет dirty_ratio в 50%.

Эти четыре строки (при использовании с ZRAM) помогут улучшить производительность в том случае, если у вас неизбежно заканчивается оперативная память и начинается переход на подкачку, как у меня. Зная об этом факте, а также с учётом сжатия памяти в ZRAM в три раза лучше начать этот свопинг заранее.

Давление на кэш помогает, потому что мы фактически говорим ядру: «Эй, послушай, у меня нет дополнительной памяти, чтобы использовать её для кэша, поэтому, пожалуйста, избавься от него как можно скорее и храни только наиболее часто используемые/важные данные».

Даже при уменьшении кэширования, если со временем большая часть установленной памяти будет занята, ядро начнёт оппортунистический своп гораздо раньше, так что процессор (сжатие) и ввод/вывод подкачки не будут тянуть до последнего и задействовать все ресурсы сразу, когда уже слишком поздно. ZRAM использует немного CPU для сжатия, но в большинстве систем с малым объёмом памяти это гораздо меньше влияет на производительность, чем своп без ZRAM.

В заключение


Давайте ещё раз посмотрим на результат:

pi@raspberrypi:~ $ free -h
total used free shared buff/cache available
Mem: 926Mi 471Mi 68Mi 168Mi 385Mi 232Mi
Swap: 1.2Gi 258Mi 999Mi

pi@raspberrypi:~ $ sudo cat /proc/swaps 
Filename Type Size Used Priority
/var/swap file 102396 0 -2
/dev/zram0 partition 1185368 264448 5

264448 в ZRAM — это почти один гигабайт несжатых данных. Всё ушло в ZRAM и ничто не попало в гораздо более медленный файл подкачки. Попробуйте сами такие настройки, они работают на всех моделях Raspberry Pi. У меня негодная подвисающая система превратилась в работоспособную и стабильную.

В ближайшем будущем я надеюсь продолжить и обновить эту статью с некоторыми результатами тестирования системы до и после установки ZRAM. Сейчас у меня просто нет на это времени. А пока не стесняйтесь выполнять свои собственные тесты и дайте знать в комментариях. Raspberry Pi 4 просто зверь с такими настройками. Наслаждайтесь!

По теме:
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 7

    0
    Господа Знатоки, у меня вопрос!
    Правильно ли я понимаю, что Zram — это разбитый на страницы и пережатый swap, хранящийся в оперативке? Если на моем r-pi всего гиг оперативы и я этот гиг выделяю под zram, то у меня не останется оперативы совсем и как тогда жить? Если все оперативные данные будут пережиматься, то насколько быстро это будет работать? Насколько увеличится нагрузка на проц?
      0

      будет всё плохо.
      В вашем случае 256мб пережатой оперативы максимум иначе будут… непредвиденные последствия.
      Если поставите больше, то будет хорошо, даже очень… но в какой-то момент всё… не сказать, что крашнется, но пик потребления, вам может выйти боком и всё будет зависеть от того, как написан софт, или крашнется, или выдаст предупреждение(во многих случаях этого не будет), или сделает вид, что ничего не произошло, но результат будет в виде битых данных (видео, аудио. а с ними всё сложно).


      Если вы не используете машинку как "онлайн" ретранслятор(получить-обработать-послать дальше), то даже разработчики вам не ответят адекватно, что получится.

        0
        Своп — сжатый, у товарища он займёт меньше всей памяти.
        Лично я использую не более половины памяти под zram, иначе хром начинает заметно тормозить при заполнении свопа. На 4Гб нетбука + 2Гб zramswap в целом потреблять контент можно, создавать — уже не очень.
          0
          До тех пор, пока в свопе потребность не возникнет, то разницы с zram и без нет. Лично я отвёл 3/4, но полного заполнения не наблюдал ни разу. Если потребление памяти будет большим, но не превосходящим доступный объём, то приложения падать не будут, вместо этого ядро будет постоянно загружать/выгружать файловый кеш. Если через это удастся проскочить, то будет работать как ни в чём ни бывало, иначе работа системы замедлиться настолько, что система перестанет отвечать. Впрочем проблемы работы при нехватке памяти не зависят от zram, а связаны с ядром linux
            0
            zram работает как tmpfs, т.е. выделяет память только по мере заполнения, а не сразу при инициализации.
            0

            Зачем zram на 4гб версии? У меня на 4гб даже 2гб толком не забиваются, а raspberry pi foundation выпустили ещё и версию с совсем бесполезными 8гб оперативы.

              0
              На десктопе хром сожрёт. Ну или что-нибудь на яве запускать — тож память надо, если задача приличная.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое