web-dev-qa-db-fra.com

Effacer le cache de fichiers pour répéter les tests de performance

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.

97
Stephen Denne

Utilisez l'application RAMMap de SysInternal .

rammap empty standby

L'option de menu Liste vide/vide en veille effacera le cache de fichiers Windows.

79
smallest

Une rapide recherche sur Google donne ces options pour Linux

  1. Démontez et montez la partition contenant les fichiers
  2. sync && echo 1 > /proc/sys/vm/drop_caches
14
John Nilsson

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.

13
user901295

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
4
Edwin van Mierlo
 #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.

3
Mark

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 .

3
robertcollier4

J'ai trouvé une technique (autre que le redémarrage) qui semble fonctionner:

  1. Exécuter 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

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.

3
Stephen Denne

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.

0
Geoff Johnson

Comme la question posée également pour Linux, il existe une réponse connexe ici .

L'outil en ligne de commande vmtouch permet, entre autres, d'ajouter et de supprimer des fichiers et des répertoires du cache de fichiers système.

0
seeker