En que emplea el equipo el tiempo de sistema.
mié 07 de octubre del 2009
Estos últimos días hemos tenido bastantes problemas de
rendimiento en un nodo de un cluster de base de datos. Después de un
breve análisis se observa que el tiempo de servicio de uno de los luns
supera a los 200 milisegundos, con picos de hasta 300. A la vez se
observa que la cpu está empleando un 30% de tiempo en tareas de
kernel.
A partir de estos dos datos "los de siempre" empiezan a especular
que el tiempo de consumo por parte de kernel es consecuencia de los altos
tiempos de respuesta de ese lun.
Si alguien se toma la molestia de leer algo de documentación enseguida
verá que mientras un proceso espera datos de una operación de
i/o está durmiendo. Esto es fácilmente observable con el comando
prstat -m, veremos la columna SLP (donde se incluye el tiempo de espera para
operaciones de i/o) muy cercana al 100%. Un proceso dormido no consume cpu ...
saquen pues sus propias conclusiones.
El problema que se me planteó es demostrar con datos objetivos que
realmente es así, para ello he recurrido a dtrace y he hecho un
script
que calcula cuanto tiempo de cpu ha consumido cada llamada al sistema, es
decir se han empleado 13212600 nanosegundos ejecutando la llamada
waitsys, 29667600 ejecutando send,
etc. Con esos datos y un poco de ayuda de una hoja de calculo es fácil ver
que porcentaje de tiempo de sistema se está usando en cada una.
Como curiosidad el resultado fue que el 60% de tiempo de kernel no
estaba relacionado directamente con operaciones de i/o.

