22 votos

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

Estamos utilizando Ubuntu 12.04 con los siguientes parámetros:

  • Dell R910
  • Kernel 3.2.0-25-generic #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 Intel(R) Xeon(R) CPU E7- 4870 a 2,40GHz (cada una con 10 núcleos físicos núcleos, HT e Intel VT habilitados)
  • Los huéspedes 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.

Normalmente utilizamos "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 hemos ejecutado ningún benchmark, pero digamos que la copia de grandes cantidades 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 tardaban alrededor de 2:40h en copiarse ahora se copian en 40 minutos. Por supuesto esto no es una prueba de alta calidad y hay mucho espacio para tener un intento más profesional. Pero esto es un claro indicador de que la elección del modelo correcto de CPU podría afectar fuertemente el rendimiento del huésped.

Ahora me entró la 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 la que más rinde de la lista. Ahora me pregunto, ¿cómo saber qué modelo de CPU es el mejor para mi huésped? Navegando por Internet, he encontrado los siguientes recursos:

Si leo correctamente esos sitios, afirman que "-cpu host" podría traer el mejor rendimiento. Todavía no tengo ninguna preocupación sobre la migración, ya que ambos hosts KVM están equipados por igual (exactamente el mismo hardware).

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

Mis disculpas si pude encontrar esta información por mi cuenta - hice varias búsquedas en Google y navegué por muchos sitios web. No he podido encontrar nada que responda a mi pregunta.

0 votos

¿Por qué molestarse con el parámetro -cpu? Simplemente déjalo fuera.

1 votos

¿Por qué no molestarse en hacerlo? Parece que podría mejorar el rendimiento.

0 votos

Si tiene que intervenir y emular cosas, va a perjudicar el rendimiento. Pruébalo sin.

15voto

dyasny Puntos 11858

En realidad es muy sencillo. Para clústeres homogéneos y configuraciones de un solo host, utilice la opción host opción. Para clusters mixtos, utilice la versión de CPU más baja disponible, así que si un host es Penryn y el otro Nehalem, utilice Penryn en ambos.

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

Volviendo al rendimiento, definitivamente necesitas virtio en todos los lugares donde puedas ponerlo. Y si aún así te encuentras con cuellos de botella en el rendimiento, normalmente se pueden solucionar caso por caso, dependiendo de dónde se produzcan.

[offtop]Sobre tu elección de distribución ya he comentado en otro hilo[/offtop]

0 votos

Gracias dyasny, esperaba que me respondieras y me dieras una especie de "regla de oro".

11voto

Gregory MOUSSAT Puntos 711

Los invitados de Windows actualmente no tienen VirtIO

No pierdas más tiempo con los retoques.
Instala los drivers de virtIO y vuelve. La diferencia es tan grande que cualquier mejora que puedas encontrar ahora no tendrá sentido con virtIO.

Sólo un ejemplo con uno de nuestros servidores:
- sin virtIO un W2k3 puede manejar 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 ralentización. Y añadimos otra máquina virtual para ejecutar SQL Server en el mismo ordenador físico

0 votos

Gracias por la pista. Sí, VirtIO debería estar definitivamente habilitado, pero nos encontramos con algunos problemas con el invitado de Windows 2003 que deberían resolverse primero. Además de eso, quiero tener una aclaración sobre el tema del modelo de CPU.

0 votos

Esta es una de las razones por las que uso Hyper-V. Desde 2008 esto significa NO INSTALAR y significa que todos los drivers para Hyper-V se mantienen con Windows Update. Los problemas de compatibilidad allí son deamn mortal.

0 votos

@TomTom Hyper-V no es el único hipervisor certificado para ejecutar Windows. Y la certificación en este contexto significa SVVP/WHQL.

10voto

Tom Puntos 720

Qemu no funciona de la misma manera que muchos otros hipervisores. Para empezar, puede proporcionar una emulación completa. Eso significa que puedes ejecutar código x86 en un procesador ARM, por ejemplo. Cuando está en modo KVM, como lo estás usando, en realidad no hace eso... el procesador está expuesto sin importar qué, pero lo que se reporta al SO será cambiado por el -cpu flag.

Si quieres velocidades más rápidas, es un punto de partida para tratar de igualar las capacidades del procesador virtual a tu procesador real lo mejor posible. Eso reducirá los casos en los que se llamen opcodes subóptimos para ejecutar tareas, y también reducirá los opcodes que no son posibles en su hardware siendo traducidos a otra cosa primero. Dado que tu modelo de procesador Xeon fue lanzado a principios de 2011, probablemente soporta mayormente en línea con la serie Core i7. Por eso, yo diría que la arquitectura Nehalem es su mejor emulación.

Citando uno de sus enlaces ( Ajuste de KVM ):

Para pasar todas las funciones disponibles del procesador anfitrión al huésped, utilice el conmutador de línea de comandos

 qemu -cpu host

si desea mantener la compatibilidad, puede exponer las características seleccionadas a su huésped. Si todos sus anfitriones tienen estas características, la compatibilidad se mantiene:

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

Por lo tanto, si crees que puedes acabar moviendo las cosas lo suficiente como para crear un problema, podrías encontrar todos los conjuntos de instrucciones compatibles que crees que soporta cualquier procesador que tengas ahora o que pueda tener en el futuro y hacer una lista con ellos.

Sin embargo, la mayoría de las veces, querrá seguir -cpu host . Especificar una CPU con menos banderas disponibles significa que las aplicaciones evitarán usar características que podrían hacerlas más rápidas.

4 votos

Está usando KVM, que necesita esas extensiones de virtualización y no funciona haciendo emulación; aunque esté basado en qemu

1 votos

¡Todavía +1 voto de mi parte por los esfuerzos y la recomendación de usar -cpu host!

3voto

Joe Huss Puntos 51

Te estás confundiendo con la opción '-cpu host'. Esta opción NO habilita sólo todas las características de la CPU específicas de su sistema anfitrión, sino que habilita TODAS las características que su CPU soporta y todas las que pueden ser emuladas aunque su CPU no las soporte.

-cpu host
es una buena opción pero no la más eficiente, ya que puede habilitar opciones que pueden ser emuladas y que su cpu no soporta, el sistema invitado puede ser ligeramente ralentizado cada vez que intente utilizar una de estas características que necesita ser emulada.

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

1 votos

Inicialmente pensé que esta respuesta se refería al soporte de instrucciones, por ejemplo, el soporte de SSE que podría ser emulado. Pero, por supuesto, eso no tiene sentido, ya que se ejecuta en modo KVM o TCG y no una mezcla de ambos. Así que supongo que la emulación a la que se refiere aquí podría ser cosas como x2apic donde no hay soporte h/w pero el kernel puede fingirlo. Sólo menciono esto para tratar de aclarar lo anterior, ya que me había confundido inicialmente.

-2voto

Marc Cyr Puntos 1

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: