5 votes

Comment vider les tampons et les caches de manière programmatique dans Windows ?

Je dois évaluer la vitesse de certains bash dans un environnement Cygwin, et m'assurer que les tests que j'exécute ne touchent pas les tampons ou les caches de Windows. Bien que j'effectue l'analyse comparative dans un environnement bash je soupçonne que toute la mise en cache est effectuée par Windows lui-même plutôt que par Cygwin.

Sur un Système basé sur Unix vous pouvez faire ce qui suit pour vider tous les caches et tampons :

echo 3 > /proc/sys/vm/drop_caches

Quel est l'équivalent de cette commande sous Windows ?

5voto

Hashim Aziz Points 10142

Twisty a raison de dire qu'il n'y a pas d'outil natif dans Windows pour faire cela.

Cependant, en effectuant des recherches et des tests supplémentaires, il semble que même l'outil Sync de SysInternals n'efface pas réellement la mémoire utilisée par Windows pour mettre en cache les fichiers et les données - autrement connu sous le nom de cache du système de fichiers, et que Windows appelle mémoire de veille . Cela peut être démontré en utilisant RAMMap un autre outil de SysInternals qui surveille toutes les allocations de mémoire dans Windows.

Inspection de la colonne de mémoire en attente de RAMMap avant et après l'exécution de l'application Sync montre que la mémoire de réserve de Windows reste pratiquement inchangée avant et après l'exécution de l'outil Sync . En effet, Sync ne semble pas avoir d'effet notable sur la mémoire, ce qui, pour autant que je sache, le rend essentiellement inutile pour les tests de performance.

J'ai cependant découvert une méthode programmatique efficace pour effacer la liste d'attente de Windows, sous la forme suivante EmptyStandbyList.exe un programme simple en ligne de commande de Wen Jia Liu :

EmptyStandbyList.exe est un outil de ligne de commande pour Windows (Vista et supérieur) qui permet de vider :

  • processus de travail
  • la liste des pages modifiées
  • les listes d'attente (priorités 0 à 7)
  • la liste d'attente de priorité 0 uniquement

Pour l'utiliser, vous devez vous assurer que l'option EmptyStandbyList.exe se trouve dans un emplacement situé dans la variable d'environnement PATH de votre système, alors appelez le fichier EmptyStandbyList.exe depuis le Shell ou depuis un Shell lorsque vous avez besoin de vider la mémoire.

Sur CMD :

EmptyStandbyList.exe

Et dans bash :

cmd \/c EmptyStandbyList.exe

Pour confirmer que la mémoire de veille de Windows a été effacée avec succès après l'exécution, vous pouvez à nouveau utiliser RAMMap.

Avant de courir EmptyStandbyList.exe

enter image description here

Après avoir exécuté EmptyStandbyList.exe

enter image description here

3voto

Il n'y a pas de commande équivalente intégrée à Windows. Cependant, Microsoft fait librement disponible le site Sync qui fait ce que vous demandez en ce qui concerne l'effacement des données non écrites sur le disque. Elle fait partie de la suite d'outils SysInternals.

Voici le description de son auteur :

UNIX fournit un utilitaire standard appelé Sync, qui peut être utilisé pour demander au système d'exploitation de vider toutes les données du système de fichiers sur le disque afin de s'assurer qu'elles sont stables et ne seront pas perdues en cas de panne du système. Sinon, toute donnée modifiée présente dans le cache serait perdue. Voici un équivalent que j'ai écrit, appelé Sync, qui fonctionne sur toutes les versions de Windows. Utilisez-le chaque fois que vous voulez savoir que les données des fichiers modifiés sont stockées en toute sécurité sur vos disques durs.

Vous devez disposer des privilèges d'administrateur pour exécuter la commande. Pour vider les tampons de todos disques, il suffit d'exécuter :

sync

Si vous voulez ne cibler qu'un seul lecteur, tel que C: utiliser :

sync c:

Vous pouvez également purger uniquement les disques amovibles avec :

sync -r

Cet utilitaire fonctionne sur toutes les versions de Windows à partir de Vista/Server 2008.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X