2. VIRTUALIZZAZIONE MEDIANTE PARTIZIONAMENTO

2.
VIRTUALIZZAZIONE MEDIANTE PARTIZIONAMENTO
In questo capitolo verranno prese in considerazione le soluzioni tecnologiche e gli approcci implementativi della virtualizzazione basata su partizionamento (Figura 5).
In particolare, nel primo paragrafo si descriveranno le soluzioni tecnologiche più utilizzate, mentre
nel secondo verranno discussi i due approcci implementativi più diffusi, ovvero quello della virtualizzazione completa e quello della paravirtualizzazione. Si tenga presente che la classificazione adottata ha lo scopo di mettere in evidenza i diversi approcci implementativi che stanno alla
base dei progetti e dei prodotti descritti, ma che non è perfettamente applicabile nel caso di soluzioni ibride.
Per concludere (paragrafo 2.3), questo capitolo affronterà la discussione dei supporti hardware per
la virtualizzazione delle due maggiori case costruttrici di processori (Intel e AMD).
2.1
SOLUZIONI TECNOLOGICHE
2.1.1 HARDWARE PARTITIONING
Questi sistemi permettono la suddivisione di un sistema di elaborazione in diverse macchine tramite una definizione delle risorse a livello hardware; si associano quindi ad ogni macchina una o più
board del sistema ognuna con i propri processori e la propria memoria. Questa tecnica si utilizza
per superare il limite dei processori (socket) presenti su una singola board.
Queste tecniche non permettono la condivisione delle risorse e la riallocazione ottimale; d’altra
parte hanno il vantaggio di non avere overhead per la gestione della virtualizzazione in quanto i
confini di ogni macchina sono definiti a livello hardware.
Alcuni esempi di prodotti sono nPartition8 della HP e Dynamic System Domains9 della SUN.
2.1.2 HYPERVISOR
Col termine hypervisor si intende quello strato di software che permette solamente l’astrazione
dell’hardware fisico. Generalmente viene caricato all’avvio del sistema di elaborazione e non integra nessuna funzionalità di gestione di macchine virtuali.
8
http://h20341.www2.hp.com/hpux11i/cache/323751-0-0-0-121.html
9
http://www.sun.com/servers/highend/dr_sunfire/
- 14 -
App
App
App
App
App
Guest OS
Guest OS
Guest OS
(Linux)
(NetBSD)
(Windows)
VM
VM
VM
Hypervisor
Hardware
Figura 6: Sistema virtualizzato tramite hypervisor
La
Figura 6 mostra come l’hypervisor permetta la condivisione dell’hardware fisico tra diverse macchine virtuali10. Ovviamente, l’hardware rilevato da ogni macchina virtuale differisce sia dal punto
di vista qualitativo che da quello quantitativo rispetto a quello fisico: ad esempio, se il server fisico
possiede una scheda video ATI, l’hypervisor potrebbe presentarla come una VGA standard.
Come descritto meglio nel prossimo paragrafo, per avere una gestione completa delle macchine
virtuali (gestione del ciclo di vita, gestione delle priorità, …) è necessario disporre di una componente aggiuntiva che a seconda delle architetture può essere o non essere incorporata all’interno
dell’hypervisor.
2.1.3 VIRTUAL MACHINE MONITOR
Il VMM è il software vero e proprio che gestisce la condivisone delle risorse hardware e il ciclo di
vita di ogni macchina virtuale; in particolare i compiti di un moderno VMM sono:
10
•
esporre alle macchine virtuali le opportune interfacce hardware;
•
gestire l’interazione tra le diverse macchine virtuali;
•
garantire l’isolamento tra le macchine virtuali;
•
garantire la stabilità del sistema, impedendo alle macchine virtuali di poter eseguire istruzioni privilegiate in modo non controllato.
Queste macchine vengono chiamate anche macchine guest o VM (Virtual Machine)
- 15 -
A seconda che sia ospitato da un sistema operativo nativo o da un hypervisor, il VMM viene chiamato OS-hosted VMM oppure Hypervisor-Hosted VMM.
Alcuni esempi della prima tipologia sono: Microsoft Virtual Server11, Microsoft Hyper-V12 (stand
alone edition), VMware server13, Virtual Box14, Parallels Server15.
Alcuni esempi della seconda tipologia sono: Microsoft Hyper-V, Xen16 e relativi prodotti derivati
da esso (OracleVM17, VirtualIron18, SUN xVM19), VMware ESX server20, Parallels Server Bare
Metal21, Linux KVM22.
Come si può notare, alcune aziende sviluppatrici di prodotti per la virtualizzazione (per esempio
VMware e Microsoft), rilasciano sia la versione Hypervisor-Hosted sia la versione OS-hosted.
I sistemi VMM Hypervisor-Hosted solitamente sono più complessi in quanto devono essere dotati
di tutti i driver necessari a supportare l’hardware virtualizzato. Per tale ragione solitamente essi
sono certificati solo per determinati sistemi di elaborazione.
I VMM OS-hosted invece sono più semplici (in quanto sono a tutti gli effetti delle applicazioni) a
scapito però di una minore efficienza rispetto ai VMM Hypervisor-Hosted.
11
http://www.microsoft.com/italy/server/virtualserver/Default.mspx
12
http://www.microsoft.com/windowsserver2008/en/us/hyperv-main.aspx
13
http://www.vmware.com/products/server/
14
http://www.virtualbox.org/
15
http://www.parallels.com/it/virtualization/server/
16
http://www.xen.org
17
http://www.oracle.com/lang/it/technologies/virtualization/index.html
18
http://www.virtualiron.com/
19
http://www.sun.com/software/products/xvmserver/index.xml
20
http://www.vmware.com/products/vi/esx/
21
http://www.parallels.com/it/virtualization/server/
22
http://www.linux-kvm.org/page/Main_Page
- 16 -
UnHosted VMM
Hosted VMM
Figura 7: Differenza fra Hosted VMM e UnHosted VMM
2.1.4 OS VIRTUALIZATION
Questa tecnica, a differenza delle altre, inserisce lo strato di virtualizzazione fra sistema operativo e
applicazioni, come schematizzato nella figura seguente:
Figura 8: OS Virtualization23
La virtualizzazione in questo caso prevede la creazione di una “zona” o copia del sistema operativo
di base e di uno specifico albero di processi isolato. I processi contenuti in esso non possono afferire a processi esterni ovvero ai processi di altre zone. Si ottiene un ambiente simile ad una macchina
virtuale ma con minore overhead.
Esempi di questo tipo sono SUN Solaris Containers/Zones24, FreeBSD Jails25, Virtuozzo26 e OpenVZ27
23
La figura è tratta dal sito web della società Parallels, http://www.parallels.com/it/products/virtuozzo/os
24
http://www.sun.com/bigadmin/content/zones/index.jsp
25
http://wiki.freebsd.org/Jails
- 17 -
2.2
APPROCCI IMPLEMENTATIVI
Nell’ambito dei diversi VMM, possono essere adottati diversi approcci implementativi che possono essere ricondotti a due grandi famiglie: la virtualizzazione completa e la paravirtualizzazione
2.2.1 VIRTUALIAZZAZIONE COMPLETA
La tecnica della virtualizzazione completa prevede che il VMM mostri alla macchina virtuale tutto
l’hardware necessario all’esecuzione di un sistema operativo tradizionale; il VMM, quindi, tramite
un BIOS virtuale, espone la/le CPU, le memorie, i dispositivi di memorizzazione e così via.
Il vantaggio principale di questo paradigma riguarda la possibilità di eseguire sulle macchine virtuali tutti i tradizionali sistemi operativi senza che questi debbano essere modificati in quanto
l’hardware emulato risulta completamente trasparente.
D’altra parte, le complicazioni derivanti dall’utilizzo di un VMM di questo genere sono una maggiore complessità ed una maggiore dipendenza dal tipo di CPU: quest’ultima, come si capirà meglio proseguendo la lettura, condiziona in modo decisivo sia la stabilità che la complessità del
VMM.
Per capire come funziona un VMM di questo tipo è necessario innanzitutto ricordare che una moderna CPU funziona su almeno due livelli di privilegio (ring): uno denominato supervisore (o anche ring 0) e l’altro (o gli altri) denominato utente; normalmente all’interno del primo anello viene
eseguito il sistema operativo (kernel e moduli/driver), mentre nel secondo vengono eseguiti gli applicativi; all’interno del livello supervisore è ammessa l’esecuzione di tutte le istruzioni della CPU
(privilegiate e non) mentre a livello utente è possibile la sola esecuzione delle istruzioni non privilegiate. Nel caso in cui un’applicazione utente tenti di eseguire un’istruzione privilegiata la CPU (a
seconda dei tipi) può comportarsi in due modi:
•
ignorare la richiesta di esecuzione;
•
avvisare il sistema operativo tramite una trap: il sistema operativo valuta la richiesta e intraprende le opportune azioni.
Nel caso in cui una CPU sia in grado di intercettare tutte le istruzioni privilegiate viene definita
naturalmente virtualizzabile.
Si intuisce facilmente che una CPU di questo tipo ha un duplice vantaggio sui VMM:
•
maggiore efficienza: le macchine virtuali possono eseguire direttamente il codice sulla CPU
fisica senza alcun overhead da parte del VMM;
•
maggiore stabilità: nel caso in cui una macchina virtuale esegua un’istruzione privilegiata e
quindi potenzialmente dannosa per l’intero sistema, la CPU la interrompe e ne dà notifica al
VMM28 che esegue le opportune azioni.
26
http://www.parallels.com/it/products/virtuozzo/
27
http://wiki.openvz.org/Main_Page
28
In questa discussione, per semplicità, si è assunto che i livelli di protezione della CPU siano solo due e che quindi il
VMM sia una componente del sistema operativo. Le CPU normalmente hanno più di due livelli di protezione ed è
- 18 -
Purtroppo esistono alcune CPU che non sono naturalmente virtualizzabili: in questi casi il VMM
deve prevedere una fase di parsing delle istruzioni da eseguire in modo da poter intercettare quelle
che la CPU nativamente non fa: ad esempio VMware implementa una tecnica chiamata fast binary
translation che consente la traduzione al volo di codice potenzialmente pericoloso permettendone
la notifica al VMM (a scapito di un maggiore overhead).
2.2.2 PARAVIRTUALIZZAZIONE
I VMM paravirtualizzati, a differenza di quelli descritti in precedenza, non emulano l’hardware
della macchina fisica, ma definiscono e implementano un’interfaccia applicativa tra VMM e sistema operativo della macchina virtuale (anche nota come Virtual Hardware API). La conseguenza
primaria di un approccio di questo tipo è che il sistema operativo guest deve essere consapevole di
essere in esecuzione in un ambiente virtuale; ne consegue che un sistema operativo per essere eseguito in un ambiente paravirtualizzato deve essere opportunamente modificato rispetto alla sua versione originale.
Questo paradigma ha quindi lo svantaggio di dover sviluppare il porting di ogni sistema operativo,
ma ha tutta una serie di vantaggi:
•
i VMM sono molto snelli e semplici da realizzare;
•
i VMM sono svincolati da CPU che non siano naturalmente virtualizzabili;
•
l’ambiente paravirtualizzato permette una maggiore interattività tra VMM e sistema operativo guest consentendo una maggior efficienza nella gestione delle risorse condivise (ad esempio nel caso della gestione della paginazione, il VMM può chiedere ai sistemi operativi
guest quali sono le pagine di memoria usate di meno).
Attualmente uno dei progetti più noti orientati alla paravirtualizzazione è XEN29, il prodotto sviluppato dall’Università di Cambridge e rilasciato con licenza opensource: su di esso l’unico sistema operativo di cui è stato fatto il porting completo è Linux (XenoLinux); altri porting (più che
altro sperimentali) sono in corso (ad esempio XenoXP Windows e XenoBSD).
2.3
SUPPORTI HARDWARE
Come descritto nei paragrafi precedenti l’implementazione di un VMM risulta più semplice (e
quindi di conseguenza meno costosa e meno soggetta a bachi) se la piattaforma hardware sottostante (ed in particolare le CPU) prevede in modo nativo una serie di funzioni in grado di agevolare
l’esecuzione del VMM e delle relative macchine virtuali.
quindi pensabile che Sistema Operativo, VMM e Macchina virtuale siano eseguiti in tre livelli gerarchicamente differenti.
29
http://www.xen.org/
- 19 -
Nel corso degli ultimi anni, i due produttori di CPU più noti (Intel e AMD) hanno realizzato un
supporto alla virtualizzazione in termini di estensione dell’Instruction Set e di strutture dati dedicate.
Intel ha sviluppato due supporti hardware chiamati VT-x e VT-i utilizzati rispettivamente nelle architetture a 32 bit (IA-32) e a 64-bit (IPF – Itanium Processor Family).
In particolare VT-x definisce due nuove modalità della CPU dedicate alla virtualizzazione30:
•
VMX root operations, dedicata all’esecuzione del VMM
•
VMX non-root operations, dedicata all’esecuzione delle macchine virtuali
La transizione da una VMX privilegiata ad una non privilegiata è chiamata VM exit, mentre quella
contraria VM entry.
Figura 9: VMX: transizioni di stato31
Tali modalità sono ortogonali alla suddivisione nei quattro livelli di protezione: ciò vuol dire che
all’interno degli stati VMX continuano a valere le stesse regole di protezione con l’importante conseguenza che il sistema operativo della macchina virtuale può essere eseguito normalmente nel
ring-0.
La figura sottostante mostra come sono impiegate le modalità VMX e i livelli di protezione nel caso
in cui il VMM sia integrato in un hypervisor (Hypervisor-Hosted).
30
Virtual Machine Extensions (VMX)
31
La figura è tratta dalla presentazione della Digital Enterprise Group Intel Corporation, Understanding Intel® Virtualization
Technology,
http://download.microsoft.com/download/9/8/f/98f3fe47-dfc3-4e74-92a3088782200fe7/TWAR05015_WinHEC05.ppt
- 20 -
Ring 1-2-3 (VMX non-root)
Ring 0 (VMX non-root)
Ring 0 (VMX root)
Figura 10: VMX e livelli di protezione32
Oltre alle due modalità VMX, l’estensione VT-x prevede l’uso di una struttura dati (una per ogni
macchina virtuale attiva) chiamata VMCS (Virtual Machine Control Structure): le funzioni fondamentali di tale struttura sono la gestione delle transizioni di stato VMX (entry e exit) e la definizione delle azioni da intraprendere nel caso in cui la macchina virtuale esegua determinate istruzioni
(privilegiate e non).
Per quanto riguarda invece il mondo AMD, la tecnologia che implementa l’ausilio hardware alla
virtualizzazione è chiamata SVM33. Essa consente di:
•
ottimizzare il cambio di contesto tra VMM e macchina virtuale e viceversa (world switch);
•
intercettare istruzioni ed eventi delle macchine virtuali passando il controllo al VMM;
•
gestire gli interrupt relativi all’esecuzione delle macchine virtuali;
•
gestire indirizzamenti di memoria separati per le macchine virtuali.
Analogamente alla tecnologia VT-x, SVM introduce la modalità guest dedicata all’esecuzione delle
macchine virtuali; in questa modalità si entra quando il VMM esegue l’istruzione speciale
VMRUN.
Il sistema guest viene eseguito fino a che non si verifica uno di questi eventi:
•
esegue l’istruzione VMMCALL;
•
esegue un’istruzione o scatena un evento per cui il VMM aveva espressamente richiesto
l’interruzione.
In SVM la struttura dati analoga al VMCS si chiama VMCB (Virtual Machine Control Block).
32
Idem.
33
La tecnologia è anche nota con il nome in codice Pacifica.
- 21 -
Figura 11: Supporto hardware in AMD (SVM)
- 22 -