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