E n Diciembre de 2006, Linus Torvalds anunci que las nuevas versiones del kernel Linux incluiran la herra- mienta de virtualizacin conocida como KVM(Kernel Virtual Machine Monitor), una tecnologa de reciente aparicin. Su repen- tina aceptacin se debe al poder del modelo de virtualizacin basado en el kernel. La vir- tualizacin basada en el kernel ofrece ciertas ventajas potenciales, entre las que se encuentran un mejor rendimiento y un soporte ms uniforme para el entorno Linux al completo. Este artculo muestra el funcio- namiento de KVM y nos ayuda a iniciarnos en la creacin de nuestro propio sistema vir- tual basado en KVM. Al Estilo KVM En un escenario de virtualizacin tpico, un componente conocido como hypervisor ofrece una interfaz entre el sistema husped y su anfitrin. El hypervisor reside en lo alto del sistema anfitrin, encargndose de la pla- nificacin de las tareas y la gestin de la memoria de cada husped. KVM integra el hypervisor en el kernel, reduciendo as las redundancias y acelerando los tiempos de ejecucin. Un controlador de KVM se comu- nica con el kernel actuando como interfaz para una mquina virtual en espacio de usuario. La programacin de las tareas y la gestin de la memoria son manejadas a tra- vs del mismo kernel. Un pequeo mdulo del kernel Linux presenta el modo husped, instala tablas de pginas para l y emula determinadas instrucciones clave. Las versiones actuales de KVM vienen con una versin modificada del emulador Qemu que gestiona la E/S y opera como una resi- dencia virtual para el sistema husped (Figura 1). El sistema husped se ejecuta dentro de Qemu, mientras que Qemu se eje- cuta a su vez en espacio de usuario. El entorno resultante es parecido al escenario representado en la Figura 2, en el que varios procesos de mquina virtual se ejecutan cerca de otras tareas de espacio de usuario gestionadas directamente por el kernel. Cada husped consta de dos partes: la parte de espacio de usuario (Qemu) y la parte hus- ped (el husped en s mismo). Los procesa- dores virtuales de dentro de una mquina virtual son simples hilos del proceso del anfi- trin. Este modelo encaja muy bien en la menta- lidad Unix de hacer una cosa y hacerla bien. Lo que hace el mdulo KVM es activar el modo husped y gestionar los accesos vir- tualizados a los registros. Desde la perspec- tiva de un usuario, casi no hay diferencia entre ejecutar una mquina virtual Qemu con KVM deshabilitado y hacerlo con KVM habilitado, a excepcin claro est del signifi- cativo aumento de velocidad. KVM sigue la filosofa de desarrollo y publicacin sobre la que se construye Linux: publicar pronto y a menudo. La ltima ver- sin estable es parte del kernel Linux 2.6.x, y sus modificaciones aparecen como 2.6.x.y. Las fuentes de KVM se mantienen en un rbol git. Para obtener la ltima versin de KVM o el ltimo rbol, podemos dirigirnos a la wiki de KVM [1]. Uso de KVM Como KVM slo explota los avances de hardware ms recientes, debemos asegurar- nos de tener un procesador capaz de sopor- tar la extensiones de virtualizacin. Para ave- riguarlo: egrep ^flags.*(vmx|svm) U /proc/cpuinfo Si se produce alguna salida es porque nues- tra CPU tiene lo necesario para ejecutar KVM. PORTADA KVM Virtualizacin basada en el kernel con KVM VIRTUALIZACIN PROFUNDA KVM introduce al kernel en el terreno de juego de la virtualizacin. Explicamos por qu el mundo Linux se est interesando tanto por esta prometedora alternativa. POR AMIT SHAH S p e c t r a l - D e s i g n ,
F o t o l i a 034-036_KVMLM36 12/2/08 7:48 pm Pgina 34 Bien, ya tenemos el hardware, estamos a mitad de camino. Ahora necesitamos ejecutar un kernel Linux 2.6 reciente. Si ya dispone- mos de un kernel Linux reciente con KVM compilado en l o como mdulo, podemos usarlo si no queremos compilar los mdulos nosotros mismos. De cualquier modo, el pro- yecto KVM recomienda usar la ltima versin del sitio web, ya que KVM adquiere continua- mente nuevas funcionalidades y correcciones (sin mencionar nuevos bugs, que podran afectarnos en cualquier momento). Descargamos las fuentes de KVM de la pgina de descarga de KVM [2]. El tarball est formado por dos partes. La carpeta ker- nel/ contiene las fuentes para los mdulos del kernel. Los otros archivos son la parte de espacio de usuario, una versin ligeramente modificada de Qemu. Si descargamos el tar- ball de KVM y lo instalamos, no lo debemos tener compilado en el kernel; en caso contra- rio, el mdulo compilado fallar al iniciarse. La compilacin de las utilidades en espa- cio de usuario requiere varias libreras. El lis- tado detallado y las instrucciones se encuen- tran en la wiki de KVM [3]. Habremos de usar el compilador GCC 3; parte del cdigo de Qemu no se lleva bien con GCC 4, que es el compilador predeterminado en las distribuciones Linux ms recientes. Una vez tenemos el mdulo del kernel y las herramientas de espacio de usuario insta- lados (compilados o instalados desde los paquetes de nuestra distribucin), lo primero que hemos de hacer es crear el archivo que albergar el sistema operativo husped. Es fcil : $ qemu-img create -f qcow U debian-etch.img 10G Esto crea un archivo de 10 GB llamado debian-etch.img en formato qcow. Tambin se soportan otros formatos de archivo, cada uno con sus ventajas y desventajas. Ver la documentacin de Qemu. Una vez creado el archivo de imagen ya estamos listos para ins- talar un sistema hus- ped en l. Primero insertamos los mdu- los de KVM en el ker- nel si es que los hemos compilado como mdulos. $ sudo modprobe kvm $ sudo modprobe kvm-intel $ qemu-system-x86_64 -boot d U -cdrom /images/debian-etch.iso U -hda debian-etch.img o bien $ sudo modprobe kvm sudo modprobe kvm-amd $ qemu-system-x86_64 -boot d U -cdrom /images/debian-etch.iso U -hda debian-etch.img Este comando arranca una sesin de MV. La ventana muestra QEMU/KVMen la barra de ttulo, lo que significa que KVM est acti- vado. Una vez finalizada la instalacin, podemos iniciar el husped con $ qemu-system-x86_64 U debian-etch.img Ibm y Sun EVALUACIN 35 Nmero 36 WWW. L I NUX- MAGAZI NE. ES Administracin de Spam PORTADA KVM PORTADA Tipos de Monitores para Mquinas Virtuales Tambin podemos pasar el parmetro -m para ver la cantidad de RAM obtenida por la MV. El valor predeterminado es 128 MB. Las versiones ms recientes de KVM soportan el intercambio de memoria del husped, por lo que la RAM destinada al husped no queda inerte en el anfitrin. Puede que ocasionalmente se produzcan errores al ejecutar MVs con KVM. La salida mostrada en los registros de error del kernel del anfitrin pueden ayudarnos a encontrar posibles soluciones al problema si ste ya ha sido consultado con anterioridad. Tambin puede que se solucionen actualizando a la ltima versin de KVM. En caso de no hallar una solucin, pasando la opcin -no-kvma Qemu haremos que ste arranque sin soporte para KVM. Si no se soluciona el problema significa que ste se encuentra en Qemu, y no en KVM. Otra alternativa es pasar el parmetro -no- kvm-irqchip al arrancar una MV. Podemos preguntar tambin en la lista de correo de KVM [4]. Monitor Qemu El monitor de Qemu es accesible mediante la combinacin de teclado Ctrl+Alt+2 mien- tras se encuentra seleccionada la ventana de Qemu. Con el monitor se puede acceder a ciertos comandos de depurado que nos pue- den ayudar a determinar el estado de la MV. Por ejemplo, info registers muestra los conte- nidos de los registros de la CPU virtual. Tam- bin podemos adjuntar dispositivos USB a una MV usando los comandos del monitor de Qemu. Figura 1: KVM trae una versin modificada del emulador Qemu. Las distintas soluciones para la creacin de mquinas virtuales pueden categorizarse del siguiente modo: Hypervisores nativos: Un hypervi- sor nativo est asociado al sistema operativo. Una implementacin basada en software completa nece- sita un planificador, un subsistema de gestin de memoria y un modelo de E/S de dispositivos a exportar al sistema operativo hospedado. Algunos ejemplos son VMWare ESX server, Xen, KVM e IBM mainframes. En IBM mainframes, el monitor de la mquina virtual es una parte integrada en la arquitectura. Contenedores: En este tipo de vir- tualizacin, el sistema operativo husped y el anfitrin comparten el mismo kernel. Se asignan nombres de espacio diferentes para los distin- tos huspedes. Por ejemplo, los identificadores de procesos, descrip- tores de archivo, etc., son virtual- izados en el sentido de que un PID obtenido de un proceso en el sis- tema husped slo es vlido dentro del mismo. El husped puede tener diferentes espacios de usuario (por ejemplo, diferentes distribuciones) del anfitrin. Algunos ejemplos son OpenVZ, FreeVPS y Linux-Vserver. Emulacin: Todas y cada una de las instrucciones del husped son emu- ladas. Es posible ejecutar cdigo compilado para diferentes arquitec- turas en una mquina. Por ejemplo, podemos ejecutar cdigo de ARM en una mquina PowerPC. Algunos ejemplos son Qemu y Pearpc. 034-036_KVMLM36 12/2/08 7:48 pm Pgina 35 EVALUACIN Ibm y Sun 36 Nmero 36 WWW. L I NUX- MAGAZI NE. ES PORTADA KVM Migracin de MVs Migrar mquinas virtuales es muy impor- tante para el balanceo de carga y la reduc- cin del tiempo de inactividad durante las actualizaciones. El proceso de migracin consiste en mover un husped de una mquina fsica a otra. La ventaja del mtodo de KVM reside en que los huspe- des no estn implicados en la accin migra- toria. Adems, no se necesitan componen- tes especiales para migrar a travs de un tnel de una sesin SSH o comprimir la imagen a migrar. Incluso podemos pasar la imagen a travs de un programa antes de su transmisin a la mquina de destino. A menos que se activen funcionalidades espe- cficas de hardware o de un anfitrin, pode- mos llevar a cabo la migracin entre dos mquinas sin mayores problemas. Adems podemos migrar tanto huspedes desactiva- dos como arrancados. La facilidad para la migracin se encuentra en Qemu, por lo que no son necesarios cambios en la parte del kernel para su activacin. El dispositivo state-sync para la consecucin de la migra- cin y el estado de la MV se proporcionan y gestionan en espacio de usuario. En la mquina de destino podemos ejecu- tar Qemu con las mismas opciones de lnea de comandos usadas para la mquina vir- tual de la mquina origen, con algunos parmetros adicionales para comandos especficos de la migracin: $ qemu-system-x86 -incoming U <protocolo:parametros> Por ejemplo: $qemu-system-x86 -m 512 U -hda /imagenes/a.img U -incoming stdio En la mquina origen comenzamos la migracin con el comando del monitor de Qemu: (qemu) migrate U <protocolo-migracion:parametros> como (en el monitor de Qemu origen): (qemu) migrate U tcp://dst-ip:dst-puerto El parmetro de migracin del Qemu de destino es: -incoming tcp://0:puerto Si el comando para el monitor de Qemu ori- gen es (qemu) migrate ssh://dst-ip el parmetro de migracin para la lnea de comandos del Qemu de destino es: -incoming ssh://0 Pueden usarse opciones de lnea de coman- dos similares para el uso de compresin gzip o cifrado gpg, o incluso pasar los datos a travs de un script antes de enviarlos. Ventajas del Mtodo de KVM El mtodo de procedimiento de KVM ofrece varias ventajas. Podemos reusar todo el software y la infraestructura exis- tentes sin necesidad de aprender nuevos comandos. Por ejemplo, kill y top funcio- nan normalmente con las tareas husped del sistema anfitrin. KVM fue diseado originalmente para soportar anfitriones x86, centrndose en una virtualizacin total (ninguna modifica- cin al sistema husped) sin modificar el kernel del anfitrin. De cualquier modo, cuando KVM comenz a ganar desarrolla- dores y casos de usos interesantes, los des- arrolladores comenzaron a trabajar para portar KVM a otras arquitecturas. El soporte de paravirtualizacin se encuentra tambin en desarrollo. Si un husped se puede comunicar con el anfitrin, pueden acelerarse actividades como la de red o E/ S de disco. Adems se han propuesto y aceptado modificaciones al sistema anfi- trin (Linux) que mejorarn la planifica- cin de tareas y el intercambio de memo- ria. KVM funciona en todo tipo de mqui- nas, servidores, escritorios, porttiles y placas especficas, pudiendo usarse las mismas herramientas de administracin e infraestructura que usa Linux. El sistema KVM se integra con el planificador de Linux, la pila de E/S y todos los sistemas de archivos disponibles. Otros beneficios incluyen la migracin durante la ejecucin y el soporte para mquinas con procesado- res NUMA o 4096. Si buscamos una alter- nativa eficiente para la virtualizacin que se integre bien con Linux, tenemos que dedicar un tiempo a explorar KVM. I [1] wiki de KVM: http://kvm.qumranet. com [2] Pgina de descarga de KVM: http:// kvm.qumranet.com/kvmwiki/ Downloads [3] KVM HOWTO: http://kvm.qumranet. com/kvmwiki/HOWTO [4] Lista de correo de KVM: kvm-devel@lists.sourceforge.net RECURSOS Figura 2: Un proceso de una mquina virtual se ejecuta cerca de otras tareas en espacio de usuario y es gestionado directamente por el kernel. 034-036_KVMLM36 12/2/08 7:48 pm Pgina 36