Creación: 09-10-2007
Índice de contenidos
1. Introducción
2. Entorno
3. Instalación
4. Arrancando nuestras imágenes del qemu
5. Mejoras de rendimiento para virtualización de XP
6. Conclusiones
7. Sobre el autor
1. Introducción
Ya hemos visto en otros tutoriales como emular con Qemu otras máquinas:
- https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=qemuIntranetDebian
- https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=debianQemu
Esto, aun usando el módulo KQemu, es una emulación por software. Pero lo que hoy en día está de moda es la virtualización por hardware. Cada día oímos hablar más de ellos y todavía nos queda mucho por ver.
En este tutorial vamos a ver como podemos sacar provecho de la virtualización por hardware (por supuesto nuestra máquina debe soportarlo: processor extensions HVM) con el módulo KVM (Kernel-based Virtual Machine). Este es un módulo que debemos activar en el kernel (viene activado por defecto en las últimas versiones del kernel) y además debemos hacer un par de cositas que vamos a ver seguidamente.
También decir que para levantar nuestras máquinas virtuales usaremos la aplicación kvm
. Esta aplicación es como el qemu
, es decir es el encargado de arrancar nuestros ficheros con la imagen de la máquina virtual. De hecho con kvm
podemos arrancar las imágenes que hayamos creado con el qemu
.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil Asus G1 (Core 2 Duo a 2.1 GHz, 2048 MB RAM, 120 GB HD).
- Sistema Operativo: GNU / Linux, Debian (unstable), Kernel 2.6.22, KDE 3.5
- kvm 36-0.1
- kvm-sources 36-0.1
3. Instalación
Antes de hacer nada debemos comprobar si nuestro hardware soporta KVM. Para ello basta con ejecutar:
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo
Si este comando produce alguna salida es que nuestro procesador soporta virtualización de hardware y podemos usar KVM.
Ahora que ya sabemos que nuestro procesador soporta virtualización, podemos usar uno de los últimos kernel (a partir del 2.6.20) que ya vienen con el módulo KVM compilado tanto para Intel como para AMD.
Si compilamos nosotros mismos el kernel
(https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=debianInstall)
tenemos que asegurarnos de que tenemos activa la opción CONFIG_KVM
, que podemos encontrar en Device Drivers ---> Virtualization ---> Kernel-based Virtual Machine (KVM) support
. Podemos activarlo como módulo y activar la plataforma para la que nos interese (Intel o AMD o los dos).
Si estamos editando la configuración con make menuconfig
, deberíamos ver algo así:
Necesitamos instalar también el paquete kvm. Esta es una aplicación como el qemu
(de hecho es un qemu
modificado). Es decir es la aplicación con la que ejecutaremos nuestras imágenes.
# apt-get -u install kvm
kvm-sources
En el repositorio de paquetes también podemos encontrar kvm-source
. Este paquete son los fuentes del driver del kernel. No es necesario instalarlo ya que, como hemos dicho y visto antes, el driver ya está incluido en el kernel desde la versión 2.6.20.
4. Arrancando nuestras imágenes del qemu
Ya estamos en disposición de arrancar con kvm
cualquiera de nuestras imágenes que teníamos creadas con el qemu
. De echo los parámetros del kvm
son los mismos que los del qemu
(ya dijimos que kvm
no es más que una modificación del qemu
).
Podríamos hacer algo como:
# modprobe kvm-intel # echo 1024 > /proc/sys/dev/rtc/max-user-freq # kvm -m 1024 -net nic -net tap -hda mi_imagen_de_qemu.qcow2
Esto estaría bien meterlo en un script; y ojo, que todas las operaciones las hemos hecho como root (seria conveniente configurar nuestro sistema para que no fuera necesario el uso de root).
Con modprobe kvm-intel
estamos cargando el driver del kernel, así que tener en cuenta que si vuestro equipo es AMD tendrías que usar modprobe kvm-amd
.
Para configurar la red lo he hecho como decía en el apartado 8.1 del tutorial:
https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=debianQemu
He sustituido el contenido del fichero /etc/kvm/kvm-ifup
(es el sctip que ejecuta por defecto kvm
cuando usamos la opción -net tap
) con el siguiente contenido:
ifconfig $1 172.20.0.1 iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward exit 0
Ojo, yo en el script he puesto eth1
, pero acordaros de poner vuestra interfaz de red. O en general configurar la red como mejor os convenga.
5. Mejoras de rendimiento para virtualización de XP
Si el sistema operativo que estamos virtualizando es Windows XP, es muy recomendable, para mejorar el rendimiento, seguir los pasos descritos en:
http://kvm.qumranet.com/kvmwiki/Windows_ACPI_Workaround
Antes de hacer estos pasos os recomiendo que os hagáis una copia de vuestra imagen por si hay problemas.
Si cuando reiniciéis el XP no sois capaces de evitar el BSOD (Blue Screen of Death). Recuperar la copia que os habíais hecho. Y repetir los pasos, pero esta vez en vez de reiniciar después de los cambios en el administrador de dispositivos, decirle que no, y hacer directamente los cambios en el registro. Después reiniciáis y debería funcionar bien.
Intentarlo porque realmente se nota la mejora de rendimiento !!!
6. Conclusiones
La virtualización está resultando ser un gran aliado, para entornos de desarrollo, pruebas, e incluso producción (mejorando el time to market, ahorro de energía, recuperación de entornos, … ). Tanto es así que cada vez encontramos más soporte directamente en el hardware (hasta ahora el gran inconveniente era el rendimiento, pero con estas mejoras en el hardware cada vez se mejora más este punto).
Por esto en Autentia (http://www.autentia.com) os recomendamos que estéis atentos a este tipo de tecnologías y que ventajas o posibilidades nos ofrecen.
7. Sobre el autor
Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software)
Socio fundador de Autentia (Formación, Consultoría, Desarrollo de sistemas transaccionales)
mailto:alejandropg@autentia.com
Autentia Real Business Solutions S.L. – «Soporte a Desarrollo»