niedziela, 15 marca 2009


Co zrobić by laptop mniej się grzał i dłużej pracował na akumulatorze? Włączyć skalowanie częstotliwości procesora... No to do dzieła!






Otwieramy Terminal użytkownika root i instalujemy pakiet cpufreqd:

apt-get install cpufreqd

Sprawdzamy jaki mamy typ procesora (jeśli nie wiemy):
cat /proc/cpuinfo | grep "model name"

Od typu procesora będzie zależeć typ modułu jaki załadujemy:
AMD K6: powernow-k6
AMD Athlon i pokrewne: powernow-k7
AMD Athlon 64 i pokrewne: powernow-k8
Pentium 4, D, Celeron M, D: p4-clockmod
Pentium M, Core Duo, Core 2 Duo: speedstep-centrino

Ostatecznie, w razie problemów, można spróbować użyć modułu acpi-cpufreq.

Cpufreq udostępnia kilka typów zarządzania częstotliwością:
cpufreq_performance - tryb nastawiony na wydajność
cpufreq_powersave - tryb nastawiony na oszczędzanie energii
cpufreq_ondemand - zależny od obciążenia komputera
cpufreq_conservative - podobny do ondemand, ale działające ze zwłoką

Teraz musimy załadować moduły, by przetestować ich działanie. Dla Celerona M i trybu ondemand wygląda to tak:

modprobe p4-clockmod
modprobe cpufreq_ondemand


Ustawiamy tryb pracy ondemand:

echo ondemand | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

W przypadku procesora dwurdzeniowego należałoby wpisać dodatkowo:

echo ondemand | tee /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

Teraz możemy sprawdzić działanie dodając aplet Monitor częstotliwości procesora do panelu, lub wpisując w konsoli:

cpufreq-info

Powinniśmy zobaczyć coś w stylu:
vladimir:/home/adi# cpufreq-info cpufrequtils 004: cpufreq-info (C) Dominik Brodowski 2004-2006 Report errors and bugs to cpufreq@lists.linux.org.uk, please. analyzing CPU 0: driver: p4-clockmod CPUs which need to switch frequency at the same time: 0 hardware limits: 217 MHz - 1.73 GHz available frequency steps: 217 MHz, 433 MHz, 650 MHz, 867 MHz, 1.08 GHz, 1.30 GHz, 1.52 GHz, 1.73 GHz available cpufreq governors: powersave, conservative, userspace, ondemand, performance current policy: frequency should be within 650 MHz and 1.73 GHz. The governor "ondemand" may decide which speed to use within this range. current CPU frequency is 650 MHz (asserted by call to hardware). cpufreq stats: 217 MHz:0,00%, 433 MHz:0,00%, 650 MHz:19,57%, 867 MHz:0,31%, 1.08 GHz:0,32%, 1.30 GHz:0,00%, 1.52 GHz:0,65%, 1.73 GHz:79,14% (27)


Musimy dodatkowo zadbać o uruchamianie sterowania częstotliwością przy starcie systemu, wpisujemy:
echo p4-clockmod | tee -a /etc/modules echo cpufreq_ondemand | tee -a /etc/modules

I edytujemy plik /etc/cpufreqd.conf:

gedit /etc/cpufreqd.conf

Listing pliku na moim komputerze:
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
#enable_remote=1
#remote_group=root
[/General]

#[acpi]
#acpid_socket=/var/run/acpid.socket
#[/acpi]

#[nforce2_atxp1]
#vcore_path=/some/path
#vcore_default=1500
#[/nforce2_atxp1]

#[sensors_plugin]
#sensors_conf=/some/file
#[/sensors_plugin]

[Profile]
name=On Demand High
minfreq=40%
maxfreq=100%
policy=ondemand
[/Profile]
#
[Profile]
name=On Demand Low
minfreq=10%
maxfreq=80%
policy=ondemand
[/Profile]


##
# Basic states
##
# when AC use performance mode
[Rule]
name=AC Rule
ac=on # (on/off)
profile=On Demand High
[/Rule]

# stay in performance mode for the first minutes
[Rule]
name=AC Off - High Battery
ac=off # (on/off)
battery_interval=70-100
#exec_post=echo 5 > /proc/acpi/sony/brightness
profile=On Demand High
[/Rule]

# conservative mode when not AC
[Rule]
name=AC Off - Medium Battery
ac=off # (on/off)
battery_interval=30-70
#exec_post=echo 3 > /proc/acpi/sony/brightness
profile=On Demand Low
[/Rule]

# conservative mode when not AC
[Rule]
name=AC Off - Low Battery
ac=off # (on/off)
battery_interval=0-30
#exec_post=echo 3 > /proc/acpi/sony/brightness
profile=On Demand Low
[/Rule]


Jeśli używamy GNOME, musimy wziąć pod uwagę, że ono też potrafi sterować częstotliwością. Otwieramy Aplikacje->Narzędzia systemowe->Edytor konfiguracji i w drzewie /apps/gnome-power-manager/cpufreq zmieniamy policy_ac z performance na ondemand lub inny tryb. To samo można zrobić z policy_battery.

Uff, to chyba wszystko, restartujemy komputer by zobaczyć czy skalowanie działa prawidłowo.

Brak komentarzy:

Prześlij komentarz