Преди няколко седмици публикувах . Тъй като Raspberry Pi 4 също е базирана на ARM, някои от оптимизациите, споменати в предишната статия, са напълно подходящи за нея. Искам да споделя тези трикове и да видя дали и при вас ще се проявят подобни подобрения в производителността.
След като инсталирах Raspberry Pi в моята , забелязах, че в моменти на недостиг на оперативна памет, системата ставаше много неотзивчива и дори замръзваше. За да разреша този проблем, добавих ZRAM и направих няколко промени в параметрите на ядрото.
Активиране на ZRAM на Raspberry Pi

създава в оперативната памет блочно хранилище с име /dev/zram0 (или 1, 2, 3 и т.н.). Записаните там страници се компресират и запазват в паметта. Това осигурява много бързо въвеждане-извеждане, а също така освобождава памет чрез компресия.
Raspberry Pi 4 се предлага с 1, 2, 4 или 8 GB оперативна памет. Аз ще използвам модела с 1 GB, така че коригирайте инструкциите в зависимост от вашия модел. С 1 GB ZRAM, стандартният файл за размяна (бавен!) ще се използва по-рядко. Аз използвах такъв скрипт за инсталиране и автоматична настройка.
Инструкциите са в хранилището по линка по-горе. Инсталация:
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 GB 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 --systemvm.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 5264448 в ZRAM — това е почти един гигабайт некомпресирани данни. Всичко е отишло в ZRAM и нищо не е попаднало в много по-бавния swap файл. Изпробвайте сами тези настройки, те работят на всички модели Raspberry Pi. Системата, която беше под въпрос, стана работеща и стабилна.
В близко бъдеще се надявам да продължа и обновя тази статия с някои резултати от тестовете на системата преди и след инсталирането на ZRAM. В момента просто нямам време за това. А сега не се колебайте да направите свои собствени тестове и уведомете ме в коментарите. Raspberry Pi 4 е просто звер с такива настройки. Наслаждавайте се!
По темата:
- (2017)
- (2020)
Източник: habr.com
