Problemas de rendimiento – CPU Constrained

En este post voy a hablar de problemas de rendimiento que nos podemos encontrar en nuestra infraestructura de virtualización con VMware. Para hablar de rendimiento, debemos comenzar hablando del término muy utilizado en VMware y en el mundo de la virtualización en general, hablamos de “Overcommitment“. El término hace mención a la sobreasignación de recursos en nuestra infraestructura virtual, lo cual es algo más que común en cualquier entorno virtual. Debemos recordar, que una máquina virtual comparte recursos con otras máquinas residentes en el mismo ESXi. Por lo que una mala configuración de los recursos de una máquina virtual (vCPU, RAM, Disk, Network), puede provocar problemas de rendimiento en la máquina virtual y en las máquinas virtuales residentes en el mismo ESXi.

virtualized_server

Pongamos un ejemplo, de sobreasignación de CPU. Tenemos 1 ESXi con 2 Socket y 8 cores + Hyper-Threading, por lo que tendremos 32 Logical CPU para nuestra cola de recursos de CPU. En el ESXi tenemos 3 máquinas virtuales con 8 vCPU, 2 máquinas virtuales de 4 vCPU, 4 máquinas virtuales de 2 vCPU, 4 máquinas virtuales de 1 vCPU. Ahora bien, tenemos 32 Logical CPU en nuestro Pool de recursos de nuestro ESXi y tenemos asignadas 44 vCPU, lo que supone una sobreasignación de recursos en cuanto a CPU. Hasta aquí sería una situación normal de cualquier entorno virtual, pero el problema surge cuando la demanda de recursos, es infinitamente superior a la cantidad de recursos disponibles. Esta situación produce los problemas de “CPU constrained” y “Memory overcommitment“, suelen ser los más comunes y más críticos.

A continuación vamos a desarrollar problemas de rendimiento de CPU, analizaremos como identificar los problemas, como solucionarlos en cada caso.

  • CPU Constrained

Este problema de rendimiento, lo hemos aclarado antes con el ejemplo. Seguimos con el ejemplo, imaginaros que las máquinas virtuales de 8 vCPU, tienen una fuerte demanda de CPU, y solicita recursos al ESXi, no es que pida más vCPU, sino que solicita tener disponibles los recursos asignados. El ESXi, empezará a asignar recursos de su “cola  de recursos”, y que sucederá? Que ante la petición de recursos por las máquinas virtuales al ESXi, obtendrán los recursos más rápido, las máquinas virtuales con menos vCPU, por lo que penalizará a las máquinas virtuales con más vCPU. Un error muy común en estos casos, es como las máquinas de más vCPU experimentarán problemas de rendimiento, seguramente soliciten que se amplíen las vCPU. El incrementar las vCPU a una máquina con CPU Constrained no va a solucionar el problema, lo que debemos de hacer es identificar la causa del problema y trazar un plan de actuación para solucionar el problema.

Para identificar el problema en nuestro ESXi, podemos hacerlo de dos maneras (tres maneras si disponemos de licencia de vRealize Operations Manager):

  1. vSphere Client

Para ello seleccionaremos la máquina virtual que está experimentando problemas de CPU Constrained, y nos dirigimos a la pestaña “Performance”. Posteriormente configuraremos los valores que queremos recoger para el análisis.

charoptionsPosteriormente seleccionaremos la métrica de CPU y “Real Time” (análisis en tiempo real, ya que se puede analizar gráficas anteriores, pero no es tan preciso). También seleccionaremos el objeto a analizar, es decir la máquina virtual. Por último añadiremos las métricas a recoger para el análisis.

metricas

Las métricas más importantes y las que aportarán que nuestra máquina virtual esta experimentando problemas de rendimiento, son:

Co-StopCantidad de tiempo que una máquina virtual SMP ( Symmetric Multi-Processing) estaba lista para ejecutarse, pero incurrió en retraso debido a la contención de asignación de recursos vCPU.

CPU ReadyCantidad de tiempo que la máquina virtual estaba lista para ejecutarse, esperando en una cola para ser programada.

UsagePorcentaje de uso de CPU de la máquina virtual según los recursos establecidos.

WaitCantidad de tiempo que la máquina virtual está esperando un recurso VMkernel.

Como interpretar la gráfica? Pues bien, el Usage, deberá de coincidir con la gráfica de uso de CPU que todo sistema operativo tiene, por ejemplo el Perfmon o Task Manager de Windows. Si nos centramos en el ejemplo que he indicado antes, en el caso de que los valores de Usage sean altos, y nuestros valores de CPU Ready sean altos también, podemos ver un claro ejemplo de CPU Constrained. Es decir, cuando mayor demanda de CPU haya (Usage), mayor respuesta de asignación de recursos debemos de tener por parte de nuestro ESXi (CPU Ready). En el caso de que se produzca Co-Stop (debería de ser 0) también, es que tenemos serios problemas de contención de CPU por parte de nuestro ESXi.

Como he dicho anteriormente, únicamente en el caso de que nuestro sistema operativo huésped en nuestra máquina virtual muestre problemas de uso de CPU y los valores de CPU Ready no sean altos, podremos incrementar el número de vCPU. De no ser así, no deberíamos de incrementar el número de vCPU, incluso deberíamos de decrementar el número.

2. ESXTOP

Otro método para monitorizar en tiempo real el rendimiento de las máquinas virtuales dentro de nuestro host ESXi es “esxtop”. Para ello, deberemos abrir una conexión ssh contra el ESXi que contenga la máquina virtual que queremos monitorizar. Una vez hayamos conectado por ssh debemos ejecutar en la shell el comando esxtop. Si introducimos “h”, podemos ver todos los parámetros compatibles con esxtop.

esxtop

En nuestro caso para monitorizar la CPU, introduciremos la opción “c” (CPU) y “V” (Virtual Machine View). Y visualizaremos los valores de las máquinas virtuales. Entre estos valores, nos quedaremos con los siguientes:

%RDY: Porcentaje de CPU Ready producido por sobreasignación de vCPU. Valores de más de 10%, especifican que tendríamos problemas por sobreasignación de vCPU a nuestras máquinas virtuales. Con ello debemos ampliar nuestro Pool de recursos de nuestro Cluster o optimizar las máquinas virtuales para comprobar si los recursos asignados son correctos. En caso de tener límites de consumo de CPU configurados (ver %MLMTD>0), si se produce CPU Ready puede ser debido a una mala configuración de los límites de CPU.

%CSTP: Valores por encima de 3 de Co-Stop, muestran que tenemos un grave problema de contención de CPU para una máquina en concreto. Lo que supondrá que debemos decrementar las CPUs configuradas o mover nuestra máquina virtual a un Pool de Recursos más amplio.

%MLMTD: Nos referimos a la cantidad de tiempo que transcurre para una vCPU en estar lista para ejecutarse, pero no tiene recursos para ello debido a configuraciones de CPU Limit. Valores diferentes a 0%, especifican que tenemos problemas de configuración de CPU Limit.

%SWPWT: En este caso son problemas derivados por otras configuraciones. Indican problemas que tiene una máquina virtual que se encuentra esperando en las Swapped Pages para leer de disco. Valores por encima de 5, indican problemas de “Memory Overcommitment”.

Siempre, antes de actuar sin sentido con un problema de rendimiento de una máquina virtual a nivel de CPU, hay que analizar bien el problema, ya que por intentar solucionar el problema de esa máquina virtual, podemos estar impactando en las demás máquinas.

Espero que os haya gustado y muchas gracias por compartir 🙂

 

Leave a Reply

Your email address will not be published. Required fields are marked *