Portál AbcLinuxu, 1. května 2025 09:24

Cpufreq – pro procesory mnoha frekvencí

6.3.2006 04:27 | Přečteno: 4831× | Hardware | poslední úprava: 18.1.2007 00:51

Současné x86 procesory (K8 a všechny mobilní) umějí za běhu přepínat mezi několika frekvencemi podle potřeby. Linux samozřejmě dokáže jejich schopnost náležitě využít.

Hardware

Frekvenci umějí měnit téměř všechny procesory z rodiny K8 (AMD Athlon-64 a příbuzní, výjimkou jsou jen některé serverové typy). Stará se o to technologie PowerNow! ve verzi 1.4. Frekvence jádra procesoru je určena hodnotou násobiče, která se může měnit velice rychle. Obvykle bývají povoleny hodnoty násobiče 5×, 9× 10×, 11× a 12×, přičemž horní hodnota je dána typem procesoru a nelze ji překročit. Uvedeným násobičům odpovídají u nepřetaktovaného procesoru frekvence 1 GHz, 1,8 GHz, 2,0 GHz, atd. Frekvenci, na které procesor právě běží, určuje operační systém přes MSR registry.

Měnit frekvenci umějí rovněž všechny současné typy x86 mobilních procesorů. Bohužel s nimi nemám bližší zkušenosti, ale většina postřehů v tomto článku by měla platit i pro ně.

Nastavení jádra

Pro Athlon-64 stačí v sekci Power Management Options povolit CPU Frequency scaling a PowerNow! technologii. Jako výchozí governor doporučuji zvolit performance a ostatní zkompilovat do jádra nebo jako moduly. Pokud chcete mít přehled, kolik času tráví procesor v různých frekvencích, vyberte statistiky (stačí jako modul).

Veškeré nastavování se děje zápisem do souborů v adresáři /sys/devices/system/cpu/cpu0/cpufreq. Dále se na tento adresář budu odkazovat jen jako cpufreq. Adresář cpufreq obsahuje krom jiných i následující zajímavé soubory (ro jen pro čtení, rw pro čtení i zápis):

scaling_available_frequencies
frekvence, na kterých procesor může běžet (ro)
scaling_cur_freq
aktuální frekvence, na které procesor běží (ro, rw)
scaling_available_governors
dostupné governory (musí být zakompilovány do jádra nebo načteny jako moduly) (ro)
scaling_governor
aktuálně používaný governor (rw)
stats/time_in_state
počet setin sekundy (druhý sloupec) strávený v jednotlivých frekvencích (první sloupec) (ro)
stats/total_trans
celkový počet změn frekvencí (ro)

Ostatní soubory již nejsou tak zajímavé a jejich názvy jsou samovysvětlující.

Governory

Chování procesoru určují governory. Zatím jich je v jádře implementováno pět:

performance
procesor běží na nejvyšší možné frekvenci, nelze ji snížit
powersave
procesor běží na nejnižší možné frekvenci, nelze ji zvýšit
ondemand
procesor přepíná mezi frekvencemi, podle zátěže buď přepne skokově na nejvyšší frekvenci, nebo frekvenci postupně snižuje; vhodný při napájení ze sítě
conservative
procesor přepíná mezi frekvencemi, podle zátěže po krocích zvyšuje či snižuje frekvenci; vhodný při napájení z baterie
userspace
umožňuje nastavení frekvence uživatelem

Performance a powersave

Velice jednoduché governory, které napevno nastaví jednu frekvenci (nejvyšší či nejnižší). Performace doporučuji mít jako výchozí governor – start systému je s ním rychlý a bezproblémový.

Ondemand a conservative

Pokročilé governory, které přizpůsobují frekvenci procesoru zátěži. Ondemand při zátěži skokově přepne na nejvyšší frekvenci, kterou poté postupně snižuje, což je velice příjemné pro uživatele, ale už mnohem méně příjemné např. pro baterii notebooku. Proto byl kód upraven a vznikl tak conservative governor, který frekvenci zvyšuje postupně.

Oba governory lze nastavovat pomocí souborů v adresáři cpufreq/ondemand, resp. cpufreq/conservative:

up_threshold
při jakém vytížení (0–100; 80) se má zvýšit frekvence (ondemand governor 11–100) (rw)
down_threshold
při jakém vytížení (0–100; 20) se má snížit frekvence (ondemand governor nepodporuje) (rw)
sampling_rate
jak dlouho musí být procesor (ne)vytížen v μs, aby se změnila jeho frekvence; dále nazýváno jako doba přechodu (rw)
sampling_rate_min
nejnižší možná hodnota sampling_rate (ro)
sampling_rate_max
nejvyšší možná hodnota sampling_rate (ro)
sampling_down_factor
kolikrát má být doba přechodu z vyšší frekvence na nižší delší než doba přechodu opačného (rw)
ignore_nice_load
zda se mají (0) nebo nemají (1) počítat do zátěže procesy s nižší prioritou; v jádrech starších než 2.6.15 se volba jmenuje ignore_nice a její chování 0 a 1 je opačné (rw)

Hackujeme jádro

Výchozí hodnota doby doby přechodu je u obou governorů brána jako tisícenásobek latence přechodu. Latence přechodu u procesorů z rodiny K8 činí asi 1,24 ms, takže výchozí doba přechodu je 1,24 s. Minimální hodnota se bere jako polovina výchozí doby, maximální jako její pětisetnásobek. Sluší se podotknout, že tyto governory si hlídají, aby latence přechodu nebyla delší než 10 ms, jinak se odmítají nechat používat. Tohle může být problém u starších mobilních procesorů.

Pokud se vám zdá dolní limit příliš omezující, stačí upravit definici MIN_SAMPLING_RATE v souborech cpufreq_ondemand.c, resp. cpufreq_conservative.c a překompilovat je. Já jsem místo poloviny zvolil dvacetinu.

Conservative governor v jádrech starších než 2.6.17 obsahuje chybu, kdy konstantu DEF_SAMPLING_RATE_LATENCY_MULTIPLIER definuje jako 100000 místo rozumnějšího 1000. Důsledkem je pak výchozí doba přechodu 124 s pro K8 procesory a přetečení horního limitu. Lze jednoduše dát do pořádku úpravou zdrojového kódu.

Userspace

Umožňuje nastavení frekvence procesoru zápisem do cpufreq/scaling_cur_freq. Nejčastěji je využíván ve spojení s programy jako cpudyn, cpufreqd či powernowd, ale nic vám nebrání měnit frekvenci skutečně ručně, akorát zapisovaná frekvence musí být ze seznamu cpufreq/scaling_available_frequencies.

Moje nastavení

Na své workstation bootuji s governorem performance a při initu je pak provedeno:

CPUFREQ=/sys/devices/system/cpu/cpu0/cpufreq
echo ondemand > $CPUFREQ/scaling_governor
echo 124000   > $CPUFREQ/ondemand/sampling_rate
echo 10       > $CPUFREQ/ondemand/sampling_down_factor
echo 0        > $CPUFREQ/ondemand/ignore_nice

Jen pro zajímavost, výrobce u mého procesoru ADA3000DIK4BI (Winchster 3000+, 1,8 GHz, 90 nm SOI) uvádí TDP při 1 GHz 21 W a při 1,8 GHz 67 W.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (4) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

6.3.2006 06:51 imout | skóre: 10 | blog: imout blog | Ostrava - Hrabůvka
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
Odpovědět | Sbalit | Link | Blokovat | Admin
téměř všechny procesory z rodiny K8 (AMD Athlon-64 a příbuzní, výjimkou jsou jen některé serverové typy).
Další takovou "vyjímkou" jsou Semprony(64) s jádrem Palermo s ratingem pod 3000+
++++++++++[>+++++++<-]>-.<++++++++++[>--<-]>.<++[>+++<-]>.<<+++++[>++<-]>.
Cubic avatar 6.3.2006 10:56 Cubic | skóre: 24 | blog: obcasne_vyplody | Essex
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
jak poznam jestli jsem postizen tou vyjimkou? mam smpr 2800+ 64bit s754 cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 44
model name      : AMD Sempron(tm) Processor 2800+
stepping        : 2
cpu MHz         : 1607.340
cache size      : 256 KB
diky za odpoved
Cubic avatar 6.3.2006 11:09 Cubic | skóre: 24 | blog: obcasne_vyplody | Essex
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
tak jsem se po tom koukal a vypada to ze ja jsem ta vyjimka
6.3.2006 15:26 imout | skóre: 10 | blog: imout blog | Ostrava - Hrabůvka
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
jj, jsi. Semprony podprojí Cool'n'Quiet (doufám, že jsem to napsal dobře) až od modelu 3000+.
btw já mám tu vyjímku taky (akorát ten takt je trohu pozměněný ;-)):
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 28
model name      : AMD Sempron(tm) Processor 2800+
stepping        : 0
cpu MHz         : 2503.708
cache size      : 256 KB
++++++++++[>+++++++<-]>-.<++++++++++[>--<-]>.<++[>+++<-]>.<<+++++[>++<-]>.
6.3.2006 08:47 EiFFeL | skóre: 27 | blog: EiFFeL | Vranovská Ves
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
Odpovědět | Sbalit | Link | Blokovat | Admin
neco podobneho pro AthlonXP a podobne...
http://forums.gentoo.org/viewtopic-t-273047-highlight-nforce2.html
zabezpečení objektů a vozidel, kamerové systémy plastová a hliníková okna
6.3.2006 16:12 medulin | skóre: 31 | blog: medulin | ČR
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
Odpovědět | Sbalit | Link | Blokovat | Admin
Mam notebook Compaq Armada M700. Speed step se mi podarilo zprovoznit, ale jen pokud se podari zaves i modul speedstep-smi a to se podari az pri 3 az 5 pokusu. V logu je:
cpufreq: change failed with new_state 1 and result 2
cpufreq: change failed with new_state 0 and result 2
Nevi nekdo proc ten modul nejde zavest napoprve? Vyresil sem to tak ze jsem do souboru /etc/rc.d/rc napsal modprobe speedstep-smi 5krat za sebou. Asi to nebude to prave reseni, ale lepsi mne nenapadlo.
Grunt avatar 28.11.2006 21:01 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Cpufreq – pro procesory mnoha frekvencí
Odpovědět | Sbalit | Link | Blokovat | Admin
Dobrý den. Docela by mňa zajímalo jaké máte s CPUFreq zkušenosti co sa týče užitečnosti na normálním Desktopovém počítači.O co se jedná?:

Zkompiloval sem si jádro ,přihoďil CPUFreq,Začal sem s nastavovaním:Governor ondemand,up_threshold 60%,sampling_rate 200ms(Ta 1sec byla hrozná...to než sa aplikace vůbec rozjela tak aj skončila).Zatím to jakž takš ide ,ale pokud sa rozjede HDD a nedaj bože sa na něho začne ukládat tak to při práci docela ruší ,poněvadž nad 60% to nemá šancu vzlétnůt zato z procesoru to docela ukůsne(bez zátěže je nataktovaný na 333Mhz)...ale to je nedůležité.Ide mi o to že sem si k bedňe připl AmpérMetr (nebo jak sa ta pekelná krabička menuje) a začal měřat...a naměřal sem to že to na minimální aj na maximální frekvenci bez zátěže žere naprosto stejně. Samozřejmě ,při zátěži to papá rapidně víc ,ale to zas skáče na frekvenci maximální(eště sem neskůšal odběr při polovičním a max. taktu ,ale myslim si že to o moc nepřidá). A tak mi nějak uniká význam této technologie ,poněvadž po řádném uvážení to energie na Desktopu moc neušetří a akorát to otravuje (viz. výše zmíněné zasekávání při rozjetí hadru).

S největší pravděpodobností sem něco udělal špatně (nějaké nastavení ,nebo měřání (furt mi elektrikáři tvrďá že je 270mA málo ,ale když je to při 0% zátěži?).Nemáte tedy někdo nějaké lepší zkušenosti či nějaké lepší fígle?
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.