Arranque rápido Debian (14 segundos)


bootchart-ultimo

Boot in 14 sec

Gráfico completo

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:

bootchart-inicial

Secuencia por defecto

Gráfico completo

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:

sys-v-rconf

sysv-rc-conf

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.

bootchart-readahead-final

Usando readahead

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.

bootchart-2.6.26-2-686

Debian's kernel 2.6.22-2-686

Gráfico completo

Como puedes notar, toma 4 segundos más que mi kernel a la medida (primer gráfico).

Referencias

Compártelo:
  • Twitter
  • Facebook
  • Identi.ca
  • del.icio.us

Artículos relacionados:

  1. Compilar el kernel a lo Debian
  2. Compilando el Kernel en el PS3
  3. Debian en Playstation 3
  4. Ubuntu Software Center en Debian
  5. Automontaje del módem ZTE MF626 en Debian

,

  1. Eifersucht

    #1 by Eifersucht on 08/12/2009 - 1:03

    Alto tutorial! Muy util, Luis.

(No será publicado)

Switch to our mobile site