Accélérer le chargement d'applications

Le
Cyrille Szymanski
Bonjour,

qu'est-ce qui prend le plus de temps dans le chargement d'une application ?

J'ai remarqué que les binaires Linux sont environ 2x plus rapides à charger que
les versions natives (si on prend des gros bouzins comme konqueror ou firefox
par exemple). Je ne vois pas trop la raison, à part peut-être qu'en émulation
il n'y a qu'un système minimal et donc moins de choses à charger.

Donc que faut-il améliorer si on veut que les applications démarrent plus
rapidement ? Est-il possible de les mettre en cache quelquepart ?

Merci.
--
Cyrille Szymanski
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Marwan Burelle
Le #41433
In article
Bonjour,

qu'est-ce qui prend le plus de temps dans le chargement d'une application ?


Hola ! plein de chose ;)

Ça dépend de l'application ...

Pour donner une exemple, je vais faire dans l'extreme : Java.

La JVM lorsqu'elle charge une classe fait subir une analyse à toutes
les méthodes de cette classe. Il s'agit d'une forme d'interprétation
abstraite qui vise à garantir l'intégrité de la pile au cours de
l'exécution. C'est très bien, mais c'est aussi très lourd (cela
correspond à une ou deux exécutions complètes de la méthode, avec un
seul passage dans chaque boucle.)

J'ai remarqué que les binaires Linux sont environ 2x plus rapides à
charger que les versions natives (si on prend des gros bouzins comme
konqueror ou firefox par exemple). Je ne vois pas trop la raison, à
part peut-être qu'en émulation il n'y a qu'un système minimal et
donc moins de choses à charger.


Mouais ... ce qui est possible c'est que certains binaires Linux
soient statiques, et par conséquent on peut gagner en terme de
recherche et de chargement de lib, mais ça me parait tendancieux comme
vision.

Maintenant sur du dynamique, je ne connais que les principes de base,
mais peut être que certaines libs (en émulation) ont plus de chance
d'être déjà chargées, peut être qu'il y en a moins et que ça influe
...

Donc que faut-il améliorer si on veut que les applications démarrent
plus rapidement ? Est-il possible de les mettre en cache
quelquepart ?


Je dirais que le mieux est de ne pas quitter les gros bouzins, de les
laisser tourner. Sinon, il y a des histoires de pré-fetch des libs
dans OpenBSD, mais je n'en sais pas plus. Il parait que cela fait une
différence significative ... (Miod, Marc un commentaire ?)

--
Burelle Marwan,
Equipe Bases de Donnees - LRI
http://www.cduce.org
( | )

Francois Tigeot
Le #41432
Cyrille Szymanski wrote:

J'ai remarqué que les binaires Linux sont environ 2x plus rapides à charger que
les versions natives (si on prend des gros bouzins comme konqueror ou firefox
par exemple). Je ne vois pas trop la raison, à part peut-être qu'en émulation
il n'y a qu'un système minimal et donc moins de choses à charger.


Je pense que dans ce cas, c'est parce que le linker dynamique de Linux est
plus rapide.
C'est encore plus flagrant si on compare entre un OpenOffice natif et sa
version Linux.

Donc que faut-il améliorer si on veut que les applications démarrent plus
rapidement ? Est-il possible de les mettre en cache quelquepart ?


Il y a une énorme discussion là dessus il y a quelque temps lorsque Free
est passé à un / dynamique. Je crois que Darwin est le seul BSD à utiliser
un système de "prelinking", mais je n'en sais pas plus.

Ce lien peut aider:
http://kerneltrap.org/node/1698

--
Francois Tigeot

Eric Masson
Le #41431
Francois Tigeot
Il y a une énorme discussion là dessus il y a quelque temps lorsque Free
est passé à un / dynamique. Je crois que Darwin est le seul BSD à utiliser
un système de "prelinking", mais je n'en sais pas plus.


DFly a utilisé une autre approche pour le même problème, voir le lien
suivant :
http://leaf.dragonflybsd.org/cgi/web-man?command=resident&section=ANY

Éric Masson

--
la politesse veut que l'on s'ecrase lorsque l'on vous fait une remarque
correct pas repondre sur un ton de maiprise. je te conseil de lire le
Netiquette tu y aprendre quelleque petite chose dont tu a grand besoin
-+- Blackjocker in GNU : Quand on est ton c'est pour la vie entière -+-

espie
Le #41428
In article Francois Tigeot
Il y a une énorme discussion là dessus il y a quelque temps lorsque Free
est passé à un / dynamique. Je crois que Darwin est le seul BSD à utiliser
un système de "prelinking", mais je n'en sais pas plus.


Je sais qu'on a gagne pas mal chez OpenBSD lorsqu'on a rajoute un petit
cache dans l'editeur de lien (style un facteur 3 sur le chargement de kde.
Pour mozilla, je sais pas et je m'en fous, je m'en sers pratiquement
jamais).

Quant au prelink, les linux recents ont un truc un peu plus subtil.
Faut chercher `combreloc' dans la doc de binutils.

J'ai pas encore eu l'occasion de gratouiller et de voir precisement ce
qu'il faut comme support pour etre sur que ca fonctionne... et j'ai pas
fait de verifs de perfs a ce niveau recemment.

Cyrille Szymanski
Le #40563
On 2005-04-28, Marwan Burelle
Pour donner une exemple, je vais faire dans l'extreme : Java.

La JVM lorsqu'elle charge une classe fait subir une analyse à toutes
les méthodes de cette classe.


Ah oui, il y a ça aussi.

Mais dans le fond je considère que ces étapes font partie de l'initialisation
de l'application, donc à part reprogrammer l'appli en question je ne vois pas
trop comment on peut améliorer des choses.

Mouais ... ce qui est possible c'est que certains binaires Linux
soient statiques, et par conséquent on peut gagner en terme de
recherche et de chargement de lib, mais ça me parait tendancieux comme
vision.

Maintenant sur du dynamique, je ne connais que les principes de base,
mais peut être que certaines libs (en émulation) ont plus de chance
d'être déjà chargées, peut être qu'il y en a moins et que ça influe
...


Je ne suis apparemment pas le seul à avoir remarqué ça.

En fait c'est dommage, j'utilise presque exclusivement firefox-gtk2-linux à la
place de son accolyte natif car il démarre 2x plus vite.

Merci pour la réponse.
--
Cyrille Szymanski

Cyrille Szymanski
Le #40562
On 2005-04-28, Eric Masson
Francois Tigeot
Il y a une énorme discussion là dessus il y a quelque temps lorsque Free
est passé à un / dynamique. Je crois que Darwin est le seul BSD à utiliser
un système de "prelinking", mais je n'en sais pas plus.


DFly a utilisé une autre approche pour le même problème, voir le lien
suivant :
http://leaf.dragonflybsd.org/cgi/web-man?command=resident&section=ANY


J'aimerais bien avoir un bidule pareil dans NetBSD moi.

Mais je viens de parler avec un Darwinien (OSXien plus exactement) et
visiblement le "prebinding" apportait réellement une amélioration par le passé,
mais elle est beaucoup moins visible depuis qu'ils ont paufiné leur chargeur
dynamique. Donc resident c'est chouette pour améliorer les performances sans se
casser la tête, mais c'est peut-être pas faire les choses bien.

Merci pour le lien.
--
Cyrille Szymanski


espie
Le #40561
In article Eric Masson
DFly a utilisé une autre approche pour le même problème, voir le lien
suivant :
http://leaf.dragonflybsd.org/cgi/web-man?command=resident&section=ANY


Ouarf, Matt Dillon est toujours en train d'essayer de ressusciter AmigaOS,
visiblement.

Eric Masson
Le #40560
(Marc Espie) writes:

Ouarf, Matt Dillon est toujours en train d'essayer de ressusciter
AmigaOS, visiblement.


Il ne s'en cache pas :) Enfin, il expérimente et il en sortira
probablement des nouveautés intéressantes, probablement parce que son
approche est moins académique.

Éric Masson

--
Je veux créer une troupe de danse érotique! Si vous ètes près à vivre
des émotions fortes... si non, la vie continue et...
Signature: Un Gros Garcon!
-+- CL in GNU - Enlevez le «Gar» de ma signature pour me répondre -+-

Poster une réponse
Anonyme