Mivel még mindig nem lett kirakva a szűröm a BSD-s témákkal az oldalról, folytassuk a rendszer vizsgálatát/beállítását, mai témánk a CPU energiagazdálkodás.
FONTOS! A leírtak a saját AMD Ryzen 5 1600X procimon voltak tesztelve, tehát az írás iránymutatás, nem pedig egy "tutkóra nálad is így működik" leírás...!
GhostBSD-n powerd démon figyeli a CPU-terhelést, ezt a GhostBSD-powerd csomag szállítja, ha hiányzik telepítsd fel!
Nézz szét a BIOS-ban, hasonlókat keress:
- AMD Cool’n’Quiet/AMD PowerNow!: engedélyezve.
- Global C-state Control vagy CPU C-states: engedélyezve.
- Power Supply Idle Control: ha van, ajánlott Typical Current Idle-re állítani.
Az első lépés, hogy megállapítsuk a rendszer képességeit, nézzük a szükséges parancsokat:
sysctl dev.cpu.0.freq -> az aktuális frekvencia MHz-ben
sysctl dev.cpu.0.freq_levels -> az elérhető frekvenciaszintek és becsült fogyasztásuk
sysctl dev.cpufreq.0.freq_driver -> melyik meghajtó kezeli a skálázást
sysctl hw.acpi.cpu.cx_lowest -> a legalacsonyabb/legmélyebb engedélyezett C-state
sysctl dev.cpu.0.temperature -> aktuális hőmérséklet

Az esetemben a legjobb hír "dev.cpufreq.0.freq_driver: hwpstate0", azt jelenti, a rendszer tökéletesen felismerte a CPU-t, és az AMD saját megoldása (Cool'n'Quiet 2.0) van üzemben, a hardveres P-állapot (Hardware P-states/AMD HWP) illesztőprogram van aktív kapcsolatban.
A másik jó hír a "hw.acpi.cpu.cx_lowest: C8", a rendszer engedélyezi a C8-as mély alvóállapotot a CPU-nak, ami jelentősen csökkenti a fogyasztást és a hőt tétlenség (idle) idején.
Jöhet a dologi rész, konfiguráljuk a powerd démont, most is a központi konfigurációs állományban, az /etc/rc.conf-ban turkálunk!
A jelenlegi beállításaim:
powerd_enable="YES" powerd_flags="-a adaptive -n adaptive -i 25 -r 85 -N" performance_cx_lowest="Cmax" economy_cx_lowest="Cmax"
A powerd kapcsolói:
Kapcsoló │ Jelentés │
────────────────────┼───────────────────────────────────────────────────┼
-a mode │ Üzemmód hálózati táplálásnál │
-b mode │ Üzemmód akkumulátorról │
-n mode │ Üzemmód ismeretlen táplálási állapotnál │
-i percent │ Terhelési küszöb a frekvencia csökkentéséhez │
-r percent │ Terhelési küszöb a frekvencia növeléséhez │
-m freq │ Minimális beállítható CPU-frekvencia │
-M freq │ Maximális beállítható CPU-frekvencia │
-p ival │ Ellenőrzési időköz ezredmásodpercben │
-N │ A nice folyamatok terhelését üresjáratként kezeli │
-v │ Részletes működési üzenetek, előtérben futás │
-P pidfile │ Egyedi PID-fájl helye │
-s source │ Táplálási állapot lekérdezésének módja │Üzemmódok (-a, -b, -n paraméterekhez használható értékek):
Mód │ Rövidítés | Jelentés ───────────────────────┼───────────┼───────────────────────────────────────────── maximum │ max │ Mindig a legnagyobb teljesítményre törekszik minimum │ min │ A legalacsonyabb teljesítményt választja adaptive │ adp │ Kiegyensúlyozott teljesítmény és fogyasztás hiadaptive │ hadp │ Gyorsabb órajelemelés, teljesítmény központúbb
Ezek fényében elemezzük a beállításaimat!
- powerd_enable="YES"
Engedélyezi a GhostBSD beépített energiagazdálkodási démonát, amely a terhelés függvényében dinamikusan emeli vagy csökkenti a CPU órajelét.
- powerd_flags="-a adaptive -n adaptive -i 25 -r 85 -N"
AC (hálózati) és "ismeretlen" (akár akkumulátoros) módban is az adaptív algoritmust használja. Alacsony terhelésnél (25%-os terhelés alatt) visszaveszi, és próbálja alacsonyan tartani az órajelet, magas terhelésnél (85%-os terhelés felett) azonnal maximális frekvenciára kapcsol, és igyekszik ott tartani. A Nice-szintű folyamatokat figyelmen kívül hagyja (a háttérben futó, alacsony prioritású feladatok nem emelik feleslegesen a CPU órajelet).
A hiadaptive beállítás mellett is értelmezettek az -i és -r kapcsolók, de mindenképpen agresszívebben tartja magasan az órajelet.
- performance_cx_lowest="Cmax" és economy_cx_lowest="Cmax"
Megengedi a rendszernek, hogy a processzor a hardver által támogatott legmélyebb alvóállapotba (Cmax/C8) menjen át tétlenség idején mind teljesítmény, mind pedig energiatakarékos profil alatt.
AMD hőmérséklet-figyelő beüzemelése!
Teszteld:
sudo kldload amdtemp sysctl dev.cpu.0.temperature
Ha minden rendben, véglegesítsd (/boot/loader.conf):
amdtemp_load="YES"
Tesztelés!
Ellenőrizd, hogy fut-e a démon, ha nem indítsd el: service powerd status, sudo service powerd start.
Nyiss két terminál ablakot, az egyikben futtasd az alábbi parancsokat:
while true; do
date +%H:%M:%S
sysctl -n dev.cpu.0.freq
sleep 2
doneVárj egy picit, majd a másik ablakba futassd: yes > /dev/null. Ha az órajel változik, győztél!

Berus

Hozzászólások
Szia berus! Ha jövőben is a
Beküldte kami911 -
Értékelés:
Szia berus! Ha jövőben is a BSD-ről írsz, akkor ki leszel... emelve a főoldalra, ha nem azzal kezded, hogy szerinted ki leszel rakva. Köszi a cikket. A BSD-n mi az ami összehuzalozza, hogy most a powerd akku vagy hálózati üzemmódot paraméterezve fusson le, vagy a háttérben van valami busz amin még kommunikálhat?
A devd (device daemon) kezeli
Beküldte berus -
Értékelés:
A devd (device daemon) kezeli az eseményeket, ami közvetlenül beszélget a kernellel. Amikor dugdosod a tápot az ACPI jelez a kernelnek (acpi_subr.c), érzékeli az állapotváltozást. A /dev/devctl eszközön küldi a hardveres eseményeket (eszköz csatlakoztatása, leválasztása, tápellátás változása) a devd-nek, ő pedig meghívja a power_profile szkriptet a megfelelő paraméterrel.