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?
Odpowiedzi:
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.swappiness
Opcja 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órejvm.swappiness
odejmuje 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 wmm/vmscan.c
drzewie źródeł jądra.Biorąc pod uwagę
vm.swappiness
z100
priorytety 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.swappiness
do0
uniemoż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.swappiness
powinno opierać się na danych porównawczych porównywalnych z rzeczywistymi obciążeniami, a nie tylko na przeczuciu.źródło
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.
źródło
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
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.
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,
źródło