/proc/sys/vm

/proc/sys/vm/buffermem

Steuert die Menge an Speicher der als Puffer-Speicher (buffer memory) genutzt wird.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: 0 bis 100
Position 1: Minimaler Pufferspeicher in Prozent des Systemspeichers
Position 2: Größe des Pufferspeichers, die das System versucht bei zubehalten, wenn der Systemspeicher aufgrund von fehlenden freien Speichers verkleinert wird
Position 3: Maximaler Pufferspeicher in Prozent des Systemspeichers

/proc/sys/vm/dirty_*

/proc/sys/vm/dirty_background_bytes

Menge des gesamten verfügbaren Speicher (MemFree + Cached - Mapped) in dem Schreiboperationen zwischengespeichert werden können, ehe sie von einem Flusher-Prozess des Kernels im Hintergrund auf Platte zurück geschrieben werden.

dirty_background_bytes ist das Gegenstück zu dirty_background_ratio. Nur eine von beiden Einstellungen kann aktiv sein. Das Setzen des einen Wertes setzt den anderen Wert automatisch auf 0.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: ab 0

Änderungen setzen dirty_background_ratio auf 0

/proc/sys/vm/dirty_background_ratio

Prozentsatz des gesamten verfügbaren Speichers (MemFree + Cached - Mapped) in dem Schreiboperationen zwischengespeichert werden können, ehe sie von einem Flusher-Prozeß des Kernels im Hintergrund auf Platte zurück geschrieben werden.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: 0 bis 100

Änderungen setzen dirty_background_bytes auf 0

/proc/sys/vm/dirty_bytes

Menge des gesamten verfügbaren Speicher (MemFree + Cached - Mapped) in dem Schreiboperationen zwischengespeichert werden kann, ehe die Prozesse gezwungen werden den Puffer in der ihnen zugeteilten Zeit auf Platte zu schreiben.

Wenn dies passiert, werden alle Prozesse mit Write-Operationen angehalten und nicht bloß der Prozess, der den Puffer füllte. Dieses Verhalten kann unfair sein, den ein Prozeß kann den gesamten IO des Systems blockieren.

dirty_bytes ist das Gegenstück zu dirty_ratio. Nur eine von beiden Einstellungen kann aktiv sein. Das Setzen des einen Wertes setzt den anderen Wert automatisch auf 0.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: ab 0

Änderungen setzen dirty_ratio auf 0

/proc/sys/vm/dirty_ratio

Prozentsatz des gesamten verfügbaren Speicher (MemFree + Cached - Mapped) in dem Schreiboperationen zwischengespeichert werden kann, ehe die Prozesse gezwungen werden den Puffer in der ihnen zugeteilten Zeit auf Platte zu schreiben.

Wenn dies passiert, werden alle Prozesse mit Write-Operationen angehalten und nicht bloß der Prozess, der den Puffer füllte. Dieses Verhalten kann unfair sein, den ein Prozess kann den gesamten IO des Systems blockieren.

dirty_bytes ist das Gegenstück zu dirty_ratio. Nur eine von beiden Einstellungen kann aktiv sein. Das Setzen des einen Wertes setzt den anderen Wert automatisch auf 0.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: ab 0

Änderungen setzen dirty_bytes auf 0

/proc/sys/vm/dirty_expire_centisecs

Das Alter der Daten in hundertstel Sekunden, ab dem die Daten beim nächsten Lauf des Flusher-Prozess auf die Platte geschrieben werden.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: größer 0

/proc/sys/vm/dirty_writeback_centisecs

Der Flusher-Prozess weckt regelmäßig auf um alte Daten zurückzuschreiben. Mit dieser Einstellung lässt sich der Aufweckintervall in hundertstel Sekunden angeben.

Der Wert 0 deaktiviert das periodische Zurückschreiben der Daten.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: ab 0

Weiterführende Informationen

vm.dirty_ratio and vm.dirty_background_ratio

http://www.sysxperts.com/home/announce/vmdirtyratioandvmdirtybackgroundratio ([attachment:dirty_ratio_and_dirty_background_ratio.pdf als PDF])

The Linux Page Cache and pdflush - Theory of Operation and Tuning for Write-Heavy Loads

http://www.westnet.com/~gsmith/content/linux-pdflush.htm ([attachment:The_Linux_Page_Cache_and_pdflush.pdf als PDF])

Linux-Kernel-Dokumentation

linux/Documentation/sysctl/vm.txt

/proc/sys/vm/drop_caches

Über drop_caches wird der Kernel angewiesen nicht mehr benötigte Teile des Caches zu verwerfen und so Hauptspeicher freizugeben. Dieser Aufruf ist nicht-zerstörend d.h. als "dirty" markierte Objekte werden nicht verworfen. Mit dem Aufruf von sync können "schmutzige" Objekte vorher noch geschrieben werden.

Auf Systemen mit hoher IO-Last und Speicherauslastung können Deadlock-Situationen auftreten. Ein Aufruf auf derartigen Systemen ist nicht empfohlen.

Charakteristik
Dynamisch änderbar: Ja
Kernelversion: seit 2.6.16
Wertebereich: 1 bis 3
1: Pagecache freigeben
2: Dentries und Inodes freigeben
3: Pagecache, Dentries und Inodes freigeben

Beispiel: Cache leeren

# free
             total       used       free     shared    buffers     cached
Mem:       7886768    1070272    6816496          0     209072     664028
-/+ buffers/cache:     197172    7689596
Swap:      7815612          0    7815612

# echo 3 > /proc/sys/vm/drop_caches

# free
             total       used       free     shared    buffers     cached
Mem:       7886768     203632    7683136          0        220      39460
-/+ buffers/cache:     163952    7722816
Swap:      7815612          0    7815612

/proc/sys/vm/max_map_count

Dieser Eintrag enthält die maximale Anzahl von Virtual Memory Areas (VMAs) eines Prozesses. VMAs entstehen bei der Bereitstellung von Speicher via malloc, mmap und mprotect sowie wenn Shared Libraries geladen werden.

Die meisten Anwendungen benötigen weniger als 1000 VMAs. Gewisse Programme im speziellen Malloc-Debugger benötigen sehr viele VMAs.

Charakteristik
Dynamisch änderbar: Ja
Standard: 65536

/proc/sys/vm/overcommit_memory

Über die Dateien overcommit_memory und overcommit_ratio lässt sich das Überbuchen des Speichers steuern.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: 0 bis 2
Standard: 0

0: Heuristisches Verfahren um sinnvolle Anforderungen zu zulassen und übermäßige Anforderungen abzulehnen. Dies kann dazu führen, dass mehr Speicher ausgereicht wird, als vorhanden ist.

1: Überbuchen ist immer zulässig

2: Überbuchungen im Rahmen des mit overcommit_ratio festgelegten Speichers immer zulassen

Weiterführende Informationen

linux/Documentation/filesystems/proc.txt

linux/Documentation/sysctl/vm.txt

linux/Documentation/vm/overcommit-accounting

Performance Tuning Guide - https://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/index.html

/proc/sys/vm/overcommit_ratio

Mit overcommit_ratio lässt sich die Gesamtsumme des allokierbaren Speichers festlegen.

Memory Allocation Limit = Swap Space + physischer Speicher * (overcommit_ratio / 100)

Beispiel: Kein Überbuchen des Speichers

# head /proc/sys/vm/overcommit*
==> /proc/sys/vm/overcommit_memory <==
2

==> /proc/sys/vm/overcommit_ratio <==
50

# free -k
             total       used       free     shared    buffers     cached
Mem:       2958856     242384    2716472          0      37472     166100
-/+ buffers/cache:      38812    2920044
Swap:      1953116          0    1953116

# echo "2958856 * 0.5 + 1953116" | bc
3432544.0

# grep CommitLimit /proc/meminfo
CommitLimit:   3432544 kB

Der manuell errechnete Wert von 343254 kB stimmt mit dem Commit-Limit des Kernels über ein.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: größer 0

/proc/sys/vm/pagecache

Arbeitet analog /proc/sys/vm/buffermem für memory mapping und generisches Cachen von Dateien.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: größer 0

/proc/sys/vm/panic_on_oom

Steuert, ob eine Kernel Panic ausgelöst wird, wenn kein Speicher mehr verfügbar ist.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: 0 oder 1
0: keine Kernel Panic, wenn kein Speicher mehr verfügbar ist
1: Kernel Panic, wenn kein Speicher mehr verfügbar ist

/proc/sys/vm/swappiness

Die 2.6er-Kernelreihe beinhaltet die Möglichkeit zu beeinflussen, inwieweit Linux es vorzieht Prozesse und Daten auf die Festplatte auszulagern (Swapping), anstatt die Caches zu verkleinern, wenn der freie Speicher zur Neige geht.

Wenn eine Anwendung Speicher benötigt, der Speicher jedoch bereits vollkommen belegt ist, hat der Kernel zwei Möglichkeiten um Speicher freizuschaufeln und der Anwendung zur Verfügung zu stellen. Entweder kann Linux den "Disk Cache" im Speicher verkleinern, indem es vorrangig die ältesten Daten löscht, oder es kann weniger benutzte Teile von Programmen (Speicherseiten) auf die Swappartition auf der Festplatte auslagern. Es ist durchaus nicht einfach vorauszusagen, welche der beiden Methoden im Einzelfall die effizientere ist. Der Kernel fällt die Entscheidung, indem er anhand vorhergegangener Aktivitäten versucht die zu erwartende Effektivität der beiden Herangehensweisen grob abzuschätzen.

Die Swappiness kann Werte zwischen 0 und 100 annehmen um das Verhältnis zwischen dem Auslagern von Anwendungen und der Verkleinerung des Caches zu verändern. Bei 100 wird der Kernel stets bevorzugt nach inaktiven Anwendungen Ausschau halten und diese auslagern. Ein Wert von 0 ergibt etwas in der Nähe des ursprünglichen Verhaltens, wobei Anwendungen die Speicher benötigten den Cache bis zu einem sehr kleinen Anteil am Gesamtspeicher schrumpfen konnten. Für Laptops, bei denen die Festplatte wünschenswerterweise in den Schlafmodus übergehen sollte, ist folglich ein Wert von 20 oder weniger empfehlenswert.

Charakteristik
Dynamisch änderbar: Ja
Wertebereich: 0 - 100
Standard: 60

Weiterführende Informationen

Linux Speichermanagement

http://wiki.debianforum.de/LinuxSpeichermanagement

Deutsche Übersetzung von http://gentoo-wiki.info/FAQ_Linux_Memory_Management

proc/sys/vm (zuletzt geändert am 2018-03-27 08:41:32 durch x4db07d2f)