martes, 23 de septiembre de 2008

vSMP (virtual symmetric multiprocessing)

Algo que me vienen preguntando ultimamente es cuándo usar vSMP.
¿Debemos asignar a una VM más de un virtual processor?

Deberíamos usarlo solamente cuando sabemos que se va a aprovechar por las aplicaciones que lleva dentro la VM, no simplemente por pensar "cuantas más vCPU tenga una VM mejor". Hay personas que piensan que cuantas más vCPU tenga una VM mejor, y esto no es necesariamente cierto, de hecho puede correr peor con dos vCPU que con una.

La razon para esto es que el scheduler de CPU del hypervisor debe encontrar el numero cores disponibles simultaneamente igual al numero de vCPUs que tiene asignada la VM. Por ejemplo, una VM con cuatro vCPUs deberá tener cuatro cores disponibles a la vez para cada petición de CPU que hace al host. Si dichos cuatro cores no están disponibles en ese momento (porque hay otra VM usando dos, por ejemplo) la VM deberá esperar hasta que estén disponibles.

Tips respecto a esto:
  • Cuantos menos vCPUs lleven las VMs mejor.
  • Sólo asignar a una VM multiples vCPUs cuando sabemos que la aplicacion que lleva dentro va a hacer uso de ello.
  • Nunca asignar el mismo numero de vCPUs que el numero total de cores de tu host.(pCPUs). Mejor si mantenmos el doble de cores fisicos que los vCPUs de la VM que más tiene. (Por ejemplo, 8 cores fisicos = 4 vCPU como maximo)
  • Si estas haciendo P2V de un servidor Windows con varias CPUs a una VM con una vCPU, cambia el HAL de multiprocessor a uniprocessor.
  • Si puedes, evita usar afinidad de CPU.


Actualización:
Este link, aunque un poco viejo, explica muy tecnicamente el comportamiento con vSMP y sin él.

3 comentarios:

Anónimo dijo...

Si un programa no está optimizado para multiprocesamiento todo lo que leí siempre indicó que teniendo muchos micros a menos frecuencia esta aplicación no logra aprovecharlos y quizás corra mejor en un solo procesador de 3 GHZ que en 4 de 2GHZ. Pero que pasa al haber tantas capas entre la aplicacion y el hardware (Sistema operativo virtualizado - Virtualizacion - Sistema operativo real) EJ.: (Sistema contable sobre Windows 2003 Server en vmware ESX/Linux) alguna de esas capas hace que esa aplicación no optimizada aproveche al máximo el hardware? o los desarrolladores y gente que los vende solo pinden más procesadores como algun tipo de escusa porque no funcionan como deberían? Hay alguna forma de saber si una aplicacion está optimizada analizando su comportamiento?

Te hago esta consulta porque donde trabajo hay reticencia a utilizar equipos virtuales porque dicen que no es el mismo rendimiento, cuando muchisimas veces han trabajado con equipos virtuales en producción y ni cuenta se han dado. Pero lo que quiero es ir con algo en la mano y explicarles: " Esto es asi por estas razones......," muchas de las cuales he encontrado en este artículo y por las cuales te agradezco.
Saludos y Muchas Gracias.-

Josep Ros dijo...

Gran artículo Jon!!!

Tu si que sabes y no el josep ros ese que va engañando a la gente y haciendo FUD. Ahora dice que vmware ha creado una tecnología llamada laheliaoparda vmotion... qué desastre.

Un abrazo y sigue iluminándonos.

Josep

kurrin dijo...

Muchas gracias Josep por tus animos! Esa tecnologia (laheliaoparda vmotion) si que es buena!

Respondiendo a la pregunta de arriba, lo que debes hacer para convencer en tu trabajo de que la virtualizacion tiene cabida es contraatacar con datos.No te dejes confundir por los que venden, si piden más procesador es por pedir en la mayoria de casos. Todos los desarrolladores quieren el maximo de CPU, maximo de RAM y maximo de disco y achacan a eso la lentitud, cuando la mayoria de las veces son parametros no optimizados(indices, etc..).

Apuesto a que muchos de los servidores no pasan del 10% de uso de CPU nunca, y de media andaran por el 5-7% muy probablemente.
Midiendo esto, monitorizandolo, ya tendrás un dato para decir: "La CPU se esta infrautilizando".

El tema de la virtualizacion es algo que no se cree hasta que no se ve generalmente.
Entre el SO virtualizado y el procesador no hay muchas capas, por ello(como bien sabes) es mentira que las VMs sean mucho mas lentas que las fisicas. Es cierto que algo de rendimiento se pierde pero ¿Es eso notado por el usuario? Es decir, lo que nos debe importar es la sensacion del usuario.
Si tengo un servidor que no pasa del 10% nunca, ¿para que quiero ese 90% restante?

Entre el SO virtualizado y la CPU, está la capa de traslacion binaria, que es emular un set de instrucciones con otro. Sólo hay eso. El rendimiento perdido es infimo y desde luego despreciable en la mayoria de casos.

Si una aplicaicon no está optimizada para aprovechar el HW, virtualizada tampoco lo hará, al menos en lo que a CPU se refiere. (En otras cosas como la memoria sí que se beneficia de estar virtualizada, porque hay muchas paginas de memoria que se comparte entre VMs del mismo SO(por eso las VMs arrancan mucho mas rapido que las fisicas))

Tampoco te digo que todo sea virtualizable(por ejemplo hay cosas que mejor no ponerlas en virtual: un servidor de video con unos cuantos teras de disco lento..., u Oracle RAC...).

Espero que este conjunto de ideas(un tanto desordenadas) te ayuden.
Animo, que una vez que metes vmware en una empresa, se expanse como un virus!!!
Podrias empezar por maquinas de pruebas para que vayan viendo y perdiendo el miedo...

Para cualquier cosa me dices!