Продуктивність Raspberry Pi: додаємо ZRAM та змінюємо параметри ядра

Кілька тижнів тому я опублікував огляд Pinebook Pro. Оскільки Raspberry Pi 4 теж заснована на ARM, то для неї цілком підходять деякі оптимізації, згадані в попередній статті. Хотів би поділитися цими хитрощами і дізнатися, чи виявляться у вас такі ж покращення у продуктивності.

Після встановлення Raspberry Pi у свою домашню серверну я помітив, що у моменти дефіциту оперативної пам'яті вона ставала дуже несприйнятливою і навіть підвисала. Щоб вирішити цю проблему, я додав ZRAM і вніс кілька змін до параметрів ядра.

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

Продуктивність 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 просто звір із такими налаштуваннями. Насолоджуйтесь!

За темою:

Джерело: habr.com

Додати коментар або відгук