Прадукцыйнасць 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

Дадаць каментар