La virtualización de hardware es una técnica utilizada desde la década del 60, pero recientemente ha tomado nuevo impulso, en virtud de los últimos avances de los procesadores de Intel y AMD y también de la evolución de varias herramientas de software, muchas de ellas libres.
En este artículo analizaremos brevemente los conceptos principales relacionados con la virtualización de hardware, incluyendo las diversas alternativas existentes.
¿Qué es la virtualización?
El objetivo de la virtualización es la simulación de varias computadoras lógicas, a partir de una computadora real. Para ello existen varias técnicas, que van desde la virtualización del hardware (CPU, memoria y dispositivos) hasta la separación de los procesos utilizando un único kernel.
La virtualización nos permite, entre otras cosas:
- Alojar varios servidores en una única computadora física. Esto nos permite optimizar el uso de recursos (CPU, memoria, almacenamiento).
- Simplificar la realización de copias de respaldo (backup) y su restablecimiento. Todo un servidor virtual puede ser un único archivo.
- Migrar fácilmente servidores entre distintas computadoras.
- Incrementar la seguridad, utilizando servidores aislados para tareas diferentes.
A través de la virtualización podemos, por ejemplo, utilizar servidores virtuales para cada servicio que deseemos implementar en nuestra red, independientemente del hardware disponible. Estos servidores pueden ser administrados por personas distintas. Más adelante, al aumentar las necesidades, pueden añadirse nuevos servidores físicos y migrar los servidores virtuales existentes con un costo mínimo.
Algunos conceptos básicos
En los años ’60, IBM llamaba al sistema operativo «supervisor«. Por esto, a aquellos con capacidad de correr otros sistemas operativos sobre ellos los llamó «hypervisors«, terminología que persiste en la actualidad. Al hypervisor también se lo denomina «sistema operativo host«.
Las «máquinas virtuales» (como la Java Virtual Machine o el BCPL de los ’60) proveen una CPU virtual. Su objetivo no es virtualizar todo el hardware, sino solamente permitir la ejecución de código portable en distintas arquitecturas (esto se conoce como «virtualización a nivel de aplicación»). Un intento similar consiste en la traducción de instrucciones al nivel de la CPU, tal como lo realizan los procesadores Crusoe.
Tipos de virtualización
A continuación, analizaremos las técnicas más comunes de virtualización y algunas de sus implementaciones. (Comenzaremos por las menos interesantes, dejando lo mejor para el final.)
Virtualización de hardware
Este es el tipo de virtualización más complejo de lograr. Consiste en emular, mediante máquinas virtuales, los componentes de hardware. De esta manera el sistema operativo no se ejecuta sobre el hardware real sino sobre el virtual.
La gran ventaja de este enfoque es que pueden emularse distintas plataformas de hardware (por ejemplo, x86 sobre SPARC). Su principal desventaja es el alto costo de traducción de cada una de las operaciones de las máquinas virtuales a la máquina real, pudiendo obtenerse un rendimiento de 100 a 1000 veces menor.
Virtualización a nivel del Sistema Operativo
Este es el otro extremo de la virtualización. En este esquema no se virtualiza el hardware y se ejecuta una única instancia del sistema operativo (kernel). Los distintos procesos perteneciente a cada servidor virtual se ejecutan aislados del resto.
La ventaja de este enfoque es la separación de los procesos de usuario prácticamente sin pérdida en el rendimiento, pero al compartir todos los servidores virtuales el mismo kernel no pueden obtenerse el resto de las ventajas de la virtualización.
Paravirtualización (paravirtualization)
La paravirtualización consiste en ejecutar sistemas operativos guests sobre otro sistema operativo que actúa como hipervisor (host). Los guests tienen que comunicarse con el hypervisor para lograr la virtualización.
Las ventajas de este enfoque son un muy buen rendimiento y la posibilidad de ejecutar distintos sistemas operativos como guests. Se obtienen, además, todas las ventajas de la virtualización enunciadas anteriormente. Su desventaja es que los sistemas operativos guests deben ser modificados para funcionar en este esquema.
Virtualización completa (full virtualization)
La virtualización completa es similar a la paravirtualización pero no requiere que los sistemas operativos guest colaboren con el hypervisor. En plataformas como la x86 existen algunos inconvenientes para lograr la virtualización completa, que son solucionados con las últimas tecnologías propuestas por AMD e Intel.
Este método tiene todas las ventajas de la paravirtualización, con el añadido de que no es necesaria ninguna modificación a los guests. La única restricción es que estos últimos deben soportar la arquitectura de hardware utilizada.
Avances en el hardware
Recientemente, tanto AMD como Intel han incorporado en sus CPUs tecnologías que simplifican y optimizan notablemente los esquemas de virtualización completa y paravirtualización.
En el caso de Intel se denomina VT (por «virtualization technology«), y está disponible en las líneas Vpro, Xeon e Itanium 2.
AMD primero bautizó a su tecnología de virtualización como Pacifica y luego pasó a llamarse AMD-V. La misma está disponible en todos los procesadores con socket AM2 (inclusive en los modelos más económicos). Esta tecnología parece ser aún más potente que la de Intel.
Una nota a los usuarios de Linux: Para identificar si su CPU posee alguna tecnología de virtualización, busque el flag «xvm
» (Intel) o el flag «svm
» (AMD) en /proc/cpuinfo
.
¿Qué sigue?
Esta es sólo una breve introducción técnica con el objetivo de resumir las principales características de los distintos tipos de virtualización de hardware.
Ahora mismo, me voy a jugar un poco con mi solución favorita: KVM; una solución de virtualización completa para Linux que, utilizando una versión modificada de QEMU, permite correr casi cualquier sistema operativo, a una velocidad increible en comparación con otras soluciones de virtualización.
Referencias
Este artículo está basado, principalmente, en el artículo Virtual Linux de M. Tim Jones (en inglés).
Una excelente fuente de enlaces es la página de Wikipedia sobre virtualización (en inglés).
Hola Javier,
Fenomenal trabajo y excelente Blog.
SI no tienes inconveniente te invito a que visites el mio, el blog de la virtualización en Español en http://josemariagonzalez.es
Muchas gracias y sigue así.
rgds,
J.
Seria bueno especificar que tipo de virtualizacion emplean cada una de las soluciones habituales (kvm, xen, vmware, etc).
Buena nota!
Excelente articulo, la informacion es simple y entendible, saludos,…
exelente articulo buena descripcion espero que sigas desarrolando este tema esta interesante good!!!!!!!!!!!!
le pegaste con este Blog Men……… un articulo q esta de tema principal en las universidades tecnologicas….! good…!
pregunta: que herramienta hay para identificar si mi cpu y board son aptas para la virtualización. gracias
buen articulo estimado. pero tu que has trabajado en aquello, que hardware recomiendas?? que placa y proce con VT y que funke bien con kvm en linux????
gracias por brindar esta información en forma clara … me ha sido de mucha utilidad. Un abrazo
Gracias por la información, esta muy bien clara y atendible, es lo que yo estaba buscando, éxitos en todo.
Buenos días a todos.
Quiero ante mano agradecer a todos los que tienen que ver con estos importantes Blogs. Pues muchos mejoramos conceptos, aprendemos técnicas nuevas para también impartir más conocimientos!
En lo personal siempre hablaré de este Blog! Feliz día!
kjgiodfjgiojfhimbimdifmiodfjghiojitjjyopjyopjghopfj
g pasa T_T
necesito ayuda de un ingeniero para virtualizar una tarjeta memory controller gracias
HoLA JAVIER HAS PROBADO EL MAX PAWRER?
Gracias, llevo varios años luz buscando que es la Virtualización por HW, puto amo. :)