Wohin geht der verbleibende Speicher von vm.overcommit_ratio?

10

Wenn ich deaktivieren Speicher overcommit indem vm.overcommit_memoryauf 2, standardmäßig wird das System erlauben, den Speicher zuweisen auf die Dimension von Swap + 50% des physischen Speichers auf, erklärt , wie hier .

Ich kann das Verhältnis ändern, indem ich den vm.overcommit_ratioParameter ändere . Angenommen, ich habe 80% festgelegt, damit 80% des physischen Speichers verwendet werden können.

Meine Frage ist:

  • Was macht das System mit den restlichen 20%?
  • Warum ist dieser Parameter überhaupt erforderlich?
  • warum sollte ich es nicht immer auf 100% setzen?
Dan Tumaykin
quelle

Antworten:

6

Was macht das System mit den restlichen 20%?

Der Kernel verwendet den verbleibenden physischen Speicher für seine eigenen Zwecke (interne Strukturen, Tabellen, Puffer, Caches usw.). Die Einstellung für Speicherüberbelegung behandelt Reservierungen für den virtuellen Speicher der Userland-Anwendung. Der Kernel verwendet keinen virtuellen, sondern einen physischen Speicher.

Warum ist dieser Parameter überhaupt erforderlich?

Der overcommit_ratioParameter ist eine Implementierungsoption, die verhindern soll, dass Anwendungen mehr virtuellen Speicher reservieren, als für sie in Zukunft vernünftigerweise verfügbar sein wird, dh wenn sie tatsächlich auf den Speicher zugreifen (oder dies zumindest versuchen).

Die Einstellung overcommit_ratioauf 50% wurde von den Linux-Kernel-Entwicklern als angemessener Standardwert angesehen. Es wird davon ausgegangen, dass der Kernel niemals mehr als 50% des physischen Arbeitsspeichers verwenden muss. Ihr Kilometerstand kann variieren, der Grund, warum er abstimmbar ist.

Warum sollte ich es nicht immer auf 100% setzen?

Wenn Sie den Wert auf 100% (oder einen "zu hohen" Wert) setzen, wird die Überbindung nicht zuverlässig deaktiviert, da Sie nicht davon ausgehen können, dass der Kernel 0% (oder zu wenig) RAM verwendet.

Es wird nicht verhindern, dass Anwendungen abstürzen, da der Kernel möglicherweise ohnehin den gesamten erforderlichen physischen Speicher verhindert.

jlliagre
quelle
Wenn der Kernel ohnehin den gesamten benötigten Speicher belegen kann, wozu wird dieser Parameter dann verfügbar gemacht (oder sogar erstellt)?
Dan Tumaykin
Gibt es ein offizielles Dokument, in dem diese Parameter ausführlich erläutert werden? Neben kernel.org/doc/Documentation/vm/overcommit-accounting fehlt dort jeglicher Verweis auf den Kernelspeicher.
Dan Tumaykin
1
Ich habe noch keine Dokumentation gefunden, die mit genügend Details erklärt, was genau berücksichtigt wird, wenn auf "Total Address Space Commit" verwiesen wird. Die Tatsache, dass das Dokument, das Sie mit einem Link versehen, besagt, dass "in den meisten Situationen bedeutet dies, dass ein Prozess nicht abgebrochen wird ...", reicht jedoch aus, um zu bestätigen, dass ein Teil des Speichers an anderer Stelle verwendet werden kann, und der offensichtliche Verbraucher für diesen Speicher ist der Kernel.
11.
2

Wenn Sie das Verhältnis auf 100% einstellen, wird kein Speicherplatz für dateibasierte Seiten oder kerninterne Zuordnungen wie Kernelcode, Netzwerkpuffer usw. reserviert.

In-Kernel-Strukturen werden unabhängig davon zugewiesen, was zu einer Überbindung führt. Sie sind im Allgemeinen individuell begrenzt (z. B. gibt es eine Einstellung für Netzwerkpuffer). Ich glaube nicht, dass es ein Gesamtlimit von 50% gibt, obwohl an einem Gesamtlimit gearbeitet wurde, um Container zu hosten.

Auf dateibasierten Seiten führen Sie normalerweise Userspace-Code aus, daher benötigen Sie auch dafür Speicherplatz.

sourcejedi
quelle