¿Cuánta sobrecarga tiene la virtualización x86 / x64?

24

¿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 lockprefijo, 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.

dsimcha
fuente
(1) "x86" significa 32 bits. No podrá ejecutar código de 64 bits. La virtualización AMD64 (también conocida como x64) tiene diferentes limitaciones porque requiere extensiones de hardware. (2) ¿Se refiere a virtualización x86 por traducción binaria (solo x86) o virtualización asistida por hardware (VT)?
Skyhawk
@Miles: he aclarado la pregunta.
dsimcha

Respuestas:

26

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:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

Los SO invitados:

  • Microsoft Windows 2008 R2 64 bits
  • Red Hat Enterprise Linux 6.1 64 bits

Información de prueba:

  • Servidores: 2X Sun Fire X4150 cada uno con 8GB de RAM, 2X CPU Intel Xeon E5440 y cuatro puertos Ethernet gigabit
  • Discos: discos SAS 6X 136GB a través de iSCSI a través de Gigabit Ethernet

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

Peter Senna
fuente
2
Este artículo está desactualizado
dyasny
1
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)
dvdvorle
2
@Señor. Feliz, tienes razón. Obtuve 385 nanosegundos por: 1000/2600000000 = 0.000000385 = 385 nanosegundos. ¿Estás de acuerdo con esto? Gracias por señalar esto.
Peter Senna
@dyasny, estoy buscando hardware para repetir las pruebas con versiones actualizadas. ¿Alguna idea de dónde puedo encontrarlo?
Peter Senna
el hardware se puede encontrar fácilmente en una tienda
dyasny
4

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.

dtoubelis
fuente
Puedo decir por experiencia que saturar un enlace de 10 GbE con una sola VM es muy difícil. Hemos utilizado VMWare FT, que puede saturar fácilmente un enlace de 1 Gbps por sí solo, más de 10 Gbe y no estuvo cerca de saturarlo.
Mark Henderson
0

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/

Gordan
fuente
2
Es genial que tengas información para Xen y KVM ... ¿Pero qué pasa con los dos hipervisores más populares? Están completamente desaparecidos. Y ha incluido varios hipervisores tipo 2, ningún SysAdmin sensato lo usaría para la producción.
Chris S
Abajo votado. Link está muerto.
Tim Duncklee