3 votes

Quel cache rend la recherche d'un fichier plus rapide pour la deuxième fois exactement ?

Sous Windows, sur une partition de disque dur avec Total Commander, si je fais une recherche de fichiers sur la racine du système de fichiers, par ex. C:\ il prendra un temps considérable : il s'affiche en parcourant toute la structure du répertoire (apparemment en profondeur).

Cependant, si je refais une autre recherche, après avoir terminé la première, à partir de la même racine, c'est beaucoup plus rapide. En me basant sur le bruit (physique) manquant, je pense que le disque dur n'est pas impliqué cette fois, donc la structure du répertoire/fichier a été mise en cache.

Je suppose que ce n'est pas Total Commander qui met en cache la structure du répertoire, ou est-ce le cas ? Il me semble que c'est une fonction du système d'exploitation, ou un cache du disque dur.

Où et comment exactement est-il mis en cache alors ? (c'est-à-dire par quel mécanisme de quel composant, dans quelle structure ?) Comment le système sait-il que le cache est à jour ou non ? S'il peut être entièrement mis en cache, pourquoi ne l'est-il pas par défaut ?

3voto

jackrabbit Points 2990

Je suppose que ce n'est pas Total Commander qui met en cache la structure du répertoire, ou est-ce le cas ?

Probablement pas. Si vous avez un grand nombre de fichiers, vous pouvez constater le même effet si vous ouvrez une invite de commande et tapez quelque chose comme dir c:\abc.def /s Il est peu probable que vous ayez des fichiers portant ce nom, mais il prend beaucoup plus de temps à terminer la première fois qu'il n'en prendrait si vous l'exécutiez une deuxième fois immédiatement après.

Il me semble que c'est une fonctionnalité du système d'exploitation, ou un cache du disque dur. Où et comment exactement est-il mis en cache alors ? (c'est-à-dire par quel mécanisme de quel composant, dans quelle structure ?)

Windows/NTFS mettrait les éléments en cache et il y aurait également un cache dans votre contrôleur de disque dur.

Comment le système sait-il que le cache est à jour ou non ?

En effet, la seule façon d'écrire sur le disque dur est d'utiliser des routines qui connaissent et donc mettent à jour ou invalident le cache. Pour Windows, ces routines sont probablement le pilote de périphérique NTFS, alors que pour le disque dur, c'est le contrôleur de disque.

S'il peut être entièrement mis en cache, pourquoi n'est-il pas mis en cache par défaut ?

Parce que le cache est mieux utilisé pour d'autres choses. Le mettre en cache par défaut signifierait

  1. Chaque fois que l'ordinateur démarre, il doit lire et stocker des informations sur chaque fichier de votre disque dur, qu'il en ait besoin ou non. Cela peut ajouter quelques secondes à votre temps de démarrage. Il est également fréquent que les gens aient des millions de fichiers, ce qui signifie que le temps peut être considérablement plus élevé.

  2. Cette mémoire n'est pas disponible pour mettre en cache quoi que ce soit d'autre, en particulier les fichiers sur lesquels vous travaillez réellement.

  3. Que se passe-t-il si votre profil/documents sont stockés sur un serveur. Voulez-vous que le système attende pendant qu'il tire les informations sur tous vos fichiers à travers le réseau ?

Rappelez-vous aussi que ce n'est pas parce que tout peut être mis en cache, ne signifie pas qu'il devrait être mis en cache. Il faut parfois plus de temps pour accéder aux informations contenues dans un cache extrêmement grand que dans un cache plus petit, ce qui signifie qu'une mise en cache trop importante peut en fait vous ralentir. (J'entends par là que l'accès est plus lent qu'avec un cache plus petit, mais qu'il reste plus rapide qu'en l'absence de cache).

0 votes

Je suppose qu'un contrôleur de disque mettrait en cache des données binaires en fonction du dernier accès à "une certaine position" sur le disque, non ? Comme il ne devrait pas comprendre les structures des systèmes de fichiers. Je suppose également que le cache du disque dur est relativement plus petit et donc que l'espace de cache principal est quelque part dans l'espace mémoire du noyau, n'est-ce pas ?

1 votes

Correct. Le cache du disque dur est normalement beaucoup plus petit que celui de Windows (il est normalement de l'ordre de 16 ou 32 Mo), donc si vous avez un million de fichiers, le cache du disque dur ne sera pas assez grand pour les mettre tous en cache. Mais le cache dans le contrôleur de disque serait plus compliqué que de simplement se souvenir des choses à "une certaine position" sur le disque, il mettrait plutôt en cache les secteurs ou blocs les plus actifs, donc si le répertoire auquel vous accédez se trouve être stocké dans un secteur/bloc qu'il avait précédemment mis en cache, il serait capable de le retourner plus rapidement.

0voto

Austin T French Points 10253

Ce à quoi vous faites référence s'appelle l'indexation. La plupart des outils de recherche ont un index qui est construit au fil du temps pour accélérer les recherches. Start -> Search a un index, TotalCommander semble utiliser le sien, Google en a un pour toutes les pages web que vous pouvez trouver via Google.

Il existe plusieurs façons d'accélérer un index et la recherche dans un système de fichiers. L'index sera cependant plus rapide qu'une nouvelle recherche et que de nouveaux appels récursifs pour fouiller dans un répertoire.

1 votes

Je ne pense pas que ce soit un index dans Total Commander. Si je ferme Total Commander et le rouvre ensuite, la recherche est toujours rapide. Si je le ferme, exécute CCleaner et rouvre TC, la recherche est toujours rapide. Cependant, si je redémarre l'ordinateur, elle est de nouveau lente. Il me semble qu'il s'agit d'un cache en mémoire.

0 votes

Il peut y avoir une version intégrée, mais garder tout cela en mémoire ne serait pas raisonnable pour les gros disques, surtout si l'on considère l'âge de l'application. Lorsque TC a été introduit pour la première fois, chaque bit comptait dans la RAM, étant donné qu'il existe aussi une version 16 bits. Si le cache / index se réinitialise après un redémarrage, je dirais qu'un fichier temporaire est l'index, ou que Ghisler a construit un autre contrôle. Mais je ne vois pas de différence perceptible entre la première recherche et la deuxième, troisième etc. sur ma machine. i7, 4GB RAM, SSD...

0 votes

Sur SSD (j'en possède aussi) il n'est pas possible de reproduire des résultats impressionnants car il n'a pas besoin de temps de recherche et j'imagine qu'il peut même être traité différemment en tant que disque. Mais pour éliminer TC j'ai fait un script Python avec os.walk pour benchmarker cette performance et entre la première recherche et les suivantes, il y avait une différence de temps de 2 ordres de grandeur (ie. 0.9 vs 90 s).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X