Jak obliczany jest wynik oom jądra?

12

Spojrzał na Google i nie mógł znaleźć niczego, co wyjaśniałoby sposób proc/<pid>/oom_scoreobliczania wyniku. Dlaczego warto korzystać z tego wyniku, a nie tylko zużywać całą pamięć?

James Kingsbery
źródło

Odpowiedzi:

18

Zobacz artykuł Goldwyn Rodrigues z 2009 r. Na temat implementacji w tamtym czasie, artykuł Jonathana Corbeta z 2010 r. Dla tego, co według mnie jest obecnym zachowaniem, oraz artykuł Jonathana Corbeta z 2013 r., Zawierający pomysły na temat przyszłych zmian.

Z artykułu z 2010 r .:

W zestawie łat Davida stare heurystyki złych () prawie zniknęły. Zamiast tego obliczenia stają się prostym pytaniem, jaki procent dostępnej pamięci jest wykorzystywany przez proces. Jeśli w całym systemie brakuje pamięci, wówczas „dostępna pamięć” jest sumą całej pamięci RAM i przestrzeni wymiany dostępnej dla systemu. Jeżeli zamiast tego sytuacja OOM jest spowodowana wyczerpaniem pamięci dozwolonej dla danego zestawu procesorów / grupy kontrolnej, wówczas „dostępna pamięć” jest całkowitą ilością przydzieloną tej grupie kontrolnej. Podobne obliczenia wykonuje się, jeśli przekroczone zostaną ograniczenia nałożone przez zasady pamięci. W każdym przypadku użycie pamięci przez proces jest uważane za sumę jego zestawu rezydentnego (liczby stron pamięci RAM, z których korzysta) i zużycia wymiany.

W wyniku tych obliczeń powstaje liczba procent razy dziesięć; proces, który wykorzystuje każdy dostępny bajt pamięci, będzie miał wynik 1000, podczas gdy proces bez pamięci w ogóle uzyska wynik zero. Jest bardzo niewiele poprawek heurystycznych w tym wyniku, ale kod wciąż odejmuje niewielką ilość (30) od wyniku procesów będących własnością root, uważając, że są one nieco bardziej wartościowe niż procesy należące do użytkownika.

Kolejną poprawką, która jest stosowana, jest dodanie wartości przechowywanej w zmiennej oom_score_adj każdego procesu, którą można dostosować za pomocą / proc. To pokrętło pozwala dostosować atrakcyjność każdego procesu do zabójcy OOM w przestrzeni użytkownika; ustawienie go na -1000 całkowicie wyłączy zabójstwa OOM, natomiast ustawienie na +1000 jest odpowiednikiem malowania dużego celu na powiązanym procesie.

Sciurus
źródło
Czy wszystkie procesy mogą mieć wynik 0 oom? Obecnie powoduje to uruchomienie dysku CD na żywo.
CMCDragonkai,