Comment augmenter le cache disque de Windows 7


18

Sous Windows 7 (64 bits), je lis à travers 9000 fichiers de taille moyenne. Au total, il y a plus de 200 Mo de données. En utilisant Java (JDK 1.6.21) j'itère sur les fichiers. Les premiers 1400 environ vont à pleine vitesse, mais la vitesse tombe à 4 ms par fichier. Il s'avère que le coût principal est encouru simplement en ouvrant les fichiers.

J'ouvre les fichiers en utilisant new FileInputStream(et bien sûr en les fermant à temps pour éviter les fuites de fichiers). Après quelques recherches, je constate que le cache disque de Windows n'utilise que 100 Mo ou plus de RAM bien que j'ai 8 Gio disponibles. J'ai essayé d'augmenter la taille du cache à l'aide de l' outil CacheSet mais toutes les valeurs que je fournis sont considérées comme hors plage .

J'ai également essayé d'activer la LargeSystemCacheclé de registre mais (après le redémarrage), l' CacheSetoutil indique toujours que j'utilise 100 Mo de cache (et n'augmente pas pendant le test). Quelqu'un at-il des suggestions pour "encourager" Windows 7 à mettre en cache mes fichiers 9000?


3
D'où tenez-vous l'information que seuls 100 Mo sont utilisés pour le cache disque? D'après ce que je sais, Windows utilise par défaut toute la mémoire libre pour la mise en cache du disque. Une valeur de seulement 100 Mo me semble être une valeur minimale.
Robert

1
Une partie du problème pourrait être Java et c'est JVM. Il existe des tonnes d'options pour modifier la JVM - publib.boulder.ibm.com/infocenter/javasdk/v6r0/… . Je pense que votre meilleur pari est de simplement l'écrire en C ++ ou FreeBASIC (les deux qui se compilent en code natif et ne sont limités que par ce que le système d'exploitation permet).
Natalie Adams

Réponses:


4

Superfetch ne met pas en cache l'intégralité d'un fichier volumineux, uniquement les parties accessibles. L'accès à ce fichier nécessite donc une lecture du disque. Un cache disque à 210 Mo comme le mien peut tout mettre en cache de tous ces petits fichiers dans Windows. Et la performance est perceptible. Je doute cependant que cela aurait un impact sur des systèmes plus rapides.


2
Qu'est-ce que la super-extraction et comment est-elle liée à cette question?
jpaugh

4

J'ai essayé d'augmenter la taille du cache à l'aide de l'outil CacheSet mais toutes les valeurs que je fournis sont considérées comme hors plage.

  1. Assurez-vous que vous exécutez explicitement CacheSet "en tant qu'administrateur". CacheSet dira que les valeurs sont hors de portée quand tout va mal.
  2. Assurez-vous que la taille du cache est divisible par 4 Ko

De plus, j'ai remarqué que CacheSet a quelques problèmes avec les grandes valeurs, probablement parce que c'est une application 32 bits de 2006. Je suis allé et j'ai écrit un programme 64 bits autour de la même API, ce qui permet de définir des tailles de cache supérieures à 4 Go: http: / /blog.thecybershadow.net/2012/12/14/64-bit-cacheset/

Remarque: l'article CacheSet mentionne CacheMan, mais la dernière version semble utiliser la même API que CacheSet - elle est juste emballée dans une interface utilisateur avec un tas de préréglages et d'autres fonctionnalités.


0

Je sais que cela est ancien, mais pour d'autres qui rencontrent ce problème: vous devez exécuter CacheSet avec des privilèges administratifs manuellement. Si vous ne le faites pas, vous obtiendrez l'erreur OutOfRange; il ne demandera PAS automatiquement des privilèges.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.