Gracias a un trabajo de un curso de Tatiana, fue que tomamos en serio la posibilidad de graficar el arranque de GNOME usando Bootchart.
Bootchart es un programa que permite recolectar información del uso de disco y procesador del sistema. Fue creado para poder obtener datos reales con los cuales poder determinar los cuellos de botella en el arranque de Linux y así poder acelerarlo.
Pareciera ser un proceso «invasivo», que requiera modificar el núcleo o quizás algo similar. Lo cierto, es que para recolectar los datos sólo se requiere instalar un script, el cual debe ser invocado por el kernel. Cabe recordar que el primer proceso que se ejecuta en Unix es init; luego, en vez de invocar a init hay que invocar a bootchartd, el cual deja corriendo algunos procesos en segundo plano y posteriormente invocará a init. En el arranque, sería tan sencillo como añadir la opción:
init=/sbin/bootchartd
Los datos recoletados se guardarán en /var/log/bootchart.tgz (el cual contiene 4 archivos) y sirve de entrada para bootchart, un programa escrito en Java que permite generar una gráfica a partir de los datos recolectados.
Básicamente el programa lee cada 2 segundos los archivos virtuales /proc/diskstats, /proc/stats y /proc/*/stat (para cada uno de los procesos en ejecución). Siendo así, es posible utilizarlo para medir otros programas; por ejemplo, el arranque de GNOME.
Quizás muchos ya se han dado cuenta que el arranque depende mucho del tiempo que tarda gconf en leer todas las preferencias y esquemas. Así, Federico lo ha indicado hace ya un mes y Havoc ha hecho saber que es un tema pendiente para algún desarrollador lo tome y lo resuelva.
Una imagen vale más que mil palabras. Así por ejemplo, a continuación una gráfica de lo que tarda en arrancar una sesión de GNOME en el portátil (Centrino 1,8 Ghz, 512 MB RAM):.
Gráfica de la segunda sesión. La primera tarda más, pero se entiende la idea.
Se puede apreciar el tiempo que tarda cada aplicación en iniciar, así como el uso en disco que hace. Es necesario acotar que se debe contar desde que cambia el proceso gdmgreeter a x-session-manager, que es cuando efectivamente el usuario a ingresado su contraseña y comienza su sesión; hasta el período en donde las aplicaciones están cargadas; lo que en mi caso sucede apróximadamente en el segundo 23.
La lectura de gconf varía de acuerdo a la cantidad de claves almacenadas, lo cual va en directa relación con el uso de aplicaciones que un usuario tiene. Así, en la primera sesión de un usuario, gconf efectúa menos de 1/3 de las lecturas que la gráfica de mi sesión de hoy. Así como también varía si corresponde a la primera sesión desde que se inicia el computador.
En mi caso, hay otro proceso que hace mucha lectura a disco, y es Jamboree, el cual lee los archivos de música; y un proceso en python que hace mucho uso de CPU (el cual está relacionado con el notificador de actualizaciones de Ubuntu).
El proceso de recolección de datos es sencillo:
$ sudo bootchartd start
$ (se inicia la sesión, via gdm, startx, etc.)
$ sudo bootchartd stop
Y luego se invoca bootchart y se generan el gráfico. Si no se dispone de Java, es posible obtener la gráfica a través de un formulario disponible en el sitio de Bootchart.
A primera vista, pareciera que el proceso de recolección de datos es complejo. Pero no lo es. La parte más entretenida está en el procesamiento de los datos y la generación del gráfico.