KVM: ¿Qué características de la CPU hacen que las máquinas virtuales funcionen mejor?

21

Estamos usando Ubuntu 12.04 con los siguientes parámetros:

  • Dell R910
  • Kernel 3.2.0-25-genérico # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x CPU Intel (R) Xeon (R) E7-4870 a 2.40 GHz (cada una con 10 núcleos físicos, HT e Intel VT habilitados)
  • Los invitados de Windows actualmente no tienen VirtIO, pero eso cambiará pronto

Estamos ejecutando varios invitados de Windows en esta máquina, uno de ellos es Windows 2003 32 Bit, otro Windows 2008 (64 Bit). Actualmente estamos luchando con problemas de rendimiento y jugamos con los modelos de CPU.

Usualmente usamos "qemu-system-x86_64 para nuestro invitado de Windows 32 Bit, por ejemplo:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

El rendimiento de este invitado resultó ser un poco bajo. Todavía no ejecutamos ningún punto de referencia, pero digamos que copiar una gran cantidad de datos (archivos) dentro de la VM de un directorio a otro va mucho más rápido cuando cambiamos el modelo de CPU de "-cpu qemu32" a "-cpu Nehalem ". Los archivos que tomaron alrededor de 2: 40h para copiar ahora se copian en 40 minutos. Por supuesto, esta no es una prueba de alta calidad y hay mucho espacio para un intento más profesional. Pero este es un claro indicador de que elegir el modelo de CPU correcto podría afectar en gran medida el rendimiento del huésped.

Ahora tengo curiosidad y corrí:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

Y:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

Con todas estas versiones diferentes, es un poco difícil de adivinar. "Nehalem" parece ser el más eficaz en esa lista. Ahora me pregunto, ¿cómo saber qué modelo de CPU es el mejor para mi invitado? Navegando por Internet, encontré los siguientes recursos:

Cuando leo esos sitios correctamente, afirman que "-cpu host" podría ofrecer el mejor rendimiento. Todavía no me preocupa la migración, ya que ambos hosts KVM están equipados por igual (exactamente el mismo hardware).

Entonces, ¿qué recomiendan los administradores experimentados de KVM? ¿Existe una regla de oro o incluso una matriz, como "este modelo es el mejor para ese SO huésped"?

Mis disculpas si pudiera encontrar esta información por mi cuenta: realicé varias búsquedas en Google y navegué por muchos sitios web. No pude encontrar algo que responda a mi pregunta.

Valentin
fuente
¿Por qué molestarse con el modificador -cpu? Solo déjalo afuera.
psusi
1
¿Por qué no molestarse con eso? Afaik podría traer mejoras de rendimiento.
Valentin
Si tiene que intervenir y emular cosas, perjudicará el rendimiento. Pruébalo sin.
psusi
2
Me acabo de enterar de que libvirt agrega el parámetro "-host qemu32" automáticamente, porque no lo configuramos.
Valentin
3
@psusi: Acabo de probarlo hoy ... cuando dejo el interruptor -cpu ausente, el rendimiento es tan bueno como elijo el mejor modelo de CPU posible.
Valentin

Respuestas:

13

Es bastante simple en realidad. Para clústeres homogéneos y configuraciones de host único, use la hostopción Para clústeres mixtos, use la versión de CPU más baja disponible, por lo que si un host es Penryn y el otro Nehalem, use Penryn en ambos.

Si está utilizando RHEV u oVirt, esto ya está integrado. VMWare tiene esto llamado "EVC" y lo posiciona como una gran característica.

Volviendo al rendimiento, definitivamente necesitas virtio donde sea que puedas ponerlo. Y si aún se encuentra con cuellos de botella en el rendimiento, estos generalmente se pueden abordar caso por caso, dependiendo de dónde ocurran.

[offtop] En su elección de distribución ya he comentado en otro hilo [/ offtop]

dyasny
fuente
¡Gracias, Dyasny, esperaba que respondieras y me proporcionaras algún tipo de "regla de oro"!
Valentin
11

Los invitados de Windows actualmente no tienen VirtIO

No pierdas más tiempo ajustando nada.
Instale los controladores virtIO y vuelva. La diferencia es tan grande que cualquier mejora que pueda encontrar ahora no tendrá sentido con virtIO.

Solo un ejemplo con uno de nuestros servidores:
- sin virtIO, un W2k3 puede manejar a unos 10 usuarios de Terminal Server
- con virtIO, la misma máquina con el mismo sistema operativo maneja actualmente de 120 a 125 usuarios con poca desaceleración. Y agregamos otra máquina virtual para ejecutar SQL Server uno en la misma computadora física

Gregory MOUSSAT
fuente
Gracias por la pista. Sí, VirtIO debería estar habilitado de manera defensiva, pero nos encontramos con algunos problemas con el invitado de Windows 2003 que primero deben resolverse. Además de eso, quiero tener una aclaración sobre el tema del modelo de CPU.
Valentin
Esta es una razón por la que uso Hyper-V. Desde 2008, esto significa NO INSTALAR y significa que todos los controladores para Hyper-V se mantienen con Windows Update. Los problemas de compatibilidad son muy letales.
TomTom el
@TomTom Hyper-V no es el único hipervisor certificado para ejecutar Windows. Y la certificación en este contexto significa SVVP / WHQL.
dyasny
1
No, pero es el único que funciona de fábrica, ya que tiene los controladores ya instalados;) Además, creo que XEN ya que se piggiback en los controladores de Hyper-V. No tener que mantener otro elemento actualizado externamente es algo realmente bueno. No me importa si están firmados, el punto es que no tengo que mirar a otro proveedor, ya que todo viene a través de la actualización de Windows. Solo deseo que MS abra Windows Update para softawre de terceros;)
TomTom
1
Dado que estoy seguro de que ha oído hablar de las plantillas de VM y de streaming, casi (casi) no las mencionaré :) Mi problema con Hyper-V es el soporte extremadamente pobre de los invitados de Linux.
dyasny el
8

Qemu no funciona de la misma manera que lo hacen muchos otros hipervisores. Para empezar, puede proporcionar una emulación completa. Eso significa que puede ejecutar código x86 en un procesador ARM, por ejemplo. Cuando está en modo KVM, mientras lo usa, en realidad no hace eso ... el procesador está expuesto sin importar qué, pero lo que se informa al sistema operativo cambiará con el -cpuindicador.

Si desea velocidades más rápidas, es un punto de partida para tratar de hacer coincidir las capacidades del procesador virtual con su procesador real de la mejor manera posible. Eso reducirá los casos en que se invoquen códigos de operación subóptimos para ejecutar tareas, y también reducirá los códigos de operación que no son posibles en su hardware que se traduce a otra cosa primero. Dado que su modelo de procesador Xeon se lanzó a principios de 2011, probablemente sea compatible principalmente con la serie Core i7. Por eso, diría que la arquitectura Nehalem es tu mejor emulación.

Citando uno de sus enlaces ( Tuning KVM ):

Para pasar todas las funciones de procesador host disponibles al invitado, use el interruptor de línea de comando

 qemu -cpu host

Si desea conservar la compatibilidad, puede exponer las funciones seleccionadas a su invitado. Si todos sus hosts tienen estas características, se conserva la compatibilidad:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

Por lo tanto, si siente que puede terminar moviendo las cosas lo suficiente como para crear un problema, puede encontrar todos los conjuntos de instrucciones compatibles que cree que cualquier procesador que tenga ahora o que pueda tener en el futuro admite y enumere esos.

La mayoría de las veces, sin embargo, desea seguir -cpu host. Especificar una CPU con menos indicadores disponibles significa que las aplicaciones evitarán el uso de funciones que podrían acelerarlas.

Jeff Ferland
fuente
44
Está usando KVM, que necesita esas extensiones de virtualización y no ejecuta emulación; incluso si está basado en qemu
Javier
1
¡Todavía hago +1 en mi voto por los esfuerzos y la recomendación de usar -cpu host!
Valentin
3

Está confundiendo la opción '-cpu host'. Esta opción NO habilita solo todas las funciones de la CPU específicas de su sistema host, habilita TODAS las funciones que admite su CPU y todo lo que puede emularse incluso si su CPU no las admite.

-cpu host
es una buena opción, pero no la más eficiente, ya que podría habilitar opciones que pueden emularse y que su CPU no admite, el sistema invitado puede ralentizarse ligeramente cada vez que intente usar una de estas características que necesita ser emulada .

Fuente: http://wiki.qemu.org/Features/CPUModels

Joe Huss
fuente
1
Inicialmente, pensé que esta respuesta se refería al soporte de instrucciones, por ejemplo, soporte SSE que podría emularse. Pero, por supuesto, eso no tiene sentido ya que ejecutas en modo KVM o TCG y no una mezcla de ambos. Entonces, supongo que la emulación a la que se hace referencia aquí podría ser cosas como x2apic donde no hay soporte h / w pero el núcleo puede fingirlo. Solo menciono esto para tratar de aclarar lo anterior, ya que inicialmente me confundió.
Neil McGill
-2

CentOS 6.7 me da el rendimiento adecuado de KVM + Spice en Dell R910. ¡Creo que una vez que lo pruebes no volverás a nada más (en serio)!

Marc Cyr
fuente