Quels outils ou techniques puis-je utiliser pour supprimer le contenu des fichiers en cache afin d'éviter que mes résultats de performance ne soient faussés? Je pense que je dois effacer complètement ou supprimer de manière sélective les informations en cache sur le contenu des fichiers et des répertoires.
L’application que je suis en train de développer est un utilitaire de compression spécialisé. Elle est supposée effectuer beaucoup de travail de lecture et d’écriture sur des fichiers que le système d’exploitation n’a pas encore touchés et dont les blocs de disque ne seront probablement pas mis en cache.
Je souhaite supprimer la variabilité que je vois dans le temps IO lorsque je répète la tâche de profilage de différentes stratégies pour effectuer le travail de traitement de fichier.
Je suis principalement intéressé par les solutions pour Windows XP, car il s’agit de ma principale machine de développement, mais je peux également tester sous Linux, et je suis donc également intéressé par les réponses à apporter à cet environnement.
J'ai essayé SysInternals CacheSet , mais le fait de cliquer sur "Effacer" n'entraîne pas une augmentation mesurable (restauration du minutage après un démarrage à froid) dans le temps de relire les fichiers que je viens de lire quelques fois.
Utilisez l'application RAMMap de SysInternal .
L'option de menu Liste vide/vide en veille effacera le cache de fichiers Windows.
Une rapide recherche sur Google donne ces options pour Linux
sync && echo 1 > /proc/sys/vm/drop_caches
Pour Windows XP, vous devriez pouvoir vider le cache d'un fichier spécifique en l'ouvrant à l'aide de CreateFile avec les options FILE_FLAG_NO_BUFFERING, puis en fermant le descripteur. Ce n'est pas documenté et je ne sais pas si cela fonctionne sur les versions ultérieures de Windows, mais je l'utilisais 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.
Un utilitaire de ligne de commande peut être trouvé ici
de la source:
EmptyStandbyList.exe
est un outil de ligne de commande pour Windows (Vista et ci-dessus) pouvant vider:
- processus de travail,
- la liste de pages modifiée,
- les listes d'attente (priorités 0 à 7), ou
- la liste d'attente de priorité 0 uniquement.
Usage:
EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
avec option de conseil POSIX_FADV_DONTNEED
:
Les données spécifiées ne seront pas accessibles dans un avenir proche.
Pour une meilleure visibilité du cache du système de fichiers Windows XP - essayez ATM de Tim Murgent -, il vous permet d'afficher à la fois la taille du jeu de cache du système de fichiers et la taille de la liste de secours dans une vue plus détaillée et plus précise. Pour Windows XP - vous avez besoin de l'ancienne version 1 d'ATM disponible au téléchargement ici depuis V2 et V3 require Server 2003, Vista ou une version ultérieure.
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 quelque chose d'autre. Pour le remplacer par quelque chose d'autre, utilisez un outil tel que MemAlloc ou flushmem de Chad Austin ou Consume.exe à partir du Outils du Kit de ressources Windows Server 2003 .
J'ai trouvé une technique (autre que le redémarrage) qui semble fonctionner:
Ce n'est pas sélectif cependant. Idéalement, j'aimerais pouvoir effacer les parties spécifiques de la mémoire utilisées pour mettre en cache les blocs de disque des fichiers que je veux ne plus mettre en cache.
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.