Mauvaises performances NTFS

21

Pourquoi les performances NTFS sont-elles si nulles comparées, par exemple, à Linux / ext3? Le plus souvent, je vois cela lors de la vérification des (grandes) arborescences sources de Subversion. Le paiement prend environ 10 à 15 minutes sur NTFS, tandis que le paiement correspondant sur Linux (sur un matériel presque identique) prend un ordre de grandeur plus rapidement (1 à 1,5 minute).

Peut-être que cela est spécifique à la gestion de nombreux petits fichiers et que NTFS est meilleur quand il s'agit de gros fichiers, mais pourquoi devrait-il en être ainsi? L'amélioration des performances NTFS pour les petits fichiers ne serait-elle pas extrêmement bénéfique pour les performances de Windows en général?

EDIT: Il ne s'agit pas d'une question inflammatoire "NTFS suce par rapport à ext3"; Je suis vraiment intéressé par les raisons pour lesquelles NTFS fonctionne mal dans certains cas. Est-ce simplement une mauvaise conception (dont je doute), ou y a-t-il d'autres problèmes qui entrent en jeu?

JesperE
la source
4
Peut-être que cela pourrait être reformulé afin que vous vous demandiez comment améliorer les performances de NTFS lorsque vous traitez de nombreux petits fichiers, plutôt que de demander pourquoi NTFS craint par rapport à ext3?
ChrisInEdmonton
D'accord avec @Chris, cette question est un peu inutile telle quelle.
Sasha Chedygov, le
4
Eh bien, je m'intéresse vraiment aux raisons pour lesquelles NTFS fonctionne mal. Si la réponse est "faites X pour le rendre plus rapide", alors super, mais je me contenterais de comprendre le problème.
JesperE
Ah, d'accord, désolé de vous avoir mal compris.
Sasha Chedygov
2
BTW lorsque vous utilisiez SVN sur une machine Windows, cette machine avait-elle un antivirus avec protection en temps réel activée? Ça pourrait être mauvais.
dlamblin

Réponses:

35

NTFS a ce qu'on appelle une table de fichiers maîtres . Cela semble vraiment cool lorsque vous lisez à ce sujet.

Vous pouvez voir qu'ext3 fonctionne correctement jusqu'à environ 95% d'utilisation du disque, tandis que l'existence du MFT signifie que NTFS ne veut pas vraiment que vous utilisiez plus de 90% de votre disque. Mais je suppose que ce n'est pas votre problème et que votre problème concerne les nombreuses opérations sur de nombreux petits fichiers.

L'une des différences ici est ce qui se passe lorsque vous créez un petit fichier. Si un fichier est plus petit qu'une taille de bloc, il n'est pas écrit dans son propre bloc mais est plutôt stocké dans le MFT. C'est bien si le fichier reste exactement tel qu'il était lors de sa création. En pratique cependant, cela signifie que lorsque svn touche un fichier pour le créer, puis l'ajoute à ce fichier, le supprime ou le modifie simplement par pas assez pour le déplacer vers son propre bloc, l'opération est assez lente. De plus, la lecture de nombreux petits fichiers met un peu l'accent sur la MFT où ils résident tous, avec des multiples par bloc. Pourquoi ferait-il ça? C'est éviter de manière préventive la fragmentation et utiliser plus de blocs plus efficacement, et en général c'est une bonne chose.

En ext2 et 3 en revanche, les blocs de fichiers pour chaque fichier sont stockés à côté de l'emplacement des métadonnées du répertoire pour le répertoire dans lequel ils se trouvent (si possible, si votre disque n'est pas fragmenté et que vous disposez d'environ 20% d'espace libre). Cela signifie que lorsque svn ouvre des répertoires, un certain nombre de blocs sont mis en cache essentiellement gratuitement dans ce cache de 16 Mo sur votre disque, puis à nouveau dans le cache du noyau. Ces fichiers peuvent inclure le fichier .svn et les fichiers de révision pour votre dernière mise à jour. C'est pratique car ce sont probablement certains des fichiers que svn examine ensuite. NTFS ne peut pas faire cela, bien que de grandes parties du MFT doivent être mises en cache dans le système, ce ne sont peut-être pas les parties que vous voudrez ensuite.

dlamblin
la source
2
Vous avez raison de dire que c'est là que vivent les petits fichiers, mais je ne sais pas pourquoi cela devrait mettre l'accent sur la MFT. Cela ne faciliterait-il pas beaucoup la lecture de ces fichiers, car vous êtes pratiquement assuré de tirer beaucoup de ces fichiers dans le cache lorsque vous en tirez un?
ChrisInEdmonton
1
@ChrisInEdmonton Ce sont les mises à jour de la MFT qui le soulignent, car vous ne touchez pas aux blocs où l'espace voisin est disponible, vous finissez par déplacer des choses et invalider également les parties mises en cache de la MFT. Je vous accorde que sur papier, la MFT devrait être un moyen très rapide de gérer les petits fichiers. Cela ne confirme tout simplement pas dans la pratique.
dlamblin
6

Eh bien, votre problème particulier est que

  1. Subversion elle-même vient du monde UNIX, la version Windows suppose donc des caractéristiques de performances similaires.
  2. Les performances NTFS ne sont vraiment pas excellentes avec des millions de petits fichiers.

Ce que vous voyez est simplement un artefact de quelque chose conçu pour un système d'exploitation particulier avec des hypothèses de performances sur ces systèmes d'exploitation. Cela se décompose généralement mal lorsqu'il est appliqué à d'autres systèmes. D'autres exemples seraient le forking contre le filetage. Sous UNIX, la manière traditionnelle de mettre en parallèle quelque chose consiste simplement à générer un autre processus. Sous Windows, où les processus prennent au moins cinq fois plus de temps pour démarrer, c'est une très mauvaise idée.

En général, vous ne pouvez pas simplement accepter des artefacts d'un système d'exploitation particulier sur un autre avec une architecture très différente. N'oubliez pas non plus que NTFS possède de nombreuses fonctionnalités de système de fichiers qui étaient absentes dans les systèmes de fichiers UNIX largement utilisés à ce stade, telles que la journalisation et les listes de contrôle d'accès. Ces choses ont un prix.


Un jour, quand j'ai beaucoup de temps libre, je prévoyais d'écrire un module de système de fichiers SVN qui tire parti des fonctionnalités que vous avez sur NTFS, telles que le support des transactions (devrait éliminer le "problème touchant des millions de petits fichiers") et des données alternatives streams (devrait éliminer la nécessité d'un .svnrépertoire séparé ). Ce serait une bonne chose, mais je doute que les développeurs SVN parviennent à mettre en œuvre de telles choses dans un avenir prévisible.

Note latérale: Une seule mise à jour sur un grand référentiel SVN que j'utilise a pris environ 250 000 opérations sur les fichiers. Une petite voix me dit que c'est vraiment beaucoup pour 24 fichiers qui ont changé ...

Joey
la source
1
Mais pourquoi les performances NTFS sont-elles mauvaises lorsqu'il s'agit de millions de petits fichiers? Faut-il sacrifier cela pour obtenir autre chose?
JesperE
3

Voici les informations de Microsoft sur le fonctionnement de NTFS. Cela peut être exagéré pour ce que vous recherchez, mais son étude peut éclairer les scénarios avec lesquels NTFS a des problèmes.

Kenneth Cochran
la source