¿Cómo describir los requisitos de rendimiento de VMware para nuestra aplicación a un administrador de VMware?

23

A menudo, una instalación de nuestra aplicación basada en Debian estable en el sitio se ejecuta en una máquina virtual, generalmente en VMware ESXi. En el caso general, no tenemos visibilidad o influencia sobre su entorno de virtualización y no tenemos acceso, por ejemplo, al cliente VMware vCenter o equivalente. Aquí me concentro en VMware, porque eso es, con mucho, el más común que vemos.

A nosotros nos gustaria:

  • Informe al administrador de VMware de un cliente: puede ejecutar nuestra aplicación en, por ejemplo, su entorno VMware ESX, siempre que cumpla con los criterios de rendimiento X, Y y Z.
  • Ser capaz de determinar si los criterios X, Y y Z se cumplen de hecho continuamente (por ejemplo, también ahora ), incluso en un sistema en ejecución (no podemos detener nuestra aplicación y ejecutar puntos de referencia, y un punto de referencia inicial no será suficiente, ya que el rendimiento en Los entornos virtuales cambian con el tiempo).
  • Confíe en que si se cumplen los criterios X, Y y Z, tendremos recursos HW virtuales adecuados para ejecutar nuestra aplicación con un rendimiento satisfactorio.

Ahora, ¿qué son X, Y y Z?

Hemos visto una y otra vez que cuando hay problemas de rendimiento, el problema no es con nuestra aplicación, sino con el entorno de virtualización. Por ejemplo, otra máquina virtual usa toneladas de CPU, memoria o la SAN en la que los discos están realmente almacenados. Actualmente no tenemos forma de probar o refutar eso.

Teóricamente, también podría ser posible que a veces nuestra aplicación sea lenta ... ;-)

¿Cómo se determina la causa raíz de nuestros problemas de rendimiento: el entorno virtual o nuestra aplicación?

Normalmente hay 3 áreas para problemas de rendimiento CPU, memoria y E / S de DISCO.

UPC

En, por ejemplo, VMware, el administrador puede especificar Reserva y límite, expresado en MHz, pero ¿es, por ejemplo, 512 MHz en un host ESX exactamente igual a 512 MHz en otro host ESX, posiblemente en un clúster ESX completamente diferente?

¿Y cómo se mide si realmente lo conseguimos? Mientras nuestra aplicación se está ejecutando, tal vez podamos ver que tenemos una utilización de CPU del 212% en 4 CPU. ¿Es porque nuestra aplicación está haciendo mucho o porque otra VM en el mismo host está ejecutando una tarea intensiva de CPU y está usando toda la CPU?

Memoria (¿en globo?)

Si pedimos, por ejemplo, 16 GB de RAM, que a menudo se configura, pero debido a la expansión , en realidad solo obtenemos 4 GB y, sorprendentemente, nuestra aplicación funciona mal.

Uno puede preguntarle a las herramientas de VMware sobre el globo actual, pero descubrimos que a menudo miente (o al menos es inexacto). Hemos visto ejemplos en los que el sistema operativo cree que hay 16 GB de RAM total, la suma de la memoria residente (RSS) de todos los procesos es de 4 GB de RAM, pero solo hay 2 GB de RAM libre, incluso cuando las herramientas de VMware nos dicen que hay 0 globos: - (

Además, simplemente agregar RSS no es válido, ya que podría compartir fácilmente RAM, por ejemplo, memoria de copia en escritura, por lo que 512 MB + 512 MB no necesariamente significa 1 GB, pero podría significar algo menos. Por lo tanto, uno no puede simplemente restar RSS de todos los procesos para obtener una medida de la cantidad de RAM que debe estar libre y, por lo tanto, detectar un globo de forma confiable. Se pueden detectar algunos casos de globo, pero hay otros casos en los que el globo está en efecto, pero este método no puede detectarlo.

E / S de disco

Supongo que podríamos graficar con el tiempo la cantidad de lecturas y escrituras del disco, la cantidad de bytes leídos y escritos, y el% de espera IO. ¿Pero eso nos dará una imagen precisa de la E / S de disco? Me imagino que si hay un minero de bitcoin ejecutándose en otra VM que usa toda la CPU, nuestro% de espera de E / S aumentará, incluso si la SAN subyacente ofrece exactamente el mismo rendimiento, simplemente porque nuestros recursos de CPU disminuyen y, por lo tanto, IO espera ( que se mide en% ) sube.

En resumen, ¿qué lenguaje podemos usar para describir, por ejemplo, a un administrador de VMware, qué rendimiento necesitamos, de forma portátil y medible?

Peter V. Mørch
fuente
¿Cuáles son los requisitos reales de su aplicación? Lo que ha descrito hasta ahora no es suficiente para que yo pueda medir con precisión los requisitos de recursos en mi entorno, y estoy bien versado en VMware. Su público objetivo tendría un momento aún más difícil. En la práctica, termino haciendo caso omiso de los requisitos del proveedor y midiendo / dimensionando las máquinas virtuales en función de las métricas históricas y la observación utilizando vRealize Operations Manager.
ewwhite
1
@ewwhite: no soy un experto en hardware de ninguna manera. Pero déjenme ser específico y decir que funciona bien en un Core i7-5820K con 8GB de RAM. Discos magnéticos ca. 2015 está bien, SSD es mejor (puedo ser más específico aquí, si es necesario). Necesitamos 80 GB de espacio libre en disco.
Peter V. Mørch
2
Como administrador, diría, "cuántos núcleos necesito asignar, cuál es el requisito de RAM real, cuál es el requisito de almacenamiento desde una perspectiva de rendimiento e IOP, cuál es la tasa de crecimiento del almacenamiento, ¿estoy bien? con aprovisionamiento delgado, etc.? "
ewwhite
¿Qué requiere su aplicación desde una perspectiva de rendimiento? ¿Tiene puntos de referencia para su aplicación? Decir "It runs fine with x, y, and z"no es lo suficientemente preciso. Debe poder decir a sus clientes con precisión qué requiere su aplicación. Si le dan esos recursos y la aplicación funciona mal, entonces la pregunta no es "What do we need from a resource perspective?", pero"Why is it performing poorly even though the proper resources have been allocated?"
joeqwerty
1
@ewwhite: "Resuelto"? No. Todavía no tengo el placer de 25 palabras que puedo darle a un administrador de VMware, y luego ser capaz de probar y saber que obtendremos un rendimiento predecible, porque, como saben, "depende". Pero acepté su respuesta, porque ahora creo que un requisito tan preciso y medible no es posible y su información contribuye en gran medida a hablar el idioma adecuado. En el futuro, voy a recomendar que vayamos a la ruta "Si desea que solucionemos problemas de rendimiento, necesitaremos al menos ver el acceso a su vCenter".
Peter V. Mørch

Respuestas:

23
  • En serio, la mayoría de los administradores de VMware no son buenos en esto: mala comprensión de la gestión de recursos, a menudo sin conocimiento de Linux (ayuda) y falta de ancho de banda de tiempo. Creo que la mayoría de los administradores internos tienen dificultades para mantener un profundo conocimiento de virtualización.

  • ¡Por suerte, hay un libro que puedes leer !

  • La mayoría de los entornos de VMware no son excelentes: diseño de clúster deficiente, mala planificación de recursos , almacenamiento deficiente (es decir, Synology NAS), HA mal configurada, sin monitoreo o parcheo.

  • VMware como organización nos falla: son particularmente malos diseminando información actualizada y promoviendo las mejores prácticas. Las búsquedas básicas de preguntas comunes generan resultados de revisiones anteriores y de 2009 de VMware, a pesar de que los procesos y diseños han cambiado con el tiempo.

Todas estas cosas trabajarán en tu contra.

Debe determinar los requisitos reales de su solución. Ser capaz de afirmar con precisión que su dispositivo requiere: 2 vCPU, 8 GB de RAM y 500 IOP de rendimiento de almacenamiento sería muy útil para alguien como yo.

El otro enfoque es observar un ambiente saludable o ideal y extrapolar las métricas desde allí.

Usted ha descrito problemas con ciertas implementaciones. ¿Cuáles fueron los problemas y los cuellos de botella?


Un ejemplo de una máquina virtual del tamaño correcto:

Un servidor de Exchange para una organización de 300 usuarios.

  • Tenemos 6 semanas de carga de trabajo / mapas de calor de estrés versus tiempo.
  • 6 vCPU nos mantienen por encima de la zona de estrés con espacio de amortiguación para picos.
  • 32 GB de RAM nos mantiene por encima del valor de estrés, pero no es una cantidad irracional por encima de lo que realmente se necesita.

ingrese la descripción de la imagen aquí

  • Podría reclamar algunos GB de RAM y una vCPU, pero en conjunto, esta es una máquina virtual eficiente.
  • Sería aconsejable obtener este tipo de monitoreo de su aplicación en condiciones ideales.

ingrese la descripción de la imagen aquí


Ejemplos de monitoreo de recursos de VM.

Good-ish: - VM tiene el tamaño correcto. - La CPU está comprometida en exceso en el clúster, pero no estamos en conflicto.

ingrese la descripción de la imagen aquí

Malo-ish:

  • VM nunca obtendrá toda la RAM con la que está configurado.
  • VM ya está intercambiando RAM.
  • La CPU está muy configurada.

ingrese la descripción de la imagen aquí

ewwhite
fuente
2
Gracias, ewwhite por tu respuesta. En aras de la discusión, digamos que en un cliente, funciona muy bien con: 2 vCPU, 8 GB de RAM y 500 IOP de rendimiento de almacenamiento (de su respuesta). En otro sitio de clientes, pedimos lo mismo y lo obtenemos, según el administrador de VMware. Sin embargo, las 2vCPU se comparten con otras 17 máquinas virtuales hambrientas de CPU y la memoria RAM de 8GB también está en globo. No entiendo muy bien los discos VM, así que digamos que realmente lo entendemos. Nuestra aplicación funciona muy bien en el primero de estos dos entornos ESXi, y horriblemente en el otro. ¿Cómo mido esa diferencia desde dentro de las máquinas virtuales?
Peter V. Mørch
1
Puede monitorear " CPU Steal " en la parte superior de su VM para ver si la CPU se ha comprometido demasiado. Para el intercambio / expansión de RAM, es difícil saber desde el interior de la VM, excepto por el mal rendimiento. Sin embargo, puede solicitar una vista del vCenter y los recursos para la VM. Ver arriba para ejemplos.
ewwhite
1
Examinaré CPU Steal. A veces terminamos con el administrador de VMware señalando con el dedo a nuestra aplicación y nosotros señalando con el dedo al entorno lento de VMware. Sin embargo, la mayoría de las veces ni siquiera tenemos acceso para ver vSphere y luego resulta difícil solucionar problemas cuando funciona bien en otras instalaciones. Supongo que un enfoque podría ser: "Si desea que solucionemos problemas de rendimiento, necesitaremos al menos ver el acceso a su vCenter"
Peter V. Mørch
3
La mayoría de los administradores de VMware ni siquiera saben cómo leer estas cosas. Paso mucho tiempo limpiando después de ellos. Por lo tanto, como proveedor, es difícil solicitar acceso o información sobre su configuración. Pero creo que sería mejor solidificar sus requisitos y luego hacer cumplir. Si bien generalmente no recomiendo establecer reservas, si su aplicación es crítica, puede tener sentido. O al menos, establecer una "prioridad de acciones". ¿Qué hace la aplicación?
ewwhite
1
¿Han considerado distribuir esto como un dispositivo VMware con una configuración recomendada pequeña, mediana y grande?
ewwhite