Warum implizieren die Standardeinstellungen unter 64-Bit-Windows immer noch eine große Seitendatei?

379
bers

Meine Frage basiert auf der Beobachtung, dass seit der Einführung von 64-Bit-Windows viel mehr Menschen um mich herum auf Seitenverknüpfungen ihrer Systeme hereinfallen. ZB etwas Einfaches wie zeros(2e5)in MATLAB ordnet nicht nur 1600 kB von Nullen, aber 160 GB. Dank des 64-Bit-Adressraums kann diese Menge angesprochen werden, häufig jedoch nicht im RAM. (Ich könnte viele Beispiele nennen, die sich auf die Speicherzuordnung reduzieren.) Als Ergebnis verwendet Windows die Seitendatei und speichert 160 GB Nullen auf der Festplatte. Erst danach (oder ein erzwungenes Herunterfahren) reagiert Ihr System wieder.

In 32-Bit-Windows wurde dieses Problem durch den Adressraum von höchstens 4 GB weitgehend verhindert.

Warum konfiguriert Microsoft trotzdem standardmäßig eine große Seitendatei? Meiner Beobachtung nach ist die Standardgröße größer und der Arbeitsspeicher ist größer, was nicht wirklich sinnvoll ist, es sei denn, Sie haben ein wirklich großes, wirklich schnelles Laufwerk, beispielsweise eine fürchterlich teure SSD. Aus diesem Grund neige ich dazu, Seitendateien auf 64-Bit-Windows-Installationen zu deaktivieren. Oder sollte ich nicht Was sind Gründe dafür oder dagegen?

0
Die Seitendatei ist ein wesentlicher Bestandteil der Speicherverwaltung unter Windows. Wenn Sie die Auslagerungsdatei deaktivieren, können Sie nicht den gesamten physischen Speicher verwenden. Informieren Sie sich über die Funktionsweise des virtuellen Speichers unter Windows. Daniel B vor 5 Jahren 0

2 Antworten auf die Frage

3
Mokubai

Windows führt keine träge Zuweisung von Arbeitsspeicher wie Linux aus, und die Größe des zuweisbaren Arbeitsspeichers hängt von der Auslagerungsdatei ab.

Unter Linux wird davon ausgegangen, dass eine "spärliche" Speicherzuweisung nicht vollständig ausgenutzt wird. Daher können Programme den Speicher so lange überlagern, bis er physisch erschöpft ist. Für den Fall, dass Programme tatsächlich den zugesicherten Speicher erfüllen, der RAM-Speicher aber nicht ausreicht, um die Anforderungen zu erfüllen, werden die Prozesse abgebrochen.

Windows tut das Gegenteil und geht davon aus, dass der gesamte zugewiesene Speicher letztendlich verwendet wird. Daher werden alle Reservierungen berücksichtigt, bis der physische Speicher und die Dateigröße der Seite erfüllt sind. Wenn ein Programm Speicher zuordnen kann, kann es diesen verwenden. Wenn es nicht in der Lage ist, Speicher zuzuweisen, hat es die Begrenzung der Größe des Arbeitsspeichers und der Seitendatei erreicht.

Durch das Deaktivieren der Auslagerungsdatei kann ein Programm, das Speicherplatz zuweist, den es nicht verwendet (dh es wird eine Auslagerungsdatei vorausgesetzt), dazu führen, dass Sie zur Neige gehen, wenn Sie noch "frei" haben.

Wenn Sie Ihren gesamten Arbeitsspeicher auf einem Windows-System nutzen möchten, sollten Sie das System wie vorgesehen ausführen lassen, indem Sie ihm eine Auslagerungsdatei zuweisen.

Minor Nitpick: Sie können den virtuellen Speicher nicht deaktivieren. Daniel B vor 5 Jahren 0
@DanielB Ich hatte versucht, Swap nicht mit virtuellen zu verwechseln, aber leider hat mich mein alter Verstand versagt. Danke, dass Sie darauf hingewiesen haben. :) Mokubai vor 5 Jahren 0
Danke für deine Antwort. Leider geht es nicht um die spezifische Einstellung meiner Frage, die ich (impliziert) als viel RAM und eine weniger als blitzschnelle Festplatte bezeichnete. Damit Ihre Erklärung praktisch relevant ist, müssen in den meisten Fällen ernsthafte RAM-Mengen seitenweise erstellt werden, was sehr viel Festplattenzeit erfordert. bers vor 5 Jahren 0
1
LMiller7

Die Auslagerungsdatei bietet zwei wesentliche Vorteile für das Betriebssystem, von denen keines wesentlich von einem 64-Bit-Betriebssystem beeinflusst wird.

  1. Die Auslagerungsdatei erhöht das Commit-Limit.

Wenn eine Anwendung Speicherplatz zuweist, verspricht oder verpflichtet sich ein Windows-Betriebssystem, selbst für den schlimmsten Fall ausreichend Speicher zur Verfügung zu haben. Dieser Speicher kann sich im RAM oder in der Auslagerungsdatei befinden. Das Commit-Limit ist definiert als RAM-Größe plus Auslagerungsdatei minus einem geringen Aufwand. Ohne Auslagerungsdatei ist das Festschreibungslimit etwas kleiner als die RAM-Größe. Der Speichermanager verfolgt den insgesamt zugewiesenen Speicher, um sicherzustellen, dass dieser die Festschreibungsgrenze niemals überschreitet.

Ohne Auslagerungsdatei ist das Festschreibungslimit ein hartes Limit, das nicht erhöht werden kann, während das Betriebssystem ausgeführt wird. Bei der standardmäßigen Auslagerungsdatei-Konfiguration ist das Festschreibungslimit nicht nur viel größer, sondern es ist ein weiches Limit, das durch Erweitern der Auslagerungsdatei erhöht werden kann, wenn dies erforderlich ist.

Das Festlegen der Festschreibungsgrenze in Windows ist eine schlechte Sache. Die meisten Anwendungen behandeln diese Eventualität nicht sehr gut und das Betriebssystem selbst kann dies oft nicht tolerieren.

  1. Die Auslagerungsdatei optimiert die RAM-Nutzung.

Zu einem bestimmten Zeitpunkt enthält ein Computer wahrscheinlich sehr viele Daten, auf die seit längerer Zeit nicht zugegriffen wurde und die möglicherweise nie während der Sitzung abgerufen werden. Der Speichermanager kann natürlich nicht wissen, wie wichtig diese Daten sind, und muss sie irgendwo aufbewahren.

Die Speicherung all dieser selten verwendeten Daten im Hochgeschwindigkeits-RAM ist ein schwerwiegender Missbrauch dieser kostbaren Ressource. Wenn RAM diese Belastung nicht hätte, wäre mehr für die Anwendung und für die Zwischenspeicherung verfügbar. Caching ist in einem modernen Betriebssystem sehr wichtig und trägt wesentlich zu einer guten Leistung bei.

Die Auslagerungsdatei bietet einen Ort, an dem der Speichermanager diese selten verwendeten Daten entladen und den RAM von dieser Aufgabe entlasten kann. Es ist wahr, dass dies mit Kosten verbunden sein wird, aber denken Sie daran, dass es sich um selten verwendete Daten handelt. Es sollte also nicht schwerwiegend sein. Der Speichermanager verfügt über zahlreiche Optimierungen, um diese Kosten zu minimieren.

Betrachten Sie dies jedoch nicht als Kosten, sondern als Investition in Leistung. So wie kluge Investitionen mit Geld eine gute Sache sind, investiert der Speichermanager ein wenig Zeit, um die Auslagerungsdatei in der Erwartung zu verwenden, dass er später große Dividenden bringen wird. Es funktioniert normalerweise.

Dies ist keine neue Idee. Es wird seit vielen Jahren in Windows und Linux verwendet und lange vor großen Computersystemen. Es ist ein bewährtes Prinzip, das über Jahrzehnte hinweg optimiert wurde.

Fazit: Lassen Sie Windows die Seitendatei nach Belieben verwalten. Die Designer wissen, was sie tun. Leider hat Microsoft dies nicht sehr gut kommuniziert und es gibt viele falsche Vorstellungen. Ein Großteil dessen, was Sie im Internet über die Auslagerungsdatei lesen, enthält schwerwiegende Fehler.

Danke für deine Antwort. Leider geht es nicht um die spezifische Einstellung meiner Frage, die ich (impliziert) als viel RAM und eine weniger als blitzschnelle Festplatte bezeichnete. Damit Ihre Erklärung praktisch relevant ist, müssen in den meisten Fällen ernsthafte RAM-Mengen seitenweise erstellt werden, was sehr viel Festplattenzeit erfordert. bers vor 5 Jahren 0
Die Antwort ist nicht ganz richtig. Wenn Sie einfach malloc (lots_of_bytes) mappen, obwohl Commas vas ein Commit ausführen muss, nimmt es tatsächlich keinen Speicherplatz (nicht einmal in der Auslagerungsdatei), bis Sie darauf zugreifen. Wenn Sie zum ersten Mal eine Seite aus einem solchen Bereich auslesen, weist Windows Ihnen eine physische Seite mit Nullen zu. Nach Ihrer Beschreibung scheint MATLAB darauf zu bestehen, proaktiv Nullen in die Region zu schreiben, wobei er offenbar nicht darauf vertraut, dass Windows das Richtige tut. Das ist kein Fehler des Betriebssystems. Jamie Hanrahan vor 5 Jahren 0