Output von free und sync

Hi,

folgendes listing erzeugt bei mir gerade Fragezeichen:

Code:
mathias@mini:~$ free
             total       used       free     shared    buffers     cached
Mem:       2765756    1454552    1311204          0     150716     674532
-/+ buffers/cache:     629304    2136452
Swap:      5859364          0    5859364
mathias@mini:~$ sync && free
             total       used       free     shared    buffers     cached
Mem:       2765756    1454508    1311248          0     150728     674528
-/+ buffers/cache:     629252    2136504
Swap:      5859364          0    5859364
mathias@mini:~$ sync && free
             total       used       free     shared    buffers     cached
Mem:       2765756    1454556    1311200          0     150732     674528
-/+ buffers/cache:     629296    2136460
Swap:      5859364          0    5859364
mathias@mini:~$ sync && free
             total       used       free     shared    buffers     cached
Mem:       2765756    1454540    1311216          0     150740     674524
-/+ buffers/cache:     629276    2136480
Swap:      5859364          0    5859364
mathias@mini:~$

Die "buffers" Spalte zeigt ja die Benutzung von Kernel Buffern an und "sync" sorgt doch dafür, dass der Buffer Cache auf die Platte geschrieben wird - richtig? Wenn ja, warum steigt dann mit jedem "sync" der Wert in der "buffers" Spalte? Ergibt das Sinn?

cu
serow
 
Es handelt sich hierbei nicht um einen Buffer für auf die Platte zu schreibende Daten, sondern um Daten, welche in weiser Voraussicht im RAM belassen wurden. Wenn ich das noch richtig in Erinnerung habe, werden z. B. Inodes von "eventuell bald zu gebrauchenden" Dateien in diesem Bereich gespeichert.
 
Der Kernel-Buffer umfasst ja einiges mehr als nur den Festplatten-Cache. Auch Netzwerk-Cache, Liste von geladenen Dateien/Bibliotheken, Tastaturbuffer usw. fallen in den Kernel-Buffer-Bereich.
 
Okay, in der man page steht aber
Zitat: buffers used by the kernel
wozu meine Meinung nach auch der Buffer Cache gehört - aber gut. Wo hast du die Info dann her? Hab das so noch nie gelesen.

Vorweg möchte ich sagen, dass ich keine korrekte Erklärung abgeben kann, folgend also lediglich meine Interpretation der mir bekannten Informationen zu diesen Vorgängen;
Mir wurde mal erklärt, dass für den Eintrag "buffers" von free zwei Funktionen verantwortlich sind: Der page cache und die dentries (Informationen zu Inodes welche häufig abgerufen werden - mir entgeht der Sinn, sollten diese Informationen auf der Festplatte (mit Ausnahme dem SWAP-Space) gespeichert werden). Der page cache beinhaltet Daten auf welche kürzlich zugegriffen wurde, auch wenn die Daten aktuell von keinem Prozess verwendet werden. Wird dann eine Lese- oder Schreib-Operation von einem Programm gefordert, wird zuerst geprüft, ob sich die Daten nicht eventuell schon im page cache befinden. Mal abgesehen von "dirty pages" (pages welche "reif" für den swap sind) werden die Daten aus dem page cache nur auf die Festplatte geschrieben, wenn dies ausdrücklich von einem Programm welches mit den Daten arbeitet verlangt wurde.
Der page cache beinhaltet also keine "wichtigen" Daten - die Daten im page cache können verlohren gehen ohne dass irgend ein Datenverlust auf der Festplatte entsteht. Diese Geschichten werden durch den Kernel verwaltet, das ist korrekt. Mir ist nicht bekannt, ob sonst bei diesen Vorgängen etwas auf die Platte ausgelagert wird (abgesehen vom swapping).

Was verstehst du denn unter "dem Buffer Cache"? Etwa den Festplatten-Cache? Auf diesen wirkt sich in der Tat sync aus. Dieser ist direkt auf der Festplatte verbaut, wird aber nicht in die Berechnung von free mit einbezogen.

Zu dem Phänomen, dass der buffers-Wert steigt, wenn du sync && free ausführst, fällt mir nur folgende, mögliche Erklärung ein: Durch sync werden irgend welche neuen Daten in den page cache aufgenommen. Eventuell wird das generell erst nach einem sync gemacht, das ist allerdings nichts weiter wie eine Möglichkeit, Vermutung wäre schon zuviel.

Übrigens, mittels folgenden Kommandos kannst du den page cache bzw. den dentry cache leeren:
echo 1 > /proc/sys/vm/drop_caches # leert page cache
echo 2 > /proc/sys/vm/drop_caches # löscht dentries
echo 3 > /proc/sys/vm/drop_caches # beides

Allerdings ist das Speichermanagement eine Sache, welche du getrost dem Betriebssystem überlassen kannst. Wenn mehr Speicher benötigt wird, als wirklich frei ist, wird eben auch vorher von page cache / dentries belegter Speicher verwendet.

Ich hoffe meine Erklärung ist verständlich und auch halbwegs richtig (trotz inzwischen 29 Stunden ohne schlaf). Ich würde mich freuen, wenn jemand etwas wirklich fundiertes zu dem Thema wüsste (bitmuncher? ;-)). Die Frage, ob sich sync verringernd auf den "buffers"-Wert auswirkt, kann ich nicht eindeutig verneinen. Fakt ist, dass mehrere Prozesse einen Einfluss auf diesen Wert haben.
 
Original von little_Newbie
Was verstehst du denn unter "dem Buffer Cache"? Etwa den Festplatten-Cache? Auf diesen wirkt sich in der Tat sync aus. Dieser ist direkt auf der Festplatte verbaut, wird aber nicht in die Berechnung von free mit einbezogen.
Der Festplatten-Cache wird sehr wohl in den free-Werten (bzw. dessen Buffer-Feld) einbezogen. Linux verwendet verfuegbaren RAM als HDD-Cache und dieser gerade verwendete Cache wird ueblicherweise bei free in die Buffer-Berechnung aufgenommen. Dieser HDD-Cache ist auch unabhaengig vom hardwareseitigen Cache, der wiederum durch voellig andere Routinen gehandhabt wird, naemlich innerhalb der HDD-Treiber, waehrend der "abgezweigte" RAM fuer den HDD-Cache in den Dateisystem-Treibern implementiert ist.
 
So hatte ich es auch in Erinnerung. Wenn ich "Buffer Cache" sage meine ich immer den von Linux verwalteten HDD cache.

Aber wie lässt sich dann der steigende buffer Wert erklären?

cu
serow
 
Zurück
Oben