stress alimentazione e medicina anti-aging in chiave immunologica
Analisi dei fenomeni di Software Aging nei sistemi operativi...
Transcript of Analisi dei fenomeni di Software Aging nei sistemi operativi...
-
Università degli Studi di Napoli Federico II
SCUOLA POLITECNICA E DELLE SCIENZE DI BASE
Corso di Laurea Magistrale in Ingegneria Informatica
Tesi di laurea magistrale in Impianti di Elaborazione
Analisi dei fenomeni di Software Aging nei sistemi operativiAndroid
Candidato:
Roberto MaistoMatricola M63000553
Relatore:
Domenico Cotroneo
Correlatore:
Roberto Pietrantuono
Anno Accademico 2016–2017
-
Android Software Aging
Indice
Introduzione 5
1 Software Aging and Rejuvenation: stato dell’arte 9
1.1 Concetti base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Tipi di analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Tipi di sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4 Effetti ed Indicatori di Aging . . . . . . . . . . . . . . . . . . . . . . . 25
1.5 Tecniche di Rejuvenation . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2 Design of Experiments 31
2.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Variabili di Risposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.1 User-perceived . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.2 System-related . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3 Fattori e livelli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.4 Piano sperimentale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5 Testbed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.6 Script Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3 Analisi dei risultati 51
3.1 Software Aging tra gli Android vendors . . . . . . . . . . . . . . . . . . 51
3.1.1 Analisi del Launch Time . . . . . . . . . . . . . . . . . . . . . . 51
3.1.2 Analisi dell’uso di memoria . . . . . . . . . . . . . . . . . . . . 54
2
-
Android Software Aging
3.2 Software aging tra versioni di Android . . . . . . . . . . . . . . . . . . 57
3.2.1 Analisi del Launch Time . . . . . . . . . . . . . . . . . . . . . . 57
3.2.2 Analisi dell’uso di memoria . . . . . . . . . . . . . . . . . . . . 60
3.3 Analisi dei processi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.3.1 Analisi della Garbage Collection . . . . . . . . . . . . . . . . . . 64
3.3.2 Analisi dei Task . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Conclusioni 68
Bibliography 70
3
-
Android Software Aging
Elenco delle figure
1.1 Analisi del trend del consumo di risorse in un sistema Unix [Garg et al.
1998b] IEEE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Modello probabilistico di transizione di stato per un sistema con rejuvenation. 12
2.1 Panoramica della metodologia per l’analisi del Software Aging . . . . . 33
2.2 Testbed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.1 Launch Time delle Attività per Gruppi dell’EXP39 . . . . . . . . . . . 53
3.2 Distribuzione dei trend di LT per tutti i produttori e versione fissata ad
Android 6 (EXP13∼EXP60) . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3 Distribuzione dei trend di PSS: EXP13∼EXP60 . . . . . . . . . . . . . 56
3.4 Distribuzione dei trend di LT: EXP49∼EXP72 (Samsung S6 Edge) . . 59
3.5 Distribuzione dei trend di LT: EXP1∼EXP24 (Huawei P8) . . . . . . . 59
3.6 Distribuzione dei trend di LT: EXP37∼EXP48-EXP73∼EXP84(Lg Nexus) 60
3.7 Distribuzione dei trend di PSS: EXP1∼EXP24 (Huawei P8) . . . . . . 61
3.8 Distribuzione dei trend di PSS: EXP49∼EXP72 (Samsung S6 Edge) . . 62
3.9 Distribuzione dei trend di PSS: EXP37∼EXP48-EXP73∼EXP84 (Lg
Nexus) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.10 Numero di occerrenze di trend per le metriche GC: EXP1∼EXP84 . . . 65
3.11 Numero di occorrenze di trend per le metriche Task: EXP1∼EXP84 . . 66
4
-
Android Software Aging
Introduzione
Il software aging è un fenomeno che colpisce un gran numero di sistemi software
complessi long-running. Esso consiste nella degradazione delle prestazioni o nell’aumento
del tasso di fallimento del sistema stesso, che possono essere dovuti all’accumulo di
errori che prima o poi portano al fallimento del sistema. Questo fenomeno è stato
osservato per molto tempo ma, con la crescita del software, sia in dimensioni che in
complessità, il software aging è stato rilevato su un numero sempre maggiore di sistemi
long-running. La causa principale può essere attribuita a software bugs complessi che,
quando attivati, non causano direttamente un fallimento del software ma si manifestano
come: perdite di memoria, frammentazione di memoria, thread non terminati, file locks
non liberati, corruzione dei dati o accumulo di errori numerici che portano lentamente
il sistema a degradare le sue prestazioni e prima o poi a fallire. Spesso, questi tipi di
bug sono difficili o troppo costosi da rimuovere durante lo sviluppo e il testing. La
Software Rejuvenation è una soluzione economicamente vantaggiosa per contrastare
gli effetti del software aging. La Software Rejuvenation è un approccio proattivo
per prevenire la degradazione delle prestazioni ed i fallimenti causati dal software
aging: essa consiste in una occasionale o periodica rimozione degli effetti del software
aging (che può essere ottenuta tramite il riavvio del software o al ripristino dell’intero
ambiente di esecuzione o parte di esso), in modo da posticipare i fallimenti e ristabilire le
prestazioni. La software rejuvenation rappresenta una forma di manutenzione software
preventiva rispetto ad altre forme già esistenti, come installazione di aggiornamenti o
reingegnerizzazione del software.
Al giorno d’oggi, i dispositivi mobili rappresentano sistemi long-running e business-critical
5
-
Android Software Aging
a tutti gli effetti. Essi risultano complessi, ricchi di funzionalità e ampiamente personalizzati,
rendendoli sensibili al problema del software aging. I dispositivi mobili (come smartphone,
tablet e wearables) assistono le persone nelle loro attività personali, e sono oggi una
risorsa fondamentale per comunicare e usufruire di un’ampia gamma di servizi cloud,
ad esempio: social networking, servizi bancari, e-commerce, archiviazione dati e mail.
Si prevede che nel prossimo futuro possano diventare portafogli digitali e veri e propri
oggetti di riconoscimento digitali. Inoltre, vengono anche utilizzati in contesti aziendali
per accedere a dati e servizi sensibili. Di conseguenza, gli utenti si aspettano una
piattaforma affidabile, che dovrebbe essere veloce, evitando perdite di dati e crash degli
smartphone. Assicurare tali caratteristiche è una sfida per i produttori di smartphone:
nel tempo sono diventati profondamente complessi e ricchi di funzionalità, vengono
aggiornati di continuo e sono fortemente personalizzati dai produttori per differenziare
i loro prodotti dai competitors. Tale aumento di complessità porta inevitabilmente
a problemi di affidibilità.. Il sistema operativo mobile Android, che correntemente
domina nel mercato degli smartphone, è cresciuto fino a più di 6 milioni di linee di codice
Java e C++. Inoltre, recenti studi hanno mostrato che la complessità del software e
le personalizzazioni dei produttori hanno avuto un impatto negativo sull’affidabilità di
Android in termini di vulnerabilità e densità di bug. A sua volta, tutto ciò si riflette
nella bassa qualità percepita dagli utenti che colpisce la popolarità dei prodotti mobili
sul mercato.
Fin dai primi studi sul software aging e software rejuvenation, è stato dedicato molto
sforzo alla caratterizzazione del fenomeno di aging e all’individuazione della migliore
strategia di rejuvenation. Il seguente studio si pone come obiettivo principale quello di
analizzare il software aging all’interno del sistema operativo Android. A tal proposito
verrà presentata una metodologia sperimentale per analizzare tale fenomeno. Tale
metodologia usa tecniche statistiche per identificare quale fattore (ad esempio workload
e configurazione dei device) incide maggiormente sulla degradazione delle prestazioni
e sul consumo delle risorse. Inoltre, analizza la correlazione tra le metriche di software
aging e quelle di consumo delle risorse, per identificare quali sottosistemi di Android
sono maggiormente colpiti da tale fenomeno.
6
-
Android Software Aging
In particolare si cercherà di rispondere alle seguenti domande:
1. Il sistema operativo Android è affetto dal fenomeno del software aging?Il software
aging influisce sulla responsività e/o sul consumo di risorse? Fino a che punto?
La prima domanda è la base per esplorare i problemi del software aging in Android e per
motivare ulteriori ricerche sulla mitigazione di questo problema attraverso rejuvenation
o un testing migliore. Per rispondere a questa domanda vengono presi in considerazione
un’ampia gamma di condizioni sperimentali in termini di workload e configurazioni dei
device che potrebbero influenzare la portata degli effetti del software aging. Inoltre,
viene misurata la risposta percepita dall’utente nel tempo per analizzare se il software
aging ha un impatto sull’esperienza utente.
2. Il software aging è diffuso anche su diversi dispositivi provenienti da differenti
produttori?
Per quanto detto finora, i diversi produttori Android introducono profonde personalizzazioni
nei loro prodotti. Quindi, la versione open-source di Android (AOSP) viene estesa
con nuove interfacce grafiche e servizi per migliorare l’esperienza utente. Queste
personalizzazioni possono introdurre ulteriori difetti software, e aggravare i problemi
di software aging.
3. Il software aging è diffuso anche su differenti versioni del sistema operativo
Android?
Il sistema operativo Android ha subito numerose modifiche architetturali nel corso degli
ultimi anni. Pertanto, si vuole investigare se l’evoluzione di Android ha avuto influenze
sui problemi di software aging.
4. Dove originano i problemi di software aging che colpiscono il sistema operativo
Android?
Per meglio comprendere le cause del software aging, vengono analizzate anche le metriche
di consumo delle risorse sia a livello dei processi che dei task, correlandole con i dati
7
-
Android Software Aging
relativi alla risposta percepita dall’utente. Tale informazione è utile per identificare
quale tra i numerosi componenti di Android sia quello più colpito dal software aging, per
mettere in atto eventuali meccanismi di prevenzione o mitigazione come la rejuvenation.
Panoramica dei capitoli
Nel primo capitolo verranno discusse le principali tecniche di caratterizzazione del
software aging allo stato dell’arte; nel secondo capitolo verranno descritte tutte le
scelte effettuate relative al design of experiments; nel terzo capitolo verranno effettuate
le analisi dei dati ottenute dagli esperimenti.
8
-
Android Software Aging
Capitolo 1
Software Aging and Rejuvenation:
stato dell’arte
Lo scopo del seguente capitolo è quello di fornire una visione globale circa lo stato
dell’arte della Software Aging and Rejuvenation (SAR). In particolare, verranno descritti
gli approcci che vengono usati per prevedere il fenomeno dell’aging e per pianificare la
rejuvenation, i tipi di sistemi e sintomi di aging che sono stati studiati e le tecniche che
sono state proposte per la rejuvenation di sistemi software complessi.
1.1 Concetti base
Il fenomeno del Software Aging consiste, in generale, nell’aumento del tasso di fallimento
e/o nella degradazione delle prestazioni di un sistema software long-running. A sua
volta, ciò è dovuto all’attivazione e propagazione dei cosiddetti Aging-Related Bugs
(ARBs), una particolare classe di software fault che manifestano i loro effetti solo dopo
un lungo periodo di esecuzione. L’attivazione di questi bug non causa immediatamente
il fallimento del sistema: considerando la catena concettuale fault-error-failure [62], la
peculiarità degli ARBs è che la loro attivazione/propagazione dipende dalla durata di
tempo che il sistema sta eseguendo, e, portando un accumulo di errori, causano un
transito graduale del sistema da uno stato corretto ad uno stato soggetto al fallimento.
Dopo che è trascorso un certo tempo di esecuzione, o dopo che si è accumulata una
9
-
Android Software Aging
certa quantità di errori, gli ARBs portano all’ aging-related failure (ad esempio,
fallisce una operazione che alloca memoria, facendo crashare il processo). Tipicamente,
l’accumulo di errori deriva da una cattiva gestione della memoria che porta all’esaurimento
delle risorse, come memory leaks, thread non terminati, e file locks non liberati:
in questi casi, ci si riferisce al tempo previsto all’aging-related failure come time
to (resource) exhaustion (TTE). Inoltre, l’accumulo di errori è influenzato dalla
quantità e tipo di lavoro che il sistema esegue, denominato workload.
Gli Aging effects sono il risultato dell’accumulo di errori, in termini di perdite di
risorse o stato corrotto; questi effetti possono essere rilevati per mezzo degli aging
indicators, ovvero, variabili di sistema che possono essere direttamente misurate e che
possono essere correlate al fenomeno del software aging. Esempi di aging indicators
sono le informazioni circa l’uso di risorse di un sistema operativo, come memoria fisica
libera, spazio di swap utilizzato e dimensioni delle tabelle di file e processi. In [Garg et
al 1998b], è stato eseguito un esperimento monitorando l’uso di risorse del SO in una
LAN di workstation UNIX usando un tool di monitoraggio distribuito SNMP, in modo
da identificare i trend di software aging. La figura 1.1 mostra il consumo di memoria e
le tabelle di file su un arco di 53 giorni. Siccome il fenomeno di aging può non essere
evidente soltanto da una ispezione visuale dei dati, vengono spesso utilizzate tecniche
di trend detection per rilevare l’inizio del software aging. In figura 1.1, viene rilevato
un trend tramite lo smoothing dei dati con una regressione locale pesata robusta, che
fornisce indicazioni visive circa la graduale decrescita di memoria libera e l’incremento
delle tabelle dei file. Per effettuare affermazioni decisive circa la presenza o l’assenza
di trend di software aging con una confidenza statistica, è richiesto l’uso di tecniche
statistiche: esempi di tecniche che vengono spesso utilizzate sono il seasonal Kendall
e il Mann-Kendall test for trend, per testare l’ipotesi che esiste un trend crescente o
decrescente nei dati osservati, e la Sen’s procedure per il calcolo dello slope dei trend.
Quindi, è possibile calcolare il TTE atteso di una data risorsa utilizzando lo slope
stimato.
Il consumo di risorse o altri effetti di aging dovuti ad ARBs si possono manifestare
in software applicativo, nelle librerie di cui l’applicativo fa uso oppure nel suo ambiente
10
-
Android Software Aging
(a) Free memory (b) File table size
Figura 1.1: Analisi del trend del consumo di risorse in un sistema Unix [Garg et al.
1998b] IEEE.
di esecuzione (ad esempio, il sistema operativo). Ad ogni modo, riparare tali bug
non è sempre fattibile; per esempio, essi potrebbero trovarsi in software di terze parti,
o codice riusato, per cui gli sviluppatori non hanno il codice sorgente oppure non
sono molto esperti sui meccanismi interni; inoltre, potrebbe essere davvero difficoltoso
identificare questi bug in sistemi software complessi. La Software Rejuvenation è un
approccio conveniente economicamente per rimuovere gli effetti di aging ed evitare gli
aging-related failure, perchè non necessita di sapere dove siano collocati gli ARBs, o
della loro stessa esistenza. La Software rejuvenation viene definita in [Huang et al.1995]
come il riavvio preventivo di applicazioni continuamente in esecuzione per prevenire
fallimenti in futuro. Siccome un’applicazione può non essere disponibile durante il
riavvio, la rejuvenation può aumentare il downtime del sistema e quindi causare dei
costi (ad esempio, costi dovuti alla perdita di attività). Tuttavia, questi costi possono
essere minimizzati pianificando la rejuvenation durante i tempi di maggiore inattività
dell’applicazione. Al contrario, è probabile che i costi di downtime saranno alti se la
rejuvenation non è pianificata, così come accade durante un fallimento. La Rejuvenation
può evitare, o almeno posporre, gli aging-related failure, perciò può ridurre il downtime
complessivo ed i relativi costi.
Per questa ragione, il problema più importante nell’ambito della SAR è pianificare
quando effettuare la rejuvenation durante l’esecuzione (rejuvenation schedule) in
modo da migliorare l’availability e ridurre i costi. Un esempio è rappresentato dal
11
-
Android Software Aging
semplice modello basato su catene di Markov a tempo continuo (CTMC) introdotto
in [Huang et al. 1995] per analizzare la software rejuvenation (figura 1.2). In questo
modello, dopo il suo avvio, l’applicazione si trova nello stato robusto S0, in cui la
probabilità di un aging-related failure è trascurabile poichè non è trascorso molto
tempo. Dopo un certo tempo (ad un tasso r2 più basso degli altri), l’applicazione
andrà in uno stato failure-probable SP (ad esempio, alcune risorse si sono consumate
e sono vicine all’esaurimento); in questo stato, l’applicazione può fallire con tasso λ
e passare allo stato "fallito" SF per poi essere successivamente riparato ad un tasso
r1. Se il sistema effettua la rejuvenation, passerà dallo stato SP allo stato SR ad un
tasso r4 e poi di nuovo allo stato robusto S0 con tasso r3. Questo modello permette
di calcolare il downtime atteso (sia nel caso pianificato che non) ed i suoi costi; a sua
volta, permette di analizzare quando, e sotto quali condizioni, la software rejuvenation
è benefica per l’availability. Ad esempio, se il costo di rejuvenation è basso ed il tasso
di fallimento è alto, la rejuvenation dovrebbe essere effettuata non appena il sistema
passa nello stato failure-probable.
Figura 1.2: Modello probabilistico di transizione di stato per un sistema con
rejuvenation.
Un semplice modo per effettuare la software rejuvenation è di riavviare l’applicazione.
Il riavvio può coinvolgere l’accodamento temporaneo di messaggi in ingresso, ripulire le
strutture dati di memoria, rigenerare i processi nel loro stato iniziale o nel loro ultimo
stato salvato. Inoltre, la rejuvenation può essere eseguita a diversi livelli, che vanno
dal riavviare un singolo componente al riavviare l’intero nodo su cui l’applicazione
12
-
Android Software Aging
è in esecuzione. La definizione di tecniche di rejuvenation (come effettuare la
rejuvenation), capaci di ridurre la probabilità di aging failure e tenere bassi i costi
causati dal downtime, è un altro importante problema della SAR.
13
-
Android Software Aging
1.2 Tipi di analisi
Questa sezione tratta i diversi tipi di analisi in letteratura circa la Software Aging e
Rejuvenation.
Analisi Model-based. Il software aging è stato analizzato a partire dalle osservazioni
empiriche che diversi sistemi long-running sono affetti da failure transienti e hanno
bisogno, di tanto in tanto, di essere riavviati. Per quanto detto finora, c’è un’alta
incidenza di bug che si manifesta come perdite di memoria, puntatori danneggiati, file
lock non liberati ed accumulo di errori, che portano lentamente il sistema a degradare
le sue prestazioni e prima o poi a fallire. Pertanto, da molto tempo sono state adottate
alcune forme di software rejuvenation per contrastare tali effetti. Questo approccio
ha fatto sorgere il problema di trovare una pianificazione ottimale e vantaggiosa delle
azioni di rejuvenation. [Huang et al. 1995] tentarono di modellare il fenomeno in modo
da fornire una vista astratta del problema ed un trattamento matematico. Questo
ha permesso ai ricercatori di far fronte al software aging formulando analiticamente il
fenomeno, concentrando l’attenzione su come pianificare in maniera ottimale le azioni
di rejuvenation.
I modelli analitici furono impiegati per la prima volta per dimostrare che la software
rejuvenation può ridurre i costi del downtime di un sistema e minimizzare i tempi di
completamento di un’applicazione in presenza di software aging. Gli studi Model-based
possono essere distinti in base al tipo di processo stocastico utilizzato per modellare il
fenomeno. Ce ne sono di diversi tipi, spesso markoviani. Tra questi:
• Processi markoviani e processi semi-markoviani : questo tipo di processi con le
loro varianti sono la base per l’analisi model-based nella SAR. Il primo lavoro sul
software aging da Huang et al. è stato quello di modellare il fenomeno usando
una catena di Markov a tempo continuo (CMTC) a quattro stati, che ancora oggi
è rappresenta il modello base del fenomeno (come discusso nella sezione 1.1).
Questo modello base è stato esteso in molti modi, usando processi markoviani e
semi-markoviani. Alcuni esempi sono [Garg et al. 1998a] in cui viene utilizzata
una CTMC non omogenea (il tempo di soggiorno in ciascuno stato non è distribuito
14
-
Android Software Aging
esponenzialmente) e [Bao et al. 2005] dove vengono impiegati processi semi-markoviani
(i tassi di transizione da uno stato all’altro dipendono, oltre che dallo stato
corrente, anche dal tempo speso in esso) per modellare una gestione dei fault
proattiva.
Le catene di Markov sono ancora ampiamente utilizzate nella loro forma più
semplice, tipicamente per: a) analizzare sistemi complessi, con più strategie di
rejuvenation, b) analizzare l’aging in nuovi contesti, come sistemi che usano la
virtualizzazione [Myint and Thein 2010], c) descrivere manifestazioni di fallimenti
più complessi (invece di modellare un solo stato di fallimento che causa la totale
indisponibilità del servizio, vengono considerati più gradi di fallimento per modellare
la decrescita del tasso di servizio, ovvero, la performance degradation).
• Altri modelli basati su Markov : sebbene la maggior parte degli studi adottino
processi markoviani e semi-markoviani, altri esplorano diversi tipi di modellazione.
Ad esempio, in [Garg et al 1995; 1998a; Wang et al 2007] sono stati usati processi
markoviani rigenerativi (MRGP), insieme alle Stochastic Petri Nets (SPN), in
modo da costruire un modello semplice ma generale per stimare la pianificazione
ottimale della rejuvenation in un sistema software. I processi markoviani rigenerativi
sono una generalizzazione dei processi markoviani e semi-markoviani che possono
catturare il comportamento di sistemi reali con distribuzioni sia deterministiche
che esponenziali. Quindi, mentre i primi modelli considerano solo tassi di rejuvenation
distribuiti esponenzialmente nello stato failure-probable, le MRGP affrontano
anche il caso di un intervallo deterministico di rejuvenation, partendo dallo
stato robusto. Gli autori mostrano gli effetti di un intervallo di rejuvenation
deterministico in termini di downtime e costo.
Il problema di trovare la pianificazione ottimale della rejuvenation è stato formulato
anche come processo decisionale di Markov (MDP) dove: il tempo è discretizzato
e rappresenta una dimensione dello stato descritto, la decisione in ciascuno stato
determina se il sistema dovrebbe eseguire la rejuvenation o meno, e la soluzione
consiste nel trovare la pianificazione ottimale per minimizzare la funzione di costo.
15
-
Android Software Aging
• Reti di Petri : le reti di Petri e le loro numerose varianti sono formalismi strettamente
correlati ai modelli di Markov, ma sono più compatte e più facili da definire.
Questi modelli permettono di esprimere più facilmente le metriche di performability
con più livelli di performance, e sono particolarmente utili per esprimere metriche
in sistemi più complessi, come sistemi con più nodi.
Ad esempio, le Deterministic and Stochastic Petri Nets (DSPN) furono impiegate
in [Wang et al. 2007], per costruire un modello per analizzare la performability
di un sistema a cluster sottoposto a workload variabile. Similmente, le Stochastic
Reward Nets (SRN) furono usate in [Vaidyanathan et al. 2001] per modellare un
sistema a cluster.
Gli studi basati su modelli analizzano modelli astratti, facendo molte assunzioni
semplificative sul sistema, ad esempio riguardo le distribuzioni stocastiche che lo caratterizzano.
Rispetto all’approccio basato su misure, questi modelli possono essere applicati ad una
grande varietà di sistemi, perchè possono fornire risultati più generali e possono essere
portabili tra diversi sistemi. Tuttavia, la rejuvenation software model-based potrebbe
essere meno efficace rispetto agli approcci basati su misure, siccome potrebbe trascurare
alcune peculiarità di uno specifico sistema e potrebbe non essere in grado di adattarsi
a condizioni differenti da quelle attese. In ogni caso, gli approcci model-based possono
basarsi su dati reali, che potrebbero essere ottenuti da analisi basate su misure, al fine
di tarare i parametri del modello.
Analisi basate su misure. In letteratura è stata dedicata molta attenzione anche
all’analisi empirica del Software Aging, basata su misure di sistemi reali. Siccome
tale fenomeno si manifesta sotto forma di degradazioni delle prestazioni e/o consumo
di risorse, i ricercatori hanno concentrato la loro attenzione su approcci per sfruttare
misure empiriche, in modo da identificare se il sistema si trova in uno stato failure-prone,
per ritardare il time-to-aging-failure e pianificare la Software Rejuvenation. Gli studi
basati su misure forniscono anche informazioni dettagliate circa il fenomeno dell’aging
in sistemi reali, che sono utili per comprendere meglio la natura e l’estensione del
Software Aging ed aumentare la consapevolezza su questa tematica.
16
-
Android Software Aging
L’idea di base degli approcci di rejuvenation basati su misure è quella di monitorare
direttamente le variabili del sistema, dette indicatori di aging, che possono indicare
l’inizio del software aging e predire l’occorrenza di aging failure analizzando statisticamente
i dati acquisiti a runtime. Ciò fornirà dati circa il tempo migliore per eseguire la
rejuvenation. Sono stati proposti diversi approcci per effettuare la predizione, che
possono essere raggruppati in:
• Time Series Analysis. Un approccio ampiamente utilizzato è quello di analizzare
le serie temporali delle risorse monitorate. Le serie temporali sono tipicamente
analizzate prima utilizzando test di trend per accettare o rigettare l’ipotesi che
non ci sia trend nei dati (ad esempio, Mann-Kendall, t-student, Seasonal Kendall
tests) e poi usando tecniche per stimare il trend e possibili stagionalità nei dati
(ad esempio, regressione lineare multipla, smoothing, procedura di stima Sen’s
slope, modelli autoregressivi).
Una delle prime analisi basate su misure è riportata in [Garg et al. 1998b]: in
questo studio sono stati monitorati un insieme di 9 workstation Unix per un
arco di 53 giorni, utilizzando uno strumento di monitoraggio basato su SNMP.
Durante il periodo di osservazione, il 33% delle interruzioni riportate era causata
da un esaurimento delle risorse, sottolineando che il Software Aging è una fonte
di fallimenti non trascurabile in un sistema.
In [Li et al. 2002; Grottke et al. 2006], gli autori hanno analizzato la degradazione
di prestazioni anche nel Web Server Apache, campionando il tempo di risposta
del web server a richieste HTTP predefinite a intervalli fissi.
In [Grottke et al. 2006] sono state considerate anche analisi di pattern stagionali,
in cui, i trend sono analizzati anche in presenza di stagionalità nei dati.
In [Li et al. 2002] sono stati usati modelli di serie temporali ARMA/ARX sul
Web Server Apache, in modo da stimare l’esaurimento delle risorse. Rispetto
ai modelli di regressione lineare e regressione lineare estesa, il modello ARX ha
un overhead iniziale più alto, ma una volta stabilito, può essere usato per la
previsione per un lungo periodo senza dover stimare nuovamente i parametri del
17
-
Android Software Aging
modello.
Le analisi delle serie temporali sono state adottate anche per studiare la relazione
tra il fenomeno del Software Aging e il workload in sistemi complessi, compresi
il codice del Kernel Linux [Cotroneo et al. 2010], e la Java Virtual Machine
[Cotroneo et al. 2011b]. In entrambi i casi, l’analisi dei parametri del workload
viene utilizzata per fornire indicazioni sulle possibili cause del Software Aging,
evidenziando i sottosistemi i cui parametri sono correlati ai trend di aging osservati.
In questo lavoro sono state adottate l’analisi delle componenti principali (PCA)
seguita dalla regressione lineare multipla, in modo da rimuovere le correlazioni di
primo ordine tra i predittori per poi fornire una stima lineare degli aging trends,
tramite la regressione, riducendo il problema della multicollinearità.
In [Magalhaes and Silva 2010] sono stati usati modelli ARIMA (Autoregressive
Integrated Moving Average) e Holt-Winters (Triple-exponential Smoothing), dove
gli autori hanno sviluppato un framework, indirizzato ad applicazioni web e
component-based, per la rilevazione di anomalie di performance causate dall’aging.
In particolare, il framework monitora parametri applicativi e di sistema, che
vengono utilizzati per determinare la correlazione tra il tempo di risposta dell’applicazione
e il workload in input, a sua volta utilizzata per addestrare gli algoritmi di
machine learning. A tempo di esecuzione, i parametri acquisiti dal monitoraggio
vengono stimati dagli algoritmi ARMA e Holt-Winters, e le stime vengono classificate
dagli algoritmi di ML già addestrati, per determinare se l’applicazione può incorrere
in anomalie di prestazioni.
In [Araujo et al 2011b] vengono utilizzati 4 differenti modelli di serie temporali, in
modo da pianificare adeguatamente la software rejuvenation. I modelli utilizzati
sono: il modello lineare, il modello quadratico, il modello a crescita esponenziale
ed il modello della logistica di Pearl-Reed. Questi, sono stati adottati per predire
il trend del consumo di memoria sul framework di cloud computing Eucalyptus.
In [Hoffmann et al. 2007] sono stati confrontati modelli nonlineari multivariati
(macchine a vettori di supporto, funzioni di base universali e raidiali) e modelli
lineari multivariati). I primi modelli hanno mostrato una performance migliore
18
-
Android Software Aging
rispetto ai modelli lineari nei casi di benchmarking.
In [Jia et al. 2008] il fenomeno di aging viene studiato in Apache costruendo un
modello dinamico per descrivere il processo di software aging seguendo il metodo
dell’inversione nonlineare dinamica. È stato mostrato che il processo di software
aging è nonlineare e caotico.
• Machine Learning. Gli approcci di machine learning sono una forma più sofisticata
di analisi dati, che adotta algoritmi del campo dell’Intelligenza Artificiale (ad
esempio classificatori e regressori) per identificare i trend e classificare gli stati del
sistema come robusti o failure-prone. In [Cassidy et al. 2002] gli autori adottano
metodi di riconoscimento di pattern per predire il Software Aging in server OLTP.
Quest’approccio applica una regressione nonlineare e nonparametrica ad un gran
numero di variabili di sistema, ed analizza l’errore residuo tra i valori predetti e
quelli reali usando un sequential probability ratio test, in modo da predire l’inizio
degli effetti del Software Aging. I risultati hanno mostrato che questi due metodi
permettono di rilevare deviazioni significative dall’andamento "standard" con un
anticipo di due ore.
In [Alonso et al. 2011a] viene esplorato un’altra applicazione di machine learning
per predire i fallimenti dovuti al Software Aging nel contesto di un sistema
J2EE three-tier. È stato proposto un approccio basato sul machine learning per
costruire automaticamente alberi di regressione che correlano diverse variabili
di sistema (ad esempio numero di connessioni e throughput) con i trend di
aging, basandosi sull’osservazione che i trend di Software Aging possono essere
approssimati usando modelli lineari a tratti. Questi modelli sono stati addestrati
utilizzando dati acquisiti in esperimenti preliminari, e furono usati per predire il
TTE delle risorse di sistema sotto condizioni differenti da quelle osservate durante
la fase di addestramento.
19
-
Android Software Aging
• Approcci Threshold-based. A differenza dei casi precedenti, questi tipi di approcci
definiscono delle soglie per alcuni indicatori di aging e la rejuvenation viene
attivata non appena gli indicatori monitorati superano tale soglia. Ad esempio,
gli indicatori possono riferirsi al consumo di risorse. La difficoltà maggiore sta
nell’identificare i migliori indicatori e le giuste soglie, che siano in grado, allo
stesso tempo, di prevenire fallimenti ed inutili azioni di rejuvenation.
In [Silva et al. 2009] vengono adottate soglie sugli indicatori del tempo di risposta
medio e qualità del servizio.
Nel lavoro [Silva et al. 2006] viene presentata un analisi di software aging in un
server basato su SOAP, in cui è stato preliminarmente condotto uno studio di
dependability benchmarking per valutare alcune implementazioni SOAP-RPC,
concentrandosi in particolare su Apache Axis, dove è stata rilevata la presenza
di aging monitorandone i parametri.
In [Matias Jr. and Filho 2006] viene presentata una valutazione degli effetti di
aging in Apache Web Server, basandosi su un esperimento controllato. In questo
lavoro vengono osservate la memoria consumata da Apache e tre parametri di
workload controllabili: la dimensione delle pagine, il tipo di pagina (statica o
dinamica) e la frequenza di richiesta; come indicatore di aging è stato usato l’uso
della memoria virtuale.
In [Avritzer and Weyuker 2004] vengono monitorati threads e memoria mentre le
soglie vengono impostate sulla garbage collection.
In [Araujo et al. 2011b] viene combinato sia l’approccio basato su soglie (con
una soglia sull’utilizzo di memoria) con l’analisi delle serie temporali. È stata
implementata una strategia di rejuvenation nell’infrastruttura di calcolo cloud
Eucalyptus, basata su soglie multiple e modelli di serie temporali. I modelli
utilizzati sono: lineare, quadratico, growth curve, S-curve trend.
Gli studi basati su misure prevedono il software aging basandosi su misure dirette
(ad esempio basate su serie temporali) e forniscono dati empirici circa il fenomeno.
Il vantaggio di questo approccio è che la previsione di software aging può adattarsi
20
-
Android Software Aging
alle condizioni correnti del sistema (profilo operazionale che potrebbe non essere stato
previsto precedentemente) e può essere predetta accuratamente. Tuttavia, questo
tipo di approccio non è facilmente generalizzabile, siccome sfrutta alcune peculiarità
relazionate alla natura del sistema considerato.
Studi ibridi. Con questo metodo si cerca di combinare i benefici degli approcci basati
su misure e su modelli, descrivendo il fenomeno analiticamente, spesso con catene di
Markov, e determinando i parametri del modello attraverso le misure, ovvero i dati
osservati. Malgrado l’importanza pratica degli approcci ibridi, non ci sono molti studi
che li hanno adottati. Alcuni esempi sono [Vaidyanathan and Trivedi 1999, 2005] in cui
sono stati presentati i risultati di un’analisi condotta sullo stesso insieme di workstation
Unix usate in [Garg et al. 1998b]. Mentre l’ultimo considerava solo la rilevazione del
trend delle serie temporali e la stima dell’esaurimento delle risorse senza considerare il
workload, questo studio considerò anche il workload e costruì un modello per stimare
i tempi di esaurimento delle risorse. Inoltre, sono stati presi in considerazione alcuni
parametri per includere il workload nell’analisi, come il numero di context switch della
CPU e il numero di invocazioni di system call. Furono identificati diversi stati del
workload tramite un’analisi dei cluster e fu costruito un modello dello spazio di stato,
determinando le distribuzioni dei tempi di soggiorno; successivamente, fu definita una
funzione di reward per il modello basandosi sul tasso di esaurimento delle risorse per
ciascuno stato del workload. Risolvendo il modello, gli autori ottennero i trend di
esaurimento delle risorse ed il TTE per ogni risorsa considerata in ciascuno stato del
workload. Tale metodologia permette di eseguire una caratterizzazione workload-driven
del fenomeno di aging.
21
-
Android Software Aging
1.3 Tipi di sistemi
Il Software Aging ha mostrato di influenzare molti tipi di sistemi software long-running,
che vanno dai sistemi business-oriented a quelli altamente critici. È importante capire
su quale classe di sistemi i ricercatori hanno concentrato le loro attenzioni nel studiare
il fenomeno di aging. A differenti domini corrispondono differenti pratiche di sviluppo,
cicli, tecniche, e metodologie, che possono incidere sulla probabilità del sistema finale
di soffrire del problema di aging.
Analizzando i paper si può effettuare una classificazione a seconda dello scenario in cui
un sistema viene adottato: safety-critical, non-safety-critical, non specificati.
La prima classe indica sistemi che vengono impiegati in scenari che sono critici dal
punto di vista della safety, ovvero, sistemi il cui malfunzionamento può causare seri
danni o perdite di vite umane, come sistemi militari o spaziali. La seconda include
applicazioni di business e mission-critical, come Web Server o DBMS. L’ultima classe
si riferisce a paper che non presentano una sperimentazione su sistemi reali, ma usano
simulazioni o esempi numerici per dimostrare la validità dei loro risultati. I paper sui
sistemi non-safety-critical costituiscono la maggior parte della letteratura a differenza
dei safety-critical. Questo perchè questi ultimi sono progettati e testati molto meglio.
Nonostante vengano progettati rispettando stringenti requisiti di dependability e vengono
testati estensivamente, una piccola parte dei paper ha comunque considerato il problema
dell’aging anche in questi sistemi. Da un lato, questo conferma che i problemi di aging
sono difficili da rilevare durante la fase di sviluppo: sebbene i sistemi safety-critical
siano tipicamente sviluppati tramite delle pratiche di sviluppo ben definite e sono
sottoposti ad estensive attività di testing, l’aging si può comunque manifestare durante
l’esecuzione. Infatti, essendo una sottoclasse di Mandelbugs, gli ARBs sono difficili da
riprodurre: anche dopo essersi attivati, la loro manifestazione impiega troppo tempo
per essere evidente e rende i tempi di testing insufficienti per rilevare il problema.
D’altra parte, ciò suggerisce che il software aging dovrebbe essere preso sistematicamente
in considerazione dagli sviluppatori di sistemi critici, sia nelle prime fasi di sviluppo
che in fase esecutiva.
22
-
Android Software Aging
Una grande varietà di sistemi ha dimostrato di soffrire di aging, tra cui: applicazioni
web, webserver, sistemi operativi, DBMS, cloud computing, ambienti di virtualizzazione,
middleware ed applicazioni server. Tra questi, le applicazioni web e i webserver rappresentano
la maggioranza. Infatti, questo tipo di applicazioni è ampiamente diffuso nel mercato e
sono usate da ampie comunità in internet: ciò giustifica il motivo per cui vengono spesso
scelti come casi di studio. Esempi di applicazioni web usate per questo tipo di studi
sono web services ed applicazioni service-oriented, applicazioni server, applicazioni di
e-commerce.
La classe dei web server, che è strettamente correlata alla precedente, rappresenta
una parte rilevante. Apache Web Server è una delle applicazioni più studiate. Sono
state effettuate diverse analisi basate su misure di questo sistema, specialmente da
ricercatori più vicini alla dependability e alla fault tolerance piuttosto che all’ingegneria
del software. Alcuni degli studi più conosciuti sono: [Li et al. 2002], [Matias Jr. and
Filho 2006], [Grottke et al. 2006], in cui vengono raccolti misure dall’esecuzione di
Apache riguardo l’uso delle risorse come, consumo di memoria, area swap, uso della
cache, tempo di risposta, ed utilizzano tecniche statistiche per predire l’aging.
Anche le applicazioni server rappresentano una parte significativa. Alcuni degli studi
più rilevanti sono in [Castelli et al. 2001], dove viene valutato l’impatto di differenti
politiche di rejuvenation (basate su predizione e sul tempo) sull’availability, per mezzo
di modelli analitici basati su SRN nei server IBM Director for xSeries; in [Okamura
et al. 2003], in cui l’autore calcola analiticamente, in un sistema Transaction-Based
Multi-Server, la politica di rejuvenation ottimale, basandosi su alcune misure di dependability
del sistema, comparando la configurazione multi-server con quella single-server; in
[Oppenheimer et al. 2003], vengono prima analizzate le cause dei fallimenti usando
dati da tre servizi Internet a larga scala (come errori operatore, errori di configurazione,
fallimenti in custom front-end software) e successivamente vengono confrontate diverse
tecniche di manutanzione preventiva, osservando che, migliorando gli strumenti di
manutenzione e i sistemi usati dallo staff di servizio, ridurrebbe il tempo per diagnosticare
e riparare problemi.
La categoria di benchmarking è anch’essa rilevante; la maggior parte dei paper in
23
-
Android Software Aging
questa categoria è comunque relativa ad analisi statiche/dinamiche per il rilevamento
di memory leak, che adotta suite di benchmarking per testare i risultati ([Novark et al.
2009]; [Jung and Yi 2008]).
Un’altra classe di sistemi è rappresentata dal cloud computing, un’area relativamente
giovane. In questi studi, i ricercatori spesso analizzano numerose politiche di rejuvenation
basate su virtual machine e/o reboot/rejuvenation di virtual machine monitor. Tali
strategie vengono successivamente valutate sia con approcci model-based ([Machida et
al. 2011]) che measurement-based ([Kourai and Chiba 2007]; [Araujo et al. 2011b]).
La disponibilità del software cloud di sperimentare le strategie con costi ridotti favorisce
l’analisi di aging sul cloud. Un esempio rilevante è rappresentato dagli studi su Eucalyptus,
un framework per cloud computing ([Araujo et al. 2011a,2011b]; [Matos et al. 2011]).
I sistemi di telecomunicazioni sono tra le prime classi di sistemi ad essere considerati
per l’analisi di aging. I primi esempi di software aging e rejuvenation su sistemi di
telecomunicazioni provengono dalla AT&T Labs, come quelli forniti in [Huang et al.
1995]. In quegli anni, altri studi hanno considerato i sistemi di telecomunicazione nei
loro esperimenti: in [Huang et al. 1996], sono studiate le capacità di fault tolerance di
diversi prodotti e servizi di comunicazione arricchiti con componenti di rejuvenation: in
[Balakrishnan et al. 1997], il software aging è analizzato in applicazioni di fatturazione
delle telecomunicazioni, così come nell’annesso software di switching. Negli anni seguenti,
altri paper hanno trattato applicazioni di telecomunicazioni, come paper in [Liu et al.
2002, 2005] dove la software rejuvenation è proposta come una tecnica di manutenzione
proattiva installata in un cluster CTMS (Cable Modem Termination System), ed il
lavoro in [Okamura et al. 2005], in cui gli autori valutano le performance di dependability
di un sistema di rete con software rejuvenation.
Nelle restanti classi è bene menzionare alcuni aspetti: nella classe degli OS, la fetta più
grande è rappresentata da lavori su sistemi Unix e Linux ([Vaidyanathan and Trivedi
1999]; [Yoshimura et al. 2011]; [Cotroneo et al. 2010]), Solaris ([Ni et al. 2008]),
Windows NT ([Robb 2000]) e Android ([Park and Choi 2012]). I lavori nella categoria
DNS Server sono principalmente mirati a prevenire fallimenti security-related tramite
rejuvenation (come in [Huang et al. 2006]) ed a rilevare vulerabilità di sicurezza che
24
-
Android Software Aging
causano aging ([Antunes 2008]). Infine, la categoria di sistemi Space, che è una delle
più rilevanti e studiate nella classe dei sistemi critici: alcuni esempi sono [Tai et al.
1999], che descrive il sistema X2000 della NASA per la missione Pluto-Kuiper Express
lunga 15 anni.
1.4 Effetti ed Indicatori di Aging
L’analisi degli effetti di aging (ad esempio stati erronei causati dall’aging) e degli
indicatori di aging mostra come il Software Aging si è manifestato nei sistemi software
complessi. Gli indicatori di aging sono un’importante area di studio, siccome sono di
valido aiuto per rilevare quando il sistema è incline agli aging-failures, monitorandoli
durante l’esecuzione. Gli indicatori di aging possono essere indicatori dell’utilizzo di
risorse e indicatori di performance. Di seguito viene riportata una lista di classi di
indicatori di aging:
Consumo di memoria: evidenze empiriche hanno mostrato che la memoria libera
esibisce un TTE minore tra le varie risorse di sistema [Garg et al. 1998b], e che
la cattiva gestione della memoria è tra le cause primarie di fallimenti [Sullivan and
Chillarege 1991]. Perciò, molti studi sulla SAR analizzano il fenomeno del software
aging che interessa la memoria libera, misurando la quantità di memoria fisica libera
e lo spazio di swap [Grottke et al. 2006; Vaidyanathan and Trivedi 1999] e diversi
approcci basati su misure applicano serie temporali e modelli statistici a tali variabili.
Degradazione delle prestazioni. Gli studi sulla SAR hanno spesso riportato una
degradazione delle prestazioni in sistemi software colpiti dal Software Aging. Una delle
cause della degradazione delle prestazioni è il consumo delle risorse di sistema: ad
esempio, il consumo di memoria fisica aumenta il tempo richiesto dalle procedure di
allocazione di memoria e garbage collection, siccome la loro complessità computazionale
è funzione della quantità di memoria allocata [Carozza et al. 2010; Ferreira et al. 2011;
Cotroneo et al. 2011b]. In applicazioni web [Silva et al. 2006], webserver [Grottke et
al. 2006; Matias Jr. 2006] ed applicazioni basate su CORBA [Carrozza et al. 2010]
sono stati riportati un aumento nel tempo di risposta alle richieste ed una diminuzione
25
-
Android Software Aging
del throughput. In presenza di questo tipo di fenomeni, la software rejuvenation può
essere attivata quando la qualità del servizio (ad esempio in termini di response time
e throughput) è al di sotto di una certa soglia.
Altri consumi di risorse. Il software aging può coinvolgere diversi tipi di risorse.
Oltre alle risorse di memoria (memoria fisica, memoria virtuale, memoria cache, area
swap...) ci sono:
• risorse relative al filesystem, come stream descriptors e file handles [Weimer 2006;
Zhang et al. 2011; Garg et al. 1998b];
• storage, il cui spazio può essere consumato da una cattiva gestione [Bobbio et al.
2001];
• risorse relative alle reti, come i descrittori di socket [Weimer 2006];
• risorse relative alla concorrenza, come locks, thead e processi [Zhang et al. 2011;
Garg et al. 1998b];
• risorse application-specific, come DBMS shared pool latches [Cassidy et al. 2002].
In diversi paper, l’approccio proposto non si vincola ad una specifica risorsa, ma si
concentra sul rilevare uno scorretto uso delle API e degli handler di eccezione che
possono causare una perdita di memoria. Ad esempio, il lavoro in [Zhang et al.
2011] presenta un approccio che dinamicamente cerca dei pattern nell’uso delle risorse
monitorando le chiamate alle API e fornisce una valutazione sperimentale di programmi
open source basati su Java I/O e concorrenza delle API. Una perdita di risorse frequente
nei programmi Java è rappresentata da socket e file handles, a causa di gestori delle
eccezioni scorretti che non liberano queste risorse [Weimer 2006; Zhang et al. 2011].
Alcuni paper analizzano un insieme più ampio di risorse. In [Garg et al. 1998b], veniva
monitorato un insieme di workstation Unix in rete in modo da identificare trend di
aging nel consumo di diverse risorse (memoria virtuale, OS kernel, filesystem, disco, e
rete) e fu notato un trend statisticamente significativo nella table size dei processi e
nella table size dei file.
26
-
Android Software Aging
Oltre a questi effetti di aging menzionati fin’ora, ne esistono altri tipi che sono stati
studiati in lavori recenti. Uno dei campi in cui la software rejuvenation è stata studiata
di recente è relativo agli attacchi di sicurezza, ovvero, tentativi di utenti maliziosi di
accedere a risorse non autorizzate o di rendere il sistema indisponibile. Infatti, gli
attacchi possono aver luogo e compromettere gradualmente il sistema su un lungo
periodo di tempo (ad esempio, password rubate tramite bruteforce, o attacchi di
flooding che attivano il software aging in un sistema), che potrebbero essere mitigati
effettuando periodicamente la rejuvenation, come cambiare le chiavi crittografiche
riavviando processi compromessi, o randomizzando la località di dati e istruzioni in
memoria [Sousa et al. 2010; Tai et al. 2005; Valdes et al. 2003; Cox et al. 2006;
Huang et al. 2006; Roeder and Schneider 2010]. Altri tipi di effetti di aging sono
relativi all’accumulo di errori numerici [Grottke et al. 2008] e alla frammentazione
di memoria [Grottke et al. 2008; Macedo et al. 2010]. Questo tipo di effetti non
è necessariamente causato da bug nel software, ma sono relativi rispettivamente alla
natura dell’aritmetica floating-point e agli algoritmi di allocazione della memoria.
Infine, molti studi propongono modelli e approcci per affrontare il software aging
indipendentemente dallo specifico tipo di risorsa o aging effect osservati.
1.5 Tecniche di Rejuvenation
La maggior parte dei paper sulla SAR si concentrano sul determinare la pianificazione
ottimale della rejuvenation, sia tramite modelli analitici (rejuvenation time-based), sia
tramite misure (rejuvenation inspection-based). In questa sezione viene posta maggiore
attenzione sulle tecniche adottate per effettuare la rejuvenation di un sistema. La
rejuvenation mira a portare il software da uno stato failure-prone (ad esempio sono
stati accumulati errori) ad uno stato aging-free. Quindi, le tecniche di rejuvenation
possono essere confrontate rispetto a come viene processato lo stato e a come viene
raggiunto lo stato aging-free dopo la rejuvenation.
Si possono riconoscere due macro categorie di tecniche di rejuvenation, riferite come
application-specific, tecniche che sfruttano caratteristiche speciali del dominio o dell’architettura
27
-
Android Software Aging
dell’applicazione, e application-generic, tecniche che riavviano il sistema o sue parti e
che non sono specifiche a nessuna classe di sistemi. Tra le tecniche application-generic
si riconoscono differenti sottocategorie: Riavvio dell’applicazione, Riavvio del sistema
operativo, Riavvio di Virtual Machine Monitor (VMM) e Virtual Machine (VM, Cluster
Failover.
Riavvio dell’applicazione. Viene riavviata l’intera applicazione (ad esempio tutti
i processi dell’applicazione vengono terminati e riavviati). Questa è la forma più
semplice di rejuvenation [Huang et al. 1995; Huang et al. 1998]. Questa tecnica
si basa sul meccanismo di inizializzazione di stato disponibile a livello del SO, che,
quando un processo è terminato, dealloca tutte le risorse che erano parte dello stato
dell’applicazione, come aree di memoria dinamica, socket e file handle aperti. Inoltre,
questa rejuvenation si avvantaggia del meccanismo di inizializzazione che i programmatori
introducono nelle loro applicazioni per portarle nel loro stato iniziale. Questo tipo di
rejuvenation non interessa la parte di stato che appartiene all’ambiente di esecuzione
(SO o altre applicazioni). Ad esempio, le risorse del SO che non vengono rilasciate
quando un processo è terminato (un file temporaneo archiviato nel disco, oppure
memoria allocata persa da altre applicazioni) non sono recuperate dalla rejuvenation.
Riavvio del SO. Questa azione riavvia il sistema operativo, e tipicamente le applicazioni
che eseguono in quel SO. Questa forma di rejuvenation è anche detta node reboot
nei sistemi distribuiti. Sebbene sia possibile preservare lo stato delle applicazioni e
ripristinarlo dopo il riavvio, questa possibilità non viene mai considerata negli studi
sulla SAR. Nella sua forma più semplice, il riavvio del SO coinvolge un reset dell’hardware
(la memoria ed i dispositivi hardware vengono reinizializzati e testati prima che il
software possa eseguire), l’avvio del kernel del SO ed il riavvio di tutte le applicazioni
user-space. Schemi più sofisticati riducono il tempo di riavvio dell’OS, portandolo nel
suo stato iniziale evitando il reset dell’hardware [Nelitheertha 2004; Oracle 2012; Alonso
et al. 2011b], come nel caso dei sistemi Linux e Solaris. Questo metodo è ottenuto
invalidando il contenuto della memoria principale e riavviando l’esecuzione del SO
dal suo entry point. Un altro problema è rappresentato dalla perdita di performance
dopo il riavvio del SO: siccome i contenuti della file cache (ad esempio, una copia
28
-
Android Software Aging
del contenuto del file conservata nella memoria principale per accelerare gli accessi al
file) sono persi dopo il riavvio, la performance della file cache è degradata fino alla
sua ripopolazione. Per risolvere questo problema, il meccanismo della warm-cache
reboot [Kourai 2010] preserva la file cache in memoria principale durante il riavvio e
permette al SO di ripristinarla dopo il reboot. Inoltre, questo meccanismo deve gestire
il problema dell’inconsistenza della file cache coi dischi (ad esempio, i contenuti del
file sono stati modificati nella memoria principale, ma non sono stati riscritti nel disco
dopo il riavvio - siccome modifiche in attesa possono essere incomplete o affette da
corruzione dei dati, dovrebbero essere scartate dopo il reboot). CacheMind [Kourai
2010] gestisce questo problema eseguendo il SO in una virtual machine, ed usando il
Virtual Machine Monitor (uno strato software che crea un’ambiente di virtual machine
per sistemi operativi e loro applicazioni) per tenere traccia dello stato delle pagine di
file cache, in modo da garantirne la consistenza dopo il riavvio. Bisogna notare che,
quando un SO esegue in una virtual machine e viene riavviato, l’infrastruttura della
virtual machine non viene coinvolta dalla rejuvenation.
Riavvio di Virtual Machine Monitor (VMM) e Virtual Machine. La software
rejuvenation può agire sull’infrastruttura di virtual machine, riavviando il VMM o le
sue VM. In [Machida et al. 2010], vengono ideate diverse strategie, a seconda che
la rejuvenation sia eseguita solo sulla VMM o anche sulle VM che eseguono su di
esso. Nella rejuvenation Cold-VM, quando viene riavviato il VMM vengono riavviate
anche le VM. Nella rejuvenation Warm-VM, l’esecuzione dello stato di ciascuna VM
(incluso il SO e le applicazioni che vi eseguono) sono archiviate in memoria persistente e
ripristinate dopo il riavvio del VMM, in modo da ridurre il downtime di riavviare le VM
ed i loro servizi (sebbene il software che esegue nella VM non venga riavviato). Questa
operazione può essere eseguita velocemente adottando un meccanismo on-memory
syspend/resume, in cui l’immagine di memoria delle VM è preservata in memoria
principale durante il riavvio del VMM, in modo da evitare le lente operazioni di
read/write in memoria persistente (come nel caso di RootHammer [Kourai and chiba
2007; 2001]). Nella rejuvenation Migrate-VM, il downtime è ulteriormente ridotto
migrando le VM su un altro host mentre il VMM viene riavviato, in modo tale da
29
-
Android Software Aging
renderle disponibili durante la rejuvenation. Quest’ultimo schema non riavvia le VM,
ed è limitato alla capacità degli altri host di accettare le VM migrate. La miglior tecnica
(o la miglior combinazione di esse) dipende dalla velocità di archiviazione/migrazione
dello stato delle VM e dalla capacità degli host, così come dalla velocità di aging di
VM e VMM. Pertanto la rejuvenation dovrebbe essere pianificata in accordo a questi
fattori [Machida et al. 2010].
Gli approcci application-specific hanno il maggior potenziale per migliorare la velocità
di rejuvenation e ridurre la probabilità di fallimenti. Queste tecniche sono efficaci nel
ridurre il costo della rejuvenation siccome non portano il sistema al suo stato iniziale,
ed evitano un lavoro di redo per ricostruire gran parte dello stato del sistema (riavviare
le transazioni che stavano avvenendo all’istante della rejuvenation). Questo problema
è trascurabile nelle applicazioni stateless, sebbene ha grande importanza nel caso di
applicazioni stateful. Tuttavia, questo approccio non è inteso come economicamete
vantaggioso, in quanto va adattato alla specifica applicazione in modo da salvare
soltanto una parte rilevante dello stato del sistema ed evitare di includere errori aging-related
nel checkpointing, che richiede sforzo di sviluppo che può essere soggetto ad errori.
30
-
Android Software Aging
Capitolo 2
Design of Experiments
L’obiettivo della Design of Experiments è progettare il piano sperimentale per ottenere
la massima informazione con il minor numero di esperimenti. La performance di un
sistema spesso dipende da più fattori. Un’analisi adeguata richiede che gli effetti di
ciascun fattore siano isolati da quelli degli altri cosicchè possano essere fatte affermazioni
significative sui differenti livelli di un fattore. Inoltre, permette di determinare se un
fattore ha un effetto significativo o se la differenza osservata è dovuta a variazioni
casuali o ad errori di misura o a parametri non controllabili.
2.1 Metodologia
La metologia sfrutta lo stress test per identificare i problemi di aging. In generale,
lo stress test impone al sistema un workload molto intenso, in termini di volume di
richieste utente per unità di tempo, per un lungo periodo (tipicamente diverse ore)
in modo da aumentare significativamente la probabilità di far emergere gli effetti di
software aging, ad esempio facendo accumulare le perdite di memoria nel tempo. Lo
stress testing dev’essere bilanciato: da un lato, richiede che vengano eseguiti diversi
test sotto diverse condizioni, in modo da esplorare quanti più scenari aging-prone
possibili, poichè l’estensione del software aging (il tasso con cui il dispositivo presenta
degradazione delle prestazioni o esaurimento delle risorse) dipende da come il sistema è
configurato e dagli input sottoposti; dall’altro, il numero di stress test dovrebbe essere
31
-
Android Software Aging
tenuto al minimo, siccome ciascun test può richiedere un tempo significativo prima
che gli effetti di aging siano visibili. Ad esempio, nel contesto di Android, app utente
diverse potrebbero avere un impatto differente sul software aging, in quanto potrebbero
attivare servizi diversi nel SO Android; oppure differenti configurazioni di Android
(produttori o versioni) potrebbero esibire differenti effetti di aging. Però, considerare
tutte le combinazioni possibili di workloads e configurazioni porta ad un altissimo
numero di esperimenti long-running, che richiederebbe un tempo di completamento
impraticabile. Per indirizzare il problema di gestire molti parametri (ad esempio,
workload, produttore, versione SO, ecc...), viene adottato un approccio Design of
Experiments (DoE) per ottenere un tradeoff tra precisione e numero degli stress test.
La DoE ha lo scopo di creare un insieme minimo di scenari di test (detto piano
sperimentale) che spieghino la maggior parte della variabilità dell’output con pochi
trattamenti, separando l’impatto delle variabili di interesse dall’impatto (di solito
trascurabile) di più variabili combinate. In questo modo, a seconda di quanti trattamenti
possono essere fatti, il tester può sistematicamente decidere di ignorare le variabili
meno importanti. Nei paragrafi a seguire, verranno definiti i fattori e le variabili
di risposta scelte per applicare la DoE nel contesto del SO mobile. I Fattori sono i
parametri che possono potenzialmente influire sulle variabili di risposta; il loro valore
è scelto tra un insieme di possibili livelli. La combinazione di fattori e livelli definisce
il piano sperimentale. Innanzitutto, vengono identificate le combinazioni fattibili di
dispositivi e versioni Android, dato che non è possibile installare tutte le versioni
su tutti i dispositivi. Successivamente, viene definito un design blocked full-factorial
in riferimento agli altri fattori. La variabile di risposta rappresenta il risultato di
un esperimento; per esempio, la metrica che quantifica l’effetto di aging. Verranno
considerate sia metriche di risposta user-perceived, che riflettono il software aging così
come viene direttamente percepito dall’utente, sia metriche di risposta system-related,
che riflettono la quantità di stress imposta sulle risorse e sui sottosistemi, ed indirettamente
le possibili cause dell’aging user-perceived.
Infine, i dati sperimentali vengono analizzati tramite tecniche statistiche, quali:
32
-
Android Software Aging
• Test di Mann-Kendall, per affermare statisticamente se esiste un trend monotono
in una serie temporale della variabile di interesse;
• Sen’s procedure, per calcolare, in modo non parametrico, lo slope di un trend;
• Coefficiente di correlazione per ranghi di Spearman, per analizzare la dipendenza
statistica tra due variabili di interesse;
• Analisi della Varianza (ANOVA) e test d’ipotesi Kruskal-Wallis/Wilcoxon per
analizzare se le differenze tra due insiemi di esperimenti sono statisticamente
significative (e non dovuti a variazioni aleatorie);
La figura 2.1 fornisce una vista della metodologia utilizzata per l’analisi dei dati.
Le analisi su memoria e task verranno applicati solo per quattro processi principali.
Quest’aspetto verrà ulteriormente approfondito nelle successive sezioni.
Figura 2.1: Panoramica della metodologia per l’analisi del Software Aging
33
-
Android Software Aging
2.2 Variabili di Risposta
2.2.1 User-perceived
Per quantificare come il software aging viene percepito dagli utenti, viene considerata
la responsività del SO Android, in quanto è uno degli obiettivi del design del sistema
operativo mobile. Ad esempio, uno degli obiettivi più recenti è stato quello di “cold-start
a basic application, up to a responsive GUI, within 200ms at most“ [63], [64]. Pertanto,
la responsività user-perceived viene quantificata misurando il Launch Time (LT) delle
attività Android (un componente di un’applicazione che fornisce una GUI). Il LT è il
periodo di tempo tra la richiesta di iniziare un’Attività e l’apparizione dell’Attività
sullo schermo, includendo l’inizializzazione degli elementi di background e foreground.
Per misurare il LT vengono analizzati i log dell’Activity Manager del SO Android,
che è il servizio responsabile per istanziare nuove attività, per passare da un’attività
all’altra e per salvare e ripristinare il loro stato. L’Activity Manager traccia gli eventi
che innescano l’inizio di una nuova Attività (indicato dal tag "ActivityManager" e dalla
parola chiave "Displayed"), compreso il tempo speso per avviare l’attività, e possono
essere raccolti tramite l’utility logcat.
Per ottenere periodicamente osservazioni del LT durante l’esperimento, le applicazioni
utente usate come workload vengono periodicamente (ad una bassa frequenza, ogni
sessanta secondi) terminate e riavviate. C’è bisogno di terminare le app altrimenti,
il sistema operativo Android metterebbe in cache le Attività (ad esempio, se l’app è
stata aperta di recente, le Attività sono recuperate dalla cache quando l’utente passa
nuovamente su quell’app) e impedirebbe l’avvio di nuove Attività, senza quindi fornire
alcuna informazione circa la responsività del sistema. Inoltre, siccome l’obiettivo è
quello di studiare il software aging nel sistema operativo sottostante e non all’interno
delle app, riavviando periodicamente le app, non è possibile che si accumulino effetti
di software aging (come memory leak) all’interno dell’app stessa.
34
-
Android Software Aging
La linea seguente è un esempio di messaggio di log che mostra l’Attività "MainActivity"
dall’applicazione "com.example.myapp", che impiega 100ms per completare la sua
inizializzazione:
I/ActivityManager(1097): Displayed com.example.myapp /.MainActivity: +100ms
Dopo un esperimento, viene analizzato il LT per identificare una degradazione nella
responsività. Idealmente, se il dispositivo fosse libero dal software aging, il LT medio
non cambierebbe attraverso gli esperimenti, siccome il workload e le condizioni di test
vengono tenute fissate durante l’esperimento. Però, ci si aspetta che il software aging
manifesti gradualmente i suoi effetti durante l’esperimento, degradando continuamente
il LT delle app del workload.
Per analizzare il LT (figura 2.1), viene prodotta una serie temporale per ciascun
esperimento utilizzando le osservazioni di LT di tutte le Attività collezionate durante
l’esperimento, e viene applicato il test statistico non-parametrico di Mann-Kendall
(MK) per verificare se la serie temporale esibisce un trend. Questo test statistico verifica
l’ipotesi nulla che non ci sia un trend monotono nella serie temporale, e fornisce un
livello di significatività (p-value) per la probabilità che l’ipotesi nulla sia effettivamente
vera nella serie temporale. Se il p-value è minore di un dato α, si può rigettare l’ipotesi
nulla con probabilità, ossia con una confidenza, maggiore di (1 − α), che indica che il
LT è affetto da trend. Viene richiesto che la confidenza sia maggiore del 90% (α = 0.1).
Inoltre, nel caso in cui il LT esibisca un trend, viene calcolato lo slope di tale trend
applicando la Sen’s procedure, che è una tecnica non parametrica che trova un modello
lineare per i dati e calcola il tasso con cui i valori delle osservazioni aumentano nel
tempo. Essa calcola lo slope come mediana di tutti gli slope tra valori accoppiati ed è
insensibile agli outlier. Come visto nel capitolo 1, questo approccio è spesso adottato
negli studi di software aging dove il sistema è stressato sotto fisse condizioni, il che è
probabile che conduca ad un tasso di degradazione fisso (se esiste).
35
-
Android Software Aging
2.2.2 System-related
Per analizzare il software aging in profondità, vengono collezionate anche metriche
sull’utilizzo di risorse e sugli eventi che avvengono all’interno del SO Android. Le
metriche system-related includono l’utilizzo di memoria (che è la risorsa più esposta al
problema del software aging a causa dei bug di cattiva gestione e tipicamente è scarsa
nei sistemi mobili); l’utilizzo di CPU (è anch’esso esposto al software aging, ad esempio,
a causa di bug algoritmici che sprecano il tempo di CPU su una struttura dati molto
grande); e la durata di garbage collection (che è un’attività critica per l’uso efficiente
della memoria). Nella successiva analisi, verranno analizzate le metriche system-related
per indicare quali sono le aree più stressate del sistema operativo Android che possono
essere la causa del software aging. Inoltre, queste metriche forniscono una valida base
per lo sviluppo di soluzioni di software rejuvenation visto che possono essere monitorate
facilmente, con poca intrusività ed in modo portabile attraverso i dispositivi Android,
utilizzando le interfacce standard fornite dal framework Android e dal kernel Linux.
1)Memoria: viene posta maggior attenzione sull’utilizzo di memoria, poichè precedenti
studi sugli effetti del software aging hanno dimostrato che questa è la risorsa più colpita
e tende ad avere il TTE minore. Il sistema operativo Android utilizza meccanismi
elaborati per gestire la memoria, gestendo automaticamente il ciclo di vita delle app
(ad esempio recuperando le risorse quando un’app non è utilizzata per molto tempo,
ad esempio, attraverso l’out-of-memory-killer [63]), riciclando i processi (ad esempio,
quando viene avviata una nuova Attività) e gestendo la memoria all’interno delle
applicazioni basate sull’ambiente Java ART (Android Run-Time). Un’altra possibile
causa degli effetti di aging nell’utilizzo di memoria è rappresentato dalla complessità
dei servizi del SO Android, come l’Activity Manager ed il Package Manager, che sono
persistenti e possono accumulare effetti di aging nel tempo.
Le informazioni sulla memoria vengono collezionate tramite l’utility Android dumpsys,
che riporta il consumo di memoria del SO Android sia in user-space (a esempio, la
memoria utilizzata dalle app ed i servizi Android) che in kernel-space (ad esempio,
le estensioni Android al kernel linux come il Kernel Samepage Merging (KSM) e la
36
-
Android Software Aging
compressione di memoria virtuale (zram)). L’attenzione verrà però concentrata sul
consumo di memoria di ciascun processo del SO Android, raccogliendo periodicamente
(ogni trenta secondi) il suo Proportional Set Size (PSS), ovvero, la quantità di RAM
mappata in un processo che comprende il Resident Set Size (la porzione di memoria
occupata in RAM da un processo, escludendo quelle parti che non consumano memoria,
come il codice del programma che ancora non è stato eseguito e che risiede nello storage)
e, in proporzione, la quantità di memoria condivisa con altri processi. Questa metrica
viene considerata la più rilevante in quanto in recenti studi si è mostrata la più correlata
ai trend di performance degradation [66].
Verrà verificato se la degradazione del LT è collegata alla metrica di PSS per ciascun
processo, prima controllando se c’è un trend nel PSS dei processi e poi correlandoli al
trend del LT. Per ciascuna serie del PSS vengono eseguiti i seguenti passi: (i) viene
testata la presenza del trend (e viene calcolato il suo slope) usando il test di Mann-Kendall
e la Sen’s procedure; (ii) viene calcolata una misura di correlazione tra gli slope della
metrica di memoria e lo slope del trend di LT, per tutti gli esperimenti, utilizzando il
coefficiente di correlazione per ranghi di Spearman, siccome è robusto agli outlier e non
fa assunzioni restrittive circa la distribuzione dei dati, contrariamente alle controparti
parametriche. La correlazione indica se un trend di una metrica è sistematicamente
accompagnato da un trend di degradazione del LT.
2) Garbage Collection: La Garbage Collection (GC) è un componente chiave per i
moderni ambienti di programmazione, siccome gestisce l’allocazione di memoria dinamica
al posto del programmatore (ad esempio liberando aree non utilizzate) in modo da
evitare bug di cattiva gestione della memoria. Comunque, nonostante la garbage
collection, ci possono ancora essere effetti di software aging residui: se gli oggetti
non più utilizzati sono ancora referenziati dal programma (a causa di una cattiva
gestione degli oggetti del programmatore), il GC non è in grado di smaltire gli oggetti,
che possono accumularsi nel tempo. Inoltre, la frammentazione della memoria (l’uso
di diversi piccoli oggetti piuttosto che di uno grande) ed altre cattive pratiche di
programmazione (frequente riallocazione di oggetti che invece potrebbero essere riutilizzati)
può impattare sulla GC e degradare significativamente la performance percepita dagli
37
-
Android Software Aging
utenti. Se la GC impiega troppo tempo, l’applicazione può risultare "congelata" per
brevi periodi o essere notevolmente rallentata durante la GC. Pertanto, tra le metriche
system-related viene includa anche la GC.
Le informazioni circa la GC vengono raccolte dai log del SO Android tramite il tool
logcat, contrassegnati con il tag "art" come nell’esempio seguente:
I/art : ExplicitconcurrentmarksweepGCfreed104710(7MB)AllocSpaceobjects, 21(416KB)LOSobjects, 33%free, 25MB/38MB, paused1.230mstotal67.216ms
L’ART riporta la GC solo nel caso in cui essa impieghi più tempo del solito (in
particolare, quando il Pause Time del GC supera i 5ms, oppure la Duration del
GC supera i 100ms). In questo caso, il log include l’evento che ha attivato la GC
(ad esempio, se la GC è stata attivata in background, oppure è stata esplicitamente
invocata dal programma come nel caso di alcuni servizi del SO Android); l’algoritmo
di GC (siccome la ART ne supporta più di uno); il tempo speso per effettuare la GC;
il quantitativo di oggetti liberati dalla GC; la memoria heap disponibile. Questi log
vengono collezionati non appena appaiono nel corso dell’esperimento. I log della ART
evidenziano casi di lentezza della GC, che sono rilevanti per l’analisi. Ci si aspetta
che workload intensi (come quelli usati nello stress test) possano evidenziare gli effetti
di cattiva gestione della memoria nei componenti Android, che a loro volta possono
risultare in una degradazione delle prestazioni. Le metriche di GC vengono analizzate
individualmente per ciascun processo, calcolando i trend usando il test di Mann-Kendall
e la Sen’s procedure. Poi, vengono contati il numero di casi in cui un processo esibisce
un aumento dei tempi di GC, che rivela una possibile relazione tra il software aging
(in particolare, perdita di responsività, e memory bloat (un aumento netto dell’uso di
memoria a causa dell’allocazione di molti oggetti) o frammentazione.
3) Utilizzo di CPU e memoria a livello task: Il SO Android adotta una complessa
architettura multi-processo e multi-thread per eseguire i suoi numerosi servizi e componenti
(ad esempio, per gestire specifiche risorse hardware o fornire una API). Comunque,
le metriche precedenti forniscono informazioni circa i processi, ma non forniscono
specifiche informazioni circa i thread individuali all’interno di un processo. Questa
è una limitazione per l’analisi del SO Android, siccome esso esegue la maggior parte
dei suoi servizi base (ad esempio, camera, audio, phone, ...) come thread all’interno
38
-
Android Software Aging
di pochi processi (come il SystemServer ed il MediaServer) [65]. Pertanto, vengono
introdotte metriche addizionali per entrare più nel dettaglio delle attività dei servizi
che eseguono all’interno dei thread. Nel kernel Linux sottostante, sia i processi che i
thread sono rappresentati come task. Un processo multi-thread consiste in un insieme
di task che condividono le stesse risorse (ad esempio, spazio di indirizzamento virtuale,
file aperti, ...). Perciò vengono analizzate metriche di utilizzo di CPU e memoria per
task individuali. Queste metriche indicano quali task sono più attivi durante l’inizio
degli effetti di software aging, e sono una potenziale radice della causa del software
aging.
Le metriche task-level vengono collezionate dal filesystem proc del kernel Linux. In
particolare, viene utilizzato il file virtuale stat esposto dal kernel (nella cartella /proc/TASK_PID/)
per fornire informazioni circa lo scheduling e l’uso di memoria di ciascun task. Queste
metriche includono il numero di minor and major page faults (ad esempio, il task
richiede nuovo codice o nuovi dati, denotando così un’elevata attività di memoria), ed
il tempo di esecuzione speso in user-space e kernel-space (che rispettivamente indicano
l’attività di CPU ed I/O del task). Le metriche task-level vengono campionate periodicamente
ogni trenta secondi.
Per identificare i task critici, viene calcolato il trend per ciascuna metrica e per ciascun
task utilizzando il test di Mann-Kendall e la Sen’s procedure. Poi, viene contato
il numero di casi in cui una metrica esibisce un trend in maniera statisticamente
significativa per un task, ad un livello di confidenza del 90%. Quanto più elevato
è il conteggio, tanto più è alta la probabilità che la metrica evolva con un effetto di
software aging, rivelando quindi una potenziale relazione tra il task ed il software aging
del dispositivo.
Di seguito viene riportata una tabella riassuntiva di tutte le metriche utilizzate in
questo studio.
39
-
Android Software Aging
Metrica Unità di misura Descrizione Utility Fonte
Responsività Launch Time ms Tempo totale
trascorso tra l’inizio
di un’attività e la sua
comparsa sul display
Logcat Log ART
Memoria PSS per processo kB Quantità di RAM
mappata nel processo
dumpsys meminfo /proc//smaps
Garbage CollectionPause Time ms Quantità di tempo
che il processo ha
trascorso in pausa
durante la GC
Logcat Log ART
Duration ms Tempo di
completamente per la
garbage collection
Logcat Log ART
Task
Minor page faults # di page faults Numero di page
faults servidi dalle
pagine condivise già
in memoria
leggendo direttamente da /proc /proc//task/stat
Major page faults # di page faults Numero di page faults
che richiedono una
operazione di I/O
leggendo direttamente da /proc /proc//task/stat
User time kernel jiffies Quantità di tempo
spesa dal processo in
user-mode
leggendo direttamente da /proc /proc//tas/stat
System time kernel jiffies Quantità di tempo
spesa dal processo in
kernel-mode
leggendo direttamente da /proc /proc//task/stat
Tabella 2.1: Panoramica metriche
40
-
Android Software Aging
2.3 Fattori e livelli
Per stressare estensivamente il sistema operativo Android e per attivare effetti di aging
latenti, vengono eseguiti test sotto differenti configurazioni e applicazioni del workload,
che rappresentano i fattori del piano sperimentale, sintetizzate in tab 2.2. Vengono
considerati 5 fattori, e viene derivato il piano sperimentale variando le combinazioni
dei livelli in accordo con la DoE.
1. Insieme di Applicazioni (APP): Gli esperimenti usano diversi insiemi di
applicazioni come workload per stimolare il sistema operativo Android. Queste
app sono scelte come rappresentative di scenari d’uso comuni (compresi, navigazione
browser, fare foto, effettuare chiamate, chattare) ed includono sia app stock che
app di terze parti. Questi insiemi dovrebbero includere applicazioni Android
popolari, elencate in tab 2.2, che devono essere installate su tutti i dispositivi
usati negli esperimenti. Le applicazioni vengono organizzate in due gruppi, che
possono rappresentare i due livelli del fattore APP: applicazioni eu-us (EU-US),
ed applicazioni cinesi (CHINA), che sono rispettivamente ottenute dalla versione
europea del Google app market, e dall’app market cinese.
2. Dispositivo (DEV): Gli esperimenti possono essere eseguiti su differenti dispositivi
Android provenienti da diversi produttori, ciascuno con le sue configurazioni
hardware-software e le sue personalizzazioni. Ciascun dispositivo Android disponibile
nel piano sperimentale stabilisce un livello del fattore. Gli esperimenti sono
stati condotti su dispositivi di fascia alta di diversi produttori; quindi, abbiamo
quattro livelli per il fattore DEV, etichettati come HTCONEM9, HUAWEIP8,
LGNEXUS, SAMSUNGS6EDGE.
3. Configurazione degli eventi di workload (EVENTS): Il generatore di workload
(basato sul tool Android monkey) produce un insieme di "eventi" per interagire
con le app ed il dispositivo Android. Questi eventi comprendono: switch tra
applicazioni, touch, motion, trackball ed eventi di navigazione. Questi eventi sono
generati casualmente ed è possibile configurarne la probabilità di occorrenza. Il
41
-
Android Software Aging
fattore EVENTS varia attraverso tre livelli: MIXED1, dove la metà sono eventi di
switch tra applicazioni; MIXED2, dove la metà sono eventi di touch; MIXED3,
dove la metà sono eventi di navigazione. In ciascun livello, la restante parte
degli eventi sono dei tipi rimanenti e sono selezionati secondo una distribuzione
uniforme casuale.
4. Uso dello spazio di archiviazione (STO): Gli esperimenti possono essere
eseguiti con o senza spazio di archiviazione disponibile (in termini di spazio
libero), siccome questo aspetto può influire su alcuni dei servizi del SO Android
(come l’archiviazione di foto e video dalla fotocamera). Quindi, il fattore STO
varia su due livelli: HIGH, dove la memoria è occupata per più del 90% da
file multimediali (come video e immagini); e LOW, dove viene utilizzata la
quantità di storage di default (ovvero lo spazio è occupato solo da file di sistema
e applicazioni).
5. Versione Android (VER): I dispositivi Android possono eseguire differenti
versioni del SO Android. Le versioni di Android OS disponibili per un dispositivo
determinano i livelli del fattore VER. Bisogna osservare che non tutti i livelli del
fattore DEV possono essere combinati con tutti i livelli del fattore VER, perchè
alcuni dispositivi non supportano le vecchie o le nuove versioni del SO Android
(ad esempio, alcuni dispositivi possono supportare solo Android 5 e 6 mentre altri
possono supportare solo Android 6 e 7). In totale, ci sono tre livelli per il fattore
VER: ANDROID5, ANDROID6 e ANDROID7.
Nell’analisi, asseriamo se questi cinque fattori contribuiscono alla gravità del software
aging, al fine da fornire un contesto di quali condizioni siano le più problematiche. Verrà
applicata la tecnica l’Analisi della Varianza one-way (ANOVA) per affermare quali
fattori influiscono in maniera statisticamente significativa sulla variabile di risposta.
Per utilizzare l’ANOVA non parametrica ed essere robusti alla distribuzione degli errori
potenzialmente non-normale, verrà usato il test d’ipotesi di Kruskal-Wallis/Wilcoxon.
L’ipotesi nulla, in questo caso, è che il fattore non influisce sulla variabile di risposta,
ed il p-value indica, ancora, la confidenza nel rigettare l’ipotesi. Si può concludere che
42
-
Android Software Aging
il fattore impatta sulla variabile di risposta se il livello di confidenza è maggiore del
90%, ovvero, il p-value è minore di 0.1.
Fattore Livello Descrizione
DEV
HTCONEM9 Dispositivo HTC One M9
HUAWEIP8 Dispositivo Huawei P8
LGNEXUS Dispositivo LG Nexus
SAMGUNGS6EDGE Dispositivo Samsung S6 Edge
VER
ANDROID5 Android 5 (Lollipop)
ANDROID6 Android6 (Marshmallow)
ANDROID7 Android7 (Nougat)
APPEU-US
com.google.android.videos
com.*.camera, com.android.browser
com.android.email
com.android.contacts
com.google.android.apps.maps
com.android.chrome
com.google.android.play.games
com.android.calendar
com.google.android.music
com.google.android.youtube
CHINA
com.tencent.mm
com.sina.weibo
com.qiyi.video
com.youku.phone
com.taobao.taobao
c