Portál AbcLinuxu, 2. května 2025 12:11
Popis postupu zprovoznění: výběr ovladače, kompilace, nastavení a ladění. Praktické využití.
CONFIG_MPENTIUMM=y
.Podrobnější informace o možnostech procesoru získané příkazem
grep flags /proc/cpuinfo
:
flags :fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe
Já sám jsem se o cpufreq začal zajímat ve chvíli, když jsem v /var/log/warnings
narazil na tuto hlášku:
Warning: Processor Platform Limit event detected, but not handled.
Consider compiling CPUfreq support into your kernel.
Česky to lze přeložit jako škálování (stupňování) frekvence procesoru. Procesor je schopný měnit za běhu svou taktovací frekvenci. Kromě základní nejvyšší frekvence může běžet také na nižších frekvencích, které jsou zlomky frekvence původní. Procesory Intel Centrino navíc pracují při proměnlivém napájecím napětí ("CPU Voltage scaling").
Ovladače jsou v jádru od počátku řady 2.6, nejdřív bylo možné frekvenci nastavit pouze staticky v rámci zadaného intervalu jako maximální (režim performance), minimální (powersave) nebo přímo zadat určitou frekvenci (userspace). Změny frekvence se pak děly pouze prostřednictvím démona nebo uživatelského programu, které při splnění určitých podmínek jádru předaly instrukci "změň režim". Typicky například nastavit režim na powersave při odpojení síťového zdroje nebo naopak na performance při sledování filmů.
V současné době už jsou v jádru i dva režimy s dynamickým stupňováním frekvence (nemohou být nastaveny jako výchozí). Při nich se frekvence mění v závislosti na využití procesoru. Rozhodování, jestli a jak změnit frekvenci, je možné ovlivňovat řadou parametrů předávaných jádru. Režim ondemand [na vyžádání] se objevil ve verzi 2.6.10, režim conservative [konzervativní] ve verzi 2.6.12.
V jádru se musí zapnout podpora cpufreq:
Power Managment options -> CPU Frequency scaling -> CONFIG_CPU_FREQ=y
Vyberou se všechny moduly ovladačů, které připadají v úvahu. Ty se potom zkusí spustit pomocí modprobe -v
. Ovladač, který se úspěšně natáhne, se může při příští kompilaci zakompilovat do jádra, ostatní se vyhodí. V mém případě funguje P4_CLOCKMOD
. Při zavádění do jádra sice vypíše:
p4-clockmod: Warning: Pentium M detected. The speedstep_centrino module offers voltage scaling in addition of frequency scaling. You should use that instead of p4-clockmod, if possible.
Ale modul speedstep_centrino u mě nefunguje, protože procesor Celeron M škálování napětí neumí.
Potom jádro hlásí možnost škálování frekvence "na vyžádání":
p4-clockmod: P4/Xeon(TM) CPU On-Demand Clock Modulation available
Aby bylo možné přistupovat k informacím celého subsystému v adresáři
/sys/devices/system/cpu/cpu0/cpufreq
, musí se zakompilovat CPU_FREQ_STAT=y
. Podrobnou šikovnou tabulku se statistickými údaji o době běhu v jednotlivých frekvencích a o přepínání mezi frekvencemi vytvoří volby CPU_FREQ_STAT_DETAILS=y
a
CPU_FREQ_STAT_DETAILS=y
.
V jádru 2.6.19 jsou dostupné tyto režimy frekvence CPU (regulátory, anglicky "governors"):
powernowd
.Takhle vypadá celá moje sekce v souboru .config
:
# CPU Frequency scaling # CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_TABLE=y # CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=y 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 is not set # CONFIG_CPU_FREQ_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y # # CPUFreq processor drivers # # CONFIG_X86_ACPI_CPUFREQ is not set # CONFIG_X86_POWERNOW_K6 is not set # CONFIG_X86_POWERNOW_K7 is not set # CONFIG_X86_POWERNOW_K8 is not set # CONFIG_X86_GX_SUSPMOD is not set # CONFIG_X86_SPEEDSTEP_CENTRINO is not set # CONFIG_X86_SPEEDSTEP_ICH is not set # CONFIG_X86_SPEEDSTEP_SMI is not set CONFIG_X86_P4_CLOCKMOD=y # CONFIG_X86_CPUFREQ_NFORCE2 is not set # CONFIG_X86_LONGRUN is not set # CONFIG_X86_LONGHAUL is not set # # shared options # CONFIG_X86_SPEEDSTEP_LIB=y
Jádro má jako výchozí celkem logicky nastaven režim performance (nejvyšší výkon). Jestliže chci spustit dynamické změny frekvence spravované regulátorem conservative, mám tyto možnosti:
Zadat
echo conservative > \
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cpufrequtils
a zadat příkaz
cpufreq-set -gconservative
, případně editovat /etc/default/cpufrequtils
, aby se vše spustilo už během bootu, protože cpufrequtils
mají svůj rc-skript. Jako parametry tak ale lze regulátoru zadat jen minimální a maximální frekvenci, což to je docela mínus.cpufreqd
. Ten umožňuje detailnější nastavení řízení frekvence procesoru v /etc/cpufreqd.conf
, včetně přepínání mezi různými regulátory. Podle teploty procesoru, spuštěných programů a dalších kritérií předá regulátoru veškeré platné parametry (to právě používám).Balíček cpufrequtils
poskytuje příkaz cpufreq-info
, který vypíše souhrnné informace, a cpufreq-set
umí změnit regulátor frekvence nebo nastavovat min/max hodnoty frekvence, přičemž povolené frekvence lze získat příkazem cpufreq-info
nebo čtením souboru /sys/devices/system/cpu/cpu0/cpufreq/scaling_avaliable_frequencies
.
Můj výstup příkazu cpufreq-info
:
cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006 Report errors and bugs to linux@brodo.de, please. analyzing CPU 0: driver: p4-clockmod CPUs which need to switch frequency at the same time: 0 hardware limits: 175 MHz - 1.40 GHz available frequency steps: 175 MHz, 350 MHz, 525 MHz, 700 MHz, 875 MHz, 1.05 GHz, 1.23 GHz, 1.40 GHz available cpufreq governors: conservative, performance current policy: frequency should be within 175 MHz and 1.40 GHz. The governor "conservative" may decide which speed to use within this range. current CPU frequency is 350 MHz.
Oba dynamické regulátory akceptují několik parametrů, které značně ovlivňují jejich výsledné chování, a tím i komfort při práci na počítači. Výchozí hodnoty těchto parametrů a další údaje (min a max sampling_rate) lze zjistit ze souborů v adresáři /sys/devices/system/cpu/cpu0/cpufreq/jméno_regulátoru/*
,
byl-li regulátor spuštěn bez parametrů.
Výchozí nastavení regulátoru ondemand:
ignore_nice_load 0 sampling_rate 1000000 sampling_rate_max 500000000 sampling_rate_min 500000 up_threshold 80
Výchozí nastavení regulátoru conservative:
ignore_nice_load 0 freq_step 5 sampling_down_factor 1 sampling_rate 10000000 sampling_rate_max 705032704 sampling_rate_min 5000000 up_threshold 80 down_threshold 20
(přeloženo a doplněno z man cpufreqd.conf
)
/sys/../../cpufreq/jméno_regulátoru/sampling_rate_max
a _min
.cpufreqd.conf
'%'.up_threshold
."up_threshold"
využití CPU, ale na snížení se čeká pět cyklů trvajících dobu "sampling_rate"
.ignore_nice
byl od jádra 2.6.16 přejmenován na ignore_nice_load
. Obě hodnoty parametru jsou ve cpufreqd.conf
akceptovány nezávisle na verzi jádra.cpufreq-info
). Jestliže mám tedy například osm možných frekvencí, změna mezi dvěma sousedními je 12,5 %. Zadám-li tedy freq_step=25
, může se při požadavku na rychlé zvýšení frekvence vždy jedna "úroveň" přeskakovat. Ačkoli hodnota je regulátorem interpretována jako procenta, nepřipojuje se pro tento parametr v cpufreqd.conf
'%'.cpufreqd.conf
V dokumentaci k jádru se doporučuje pro přenosné počítače regulátor conservative, který reguluje frekvenci plynuleji a po menších skocích než ondemand (to je dáno jednak výchozími nastaveními a také tím, že má sampling_rate_min=5000000
mikrosekund, (tedy 5 sekund)! Akceptuje důležité parametry down_threshold
a freq_step
, lze ho detailněji ovlivnit. Já jsem si v cpufreqd.conf
vytvořil profily pouze s ním.
S výchozími parametry měl conservative tendenci zůstávat pořád na nejnižší povolené frekvenci, pokud se zrovna nekompilovalo jádro nebo nebyl spuštěný nějaký hodně neúsporný spořič obrazovky. Moje snaha je, aby po dobu, kdy u počítače sedím a aktivně něco dělám, byla frekvence vysoká (a odezva programů rychlá), a aby se výrazně snížila, když si jenom něco čtu nebo od počítače na chvíli odejdu. Není třeba, aby se měnila po každém pohybu myši, navíc regulátor frekvenci zvyšuje vždy s určitým zpožděním, a to je už stejně pozdě. Aby nebyla odezva tak pomalá, bylo třeba ztížit snižování a zjednodušit zvyšování frekvence. Po nějaké době ladění jsem dospěl k tomuto:
[General] pidfile=/var/run/cpufreqd.pid poll_interval=20 # dlouhý, stejně dostane zprávu o stavu # baterky a AC přes acpid.socket a jinak # nic nevyhodnocuje verbosity=5 # nejvyšší je 7 #enable_remote=1 #remote_group=root [/General] #[acpi] acpid_socket=/var/run/acpid.socket # při startu cpufreqd píše, # že socket není obsluhován(?), # ale funguje to #[/acpi] [Profile] name=Conservative minfreq=350000 # aby nepadal až na 175000 maxfreq=1400000 policy=conservative up_threshold=50 # snadno frekvenci na požádání zvyšovat down_threshold=5 # snižovat, jen pokud se opravdu nic neděje sampling_down_factor=5 # ještě víc zpozdit snižování frekvence sampling_rate=5000000 # nejčastější možný interval kontroly využití CPU freq_step=38 # může přeskočit ob tři úrovně [/Profile] [Profile] name=Conservative Low minfreq=175000 maxfreq=875000 # nezvyšuj frekvenci na maximum policy=conservative up_threshold=70 # trochu méně snadné zvyšování frekvence down_threshold=10 # sniž, je-li využití CPU nižší než 10 % sampling_down_factor=2 # snižuj trochu snadněji než v předchozím sampling_rate=5000000 freq_step=25 # může přeskočit ob dvě úrovně [/Profile] ###### [Rule] name=AC Rule ac=on profile=Conservative [/Rule] [Rule] name=AC Off - Low Battery ac=off battery_interval=0-50 profile=Conservative Low [/Rule] [Rule] name=AC Off - High Power ac=off battery_interval=50-100 profile=Conservative [/Rule]
V sekci general
je důležitý parametr poll_interval
, který určuje, po kolika sekundách spustí cpufreqd
kontrolu platnosti podmínek jednotlivých podmínek v [rule]
- pravidel; vypočítá pro každé pravidlo skóre platnosti, vyhodnotí a případně změní platný profil.
Podle mého názoru je lepší být umírněný. Nemít příliš krátký poll_interval
a nevytvořit si velké množství podmínek v sekcích [rule]
, které cpufreqd
zkoumá a vyhodnocuje, ačkoli to formát tohoto konfiguráku umožňuje. Stačí spustit
cpufreqd
s parametrem verbosity=7
, a je vidět, co to pokaždé dělá... Pak je třeba nezapomenout a rychle verbositu zase snížit, aby se zabránilo neustálým přístupům na disk a přeplnění logů!
Trochu nešikovné je zjišťovat při nastavování cpufreqd
pořád aktuální frekvenci z konzole, ale mám Fluxbox a nepodařilo se mi na to sehnat žádný nezávislý applet. V GKrellM je plugin gkx86info, který bohužel udává pořád stabilních 1396 MHz. Pak jsem objevil applet pro xfce-panel; sice se mi nechtělo spouštět celý panel kvůli jedinému appletu, ale pro období vylaďování parametrů mi nakonec nic jiného nezbylo. Debianní balíček se jmenuje xfce4-cpufreq-plugin.
Notebook zdaleka tolik "netopí" jako dřív. Při normální práci v grafickém režimu se spuštěným internetem, OpenOffice.org, Firefox, Adobe Reader atd. je teplota v termální zóně THRM do 45°C. Ani při intenzivním využití (kompilace jádra) se procesor nestihne tak zahřát, aby se spustil větráček. Kompilace trvá 7 minut, teplota nepřesáhne 60°C. To mě samotného překvapilo, dříve se spustil větráček při kompilaci tak desetkrát a stejně byl počítač dost rozžhavený.
Díky celkem agresivnímu nastavení parametrů v cpufreqd.conf
jedu většinu času práce v grafice na vyšších frekvencích 875 MHz a 1,40 GHz. Když od počítače odejdu, sníží se během půl minuty až minuty frekvence na minimum (u mě 350 MHz). Při opětovném přechodu do grafického režimu to chvíli trvá, než se vyšplhá zase vzhůru. Proto mám spodní hranici omezenou na 350 MHz, aby mi to nepadalo až na 175 MHz, kdy už je docela otrava třeba spouštět OpenOffice.org. Režimy AC Off příliš nepoužívám, nanejvýš když si ve vlaku něco čtu - na to bohatě stačí i nízké frekvence. Je ale jasné, že občas je pomalejší odezva znát. Možná časem přejdu na regulátor ondemand
. Když jsem ho ale zkoušel, tak mě (kromě rychlejší odezvy počítače) zarazil mnohonásobně vyšší počet přepnutí mezi frekvencemi, který víceméně odpovídal poměru sampling_rate
obou regulátorů, tj. desetkrát více přepnutí taktu za odpovídající dobu práce na počítači.
Protože nejsem žádný odborník na HW, zajímalo by mě, jaký má přepínání frekvence procesoru vliv na životnost procesoru a ostatních komponent počítače. Některé procesory mají prý při změně taktu určité období latence, to jsem ale u sebe nepozoroval, takže by mi časté změny nevadily. Ale nechci si notebook oddělat rychleji, než je nutné. Takže jestli se o tom z diskuze něco navíc dozvím, budu jen rád.
Aby nedošlo k poškození nebo zybtečnému teplotnímu namáhání, tak může nějaká ta aplikace typu cpufreq (a jiné) v závyslosti na teplotě nastavit chlazení CPU (throttling) a další jiné věci.Přístroj, který dlouhodobě nevydrží pracovat s výkonem, který je deklarován výrobcem, je zmetek. A je úplně jedno, jestli se jedná o notebook, hudební zesilovač nebo mixér - reklamovat. (Pozn. Závyslost s tvrdým y to už je fakt síla.)
Výrobce rozhodně negarantuje nic takového, že se může HW používat permanentně na plný výkon. To by asi neřešil věci jako je Power management atp, že?Power management nesouvisí s tím, jestli můžu nebo nemůžu něco používat na plný výkon. Power management je od toho, aby snížil spořebu HW, když se nepoužívá.
Ad má hrubka. Když někdo u nás na fakultě dělal oponenta diplomce o které nic nevěděl, tak se zaobíral pravopisem a vzhledem.Když někdo neumí pravopis, tak většinou umí vymyslet sto dvacet důvodů, kterými svou nechopnost obhajuje.
ondemand
som mal pocit, že je systém nejaký ospalý. Ako keby mu trvalo 0.5 až 1 sekundu než prešiel z nižšej frekvencie na vyššiu, zatiaľ čo opačným smerom prechádzal ochotnejšie. Možno to závisí od toho čo človek konkrétne robí. Ja som to nakoniec prestal používať (resp. po experimentoch som dospel k tomu, že mi to nevyhovuje). Tiež preto, že to nebol NB ale normálny desktop a nepotreboval som teda šetriť batériu.
Nejde ani nastavit větší krok v procentech pro zvyšování frekvence.
Právě že jde, a to parametrem freq_step
popsaným v článku, ale latence zůstává.
...šetří se tím energie.... ale méně, než když se použije škálování frekvence (Navíc kolik energie se throttlingem ušetří, je trochu sporné, protože ta práce se nakonec stejně musí někdy udělat). U současných procesorů se throttling používá spíš když je procesor přehřátý a je potřeba ho vychladit.
nop
, spotřebuje stejně nebo dokonce méně energie, než když ho necháš tu práci udělat a pak mu snížíš takt a zastavíš ho (hlt
), tak fyzice možná rozumíš teoreticky, ale v praxi je to horší...
cpuinfo model name : Genuine Intel(R) CPU T2300 @ 1.66GHz cpufreq-info hardware limits: 1000 MHz - 1.67 GHz available frequency steps: 1.67 GHz, 1.33 GHz, 1000 MHz .config # CPUFreq processor drivers # # CONFIG_X86_ACPI_CPUFREQ is not set # CONFIG_X86_POWERNOW_K6 is not set # CONFIG_X86_POWERNOW_K7 is not set # CONFIG_X86_POWERNOW_K8 is not set # CONFIG_X86_GX_SUSPMOD is not set CONFIG_X86_SPEEDSTEP_CENTRINO=y CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI=y # CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE is not set CONFIG_X86_SPEEDSTEP_ICH=y # CONFIG_X86_SPEEDSTEP_SMI is not set # CONFIG_X86_P4_CLOCKMOD is not set # CONFIG_X86_CPUFREQ_NFORCE2 is not set # CONFIG_X86_LONGRUN is not set # CONFIG_X86_LONGHAUL is not set # # shared options # # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set CONFIG_X86_SPEEDSTEP_LIB=y # CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not setTak by me zajimalo jestli to mam dobre, a proc muj procesor tvrdi ze umi jen tri frekvence, popr. co bych mel udelat proto aby to fungovalo lepe ? Diky
speedstep-centrino
. Jinak mne slapal jen acpi-cpufreq
a ten myslim neumi menit napeti, jenom frekvenci.
<*> Intel Enhanced SpeedStep [*] Use ACPI tables to decode valid frequency/voltage pairs [ ] Built-in tables for Banias CPUs
speedstep-centrino
vubec nezavedl. Nefunguje ani pouziti ACPI pro ziskavani techto informaci a to na zadnem kernelu rady 2.6. Vypada to, ze chyba nejspis nebude v CPU, ale selze neco jineho pri nacitani tech paru pres ACPI.
# dmidecode | grep "BIOS Information" -A4 BIOS Information Vendor: Phoenix Technologies LTD Version: R01-C1L Release Date: 03/25/2005 Address: 0xE59F0
# dmidecode | grep "BIOS Information" -A4 -m1 BIOS Information Vendor: ACER Version: 3A20 Release Date: 01/31/2005 Address: 0xE5240
grep flags /proc/cpuinfo: flags :fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbeZvidaveho ctenare by jiste zajimalo, ktery z vypsanych flagu znamena, ze lze menit frekvenci CPU.
Zajímavá idea…
lion:~ # egrep '^stepping' /proc/cpuinfo stepping : 0
Co teď? :-)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.