2. UNA DEFINIZIONE
Per virtualizzazione intendiamo la
creazione di una versione virtuale di
qualcosa, dove il termine virtuale si
contrappone a reale, tangibile,
fisicamente concreto
3. Hardware di un Calcolatore
Dispositivi di Memorizzazione
Reti di Calcolatori
AMBITI DELLA VIRTUALIZZAZIONE
4. Virtualizzare l’hardware di un calcolatore
consiste nella creazione di un software
che si comporti in tutto e per tutto
come un vero calcolatore
VIRTUALIZZAZIONE HARDWARE CALCOLATORE
5. VIRTUALIZZAZIONE HARDWARE CALCOLATORE
Sulla questa macchina virtuale
possiamo installare un qualsiasi
sistema operativo compatibile, che
potrà eseguire del software come
su una analoga macchina fisica
6. VIRTUALIZZAZIONE DISPOSITIVI MEMORIZZAZIONE
La virtualizzazione di dispositivi di
memorizzazione (storage virtualizzation)
rende astratto il concetto di memoria di
massa liberandolo da vincoli come la
vicinanza fisica, la dimensione, la gestione
dei backup e degli eventuali guasti
7. VIRTUALIZZAZIONE DISPOSITIVI MEMORIZZAZIONE
Un sistema di storage virtualizzation
presenta all’utente uno spazio logico
per la memorizzazione dei dati
occupandosi dietro le quinte di mappare
questo spazio logico su storage reale
8. VIRTUALIZZAZIONE RETI CALCOLATORI
In un contesto dove vengono virtualizzati
più calcolatori è possibile astrarre sia il
concetto switch che di interfaccia di rete
Virtual Network Interface Controller
(VNIC)
9. VIRTUALIZZAZIONE RETI CALCOLATORI
Grazie a questa ulteriore astrazione si
riescono a costruire vere e proprie reti di
macchine virtuali che possono
funzionare anche indipendentemente
dall’hardware sottostante
13. L’obiettivo è quello di creare un
software che si comporti in tutto e
per tutto come un sistema fisico
Virtual Machine
(VM)
OBIETTIVI
14. COSA VIRTUALIZZIAMO?
Per virtualizzare una macchina si devono
considerare tre aspetti principali
Virtualizzazione CPU
Virtualizzazione Memoria
Virtualizzazione periferiche I/O
15. EMULATORI
I concetti che stanno dietro alla virtualizzazione
hanno molto in comune con quelli
dell’emulazione
16. EMULATORI
La differenza principale sta nel fatto che
nell’emulazione la macchina emulata ha
un hardware molto diverso da quello
della macchina ospite
17. EMULATORE NINTENDO 64
ESEMPIO
Piattaforma Ospite Piattaforma da Emulare
CPU Intel 64 bit
core i7 8700 a 3.2 GHz
CPU NEC 64 bit
Mips R4300 a 93.75 MHz
GPU 128 bit
nVidia GTX 1080 (9 TFLOPS)
GPU 64 bit
Reality Coprocessor (100 MFLOPS)
16 Gigabyte RAM 4.5 Megabyte RAM
20. PROCESSORI DIFFERENTI
L’architettura MIPS e x86 presentano registri e flags in
quantità e nomenclatura differente
MIPS x86
32 Register 16 Register
64 bit 64 bit
$t0, $t1, $t2, … RAX, RBX, RCX, …
21. PROCESSORI DIFFERENTI
I registri dell’architettura MIPS sono più
numerosi di quelli x86
Oltre ad un mapping diretto sarà
necessaria una struttura dati che salvi
lo stato dei registri MIPS
22. PROCESSORI DIFFERENTI
MIPS x86
$t0 RAX
$t1 RBX
$t2 RCX
$t3 RDX
$t4 RSI
$t5 RDI
$t6 RBP
$t7 RSP
$t8 R8
$t9 R9
$s0 R10
$s1 R11
$s2 R12
$s3 R13
$s4 R14
$s5 R15
fino a 16 registri con
mapping diretto
23. PROCESSORI DIFFERENTI
MIPS x86
$at ?
$v0 ?
$v1 ?
$a0 ?
$a1 ?
$a2 ?
$a3 ?
$k0 ?
$k1 ?
$gp ?
$sp ?
$fp ?
$ra ?
HI ?
LOW ?
PC IP
I restanti
in RAM
29. ISTRUZIONI DIFFERENTI
L’obiettivo finale dell’emulatore è quello di eseguire
del codice equivalente che sortisca
lo stesso risultato
MIPS x86
add $t0,$t1,$t2
mov RCX,RAX
add RCX,RBX
In pratica, deve fare da tramite tra i due linguaggi
31. INTERPRETAZIONE
Traduzione a livello di singola istruzione
FINE
Leggi istruzione MIPS usando PC
Traduci in istruzioni x86
PC = END
PC = PC +1
INIZIO
Esegui istruzioni tradotte
PC = 0
false
true
33. RICOMPILAZIONE STATICA
La ricompilazione statica mira invece a tradurre
tutto il codice macchina prima dell’esecuzione
add $t0,$t1,$t2
li $t0,57
beq $t0,$t1,laggiu
j lassu
MOV CX, AX
ADD CX, BX
MOV AX, 57
CMP AX, BX
JE laggiù
JMP lassu
ricompilazione
sta/ca
esecuzione
na/va
MIPS
x86
34. Codice sorgente compresso
RICOMPILAZIONE STATICA
La ricompilazione statica sembra una buona idea,
ma in molti casi non è facile da implementare
Codice sorgente modificato a runtime
Codice sorgente caricato a runtime
Difficoltà a distinguere il codice dai dati
35. RICOMPILAZIONE DINAMICA
La ricompilazione dinamica rappresenta un
compromesso tra i due approcci precedenti
La traduzione avviene a livello di blocchi di
istruzioni detti buckets
I buckets hanno dimensione fissa
(al più delimitata da istruzioni di salto)
36. RICOMPILAZIONE DINAMICA
Per ottimizzare il processo i bucket vengono inseriti
in una cache in memoria
Man mano che l’emulazione avanza, le prestazioni
si avvicinano sempre di più a quelle di una
ricompilazione statica
37. RICOMPILAZIONE DINAMICA
INIZIO
FINE
Esiste già un bucket
tradotto con indice PC?
PC = 0
Leggi un bucket di istruzioni MIPS partendo da PC
Traduci il bucket in istruzioni x86
e Salvalo nella cache con indice PC
Esegui il bucket di istruzioni tradotte
PC = END
PC = PC + size_of(bucket)
Leggi il bucket di istruzioni x86
con indice PC dalla cache
true
false
false
true
40. SCALA DELLE PRESTAZIONI
Le due macchine (reale ed emulata)
hanno prestazioni molto differenti
Piattaforma Ospite Piattaforma da Emulare
CPU Intel 64 bit
core i7 8700 a 3.2 GHz
CPU NEC 64 bit
Mips R4300 a 93.75 MHz
GPU 128 bit
nVidia GTX 1080 (9 TFLOPS)
GPU 64 bit
Reality Coprocessor (100 MFLOPS)
16 Gigabyte RAM 4.5 Megabyte RAM
41. SCALA DELLE PRESTAZIONI
A seconda del tipo di applicazioni che
gireranno sulle macchine emulate questo
può essere un male oppure un bene
42. SCALA DELLE PRESTAZIONI
Alcuni vecchi giochi ad esempio, facendo affidamento
su una frequenza di clock ben nota, potevano utilizzarla
come base per la temporizzazione di alcuni eventi
Eventi scripting del gameplay
Eventi legati al rendering
Eventi legati agli algoritmi di AI
Eventi legati al playback audio
43. SCALA DELLE PRESTAZIONI
Alcune soluzioni
Emulare clock originale con timer di sistema
Codice dummy per rallentare l’esecuzione
Fermare l’emulazione ad intervalli stabiliti
45. RICAPITOLANDO
La virtualizzazione riprende molti
concetti chiave dell’emulazione ma
lavora prevalentemente con Virtual
Machine che ripropongono
l’architettura sottostante
48. HYPERVISOR
Uno dei principali attori della
virtualizzazione è uno speciale
software chiamato hypervisor
L’obiettivo principale di un hypervisor
è quello di gestire un certo numero di
Virtual Machine Monitor (VMM)
49. VMM
Un Virtual Machine Monitor è
anch’esso un oggetto software
Fornisce una astrazione
dell’hardware sul quale dovrà girare
il sistema operativo ospite
53. HOSTED HYPERVISOR (TYPE 2)
Un hosted hypervisor viene
installato su una macchina che
possiede già un sistema operativo
ospitante (Host OS)
54. HOSTED HYPERVISOR (TYPE 2)
Server Hardware
Host OS
Hosted Hypervisor
Guest OS Guest OS Guest OS
APP APP APP
Virtual
Machines
Physical
Machine
55. HOSTED HYPERVISOR (TYPE 2)
Maggiori esponenti
VMWare Workstation
Oracle Virtual Box
QEMU
KVM
MS Virtual PC*
* fuori produzione
56. HOSTED HYPERVISOR (TYPE 2)
Generalmente un Hosted
Hypervisor viene installato come
modulo kernel assieme a
strumenti di amministrazione
delle Virtual Machines
58. HOSTED HYPERVISOR (TYPE 2)
PRO
Facile installazione e configurazione
Non necessità di OS modificati
CONTRO
Performance ridotte
Non adatto per virtualizzate RTOS
59. BARE METAL HYPERVISOR (TYPE 1)
Se l’hypervisor viene installato
direttamente sull’hardware (senza
sistema operativo host) si parla di
Bare Metal Hypervisor
60. BARE METAL HYPERVISOR (TYPE 1)
In questo scenario l’hypervisor è
una proto sistema operativo che
gestisce direttamente l’hardware
del server dialogando con le
virtual machine
61. BARE METAL HYPERVISOR (TYPE 1)
Server Hardware
Bare Metal Hypervisor
Guest OS Guest OS Guest OS
APP APP APP
Virtual
Machines
Physical
Machine
62. BARE METAL HYPERVISOR (TYPE 1)
Maggiori esponenti
VMWare ESX
Microsoft Hyper-V
Oracle VM server
XEN Server
XBOX One OS
63. BARE METAL HYPERVISOR (TYPE 1)
PRO
Performance migliori
Supporto per RTOS
CONTRO
Gestione più complicata
Più dipendente dall’hardware
65. LIVELLI PRIVILEGIO CPU
Prima di addentrarsi ulteriormente
nelle varie tecniche di
virtualizzazione è necessario
chiarire bene il concetto di livello
di privilegio di una CPU
66. LIVELLI PRIVILEGIO CPU
Le architetture x86 (ed analogamente le altre) prevedono
4 livelli di privilegio noti con il nome di ring
Hardware
Ring 3
Ring 2
Ring 1
Ring 0
Esecuzione
diretta
Richieste OS
App Utente
OS
67. LIVELLI PRIVILEGIO CPU
La CPU transita tra i vari ring come se
fossero degli stati
Ogni ring predetermina il set di
istruzioni che sarà consentito eseguire
68. IL RING 3
Il ring 3 (noto come user mode) è il
livello al quale girano tutte le
applicazioni utente
Il software che gira a questo livello ha
accesso ad un set limitato di istruzioni
della CPU
69. LIMITAZIONI RING 3
RING 3
Cambiare livello di privilegio
Modificare tabella pagine memoria
Registrare Interrupt Handler
Accessi diretti alle periferiche
70. IL RING 0
Il ring 0 (noto come kernel mode) è il
livello dove tutto è permesso.
Questo livello rappresenta l’habitat
ideale per il sistema operativo
71. IL RING 0
Le applicazioni (che non possono interagire
direttamente con l’hardware) ha modo di
scalare a ring 0 facendo chiamate al sistema
operativo
RING 3
72. I RING 1 & 2
Questi livelli intermedi sono stati
pensati originariamente da Intel per
ospitare il codice dei device driver
Nella pratica però non sono quasi mai
stati utilizzati dai sistemi operativi
73. I RING 1 & 2
Molti software di virtualizzazione hanno
fornito una nuova ragione d’essere a questi
livelli di privilegio
IDEA
74. I RING 1 & 2
Una questione molto spinosa infatti, è stabilire a
quale livello di privilegio far girare Hypervisor ed il
Sistema Operativo Guest
0 1 2
75. I RING 1 & 2
I sistemi operativi sono progettati ed
implementati per girare a ring 0
Anche l’Hypervisor, essendo una specie
di sistema operativo, deve lavorare a
privilegio massimo!
MA
76. I RING 1 & 2
Non essendo consentito a due kernel
di occupare allo stesso tempo il ring 0
la possibilità di utilizzare livelli di
privilegio aggiuntivi aiuta molto
78. TECNICHE DI VIRTUALIZZAZIONE
Nel panorama dei metodi di virtualizzazione
spiccano tre approcci al problema
Full Virtualization
OS Assisted Virtualization
Hardware Assisted Virtualization
80. FULL VIRTUALIZATION
L’obiettivo della Full Virtualization è quello di
emulare l’intero hardware
Affinché si possa parlare di Full Virtualization
deve essere possibile far girare sulle Virtual
Machine qualsiasi sistema operativo progettato
per l’hardware nativo che stiamo emulando
81. FULL VIRTUALIZATION
La Full Virtualization permette di utilizzare
versioni non modificate dei Sistemi Operativi
Il Sistema Operativo Guest in questo scenario
non è consapevole di stare girando dentro una
Virtual Machine
82. FULL VIRTUALIZATION
Senza aiuto da parte dell’Hardware la Full Virtualizazion si implementa
con un mix di esecuzione diretta e ricompilazione dinamica
Hardware
Ring 3
Ring 2
Ring 1
Ring 0
Esecuzione
diretta
Richieste OS
Ricompilate
Dinamicamente
App Utente
VMM
Guest OS
83. FULL VIRTUALIZATION
Hypervisor e VMMs girano a livello 0
eventualmente come driver a fianco di un
Sistema Operativo Host
Il Sistema Operativo Guest gira a livello 1
mentre le Applicazioni a livello 3
84. FULL VIRTUALIZATION
Anche se progettato per il livello 0
buona parte del codice del Sistema
Operativo Guest può girare senza
problemi anche a livello 1
86. FULL VIRTUALIZATION
In questi casi dovrà essere ricompilato
dinamicamente il codice critico, sostituendolo
con delle chiamate verso l’Hypervisor
L’Hypervisor farà dunque da tramite
verso l’hardware per il Sistema Operativo Guest
88. ESEMPIO - FULL VIRTUALIZATION
Una routine kernel del Sistema Operativo Guest vuole accedere
direttamente ad una periferica eseguendo un’istruzione di OUT
Hardware
Ring 1
Ring 0 OUT DX,ALVMM
Guest OS
Essendo l’istruzione molto critica necessita di trovarsi a ring 0
per non essere bloccata dal sistema
89. ESEMPIO - FULL VIRTUALIZATION
L’Hypervisor in questi casi ricompila
dinamicamente le parti critiche sostituendole con
chiamate a proprie routine interne
Hardware
Ring 1
Ring 0
OUT DX,AL
Guest OS
CALL HYP_OUTVMM
OUT DX,AL
90. ESEMPIO - FULL VIRTUALIZATION
Per velocizzare future esecuzioni della medesima routine
kernel, le parti di codice ricompilate vengono indicizzate e
salvate in una memoria cache dell’Hypervisor
CALL HYP_OUT
92. OS ASSISTED VIRTUALIZATION
Nota anche come Paravirtualization, l’OS
Assisted Virtualization nasce con l’idea di
migliorare le prestazioni delle macchine virtuali
collaborando con i Sistemi Operativi Guest
93. OS ASSISTED VIRTUALIZATION
Per facilitare l’Hypervisor gli OS Guest devono
essere opportunamente modificati nelle parti
critiche che interagiscono con l’hardware
Gli OS Guest dunque sono consapevoli di girare
in un ambiente virtuale e per velocizzare
l’emulazione chiamano direttamente l’Hypervisor
94. OS ASSISTED VIRTUALIZATION
Hardware
VMM Driver Interface
Real Drivers
VMM
VM
Modified
Drivers
Guest OS
APP APP
VM
Modified
Drivers
Guest OS
APP APP
VM
Modified
Drivers
Guest OS
APP APP
95. OS ASSISTED VIRTUALIZATION
La paravirtualizzazione è un buon compromesso
qualora le prestazioni siano importanti
La necessità di driver e/o versioni moddate dei
vari sistemi operativi però ne ha limitato l’utilizzo
Ad esempio, pare che non esistano distribuzioni di
Windows che la supportino
97. HARDWARE ASSISTED VIRTUALIZATION
Data la crescente popolarità ed utilità
della virtualizzazione, i produttori di CPU
hanno cominciato ad ricercare soluzioni
hardware per migliorare le prestazioni
delle Virtual Machine
98. HARDWARE ASSISTED VIRTUALIZATION
A partire dal 2006, Intel e AMD cominciano
ad introdurre nei propri processori nuove
estensioni per il supporto alla virtualizzazione
Intel VT-x
AMD-V
99. HARDWARE ASSISTED VIRTUALIZATION
L’idea di base di queste tecnologie è l’estensione
del modello dei ring introducendo una modalità
ancora più privilegiata, sotto il livello zero
100. HARDWARE ASSISTED VIRTUALIZATION
Hardware
Ring 3
Ring 2
Ring 1
Ring 0
Esecuzione
diretta
Richieste del
Guest OS
intercettate*
App Utente
Guest OS
Non-root
Mode
Privilege
Levels
Root Mode
Privilege Levels Hypervisor VMM
* senza bisogno di Ricompilazione dinamica o Paravirtualizzazione
101. HARDWARE ASSISTED VIRTUALIZATION
Girando nel suo habitat naturale,
ovvero il ring 0, il sistema operativo
ospite non necessita di essere
tradotto dinamicamente o modificato
ricorrendo alla paravirtualizzazione
102. HARDWARE ASSISTED VIRTUALIZATION
Semplicemente, tutte le istruzioni sensibili che
avvengono a ring 0 vengono intercettate
(trapped) verso l’Hypervisor che le attua nel
giusto contesto delle risorse fisiche
104. HARDWARE ASSISTED VIRTUALIZATION
Con le prime versioni dei processori
compatibili VT-x e AMD-V le
prestazioni della virtualizzazione
potevano essere peggiori di quelle
ottenute con gli altri metodi
105. HARDWARE ASSISTED VIRTUALIZATION
Questo perché gli Hypervisor esistenti al tempo
erano talmente ottimizzati da essere
molto più efficienti
Infatti i numerosi passaggi da Root Mode a
Non Root Mode introducevano un
overhead non indifferente
107. VIRTUALIZZAZIONE MEMORIA
Oltre alla CPU, un VMM deve astrarre
anche altri elementi costituenti
l’hardware di un computer
RAM
Periferiche I/O
108. VIRTUALIZZAZIONE MEMORIA
La virtualizzazione della memoria
tra le varie VM riprende le stesse
idee che sono alla base della
gestione della memoria nei
moderni sistemi operativi
109. VIRTUALIZZAZIONE MEMORIA
Le applicazioni vedono e dispongono di uno
spazio di memoria che non è in corrispondenza
diretta con la RAM fisica
Il trucco consiste nel suddividere la RAM in pagine,
associando ad ogni applicazione una tabella di
corrispondenza tra pagine virtuali e pagine fisiche
114. VIRTUALIZZAZIONE MEMORIA
Il doppio livello di paginazione
introduce un calo delle prestazioni
non indifferente, dato che ogni
accesso alla memoria porta al
doppio degli accessi previsti per i
casi non virtualizzati
115. VIRTUALIZZAZIONE MEMORIA
Un’idea per ottimizzare il numero di
accessi sarebbe quello di aggirare la
paginazione del Sistema Guest
delegando tutto al VMM
116. VIRTUALIZZAZIONE MEMORIA
Nella sua implementazione più brutale,
questo approccio prevede di intercettare
tutti gli accessi alle tabelle delle pagine
del Sistema Operativo Guest girandole
all’Hypervisor
117. VIRTUALIZZAZIONE MEMORIA
VM 1
Process 1
Page Table 1
Process 2
Page Table 2
VM 2
Process 1
Page Table 1
Process 2
Page Table 2
Hypervisor
Real Machine Memory
Shadow
Page Tables
VMM 2
Page Table
Shadow
Page Tables
Shadow
Page Tables
118. VIRTUALIZZAZIONE MEMORIA
Il compito dell’Hypervisor sarà quello di
gestire delle tabelle delle pagine ombra
(shadow page table) tenendo all’oscuro il
sistema guest che avrà l’impressione di
lavorare con tabelle proprie
120. VIRTUALIZZAZIONE MEMORIA
La seconda generazione di processori con
supporto alla virtualizzazione introduce
meccanismi ad-hoc per supportare gli
Hypervisor in questo compito
Questo meccanismo di accelerazione prende il
nome di Second Level Address Translation
(SLAT)
122. VIRTUALIZZAZIONE MEMORIA
L’idea è quella di agire sul Translation
Lookaside Buffer (TLB), una speciale
memoria all’interno della CPU che funge
da cache per le tabelle delle pagine
123. TRANSLATION LOOKASIDE BUFFER
P D
Page
Table
Memoria
FisicaF D
Indirizzo logico
Pagina
Logica
Pagina
Fisica
TLB MISS
TLB HIT
CPU
TLB
124. VIRTUALIZZAZIONE MEMORIA
Nei processori moderni il TLB
è molto capiente, così da poter ospitare sia le
pagine delle VM che le pagine del VMM
A regime dunque con due accessi sequenziali
al TLB è possibile velocizzare l’accesso alla
memoria fisica
125. VIRTUALIZZAZIONE MEMORIA
Inoltre, grazie anche ad un meccanismo
che consente di taggare le righe del TLB
con un Virtual Machine ID si possono
limitare gli effetti nefasti del flush del TLB
129. SOFTWARE BASED I/O MANAGEMENT
In questo caso l’Hypervisor intercetta le chiamate
di I/O gestendole internamente e trasponendole
sulle periferiche fisiche in maniera opportuna
VM
Hypervisor
I/O Manager
130. DIRECT HARDWARE PASS-THROUGH
Nel secondo caso la periferica buca la
virtualizzazione e viene presentata al Sistema Guest
in modo da avere un dialogo diretto
VM
Hypervisor
131. VIRTUALIZZAZIONE PERIFERICHE
In genere la prima soluzione è la più adottata
perché semplifica e rende più sicura la gestione
Inoltre, abilita un sacco di particolari features
aggiuntive molto interessanti
135. VIRTUALIZZAZIONE PERIFERICHE
Questo approccio inoltre,
consentendo di far coincidere allo
stesso indirizzo fisico più macchine
virtuali, facilita l’implementazione di
politiche di failover e load balancing
136. LOAD BALANCING
Hypervisor
VM VM Clone 1 VM Clone 2
Virtual SWITCH
Physical NIC
Virtual NICs
HW
Virtual Machines
LAN
172.83.12.3 IP Pubblico
137. FAILOVER
Hypervisor
VM VM Clone 1 VM Clone 2
Virtual SWITCH
Physical NIC
Virtual NICs
HW
Virtual Machines
LAN
172.83.12.3 IP Pubblico
139. VM MIGRATION
Se lasciamo all’Hypervisor la gestione delle richieste
verso le periferiche, risulta più facile spostare Virtual
Machine da una macchina fisica ad un’altra.
Questo accade molto spesso, ad esempio in caso di
guasti o manutenzione dell’hardware
VM Migration
Physical Machine Physical Machine
140. VM MIGRATION
L’approccio Pass-Through prevede
l’installazione sui sistemi guest dei driver
specifici delle periferiche fisiche.
Se cambia l’hardware sottostante quindi, la
Virtual Machine non è più in grado di
dialogare con la periferica
141. VM MIGRATION
VM Migration
Brand 1
I/O interface
Brand 2
I/O interface
La migrazione delle VM necessita dunque che le macchine
fisiche abbiano configurazioni hardware identiche
142. VM MIGRATION
Se invece è l’Hypervisor a gestire
l’accesso alle periferiche, esponendo alle
VM un set di periferiche standard
(compatibili con ogni sistema operativo)
la migrazione diventa indolore
143. VM MIGRATION
VM Migration
Brand 1
I/O interface
Brand 2
I/O interface
Standard
Virtual I/O interface
Standard
Virtual I/O interface
Hypervisor
Hypervisor