Nicht auslagerbare Speicherseiten im user mode



  • Hallo Zusammen,

    weiß einer von euch, ob es möglich ist, im User-mode nicht auslagerbare Seiten zu erstellen ?
    So was wie den non-paged pool für Ring 3 Anwendungen halt...

    Greetz, Xzi-bit


  • Mod

    Und was versprichst Du Dir davon?

    Ich würde Dir dringend raten es bleiben zu lassen.
    Der Memory-Manager weiß weitaus besser wann was ausgelagert werden darf als Du!

    Ansonsten:
    Lieds die Doku zu VirtualLock!
    http://msdn2.microsoft.com/en-us/library/aa366895(VS.85).aspx

    Ich weise Dich besonders auf diesen Text hin:
    Locking pages into memory may degrade the performance of the system by reducing the available RAM and forcing the system to swap out other critical pages to the paging file. Each version of Windows has a limit on the maximum number of pages a process can lock. This limit is intentionally small to avoid severe performance degradation. Applications that need to lock larger numbers of pages must first call the SetProcessWorkingSetSize function to increase their minimum and maximum working set sizes. The maximum number of pages that a process can lock is equal to the number of pages in its minimum working set minus a small overhead.

    Lass es bleiben. Die meisten Programme, die so etwas machen führen dazu, dass das gesamte Ssystem schlechtere Performance aufweist.
    Die Performance des eigenen Programmes wirst Du damit sicherlich nciht steigern, wenn das Deine Absicht ist.



  • Mit VirtualLock geht es.
    Es hindert aber das OS trotzdem nicht unter gewissen Umständen alle Seiten auszulagern. Dies tritt z.B. dann auf, wenn Dein prozess nichts mehr macht und das gesamte Working.-Set ausgelagert wird. Dann werden auch die gelockten Seiten ausgelagert. Sobald aber eine Seite verwendet wird, werden die gelockten Seiten auch wieder eingelagert.



  • [quote]Dies tritt z.B. dann auf, wenn Dein prozess nichts mehr macht und das gesamte Working.-Set ausgelagert wird[/quote

    Was verstehst man denn genau unter nichts mehr machen, also woran erkennt das Windows ? Wenn längere Zeit kein Speicherzugriff auf genau diese Seiten mehr auftritt, oder ...?

    Ich würde Dir dringend raten es bleiben zu lassen.
    Der Memory-Manager weiß weitaus besser wann was ausgelagert werden darf als Du!

    Ja, Martin, ich weiß. ^^ Mir geht es aber im Moment eher um die Frage ob das möglich ist (also rein wissenstechnisch) und wenn in wie weit. Schon klar, dass das mal rational gesehen auf gut bayrisch "a Schmarrn" is und danke für den Hinweis darauf. Aber es sieht ja doch so aus, als ob laut Jochen doch eineige Einschränkungen mit VirtualLock vorhanden wären, denn das widerspricht sich leicht mit der MSDN:

    These pages are guaranteed not to be written to the pagefile while they are locked.

    Also dann wäre das ja nicht ganz korrekt. Was mich aber wiederum auch wieder wundert, da die MSDN ja eigtl. immer klipp und klar sagt, was Sache ist.

    Weiterhin frage ich mich, wie eigtl. einige Leute von der PCWelt oder Computerbild und weiß der Kuckuck was es da für Zeitschriften gibt mal gemeint haben, es wäre "aus Performancegründen [...]" besser, das Pagefile zu sperren.
    Da gibts ja auch irgendwo einen registry schlüssel dafür.
    Aber egal - das ist jetzt eher sekundär. Mich interessiert hauptsächlich, in welchem Fall diese Pages, laut Jochen, dann doch ausgepaged werden.

    Greetz, Xzi-bit und schon mal an guten Rutsch ins neue Jahr :xmas1:


  • Mod

    Was Jochen meint weiß ich nicht. Ich denke, dass es hier um "Notfall und Engpasssituationen geht". Im Normalfall gilt, dass was in VirtualAlloc steht.

    Es gibt intern eine MRU (Most recent used) Liste. Die Seiten in denen lange kein Zugriff mehr erfolgte werden ausgelagert.

    Wenn Du willst, dass nicht geswapt werden soll, dann setze in den Systemeinstellungen die Pagefile auf 0.
    Dann hast Du aber auch keine Memory Dumps mehr.
    Aber IMHO bringt das keine Performance, ich wüsste auch nicht warum.

    Wenn Dich wirklich interessiert was mit dem Auslagern passiert, dann schu Dir die Leistungsindikatoren an. Ansonsten pfeife ich im Allgemeinen auf die Meinung der "Halbwissenden" bei PCWelt & Computerbild.

    Lies mal
    http://support.microsoft.com/kb/555223/en-us
    oder die lange Fassung:
    http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm



  • Siehe: VirtualLock only locks your memory into the working set
    http://blogs.msdn.com/oldnewthing/archive/2007/11/06/5924058.aspx

    Wenn Dein Prozess "nichts mehr macht", dann wird keine Page mehr angesprochen.

    Ein wiederspruch zur MSDN-Doku ist das "auslagern" in bestimmten Fällen nicht.
    Ausgelagert wird es u.a. auch, wenn das OS in Hybernation geht...

    Und die MSDN ist keineswegs immer eindeutig!



  • Super, danke !
    Scheint ja wohl nicht wirklich so der Hit zu sein...
    Ich denke ich komm dann wohl auch ohne die Funktion ganz gut zurecht haha ^^

    Trotzdem gut zu wissen, dass die Funktion die Speicherseiten IMHO "nicht wirklich" davor hindert, ausgelagert zu werden.

    Schöne Grüße und ein gutes neu.....woah - is ja schon 2008 ! 😛
    Xzi-bit


Anmelden zum Antworten