Suite à une volonté de tester l’arbre de dports de DragonFlyBSD, et voulant voir ce que vallaient les performances de PostGreSQL sur DragonFlyBSD j’ai décidé de monter un rapide benchmark de performances afin de comparer plusieurs systèmes ayant une version de PostGreSQL commune. J’ai choisi pour ces raisons PostGreSQL 9.1.
Lors de mon benchmark sous Linux (Debian), je me suis retrouvé confronté à des statistiques étonnantes en terme de performances, de ce fait, j’ai décidé de voir ce que vallait une Redhat, j’ai donc pris Centos 6.4.
Les tests ont été effectués sur les plateformes suivantes:
En terme de hardware, le test a été effectué sur un système de virtualisation de type KVM (libvirt) avec 24GBit de mémoire et un processeur Phenom x6 1055T
qemu 1.4.1-3
libvirt 1.0.5-4
Chaque machine virtuelle possède les caractéristiques suivantes:
Passons maintenant au benchmark. La commande utilisée est la suivante: pgbench -T 60 -cX -jX Concrètement, nous demandons à l’utilitaire pgbench de faire un test de 60 secondes sur la base de données, en utilisant X clients et X threads (1 client par thread). Chacune des bases de données est configurée par défaut, avec un support de 300 connexions simultannées.
Le premier graphique représentera le nombre de transations sur la durée, le second par secondes.
Le test de performances est surprenant. Nous avons en tête DragonFlyBSD qui surpasse tous les autres systèmes, suivi par FreeBSD. Les performances de DragonFlyBSD sont exceptionnelles, et dépassent de plus de 25% celles de FreeBSD lors de la montée en charge et de près de 200% les Linux.
Loin derrière, avec des performances 2 à 3 fois moindres, nous avons les deux Linux (Debian et Centos) qui plafonnent à près de 7000 transactions sur la durée sans vraiment les dépasser, et peu importe le nombre de clients. Cette courbe est particulièrement étonnante, d’une uniformité sans faille. Seul Debian ne réussit pas à passer le test entièrement en n’arrivant pas à gérer plus de 100 connexions sans devoir à toucher d’autres paramètres.
En fait, cette valeur de 7000 s’explique par l’option barrier du système de fichiers ext4. L’option protège le système de fichiers de la corruption des données en cas de panne matérielle (reboot inopiné…), et bride complètement les performances de PostgreSQL. Dans un second test nous avons ajouté l’option nobarrier/barrier=0 au système de fichiers (via /etc/fstab).
Notez que cette option est risquée, si un redémarrage dû à un problème d’alimentation survient, les fichiers en cours d’écriture sur le disque, voir l’ensemble du système de fichiers peuvent être corrompus. Ne l’utilisez que si vous possédez un contrôleur RAID matériel (Raid 1/5/6) avec une batterie.
Enfin, bon dernier, notre FreeBSD avec ZFS peine à rattraper les Linux. Peut être est-ce dû à la virtualisation ? Ou bien à la conception du système de fichiers lui-même ?
Afin de vérifier nos résultats, il a été décidé de réaliser le même benchmark sur disque Physique. J’ai retenu uniquement les performances avec optimisations, hormis pour ZFS, qui devait avoir un point de comparaison en terme de performances sur disque physique (gérant la couche blocks). Centos a également été écartés n’offrant que peu de différences par rapport à Debian (un peu moins performant). Cette première courbe montre le nombre de transactions totales sur 1 minute: Cette seconde capture définit le nombre de transactions par secondes traitées: Etonnament DragonFlyBSD a des performances quasiment identiques à celles sur disque virtuel, ce qui pourrait signifier que les drivers virtio sont très performants et au point. Debian reste aussi performant en virtuel qu’en physique, et plafone à 50K transactions par minute. Les deux points qu’on pourra remarquer sont:
ZFS est donc le leader sur ce benchmark physique, une fois débridé. En virtuel peut-être atteint-il les mêmes performances ?
Vous retrouverez les données complètes du benchmark dans le lien suivant: Benchmarks - PostGreSQL
En conclusion, si vous deviez choisir un système pour vos bases de données PostGreSQL, orientez vous sur un BSD sans hésiter, que ce soit un FreeBSD (UFS) ou un DragonFlyBSD (Hammer) si vous ne possédez pas de contrôleur raid matériel autrement choississez un Linux avec ext4 et nobarrier, ou encore un FreeBSD avec UFS avec async et noatime.
ZFS sur FreeBSD avec les options sync=disabled et atime=off est très tentant (n’oublions pas que NetApp est un FreeBSD avec ZFS), et devra nécessiter le raccordement des disques directements sur la carte mère sans passer par le contrôleur RAID
Merci à Emmanuel Florac et Axel Perrier pour leurs précisions sur l’option nobarrier