Ostatnio większość czasu używając komputer, spędzam w przeglądarce (cóż, takie czasy ;p). Zaczęło mnie zastanawiać: "Po co mi w takim razie kręcący się i marnujący prąd dysk, który nic nie powinien w tym momencie robić?" (sam nie wiem, jak na to wpadłem, widocznie mam za dużo czasu...). Innym też razem przeglądając manual hdparm-a natknąłem się na opcje -y -Y, które jakoś nie działały tak, jakbym to sobie wyobrażał. Zacząłem więc kombinować co by tu zrobić, żeby wyłączyć dysk i tak oto powstał ten artykuł...

Jeżeli:

to jesteś w dużej mierze podobny do mnie i powinieneś przeczytać ten artykuł ;)

Uważam, że jest to zagadnienie dla bardziej wtajemniczonych, tak więc celowo nie będę tu opisywał stylem "dla zielonych".

Zaczynamy!

1. Sztuczki z Chromium

Jednym ze źródeł tego tekstu jest artykuł Chromium Tips and Tweaks [1] , w którym jest wiele opisane. Jeśli nie groźny ci angielski, to polecam to jako lekturę uzupełniającą. Ja wybrałem tylko kilka tipsów, które są niezbędne do tej zabawy.

1. Zabiegi kosmetyczne

Musimy nieco zmodyfikować sposób uruchamiania przeglądarki. W tym celu edytujemy plik /usr/share/applications/chromium.desktop. W tym pliku szukamy słowa Exec i dopisujemy tam dwie opcje tak, aby cała linijka wyglądała następująco:

Exec=/usr/bin/chromium %U --memory-model=high --disk-cache-size=600000000

zapisujemy i wychodzimy z edytora.

Jest to zabieg tylko ułatwiający niektórym życie. Można pominąć ten krok i uruchamiać przeglądarkę 'z palca' w powyższy sposób.

Niestety, przy pierwszej lepszej aktualizacji chromium, plik powróci do pierwotnej postaci, więc można go przekopiować do lokalizacji /usr/local/share/applications. Wtedy co prawda będą dwie ikony w naszym menu, ale... No kto co chce. ;) Wiadomo o co chodzi.

2. Cache przeglądarki - wio do RAM-u

Aby nasza przeglądarka chodziła, gdy dysk będzie wyłączony, cały jej cache należy przenieść do pamięci podręcznej. W tym celu należy przemontować folder, w którym znajduje się cache przeglądarki. W przypadku chroma (i chyba większości przeglądarek) jest to /home/<USER>/.cache/ . Aby zawartość tego katalogu była w RAMie, należy dodać do /etc/fstab linijkę:

tmpfs   /home/<USER>/.cache tmpfs   noatime,nodev,nosuid,size=500M  0   0

W ten sam sposób możemy przemontować inne foldery, które uważamy za stosowne, aby były w ramie. U mnie jest tego sporo (i też polecam tak zrobić!):

tmpfs       /home/<USER>/.cache tmpfs   noatime,nodev,nosuid,size=500M  0   0
tmpfs       /tmp        tmpfs   defaults,noatime,nosuid,size=500M   0   0
tmpfs       /var/local  tmpfs   defaults,noatime    0   0 
tmpfs       /var/lock   tmpfs   defaults,noatime    0   0 
tmpfs       /var/log    tmpfs   defaults,noatime    0   0 
tmpfs       /var/mail   tmpfs   defaults,noatime    0   0 
tmpfs       /var/opt    tmpfs   defaults,noatime    0   0 
tmpfs       /var/run    tmpfs   defaults,noatime    0   0 
tmpfs       /var/spool  tmpfs   defaults,noatime    0   0 
tmpfs       /var/tmp    tmpfs   defaults,noatime    0   0 

UWAGA!

Powyżej jest też zamontowany katalog /var/log, w którym są wszelkie logi potrzebne w czasie diagnozowania błędów w naszym systemie. Jest on też konieczny do uśpienia dysku. Trzeba być świadomym tego, że przy każdym restarcie systemu, tracimy całą zawartość tych katalogów (stąd warto wstrzymywać system zamiast go wyłączać). Najlepiej przed restartem zrobić backup tej lokalizacji.

Przy okazji fstab-a

Skoro już go modyfikujemy, to musimy nieco inaczej zamontować partycje z systemem, mianowicie:

/dev/sdaX   /               ext4    noatime,errors=remount-ro,commit=600    0       1

3. Profil przeglądarki - wio do RAM-u

Służy do tego Profile-sync-daemon [2]. Aby to zainstalować, wykonujemy następujący szereg poleceń:

# echo "deb http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" > /etc/apt/sources.list.d/graysky.list
# echo "deb-src http://ppa.launchpad.net/graysky/utils/ubuntu quantal main" >> /etc/apt/sources.list.d/graysky.list
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FF7F9516
# apt-get update
# apt-get install profile-sync-daemon

Na koniec musimy edytować plik /etc/psd.conf, w którym dopisujemy dwie rzeczy tak, aby w efekcie było:

...
USERS="<USER>"
...
BROWSERS="chromium"

gdzie to twój login oczywiście.

FAKT

Te 3 rzeczy możemy (a według mnie winny być one domyślne) zrobić, nawet jeśli nie chcemy zatrzymywać dysku. Są one bezpieczne dla naszego systemu (przynajmniej nie wiadomo mi nic o czychających niespodziankach...) i sprawią one, że dysk nie będzie 'zbytnio męczony', a zarazem przyspieszy wydajność naszej przeglądarki :D

Jeśli ktoś ma dysk SSD, to już na pewno powinno go to zainteresować ;)


UWAGA! Resztę robisz na własne ryzyko!

Reszta artykułu, będzie nieco luźniejsza, ponieważ to już od własnych preferencji użytkownika będzie zależał efekt.

2. Wyłączamy księgowanie (journaling) w ext4

Jest to niezbędny zabieg, ponieważ średnio co 2-5s coś jest zapisywane na dysku. Nie będę tu opisywał, dlaczego i po co tak się dzieje, bo nie jest to celem tego artykułu.

UWAGA! Gdy wyłączysz księgowanie, utrata prądu podczas pracy na komputerze może spowodować problem z jego ponownym powstaniem. Tak więc musisz mieć to na uwadze!

Aby wyłączyć księgowanie należy odpalić jakieś liveCD i wykonać kolejno:

# tune2fs -O ^has_journal /dev/sdaX
# e2fsck -f /dev/sdaX

Aby włączyć ponownie księgowanie należy wykonać powyższe komendy bez znaczka '^'.

Teraz:

# reboot.

3. Inne mielące dysk rzeczy...

Ostatnią rzeczą jest wyłącznie (a właściwie spowolnienie, bo wyłączyć się go całkowicie [chyba] nie da, a szkoda) flush-a. Co to jest i po co możemy przeczytać między innymi tu [3].

Wykonujemy:

# sysctl -w vm.dirty_writeback_centisecs=120000
# sysctl -w vm.dirty_ratio=90
# sysctl -w vm.dirty_background_ratio=90

Te wartości lubią się czasem zmieniać (np. gdy podłączymy zasilanie), dlatego warto ich pilnować. Można tak:

# sysctl vm.XYZ

albo klasycznie, czyli:

$ cat /proc/sys/vm/dirty_*

bo w sumie tam one się znajdują...

Wydaje mi się, że można by jeszcze lepiej ustawić te opcje, ale nie mogę znaleźć złotego środka... Jeśli ktoś zauważy u siebie lepsze wyniki przy innych wartościach, to proszę się tym podzielić na forum w wątku: Jak wyłączyć dysk [4].

4. Wiekopomna chwila, czyli wyłączenie dysku na pracującym systemie

Wreszcie wspomniana na samym początku opcja hdparm-a jest tu przydatna ;). Jeśli zapragniemy wyłączyć w danym momencie wykonujemy:

# hdparm -Y /dev/sda

A jeśli chcemy się wyręczyć automatem to:

# hdparm -B60 /dev/sda
# hdparm -S1 /dev/sda

co sprawi, że po 5s dysk będzie sam szedł spać.

5. A skąd mam wiedzieć, że dysk nie chodzi?

Ja osobiście robię to na słuch. Jak wokoło jest dosyć cicho, to słychać dysk :) Można też sprawdzić komendą

# hdparm -C /dev/sda

Dodatkowo mój laptop (jak większość) ma ikonkę, która mruga, jak są operacje na dysku. Gdy nie świeci to... no właśnie :)

6. Podsumowanie

Dzięki tym wszystkim zabiegom mój dysk wstaje średnio co 7min (min 5min, max 10min) tylko na 5s. Wydłużyło mi to czas pracy baterii (mniej więcej, bo rzeczywistego jeszcze nie sprawdzałem) z 6h do 7h, co ma sens :)

Zachęcam do tuningu w miarę swoich potrzeb, bo nie jest to trudne (najgorsze za nami ;p ). Wystarczy włączyć opcję:

# echo 1 > /proc/sys/vm/block_dump

i obserwować logi:

# tail -f /var/log/syslog |grep sdaX

W ten sposób będziemy widzieć co w jakim momencie jest zapisywane na dysku. Jako że używam gnoma zauważyłem w ten sposób, że od czasu do czasu chodzą demony upowerd i packagekitd, które też wybudzały mi dysk. Po ich ubiciu, w pewnych okolicznościach (o tym za chwilę), rekord jaki osiągnąłem na wyłączonym dysku to 21min. Sądzę, że byłby dłuższy, ale zacząłem się niecierpliwić i niestety musiałem dysk wybudzić...

Jakie to okoliczności?

Może pojechałem po bandzie, ale było to - robienie nic... Tylko obserwowanie logów. Nawet wyłączyłem przeglądarkę, więc taki efekt może nie za ciekawy, ale miałem powód. Otóż gdy bawiłem się przeglądarką, to zapomniałem o jeszcze jednej rzeczy, która wybudza dysk, a o której jest ostatnio dosyć głośno... To ciasteczka :) Nie chciałem stracić zapisanych już rzeczy i dlatego wyłączyłem przeglądarkę...

Tak więc jest potencjał. Jeśli ktoś posiada proste środowisko graficzne oraz domontuje jeszcze katalog z ciastkami do ramu to efekt może być taki, jaki właśnie chciałem.

Enjoy!


Przypisy:

  1. https://wiki.archlinux.org/index.php/Chromium_Tips_and_Tweaks
  2. https://wiki.archlinux.org/index.php/Profile-sync-daemon
  3. http://lwn.net/Articles/326552/
  4. http://forum.dug.net.pl/viewtopic.php?id=23212&p=1