Comment vider le cache de lecture du disque Windows?

13

Pour les tests de performances, je dois vider le cache de lecture du disque de Windows. J'ai essayé de googler mais je n'ai rien trouvé d'autre que le redémarrage ou d'autres choses manuelles. Avant de céder et de faire cela, j'aimerais savoir si quelqu'un connaît un moyen de vider le cache de lecture du disque Windows. Je teste sur Windows 7, mais je suis également intéressé par les solutions Windows XP.

Sebastiaan M
la source

Réponses:

3

Vous pouvez également remplir le cache avec des données dont vous savez qu'elles ne seront pas utilisées dans le test, puis exécuter le test.

Maximus Minimus
la source
1
Alternativement, vous pouvez prendre toute la RAM disponible. Windows libérera le cache de fichiers afin d'utiliser cette RAM. Pour plus de détails, voir la réponse fournie par Stephen Denne.
Ultralisk
J'espérais quelque chose de moins 'contournable' mais je pense que votre suggestion est plus facile à implémenter dans un script de test automatique dans ma situation. Merci pour la suggestion.
Sebastiaan M
7

J'avais posé la même question sur Stack Overflow

/programming/478340/clear-file-cache-to-repeat-performance-testing

J'utilisais Win XP, mais la meilleure solution que j'ai trouvée était:

  1. Exécutez quelques copies de MemAlloc
  2. Avec chacun, allouez plusieurs fois de gros morceaux de mémoire
  3. Utilisez Process Explorer pour observer la réduction de la taille du cache système à des niveaux très bas
  4. Quittez les programmes MemAlloc
Stephen Denne
la source
3

Pour une vue bien meilleure du cache du système de fichiers Windows XP - essayez ATM par Tim Murgent - il vous permet de voir à la fois la taille du jeu de travail du cache du système de fichiers et la taille de la liste de veille dans une vue plus détaillée et précise. Pour Windows XP - vous avez besoin de l'ancienne version 1 d'ATM qui est disponible en téléchargement ici car V2 et V3 nécessitent Server 2003, Vista ou supérieur.

Vous remarquerez que bien que Cacheset réduise le "Cache WS Min" - les données réelles continuent d'exister sous la forme de listes de secours d'où elles peuvent être utilisées jusqu'à ce qu'elles soient remplacées par autre chose. Pour le remplacer ensuite par autre chose, utilisez un outil tel que MemAlloc, flushmem par Chad Austin ou Consume.exe à partir des outils du Kit de ressources Windows Server 2003.

Robert Collier
la source
3

J'ai utilisé RAMMap . Il a la possibilité de libérer la mémoire de quelques types d'allocations.

Le contenu du cache de fichiers peut être observé dans l'onglet "Résumé du fichier" et la sélection de "Liste de secours vide" dans le menu "Vide" devrait effacer ce cache.

pbies
la source
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
slm
1

Redémarrez la machine.

Joe Koberg
la source
C'est la solution du «gros marteau». Voir la réponse fournie par Stephen Denne.
Ultralisk
1

La meilleure pratique consiste à garantir que tous les fichiers de test avec lesquels vous effectuez une analyse comparative sont deux fois plus volumineux que le cache du contrôleur de baie (ou la mémoire Windows OS si l'analyse comparative est effectuée sur un invité VM), avec un fichier de test d'au moins 1 Go. Cela garantit que toute mise en cache sera annulée. Nous utilisons SQLIO pour l'analyse comparative des disques; il y a une mine d'informations dans la documentation d'accompagnement.

Greg Askew
la source
L'une des choses que j'essaie de faire est de comparer la vitesse à laquelle notre projet s'appuie sur plusieurs configurations. Je ne peux vraiment pas augmenter la taille de ces fichiers, je pense. :)
Sebastiaan M
1

Faisant écho à Greg, la façon de contourner ce problème est de s'assurer que l'ensemble de données avec lequel vous travaillez dépasse largement la quantité de RAM disponible. Si vous effectuez des tests sur une plate-forme matérielle qui comprend également une quantité importante de caches basés sur des contrôleurs et des disques, vous devez vous assurer que vous dépassez également ces quantités. Cela garantira que les performances que vous voyez sont plus liées aux performances matérielles réelles que les optimisations logicielles que toutes ces couches de cache introduisent.

Cela dit, si vous cherchez vraiment à purger le cache de lecture des données utiles avant d'exécuter vos tests de performances qui veulent utiliser le cache de lecture, la façon de le faire est de lire dans un seul fichier de taille juste en dessous de votre mémoire cache de lecture et faire des opérations sur les fichiers. Cela purgera le cache et le remplira avec ce seul gros fichier. Une fois que vous le fermez, votre cache est effectivement vidé des données qui vous intéressent . La partie délicate consiste à déterminer la taille de ce fichier, ce qui pourrait très bien être de l'ordre de 3 Go; à ce stade, vous devrez peut-être plusieurs fichiers indésirables de 1 Go pour le faire fonctionner.

sysadmin1138
la source
0

Je pense que la plupart des options seront des "trucs manuels". Sous UNIX, il est assez standard de démonter / remonter un périphérique avant chaque exécution de référence, souvent avec un "newfs" ajouté pour faire bonne mesure. Je ne sais pas si vous pouvez utiliser des outils de ligne de commande sous Windows pour démonter / monter des périphériques, mais si l'automatisation est votre objectif, alors il vaudrait la peine de chercher de tels utilitaires.

Geoff Fritz
la source
1
Sous Linux, si démonter / remuont n'est pas une option pour une raison quelconque, vous pouvez également le faire sync; echo 3 > /proc/sys/vm/drop_caches- bien que cela affecte tous les caches / tampons et pas seulement ceux appartenant à un volume particulier. J'ai déjà cherché une astuce similaire pour Windows, mais je n'en ai pas trouvé.
David Spillett
0

Jetez un oeil à cette réponse que je viens de poster à ma propre question sur StackOverflow.

Fondamentalement: si vous tentez CreateFileun handle sans accès en partage en écriture, il videra puis invalidera le cache, même s'il renvoie une erreur.

J'espère que cela t'aides!

user541686
la source