KVM: Virtualización a nivel kernel


Linus Torvalds ya nos tiene acostumbrados a la inclusión de más y sorprendentes novedades dentro del Kernel Linux.
La gran vedette a partir de la versión 2.6.20 es la inclusión del modulo KVM.

Que es KVM?
Como sus siglas indican, es una máquina virtual a nivel kernel.

Un poco de teoría:
Hoy en día hay dos métodos de virtualización.

Virtualización completa: Existe una capa entre el sistema operativo virtualizado y el hardware como un método para arbitrar el acceso. Esta capa se denomina hypervisor o Monitor de máquina virtual (del ingles Virtual Machine Monitor VMM). En este caso el sistema operativo invitado corre sin modificaciones. El problema es que se sacrifica performance.
Por otro lado el desarrollo de hardware actual trata de subsanar este problema. Tanto Intel como AMD en sus ultimas gamas de procesadores implementan soporte por hard para virtualización.

Paravirtualización: Es similar a la anterior, pero el hypervisor funciona de forma cooperativa. Esto es porque el sistema operativo invitado se entera que es virtualizado, asi que cada uno coopera con el hiperversor para virtualizar el hardware subyacente.

Bajo el modelo KVM, cada máquina virtual es un proceso que corre sobre el scheduler de Linux.
Un proceso estándar de Linux tiene dos modos de ejecución: Kernel y usuario.
KVM agrega un tercer modo: modo invitado (que contiene su propio Kernel y modo de usuario).

KVM se compone de:
- Un device driver para manejar el hardware virtualizado: /dev/kvm
- Un componente de espacio de usuario para emular el hardware. En este caso es un proceso Qemu modificado.
La aproximación de KVM es transformar el Kernel de Linux en un hypervisor simplemente cargando un modulo. Este modulo exporta un dispositivo denominado /dev/kvm, que activa un modo invitado del kernel.
Con /dev/kvm una maquina virtual tiene su propia espacio separado del kernel u otra maquina virtual que se encuentre en ejecución. Los dispositivos en el árbol de dispositivos /dev es común para todo los procesos de espacio de usuario. Pero /dev/kvm se diferencia en que cada proceso que lo abre ve un mapeo diferente para poder brindar aislamiento entre las máquinas virtuales.
Convertir al Kernel en un hypervisor tiene sus ventajas. Ya que aprovecha al máximo las nuevas características del kernel de la serie 2.6.x (soporte de memoria, scheduler O(1), etc).

En el siguiente gráfico se aprecia los diferentes componentes:
kvm.gif

Como se si mi CPU soporta KVM?
Muy fácil, debes correr el siguiente comando en una terminal:

$ egrep ‘^flags.*(vmx|svm)’ /proc/cpuinfo && echo “Soporta KVM” || echo “No soporta KVM”

Si la respuesta es Soporta KVM, felicitaciones!

Si desean ver un listado completo de procesadores soportados, chequeen el siguiente link:
http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors

Preparando el terreno:
Lo primero que vamos a hacer es instalar los módulos:
En debian y distros basadas en ella es muy fácil ya que lo necesario se encuentran disponibles en los repositorios oficiales:
sudo apt-get install qemu
sudo apt-get install kvm

Para el caso de procesadores Intel debemos cargar el siguiente modulo:
sudo modprobe kvm-intel
Para los AMD:
sudo modprobe kvm-amd

El siguiente es un ejemplo de error:
$ sudo modprobe kvm-intel
FATAL: Error inserting kvm_intel (/lib/modules/2.6.20-6-generic/kernel/drivers/kvm/kvm-intel.ko): Operation not supported
Esto error puede ser por:
1-Que no lo soporte el procesador
2-Que no este activada la capacidad de virtualizacion del procesador en el BIOS.

Pueden verificar también de la siguiente manera:
$ dmesg | grep kvm
kvm: disabled by bios

Instalando un sistema operativo invitado:
Vamos a instalar un windola en nuestro flamante sistema con KVM activado.
Lo primero vamos a generar un disco virtual:
$ qemu-img create windola.img 6G
En este caso generamos un disco de 6 Gigas
Ahora vamos a instalar el sistema operativo:
$ kvm -no-acpi -m 256 -cdrom /dev/cdrom -boot d windola.img
Les recomiendo usar la opción -no-acpi ya que puede presentar problemas acpi en el sistema operativo invitado. Puede que no arranque la instalación o se cuelgue al poco tiempo.
Una vez instalado para arrancar el sistema invitado hacemos lo siguiente:
$ kvm -no-acpi -m 256 -cdrom /dev/cdrom windola.img
También podemos probar un livecd sin necesidad de instalar nada:
Simplemente insertamos el cd en la lectora y utilizamos el siguiente comando:
$ kvm -boot d -cdrom /dev/cdrom
Como podrán ver KVM utiliza los mismos parámetros de QEMU.
Para mayor información les recomiendo que lean esta completa nota sobre Qemu.

Conclusión:
Si bien es una tecnología muy nueva promete en un futuro convertirse en un estándar.
La única desventaja es requerir de un procesador de ultima generación preparado para Virtualización.
Pero al convertir al kernel en hypervisor con todas las ventajas que esto trae aparejado y requerir un mínimo de esfuerzo para instalar un sistema invitado pone a este tipo de tecnología por sobre otras libres o propietarias.

ESTE TEXTO SE PUBLICA BAJO LICENCIA CREATIVE COMMONS BY-NC-SA 2.5 AR.

Por lo tanto, usted es libre de: 1) Copiarlo, distribuirlo y exhibirlo. 2) Hacer obras derivadas. Bajo las siguientes condiciones: 1) Debe dar atribución mencionando el nombre del autor y del LUG Zona Norte. En caso de las notas que no llevan firma, mencionar sólo el nombre del LUG.
2) Usted no puede usar esta obra con fines comerciales. 3) Si usted altera, transforma, o crea sobre este texto, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.

Más detalles y texto legal de la licencia en: http://creativecommons.org/licenses/by-nc-sa/2.5/ar

  1. No comments yet.
(will not be published)

IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)

What is 4 + 11 ?
Please leave these two fields as-is: