20
Univerzitet u Novom Sadu Fakultet tehničkih nauka Odsek za računarsku tehniku i računarske komunikacije Linuks u ugrađenim sistemima i razvoj rukovalaca Rukovanje potrošnjom

Linuks u ugrađenim sistemima i razvoj rukovalaca

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Univerzitet u Novom Sadu

Fakultet tehničkih nauka

Odsek za računarsku tehniku i računarske komunikacije

Linuks u ugrađenim sistemima i razvoj rukovalaca

Rukovanje potrošnjom

RUKOVANJE POTROŠNJOM (POWER MANAGEMENT - PM)

2

Blokovi PM-a

Postoji nekoliko blokova PM-a

Suspend and resume

CPUidle

PM u toku rada (runtime PM)

Skaliranje frekvencije i voltaže

Aplikacije

Nezavisni blokovi mogu biti poboljšani postepeno tokom razvoja

3

Radni okvir radnog takta (1/4)

Generički radni okvir za upravljanje blokovima koji koriste uređaji u sistemu

Dozvoljava referenciranje korisnika odbrojavanja takta i da se ugase nekorišćeni taktovi radi čuvanja energije

Jednostavan API je opisan u Documentation/DocBook/kernel-api/clk.html

clk_get() za uzimanje reference na takt

clk_enable() startovanje takta

clk_disable() stop takta

clk_put() oslobađanje takta

clk_get_rate() preuzimanje trenutnog stepna radnog takta

4

Radni okvir radnog takta (2/4)

Zajednički radni okvir ranog takta:

Dozvoljava deklarisanje slobodnih taktova i njihovih veza sa uređajima u stablu uređaja (preferirano) ili statičko deklarisanje u izvornom kodu (stara metoda)

Obezbeđuje debugfs prikaz stabla radnog takta

Implementiran je u drivers/clk.

5

Dijagram prikaza uobičajenog radnog okvira radnog takta

6

Radni okvir radnog takta (3/4)

Sprega radnog okvira radnog takta je podeljena u dve polovine:

Common Clock Framework jezgro

Uobičajena definicija struct clk

Uobičajena implementcija clk.h API (definisan u drivers/clk/clk.c)

struct clk_ops: operacije pozvane od strane clk API implementacije

Ne bi trebalo da se modifikuje pri dodavanju novog rukovaoca

Specifična za fizičku arhitekturu

Povratni pozivi registrovani sa struct clk_ops i odgovarajućim strukturama specifičnim za fizičku arhitekturu

Mora biti napisan za svaki novi blok fizičke arhitekture

7

Radni okvir radnog takta (4/4)

Hardverske operacije radnog takta: stablo uređaja

Stablo uređaja je obavezan način deklarisanja radnog takta i njegovih resursa, a za svaki drugi rukovalac koji koristi stablo uređaja mora da se:

Parsira stablo uređaja za postavku radnog takta: preuzimaju se resursi, ali i odlike

Deklarišu compatible radni taktovi i vezuju se sa funkcijom za inicijalizaciju korišćenjem CLK_OF_DECLARE

8

Suspend and Resume

Infrastruktura u kernelu za podršku za suspend and resume

Na platformu se priključuje kroz:

prepare(), enter(), finish(), valid() funkcije u struct platform_suspend_ops

Registruje se korišćenjem suspend_set_ops() funkcije

Pogledati arch/arm/mach-at91/pm.c

Rukovaoci uređajem se priključuju kroz:

suspend() i resume() definisani u *_driver strukturama (struct platform_driver, struct usb_driver, itd.)

Videti drivers/net/ethernet/cadence/macb.c

9

Pokretanje Suspend-a

struct suspend_ops funkcije se zovu iz enter_state() funkcije u kernelu.

enter_state() se takođe brine o izvršavanju suspend() i resume() funkcija za vaše uređaje.

Izvršenje ove funkcije može biti pokrenuto iz korisničkog prostora. Za suspend RAM-a:

echo mem > /sys/power/state

Može se koristiti i s2ram apliakcija sa http://suspend.sourceforge.net/

Pogledajte kernel/power/suspend.c

10

PM u toku rada (runtime PM)

Prema kernel konfiguracionoj sprezi od rukovalaca se traži: Uključivanje funkcionalnosti za dozvolu ulazno izlaznim uređajima da budu stavljeni u stanja za čuvanje energije u toku rada (ili da budu “autosuspended”) nakon specifiranog vremenskog perioda neaktivnosti i da budu probuđene iz odgovora na wake-up događaj koji je generisala fizička arhitektura na zahtev rukovaoca.

Nova priključenja moraju biti dodata u rukovaoce: runtime_suspend(), runtime_resume(), runtime_idle()

Pogledajte prezentaciju Kevina Hilmana na ELC Europe 2010 o ovome: http://elinux.org/images/c/cd/ELC-2010-khilman-Runtime-PM.odp

11

Čuvanje energije u petlji mirovanja (stanje pripravnosti –

idle loop)

Stanje pripravnosti se dešava kada ne postoji ništa drugo pokrenuto u sistemu.

Implementirano je u svim arhitekturama u arch/<arch>/kernel/process.c

Primer za čitanje: potražite cpu_idle u arch/arm/kernel/process.c

Svaki ARM CPU definiše svoju arch_idle funkciju.

CPU može da čuva energiju:

HLT instrukcijama - dobavljanje i izvršenje instrukcija onemogućeno, takt radi

ulaženjem u NAP mod - isključen je interni takt jezgra

isključivanjem glavne vremenske kontrole (tickless systems).

Vidite još: https://en.wikipedia.org/wiki/Idle_(CPU)

12

Upravljanje u mirovanju (stanje pripravnosti)

Dodavanje podrške za više nivoa pripravnosti

Moderni CPU-ovi imaju nekoliko stanja mirovanja koja nude različita čuvanja energije vezan sa različitim kašnjenjima buđenjima

Odlika dinamičkog otkucaja (dynamic tick) dozvoljava uklanjanje periodičnog otkucaja sa ciljem čuvanja energije, i saznanje kad je zakazan sledeći događaj, za naprednije mirovanje.

Infrastruktura mirovanja CPU-a (CPUidle) za promenu stanja mirovanja:

Specifičan rukovalac za platformu koji definiše stanja mirovanja i operacije tranzicije

Upravljači nezavisni od platforme (ladder i menu)

Dostupno za x86/ACPI, nije za sad podržano od svih ARM CPU-ova

Pogledajte Documentation/cpuidle/ u izvornom kodu kernela. 13

PowerTOP

https://01.org/powertop/

Sa dinamičkim otkucajima, dozvoljava popravljanje delova kernel koda i aplikacija koji bude sistem prečesto.

PowerTOP dozvoljava praćenje ´najgorih prestupnika´

Dostupan na ARM CPU-ovima koji implementiraju CPUidle

Takođe, daje korisna uputstva za smanjivanje potrošnje energije

14

Skaliranje frekvencije i voltaže (1/2)

Skaliranje frekvencije i voltaže je moguće kroz cpufreq infrastrukturu kernela.

Generička infrastruktura: drivers/cpufreq/cpufreq.c i include/linux/cpufreq.h

Generički upravljači, odgovorni za odlučivanje frekvenicjskih i voltažnih tranzicija

performance: maksimalna frekvencija

powersave: minimalna frekvencija

ondemand: meri CPU potrošnju za podešavanje frekvencije

conservative: često bolji od ondemand. Samo uvećava frekvenciju postepeno kada CPU postane opterećen.

userspace: ostavlja odluku demonu korisničkog prostora.

Ova infrastruktura može da se kontroliše iz /sys/devices/system/cpu/cpu<n>/cpufreq/

15

Skaliranje frekvencije i voltaže (2/2)

CPU rukovaoci u drivers/cpufreq. Primer: drivers/cpufreq/omap-cpufreq.c

Moraju se implementirati operacije iz cpufreq_driver strukture i registrovati korišćenjem cpufreq_register_driver()

init() za inicijalizaciju

exit() za čišćenje

verify() za potvrdu polise odabrane od strane korisnika

setpolicy() ili target() da se zaista obavi promena frekvencije

Pogledajte Documentation/cpu-freq/ za više objašnjenja

16

PM sprega za kvalitet usluge (PM QoS interface)

Sprege kernela i korisničkog moda za registrovanje očekivanja performansi od strane rukovalaca, podsistema i aplikacija korisničkog prostora.

Postoje dva različita radna okvira za PM QoS spregu:

PM QoS klase za CPU DMA kašnjenje, mrežno kašnjenje i za mrežni protok.

Po-uređaju PM QoS API radnog okvira za upravljanje kašnjenjem po-uređaju.

Prema ovim zahtevima, PM QoS dozvoljava rukovaocima kernela da podese svoje upravljanje energijom.

Pogledajte Documentation/power/pm_qos_interface.txt

I dalje je potrebno da se odradi u većini rukovalaca. 17

Radni okvir za regulaciju

Moderne ugrađene fizičke arhitekture imaju namenski hardver odgovoran za regulaciju voltaže i struje.

Radni okvir za regulaciju dozvoljava da se iskoriste prednosti ovakvog hardvera kada delovi sistema nisu u upotrebi

Consumer sprega za rukovaoce uređajima (korisnike)

Regulator driver sprega za rukovaoce regulatorom

Machine sprega za konfiguraciju ploče

sysfs sprega za korisnički prostor

Pogledajte Documentation/power/regulator/ u izvornom kodu kernela

18

BSP rad za novu ploču

Za slučaj da vam je potreban BSP na vašoj ploči, a CPU već ima postojeću punu podršku za upravljanje energijom, potrebno je:

Kreirati definicije takta i vezati uređaje na njih

Implementirati rukovaoce (handlers) upravljanjem energije (suspend, resume) u rukovaocima za specifične uređaje na ploči

Implementirati rukovaoce (handlers) za PM u toku rada u rukovaocima

Implementirati priključivanje radnog okvira regulatora za našu ploču ako je potrebno.

Svi ostali delovi PM infrastrukture bi trebali već biti tu: suspend / resume, cpuidle, skaliranje frekvencije i voltaže.

19

Korisni resursi

Documentation/power/ u izvornom kodu Linuks kernela.

Sadrži mnogo kornisnih detalja.

http://wiki.linaro.org/WorkingGroups/PowerManagement/

Trenutni razvoj ARM platforme

Introduction to kernel power management, Kevin Hilman, Linaro

http://elinux.org/images/d/dd/Intro_Kernel_PM.svg

https://www.youtube.com/watch?v=Um0oRanCtzY

Saveti i ideje za produženje života baterije:

http://idlethread.blogspot.rs/2010/12/prolonging-battery-life-on-your.html

20