====== RAM-Nutzung ====== * Linux benutzt freien RAM standardmäßig um * Daten die schon mal gelesen wurden zu cachen * das vermeidet das sie später noch mal von der langsameren Festplatte gelesen werden falls noch mal darauf zugegriffen wird * **Block-Cache** (Blöcke enthalten die eigentlichen Daten auf Dateisystemen) * Inodes und Verzeichnisinhalte zu cachen * das Beschleunigt das Durchsuchen und Auflisten von Verzeichnisinhalten * Inodes sind in der Regel verstreut auf der Festplatte, was das Auffinden der benötigten Informationen verlangsamt * **Inode-Cache** * Daten die auf Festplatte geschrieben werden müssen werden Zwischengespeichert * Anwendungen müssen nicht so lange warten bis die Daten wirklich geschrieben sind * Das Schreiben auf die Festplatte kann optimiert werden * aus vielen einzelnen verteilten Zugriffen kann ein mehr oder weniger sequentielles Schreiben werden -> das reduziert das Suchen/Bewegungen des Schreiblesekopfes und dadurch kann das Schreiben schneller abgeschlossen werden * **Write-Cache** Je nach Tool wird der Speicher den die Caches belegen mit in den belegten Speicher einberechnet (es sieht dann so aus als wäre gar kein/sehr wenig Speicher frei) oder als frei angezeigt (es sieht dann so aus als würde geswappt obwohl massenhaft RAM frei ist). Für ersteres ist top ein Beispiel, zweiteres wird vor allem bei Tools auf den Desktops so angezeigt. ===== Einstellungen ===== ==== Swappiness ==== Grundsätzlich sind die Caches (siehe oben) gegenüber "normalen" Speicherseiten (also solchen die durch Programme belegt werden nachrangig). Ist also nicht genügend freier RAM da werden die Caches reduziert. Je nach Einsatzszenario kann das zu drastischem Performance-Verlust führen, es ist also notwendig einen Mittelweg zu nehmen. Die Einstellung definiert die Aggressivität mit der unbenutzte Speicherseiten in den Swap ausgelagert werden. \\ Der Sinn ist Speicher für die Caches frei zu schaufeln. \\ Je nach gewünschtem Verhalten (auf Desktoprechnern wird man eher vermeiden wollen das gerade nicht genutzte Seiten ausgelagert werden, auf Servern ist eventuell der Cache wichtiger) kann man Einstellen was bevorzugt werden soll, der Cache oder das Vermeiden von Auslagern von Seiten. Auf folgenden Wegen kann die swapiness gesetzt werden: ^Weg ^Auswirkung ^ |sysctl vm.swappiness = |Sofort, bis Neustart von System| |echo > /proc/sys/vm/swappiness|Sofort, bis Neustart von System| |Eintrag in /etc/sysctl.conf vm.swappiness=|Nach Neustart des Systems, Persistent| \\ \\ Werte: \\ Größere Werte bedeuten das bevorzugt wird das geswappt wird, statt den Cache zu reduzieren. \\ Mir ist nicht ganz klar ob beliebige Werte funktionieren/ob es gleitend ist. \\ ^Wert ^Bedeutung ^ |60|Standard-Einstellung| |1|Versuche so weit wie möglich Swapping zu vermeiden| |100|Versuche die Reduzierung von Cache so weit wie möglich zu vermeiden aka. swappe wenn möglich| |0|Scheint Kernel-Abhängig verschieden zu sein, kann u.a. dazu führen, dass der Swap gar nicht mehr genutzt wird. \\ Sollte vermieden werden (da die Bedeutung eventuell verschieden ist| ===== Tools und Informationen ===== ^Wo ^Was ^ |free| @mir-6 ~ $ free -m Gesamt Belegt Frei Gemeinsam Puffer Cache Speicher: 15930 15312 618 3678 0 6876 -/+ Puffer/Cache: 8435 7495 Auslagerungsspeicher: 9999 1455 8544 Zeigt in der zweiten Zeile "-/+ Puffer/Cache:" in der ersten Spalte "Belegt" an wie viel Arbeitsspeicher "wirklich" belegt ist (wenn man den Cache abzieht/nur den durch Programme belegten Speicher betrachtet) und in der Spalte "Frei" wie viel RAM "wirklich" frei ist (wenn man den durch Cache belegten Speicher als Frei betrachtet). \\ In der obigen Ausgabe wären 8435 MB RAM belegt und 7495 MB RAM frei, wenn man den durch Cache benutzten RAM als frei betrachtet. Daraus ergibt sich (Belegt aus der ersten Zeile - Belegt aus der zweiten Zeile) dass 6636 MB durch Cache belegt sind. \\ \\ **Hinweis:** Der in der Spalte angezeigte Freie RAM nach Abzug des Caches ist unpräzise, da Teile des Caches nicht freigegeben werden können.| |top|Top zeigt bei den RAM-Werten "used" und "free" immer inklusive Cache an -> "Free" ist der Speicher der tatsächlich weder durch Cache, noch durch Programme belegt ist. \\ \\ Der Wert "cached Mem" besagt allerdings wie viel MB derzeit eigentlich für Cache benutzt werden. \\ \\ **Hinweis:** Man kann nicht einfach Cache zu Free hinzuaddieren und meinen das sei der echte zur Verfügung stehende Arbeitsspeicher, da Teile des Caches nicht freigegeben werden können.| |/proc/meminfo|Die Datei enthält eine Menge Informationen zu den Daten im RAM und im Swap und ist der einzige Ort an dem man die genaue vermutlich nutzbare RAM-Menge bekommt. \\ Interessante Werte: ^Wert ^Bedeutung ^ |MemTotal|Kompletter installierter Arbeitsspeicher| |MemFree|Freier Speicher -> durch nichts belegt| |MemAvailable|**Wichtigste Wert** Der RAM der in etwa verfügbar ist um Programmdaten zu speichern (der muss nicht frei sein, nur frei gegeben werden können). Dieser Wert ist nicht identisch mit MemFree+Cached, sondern in der Regel kleiner. \\ Nicht alles was im Cache ist kann frei gegeben werden, zum Beispiel sind tmpfs, ramfs, Teile des Kernels (nicht der Code, aber die Daten) im Cache-Wert mit einbegriffen. \\ Es handelt sich also um MemFree+Teile von Cache die freigegeben werden können|