¿Cuánta sobrecarga tiene la virtualización x86 / x64 (probablemente usaré VirtualBox, posiblemente VMWare, definitivamente no paravirtualización) para cada una de las siguientes operaciones, un host Win64 y un invitado Linux64 que usan virtualización de hardware Intel?
Código de 64 bits de modo de usuario puramente vinculado a la CPU
Código de 32 bits puramente vinculado a la CPU en modo usuario
Archivo de E / S en el disco duro (me importa principalmente el rendimiento, no la latencia)
Red de E / S
Primitivas de sincronización de subprocesos (mutexes, semáforos, variables de condición)
Cambios de contexto de subprocesos
Operaciones atómicas (usando el
lock
prefijo, cosas como comparar e intercambiar)
Estoy principalmente interesado en el caso x64 asistido por hardware (Intel y AMD) pero no me importaría escuchar sobre la traducción binaria no asistida y los casos x86 (es decir, host e invitado de 32 bits). No estoy interesado en la paravirtualización.
fuente
Respuestas:
Descubrí que no hay una respuesta simple y absoluta para preguntas como la suya. Cada solución de virtualización se comporta de manera diferente en pruebas de rendimiento específicas. Además, las pruebas como el rendimiento de E / S de disco se pueden dividir en muchas pruebas diferentes (lectura, escritura, reescritura, ...) y los resultados variarán de una solución a otra y de un escenario a otro. Es por eso que no es trivial señalar que una solución es la más rápida para E / S de disco, y es por eso que no hay una respuesta absoluta para etiquetas como gastos generales para E / S de disco.
Se vuelve más complejo cuando se trata de encontrar una relación entre diferentes pruebas de referencia. Ninguna de las soluciones que he probado tuvo un buen rendimiento en las pruebas de microoperaciones. Por ejemplo: Dentro de la VM, una sola llamada a "gettimeofday ()" tardó, en promedio, 11.5 veces más ciclos de reloj en completarse que en el hardware. Los hipervisores están optimizados para aplicaciones del mundo real y no funcionan bien en microoperaciones. Esto puede no ser un problema para su aplicación que puede encajar mejor como una aplicación del mundo real. Me refiero a micro-operación a cualquier aplicación que gaste menos de 1,000 ciclos de reloj para terminar (para una CPU de 2.6 GHz, se gastan 1,000 ciclos de reloj en 385 nanosegundos, o 3.85e-7 segundos).
Hice pruebas exhaustivas de referencia en las cuatro soluciones principales para la consolidación del centro de datos para la arquitectura x86. Hice casi 3000 pruebas comparando el rendimiento dentro de las máquinas virtuales con el rendimiento del hardware. He denominado 'sobrecarga' la diferencia del rendimiento máximo medido dentro de VM (s) con el rendimiento máximo medido en hardware.
Las soluciones:
Los SO invitados:
Información de prueba:
Software de referencia:
CPU y memoria: referencia de Linpack para 32 y 64 bits. Esto es CPU y memoria intensiva.
E / S de disco y latencia: Bonnie ++
Red I / O: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR y UDP_STREAM
Microoperaciones : rdtscbench : llamadas al sistema, comunicación entre tuberías de proceso
Los promedios se calculan con los parámetros:
CPU y memoria: PROMEDIO (HPL32, HPL64)
E / S de disco: PROMEDIO (put_block, rewrite, get_block)
E / S de red: PROMEDIO (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)
Micro-operaciones PROMEDIO (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])
Para mi escenario de prueba, usando mis métricas, los promedios de los resultados de las cuatro soluciones de virtualización son:
Sobrecarga de la capa de VM, invitado de Linux:
CPU y memoria: 14.36%
Red I / O: 24.46%
E / S de disco: 8.84%
Latencia de disco para lectura: 2.41 veces más lenta
Tiempo de ejecución de microoperaciones: 10.84 veces más lento
Sobrecarga de la capa VM, invitado de Windows:
Promedio de CPU y memoria para 32 y 64 bits: 13.06%
Red I / O: 35.27%
E / S de disco: 15,20%
Tenga en cuenta que esos valores son genéricos y no reflejan el escenario de casos específicos.
Consulte el artículo completo: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions
fuente
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds
, ¿no debería ser una simple división de 1,000 por 2,600,000 para obtener la cantidad de segundos que toman 1,000 ciclos de reloj? (que no es 23 milisegundos)Hay demasiadas variables en su pregunta, sin embargo, podría intentar reducirla. Supongamos que utiliza VMware ESX, hace todo bien: la última CPU con soporte para virtualaization, herramientas VMware con almacenamiento paravirtualizado y controladores de red, mucha memoria. Ahora supongamos que ejecuta una sola máquina virtual en esta configuración. Según mi experiencia, debería tener ~ 90% de la velocidad de la CPU para la carga de trabajo vinculada a la CPU. No puedo decirle mucho sobre las velocidades de red, ya que estamos usando enlaces de 1 Gbps y puedo saturarlo sin ningún problema, puede ser diferente con el enlace de 10 Gbps, sin embargo, no tenemos ninguno de esos. El rendimiento de almacenamiento depende del tipo de almacenamiento, con el que puedo obtener alrededor del ~ 80% del rendimiento de almacenamiento con almacenamiento local, pero para NFS de 1 Gbps está cerca del 100% ya que la red es un cuello de botella aquí. No puedo decir sobre otras métricas,
Estos números son muy aproximados y dependen en gran medida de su tipo de carga, su hardware, su red. Se vuelve aún más difuso cuando ejecuta múltiples cargas de trabajo en el servidor. Pero lo que quiero decir aquí es que, en condiciones ideales, debería ser capaz de llegar al 90% del rendimiento nativo.
Además, según mi experiencia, el problema mucho mayor para las aplicaciones de alto rendimiento es la latencia y es especialmente cierto para las aplicaciones de servidor cliente. Tenemos un motor de cómputo que recibe solicitudes de más de 30 clientes, realiza cálculos breves y devuelve resultados. En el metal desnudo, generalmente empuja la CPU al 100%, pero el mismo servidor en VMware solo puede cargar la CPU al 60-80% y esto se debe principalmente a la latencia en el manejo de solicitudes / respuestas.
fuente
No he profundizado en el rendimiento de las primitivas básicas como el cambio de contexto y las operaciones atómicas, pero aquí están mis resultados de una prueba de fuerza bruta que realicé recientemente con diferentes hipervisores. Debería ser indicativo de lo que podría esperar si su ancho de banda de CPU y RAM es mayormente limitado.
http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/
fuente