Pomnażanie pamięci RAM
Każdy komputer ma za mało pamięci – ten niepozorny truizm nierzadko obgryza nam kostki, gdy akurat wzrasta nasze zapotrzebowanie na moce przerobowe naszej maszyn. O ile stosunkowo nowe konfiguracje sprzętowe osiągają przyzwoity pułap pamięci RAM (>2GB), o tyle starsze konstrukcje z niebagatelną niegdyś pojemnością pamięci ~1GB wiją się w bólu pod naporem coraz bardziej żarłocznych, nowoczesnych aplikacji. Pomimo przystępnych cen kości pamięci (choć te starsze osiągają notowania na poziomie artefaktów wydobytych z egipskich grobowców), nie zawsze i wszędzie da się dodatkową kość zamontować. I co wtedy?W Linuksie mamy wtedy kilka wyjść. Od użytkowania minimalistycznego pulpitu, okrojonego z nadmiernej automatyki, programów-kombajnów, itp., aż po sprawniejsze zarządzanie wątłymi zasobami naszego komputera. W osiągnięciu tego drugiego założenia pomocny może być sprytny moduł zRam (dawne Compcache), który… zabierze nam pamięć RAM, by oddać ją rozmnożoną. Całość koncepcji opiera się o wykorzystanie leciwej metody użycia partycji SWAP. Zwyczajowo jest to kawałek dysku/pliku, do którego w momentach krytycznych system zapisuje nadmiarowe dane z pamięci. Gdy sytuacja się zaognia, to zrzucanie/pobieranie danych z partycji SWAP wywołuje bóle głowy przy wtórze zawodzącego jęku dysku. Innymi słowy, zapisywanie i odczytywanie z dysku stanowią wąskie gardło dla wymaganego szybkiego i masowego przerzucania danych. Dlatego zRam robi rzecz sprytną, a mianowicie umiejscawia obszar wymiany tam, skąd odczyt i zapis będzie najszybszy. Czyli w pamięci RAM. I teraz najlepsze. Bo jaki to ma sens – zabierać RAM, żeby szybciej działał SWAP, którego potrzebujemy bo mamy za mało pamięci? Sens tkwi w kompresji tych danych. Dzięki temu, zRam wykorzystując, powiedzmy 50MB pamięci RAM, faktycznie przechowuje tam np. 120MB danych. Zresztą wystarczy spojrzeć na poniższe statystyki:
$#./zram_stat.sh Current Predicted Original: 98M 185M Compressed: 27M Total mem use: 29M 55M Saved: 68M 130M Ratio: 29% (28%) Physical RAM: 743M Effective RAM: 812M (873M)
Pozycja Total mem use to ilość zabranej nam pamięci RAM: 29MB. Original to te 29MB po rozkompresowaniu: 98MB. Czyli zysk Saved na czysto uzyskujemy w okolicach 68MB. Może wygląda to niepozornie, lecz i maszyna testowa nie była długo uruchomiona, by w pełni odkryć uroki współpracy z zRam. Tak czy owak, efektywny RAM zwiększył się nam z 743MB do 812MB.
Jednak nie ma nic za darmo. Na potrzeby kompresji danych zużywana jest jakaś cześć mocy naszego procesor. Nie należy też oczekiwać, że zRam dokona cudów na komputerze obdarzonym kością 256MB. Przypuszczalnie jest to najlepsze rozwiązanie dla osób, które oscylują w granicach ~1GB (od 512MB od 1.5GB – 2GB). Opisana metoda nie zastąpi w 100% fizycznej pamięci. To jedynie koło ratunkowe, które w obliczu mocnych procesorów jest mniej uciążliwe niż notoryczne mielenie dyskiem. Jak się sprawdza w praktyce? Na to pytanie każdy będzie musiał sobie odpowiedzieć sam – przy mojej testowej konfiguracji (Celeron 2.4GHz, 768MB pamięci) system odczepił się od dysku i wykorzystywał w granicach 30 – 120MB (czyli po dekompresji 90MB – 220MB). Samodzielną kontrolę zużytych przez zRam zasobów można przeprowadzić wydając polecenia:
swapon -s
cat /sys/block/zram*/*
Do prawidłowego funkcjonowania program potrzebuje podania kilku parametrów, mianowicie liczby posiadanych rdzeni procesora, ilości zamontowanej pamięci, itp. Jednak to wszystko załatwi za nas skrypt startowy, który zainstaluje się wraz z programem i umieści odpowiednie parametry w odpowiednim miejscu podczas uruchomienia komputera. Z instalacją zRam użytkownicy Ubuntu 11.04/11.10/12.04 i Minta 11/12/13 radzą sobie w ten sposób:
sudo add-apt-repository ppa:shnatsel/zram
sudo apt-get update
sudo apt-get install zramswap-enabler
Każdy kto nie może skorzystać z powyższej metod, może pobrać źródła i odpowiedni skrypt ze strony projektu.
Jak zwykle świetny wpis!
Matko, to już w Ubuntu nie można bez instalacji po prostu załadować modułu? Samo włączenie to (na dowolnym Linuksie) cztery komendy na krzyż: http://rozie.blox.pl/2011/11/Praca-na-destkopie-z-mala-iloscia-RAM-po-raz.html Obecnie korzystam z tego na maszynie z 2 GB RAM i 4 rdzeniami, ale polecam samodzielne pobawienie się parametrami, szczególnie w zakresie ilości przydzielonego RAM, i ilości rdzeni, które kompresowany swap obsługują.
Pewnie, że się da załadować samodzielnie moduł i pokonfigurować co trzeba. Ale ten automatyczny skrypt dla Upstarta też fajnie działa, więc czego by nie skorzystać. 90% populacji i tak nie zamierza zagłębiać się w opcje konfiguracyjne 🙂
Oj chyba autor nie wiedział co pisze albo nie ma pojęcia jak działa swap i do czego służy.
Swap wykorzystywany jest przez system nie w żadnych krytycznych momentach tylko zawsze gdy posiadamy jakieś długo nieużywane strony pamięci. Jakiś proces zapamiętał sobie w pamięci dane z których długo nie korzysta – skoro nie korzysta znaczy, że pewnie nie prędko będzie ich potrzebował, można więc zapisać je na dysku a pamięć wykorzystać do przyspieszenia pracy systemu (np na bufory dyskowe dla danych które są często odczytywane – dzięki temu komputer mniej mieli nam dyskiem).
Trafna uwaga. Niemniej mnie i przeciętnemu użytkownikowi swap kojarzy się z chrzęstem dysku akurat wtedy, kiedy próbujemy wykonać jakąś poważniejszą operację na komputerze. System nie ma miejsca w RAMie na np. program który chcemy otworzyć, zatem ze stoickim spokojem zrzuca w swap co tam ma akurat w kolejce. Teoria swoje, praktyka swoje 🙂
Gdy jest mało pamięci system w pierwszej kolejności sięga po bufory ze zmagazynowanymi w nich danymi które są czytane często z dysku. Można je w każdej chwili zlikwidować i żadne dane od tego nie giną (czas na uzyskanie w ten sposób wolnej pamięci jest zerowy). Niestety dysk bez buforowania chodzi znacznie wolniej i głośniej.
Jeśli nie wierzysz to
swapoff -a
a potem porównaj sobie jak zachowywać się będzie dysk podczas tych poważniejszych operacji, zobaczysz, że bez swapu będzie dużo głośniej i wolniej.
Ilość wolniej pamięci ma wpływ na to po jakim czasie nieużywane strony pamięci przenoszone są do swapu ale nie dzieje się to w momencie największego obciążenia i jeśli mamy swap w jednym miejscu na dysku to raczej są to operacje ciche bez charakterystycznego odgłosu latania głowicy po całej powierzchni dysku.
Tak krótko podsumowując może:
– zawsze jest dramat, jeśli pamięć/swap się kończy i kernel nie ma gdzie przerzucić danych
– lepiej mieć swap na dysku/w pliku, niż go nie mieć
– lepiej korzystać ze swapu w RAM (zram), niż z dysku
– lepiej mieć dużo RAM, niż korzystać ze swapu w RAM.
Ja chwalę sobie zram i swapiness = 0 a do tego, na końcu, tradycyjny swap. Ale najlepiej po prostu sprawdzić, które ustawienia komu pasują najbardziej.