lanzamiento del proyecto . Como emulador, QEMU permite ejecutar un programa diseñado para una plataforma de hardware en un sistema con una arquitectura completamente diferente, por ejemplo, ejecutar una aplicación para ARM en un PC compatible con x86. En modo de virtualización, el rendimiento de ejecución de código en un entorno aislado se acerca al de un sistema nativo gracias a la ejecución directa de instrucciones en la CPU y la utilización del hipervisor Xen o el módulo KVM.
El proyecto fue inicialmente creado por Fabrice Bellard con el objetivo de permitir la ejecución de archivos binarios de Linux compilados para la plataforma x86 en arquitecturas diferentes de x86. A lo largo de los años de desarrollo, se ha añadido soporte completo de emulación para 14 arquitecturas de hardware, superando los 400 dispositivos de hardware emulados. En la preparación de la versión 4.0 se realizaron más de 3100 cambios por parte de 220 desarrolladores.
Mejoras clave , añadidos en QEMU 4.0:
- El emulador de la arquitectura ARM ha añadido soporte para extensiones de instrucciones ARMv8+: SB, PredInv, HPD, LOR, FHM, AA32HPD,
PAuth, JSConv, CondM, FRINT y BTI. Se ha añadido soporte para la emulación de las placas "Musca" y "MPS2". Se ha mejorado la emulación de ARM PMU (Unidad de Gestión de Energía). En la plataforma se ha añadido la posibilidad de usar más de 255 GB de RAM y soporte para imágenes u-boot del tipo "noload"; - En el emulador de la arquitectura x86 en el motor de aceleración de virtualización (Intel Hardware Accelerated Execution) se ha añadido soporte para hosts compatibles con POSIX, como Linux y NetBSD (anteriormente solo se soportaba la plataforma Darwin). En el emulador del chip Q35 (ICH9), para los puertos PCIe principales, ahora se puede opcionalmente declarar una velocidad máxima (16GT/s) y el número de líneas de conexión (x32), definidos en la especificación PCIe 4.0 (para asegurar la compatibilidad, por defecto, para tipos de máquinas más antiguos, QEMU establece 2.5GT/s y x1). Se ha habilitado la posibilidad de cargar imágenes Xen PVH con la opción "-kernel";
- En el emulador de la arquitectura MIPS se ha añadido soporte para emulación multihilo utilizando el generador de código clásico TCG (Tiny Code Generator). También se ha añadido soporte para la emulación de CPU I7200 (nanoMIPS32 ISA) e I6500 (MIPS64R6 ISA), la posibilidad de manejar solicitudes de tipo CPU utilizando el protocolo QMP (Protocolo de Gestión QEMU), se ha añadido soporte para registros de configuración SAARI y SAAR. Se ha mejorado el funcionamiento de máquinas virtuales tipo Fulong 2E. Se ha actualizado la implementación de la Unidad de Comunicación Interhilos;
- En el emulador de arquitectura PowerPC se ha añadido soporte para emular el controlador de interrupciones XIVE, se ha ampliado el soporte para POWER9, y para la serie P se ha añadido la posibilidad de conectar en caliente los puentes PCI principales (PHB, PCI host bridge). La protección contra ataques Spectre y Meltdown está habilitada por defecto;
- En el emulador de arquitectura RISC-V se ha añadido soporte para la emulación de PCI y USB. En el servidor de depuración integrado (gdbserver) se ha implementado el soporte para definir listas de registros en archivos XML. Se ha añadido soporte para los campos mstatus TSR, TW y TVM;
- En el emulador de arquitectura s390 se ha añadido soporte para el modelo de CPU z14 GA 2, así como soporte para emulación de extensiones de instrucciones para cálculos en punto flotante y operaciones vectoriales. En vfio-ap se ha añadido la posibilidad de conectar en caliente dispositivos;
- En el emulador de procesadores de la familia Tensilica Xtensa se ha mejorado el soporte SMP para Linux y se ha añadido soporte para la extensión FLIX (extensión de instrucciones de longitud flexible);
- En la interfaz gráfica se ha añadido la opción ‘-display spice-app’ para configurar y ejecutar una variante del cliente de acceso remoto Spice con una apariencia similar a la interfaz GTK de QEMU;
- En la implementación del servidor VNC se ha añadido soporte para el control de acceso mediante opciones tls-authz/sasl-authz;
- En QMP (Protocolo de Gestión QEMU) se ha añadido soporte para la ejecución de comandos de forma centralizada/external (fuera de banda) y se han implementado comandos adicionales para trabajar con dispositivos de bloques;
- En VFIO se ha implementado la interfaz EDID para mdev compatibles (Intel vGPU), permitiendo cambiar la resolución de pantalla utilizando las opciones xres y yres;
- Para Xen se ha añadido un nuevo dispositivo ‘xen-disk’, que puede crear de forma independiente un backend de disco para Xen PV (sin acceder a xenstore). Se ha aumentado el rendimiento del backend de disco Xen PV y se ha añadido la posibilidad de modificar el tamaño del disco;
- En los dispositivos de bloques de red se han ampliado las capacidades de diagnóstico y trazado, mejorando la compatibilidad del cliente con implementaciones problemáticas del servidor NBD. En qemu-nbd se han añadido las opciones ‘—bitmap’, ‘—list’ y ‘—tls-authz’;
- En el dispositivo IDE/via emulado se ha añadido soporte para el modo PCI IDE;
- Se ha añadido soporte para usar el algoritmo lzfse para la compresión de imágenes dmg. Para el formato qcow2 se ha añadido soporte para conectar archivos externos con datos. Las operaciones de descompresión qcow2 se han trasladado a un hilo separado. En las imágenes vmdk se ha añadido soporte para la operación ‘blockdev-create’;
- Se ha añadido soporte para las operaciones DISCARD (notificación de liberación de bloques) y WRITE_ZEROES (anulación del rango de bloques lógicos) al dispositivo de bloque virtio-blk;
- El dispositivo pvrdma ha implementado soporte para los servicios de datagramas de gestión RDMA (MAD);
- Se han introducido , que rompen la compatibilidad hacia atrás. Por ejemplo, en lugar de la opción 'handle' en '-fsdev' y '-virtfs', se deben usar las opciones 'local' o 'proxy'. Se han eliminado las opciones '-virtioconsole' (sustitución por '-device virtconsole'), '-no-frame', '-clock', '-enable-hax' (sustitución por '-accel hax'). Se ha eliminado el dispositivo 'ivshmem' (se debe usar 'ivshmem-doorbell' o 'ivshmem-plain'). Se ha dejado de dar soporte a la compilación con SDL1.2 (se debe usar SDL2).
Fuente: opennet.ru
