Wie wird der Kernel-OOM-Score berechnet?

12

Hat bei Google nachgeschaut und konnte nichts finden, was die proc/<pid>/oom_scoreBerechnung der Punktzahl erklärt . Warum diese Punktzahl verwenden, anstatt nur den gesamten verwendeten Speicher zu verwenden?

James Kingsbery
quelle

Antworten:

18

Lesen Sie den Artikel von Goldwyn Rodrigues aus dem Jahr 2009 über die damalige Implementierung, den Artikel von Jonathan Corbet aus dem Jahr 2010 über das derzeitige Verhalten und den Artikel von Jonathan Corbet aus dem Jahr 2013 über Ideen für zukünftige Änderungen.

Aus dem Artikel 2010:

In Davids Patch-Set sind die alten Badness () -Heuristiken fast vollständig verschwunden. Stattdessen wird die Berechnung zu einer einfachen Frage, wie viel Prozent des verfügbaren Speichers vom Prozess verwendet werden. Wenn das System insgesamt nicht genügend Arbeitsspeicher hat, ist "Verfügbarer Arbeitsspeicher" die Summe aller für das System verfügbaren RAM- und Auslagerungsspeicher. Wenn die OOM-Situation stattdessen durch Erschöpfung des für eine bestimmte CPU-Gruppe / Kontrollgruppe zulässigen Speichers verursacht wird, ist "verfügbarer Speicher" die dieser Kontrollgruppe zugewiesene Gesamtmenge. Eine ähnliche Berechnung wird durchgeführt, wenn die durch eine Speicherrichtlinie auferlegten Grenzwerte überschritten wurden. In jedem Fall wird die Speichernutzung des Prozesses als die Summe seiner residenten Menge (der Anzahl der verwendeten RAM-Seiten) und seiner Auslagerungsnutzung angesehen.

Diese Berechnung ergibt eine Prozent-mal-Zehn-Zahl. Ein Prozess, der jedes Byte des ihm zur Verfügung stehenden Speichers verwendet, hat eine Punktzahl von 1000, während ein Prozess, der überhaupt keinen Speicher verwendet, eine Punktzahl von Null erhält. Es gibt nur sehr wenige heuristische Änderungen an dieser Bewertung, aber der Code subtrahiert immer noch einen kleinen Betrag (30) von der Bewertung von Prozessen, die sich im Stammbesitz befinden, und geht davon aus, dass sie etwas wertvoller sind als Prozesse, die sich im Besitz des Benutzers befinden.

Eine weitere Optimierung besteht darin, den in der Variablen oom_score_adj jedes Prozesses gespeicherten Wert hinzuzufügen, der über / proc angepasst werden kann. Mit diesem Knopf können Sie die Attraktivität jedes Prozesses für den OOM-Killer im Benutzerbereich einstellen. Wenn Sie den Wert auf -1000 setzen, werden OOM-Kills vollständig deaktiviert, während der Wert +1000 dem Zeichnen eines großen Ziels auf dem zugeordneten Prozess entspricht.

Sciurus
quelle
Ist es möglich, dass alle Prozesse einen Wert von 0 oom haben? Momentan führt das Booten von einer Live-CD dazu.
CMCDragonkai