AWS est une plate-forme cloud extrêmement populaire et fiable pour la gestion des déploiements MongoDB, mais la question de XFS vs EXT4 amène de nombreux développeurs à se demander quel système de fichiers Linux leur donnera les meilleures performances pour leurs applications. Le guide officiel de MongoDB sur le déploiement en production recommande d'utiliser le système de fichiers XFS sous Linux, en particulier lors du déploiement du moteur de stockage WiredTiger. La recommandation, cependant, ne nous dit pas pourquoi nous devrions nous attendre à une amélioration des performances ou quel type de gains de performances nous connaîtrons. Nous avons décidé d'aller au fond des choses en enquêtant quantitativement sur les performances de MongoDB sur XFS afin que vous puissiez comparer si EXT4 est un meilleur choix pour vos instances AWS EC2.
Système de fichiers XFS
XFS est un système de fichiers de journalisation 64 bits hautement évolutif et hautes performances développé par SGI en 1993 et porté sur Linux en 2002. Il prend en charge les E/S hautement parallèles et les tailles de système de fichiers jusqu'à 9 exaoctets, et ne journalise que les métadonnées du système de fichiers, pas les données de l'utilisateur. Certaines fonctionnalités clés d'amélioration des performances de XFS sont :
- L'accès parallèle via des groupes d'allocation garantit que plusieurs threads peuvent effectuer des E/S simultanément sur le même volume.
- L'allocation basée sur l'étendue réduit la fragmentation et la taille des métadonnées, et améliore les performances d'E/S en permettant des opérations d'E/S moins nombreuses et plus importantes.
- L'allocation différée améliore la contiguïté et les performances des données. La fragmentation est réduite en combinant les écritures et en allouant des étendues en gros morceaux, et les fichiers écrits de manière aléatoire (tels que ceux qui sont mappés en mémoire) peuvent être alloués de manière contiguë
Il existe de nombreuses autres fonctionnalités XFS à explorer, et vous pouvez en savoir plus sur le site Web de XFS et le guide de l'utilisateur XFS.
Exécuter des tests de performances sur MongoDB
Comme vous l'avez peut-être appris dans nos articles précédents, nous avons utilisé YCSB pour comparer les performances de MongoDB, y compris une comparaison détaillée des performances de MongoDB soutenues par MMAP entre différents fournisseurs de cloud. Nous avons décidé d'utiliser la même charge de travail de YCSB que nous utilisions précédemment :charge de travail A (mise à jour lourde :50 % de lectures + 50 % de mises à jour). La phase d'insertion de la charge de travail mesure les performances des charges de travail d'écriture à 100 %, tandis que la phase de chargement mesurera les performances par rapport à la charge de travail réelle (50/50 % de lecture/mise à jour).
Nos tests ont été exécutés sur le pilote de synchronisation MongoDB et la distribution Linux était Amazon Linux (4.4.44-39.55.amzn1.x86_64). Nous avons choisi MongoDB version 3.2.10 exécutant WiredTiger pour nos tests puisque WT est l'endroit où de meilleurs gains étaient attendus et avons effectué les tests sur 2 plates-formes matérielles différentes :
- Disques haute vitesse :instance AWS EC2 c3.large où MongoDB utilisait des disques SSD dans une configuration RAID 0 pour le stockage (mappe à la taille de cluster ScaleGrid HighPerfLarge).
- Disques à vitesse moyenne :instance AWS EC2 m3.medium où MongoDB utilisait un disque provisionné IOPS EBS (Elastic Block Store) défini sur 300 IOPS (mappe sur la taille de cluster ScaleGrid Medium).
Remarque :Tout type de test de performances dans des environnements virtualisés doit être pris avec un grain de sel. Notre objectif ici n'est pas de comparer les performances de ces environnements, mais de fournir une mesure quantitative des différences de performances entre EXT4 et XFS dans le même environnement virtualisé.
Disque SSD haute vitesse
Nous avons effectué le test suivant sur notre plate-forme hautes performances :
- Inséré 6 millions enregistre à différentes charges de serveur (en faisant varier le nombre de threads client YCSB).
- Exécution d'une charge de travail d'un nombre d'opérations de 10 millions enregistre à différentes charges de serveur.
Résultats des performances du disque SSD
Caractéristiques de débit/latence pour l'insertion d'enregistrements de 6 M sur la configuration hautes performances :
Caractéristiques de débit/latence pour 10 M d'opérations d'écriture/mise à jour sur la configuration hautes performances :
Observations de disque SSD
- XFS est incroyablement rapide pendant la phase d'insertion et l'exécution de la charge de travail. Sur un nombre de threads inférieur, il est jusqu'à 50% plus rapide que EXT4. Au fur et à mesure que la charge augmentait, les deux systèmes de fichiers étaient limités par le débit du matériel sous-jacent, mais XFS conservait toujours son avance.
- La latence pour XFS et EXT4 était comparable dans les deux exécutions. Notez que tous les nombres sont en microsecondes.
Disque IOPS provisionné EBS plus lent (300 IOPS)
Le test suivant a été exécuté sur notre plate-forme de performance de taille moyenne :
- Inséré 3 millions enregistre à différentes charges de serveur (en faisant varier le nombre de threads client YCSB).
- Exécution d'une charge de travail d'un nombre d'opérations de 5 millions enregistre à différentes charges de serveur.
Compte tenu de notre expérience sur la configuration haut de gamme, nous nous attendions à ce que XFS ait également une avance décente dans cette plate-forme.
Résultats des performances du disque IOPS
Caractéristiques de débit/latence pour l'insertion d'enregistrements 3M sur la configuration moyenne :
Caractéristiques de débit/latence pour 5 M d'opérations d'écriture/mise à jour sur la configuration moyenne :
Observations de disque IOPS
- XFS est comparable, bien que légèrement en retard sur EXT4 sur la configuration de taille moyenne. Il semble qu'à ce niveau de ressources système, les optimisations de performances de XFS ne fassent pas vraiment de différence. Il s'agit d'une observation importante si vous envisagez de déployer XFS sur des instances plus petites dans l'espoir d'améliorer les performances.
XFS contre EXT4 sur AWS EC2
En termes de performances, XFS est en effet un multiplicateur de force lorsqu'il est associé à des disques à haute vitesse dont il peut tirer un réel avantage. Pour les systèmes bas à milieu de gamme, il ne semble pas pouvoir faire grand-chose pour améliorer vos performances.