Cosa è meglio usare e in quali condizioni lo tratteremo in un altro articolo. Soffermiamoci per ora sulle principali differenze tra le diverse
Tecnologie di Virtualizzazione sopra indicate.
Full Virtualization, o
Virtualizzazione Completa, consente l'esecuzione di sistemi operativi non modificati (o non modificabili per ragioni di licenza) in un ambiente totalmente ricreato ed isolato dal sistema operativo che lo ospita; tale ambiente è realizzado da un apposito software che si occupa di emulare l'hardware necessario traducendo le istruzioni eseguite dal sistema ospite in qualcosa che il sistema operativo ospitante sia in grado di eseguire. Come è possibile intuire la traduzione di ogni singola istruzione è molto onerosa a livello di potenza di calcolo, per ovviare a ciò è necessario eseguire la maggior parte delle istruzioni in
modo nativo. Sebbene quindi esistano emulatori di CPU differenti dall'architettura x86, come ad esempio Qemu che è in grado di emulare ARM, Alpha, MIPS, SPARC o Hercules che emula System/370, ESA/390 e z/Architecture, questi emulatori tendono ad essere molto lenti poichè devono tradurre ogni istruzione verso l'architettura x86, eseguirla, e quindi tradurne il risultato verso l'architettura emulata.
Imponendo quindi un limite sull'architettura virtualizzata (x86 virtualizza solo x86), è possibile velocizzare notevolmente l'esecuzione dei sistemi guest mappando direttamente memoria e CPU (per quanto riguarda le istruzioni accessibili). Questo limite rende però impossibile virtualizzare sistemi x86_64 se il sistema operativo di base è i386 (come nel caso di VMWare ESX). Questo succede perchè l'architettura i386 prevede l'esecuzione di codice in due modalità:
- Real Mode: dove ogni processo ha completo accesso a tutto l'hardware (tale modalità è quantomeno rischiosa e preclude il concetto di virtualizzazione);
- Protected Mode: vengono creati diversi livelli di protezione che possono essere immaginati come anelli (RING) concentrici sempre più restrittivi man mano che si procede verso l'esterno.
Hardware Assisted Virtualization
Hardware Assisted Virtualization è conosciuta anche come
Accelerated Virtualization oppure con nomi diversi a seconda del produttore. Xen la chiama
Hardware Virtual Machine (
HVM), Virtual Iron la chiama Native Virtualization. Questa tecnica si appoggia a speciali funzioni della CPU (Intel VT e AMD-V) e permette l'esecuzione direttamente in hardware di alcune chiamate della macchina virtuale. La più importante conseguenza di questo supporto in hardware è il superamento del limite della Full Virtualization: grazie a queste estensioni è infatti possibile avere come guest sistemi x86_64 nonostante il sistema ospitante sia i386. Occorre precisare che l'attuale virtualizzazione assistita si occupa di aiutare solamente funzioni di CPU e memoria; tutte le funzionalità di I/O sono ancora emulate. Esistono già delle
specifiche per permettere a diverse istanze virtuali di condividere schede PCI Express.
ParaVirtualization (Xen, KVM)
ParaVirtualization (
OS Assisted Virtualization) è una tecnica in cui il sistema operativo virtualizzato riesce a comunicare direttamente con il
Motore di Virtualizzazione (
hypervisor). Questo comporta la necessità di modificare il kernel del sistema operativo da virtualizzare risultando problematico nel caso di prodotti come Windows che, per motivi di licenza, non permettono la modifica del codice.
Xen, ad esempio, permette l'installazione di sistemi operativi Linux con kernel modificato e driver personalizzati. Il vantaggio nell'usare la
ParaVirtualization consiste nella maggior velocità di esecuzione delle applicazioni utente. Xen e Microsoft Virtual Server sono esempi di software che utilizzano
ParaVirtualization.
L'ultima tipologia di
Virtualizzazione è ancora più slegata dall'hardware fisico e più legata al sistema operativo stesso.
Containers prevede che sia in esecuzione un solo kernel unico che crea diverse istanze in user space; in questo modo si ha un bassissimo overhead, ma anche un bassissimo isolamento: un kernel panic sarebbe fatale per tutti i sistemi contenuti nello stesso hardware. Una ovvia conseguenza è che avendo un unico kernel, i sistemi operativi ospitati avranno ovviamente la stessa versione di kernel. Semplificando al massimo, questa tecnologia si avvicina molto al concetto di
chroot.
Altri articoli sulla Virtualizzazione