Portál AbcLinuxu, 1. května 2025 09:24
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.
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ě.
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):
Ostatní soubory již nejsou tak zajímavé a jejich názvy jsou samovysvětlující.
Chování procesoru určují governory. Zatím jich je v jádře implementováno pět:
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ý.
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:
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.
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.
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.
Tiskni
Sdílej:
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+
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 KBdiky za odpoved
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
http://forums.gentoo.org/viewtopic-t-273047-highlight-nforce2.html
cpufreq: change failed with new_state 1 and result 2 cpufreq: change failed with new_state 0 and result 2Nevi 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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.