Ponieważ większość uważa, że zamiana = zła i że jeśli nie zmniejszysz swapingu, system podmieni się, gdy tak naprawdę nie będzie musiał. Żadna z tych rzeczy nie jest prawdziwa. Ludzie kojarzą zamianę z czasami, w których ich system grzęźnie - jednak najczęściej jest to zamiana, ponieważ system grzęźnie, a nie na odwrót. Kiedy system zamienia się, już uwzględnił koszt wydajności w swojej decyzji o zamianie i zdecydował, że brak takiego działania wiązałby się z większą ogólną karą w wydajności lub stabilności systemu.
Ogólnie ustawienia domyślne zapewniają dobrą ogólną wydajność i stabilność. Polecam pozostawienie go jako domyślnego. Istnieją inne możliwości dla Linuksa, aby poprawić zarządzanie pamięcią, aby rozwiązać niektóre przypadki brzegowe, ale ogólnie kontrola zamiany nie jest dobrym obejściem - dostosuj ją w jednym kierunku, możesz naprawić jeden problem i stworzyć inne problemy. Jeśli to w ogóle możliwe, po prostu zainstalowanie większej ilości fizycznej pamięci RAM (i pozostawienie swapiness w spokoju) przyćmiewa wszystkie inne środki zaradcze.
Jak Linux używa pamięci RAM
Dowolna pamięć RAM, która nie jest używana przez aplikacje, może być używana jako „pamięć podręczna”. Pamięć podręczna jest ważna dla szybkiego, płynnie działającego systemu, przyspieszającego zarówno odczyt, jak i zapis na dysku.
Jeśli aplikacje zwiększą wykorzystanie pamięci do tego stopnia, że zajmują prawie całą pamięć RAM, pamięć podręczna zmniejszy się, a w rezultacie operacje dysku zostaną spowolnione. W dzisiejszych czasach nie wystarczy mieć zaledwie dziesiątki megabajtów lub mniej.
Jeśli aplikacje zwiększą wykorzystanie pamięci jeszcze bardziej - zakładając, że nie masz przestrzeni wymiany - nie tylko nie będziesz mieć pamięci podręcznej, ale w końcu zabraknie pamięci i twój system będzie musiał zabić działające procesy. Procesy zabijania są gorsze niż spowolnienie, ponieważ zapewniają niestabilny, nieprzewidywalny system.
Jak Linux używa wymiany
Aby rozwiązać oba te problemy, system może ponownie przydzielić część rzadko używanej pamięci aplikacji na miejsce wymiany na dysku, zwalniając pamięć RAM. Dodatkowa pamięć RAM może zapobiegać procesom umierającym z powodu braku pamięci i może odzyskać trochę pamięci podręcznej, dzięki czemu operacje dysku mogą działać płynniej.
Ta zmiana przydziału nie odbywa się jednak zgodnie z określonym punktem odcięcia. Nie osiągasz określonego procentu alokacji, po którym Linux zaczyna zamieniać. Ma algorytm „niewyraźny”. Bierze pod uwagę wiele rzeczy, które najlepiej można opisać przez „jak duży jest nacisk na przydzielanie pamięci”. Jeśli istnieje duża „presja” na przydzielenie nowej pamięci, zwiększy to szanse, że niektóre zostaną zamienione, aby zrobić więcej miejsca. Jeśli będzie mniej „presji”, zmniejszy to te szanse.
Twój system ma ustawienie „swapiness”, które pomaga dostosować sposób obliczania tego „ciśnienia”. Jest często fałszywie reprezentowany jako „procent pamięci RAM”, ale nie jest, to tylko wartość używana jako część formuły. Wartości od 40 do 60 są zalecanymi wartościami rozsądnymi, przy czym 60 jest obecnie wartością domyślną.
Pozwolenie systemowi na zamianę, gdy jest to konieczne, jest ogólnie bardzo dobrą rzeczą, nawet jeśli masz dużo pamięci RAM. Pozwolenie systemowi na zamianę, jeśli to konieczne, daje ci spokój, że jeśli nawet chwilowo wpadniesz w stan niskiej pamięci (podczas uruchamiania krótkiego procesu, który zużywa dużo pamięci), twój system ma drugą szansę na utrzymanie wszystkiego w ruchu. Jeśli posuniesz się aż do całkowitego wyłączenia zamiany, ryzykujesz, że procesy zostaną zabite z powodu niemożności alokacji pamięci.
Co się dzieje, gdy system jest zapchany i mocno zamienia się?
Zamiana jest powolną i kosztowną operacją, więc system jej unika, chyba że oblicza, że kompromis w wydajności pamięci podręcznej zrekompensuje ją ogólnie lub jeśli będzie to konieczne, aby uniknąć procesów zabijania.
Wiele razy ludzie patrzą na swój system, który mocno uderza w dysk i używa dużo przestrzeni wymiany i obwiniania za to. To niewłaściwe podejście. Jeśli zamiana kiedykolwiek osiągnie taką skrajność, oznacza to, że zamiana jest próbą rozwiązania przez system problemów z niską pamięcią, a nie przyczyną problemu, i że bez zamiany uruchomiony proces przypadkowo umrze.
Co z systemami stacjonarnymi? Czy nie wymagają innego podejścia?
Użytkownicy systemu stacjonarnego rzeczywiście oczekują, że system „poczuje się responsywny” w odpowiedzi na akcje inicjowane przez użytkownika, takie jak otwarcie aplikacji, która jest rodzajem akcji, która może czasami wyzwalać wymianę z powodu wymaganego zwiększenia pamięci.
Jednym ze sposobów, w jaki niektórzy próbują to poprawić, jest zmniejszenie parametru swapiness, który może zwiększyć tolerancję systemu na aplikacje zużywające pamięć i zajmujące mało miejsca w pamięci podręcznej.
To jednak tylko zmiana bramek. Pierwsza aplikacja może teraz ładować się bez operacji wymiany, ale pozostawi mniej luzu dla następnej aplikacji, która się ładuje. Ta sama wymiana może nastąpić później, gdy zamiast tego otworzysz aplikację. W międzyczasie wydajność systemu jest ogólnie niższa z powodu zmniejszonego rozmiaru pamięci podręcznej. Tak więc jakakolwiek korzyść z ustawienia zmniejszonej zamiany może być trudna do zmierzenia, zmniejszając czasami opóźnienie zamiany, ale powodując inne wolne działanie w innym czasie. Nieznaczne zmniejszenie swapingu może być uzasadnione, jeśli wiesz, co robisz, ale obniżenie go do tak niskiego poziomu, jak 10%, może pozostawić system odporny na bardzo małe rozmiary pamięci podręcznej i pozostawić system bardziej podatny na konieczność wymiany w krótkim czasie.
Należy całkowicie wyłączyć zamianę, ponieważ utracisz dodatkową ochronę przed warunkami braku pamięci, które mogą spowodować awarię procesów lub śmierć.
Jak dotąd najskuteczniejszym rozwiązaniem jest zainstalowanie większej ilości pamięci RAM, jeśli możesz sobie na to pozwolić.
Czy i tak można wyłączyć swap w systemie, który ma dużo pamięci RAM?
Jeśli masz dużo więcej pamięci RAM, niż potrzebujesz na aplikacje, rzadko potrzebujesz wymiany. Wyłączenie zamiany prawdopodobnie nie będzie miało większego znaczenia. Ale jeśli masz dużo pamięci RAM, pozostawienie włączonej wymiany również nie będzie karane, ponieważ system nie zamienia się, gdy nie jest to konieczne.
Jedyne sytuacje, w których miałoby to znaczenie, byłyby w mało prawdopodobnej sytuacji, w której system zaczyna brakować pamięci, w wyniku czego system pamięci podręcznej jest utrudniony, i to w takiej sytuacji najbardziej chciałbyś wymienić. Dzięki temu możesz bezpiecznie pozostawić swap w normalnych ustawieniach, aby zwiększyć spokój ducha, bez negatywnego wpływu, gdy masz dużo pamięci.
Ale w jaki sposób swap może przyspieszyć mój system? Czy zamiana nie spowalnia rzeczy?
Przenoszenie danych z pamięci RAM do wymiany jest powolną operacją, ale jest podejmowane tylko wtedy, gdy jądro jest całkiem pewne, że ogólna korzyść wynikająca z utrzymania rozsądnej wielkości pamięci podręcznej przeważy to.
Kiedy dane są zamieniane, kiedy znów się pojawiają?
Dana część pamięci wróci z wymiany, gdy tylko zostanie wykorzystana - odczytana lub zapisana. Jednak zwykle wymieniana pamięć to pamięć, do której nie uzyskiwano dostępu przez długi czas i nie oczekuje się, że będzie wkrótce potrzebna.
Przenoszenie danych z wymiany jest tak samo czasochłonne, jak ich umieszczenie. Twoje jądro nie usunie z niego danych, jeśli nie będzie to konieczne. Gdy dane są zamieniane i nie są używane, pozostawia więcej pamięci na inne rzeczy, które są używane, i więcej pamięci podręcznej systemu.
Czy istnieją przypadki, w których właściwe jest ograniczenie swapizmu?
Tak. Jeśli korzystasz z serwera dedykowanego dla jednej konkretnej aplikacji serwerowej, która nie korzysta z pamięci podręcznej systemu. Niektóre serwery baz danych, takie jak serwer Oracle, MySQL / MariaDB, zalecają w niektórych przypadkach zmniejszenie zamiany do 1 do 10, ponieważ te silniki baz danych używają własnego buforowania.
Zauważ, że jest to prawdą tylko wtedy, gdy twój system jest dedykowany do tego jednego zadania, aw przypadku MySQL / MariaDB tylko wtedy, gdy używasz wyłącznie InnoDB lub XtraDB, a nie MyISAM lub Aria itp.