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