Praca na desktopie z małą ilością RAM po raz pierwszy

Tło problemu

Tak się składa, że apetyt programów i systemów na pamięć RAM systematycznie rośnie, a moje desktopy ilością RAMu nie grzeszą. Faktem jest, że RAM jest teraz tani i praktycznie nie sposób kupić nowego komputera z mniej niż 2-4 GB RAM (chyba, że netbook jakiś), ale… nie każdy sprzęt jest nowy (mój nie jest), nie każdy pozwala na większą ilość RAM no i – przede wszystkim – inwestowanie w stosunkowo drogi, stary RAM do równie starego sprzętu nie ma IMO sensu. A skoro działa, to po co wymieniać? 😉

Poza tym, Linux potrafi działać na komputerach z małą ilością RAMu. Przynajmniej powinien umieć. W każdym razie możliwa jest w miarę komfortowa praca na desktopach z 0,5-1 GB RAM, nawet z KDE (3.5). Chociaż ostatnio pożegnałem się z KDE i zwykle używam LXDE. Oczywiście zależy, co się robi, ale przy typowym korzystaniu, typu włączenie komputera, uruchomienie paru programów (komunikator, przeglądarka WWW, konsola, coś do PDF, jakiś arkusz kalkulacyjny czy edytor tekstu itp.) i wyłączenie komputera na koniec dnia, wszysko było OK. Nawet na 0,5 GB nie odczuwałem specjalnego spowalniania i wykorzystania swap (czasem się zdarzało, ale nie jakoś krytycznie), ale odkąd korzystam z laptopów, hibernacji lub niewyłączania komputera, jest znacznie gorzej.

Główni winowajcy (na laptopie firmowym) to: Firefox 4 – 21% RAM, Icedove – 7,5%, Xorg – 5,4%, plugin-container (czytaj: flash) 3,8%, psi – 3,4% i konsole 2,8%. Na prywatnym lapku podobnie, tylko Firefox 3.6 zajmuje 11%, i dochodzi Chromium 6,7% (najwyższe wystąpienie, jest ich kilka) i liferea 5,4%. Niby nic specjalnego, ale po kilkunastu dniach okazuje się, że na swapie użyte jest 100-400 MB, a przy odpaleniu jakiejś większej aplikacji (czytaj Openoffice) dysk zaczyna ostro pracować. Przy czym dyski w laptopach to zwykle 5400 rpm, więc raczej nie są demonami szybkości… Jednak najgorsze dzieje się przy instalacji aktualizacji. Polecenie wajig daily upgrade praktycznie zabija maszynę, do tego stopnia, że chwilowo traci responsywność – trzeba czekać na przełączenie się między oknami, kursor myszy nie porusza się płynnie itp.

Podejście pierwsze: zmiana parametru swappiness

Określa on, jak chętnie system korzysta ze swap na dysku i przyjmuje wartości od 0 do 100 (szerszy opis parametru swappiness i dyskusja). Domyślnie wynosi on 60, co niekoniecznie jest wartością dobrą dla desktopa. Jak widać, trwa spór o to, czy lepiej ustawić 0 czy 100. Wyszedłem z założenia, że 0 jest lepszą wartością.

Tymczasowe ustawienie wartości swappiness na 0:

echo 0 > /proc/sys/vm/swappiness

Sprawdzenie aktualnego ustawienia:

cat /proc/sys/vm/swappiness

Jeśli chcemy, aby zmiana była wykonywana przy każdym uruchomieniu, to do /etc/sysctl.conf dodajemy linię:

vm.swappiness = 0

Dla jasności: ustawienie swappiness na 0 nie powoduje, że system w ogóle nie korzysta ze swap. Korzysta, jeśli musi tylko mniej chętnie w normalnych warunkach. Efekt: większość czasu jest lepiej, widać, że system praktycznie nie korzysta ze swap. Niestety, jak już zacznie korzystać, to utrata responsywności jest większa, niż przy domyślnej wartości 60 (ocena metodą najdoskonalszą, czyli na oko), więc nie do końca o to mi chodziło.

Podejście drugie: dodanie compcache

Okazało się, że w Debianie w końcu pojawił się compcache w postaci pakietu o nazwie compcache-tools. Pakiet jest nieco śmieszny (tzn. kwalifikuje się to na bug report…), bo działa na kernelu 2.6.32 ze Squeeze, natomiast na 2.6.38 z testing/unstable brakuje modułu, choć sam pakiet właśnie testing/unstable jest. W skrócie – działa to tak, że zamiast po prostu zapisywać dane z RAM na dysk, najpierw dodatkowo je kompresuje (w RAM), a dopiero potem ew. zrzuca na dysk. Czyli większe użycie procesora w zamian za mniejsze zużycie pamięci i mniej operacji na dysku.

Aktywacja compcache (nieco inna, niż w manie, wersja z mana z insmod nie działała):

modprobe ramzswap
rzscontrol /dev/ramzswap0 --memlimit_kb=153600 --backing_swap=/swapfile.swp --init
swapon /dev/ramzswap0

Kolejno: załadownie modułu, określenie parametrów i inicjacja kompresowanego swap (tu: 150 MB RAM i wykorzystanie swap w pliku /swapfile.swp), aktywacja swap. Miałem to włączone przez kilkanaście dni, łącznie ze swappiness 0, ale nie podejmuję się oceny. IMHO niespecjalnie się różni od gołego zmniejszonego swappiness. Natomiast po reboocie system podziałał z 2 dni (bez włączonego compcache) i… system plików (reiserfs) przemontował się w RO. Fsck znalazł błędy, przebudowanie drzewa naprawiło, ale… zgubił 76 plików – i tak były niedostępne (nic krytycznego, głównie moduły Perla).

WTF? Przecież nigdy wcześniej takich cyrków nie było. Co więcej, przy próbie włączenia compcache otrzymałem komunikat typu backing swapfile has holes. To z kolei naprowadziło mnie na ten opis problemu. Niestety, pasuje idealnie, co skutecznie zniechęciło mnie – przynajmniej na jakiś czas – do zabaw z compcache. Odkryłem co prawda nieużywaną partycję swap, której mógłbym użyć, zamiast pliku, ale najpierw doczytam dokładnie. Uszkodzenia systemu plików to nie jest to, co tygrysy lubią najbardziej.

The end?

Zanim będę kontynuował, pozwolę sobie zapytać, jakie ustawienia parametru swappiness i ew. inne ustawienia proponujecie dla desktopa z Linuksem i LXDE, stosunkowo mocnym procesorem i stosunkowo małą ilością pamięci RAM (1 GB)?

NTFS i Linux – nie tak różowo

NTFS i Linux nie wyglądają tak różowo jak można by się spodziewać. A w zasadzie wyglądają całkiem źle. Postanowiłem dodać mojej miłej możliwość korzystania z dysków w kieszeniach. Podczas instalacji nie były podłączone, więc o nich zapomniałem. Sprawa wydawała się prosta – zwykłe montowanie po UUID, dopisać do fstab i tyle. Znaczy 3 minuty roboty.

Niestety nie ma tak dobrze. Jeden z dysków był sformatowany z NTFS (próba automontowania przez HAL zakończona fiaskiem). Oczywiście pamiętam, że jest świetny NTFS-3G, który pozwala na zapis, więc nic nie wróżyło problemów – ot, następne 3 minuty roboty. Tymczasem ten driver nie pozwala na montowanie zasobów przez zwykłego usera. Szybki gógiel (liczmy 3 minuty) i… oczywiście problem jest opisany w dokumentacji i jest na to rozwiązanie, a raczej obejście.

Szybkie (3 min) wdrożenie i już mogę z poziomu użytkownika montować i odmontowywać dysk. Z CLI. Prawie jak sukces, bo przecież nie każę kobiecie na „prostym i łatwym” systemie babrać się z wierszem poleceń. No i ogólnie przydał by się jakiś wskaźnik, czy aktualnie jest zamontowane, czy też nie. No i jest coś takiego w KDE, z tego co pamiętam…

Szybkie dodanie ikonek typu dysk twardy na pulpit. Kliknięcie montuje. Ikonka się nie zmienia, niezależnie od tego, czy jest zamontowane, czy nie, opcja „odmontuj” się nie pojawia. W systemowych „urządzeniach przechowywania danych” z kolei są wymienne nośniki, ale coś HAL nie daje rady ich zamontować. Może kwestia tego, że próbuje do /media (i nie pozwala tego zmienić), a we fstab mam wpisy dla /mnt?

Na tym się skończyło wczoraj – właścicielka też chciała skorzystać z laptopa… Konkluzja: w zasadzie działa, ale nie w zadowalający sposób. Jeśli macie gotowe przepisy na eleganckie, graficzne montowanie (i odmontowanie) dysku wymiennego z NTFS pod KDE przez użytkownika bez praw roota, z możliwością zapisu (tu: Debian Lenny, ale pewnie niespecjalnie jest różnica), to chętnie je poznam. Chodzi mi o pomysły samodzielnie sprawdzone, googlać umiem i mam parę pomysłów, łączenie z wyczyszczeniem wpisów we fstab, użyciem ntfsmount (dead link) itp.

W miarę posuwania się naprzód, wpis będzie aktualizowany (ew. zamieszczę info o nowym wpisie, jeśli szczególnie długie miałoby być). Bo tylko bitwa przegrana, nie wojna. 😉

UPDATE: Sprawa z NTFS i Linux okazała się prostsza, niż myślałem. Po prostu – jak się spodziewałem – przekombinowałem. Wystarczyło dodać usera do grupy plugdev i usunąć wszystkie wpisy z fstab. Wówczas HAL pięknie sobie radzi z montowaniem i odmontowywaniem (z użyciem ntfs-3g), a user ma prawa RW. Identyfikacja następuje nie po UUID, a po LABEL. Czyli brakowało „tylko” obecności usera w grupie plugdev (mój ewidentny błąd) i zainstalowanego ntfs-3g. No ewentualnie jeszcze suid, jak opisano w FAQ.