En muchas ocasiones tenemos que pegarnos con los contadores de rendimiento para identificar cuellos de botella de CPU, para lo cual, no sólo tenemos disponible el contador % Processor Time, sino que además tenemos la posibilidad de analizar otros muchos contadores de rendimiento, como es el caso de % Privileged Time, Context Switches/sec, % Interrupt Time, Processor Queue Length.
Como ya comentamos anteriormente en el artículo ¿Tenemos un cuello de botella en el acceso a disco?, un Contador Primario, es un contador que debemos comprobar en primer lugar para la identificación de un problema. Si no tenemos ningún problema, genial. Si tenemos un problema, entonces deberemos analizar los Contadores Secundarios para obtener mayor información del problema que tenemos.
Contadores Primarios para los Problemas de Rendimiento de Procesador/CPU
Para la identificación de problemas de rendimiento de procesador o CPU, el principal Contador Primario que podemos utilizar es \Processor(*)\% Processor Time, el cual es la suma de % Privileged Time y % User Time, y que mide que tanto por ciento de tiempo está siendo el utilizado el procesador o CPU. Como referencia, un valor por debajo del 50% será saludable, entre el 50% y el 80% deberemos empezar a preocuparnos, y valores meseta por encima del 80% significarán que muy probablemente tenemos un cuello de botella en el procesador/CPU.
Otro Contador Primario que podemos utilizar es \Processor(*)\% Privileged Time, el cual mide que tanto por ciento del tiempo que está siendo utilizado el Procesador por el Kernel, es decir, el porcentaje de tiempo que un Hilo (Thread) se ejecuta en Modo Privilegiado. Como aclaración, cuando una aplicación realiza una llamada a una función del Sistema Operativo (ej: una operación de disco, red, o memoria), dicha función del Sistema Operativo es ejecutada en Modo Privilegiado. Como referencia, un valor por debajo del 30% será saludable, entre el 30% y el 50% deberemos empezar a preocuparnos, y valores meseta por encima del 50% significarán que muy probablemente tenemos un problema.
Contadores Secundarios para los Problemas de Rendimiento de Procesador/CPU
Tenemos varios Contadores Secundarios que podemos analizar, principalmente los siguientes:
- \System\Context Switches/sec. Los cambios de contexto ocurren cuando el kernel cambia la asignación de CPU desde un Hilo (Thread) a otro. Un valor alto de este contador indica que la CPU está siendo compartida en exceso, es decir, que hay demasiados Hilos (Threads) compitiendo por los recursos de la CPU. Es especialmente recomendable revisar este contador, cuando el contador % Privileged Time tenga valores altos. Como referencia, es saludable un valor por debajo de 5000, a partir de 2500x#CPUs deberemos empezar a preocuparnos, y una meseta por encima de 5000x#CPUs es indicativo de un problema.
- \Processor(*)\% Interrupt Time. Este contador mide el tiempo de procesador/CPU empleado en servir interrupciones, es decir, en realizar operaciones de entrada/salida como es el acceso a disco y la red. Por lo tanto, con valores altos de este contador debíamos plantearnos analizar el rendimiento del acceso a disco y red. Como referencia, se considera saludable un valor por debajo del 10%, deberemos empezar a preocuparnos si observamos valores entre el 10% y 20%, y una meseta por encima del 20% es indicativo de un problema.
- System\Processor Queue Length. Este contador indica cuantos Hilos (Threads) están en la Cola, pendientes de poder ser ejecutados. Como referencia, su valor debe ser 0 ó 1, un valor entre 2 y 5 debería empezar a preocuparnos, y una meseta por encima de 5 es indicativo de un problema.
Despedida y Cierre
Hasta aquí llega el presente artículo, en el cual se ha intentado presentar un procedimiento algo formal para el análisis de los principales contadores de rendimiento de ayuda para la identificación de cuellos de botella de procesador o CPU.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.