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.


Posted by Roger Jordan | Permalink | Categories: Opensolaris rss  | Añadir Comentarios, Total: 0