Carnet Wiki

Retours sur l’usage de Xray et CacheLab

Version 23 — il y a 2 mois JLuc

<blockquote class="spip">

Certains détails de cet article ne sont plus à jour.
Voir
-  Doc : XRay, un explorateur de cache
-  Doc : API CacheLab : cibler les caches invalidés
-  Compléments CacheLab et todo

</blockquote>

Expérimentation

Lors des tests les temps de filtrage avec cachelab sont de l’ordre de .1 à .5 secondes lorsqu’il y a 10000 à 20000 caches en mémoire. C’est supportable lorsque le filtrage et l’invalidation n’ont lieu qu’à la demande lorsqu’on crée ou modifie un contenu, mais il serait intéressant tout de même de limiter cet impact.

Ces chiffres sont donnés « sans garbage collector ». Or, sans garbage collector, 90% des caches sont périmés en général si on ne fait rien à ce sujet (xray donne ces stats). Par défaut, Cachelab s’occupe de ce garbage collector, au fur et à mesure qu’il découvre des caches invalides. Ainsi, il n’y a quasiment que des caches valides dans APCCache. On divise donc par 10 (en moyenne) les temps de recherche pour invalidation sélective... ou on multiplie par 10 le nombre de cache qu’il est possible de gérer à durée égale.

Limites de l’expérimentation

Si en moyenne 98% des squelettes sont en cache, alors il est peu utile de cibler précisément quels caches doivent être invalidés [1]

Le rendement du cache est d’autant plus faible que les internautes créent souvent des articles, ou déposent un commentaire... ou même ajoutent ou retirent un favori avec le plugin favoris, car par défaut avec SPIP, tous les caches sont invalidés à chacune de ces opérations.

En pratique, sur le site de dev, xray montre des taux de rendement du cache bien moindres (rapport : nombre d’accés en cache / nombre d’accés total) sur un site où il y a des créations ou modifications de contenus (saisie de nouveaux articles ou commentaires, choix de favoris, administration du site via ecrire).

À part pour les fichiers js compressés et css, qui ne sont jamais modifiés, le taux n’atteint jamais 98%. Il oscille entre % (juste après une invalidation globale) et un taux maximal d’efficacité qui sera d’autant moindre que le site est actif (20%, 60%, 70%...). Les graphiques plus loin montrent un exemple d’évolution de cette efficacité sur un site en production.

Tests et statistiques

Sur un site
-  sans garbage collector
-  sans invalidation ciblée du cache avec CacheLab

J’ai relévé les origines des invalidations au cours d’une période test :

  • 172 pour cause de favoris
  • 224 pour causes d’objets principaux
  • 232 pour gis
  • 192 pour id_document
  • 260 pour auteurs
  • pas de relevé pour les forums car il n’y en a que dans l’admin et il n’y a pas eu d’admin

Puis j’ai J’ai mesuré :


  • -  
    la durée entre 2 invalidations (en secondes)
    -* - le ratio d’efficacité du cache au moment de l’invalidation (nb hits /nb accés)
    -* - le rendement du cache au moment de l’invalidation (hits×taillemémoire / accés×taillemémoire)

Rq : le ratios et le rendement sont calculés calculs hors javascript et hors css. Pour les fichiers javascript et css, les taux sont bien plus élevés.

Les graphes suivants présentent les résultats pour 3 jours comprenant weekend (du 2018-03-09 17:00 au 2018-03-12 16:34) et présentent 80 mesures.

Au cours de cette période ce test , il y a eu sur le site


  • -  
    700 visites par jour,
    -* - 15 créations d’objets éditoriaux principaux

  • -  
    60 créations de forum

  • -  
    1 seule suppression de favori

  • -  
    aucune édition par l’admin (c’est le weekend !)

On voit
-  que le rendement est toujours légèrement inférieur au ratio : les gros caches sont moins souvent réutilisés. Mais globalement, la différence n’est pas significative.
-  c’est le matin, après une nuit sans création ou modification de contenu, que le cache dépasse tout juste 80%
-  la moyenne des ratios est de 52 et la médiane est de 56

ratio d’efficacité et de rendement mémoire du cache selon la durée avant invalidation

En excluant les « premières invalidations du matin » on peut zoomer :

Le calcul indique que la moyenne des ratios est de 50 et la médiane est de 55. La moitié des ratios est inférieur à 55%

Sans faire de calculs précis on voit qu’il faut en moyenne 15mn sans invalidation pour atteindre 55% d’efficacité et environ 1h30 sans invalidation pour atteindre 70%, ce qui n’arrive que dans moins de 15% des cas.

Il faudra retester avec garbage collector et après application d’une stratégie d’invalidation sélective.