web-dev-qa-db-fra.com

Performance lente sur NTFS Drive avec grand nombre de fichiers

Je regarde cette configuration:

  • Windows Server 2012
  • 1 TB NTFS lecteur, 4 ko grappes, ~ 90% complète
  • ~ 10m fichiers stockés dans 10 000 dossiers = ~ 1000 fichiers/dossier
  • Fichiers surtout assez petits <50 Ko
  • Lecteur virtuel hébergé sur la matrice de disques

Lorsqu'une application accède aux fichiers stockés dans des dossiers aléatoires, il faut 60-100 ms pour lire chaque fichier. Avec un outil de test, il semble que le délai se produise lors de l'ouverture du fichier. Lire les données ne prend qu'une fraction du temps.

En résumé, cela signifie que lire 50 fichiers peut facilement prendre 3-4 secondes, ce qui est beaucoup plus que prévu. L'écriture est effectuée en lot afin que la performance n'est pas un problème ici.

J'ai déjà suivi des conseils sur SO et SF pour arriver à ces chiffres.

Que faire à propos des temps de lecture?

  • Considérer 60-100 ms par fichier pour être ok (ce n'est pas, n'est-ce pas?)
  • Des idées Comment la configuration peut-elle être améliorée?
  • Existe-t-il des outils de surveillance de bas niveau qui peuvent dire à quoi il est dépensé exactement le temps?

[~ # ~ ~] Mise à jour [~ # ~]

  1. Comme mentionné dans les commentaires, le système exécute Symantec Endpoint Protection. Cependant, la désactivation ne change pas les temps de lecture.

  2. Perfmon mesure 10-20 ms par lecture. Cela signifierait que tout fichier lue prend environ 6 opérations de lecture I/O, non? Est-ce que ce serait la recherche de MFT et les contrôles ACL?

  3. Le MFT a une taille d'environ 8,5 Go, ce qui est plus que la mémoire principale.

11
Paul B.

Le serveur n'avait pas assez de mémoire. Au lieu de la mise en cache des données métafichières NTFS en mémoire, chaque accès de fichiers requis plusieurs lectures de disque. Comme d'habitude, la question est évidente une fois que vous le voyez. Permettez-moi de partager ce qui assombri mon point de vue:

  • Le serveur a montré 2 Go de mémoire disponible à la fois dans Task Manager et Rammap. Donc, soit que Windows a décidé que la mémoire disponible n'était pas suffisante pour contenir une partie significative des données du métafichement. Ou une certaine restriction interne ne permet pas d'utiliser le dernier bit de la mémoire pour les données métafiles.

  • Après la mise à niveau du RAM Responsable des tâches ne ferait pas d'utilise plus de mémoire utilisée. Toutefois, Rammap a signalé que plusieurs données de métafichis sont détenues en tant que données de veille. Apparemment, les données de veille peuvent avoir un impact substantiel.

Outils utilisés pour l'analyse:

  • fsutil fsinfo ntfsinfo driveletter: Pour afficher la taille MFT NTFS (ou NTFSInfo )
  • rammap pour montrer l'allocation de la mémoire
  • moniteur de processus Pour montrer que chaque fichier lu est précédé d'environ 4 opérations de lecture pour conduire:\$ MFT et lecteur:\$ répertoire. Bien que je ne puissiez pas trouver la définition exacte de $ de répertoire informatique semble être liée à la MFT aussi.
5
Paul B.