VMs Flashcards
Che cos’è la virtualizzazione? Quali sono gli esempi di prodotti differenti? Quali sono i motivi per la virtualizzazione?
Quali sono i tipi di virtualizzazione?
Definizione di Virtuallizazione. Quali sono i principi della virtualizzazione secondo Poper e Goldberg? Cos’è un VMmonitor?
Quali sono i requisiti fondamentali della virtualizzazione?
Abbiamo all’interno di una macchina host, dei guest(VM), eseguiti e gestiti da un hypervisor che si occupa di emulare il comportamento corretto. I guest vedono le proprie risorse hardware senza sapere che sono virtuali.
es. VMWare, VirtualBox, Xen etc…
La virtualizzazione è utile per la server consolidation, dato che è indipendente dal hw, scalabile e facile da gestire. Aiuta la business continuity con i backup, replicazione, high availability, e permette di fornire ambienti di testing.
_____
Si distinguono in base a livello di astrazione che vogliamo.
Emulazione -> circuiti
Virtualizzazione -> hardware
Containerizzazione -> sistema operativo
_____
Astrazione delle componenti hardware degli elaboratori col fine di fornirli al software sotto forma di risorsa virtuale
Una macchina virtuale è considerata un duplicato efficiente ed isolato della macchina reale.
Il VMmonitor fornisce un ambiente per i programmi che è essenzialmente uguale a quello del pc originale, ha il controllo totale delle risorse e fornisce prestazioni leggermente minori a quelle dell’originale.
_____
1) Equivalence/fidelity: VM si deve comportare uguale alla controparte fisica
2)Resource control/safety (hypervisor gestisce tutto)
3) Efficiency /Performance (gradita)
In cosa consiste il meccanismo di trap and execute?
Quali sono i possibile comandi critici che modificano lo stato della macchina?
Quali sono i problemi delle trap?
Quali sono le istruzioni sensibili definite da Popek e Goldberg? Quando diventa un problema per l’hypervisor?
Abbiamo il codice che funziona sul guest finchè non viene eseguita una funzione “sensibile” che genera una “trap”, questo viene gestito dall’hypervisor a livello hardware.
I comandi critici possono:
- Interrompere l’esecuzione
- Accedere al registro degli stati
- Accedere alla memoria tramite indirizzo fisico
Le trap sono onerose e rendono le platform virtuali lente, le VM hanno perso trazione durante gli anni ‘80 epoi ripreso nel 2000 quando l’overhead non impattava più, sopratutto per le applicazioni cloud e introduzione di hw e sw orientato alla virtualizzazione.
Un’altro problema dei trapnexecute è la disruption dell’access locality che ha un impatto negativo sulla cache, e influenza la precisione della branch prediction. Inoltre hanno bisogno di supporto HW e non funzionano su VM innestate (non c’è un hypervisor in una VM).
___
Il paper classifica le istruzioni nel seguente modo:
- Istruzioni sicure: eseguibili dal guest
- Privilegiate: se i comandi devono essere eseguiti dalla CPU in modalità supervisor(ring0) invece che standard(ring3)
- Sensibili: Istruzioni gestite tramite traps per emulare il normale comportamento dell’OS. Modifica o osserva lo stato privilegiato della macchina, cioè qualsiasi stato che può essere utilizzato per cambiare il livello di privilegio delle processore corrente.
Se il comando è sensibile e privilegiato, viene gestito senza problemi.
Se è solo sensibile, può causare problemi perchè l’hypervisor non può fare solo affidamento alle trappole e possono violare la fidelity e/o safety. Aggiunge complessità
es. processore x86 intel ha 17 istruzioni sensibili ma non privilegiate
Ci sono 5 gruppi unsafe d’istruzioni:
- accesso ai flag interrupt
- visibilità ai segment descriptors
- Istruzioni di segment manipulation
- Read-only access a stati privilegiati
- istruzioni di interrupt e gate
nota: i rings sono anelli di protezione, 0 più privilegiato (kernel) e il 3 quello meno privilegiato (application)
In cosa consiste l’emulazione?
Quali sono i vantaggi?
L’emulazione di componenti hw differenti da quelli dell’host, quindi dobbiamo tradurre le operazioni macchina generate dal processore nell’architettura di destinazione.
es. VICE (commodore64), Android Emulator
Vantaggi:
- separazione completa dall’ambiente emulato
- Flessibile
- Uso di software pensato per macchine diverse
Svantaggi:
- Overhead
- Prestazioni lontane dal sistema nativo
In cosa consiste la traduzione binaria?
Perchè conviene?
Quali sono le regole dell’esecuzione sul programma?
In cosa consiste invece la patch binaria?
Dato che il kernel è molto piccolo rispetto alle dimensioni del codice di diversi ordini di grandezza, la traduzione binaria è un meccanismo basato sulle trap, per dare supporto all’emulazione. In pratica vi è una compilazione preventiva del codice e i si basa su:
- traduzione delle istruzioni sensibili
- Funziona anche in fase di esecuzione
- Memorizzazione del codice tradotto in cache
In pratica è un altro meccanismo di gestione delle istruzioni sensibili.
La traduzione binaria funziona in 2 fasi:
1) Scansione del codice: si analizza una porzione del codice, identificando i basic block (a livello di kernel per isolare lo user space)
2) Modifica del codice: Modifichiamo il codice originale sostituendo le istruzioni con codice sicuro (manteniamo entrambe le copie), in pratica se sensibile chiamo il kernel altrimenti faccio il trap and execute
es. VMware
_____
In questo modo ho solo una porzione ridotta di codice sul quale il kernel deve operare. E riduce l’overhead in runtime visto che scansioniamo prima.
___
Ident: il codice può essere tradotto in modo identico
Flusso di controllo diretto
Flusso di controllo indiretto: quando l’indirizzo non è disponibile al momento della traduzione e va calcolato al voto
Istruzioni privilegiate: vanno riscritte accuratamente
____
La patch binaria invece sostituisce la porzione di codice tradotto, es. VirtualBox
In cosa consiste la para virtualizzazione?
Quali sono i limiti?
In cosa consiste Xen? In cosa consistono i dispositivi paravirtuali? Come viene gestita la memoria? In quali contesti viene utilizzata la para virtualizzazione?
Come viene gestito l’hardware?
Il software di paravirtualizzazione agisce direttamente sull’hardware, in modo tale da gestire le risorse hardware direttamente tra le vm. Il guest usa delle API (hypercalls) per chiedere all’hypervisor la paginazione della memoria o istruzioni sensibili. (Come Binary translation ma a compilet ime)
In questo caso il guest sa di essere in un ambiente virtualizzato. La traduzione avviene in compile time.
es. Xen
I limiti sono:
- Modificare il guest: il guest deve un OS supportato
- Deve essere presente ad altre alternative se la parav non è supportato
Xen è un kernel piccolo che viene caricato sull’host e ottiene il controllo delle risorse, al di sopra c’è un layer con privilegi minori dove risiedono i domini. Ogni dominio può eseguire un OS e sono isolati. C’è un dominio speciale chiamato dom0 che fa le hypercalls, crea e distrugge domini.
I dispositivi paravirtuali sono composti da front e back end, eseguiti da un dominio e scambia i/o con l’esterno. Il backend è tipicamente eseguito in dom0 per i permessi.
Dom0 occupa più memoria RAM possibile in modo tale da poter averne disponibile quando l’hypervisor deve assegnarla a qualcuno e non c’è bisogno di traduzione.
____
E’ un concetto utilizzato sia che in virtualizzazione che para.
- Emulazione: Massimizza la sicurezza, utilizza la tecnica di trap and execute. Causa un grande overhead
- Accesso diretto all’hw: per i dispositivi che lo supportano, massimizza le prestazioni a discapito della sicurezza, l’hypervisor ha il ruolo di evitare l’accesso simultaneo
- Split driver: compromesso tra i due e abbiamo 2 parti
- back en: si occupa di fare l’accesso all’hw e supporta l’accesso simultaneo
- front end: in esecuzione sul guest, è una coda di request da cui il backend preleverà
front e back end scambiano dati in modo efficiente usando hypercall e code di eventi.
es. di split driver
Tools di virtualbox o VMware
In cosa consiste il memory balooning?
Il memory balooning è performato da un processo chiamato balooner che alloca sulla memoria non utilizzata dalle VM, quando sarà necessaria della memoria, l’hypervisor potrà chiedere al balooner. Rendendo la gestione meno complessa. (Utile anche durante la live migration). In questo modo riduciamo l’utilizzo della memoria.
In cosa consiste la virtualizzazione del disco?
Quali sono gli approcci? A cosa serve il VMDK?
Sono QCOW?
Per le VM lo spazio d’indirizzamento di un disco è un blocco di dati identificato come una terna (settore, distanza della testina dal centro, piatto).
Utilizziamo file sparsi o flat
VMDK: Descrive l’immagine del disco rappresentante la geometria e i settori del disco. Ha una struttura sparsa (con spazi vuoti) ma se ne tiene traccia tramite metadati.
Abbiamo dei layer nel file che parte da un Base disk (base file), e delta links sottostanti ( che catturano le modifiche dall’ultimo snapshot)
I VMDK possono creare gli snapshot dei filesystem, un volta installato OS possiamo catturare uno snapshot di esso. Creiamo un nuovo layer sul quale verranno scritte le modifiche successive, usando i delta links che contengono le modifiche fatte sullo snapshot (base disk)
Un altro approccio è quella flat che invece alloca in modo contiguo.
QCOW: Evoluzione del VMDK, implementa della compressione e crittografia, aggiunge anche supporto per file sparsi. Abbiamo 2 layer
- Backing file: immagine originale del file system
- COW: che contiene le differenze
Se nel COW ci sono dati leggiamo da lì se invece becchiamo uno spazio vuoto passiamo al backing file.
Utilizzata in User Mode Linux.
COW sono approccio simile a quello dei container.
In cosa consiste la virtualizzazione della memoria?
Quali sono i rischi?
Quali sono le alternative?
Qual’è l’approccio attuale?
Qualìè la problematica? quali sono le soluzioni?
In memoria abbiamo una page table che contiene pagine logiche per i processi e pagine fisiche della memoria fisica.
Per quanto riguarda la virtualizzazione, c’è bisogno di un livello ulteriore di indiretezza, quindi abbiamo una page table del guest (vede le pagine virtuali come fisiche) e una page table del guest che sta sull’host. Le pagine virtualizzate sono mappate sulle pagine logiche della seconda page table della vm sull’host che a loro volta sono mappate sulla memoria fisica.
____
La problematica è che non deve essere possibile che la VM acceda alla memoria fisica ottenendo il controllo totale.
Per evitare una escalation, usiamo le shadow tables, cioè un ulteriore page table nascosta dal guest che mappa le pagine del guest a quelle dell’host. Costruite dall’hypervisor, viene utilizzato il registro cr3, un puntatore al base page register per il guest correntemente in esecuzione per gestire il cambio di page table. Questa soluzione porta overhead.
es. VMWare
___
Un’altra soluzione prevede la para virtualizzazione, guest e VMM condividono le tabelle, ma il OS guest ha l’accesso solo read only e per la modifica serve una hypercall. Efficiente e usato da Xen, serve un guest modificato.
L’approccio attuale è tramite l’uso di pagine nidificate, affidandosi al supporto HW. C’è un TLB(translation lookaside buffer) per le pagine dei guest e un altro TLB aggiuntivo per mappare l’indirizzo del guest a quello dell’host.
(dobbiamo far si che i processi facciamo i bravi e accedano solo alle pagine di loro competenza)
Come vengono migrate le VM?
Ci sono 2 approcci: offline(stop and restart) e live migration.
____
Offline: si fa lo snapshot, copia e resume nella destinazione. Il servizio può essere offline per un bel pò.
_____
Live migration è la più utile per servizi ad high availability. Tipicamente utilizza un’approccio pre-copy.
Ha 4 fasi principali:
1- Preparation
2- Memory copy: Dato il principio di località, una VM avrà una lista di “hot pages” a cui starà accedendo. Generalmente, l’hypevisor durante questo step ha già creato la VM di destinazione e inizierà a copiare le pagine, partendo da quelle meno “hot”
(perchè, ovviamente, sono quelle che saranno sporcate più facilmente da un write, quindi avrà meno senso copiarle). Tutte queste operazioni sono fatte con la macchina di origine accesa, pertanto è possibile che durante il procedimento le pagine in copia vengano sporcate, richiedendo più round di copia. Oltre allo spostamento delle pagine, viene spostato anche il contenuto del
disco.
3- Migration: la VM di origine viene arrestata e vengono copiate le pagine “hot” per rigenerare interamente la macchina nella destinazione. Viene trasferito anche lo stato dei registri della macchina di origine. Infine, la macchina di origine viene fermata, mentre quella di destinazione accesa. In questo ultimo step, la disruption sarà nell’ordine dei millisecondi
4- Resume.
___
Durante il copy siamo ancora operativi e abbiamo solo un calo prestazionale, se l’hypervisor è fatto bene l’impatto è minimo.
____
Esiste anche un approccio post copy, prima faccio il copy e poi prendo le pagine hot, se viene cambiato l’offset durante il copy metto in stand by l’hypervisor finche non arrivano le pagine nuove.
Come viene gestita la CPU?
Come vengono gestite le contese?
Per quanto riguarda la CPU, per evitare che le VM la saturino è neccessario l’intervento dell’hypervisor che fissa un limite di utilizzo. Lo stealing della CPU accade quando abbiamo processi che per essere eseguiti dalla CPU virtuale rimangono in attesa che l’hypervisor gli assegni una CPU fisica. Se steal > 0 l’hypervisor deve applicare il capping.
Questo accade per 2 possibili motivi:
- i processi richiedono più CPU di quella allocata
- il server fisico è sovraccaricato dalle VM
(è difficile capire qual’è il caso se guardiamo solo lo stealing time)
L’ultimo problema da gestire è l’interferenza tra le varie VM per quanto riguarda la contesa di risorse fisiche (CPU, memoria, rete). Ad esempio ogni volta che avviene un context switch tra VM la cache si svuota per accogliere i contenuti del nuovo guest. E’ difficile ottenere un perfetto isolamento delle prestazioni tra varie macchine virtual. Una possibile conseguenza è la comunicazione tra VM tramite sidechannel come mezzo d’attacco e trasferire dati tra VM.
cosa sono le estensioni hw?
cosa sono le estensioni network e I/O?
Le estensioni HW sono utilizzate per soddisfare i requisiti di Popek & Goldberg abbiamo un livello aggiuntivo destinato all’hypervisor d operatività (ring -1) dove ci sono più istruzioni che gli hypervisor possono utilizzare. Non solo d’interesse sulla CPU, ma anche :
- RAM e I/O
- Network(caso intel)
___
Per quanto riguarda Intel,
sono disponibili tre estensioni: CPU, IOMMU (I/O e RAM) e network.
——
Per la CPU praticamente vengono aggiunte 10 nuove istruzioni (opcodes) da eseguire in ring -1. Abbiamo 2 modalità
d’operazione:
- VMX root : hypervisor (4 rings per traditional mode o ring -1)
- VMX non root: guest (4 rings)
Per commutare modalità usiamo le traps.
es. VMentry, VMexit e Hypercalls, VMCS (Control Structure)
___
Aggiungiamo anche delle strutture dati control structure che permettono di gestire le VM come processi a llivello HW.
_____
Nel caso delle estensioni I/O e network, una problematica è quando voglio accelerare le operazioni I/O con supporto HW, ad esempio un OS può usare l’accesso diretto alla periferica DMA per una scheda di rete. Nel contesto virtualizzando possiamo fare la stessa cosa rimappando la gestione della memoria da parte dell’Hypervisor.