DEDIBOX-NEWS.COM

Le Forum Non Officiel de la DEDIBOX

Vous n'êtes pas identifié.

#1 2008-01-25 19:23:30

Jérémy
Membres d'honneurs
Date d'inscription: 2006-05-17
Messages: 956
Site web

Memcache : petit test

Bonjour,
Ne trouvant pas de benchmark sur le net , j'ai décidé de m'en faire un petit rapide pour tester les performances de ce bidule

Installation : bien callé dans le fond du fauteuil
Memcache est assez simple a installer quelques lignes de commandes, une modif du php.ini , un restart d'apache et roulez jeunesse
Tout se présente bien, on commence a faire la fête

Premiers pas
Déja contrairement à eaccelerator qui (lorsqu'il est compilé avec les options --with-eaccelerator-shared-memory) profite d'une mise en cache intégré a php sans connexion, memcache nous oblige a mettre une petite ligne de connexion (une option de connexion automatique eu été appréciée)

Ce qui fait qu'on doit se retrouver avec :
$memcache = memcache_connect('localhost', 11211) or die ("Connexion impossible");
pas génialissime pour l'utilisation au seins de librairie ou fonctions , obligé de faire un global ou de passer en parametre ... bouarf

Bon allez on se dis qu'on s'y fait, on test donc la bête :

Premiers tests
Le fichier de test execute l'affichage du contenu de 4 fichiers html de quelques ko chacuns
Script 1 :

Code:

<?
// testmemcache
$memcache = memcache_connect('localhost', 11211) or die ("Connexion impossible");
function getcachefile($file,$key)
    {
    global $memcache;
    if($get_result = memcache_get($memcache,$key))
        {
        return $get_result;
        }
        else
        {    

        // mise en cache si il ne l'ai pas, normal
        $arr= file_get_contents($file);
        memcache_set( $memcache, $key, $arr , false, 100);
        return $arr;
        }    
    }
echo getcachefile('../template.html','template');
echo getcachefile('../templates/forum.html','forum');
echo getcachefile('../templates/message.html','message');
echo getcachefile('../templates/courrierecrire.html','courrierecrire');
?>

Script 2 :

Code:

<?
// testmemcache
function getcachefile($file,$key)
    {
    $arr= file_get_contents($file);
    return $arr;
    }
echo getcachefile('../template.html','template');
echo getcachefile('../templates/forum.html','forum');
echo getcachefile('../templates/message.html','message');
echo getcachefile('../templates/courrierecrire.html','courrierecrire');
?>

Et la les résultats sont plus que peu concluant :
script 1 :

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      4
  75%      4
  80%      4
  90%      4
  95%      5
  98%      8
  99%     13
100%     58 (longest request)

Requests per second:    221.92 [#/sec] (mean)


script 2 :



Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      3
  80%      3
  90%      3
  95%      3
  98%      4
  99%      6
100%     11 (longest request)

Requests per second:    319.03 [#/sec] (mean)




Bref vous l'aurez compris , le file_get_contents est plus rapide que l'acces a la mémoire ( sur dedibox biensur )

Je me dis "non c pas possible" et je test alors la fonction de mise en cache de eaccelerator :

Code:

function getcachefile($file,$key)
    {
    if($get_result = eaccelerator_get($key))
        {
        return $get_result;
        }
        else
        {    
        $arr= file_get_contents($file);
        eaccelerator_put($key, $arr ,100);
        return $arr;
        }    
    }


Résultats : A peine  mieux



Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      2
  95%      2
  98%      4
  99%     15
100%    190 (longest request)

Requests per second:    316.64 [#/sec] (mean)

Du coup je reteste mon script 1 avec pconnect (connexion persistante) :
et la on peut dire que c'est mieux:

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      2
  90%      3
  95%      4
  98%      5
  99%      8
100%     26 (longest request)

Requests per second:    416.27 [#/sec] (mean)


Mise en application sur le site
La je me dis "Youhou , de 320 req / sec a 420red /sec, c'est tout bon , 30% de puissance de gagner
Sur un script normal on gagnera bien quelque 10%

Et bien une fois en ligne sur le site , ca n'ai pas comme ca que ca se passe

J'ai mis des fonctions de mise en cache des fichiers avec un parametre filemtime($file); pour être sur d'avoir la bonne version en cache
Le site a été fortement ralenti avec ce petit filemtime qui pourtant semble annodin

Mon site passe alors de 89 req/secondes à 56 req / secondes...GRRR

Résultat des courses, des heures perdues ... mais instructives

Donc en conclusion,
Memcache semble rester intéressant mais il faut vraiment tester les performances et pas l'utiliser à tort et à travers ,et surtout savoir a quoi on veut l'utiliser ,  il peut je pense etre très intéressant pour les sites qui conservent la totalité du résultat d'une page en cache ( site sans connexion ) et qui ne sont pas mis à jour souvent

Dans mon cas, mise en cache de fichiers, cela devient presque lourdingue si l'on veux changer ses fichiers régulierement , et donc dans mon cas , ca ne sera pas utile ou alors il faudrait coder une petite page qui vide le cache de memcache (memcache_flush)

Si vous souhaitez gagner du temps en chargement de fichiers (template par exemple), n'hésitez pas à mettre memcache sur votre serveur, mais faites vous un petit fichier de vidage du cache avec memcache_flush ou une série de memcache_delete et roulez jeunesse !!


Ce qu'il faut retenir de ce test :
(ben oui si vous aviez su vous seriez directement descendu a cette ligne hihi smile)
Memcache : oui , avec pconnect , et une fonction de vidage pour affecter le site dans l'instant



Voila , j'espere que ce petit test sans images ( mode : début de l'internet  cool ) vous aura malgré tout plu et informé


Ps: Installer eaccelerator pour qu'il gere les versions précompilés de vos scripts n'est pas négligeable également , mais pour en connaitre son interet,il y a des benchmark disponibles un peu partout sur le web wink

Ps² : A noter que l'on peut utiliser memcache comme gestionnaire de sessions, également très intéressant

Dernière modification par Jérémy (2008-01-26 10:51:56)


ATTENTION : VHCS dispo en base n'est pas sécurisé !!!

Hors ligne

 

#2 2008-02-02 18:03:19

Joker-eph
Membre
Date d'inscription: 2007-01-20
Messages: 13

Re: Memcache : petit test

Ces systèmes de cache ne sont-il pas plutôt fait pour du contenu généré par des cgi style php à partir d'une base de donnée plutôt que des fichiers HTML statiques ?

Parceque bon, les fichiers que tu rends sont également en mémoire, la couche du système de fichier dans le système d'exploitation s'en charge très bien, probablement mieux que n'importe quel accélérateur.

Hors ligne

 

#3 2008-02-02 19:22:23

Jérémy
Membres d'honneurs
Date d'inscription: 2006-05-17
Messages: 956
Site web

Re: Memcache : petit test

Avec un memcache_pconnect , le test prouve que c'est encore plus intéressant

Mais en effet , c'est beaucoup plus utile pour les résultats de requettes
Mais personnelement je suis déja sur un cache requettes dans des fichiers donc mon test se basait principalement sur la différence entre les deux systemes de cache (cache fichier vs cache mémoire)

Surtout que si le cache Systeme etait plus intéressant, mon cache fichier serait plus intéressant et plus simple à gérer en prime, mais ca n'est pas le cas, mais je refait bientot totalement mon site azote.org , j'en profiterais pour faire des tests étapes par étapes sur la mise en place de memcache


ATTENTION : VHCS dispo en base n'est pas sécurisé !!!

Hors ligne

 

#4 2008-02-07 09:20:58

JEDI_BC
Membre
Date d'inscription: 2007-01-11
Messages: 29

Re: Memcache : petit test

As-tu essayé APC ? Outre mettre automatiquement l'opcode de tes pages php en cache memoire, il y a aussi des fonctions pour mettre ce que tu veux en mémoire wink
De plus, facebook à développé dans son coin une jolie version de l'extension APC qui dump la mémoire APC et permet de la ré-injecté dans un autre système, bien pratique des fois wink

Hors ligne

 

#5 2008-02-07 23:11:20

Jérémy
Membres d'honneurs
Date d'inscription: 2006-05-17
Messages: 956
Site web

Re: Memcache : petit test

J'ai testé eaccelerator, similaire a apc , en plus performant
Apres avec un module redeveloppé il peut etre plus intéressant, et bien developper on peut gérer un listing des variables et de l'export / import facilement


ATTENTION : VHCS dispo en base n'est pas sécurisé !!!

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson