Zielone procesorki…

… czyli rzecz o skalowaniu częstotliwości taktowania procesora.

Wprowadzenie

Jakoś zawsze miałem pecha do nowych technologii – świat wprowadzał coraz to wymyślniejsze sposoby wykorzystania ludzkiej wiedzy, a ja albo w ogonie postępu byłem, albo coś mi tam nie chciało na Linuksie zadziałać. Podobnie miała się rzecz ze skalowaniem częstotliwości procesora. Nie zwracałem do tej pory na to większej uwagi, bo laptop który był na mych usługach od paru lat, po prostu nie miał takiej funkcjonalności (tak, z moim szczęściem kupiłem właśnie takiego), na pudle stacjonarnym przewijały mi się różnie Durony, Athlony, które na owe czasy też nie chciały dać się oszczędniej taktować, itp. Zatem zaszufladkowałem temat z etykietką ‘Nie wiem, nie znam się, zarobiony jestem’. A potem kupiłem (ostatnio) laptopa, na którym zainstalowałem sobie Ubuntu i takie rzeczy jak skalowanie procesora zadziałały z marszu. “Ba, bo to laptop, one są stworzone do takich rzeczy” i byłbym przeszedł do porządku dziennego, gdyby nie fakt, że choćby drożeje energia elektryczna, czy też czuję się odpowiedzialny za dziurę ozonową – no ruszyło mnie sumienie. Czy mój pecet biurkowy musi grzać ile wlezie?

Plac zabaw

Mój Debian jest tak leciwy, że pamięta jeszcze czasy schwytania Saddama. Oczywiście, cały czas karmię go aktualizacjami z ‘unstable’, ale nawet nie liczę, że w cudowny sposób te wszystkie dogodności Linuksa same, magicznie, zaczną mi działać. Rozejrzałem się zatem wkoło i oto, czego potrzebujemy, aby dało się opanować rozpierające procesor moce :
– kernel 2.6.X – in nowszy, tym lepiej – ja testowałem wszystko na 2.6.22 (ponoć od 2.6.20 nie powinno już być problemów ze skalowaniem)
– paczki cpufrequtils, sysfsutils (instalowane tak jak lubisz – apt-get, aptitude, synaptic, itp.)
– komputer z procesorem

Bat na niepokornego

Mamy zatem odpowiednie paczki, kernel taki jak trzeba i jesteśmy pełni dobrej woli ocalenia świata od zalewającego go ciepła z wnętrza naszego komputera.

Teraz będzie z górki – bo musimy ustalić, jaki mamy procesor. Onaniści Miłośnicy sprzętowi na pewno znają na pamięć nawet numer seryjny tego podzespołu, ale jak ktoś nie wie, to :

cat /proc/cpuinfo | grep name

Po co nam to wiedzieć? Aby załadować odpowiedni sterownik obsługujący skalowanie naszego procesora. A do wyboru mamy moduły:

Pentium 4, Celeron D, Pentium D, Celeron M : p4_clockmod
Pentium M, Core Duo, Core 2 Duo : speedstep_centrino
AMD K6 : powernow_k6
AMD K7 (Athlon, Duron, Sempron 32) : powernow_k7
AMD K8 (Athlon 64, Turion 64, Sempron 64, Opteron 64) : powernow_k8
Żaden z powyższych : acpi_cpufreq (bez gwarancji, że zadziała)

W katalogu /lib/modules/`uname -r`/kernel/arch/i386/kernel/cpu/cpufreq/ można wypatrzeć jeszcze inne moduły – jeżeli dla naszego procesora nie zadziała żaden z powyższych sterowników, można kombinować z tymi, które znajdziemy właśnie w tamtym katalogu (modinfo nazwa_modułu podpowie, do jakich modeli możemy ich użyć).

Wybrany moduł ładujemy:

modprobe nazwa_modułu

Polityka, kajdany dla niesfornych

Mając załadowaną obsługę skalowania, potrzebujemy jeszcze jednego modułu (lub kilku), określającego tzw. politykę zarządzania zasobami (policy governor). I znowu przegrzebujemy stosowne katalogi i znajdujemy, że możemy użyć następujących zasad:

ondemand : moja ulubiona reguła, która ustawia prędkość procesora dynamicznie, w zleżności od obciążenia. Moduł cpufreq_ondemand
performance : ustawia taktowanie na najwyższe z możliwych, statycznie. Moduł cpufreq_performance
powersave : a ten z kolei, ustawia statycznie taktowanie na najniższe z możliwych. Moduł cpufreq_powersave
conservative : podobnie jak ‘ondemand’, reguluje taktowaniem dynamicznie, lecz sprawdza się lepiej na laptopach. Moduł cpufreq_conservative

Jeżeli już zdecydujemy się na jedną z powyższych zasad karcenia niepokornego procesorka:

modprobe moduł_polityczny

Ach śpij…

Mamy sterownik, mamy wybraną politykę zarządzania taktowaniem, co teraz. Musimy przekazać ‘gdzieś’, jak ma być procesor skalowany. W tym celu edytujemy plik /etc/init.d/cpufrequtils i odnajdujemy linijkę z :


GOVERNOR=”ondemand”
MAX_SPEED=”2128000″
MIN_SPEED=”1596000″

Bystrzaki dostrzegą, że w miejsce “ondemand” mogą (a nawet powinni) wpisać wybraną przez siebie politykę zarządzania ruchem.
MAX_SPEED i MIN_SPEED? Teoretycznie, może zostać bez wartości (puste “”), ale dla pewności wpisałem wartość maksymalną i najniższą jaką można ustawić na moim CoreDuo2. A jaką można na waszych? Wystarczy uruchomić polecenie cpufreq-info -l:

1596000 2128000

Ten wynik to odpowiednio wartość dla MIN_SPEED i MAX_SPEED.

Ok, powypisywaliśmy w tym pliku co trzeba, restartujemy cpufrequtils (/etc/init.d/cpufrequtils restart). I…

Czy to działa?

… sprawdzamy, czy coś zdziałaliśmy przez cpufreq-info -p:

1596000 2128000 ondemand

Jeżeli wynik pokrywa się z polityką jaką ustaliliśmy wcześniej i MIN_SPEED i MAX_SPEED, to można świętować. Prawie. Pozostaje jeszcze dopisać do /etc/modules moduły które załadowaliśmy do pamięci.

echo "nazwa_modułu_sterownika" >> /etc/modules
echo "nazwa_modułu_polityki" >> /etc/modules

Cieszymy się?

Teoretycznie, to powinno wystarczyć, aby wszystko zachowywało się tak, jak byśmy tego chcieli. Jednak, dla starszych wersji cpufrequtils, może zajść potrzeba ustawienia ‘na sztywno’ polityki zarządzania, w taki dziwny sposób (do sprawdzenia w biegu):

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

I dopisać do /etc/sysfs.conf:

devices/system/cpu/cpu0/cpufreq/scaling_governor = ondemand

Być może na całe powyższe istnieje ładniejszy (z GUI?) sposób, ale w terminalu jest wygodniej a i mój system tylko na takie szturchanie w wątpia reaguje.

Poza tym, lubiący wskaźniki, wykresiki, mogą zainstalować sobie paczkę gnome-applets (dla Gnome) lub xfce4-cpufreq-plugin dla XFCE (swoją drogą, pluginy dla panelu to najbrzydszy element XFCE). Dodajemy do panelu odpowiedni applet i już widzimy, czy i jak się skaluje. Niestety, nie podam analogicznej wtyki dla KDE, bo nie znam. Dodatkowym bajerem jest np. paczka cpufreqd, która umożliwia profilowania polityki oszczędzania taktów – np. działamy na baterii, to włącza się conservative, na zasilaniu – ondemand, itp.

I w ten oto sposób staliśmy się w pełni świadomymi mieszkańcami naszej planety, którzy dbają o limitowanie wydzielanej i pobieranej energii. I rachunki niższe płacą. A co.