Évaluation des performances des systèmes de fichiers

Gazette Linux n°102 — Avril 2004

Joëlle Cornavin

Adaptation française  

Encolpe Degoute

Relecture de la version française  

Article paru dans le n°102 de la Gazette Linux d'avril 2004

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

1. Introduction
2. Spécifications
2.1. Matériel
2.2. Logiciels
2.3. Tests effectués
2.4. Création des systèmes de fichiers
2.5. Évaluation des performances — série 1/4
2.6. Évaluation des performances — série 2/4
2.7. Évaluation des performances — série 3/4
2.8. Évaluation des performances — série 4/4
2.9. Conclusion

1. Introduction

J'ai récemment acheté un disque dur Western Digital® de 250 Go, 8 Mo, 7200 tours/minute et je suis demandé quel système de fichiers journalisé je devrais utiliser. J'emploie actuellement ext2 sur mes autres disques durs plus petits. Lors d'un réamorçage ou d'un arrêt brutal, e2fsck met un certain temps sur les disques de seulement 40 à 60 Go. Par conséquent, je savais qu'un système de fichiers journalisé serait mon meilleur pari. La question est  quelle est le meileur ? Pour pouvoir y répondre, j'ai procédé à des opérations courantes que les utilisateurs de Linux peuvent effectuer régulièrement au lieu de faire appel à des outils d'évaluation de performances tels que Bonnie ou Iozone. Je voulais une analyse d'évaluation de performances « concrète ». Une rapide analogie : juste parce l'Ethernet-Over-Power-Lines peut annoncer 10 Mbps (1,25 Mo/s), dans des tests réels, la vitesse maximale n'est que de 5 Mbps (625 ko/s). C'est pourquoi j'ai choisi d'exécuter mes propres tests plutôt que d'utiliser des outils d'évaluation de performances de disques durs.

2. Spécifications

2.1. Matériel

    COMPUTER: Dell Optiplex GX1
         CPU: Pentium III 500MHZ
         RAM:  768MB
        SWAP: 1536MB
  CONTROLLER: Promise ATA/100 TX - BIOS 14 - IN PCI SLOT #1 
 DRIVES USED: 1] Western Digital 250GB ATA/100 8MB CACHE 7200RPM
              2] Maxtor 61.4GB ATA/66 2MB CACHE 5400RPM
DRIVE TESTED: The Western Digital 250GB.

2.2. Logiciels

 LIBC VERSION: 2.3.2
       KERNEL: linux-2.4.26
COMPILER USED: gcc-3.3.3
         EXT2: e2fsprogs-1.35/sbin/mkfs.ext2
         EXT3: e2fsprogs-1.35/sbin/mkfs.ext3
          JFS: jfsutils-1.1.5/sbin/mkfs.jfs
     REISERFS: reiserfsprogs-3.6.14/sbin/mkreiserfs
          XFS: xfsprogs-2.5.6/sbin/mkfs.xfs

2.3. Tests effectués

001] Création de 10 000 fichiers avec touch dans un répertoire.
002] Exécution de find sur ce répertoire.
003] Suppression du répertoire.
004] Création de 10 000 répertoires avec mkdir dans un répertoire.
005] Exécution de find sur ce répertoire.
006] Suppression du répertoire contenant les 10 000 répertoires.
007] Copie de l'archive (tarball) du noyau depuis un autre disque sur le disque de test.
008] Copie de l'archive du noyau depuis le disque de test sur un autre disque.
009] Exécution de untar sur l'archive du noyau sur le même disque.
010] Exécution de tar sur l'archive du noyau sur le même disque.
011] Suppression de l'arborescence des sources du noyau.
012] Copie de l'archive du noyau 10 fois.
013] Création d'un fichier de 1 Go depuis /dev/zero.
014] Copie du fichier de 1 Go sur le même disque.
015] Division d'un fichier de 10 Mo en blocs de 1 000 octets.
016] Division d'un fichier de 10 Mo en blocs de 1 024 octets.
017] Division d'un fichier de 10 Mo en blocs de 2 048 octets.
018] Division d'un fichier de 10 Mo en blocs de 4 096 octets.
019] Division d'un fichier de 10 Mo en blocs de 8 192 octets.
020] Copie de l'arborescence des sources du noyau sur le même disque.
021] Exécution de cat sur un fichier de 1 Go dans /dev/null.

Note

Note :1 : entre chaque exécution de test, un sync et une mise en sommeil de 10 secondes ont été effectués.

Note 2 : chaque système de fichiers a été testé sur un système de fichiers créé proprement.

Note 3 : tous les systèmes de fichiers ont été créés en utilisant des options par défaut.

Note 4 : tous les tests ont été réalisés en ayant le démon cron tué et avec 1 utilisateur connecté.

Note 5 : tous les tests ont été effectués 3 fois et la moyenne a été prise. Tout test douteux a été réexécuté et vérifié avec la moyenne précédente pour des raisons de cohérence.

2.4. Création des systèmes de fichiers

2.4.1. EXT2

root@p500:~# mkfs.ext2 /dev/hdg1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
30539776 inodes, 61049000 blocks
3052450 blocks (5.00%) reserved for the super user
First data block=0
1864 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@p500:~#

2.4.2. EXT3

root@p500:~# mkfs.ext3 /dev/hdg1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
30539776 inodes, 61049000 blocks
3052450 blocks (5.00%) reserved for the super user
First data block=0
1864 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@p500:~#

2.4.3. JFS

root@p500:~# mkfs.jfs /dev/hdg1
mkfs.jfs version 1.1.5, 04-Mar-2004
Warning!  All data on device /dev/hdg1 will be lost!

Continue? (Y/N) y
   \

Format completed successfully.

244196001 kilobytes total disk space.
root@p500:~#

2.4.4. ReiserFS

root@p500:~# ./mkreiserfs /dev/hdg1
mkreiserfs 3.6.14 (2003 www.namesys.com)

A pair of credits:
Nikita Danilov  wrote  most of the core  balancing code, plugin infrastructure,
and directory code. He steadily worked long hours, and is the reason so much of
the Reiser4 plugin infrastructure is well abstracted in its details.  The carry 
function, and the use of non-recursive balancing, are his idea.

Lycos (www.lycos.com) has a support contract with us that consistently comes in
just when  we would otherwise miss payroll,  and  that they keep doubling every 
year. Much thanks to them.


Guessing about desired format.. Kernel 2.4.26 is running.
Format 3.6 with standard journal
Count of blocks on the device: 61048992
Number of blocks consumed by mkreiserfs formatting process: 10075
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 8831be46-d703-4de6-abf3-b30e7afbf7d2
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON '/dev/hdg1'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/hdg1.

2.4.5. XFS

root@p500:~# mkfs.xfs -f /dev/hdg1
meta-data=/dev/hdg1              isize=256    agcount=59, agsize=1048576 blks
         =                       sectsz=512  
data     =                       bsize=4096   blocks=61049000, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096  
log      =internal log           bsize=4096   blocks=29809, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
root@p500:~#

2.5. Évaluation des performances — série 1/4

Dans le premier test, ReiserFS prend la tête, peut-être en raison de ses arbres de Bayer (B-Trees) équilibrés. (Si les images sont difficiles à lire sur votre écran, voici une archive tar contenant des versions agrandies de celles-ci.)

Tous les systèmes de fichiers se sont comportés de façon assez similaire lors de la recherche de 10 fichier dans un seul répertoire, la seule exception étant XFS qui a mis deux fois plus de temps.

Les deux versions ext2 ext3 semblent récolter les bénéfices de la suppression de grands nombres de fichiers plus rapide que tout autre système de fichiers testé.

Pour être sûr que ce graphique était exact, j'ai refait l'évaluation du système de fichiers ext2 et obtenu pratiquement les mêmes résultats. J'ai été surpris de constater la quantité de taux de performances qu'ext2 et ext3 remportent l'un et l'autre pendant ce test.

La recherche de 10 000 fichiers a semblé être identique, sauf pour XFS. Cependant, les répertoires sont les répertoires sont certainement gérés différemment selon les systèmes de fichiers testés. Assez curieusement, ReiserFS prend le plus grand taux de performances dans cette étape.

Tous les systèmes de fichiers se sont bien comportés dans cette étape, à l'exception de ext3. Je ne suis pas sûr de ce qui pourrait causer une telle surcharge pour ext3 par rapport à tous les autres systèmes de fichiers testés.

Comme prévu, ext2 gagne ici parce qu'il ne journalise aucune des données copiées. Comme beaucoup s'en doutent, XFS gère les fichiers volumineux de façon satisfaisante et prend la tête pour les systèmes de fichiers journalisés dans ce test.

Ce banc de test représente la rapidité à laquelle l'archive (tarball) peut être lue depuis chaque système de fichiers. Étonnamment, ext3 rejoint la vitesse de XFS.

De façon surprenante, ReiserFS gagne, même par rapport au système de fichiers non journalisé ext2.

Le meilleur système de fichiers journalisé ici est ReiserFS. Cependant, ext3 le talonne à une seconde près.

ReiserFS surprend encore une fois tout le monde et prend la tête. Il apparaît que JFS a de sérieux problèmes pour supprimer de grands nombres de fichiers et de répertoires.

À l'évidence, ext2 est vainqueur ici et n'a pas besoin de journaliser ses copies de données mais XFS, tout à fait capable de gérer des fichiers volumineux aussi, le talonne à une seconde.

S'il y en a un qui doit traiter des fichiers volumineux de façon cohérente, XFS semble être le meilleur choix pour un système de fichiers journalisé.

Une fois de plus côté journalisation, XFS se comporte parfaitement avec les fichiers volumineux. Néanmoins, JFS gagne d'un cheveu.

Ce test est certainement celui qui m'a le plus surpris, à tel point que je l'ai réexécuté plusieurs fois et que j'ai obtenu des résultats cohérents à chaque fois. ext2 et ext3 ont de sérieuses difficultés à scinder des fichiers en petits blocs, alors que JFS, ReiserFS et XFS ne semblent pas avoir de problème.

J'ai supposé que les utilisateurs demanderaient ce test si je ne le faisais pas, le voici donc. Il apparaît que l'arbre de Bayer de ReiserFS permet de surpasser tous les systèmes de fichiers testés, y compris ext2 !

JFS a un succès foudroyant sur cette évaluation de performances. J'ai été étonné qu'il se soit effectué aussi bien. Cependant, en traitant à nouveau des fichiers volumineux, XFS le suit de près.

2.6. Évaluation des performances — série 2/4

Voici un graphique linéaire représentant tous les temps des tests.

Voici un graphique linéaire représentant le processeur utiisé pendant chaque test.

2.7. Évaluation des performances — série 3/4

Un graphique en barres pour tous les tests synchronisés.

Un graphique en barres de l'utilisation des processeurs combinés.

2.8. Évaluation des performances — série 4/4

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

Ce graphique a été calculé par les test précédents.

2.9. Conclusion

Pour ceux d'entre vous qui veulent en savoir davantage, la conclusion s'impose évidemment avec Temps total pour tout le test d'évaluation des performances. Le meilleur système de fichiers journalisé à choisir d'après ces résultats serait JFS, ReiserFS ou XFS selon vos besoins et les types de fichiers que vous traitez. J'ai été très surpris de la lenteur d'ext3 en général, car beaucoup de distributions utilisent ce système de fichiers comme système de fichiers par défaut. En général, il faudrait choisir le meilleur système de fichiers d'après les propriétés des fichiers qu'ils traitent pour les meilleures performances possibles !

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.