Comment contrôler l'utilisation de la RAM / swap

18

Existe-t-il un moyen (application) de contrôler la politique d'utilisation de RAM / swap au niveau de l'application.

J'ai des applications que j'utilise tout le temps et je veux qu'elles restent en RAM tout le temps et il y a aussi des applications que j'utilise assez rarement et elles pourraient être lancées pour permuter à la demande. Je sais que les fenêtres configurées par défaut devraient me donner les meilleures performances mais je veux vérifier si je peux en obtenir plus :).

J'utilise Windows 7.

Darqer
la source
2
+1. Je suis intéressé par une méthode qui fonctionne pour XP.
Xavierjazz

Réponses:

9

Oui, il y a: demander au programme d'appeler la fonction VirtualLock :

Les pages qu'un processus a verrouillées restent dans la mémoire physique jusqu'à ce que le processus les déverrouille ou se termine. Ces pages sont garanties de ne pas être écrites dans le fichier d'échange pendant qu'elles sont verrouillées.

Je pense que la fonction SetProcessWorkingSetSize pourrait également être utile.


Pour ceux qui pensent que je suis un hérétique pour avoir même suggéré que cela pourrait être utile:

Notez qu'il peut y avoir des raisons valables de verrouiller des pages en mémoire. Une raison valable pourrait être que l'utilisateur exécute un graveur de CD, et que le graveur de CD affiche constamment des pages et provoque ainsi une sous-exécution du tampon, créant un sous-verre. Dans cette situation, il serait valide de verrouiller les tampons de mémoire afin qu'ils ne soient pas paginés, même si cela signifie que le reste de l'ordinateur ralentit pour une analyse, car c'est encore mieux que de donner à l'utilisateur un sous-verre. Il peut également y avoir d'autres raisons valables - mon point est que, bien qu'il ne soit généralement pas recommandé de verrouiller les pages en mémoire, des situations valides existent toujours, et je ne pense pas que tuer l'idée aiderait l'OP ici.


Mise à jour: Jetez un oeil à Process Hacker l » Reduce Working Setoption de menu.

Mehrdad
la source
Peut-être que citer ce morceau de l'article le mettrait en contexte: «Le verrouillage des pages en mémoire peut dégrader les performances du système en réduisant la RAM disponible et en forçant le système à échanger d'autres pages critiques vers le fichier d'échange . Chaque version de Windows a une limite sur le nombre maximal de pages qu'un processus peut verrouiller. Cette limite est intentionnellement petite pour éviter une dégradation sévère des performances. " (C'est moi qui souligne)
1
@Randolph: Je ne l'ai jamais recommandé , je viens de mentionner que, contrairement à ce que la plupart des gens semblent penser, c'est possible . Personnellement, je déteste dire au PO "Tuez votre idée" - je pense que le PO a compris qu'il ne devrait pas faire cela, mais s'il le veut toujours, je pense qu'il a le droit de savoir comment. (Il y a une raison pour laquelle ils ont créé ces fonctions, et je ne suis pas la personne pour juger si le PO devrait les utiliser ou non.)
Mehrdad
Il y a beaucoup de code dans Windows qui a été laissé pour la compatibilité descendante. S'il y a une raison de l'avoir, ce serait celle-là. On pourrait le comparer à la fonctionnalité Shrink de SQL Server, qui ne devrait en aucun cas être utilisée, mais a été laissée pour des raisons de compatibilité. Windows 7 est un système d'exploitation moderne avec une bonne gestion de la mémoire, et le fichier d'échange ne doit pas être supprimé, et les programmes ne doivent pas essayer de rester en mémoire en dehors des "règles". C'est une très mauvaise pratique et peut entraîner un système instable et / ou inutilisable.
1
@Randolph: (Je vois que vous avez abandonné l'analogie.:]) Faites un petit programme (ne devrait pas dépasser 10 lignes) pour ouvrir l'autre processus et appeler SetProcessWorkingSetSize. C'est une façon. Si bien sûr, si vous ne savez pas ce que cela signifie parce que vous n'êtes pas développeur, vous ne pouvez évidemment pas faire grand-chose. Mais c'est toujours possible, et dire que c'est impossible est toujours incorrect, cela nécessite juste plus de connaissances que l'OP pourrait en avoir.
Mehrdad
1
@Randolph, vous pouvez télécharger diverses applications gratuites qui obligent les applications en cours d'exécution à toutes aller au fichier d'échange (en appelant SetProcessWorkingSetSize dans chaque processus).
Chris O
5

La seule façon que j'ai trouvée est de désactiver le fichier d'échange. Cependant, ce n'est pas une solution parfaite: vous obtiendrez des messages d'erreur si vous vous rapprochez ou dépassez votre limite de RAM, et il peut ne pas enregistrer correctement les vidages sur incident, alors réactivez-le si vous avez besoin de dépanner. En dehors de cela, j'utilise Win7 sans fichier d'échange depuis des mois sans accroc.

Mon expérience: j'ai eu ce problème avec un logiciel de piano (utilisation de 1 Go de RAM) qui serait jeté en swap après ne pas avoir été utilisé pendant un certain temps. Jouer une touche de piano quelques heures plus tard entraînerait un désordre glitch puisque le swap ne serait pas rechargé assez rapidement pour que le son soit joué. (Je mettrais alors mon bras entier sur chaque touche pour forcer un rechargement!)

Si la RAM est un problème, je vous suggère d'en acheter plus (par exemple, 8 à 12 Go avec Windows 7 x64). Pour les conscients de la RAM, avoir beaucoup de RAM est une aubaine.

Mais avant, vous devriez envisager de vous procurer un disque SSD et d'y mettre votre swap. Il accélérera considérablement la récupération des swaps et fournira de nombreux autres avantages au système. La RAM n'offre aucun avantage lorsqu'elle n'est pas utilisée.

mtone
la source
3
Faire. Ne pas. Supprimer. Le. Page. Fichier. Déjà.
7
J'ai. Été. En utilisant. Win7. Avec. Non. Pagefile. Pour. Mois. Sans pour autant. A. Hitch.
mtone
1
J'utilise également Win7 sans fichier d'échange tout le temps, mais il me semble que cela pourrait ne pas être suffisant pour mon travail actuel :(
Darqer
3
@Randolph: MS sait de quoi ils parlent, car ils savent que leurs clients ne sont pas toujours des professionnels de l'informatique. Mais pour les personnes qui savent exactement ce que fait et ne fait pas le fichier d'échange, il n'y a aucune raison de les forcer à une pratique dont elles n'ont pas besoin.
Mehrdad
2
@Randolph: Si vous conduisez au-dessus de la limite de vitesse sans ceinture de sécurité, vous pouvez mourir et également tuer d'autres personnes, sans parler de l'augmentation des coûts d'assurance pour les autres. Le pire qui puisse arriver si votre ordinateur sort sa mémoire est que vous perdrez juste un peu de temps, selon la situation. Ne voyez-vous pas quelque chose de mal (lire: beaucoup) avec l'analogie ici? Avez-vous également utilisé Linux / Unix? Avez-vous déjà remarqué comment ils vous donnent plus que suffisamment de corde pour vous accrocher, contrairement à Windows? Les gens les utilisent toujours - est-ce comme conduire sous l'influence ou quelque chose?
Mehrdad
2

L'utilisation du fichier d'échange dépend de nombreux facteurs. Si vous utilisez beaucoup de programmes et que vous n'avez pas assez de RAM pour tous en même temps, alors certaines parties (ou toutes) peuvent être échangées vers le fichier d'échange.

Si vous avez 4 Go de RAM et disons qu'environ 3 Go sont disponibles en raison du fait que des cartes vidéo et d'autres utilisateurs de ressources bloquent des parties des 4 Go, et que vous n'utilisez que quelques programmes qui ne prennent pas beaucoup de mémoire, théoriquement vous ne devrait jamais avoir besoin d'un fichier d'échange. Cependant, Windows Vista et 7 sont notoirement agressifs dans leur échange de programmes sur disque.

J'avais l'habitude d'avoir un paramètre qui réduisait la permutabilité de Windows 7 (la permutabilité est un terme Linux mais il s'applique également à Windows, et puisqu'il existe un paramètre de registre pour apprivoiser l'agressivité de l'échange de Windows, il semble que Microsoft accepte à contrecœur, bien que dans un puits manière cachée), mais je n'arrive plus à le trouver. C'est comme ça que je me suis retrouvé ici. La meilleure alternative à ce paramètre que j'ai trouvé est de vous assurer que vous utilisez un fichier d'échange de taille fixe (je choisis 4096-4096 sur les systèmes d'exploitation 32 bits et 12 Go sur les systèmes 64 bits car j'ai 6 Go de RAM système) sur une partition dédiée. Ayant un disque de rechange de 7200 tr / min de 200 Go, je place toutes mes partitions de swap (Windows XP, 7, 7 64 bits et divers Linux) sur ce disque. Cela semble fonctionner pour moi, mais YMMV.

Paul
la source
1

À noter: lorsque Windows détecte que vous utilisez fréquemment certaines applications, le superfetch met ces applications en mémoire afin qu'elles se chargent plus rapidement. Je pense que faire confiance à Windows pour faire son travail ici.

CreeDorofl
la source