Accueil du site - Spip

Etude de performances 1.9b

Publié le dimanche 11 juin 2006.


Pour parler de performances, il faut des mesures et des interprétations ; tel est l’objet de ce compte rendu d’essais de comparaison entre Spip 1.8 et Spip 1.9 beta.

Pour sauter tout de suite à la conclusion, il est quasiment certain que les mesures de temps de la 1.9b ne sont pas meilleures que celles de 1.8. C’est dommage dans la mesure où l’introduction des Plugins devrait permettre un allègement du noyau censé se refléter dans les performances. Bien sûr, il faut donner du temps au temps et cet objectif n’est peut-être que simplement différé. On pourra aussi arguer que l’objectif n’est pas tant l’allègement du noyau que son maintien.

L’autre aspect de la question est quantitatif. La baisse constatée est-elle réelle et si oui est-elle importante ? Là, le débat est encore plus ouvert et les réponses dépendent du profil d’utilisateur : s’agit-il d’un visiteur, d’un rédacteur ou d’un hébergeur ?

NB : Le zip 1.8 pèse 2,4 Mo contre 2,6 pour 1.9b2, une augmentation qui ne s’explique pas forcément par l’ajout de traductions.

Le principe de mesure

La mesure est basée sur wget. Cet outil se comporte comme n’importe quel navigateur Web à ceci près que au lieu d’afficher joliment ce qu’il reçoit d’un site Web, il met brutalement l’information dans un fichier. Donc en mesurant le temps mis pour recevoir une page HTML, on mesure le temps de traitement par Spip coté serveur ainsi que le temps de transmission par le réseau que l’on peut en général négliger.

Il s’agit donc d’une mesure de temps, celui qui est réellement vécu par l’utilisateur. C’est l’ intérêt de wget par rapport à d’autres méthodes de mesure de temps comme ab (Apache bench). wget est disponible sur toutes les plate-formes (Windows, Linux...). L’autre intérêt de wget est que l’on peut lui indiquer d’un coup plusieurs pages à lire, ce qui permet d’enchaîner plusieurs mesures sans avoir à relancer l’outil, ce qui minore le facteur de perturbation de l’outil lui même dans une mesure de temps.

Pour une page de la partie publique, il faut distinguer 3 temps : celui de la compilation (elle a lieu 1 fois pour toutes), celui du calcul (de temps en temps, à chaque expiration du délai de cache) et celui de la lecture elle-même (systématique). Pour une page de la partie privée on ne mesure que la lecture.

La mesure

La mesure est faite en local, ce qui élimine les temps de transmission réseau, à partir d’une base correspondant à un site réel pour laquelle on retient un échantillon de quelques dizaines de pages. Pour la partie publique, c’est un savant mélange d’articles (45), brèves (11), rubriques (7), auteur (3) et plan (1).

On compare 1.9 par rapport à 1.8 avec 2 mesures de temps (t18 et t19). Le gain de performances est (t18 - t19)/t18 qui est négatif en cas de baisse de performances.

Le squelette retenu est le squelette standard de Spip (dist/). Il a évolué entre 1.8 et 1.9b mais étant donné que le dist de 1.8 fonctionne toujours sous 1.9b, on peut aussi l’utiliser dans les deux mesures pour une comparaison limitée au noyau de Spip.

Le gain tel qu’il est défini est censé être indépendant de la machine utilisée mais cela reste à confirmer avec une machine Unix du genre de celle utilisée par les hébergeurs (les mesures qui suivent sont faites avec un Unix type MacOS).

Par ailleurs, le gain peut être influencé par des facteurs non-déterministes ; il est donc important que les mesures soient effectuées dans des conditions aussi stables que possibles (lecteur mail, économiseur d’écran, Plugins Spip désactivés...) et proches. Malgré tout, il reste une "dispersion" dans les résultats essentiellement due au fait que l’OS dispose de ses propres caches, car, sur une série de mesure lancée à froid, la première valeur est toujours atypique.

Partie publique

SVN 6580 (10 juin 2006)

echantillons : 10, URLs par echantillon =       77
25.52 et 3.50 / 35.46 et 6.45 => -38.9498 % et -84.2857 %
25.51 et 3.48 / 35.28 et 6.34 => -38.2987 % et -82.1839 %
24.78 et 3.47 / 36.24 et 6.36 => -46.247 % et -83.2853 %
24.81 et 3.52 / 35.46 et 6.47 => -42.9262 % et -83.8068 %
24.77 et 3.44 / 35.99 et 6.32 => -45.2967 % et -83.7209 %
24.92 et 3.43 / 34.99 et 7.33 => -40.4093 % et -113.703 %
25.39 et 3.46 / 34.12 et 6.25 => -34.3836 % et -80.6358 %
25.68 et 3.59 / 34.34 et 6.23 => -33.7227 % et -73.5376 %
24.50 et 3.45 / 35.52 et 6.69 => -44.9796 % et -93.913 %
24.73 et 3.55 / 36.20 et 6.25 => -46.3809 % et -76.0563 %
==> Gain partie publique = -41.1595 % sans cache et -85.5128 % avec cache

Note : compte tenu de l’échantillon (une majorité de pages d’articles basées sur le même squelette) la partie compilation de squelette peut être négligée dans le cas "sans cache".

A titre de comparaison, un historique sur 3 mois, avec la dist 1.8, pour différentes révisions 1.9 :

revision 6109.  ==> Gain partie publique = -16.88 % et -76.7683 %
revision 6186.  ==> Gain partie publique = -25.4651 % et -83.3465 %
revision 6261.  ==> Gain partie publique = -37.6857 % et -33.6345 %
revision 6381.  ==> Gain partie publique = -17.9219 % et -34.4569 %
revision 6395.  ==> Gain partie publique = -19.7154 % et -31.1598 %
revision 6398.  ==> Gain partie publique = -18.1026 % et -31.6136 %
revision 6401.  ==> Gain partie publique = -16.2979 % et -21.1934 %
revision 6402.  ==> Gain partie publique = -15.9716 % et -54.0369 %
revision 6403.  ==> Gain partie publique = -17.2694 % et -63.2277 %
revision 6404.  ==> Gain partie publique = -16.3715 % et -58.2905 %
revision 6406.  ==> Gain partie publique = -17.2829 % et -51.5271 %
revision 6425.  ==> Gain partie publique = -15.9199 % et -59.8076 %
revision 6438.  ==> Gain partie publique = -16.3991 % et -50.8559 %
revision 6481.  ==> Gain partie publique = -16.3084 % et -43.4073 %
revision 6491.  ==> Gain partie publique = -16.9426 % et -49.6366 %
revision 6515.  ==> Gain partie publique = -16.0846 % et -60.1663 %
revision 6562.  ==> Gain partie publique = -18.7833 % et -60.1166 %

L’effet dist n’est pas négligeable.

Partie privée

Historique sur 3 mois pour différentes révisions 1.9 :

revision 6109.  ==> Gain partie privee =  -60.6608  %
revision 6186.  ==> Gain partie privee =  -64.7749  %
revision 6261.  ==> Gain partie privee =  -69.1293  %
revision 6381.  ==> Gain partie privee =  -68.285  %
revision 6395.  ==> Gain partie privee =  -60.4707  %
revision 6398.  ==> Gain partie privee =  -68.6599  %
revision 6401.  ==> Gain partie privee =  -69.2081  %
revision 6402.  ==> Gain partie privee =  -162.052  %
revision 6403.  ==> Gain partie privee =  -156.244  %
revision 6404.  ==> Gain partie privee =  -145.715  %
revision 6406.  ==> Gain partie privee =  -149.719  %
revision 6425.  ==> Gain partie privee =  -127.28  %
revision 6438.  ==> Gain partie privee =  -131.25  %
revision 6481.  ==> Gain partie privee =  -138.915  %
revision 6491.  ==> Gain partie privee =  -152.082  %
revision 6515.  ==> Gain partie privee =  -151.437  %
revision 6562.  ==> Gain partie privee =  -145.375  %
revision 6580.  ==> Gain partie privee =  -75.027  %  

Entre 6402 et 6580 les performances sont nettement dégradées par ce qui se revèlera être un simple bug.

Mise à jour (15 Juin 2006) : en raison d’une erreur de mesure les % indiqués ici pour la partie privée ne sont pas significatifs, mais les conclusions restent inchangées (baisse de performances 1.9b , bug 6402 ).

Outillage

De petits outils permettent d’automatiser les mesures avec wget sous Shell Unix. Ils pourront être utilisés sur d’autres machines, avec une autre base SQL, en veillant à adapter s’il le faut le jeu d’URL fourni.

Ils sont disponibles sur Spip-zone et récupérable par svn. Consulter le README pour le détail.

Conclusions

Les conclusions ont été présentées en introduction mais on peut ajouter quelques remarques.

Une diminution de performances peut être acceptable si elle est compensée par de nouvelles fonctions, tant qu’elles sont profitables à tous, à savoir :

- amélioration du compilo
- pagination

Il existe plusieurs critères de performances : le temps à servir une page Web compte pour le visiteur tandis que le coût de calcul (ceci peut concerner la mémoire aussi) importe davantage coté serveur (point de vue hébergeur). Spip 1.9 apporte un plus certain aux hébergeurs en leur permettant de mutualiser le code ; ceci peut compenser cela.

Le temps de service d’une page d’une page Web dépend aussi du réseau ce qui atténue les chiffres de perte qui précèdent (point de vue visiteurs / rédacteurs).


Répondre à cet article