AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Page Faults

Ein Thema von Corelgott · begonnen am 6. Feb 2007 · letzter Beitrag vom 6. Feb 2007
Antwort Antwort
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

Page Faults

  Alt 6. Feb 2007, 13:42
Hi @ all,

ich habe mal eine vll etwas doofe frage.
Ich habe in meiner App eine kleine eigene Komponetne, die 2 bilder per hand & viel scannline alpha-transparent verbindet / übereinanderlegt. Auf gut deutsch nen hover effekt macht.

Das poblem bei ist nun eigentlich, wenn man sich mit dem Task-Manager die App ansieht, erkennt man, dass die Page-Fault bei jedem hovern in die höhe schießen. Das Mem-Usage, also dir grösse des pogramms aber mehr oder minder gleichbleibend ist.

Nun meine frage. Ein Pagefault entsteht doch dann, wenn man auf einen speicherbereich zurgreift, den man vorher eigentlich nicht hatte, aber den das System als "ok" erachtete, in den man rein darf.

Ist dieses verhalten an sich ok? Oder besteht dort handlungs bedarf, damit das Programm sauberer bzw. stabiler läuft? kann man ein Programm Page-Fault-Frei machen? Oder ist dies ein mehr oder minder normales verhalten, was auch durchaus durch den Delphi mem-manager entstehen kann?

Was meint ihr daszu und wie würde man die "behebung" angehen?

thx im Voraus

Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Page Faults

  Alt 6. Feb 2007, 13:57
Ein Page Fault bezeichnet den Zugriff auf eine Speicherseite, die sich aktuell nicht im Arbeitsspeicher befindet und erst aus dem PageFile von der Festplatte nachgeladen werden muss.

Das ist ein vollkommen normales Verhalten des Speichermanagers von Windows und da gibt es nichts zu beheben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Page Faults

  Alt 6. Feb 2007, 14:12
thx Lucky,

wie immer formvollendet mit passendem detail-wissen...

nochmal thx & cya

Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Page Faults

  Alt 6. Feb 2007, 14:23
Es gibt zwar die Möglichkeit bestimmte Speicherbereiche vom Paging auszunehmen aber dies sollte nur dem Betriebssystem vorbehalten sein um Kernel-Bereiche nicht auszulagen. Wenn jede x-Beliebige Anwendung dies in Mengen anfordern würde wäre das ganze Konzept der virtuellen Speicherverwaltung zur Einsparung von realen Speicher wieder ausgehebelt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: Page Faults

  Alt 6. Feb 2007, 14:42
Zitat von Bernhard Geyer:
Es gibt zwar die Möglichkeit bestimmte Speicherbereiche vom Paging auszunehmen aber dies sollte nur dem Betriebssystem vorbehalten sein um Kernel-Bereiche nicht auszulagen. Wenn jede x-Beliebige Anwendung dies in Mengen anfordern würde wäre das ganze Konzept der virtuellen Speicherverwaltung zur Einsparung von realen Speicher wieder ausgehebelt.
Selbst Treiber sind ja beim sog. "NonPagedPool", wie der nicht-ausgelagerte (i.e. residente) Speicher bei uns genannt wird, beschraenkt. Hier gilt insbesondere, dass wer frueh kommt auch das groesste Stueck vom Kuchen ergattern kann. Deshalb gibt es auch manche Systemtreiber, welche sich auf einen Boottreiber (der Unterschied ist der Zeitpunkt zu dem ein solcher Treiber jeweils geladen wird) verlassen, der dann schonmal fruehzeitig einen dicken Brocken Speicher reserviert hat.

Uebrigens ist - vergleicht man es mit dem gesamten Adressbereich - der NonPagedPool auf x64 ein noch kleineres Stueck vorbehalten als auf x86. Geruechteweise sind es bei 32bit weniger als ein Achtel des gesamten Adressraums, wovon man aber bei einem einzigen Allokationsversuch nur rund 60MB ergattern kann.

Aber wenn man sich dann anschaut wie das alles arbeitet, sollte man sich darum keine Sorgen machen, dass der Speicher "langsam" wird. Der Pagewriter von NT ist ausgesprochen faul, weshalb nur dann was in die Auslagerungsdatei schreibt, wenn eine Seite wirklich urst lange (<- relativ!) nicht mehr benutzt wurde. PagedPool ist also ohnehin oft genug im physikalischen Speicher, kann aber ausgelagert werden.

Gluecklicherweise gibt es keinen Weg fuer Usermode-Programme NonPagedPool zu allozieren, es sei denn durch einen Treiber. Und solange der Treiberautor sich auskennt, wird er NonPagedPool moeglichst vermeiden. Der einzige Vorteil ist naemlich, dass NonPagedPool auf IRQLs (Interrupt Request Levels - nicht verwechseln mit IRQ oder ueberhaupt mit "Interrupts") hoeher als APC_LEVEL zugegriffen werden kann (kann schon, aber dann macht das System blau mit einem freundlichen Hinweis im Textmode). PagedPool wird so verwaltet, dass es technisch unmoeglich ist ab DPC_LEVEL drauf zuzugreifen, weil der Anfordernde u.U. warten muesste bis der Speichermanager die Seite in den physikalischen Speicher geholt hat. Dummerweise ist Warten aber eine Geschichte die ab DPC_LEVEL problematisch wird (einfach ein gutes Buch ueber Treiber finden, wenn's jemanden interessiert ) weshalb ab da PagedPool tabu ist. Gluecklicherweise laeuft eine jede Usermode-Anwendung auf PASSIVE_LEVEL (kleinster IRQL), so dass sie auf solche Geschichten keine Ruecksicht nehmen muss. Es gibt Ausnahmen in Sachen APC_LEVEL, aber das wird hier wohl zu detailliert

BTW: Was sucht dieser Thread in der Sparte Delphi-Language???
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Page Faults

  Alt 6. Feb 2007, 15:38
Hi,

ehh wow...

Also bei mir ging es eigentlich bloß um eine dumme kleine gui mit ein bischen bunt...
Aber sagen wir mal so, wenn ich das alles einigermaßen richtig verstehe, ist das ein komplett normales verhalten, woraus ich werder ableite, dass es handlungsbedarf gibt, noch das es etwas bringen würde. (Könnte ich denn handeln. Aber den Kernel-Treiber wollte ich nun nicht extra anfangen, nur damit mein button bunt ist )

Aber dennoch schon mal vielen dank, für die interessanten infos.

Zu dem Punkt, dass dieser Thread deplaziert ist: Hmm joar im nachhinein stimme ich da zu. Aber hinterher ist mal ja immer klüger und da ich vorher das problem ein bissel auf den Delphi-Mem-Mgr geschoben habe und es eigentlich 0 mit win-apis zu tun hatte...

Aber na ja, auch hier wurde mir ja geholfen ^^

thx & cya

Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#7

Re: Page Faults

  Alt 6. Feb 2007, 15:49
Zitat von Corelgott:
da ich vorher das problem ein bissel auf den Delphi-Mem-Mgr geschoben habe und es eigentlich 0 mit win-apis zu tun hatte...
der ist ja eh nicht gerade optimal ._.
(Hier im Forum suchenFastMM)

Und brauchst du auch nicht ... die WinAPIs verstecken sich bei dir alle in den "normalen" Delphifunktionen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz