Portál AbcLinuxu, 6. listopadu 2025 22:46
To je celkem jednoduchý, na to stačí následující shell skript* (/etc/acpi/battery.sh):
#!/bin/sh
if grep 'off-line' /proc/acpi/ac_adapter/C1BA/state; then
echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
else
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
fi
a příslušnej konfigurační soubor (/etc/acpi/events/battery) pro acpid:
event=battery.* action=/etc/acpi/battery.sh %e
*přesný názvy "zařízení" baterek je třeba nastavit "na míru" systému
Super věc
Zas tak super to neni - když jsem začal přemejšlet, že bych to teda napsal do toho FAQ a zkusil to pro jistotu znovu otestovat, zjistil jsem, že to najednou (když jsem ten skript vymejšlel, tak to ale určitě fungovalo
) až tak úplně nefunguje...
Při přechodu z baterky na AC se to nepřepne zpět. Na vině je to, že /proc/acpi/ac_adapter/C1BA/state se změní o něco později, než dostane acpid informaci o změně napájení (divné, ale je to tak). Problém (i případný problém v "opačném" směru) nicméně spolehlivě řeší sleep na začátku skriptu (před testem stavu napájení)
#!/bin/sh
sleep 1
if grep 'off-line' /proc/acpi/ac_adapter/C1BA/state; then
echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
else
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
fi
Použití ac_adapter místo battery nemá na funkci vliv.
Otázkou spíš je, jak je možný, že acpid dostane informaci od jádra o změně "baterky" dřív, než jádro změní příslušnej soubor v /proc, což je situace proti který nejsou "imunní" ani skripty z Debianu. V době, kdy jsem si ty skripty psal tahle situace nenastávala, takže bych tipoval, že to že to u Debianu s těmi skripty (možná) funguje je způsobeno buď tím, že je tam starší jádro, kde tahle situace nenastane, nebo složitostí těch skriptů - než se dostanou k testu souboru v /proc, je ten už nastavenej správně.
Nesmysl. Jak u battery tak u ac_adapter dostaneš oba dva signály, tzn. odpojení napájení i jeho připojení.
odpojenie adaptera => event=ac_adapter AC 00000080 00000000 pripojenie adaptera => event=ac_adapter AC 00000080 00000001a viac ma nezaujima, ani to ci nahodou nemam BAT1 v ultrabay ani ci sa jedna len o vybratie/zalozie baterky a pod. :)
Ten sleep je v těch Debianích skriptech IMHO až po detekci statusu v /proc. A získání tý informace je mnohem složitější, než jenom jediný grep v /proc. Volají se další skripty, například /usr/bin/on_ac_power (takže dotaz na status v /proc se provádí 2x...) atd. Ale zas tak podrobně jsem ten bordel (zlatej Arch a jeho KISS strategie
) nezkoumal.
power.sh, ktery je spousten z event=ac_adapter a vse funguje jak sem si predstavoval.
Teorie sice je taková, že spotřeba CMOSu je nejvýrazněji závislá na frekvenci přepínání hradel
Ne tak docela.. jako obecnej vzorec pro ztrátovej výkon CMOSu se udává P = c·V²·f, kde c je technologická konstanta. Rostoucí podíl parazitních proudů na ztrátovém výkonu je nicméně taky fakt (bodejť by ne, když jsou dneska hradla tranzistorů "vysoký" jen jednotky atomovejch vrstev...)
Klasický CMOS (4xxx) je sice na napětí celkem nenáročný, ale dnešní procesor má podstatně méně prostoru pro změnu voltáže mezi podpětím (leda, že by se voltáž a frekvence měnily synchronně, což je modus operandi speedstepu) a vyhořením, takže až donedávna nebyly nějaké úpravy napájení moc na pořadu dne. Jsou na to i nějaké husté patenty, přinejmenším jeden od Chucka Moorea.
Možná jsem měl napsat "pokud nevezmeme v úvahu změny napětí a zaměříme se jen na to, co se v těch hradlech děje".
Zrušíte tím ztrátový výkon a tím i produkci tepla. Jenom musíte dávat pozor, aby vám to nequenchlo jako náš supravodivý magnet na NMR
. Povolil jsem v jadru timer s vysokym rozlisenim. Pocet preruseni klesl na 50 v idle, a priblizne 120 pri praci. Teplota klesa z 47 stupnu na 40. Spotreba 11.5W, vydrz 4.7 hodiny.
Podminky nejsou uplne ferovy - mam vypnuty amarok a lifereu, protoze zrejmne maji nejaky bugy, kvuli kterym se budi zbytecne casto. ehci taky pusobilo casty preruseni procesoru, po te co jsem z nej udelal moduly je to uz v poradku. Ale nemam tady zadny usb zarizeni, abych vyzkousel, jak se jeho pripojeni projevi.
/sys, ale stačí použít nástroj cpufreq-set.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.