223
contributi
(Nuova pagina: =Introduzione= Già da un po' di tempo si fa un gran parlare di virtualizzazione, e sono nati già parecchi prodotti software che implementano questo concetto in modi anche molto diffe...) |
Nessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
{{stub}} | |||
=Introduzione= | =Introduzione= | ||
Già da un po' di tempo si fa un gran parlare di virtualizzazione, e sono nati già parecchi prodotti software che implementano questo concetto in modi anche molto differenti. Possiamo individuare almeno tre tipi distinti di virtualizzazione: | Già da un po' di tempo si fa un gran parlare di virtualizzazione, e sono nati già parecchi prodotti software che implementano questo concetto in modi anche molto differenti. Possiamo individuare almeno tre tipi distinti di virtualizzazione: | ||
Riga 5: | Riga 7: | ||
* virtualizzazione nativa | * virtualizzazione nativa | ||
Per migliorare le prestazioni di questi sistemi, è stato sviluppato il concetto di paravirtualizzazione, in cui il software di virtualizzazione, detto Hypervisor, | ==Emulazione== | ||
In emulazione, il sistema di virtualizzazione simula tutto l'hardware su cui viene installato il sistema operativo ospite, detto <b>guest</b>: questo sistema ha il vantaggio di poter ospitare in modo relativamente semplice molti tipi di sistemi operativi guest senza la necessità di modificarli, anche differenti dal sistema operativo <b>host</b> (quello di base), a costo di un certo consumo di risorse (overhead) causato dallo strato software aggiuntivo necessario. Software di questo tipo sono [http://wiki.qemu.org/ Qemu], [http://kvm.qumranet.com/kvmwiki/ KVM], [http://www.virtualbox.org/ VirtualBox], [http://www.vmware.com/it/ VMware]. | |||
Per migliorare le prestazioni di questi sistemi ne sono state pensate tante. Il primo ad aver pubblicato qualcosa di utile, ed è subito diventato famoso per questo, è stato Fabrice Bellard con il suo [http://wiki.qemu.org/ Qemu], che implementa la cosiddetta ''dynamic translation''. L'idea di fondo è piuttosto semplice: dal momento che nella grande maggioranza dei casi si finisce per emulare la stessa CPU su cui sta girando il sistema host, risulta molto più veloce passare le istruzioni al vero processore e recuperare i risultati, emulando solo quando è strettamente necessario.<br /> | |||
In ogni caso, sempre alla ricerca di prestazioni, tutti questi emulatori hanno finito per portare parte del loro codice al livello kernel: questo significa che il sistema host necessita di un kernel leggermente modificato (di solito è sufficiente l'aggiunta di un modulo o due). | |||
==Paravirtualizzazione== | |||
Se da un lato la virtualizzazione ha subito suscitato un forte interesse in ambito enterprise, soprattutto dal momento che l'hardware disponibile iniziava ad essere sufficientemente potente, dall'altro l'overhead causato dalla virtualizzazione andava ad impattare ancora parecchio sulle performance generali, e questo significa che una fetta della spesa effettuata per acquistare hardware veniva vanificata dal semplice uso della virtualizzazione. | |||
Per migliorare la situazione è stato sviluppato il concetto di paravirtualizzazione, in cui il software di virtualizzazione, detto Hypervisor, non emula completamente l'hardware, ma si limita ad offrire una speciale interfaccia ottimizzata ai sistemi operativi guest. Le prestazioni migliorano, ma per interfacciarsi con l'hypervisor si rendono necessarie modifiche profonde al kernel dei sistemi guest: per risparmiare sull'acquisto di hardware ci si sobbarca una grossa mole di lavoro in termini di programmazione al livello kernel, sia dal lato host che da quello guest. | |||
[http://xen.org/ Xen] è il principale prodotto ad utilizzare questo tipo di approccio. | |||
==Virtualizzazione nativa== | |||
Seguendo ancora la strada del risparmio economico, e quindi la riduzione dell'overhead, la virtualizzazione nativa rinuncia completamente alla possibilità di far funzionare sistemi guest di tipo differente da quello usato per l'host. In pratica, l'hypervisor è sostituito da un vero e proprio kernel, modificato in modo da poter gestire in modo estremamente efficiente diversi sistemi operativi guest semplicemente ospitati in ''container'' differenti. Dal punto di vista pratico, i file dei sistemi guest risiedono semplicemente in differenti directory, mentre il loro spazio di memoria viene mantenuto isolato dal kernel. Il kernel e i programmi di base necessari per far funzionare l'host vengono in questo modo condivisi dai guest, e l'overhead viene normalmente limitato all'1-3%. | |||
[http://wiki.openvz.org/ OpenVZ] implementa questo concetto con host e guest Linux. | |||
=Scenario= | |||
Un cliente ha richiesto l'installazione di un piccolo server per ospitare un'applicazione web di tipo groupware, dedicata ad una rete LAN privata. | |||
Per motivi di scalabilità del sistema è stato deciso, di comune accordo con il cliente, di utilizzare un sistema di virtualizzazione: questo permetterà effettuare backup e/o upgrade hardware in modo semplice. Inoltre, questa soluzione mi permette di iniziare l'installazione della macchina virtuale ancora prima di avere il server sotto mano, utilizzando il mio portatile come host. | |||
Questo in effetti mi creerà qualche piccola difficoltà aggiuntiva: per cominciare sul portatile ho una Debian Squeeze/Sid con un kernel recente non ancora supportato dal progetto, e poi il sistema che ho installato a suo tempo è a 32 bit, mentre ora che devo rinnovare vorrei sfruttare l'architettura x86_64... ma così è un po' più divertente, no? ;-)<br /> | |||
Ah, il sistema di virtualizzazione scelto, naturalmente, è OpenVZ. |
contributi