Évaluation des performances des systèmes de fichiers — Partie 2

Gazette Linux n°102 — Janvier 2006

Justin Piszcz

Article paru dans le n°122 de la Gazette Linux de janvier 2006.

Traduction française par Joëlle Cornavin .

Relecture de la traduction française par Encolpe Degoute .

Article publié sous 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
1.1. Quoi de neuf ?
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. Données de l'évaluation de performances n°2 sur les fichiers
2.10. Données de l'évaluation de performances n°1 sur les fichiers

1. Introduction

Après la publication du dernier article, j'ai reçu plus d'une douzaine de demandes pour effectuer une seconde évaluation de performances des systèmes de fichiers en utilisant le noyau :2.6. Depuis lors, comme j'ai converti entièrement en XFS toutes les machines Linux que j'utilise, il se peut que je manque un peu d'objectivité en ce qui concerne le système de fichiers XFS. J'ai essayé le matériel pratiquement à l'identique. À la place d'un disque dur Western Digital® de 250 Go et d'un contrôleur Promise ATA/100®, je me sers maintenant d'un Seagate® de 400 Go et d'un contrôleur Maxtor Promise ATA/133®. La machine physique reste la même, il y a 664 Mo supplémentaires de mémoire d'échange (swap) et je suis dorénavant sous Debian Etch. Dans l'article précédent, j'étais sous Slackware 9.1, avec des utilitaires de systèmes de fichiers compilés de façon personnalisée. J'ai ajouté une petite section au début, qui montre la création du système de fichiers et le moment du montage, ainsi qu'un graphique présentant ces nouvelles évaluations de performances. also added a graph showing these new benchmarks. Après la première série de bancs d'essai, j'ai une demande par courrier électronique demandant les chiffres bruts. Ces derniers sont maintenant inclus dans des tableaux à la fin de cet article pour la précédente série d'évaluations de performances et celle-ci.


1.1. Quoi de neuf ?

  1. Unification des graphiques, donc tous sauf un sont du même type.

  2. Exécution des tests avec une distribution récente et le noyau 2.6.14.4.

  3. Ajout des évaluations de performances de ReiserFSv4.

  4. Ajout des données brutes sous forme matricielle au bas de ce document.

  5. Ajout de trois graphiques additionnels :

    1. Temps de création du système de fichiers proprement dit.

    2. Temps nécessaire pour monter le système de fichiers.

    3. La quantitié d'espace disponible après formatage avec les options par défaut.


2. Spécifications

2.1. Matériel


    COMPUTER: Dell Optiplex GX1
         CPU: Pentium III 500MHZ
         RAM:  768MB
        SWAP: 2200MB
  CONTROLLER: Maxtor Promise ATA/133 TX2 - IN PCI SLOT #1 
 DRIVES USED: 1] Seagate 400GB ATA/100 8MB CACHE 7200RPM
              2] Maxtor 61.4GB ATA/66 2MB CACHE 5400RPM
DRIVE TESTED: The Seagate 400GB.

2.2. Logiciels


 LIBC VERSION: 2.3.5
       KERNEL: linux-2.6.14.4
COMPILER USED: gcc-4.0.3
         EXT2: e2fsprogs-1.38/sbin/mkfs.EXT2
         EXT3: e2fsprogs-1.38/sbin/mkfs.EXT3
          JFS: jfsutils-1.1.8/sbin/mkfs.jfs 
   REISERFSv3: reiserfsprogs-3.6.19/sbin/mkreiserfs
   REISERFSv4: reiser4progs-1.0.5/sbin/
               (Used patch reiser4-for-2.6.14-1.patch w/ libaal-1.0.5 + reiser4progs-1.0.5)
          XFS: xfsprogs-2.6.36/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] Désarchivage (untar) de l'archive du noyau sur le même disque.
010] Archivage de 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/1 024/2 048/4 096/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


p500:~# mkfs.EXT2 /dev/hde1
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
48840704 inodes, 97677200 blocks
4883860 blocks (5.00%) reserved for the super user
First data block=0
2981 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, 71663616, 78675968

Writing inode tables: 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.
p500:~#

2.4.2. EXT3


p500:~# mkfs.EXT3 /dev/hde1
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
48840704 inodes, 97677200 blocks
4883860 blocks (5.00%) reserved for the super user
First data block=0
2981 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, 71663616, 78675968

Writing inode tables: done
Creating journal (32768 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.
p500:~#

2.4.3. JFS


p500:~# mkfs.jfs -q /dev/hde1
mkfs.jfs version 1.1.8, 03-May-2005
   \

Format completed successfully.

390708801 kilobytes total disk space.
0.03user 1.01system 0:02.62elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+224minor)pagefaults 0swaps
p500:~#

2.4.4. ReiserFS v3


p500:~# mkreiserfs -q /dev/hde1
mkreiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Continuing core development of ReiserFS is  mostly paid for by Hans Reiser from
money made selling licenses  in addition to the GPL to companies who don't want
it known that they use ReiserFS  as a foundation for their proprietary product.
And my lawyer asked 'People pay you money for this?'. Yup. Life is good. If you
buy ReiserFS, you can focus on your value add rather than reinventing an entire
FS.

Chris Mason wrote the journaling code for V3,  which was enormously more useful
to users than just waiting until  we could create a wandering log filesystem as
Hans would have unwisely done without him.
Jeff Mahoney optimized the bitmap  scanning code for V3,  and performed the big
endian cleanups.
p500:~#

2.4.5. ReiserFS v4


p500:~# mkfs.reiser4 -y /dev/hde1
p500:~#

XFS
p500:~# mkfs.xfs -f /dev/hde1
meta-data=/dev/hde1              isize=256    agcount=16, agsize=6104825 blks
         =                       sectsz=512  
data     =                       bsize=4096   blocks=97677200, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096  
log      =internal log           bsize=4096   blocks=32768, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
p500:~#

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

Les révisions des deux systèmes de fichiers étendus perdent de l'intérêt par rapport à leurs homologues.

ReiserFS met BEAUCOUP de temps pour monter le système de fichiers. J'ai inclus ce test car j'ai constaté qu'il lui faut en fait de quelques minutes à plusieurs heures pour monter un système de fichiers ReiserFS sur un grand volume RAID.

Les utilisateurs se plaignent toujours que les fabricants de disques durs assimilent 1 000 octets à 1 mégaoctet : donc, le système de fichiers fait aussi partie du problème !


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

Dans le premier test, ReiserFS v3 continue à mener, ReiserFS v4 et XFS ne sont pas loin derrière.

ReiserFS v4 est à présent le système de fichiers le plus lents pour rechercher des fichiers. Précédemment, c'était XFS.

XFS n'est plus le système de fchiers le plus lent pour supprimer un grand nombre de fichiers. Néanmoins, EXT2 et EXT3 sont encore les vainqueurs et de loin.

À l'instar du premier test, EXT2 et EXT3 sont à la traîne derrière les autres systèmes de fichiers journalisés.

Contrairement à la première série d'évaluations de performances que j'ai exécutées, il apparaît que XFS s'est légèrement amélioré. ReiserFS v4 now the slowest with ReiserFSv3 behind it. Also in the previous test, EXT3 had suffered a huge performance hit in this area, it is now comparable to EXT2.

Il apparaît que ReiserFSv3  et v4 ont quelques problèmes sérieux pour supprimer de grandes quantités de répertoires.

Dans le premier test d'évaluation de performances, EXT2 a remporté le test. Maintenant XFS est le nouveau chef de file.

Ce banc d'essai représente la vitesse à laquelle l'archive (tarball) peut être lue depuis chaque système de fichiers. De façon surprenante, XFS dépasse dorénavant EXT3.

ReiserFSv3 a gagné la dernière série d'évaluations de performances. Cependant, EXT2 et EXT3 dominent à présent ce test.

Le meilleur système de fichiers journalisé ici était d'ordinaire ReiserFSv3. Cependant, , JFS gagne maintenant l'évaluation de performances.

ReiserFSv3 était d'ordinaire le vainqueur. Il est maintenant évincé par EXT2 et EXT3.

La plus grosse différence ici est que la plupart des systèmes de fichiers sont égalisés comparativement au premier test d'évaluation de performances.

Ce test est demeuré relativement identique.

Une fois encore, pratiquement identique. Cependant, il est important de noter que les performances d'EXT2 et EXT3 sont beaucoup plus proches de ce temps.

EXT2 et EXT3 donnent le meilleur résultat jusqu'à environ 4 096 octets, ce qui est surprenant.

EXT2 et EXT3 surpassent maintenant ReiserFSv3. Dans la plupart de ces évaluations de performances jusqu'ici, ReiserFSv3 est le plus lent. Cependant, ici nous voyons que ReiserFSv4 est d'environ 12 secondes plus rapide que ReiserFSv3.

JFS continue à dominer ce test. EXT2 et EXT3 ne sont pas loin derrière.

Le graphique suivant représente les temps de test combinés.


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

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

Le graphique suivant correspond à l'utilisation du processeur pour ce test.

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


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

Voici une composition du temps de test total de tous les tests.


2.9. Données de l'évaluation de performances n°2 sur les fichiers

Secondes écoulées
TestTâcheEXT2EXT3JFSREISERv3REISERv4XFS
001Exécution de touch sur 10 000 fichiers48.2548.2534.5933.5934.0837.47
002Exécution de find sur 10 000 fichiers0.030.030.030.030.070.04
003Suppression de 10 000 fichiers0.160.161.641.842.982.51
004Création de 10 000 répertoires49.7649.8734.3233.7434.6837.17
005Exécution de find sur 10 000 répertoires0.650.650.631.071.460.72
006Suppression de 10 000 répertoires1.661.673.5843.48119.425.39
007Copie de l'archive depuis un autre disque sur le disque actuel5.175.155.745.127.344.26
008Copie de l'archive depuis le disque actuel sur un autre disque6.967.006.976.898.216.69
009Désarchivage de l'archive du noyau 2.6.14.414.9215.1927.6426.9221.4540.81
010Archivage de l'arborescence des sources du noyau 2.6.14.414.0514.0813.0533.4925.8236.19
011Suppression de l'arborescence des sources du noyau 2.6.14.42.472.646.175.6510.159.10
012Copie de l'archive 2.6.14.4 10 fois39.4838.2939.1345.1562.1646.34
013Création d'un fichier de 1 Go15.0215.0215.1215.9625.4015.87
014Copie d'un fichier de 1 Go36.8736.5138.5447.6050.6341.25
015Division d'un fichier de 1 Mo en blocs de 1 000 octets57.2657.772.994.352.954.87
016Division d'un fichier de 1 Mo en blocs de 1 024 octets28.7328.972.244.042.614.01
017Division d'un fichier de 1 Mo en blocs de 2 048 octets7.026.981.392.261.551.95
018Division d'un fichier de 1 Mo en blocs de 4 096 octets1.851.830.671.050.990.98
019Division d'un fichier de 1 Mo en blocs de 8 192 octets0.580.580.360.560.620.57
020Copie de l'arborescence des sources du noyau 2.6.14.410.0210.0635.7631.6420.1743.42
021Exécution de cat sur un fichier de 1 Go dans /dev/null18.9018.5918.0037.3321.3718.70
Utilisation du processeur
TestTâcheEXT2EXT3JFSREISERv3REISERv4XFS
001Exécution de touch sur 10 000 fichiers99.0099.0099.0099.0099.3399.00
002Exécution de find sur 10 000 fichiers94.0093.0094.0095.0097.0095.66
003Suppression de 10 000 fichiers98.0098.6673.6699.0099.0091.66
004Création de 10 000 répertoires98.0097.3399.0099.0099.6699.00
005Exécution de find sur 10 000 répertoires99.0099.0099.0099.0099.0099.00
006Suppression de 10 000 répertoires99.0099.0088.6699.0099.0097.00
007Copie de l'archive depuis un autre disque sur le disque actuel74.6674.6676.0074.6661.3392.33
008Copie de l'archive depuis le disque actuel sur un autre disque60.0059.3359.3362.0086.0062.66
009Désarchivage de l'archive du noyau 2.6.14.442.3341.3327.3353.0080.0026.00
010Archivage de l'arborescence des sources du noyau 2.6.14.444.0043.6651.3326.6648.6621.00
011Suppression de l'arborescence des sources du noyau 2.6.14.439.6636.6633.0089.3388.3363.66
012Copie de l'archive 2.6.14.4 10 fois79.3380.6693.3374.3373.0090.33
013Création d'un fichier de 1 Go56.0055.6667.3357.0050.0064.33
014Copie d'un fichier de 1 Go42.0042.0047.0037.3352.0049.33
015Division d'un fichier de 1 Mo en blocs de 1 000 octets99.0099.0064.3396.3398.0086.33
016Division d'un fichier de 1 Mo en blocs de 1 024 octets99.0099.0077.3397.6699.0097.00
017Division d'un fichier de 1 Mo en blocs de 2 048 octets99.0099.0064.0096.6699.0097.33
018Division d'un fichier de 1 Mo en blocs de 4 096 octets99.0099.0069.3399.0099.0097.33
019Division d'un fichier de 1 Mo en blocs de 8 192 octets99.0099.0087.0089.6699.0097.66
020Copie de l'arborescence des sources du noyau 2.6.14.465.3365.0021.3341.3370.3325.33
021Exécution de cat sur un fichier de 1 Go dans /dev/null26.3327.0027.3336.6646.3330.00


2.10. Données de l'évaluation de performances n°1 sur les fichiers

2.10.1. Conclusion

Avec la seconde série d'évaluations de performances des systèmes de fichiers, j'espère que tout le monde est à présent satisfait des bancs de test utilisant le noyau 2.6. Ce que je retiens de ces évaluations est que EXT2 et EXT3 sont maintenant au coude à coude en termes de vitesse dans la plupart des tests. Il y apparaît également que XFS se sont améliorés. ReiserFSv3 s'est montré plus lent dans plusieurs des tests, ReiserFSv4 étant le plus lent dans la plupart des tests. Il est important de noter que JFS s'est amélioré dans certains des tests. Personnellement, je choisis toujours XFS pour ses performances et son évolutivité en matière de système de fichiers.

Secondes écoulées
TestTâcheEXT2EXT3JFSREISERXFS
001Exécution de touch sur 10 000 fichiers34.1440.9824.5023.0327.13
002Exécution de find sur 10 000 fichiers0.020.020.020.020.04
003Suppression de 10 000 fichiers0.140.361.371.762.52
004Création de 10 000 répertoires73.53148.4624.1123.4229.19
005Exécution de find sur 10 000 répertoires0.440.660.410.870.59
006Suppression de 10 000 répertoires1.9756.314.055.376.70
007Copie de l'archive depuis un autre disque sur le disque actuel3.265.704.626.084.12
008Copie de l'archive depuis le disque actuel sur un autre disque3.363.453.493.533.45
009Désarchivage de l'archive du noyau 2.6.14.424.4931.7334.6412.3623.79
010Archivage de l'arborescence des sources du noyau 2.6.14.417.8623.4027.0622.8124.85
011Suppression de l'arborescence des sources du noyau 2.6.14.44.247.2610.863.184.48
012Copie de l'archive 2.6.14.4 10 fois18.2846.6838.1749.1626.22
013Création d'un fichier de 1 Go18.9322.3528.8725.8020.49
014Copie d'un fichier de 1 Go45.0462.4854.4671.0655.89
015Division d'un fichier de 1 Mo en blocs de 1 000 octets53.3562.708.114.154.34
016Division d'un fichier de 1 Mo en blocs de 1 024 octets26.2432.617.633.903.96
017Division d'un fichier de 1 Mo en blocs de 2 048 octets6.407.942.832.221.95
018Division d'un fichier de 1 Mo en blocs de 4 096 octets1.652.100.500.650.97
019Division d'un fichier de 1 Mo en blocs de 8 192 octets0.510.690.310.470.53
020Copie de l'arborescence des sources du noyau 2.6.14.424.4330.6525.6822.1926.53
021Exécution de cat sur un fichier de 1 Go dans /dev/null21.7023.5220.4023.2821.13
Utilisation du processeur
TestTâcheEXT2EXT3JFSREISERXFS
001Exécution de touch sur 10 000 fichiers97.6696.6692.6697.6697.00
002Exécution de find sur 10 000 fichiers98.33107.33109.6685.6680.66
003Suppression de 10 000 fichiers95.6698.3376.6697.6691.33
004Création de 10 000 répertoires63.0033.0096.0097.6690.66
005Exécution de find sur 10 000 répertoires96.6697.0099.3395.3398.66
006Suppression de 10 000 répertoires99.006.3387.6698.0089.33
007Copie de l'archive depuis un autre disque sur le disque actuel74.6679.0079.3390.3381.66
008Copie de l'archive depuis le disque actuel sur un autre disque67.0064.6664.0070.6675.66
009Désarchivage de l'archive du noyau 2.6.14.416.0018.6615.3378.3331.66
010Archivage de l'arborescence des sources du noyau 2.6.14.421.6622.6617.0032.0018.33
011Suppression de l'arborescence des sources du noyau 2.6.14.411.0018.339.0096.6677.33
012Copie de l'archive 2.6.14.4 10 fois96.6667.3366.3396.0092.00
013Création d'un fichier de 1 Go35.6657.6632.3384.3339.00
014Copie d'un fichier de 1 Go30.3341.3340.6653.3340.00
015Division d'un fichier de 1 Mo en blocs de 1 000 octets97.6696.6622.3389.3392.33
016Division d'un fichier de 1 Mo en blocs de 1 024 octets97.6697.3320.3389.0095.66
017Division d'un fichier de 1 Mo en blocs de 2 048 octets95.3397.3326.0088.6695.66
018Division d'un fichier de 1 Mo en blocs de 4 096 octets98.3398.0080.0097.3392.33
019Division d'un fichier de 1 Mo en blocs de 8 192 octets99.3398.3387.0096.0094.66
020Copie de l'arborescence des sources du noyau 2.6.14.419.3317.3318.0044.3325.00
021Exécution de cat sur un fichier de 1 Go dans /dev/null26.0026.0030.0030.0033.66