Virtualizzazione tramite KVM

Considerazioni teoriche generali

Il programma offre una IGU per la gestione di macchine virtuali attraverso la libreria libvirt. Permette la creazione di dischi virtuali tramite l'utilizzo di uno dei seguenti formati: raw, qcow, qcow2, cow, qed, vmdk e vpc. Potete gestire l'hardware virtuale, incluso la RAM e le CPU.
Potete controllare le macchine sia locali che remote in modalità grafica oppure testuale, salvare e ripristinare lo stato del SO, così come mettere in pausa o riavviare, tutto tramite la comoda interfaccia grafica. Potete inoltre monitorare il carico della CPU, l'uso della memoria e dell' I/O della rete. È possibile infine aggiungere diverse tipologie di hardware alla macchina virtuale (inclusi dispositivi USB e dischi).

Il programma responsabile delle operazioni di fondo di virt-manager utilizza libvirt per la gestione di macchine virtuali Xen, QEMU & KVM.
L'interfaccia grafica è stata testata principalmente con Xen e QEMU, ma venne originariamente progettata affinché fosse portabile verso un qualunque backend di virtualizzazione supportato da libvirt.

Installazione e impostazioni essenziali

Nota introduttiva
Noi raccomandiamo di revisionare in dettaglio le impostazioni prima di incominciare con la creazione e la gestione di macchine virtuali. Di default l'area di immagazzinamento non è situata in
/home e per questo motivo vi potrebbe essere una carenza di spazio sul disco duro, a seconda della configurazione da voi scelta.

1. Assicuratevi che il vostro hardware supporti la virtualizzazione.

Eseguite il seguente comando in un terminale:

grep -E 'svm|vmx' /proc/cpuinfo

Se non ricevete alcun output controllate le impostazioni del BIOS e vedete se vi è la funzione per attivare la virtualizzazione.
Se l'opzione suddetta è assente dal vostro BIOS molto probabilmente il processore del vostro computer non supporta la virtualizzazione.

2. Installate i necessari pacchetti.

sudo apt-get install libvirt-bin qemu-kvm bridge-utils virt-viewer virt-manager

3. demone libvirt.

Una volta completata l'installazione dei pacchetti avviate il demone libvirt. Anche se dovrebbe partire in automatico, assicuratevi comunque di eseguire il seguente comando:

sudo /etc/init.d/libvirt-bin restart

Nota: status/stop/start/restart sono le opzioni del comando.

Aggiungete l'attuale utente al gruppo "libvirtd".

sudo adduser $UTENTE libvirtd

4. Collegate l'interfaccia di rete.

Aprite il file "/etc/network/interfaces" con un editore di testo e apportate le dovute modifiche, aiutandovi con il file che vi diamo qui sotto come esempio.

Esempio da seguire per reti a ip statico

##############################################################################
auto lo
iface lo inet loopback

auto eth0
iface   eth0    inet    manual

auto br0
iface   br0     inet    static
        address         192.168.1.10
        netmask         255.255.255.0
        gateway         192.168.1.1
        bridge_ports    eth0
#        bridge_stp      off  # uncomment this parameters, 
#        bridge_fd       0    # if you face any issues
#        bridge_maxwait  0    # these 3 parameters are related
                              # to the spanning tree protocol  
                              # to prevent looping of data packets
                              # in bridge mode

###############################################################################

Esempio da seguire per le connessioni dhcp

###############################################################################
auto lo
iface lo inet loopback

auto eth0
iface   eth0    inet    manual

auto br0
iface   br0     inet    dhcp
        bridge_ports    eth0
#        bridge_stp      off
#        bridge_fd       0
#        bridge_maxwait  0

###############################################################################

Vedasi per ulteriori dettagli il manuale di bridge utils.

man bridge-utils-interfaces

Riavviate il network con le impostazioni aggiornate:

 sudo ifdown br0

Seguito da:

 sudo ifup br0

Nota: Non è possibile utilizzare "sudo /etc/init.d/networking restart", la funzione non è supportata da Trisquel 7.0 in poi.

4.1 Controllate le connessioni di rete.

1. Eseguite ifconfig per vedere se le interfacce di rete sono attivate.

br0       Link encap:Ethernet  HWaddr 00:78:12:81:05:a6  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:22ff:fe41:5e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3382 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3420 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3187503 (3.1 MB)  TX bytes:527993 (527.9 KB)

eth0      Link encap:Ethernet  HWaddr 00:78:12:81:05:a6  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9631 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9736 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:10185985 (10.1 MB)  TX bytes:1163285 (1.1 MB)
          Interrupt:42 Base address:0x6000 

2. Fate un ping al vostro indirizzo gateway:

ping 192.168.1.1

3. Fate un ping a un qualunque indirizzo IP oppure al vostro server DNS.

ping 106.186.17.181

#Questo è un server DNS di Opennic.

4. Fate un ping a "trisquel.info".

Se fino a questo punto non avete riscontrato alcun problema, siete pronti per incominciare con l'installazione della vostra macchina virtuale.

5. Gestore delle macchine virtuali.
Avviate il gestore delle macchine virtuali:

virt-manager

Non vi è alcun bisogno di eseguire il comando in qualità di root o "super user". La pratica di eseguire programmi in qualità di root o super-user (sudo)
è altamente sconsigliata per motivi di sicurezza informatica.

Le seguenti schermate vi aiuteranno nella creazione di una macchina virtuale piuttosto essenziale.






Controllo dell'accesso

Affinché possa accedere al socket di libvirt e gestire le macchine virtuali, l'utente deve far parte del gruppo "libvirt" o essere dotato di privilegi
elevati (superuser). È in alternativa possibile utilizzare l'url di sessione "qemu:///session".

Connessione di un dispositivo usb

Nota: La macchina ospite con la quale volete condividere il dispositivo deve essere spenta durante la configurazione, nel caso si tratti di una macchina virtuale locale.
Recatevi nel menu di info del hardware per il vostro ospite e cliccate su "Aggiungete Hardware". Nella sezione "dispositivo USB host" selezionate il dispositivo.
Infine cliccate su "Terminare". Se l'operazione è stata eseguita correttamente il dispositivo dovrebbe essere riconosciuto e montabile una volta avviato l'ospite.

Attivazione della clipboard bidirezionale (host<->guest)

Nota introduttiva
Per poter supportare la clipboard bidirezionale, la macchina ospite deve avere installato il pacchetto spice-vdagent, pacchetto che non è però contenuto in tutte le distribuzioni di GNU/linuz. Controllate il repositorio di software, e in mancanza del pacchetto, compilate il codice sorgente.
Invece di VNC, verrà usato il protocollo SPICE così come la grafica QLX. Non avviate alcuna macchina virtuale fino a quando non sia giunto il tempo di installare
pacchetti nella macchina ospite. Precisiamo da subito che la modalità video predefinita è Cirrus.

I pacchetti necessari al ospite

Per permettere la visione di ospiti SPICE è necessario installare i seguenti pacchetti.

sudo apt-get install python-spice-client-gtk 

Chiudete e riavviate virt-manager per caricare il modulo; un riavvio completo del pc potrebbe essere necessario nel caso in cui vediate un messaggio di errore al momento della visione dell'ospite.

Configurazione dell'hardware della macchina virtuale

Aprite il menu con i dettagli hardware per l'ospite che state tentando di configurare. Nella sezione video scegliete "QXL". Nella sezione dello schermo scegliete "SPICE". Applicate le modifiche. Una volta letto l'avviso accettate di installare i canali SPICE sul sistema operativo ospite.

Configurazione del SO ospite

Attivate il sistema operativo ospite e verificate di poter aprire il programma di visualizzazione. Altrimenti riavviate il computer.

Installate il pacchetto spice-vdagent e controllate l'output per accertarvi che il servizio sia avviato (se state eseguendo l'interfaccia grafica SPICE e QXL il servizio dovrebbe essere attivato automaticamente in Trisquel). Il comando è il seguente:

sudo apt-get install spice-vdagent

Riavviate il sistema operativo ospite.

Una volta riavviato, accertatevi che il servizio sia in esecuzione.

sudo service spice-vdagent status

Se in esecuzione, dovreste ora riuscire a copiare ed incollare bi-direzionalmente.

Attivazione della clipboard multi-direzionale (host<->guest)

Da testare.
Nota: dovrete installare spice-agent per tuti i SO ospiti.

Condivisione dei file

SFTP, FTP e CIFS sono modi molto accessibili per condividere file all'interno di una rete. Per spiegazioni sopra l'aggiunta di un file sistem "pass-through" date un'occhiata alla [http://www.linux-kvm.org/page/9p_virtio documentazione ufficiale del progetto].

Soluzione a problemi noti

CPU Core2Duo

Alcuni modelli di CPU della Intel Core2Duo non supportano la virtualizzazione.
Eseguite il seguente comando.

grep name /proc/cpuinfo

Verificate sul sito del produttore se la virtualizzazione è supportata.

Insufficiente performance grafica

Varia notevolmente secondo la specifica configurazione, l'hardware e il carico di lavoro generale, ma in ogni caso l'uso del protocollo SPICE e grafica QXL
attraverso VNC può migliorare la performance. Vedasi "Attivazione della clipboard multi-direzionale" più in alto.
Vedasi "Caratteri mancanti durante l'uso del protocollo SPICE con QXL" quì sotto.
È inoltre una buona idea disattivare il compositor. Vedasi "Attivazione della clipboard bidirezionale" più in alto (GNOME Flashback).

Caratteri mancanti durante l'uso del protocollo SPICE con QXL
Frequentemente alcune delle lettere in tutte le finestre, panelli e desktop spariranno senza ragione apparente. La risoluzione dello schermo sembra non avere niente a che fare con il problema.
Questa modifica può migliorare la performance grafica.

Abbiamo confermato il problema in Trisquel 7.0 (LXDE and GNOME) e Ubuntu 14.04 usndo SPICE e QXL (spice-vdagent installato nel SO ospite).

Revisionate il file di configurazione di grub:

sudo nano /etc/default/grub

Modificate il valore di "GRUB_CMDLINE_LINUX_DEFAULT=" per includere il parametro "nomodeset" , così come quì sotto:

GRUB_CMDLINE_LINUX_DEFAULT="splash quiet nomodeset"

Infine, aggiornate grub:

sudo update-grub

Dopo un riavvio, il problema sembra essere risolto.

Rimando:
Red Hat Bugzilla (Bug Report)
Ubuntu Forumns (Discussion)
Ubuntu Bugs - Launchpad (Bug Report)

Vi è pure una segnalazione di bug in Ubuntu 15.05 data 29/01/2015.

Risoluzione, ridimensionamento e performance grafica

I seguenti risultati sono stati osservati nei seguenti sistemi: Trisquel 7.0 host (GNOME Flashback), Trisquel 7.0 guest (Mini - LXDE), local guest, bridged networking su eth0, 2500 MB di RAM e 2 CPU sull'ospite, Samsung NP530-U4B.
Cirrus sembra essere limitato a 1280x768 ed è inoltre compatibile solo con VNC.
VGA ha il limite di 1280x768 , ma è più performante rispetto a Cirrus.
QLX è compatibile sia con VNC che con SPICE. Sembra più veloce rispetto ai precedenti. Sembra pure più reattivo in VNC rispetto a SPICE, ma vi è più "screen tearing".
Il puntatore del mouse bianco non ha un bel aspetto quando sospeso sopra le finestre grigie di GNOME Flashback. Non abbiamo trovato un modo per ovviare.
La risoluzione dello schermo raggiunge per lo meno i 1920x1080 pixel in entrambi i protocolli. Non abbiamo testato Xen o VMVGA.

Lista di cose da fare

Testare e ottimizzare il rendimento grafico.

VFIO (HIGH PRIOTRITY)
Questo modulo/strumento/concetto permette di raggiungere fino al 99% dei risultati di benchmark in macchine virtuali rispetto al SO ospite.
Sono richieste due schede grafiche. Il concetto risiede nel lasciar passare una delle due schede grafiche verso il sistema operativo ospite in modo che possa avere diretto controllo sul hardware.
Quì troverete la documentazione (inglese):
Kernel.org Documentation (very complete)
RHEL VFIO PDF
Debian Wiki (seems a bit incomplete)
Arch Forums (160 pages, very dense)
Gaming Example with Nvidia
Blog Post on seting up VFIO
Wikipedia IOMMU Briefing"

Revisioni

10/27/2016 - 22:14
SuperTramp83