Hace ya años que existen diversas tecnologías de virtualización, pero ahora se han empezado a poner de moda. El término virtualización se utiliza para hacer referencia a la abstracción de los recursos de un ordenador. «Esconde» las características físicas de un ordenador a los usuarios, aplicaciones o ambos. Puede hacer parecer que un único recurso actúa como múltiples recursos o bien que múltiples recursos aparezcan como uno único.
El término se ha utilizado ampliamente desde los años 60 y se ha aplicado a multitud de recursos informáticos. En cualquier caso, lo que hacen todos los sistemas de virtualización es esconder o encapsular los detalles técnicos. El término virtualización se utiliza en diferentes ámbitos, pero se pueden agrupar en dos genéricos: virtualización de la plataforma y virtualización de recursos.
La virtualización en sí ha cambiado poco desde sus inicios, por ejemplo, tenemos un escrito de Gerald Popek y Robert Goldberg (Popek, G. J., Goldberg, R. P. 1974. Formal requirements for virtualizable third-generation architectures. Communications of the ACM 17(7): 412-421):
“A virtual machine is taken to be an efficient, isolated duplicate of the real machine”
Y la VMM la definen como:
“As a piece of software a VMM has three essential characteristics. First, the VMM provides an environment for programs which is essentially identical with the original machine; second, programs run in this environment show at worst only minor decreases in speed; and last, the VMM is in complete control of system resources.”
Como podemos ver … hoy en día sigue todo igual ;)
Para un desarrollador o administrador de sistemas, la virtualización puede ser muy útil:
- puedes desarrollar aplicaciones o probar aplicaciones en hardware que realmente no existe
- puedes aislar aplicaciones para estudiarlas con detenimiento
- facilitar el proceso de actualizaciones
- facilitar la implementación de recuperación de desastres o continuidad de negocio
- aislar a los usuarios para que no anden jugando con el sistema
- asignación de más hardware o nuevo hardware a un sistema operativo
- ejecución de aplicaciones antiguas
En los entornos Linux encontramos virtualización de software cerrado como puede ser Parallels o VMWare así como alternativas de software libre como openVZ, Xen, UML, qemu, … En mi infinita curiosidad he probado varias de ellas, aunque la que más he probado ha sido VMWare (por razones de edad y de trabajo). Hace poco probé kvm y me quedé enamorado. Aquí podemos encontrar una muy buena comparativa de diversos entornos de virtualización.
Como siempre, en el mundillo del software libre, hay un montón de posibilidades así que en este post voy a hablar de KVM, como todo el mundo habla de VMWare y de Xen … pues yo voy a hablar de otra cosa que no está de moda. En posteriores posts hablaré de otras formas de virtualización menos utilizadas.
KVM realmente es un acelerador de qemu y no un software de virtualización, tal y como dicen en su web:
KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). It consists of a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure and a processor specific module, kvm-intel.ko or kvm-amd.ko. KVM also requires a modified QEMU although work is underway to get the required changes upstream
KVM ha sido desarrollado por una empresa de Israel llamada Qumranet. KVM presenta una serie de ventajas (creo yo) frente a Xen (que tanto de moda está ahora):
- es un módulo del kernel, luego no tienes que arrancar kernels especiales ni aplicar parches
- está aceptado en el kernel desde la versión 6.20
- no es necesario modificar el kernel del sistema operativo que vas a ejecutar dentro de la máquina virtual
- soporta tecnología NUMA por lo que la escalabilidad es casi «infinita«
- tiene muy pocas líneas de código
- utiliza el scheduler y gestor de memoria propio del kernel
Claro está, tiene sus inconvenientes
- necesitas tener un procesador con soporte para virtualización por hardware, como son los procesadores con tecnología AMD-V e Intel-VT
- no tiene el soport ni el número de seguidores que tiene Xen
- no tiene el apoyo económico que tiene Xen: Red Hat, Novell, Citrix
- no tiene el apoyo tecnológico que tiene Xen: Red Hat, Novell, Citrix
- no tiene interfaces gráficas bonitas y sencillas de usar para configurar y administrarlo
He puesto esta última línea en inconvenientes ya que hoy en día se considera que algo sin interfaz gráfica es difícil de instalar y gestionar. Yo creo que no es así ya que para instalar kvm necesitas los siguientes paquetes (openSUSE 10.3):
- qemu
- kvm
- kvm-kmp- (puedes tener un kernel «default», «SMP», …, en mi caso es kvm-kmp-default)
Como se puede ver, son muy pocos. Existe una interfaz gráfica que se llama qtemu, pero es una inerfaz gráfica para Qemu, no para KVM.
Volviendo a lo que estaba diciendo, no veo KVM muy complejo de configurar, vayamos con un ejemplo y veremos que con 5 simples pasos (que incluso se puden copiar y pegar) nos funcionará a las mil y una maravillas ;)
- Cargar módulo del kernel (dependiendo del procesador, cargaremos uno u otro módulo. En mi caso cargo el módulo kvm-amd y aque tengo un AMD). Este paso lo hacemos como root:
- Como root, cambiamos el valor de
/proc/sys/dev/rtc/max-user-freq
para conseguir un mejor rendimiento: - Ahora, como usuario creamos la imagen o disco virtual que usaremos como destino de instalación de nuestra máquina virtual. Es aconsejable que el usuario pertenezca al grupo kvm.
- Ahora empezamos la instalación del sistema operativo que se ejecutará en nuestra máquina virtual. Podemos usar una imagen iso o bien un CD/DVD. Pongo un ejemplo de cada uno por si queréis experimentar:
- Una vez instalada la nueva máquina virtual, arrancamos el sistema recientemente instalado :)
modprobe kvm-amd
// modprobe kvm-intel
echo 1024 > /proc/sys/dev/rtc/max-user-freq
qemu-img create hdd_drive.img -f qcow2 6G
qemu-kvm -m 1024 -hda hdd_drive.img -cdrom /ruta/imagen.iso -boot d
qemu-kvm -m 1024 -hda hdd_drive.img -cdrom /dev/cdrom -boot d
qemu-kvm -no-acpi -m 1024 -hda hdd_drive.img
Ya está, 5 simples pasos para tener una nueva máquina virtual corriendo en nuestro sistema :)
Si probáis KVM, veréis que es muy «rápido», consume poco y es muy fácil de utilizar. Espero haberos picado la curiosidad y haberos incitado a probar este nuevo sistema de virtualización.
Para aquellos que quieran saber un poco más de QEMU y KVM, os dejo unos enlaces:
http://fabrice.bellard.free.fr/qemu/qemu-doc.html
http://kvm.qumranet.com/kvmwiki/HOWTO
http://www.linuxinsight.com/proc_sys_dev_hpet_max_user_freq.html
http://www.mythtv.org/wiki/index.php/Frame_display_timing