Kilka tygodni temu opublikowałem . 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 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

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 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.shJeś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-toolsPo 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=50Następnie restartujemy system lub aktywujemy zmiany następującą komendą:
sudo sysctl --systemvm.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 5264448 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:
- (2017)
- (2020)
Źródło: habr.com
