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.

5to Encuentro Nacional de Linux

Ha terminado el 5to Encuentro Nacional de Linux . Ha sido una experiencia increible, y para mi, cumplió más allá de las expectativas.

No tengo mucho tiempo para redactar hoy, asi que paso directo a enumerar los hechos destacables / curiosos

  • Se esperaban unos 400 asistentes. Al final llegaron mas de 700 según las ultimas cifras. Estoy seguro de que el llamado que hicimos en TVNauta fue en parte responsable de los últimos inscritos.
  • La organización fue excelente. Eran mas de 60 personas las que estaban detrás del Encuentro, y tenían los roles super bien especificados. El grupo de los «amarillos» estaban perfectamente coordinados con comunicadores personales, y podían atender cualquier necesidad que uno tuviera sin problemas.
  • Las charlas fueron emitidas via streaming por Creativa , y también fueron grabadas en AVI. Ayer estaban publicadas en la web, pero por un motivo desconocido las sacaron de linea.
  • Un grupo de expositores nos acompaño a TVNauta un día antes del encuentro. Nos dieron el programa prácticamente completo para hablar de Linux, incluso los muchachos contestaron una llamada.
  • En la ceremonia inaugural expuso Rodrigo Alonso, Ex Gerente General de Microsoft Chile , en su nueva empresa Humano2 . Presentó su producto estrella anunciando su liberación como Open Source. Fue extraño tenerlo entre nosotros, pero es una persona que no tiene ningun problema hacer amigos, el primer día estuvimos conversando un buen rato sobre la industria del software, entre cervezas y pizzas. Él hizo la invitación a todos los expositores con un nombre muy ad-hoc: «Free as in free beer».
  • La ceremonia de cierre tuvo un momento muy emotivo. Uno de los asistentes al encuentro fue el padre de un joven que murió hace un par de años atrás.
    Yo conocía el caso porque sus padres me habían escrito para contarme que aun usaban Linux y que lo conocieron gracias a su hijo, gran entusiasta de Linux. Su mail lo recibí poco tiempo después de que yo perdiera a mi primo Yerko, en cierta forma pude compartir su sentimiento. Cuando lo mencionaron en el encuentro, el padre se puso de pie y hubo una gran y larga ovación. La emoción fue muy fuerte.

Iquique

Por dos semanas estaré en Iquique por motivos de trabajo. Estoy haciendo una capacitación de Java y J2EE para Zofri S.A . El horario no es muy comodo, de 17:00 a 22:00 hrs, pero me deja harto tiempo libre para trabajar en mi memoria.

Ayer tuvimos la primera clase y fue realmente extenuante, tanto por su duración como por el calor que hacia en la noche.

En este momento estoy en el hotel , y mientras escribo puedo ver la playa. Es muy facil concentrarse en este lugar, sobre todo porque no estoy online 🙂

Z4 CASE para C# (.NET/Mono)

Esta semana obtuvimos la confirmación de que el proyecto FONTEC Z4.NET va bien encaminada en CORFO.

Z4.NET es una herramienta CASE basada en Z4Case (también FONTEC). A diferencia de Z4Case que permite desarrollar aplicaciones para J2SE y J2EE, Z4.NET generará aplicaciones en C# para ser ejecutadas en la plataforma .NET y Mono.

Esto significa que todas las ventajas que hoy en día nos entrega ZCase en cuanto a productividad y aseguramiento de calidad también nos permitirá tener esas características en .NET y Mono.

Uno de los primeros pasos será migrar TAF2 a C#. Esta biblioteca es un framework que implementa MDA , y por si sola es suficiente para facilitar la creación de aplicaciones. Z4 es una CASE (upper y lower) que se basa en TAF2 y facilita el desarrollo de aplicaciones basadas en esta biblioteca. Se puede desarrollar un amplio rango de aplicaciones con Z4, de hecho Z4 actualmente esta construida en Z4.

Aunque aun no esta decidido, es muy probable que usemos un sistema similar al de Z4Case para generar interfaces graficas (SWT/Swing/web). Esto significaria que en el caso de aplicaciones de escritorio se podran correr con Windows.Forms o GTK# sin tener codigo especifico de interfaz.

Z4Case se puede descargar desde nuestro FTP y se puede usar tranquilamente para fines no comerciales. Esperamos mantener este tipo de licenciamiento en Z4.NET.

En este enlace pueden ver algunos screenshots de z4 . Son algo antiguos, voy a publicar algunos mas apenas pueda.