OVH Cloud OVH Cloud

Accélérer le chargement d'applications

8 réponses
Avatar
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

8 réponses

Avatar
Marwan Burelle
In article <4270e19c$0$16231$, Cyrille Szymanski wrote:
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
( | )

Avatar
Francois Tigeot
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

Avatar
Eric Masson
Francois Tigeot writes:

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 -+-

Avatar
espie
In article <d4r2tb$30po$,
Francois Tigeot wrote:
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.

Avatar
Cyrille Szymanski
On 2005-04-28, Marwan Burelle wrote:
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

Avatar
Cyrille Szymanski
On 2005-04-28, Eric Masson wrote:
Francois Tigeot writes:

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


Avatar
espie
In article ,
Eric Masson wrote:
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.

Avatar
Eric Masson
(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 -+-