¿Cuál es la diferencia entre virtualización y emulación? Y por qué es importante

Tanto la emulación como la virtualización logran el mismo objetivo: ejecutar otro sistema operativo dentro de una máquina virtual. Sin embargo, cada uno hace esto de forma diferente y, cuando se puede utilizar, la virtualización es mucho más rápida.

Una cuestión de rendimiento

La respuesta corta es que la emulación es mucho más lenta que la virtualización y todo se reduce a optimizaciones de hardware.

La emulación es la forma más básica de ejecutar una aplicación en un host no deseado. Un emulador toma los comandos destinados al sistema de destino y los traduce a algo que la computadora host pueda comprender y ejecutar. Normalmente, esto implica emular códigos de operación y registros de la CPU. Un buen ejemplo de esto es emular juegos antiguos, como Nintendo N64, en una PC moderna. La PC no puede ejecutar juegos de N64 directamente, pero el emulador puede tomar las instrucciones destinadas al N64 y ejecutarlas lo más cerca posible de la perfección.

Si bien «Emulación» se usa comúnmente para referirse a la emulación de videojuegos, se usa con la misma frecuencia para aplicaciones comerciales. Por ejemplo, tal vez tenga una pieza crítica de software heredado, que debe ejecutarse en un sistema como DOS. Ejecutarlo en un emulador en un servidor nuevo a menudo puede ser más fácil que ejecutarlo en una máquina desde el momento. También puede referirse a una pieza de software que emula los efectos del hardware heredado, como la emulación de controladores de red antiguos.

Sin embargo, la emulación puede ser innecesariamente lenta. Un caso de uso extremadamente común es ejecutar varias máquinas virtuales Linux en un sistema operativo host. Cuando la máquina host es la misma que la máquina virtual, emular completamente toda la CPU es muy lento en comparación con ejecutarla normalmente.

Por lo tanto, la mayoría de las máquinas virtuales utilizarán tecnología de virtualización optimizada por hardware. En Intel, esta tecnología se llama Intel-VT, y en AMD, se llama AMD-V. Ambos logran el mismo objetivo de virtualizar aplicaciones x86. Si está ejecutando una computadora de escritorio, es posible que deba activarlos en el BIOS si no están habilitados de forma predeterminada.

La virtualización se usa a menudo en combinación con un hipervisor, que es un sistema operativo básico que maneja múltiples servidores privados virtuales. Si alquila un VPS de una empresa de computación en la nube como AWS, probablemente se esté ejecutando en un hipervisor como Nitro, Proxmox o Hyper-V de AWS. Los hipervisores modernos pueden lograr un rendimiento muy cercano al nativo (también llamado «bare metal»). Si bien siempre hay un poco de sobrecarga, es mejor que tener que emularlo.

La virtualización casi siempre funciona mejor si está virtualizando la misma arquitectura. Por ejemplo, las CPU x86 de AMD e Intel podrán virtualizar sistemas operativos x86 como Windows y Linux estándar. Si bien no es técnicamente imposible para una CPU ARM virtualizar una CPU x86, generalmente no es una cosa.

Esto puede ser un problema, como en el caso de los nuevos Macbooks basados ​​en ARM de Apple que se ejecutan en sus propios procesadores M1. No se admite la virtualización de sistemas operativos x86. Si bien aún puede ejecutar otros sistemas operativos con programas como Parallels, será mucho más lento ya que tendrá que recurrir a la emulación.

Entonces, en conclusión, si va a ejecutar un programa desde otro sistema operativo, querrá asegurarse de hacerlo utilizando algún tipo de virtualización si desea lograr una velocidad cercana al 100% nativa.

¿Cómo se compara Docker?

Docker permite ejecutar contenedores de aplicaciones, que son paquetes aislados que contienen todo el código necesario para que se ejecute una aplicación. También es muy seguro; una máquina host puede ejecutar varios contenedores Docker sin temor a que se salgan del contenedor o se mezclen entre sí.

En muchos sentidos, Docker logra el mismo objetivo exacto de ejecutar múltiples aplicaciones en máquinas virtuales privadas de Linux, pero bajo el capó, hace las cosas de manera un poco diferente.

Docker no usa emulación ni virtualización. Ejecuta todo el código directamente en la CPU y el sistema host, sin sobrecarga de virtualización. Para aislar contenedores, hace un uso inteligente de los espacios de nombres de Linux, entre otras características que pueden aislar procesos en su propia «cárcel de contenedores». Los procesos dentro de la cárcel no pueden ver o interactuar con archivos, procesos o recursos del sistema no asignados a ellos.

Esto logra un sistema en el que varias aplicaciones pueden ejecutarse juntas en un sistema operativo host sin la sobrecarga de un sistema operativo separado para cada servidor privado virtual. Para un proveedor como AWS, esto ahorra mucho dinero.

Si está buscando virtualizar, pero le preocupa el rendimiento, Docker prácticamente no tiene gastos generales en comparación con la ejecución de aplicaciones en el hardware.

Comparte en: