Rapidez de inicio de programas y otros [Was: Re: OT: linux en pc antiguos (era: distro para revivir celeron de 400 con 24 de ram)]

Germán Poó Caamaño gpoo en ubiobio.cl
Mar Feb 28 17:34:06 CLST 2006


On Tue, 2006-02-28 at 15:25 -0300, Horst von Brand wrote:
> rodrigo ahumada montenegro <rodahummont en yahoo.com.ar> wrote:
> > a propósito de este tema,
> 
> Nada tiene que ver con el tema, si se comienza una nueva discusion sirvanse
> hacerlo con un nuevo mensaje y un nuevo titulo.
> 
> >                           en un foro vi una pregunta sobre por que programas
> > como firefox o openoffice parten mas rápido en windows que en linux y yo
> > pensé en algunas posibles causas de esto...
> 
> ... en algunos casos es porque Windows hace trampa, y muestra la interfaz
> grafica antes que el programa haya terminado de inicializarse, en otras
> porque en Windows una buena parte de lo que es "el programa" en Linux es
> parte del sistema operativo, que siempre esta cargado en memoria...

No hace mucho había una discusión al respecto, por la forma en que
trabaja binutils, precisamente el orden de los símbolos que maneja
ld, la cantidad de veces que se abren las bibliotecas, etc.

El compilador de C genera mucho mejor resultado que el de C++ (hablo
de gcc).

En programas grandes incluye el orden en que se cargan las bibliotecas
y cuantas veces se llaman.  Si se ordena todo bien, se ahorran lecturas
a disco o se pueden lograr que sean contiguas.

Y aunque pareciera hilar demasiado fino, no lo es.  Michael Meeks
reportó una vez que OpenOffice cargaba más rápido con Wine que en
forma nativa!

El inicio de la discusión se encuentra en:
http://sourceware.org/ml/binutils/2005-07/msg00104.html

Notar que fueron los primeros intentos de meterse en binutils para
mejor el arranque de OpenOffice.  A la fecha, ya han sido incorporados
varios parches a binutils (lo digo porque la respuesta que recibió
originalmente no fue la más alentadora).

Independiente de eso, cuando se abrió el código de StarOffice (OOo),
se encontraron numerosos errores, como cargar decenas de veces los
mismos iconos, tipografías, etc.  Aún es posible encontrarlo en otros
programas.

De hecho, OOo es una muestra que "programar primero, optimizar 
después" no siempre escala bien.

En http://www.gnome.org/~michael/ pueden buscar por "binutils","startup"
y hacerse una idea (aunque los mensajes son bastante escuetos :-)

Y una presentación "Optimizing OpenOffice Startup":
http://ooocon.kiberpipa.org/media/Presentation_profiling_tools_approaches/slide.pdf

Una entrevista:
http://www.fosdem.org/2006/index/interviews/interviews_meeks

> > (antes que todo, esto se refiere a la carga "en frío" del programa, osea,
> > la de primera vez, está claro que las segundas cargas de un programas son
> > bien rápidas por que esta todavía en RAM, además creo que es lo que mas
> > influye en la percepción de que "el sistema es lento")
> 
> Algo de eso hay. Y esta el ubicar, cargar en memoria y enlazar las
> bibliotecas compartidas (algunos programas tienen cientos de estas).
> 
> > 1.- no tengo experiencia con otros sistemas de archivos, sólo fat32 ntfs y
> > ext3 y he notado que ext3 parece que es lenta al momento de listar el
> > contenido de un directorio por primera vez (incluso se puede sentir, aqui
> > cuando uso un programa para manejar archivos y toco por ejemplo /usr/bin
> > o /usr/lib, se siente cuando uno los toca por primera vez por que el programa
> > se toma una pausa antes de mostrar los contenidos. A todo esto en una página
> > se hablaba de recomendaciones para acelerar la partida  de kde, y una de esas
> > era hacer un script "preloadkde", el cual se ejecuta al partir kdm, en
> > segundo plano, y lo que hace es simplemente un find de directorios
> > como /usr/bin y /usr/lib (osea lista el contenido y fuerza a cargar la lista
> > de archivos en la RAM).
> 
> Si no dices con que comparas... y que tanto se demora el programa GUIistico
> del caso en mostrar iconitos etc no es buena medida del rendimiento del
> sistema de archivos, recuerdese que Windows usa la "genial" idea de que la
> "extension" indica que es lo que el archivo contiene... Unix debe mirar
> dentro, no basta el nombre. Y si la cascara grafica del caso es torpe,
> demas la mayor parte de la demora es culpa de ella (bueno, incluso en caso
> que no lo sea).

Lo que hacen programas de preload/foo/ es dejar cargando dichas
aplicaciones (o sus bibliotecas) al momento de iniciar la sesión
(con menor prioridad), de tal forma que al ejecutar la aplicación
gran parte de ellos ya está en memoria y la carga es más rápida.

> [...]
> > 	2.- ya se que al usar mas código compartido se puede ahorrar en uso
> > memoria (páginas de código), pero para programas grandes como firefox ¿no
> > convendría que sean mas monolíticos y usen menos bibliotecas compartidas?
> 
> Si Firefox usa las mismas bibliotecas que otros programas graficos que usas
> junto con el, te conviene que sean compartidas (== menos uso neto de RAM,
> menos datos que cargar del disco, ...).

Hay que considerar que tanto Firefox, como OpenOffice se acercan
bastante al modelo monolítico.  Firefox en mucho menor medida.

-- 
Germán Poó-Caamaño
http://www.ubiobio.cl/~gpoo/
Concepción - Chile



Más información sobre la lista de distribución Linux