Performances NTFS incorrectes

Pourquoi est-ce que la performance de NTFS est si grave par rapport à, par exemple, Linux / ext3? Le plus souvent, je vois cela lors de la vérification (grande) des arbres source de Subversion. Checkout prend environ 10-15 minutes sur NTFS, tandis que la caisse correspondante sur Linux (sur un matériel presque identique) prend plus rapidement une ordre de grandeur (1 à 1,5 minutes).

Peut-être que cela est précis pour traiter beaucoup de petits fichiers et NTFS est meilleur lorsqu'il s'agit de fichiers volumineux, mais pourquoi cela devrait-il être? 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: Ce n'est pas une question inflammatoire «NTFS suce par rapport à l'ext3»; Je suis véritablement intéressé par la raison pour laquelle NTFS se produit mal dans certains cas. Est-ce que c'est juste un mauvais design (ce dont je doute), ou y at-il d'autres problèmes qui entrent en jeu?

NTFS a cette chose appelée une table de fichier maître . Ca semble vraiment cool quand vous lisez à ce propos.

Vous pouvez voir que ext3 fonctionne correctement jusqu'à environ 95% d'utilisation du disque, alors 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.

Une des différences ici est ce qui se produit lorsque vous créez un petit fichier. Si un fichier est inférieur à une taille de bloc, il n'est pas écrit dans son propre bloc, mais plutôt dans la MFT. C'est bon si le fichier reste exactement comme il l'était lors de sa création. Dans la pratique, cela signifie que lorsque svn touche un fichier pour le créer, il ajoute à ce fichier, le supprime, ou simplement le modifie par pas assez pour le déplacer vers son propre bloc, l'opération est assez lente. De plus, il suffit de lire beaucoup de petits fichiers mettant du stress sur le MFT où ils résident tous, avec des multiples par bloc. Pourquoi cela ferait-il cela? Il évite de manière préemptive la fragmentation et l'utilisation de plus de blocs plus efficacement, et en général c'est une bonne chose.

En revanche, ext2 et 3, les blocs de fichiers pour chaque fichier sont stockés à côté de l'endroit où les métadonnées du répertoire sont destinées au répertoire dans lequel ils se trouvent (si possible, si votre disque n'est pas fragmenté et vous avez environ 20% d'espace libre). Cela signifie que lorsque svn ouvre des répertoires, un certain nombre de blocs sont mis en cache gratuitement gratuitement dans ce cache de 16 Mb sur votre lecteur, puis dans le cache du noyau. Ces fichiers peuvent inclure le fichier .svn et les fichiers de révision pour votre dernière mise à jour. Ceci est pratique car il est probable que certains des fichiers svn regardent ensuite. NTFS ne parvient pas à le faire, bien qu'une grande partie de la MFT soit mise en cache dans le système, mais ce ne sont peut-être pas les éléments que vous voudrez ensuite.

Eh bien, votre problème particulier est dû au fait que

  1. Subversion elle-même vient du monde UNIX, la version Windows suppose donc des caractéristiques de performances similaires.
  2. La performance NTFS n'est vraiment pas géniale avec les gazillions de petits fichiers.

Ce que vous voyez est simplement un objet de quelque chose conçu pour un système d'exploitation particulier avec des hypothèses de performance sur ces systèmes d'exploitation. Cela se détériore souvent, lorsqu'il est transporté vers d'autres systèmes. D'autres exemples seraient la fourchette contre le filetage. Sur UNIX, la manière traditionnelle de paralléliser est juste pour engendrer un autre processus. Sur Windows, où les processus prennent au moins cinq fois plus de temps pour commencer, c'est une très mauvaise idée.

En général, vous ne pouvez pas simplement prendre tous les artefacts d'un système d'exploitation particulier pour être accordé sur n'importe quel autre avec une architecture très différente. N'oubliez pas non plus que NTFS possède de nombreuses fonctionnalités du système de fichiers qui étaient absentes dans les systèmes de fichiers UNIX largement utilisés à ce stade, comme la journalisation et les ACL. Ces choses coûtent cher.


Un jour, quand j'ai beaucoup de temps libre, j'avais l'intention d'écrire un module de système de fichiers SVN qui profite des fonctionnalités que vous possédez sur NTFS, telles que le support de transaction (devrait éliminer les «problèmes touchant des millions de petits fichiers») et d'autres données Flux (devrait éliminer le besoin du répertoire .svn séparé). Ce serait une bonne chose d'avoir, mais je doute que les développeurs de SVN se mettront à mettre en œuvre de telles choses dans un avenir prévisible.

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

Voici les informations de Microsoft sur la façon dont NTFS fonctionne. Il peut être suffisant pour ce que vous cherchez, mais l'étude peut éclairer les scénarios auxquels NTFS a des problèmes.