Schreiboperationen werden in den Page-Cache verschoben. Wenn die Daten im Cache neuer sind als die Daten auf dem Medium, werden diese als "dirty" bezeichnet. Dirty Pages die sich nach und nach im Speicher ansammeln, muessen irgendwann auch wieder auf die Festplatte geschrieben werden; das nennt man dann "Dirty-Page-Writeback" und das passiert exakt zweimal: * Wenn der freie Speicher unter einen definierten Grenzwert (threshold) faellt, muss der Kernel die Dirty Date auf die Festplatte schreiben um wieder Platz zu schaffen * Wenn die Dirty Data aelter als ein definierter Grenzwert sein sollten, werden die Daten, die aelter sind als der Grenzwert erlaubt, zurueck auf die Platte geschrieben. Das stellt sicher, das Dirty Data nicht fuer alle Zeit dirty bleiben. Die zwei Vorgaenge haben unterschiedliche Zielsetzungen. In aelteren Kernel wurden sie von zwei seperaten kernel-Threas abgearbeitet. In 2.6 erledigt jedoch eine Gruppe von Kernel-Threads, naemlich die "pdflush" - Hintergrundprozesse diese Aufgaben. Die pdflush-Threads muessen Dirty Data auf die Festplatte zurueckschreiben, wenn die Menge des freien Speichers auf dem System ein bestimmtes Niveau unterschreitet. Die Zielsetzung dieses Background-Writebacks ist es, Speicher von den Dirty Pages zurueckzubekommen, wenn der verfuegbare physikalische Speicher zu klein wird. Der Grenzwert laesst sich mit dem "dirty_background_ratio"-sysctl konfigurieren. Wenn der freie Speicher unter den Grenzwert faellt, benutzt der Kernel den "wakeup_dbflush()"-Call, um den pdflush-Thead aufzuwecken und die "background_writeup()"-Funktion dazu zu benutzen, um den Writeback der Dirty Pages zu starten. Diese Funktion akzeptiert einen einzelnen Parameter, naemlich die Anzahl der Pages, die zurueckgeschrieben werden sollten. Die Funktion schreibt so lange Daten, bis eine von zwei Bedingungen eintritt: - Die angegebene Mindestzahl von Pages wurde zurueckgeschrieben - Der freie Speicher ist ueber dem "dirty_background_ratio"-Grenzwert Diese Bedingungen sorgen dafuer, das pdflush einen Teil dazu betraegt, Low-Memory-Conditions zu bereinigen. Der Writeback wird vor Eintritt dieser Bedingungen nur beendet, wenn pdflush alle Dirty Pages zurueckgeschrieben hat und nichts weiter zu tun ist. Fuer die zweite Zielsetzung wacht pdflush periodisch auf (unabhaengig von Hauptspeicherproblemen) und schreibt sehr alte Dirty Pages zurueck. Dies wird durchgefuehrt, um sicherzustellen, dass Dirty Pages nicht unbegrenzt im Speicher verbleiben. Wenn ein Fehler im System auftreten sollte - der Hauptspeicher ist schliesslich "fluechtig" - wuerden Dirty Pages im Speicher, die nicht auf die Festplatte geschrieben wurden, verloren gehen. Aus diesem Grund ist das periodische Synchronisieren des Page-Caches mit der Festplatte wichtig. Beim Starten des Systems wird ein Timer initialisiert, um den pdflush-Thread aufzuwecken und die wb_kupdate()-Funktion auszufuehren. Diese Funktion schreibt alle Daten zurueck, deren Modifikation laengerals "dirty_expire_centisecs" Hundertstelsekunden in der Vergangenheit liegt. Der Timer wird dann reinitialisiert, um in "dirty_writeback_cenisecs" Hunderstel einer Sekunde wieder abzulaufen. Auf diese Weise werden die pdflush-Threads aufgewacht und schreiben alle Dirty Pages, die aelter als das angegebene Zeitlimit sind, zurueck auf die Festplatte. root kann diese Werte entweder in /proc/sys/vm aendern oder via sysctl setzen: - dirty_background_ratio: Legt die Anzahl der Pages fest, bei der die pdflush-Threads beginnen, Dirty Data zurueckzuschreiben. Der Wert wird als Prozentsatz vom gesamten Speicher angegeben. - dirty_expire_centisecs Legt fest, wie alt Daten sein muessen, um beim naechsten periodischen Aufruf des pdflush-Threads zurueckgeschrieben zu werden. Der Wert wird in Hinderstel einer Sekunde angegeben. - dirty_ratio Legt die anzahl von Pages fest, die ein Prozess erzeugen kann, bevor er beginnt, Dirty Data zurueckzuschreiben. Der Wert wird wie bei dirty_background_ratio als Prozentsatz vom gesamten Speicher angegeben.