Freigeben von Speicher aus Apps im Metro-Stil

Die Entwicklung von Windows 8

Einblicke in die Arbeit des Windows-Entwicklerteams

Freigeben von Speicher aus Apps im Metro-Stil

  • Comments 0

Moderne Betriebssysteme nutzen Systemressourcen anders als ältere Systeme. Bei sämtlichen Formfaktoren ist es entscheidend, dass das Betriebssystem die Ressourcenverwendung effizienter verwaltet als in der Vergangenheit. Derzeit können einzelne Prozesse noch viel zu einfach verfügbare Systemressourcen (Speicher, CPU, Datenträger-E/A) nutzen, selbst wenn sich dadurch die Gesamtleistung für Benutzer nicht verbessert. Die wichtigste Aufgabe eines Betriebssystems ist es, Ressourcen so ausgeglichen bereitzustellen, dass Sie alle gewünschten Aufgaben am PC reibungslos erledigen können. Viele der manuellen Steuerungsmöglichkeiten der meisten Betriebssystemimplementierungen sind auf den Umgang mit fehlerhafter Software ausgelegt, d. h. Software, die unter Umständen Ressourcen uneingeschränkt ausschöpft. Selbst wenn es sich – wie in vielen Fällen – nicht um Schadsoftware handelt, waren bislang die Möglichkeiten, Software mit optimaler Ressourcennutzung zu entwickeln, aufgrund der Komplexität der APIs für die Ressourcenzuordnung begrenzt. Die moderne API von WinRT ist darauf ausgelegt, Programmierern die Möglichkeit zu bieten, einfacher effiziente Software zu erstellen, die die Leistung des PCs nicht beeinträchtigt. Dadurch werden PCs aller Formfaktoren und Software aus allen Bereichen verbessert.

In diesem Beitrag erläutert Bill Karagounis, Gruppenprogrammmanager unseres Fundamentals-Teams, die grundlegenden Arbeiten, die mit dem Ziel der Speicherfreigabe (auch für angehaltene Apps) durchgeführt wurden, und führt aus, wie dies ohne Beeinträchtigungen für Entwickler erreicht werden konnte.
– Steven


In vorherigen Blogbeiträgen wurde auf das Metro-Stil-Anwendungsmodell mit der Windows-Runtime eingegangen. Ein wichtiger Aspekt dieses App-Modells ist das Anhalten von Apps, wenn sie dem Benutzer nicht mehr angezeigt werden. Das Anhalten von Apps im Metro-Stil im Hintergrund ist nützlich, da auf diese Weise CPU-Leistung für andere Apps freigegeben und sichergestellt wird, dass die Apps im Hintergrund keine Ressourcen beanspruchenden Aktivitäten ausführen. Dies sorgt für eine längere Akkulaufzeit und verbessert die Reaktionsfähigkeit. Ausführliche Informationen diesbezüglich finden Sie im Blogbeitrag Verbessern der Energieeffizienz für Anwendungen von Sharif Farag und Ben Srour.

Was geschieht mit dem Speicher, den angehaltene Apps belegen? Wie bereits erwähnt, sorgt im Grunde das Betriebssystem dafür, dass trotz angehaltener Prozesse genügend Speicher für andere Prozesse zur Verfügung steht. Dies war eine entscheidende Überlegung beim Entwurf. Dennoch sind einige von Ihnen bestimmt daran interessiert, mehr über die Funktionsweise zu erfahren.

Als Ausgangspunkt dient hierfür die Windows 8 Consumer Preview. Im Fall einer vom Windows-System festgestellten Speicherauslastung wird nahezu der gesamte Speicher freigegeben, der andernfalls von angehaltenen Apps im Metro-Stil belegt würde. Unter Windows 8 kann dieser Speicher anderweitig genutzt werden, ohne dass Apps beendet werden müssen.


Laden Sie dieses Video herunter, und spielen Sie es in einem geeigneten Media-Player ab:
MP4 in hoher Qualität | MP4 in niedriger Qualität

Speicher, Reaktionsfähigkeit und Apps im Metro-Stil

Windows versucht für jede Art von App (Metro-Stil oder Desktop), die physische Speicherbelegung zu steuern. Von der App gestellte Speicheranforderungen werden nicht berücksichtigt. Dieses Verfahren diente unter Windows schon immer dazu, Speicher für die Anforderungen weiterer Apps bereit zu halten. Es wird sorgfältig darauf geachtet, einer App nur dann physischen Speicher zuzuteilen, wenn diese tatsächlich darauf zugreift, auch wenn der Speicher von der App im Voraus "reserviert" wurde. Wenn eine App über einen längeren Zeitraum nicht auf Speicherseiten zugreift, werden die Seiten zudem freigegeben oder Speicherbereiche der App einem anderen Zweck zugeführt.

Es ist wichtig, dass das Ziel nicht darin besteht, einem anfordernden Prozess Speicher zu verweigern, sondern die physische Speicherbelegung möglichst lange hinauszuzögern (bis der Benutzer tatsächlich auf die App zugreift), da wie bei vielen Ressourcen auch bei Software die Tendenz besteht, mehr Kapazität als erforderlich zu beanspruchen. Im Betriebssystem kommen sämtliche Anforderungen zusammen, wodurch ermittelt werden kann, dass bei einer vollständigen Erfüllung aller Anforderungen letztendlich jeder Prozess über zu wenig Ressourcen verfügen würde. Dies würde nicht nur dazu führen, dass Aufgaben nicht abgeschlossen werden können, sondern im Grunde auch einen Systemabsturz bewirken. Auch bei virtuellem Speicher besteht dieses Problem: Anstatt dass der Arbeitsspeicher ausgeht, würde der PC einfach Seiten auf dem Datenträger ein- und wieder auslagern.

Der physische Speicher, den ein Prozess zu einem bestimmten Zeitpunkt belegt, wird als die "Arbeitsseiten" des Prozesses bezeichnet. Private Arbeitsseiten stellen physischen Speicher dar, der eindeutig von einem Prozess belegt ist. Prozesse können auch an anderen physischen Speicherseiten beteiligt sein, die "freigegeben" sind. Auf diese Seiten können mehrere Prozesse verweisen. In der Ansicht "Prozesse" des Aufgaben-Managers stellt der angezeigte Speicher für einen bestimmten Prozess die derzeitigen privaten Arbeitsseiten dar. HINWEIS: Der Einfachheit halber bezeichne ich in diesem Beitrag die "privaten Arbeitsseiten" schlicht als "Arbeitsseiten".

Bei wenig verfügbarem Speicher sucht das Betriebssystem in allen Prozessen nach physischen Speicherseiten, die für andere Aufgaben im System freigegeben werden können – bei Bedarf können Speicherseiten sogar ausgelagert werden. Bei Desktop-Apps versucht Windows, die wichtigsten Speicherseiten (mit den meisten Zugriffen) in den Arbeitsseiten der App zu belassen. Der Grund hierfür ist, dass Desktop-Apps jederzeit Code ausführen können müssen, auch wenn sie sich im Hintergrund befinden. Es muss jedoch genau abgewogen werden: Wenn aus einer Desktop-App zu viele Speicherseiten entfernt werden, kann dies aufgrund zusätzlicher Datenträger-E/A die Reaktionsfähigkeit der App beeinträchtigen (da die App auf Speicher zugreift, der im Hintergrund auf einen Datenträger ausgelagert wurde).

Ausführliche Informationen zur Windows-Speicherverwaltung finden Sie in den "Mysteries of Windows Memory Management Revealed"-Interviews mit Mark Russinovich: Teil 1 und Teil 2.

Apps im Metro-Stil unterscheiden sich jedoch insofern von Desktop-Apps, dass sie in der Regel angehalten werden, wenn sie nicht im Vordergrund ausgeführt werden. Angehaltene Apps greifen auf KEINEN Speicher zu.

Zur Verdeutlichung sind in folgendem Screenshot einige angehaltene Apps im Metro-Stil mit belegtem Speicher in ihren Arbeitsseiten hervorgehoben.

Aufgaben-Manager, Registerkarte "Prozesse" mit 11 angehaltenen Apps, die jeweils zwischen 63,3 MB und 3,8 MB Speicher verwenden

Angehaltene Apps mit belegtem Speicher

HINWEIS: Im Consumer Preview-Build wird der Status "Angehalten" nicht standardmäßig
in der Ansicht "Prozesse" des Aufgaben-Managers angezeigt. Sie müssen die entsprechende
Option über das Menü "Ansicht" aktivieren.

Wenn im System keine Speicherauslastung vorliegt, ist es sinnvoll (und am effizientesten), den Speicher einfach in den Arbeitsseiten der angehaltenen Apps zu belassen. Wenn jedoch ein Speicherengpass vorhanden ist, stellen diese angehaltenen Apps im Metro-Stil eine Möglichkeit dar, fast den gesamten Speicher in diesen Arbeitsseiten für andere Apps freizugeben, ohne die Apps im Hintergrund zu beenden.

Freigeben von Speicher aus angehaltenen Apps im Metro-Stil

In der Windows 8 Consumer Preview können alle (privaten) Arbeitsseiten einer angehaltenen App im Metro-Stil effizient auf einen Datenträger geschrieben werden, um im Fall von Engpässen zusätzlichen Speicher zu erhalten.

Dieser Vorgang kann damit verglichen werden, eine bestimmte App in den Ruhezustand zu versetzen und anschließend weiter auszuführen, sobald der Benutzer die App wieder aufruft. Hierbei wird der Ruhezustand/Fortsetzen-Mechanismus von Apps im Metro-Stil genutzt, um die Arbeitsseiten einer App zu leeren bzw. neu aufzufüllen.

Im Folgenden wird die Abfolge der Ereignisse beschrieben:

    1. Der Process Lifetime Manager (PLM) erkennt eine Speicherauslastung und fordert die Speicherverwaltung (Memory Manager, MM) dazu auf, die Arbeitsseiten eines bestimmten Prozesses für eine angehaltene App im Metro-Stil zu leeren.

Flussdiagramm: Speicher 1,6/2,0 GB (80 %), Pfeil zum Process Lifetime Manager (PLM), Pfeil zur Speicherverwaltung (MM) sowie drei weitere Pfeile vom PLM zu 3 angehaltenen Apps im Metro-Stil

    1. Die Speicherseiten aus den Arbeitsseiten der App werden von der Speicherverwaltung in die geänderte Seitenliste des Betriebssystems verschoben (eine Speicherliste, deren Inhalt vor der Wiederverwendung auf einen Datenträger geschrieben wird).

Vorher: Die Speicherseiten der angehaltenen App werden in die geänderte Seitenliste verschoben, Größe der Arbeitsseiten: 40,3 MB. Nachher: Die Arbeitsseiten sind nur noch 0,7 MB groß, und die geänderte Seitenliste enthält neue Einträge.

    1. Die Seiten aus den Arbeitsseiten in der geänderten Seitenliste werden gemäß den üblichen Speicherverwaltungsrichtlinien asynchron ausgeschrieben (d. h. im Hintergrund je nach Gelegenheit, Schreibvorgänge werden durch Speicherauslastung ausgelöst).

Die geänderte Seitenliste wird mit Pfeil zum Datenträger dargestellt, und die Seiten werden asynchron auf den Datenträger geschrieben.

    1. Auch nach dem Schreiben der Arbeitsseiten der angehaltenen Apps auf den Datenträger bleiben die aus einem Prozess entfernten Speicherseiten unversehrt in der Standbyliste des Betriebssystems erhalten. Die nützlichen Speicherseiten in diesem Cache können bei Bedarf in anderen Apps wiederverwendet werden. Wenn die Seiten unmittelbar wieder vom ursprünglichen Prozess benötigt werden, erfolgt eine schnelle Rückverschiebung.

Die Seiten werden sowohl in der geänderten Seitenliste als auch der Standbyliste angezeigt.

Wenn der Benutzer die App erneut aufruft, während sich die Seiten aus den Arbeitsseiten noch im physischen Speicher (in der geänderten Seitenliste oder der Standbyliste) befinden, ist der Vorgang entsprechend einfach: Die Seiten werden unmittelbar wieder dem Prozess der App hinzugefügt. Ist dies nicht der Fall, werden die Arbeitsseiten der App von Windows mittels einer optimierten Methode vom Datenträger gelesen.

Freigeben von Speicher: Beispiel

Betrachten wir diesen Vorgang anhand eines echten Codebeispiels genauer.

Der Anfangszustand wird im obigen Screenshot dargestellt. Auf einem PC mit 2 GB Arbeitsspeicher führe ich mehrere Apps im Metro-Stil aus. Die Apps im Metro-Stil befinden sich im Hintergrund und wurden daher von Windows angehalten. Anschließend öffne ich weitere Apps, um die Speichernutzung des Systems zu erhöhen und die neue Funktion auszulösen.

Im folgenden Screenshot habe ich einige Apps geöffnet, um den Speicher stärker auszulasten und den oben beschriebenen Vorgang einzuleiten. Wie Sie sehen, wurden die Arbeitsseiten der angehaltenen Apps im Metro-Stil (hervorgehoben) von Windows geleert.

Registerkarte "Prozesse" des Aufgaben-Managers mit allen angehaltenen Apps, die jeweils weniger als 1 MB Speicher belegen.

Geleerte Arbeitsseiten von Apps im Metro-Stil

Im Folgenden werden die Arbeitsseiten der ursprünglichen Apps im Metro-Stil "Vorher" und "Nachher" verglichen (einige der "Nachher"-Statistiken werden nicht angezeigt, da im Aufgaben-Manager nicht genügend Platz für alle 27 gestarteten Apps vorhanden ist):

App im Metro-Stil

Arbeitsseiten "Vorher" (MB)

Arbeitsseiten "Nachher" (MB)

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

Remote Desktop

21,0

0,5

SkyDrive

23,1

0,5

Store

26,9

0,6

Weather

42,0

0,8

Windows Reader

9,2

0,4

In diesem Beispiel konnten also 250 MB des physischen RAM für andere Apps freigegeben werden, ohne dass die angehaltenen Apps geschlossen werden mussten.

Reaktionsfähigkeit beim erneuten Einlesen der Arbeitsseiten

Ein wichtiger Test für diese neue Funktion ist die Reaktionsfähigkeit einer angehaltenen App, wenn diese wiederverwendet werden soll, nachdem ihre Arbeitsseiteninhalte geleert wurden.

Ich habe für diesen Test die Reaktionsfähigkeit der App "Lyrics" überprüft. Die App "Lyrics" kann Songtexte anzeigen und gleichzeitig ein Musikvideo wiedergeben. Die App "Lyrics" wird angehalten, sobald sie in den Hintergrund versetzt wird, und die Wiedergabe wird gestoppt.

Ich habe die Speicherauslastung soweit erhöht, dass Arbeitsseiten geleert wurden, dann zusätzliche Apps geöffnet und das System für einige Zeit verwendet, um sicherzustellen, dass bei einem erneuten Wechseln zurück zur App die Arbeitsseiten von der Festplatte gelesen werden. Anschließend habe ich wieder zur App "Lyrics" (siehe unten) gewechselt.

Registerkarte "Prozesse" im Aufgaben-Manager, die App "Lyrics" verbraucht nun 97,4 MB Arbeitsspeicher

Die Arbeitsseiten der App "Lyrics" werden erneut gefüllt

Das wichtigste Maß für die Reaktionsfähigkeit in diesem Beispiel ist, wie viel Zeit zwischen dem Auslösen des Wechsels zurück zur App und dem Moment vergeht, in dem wieder Musik wiedergegeben wird. Auf einem Low-End-Computer mit hoher Speicherauslastung ist kaum ein Unterschied in der Reaktionsfähigkeit beim Wechseln zurück zu einer App wahrnehmbar, ob deren Arbeitsseiten nun von der Festplatte gelesen werden oder sich noch im Arbeitsspeicher befinden. Die Leistung kann jedoch variieren: je mehr Arbeitsseiten, desto länger dauert das erneute Einlesen von der Festplatte. Wir werden diese Funktion außerdem weiter optimieren und die Datenmenge reduzieren, die für Apps im Metro-Stil auf die Festplatte geschrieben werden muss.

Die Funktion kann von jedem selbst ausprobiert werden, der über eine Consumer Preview-Version verfügt. Öffnen Sie einfach einige Apps im Metro-Stil und Desktop-Apps, um den Arbeitsspeicher auszulasten, und wechseln Sie dann zurück zu der angehaltenen App im Metro-Stil, deren Arbeitsseiten geleert wurden.

HINWEIS: Windows schließt nach wie vor Apps im Metro-Stil, wenn die Arbeitsspeicherauslastung in den kritischen Bereich ansteigt. Dank dieser Funktion kann ein System jedoch mehr Anwendungen ausführen, bevor dieser Punkt erreicht wird.

Optimales Einlesen von Arbeitsseiten

Um die Reaktionsfähigkeit beim Zurückwechseln zu einer angehaltenen App zu verbessern, deren Arbeitsseiten sich auf der Festplatte befinden, haben wir zuerst den Schreibvorgang für die Arbeitsseiten optimiert, sodass diese so effizient wie möglich wieder eingelesen werden können.

Beim Schreiben der Arbeitsseiten einer angehaltenen App im Metro-Stil werden die einzelnen Arbeitsseiten nacheinander auf die Festplatte geschrieben. Dies ermöglicht das erneute Einlesen der Daten in einen Prozess über eine kleine Anzahl umfangreicher sequenzieller Lesevorgänge. Der folgende Screenshot zeigt das im Assessment and Deployment Kit (ADK) enthaltene Windows-Leistungsanalyse (Windows Performance Analyzer, WPA)-Tool und enthält eine visuelle Darstellung der Festplattenlesevorgänge während dieses Vorgangs. Ich habe die E/A des Einlesens der Arbeitsseite hervorgehoben. Der sequenzielle Datenstrom beim erneuten Füllen der Arbeitsseiten einer App ist deutlich zu erkennen.

Windows-Leistungsanalyse

Sequenzielle Lese-E/A zum erneuten Auffüllen der Arbeitsseiten einer App (WPA-Tool)

Das erneute Einlesen sequenzieller Daten ist von praktisch jedem Speichergerät aus ein sehr schneller Vorgang. Die meisten herkömmlichen Festplatten erreichen zwischen 50 und 100 MB pro Sekunde. Ein Flashlaufwerk (wie z. B. ein SSD) kann für diese Lesevorgänge sogar bis zu 200 MB pro Sekunde erreichen.

Wir erwarten, dass viele Apps unter einer Sekunde E/A benötigen werden, um die Arbeitsseiten einer angehaltenen App zurück in den Arbeitsspeicher zu laden.

Fazit

PCs aller Formfaktoren verfügen selbstverständlich nur über einen beschränkten physischen Speicher. Auch wenn zusätzlicher physischer Speicher hinzugefügt wird, bleiben die Herausforderungen bei der Speicherverwaltung dieselben, sobald weitere Programme ausgeführt werden sollen, die mehr Speicher benötigen.

Viele moderne Softwaretypen werden in Zukunft noch mehr Speicher benötigen – beispielsweise zur Bearbeitung besonders großer Fotos im RAW-Format, für Speicherdatenbanken, übergroße Arbeitsblätter usw. Betriebssysteme müssen sich weiterentwickeln, um die wachsenden Speicheranforderungen bewältigen zu können, sei es auf der Grundlage von WinRT- oder Desktopimplementierungen. Mit WinRT steht Programmierern eine API zur Verfügung, die den Zugriff auf den gesamten erforderlichen Speicher ermöglicht und für die Benutzer somit Reaktionsfähigkeit und Arbeitsleistung steigert. Ich möchte Sie ermuntern, diese Funktion in der Windows 8 Consumer Preview zu testen.

– Bill Karagounis

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