Riassunto analitico
Nei moderni sistemi embedded, in particolar modo nell'ambito di applicazioni real-time e safety-critical, l'impiego di tecnologie di virtualizzazione ha mostrato una sostanziale crescita nell'ultimo decennio, rispondendo all'esponenziale aumento di complessità delle soluzioni prodotte. Quelli che un tempo erano macchine a scopo singolo, chiuse, per i quali non erano necessarie modifiche software durante il ciclo di vita, hanno via via integrato un sempre maggior numero di sottosistemi, coprocessori, sensoristica, ed impiegato sistemi operativi e software complessi in grado di sfruttare a pieno le potenzialità dell'hardware. L'aumento delle funzionalità e delle prestazioni, come ben rappresentato dalle moderne architetture MPSoC, presenti tra gli altri anche nei dispositivi mobile, ha prodotto un avvicinamento del mondo embedded a quello della controparte general purpose con la nascita di sistemi a mixed-criticality. Si è così creato un terreno fertile per l'utilizzo della già nota virtualizzazione e l'attuazione dei suoi benefici: coesistenza sulla stessa macchina di più sistemi operativi, isolamento delle macchine virtuali e relativo aumento della sicurezza, gestione del carico di lavoro, maggiore controllo sulla predicibilità e determinismo dei tempi di esecuzione, il tutto pur mantenendo i vincoli caratteristici di questi sistemi. In ambito real-time, la caratteristica principale che deve soddisfare un gestore di macchine virtuali, detto hypervisor, è quella di non impattare sulla predicibilità del sistema. Ciò può essere ottenuto semplificando tale gestore il più possibile, alleggerendolo di compiti e funzionalità, come nel caso degli hypervisor a partizionamento statico il cui scopo principale è quello di suddividere l'hardware della macchina host in insiemi disgiunti con cui realizzare le macchine virtuali, oltre che ridurre al minimo l'emulazione e l'intervento dell'hypervisor stesso. Un ostacolo a quanto appena descritto è rappresentato dalle gerarchie della memoria, notoriamente colpevoli di introdurre non-determinismo, ampiamente in uso nei SoC multicore in commercio e spesso non direttamente partizionabili in hardware. L'applicazione del partizionamento dei livelli di cache condivisi tra più core per mezzo della tecnica software del cache coloring, rappresenta la base del lavoro svolto in questa tesi. Si vuole infatti dimostrare come la suddivisione statica di questa risorsa condivisa, e quindi contesa, tra hypervisor e macchine virtuali, aumenti la predicibilità del sistema e diminuisca la latenza percepita dalle VM. L'obiettivo è perciò quello di estendere una soluzione preesistente ed implementare il coloramento del codice di un hypervisor noto (Jailhouse) riducendo l'effetto di interferenza normalmente prodotto dalla sua esecuzione. A supporto di quanto descritto è stato studiato il caso d'uso di ethernet, rappresentativo poiché in grado di impegnare l'hypervisor durante la gestione delle comunicazioni tra il dispositivo fisico e le macchine virtuali. Una volta eliminato il fattore legato alla contesa della cache, il tempo misurato tra l'invio e la ricezione di frame ethernet, non sarà influenzato né dall'attività dell'hypervisor stesso né da quella delle altre macchine virtuali.
|