Tous les articles par bux

Symfony2 tests: Benchmark de mise en RAM

Après l’article sur la mise en RAM de mysql j’ai effectué quelques tests de performances afin de voir quels sont les gains de performances lorsque l’intégralité des données sont en RAM.

J’ai donc, en plus d’y avoir mysql, placé les fichiers de mon projet dans la ram et exécuter les tests. Les résultats ne sont pas extraordinaire mais en voici le récapitulatif.

Tout sur disque, sans couverture du code:

Time: 02:36, Memory: 195.75Mb

OK (26 tests, 439 assertions)

Tout en RAM, sans couverture du code:

Time: 02:14, Memory: 186.75Mb
 
OK (26 tests, 439 assertions)

Tout sur disque, avec couverture du code:

Time: 22:12, Memory: 196.55Mb

OK (26 tests, 439 assertions)

Tout en RAM, avec couverture du code:

Time: 16:42, Memory: 189.00Mb

OK (26 tests, 439 assertions)

On constate que le gain de performance n’est pas énorme. Cependant il l’est suffisamment pour devenir significatif une fois votre projet très conséquent.

Mettre mysql entièrement en RAM

Mon projet étant maintenant assez avancé pour contenir une série de tests je dois régulièrement lancer la globalité de ces tests pour savoir ou en est la stabilité de mon code. Cependant l’exécution de tous ces tests prend du temps.

Une possibilité d’optimisation est de placer la base de donnée entièrement en ram. Voici donc un petit tutoriel que j’ai trouvé chez Laurent Besson qui vous permettra de mettre mysql en ram.

http://monblog.system-linux.net/blog/2011/08/25/mettre-entierement-mysql-en-ram-grace-a-ramfs-ou-tmpfs/

Attention: Il se peut que vous rencontriez cette erreur (/var/log/mysql/error.log):

InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

Sur certaine configurations pensez a vérifier qu’AppArmor est correctement configuré pour permettre le déplacement du datadir de mysql.

Pour cela éditez le fichier /etc/apparmor.d/usr.sbin.mysqld de façon a l’adapter au nouvel emplacement:

# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
/var/tmpfs/mysql/ r,
/var/tmpfs/mysql/** rwk,

Dans mon cas, il va également peut-être falloir que je trouve une solution encore plus performante. Pourquoi ne pas mettre le code source de mon application php en ram également ? Je vais regarder ça en tout cas !