Universitatea Politehnica din București Facultatea de Electronică, Telecomunicații și Tehnologia Informației 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 București 2017
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 2
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 3
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. 4
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. 5
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 întro 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. 6
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. 7
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). 8
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 5. MECANISMUL WAKELOCK Tabel 1 Diferite setări WAKE LOCK 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. 9
Atunci când un sistem de blocare de tipul Inactiv este în curs, sistemul nu va intra întro 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(); wl.release();..ecranul va rămâne aprins în această secţiune.. 10
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. 11
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 12