Návod na nastavenie škálovania frekvencie procesora
Autor:
Ľubomír Host
| Sekcia:
Tipy a triky
| Dátum: 2005-09-19
Škálovaním frekvencie procesora sa na notebooku dá zvýšiť výdrž batérie. Druhým efektom je to, že sa nebude tak často zapínať ventilátor a tým pádom bude váš miláčik oveľa tichší.
Spočiatku som používal aplikáciu cpufreqd, ale nebol som so škálovaním spokojný. Aplikácia zabera podľa mňa príliš veľa strojového času. Preto som hľadal alternatívu a najviac sa mi isvedčilo používanie modulu cpufreq_ondemand.
Na mojom notebooku Twinhead Efio! 123A mám takýto procesor:
# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : mobile AMD Athlon(tm) XP-M (LV) 1500+
stepping : 1
cpu MHz : 863.707
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov
pat pse36 mmx fxsr sse pni syscall mp mmxext 3dnowext 3dnow
bogomips : 1703.93
Podpora inštrukcií 3dnow zabezpečuje práve to, čo chceme dosiahnuť.
Konfigurácia jadra
Aby mi fungovalo škálovanie frekvencie podľa mojich predstáv, musím do jadra vložiť tieto moduly:
# modprobe cpufreq_ondemand
# modprobe cpufreq_powersave
# modprobe cpufreq_userspace
# modprobe powernow_k7
Tieto moduly sú dostupné po zapnutí týchto volieb pri kompilácii jadra:
#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=m
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
CONFIG_CPU_FREQ_TABLE=m
A ešte konkrétny modul pre môj procesor:
#
# CPUFreq processor drivers
#
# CONFIG_X86_ACPI_CPUFREQ is not set
# CONFIG_X86_POWERNOW_K6 is not set
CONFIG_X86_POWERNOW_K7=m
CONFIG_X86_POWERNOW_K7_ACPIý
Užívateľské prostredie
V zsh mám nadefinovanú takúto funkciu:
# function periodic is executed every $PERIOD seconds
export PERIOD=30
periodic()
{
# print actual CPU freq.
file="/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq";
[ -f "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" ]
&& file="/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq";
[ -f "$file" ] && sudo cat $file | \
awk '{ printf "CPU0: %g MHz", $1 /1024.0 ; }'
acpi
}
ktorá mi vždy vypíše, akú mám aktuálnu frekvenciu procesora a stav baterky. Výstup mám ešte trošku ofarbený, ale to ponechávam ako cvičenie čitateľovi.
V mojom window manažéri IceWM mám nadefinované extra menu na manuálne doladenie parametrov škálovania frekvencie, ale tieto položky používam iba výnimočne.
menu "cpufreq" /usr/share/icons/Crystal/16x16/actions/wizard.png {
prog "performance" "" sudo /usr/local/bin/governor performance
prog "ondemand 30" "" sudo /usr/local/bin/governor ondemand up_threshold 30
prog "ondemand 40" "" sudo /usr/local/bin/governor ondemand up_threshold 40
prog "ondemand 50" "" sudo /usr/local/bin/governor ondemand up_threshold 50
prog "ondemand 60" "" sudo /usr/local/bin/governor ondemand up_threshold 60
prog "ondemand 70" "" sudo /usr/local/bin/governor ondemand up_threshold 70
prog "ondemand 80" "" sudo /usr/local/bin/governor ondemand up_threshold 80
prog "ondemand 90" "" sudo /usr/local/bin/governor ondemand up_threshold 90
}
Pretože nastavovanie takýchto parametrov jadra si vyžaduje administrátorské privilégia, musíme nakonfigurovať sudo. K tomu najprv vytvoríme pomocný skript, ktorý cez sudo umožňíme spúšťať s administrátorskými právami.
#!/bin/sh
#
# /usr/local/bin/governor
#
# Developed by Lubomir Host 'rajo' <rajo AT platon.sk>
# Copyright (c) 2005 Platon SDG, http://platon.sk/
# Licensed under terms of GNU General Public License.
# All rights reserved.
#
# Changelog:
# 2005-04-09 - created
#
# $Platon$
BASE=/sys/devices/system/cpu/cpu0/cpufreq
if [ -f "$BASE/scaling_governor" ]; then
echo "echo $1 > $BASE/scaling_governor";
echo $1 > "$BASE/scaling_governor";
fi
[ -z "$2" ] && exit 0
[ -z "$3" ] && exit 0
if [ -f "$BASE/$1/$2" ]; then
echo "echo $3 > $BASE/$1/$2";
echo $3 > "$BASE/$1/$2";
fi
Teraz je čas nakonfigurovať sudo. Použite na to príkaz visudo. Mali by ste však zvládať základy editora Vim. Pridajte tieto riadky:
Cmnd_Alias CPUFREQ = \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq, \
/bin/cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq, \
/usr/local/bin/governor
rajo ALL = (ALL) NOPASSWD: CPUFREQ
Snáď je to všetko, čo k pohodlnému nastavovaniu škálovanie frekvencie procesora potrebujete. Na skúmanie aktuálne nastavených parametrov sa pohrabte v adresári /sys/devices/system/cpu/cpu0/cpufreq/.
Veľa zdaru!
Ďalšie zdroje
http://fatcat.ftj.agh.edu.pl/~nelchael/
http://cpuspeedy.sourceforge.net/
http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html
http://cpufreqd.sourceforge.net
http://mnm.uib.es/~gallir/cpudyn/
http://www.goop.org/~jeremy/speedfreq/
Ľubomír Host
|