Un amigo me dijo que mi netbook tardaba años en arrancar. También me mencionó que había una forma de mejorar el tiempo de arranque: inicio en paralelo. Hice una búsqueda sobre inicio en paralelo o inicio rápido en Debian, y después de hacer algunas pruebas logré reducir el tiempo de arranque de 24 a 14 segundos.
Vamos a ver qué hice para hacer esto…
Bootchart
Primero que nada, tenemos que medir el tiempo de arranque usando bootchart. Para hacer esto vamos a instalarlo, solo escribe:
aptitude install bootchart
Una vez instalado puedes usar bootchart desde la línea del kernel en el menú de Grub de la siguiente manera::
/boot/vmlinuz-2.6.30-mundungus root=/dev/sda5 ro quiet init=/sbin/bootchartd
Después de iniciar tu computadora, debes usar el comando bootchart para generar el gráfico con la información del tiempo de inicio, procesos, servicios y cuanto tardan en iniciar. Por ejemplo, esto es lo que tenía antes de hacer las modificaciones en mi netbook:
Usa solo lo necesario
Lo primero que debes tener en cuenta es que para acelerar el arranque es qué servicios se lanzan al momento de iniciar la computadora. Por ejemplo, yo estaba lanzando ssh, dkms_auto, kernel.loops, cups, VirtualBox driver y saned. Todos esos servicios pueden quitarse o ejecutarse por petición, no como un demonio al momento de iniciar la máquina. Por si acaso, puedes usar sysv-rc-conf para configurar los servicios, o el comando update-rc.d:
Usa el más ligero y rápido: GDM vs. Slim
Me pregunté por qué tenía que usar GDM, después de todo no estaba usando ningún tema o característica especial de GDM (de hecho, no estoy usando Gnome). Luego de buscar un poco me topé con Slim. Luce similar a GDM y es más ligero. Puedes hacer lo mismo con otros servicios, pero recuerda que ligero y más rápido conlleva a menos funcionalidades ofrecidas por el servicio (por ejemplo Slim no tiene acceso remoto como lo tiene Gnome).
El orden importa
Como de seguro debes saber, cada servicio corre en un nivel de ejecución (runlevel) siguiendo el formato [S,K]prioridad. Por ejemplo:
K01cups S24hal S25gdm
Por un lado, K01cup significa matar primero (01) al demonio cups. Por otro lado S24hal especifica que se debe iniciar el servicio hal (una vez que se hayan iniciado los otros servicios por debajo de 24). En este ejemplo, GDM corre después que hal, y es así porque GDM necesita de hal para obtener información de hardware.
Ahora, ¿Qué pasa con esos servicios que tienen el mismo número de prioridad? Deben ejecutarse alfabéticamente…pero, y si pudiesen ejecutarse al mismo tiempo? Bueno, si se puede hacer pero necesitas saber si esos procesos son independientes entre ellos, de forma que no se necesiten entre sí al iniciar la máquina.
Insserv
Para saber si un servicio es independiente de otro puedes usar insserv. Este paquete reordena los servicios de init.d basado en las dependencias descritas en las cabeceras LSB de los scripts. Para instalarlo, solo escribe:
aptitude install insserv
Luego, para reordenar los servicios corre el siguiente comando siendo root:
update-bootsystem-insserv
La próxima vez que instales un nuevo servicio éste sera reordenado automáticamente, así que no hay necesidad de correr este comando cada vez que instales un servicio.
Inicio en Paralelo
Si tienes más de un procesador y quieres iniciar rápido debes lanzar los scripts en paralelo. Esto es, esos servicios independientes con la misma prioridad pueden ser ejecutados al mismo tiempo. Para hacer esto debes editar el archivo /etc/init.d/rc, y edita esta línea :
CONCURRENCY=none
Cambia “none” por “startpar” como se muestra a continuación:
CONCURRENCY=startpar
En mi caso, no hubo ninguna mejora. De hecho bootchart reporta un solo procesador al arrancar la máquina.
Readahead
En Debian y Ubuntu readahead le al sistema leer por adelantado archivos desde una caché, de forma que el proceso de inicio del sistema sea más rápido. Pero en mi caso, readahead lo que hizo fue agregar un segundo al proceso. Creo que es porque estoy cargando solo lo necesario y no hay ganancia en leer archivos por adelantado.
Optimiza tu kernel
De nuevo, la idea es usar solo lo necesario. Debes quitar todas las funciones no usadas en tu kernel, como puerto paralelo o extensiones de KVM. Un kernel molítico será más rápido que otro con funciones distribuidas entre módulos, porque no perderá tiempo cargando funciones…estas estarán dentro del kernel. Como ejemplo, coloco el gráfico del inicio con el kernel 2.6.22-686 proporcionado por Debian.
Como puedes notar, toma 4 segundos más que mi kernel a la medida (primer gráfico).





Planeta Linux
#1 by Eifersucht on 08/12/2009 - 1:03
Alto tutorial! Muy util, Luis.