Iquique, playas y Creative Nomad

Este fin de semana fue algo especial. Hace mucho tiempo que no pasaba tanto tiempo completamente solo, y no es muy grato que digamos. Hoy me vine temprano a la oficina para al menos escuchar algo de gente cerca.

El sábado estuve haciendo clases y en la tarde fui a darme una vuelta por Zofri . Los precios de los artículos electrónicos son casi los mismos de la V región, lo único conveniente que encontré fue un pack de 50 DVDs vírgenes por solo $13.000 (unos USD$18).

Apenas vuelva de Iquique tendré que ir por una semana a Santiago, esto significa que estaré 4 horas diarias arriba de un bus, después de mucho pensarlo me compré un Creative Nomad MuVO NX de 256MB. No por estar a buen precio, sino me puedo tragar la boleta sin que nadie la vea ;-).

El día de las elecciones salí a caminar por la playa de Iquique por varias horas. En realidad el Nomad vale la pena, es tan pequeño y versátil que sólo sientes que andas con música que te acompaña y nada mas te molesta.

Como es un dispositivo de almacenamiento USB, simplemente en Linux lo conectas , y con nautilus arrojas tus mp3 y/o wma al dispositivo. Lo desmontas y listo. En pocas palabras, es «la rax»!.

En la tarde y durante el día lunes continué trabajando en mi memoria. Estoy contento porque el tema es motivante (integración de Z4 CASE con CVS), y tengo material para todas las capítulos. La idea es avanzar lo máximo posible durante mi estadía en Iquique y probablemente en mis viajes a Santiago, dependiendo del espacio del bus.

Iquique, sede del 6to Encuentro Nacional de Linux

La próxima sede del Encuentro Nacional de Linux , Iquique, es una ciudad bastante agradable. En la parte en donde estoy es parecido a Viña del Mar , con la ventaja de que no hay tanta gente, ni tantos vehículos, y mejor aun, no hay cuicos.

Prácticamente no hay micros, las calles son mas sanas y silenciosas, solamente hay taxis y taxis colectivos. Al lado de la playa hay un camino que es bastante amplio, no andas chocando con la gente, y hay lugares especiales para sentarse, sentir el viento en la cara y mirar la playa. En un ambiente asi, escuchando Glow de Niacin , es casi un sueño.

Boot de Linux en 22 segundos?

JCI dice que ha logrado bootear su Linux en solo 22 segundos . Va a tener que contar como lo hizo porque yo solamente he logrado bajar el tiempo de boot a 40 segundos .

En Fedora, el kernel se demora 10 segundos en comenzar a ejecutar init. En mi caso ajuste rc.sysinit para que no hiciera algunas verificaciones, por ejemplo la activación de quotas o el manejo de selinux. Esto bajo el tiempo, no lo he medido pero deben ser unos 5 segundos.

Después se inicia la carga de servicios del runlevel, en mi caso comienzo con readahead_early, network y xfs. Los últimos dos son interdependientes, y xfs lo necesito para iniciar X+gdm.

Estos últimos dos se demoran en cargar, el readahead_early solo introduce una ventaja de 5 segundos. No se si se puede bajar aun mas el tiempo, porque desde que se carga init el disco no deja de cargar cosas sino hasta tener el login.

En casi paralelo con gdm inicio otros servicios como ssh, pcmcia, xinetd, etc. Pero para no intervenir en la carga de xdm con sleep los fuerzo a partir despues de que este cargado gdm.

Asi que JCI, cuenta si hiciste algo adicional!!

Mejorando el tiempo de carga de Linux

Ayer estuve experimentando con formas de mejorar el tiempo de booteo de Linux.

No es ninguna novedad decir que Linux se tarda en bootear, y también se toma harto tiempo en levantar la sesión (GNOME/KDE) y en levantar algunas aplicaciones como OpenOffice.

Los resultados que tengo son preliminares. Pero he logrado bajar el tiempo de inicio de GNOME de 36 a 20 segundos (incluyendo xcompmgr+jhbuild), y el de OpenOffice de 20 a solo 5 segundos.

En cuanto a GNOME, los tiempos se pueden mejorar aun mas, pero modificando las aplicaciones. Según lo que he visto hay algunos componentes que cargan demasiados archivos.

Por ejemplo gnome-panel carga un montón de iconos que no parecen ser necesarios para iniciar la sesión. En mis mediciones, gnome-panel carga casi 1000 archivos desde /usr/share, mientras que Nautilus carga alrededor de 350.

Mientras no se corrijan esas aplicaciones, se puede mejorar el tiempo de inicio de la sesión a nivel de percepción. Es decir, hacerlo parecer mas rápido, pero en realidad no lo es.

Cuando se bootea el sistema, comienza a iniciar una serie de servicios. En el caso de Fedora Core, X/gdm solamente se carga una vez que todo el sistema esta arriba. Esto incluye servicios como ssh, httpd y otros que no son necesarios para iniciar una sesión. Pasa mucho tiempo desde que el usuario ve GRUB hasta que ve una pantalla de login.

El primer paso entonces es crear un script de inicio para gdm y eliminarlo de /etc/inittab. Una vez creado, hacemos que todos los servicios que X no necesite, se carguen después de gdm. De esta forma, tendremos un login apenas sea posible.

La técnica complementaria consiste en precargar archivos, esto se puede hacer con una utilidad que incluye Fedora llamada readahead.

Esta utilidad viene configurada en forma genérica, que no siempre se adapta a las necesidades propias. En la forma en que viene configurado, hace que el tiempo de booteo sea mucho mas largo. Lo ideal seria aprovechar los tiempos muertos. Por ejemplo, el momento en que el usuario esta ingresando su login, o el momento en que la sesión ya esta arriba.

Estoy realizando pruebas precargando archivos en 3 etapas. La primera comienza antes de cargar los servicios, apenas parte el sistema. Con nice se puede dar baja prioridad para que no vaya entorpeciendo la carga del resto de los componentes. Una vez iniciado gdm, se comienza la carga de los archivos necesarios para la sesión de gnome, mientras el usuario ingresa su login. Es aquí en donde influyen los casi 1500 archivos que se deben precargar y que perfectamente se podrían reducir a unos 400.

La tercera etapa es la carga de archivos después de iniciar la sesión. Aquí se pueden cargar las bibliotecas de openoffice o epiphany, mientras el usuario esta pensando en que hacer. En resumen (tiempos entre paréntesis) :

  1. (t=b) Se inicia el booteo
  2. (t=b+10) Se inicia INIT
  3. (t=b+20) Precarga de X y sus bibliotecas en background (nice -n 19)
  4. El sistema carga los servicios necesarios para el login (network, xfs, etc)
  5. (t=b+30) Se inicia gdm en background
  6. (t=b+47) Se inicia la carga de archivos de sesión en background, pero programado para comenzar después de terminar la carga de gdm (sleep 12 en mi caso hace el trabajo)
  7. Se continua cargando los otros servicios (ssh, httpd, etc) en background
  8. (t=b+45) Apenas aparece el login, el usuario puede ingresar sus datos
  9. (t=s) Se inicia la sesión (precargada)
  10. (t=s+20) Apenas termina la carga de la sesión, se inicia la precarga de aplicaciones como openoffice en background. Esto se puede programar via gnome-session-properties
  11. (t=o) Usuario carga OpenOffice
  12. (t=o+5) OpenOffice se carga completamente

El método completo lo publicare apenas lo tenga refinado. Para los inquietos. Fedora viene con scripts para las primeras 2 precargas, solo hay que ajustar /etc/readahead.early.files y /etc/readahead.files. Como saber que archivos se necesitan? Con una buena dosis de strace -e trace=open, greps y cuts 😉 Para la tercera precarga, solo basta un script que llame a /usr/sbin/readahead con una lista de archivos obtenida de openoffice, epiphany, etc.