Windows 10, le processus « System » consomme des quantités massives de RAM

Depuis que j’ai mis à jour vers Windows 10, mon système consomme de la RAM de manière excessive.

J’ai lu un peu et déterminé qu’il s’agit probablement d’un pilote qui fuit de la mémoire. J’ai donc obtenu le Windows Driver Kit et suivi l’utilisation de la mémoire avec poolmon :

Cependant, je ne sais pas vraiment comment procéder à partir de là. L’élément étiqueté « smNp » est-il le coupable dans ce problème ? Comment passer de là à l’identification réelle du pilote ?

J’ai essayé des choses comme C:\Windows\System32\drivers>findstr /s smnp *.* mais cela n’a retourné aucun résultat. J’ai aussi regardé le fichier pooltag.txt et voici la description que j’ai trouvée :

Donc oui, toute aide serait appréciée.
Merci d’avance.


Source : Super User.)

J’ai examiné les traces xperf de plusieurs utilisateurs et ici la fonction ntoskrnl.exe!SmKmStoreHelperWorker du noyau commence à allouer de la mémoire.

(Cliquez sur l’image pour agrandir)

J’ai découvert cela sur sysinternals.

J’ai demandé à Microsoft et la réponse est que c’est voulu. Cela est lié à la compression de la mémoire système.

Dans l’annonce du Build 10525 de Windows 10, Microsoft l’a un peu expliqué :

Dans Windows 10, nous avons ajouté un nouveau concept dans le gestionnaire de mémoire
appelé un magasin de compression, qui est une collection en mémoire de
pages compressées. Cela signifie que lorsque le gestionnaire de mémoire détecte une
pression mémoire, il compressera les pages inutilisées au lieu de les écrire sur
le disque.
Cela réduit la quantité de mémoire utilisée par processus, permettant
à Windows 10 de maintenir plus d’applications en mémoire physique simultanément.
Cela contribue également à offrir une meilleure réactivité dans Windows 10. Le
magasin de compression réside dans l’ensemble de travail du processus System. Puisque le
processus System détient le magasin en mémoire, son ensemble de travail grandit
exactement quand de la mémoire est libérée pour d’autres processus. Ceci
est visible dans le Gestionnaire des tâches et la raison pour laquelle le processus System semble
consommer plus de mémoire que les versions précédentes.

Donc, au lieu d’écrire les données mémoire dans le fichier d’échange, il les compresse. Et cette mémoire compressée est affichée dans le processus System.

Microsoft a également publié plus de détails dans le hub Insider. Winbeta a créé un article qui inclut plus de détails.

Apparemment, la raison de cela est liée au choix de Microsoft de
suspendre les applications UWP lorsqu’elles n’étaient pas au premier plan, de manière très
similaire à la gestion de certains systèmes d’exploitation de smartphones. Les utilisateurs de Windows 8 comprenaient
(peut-être pas) que si les applications n’étaient pas à l’écran, elles ne fonctionneraient pas jusqu’à ce que
l’utilisateur revienne dessus. L’approche « tout ou rien » est mise à jour
avec Windows 10 introduisant une couche entre le fichier d’échange et
l’activité de pagination normale. Maintenant, face à des problèmes de pression mémoire,
le gestionnaire de mémoire déterminera quelles pages devraient être déplacées vers la liste modifiée dans
un processus appelé écrêtage.
La liste modifiée est une liste secondaire de
fichiers d’échange sauvegardant une liste de fichiers d’échange en attente. Une liste de sauvegarde est
capturée au cas où la mémoire serait récupérée de la liste d’attente par un autre
processus, et le processus original viendrait chercher sa page. Au lieu
du tout ou rien, le gestionnaire de mémoire de Windows 10 compressera les pages inutilisées plutôt
que de les écrire sur le disque. Avec moins d’écritures, le résultat devrait être
moins d’opérations disque
— grâce à la compression — et désormais plus de données
peuvent être stockées en mémoire.

Selon l’équipe Windows, « En pratique, la mémoire compressée occupe
environ 40 % de la taille non compressée, et par conséquent, pour un appareil typique
exécutant une charge de travail typique, Windows 10 écrit des pages sur le disque
seulement 50 % aussi souvent que les versions précédentes du système d’exploitation.
» Si tout se passe
comme prévu, les utilisateurs Windows pourraient bénéficier de temps d’attente réduits
pour tous les appareils ainsi que de durées de vie prolongées pour les systèmes équipés
de disques durs flash
.

La décompression est également quelque chose que Windows 10 est conçu pour bien faire.
Windows 10 utilise la combinaison de la parallélisation et des
lectures séquentielles pour produire des pages en mémoire une fois appelées. La nouvelle
décompression devrait offrir une expérience plus rapide car Windows 10
décompresse simultanément les données et les lit en parallèle en utilisant
plusieurs processeurs. Les anciennes versions de Windows pouvaient sembler lentes
en raison des taux de transfert entre le disque.

Microsoft a également publié une vidéo sur Channel9 qui explique cette fonctionnalité.

Compression de la mémoire dans Windows 10 RTM

https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM

Dans cette vidéo, Mehmet Iyigun a passé du temps à expliquer pourquoi le processus
System dans Windows 10 utilise un peu plus de mémoire et pourquoi c’est une bonne
chose. Un processus utilisant plus de mémoire semble être une mauvaise chose — c’est
le cas jusqu’à ce que l’on comprenne mieux la gestion de la mémoire, la pagination et les défauts de page
matériels/logiciels. Il s’avère que le système d’exploitation effectue des optimisations
intelligentes qui permettent à vos processus de réduire une partie de la mémoire sans
nécessairement la paginer sur le disque. Non seulement la mémoire est préservée
en RAM, mais elle est aussi compressée — rendant les défauts de page matériels plus
rares. Les résultats devraient offrir une expérience plus réactive.

Dans les derniers builds TH2, Microsoft a mis à jour la description dans le Gestionnaire des tâches et affiche désormais aussi que le processus SYSTEM héberge la mémoire compressée :

pour éviter les confusions sur l’utilisation « élevée ».

Dans la mise à jour anniversaire de Windows 10, publiée en août 2016, Microsoft a extrait la compression dans un pseudo-processus maintenant affiché appelé Memory Compression pour ne plus confondre les utilisateurs sur la raison de l’utilisation mémoire élevée de SYSTEM :

Mais il semble que le Gestionnaire des tâches n’affiche pas ce processus ; seuls ProcessExplorer/ProcessHacker sont capables de l’afficher. Le Gestionnaire des tâches affiche uniquement la quantité de mémoire compressée dans l’aperçu :

Si vous survolez le graphique de mémoire utilisée dans le Gestionnaire des tâches, vous voyez une info-bulle qui montre la quantité de données compressées.

Dans cette démonstration, 388 Mo sont compressés à 122 Mo, donc 267 Mo sont économisés grâce à la compression.