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%.
kvm_trace
para ver cómoIO_Exits
cambia 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.Respuestas:
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
"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."bla"
no es el factor limitante Como el"monitoring"
rendimiento de E / S mejoró sin cambios en"bla"
Factor adicional
¿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,
rsync
ya 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
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.
fuente