Buscar

VMWare: ESXi CPU Ready

En un entorno de VMWare ESXi es habitual que no tengamos una correlación 1:1 entre CPUs físicas y CPUs virtuales asignadas a las VMs del host ESXi.

Explicado de otra forma: El host VMWare ESXi, es habitual que tenga menos CPUs físicas que CPUs virtuales asignadas a VMs ya que el administrador de la infraestructura virtual acostumbra a situar muchas VMs en cada host VMWare ESXi.

Según VMWare la correlación entre CPUs virtuales (vCPU) y CPUs físicas no debería superar: 5:1, concretamente, nos indica lo siguiente:

La correlación (CPU virtual:CPU física):


- Entre 1:1 y 3:1: No hay problemas.

- Entre 3:1 y 5:1: Pueden empezar los problemas de rendimiento.

- Superior a 6:1: Empiezan los problemas.

Se entienden como CPUs físicas la suma de sockets, cores y hyper-threading.

Bien, en los casos que se sobrepasa la correlación 1:1 entre CPUs físicas y CPUs virtuales, entra en juego el scheduler.

El scheduler se encarga de encolar las peticiones de CPUs físicas por parte de las CPUs virtuales de las VMs.

Cuando tenemos problemas de rendimiento a nivel de CPU, puede ser que el problema venga por que se pida a un ritmo demasiado intenso recursos de CPU física por parte de las VMs.

La forma de ver si este es el problema, es utilizando la métrica CPU Ready.

El CPU Ready es una métrica que nos indica el tiempo de espera de las vCPU a que estén disponibles CPUs físicas.

El valor de CPU ready: Contra más alto, peor:


Como norma general:

* 5% de CPU Ready: Normal.

* Entre 5% y 10%: Malo.

* Superior al 10%: Muy malo.

No confundir el parámetro CPU Ready con CPU Usage.

CPU usage, nos indica el uso de CPU de la VM en el momento que estamos mirando la métrica.

Veamos como obtener el valor de CPU Ready:


Para obtener la métrica de CPU Ready, podemos utilizar VSphere client o bien ESXTOP desde SSH.

- Con VSphere Client, la métrica será presentada en milisegundos.

- Con ESXTOP, la métrica será presentada en tanto por ciento.

Para pasar de milisegundos a porcentaje, podemos utilizar la siguiente formula:

(X ms  / 20.000 ms) * 100 = %

Por ejemplo, imaginemos que vía VSphere client, vemos que la métrica de CPU Ready es de: 400ms

Para pasar a porcentaje, seria:

(400ms / 20.000ms) *100 = 2% de CPU Ready.

VSphere Client: Vista de cómo añadir la métrica CPU Ready:

Pestaña "Performance", "Chart Options", "CPU", en el apartado "Counters", veremos: "Ready"

VSphere Client: CPU Ready

ESXTOP: Vista de cómo ver la métrica CPU Ready:

Conectamos vía SSH al host y examinamos la columna %RDY y veremos el tanto por ciento de CPU Ready para cada VM.

ESXTOP: CPU Ready

Hemos de tener en cuenta que el %RDY es por cada CPU virtual (vCPU), esto significa que si por ejemplo disponemos de una VM con 4 vCPU, esta puede llegar hasta un %RDY de 400%.

Dicho de otra forma, el tanto por ciento de CPU Ready sobre una VM, es distinto dependiendo de las vCPU que tenga configurada la VM.

Imaginemos que:

- Disponemos de una VM con 1 vCPU con un CPU Ready de un 10%, esto significaría que ya estamos teniendo problemas de rendimiento.

En cambio, imaginemos que:

- Disponemos de una VM con 8 vCPU con un CPU Ready de un 10%, esto significaría que el % de CPU Ready que toca por cada vCPU es de 10 dividido entre 8: 1,25%. Un CPU Ready bajo.

Tenemos un CPU Ready alto: ¿Qué podemos hacer?


La solución para salir del paso es mover las VMs a otros hosts ESXi para liberar recursos de CPU, por ejemplo, utilizando vMotion.

Para evitar que este problema vuelva a suceder, podemos trabajar en las siguientes medidas:

1) Este punto explica la afirmación: En según que entornos, asignar más vCPU a una VM, puede empeorar el rendimiento de CPU.

Repasar las vCPUs asignadas a las VMs: Si tenemos VMs con muchas vCPUs tendremos una demanda superior de CPUs físicas, por lo tanto, un CPU Ready superior, por lo tanto, mayor encolamiento de peticiones de CPU física, por lo tanto, peor rendimiento.

2) Repasar la correlación CPUs virtuales y CPUs físicas: Hay que tener en cuenta que el ratio no debería superar el 5:1, siendo recomendado estar por debajo, por ejemplo: 4:1.

3) Situar las VMs en los hosts VMWare ESXi, repartiendo la carga de CPU: VMs con uso intensivo de CPU, situarlas en hosts VMWare ESXi distintos.

4) En grandes entornos, con multitud de hosts y VMs: Podemos automatizar el punto anterior utilizando DRS para mover las VMs de host ESXi.
 
5) Asegurarse que disponemos del Hyperthreading activado en las opciones de la BIOS del host VMWare ESXi: Dispondremos de cores extra para repartir a vCPUs de VMs.

No hay comentarios:

Publicar un comentario en la entrada