Kiedy chcemy skonfigurować system Linux, często sugeruje się ustawienie przestrzeni wymiany dwa razy większej niż pamięć fizyczna. Chcę wiedzieć, dlaczego tego potrzebujemy i jak powstaje ta sugestia?
Krótka odpowiedź brzmi „nie musisz ”.
W zależności od rodzaju jądra / systemu może mieć sens takie rozmiarowanie przestrzeni wymiany, np. Na stronie tuningowej (7) FreeBSD znajdujemy następujące uzasadnienie za wielkością wymiany co najmniej 2x wielkości pamięci fizycznej:
Zazwyczaj rozmiar zamiany należy zwykle zwiększyć do około 2x głównej pamięci w przypadku systemów z mniej niż 2 GB pamięci RAM lub do około 1x głównej pamięci, jeśli masz więcej. Jeśli jednak nie masz dużo pamięci RAM, na ogół będziesz chciał znacznie więcej zamiany. Nie zaleca się konfigurowania mniejszej niż 256 mln swapów w systemie i należy pamiętać o przyszłym rozszerzeniu pamięci podczas zmiany rozmiaru partycji wymiany. Algorytmy stronicowania VM jądra są dostrojone, aby działać najlepiej, gdy jest co najmniej 2x zamiana w stosunku do pamięci głównej. Skonfigurowanie zbyt małej wymiany może prowadzić do nieefektywności w kodzie skanowania strony maszyny wirtualnej, a także powodować problemy później, jeśli dodasz więcej pamięci do komputera. Wreszcie w większych systemach z wieloma dyskami SCSI (lub wieloma dyskami IDE działającymi na różnych kontrolerach), zdecydowanie zalecamy skonfigurowanie wymiany na każdym dysku. Partycje wymiany na dyskach powinny mieć w przybliżeniu ten sam rozmiar. Jądro może obsługiwać dowolne rozmiary, ale wewnętrzne struktury danych są skalowane do 4 razy największej partycji wymiany. Utrzymywanie partycji wymiany w pobliżu tego samego rozmiaru pozwoli jądrze optymalnie rozłożyć przestrzeń wymiany na N dyskach. Nie przejmuj się zbytnim przesadzeniem, przestrzeń wymiany to oszczędność w systemie UNIX, a nawet jeśli zwykle nie używasz dużo swapów, może dać ci więcej czasu na odzyskanie po niekontrolowanym programie przed zmuszeniem do ponownego uruchomienia. Utrzymywanie partycji wymiany w pobliżu tego samego rozmiaru pozwoli jądrze optymalnie rozłożyć przestrzeń wymiany na N dyskach. Nie przejmuj się zbytnim przesadzeniem, przestrzeń wymiany to oszczędność w systemie UNIX, a nawet jeśli zwykle nie używasz dużo swapów, może dać ci więcej czasu na odzyskanie po niekontrolowanym programie przed zmuszeniem do ponownego uruchomienia. Utrzymywanie partycji wymiany w pobliżu tego samego rozmiaru pozwoli jądrze optymalnie rozłożyć przestrzeń wymiany na N dyskach. Nie przejmuj się zbytnim przesadzeniem, przestrzeń wymiany to oszczędność w systemie UNIX, a nawet jeśli zwykle nie używasz dużo swapów, może dać ci więcej czasu na odzyskanie po niekontrolowanym programie przed zmuszeniem do ponownego uruchomienia.
Inne czynniki mogą być ważne przy podejmowaniu decyzji, ile miejsca wymiany należy przydzielić, gdzie przydzielić i tak dalej. Na przykład, jeśli instalujesz duży serwer z 128 GB pamięci fizycznej, prawdopodobnie dobrym pomysłem jest uniknięcie wstępnego przydzielenia 256 GB miejsca na dysku na wymianę, która nigdy nie będzie używana.
Z drugiej strony, posiadanie pewnej przestrzeni wymiany często umożliwia przechwytywanie zrzutów jądra (np. W Open-, Net- i FreeBSD). Dlatego dobrym pomysłem jest posiadanie co najmniej wystarczającej ilości przestrzeni wymiany, aby uzyskać pełny zrzut jądra w przypadku paniki.
Nie ma bezwzględnej zasady, która pasuje do wszystkich przypadków. Musisz przeczytać o zachowaniu konkretnego systemu, dowiedzieć się, jak on działa, pomyśleć o zamierzonym wykorzystaniu systemu i zdecydować, jaki rozmiar przestrzeni wymiany najlepiej odpowiada Twoim potrzebom.
Nie musisz wcale. Stare wersje systemu Windows traktowały każdą stronę przydzielonej pamięci jako zasadniczo mmapę w pliku wymiany, więc potrzebna była przynajmniej całkowita wielkość fizycznej pamięci RAM w swapie, aby była użyteczna - nie jest to już dzisiaj i nigdy nie było w przypadku Linuksa, ale plotka się utrzymuje.
Jednak zdarza się, że pożądane jest posiadanie co najmniej takiej ilości wymiany, ile pamięci RAM - hibernacja. Ponieważ Linux używa pliku wymiany do hibernacji (aka, zawieszenia na dysk), potrzebujesz wystarczającej ilości wymiany, aby pomieścić wszystkie dane w pamięci RAM, a także wszystkie dane, które zostały już zamienione (bez pamięci podręcznej pamięci podręcznej). Dotyczy to tylko maszyn, które wymagają hibernacji, takich jak laptopy.
Wreszcie posiadanie zbyt dużej ilości swapów może być złe , pomimo tego, co mogą powiedzieć inni. Pomyśl - jeśli masz 4 GB pamięci RAM, a do tego potrzebujesz dodatkowo 8 GB wymiany, czy uważasz, że Twój system będzie nadal użyteczny, a co z tymi wszystkimi wymianami na / z dysku? Często lepiej jest zabić proces zapamiętywania od razu, gdy zabraknie pamięci, zamiast spowalniać cały system do nieużywalnego poziomu, gdy zaczyna on spędzać cały czas na gromadzeniu danych i zamianie.
Dawno temu istniał wspólny wariant unixowy (myślę, że był to BSD, ale nie mogę teraz znaleźć odnośnika), który przydzielałby każdą stronę pamięci wirtualnej w przestrzeni wymiany. Więc jeśli miałeś tyle samo wymiany co RAM, rozmiar pamięci wirtualnej nadal byłby taki sam jak RAM. Zwykle zalecano wtedy, aby mieć dwa razy więcej wymiany niż RAM, co czyniło pamięć wirtualną dwa razy większą niż RAM.
Współczesne jednorożce nie zachowują się w ten sposób, więc zasada jest przestarzała (myślę, że była już przestarzała w 1992 r., Więc nigdy nie była istotna dla Linuksa). Ale dziwne, że reguła przetrwała. Jeśli teraz to zrobisz, otrzymasz pamięć wirtualną, która jest trzy razy większa niż ilość pamięci RAM, podczas gdy pierwotnym celem było uzyskanie dwa razy więcej.
To, że historyczny powód reguły jest zły, nie oznacza, że jest głupie. Miejsce na dysku stało się tańsze, dlatego warto przydzielić więcej swapów. Ile swapów powinieneś mieć, zależy od tego, ile masz pamięci RAM i jak z niej korzystasz. Możesz uruchomić system bez wymiany, ale wtedy nie masz szansy wybrać, które programy zabić, jeśli pamięć RAM się zapełni, a system może działać wolniej (czasem lepiej jest użyć pamięci RAM do buforowania i zamiany pamięci programu) na zewnątrz). Przydzielenie zbyt dużej ilości swapów kosztuje niewielką ilość pamięci RAM (dla struktur danych jądra) i oczywiście miejsce na dysku (ale w dzisiejszych czasach jest to zwykle tanie jak w przypadku SSD). Posiadanie wystarczającej ilości wymiany, aby zmieścić się w całej pamięci wirtualnej, jest konieczne, jeśli chcesz hibernować.
Starożytna rekomendacja oparta na założeniach dotyczących typowej pojemności pamięci systemowej, szybkości magistrali pamięci w stosunku do prędkości dysku oraz procentu czasu spędzanego przez procesy w różnych stanach oczekiwania. Jestem sceptycznie nastawiony do tego, że w dzisiejszych czasach chciałbyś więcej niż może 1/2 pamięci fizycznej w przestrzeni wymiany - wystarczającej, aby zapobiec przypadkowemu zabiciu OOM, gdy biegniesz w pobliżu pełnego wykorzystania pamięci. Ale całkowicie zależy od typowego obciążenia, YMMV itp.
źródło