Les systèmes de fichiers au banc d'essai

Pour le test, j'ai utilisé un Pentium III, avec 16 Mo de mémoire et un disque dur de 2 Go, installé avec la distribution Linux RedHat 6.2. Tous les systèmes de fichiers ont correctement fonctionné chez moi, ce qui m'a fait démarré un petit test de performances pour pouvoir les comparer. Le premier test fut d'arrêter brutalement l'alimentation électrique afin de vérifier la reprise grâce au journal. Tous les systèmes de fichiers ont passé cette phase avec succès, et la machine fut en ordre de marche dans les secondes qui suivirent pour chaque système de fichier.

L'étape suivante est l'analyse de performances en utilisant le programme bonnie++, disponible à http://www.coker.com.au/bonnie++/. Ce programme analyse les accès de type base de données dans un fichier, ainsi que les créations, lectures, et destructions de petits fichiers simulant ainsi les utilisations faites par des programmes tels Squid, INN, ou les programmes utilisant le format Maildir (qmail). La commande utilisée pour lancer le test est :
bonnie++ -d/work1 -s10 -r4 -u0
Elle lance le test en utilisant 10 Mo dans le système de fichiers monté sur le répertoire /work1. Les autres options spécifient la quantité de mémoire utilisée (-r4), et l'utilisateur (-u0, c'est-à-dire l'administrateur).

Les résultats apparaissent dans les tableaux ci-dessous :

 Ecritures séquentiellesLectures séquentiellesAccès aléatoires
CaractèreBlocRé-écritureCaractèreBloc
SFEspace de testKo/sec% CPUKo/sec% CPUKo/sec% CPUKo/sec% CPUKo/sec% CPUKo/sec% CPU
ext210 Mo147197148136713091415069448891530910
ext310 Mo136698236138182422148294493514317,810
xfs10 Mo120694951277135133129998477980229,111
reiserfs10 Mo145599425331234026147793559326174,35

 Créations séquentiellesCréations aléatoires
CréationLectureDestructionCréationLectureDestruction
SFNombre de fichiers/ sec% CPU/ sec% CPU/ sec% CPU/ sec% CPU/ sec% CPU/ sec% CPU
ext2169499278994929795992841009341
ext3 16 89 98 274 100 458 96 93 99 288999745
xfs16929925196436989199311999041
reiserfs161307100896310019149912459912461001725100

Deux résultats sont montrés par type de test : le débit du système de fichiers (en Ko par seconde) et le temps d'utilisation du processeur (en %). Plus les chiffres de débit sont élevés, meilleurs ils sont pour le système de fichiers. L'inverse est vrai pour le temps processeur.

Ainsi que vous pouvez le voir, ReiserFS remporte haut-la-main la victoire pour la gestion de fichiers (sections « Créations séquentielles » et « Créations aléatoires »), dépassant ses opposants d'un facteur supérieur à 10. De plus, il est quasiment aussi bon que les autres systèmes de fichiers dans les lectures et écritures séquentielles. Il n'y a pas de différence significative entre les autres systèmes de fichiers. XFS est aussi rapide que ext2, et ext3, comme prévu, un peu plus lent que ext2 (qui fait la même chose, la perte de temps dues aux appels systèmes pour la journalisation en moins.)

Le dernier test employé est mongo, un programme disponible sur la page benchmark pour ReiserFS de www.namesys.com, programme que j'ai modifié pour tester les trois systèmes de fichiers journalisés. J'ai inséré dans le script perl mongo.pl les commandes pour monter les systèmes de fichiers XFS et ext3 et pour les formater. Puis j'ai lancé le banc de test.

Le script initialise une partition /dev/xxx, la monte, et fait tourner un certain nombre de processus dans chaque phase : création de fichier, copie, lien symbolique, lectures, état du fichier[1], renommage, et destruction du fichier. Mongo calcule aussi la fragmentation après les phases de création et de copie :

Fragmentation = nombre de fragments / nombre de fichiers

Vous trouverez les résultats du test sous différentes formes dans le répertoire results :

logrésultats bruts
log.tblrésultats à injecter dans le programme compare
log_tablelog

Les tests furent exécutés comme indiqué dans l'exemple suivant 
mongo.pl ext3 /dev/hda3 /work1 logext3 1
où ext3 doit être remplacé par reiserfs ou xfs pour pouvoir tester les autres systèmes de fichiers. Les autres arguments sont le périphérique à monter où se situe le système de fichier à tester, le point de montage, le nom du fichier où les résultats seront conservés et le nombre de processus à lancer.

Vous trouverez dans les tables suivantes les résultats de l'analyse. Les données correspondent au temps d'exécution, en secondes, la valeur la moins élevée étant la meilleure. Dans le premier tableau, la taille moyenne d'un fichier est de 100 octets, dans le second, 1000 octets, et dans le dernier, 10000 octets.

 ext3 files=68952 size=100 bytes dirs=242XFS files=68952 size=100 bytes dirs=241reiserFS files=68952 size=100 bytes dirs=241
Création90,07267.8653,05
Fragmentation1,321,021,00
Copie239,02744,51126,97
Fragmentation1,321,031,80
Liens symboliques0203,54105,71
Lecture782,751543,93562,53
Etat des fichiers (stat)108,65262,25225,32
Renommage67,26205,1870,72
Destruction23,80389,7985,51

 ext3 files=11248 size=1000 bytes dirs=44XFS files=11616 size=1000 bytes dirs=43ReiserFS files=11616 size=1000 bytes dirs=43
Création30,6857,9436,38
Fragmentation1,381,011,03
Copie75,21149,4984,02
Fragmentation1,381,011,43
Liens symboliques16,6829,5919,29
Lecture225,74348,99409,45
Etat des fichiers (stat)25,6046,4189,23
Renommage16,1133,5720,69
Destruction6,0464,9018,21

 ext3 files=2274 size=10000 bytes dirs=32XFS files=2292 size=10000 bytes dirs=31reiserFS files=2292 size=10000 bytes dirs=31
Création27,1325,9922,27
Fragmentation1,441,021,05
Copie55,2755,7343,24
Fragmentation1,441,021,12
Liens symboliques1,332,511,43
Lecture40,5150,2056,34
Etat des fichiers (stat)2,341,993,52
Renommage0,991,101,25
Destruction3,408,991,84

De ces tableaux, vous pouvez voir que ext3 est souvent plus rapide pour les opérations de type stat, destruction et renommage de fichier, alors que ReiserFS gagne pour les opération de création et de copie. Notez également que les temps d'exécution de ReiserFS sont meilleurs dans le premier cas (petits fichiers) comme prévu dans sa documentation technique.

Notes

[1]

NdT : de l'appel système stat