Base LEGI et système de fichiers : ext4 vs XFS

Comme je l’indiquais dans mon article sur la base LEGI, cette dernière est assez volumineuse et structurée d’une manière très complexe. Ainsi, la dernière version de la base est composée de 1 624 783 fichiers XML, répartis dans une arborescence absconse de 1 537 949 sous-répertoires pour une taille d’une dizaine de Go.

Cette structure est suffisamment extrême pour nous amener à nous interroger sur le choix et sur les performance de notre système de fichiers, alors que la plupart des gens utilisent un système de fichiers sans même en avoir vraiment conscience et a fortiori sans le choisir.

Le première chose si vous souhaitez travailler sur la base LEGI, qui est composée d’un très grand nombre de petits fichiers, c’est de privilégier l’utilisation d’un SSD à celle d’un disque dur classique. En effet, les performances seront 10 à 20 fois meilleures avec un SSD.

Les systèmes de fichiers sont un sujet très technique et de très bas niveau, sur lequel peu de personnes sont compétentes et où les convictions affichées relèvent parfois plus de la croyance que de l’analyse scientifique. Voici donc trois éléments de comparaison objectifs et compréhensibles des systèmes de fichiers ext4 – le choix par défaut sous Linux – et XFS.

1) Taille de la base LEGI

Dans mon article je mentionnais que la base LEGI pouvait varier de taille selon le système de fichier, sans citer explicitement ext4 et XFS.

ext4 : 15 Go
XFS : 9 Go

Pourquoi une telle différence ? C’est Jean-Baptiste Denis qui m’a aidé à percer ce mystère. En fait XFS possède des Shortform Directories qui permettent de stocker les petits répertoires directement dans leur inode. Les 6 Go supplémentaires correspondent donc aux 1 537 949 blocs de 4 Ko créés par ext4 pour chacun des sous-répertoires.

Vainqueur : XFS

2) Nombre d’inodes

Un inode est utilisé par fichier et par répertoire lors de la décompression de la base LEGI. Il faut donc que la partition dans laquelle est stockée la base possède au minimum 1 624 783 + 1 537 949 = 3 162 732 inodes. Or le nombre d’inodes varie selon les systèmes de fichiers et les options de formatage. Pour visualiser le nombre d’inodes de vos partitions il suffit d’utiliser la commande df -ih.

ext4 : 65 000 inodes/Go
XFS : 1 000 000 inodes/Go

Ceci n’est pas du tout anecdotique, car beaucoup d’hébergeurs ne permettent pas de choisir votre système de fichier : ce sera ext4 avec ses options de formatage par défaut et rien d’autre. Avec seulement 65 000 inodes par Go, il faudra une partition d’une taille minimale de 50 Go pour pouvoir stocker la base entière. Cela implique que certaines offres de VPS peu chères, avec une capacité de stockage SSD de petite taille, ne vous permettront pas d’exploiter la base LEGI.

Vainqueur : XFS

3) Performances

J’ai évalué les performances des deux systèmes de fichiers avec plusieurs commandes parcourant la base LEGI sur un serveur Xeon 8 cœurs 3,7 GHz doté de 16 Go de RAM et d’un SSD. Les résultats permettent de comparer Ext4 et XFS, mais les performances sur votre ordinateur risquent d’être nettement inférieures.

J’ai utilisé la commande echo 3 | sudo tee /proc/sys/vm/drop_caches pour vider les caches avant chaque essai (merci Jean-Baptiste bis).

Commandeext4XFSext4/XFS
du -hsc legi3'08"0'53"3,5
find legi -type d | wc -l3'06"0'56"3,3
find . -name "*.xml" | wc -l2'54"0'51"3,4
tar xzf Freemium_legi_global.tar.gz2'26"1'18"1,9

On peut ici conclure que XFS se révèle globalement 3 fois plus rapide qu’ext4.

Vainqueur : XFS

XFS sort donc grand vainqueur de cette comparaison avec ext4, et je ne peux que vous encourager à l’utiliser si vous voulez exploiter la base LEGI. À titre personnel, j’ai décidé de ne plus utiliser que XFS.

Tags: , , , , , ,

2 Responses to “Base LEGI et système de fichiers : ext4 vs XFS”

  1. Seb35 dit :

    En me remettant au développement actif d’Archéo Lex et notamment en essayant de reprendre du point de vue d’un nouvel utilisateur qui télécharge puis décompresse la base LEGI (contrairement à mon cas où j’avais ma base LEGI et me gardais bien d’y toucher), j’en ai profité pour utiliser une partition inutilisée de 40 Gio sur mon disque, que j’ai donc formaté en XFS.

    J’ai donc supprimé ma base LEGI de 2014 ou 2015 sur la partition ext4 (15 Gio pour 3M d’inodes) et ai décompressé la base LEGI 20160406 sur la partition XFS (10 Gio pour 3M d’inodes). Je retrouve donc exactement tes chiffres pour les deux premières sections, évidemment la troisième est différente, ça a dû mettre environ 10 minutes à décompresser (enfin, c’est assez rapide, j’avais souvenir de temps plus long auparavant en ext4, entre 30min et 1h, et j’avais toujours peur que ça plante en plein milieu).

    Je garderai à l’esprit cet article pour les futures orientations d’Archéo Lex et autres manipulations de la base LEGI, par exemple s’arranger pour déplacer les répertoires entre même partition (pour Archéo Lex, j’ai présentement mis tout le dossier « cache » sur la partition XFS, je rajouterai dans la doc qu’il y a nécessité que tout le dossier « cache » soit sur une même partition pour des questions de performance).

    J’avais en projet de versionner sous Git la base LEGI décompressée, notamment pour faciliter le développement afin de pouvoir naviguer entre versions de la base LEGI. J’avais partiellement commencé sur https://github.com/Seb35/loifrancaise mais il faudrait en partie le reprendre et surtout mieux formaliser le format de sortie (branches Git créées). Si un versionnement Git est créée, Git commence par compresser chacun des fichiers, ce qui créerait 1,5 M d’inodes (ensuite Git peut créer des packs rassemblant tous ces fichiers en quelques-uns), ce qui ajouterait des contraintes sur le système de fichiers, mais comme tu l’as montré ça passerait bien mieux sur du XFS.

    Par rapport aux chiffres que tu as calculé, il y a aussi la taille moyenne d’un fichier qui est intéressante : 6283 octets = 6,1 Kio (taille en XFS divisée par le nombre de fichiers). Je ne connais pas assez dans le détail les mécanismes internes aux systèmes de fichiers, mais cette taille moyenne et la répartition des fichiers (médiane, quartiles, etc.) a également une influence sur la taille allouée mais non-utilisée par exemple par rapport aux tailles de blocs utilisés lors du formatage (généralement 4 Kio, mais possiblement entre 1 Kio et 64 Kio (cf https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout)). Je ne sais pas si cette notion de blocs existe aussi en XFS, mais le cas échéant il est sûrement mieux d’utiliser des blocs de 1 ou 2 Kio pour utiliser la base LEGI pour éviter de perdre trop de place.

Leave a Reply