Récupération de mémoire auprès des applications de style Metro

Conception de Windows 8

Vision en coulisses de l'équipe d'ingénierie Windows

Récupération de mémoire auprès des applications de style Metro

  • Comments 0

Par rapport à leurs aînés, les systèmes d'exploitation modernes envisagent les ressources du système sous un angle différent. Quel que soit le format de l'appareil, il est indispensable que le système d'exploitation sache gérer l'utilisation des ressources plus efficacement que par le passé. À l'heure actuelle, il reste malheureusement trop facile pour un processus de consommer la totalité des ressources disponibles (mémoire, processeur, entrées-sorties disque), même lorsque cela n'engendre pas pour autant un gain de performances pour l'utilisateur final. Le rôle premier d'un système d'exploitation est d'équilibrer les ressources pour vous permettre de réaliser toutes les tâches que vous souhaitez sur votre PC. La plupart des contrôles manuels mis en œuvre dans les implémentations des systèmes d'exploitation sont conçus pour résoudre les problèmes liés aux logiciels « errants », c'est-à-dire ceux qui se trouvent dans un état où la consommation des ressources est illimitée. Même s'il ne s'agit généralement pas de logiciels malveillants, la possibilité de développer des logiciels respectueux des ressources était jusqu'à présent limitée par la complexité des API d'allocation des ressources. Le jeu d'API moderne de WinRT a été conçu pour permettre aux programmeurs de développer plus facilement des logiciels permettant d'accomplir toutes les actions souhaitées, sans monopoliser le PC. Ce principe de fonctionnement améliore les performances de tous les logiciels, quel que soit le format de l'appareil utilisé.

Dans ce billet, Bill Karagounis, chef de projet au sein de l'équipe Fondamentaux, détaille les efforts investis en coulisse pour permettre la récupération de la mémoire même lorsque les applications sont suspendues. Il explique également comment ce processus est mis en œuvre sans même que les développeurs n'aient à s'en préoccuper.
--Steven


À travers de précédents billets, nous avons étudié ensemble le modèle des applications de style Metro utilisant Windows Runtime. L'une des caractéristiques importantes de ce modèle d'applications est que les applications sont suspendues lorsqu'elles ne sont plus visibles par l'utilisateur. La suspension des applications de style Metro en arrière-plan est un avantage, car cela permet de conserver des ressources processeur pour les autres applications. En outre, les applications d'arrière-plan ne génèrent pas d'activités susceptibles de consommer des ressources, ce qui améliore l'autonomie et la réactivité. Ce principe est expliqué plus en détail dans le billet de Sharif Farag et Ben Srour intitulé Optimisation de l'efficacité énergétique des applications.

Qu'en est-il de la mémoire utilisée par ces applications lorsqu'elles sont suspendues ? Nous avons déjà expliqué que pour des raisons pratiques, le système d'exploitation gère la mémoire et que les autres processus ne manquent pas de mémoire, car certains processus sont suspendus. Ce principe est au cœur des phases de conception. Nous savons néanmoins que certains d'entre vous souhaitent en savoir plus sur le fonctionnement.

À partir de Windows 8 Consumer Preview, chaque fois que Windows détecte un manque de mémoire sur le système, il redistribue la quasi totalité de la mémoire normalement occupée par les applications de style Metro suspendues. Windows 8 peut récupérer cette mémoire sans devoir arrêter une application.


Téléchargez cette vidéo pour la regarder sur votre lecteur habituel :
MP4 haute qualité | MP4 faible qualité

Mémoire, réactivité et applications de style Metro

Pour tous les types d'applications (application de style Metro ou application de Bureau), Windows essaie de réguler les allocations de mémoire physique émanant de l'application, quelles que soient les requêtes de mémoire effectuées. Windows a toujours fonctionné de cette manière, de façon à conserver de la mémoire disponible pour les besoins en mémoire des futures applications. Windows s'efforce d'allouer de la mémoire physique à une application uniquement lorsque l'application essaie d'accéder à cette mémoire, même si l'application l'a précédemment allouée. Windows décharge également de la mémoire virtuelle ou redistribue une partie de la mémoire d'une application si les pages de mémoire n'ont fait l'objet d'aucune opération depuis un long moment.

Il faut bien comprendre que le but n'est pas de refuser de la mémoire aux processus sollicitant de la mémoire, mais plutôt de retarder jusqu'au dernier moment l'allocation de mémoire physique (c'est-à-dire jusqu'à ce que l'utilisateur effectue une action dans l'application) : comme avec bon nombre de ressources, les logiciels ont tendance à sous-estimer leurs besoins. Le système d'exploitation centralise l'ensemble des demandes de mémoire et dispose des informations nécessaires pour conclure qu'en répondant entièrement à toutes les demandes de mémoire, tous les processus viendraient à manquer de mémoire. Non seulement, cela empêcherait les tâches en cours de se terminer, mais en outre, cela bloquerait totalement le système. Ce phénomène se produit même lorsque la mémoire est virtuelle : en lieu et place d'un manque de mémoire vive, votre PC procéderait en continu au chargement et au déchargement de pages de mémoire sur le disque.

La mémoire physique allouée à un processus à un instant donné est la « plage de travail » du processus. Une plage de travail privée représente la mémoire physique propre à un processus. Les processus réalisent également des opérations sur d'autres pages de mémoire physique qui sont quant à elles partagées et auxquelles plusieurs processus peuvent faire référence. Si vous examinez la vue Processus du Gestionnaire des tâches, vous constaterez que la mémoire d'un processus donné correspond en fait à sa plage de travail privée actuelle. REMARQUE : Pour simplifier, j'utilise dans ce blog l'expression « plage de travail » pour « plage de travail privée ».

Lorsque le système commence à manquer de mémoire disponible, il recherche dans tous les processus des pages de mémoire physique pouvant être redistribuées pour répondre à d'autres besoins du système, y compris en déchargeant de la mémoire virtuelle si nécessaire. Dans le cas des applications de Bureau, Windows essaie de conserver les pages de mémoire les plus importantes (c'est-à-dire celles qui font l'objet d'accès fréquents) dans la plage de travail de l'application. En effet, les applications de Bureau sont conçues pour pouvoir exécuter du code à tout moment, même lorsqu'elles sont en arrière-plan. Il s'agit néanmoins d'un bon compromis : si trop de pages de mémoire devaient être retirées à une application de Bureau, elle risquerait d'être moins réactive, en raison des opérations supplémentaires d'entrée-sortie disque (car en arrière-plan, l'application essaie d'utiliser la mémoire paginée sur le disque).

Pour mieux comprendre comment Windows gère la mémoire, consultez l'intervention de Mark Russinovich intitulée « Mysteries of Windows Memory Management Revealed » : partie 1 et partie 2.

Les applications de style Metro diffèrent des applications de Bureau, dans le sens où elles sont généralement suspendues, qu'elles soient ou non au premier plan. Lorsqu'elles sont suspendues, elles n'effectuent aucune opération sur leur mémoire.

Pour illustrer ce principe, j'ai mis en évidence dans la capture d'écran ci-dessous quelques applications de style Metro suspendues et la mémoire occupée par leurs plages de travail.

L'onglet Processus du Gestionnaire de tâches montre que 11 applications sont suspendues et qu'elles utilisent chacune entre 63,3 et 3,8 Mo de mémoire

Applications suspendues utilisant de la mémoire

REMARQUE : Dans la version Consumer Preview, l'état Suspendu ne s'affiche pas par défaut
dans la vue Processus du Gestionnaire des tâches : vous devez activer son affichage
par le biais d'une option figurant dans le Menu Affichage.

Si le système ne manque pas de mémoire, il est préférable et plus efficace de laisser de la mémoire dans les plages de travail des applications suspendues. En revanche, en cas de manque de mémoire, le fait que ces applications de style Metro soient suspendues permet de récupérer la quasi-totalité de la mémoire de ces plages de travail pour l'allouer à d'autres applications, sans pour autant arrêter les applications.

Récupération de mémoire auprès des applications de style Metro suspendues

Dans Windows 8 Consumer Preview, nous pouvons écrire efficacement sur le disque l'intégralité de la plage de travail (privée) d'une application de style Metro suspendue, afin de profiter de mémoire supplémentaire lorsque le système constate que la mémoire vient à manquer.

Ce processus est similaire à ce qui se produit lorsqu'une application entre en hibernation, puis qu'elle reprend lorsque l'utilisateur l'utilise à nouveau. Nous exploitons ainsi le mécanisme de suspension/reprise des applications de style Metro pour vider ou remplir à nouveau la plage de travail d'une application.

La séquence des événements est décrite ci-dessous :

    1. Le gestionnaire de durée de vie des processus (Process Lifetime Manager, PLM) détecte le manque de mémoire au niveau du système et demande au gestionnaire de mémoire (Memory Manager, MM) de vider la plage de travail d'un processus spécifique accueillant une application de style Metro suspendue.

Schéma de principe : Mémoire 1,6/2,0 Go (80 %), flèche vers le gestionnaire de durée de vie des processus, flèche vers le gestionnaire de mémoire, plus trois flèches supplémentaires entre le gestionnaire de durée de vie des processus et trois applications de style Metro suspendues

    1. Le gestionnaire de mémoire décharge les pages de mémoire de la plage de travail de l'application et les place dans la liste des pages modifiées du système d'exploitation (il s'agit d'une liste de mémoire dont le contenu est écrit sur le disque avant d'être réutilisé).

Avant : déplacement des pages de mémoire de l'application suspendue vers la liste des pages modifiées ; plage de travail de 40,3 Mo. Après le déplacement, la plage de travail n'occupe que 0,7 Mo et la liste des pages modifiées contient de nouveaux éléments.

    1. Les pages de la plage de travail de la liste des pages modifiées sont écrites de façon asynchrone, en fonction des stratégies habituelles du gestionnaire de mémoire (écriture opportuniste en arrière-plan ; écritures déclenchées en cas de manque de mémoire).

Une flèche relie la liste des pages modifiées au disque pour représenter l'écriture aysnchrone des pages sur le disque

    1. Même une fois que les plages de travail des applications suspendues ont été écrites sur le disque, les pages de mémoire supprimées d'un processus restent intactes au sein de la liste d'attente du système d'exploitation. Cette liste est un cache de pages de mémoire utiles qui peuvent être redistribuées auprès d'autres applications si cela s'avère nécessaire. Si le processus d'origine réclame immédiatement ces pages, elles sont redéplacées très rapidement.

Pages affichées dans la liste des pages modifiées et dans la liste d'attente

Si un utilisateur réactive l'application alors que les pages de sa plage de travail sont toujours en mémoire physique (dans la liste des pages modifiées ou dans la liste d'attente), le principe est très simple : les pages sont rajoutées immédiatement au processus de l'application. Si elles ne sont plus disponibles, Windows les lit de façon optimisée dans la plage de travail de l'application écrite sur le disque.

La « récupération de mémoire » en pratique

Pour comprendre comment cela fonctionne, prenons un exemple réel de code en cours d'exécution.

L'état initial est représenté par la capture d'écran ci-dessus. Plusieurs applications de style Metro étaient en cours d'exécution sur un PC équipé de 2 Go de mémoire vive. Les applications de style Metro étaient en arrière-plan et Windows les avait donc suspendues. J'ai ensuite commencé à ouvrir des applications supplémentaires pour augmenter l'utilisation de la mémoire sur le système et déclencher la nouvelle fonctionnalité.

Dans la capture d'écran suivante, vous remarquerez que j'ai ouvert des applications pour accroître la demande de mémoire et déclencher le comportement décrit plus haut. Comme vous pouvez le constater, Windows a vidé les plages de travail des applications de style Metro suspendues (elles sont mises en évidence).

Onglet Processus du Gestionnaire des tâches ; chaque application suspendue utilise moins de 1 Mo de mémoire.

Les plages de travail des applications de style Metro ont été vidées

Comparons les plages de travail des applications de style Metro avant et après la récupération de mémoire (certaines statistiques « après » ne sont pas visibles, car le Gestionnaire des tâches n'avait plus suffisamment de place pour afficher les 27 applications lancées) :

Application de style Metro

Plage de travail, avant la récupération de mémoire (Mo)

Plage de travail, après la récupération de mémoire (Mo)

Flixster

23,5

0,5

Flow

15,2

0,6

Kindle

23,1

0,5

LiveComm

3,8

0,3

Lyrics

65,3

0,9

Maps

28,1

0,8

Bureau à distance

21

0,5

SkyDrive

23,1

0,5

Store

26,9

0,6

Weather

42

0,8

Lecteur Windows

9,2

0,4

Dans cet exemple, nous avons donc libéré plus de 250 Mo de mémoire vive physique, que d'autres applications peuvent utiliser, sans fermer les applications suspendues.

Réactivité lors de la lecture de la plage de travail

Pour tester cette nouvelle fonctionnalité, nous pouvons examiner la réactivité d'une application suspendue lorsque le contenu de sa plage de travail a été vidé et que vous décidez de réafficher cette application.

Dans le cadre de ce test, j'ai utilisé l'application « Lyrics » comme indicateur de réactivité. L'application Lyrics peut afficher les paroles d'une chanson et lire des clips musicaux. Lorsque l'application Lyrics est mise en arrière-plan, elle est suspendue, ce qui a pour effet d'interrompre la lecture.

Après avoir augmenté la mémoire utilisée jusqu'à ce que les plages de travail soient vidées, j'ai ouvert d'autres applications et utilisé le système pendant quelques instants pour faire en sorte que le fait de revenir à l'application entraîne la lecture de la plage de travail à partir du disque. J'ai ensuite déclenché le retour à l'application Lyrics (voir ci-dessous).

Onglet Processus du Gestionnaire des tâches ; l'application Lyrics consomme maintenant 97,4 Mo de mémoire

La plage de travail de l'application Lyrics est à nouveau remplie

Le principal objectif de cette manipulation était de savoir combien de temps s'écoulerait entre le déclenchement du retour à l'application et la reprise de la lecture de la musique. Sur un ordinateur d'entrée de gamme avec une charge de mémoire élevée, il est difficile de percevoir une différence de réactivité entre les cas où la plage de l'application est lue à partir du disque et les cas où elle est toujours en mémoire. Néanmoins, les conditions varient : plus la plage de travail est grande, plus sa lecture à partir du disque prend du temps. Nous continuons également à optimiser cette fonctionnalité et à réduire la quantité de données à écrire sur le disque pour les applications de style Metro.

Vous pouvez essayer cette fonctionnalité dans la version Consumer Preview. Pour cela, ouvrez plusieurs applications de style Metro et plusieurs applications de Bureau pour que le système commence à manquer de mémoire, puis revenez à une application de style Metro suspendue dont la plage de travail a été vidée.

REMARQUE : Windows ferme cependant les applications de style Metro si le manque de mémoire devient critique. Néanmoins, cette fonctionnalité permet à un système d'exécuter plus d'applications avant d'atteindre ce niveau critique.

Lecture optimale d'une plage de travail

Pour que vous puissiez accéder de façon réactive à une application suspendue dont la plage de travail est écrite sur le disque, nous avons optimisé la façon dont cette plage de travail est écrite, de sorte que sa lecture soit la plus efficace possible.

Lorsque nous écrivons la plage de travail d'une application de style Metro suspendue, les pages de la plage de travail sont écrites sur le disque de façon séquentielle. Les données peuvent ainsi être relues dans un processus en utilisant peu de grandes opérations séquentielles de lecture sur le disque. La capture d'écran ci-dessous est issue de notre outil Analyseur de performance Windows (WPA), fourni dans le Kit de déploiement et d'évaluation de Windows (ADK). Elle offre une représentation visuelle des opérations de lecture sur le disque au cours de ce processus. J'ai mis en évidence les entrées-sorties de lecture de la plage de travail. Vous pouvez voir clairement le flux séquentiel, à mesure que la plage de travail d'une application est à nouveau remplie.

Analyseur de performance Windows

Opérations d'entrée-sortie de lecture séquentielle visant à remplir à nouveau la plage de travail d'une application (outil Analyseur de performance Windows)

La lecture des données séquentielles à partir de n'importe quel dispositif de stockage ou presque s'effectue très rapidement. La plupart des disques mécaniques peuvent atteindre une vitesse de 50 à 100 Mo par seconde. Avec un dispositif à mémoire flash (SSD, par exemple), la vitesse de lecture peut atteindre 200 Mo par seconde.

Selon nous, les opérations d'entrée-sortie permettant de remettre en mémoire la plage de travail d'une application suspendue devraient prendre moins d'une seconde avec la plupart des applications.

Conclusion

Par définition, tous les PC disposent d'une mémoire physique limitée, quel que soit le format de l'appareil. Lorsque vous ajoutez de la mémoire physique, les problèmes liés à la gestion de la mémoire restent entiers, dès lors que vous exécutez de plus en plus de programmes demandant de la mémoire.

Certains types de logiciels modernes continueront à évoluer et utiliseront de plus en plus de mémoire (retouche de photos RAW grand format, bases de données en mémoire, très grandes feuilles de calcul, etc.). Qu'il s'agisse d'implémentations WinRT ou d'implémentations de Bureau, le système d'exploitation doit savoir évoluer pour gérer ces demandes de mémoire de plus en plus lourdes. WinRT offre aux programmeurs la possibilité d'utiliser une API permettant d'accéder à l'intégralité de la mémoire dont ils ont besoin, tout en laissant la priorité à l'utilisateur en termes de réactivité et d'exécution des tâches. J'espère que vous aurez l'occasion de tester cette fonctionnalité dans Windows 8 Consumer Preview.

-- Bill Karagounis

  • Loading...
Leave a Comment
  • Please add 1 and 7 and type the answer here:
  • Post