Gdzie idzie pozostała pamięć vm.overcommit_ratio?

10

Jeśli wyłączę nadmierną pamięć, ustawiając vm.overcommit_memoryna 2, domyślnie system pozwoli na alokację pamięci do wymiaru wymiany + 50% pamięci fizycznej, jak wyjaśniono tutaj .

Mogę zmienić współczynnik, modyfikując vm.overcommit_ratioparametr. Powiedzmy, że ustawiłem go na 80%, więc można wykorzystać 80% pamięci fizycznej.

Moje pytanie brzmi:

  • co zrobi system z pozostałymi 20%?
  • dlaczego ten parametr jest wymagany w pierwszej kolejności?
  • dlaczego nie powinienem zawsze ustawiać na 100%?
Dan Tumaykin
źródło

Odpowiedzi:

6

Co zrobi system z pozostałymi 20%?

Jądro wykorzysta pozostałą pamięć fizyczną do własnych celów (struktury wewnętrzne, tabele, bufory, pamięci podręczne itp.). Ustawienie nadmiernego zaangażowania pamięci obsługuje rezerwacje pamięci wirtualnej aplikacji użytkownika, jądro nie używa pamięci wirtualnej, ale fizycznej.

Dlaczego ten parametr jest wymagany w pierwszej kolejności?

Ten overcommit_ratioparametr jest wyborem implementacji zaprojektowanym w celu uniemożliwienia aplikacjom zarezerwowania większej ilości pamięci wirtualnej niż to, co będzie dla nich rozsądnie dostępne w przyszłości, tj. Kiedy faktycznie uzyskają dostęp do pamięci (lub przynajmniej spróbują).

Ustawienie overcommit_ratio50% zostało uznane przez programistów jądra Linux za rozsądną wartość domyślną. Zakłada, że ​​jądro nigdy nie będzie potrzebowało więcej niż 50% fizycznej pamięci RAM. Twój przebieg może się różnić, powód, dla którego można go przestrajać.

Dlaczego nie powinienem zawsze ustawiać na 100%?

Ustawienie go na 100% (lub jakąkolwiek „zbyt wysoką” wartość) nie wyłącza niezawodnie nadmiernego zaangażowania, ponieważ nie można zakładać, że jądro zużyje 0% (lub zbyt mało) pamięci RAM.

Nie zapobiegnie to awariom aplikacji, ponieważ jądro i tak może wyprzedzić całą wymaganą pamięć fizyczną.

jlliagre
źródło
Jeśli jądro i tak może zabrać całą potrzebną pamięć, po co ujawniać ten parametr (a nawet go tworzyć)?
Dan Tumaykin
Czy istnieje jakiś oficjalny dokument, w którym szczegółowo wyjaśniono te parametry? Oprócz kernel.org/doc/Documentation/vm/overcommit-accounting - brakuje tam jakiegokolwiek odniesienia do pamięci jądra.
Dan Tumaykin
1
Nie znalazłem jeszcze dokumentacji wyjaśniającej z wystarczającą ilością szczegółów, co jest dokładnie brane pod uwagę w odniesieniu do „całkowitego zatwierdzenia przestrzeni adresowej”. Fakt, że dokument, który podajesz odsyłacz do stwierdza, „w większości sytuacji oznacza to, że proces nie zostanie zabity ...” jest jednak wystarczający do potwierdzenia, że ​​pewna pamięć może być używana gdzie indziej, a oczywistym konsumentem dla tej pamięci jest jądro.
jlliagre
2

Ustawienie współczynnika na 100% nie zarezerwuje miejsca na strony z kopiami plików ani na przydziały w jądrze, takie jak kod jądra, bufory sieciowe itp.

Struktury wewnątrz jądra będą przydzielane niezależnie, powodując nadmierne zaangażowanie. Są one generalnie ograniczone indywidualnie (np. Istnieje ustawienie buforów sieciowych). Nie sądzę, że istnieje ogólny limit 50%, chociaż ogólny limit został opracowany w celu hostingu kontenerów.

Strony z kopiami plików to miejsce, z którego zwykle uruchamiasz kod przestrzeni użytkownika, więc potrzebujesz na to również miejsca.

sourcejedi
źródło