¿Una máquina virtual con 2 CPU es realmente más rápida que una con 4 CPU?

67

Nuestro departamento de TI creó una VM con 2 CPU asignadas en lugar de las 4 que solicité. Su razón es que la VM funciona mejor con 2 CPU en lugar de 4 (según ellos). La razón es que el hipervisor VM (VMWare en este caso) espera a que todas las CPU estén disponibles antes de activar cualquiera de ellas. Por lo tanto, lleva más tiempo esperar 4 CPU en lugar de 2.

¿Tiene sentido esta afirmación?

AngryHacker
fuente

Respuestas:

62

Esto solía ser cierto, pero ya no es exclusivamente cierto.

A lo que se refieren es a una estricta programación conjunta .

Lo más importante de todo, mientras que en el estricto algoritmo de programación conjunta, la existencia de una vCPU retrasada hace que toda la máquina virtual se detenga conjuntamente. En el algoritmo de co-programación relajado, una vCPU líder decide si debe detenerse conjuntamente en función de la inclinación contra la vCPU hermana más lenta

Ahora, si el host solo tiene 4 hilos, entonces sería tonto asignarlos todos. Si tiene dos procesadores y 4 subprocesos por procesador, es posible que no desee asignar todo el contenido de un solo procesador, ya que su hipervisor debe tratar de mantener las vCPU en el mismo nodo NUMA para que el acceso a la memoria sea más rápido, y estará haciendo que este trabajo sea más difícil al asignar un socket completo a una sola VM (consulte la página 12 de ese PDF anterior).

Por lo tanto, hay escenarios en los que menos vCPU pueden funcionar mejor que más, pero no es cierto el 100% del tiempo.

Dicho todo esto, rara vez asigno más de 3 vCPU por invitado. Todos obtienen 2 de manera predeterminada, 3 si es una carga de trabajo pesada y 4 para cosas como servidores SQL o máquinas virtuales de procesamiento por lotes realmente pesadas, o un servidor de terminal con muchos usuarios.

Mark Henderson
fuente
3
Solo un lado, incluso aparte de los obstáculos de virtualización, generalmente es complicado escribir software que explote el paralelismo. Si sus chicos de software no son lo suficientemente buenos, en realidad podría ser mejor tener cuatro hosts virtuales que ejecuten una instancia del software cada uno que un host que ejecute cuatro subprocesos de ejecución.
Luaan
44
@Luaan La caja tiene SQL Server, así que supongo que tienen algunos buenos tipos de software allí.
AngryHacker
1
@AngryHacker sí, el servidor SQL puede usar los 4 núcleos de manera muy eficiente, suponiendo que tenga la MAXDOPconfiguración adecuada . Sin embargo, dependiendo de la carga de trabajo, un servidor SQL demasiado gravado suele ser un signo de un mal diseño de la base de datos: índices incorrectos, sin índices agrupados, demasiados índices, sin optimización, etc. (no siempre, pero a menudo).
Mark Henderson
1
@Luaan Eso sigue siendo paralelismo ... solo con una latencia mucho mayor si necesitan hablar entre ellos. :)
reirab
@ MarkHenderson Está bastante bien optimizado, pero algunas cargas de trabajo son demasiado grandes para ser manejadas fácilmente por 2 CPU más un montón de otras consultas al mismo tiempo.
AngryHacker
15

Esto depende en gran medida del hipervisor subyacente y los administradores que lo ejecutan, permítanme explicar:

  1. Es una mala práctica darle arbitrariamente 4 CPU solo porque lo solicitó. En general, crees que necesitas 4; pero el monitoreo de recursos dice que solo necesita 1.
  2. VMware ESXi, por ejemplo, requiere bloquear todas las pCPU cuando una vCPU solicita recursos de CPU ; así que en este hipervisor es malo para el rendimiento. KVM no hace el bloqueo como lo hace ESXi; utiliza el programador del núcleo subyacente, pero aún así a largo plazo puede crear contención de CPU.
  3. Si está construyendo sistemas desde el principio con 4 CPU, realmente no está escalando, sino hacia arriba (lo cual es una mala práctica, especialmente en las máquinas virtuales). Es posible que desee comprobar cómo está diseñando lo que sea que esté trabajando para que pueda construirse a escala para las infraestructuras de nube modernas de hoy.

¿Qué puedes aprender de esto? Siempre cree máquinas virtuales con recursos mínimos y aumente según sea necesario. Escale siempre en lugar de aumentar y podrá ejecutar su aplicación en cualquier lugar.

Debido al bloqueo que se puede experimentar con el hipervisor, es cierto que 2 CPU pueden ser más rápidas que 4 CPU.


fuente
4

Sí, la declaración tiene sentido en general. Sin embargo, es algo que debe probar para su configuración y carga de trabajo exactas. A veces, más CPU es mejor si realmente puede aprovecharlas. Sin embargo, si en realidad no tiene tanto paralelismo, una VM configurada con menos CPU a menudo funcionará ligeramente mejor, ya que evita ralentizaciones debido a pausas del estado de CPU Ready.

He reducido las vCPU en varias de nuestras máquinas virtuales y he visto una mejora en el rendimiento en la mayoría. Un puñado empeoró y fue necesario aumentar el recuento de vCPU.

Brian Knoblauch
fuente