Kako cpuidle radi na Linuxu i zašto toliko utječe na potrošnju resursa

Zadnje ažuriranje: 11/05/2026
Autor: Isaac
  • cpuidle odvaja pravila i mehanizme korištenjem regulatora i upravljačkih programa za upravljanje stanjima mirovanja CPU-a.
  • Odabir stanja temelji se na ciljanom prebivalištu, latenciji izlaza, povijesti neaktivnosti i nadolazećim tajmerima.
  • PM QoS i raspoređivač tikova uvjetuju koja se duboka stanja mogu koristiti bez kršenja zahtjeva latencije.
  • U ARM-u i drugim modernim SoC-ovima, cpuidle je integriran s firmwareom putem PSCI-ja, što je ključno za stvarnu potrošnju energije i vijek trajanja baterije.

Upravljanje vremenom neaktivnosti u cpuidle linuxu

Ako koristite Linux na prijenosnom računalu, stolnom računalu ili ARM matičnoj ploči i brinete se zbog baterija, toplina ili zašto vaš CPU ne ide u stanje mirovanja "kako bi trebao", razumjeti kako podsustav funkcionira cpuidle Ključno je. Iza nečega naizgled jednostavnog poput "CPU je u mirovanju" krije se prilično sofisticiran mehanizam koji odlučuje koje stanje mirovanja koristiti, koliko dugo spavati i koliko je vremena potrebno za buđenje.

Nadalje, ako dolazite iz projekata poput Asahi Linux na Macu s M1/M2Normalno je da ste zbunjeni: govorimo o vozačima cpuidle...iz nezrelih ili potpuno odsutnih stanja mirovanja, i da je upravo to ono što sprječava korištenje sustava kao svakodnevnog pokretača. U ovom ćemo članku mirno analizirati... Što je točno cpuidle, kako interno funkcionira, koju ulogu igraju governors i driveri, kako je konfiguriran, koje opcije kernela utječu na njega i kako se integrira u moderne ARM platforme? kao što su oni koji koriste PSCI ili TF-A.

Što je cpuidle podsustav i zašto postoji?

Prije nekoliko desetljeća, "odmor" kernela bio je prazna petljaKada nije bilo ničega za izvršiti, izvršavala se petlja mirovanja, što je u biti stvaralo beskonačnu petlju čekanja na sljedeći prekid. Samim time što se složeni kod nije izvršavao, uštedjela se energija: predmemorija, FPU itd. nisu se toliko koristili.

S razvojem hardvera, procesori su počeli nuditi višestruke stanja mirovanja (C-stanja)svaka s različitim razinama uštede i različitim kaznama: ulazak u duboku državu može uštedjeti mnogo energije, ali Potrebno je više vremena i energije za ulazak i izlazak Od njega. Ako uđeš u preduboko stanje i prebrzo se probudiš, izgubio si.

Ovdje dolazi u igru cpuidle, podsustav kernela posvećen upravljanju vremenom neaktivnosti CPU-aNjegov je cilj odlučiti, svaki put kada CPU ostane bez zadataka (ostaje samo zadatak u mirovanju), koje je najbolje stanje mirovanja koje može koristiti za uštedu energije bez narušavanja latencije odgovora.

Konceptualno, cpuidle odvaja dva dijela: s jedne strane mehanizam (pogoni), koji zna kako komunicirati s hardverom i nabrojati stanja mirovanja; a s druge strane, politika (guverneri)koji odlučuje koje će se određeno stanje koristiti u bilo kojem trenutku, na temelju povijest neaktivnosti, nadolazeći odbrojavanja i ograničenja latencije.

Sve se to događa u petlji mirovanja.Kada raspoređivač vidi da CPU više nema zadataka koje može pokrenuti, izvršava poseban zadatak "u mirovanju", čiji kod prvo poziva governor za odabir stanja, a zatim driver za njegov unos.

cpuidle linux governors i driveri

Logički procesori, zadatak u stanju mirovanja i što znači biti u stanju mirovanja

Podsustav cpuidle uvijek radi u smislu logičkih CPU-a.To jest, entiteti koje planer vidi: to mogu biti fizičke jezgre, hardverske niti (hyper-threadovi) ili kombinacije, ovisno o arhitekturi i implementaciji.

S gledišta kernela, logički CPU je "u mirovanju" kada Nema izvršnih zadataka povezanih s njim osim zadatka u stanju mirovanja.Raspoređivač upravlja procesima i nitima kao "zadacima", a oni mogu biti u različitim stanjima; kada zadatak postane pokretan, dodjeljuje se CPU-u. Ako CPU ostane samo s neaktivnim pokretačkim zadatkom, kernel ga smatra neaktivnim.

Zadatak u mirovanju izvršava poziv petlja mirovanjaOva petlja, u svakoj iteraciji, poziva cpuidle governor kako bi odlučio o stanju mirovanja, a zatim poziva cpuidle driver kako bi zatražio od hardvera da uđe u to stanje. Ako nema dostupnih stanja mirovanja, nema dovoljno vremena prije sljedećeg događaja ili su ograničenja latencije prestroga, CPU ili izvršava relativno beskorisnu petlju ili koristi najosnovniju instrukciju čekanja (poput `wait`). hlt ili slično).

U višejezgrenim procesorima ili onima sa SMT-om, Neaktivne odluke utječu na hijerarhiju jedinicaZahtjev za spavanje na razini niti može uzrokovati da jezgra uđe u dublje stanje ako su sve niti neaktivne, a zauzvrat, klaster jezgri može prijeći u stanje mirovanja ako svi njegovi članovi to dopuste. Cpuidle to treba modelirati kroz... stanja koja predstavljaju kombinacije hijerarhijskih razina, s latencijama i prebivalištima koja odražavaju najdublje moguće stanje.

Kada se zatraži stanje predstavljeno objektom tipa struct cpuidle_stateVozač može autorizirati hardver da ide onoliko duboko koliko dizajn dopušta. Stoga, Izlazna latencija i prebivalište cilja moraju biti usklađeni sa stvarnom kombinacijom najgoreg slučaja stanja. unutar hijerarhije (jezgra, klaster, paket itd.).

CPUIDLE guverneri: kako odlučuju koju će državu koristiti

The cpuidle governors su moduli pravila Ovi procesi se pokreću svaki put kada CPU uđe u petlju mirovanja. Njihova je svrha koristiti dostupne informacije za odabir stanja mirovanja koje štedi najviše energije bez kršenja ograničenja latencije.

Svaki guverner je definiran kao struktura struct cpuidle_governors povratnim pozivima enable, disable, select y reflect, polje prioriteta (rating) i ime. Nakon registracije kod cpuidle_register_governor(), može ga automatski odabrati kernel (na temelju ocjene, zadane konfiguracije ili parametra cpuidle.governor=) ili ručno iz korisničkog prostora putem sysfs-a.

Kada se regulator aktivira za CPU putem povratnog poziva enable(), prima struct cpuidle_device koji predstavlja taj CPU i struct cpuidle_driver s popisom dostupnih stanja (struct cpuidle_stateDa. enable() Ne uspijeva; kernel koristi zadani kod za neaktivnost. specifičan za arhitekturu umjesto cpuidle za taj CPU.

  Kako instalirati AMD ROCm na Windows i Linux: vodič korak po korak i kompatibilnost

Srce guvernera je povratni poziv select()koji prima cpuidle uređaj, upravljački program i pokazivač na booleovu vrijednost stop_tickOvaj povratni poziv vraća indeks odabranog stanja unutar niza stanja ili negativni kod pogreške. Osim toga, može odlučiti hoće li zaustaviti raspoređivač tickova na tom CPU-u (brisanjem booleove vrijednosti ili ne).

Kada se CPU probudi, governor prima poziv za reflect() s informacijama o tome koje je stanje odabrano i koliko je zapravo trajao zastoj. To vam omogućuje da precizirati svoja predviđanja na temelju povijesnih podatakaTakođer je potrebno poštivati ​​ograničenja latencije PM QoS-a: cpuidle_governor_latency_req() dobiva efektivnu granicu latencije i nikada ne bi trebao odabrati stanje čije exit_latency premašiti tu vrijednost.

Glavni regulatori: ljestve, zaustavna poluga, izbornik i teo

U Linuxu postoji nekoliko cpuidle guvernera, svaki sa svojom strategijom i ciljnom publikom. Četiri glavna su ladder, haltpoll, menu i teo., a koji će se odabrati prema zadanim postavkama uvelike ovisi o tome je li kernel bez tickless (sposoban zaustaviti raspoređivač tickova) ili ne.

ljestve Dizajniran je za sustave s aktivnim periodičnim tikom. Koristi jednostavan pristup koji se gotovo isključivo temelji na povijest trajanja neaktivnostiPenje se i spušta po "ljestvama" stanja, prelazeći u dublja stanja kada uoči dovoljno dugu neaktivnost i povlačeći se kada buđenja dođu prerano.

zaustaviti pol To je specijalizirani regulator za virtualne strojeve. Umjesto ulaska u stanje dubokog mirovanja hardvera, Uvelike se oslanja na ankete. (petlja čekanja) kako bi se smanjila prividna latencija u okruženjima gdje fizička stanja mirovanja možda ne doprinose puno ili ih hipervizor ne modelira dobro.

meni y Teo Ovo su regulatori koji se koriste u sustavima bez kvačenja (CONFIG_NO_HZ_IDLE o CONFIG_NO_HZ_FULLOboje kombiniraju Povijest razdoblja neaktivnosti s informacijama o sljedećem tajmerui pokušavaju uštedjeti energiju bez trošenja više vremena na izračunavanje odluke nego što se uštedi njezinim donošenjem.

Guverner meni je oko eksplicitno predvidjeti koliko će dugo CPU biti u mirovanjuDio vremena do sljedećeg timera kao gornja granica i primjenjuje faktor korekcije na temelju nedavne povijesti neaktivnosti kako bi se približno odredilo "tipično" trajanje. S tom procijenjenom vrijednošću, pogledajte tablicu stanja kako biste odabrali najdublje stanje kojem odgovara ciljano prebivalište.

Guverner teo (orijentiran na događaje s vremenskim mjeračem) Problem rješava na drugačiji način: umjesto pokušaja predviđanja točno vrijeme zastoja, kvantificira povijesne podatke u "kanalima" ili intervalima povezanim sa svakim stanjemSvaki bin odgovara vremenskom rasponu u kojem je to stanje obično optimalno. TEO održava metrike hitovi (buđenja gdje stvarno trajanje odgovara ciljanom prebivalištu) i presretanja (buđenja zbog nevremenskih događaja koji remete predviđanje) i time izravno zaključuje Koja je specifična država najvjerojatnije točna?.

Samo kada mu to koristi, TEO provjerava vrijeme do sljedećeg timera kako bi izbjegao ulazak u stanje čije ciljano prebivalište je veće od stvarno dostupnog prozoraNadalje, njegov dizajn pokušava smanjiti trošak odlučivanja: u scenarijima s vrlo kratkim vremenima neaktivnosti, bolje je brzo odabrati plitko stanje nego potrošiti više energije na razmišljanje nego što se uštedi.

cpuidle upravljački programi: most između kernela i hardvera

Dok su guverneri zauzeti politikom, cpuidle upravljački programi implementiraju mehanizam ulazno/izlaznih podataka stvarnog stanjaSvaki upravljački program predstavlja popis stanja koje podržava procesor (ili skup CPU-ova) putem struct cpuidle_driver koji sadrži niz od struct cpuidle_state.

Svaki struct cpuidle_state definira, između ostalog, ciljano prebivalište (target_residency u mikrosekundama), maksimalna latencija izlaza (exit_latency), zastave kao što su CPUIDLE_FLAG_POLLING i, što je vrlo važno, povratni poziv enter() koji obavlja delikatan dio: izvršavanje instrukcija ili poziva potrebnih da se od hardvera zatraži ulazak u to stanje.

Unosi u nizu stanja moraju biti poredani po ciljno_prebivalište uzlaznoDakle, indeks 0 obično odgovara najplićem (i najjeftinijem za korištenje) stanju, a sljedeći indeksi povezani su sa sve dubljim stanjima. Guverneri pretpostavljaju ovaj redoslijed za svoje izračune.

Povratni poziv enter() prima cpuidle uređaj, upravljački program i indeks stanja za korištenjeZa slučajeve tipa ovjesa od obustave do mirovanja, koristi se umjesto toga enter_s2idle()koji mora biti u skladu sa strožim ograničenjima: ne može ponovno aktivirati prekide ili manipulirati uređajima za mjerenje vremena tijekom izvršavanja, nešto što enter() Da, to se može napraviti ovisno o platformi.

Osim opisa stanja, upravljački program mora zabilježiti koje su CPU-e pod njegovom kontrolom: svaki CPU ima svoj struct cpuidle_device, koji je obično registriran kod cpuidle_register_device()Ako nema "povezanih" stanja (koja zahtijevaju koordinaciju između više CPU-a), registar se izvršava s cpuidle_register_driver()Ako ih ima, koriste se cpuidle_register()koji je također odgovoran za registraciju uređaja.

Moderne platforme pokušavaju smanjiti broj specifičnih upravljačkih programa: na primjer, ARM obično koristi generički upravljački program koji delegirati na standardna sučelja kao što je PSCI (Power State Coordination Interface)I u RISC-V nešto slično putem SBI-a (Supervisor Binary Interface). Unatoč tome, takvi upravljački programi još uvijek postoje u x86. intel_idle (s tablicom stanja "urezanom" u upravljački program) i acpi_idle (koji dobiva stanja iz ACPI tablica).

Stanja neaktivnosti: parametri, sysfs-ovi i metrike

Svako stanje mirovanja koje cpuidle izlaže regulatorima karakterizirano je s nekoliko glavnih parametara. Dva najvažnija su ciljano prebivalište (target_residency) i izlazna latencija (exit_latency), oboje u mikrosekundama.

La target_residency U praksi, to označava energetsku dubinu države.Ovo je minimalno vrijeme koliko hardver mora ostati u tom stanju (uključujući troškove ulaska) da bi bio isplativ u usporedbi s plićim stanjima. Ako se sustav probudi prije nego što dostigne to vrijeme zadržavanja, vjerojatno je potrošio više energije ulaskom u to stanje nego što je uštedio.

  Popravite prečace na radnoj površini u sustavu Windows 11

La exit_latency Postavlja najgore moguće vrijeme koje prođe između zahtjeva CPU-a za izlazak iz tog stanja i stvarnog izvršavanja sljedeće korisne instrukcije.To također uključuje slučaj kada se događaj buđenja dogodi dok hardver još uvijek ulazi u to stanje, jer općenito unutarnji prijelaz mora biti dovršen prije nego što se može izaći na uredan način.

Osim toga, postoje zastave koje opisuju dodatna svojstva države: na primjer, CPUIDLE_FLAG_POLLING označava da ovo „stanje“ zapravo nije hardverski mirovanjeveć petlja ispitivanja koja se koristi kao poseban mehanizam za izbjegavanje dodirivanja stvarnih stanja kada je to prikladno (na primjer, u određenim virtualiziranim ili debugging okruženjima).

Jezgra otkriva vrlo detaljne informacije o stanju mirovanja CPU-a putem sysfs-a, u /sys/devices/system/cpu/cpu<N>/cpuidle/Tamo postoje imenici. state0, state1itd., po jedan za svaki ulaz upravljačkog niza, i u svakom od njih možemo pronaći atributi kao što su name, desc, latency, residency, usage, time, power, above, below y rejected.

Ovi atributi nam omogućuju da vidimo koliko je puta svaka država zatražena (usage), koliko je ukupno vremena potrošeno na to prema kernelu (time)i u kojoj je mjeri izbor bio dobar ili loš (above y below Broje slučajeve u kojima je stvarno trajanje neaktivnosti bilo očito prekratko ili predugo u odnosu na ciljano prebivalište). rejected Broji puta kada je zahtjev odbijen, obično zato što je došlo do prekida upravo u trenutku prijelaza.

Postoji jedna posebno korisna osobina, disableOvo vam omogućuje aktiviranje ili deaktiviranje tog specifičnog stanja za CPU iz korisničkog prostora (tipkanjem 1 ili 0). Ako je onemogućeno za CPU, regulator to neće uzeti u obzir prilikom odabira; ako želite potpuno ukloniti stanje sustava, morate onemogućite ga na svim procesorima. Atribut default_status označava je li stanje omogućeno ili ne prema zadanim postavkama.

Raspored tickova i sustavi bez tickova

Poznati raspored To je periodični timer (100, 250 ili 1000 Hz, ovisno o CONFIG_HZ) koju kernel koristi, između ostalog, za dodjelu CPU vremena među zadacima, ažuriranje brojača i pokretanje isteka timera.

S cpuidleove točke gledišta, periodično otkucavanje je smetnja: dok je aktivno na neaktivnom CPU-u, Taj CPU može spavati dulje od perioda tiktakaNadalje, svako buđenje po otkucaju uključuje ulazak i izlazak iz stanja mirovanja, trošeći energiju ako se odabere previše duboko stanje.

Po definiciji, na CPU-u koji izvršava samo petlju mirovanja Nije strogo potrebno zadržati krpelj Za dijeljenje CPU-a: nema više zadataka koji se mogu pokrenuti. Stoga se Linux može konfigurirati kao bez škakljanja u mirovanju (CONFIG_NO_HZ_IDLE) ili u "punom" načinu rada kada na CPU-u postoji samo jedan izolirani zadatak (CONFIG_NO_HZ_FULL), deaktivirajući krpelj pod tim uvjetima.

Odluku o zaustavljanju tiktaka ili ne donosi guverner pomoću parametra stop_tick iz vašeg povratnog poziva select()Ako očekujete prekid (vremenski ili neki drugi) u kratkom roku (unutar onoga što bi bio vremenski period), Nema smisla deaktivirati kvačicu.Vrijeme bi se potrošilo na reprogramiranje, a razdoblje zastoja bi se vjerojatno potrošilo na previše površno stanje ako se ispostavi da nitko ne probudi CPU.

Suprotno tome, ako governor vjeruje da će CPU biti u stanju mirovanja dulje od tikta i ako je odabrano stanje duboko, Najbolje je zaustaviti otkucavanje kako ne biste uništili ušteđevinuNeke konfiguracije kernela (parametar nohz=off ili onemogućiti CONFIG_NO_HZ_IDLE) prisiljavaju otkucavanje da se nikad ne zaustavi, u kojem slučaju sustav nije bez otkucavanja i zadani regulator je obično ljestvica umjesto izbornika ili teo.

PM QoS: Kako kontrolirati latencije mirovanja

Okvir od Kvaliteta usluge upravljanja napajanjem (PM QoS) Omogućuje upravljačkim programima i procesima korisničkog prostora da izraze ograničenja na energetsko ponašanje sustava, posebno na ulazno/izlazne latencije stanja spavanja.

Za cpuidle postoje dvije glavne vrste ograničenja: globalno ograničenje latencije CPU-a i ograničenja Latencija ponovnog pokretanja CPU-a (pm_qos_resume_latency_us)Interno, zahtjevi se pohranjuju u popise prioriteta, a efektivna vrijednost je, u ovom slučaju, minimalna od svih zatraženih.

Iz korisničkog prostora, globalno ograničenje može se izmijeniti otvaranjem /dev/cpu_dma_latency i upisivanjem 32-bitnog cijelog broja s maksimalno toleriranom latencijom u mikrosekundama u taj deskriptor. Svaki otvoreni deskriptor predstavlja neovisni zahtjevKada se zatvori, taj zahtjev nestaje i sustav ponovno izračunava efektivnu vrijednost s ostatkom.

Za ograničenja CPU-a postoji datoteka power/pm_qos_resume_latency_us en /sys/devices/system/cpu/cpu<N>/Upisivanje vrijednosti tamo mijenja zahtjev povezan s tim specifičnim CPU-om (koji dijeli cijeli korisnički prostor, stoga je preporučljivo arbitrirati tko mu pristupa). Upravljački programi jezgre također mogu registrirati vlastite zahtjeve putem internih PM QoS API-ja.

Guverneri cpuidlea moraju, u svakom izboru države, poštujte minimum između efektivne globalne latencije i latencije pogođenog CPU-aNe mogu birati države čije exit_latency premašuju tu granicu. To je izuzetno važno u slučajevima softvera s zahtjevi mekog rada u stvarnom vremenu, kao što su audio ili video, gdje bi prespor nastavak iz dubokog stanja mogao uzrokovati nedostatke ili probleme.

Postoji i još jedan QoS, cpu_wakeup_latencyšto utječe na izbor stanja mirovanja tijekom načina rada od obustave do mirovanja (s2idle) sustava. Njegovo rukovanje, iz korisničkog prostora, slično je onome kod cpu_dma_latency a izražava se i u mikrosekundama.

kontrola cpuidle-a putem parametara kernela

Linux vam omogućuje podešavanje ponašanja cpuidle i idle upravljačkih programa iz naredbenog retka kernela. Najdrastičniji parametar je cpuidle.off=1Ovo potpuno onemogućuje podsustav: petlja mirovanja i dalje postoji, ali se više ne pozivaju regulatori i upravljački programi cpuidle-a, već se umjesto toga koristi "zadani" mehanizam arhitekture, koji je obično puno jednostavniji i manje učinkovit.

  10 najboljih Linux emulatora za Windows

Parametar cpuidle.governor=<nombre> Omogućuje vam da prisilite guvernera da koristi, na primjer cpuidle.governor=menu o cpuidle.governor=teo, umjesto onog koji bi bio automatski odabran. Ovo je korisno za eksperimentiranje s potrošnjom energije i latencijom na istom hardveru bez ponovnog kompajliranja kernela.

U x86 arhitekturama postoje i specifični parametri vezani uz način ulaska u stanje mirovanja. Na primjer idle=halt y idle=poll Onemogućuju vozače. intel_idle y acpi_idleprisiljavanje sustava da koristi instrukciju hlt ili čista petlja ispitivanja za odmor. To pojednostavljuje ponašanje, ali na štetu učinkovitosti: idle=pollPosebno, može spriječiti korištenje P-stanja koja zahtijevaju da CPU-i budu u stanju mirovanja, što pogoršava potrošnju energije i performanse s jednim nitima.

Parametar idle=nomwait zabranjuje korištenje MWAIT instrukcije za ulazak u stanje mirovanja, prisiljavajući acpi_idle koristiti hlt i deaktiviranje intel_idle U Intelovim procesorima, samo ACPI upravlja stanjima. Nadalje, upravljački programi intel_idle y processor (potonje uključuje) acpi_idle) prihvaća opcije kao što su intel_idle.max_cstate=<n> y processor.max_cstate=<n> suziti popis dostupnih stanja u upravljačkom programu i odbaciti sva ona koja su dublja od navedenog indeksa.

U slučaju intel_idle.max_cstate=0To je ekvivalentno onemogućavanju Intelovog upravljačkog programa i dopuštanju ACPI upravljačkom programu da preuzme kontrolu, dok processor.max_cstate=0 tumači se kao processor.max_cstate=1Ovo su korisne opcije za za dijagnosticiranje problema sa stabilnošću, abnormalnih latencija ili neuobičajene potrošnje energije, uz cijenu ograničavanja sposobnosti sustava da uštedi energiju u stanju mirovanja.

Integracija s ARM, PSCI i standby platformama

Na modernim ARM platformama (kao što su mnogi SoC-ovi od TI, NXP, Rockchip, Apple preko Asahija itd.), cpuidle je obično integriran s firmwareom niske razine putem PSCI-ja.i uobičajen je u IoT uređajima s inteligentno upravljanje IoT uslugamaGenerički ARM upravljački program za cpuidle je onaj koji komunicira s PSCI-jem pomoću SMC (Secure Monitor Call) poziva i delegira stvarni prijelaz stanja na TF-A (Arm Trusted Firmware) ili drugi ekvivalentni firmver.

Tipičan primjer je SoC poput AM62x, gdje je stanje stanje pripravnosti implementirano je kao CPUIdle stanje na temelju WFI (Wait For Interrupt) instrukcije.S korisničke točke gledišta, sustav ulazi i izlazi iz stanja pripravnosti kontinuirano, mnogo puta u sekundi, bez potrebe za interakcijom: ovo je zadano "lagano" stanje pripravnosti, s vremenima ulaska i izlaska reda veličine mikrosekundi.

Putanja izvršavanja kada sustav uđe u stanje mirovanja na ovim platformama je približno: Petlja mirovanja detektira da nema zadataka, a regulator odabire odgovarajuće stanje (na primjer, ono koje se zove stby)Generički ARM upravljački program poziva PSCI kroz sloj drivers/firmware/psci.c, a na TF-A strani se poziva rukovatelj cpu_standby() definirano u strukturi plat_psci_opsTu se to stvarno događa. WFI.

Kada dođe do prekida, procesor automatski izlazi iz WFI-ja, TF-A vraća kontrolu kernelu, a CPU nastavlja izvršavanje od mjesta gdje je stao. Sve je to transparentno orkestrirano, pod uvjetom da stablo uređaja točno opisuje stanja mirovanja (čvor idle-states, reference iz svakog CPU-a i svojstva kao što su entry-latency-us, exit-latency-us y min-residency-us).

Ovo lagano stanje pripravnosti procesora ne treba miješati s načini dubokog spavanja za cijeli sustavgdje se cijeli energetski blokovi isključuju, periferni uređaji se rekonfiguriraju, a vremena ulaza/izlaza su u rasponu od milisekundi ili sekundi. Stanja mirovanja procesora više su orijentirana prema mikroupravljanje kratkotrajnim odmoromS druge strane, načini dubokog spavanja zahtijevaju dodatnu koordinaciju runtime PM-a, upravljačkih programa za obustavu/nastavak rada i često specifičnu podršku u bootloaderu ili firmveru.

Nakon što je u kernelu omogućen cpuidle i instaliran funkcionalni upravljački program (na primjer, generički ARM + PSCI upravljački program ispravno opisan u DT-u), Korisnik ne treba ništa "aktivirati".Guverneri to rješavaju automatski. Međutim, možete pogledati statistiku u /sys, promijenite trenutnog guvernera u /sys/devices/system/cpu/cpuidle/current_governor ili prilagoditi svojstva stanja koje je izložio upravljački program.

Na relativno novim platformama ili u procesima portiranja poput Asahi Linuxa, mnogi problemi s baterijom, toplinom ili nedostatkom funkcionalnog "spavanja" povezani su s da potpuna integracija cpuidle-a s hardverom još ne postoji (ili nije zrela)Problemi su: nedostaju dobro opisana stanja u razvojnom alatu, ne postoji firmware koji implementira razumna stanja ili je upravljački program još uvijek u razvoju. Dok se to ne stabilizira, uobičajeno je koristiti samo vrlo osnovno Wi-Fi stanje ili, još gore, potpuno onemogućiti CPU IDLE i ostati u prilično rudimentarnom stanju mirovanja.

U konačnici, razumijevanje kako cpuidle modelira logičke CPU-ove, kako upravitelji donose odluke s Ciljane rezidencije, latencije i PM QoSRazumijevanje načina na koji se upravljački programi povezuju s ACPI, PSCI ili vlasničkim firmwareom i kako raspoređivač otkucaja uvjetuje razdoblja mirovanja, omogućuje vam da u novom svjetlu vidite zašto vaš laptop traje dulje (ili kraće) na bateriji, zašto kernel bez otkucaja obično troši manje energije i zašto u određenim portovima na egzotični hardver... Spavanje i mirovanje su, doslovno, razlika između testnog sustava i upotrebljivog svakodnevnog pogonskog sustava..

Konfigurirajte napredne politike napajanja pomoću profila napajanja i modernog stanja pripravnosti
Povezani članak:
Konfigurirajte napredne politike napajanja pomoću profila napajanja i modernog stanja pripravnosti