Menu

Pomiędzy bitami

Techno, porno i duszno. Blog niezupełnie technologiczny.

Praca na desktopie z małą ilością RAM po raz trzeci - zram.

rozieblox

W poprzednich wpisach było parę przemyśleń i sugestii poprawy komfortu pracy na desktopie wyposażonym w niewielką ilość pamięci RAM, bez finalnego rozwiązania choć z paroma trickami poprawiającymi pracę, więc pora na podejście trzecie do tematu, inspirowane przez kumpla z IRC, który sprzedał mi "newsa" o zram.

Od pewnego czasu (okolice kernela 2.6.37, jeśli dobrze widzę) w kernelu Linuksa obecny jest moduł zram, pozwalający na tworzenie kompresowanych urządzeń blokowych w pamięci RAM. Wykorzystać to można podobnie jak compcache, czyli do tworzenia kompresowanego obszaru pamięci, używanego przez system przed przeniesieniem danych na swap na dysku. Idea jest prosta - swap na dysku jest tragicznie wolny i obciąża I/O, procesor zwykle się trochę nudzi, zresztą nie będzie miał dużo więcej pracy, a ilość wolnej pamięci się zwiększy.

Ogólnie zram jest ideowym spadkobiercą compcache, ale wygląda mi na prostszy i ideowo, i w użyciu. No i jest obecny w kernelu. Idea działania jest prosta: tworzymy swap z wyższym priorytetem, niż swap na dysku, na urządzeniu blokowym umieszczonym w kompresowanym obszarze pamięci. Początkowo dane tradycyjnie są w RAM, w przypadku, gdy system musi korzystać z przestrzeni wymiany, umieszcza je najpierw na swapie w RAM, a dopiero później - tradycyjnie - na swapie na dysku.

Prosty skrypt realizujący powyższe:

#!/bin/bash
modprobe zram
echo $((200*1024*1024)) > /sys/block/zram0/disksize # 200 MB
mkswap /dev/zram0
swapon -p 60 /dev/zram0

Kolejno: załadowanie modułu zram (można korzystać z parametrów), określenie rozmiaru dysku dla urządzenia /dev/zram0 na 200 MB (i jest to rozmiar swap, będący jednocześnie maksymalną wielkością zużytej pamięci, nie rozmiarem przeznaczonej pamięci na swap!), utworzenie swapu na urządzeniu  /dev/zram0, włączenie utworzonego swap z priorytetem 60.

Podobno efekty są świetne - zaczynam testy u siebie, wstępnie nie wygląda źle, na pewno niebawem podzielę się wrażeniami (jako update do tego wpisu) po dłuższym teście. Jeśli chodzi o rozmiar swap dla modułu zram, to zacząłbym od 10-20% całości RAM (u mnie 200 MB przy 1 GB RAM). Z tego co zauważyłem, skompresowane dane zajmują w praktyce ok. 40-50% oryginalnych.

Parę przydatnych poleceń diagnostycznych:

  • cat /sys/block/zram0/compr_data_size - rozmiar danych po kompresji
  • cat /sys/block/zram0/orig_data_size - rozmiar nieskompresowanych danych
  • cat /sys/block/zram0/mem_used_total - całkowita ilość zużytej pamięci
  • swapon -s - rozmiar i wykorzystanie poszczególnych swap (inna jednostka!)

Linki w temacie, które zdecydowanie warto przejrzeć, jeśli ktoś jest bardziej zainteresowany:

Szczególnie ostatni wpis zawiera fajny, uwzględniający ilość procesorów skrypt startowy. Można rozważyć użycie po przeanalizowaniu. IMHO dla 1-2 procesorów trochę kosmiczne wartości będą, uzależnianie wielkości swap od ilości procesorów też jest średnie, ale poprawienie to nic trudnego. Za to obsługą utworzonego urządzenia blokowego zajmie się w tamtym wariancie więcej, niż jeden procesor. Z drugiej strony kto ma więcej niż dwa rdzenie i mało RAM?

Miałem obawy co do działania hibernacji (z użyciem pm-utils, z uswsusp miałem problem...) w takiej konfiguracji. Niepotrzebnie, bo wygląda, że działa OK - zapewne hibernacja jest na tyle inteligentna, że rozpoznaje, czy ma do czynienia z fizycznym urządzeniem blokowym.

Oczywiście swap to nie jedyne możliwe zastosowanie modułu zram - więcej przykładów w linku do wiki Gentoo.

Komentarze (5)

Dodaj komentarz
  • Gość: [piotr] *.contium.pl

    a ile to jest mało ramu ? w sensie na jakich maszynach warto rozważać takie rozwiązanie?

  • Gość: [kleku] *.ksi-system.net

    Mało ramu to jest wtedy gdy zobaczysz że system często mieli dyskiem.

  • rozieblox

    Zależy od WM i używanych aplikacji. Definicja "jak mieli dyskiem" jest najlepsza, tylko trzeba uściślić, że mieli w celu użycia swapa. Samo użycie swapa też jest, niestety, słabym wskaźnikiem, bo system potrafi wyrzucić na swap nieużywane obszary pamięci.

    Na pewno 1 GB i mniej to aktualnie mało, nawet przy lekkim WM przy standardowych aplikacjach.

  • Gość: [Detron] *.legnica.vectranet.pl

    odświeżam stary tekst, ale tak sobie myślę zemiało by to zastosowanie obecnie również w przypadku dysku SSD, z tym że pamięci RAM to wypadało by mieć więcej niż 1G

  • rozieblox

    @Detron W jakim kontekście w przypadku dysku SSD? Jeśli chodzi o systemy plików z wbudowaną kompresją, to takowe istnieją.

    Co do 1 GB RAM - tekst jest sprzed 4,5 roku. Myślę, że spokojnie można tę liczbę podwoić. Chociaż mam komputery z 2 GB RAM i linuksowy destkop śmiga i bez kombinacji, choć korzystam, bo czemu by nie... Jednak apetyt na RAM aż tak nie wzrósł, a krytyczna jest ilość miejsca zajmowanego przez podstawkę. Cała reszta to czysty zysk aplikacji.

© Pomiędzy bitami
Blox.pl najciekawsze blogi w sieci