<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mia mamma usa Linux! &#187; Virtualizzazione</title>
	<atom:link href="http://www.miamammausalinux.org/tag/virtualizzazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Implementazione di un server di virtualizzazione con KVM</title>
		<link>http://www.miamammausalinux.org/2011/06/implementazione-di-un-server-di-virtualizzazione-con-kvm/</link>
		<comments>http://www.miamammausalinux.org/2011/06/implementazione-di-un-server-di-virtualizzazione-con-kvm/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 09:30:12 +0000</pubDate>
		<dc:creator>Francesco Pedrini</dc:creator>
				<category><![CDATA[KVM]]></category>
		<category><![CDATA[Virtualizzazione]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1168</guid>
		<description><![CDATA[Nel precedente articolo &#8220;Introduzione alla virtualizzazione con KVM&#8221; sono stati introdotti gli aspetti base della virtualizzazione basata su KVM. In questo articolo vedremo come implementare una completa soluzione di Virtualizzazione basata su KVM e Debian. In particolare useremo Debian Squeeze, l&#8217;attuale release stable di Debian. Prerequisiti Per utilizzare KVM è necessario avere un processore dotato [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/07/kvm.png" alt="kvm" title="kvm" width="100" height="31" class="alignnone size-full wp-image-1116" /></p>
<p>Nel precedente articolo &#8220;<a href="http://www.miamammausalinux.org/2010/07/introduzione-alla-virtualizzazione-con-kvm/">Introduzione alla virtualizzazione con KVM</a>&#8221; sono stati introdotti gli aspetti base della virtualizzazione basata su KVM.<br />
In questo articolo vedremo come implementare una completa soluzione di Virtualizzazione basata su KVM e Debian.</p>
<p>In particolare useremo <a href="http://www.debian.org/releases/squeeze/index.it.html">Debian Squeeze</a>, l&#8217;attuale release stable di Debian.</p>
<h3>Prerequisiti</h3>
<p>Per utilizzare KVM è necessario avere un processore dotato di <a href="http://it.wikipedia.org/wiki/Virtualizzazione_X86">estensioni per la virtualizzazione</a>, per verificare che siano presenti è sufficiente lanciare il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># egrep -c '(vmx|svm)' /proc/cpuinfo
8</pre></div></div>

<p>Se il comando (come nell&#8217;esempio) restituisce &#8220;1&#8243; o un numero maggiore le estensioni sono state rilevate, mentre se restituisce 0, significa che il vostro processore non dispone di tali estensioni, quindi dovrete usare una soluzione differente come ad esempio <a href="http://www.xen.org/">Xen</a> o <a href="http://www.virtualbox.org/">VirtualBox</a>.</p>
<p>Nel caso in cui vogliate creare VirtualMachine con un quantitativo di RAM superiore ai 2 GB è necessario avere un processore con architettura <a href="http://en.wikipedia.org/wiki/X86-64">X86-64</a>. Anche in questo caso possiamo estrarre questa informazione dal file <em>/proc/cpuinfo</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># egrep -c ' lm ' /proc/cpuinfo
8</pre></div></div>

<p>Anche in questo caso, se il comando (come nell&#8217;esempio) restituisce un numero diverso da 0, il vostro processore potrà eseguire software a 64 bit.</p>
<p>L&#8217;ulteriore componente in gioco è il kernel del vostro sistema, che deve essere compilato con il supporto ai 64 bit, per controllare è sufficiente lanciare &#8216;uname&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># uname -m
x86_64</pre></div></div>

<p>che dovrà restituire appunto &#8220;x86_64&#8243;.<br />
Nel caso il vostro processore sia a 64 bit ma sistema operativo installato a 32, non preoccupatevi, non è necessario effettuare una nuova installazione. Linux infatti è in grado di far girare uno <em>userland</em> a 32 bit su un kernel a 64 bit e nei repository Debian per l&#8217;architettura i386 è presente proprio il pacchetto che ci interessa, installabile con un colpo di Apt:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># apt-get install linux-image-2.6-amd64</pre></div></div>

<p>Al contrario delle estensioni per la virtualizzazione, non avere un processore x86_64 non pregiudica la funzionalità di KVM, semplicemente si potranno creare macchine virtuali con al massimo 2 Gb di RAM, quantitativo più che sufficiente per macchine virtuali di test.</p>
<p>Come ultimo prerequisito è necessario procurarsi un client <em>VNC</em> da installare sulla propria workstation, in questo caso si può proprio dire che uno vale l&#8217;altro, l&#8217;uso che se ne farà è davvero semplice e non richiede alcuna caratteristica avanzata.</p>
<h3>Installazione e configurazione</h3>
<p>Il processo di installazione è davvero molto semplice:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># apt-get install qemu-kvm libvirt-bin</pre></div></div>

<p>APT scaricherà tutti i pacchetti necessari per preparare il vostro sistema alla virtualizzazione.</p>
<p>È possibile fare in modo che un utente non privilegiato possa creare e gestire le VM semplicemente aggiungendo l&#8217;utente al gruppo &#8216;libvirt&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># adduser fpedrini libvirt</pre></div></div>

<p>ed effettuare nuovamente la login al sistema per acquisire il nuovo gruppo.</p>
<p>Per verificare che tutto sia funzionante è necessario utilizzare il comando <em>virsh</em>, parte del pacchetto <em>libvirt-bin</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># virsh --connect qemu:///system list</pre></div></div>

<p>che mostrerà un output simile al seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"> Id Name                 State
----------------------------------
&nbsp;
#</pre></div></div>

<p><em>virsh</em> è una shell interattiva che permette di gestire il proprio ambiente di virtualizzazione indipendentemente dall&#8217;Hypervisor (vedi <a href="http://www.miamammausalinux.org/2010/07/introduzione-alla-virtualizzazione-con-kvm/">precedente articolo</a>) utilizzato, di cui comunque parleremo in maniera approfondita più avanti.</p>
<p>Come ultimo passo, per fare in modo che le virtual machine possano connettersi alla stessa rete presso cui il server è collegato, sarà necessario creare un <em>bridge</em>. Viceversa è possibile sfruttare le reti interne gestite da <em>virsh</em> via <em>libvirt</em>, ma questo tipo di configurazione non è trattata in questo articolo.<br />
Per creare un <em>bridge</em> è necessario installare il pacchetto <em>bridge-utils</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># apt-get install bridge-utils</pre></div></div>

<p>E&#8217; quindi sufficiente modificare la configurazione delle interfacce di rete in <em>/etc/network/interfaces</em>, creando una nuova <em>stanza</em> all&#8217;interno del file e fare in modo che l&#8217;interfaccia primaria diventi il bridge (per esempio br0):</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;">auto br0
iface br0 inet static
        address 192.168.0.100
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off</pre></div></div>

<p>Oltre alle normali opzioni (address/network/broadcast/netmask e gateway) sono presenti anche le opzioni usate per la creazione del bridge, e la più importante è <em>bridge_ports</em>, che indica al sistema quale interfaccia fisica deve essere usata per la costruzione del bridge.</p>
<p>Riavviando il servizio di networking:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># /etc/init.d/networking restart</pre></div></div>

<p>il <em>bridge</em> verrà attivato.</p>
<h3>Creazione della prima Macchina Virtuale</h3>
<p>Una volta installati i vari pacchetti necessari per la virtualizzazione e configurata la rete è possibile installare la prima virtual machine, sfruttando il comando <em>virt-install</em>.</p>
<p>Virt-install e&#8217; un tool della suite di <em>libvirt</em> che permette di automatizzare i passaggi di base necessari alla creazione della VM, come ad esempio la creazione del file che fungerà da disco virtuale o la configurazione del file XML che contiene la definizione della Virtual Machine.</p>
<p>Se ad esempio volessimo installare una VM che faccia girare una nuova istanza di <em>Debian Squeeze</em>, il comando da lanciare sarà simile al seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># virt-install --connect qemu:///system -n squeeze-vm -r 512 --vcpus=2 --disk path=/virtuals/squeeze-vm10.img,size=10 -c /dev/cdrom --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate  --hvm --network=bridge:br0</pre></div></div>

<p>Quello che all&#8217;inizio può sembrare un comando difficile e complesso, si rivela in realtà una lista di opzioni abbastanza facile da ricordare quando se ne conosce il significato:</p>
<ul>
<li><em>&#8211;connect qemu:///system</em> indica a virt-install quale deve essere l&#8217;hypervisor target</li>
<li><em>-n</em> indica il nome della Virtual Machine, in questo caso <em>squeeze-vm</em></li>
<li><em>-r</em> indica il quantitativo della ram virtuale in megabytes</li>
<li><em>&#8211;vcpus=2</em> indica il quantitativo di cpu virtuali da assegnare alla VM. Test prestazionali indicano che su processori multicore come quelli odierni, assegnare più di due vcpu ad un sistema guest non porta ad alcun aumento di performance. Il numero di processori dedicati infatti serve semplicemente a far capire al sistema guest che sta girando in un ambiente SMP. Ci penserà l&#8217;hypervisor a dividere il carico sui core del sistema host</li>
<li><em>&#8211;disk-path=/virtuals/squeeze-vm,size=10</em> indica a virt-install dove creare l&#8217;immagine per il disco virtuale e la sua dimensione. Può anche essere usato un dispositivo a blocchi (come ad esempio /dev/sdb1, la prima partizione del secondo disco del sistema host o un volume LVM), in questo caso l&#8217;opzione size non avrà alcun effetto.</li>
<li><em>-c /dev/cdrom</em> indica a virt-install il path dell&#8217;immagine di installazione del sistema guest. È possibile utilizzare anche un normale file .iso</li>
<li><em>&#8211;vnc</em> indica a virt-install di abilitare la console VNC non appena la macchina virtuale è stata creata.</li>
<li><em>&#8211;os-type linux &#8211;os-variant debiansqueeze</em> indicano a virt-install che tipo di sistema operativo verrà installato sul guest</li>
<li><em>&#8211;accelerate &#8211;hvm</em> indica a virt-install che il guest dovrà sfruttare l&#8217;accelerazione fornita da KVM. Ricordiamo che in realtà Qemu e KVM sono legati a doppio filo e il secondo può essere visto come un <em>acceleratore</em> per Qemu. inoltre la seconda opzione specifica che il guest dovrà essere un sistema completamente virtualizzato (e non <em>paravirtualizzato</em> come succederebbe con Xen)</li>
<li><em>&#8211;network=bridge:br0</em> indica a virt-install quale sarà il bridge da usare per connettere questa virtual machine alla rete</li>
</ul>
<p>Una volta premuto invio, l&#8217;output si presenterà in maniera simile alla seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;">Starting install...
Creating domain...                                                                                                                                                      |    0 B     00:00     
Domain installation still in progress. Waiting for installation to complete.</pre></div></div>

<p>a questo punto collegandosi mediante un client <em>VNC</em> (ad esempio <em>vncviewer</em>) al server è possibile completare l&#8217;installazione via console, come se si trattasse di una normale installazione Debian.</p>
<p>Dal momento che VNC non è un protocollo cifrato, è preferibile utilizzare un <em>tunnel SSH</em> (come spiegato in <a href="http://www.miamammausalinux.org/2009/04/ssh-tips-and-tricks-reprise/">questo articolo</a>) dalla propria workstation al server di virtualizzazione, puntando quindi il proprio <em>client VNC</em> alla porta aperta dal tunnel su <em>localhost</em>. </p>
<h3>Gestione delle Virtual Machine</h3>
<p>Gestire le virtual machine è possibile sempre mediante la comoda shell interattiva <em>virsh</em> di cui è stato fatto cenno poco sopra.</p>
<p>Virsh è il tool principe per la gestione delle macchine virtuali in quanto permette di eseguire con semplicità anche i compiti più complessi tramite una comoda interfaccia testuale.</p>
<p>Per lanciare virsh sarà necessario lanciare il comando:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;"># virsh --connect qemu:///system</pre></div></div>

<p>Si presenterà quindi una vera e propria shell interattiva:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;">Welcome to virsh, the virtualization interactive terminal.
&nbsp;
Type:  'help' for help with commands
       'quit' to quit
&nbsp;
virsh #</pre></div></div>

<p>Per ottenere la lista dei comandi disponibili è sufficiente scrivere <em>help</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="code" style="font-family:monospace;">virsh # help
Commands:
&nbsp;
    help            print help
    attach-device   attach device from an XML file
    attach-disk     attach disk device
    attach-interface attach network interface
    autostart       autostart a domain
    capabilities    capabilities
    cd              change the current directory
    connect         (re)connect to hypervisor
    ....
    version         show version
    vncdisplay      vnc display
    snapshot-create Create a snapshot
    snapshot-current Get the current snapshot
    snapshot-delete Delete a domain snapshot
    snapshot-dumpxml Dump XML for a domain snapshot
    snapshot-list   List snapshots for a domain
    snapshot-revert Revert a domain to a snapshot</pre></div></div>

<p>I comandi disponibili per virsh sono moltissimi e permettono di gestire qualsiasi aspetto di una macchina virtuale, dal suo stato, alla gestione dei dischi virtuali, fino alla gestione delle reti interne.</p>
<p>I comandi sicuramente più utilizzati sono quelli relativi all&#8217;esecuzione di un guest, cioè <em>list</em>,<em>start</em>, <em>shutdown</em> e <em>reboot</em>, <em>destroy</em>, <em>suspend</em> e <em>resume</em>.</p>
<p>Tutti questi comandi risultano abbastanza autoesplicativi e, ad eccezione di <em>list</em> tutti necessitano del nome del sistema guest su cui dovranno agire. Il comando <em>list</em> invece accetta due parametri: <em>&#8211;all</em> e <em>&#8211;inactive</em>, che agiranno come filtri per visualizzare rispettivamente tutte le virtual machine o i soli guest inattivi, se invocato senza alcun parametro, verrà visualizzato l&#8217;elenco delle macchine virtuali avviate.</p>
<p>Come detto sopra, i comandi risultano abbastanza chiari, ma è bene fare attenzione ad un paio di dettagli, vediamo con ordine:</p>
<ul>
<li><em>start</em> è sicuramente il più semplice, permette di avviare la virtual machine. In aggiunta, è utile citare il comando <em>autostart</em> che permette di comunicare a libvirt di avviare automaticamente le virtual machine all&#8217;avvio del sistema.</li>
<li><em>shutdown</em> permette di inviare al sistema guest un segnale di shutdown, simulando ciò che accade sulle macchine fisiche quando viene premuto il tasto di accensione</li>
<li><em>reboot</em> invia alla macchina virtuale il segnale di reboot che avvierà un processo di riavvio pulito del sistema.</li>
<li><em>destroy</em> fa in modo che il processo della virtual machine venga ucciso. Dal punto di vista della virtual machine questo è l&#8217;equivalente di un blackout, la corrente viene interrotta bruscamente. Ovviamente come succede per le macchine reali, questo comando potrebbe creare inconsistenze sul filesystem del guest anche se ovviamente non causerà alcun danno reale all&#8217;hardware</li>
<li><em>suspend</em> fa in modo che l&#8217;esecuzione della virtual machine venga interrotta. La ram rimarrà comunque occupata, ma la macchina virtuale non occuperà più alcuna risorsa relativa a CPU, HD e rete fino al resume.</li>
<li><em>resume</em> permette di far uscire la virtual machine dallo stato di ibernazione attivato con <em>suspend</em></li>
</ul>
<p>Menzione particolare meritano anche i comandi <em>save</em> e <em>restore</em>.<br />
<em>Save</em> richiede, oltre al nome della virtual machine anche un parametro aggiuntivo, cioè il filename dove salvare lo <em>stato</em> del sistema guest. Al contrario di <em>suspend</em>, questo comando permette di salvare tutto ciò che concerne la virtual machine (ram, registri del processore, interrupts, eccetera, eccetera&#8230;) in un file, e terminare il processo del sistema guest. Questo fa si  che una Virtual Machine possa essere spostata completamente da un host all&#8217;altro senza che il sistema e le applicazioni al suo interno ne risentano minimamente.<br />
<em>Restore</em>, come la sua controparte richiede come parametro aggiuntivo il file da cui leggere lo stato della virtual machine da ripristinare.</p>
<h3>Conclusioni</h3>
<p>Questo articolo, per quanto lungo, rimane sempre e comunque una rapida introduzione al vasto argomento della virtualizzazione, tematica che grazie ai recenti miglioramenti di libvirt e dei tool a corredo sta diventando sempre più vasta e interessante.</p>
<p>Ciò nonostante credo che usando come base le informazioni qui contenute si possano creare ambienti di virtualizzazione in grado di competere (e in parecchi casi persino surclassare) le soluzioni di virtualizzazione proprietarie più blasonate. </p>
<p>Basti pensare che i grandi player del mondo della virtualizzazione (Amazon, RackSpace e Google, giusto per citare i più grandi) utilizzano soluzioni basate proprio sui software descritti in questo articolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/06/implementazione-di-un-server-di-virtualizzazione-con-kvm/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introduzione alla virtualizzazione con KVM</title>
		<link>http://www.miamammausalinux.org/2010/07/introduzione-alla-virtualizzazione-con-kvm/</link>
		<comments>http://www.miamammausalinux.org/2010/07/introduzione-alla-virtualizzazione-con-kvm/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:30:31 +0000</pubDate>
		<dc:creator>Francesco Pedrini</dc:creator>
				<category><![CDATA[KVM]]></category>
		<category><![CDATA[Virtualizzazione]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1082</guid>
		<description><![CDATA[La virtualizzazione è una tecnologia che sta prendendo sempre più piede nell&#8217;informatica moderna grazie alla diffusione di hardware sempre più potente, in grado di far girare più sistemi operativi in maniera concorrente. In questo articolo introdurremo i concetti di base della virtualizzazione e ci soffermeremo su KVM, uno dei progetti liberi più attivi nel campo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/07/kvm.png" alt="kvm" title="kvm" width="100" height="31" class="alignnone size-full wp-image-1116" /></p>
<p>La virtualizzazione è una tecnologia che sta prendendo sempre più piede nell&#8217;informatica moderna grazie alla diffusione di hardware sempre più potente, in grado di far girare più sistemi operativi in maniera concorrente.</p>
<p>In questo articolo introdurremo i concetti di base della virtualizzazione e ci soffermeremo su <a href="http://www.linux-kvm.org/">KVM</a>, uno dei progetti liberi più attivi nel campo della virtualizzazione.</p>
<p><strong><br />
Pro e contro della virtualizzazione<br />
</strong></p>
<p>La virtualizzazione che in quest&#8217;ultimo periodo occupa un sacco di spazio sulle riviste specializzate e sembra essere l&#8217;ultimo baluardo tecnologico, è in realtà una tecnologia che ha origini addirittura negli anni &#8217;60, nei laboratori di IBM dove nacque il <a href="http://en.wikipedia.org/wiki/IBM_CP-40">CP-40</a>, precursore del sistema CP-67 e di tutta la &#8220;<a href="http://ttp://en.wikipedia.org/wiki/VM_(operating_system)">VM Family</a>&#8221; di IBM, che era alla base dei sistemi operativi per i mainframe IBM s370 prima e s390 dopo.</p>
<p>Ma come mai solo ora la virtualizzazione (e il suo diretto discendente il Cloud Computing) sta tornando così di moda e occupa in maniera prepotente una fetta sempre più grande del mercato?</p>
<p>Come accennato poco sopra, ogni mese l&#8217;hardware diventa sempre più potente ed economico, basti pensare all&#8217;evoluzione dei processori che dai modelli single core di pochi anni fa siamo arrivati a sei core impacchettati sul singolo processore.</p>
<p>Grazie a questa potenza smisurata, siamo in grado di poter far girare più sistemi operativi sullo stesso hardware in maniera concorrente, senza dover ogni volta riavviare per passare da un sistema all&#8217;altro, tramite tecniche di virtualizzazione.</p>
<p>Come dice il nome stesso, la virtualizzazione permette di creare dei sistemi virtuali all&#8217;interno del sistema operativo vero e proprio, in modo da far girare un qualsiasi sistema operativo su dell&#8217;hardware virtuale messo a disposizione del sistema di virtualizzazione.</p>
<p>In questo modo, avendo abbastanza risorse hardware a disposizione potremo far girare sulle nostre workstation una serie sterminata di virtual machine con i più disparati sistemi operativi, da varie distribuzioni Linux ad altri sistemi proprietari come Windows e MacOs (a patto di rispettare le licenze, ovviamente!).</p>
<p>Il vantaggio più grande è proprio quello di poter disporre di sistemi di test per i più svariati usi, ad esempio uno sviluppatore potrà testare i propri software sui vari sistemi senza avere una pletora di installazioni diverse, mentre un sistemista potrà testare diverse configurazioni in tutta tranquillità senza dover cercare server per creare gli ambienti di test.</p>
<p>Se ci spostiamo invece su ambienti più grandi, come quelli aziendali, la virtualizzazione permette di ridurre i costi e consolidare la propria infrastruttura aziendale, accorpando su un sistema fisico più macchine virtuali, in modo da ridurre sia il costo dell&#8217;hardware che i consumi energetici (che spesso e volentieri sono la spesa più grande del reparto IT delle aziende).<br />
Il cloud computing porta addirittura al limite il concetto di virtualizzazione, creando pool di risorse virtuali sparse su vari nodi, proprio nell&#8217;ottica di sfruttare sempre meglio le risorse inutilizzate dei vari server.</p>
<p>Ovviamente non è tutto oro quello che luccica, virtualizzare un sistema, specialmente quando si tratta di server, pone seri problemi di performance e ridondanza, visto che bisogna calcolare con molta precisione quante macchine virtuali potranno essere ospitate dal singolo sistema di virtualizzazione per evitare di sovraccaricare la macchina fisica e avere performance poco soddisfacenti, e predisporre sistemi di migrazione automatici delle virtual machine su altri nodi di virtualizzazione per evitare che in caso di guasto hardware si perda una serie di servizi che possono essere vitali, ma questi sono temi decisamente avanzati rispetto allo scopo di questo articolo.</p>
<p><strong><br />
KVM in dettaglio<br />
</strong><br />
KVM sta per Kernel-based Virtual Machine e, come dice il nome, è composto da un modulo integrato nel kernel linux (dalla release 2.6.20) che permette di sfruttare le estensioni di virtualizzazione dei processori moderni.</p>
<p>Di per sè KVM non effettua nessun tipo di emulazione, si limita ad attivare le estensioni della CPU e a mettere a disposizione dello userspace un dispositivo in grado di riservare le risorse hardware da mettere a disposizione dei sistemi virtuali.<br />
Un programma userspace (in particolare le <em>libvirt</em> o <em>QEMU</em>, come vedremo in fase di implementazione nel prossimo articolo) si occuperà di richiedere al modulo di riservare questa o quella risorsa e di svolgere le operazioni necessarie per l&#8217;esecuzione della VM.<br />
Inoltre si KVM occupa di aggiungere una terza modalità all&#8217;esecuzione del kernel, la <em>Guest Mode</em>.</p>
<p>Normalmente il kernel ha due modalità di esecuzione, la <em>Kernel mode </em>(o <em>Ring0</em>) in cui solo software fidato (quindi, di fatto, solo il kernel) può essere eseguito con la massima priorità per operazioni privilegiate come l&#8217;accesso diretto all&#8217;hardware, e la <em>User Mode</em>, in cui vengono eseguite tutte le operazioni non privilegiate relative ai programmi userspace.</p>
<p>L&#8217;introduzione di KVM ha introdotto la <em>Guest Mode</em>, una modalità particolare in cui il kernel del sistema <em>host</em> (che è il sistema vero e proprio che ospita i sistemi <em>guest</em>, cioè le virtual machine) permette ai kernel dei sistemi virtualizzati di eseguire operazioni privilegiate come l&#8217;accesso diretto all&#8217;hardware virtuale.</p>
<p>Il punto di forza di KVM sta proprio in questa sua semplicità, il cuore del sistema di virtualizzazione (l&#8217;hypervisor come vedremo poco più avanti) svolge poche fondamentali operazioni, mentre tutta la parte di emulazione dell&#8217;hardware viene demandata a componenti esterne e specializzate (come le libvirt o Qemu).</p>
<p>La semplicità dell&#8217;hypervisor è però legata anche al suo punto debole (se così si può definire) di KVM: la dipendenza da hardware specializzato.<br />
KVM riesce ad essere così semplice e rapido proprio grazie all&#8217;utilizzo delle estensioni speciali inserite nei processori x86 di ultima generazione: AMD-V per i processori AMD e VT-x per i processori Intel, senza le quali KVM non può proprio funzionare.</p>
<p><strong><br />
Come funziona<br />
</strong></p>
<p>Abbiamo parlato dei vantaggi e svantaggi della virtualizzazione, ed in particolare di KVM, ma esattamente cosa sta sotto a questa meravigliosa tecnologia?<br />
In tutti i sistemi di virtualizzazione dai primi sistemi di IBM (il CP-40 nato alla fine degli anni &#8217;60), passando per Xen, VMWare e KVM troviamo un elemento comune chiamato <a href="http://en.wikipedia.org/wiki/Hypervisor">Hypervisor</a>.</p>
<p>L&#8217;hypervisor è quel componente (sia esso hardware come nel CP-40 di IBM o software come avviene oggi) che si inserisce tra i sistemi guest (le virtual machine) e l&#8217;hardware sottostante e gestisce i meccanismi di virtualizzazione dell&#8217;hardware da mettere a disposizione dei sistemi guest.</p>
<div id="attachment_1085" class="wp-caption aligncenter" style="width: 262px"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/07/Hypervisor1.png" alt="Hypervisor Architecture" width="252" height="157" class="size-full wp-image-1085" /><p class="wp-caption-text">Architettura di un sistema di virtualizzazione</p></div>
<p>Si possono riconoscere due tipologie di hypervisor, i cosiddetti &#8220;Native&#8221; (o &#8220;Bare Metal&#8221;) e gli hypervisor &#8220;Hosted&#8221;.<br />
La prima famiglia è la più anziana e trova le sue origini sempre nei laboratori di IBM: si tratta di un piccolissimo strato di software che gira direttamente su hardware specializzato e permette la gestione dei sistemi host. </p>
<p>I sistemi &#8216;Hosted&#8217; invece, sono i più giovani, si tratta di hypervisor che girano come processo all&#8217;interno di sistemi operativi general purpose, i software di virtualizzazione come <a href="http://www.virtualbox.org/">VirtualBox</a> o VMWare Workstation ne sono  un esempio.</p>
<p>Ovviamente come in tutte le cose la distinzione non è più così netta, KVM ad esempio è un ibrido tra le due famiglie dal momento che necessita sia di hardware specializzato (le estensioni per la virtualizzazione del processore), sia di un sistema operativo che permetta a tutti i suoi compontenti di essere eseguiti.</p>
<div id="attachment_1092" class="wp-caption aligncenter" style="width: 282px"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/07/Hypervisor-KVM1.png" alt="Hypervisor-KVM" width="272" height="181" class="size-full wp-image-1092" /><p class="wp-caption-text">Architettura di KVM</p></div>
<p>Come si può vedere dalla figura, la parte dell&#8217;hypervisor (in arancione) è divisa in due parti, la prima legata allo userspace, le <em>libvirt</em> e <em>QEMU</em> che si occupano di fornire la parte di emulazione dell&#8217;hardware (forniscono cioè i virtual device che verranno visti dai sistemi guest), mentre la seconda risiede all&#8217;interno del kernel, il modulo di KVM, l&#8217;hypervisor appunto che permette la gestione dell&#8217;hardware di virtualizzazione (le famose estensioni VTX e AMD-V) e che espone un device file in /dev/kvm usato per associare i sistemi guest alle risorse assegnate.</p>
<p><strong><br />
Conclusioni<br />
</strong></p>
<p>La virtualizzazione è un mercato in continua espansione, sempre più vendor stanno impegnando risorse nella ricerca e nello sviluppo di soluzioni alternative.<br />
In questo calderone di soluzioni emergenti, il primo beneficiario è senza dubbio Linux, che grazie alla sua architettura flessibile sta giocando un ruolo chiave per lo sviluppo di nuove tecnologie come KVM che, assieme a <a href="http://lguest.ozlabs.org/">lguest</a> e <a href="http://www.xen.org/">Xen</a> stanno portando a grossi cambiamenti volti all&#8217;incremento di performance di tutto il kernel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/07/introduzione-alla-virtualizzazione-con-kvm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

