Metode de extindere a duratei de viaţă a bateriei ...
Transcript of Metode de extindere a duratei de viaţă a bateriei ...
Universitatea Politehnica din București Facultatea de Electronică, Telecomunicații și Tehnologia Informației
București 2017
Metode de extindere a duratei de viaţă a
bateriei dispozitivelor mobile bazate pe
platforma Android
Profesor Coordonator: Dr. Ing. Ştefan STĂNCESCU
Masterand: Marian-Alexandru TUDORAN
Master: I.I.S.C
2
Cuprins
1. INTRODUCERE ............................................................................................................................................. 3
2. GESTIONAREA CONSUMULUI DE PUTERE ÎN SISTEMUL DE OPERARE LINUX ........................... 5
2.1 GESTIONAREA AVANSATĂ A PUTERII (Advanced Power Management) ..................................... 5
2.2 CONFIGURAREA AVANSATĂ ŞI INTERFAŢA DE PUTERE (Advanced Configuration and Power
Interface) ............................................................................................................................................................. 5
2.3 SISTEME DE GESTIONARE A PUTERII ............................................................................................ 6
2.4 STĂRI DE PUTERE ALE SISTEMULUI .............................................................................................. 6
2.4.1 Starea de aşteptare (Standby) .......................................................................................................... 6
2.4.2 Starea de supendare (Suspend) ........................................................................................................ 6
2.4.3 Starea de hibernare (Hibernate) ....................................................................................................... 6
3. GESTIONAREA PUTERII LA ANDROID ................................................................................................... 7
4. ARHITECTURA GESTIONĂRII CONSUMULUI LA ANDROID ............................................................. 8
5. MECANISMUL „WAKELOCK” ................................................................................................................... 9
6. CONCLUZII ................................................................................................................................................. 11
3
1. INTRODUCERE
În zilele de astăzi tehnologia telefoanelor mobile este în continua dezvoltare,
aceasta aducând efecte pozitive în viaţa fiecărui om. Pentru a face faţă cererilor în creştere
pentru astfel de dispozitive mobile, au apărut pe piaţă diverse sisteme de operare. Însă, nu
toţi utilizatorii îşi pot da seama cu uşurinţă care sistem de operare este mai potrivit pentru
nevoile lor.
Reţelele de telefonie mobilă consumă o cantitate mare de date, în scopul de a
îmbunătăţi comunicaţiile şi de a comprima acoperirea datelor. Dispozitivele mobile au un
impact continuu asupra fiinţei umane, aceasta din urmă beneficiind de evoluţia rapidă a
tehnologiei. În trecut, dacă se dorea trimiterea unui document important, acesta trebuia
livrat fizic, însă în prezent datorită tehnologiei avansate, oamenii pot trimite documente
în format electronic cu ajutorul telefoanelor mobile. Telefoanele mobile au un impact
major şi în alte domenii, cum ar fi cele business.
Cele mai avansate dispozitive mobile pot capta fotografii care sunt comparabile cu
camerele foto, din punct de vedere al rezoluţiei. Dispozitivele mobile devin semnificative
pentru marketing şi publicitate, furnizorul de servicii având o concurenţă foarte mare din
punct de vedere al costurilor aplicate pentru comunicare. Totuşi, în general numărul de
telefoane mobile sau de smartphone-uri este în continuă creştere, ceea ce duce la nevoia
de a înlocui telefoanele publice şi telefoanele fixe din fiecare locuinţă.
Gestionarea consumului dispozitivelor Android a devenit o problemă destul de
importantă. Smartphone-urile şi tabletele au un consum de energie ridicat datorită
componentelor hardware, iar dezvoltatorii de aplicaţii exploatează aceste componente
pentru a îmbunătăţi experienţa de utilizare. Se remarcă faptul că durata de viaţă a bateriei
nu se extinde, pe măsură ce cererea de energie creşte. Astfel, s-au efectuat foarte multe
cercetări pentru a investiga modul în care se poate realiza reducerea consumului de
energie la minimum.
Gestionarea consumului de energie (PM) al calculatoarelor a evoluat încă de la
introducerea conceptelor de management al puterii Advanced Power Management (APM)
şi Advanced Configuration & Power Interface (ACPI). Aceste două concepte sunt folosite
în general pentru calculatoare personale. Deşi sistemul de operare Android se bazează pe
kernelul Linux, acesta şi-a dezvoltat propriul sistem de management al puterii.
În urma unui studiu, s-a constatat faptul că 400,000 de dispozitive Android sunt
activate în fiecare zi, iar gestionarea consumului reprezintă o problema majoră. Pentru un
calculator de uz personal, gestionarea consumului de energie (PM) ajută la reducerea
puterii consumate dar şi a cerinţelor impuse în ceea ce priveşte răcirea. Atunci când se
consumă puţină putere, adică disiparea căldurii este destul de mică, stabilitatea sistemului
4
este destul de ridicată, acest lucru fiind extrem de important atunci când vine vorba de
telefoane mobile.
Economisirea bateriei pentru telefoanele mobile a devenit un subiect de cercetare
destul de interesant în ultimii ani. În zilele de astăzi, dezvoltatorii de sisteme se confruntă
cu probleme fundamentale, cum ar fi salvarea resurselor sistemului pe cât de mult posibil.
Apariţia smartphone-urilor pe piaţă a facut posibilă includerea unor noi facilităţi pentru
utilizatori, cum ar fi: navigarea pe internet, înregistrarea clipurilor video sau programarea
întâlnirilor, facilităţi care erau disponibile doar pe calculatoarele personale.
Sistemul de operare Android este derivat din sistemul de operare Linux. Principala
diferenţă este reprezentată de faptul că telefoanele mobile au puterea limitată, spre
deosebire de computere. Platforma Android utilizează sisteme de blocare (wakelocks)
pentru a limita puterea dinamic în timp ce sistemul rulează. Această caracteristică este
utilă pentru dispozitivele nefolosite şi poate oferi o economisire semnificativă a puterii pe
un sistem.
5
2. GESTIONAREA CONSUMULUI DE PUTERE ÎN SISTEMUL DE OPERARE
LINUX
Gestionarea consumului de putere în sistemele de operare este o operaţie destul de
importantă datorită cererilor în creştere existente pe piaţă. Pentru a reduce pierderile de
putere, Linux pune la dispoziţie mai multe opţiuni hardware de gestionare a puterii, cum
ar fi utilizarea circuitelor de tact (clock gating), scalarea de tensiune, activarea modulelor
de sleep şi dezactivarea memoriei cache. Fiecare dintre aceste caracteristici au rolul de a
reduce consumul de energie al sistemului în detrimentul latenţei şi/sau al performanţei.
[1]
2.1 GESTIONAREA AVANSATĂ A PUTERII (Advanced Power Management)
APM constă dintr-unul sau mai multe nivele de software care suportă gestionarea
puterii calculatoarelor. Gestionarea avansată a puterii defineşte interfaţa independentă
software-hardware între software-ul care realizează managementul puterii şi driverul
sistemului de operare. Acesta ascunde detaliile hardware, permiţând prin intermediul
software-urilor de nivel înalt să utilizeze APM fără a fi nevoie de cunoştinţe despre
interfaţa hardware. Specificaţiile software-ului de gestionare a puterii defineşte un mediu
caracterizat pe diferite nivele, în sensul că aplicaţiile, sistemele de operare, driverele
dispozitivelor şi BIOS-ul APM pot lucra împreuna pentru a reduce consumul de putere.
În concluzie, APM poate extinde durata de viaţă a bateriilor de sitem şi prin urmare
va creşte productivitatea şi disponibilitatea sistemului. [2]
2.2 CONFIGURAREA AVANSATĂ ŞI INTERFAŢA DE PUTERE (Advanced
Configuration and Power Interface)
Prin intermediul ACPI se permite controlul gestionării puterii din cadrul sistemului
de operare spre deosebire de APM unde gestionarea puterii este făcută la nivel de BIOS.
Cu ajutorul ACPI utilizatorul poate specifica la ce moment de timp un dispozitiv (de
exemplu, un monitor) se va opri din funcţionare. Dacă utilizatorul alege să specifice că
doreşte un consum de putere redus atunci când bateria este scăzută, unele aplicaţii care nu
sunt destul de importante vor deveni inactive. Sistemul de operare poate reduce nevoile
plăci de bază şi a dispozitivelor periferice până în momentul în care acestea sunt necesare
în mod deosebit. Cu ajutorul ACPI, computerul se poate opri din funcţionare şi poate intra
într-o stare inactivă, totuşi fiind capabil să răspundă la un apel telefonic.
În concluzie, ACPI oferă atât utilizatorului cât şi sistemului de operare posibilitatea
de a adapta sistemul nevoilor personale din punct de vedere al consumului de putere.
6
2.3 SISTEME DE GESTIONARE A PUTERII
În orice sistem de operare gestionarea puterii este considerată o necesitate datorită
cererii foarte mari din punct de vedere al consumului. Linux are şi o altă funcţionalitate
numită Sistemul de Gestionare al Puterii, prin care se realizează aducerea sistemului într-
o stare în care consumul este redus. În această stare, sistemul consumă energie minimă
prin care se asigură un răspuns mai lent totuşi la cererile utilizatorului. Cantitatea de
energie şi timpul de răspuns depind de starea în care se află sistemul. [3]
2.4 STĂRI DE PUTERE ALE SISTEMULUI
Stările în care poate intra un sistem bazat pe Linux sunt dependente de paltforma
de bază, şi diferă în funcţie de arhitectură şi generaţie. În general, există trei stări care se
regăsesc pe majoritatea arhitecturilor şi suportă o sisteme de gestionare a puterii. Nucleul
(kernelul) suportă explicit trei stări: Aşteptare (Standby), Suspendare (Suspend) şi
Hibernare (Hibernate) şi oferă un mecanism de definire a unor stări noi (un port
arhitectural al kernel-ului) .
2.4.1 Starea de aşteptare (Standby)
Starea de aşteptare foloseşte energie redusă, sistemul conservă energia prin punere
procesorului într-o stare de oprire. Gestionarea puterii nu este relevantă însă răspunsul
este în general mai mic de o secundă.
2.4.2 Starea de supendare (Suspend)
Suspendarea este o stare numită “suspendare la RAM”. În această stare, toate dispozitivele
sunt puse într-o stare inactivă excepţie făcând memoria principală. Memoria este pusă
într-un mod de reîmprospătare propriu, prin acest lucru asigurându-se faptul că ceea ce
conţine nu se va pierde. Latenţa de răspuns este mai mare faţă de modul Standby, însă
timpul este destul de mic, 3-5 secunde.
2.4.3 Starea de hibernare (Hibernate)
Hibernarea conservă majoritatea energiei prin oprirea întregului sistem, după salvarea
stării sistemului, toate dispozitivele fiind oprite necondiţionat. Hibernarea este singura
stare care poate fi folosită în absenţa oricărei platforme suport pentru gestionarea
consumului. Driverul de gestionare al puterii opreşte sistemul în loc să intre într-o stare
de joasă putere. Acest mecanism oferă o economisire satisfăcătoare a energiei şi poate fi
folosit atunci când există părţi hardware defecte ale gestionării puterii.
7
3. GESTIONAREA PUTERII LA ANDROID
Gestionarea consumului de putere la Android este dezvoltat pe baza standardului de
gestionare prezent la Linux. Dispozitivele bazate pe sistemul de operare Android oferă
propriul sistemul de gestionare al puterii, sistem care a fost dezvoltat pe premiza că un
procesor nu ar trebui să consume energie dacă nici o aplicaţie sau serviciu necesită acest
lucru. Android impune ca cererile de aplicaţii şi servicii asupra procesorului să fie făcute
prin aplicaţii framework şi librării native Linux. Dacă nu sunt cereri, Android va opri
procesorul.
Design-ul nucleului (kernel-ului) Android se bazează pe Linux, însă nu utilizează
un nucleu standard Linux. Un telefon mobil stă destul de mult timp într-o stare atunci când
nu este folosit. Acest lucru sugerează faptul că procesorul de aplicaţii este inactiv, în timp
ce procesorul de comunicaţii efectuează o activitate de nivel redus, fiind nevoit să rămână
conectat la reţea pentru a fi capabil să primească apeluri, mesaje şi altele. Timpul petrecut
în această stare este critic atunci când vine vorba de durata de viaţă a bateriei. Procesorul
salvează stările sistemului în memoria RAM iar dispozitivul este pus în modul Sleep.
Datorită faptului că procesorul este utilizat la capacitate maximă, Android nu
suportă nici o stare de aşteptare (Standby). Aplicaţiile din spaţiul utilizatorului pot folosi
clasa PowerManager pentru a controla stările de putere ale dispozitivului. În mod normal
gestionarea puterii este suportată de către drivere fără intervenţii din parte utilizatorului
sau nucleului.
8
4. ARHITECTURA GESTIONĂRII CONSUMULUI LA ANDROID
Aplicaţiile Android sunt obligate să solicite resursele procesorului prin intermediul
aplicaţiei framework şi prin librăriile native Linux. Arhitectura pe care se bazează
gestionarea consumului este prezentată în figura de mai jos. Se remarcă faptul că dacă nu
există o cerere, procesorul este inactiv. Un sistem de blocare ajuta sistemul prin prevenirea
intrării acestuia în suspendare sau alte stări de putere joasă. [4] Există două setări pentru
„wake lock”:
- WAKE_LOCK_SUSPEND previne suspendarea întregului sistem
- WAKE_LOCK_IDLE este o stare de joasă putere, care cauzează destul de des
latenţe de întreruperi sau dezactivează un set de întreruperi
Figură 1 Arhitectura gestionării puterii
În figura de mai sus, când Aplicaţia A este executată, aceasta are nevoie de
resursele procesorului. Prin urmare, aceasta trimite o cerere API-ului de gestionare al
puterii (Power Management API) care îi transferă cererea (folosind interfaţa nativă Java)
driverului de putere prezent în nucleul Linux. Prin managerul de putere (Power
Manager) se trimite un răspuns Aplicaţiei A şi este creat wake lock-ul. În tabelul de mai
jos sunt prezentate diferite stări, cea mai des utilizată fiind cea parţială
(PARTIAL_WAKE_LOCK).
9
Wake lock CPU Screen Keyboard
PARTIAL_WAKE_LOCK On Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
Tabel 1 Diferite setări WAKE LOCK
5. MECANISMUL „WAKELOCK”
Atunci când vine vorba de Android, “Wakelock” este un mecanism care previne
sistemul sa intre într-o stare de joasă putere. [5] Pe scurt, codul kernel poate seta un
wakelock cu comenzi de genul:
#include <linux/wakelock.h>
wake_lock_init (struct wakelock *lock, int type, const char *name);
Valoarea type va indica ce tip de wakelock se va folosi. Constanta name conţine un nume
care poate fi vizualizat în /proc/wakelocks. Există două stări posibile:
WAKE_LOCK_SUSPEND care previne sistemul să fie suspendat, în timp ce
WAKE_LOCK_IDLE previne intrarea sistemului într-o stare inactive de joasă putere care
ar putea mări timpii de răspuns.
Interfaţa de programare a aplicaţiei (API) pentru obţinerea şi eliberarea acestor blocări
este cea de mai jos:
void wake_lock (struct wake_lock *lock);
void wake_lock_timeout (struct wake_lock *lock, long timeout);
void wake_unlock (struct wake_lock *lock);
Există, de asemenea, şi o interfaţă utilizator-spaţiu. Alegând şi scriind un nume în
/sys/power/wake_lock se stabileşte o blocare cu acel nume, care apoi poate fi scris în
/sys/power/wake_unlock pentru a opri blocarea.
10
Atunci când un sistem de blocare de tipul “Inactiv” este în curs, sistemul nu va intra într-
o stare de joasă putere (idle), iar acest lucru ar trebui să facă dispozitivul să fie mai
receptiv. Din acest motiv, nu trebuie să iasă din stare idle pentru a răspunde la întreruperi
sau evenimente. Atunci când un este activ un sistem de blocare de tipul “SUSPEND”,
sistemul nu va suspenda.
Pentru a managementul puterii, Android oferă un serviciu pentru aplicaţiile din
spaţiul utilizatorului cu ajutorul clasei PowerManager, prin care se realizează salvarea
puterii şi implicit extinderea duratei de viaţă a bateriei. Paşii care se parcurg sunt
următorii:
- se obţine acces la PowerManager printr-o cerere realizată în urma apelării
funcţiei Context.getSystemService()
- se creează o blocare şi vor fi activate steagurile de management al puterii pentru
ecran, pauză, etc.
- se obţine acces pentru blocare
- se realizeză operaţiile dorite de utilizator
- sistemul iese din starea de blocare
Cererile de blocare sunt realizate în layer-ul Java. Atunci când o aplicaţie android
obţine acces la cerere, se înregistrează o nouă instanţă în Serviciul de Manager al Puterii
(PowerManagerService), serviciu care rulează în layer-ul Java. Cererile înregistrate sunt
puse într-o listă şi pot fi gestionate ulterior.
Atunci când este folosită clasa PowerManager pentru a controla starea
dispozitivelor, durata de viaţă a bateriei va fi afectată semnificativ. Se va crea un obiect
în clasa PowerManager şi se vor putea folosi diverse metode pentru a controla starea
dispozitivului din punct de vedere al consumului de putere. De exemplu:
PowerManager pm = (PowerManager) getSystemService (Context.POWER_SERVICE)
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, „My Tag”);
wl.acquire();
..Ecranul va rămâne aprins în această secţiune..
wl.release();
11
6. CONCLUZII
În această lucrare s-au analizat principalele diferenţe dintre gestionarea puterii la
dispozitivele bazate pe Android şi tehnicile prezente în sistemul de operare Linux. S-a
examinat arhitectura Android pentru a se înţelege mai bine operaţia de gestionare a puterii,
dar şi mecanismul “wakelock”. S-a observat faptul că la Android îi este permis nucleului
să evite interacţiuni între procesele de suspendare şi evenimentele de activare.
Mecanismul wakelock previne nucleul din procesul de suspendare al sistemului sau
încearcă să oprească suspendarea în curs de desfăşurare. De asemenea, acestea îi oferă un
standard direct nucleului prin care se ia decizia oportunistă de suspendare a sistemului.
Fiecare obiect wakelock conţine câmpuri în care este stocată informaţia statistică,
cum ar fi numărul activărilor wakelock, timpul total de activare sau timpul maxim cât
mecanismul a fost activ continuu, oricând a fost activat sau dezactivat.
Metoda de gestionare a puterii la Android s-a dovedit a fi ineficientă atunci când
vine vorba de suspendarea sistemului deoarece porneşte acest proces din spaţiul nucleului,
practic preia controlul unei interfeţe care a fost atribuită pentru procesele din spaţiul
utilizatorilor, fiind nevoie să interacţioneze cu nucleul într-un mod neobişnuit.
12
Bibliografie
1. H. Hartig, M. Hohmuth, and P. A. Barns. System integration for the android operating system. Proceedings of CollaborationCom., pp. 73–88 (2010) 2. M. Stemm and Y. H. Katz. Measuring and reducing energy consumption of network interfaces in hand-held devices. 13th ACM Symposium Operating Systems principles, pp. 102–107 (1997) 3. S. Salas and E. Hille, Introduction to Android Internals, John Wiley and Sons, New York (2007) 4. http://www.cs.uwc.ac.za/~mmotlhabi/apm2.pdf
5. https://developer.android.com/reference/android/os/PowerManager.html