2009-04-04 8 views
1

Lorsque je lis un gros fichier dans le système de fichiers, le cache peut-il améliorer la vitesse de l'opération?Une question sur le cache du système de fichiers

Je pense qu'il ya deux réponses différentes:

1.Oui. Parce que le cache peut préextraire, la performance est améliorée.

2.Non. Parce que la vitesse à lire à partir du cache est plus rapide que la vitesse à lire à partir de disque, à la fin, nous pouvons trouver que le cache n'aide pas, donc la vitesse de lecture est également la vitesse à lire à partir du disque.

Lequel est correct? Comment puis-je témoigner la réponse?

[modifier]

Et une autre question est la suivante:

Ce que je ne suis pas sûr est que, lorsque vous activez le cache de la bande passante est utilisée pour

1.prefetch

2.prefetch et lire

lequel est correct?

Alors que si vous éteignez le cache, la bande passante du disque est juste utilisée pour lire.

Si j'éteins le cache et accède aléatoirement au disque, le temps nécessaire est-il comparable à l'heure de lecture séquentielle avec le cache activé?

Répondre

4

1 est absolument correct. Le système d'exploitation peut aller du disque au cache pendant que votre code traite les données qu'il a déjà reçues. Oui, le disque peut bien être le goulot d'étranglement - mais vous n'aurez pas lu, traité, lu, traité, lu, traité, mais lu + processus, lu + processus, lu + processus. Par exemple, supposons que nous ayons un traitement qui prend la moitié du temps de lecture. Représentant le temps d'aller en bas de page, nous pourrions avoir ce genre d'activité sans préchargement:

Read 
Read 
Process 
Read 
Read 
Process 
Read 
Read 
Process 

Alors qu'avec préchargement, ceci est optimisé pour:

Read 
Read 
Read  Process 
Read 
Read  Process 
Read 
     Process 

Fondamentalement, le temps total sera « le temps de lire fichier entier + temps pour traiter la dernière donnée "au lieu de" temps pour lire le fichier entier + temps pour traiter le fichier entier ". Il est difficile de tester ce système: vous devez disposer d'un système d'exploitation sur lequel vous pouvez modifier ou désactiver le cache. Une autre alternative est de changer la façon dont vous ouvrez le fichier - par exemple, dans .NET si vous ouvrez le fichier avec FileOptions.SequentialScan le cache est plus susceptible de faire le bon choix. Essayez avec et sans cette option. Cela a principalement parlé de la préchargement - la mise en cache générale (conserver les données même après leur livraison à l'application) est une question différente, et agit évidemment comme une grande victoire si vous souhaitez utiliser les mêmes données plus d'une fois. Il y a aussi "quelque chose entre" où l'application n'a demandé qu'une petite quantité de données, mais le disque a lu un bloc entier - le système d'exploitation ne préextrait pas les blocs qui n'ont pas été demandés, mais peut mettre en cache le bloc entier que si l'application demande alors plus de données du même bloc, elle peut renvoyer ces données du cache.

+0

Dormez-vous? ;-) –

+0

Oui, mais maintenant je dois changer mon fils aîné après avoir nagé. Retour plus tard :) –

+0

@Jon Skeet ..: Mais est-ce le temps de traiter le dernier morceau de données comparable avec le temps de pré-extraire la prochaine pièce de données? Et une autre question est la suivante: Si j'éteins le cache et accède aléatoirement au disque, le temps nécessaire est-il comparable à celui de la lecture séquentielle avec le cache activé? – MainID

3

La première réponse est correcte.

Le disque a une performance sous-jacente fixe - mais cette performance sous-jacente fixe diffère selon les circonstances. Vous obtenez une meilleure performance réelle d'un lecteur lorsque vous lisez de longues sections de données - par ex. lorsque vous cachez à l'avance. La mise en cache permet donc au lecteur de réaliser une réelle amélioration de ses performances réelles.

0

Si les fichiers sont plus volumineux que votre mémoire, ils n'ont absolument aucun moyen de vous aider.

1

Jon Skeet a un very interesting benchmark avec .NET à propos de ce sujet. Le résultat de base était que la pré-extraction aide, plus le traitement par unité de lecture que vous avez à faire.

3

Dans le cas général, ce sera plus rapide avec le cache. Quelques points à considérer:

  • Les données sur le disque sont organisées en surfaces (têtes aka), pistes et blocs. Il faut un certain temps au disque pour positionner les têtes de lecture afin que vous puissiez commencer à lire une piste. Maintenant, vous avez besoin de cinq blocs de cette piste. Malheureusement, vous demandez alors dans un ordre différent de ce qu'ils apparaissent sur les médias physiques. Le cache aidera grandement en lisant toute la piste dans la mémoire (beaucoup plus de blocs que vous avez besoin), puis réindexez-les (quand la tête commence à lire, il sera partout sur la piste, pas sur le début de la première bloc). Sans cela, vous devrez attendre que le premier bloc de la piste tourne sous la tête et commencer à lire -> le temps de lire une piste serait effectivement doublé. Donc, avec un cache, vous pouvez lire les blocs d'une piste dans n'importe quel ordre et vous commencez à lire dès que la tête arrive sur la piste.

  • Si le système de fichiers est assez plein, le système d'exploitation va commencer à presser vos données dans différents espaces vides. Imaginez que le bloc 1 soit sur la piste 5, le bloc 2 sur la piste 7, le bloc 3 sur la piste 5. Sans cache, vous perdriez beaucoup de temps pour positionner la tête. Avec un cache, la piste 5 est lue, conservée dans la RAM comme la tête va à la piste 7 et quand vous demandez le bloc 3, vous l'obtenez immédiatement.

  • Les fichiers volumineux nécessitent beaucoup de métadonnées, à savoir où se trouvent les blocs de données du fichier. Dans ce cas, le cache conservera ces données en ligne au fur et à mesure que vous lisez le fichier, ce qui vous évite d'avoir à faire plus de trébuchements.

  • Le cache permettra à d'autres programmes d'accéder à leurs données de manière efficace lorsque vous montez le disque. Donc, la performance globale sera meilleure. Ceci est très important quand un deuxième programme commence à écrire pendant que vous lisez. Dans ce cas, le cache recueillera quelques écritures avant d'interrompre vos lectures. En outre, la plupart des programmes lisent des données, les traitent et les réécrivent. Sans le cache, un programme serait soit à sa guise, soit il devrait implémenter son propre schéma de mise en cache pour éviter la trash head.

  • Un cache permet au système d'exploitation de réorganiser l'E/S disque. Disons que vous avez des blocs sur les pistes 5, 7 et 13 mais l'ordre des fichiers demande les pistes 5, 13 et 7. Évidemment, il est plus efficace de lire la piste 7 sur 13 plutôt que d'aller jusqu'à 13 et de revenir à 7.

Ainsi, alors que théoriquement, la lecture beaucoup de données seraient plus rapides sans cache, c'est vrai que si votre fichier est le seul sur le disque et toutes les méta-données sont classées parfaitement, la physique la disposition des données est telle que les têtes de lecture commencent toujours à lire une piste au début du premier bloc, etc.

0

Autre point: Les chances sont que les fichiers fréquemment utilisés soient dans le cache avant même que l'un d'eux ne commence à en lire un.

Questions connexes