just my technical opinion

martedì 13 aprile 2010

Tecnologie di Virtualizzazione

Possiamo suddividere in quattro categorie le principali modalità di virtualizzazione:
  • Full Virtualization
  • Hardware Assisted Virtualization (emulazione assistita)
  • ParaVirtualization (OS Assisted Virtualization)
  • Containers (virtualizzazione a livello di sistema operativo)

Full Virtualization: VMWare, Xen, KVM, qemu, Hercules

Full Virtualization, detta anche virtualizzazione completa, permette l'esecuzione di sistemi operativi non modificati (o che non possono essere modificati per ragioni di licenza) in un ambiente isolato dal sistema operativo che ospitante; tale ambiente è realizzato da un software che si occupa di emulare l'hardware necessario effettuando una traduzione delle istruzioni eseguite dal sistema ospite in qualcosa che il sistema operativo ospitante possa eseguire. La traduzione di ogni singola istruzione è molto costosa a livello di potenza di calcolo; per limitare il consumo di risorse è 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 architetture come ARM, Alpha, MIPS, SPARC o Hercules che consente di emulare System/370, ESA/390 e z/Architecture, questi emulatori tendono ad essere lenti poiché devono tradurre ogni istruzione verso l'architettura x86, eseguirla, e quindi tradurne il risultato verso l'architettura emulata.
Possiamo decidere di imporre un limite sull'architettura virtualizzata (x86 virtualizza solo x86), e, mappando direttamente memoria e CPU (per quanto riguarda le istruzioni accessibili)  tra il sistema guest e il sistema ospitante, otteniamo una velocità di esecuzione notevolmente superiore. Questo limite rende però impossibile virtualizzare sistemi con architettura 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.


Appare quindi ovvio che il software di virtualizzazione (RING3) i386 non può eseguire codice x86_64, perché deve poter interfacciarsi direttamente con la CPU e quindi essere a RING0. Il software di virtualizzazione infatti non può mappare direttamente le CPU virtualizzate con quelle fisiche, poiché alcune istruzioni non sono accessibili al software stesso; tali istruzioni dovranno quindi essere intercettate ed emulate.

Hardware Assisted Virtualization: Intel VT, AMD-V

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. L'importante conseguenza di questo supporto è il superamento del limite della Full Virtualization: queste estensioni permettono infatti di avere come guest sistemi x86_64 nonostante il sistema ospitante sia i386,e viceversa. 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, Microsoft Virtual Server

ParaVirtualization, detta anche OS Assisted Virtualization, richiede che il sistema operativo virtualizzato possa comunicare direttamente con il motore di virtualizzazione o hypervisor. Il kernel del sistema operativo da virtualizzare dovrà, in generale, essere modificato per ottenere questo canale di comunicazione. Non sempre tale modifica è possibile, come nel di prodotti "closed" come Microsoft Windows che, per motivi di licenza, non permettono la modifica del codice.
L'hypervisor Xen permette l'installazione di sistemi operativi Linux con kernel modificato e driver personalizzati. Il vantaggio della ParaVirtualization consiste nella maggior velocità di esecuzione delle applicazioni utente. Xen e Microsoft Virtual Server sono esempi di software che utilizzano ParaVirtualization.

Containers (OpenVZ/Virtuozzo, Linux-VServer)

L'ultima tipologia di virtualizzazione si slega dall'hardware fisico per legarsi al sistema operativo ospitante. Questa tecnica di virtualizzazione prevede che sia in esecuzione un unico kernel che crea diverse istanze in user space; in questo modo si ha un overhead minimo, ma anche un isolamento quasi inesistente: un kernel panic sarebbe fatale per tutti i sistemi guest contenuti nello stesso hardware. L'immediata conseguenza è che tutti i guest condividono lo stesso identico kernel; per semplificare al massimo possiamo classificare questa tecnologia come una sorta di chroot avanzato.

0 commenti: