Linux: nie tworzysz partycji wymiany?

9

Zastanawiałem się, odkąd słyszałem, że swap jest używany, gdy nie ma Cię w pamięci RAM, a przesadzanie z nim jest złe, ponieważ mam dużo pamięci RAM (8 GB) ....

co jeśli nie utworzę partycji wymiany?

Czy potrzebuję go również do hibernacji, czy nie jest to konieczne?

Mihai Bratulescu
źródło
musisz utworzyć swap, raz próbowałem nie tworzyć swap, nie mogłem kontynuować instalacji
Lynob
co się dzieje, gdy instalujesz w systemie Windows? Zrobiłem to i również wydawało mi się to trochę powolne w porównaniu do systemu Windows, ale nie utworzyłem partycji
Mihai Bratulescu,
Nigdy nie próbowałem instalować Linuksa w systemie Windows, zawsze tworzę osobną partycję
Lynob 1'13

Odpowiedzi:

13

Nowoczesne systemy operacyjne wymagają przestrzeni wymiany, aby efektywnie wykorzystywać pamięć RAM. Nawet jeśli w systemie jest dużo pamięci RAM, marnowanie pamięci RAM powoduje mniejsze buforowanie bufora, co oznacza zwiększenie liczby operacji we / wy dysku. Niezależnie od tego, ile masz pamięci RAM, nadal chcesz, aby system korzystał z niej efektywnie. Efektywne korzystanie z niego oznacza wyciąganie rzeczy z pamięci RAM, do których uzyskanie dostępu jest bardzo mało prawdopodobne.

Po uruchomieniu typowego systemu uruchamia się duża liczba usług. Programy uruchamiają kod inicjujący i modyfikują w tym procesie prywatne mapowania pamięci. Niektóre z tych usług już nigdy nie będą działać. Wiele z nich nie będzie działać przez wiele godzin. Bez wymiany system operacyjny nie ma wyboru i musi na zawsze zachować zmodyfikowane mapowania pamięci prywatnej związane z tymi usługami w pamięci RAM. To pamięć RAM, której nigdy nie można użyć jako pamięci podręcznej dysku.

Więc chcesz zamienić, czy tego potrzebujesz, czy nie.

David Schwartz
źródło
8
„Więc chcesz zamienić, czy tego potrzebujesz, czy nie.” - Wygląda na to, że sprawiłeś, że potrzebuje wymiany, czy tego chce, czy nie.
trociny
2
Załóżmy, że mam dużo pamięci RAM i mogę sobie pozwolić na marnowanie 2 GB. Dlaczego miałbym potrzebować pliku wymiany?
Tarik
1
W takim przypadku nie potrzebujesz pliku wymiany. Ale jak argumentowałem, chcesz jeden. Ponieważ niezależnie od tego, czy możesz sobie pozwolić na marnowanie pamięci RAM, nie powinieneś chcieć używać pamięci RAM nieefektywnie, gdy nie musisz.
David Schwartz
Korzystam z serwera CLI bez wymiany i działa idealnie. Uruchamianie serwera teamspeak3, apache2, node.js Nigdy nie widzę, aby używany był więcej niż 500 milionów pamięci RAM. Więc nie przeszkadza mi użycie RAM „nieefektywnie” ZASTRZEŻENIE: Funkcja serwera tego serwera służy wyłącznie do programowania, więc i tak obciążenie jest zawsze niskie. A jeśli mam wyciek pamięci podczas programowania, wolałbym, aby zabójca OOM zabił go, gdy tylko skończy mi się pamięć RAM, niż wypchnie wszystkie te bzdury na dysk.
Native Coder,
12

Od kilku lat korzystam z systemu stacjonarnego bez wymiany i wszystko idzie świetnie! Istnieje kilka różnych zachowań; niektóre z nich są korzystne, a niektóre mogą cię skrzywdzić. Wszystko zależy od tego, co robisz.

Jedną z głównych różnic jest to, jak zachowuje się system, gdy skończy się pamięć:

Jeśli nie ma partycji wymiany, zabójca OOM uruchamia się natychmiast. Jeśli masz program wyciekający z pamięci, najprawdopodobniej to on zostanie zabity. Tak się dzieje i prawie natychmiast odzyskujesz system.

Jeśli nie jest partycja swap jądro wypycha zawartość pamięci do wymiany. Błędny proces może kontynuować przydzielanie pamięci. Dzieje się tak, dopóki nie skończy się wymiana, co może potrwać od dziesięciu minut do godziny, jeśli masz dużą partycję wymiany. W tym czasie system zwalnia do indeksowania. Nie można otworzyć terminalu i zabić procesu. Kiedy tak się dzieje, zwykle odłączam przewód zasilający.

Tak, ponieważ mam zamiar stracić moich danych anyways gdy Ooms systemowe, wolę byłego opcję przynajmniej mieć (wysoki) szansę odzyskania.

Jeff Taylor
źródło
To też było moje doświadczenie. Linux nie radzi sobie z zamianowaniem swapów na tyle dobrze, abyś sam mógł zabić szkodliwy program. Bardziej niezawodne jest, aby zabójca OOM zrobił to samo. Oczywiście jest to okropny projekt - lepszym rozwiązaniem byłoby zamrożenie procesu obrażania niż zabicie go i zapewnienie przyjemnego GUI, który pozwoli ci go odblokować lub zabić, ale ... Linux.
Timmmm,
3
W końcu odpowiedź, która ma sens i pasuje do mojego własnego doświadczenia. Nie mogę zrozumieć uzasadnienia „musisz mieć partycję wymiany”. Z wyjątkiem sytuacji, gdy chcemy hibernować system.
Tarik
5

Do hibernacji wymagana jest zamiana, w przeciwnym razie można się bez niej obejść.

psusi
źródło
Dlatego rozmiar obszaru wymiany powinien być nieco większy niż rozmiar pamięci zainstalowanej w systemie.
mdpc
@mdpc, niekoniecznie; musi po prostu być wystarczająco duży, aby pomieścić używany pamięci RAM, której nie można wyrzucić (tzn. dane zapisane w pliku na dysku).
psusi
i jak ocenilibyście to na stworzeniu? Czy nie byłoby tak właściwe planowanie i przygotowanie się na najgorszy przypadek, ponieważ podział jest generalnie trudny do zmiany po jego ustawieniu?
mdpc
3

Powszechnym błędem jest myślenie, że posiadanie obszaru wymiany negatywnie wpływa na wydajność. Co poważnie wpływa na wydajność, to brak wystarczającej ilości pamięci RAM. Obszar wymiany sam w sobie nie ma negatywnego wpływu na wydajność, chyba że zależy Ci na niezawodności. Może to mieć pozytywny wpływ na wydajność, nawet jeśli uważasz, że masz wystarczającą ilość pamięci RAM (i nie zgłoszono braku pamięci RAM).

Zasadniczo należy rozważyć trzy przypadki:

  • 1: Jest wystarczająca ilość pamięci RAM na potrzeby wewnętrznego jądra, aby wszystkie aplikacje miały działający zestaw stron w pamięci RAM i nadal miały „wolną” pamięć RAM na pamięć podręczną bufora do przechowywania większości gorących danych systemu plików.

  • 2: tak samo jak powyżej, ale nie masz wystarczającej ilości wolnej pamięci RAM, aby pamięć podręczna bufora była w pełni wydajna.

  • 3: Nie ma wystarczającej ilości pamięci RAM, aby nawet przechowywać strony używane przez aplikacje.

W przypadku 1, który powinien być normą dla maszyny produkcyjnej, posiadanie obszaru wymiany lub nic nie zmienia (przynajmniej w systemach operacyjnych Linux i innych systemach, które nadmiernie zatwierdzają pamięć).

W przypadku 2 posiadanie obszaru wymiany może poprawić ogólną wydajność, pozwalając systemowi na wyświetlanie stron bardzo rzadko używanych stron, a następnie pozwalając pamięci podręcznej bufora lepiej odgrywać swoją rolę.

W przypadku 3 posiadanie obszaru wymiany pozwala aplikacji na kontynuowanie działania kosztem obniżenia wydajności z powodu podziału na strony. Z drugiej strony brak obszaru wymiany (lub wystarczająco dużego) spowoduje losowe awarie aplikacji. Dodatkowo, w zależności od ustawień systemu operacyjnego, OOM Killer może również zdecydować o zabiciu aplikacji najbardziej wymagających pamięci, jeśli istnieje duże zapotrzebowanie na pamięć RAM, nawet nie dając im szansy na zapisanie (twoich) krytycznych danych.

Ten drugi przypadek jest tym, z którym musisz dokonać wyboru. Z pewnością istnieją przypadki użycia, w których zabijanie procesów jest preferowaną opcją, np. Systemy, w których czas reakcji jest kluczowy, a utrata transakcji / procesu nie jest niczym wielkim.

Jednak zazwyczaj wierzę w większość sytuacji, lepiej jest pozwolić użytkownikowi / administratorowi zauważyć brak pamięci RAM i odpowiednio postępować, nie ryzykując utraty danych.

jlliagre
źródło
1

Jeśli nie chcesz używać partycji wymiany, możesz użyć pliku wymiany: obrazu systemu plików przechowywanego w zwykłym pliku i używanego jako przestrzeń wymiany.

Poniższe artykuły szczegółowo wyjaśniają, jak to zrobić:

Joseph R.
źródło
Jaka jest różnica między plikiem wymiany a partycją wymiany? a co by się stało, gdybym nie miał?
Mihai Bratulescu,
prędkość dostępu ....
mdpc
2
Jeśli użyjesz TAK, jest to dość znaczące. Jeśli używasz partycji, jest to proste adresowanie, jeśli używasz pliku, musisz zrobić cały system plików, aby użyć pliku wymiany i NIE MOŻESZ zagwarantować, gdzie na dysku będą znajdować się segmenty.
mdpc
2
@mdpc Narzut systemu plików jest pomijalny począwszy od jądra 2.6. Metadane, pamięć podręczna i kod systemu plików są pomijane. Bloki dysku surowego są po prostu bezpośrednio dostępne.
jlliagre
1
@mdpc Plik wymiany nie powinien być w znacznym stopniu pofragmentowany, jeśli w ogóle go nie utworzyłeś. Co więcej, dostęp do wymiany rzadko jest sekwencyjny, ale głównie losowy ze względu na sposób stronicowania popytu, więc fragmentacja nie powinna stanowić problemu.
jlliagre
0

To trochę niebezpieczne, ale MOŻESZ biegać bez przestrzeni wymiany. Ale jeśli w końcu przekroczysz ilość pamięci, system prawie natychmiast się zawiesi bez uprzedzenia.

To, co zasadniczo daje ci zamiana, to dłuższa, ale znacznie wolniejsza pamięć. Jeśli przekroczysz, zaczniesz zamieniać, to naprawdę zabierze życie z twojego systemu .... JEDNAK, zabijając błędne procesy, nadal możesz zapisać swój system.

Niektóre programy nalegają na przydzielanie (ale nie używanie) przestrzeni wymiany, niektóre z nich to programy bazodanowe, o ile pamiętam. Ponownie, nie mając przestrzeni wymiany, możesz ograniczyć uruchamiane programy.

Na koniec spójrz SWAP jest TANIO, ponieważ nie musisz tworzyć kopii zapasowej obszaru. (Mam nadzieję, że jesteś jednym z tych znakomitych administratorów systemów, którzy wykonują kopie zapasowe swoich systemów).

Więc stwórz to.

Moją ogólną zasadą było 2 * rozmiar pamięci ..... ale teraz wydaje mi się, że w wielu przypadkach mam 1 * rozmiar pamięci, ale ogólnie używam 1,5 * (rozmiar pamięci). Nie musisz tworzyć tak wielkiej ilości, ale ja ... szczególnie, jeśli wykonujesz jakąkolwiek pracę produkcyjną.

O tak, aw przypadku hibernacji wymiana jest WYMAGANA, aby pomieścić całkowity obraz pamięci. A zatem rozmiar, jeśli rozważasz h8ibernation, powinien wynosić co najmniej (1 * rozmiar pamięci) + 100 MB .. 100 MB to ewentualny narzut związany z procesem.

mdpc
źródło
więc ... w przypadku niektórych programów potrzebujesz do ich działania obszaru wymiany? Nie martwię się, że zabraknie pamięci RAM z 8 GB (choć nie jest to niemożliwe)
Mihai Bratulescu
Reguła wielkości pamięci 2x jest stara i nieaktualna. Ale zamiana nie jest złym pomysłem. Nie zużywa zbyt dużo miejsca na dysku, więc nie przegapisz wykorzystanego miejsca; nie jest zwykle używany, jeśli masz wystarczającą ilość pamięci RAM, i pozwala zrzucić rdzeń do swojej wymiany.
Hennes,
@Hennes - przeczytaj moją notatkę ... „kiedyś”
mdpc
0

Wymiana linuksa wydaje się mieć dość trudne wymagania, gdy tylko pojawi się presja pamięci. Objawem jest to, że jeśli prawie cała pamięć RAM jest używana przez aktywne procesy, system mocno się zatrzymuje, a dysk twardy działa dziko.

Dlaczego?

Strony bez pliku kopii zapasowej (zwykle z dynamicznego przydzielania pamięci) nie mogą być eksmitowane z pamięci RAM, gdy nie ma wymiany. Jądro ucieka się do stron z plikiem kopii zapasowej, nawet jeśli będą one wkrótce potrzebne, ja. mi. wyrzucanie śmieci nawet bez zamiany!

Więcej informacji na temat tego subtelnego problemu można znaleźć w tym poście na blogu.

Wniosek : Zawsze miej zamianę.

A dla przybliżonej wielkości użyj czegoś między 4 a 8 GB, nawet w systemach z dużą ilością pamięci RAM, zakładając, że nie hibernujesz. Aby uzyskać więcej informacji, zobacz dokumentację Red Hat dotyczącą przestrzeni wymiany .

dokładnie
źródło