KVM / Qemu, Ubuntu: ¿Por qué más CPUs invitados mejoran la E / S de disco rápidamente?

9

Tenemos un clúster Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt que consta de dos nodos. Cada nodo ejecuta Ubuntu 12.04 64 Bit con los siguientes paquetes / versiones:

  • Kernel 3.2.0-32-generic # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • marcapasos 1.1.7
  • latido del corazón 3.0.5

Los invitados virtuales ejecutan Ubuntu 10.04 64 Bit y Ubuntu 12.04 64 Bit. Utilizamos una función libvirt para pasar las capacidades de las CPU host a los invitados virtuales para lograr el mejor rendimiento de la CPU.

Ahora aquí hay una configuración común en este clúster:

  • La "supervisión" de VM tiene 4 vCPU
  • La "supervisión" de VM utiliza ide como interfaz de disco (actualmente estamos cambiando a VirtIO por razones obvias)

Recientemente realizamos algunas pruebas simples. Sé que no son profesionales y no alcanzan altos estándares, pero ya muestran una fuerte tendencia:

El nodo A ejecuta VM "bla" El nodo B ejecuta VM "monitoreo"

Cuando sincronizamos un archivo de VM "bla" a VM "monitoreo", alcanzamos solo 12 MB / s. Cuando realizamos un simple dd if = / dev / null of = / tmp / blubb dentro de la "monitorización" de VM, alcanzamos alrededor de 30 MB / s.

Luego agregamos 4 vCPU más a la "supervisión" de la VM y la reiniciamos. La "supervisión" de VM ahora tiene 8 vCPU. Volvimos a ejecutar las pruebas con los siguientes resultados: cuando sincronizamos un archivo de VM "bla" a VM "monitoreo" ahora alcanzamos 36 MB / s. Cuando realizamos un simple dd if = / dev / null of = / tmp / blubb dentro de la "monitorización" de VM ahora alcanzamos alrededor de 61 MB / s.

Para mí, este efecto es bastante sorprendente. ¿Cómo es que aparentemente agregar más CPU virtuales para este invitado virtual automáticamente significa más rendimiento de disco dentro de la VM?

No tengo una explicación para esto y realmente agradecería su aporte. Quiero comprender qué causa este aumento del rendimiento, ya que puedo reproducir este comportamiento al 100%.

Valentin
fuente
2
Use una herramienta de evaluación comparativa especialmente diseñada como iozone o bonnie ++ para ayudar a eliminar otras variables.
ewwhite
Sería interesante cómo se ven las cargas reales de la CPU ... es algo introducido por la CPU en un lugar oculto (rsync plus probablemente ssh ciertamente lo es en cierta medida, por lo que los controladores de red se introdujeron de esa manera, también dd podría hacer cosas inesperadas vinculadas a la CPU ...), ¿o en realidad las cosas se están esperando subóptimamente debido a menos hilos de ejecución disponibles?
rackandboneman
3
ejecute kvm_tracepara ver cómo IO_Exitscambia el número de cambios cuando cambia los números de CPU. Supongo que es porque está utilizando IDE, que se programa con las CPU invitadas. Con virtio, el rendimiento debe ser consistente, y cuando el plano de datos está en qemu, obtendrá un impulso drástico. Otra suposición puede ser el hecho de que está utilizando una distribución conocida por una pila de virtualización defectuosa.
dyasny
@ ewwhite: Sí, realizar pruebas profesionales sería una buena opción. Sin embargo, quiero entender primero por qué ocurre este comportamiento de E / S. @ rachandboneman: cuando miré por última vez, las 4 CPU tenían un valor de espera muy alto (alrededor del 70-80%). @dyasny: Gracias, lo intentaré. ¿Cómo puedo verificar que el plano de datos esté activado / utilizado actualmente?
Valentin
El plano de datos es experimental por ahora, y estoy bastante seguro de que la primera distribución para recogerlo será Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Respuestas:

9

Daré una idea / explicación muy aproximada.

En la situación de OP, además de medir dentro de la VM, también se debe observar el host.

En este caso, podemos suponer que los siguientes son correctos

  1. En todas las pruebas, el ancho de banda de E / S (disco) del host no está al máximo. A medida "monitoring"que la E / S VM ( ) aumenta con más CPU asignadas. Si la E / S del host ya estaba al máximo, no debería haber ganancia de rendimiento de E / S.
  2. "bla"no es el factor limitante Como el "monitoring"rendimiento de E / S mejoró sin cambios en"bla"
  3. La CPU es la fábrica principal para aumentar el rendimiento (en el caso de OP) Dado que la E / S no es el cuello de botella, y OP no menciona ningún cambio en el tamaño de la memoria. ¿Pero por qué? ¿O como?

Factor adicional

  1. Escribir lleva más tiempo que Leer Esto es lo mismo para VM y para host. Dicho en términos extremadamente simples: VM espera a que el host termine de leer y escribir.

¿Qué sucede cuando se asigna más CPU "monitoring"?

Cuando "monitoring"se le asignan más CPU, gana más potencia de procesamiento, pero también gana más tiempo de procesamiento para E / S.

Esto no tiene nada que ver, rsyncya que es un programa de un solo hilo.

Es la capa de E / S que utiliza la mayor potencia de la CPU, o más precisamente, el mayor tiempo de procesamiento.

Si se utiliza el programa de monitoreo de la CPU (por ejemplo, top) "monitoring"durante la prueba, mostrará no uno, pero todo el uso de la CPU aumentará y también% wa. % wa es el tiempo de espera empleado en E / S.

Este aumento de rendimiento solo ocurrirá cuando la E / S del host no sea máxima. fuera.

No puedo encontrar la programación de la CPU en el sitio de KVM, pero hay un blog que menciona que KVM está usando CFS y cgroups, a continuación se encuentra la cita

Dentro de KVM, cada vcpu se asigna a un proceso de Linux que, a su vez, utiliza asistencia de hardware para crear los 'humo y espejos' necesarios para la virtualización. Como tal, una vcpu es solo otro proceso para el CFS y también es importante para los cgroups que, como administrador de recursos, le permite a Linux administrar la asignación de recursos, generalmente proporcionalmente para establecer asignaciones de restricciones. cgroups también se aplica a la memoria, la red y las E / S Los grupos de procesos pueden formar parte de un grupo de programación para aplicar requisitos de asignación de recursos a grupos jerárquicos de procesos.

En pocas palabras, más cpu = más tiempo de cpu = más intervalo de tiempo de E / S en un período de tiempo determinado.

John Siu
fuente
Gracias por escribir esta respuesta. "Más vCPU significa más tiempo de procesamiento para E / S" es la explicación que estaba buscando. Vale la pena la recompensa!
Valentin