Odmładzanie szrotu komputerowego

Jest taki komputer, z którego korzystam w domu rodziców. Poleasingowy desktop, z monitorem CRT 17″, czyli zabytek. Służy do przeglądania WWW, jako terminal oraz jako dodatkowy storage na backupy zdjęć na starych, niewielkich dyskach 3,5″. Korzystam z niego sumarycznie tydzień, może dwa w roku. Kiedyś niewiele więcej. Wyposażony w Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz i 2 GB RAM, w zasadzie spełniał swoje zadanie.

Niestety, 2 GB RAM powodowały, że z niektórymi rzeczami nie dawał rady. I pół biedy, jeśli było to kilka zakładek WWW. Gorzej, że zaczął mieć problem z otwarciem co większych zdjęć z poczty. Korzystam z niego na tyle rzadko, że wymiana sprzętu nie miała sensu. Z drugiej strony wyprzedaję trochę starych podzespołów, więc wiem, jak niskie są ceny. Postanowiłem sprawdzić, czy da się dołożyć pamięci RAM.

Płyta główna

Okazało się, że płyta to DQ35JO i obsługuje wg dmidecode maksymalnie do 8 GB RAM DDR2. Co więcej, ma cztery sloty. Rozważałem dokupienie 2×2 GB, co pozwoliłoby rozbudować pamięć do 4 GB, a przy odrobinie szczęścia do 6 GB. Ceny do zakupu od ręki były nieadekwatne (ok. 40 zł za ww. konfigurację), ale temat nie był pilny. Trochę policytowałem i kupiłem 2×1 GB RAM za… 1 zł. Plus wysyłka.

Procesor

Trochę się rozochociłem, więc sprawdziłem, jakie jeszcze procesory obsługuje płyta. Znowu pozytywne zaskoczenie, bo można włożyć całkiem sporo modeli procesorów, w tym Core 2 Quad. Ceny tych ostatnich znowu były nieadekwatne, ale znalazłem dostępne od ręki Intel Core 2 Duo E8400 3.0 GHz za… 5 zł. Specyfikacja tutaj. Jak widać TDP bez zmian, taktowanie 25% większe, cache L2 trzy razy (sic!) większy. Grzech nie wymienić, znaczy, bo procesor szybszy. Oczywiście to sztuka dla sztuki, pewnie nie odczuję w praktyce różnicy, ale chodzi głównie of fun z grzebania w sprzęcie.

Zakupy

Szczęśliwie sprzedawca miał w ofercie pastę termoprzewodzącą na procesor. Zrobiło się całe 11 zł plus wysyłka, która niemal podwajała cenę. Jak szaleć to szaleć, z miejscem na dyskach też było słabo, więc dorzuciłem dysk 500 GB za 35 zł dzięki czemu wysyłka załapała się na Smart! Dysk się przyda, bo w maszynie był stary, mały dysk IDE oraz niewiele większy SATA. Istotniejsze dane tzn. backupy leżą sobie na softraid RAID1, pozostała część to system i śmieci. Jedyne o czym zapomniałem i musiałem dokupić później, już gdzie indziej, to przejściówka do zasilania dysku SATA za 7 zł z wysyłką.

Wymiana odbyła się błyskawicznie. Najpierw wymieniony RAM i sprawdzenie przy pomocy memtest86+, potem procesor. Cieszę się, że nie skusiłem się na mocniejszy procesor, bo radiator jest… taki sobie. Jakiś stockowy zapewne, mało metalu, nie wygląda na coś potrafiącego odprowadzać większą ilość ciepła.

Ekonomia

Oczywiście z ekonomicznego punktu widzenia sens jest żaden, bo chodziło o fun. Zamiast rozbudowywać stary sprzęt, pewnie bardziej opłaca się kupić gotowy, kompletny zestaw z 4 GB RAM i dyskiem. Sprawdziłem i używany stacjonarny komputer z Core 2 Quad można kupić już za 170 zł. A Core 2 Duo za 130 zł. I to biorąc tylko pod uwagę oferty od Super Sprzedawców.

Oczywiście kupując takiego szrota „do WWW” warto zwrócić uwagę na procesor i rozmiar dysku. Dopłacając symboliczne kwoty można kupić znacznie lepszy sprzęt. Do sporadycznego korzystania pobór prądu nie robi różnicy. Jeśli jednak komputer miałby być włączony codziennie, przez dłuższy czas, warto przeliczyć kalkulatorem, czy nie lepiej zainwestować w coś bardziej energooszczędnego.

Jak obliczyć wolną pamięć RAM w Linuksie?

Ile mam wolnej pamięci w systemie? to częste pytanie i użytkowników desktopów, i administratorów. Na każde pytanie istnieje prosta, błędna odpowiedź i podobnie jest w tym przypadku, choć ustalanie ilości wolnej pamięci RAM wydaje się trywialną sprawą. Większość ludzi korzysta z polecenia free, którego przykładowy wynik może wyglądać następująco (desktop):

total       used       free     shared    buffers     cached
Mem:       3926996    3614388     312608          0      82656    1305692
-/+ buffers/cache:    2226040    1700956
Swap:      1022964      20480    1002484

Typowa interpretacja byłaby zapewne w tym przypadku taka, że wolnych jest 312608 kB RAM. Niezupełnie jest to prawdą. Tzn. tyle pamięci faktycznie jest zupełnie nieużywanej, ale tak naprawdę w razie potrzeby dla aplikacji dostępne jest znacznie więcej pamięci i należałoby raczej patrzeć na drugi wiersz, nie pierwszy, czyli bliższym prawdy wynikiem jest, że wolnych w tym przypadku jest 1700956 kB RAM.

W przypadku serwerów z Linuksem, ilość wolnej pamięci łatwiej odczytać, szczególnie na potrzeby skryptów, z /proc/meminfo/:

cat /proc/meminfo | head -n 5
MemTotal:        3926996 kB
MemFree:          296944 kB
MemAvailable:    1589592 kB
Buffers:           82692 kB
Cached:          1305316 kB

Patrząc na wartości z /proc/meminfo, ilość zajętej i wolnej pamięci RAM można liczyć w następujący sposób:

Free RAM = MemFree + Buffers + Cached
Used RAM = MemTotal - (MemFree + Buffers + Cached)

Jednak i to niezupełnie jest prawdą, bo do w skład Cached wchodzą np. obszary używane przez tmpfs, które nie mogą być zwolnione. Dlatego niedawno w /proc/meminfo dodano kolejną wartość MemAvailable, której zadaniem jest podawanie wprost ilości dostępnej do wykorzystania przez programy (czyli, potocznie, wolnej) pamięci. Jeśli taka wartość jest podana, to zamiast powyższych wzorów lepiej skorzystać z:

Free RAM = MemAvailable
Used Ram = MemTotal - MemAvailable

Linki:

  1. http://www.linuxatemyram.com/
  2. https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

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

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.