\documentclass{beamer}

\usetheme{Warsaw}

\usepackage[italian]{babel}
\usepackage[utf8]{inputenc}
\usepackage{url}

\setbeamercovered{transparent}

\title{Virtualizzazione con Linux}
\subtitle{Panoramica sulle tecnologie di virtualizzazione disponibili}

\author{Simone Piccardi}
\institute{
Truelite Srl\\
Via Monferrato, 6 Firenze\\
\url{www.truelite.it}
}


\date{10 Giugno 2012}

\logo{\includegraphics[height=0.5cm,keepaspectratio]{logo-vettoriale.pdf}}

\begin{document}

\frame{\titlepage}

%\section[Sommario]{}
\frame{
  \frametitle{Di cosa parlerò}
  \tableofcontents
}


\section{Introduzione}


\frame
{
  \frametitle{Perché la virtualizzazione}

  I server attuali sono spesso sotto-utilizzati:
  \begin{itemize}
  \item multiprocessori con carichi poco significativi
  \item grandi quantità di memoria, usata come cache
  \item dischi di dimensioni sempre maggiori 
  \end{itemize}
  è possibile tenere su una macchina fisica quello che prima stava su molte

}


\frame
{
  \frametitle{Vantaggi della virtualizzazione}

  La virtualizzazione consente di creare più macchine virtuali su una sola
  macchina reale:
  \begin{itemize}
  \item si possono consolidare su una sola macchina diversi server
  \item si possono utilizzare diversi sistemi operativi su una sola macchina
  \item si possono fornire risorse in maniera dinamica secondo le esigenze
  \item si risparmia energia elettrica usando meglio le risorse hardware
  \end{itemize}
}


\frame
{
  \frametitle{Vantaggi della virtualizzazione}

  La virtualizzazione consente di separare la manutenzione di hardware e
  software:
  \begin{itemize}
  \item si possono separare macchine virtuali con diversi livelli di
    sicurezza, dividendo i rischi
  \item si possono mantenere per compatibilità su hardware recente vecchie
    versioni di sistema operativo
  \item si può gestire l'aggiornamento delle macchine fisiche separatamente da
    quello delle macchine virtuali
  \item si possono creare facilmente copie delle macchine virtuali (a scopo di
    backup o di snapshot)
  \end{itemize}
}


\frame
{
  \frametitle{Svantaggi della virtualizzazione}

  Gli svantaggi in realtà sono molto pochi:
  \begin{itemize}
  \item perdita di prestazioni, ma poco significativa nella maggior parte dei
    casi, e sempre minore grazie al supporto hardware
  \item minore sicurezza, in caso di compromissione del sistema di
    virtualizzazione si può prendere il controllo di molte macchine virtuali
  \end{itemize}
  lo svantaggio più significativo è quello relativo alla sicurezza

}


\frame
{
  \frametitle{Tipi di virtualizzazione}

  Le tecnologie di virtualizzazione si possono dividere sommariamente in tre
  categorie:
  \begin{itemize}
  \item \textbf{container} si usa il kernel per creare un \textsl{contenitore}
    in cui far girare un sistema operativo \textsl{ospite} all'interno di un
    ambiente virtuale.
  \item \textbf{software virtualization} si emula in software un intero
    computer fornendo un hardware virtuale su cui fare una installazione del
    tutto identica a quella di una macchina fisica
  \item \textbf{hardware virtualization} si sfrutta il supporto hardware dei
    moderni processori per emulare in maniera efficiente intero computer 
  \end{itemize}
}

\frame
{
  \frametitle{Container: Vantaggi e svantaggi}

  Vantaggi:
  \begin{itemize}
  \item prestazioni, lo stesso kernel esegue tutti i programmi di tutte le
    macchine virtuali
  \item ottimizzazione delle risorse, la memoria ed il disco sono sfruttati
    integralmente senza rigide allocazioni
  \end{itemize}
  Svantaggi:
  \begin{itemize}
  \item non si possono virtualizzare sistemi operativi diversi
  \end{itemize}
}

\frame
{
  \frametitle{Software virtualization: Vantaggi e svantaggi}

  Vantaggi:
  \begin{itemize}
  \item si possono utilizzare anche altri sistemi operativi
  \item non necessita di processori recenti con supporto hardware
  \item in certi casi si può utilizzare anche su architetture hardware diverse
  \end{itemize}
  Svantaggi:
  \begin{itemize}
  \item prestazioni ridotte di esecuzione, si esegue un emulatore su cui gira
    un sistema operativo che esegue altri programmi
  \item prestazioni ridotte di I/O, si devono emulare le periferiche
  \end{itemize}
}


\frame
{
  \frametitle{Hardware virtualization: Vantaggi e svantaggi}

  Vantaggi:
  \begin{itemize}
  \item si possono utilizzare anche altri sistemi operativi
  \item alta velocità per l'esecuzione nativa del sistema ospite
  \end{itemize}
  Svantaggi:
  \begin{itemize}
  \item necessita di processori recenti con il supporto hardware
  \end{itemize}
}


\section{Panoramica tecnologie}

\frame
{
  \frametitle{Tecnologie disponibili: container}

  Le tecnologie di virtualizzazione basate sulla realizzazione di
  \textit{container} sono: 
  \begin{itemize}
  \item \textbf{LXC}
  \item \textbf{linux-vserver}
  \item \textbf{OpenVZ}
  \end{itemize}
}

\frame
{
  \frametitle{linux-vserver}

  Una delle soluzioni presenti da maggior tempo:
  \begin{itemize}
  \item usa kernel modificato per la separazione dei server virtuali
  \item non richiede supporto dal processore
  \item accesso diretto all'hardware tramite il kernel in esecuzione
  \item qualche problema per la separazione della rete
  \item non supportato nel kernel ufficiale (e sviluppo quasi fermo)
  \end{itemize}
  molto veloce, molto efficiente, funzionalità ridotte.
}

\frame
{
  \frametitle{LXC}

  L'ultimo arrivato (iniziato con il kernel 2.6.19, usabile dal 2.6.26):
  \begin{itemize}
  \item usa le funzionalità già presenti nel kernel
  \item separa i server virtuali con l'uso di \textit{namespace}
  \item non richiede supporto dal processore
  \item accesso diretto all'hardware tramite il kernel in esecuzione
  \item procede di pari passo con lo sviluppo del kernel ufficiale
  \end{itemize}
  molto veloce ed efficiente, funzionalità ridotte, ma promette bene.

  }

\frame
{
  \frametitle{OpenVZ}

  Nasce come applicazione proprietaria, recentemente rilasciata come GPL:
  \begin{itemize}
  \item usa kernel modificato per la separazione dei server virtuali
  \item sfrutta dove possibile le funzionalità già presenti nel kernel
  \item non richiede supporto dal processore
  \item supporta diversi modelli di rete e live migration
  \end{itemize}
  ambiente complesso, molto veloce ed efficiente, molte funzionalità, sviluppo
  costante.

}


\frame
{
  \frametitle{Tecnologie disponibili: software virtualization}

  Le tecnologie di virtualizzazione basate sulla virtualizzazione software
  sono:
  \begin{itemize}
  \item \textbf{qemu}
  \item \textbf{kqemu}
  \item \textbf{Virtualbox}
  \end{itemize}
}


\frame
{
  \frametitle{qemu}

  E' stata una delle prime macchine virtuali create su Linux:
  \begin{itemize}
  \item emula completamente un PC, comprese alcune periferiche, vi si può
    installare qualunque sistema operativo
  \item eseguito come programma dal sistema ospite, non richiede modifiche al
    kernel, né supporto da parte del processore
  \item usa come sistema ospite Linux, FreeBSD, Solaris, MacOS e Windows
  \item gira su diverse piattaforme ospite (x86, PPC) e emula diverse
    piattaforme hardware (x86, PPC, ARM, SPARC, MIPS)
  \end{itemize}
  relativamente semplice da usare, molto lento, utilizza molta memoria,
  efficiente nell'uso dello spazio disco.

}

\frame
{
  \frametitle{kqemu}

  La versione originale di \textbf{qemu} è molto lenta, \textbf{kqemu}:
  \begin{itemize}
  \item usa modulo del kernel per accelerare l'esecuzione dei sistema ospitato
  \item il sistema operativo e le applicazioni ospiti sono eseguiti
    direttamente dal processore
  \item funziona solo per emulazioni di piattaforma x86 su x86
  \item disponibile solo sotto Linux, non può essere usato per installare
    Windows 
  \item non supportato dal kernel ufficiale, sviluppo fermo
  \end{itemize}
  relativamente semplice da usare, meno lento, utilizza molta memoria,
  efficiente nell'uso dello spazio disco.

}

\frame
{
  \frametitle{VirtualBox}

  Era una applicazione proprietaria, recentemente rilasciata sotto GPL:
  \begin{itemize}
  \item approccio analogo a \textbf{kqemu}, accelerazione tramite moduli del
    kernel
  \item multi-piattaforma, può essere eseguita su Linux, Windows, Solaris,
    MacOSX
  \item può eseguire come sistema ospite qualunque sistema operativo
  \item non supportato nel kernel ufficiale ma molto sviluppato
  \end{itemize}
  estremamente semplice, ottima interfaccia di gestione, più veloce di
  \textbf{kqemu}, richiede parecchie risorse (memoria e spazio disco). 

 }


\frame
{
  \frametitle{Tecnologie disponibili: hardware virtualization}

  Le tecnologie di virtualizzazione basate sulla virtualizzazione assistita
  dall'hardware sono:
  \begin{itemize}
  \item \textbf{Xen} paravirtualization
  \item \textbf{Xen} full virtualization
  \item \textbf{KVM}
  \end{itemize}
}

\frame
{
  \frametitle{Xen paravirtualization}

  La prima versione, basata sul concetto di \textit{hypervisor}, consente di
  eseguire più sistemi operativi:
  \begin{itemize}
  \item uno strato di controllo, l'\textit{hypervisor}, esegue un kernel
    principale (\texttt{dom0}) che esegue le restanti istanze virtuali
    (\texttt{domU}).
  \item senza supporto hardware occorrono delle modifiche al sistema operativo
    eseguito (disponibili per Linux e BSD)
  \item funzionalità avanzate come live-migration, interfacce virtuali,
    accesso a disco veloce con LVM.
  \item richiede modifiche non supportate dal kernel ufficiale
  \end{itemize}
  complesso da usare, molto veloce, ottime funzionalità, necessita di
  parecchie risorse (in memoria e spazio disco).

}



\frame
{
  \frametitle{Xen full virtualization}

  Versione che usa il supporto hardware:
  \begin{itemize}
  \item viene usato ancora l'\textit{hypervisor} ma può emulare una macchina
    fisica senza modifiche al sistema operativo eseguito
  \item l'accesso alle periferiche reali è più lento in quanto simulato
    appoggiandosi a \texttt{qemu}
  \item mantiene le funzionalità avanzate di live-migration, interfacce
    virtuali, dischi su LVM.
  \item quasi completamente supportato con le ultime versioni del kernel
    ufficiale
  \end{itemize}
  complesso da usare, molto veloce, ottime funzionalità, necessita di
  parecchie risorse (memoria e spazio disco).

}

\frame
{
  \frametitle{KVM}

  E' la tecnologia di virtualizzazione \textsl{nativa} su Linux:
  \begin{itemize}
  \item infrastruttura generica per la creazione di macchine virtuali
  \item parte del kernel ufficiale a partire dalla versione 2.6.20
  \item usa una versione modificata di \texttt{qemu} per fornire il supporto
    delle periferiche 
  \item funzionalità avanzate di live-migration, interfacce virtuali, dischi
    su LVM
  \end{itemize}
  complesso da usare, molto veloce, necessita di parecchie risorse.  

}


\section{Approfondimenti}
\label{sec:approfondimenti}


\frame
{
  \frametitle{Cosa usare}

  Ci concentreremo su KVM e OpenVZ per i seguenti motivi:
  \begin{itemize}
  \item prodotti maturi, in continuo sviluppo e stabili
  \item prodotti di punta nella relativa tipologia
  \item disponibilità di una buona interfaccia di gestione via web
  \end{itemize}
}

\frame
{
  \frametitle{OpenVZ}

  \begin{itemize}
  \item ogni istanza (\textit{virtual environment} o VE) è completamente
    separata dalle altre (riguardo file, processi, rete e IPC)
  \item ogni VE si comporta come un sistema ordinario, si può installare e
    configurare qualunque servizio
  \item il sistema consente un controllo dettagliatissimo delle risorse
    associate a ciascun VE
  \item la rete è virtualizzata e la si può anche far gestire completamente
    dall'interno di ciascun VE
  \item sono supportate funzionalità avanzate come la live-migration
  \end{itemize}
}


\frame
{
  \frametitle{OpenVZ}

  Alcune funzionalità di notevole interesse:
  \begin{itemize}
  \item supporto per la realizzazione di ``\textit{template}'' che rendono
    immediata l'installazione di macchine simili
  \item supporto per il backup completo di una istanza senza dover fermare la
    stessa (snapshot con LVM) o con downtime minimale
  \item spostamento dei dati da un VE all'altro con una semplice copia di file
    dalla macchina ospite
  \end{itemize}
  è una piattaforma ideale da usare per consolidare server linux, anche con
  distribuzioni diverse

}

\frame
{
  \frametitle{KVM}

  \begin{itemize}
  \item il sistema di ogni istanza viene eseguito a velocità nativa grazie al
    supporto hardware dei processori moderni
  \item è disponibile su piattaforma x86, con porting in corso per ARM e PPC
  \item può utilizzare come disco virtuale sia file che volumi logici
  \item emulazione dell'hardware con \texttt{qemu}, ma per disco e rete sono
    disponibili dispositivi virtuali per un accesso ad alta velocità
  \item le istanze eseguite ottengono una scheda di rete virtuale vista in
    bridge dal sistema ospite
  \item uso più efficace della memoria: supporto per il \textit{memory
      ballooning} e l'unione di pagine identiche (KSM)
  \end{itemize}

}


\frame
{
  \frametitle{KVM}

  Le funzionalità di maggiore interesse di KVM:
  \begin{itemize}
  \item la virtualizzazione completa consente l'installazione di qualunque
    sistema operativo 
  \item supporta accesso diretto (con hotplug) di una istanza ai dispositivi
    PCI della macchina ospite
  \item supporta l'accesso ai dispositivi USB dalla macchina ospite
  \item live-migration delle istanze in presenza di storage con supporto
    dell'accesso condiviso
  \end{itemize}
  adatto all'installazione di altri sistemi operativi o macchine virtuali che
  necessitano accesso all'hardware della macchina ospite

}


\frame
{
  \frametitle{Proxmox}

  Insieme di pacchetti (o distribuzione Debian-based) che integra OpenVZ e
  KVM:
  \begin{itemize}
  \item interfaccia di gestione via web, console e grafica accessibile in
    remoto via VNC
  \item supporto per configurazioni cluster, storage su iSCSI, LVM, directory
    locali e NFS
  \item supporto per la gestione di live migration
  \item supporto per il backup ed il ripristino delle macchine virtuali
  \item supporto per lo spostamento delle macchine virtuali da un nodo
    all'altro del cluster.
  \end{itemize}
}


\section{Conclusioni}
\label{sec:conclusioni}

\frame
{
  \frametitle{Riferimenti}
  \begin{itemize}
  \item \url{http://www.truelite.it}
  \item \url{http://www.openvz.org}
  \item \url{http://www.linux-kvm.org}
  \item \url{http://www.proxmox.com}
  \end{itemize}
}


\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 

% LocalWords:  cache kernel virtualization LXC linux vserver OpenVZ namespace
% LocalWords:  live migration qemu kqemu Virtualbox FreeBSD Solaris MacOS PPC
% LocalWords:  Windows ARM SPARC MIPS VirtualBox MacOSX Xen paravirtualization
% LocalWords:  KVM hypervisor dom domU BSD LVM squeeze template Proxmox based
% LocalWords:  VNC storage iSCSI NFS virtual environment IPC snapshot downtime
% LocalWords:  porting memory ballooning KSM hotplug USB
