Wie halten Sie einen bestimmten Prozess aus dem virtuellen Speicher heraus (Paging)?

1128
Trevor Boyd Smith

In Windows wird meine Gast-VM ständig in den virtuellen Speicher gestellt ... und dann friert die VM ein ..., da die VM überhaupt nicht reagieren kann. Ich warte sogar 5 Minuten und keine Antwort von der VM.

Wie halten Sie einen bestimmten Prozess, in diesem Fall den mit der VM verknüpften Prozess, außerhalb des virtuellen Speichers?

Meine VM friert normalerweise etwa jede Stunde ein. Eine absolute Schätzung ist, dass ich 10 Minuten pro Stunde verliere, weil die VM neu gestartet wird. Jede Hilfe wäre sehr dankbar.


UPDATE wie auf Anfrage:

  • host: winxp-sp3-32-bit
  • Host-physischer Speicher: 3000 MB
  • Gast: fedora14-64-bit
  • Gast zugewiesen - 1400 MB
  • Hostspeicher wie vom Task-Manager aus gesehen, wenn der Gast einfriert: ~ 100 MB normalerweise
1
Können Sie nachweisen, dass die VM in den virtuellen Speicher gestellt wird und auch, dass dies das Problem ist? Bitte teilen Sie uns mit, was Ihr Gastbetriebssystem ist, wie viel RAM dem Gast zugewiesen ist und wie viel Speicherplatz frei ist, und wie viel RAM insgesamt und wie viel RAM insgesamt im Host vorhanden ist. Spectre vor 13 Jahren 0

2 Antworten auf die Frage

1
Spectre

Ich bin mir ziemlich sicher, dass Sie unter Windows keinen virtuellen Speicher verwenden können. Bei IIRC kann der gesamte Speicher mit Ausnahme bestimmter Bereiche des Windows-Kernels ausgelagert werden. Ich glaube jedoch nicht, dass dies Ihr Problem ist, insbesondere nicht, wenn der Rest von Windows mit OK reagiert.

Wenn Sie also eine Auslagerungsdatei haben, können Sie nicht steuern, wo sich der Prozess befindet, ob er sich im virtuellen / physischen Speicher befindet. Trevor Boyd Smith vor 13 Jahren 0
Richtig, Windows wird sein Bestes geben, um für Sie zu entscheiden - es ist auch nicht alles oder nichts. Häufig aufgerufene Teile des Apps-Speichers bleiben physisch, weniger ausgelastete werden ausgelagert. Wenn die VM wirklich aggressiv ausgelagert wird, ist dies ein Zeichen dafür, dass Sie ihr zu viel Speicher zugewiesen haben oder dass Ihr System als Ganzes nicht genug hat. Bei 32 Bit WinXP mit 3 GB RAM würde ich der VM nicht mehr als 1 GB zuweisen. Spectre vor 13 Jahren 0
Oh, und ein 64-Bit-Gast auf einem 32-Bit-Host (IMO) fragt nach Problemen, da die VM-App wahrscheinlich alle 64-Bit-Anweisungen nach 32-Bit und zurück emulieren muss, was einen Engpass darstellen kann. Erstellen Sie eine 32-Bit-Fedora-VM und prüfen Sie, ob Sie dasselbe Problem haben. Wenn Sie über einen Prozessor mit Virtualisierungsfunktionen verfügen (Intel VT und AMD-V iirc), vergewissern Sie sich, dass diese im BIOS aktiviert sind. Spectre vor 13 Jahren 0
Zu Ihrer Information: Sobald Sie die Virtualisierung auf Ihrem Mobo aktiviert haben, ist das Ausführen eines 64-Bit-Gasts auf einem 32-Bit-Host kein Problem. Sowohl VirtualBox als auch VMWare implementieren diese Funktion auf robuste Weise. (Sie können zu den jeweiligen Websites navigieren und Informationen zu dieser speziellen Funktion anzeigen). Trevor Boyd Smith vor 13 Jahren 0
Ich neige zu ... "Ich glaube, ich habe der VM zu viel zugeteilt". Ich habe kürzlich die VM von 1400 auf 1200 MB heruntergefahren und der Gast war seit über einer Stunde nicht mehr eingefroren. Angesichts der Tatsache, dass ich alle 30 Minuten eingefroren habe und seit über einer Stunde vergangen ist, denke ich, dass das Problem zu viel Speicherplatz hatte. Trevor Boyd Smith vor 13 Jahren 0
Ich vermute, dass 64-Bit-Gast auf einem 32-Bit-Host noch eine 64-Bit-fähige CPU benötigen würde. Und wenn Sie eine von ihnen haben, warum 32bit XP: P laufen lassen Spectre vor 13 Jahren 0
* seufz * ja ... um 64bit-Gast auf einem 32bit-Host auszuführen, ist eine 64bit-CPU erforderlich ... * doppelter Seufzer * ... sehr trauriger Panda = (... (nicht zu vergessen, ich habe 4 GB RAM ...) -32bit lässt mich nur 3gb sehen) Trevor Boyd Smith vor 13 Jahren 0
Haben Linux stattdessen einen XP-Gast? Spectre vor 13 Jahren 0
-1
Code Bling

Stellen Sie die Dateigröße Ihrer Seite auf 0 :) Sie werden staunen, wie viel besser Ihr System arbeitet.

In XP,
Arbeitsplatz -> Eigenschaften -> Erweitert -> Leistung: Einstellungen -> Erweitert -> Virtueller Speicher: Ändern -> "Keine Auslagerungsdatei" -> Festlegen -> OK

Dies betrifft offensichtlich alle Prozesse. Soweit ich weiß, ist es nicht möglich, das Auslagern des Speichers für einen bestimmten Prozess zu verhindern. Wie in den Kommentaren erwähnt, bin ich (basierend auf Ihrer Beschreibung) nicht wirklich davon überzeugt, dass dies mit Ihrer VM geschieht.

Es gibt eine gute Diskussion darüber, ob Windows-Paging verwendet werden soll oder nicht ... http://serverfault.com/questions/23621/any-benefit-or-detriment-from-removing-a-pagefile-on-an-8gb- RAM-Maschine. Da es so viele Up-Votes für "Paging bei Standardeinstellungen" gibt, werde ich Paging beibehalten. Trevor Boyd Smith vor 13 Jahren 1
Guter Fund. Vergessen Sie nicht, dass es für jeden keine pauschale Lösung gibt. Es hängt alles davon ab, wie Sie Ihre Maschine benutzen. Sie sollten es in Erwägung ziehen, auch wenn Sie danach die alten Einstellungen wiederherstellen. Ich habe eine 3-GB-Maschine und laufe ohne Seitendatei. Dadurch konnte ich erhebliche Leistungsprobleme beheben. Aber ich muss meine gesamte Memnutzung beobachten. Code Bling vor 13 Jahren 0
Ja, ich würde es vermeiden, die Seitendatei zu deaktivieren. Alles, was Sie brauchen, ist ein unerlaubter Vorgang, um das System in die Knie zu zwingen und nicht in der Lage zu sein, sich zu erholen. Windows ist ziemlich intelligent, da in einigen Situationen RAM für die Verwaltung eines Systemcaches verwendet wird, auch wenn nicht häufig genutzter Speicher zwischenspeichert wird, sodass die üblichen Betriebssystemfunktionen und häufig gestarteten Apps beschleunigt werden. Spectre vor 13 Jahren 0
Das Deaktivieren der Auslagerungsdatei funktioniert möglicherweise nicht, aber es ist auch kein Schaden, wenn Sie es versuchen. Zumindest wissen Sie, ob dies tatsächlich dazu führt, dass Ihre VM langsamer wird. Code Bling vor 13 Jahren 0
Ja er hat. aber er meinte "auch wenn es bedeutet, [häufig] genutzte [Anwendungen / Prozesse / etc] zwischenspeichern". Trevor Boyd Smith vor 13 Jahren 0
@Code Bling. Es ist wirklich traurig, dass Sie Ihre Gedächtnisauslastung beobachten müssen. Mann, ich muss dieses ASAP reparieren. Ich meine, wow ... total sux. Trevor Boyd Smith vor 13 Jahren 0
Zu Ihrer Information, die Windows-Beschränkung von 3 GB wird durch ein "Feature" von Windows verursacht, das als "die PAE-Fähigkeit der Hardware ignorieren" bezeichnet wird. Alle Linux-Distributionen mit 32 Bit können 64 GB RAM haben (jeder 32-Bit-Prozess ist jedoch auf 2 GB Arbeitsspeicher beschränkt). Trevor Boyd Smith vor 13 Jahren 1
@TrevorBoydSmith: Ich wusste, was er meinte, entschied mich aber trotzdem, ihn zu ärgern :) Dann entschied ich, dass mein Kommentar als gemeinsinnig interpretiert werden könnte, also habe ich ihn gelöscht. Code Bling vor 13 Jahren 0
@ TrevorBoydSmith: Es ist * ziemlich traurig. Mein System wurde jedoch völlig unbrauchbar, wenn ich mehr Speicher als physisch nutzte. Also musste ich es trotzdem sehen. Code Bling vor 13 Jahren 0
Nun, ich habe es so vermisst :) Die Windows 32bit "Einschränkung" ist sozusagen eine "Funktion", die Iirc als Rückwärtskompatibilität bezeichnete (meistens für Treiber, die ich vermute). Sie variiert zwischen 3 und 4 GB je nach dem anderen erforderlichen Adressraum (z. B. GPU-Speicher). iirc 32-Bit-Server-Editionen von Windows unterstützen mehr als 4 GB RAM, genau wie Linux. Spectre vor 13 Jahren 0
@Spectre: Ich habe gefragt, ob Sie gerade gesagt haben, dass Windows RAM zum Cache-Speicher verwendet :) Code Bling vor 13 Jahren 0
Wenn ich also diese Funktion ausschalte, funktioniert mein Swap wieder. Beeindruckend. +1 für die Beantwortung des Kommentars in meiner Antwort! Code Bling vor 13 Jahren 0
Ja, Sie können die Funktion einfach ausschalten. Sie müssen lediglich die Softwareerweiterung "64-Bit-Fenster kaufen und saugen" ^ kaufen. Trevor Boyd Smith vor 13 Jahren 0
oh haha, ich habe mich vertippt, hätte "auch wenn es bedeutet * Paging * nicht häufig genutzter Speicher": P Spectre vor 13 Jahren 0
selten ... es gibt kein Wort "selten". http://www.youtube.com/watch?v=8iSD9lPVY6Q Trevor Boyd Smith vor 13 Jahren 0
@Trevor, @Spectre, ein 32-Bit-System kann mehr als 4 GB RAM verwenden? Wie? Ist es wie das Segment- / Offset-System, das Real-Modus-DOS verwendet hat? Synetech vor 13 Jahren 0
PAE nachschlagen. Kurzum: Hardwarehersteller haben sich in den 90er Jahren entschieden, der Adresse 4 zusätzliche Bits hinzuzufügen ... Sie haben also 2 ^ 36 adressierbare Bytes (daher 64 GB Speicher). msft entschied sich, die 4 zusätzlichen Bits zu ignorieren, da sie nicht gerne standardkonform sind. Trevor Boyd Smith vor 13 Jahren 0
@ TrevorBoydSmith: lolz. Ich werde das nachschlagen. In anderen Nachrichten finde ich, dass dieser Kommentarthread fast eine eigene Frage verdient. Code Bling vor 13 Jahren 0
Selbst wenn Sie die Auslagerungsdatei deaktivieren, werden Teile des virtuellen Adressraums, die bestimmten Dateien zugeordnet sind, und dies umfasst alle Ihre Codedateien, Exes und DLLs usw., immer noch paginiert, dh nur bei Bedarf von der Festplatte eingelesen und verworfen von RAM aus, wenn für eine Weile nicht darauf zugegriffen wird und RAM knapp wird. Sie können das Paging nicht loswerden. Durch das Beibehalten der Auslagerungsdatei kann das Betriebssystem besser entscheiden, was im RAM bleiben soll. Ohne eine Auslagerungsdatei müssen ALLE privaten, festgeschriebenen virtuellen Adressräume im RAM gehalten werden, unabhängig davon, wie selten oder lange noch nicht darauf zugegriffen wurde. Das ist schlecht. Jamie Hanrahan vor 8 Jahren 0
@JamieHanrahans virtueller Adressraum wird niemals Dateien zugeordnet. Sie laden Dateien in den Speicher, oder Sie öffnen Handles für diese, und diese Handles bleiben im Speicher. Wenn Sie eine EXE-Datei ausführen, wird sie in den Speicher geladen, ebenso die statisch verknüpften DLLs. Der virtuelle Adressraum ordnet den ausgelagerten physischen Speicher zu, und diese Seiten können auf die Festplatte ausgelagert werden. Die Grundidee hinter dem Deaktivieren von Swapping ist, dass Windows schlecht entscheiden kann, was im RAM bleiben soll und was nicht. Sie können den Swap absolut deaktivieren. Das kann gut sein. Code Bling vor 8 Jahren 0
@CodeBling Es tut mir leid, aber du irrst dich sehr. In der Tat ist ein großer Teil Ihres FAS auf Dateien abgebildet. Sehen Sie sich die MapViewOfFile-API in Windows oder mmap in * nix an. Diese werden von Anwendungen für den Zugriff auf große Datendateien verwendet. Die Dateizuordnung ist jedoch auch die Funktionsweise von Codedateien in beiden Betriebssystemen. Das Erstellen eines Prozesses zum Ausführen einer EXE-Datei mit seinen DLLs führt auf keinen Fall dazu, dass die gesamte EXE-Datei und die DLLs absolut in den RAM-Speicher eingelesen werden. Sie werden einfach in den Prozess VAS abgebildet, das heißt, sie werden zum Backing-Store - also "wohin einlesen", für die ihnen zugewiesenen Adressbereiche. Siehe "Windows Internals" von Solomon und Russinovich. Jamie Hanrahan vor 8 Jahren 0
@ Jamie Hanrahan nett. Hat mir heute etwas beigebracht. Ich wusste, dass Sie Hardware Adressen zuordnen können, aber keine Dateien. Aber ... Sie sagen, wenn der Kernel eine ausführbare Datei startet, ordnet der Kernel die Datei einfach dem Speicher zu und blickt sofort auf Fehler, um den PE-Header zu lesen, den IAT einzurichten und springt in den Hauptbereich, ohne etwas anderes zu laden. Hmm ... könnte sein. Letztlich geht es nicht um die Antwort: "Können Sie verhindern, dass ein bestimmter Prozess ausgelagert wird?" "Nein, aber hier deaktivieren Sie den Swap". Code Bling vor 8 Jahren 0
@ JamieHanrahan Ich glaube auch nicht, dass man sagen kann, dass das Speichern des gesamten virtuellen Adressraums im RAM willkürlich eine schlechte Sache ist. Ich denke, es hängt von Ihren Systemressourcen ab und davon, wie Sie Ihr System verwenden. Gerne im Chat zu diskutieren. Ich persönlich bin seit mindestens 5 Jahren glücklich mit keinem Swap und SuperFetch inaktiviert, und ich fand es eindeutig ansprechbarer als sonst. Code Bling vor 8 Jahren 0
@CodeBling Es ist wichtig, dass der Code aus Code-Dateien in den Paging-Bereich geladen wird und später aus dem RAM gelöscht werden kann, wenn er längere Zeit nicht verwendet wurde. Wenn es später erneut verwendet wird, wird es aus derselben Datei zurückgespielt. Das ist "paging", obwohl Seiten normalerweise nicht geschrieben werden. Außerdem können Sie Lese- / Schreib-Mappings von Datendateien und modifizierte Seiten aus diesen Mappings machen. Sie werden in die Datei zurückgeschrieben ... und dann nach Bedarf wieder eingeblendet. (Dies ist in der Tat der bevorzugte Weg, um auf große Dateien zuzugreifen.) Wenn Sie die Auslagerungsdatei entfernen, wird dies nicht deaktiviert, sodass der Swap-Vorgang auf keinen Fall deaktiviert wird. Jamie Hanrahan vor 8 Jahren 0
@CodeBling Und selbst wenn Sie herkömmliche Lese- / Schreibaufrufe für den Zugriff auf Dateien ausführen, führt der Windows-Dateisystemcache tatsächlich eine Dateizuordnung hinter Ihrem Rücken aus. Ihre "read" - und "write" -Aufrufe verschieben die Daten einfach in den oder aus dem Cache, der sich im Kernel-Adressraum befindet und den Dateien zugeordnet wird, auf die Sie zugreifen. Wieder paging und es wird nicht durch das Entfernen der Auslagerungsdatei deaktiviert. Eine App kann dies umgehen, indem sie das Datei-Handle mit FILE_FLAG_NOBUFFERING öffnet, muss jedoch unter einigen lästigen Einschränkungen arbeiten. Jamie Hanrahan vor 8 Jahren 0
@JamieHanrahan Ich verstehe, was du sagst, aber ich sehe immer noch nicht, worauf du hinaus willst. Was ist der beste Weg, um zu verhindern, dass ein Prozess auf die Festplatte ausgelagert wird (sofern das Auslagern auf die Festplatte verhindert werden kann - ich glaube nicht, dass das OP die Datei-zu-Speicher-Zuordnung inaktivierte)? Für mich ** ist ** der beste Weg ** DAS ** (in der Tat der einzige Weg für einen Endbenutzer), immer noch die Dateigröße Ihrer Seite auf Null zu setzen, unabhängig davon, ob dies die beste Lösung für Sie ist durchschnittliche Benutzer auf lange Sicht und unabhängig davon, ob dies das Tauschen oder Zwischenspeichern "vollständig deaktiviert". ..Nein? Code Bling vor 8 Jahren 0
@JamieHanrahan ist eine ziemlich gute Info für jeden, der die Antwort gelesen hat, und für jeden, der sich für Windows-Interna und Windows-Paging interessiert. Gute Arbeit in der Forschung (oder Know-how) Code Bling vor 8 Jahren 0
Aber aber ... der von Ihnen ausgeführte Code ist Teil Ihres Prozesses. So werden Datendateien zugeordnet. Es gibt nichts, was Sie tun können, um zu verhindern, dass das Zeug ausgelagert wird. Durch das Entfernen der Auslagerungsdatei werden nur die privaten Vas (im Task-Manager als "Commit-Größe" bezeichnet) im RAM gespeichert. Und es erzwingt, dass auf jeden Prozess im System (und pageable Kernel-Space-Sachen wie der ausgelagerte Pool) zugegriffen wird, und nicht nur auf das, was Ihnen wichtig ist. Nein, es gibt keine Möglichkeit, das Paging für JUST Ihren Prozess zu deaktivieren. Jamie Hanrahan vor 8 Jahren 0
@ Jamie Hanrahan stimmte zu. Denken Sie nicht im Fall einer virtuellen Maschine, dass das private VAS, dessen Paging die Verlangsamung verursacht? Es wirkt sich auf jeden Prozess aus, aber das ist bereits in der Antwort vermerkt. Code Bling vor 8 Jahren 0