Dlaczego zamiana domyślnie ustawiona jest na 60?

109

Właśnie przeczytałem kilka rzeczy na temat zamiany w systemie Linux. Nie rozumiem, dlaczego wartością domyślną jest 60.

Według mnie ten parametr powinien być ustawiony na 10 w celu ograniczenia zamiany. Swap jest na moich dyskach twardych, więc jest znacznie wolniejszy niż pamięć.

Dlaczego tak skonfigurowali jądro?

Hugo
źródło
2
@Mat Zobacz to, jak przeprowadzić analizę porównawczą swapiness.
Geremia

Odpowiedzi:

133

Ponieważ jądro 2.6.28, Linux używa Splitu najdawniej używany (LRU) Strona strategia wymiana. Strony ze źródłem systemu plików, takim jak tekst programu lub biblioteki współdzielone, należą do pamięci podręcznej plików. Strony bez kopii zapasowej systemu plików są nazywane stronami anonimowymi i składają się z danych wykonawczych, takich jak przestrzeń stosu zarezerwowana dla aplikacji itp. Zazwyczaj strony należące do pamięci podręcznej plików są tańsze do eksmisji z pamięci (ponieważ można je w razie potrzeby łatwo odczytać z dysku) . Ponieważ anonimowe strony nie mają kopii zapasowej systemu plików, muszą pozostać w pamięci tak długo, jak są potrzebne programowi, chyba że jest tam miejsce do ich wymiany.

Jest powszechnym błędnym przekonaniem, że partycja wymiany w jakiś sposób spowolniłaby twój system. Brak partycji wymiany nie oznacza, że ​​jądro nie będzie eksmitować stron z pamięci, to po prostu oznacza, że ​​jądro ma mniej możliwości wyboru stron do eksmisji. Ilość dostępnych zamian nie wpłynie na to, ile zostanie wykorzystana.

Linux może poradzić sobie z brakiem przestrzeni wymiany, ponieważ domyślnie zasady rozliczania pamięci jądra mogą przeciążać pamięć . Minusem jest to, że gdy pamięć fizyczna jest wyczerpany, a jądro nie może zamienić anonimowych stron na dysku, out-of-memory-zabójcy (OOM-zabójcy) mechanizm zacznie zabijając pamięci wyginanie procesów „zbójeckie”, aby zwolnić pamięć inne procesy.

vm.swappinessOpcja jest modyfikator, który zmienia równowagę między wymieniając stron cache plik na rzecz anonimowych stron. Pamięć podręczna plików ma dowolną wartość priorytetu 200, od której vm.swappinessodejmuje się modyfikator ( file_prio=200-vm.swappiness). Strony anonimowe domyślnie zaczynają się od 60 ( anon_prio=vm.swappiness). Oznacza to, że domyślnie wagi priorytetowe są umiarkowanie korzystne dla anonimowych stron ( anon_prio=60, file_prio=200-60=140). Zachowanie jest zdefiniowane w mm/vmscan.cdrzewie źródeł jądra.

Biorąc pod uwagę vm.swappinessz 100priorytety byłyby równe ( file_prio=200-100=100, anon_prio=100). Byłoby to sensowne dla systemu z dużymi wejściami / wyjściami, gdyby nie było konieczne, aby strony z pamięci podręcznej plików były eksmitowane na rzecz anonimowych stron.

Odwrotnie ustawienie vm.swappinessdo 0uniemożliwi jądro od eksmisji anonimowych stron na korzyść stron z pamięci podręcznej plików. Może to być przydatne, jeśli programy same wykonują większość buforowania, co może mieć miejsce w przypadku niektórych baz danych. W systemach stacjonarnych może to poprawić interaktywność, ale wadą jest to, że wydajność we / wy prawdopodobnie odniesie sukces.

Wartość domyślna została najprawdopodobniej wybrana jako przybliżone pole środkowe między tymi dwoma skrajnościami. Jak w przypadku każdego parametru wydajności, dostosowanie vm.swappinesspowinno opierać się na danych porównawczych porównywalnych z rzeczywistymi obciążeniami, a nie tylko na przeczuciu.

Thomas Nyman
źródło
4
W jaki sposób instalacja systemu operacyjnego na urządzeniu półprzewodnikowym wpływa na kompromis?
gerrit
3
@gerrit Rodzaj podstawowego nośnika pamięci jest nieistotny. Tego rodzaju szczegóły nie są widoczne dla podsystemu zarządzania pamięcią.
Thomas Nyman
Rodzaj podstawowego nośnika pamięci jest nieistotny z punktu widzenia wykorzystania pamięci. Możesz rozważyć obniżenie swapingu, w jakim nośnik obsługuje ograniczoną liczbę operacji odczytu / zapisu (tj. Pamięci flash), aby zwiększyć jego żywotność.
MatrixManAtYrService
2
@MatrixManAtYrService Dzięki wewnętrznemu wyrównywaniu zużycia i wbudowanej redundancji, nowoczesne dyski SSD (do których odnosi się pytanie w poprzednim komentarzu) wykazały trwałość do 2 PB (!) Zapisów przed wyświetleniem błędów. Nawet tańsze dyski w tych eksperymentach trwały 300 TB przed wystąpieniem błędów, znacznie przekraczając oficjalną ocenę gwarancyjną wynoszącą około 100 TB. Przynajmniej moim zdaniem dostosowanie swapiness do miejsca na dysku SSD na stacjach roboczych lub laptopach nie jest tak naprawdę uzasadnione.
Thomas Nyman,
2
@ThomasNyman masz rację, dla większości użytkowników nie warto się martwić. Sprawa, która doprowadziła mnie do tego postu, dotyczyła zamiany miejsca na karcie SD, którą, jak sądzę, jest trochę marginalna.
MatrixManAtYrService
9

Problem polega na tym, że nie ma jednej wartości domyślnej, która odpowiadałaby wszystkim potrzebom. Ustawienie opcji zamiany na 10 może być odpowiednim ustawieniem dla komputerów stacjonarnych, ale domyślna wartość 60 może być bardziej odpowiednia dla serwerów. Innymi słowy, zamiana swapów musi zostać dostosowana zgodnie z przypadkiem użycia - komputer kontra serwer, typ aplikacji i tak dalej.

Co więcej, jądro Linux używa pamięci do buforowania dysku, w przeciwnym razie pamięć RAM nie byłaby używana, a to nie jest wydajne i zamierzone. Posiadanie danych na dysku w pamięci podręcznej oznacza, że ​​jeśli coś ponownie potrzebuje tych samych danych, prawdopodobnie pobierze je z pamięci. Pobieranie danych stamtąd jest znacznie szybsze niż ponowne pobieranie z dysku. A opcja zamiany jest mechanizmem, o ile jądro Linuksa woli zamienić się na dysk, aby zmniejszyć pamięć podręczną dysku. Czy powinien raczej usuwać starsze dane z pamięci podręcznej, czy powinien zamienić niektóre strony programu?

Ten artykuł może rzucić nieco światła na ten temat. Zwłaszcza jak szacowana jest tendencja zamiany.

dsmsk80
źródło
Nie rozumiem, dlaczego 60 jest bardziej odpowiednie dla serwerów. Mam serwery i niektóre procesy są zamieniane, nawet jeśli mamy 40% wolnej pamięci RAM. nie ma dla mnie sensu.
Hugo,
7
Sensowne jest przeniesienie części pamięci na swap, jeśli jest bardzo mało prawdopodobne, że będą one dostępne, w ten sposób Linux pozostawia tyle pamięci RAM, ile to możliwe, aby być gotowym na sytuacje, w których faktycznie tego potrzebuje.
powtórka
Link do artykułu jest martwy, ale nadal możesz go zobaczyć z Wayback Machine
dr.
Powiązany artykuł ma charakter informacyjny. Dzięki za udostępnienie.
Pistos
5

Dodając więcej szczegółów do powyższych odpowiedzi.
Ponieważ coraz częściej używamy maszyn wirtualnych, host linuksowy może być maszyną wirtualną w jednym z tych środowisk chmurowych. W obu przykładach 1 i 2 mamy dobre wyobrażenie o działających aplikacjach io tym, ile pamięci RAM zużywają. W 3 nie tyle

  • Przykład 1
    Chmura prywatna o wysokiej wydajności (pomyśl, za którą większość banków zapłaciłaby miliony) taka, w której dysk zapewnia bardzo droga macierz pamięci masowej z BARDZO dobrym IO. Część tego magazynu może znajdować się w pamięci RAM (w macierzy dyskowej) wspieranej przez dyski SSD, wspieranej przez zwykłe dyski z wrzecionami. W tej sytuacji dysk widziany przez maszynę wirtualną może być tylko trochę wolniejszy niż pamięć RAM, do której ma dostęp. Dla pojedynczego vm nie ma dużej różnicy między zamianą a ramem.
  • Przykład 2
    To samo co w przykładzie 1, ale zamiast jednego vm masz setki, tysiące lub więcej. W tej sytuacji dowiadujemy się, że pamięć RAM serwera (hiperwizora) jest tania i obfita, gdzie pamięć RAM jest droga (względnie mówiąc). Jeśli podzielimy wymagania RAM między Hypervisor RAM i SWAP zapewniane przez naszą bardzo drogą macierz pamięci, szybko wykorzystamy całą pamięć RAM w macierzy pamięci, bloki są następnie obsługiwane przez dyski SSD, a na końcu wrzeciona. Nagle każdy zaczyna się robić naprawdę powoli. W tym przypadku prawdopodobnie chcemy przypisać dużo pamięci RAM (od hiperwizora) do maszyny wirtualnej i ustawić swapiness na 0 (tylko zamiana, aby uniknąć braku pamięci), ponieważ skumulowany efekt wszystkich tych maszyn wirtualnych będzie miał wpływ na wydajność magazyn,
  • Przykład 3 Nowoczesny laptop lub komputer stacjonarny prawdopodobnie z dyskiem SSD. Wymagania dotyczące pamięci są uważane za nieznane. Która przeglądarka będzie używana przez użytkownika, ile kart będą otwarte, czy będą również edytować dokument, obraz RAW lub ewentualnie wideo, wszyscy zużyją pamięć RAM. Ustawienie swapiness na niską wartość i wykonanie innych poprawek w systemie plików będzie oznaczało, że na dysku SSD jest mniej zapisów, więc będzie trwać dłużej.
Tymoteusz ok
źródło
3
Obawy dotyczące wytrzymałości zapisu SSD dla systemu użytkownika końcowego są przereklamowane. Współczesne dyski SSD zazwyczaj przetrwają wolumeny zapisu setek terabajtów. Typowy system komputerowy, nawet przy intensywnym użytkowaniu wymiany, prawdopodobnie nie użyje go przez wiele lat.
Jules