HermiTux: un unikernel binario compatible con las aplicaciones de Linux
Un grupo de investigadores de la Universidad Politécnica de Virginia (EE. UU.), Qualcomm y la Universidad Técnica Rin-Westfalia de Aachen (Alemania) están desarrollando el núcleo ligero HermiTux, correspondiente al paradigma de unikernel.
HermiTux está destinado a permitir ejecutar aplicaciones directamente sobre el hipervisor sin la necesidad de tener que recurrir a capas adicionales, lo que proporciona compatibilidad binaria con aplicaciones Linux en el nivel ABI.
El código de HermiTux está escrito en el lenguaje de programación C y este es distribuido bajo la licencia BSD.
HermiTux proporciona un entorno de sistema operativo mínimo con su propio kernel (unikernel), que consume muchos menos recursos que al crear entornos basados en un kernel de Linux normal.
Con ello esto le permite iniciar aplicaciones rápidamente sobre el hipervisor: el tiempo de arranque no supera los 0,1 segundos.
En las pruebas de rendimiento de HermiTux, aproximadamente el 3% se retrasó en los entornos con un kernel de Linux regular, debido a la sobrecarga de reenvío de E / S al lado del host.
El consumo de memoria en el entorno de prueba fue de 9 MB, que es 10 veces menor que cuando se usa el kernel de Linux (el consumo de Docker fue de aproximadamente 2 MB debido al uso de un núcleo común con el entorno de host sin utilizar la virtualización completa).
Sobre HermiTux
HermiTux se destaca por estar destinado a tener la capacidad de ejecutar aplicaciones no modificadas creadas para Linux, esto se realiza a través del soporte para el formato ELF, la implementación de llamadas al sistema Linux y la emulación de sistemas de archivos virtuales.
En la etapa actual de desarrollo de HermiTux, este implementa 83 llamadas al sistema. En total, el kernel de Linux proporciona más de 350 llamadas al sistema, pero solo una pequeña parte de ellas se usa en aplicaciones reales (para cubrir el 90% de los programas de las distribuciones regulares, es suficiente para implementar 200 llamadas al sistema).
Para reducir las demoras durante el procesamiento de las llamadas al sistema, se implementa un mecanismo opcional para redefinir (reescribir) las llamadas al sistema para llamar a las funciones típicas del kernel.
Para aplicaciones relacionadas estáticamente, es posible reemplazar las instrucciones de syscall con llamadas a funciones en un archivo ejecutable.
Las aplicaciones relacionadas dinámicamente, el reemplazo se realiza en el nivel de biblioteca estándar.
Además, se han preparado herramientas para analizar las llamadas al sistema involucradas en archivos ejecutables que le permiten recopilar una imagen mínima de HermiTux que incluye solo el código necesario para procesar solo las llamadas al sistema utilizadas en la aplicación.
Características de HermiTux
HermiTux utiliza un hipervisor ligero basado en KVM que carga el binario de Linux junto con una capa mínima del sistema operativo dentro de una única máquina virtual de espacio de direcciones. En tiempo de ejecución, las llamadas al sistema realizadas por la aplicación son capturadas por el kernel de HermiTux.
Opcionalmente, HermiTux proporciona un mecanismo para reescribir la invocación de llamadas de sistema en llamadas de función comunes al kernel, lo que reduce significativamente la latencia de llamadas del sistema.
Desde el punto de vista de la protección, dicha modularidad permite, en lugar de filtrar, las llamadas de sistema no utilizadas (por ejemplo, a través de seccomp) para excluirlas por completo del núcleo.
La aplicación se ejecuta en un espacio de direcciones compartido (HermiTux está diseñado para ejecutarse sobre el hipervisor de una sola aplicación).
Se proporciona soporte básico de roscado (Pthreads Embedded).
Como sistema de archivos, se propone MiniFS, en el que los archivos se colocan en la RAM (disco RAM) y se emulan algunos elementos de los sistemas de archivos virtuales (/dev/zero, proc/cpuinfo, etc.).
La pila TCP / IP se basa en el proyecto LWIP, y una versión modificada del proyecto Musl se utiliza como una biblioteca C estándar.
HermiTux no requiere volver a ensamblar las aplicaciones y le permite ejecutar tanto archivos ejecutables compilados (relacionados estática y dinámicamente) como aplicaciones en lenguajes interpretados (Python, Lua, etc.).
El artículo HermiTux: un unikernel binario compatible con las aplicaciones de Linux aparece primero en HermiTux: un unikernel binario compatible con las aplicaciones de Linux.