¿Por qué Ubuntu 10.04 arranca tan rápido? El secreto: Ureadahead y Upstart Jobs

El secreto de esta rapidez está en 2 componentes: Ureadahead y Upstart Jobs.

Antes de nada, he de decir que este artículo no pretende ser completamente riguroso, sino que más bien pretendo dar a conocer los conocimientos que he adquirido sobre las partes internas del sistema Ubuntu. Es que en el pasado se me ha acusado de hacer un análisis «pobre», aunque entiendo la reacción, ya que criticaba duramente un programa y al autor no le hizo mucha gracia, y la verdad que el autor fue bastante educado. En fin, he procurado informarme adecuadamente sobre las cosas que digo, pero aún así es posible que me equivoque en alguna cosa. Así que cualquiera es libre de hacer las correcciones que estime oportunas.

Ureadahead es un sistema que se encarga de cargar en memoria RAM los ficheros que «piensa» que serán necesarios durante el arranque, para leerlos directamente de la memoria y no tener que leerlos del disco duro, que es mucho más lento que la RAM. Este componente se activa en las primeras fases del arranque del sistema, así, mientras se están haciendo otras tareas (detectando dispositivos, adquiriendo dirección IP, etc.) «ureadahead» lee todos los ficheros que considera que serán necesarios en el arranque y los guarda en memoria. En la siguiente fase será cuando se necesiten los ficheros de arranque, y seguramente la mayoría se encontrarán en la RAM gracias a «ureadahead». Más información sobre «ureadahead»: https://wiki.archlinux.org/index.php/Ureadahead

El siguiente componente que hace que Ubuntu se inicie tan rápido es «Upstart Jobs»: http://www.fabianampalio.com.ar/?p=206 Es un sistema de arranque que sustituye al antiguo System V (ficheros en /etc/init.d): http://iie.fing.edu.uy/ense/asign/admunix/boot1.htm#Scripts-rc-SysV En System V, los servicios se inicia en serie, es decir, se inician uno detrás de otro, y hasta que no termina de arrancar un servicio no se inicia el siguiente. Así, por ejemplo, si tarda mucho en detectar dirección IP, el sistema tardará más en arrancar, ya que hasta que no se detecte IP no se puede iniciar el siguiente servicio. Este sistema, en efecto, es bastante ineficiente, pero podemos disculparle porque proviene de Unix de principios de los 80, y por aquel entonces sólo se usaba en servidores que rara vez se reiniciaban, así que la velocidad de arranque no era una prioridad para los desarrolladores del sistema operativo.

Sin embargo, con Upstart Jobs (ficheros en /etc/init), los servicios arrancan todos en paralelo, siguiendo unas dependencias. De esta forma, por ejemplo, aunque se tarde en adquirir dirección IP, el sistema puede iniciar todos los otros servicios que no requieran una conexión a la red. Si editamos el fichero /etc/init/mountall.conf encontraremos una línea como esta:

– start on startup

Esto significa que la tarea mountall (se encarga de montar todo lo que encuentre en /etc/fstab) se iniciará desde el principio. Hay varios servicios que arrancan también desde el principio, como «udevmonitor», que se encarga, principalmente, de detectar dispositivos extraíbles. En el fichero /etc/init/gdm.conf encontramos una línea como esta:

start on (filesystem
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udevtrigger))

Esto indica, entre otras cosas, que el entorno gráfico debe iniciarse cuando estén montados los sistemas de ficheros (lógico) y cuando esté activa la tarjeta gráfica. Así, aunque se tarde en detectar la red, el entorno gráfico se iniciará, y ya se detectará la red estando dentro del entorno gráfico. Antiguamente, hasta que no se detectaba la red, no se iniciaba el entorno gráfico.

En Ubuntu 10.04 todavía quedan servicios que usan System V, pero se están empezando a migrar la mayoría a Upstart Jobs. Los Upstart Jobs se empezaron a usar desde Ubuntu 6.10, pero se han utilizado en serio a partir de la versión 10.04, y por eso se ha notado la rapidez en el arranque.

En conclusión, el sistema Ubuntu 10.04 arranca tan rápido gracias a «ureadahead», que carga en la memoria los ficheros que considera que serán necesarios durante el arranque, y «Upstart Jobs» que carga los servicios de forma paralela, y no en serie, como hacía el antiguo System V.

manu¿Por qué Ubuntu 10.04 arranca tan rápido? El secreto: Ureadahead y Upstart Jobs

Deja un comentario