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 trapnexecute hanno dei problemi:
- Le trap sono onerose e rendono le platform virtuali lente a causa overhead(che causò il drop d’impiego negli anni 80, con poi la rinascita nei 2000 con he e se ottimizzati alle VM.)
- La disruption dell’access locality che ha un impatto negativo sulla cache, e influenza la precisione della branch prediction.
___
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.Il problema risiede quando il comando è sensibile ma non privilegiato, perchè l’hypervisor non può fare solo affidamento alle trappole e possono violare la fidelity e/o safety.
——
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)
Le VM innestate non possono esistere, non c’è un hypervisor.
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?
La traduzione binaria è un meccanismo utilizzato per supportare l’emulazione delle istruzioni sensibili. Analizza il codice binario per identificare istruzioni privilegiate (come gli accessi al kernel) e le traduce dinamicamente in istruzioni sicure, compatibili con l’ambiente virtuale.
Memorizza il codice tradotto in una cache per migliorare le prestazioni.
____
Permette di virtualizzare sistemi non progettati per farlo, garantendo sicurezza ed efficienza, senza modificare il codice. La memorizzazione nella cache del codice tradotto migliora le prestazioni.
___________
Step di esecuzione:
1) Scansione del codice: Vengono individuati i basic block e le istruzioni sensibili (accessi al kernel).
2) Modifica del codice: Le istruzioni sensibili vengono sostituite con istruzioni sicure, gestite tramite trap and execute.
In sintesi, la traduzione binaria consente di gestire istruzioni sensibili in ambienti virtualizzati in modo sicuro ed efficiente.
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.
___
Regole per la traduzione binary translation:
- Ident: il codice può essere tradotto in modo identico
- Flusso di controllo diretto: mapping struttura codice per jum, call e ret
- Flusso di controllo indiretto: quando l’indirizzo non è disponibile al momento della traduzione e va calcolato al volo
- Istruzioni privilegiate: vanno riscritte accuratamente
____
La patch binaria invece sostituisce la porzione di codice binario con la sua versione sicure.
es. VirtualBox
In cosa consiste la para virtualizzazione?
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 nel contesto di virt e para?
La paravirtualizzazione è un una tecnica introdotta da Xen che agisce direttamente sull’HW, in modo tale da gestirle direttamente tra le VM.
___
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
___
I dispositivi paravirtuali sono componenti che aiutano ad ottimizzare la comunicazione tra VM e hypervisor. 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.
____
Nella virtualizzazione esistono tre approcci principali per la gestione dei dispositivi hardware:
- Emulazione: L’hardware viene simulato tramite software, garantendo massima compatibilità e isolamento, ma con prestazioni ridotte a causa dell’alto overhead derivante dalla tecnica trap and execute.
- Accesso Diretto all’Hardware: I dispositivi supportati possono essere utilizzati direttamente dalla macchina virtuale, offrendo prestazioni native. Tuttavia, l’hypervisor deve garantire che non ci siano conflitti di accesso simultaneo, riducendo l’isolamento e aumentando i rischi di sicurezza.
- Split Driver: Compromesso tra i due approcci, suddivide il driver in due componenti:
- Back-end: Accede direttamente all’hardware e gestisce l’accesso simultaneo.
- Front-end: Esegue sul sistema guest, mantenendo una coda di richieste.
Queste due parti comunicano in modo efficiente tramite hypercall e code di eventi, combinando buone prestazioni, isolamento e flessibilità. Soluzioni come VirtualBox Guest Additions e VMware Tools adottano questo modello.
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 un’escalation, utilizziamo le shadow tables, ossia una tabella delle pagine aggiuntiva e nascosta dal guest che mappa le pagine del guest a quelle dell’host. Queste tabelle vengono costruite dall’hypervisor e utilizzano il registro CR3, che è un puntatore alla base della page table del guest attualmente in esecuzione, per gestire il cambio di page table. Questa soluzione comporta un 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.
Quando la VM sul nodo di destinazione accede a pagine di memoria non ancora trasferite, queste vengono richieste (“page fault”) all’host sorgente e inviate immediatamente.
Nel frattempo, un meccanismo parallelo copia in anticipo le pagine “hot” dalla sorgente alla destinazione, cercando di minimizzare i page fault.
Come viene gestita la CPU?
Come vengono gestite le contese?
Qual’è il problema della context switch delle VM?
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 (qualcuno sta rubando risorse) 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?
Quali sono le modalità?
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.
_____
In un contesto virtualizzato, è possibile accelerare le operazioni di I/O sfruttando il supporto hardware, come schede di rete ad alte prestazioni. Grazie alla rimappatura della gestione della memoria da parte dell’hypervisor, le macchine virtuali (guest) possono accedere direttamente alla periferica tramite tecniche come il DMA (Direct Memory Access), ottimizzando le prestazioni anche in ambienti virtualizzati.