Wydajność Raspberry Pi: dodajemy ZRAM i zmieniamy ustawienia jądra

Kilka tygodni temu opublikowałem recenzję Pinebook Pro. Ponieważ Raspberry Pi 4 opiera się również na ARM, niektóre z optymalizacji wspomnianych w poprzednim artykule będą odpowiednie. Chciałbym podzielić się tymi sztuczkami i zobaczyć, czy zauważycie podobne ulepszenia wydajności.

Po zainstalowaniu Raspberry Pi w moim domowym serwerze zauważyłem, że w momentach braku pamięci operacyjnej stawał się bardzo niereagujący i nawet zawieszał się. Aby rozwiązać ten problem, dodałem ZRAM i wprowadziłem kilka zmian w ustawieniach jądra.

Aktywacja ZRAM na Raspberry Pi

Wydajność Raspberry Pi: dodajemy ZRAM i zmieniamy ustawienia jądra

ZRAM tworzy w pamięci operacyjnej pamięć blokową o nazwie /dev/zram0 (lub 1, 2, 3 itd.). Zapisane tam strony są kompresowane i przechowywane w pamięci. To zapewnia bardzo szybki dostęp do danych oraz zwalnia pamięć dzięki kompresji.

Raspberry Pi 4 jest dostępny z 1, 2, 4 lub 8 GB pamięci operacyjnej. Będę używać modelu 1 GB, więc dostosuj instrukcję do swojego modelu. Przy 1 GB domyślna pamięć swap (wolna!) będzie używana rzadziej. Użyłem takiego skryptu zram-swap do instalacji i automatycznej konfiguracji.

Instrukcje znajdują się w repozytorium pod linkiem powyżej. Instalacja:

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

Jeśli chcesz edytować konfigurację:

vi /etc/default/zram-swap

Można również aktywować ZRAM poprzez instalację zram-tools. Jeśli korzystasz z tej metody, koniecznie edytuj konfigurację w pliku /etc/default/zramswap, i ustaw około 1 GB ZRAM:

sudo apt install zram-tools

Po instalacji możesz sprawdzić statystyki pamięci ZRAM za pomocą następującego polecenia:

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

Dodajemy ustawienia jądra dla lepszego wykorzystania ZRAM

Teraz poprawimy zachowanie systemu, gdy Raspberry Pi przechodzi do swapowania w ostatniej chwili, co często prowadzi do zawieszeń. Dodamy kilka linii do pliku /etc/sysctl.conf i uruchomimy ponownie.

Te linie 1) opóźnią nieuchronne wyczerpanie pamięci, zwiększając presję na pamięć podręczną jądra, a 2) wcześniej przygotowują się do wyczerpania pamięci, wcześniej inicjując swapowanie. Ale to będzie znacznie bardziej efektywne swapowanie skompresowanej pamięci przez ZRAM!

Oto linijki, które należy dodać na końcu pliku /etc/sysctl.conf:

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

Następnie restartujemy system lub aktywujemy zmiany następującą komendą:

sudo sysctl --system

vm.vfs_cache_pressure=500 zwiększa presję na cache, co potęguje tendencję jądra do zwalniania pamięci wykorzystywanej na cache obiektów katalogów i indeksów. Będziecie używać mniej pamięci przez dłuższy czas. Nagle spadek wydajności jest zredukowany dzięki wcześniejszemu swapowaniu.

vm.swappiness=100 zwiększa parametr, jak agresywnie jądro będzie swapować strony pamięci, ponieważ najpierw używamy ZRAM.

vm.dirty_background_ratio=1 & vm.dirty_ratio=50 — procesy w tle rozpoczną zapis natychmiast po osiągnięciu limitu 1%, ale system nie wymusi synchronicznego we/wy, dopóki nie osiągnie dirty_ratio na poziomie 50%.

Te cztery linijki (używane z ZRAM) pomogą poprawić wydajność w sytuacji, gdy nieuniknienie kończy się pamięć operacyjna i następuje przełączenie na swap, jak u mnie. Wiedząc o tym fakcie, a także z uwagi na trzykrotne lepsze kompresowanie pamięci w ZRAM, warto zacząć to swapowanie wcześniej.

Presja na cache pomaga, ponieważ w rzeczywistości mówimy jądru: „Hej, słuchaj, nie mam dodatkowej pamięci, aby wykorzystać ją na cache, więc proszę, pozbądź się go tak szybko, jak to możliwe i przechowuj tylko najczęściej używane/ważne dane.”

Nawet przy zmniejszonej ilości cache, jeśli z czasem większość zainstalowanej pamięci będzie zajęta, jądro rozpocznie oportunistyczne swapowanie dużo wcześniej, dzięki czemu procesor (kompresja) i we/wy swap nie będą przeciągać do ostatniej chwili i wykorzystywać wszystkich zasobów naraz, gdy będzie już za późno. ZRAM wykorzystuje trochę CPU do kompresji, ale w większości systemów z niską ilością pamięci ma to znacznie mniejszy wpływ na wydajność niż swap bez ZRAM.

Na zakończenie

Przyjrzyjmy się raz jeszcze wynikowi:

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 w ZRAM to prawie jeden gigabajt nieskompresowanych danych. Wszystko poszło do ZRAM, a nic nie trafiło do znacznie wolniejszego pliku wymiany. Spróbujcie sami takich ustawień, działają na wszystkich modelach Raspberry Pi. Moja nieodpowiednia, zawieszająca się system przekształciła się w stabilny i funkcjonalny.

W najbliższym czasie mam nadzieję kontynuować i zaktualizować ten artykuł o wyniki testów systemu przed i po zainstalowaniu ZRAM. Na razie po prostu nie mam na to czasu. Tymczasem, nie wahaj się przeprowadzać własnych testów i daj znać w komentarzach. Raspberry Pi 4 jest prawdziwą bestią z takimi ustawieniami. Ciesz się!

Temat:

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster