Acelerando QEMU en Windows con Intel HAXM

Antes ya habiamos hablado de QEMU y sobre como hacerlo andar en Windows para emular una maquina virtual con ReactOS, si bien QEMU por si solo se desempeña bastante bien, siempre es posible exprimirle un poco mas de rendimiento, especialmente si el hardware ayuda.

En esta ocasion vamos a hablar acerca de HAXM, un proyecto de Intel de codigo abierto que permite aprovechar al maximo de la caracteristica de aceleracion por hardware VT-x presente en la practica totalidad de los procesadores marca Intel modernos.

Concebido inicialmente para acelerar el emulador de Android (basado en QEMU), dio el salto de compatibilidad con el port de QEMU para Windows a partir de la version 2.9.0. Lamentablemente el proyecto se descontinuo en favor de Hiper-V de Microsoft (aunque la comunidad de Github al parecer sigue manteniendo sus propios forks), por lo que salvo aparezca algun bug muy grave, no es de esperar actualizaciones oficiales por parte de Intel, sin embargo sigue estando disponible para quien quiera descargarlo y aprovechar todo lo que ofrece.

HAXM es compatible con Windows 7 en adelante, tanto para versiones de 32 y 64 bits, aunque particularmente para Windows 8 o superior, necesita adicionalmente que el complemento Hiper-V este desactivado, ademas como es ovbio, el procesador debe soportar VT-x y a su vez tenerlo activado en el BIOS.

Tambien es recomendable usar una version de QEMU superior a 2.9.0, en mi caso he descargado QEMU 3.0.0 que ya trae el soporte para HAXM de forma nativa.

Finalmente hay que actualizar nuestro script qemu-launcher.bat para adaptar los parametros que pasamos a QEMU. A continuacion resalto en negrita las partes que han cambiado o se han agregado:

@ECHO OFF

SET QEMU_PATH=C:\Qemu
SET VMS_PATH=C:\VMs
SET ISO_PATH=%VMS_PATH%\ISO
SET QCOW_PATH=%VMS_PATH%\QCOW
SET LOGS_PATH=%VMS_PATH%\LOGS

SET QEMU_I386=qemu-system-i386w
SET QEMU_AMD64=qemu-system-x86_64w

SET VM_NAME=%1

REM Place your VMs definitions here

IF NOT DEFINED QEMU_SYSTEM (
SET QEMU_SYSTEM=%QEMU_I386%
SET QEMU_CPU=qemu32
)

SET QEMU_CMD="%QEMU_SYSTEM% -name %VM_NAME% -M pc -cpu %QEMU_CPU% -L . -m 256 -accel hax"

IF DEFINED HDA_IMAGE (
SET QEMU_CMD=%QEMU_CMD%" -hda %QCOW_PATH%\%HDA_IMAGE%"
)

IF DEFINED HDB_IMAGE (
SET QEMU_CMD=%QEMU_CMD%" -hdb %QCOW_PATH%\%HDB_IMAGE%"
)

IF DEFINED CDROM_IMAGE (
SET QEMU_CMD=%QEMU_CMD%" -cdrom %ISO_PATH%\%CDROM_IMAGE%"
)

IF NOT DEFINED BOOT_ORDER (
SET BOOT_ORDER=dc
)

SET QEMU_CMD=%QEMU_CMD%" -boot order="%BOOT_ORDER%

SET QEMU_CMD=%QEMU_CMD%" -net nic,model=rtl8139 -net user,hostfwd=::21-:21,hostfwd=::80-:80 -vga std"

IF DEFINED LOG_FILE (
SET QEMU_CMD=%QEMU_CMD%" -serial file:%LOGS_PATH%\%LOG_FILE%"
)

SET QEMU_CMD=###%QEMU_CMD%###
SET QEMU_CMD=%QEMU_CMD:"###=%
SET QEMU_CMD=%QEMU_CMD:###"=%

ECHO %QEMU_CMD%

START "%VM_NAME%" /D %QEMU_PATH% %QEMU_CMD%


Cabe destacar que luego de implementar los cambios, la emulacion de ReactOS muestra una mejoria bastante notable, incluso diria yo, igual o mas rapida que la de Virtual Box, lo cual es un gran avance para quienes testeamos el sistema de forma intensiva.

FUENTE: Este post es en parte una traduccion de la publicacion original del blog de QEMU en ingles.

Publicado por:

Fecha de publicación: 2023-09-30T10:09:56

Fecha de actualización: 2023-09-30T10:09:46