Optimización: Host-Passthrough CPU

Cuando se arranca una máquina virtual con libvirt y qemu-kvm, lo que suele ocurrir es que dejamos la configuración por defecto de las características de la CPU, y, por defecto, la CPU “emulada” por qemu no tiene todas las instrucciones que lleva el servidor físico, el hypervisor.

Realmente, no es algo “mal hecho”, ni “erróneo”, pero se puede optimizar más, sobre todo si no vamos a migrar ese servidor de hypervisor. Más adelante comentaré el porqué de esto.

En la configuración XML de libvirt, si en el bloque de CPU escribimos:

Al reiniciar el servidor por completo, nos aparecerá la CPU del hypervisor.

Si os fijáis, en “flags” ya tenemos todas las instrucciones de CPU, por lo que para ciertas tareas debería ir algo más rápido.

¿Cuánta mejora supone esto? Entre un 3% y un 10%, quizás más dependiendo de si el programa en cuestión hace uso de las instrucciones que acabamos de activar para esa máquina virtual.

El único inconveniente aparece a la hora de migrar el servidor virtual de servidor físico. Para migrarlo, libvirt “arranca” una copia suspendida de la máquina virtual en el servidor físico de destino, y, si en dicho servidor no están todas las instrucciones ni es muy parecido al de origen, lo que puede ocurrir es que la máquina virtual no funcione correctamente, o directamente ni arranque.

Migrar de un AMD a un Intel no suele funcionar, ni al contrario. Ni migraciones entre diferentes kernels. Pero en el caso que nos ocupa, si la CPU de destino no se parece en nada a la de origen el sistema no funcionará. Otro día comentaré más acerca de la magia de las migraciones y como funcionan internamente.

Leave a Comment

Your email address will not be published. Required fields are marked *