Hallo Liste. Ich hab nochmal ne Frage dazu, wie der Linux-Kernel den Speicher und das Swap verwaltet. In meiner Maschine (Mail/DNS/DHCP/Groupware/Amavis/ClamAV...) sind 2 GB RAM verbaut. Nach sieben Tagen Uptime sieht es so aus: Mem: 2060052k total, 1043072k used, 1016980k free, 0k buffers Swap: 497972k total, 3124k used, 494848k free, 326724k cached Wie kommt die Kiste dazu, Swapspace zu nutzen, obwohl noch ein ganzes GB frei ist? Nicht daß mich das beunruhigen würde. Aber ich würde gerne die Kriterien verstehen, wann Swap genutzt wird. -- Andre Tann
Andre Tann wrote:
Ich hab nochmal ne Frage dazu, wie der Linux-Kernel den Speicher und das Swap verwaltet. [...] Wie kommt die Kiste dazu, Swapspace zu nutzen, obwohl noch ein ganzes GB frei ist? Nicht daß mich das beunruhigen würde. Aber ich würde gerne die Kriterien verstehen, wann Swap genutzt wird.
Es werden bei Dir gerade mal 3MB Swap benutzt, das ist nun wirklich nicht viel ;-) In der Tat kann der Kernel Speicherseiten auslagern statt den Cache zu verkleinern, wenn ihm das von Vorteil erscheint. Der Kernel hat ja im Prinzip zwei Moeglichkeiten, wenn der RAM vollstaendig genutzt wird: er kann den Cache verkleinern, in dem er die aeltesten Daten im Cache verwirft, oder es koennen Speicherseiten, die nur selten angesprochen werden, in den Swap-Space ausgelagert werden. Es ist natuerlich nicht so einfach, hier stets die richtige Entscheidung zu treffen - der Kernel versucht schlicht anhand der Aktivitaeten, die momentan stattfinden und vor kurzem stattgefunden haben, die Effizienz der beiden Methoden abzuwaegen. Bei aelteren Kerneln konnte man diesen Entscheidungsprozess nicht beeinflussen, was mitunter zu Performance Problemen gefuehrt hat, wenn der Kernel oefters daneben lag mit seinen Entscheidungen. Bei Kernel 2.6 hat sich das geaendert - es gibt "swapiness" (/proc/sys/vm/swappiness). Der Standardwert fuer swapiness ist 60, im Prinzip kann swapiness Werte zwischen 0 und 100 annehmen - man ahnt es schon, das hat etwas mit Prozenten zu tun und macht dem Kernel eine Vorgabe, welchen Weg er bevorzugen soll. Bei einem Wert von 100 wird der Kernel stets das Auslagern von inaktiven Speicherseiten bevorzugen. Bei einem Wert von 0 wird normalerweise der Cache verkleinert, bis er mehr oder weniger ganz verschwunden ist - das entspricht dem alten Verhalten von Kerneln <=2.4. Der Kernel hat allerdings das letzte Wort - in gewissen Situationen gehts einfach nicht anders. Falls uebrigens Speicherseiten ausgelagert wurden in den Swap und sich danach irgendwann spaeter die Speicherbelegung des Systems reduziert, werden die ausgelagerten Seiten nicht automatisch zurueck in den RAM geladen. Das geschieht wirklich erst, wenn auf die Seiten zugegriffen werden soll. So kann es passieren, dass eigentlich RAM wirklich frei ist (also auch nicht als Cache genutzt wird), trotzdem aber auch Swap-Space in Gebrauch ist. Der Cache sollte allerdings den freien Speicherbereich dann relativ schnell wieder fuellen, zumindest wenn auf dem System ein paar Aktivitaeten stattfinden. Im Prinzip kannst Du mit einem einfachen echo Befehl einen anderen Wert nach /proc/sys/vm/swappiness schreiben - aber wie immer beim Tunen des proc-Filesystems gilt, auesserst vorsichtig und umsichtig vorzugehen. HTH, Thomson
Servus Thomas. Thomas Hertweck, Montag, 15. Mai 2006 21:13:
Es werden bei Dir gerade mal 3MB Swap benutzt, das ist nun wirklich nicht viel ;-) [...]
Vielen Dank für Deine ausführliche Erläuterung. Für die Kisten, die ich normalerweise so betreibe, scheint mir Deine Erläuterung eine zutreffende Erklärung für das Swap-Verhalten zu sein. Bei der Maschine, deren Werte ich hier gepostet habe, war es aber so, daß beim Start ca. 300, 400 MB belegt waren, und dieser Wert ist dann langsam innerhalb einer Woche auf das eine GB angewachsen, das jetzt belegt ist. Auf keinen Fall liefen auf der Maschine Prozesse, die dann beendet wurden, und die erklären könnten, daß da jetzt wieder ein GB an Speicher freigeworden ist. Vielmehr ist es so, daß das GB _noch_ frei ist. Der Kernel hätte also die 3 MB Swap problemlos im RAM behalten können, ohne überhaupt irgendwas zu verkleinern, und es gab mit Sicherheit auch keinen früheren Zeitpunkt, zu dem das anders war. Vermutlich ist das eh viel zuviel Aufmerksamkeit, das hier der Swap-Aktivität zukommt. Ich habe die Maschine eben nur beobachtet, weil ich mich wunderte, daß der Speicher so langsam volläuft, trotz tausender Mails, die da am Tag durchlaufen und nach Viren gescannt werden, usw. Und dann ist der Speicher halbvoll, und die Maschine swappt. Aber wie gesagt, die Sache ist keineswegs beunruhigend, und ich will dem Kernel einfach mal vertrauen. Beunruhigender ist da schon das Amoklaufen des dhcpd. Aber da hatte ich ja einen anderen Thread aufgemacht. Viele Grüße! -- Andre Tann
Hallo, Am Mon, 15 Mai 2006, Thomas Hertweck schrieb:
Bei Kernel 2.6 hat sich das geaendert - es gibt "swapiness" (/proc/sys/vm/swappiness). [..] Bei einem Wert von 0 wird normalerweise der Cache verkleinert, bis er mehr oder weniger ganz verschwunden ist - das entspricht dem alten Verhalten von Kerneln <=2.4.
Noe. :) $ uname -r 2.4.25-1l $ free total used free shared buffers cached Mem: 321136 317016 4120 0 5764 172300 -/+ buffers/cache: 138952 182184 Swap: 1060272 47212 1013060 Ein bisserl cleverer sind die Kernel <= 2.4 schon ;) -dnh -- So Linus, what are we doing tonight? The same thing we do every night Tux. Try to take over the world!
David Haller wrote:
Am Mon, 15 Mai 2006, Thomas Hertweck schrieb:
Bei Kernel 2.6 hat sich das geaendert - es gibt "swapiness" (/proc/sys/vm/swappiness). [..] Bei einem Wert von 0 wird normalerweise der Cache verkleinert, bis er mehr oder weniger ganz verschwunden ist - das entspricht dem alten Verhalten von Kerneln <=2.4.
Noe. :)
$ uname -r 2.4.25-1l $ free total used free shared buffers cached Mem: 321136 317016 4120 0 5764 172300 -/+ buffers/cache: 138952 182184 Swap: 1060272 47212 1013060
Ein bisserl cleverer sind die Kernel <= 2.4 schon ;)
Deswegen schrieb ich ja "mehr oder weniger". Bei Dir ist es halt weniger ;-) Nun ja, evtl. habe ich da auch einen Bug in meinem Verstaendnis, was die 0 angeht. Muesste ich mich nochmal genauer schlau machen. Wenn Du es schaffst, diese ganze komplexe Materie in noch einfacherere und fuer Otto-Normalbuerger verstaendlichere Worte als die meinen zu packen (dabei habe ich mich echt bemueht *snief*), dann nur her damit... Ich bin schliesslich auch kein Kernel-Hacker ;-) Cheers, Th.
Hallo, Am Die, 16 Mai 2006, Thomas Hertweck schrieb: [..]
Deswegen schrieb ich ja "mehr oder weniger". Bei Dir ist es halt weniger ;-) Nun ja, evtl. habe ich da auch einen Bug in meinem Verstaendnis, was die 0 angeht. Muesste ich mich nochmal genauer schlau machen. Wenn Du es schaffst, diese ganze komplexe Materie in noch einfacherere und fuer Otto-Normalbuerger verstaendlichere Worte als die meinen zu packen (dabei habe ich mich echt bemueht *snief*), dann nur her damit... Ich bin schliesslich auch kein Kernel-Hacker ;-)
*g* Ich auch nicht. Bzw. habe ich mir weder den VM-Code noch dessen Doku noch die Diskussionen ueber die verschiedenen VM-Varianten je wirklich angeschaut... Mir reicht es zu wissen, dass die Strategien von 2.2 und 2.4 fuer mich allemal clever und praxistauglich genug sind, und dass es bei 2.6 noch besser konfigurierbar ist. Aber auch bei 2.4 (und frueher) war das Verhalten (teilweise) konfigurierbar. Siehe auch Documentation/filesystems/proc.txt eines 2.4.x Kernels. Jedenfalls ist das Verhalten bzgl. swap vs. buffers/cache, was ich hier mit 2.4.25 beobachte fuer mich ziemlich gut, d.h. ganz gut passend zu dem was ich brauche. -dnh -- So etwas habe Ich mir schon gedacht. aber da das zuendeführen dieses Gedanken mir zu anstrengend war, habe Ich an dieser Stelle aufgehöhrt zu denken. [Woko° in dag°]
participants (3)
-
Andre Tann
-
David Haller
-
Thomas Hertweck