Quels outils ou techniques puis-je utiliser pour supprimer le contenu des fichiers mis en cache afin d'éviter que mes résultats de performances ne soient faussés? Je crois que je dois soit complètement effacer, soit supprimer sélectivement les informations mises en cache sur le contenu des fichiers et des répertoires.
L'application que je développe est un utilitaire de compression spécialisé, et devrait faire beaucoup de travail pour lire et écrire des fichiers que le système d'exploitation n'a pas touchés récemment et dont les blocs de disque sont peu susceptibles d'être mis en cache.
Je souhaite supprimer la variabilité que je vois dans le temps d'E / S lorsque je répète la tâche de profilage de différentes stratégies pour effectuer le travail de traitement de fichiers.
Je suis principalement intéressé par les solutions pour Windows XP, car c'est ma principale machine de développement, mais je peux également tester avec Linux, et je suis donc intéressé par des réponses pour cet environnement aussi.
J'ai essayé SysInternals CacheSet , mais le fait de cliquer sur "Effacer" n'entraîne pas une augmentation mesurable (restauration du timing après un démarrage à froid) du temps de relecture des fichiers que je viens de lire quelques fois.
la source
Réponses:
Utilisez l' application RAMMap de SysInternal .
L'option de menu Liste d'attente vide / vide effacera le cache de fichiers Windows.
la source
Pour Windows XP, vous devriez être en mesure de vider le cache d'un fichier spécifique en ouvrant le fichier à l'aide de CreateFile avec les options FILE_FLAG_NO_BUFFERING, puis en fermant le handle. Ce n'est pas documenté, et je ne sais pas si cela fonctionne sur les versions ultérieures de Windows, mais je l'ai utilisé il y a longtemps lors de l'écriture de code de test pour comparer les bibliothèques de compression de fichiers. Je ne me souviens pas si l'accès en lecture ou en écriture a affecté cette astuce.
la source
Une recherche rapide sur Google donne ces options pour Linux
sync && echo 1 > /proc/sys/vm/drop_caches
la source
Un utilitaire de ligne de commande peut être trouvé ici
de la source:
la source
avec option de conseil
POSIX_FADV_DONTNEED
:les données spécifiées ne seront pas accessibles dans un proche avenir.
la source
J'ai trouvé une technique (autre que le redémarrage) qui semble fonctionner:
Ce n'est cependant pas sélectif. Idéalement, j'aimerais pouvoir effacer les parties spécifiques de la mémoire utilisées pour la mise en cache des blocs de disque de fichiers que je ne souhaite plus mettre en cache.
la source
Pour une bien meilleure vue du cache du système de fichiers de Windows XP - essayez ATM de Tim Murgent - il vous permet de voir à la fois la taille de l'ensemble de travail du cache du système de fichiers et la taille de la liste d'attente 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 au téléchargement ici puisque les versions V2 et V3 nécessitent Server 2003, Vista ou supérieur.
Vous remarquerez que bien que Sysinternals Cacheset réduise le "Cache WS Min" - les données réelles continuent d'exister sous la forme de listes de veille à partir desquelles elles peuvent être utilisées jusqu'à ce qu'elles soient remplacées par autre chose. Pour ensuite le remplacer par quelque chose d'autre, utilisez un outil tel que MemAlloc ou flushmem de Chad Austin ou Consume.exe à partir des outils du Kit de ressources Windows Server 2003 .
la source
Comme la question a également été posée pour Linux, il y a une réponse connexe ici .
L'outil de ligne de commande vmtouch permet, entre autres, d'ajouter et de supprimer des fichiers et des répertoires du cache de fichiers système.
la source
Il existe un appel API Windows https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize qui peut être utilisé pour vider le cache du système de fichiers. Il peut également être utilisé pour limiter la taille du cache à une très petite valeur. Semble parfait pour ces types de tests.
la source