martes, 16 de septiembre de 2008

Compatibilidad de VMotion

En mi opinión, una de las grandes ventajas de VMware (y poco a poco sus competidores) es la capacidad de realizar VMotion. Pienso que es una ventaja clave y que cambia mucho de tener un entorno con o sin ello. Sin ello, simplemente estas poniendo muchos huevos en una cesta, que algun dia puede romperse o puede necesitar pararse. Con ello, tienes la posibilidad de mover esos huevos para arreglar la cesta.

Para realizar VMotion, además de tener un almacenamiento centralizado SAN/NAS, es necesario que las CPUs de los dos hosts entre los que se va a realizar VMotion sean de la misma familia o compatibles.
Cuando se nos da el caso de que entre los hosts no hay compatibilidad de CPUs podemos usar las mascaras personalizadas de CPU para conseguir realizar VMotion.
Tengo que decir que VMware no da soporte a esto y que no debe hacerse en produccion. También tengo que decir que nunca he visto que haya dado ningun problema y también lo he usado en produccion, asi que cada uno que vea.

Para crear una mascara (custom mask) para las VMs deberemos fijarnos en los valores de los registros de las CPUs de los servidores incompatibles y ver las diferencias para enmascararlas.

El primer paso es recolectar la informacion que necesitamos usando la genial herramienta VMotion Info de run-virtual.
Con ella podemos recabar toda la informacion de nuestra granja de servidores y ver cuales son incompatibles entre sí. Recomiendo activar la opcion "Con Debug" porque nos da los registros de las CPUs ya en binario y solo tenemos que fijarnos en eso:


Como se ve, hay varios procesadores IBMs(entre ellos compatibles) y tres CPUs diferentes de DELL(entre ellos compatibles).
Si intentamos realizar VMotion entre cualquier IBM y cualquier DELL nos dara un error de compatibilidad:

Como vemos, el error esta en el registro EAX del nivel 1. Para arreglarlo anotamos el valor del registro de los servidores incompatibles entre sí y vemos la mascara por defecto que tienen nuestras VMs (Edit Settings, Pestaña Options, Advanced, y en CPU Identification Mask pinchar en Advanced).


Como vemos en la leyenda, hay bits que directamente no interesan para nada (X), de hecho normalmente solo nos interesan los marcados con H, con R, con 0 con 1...

Veamos, tenemos:
Server1 Level1 EAX:   0000 0000 0000 0000 0000 0000 0000 0110 
Server2 Level1 EAX: 0000 0000 0000 0000 0000 0110 1111 0110

Standard CPU Mask Level1 EAX: XXXX HHHH HHHH XXXX XXXX HHHH XXXX XXXX
Custom CPU Mask Level1 EAX: ---- ---- ---- ---- ---- -00- ---- ----
Effective CPU Mask Level1 EAX: XXXX HHHH HHHH XXXX XXXX H00H XXXX XXXX

Como podemos ver sólo nos interesa los bytes segundo, tercero y sexto(los demas llevan X asi que lo podemos dejar por defecto). En el caso del segundo y tercero byte, vemos que son iguales, luego no tenemos que hecer nada. En el caso del sexto vemos que los bits del medio son diferentes asi que los enmascaramos.

Ya solo nos queda probar a realizar VMotion, si hay algun otro registro que tocar, el error nos lo describirá(registro ECX, EBX, level 0, etc...)

Deberemos poner la mascara en cada VM con la que queramos realizar Vmotion.

Es importnate también darse un paseo por la web de IBM o Dell y ver que es lo que hemos podido enmascarar a la VM, para ver posibles efectos que pueda tener sobre ella. Yo hasta el momento no he tenido ningun problema. (ejemplo: http://www.intel.com/design/processor/applnots/241618.htm)

Cualquier comentario o correccion será bienvenido!

No hay comentarios: