Tak.
Zdecydowanie zawsze powinieneś mieć włączoną zamianę, chyba że istnieje bardzo ważny, zakazujący powód (np. Brak dysku lub tylko dysk sieciowy). Czy powinieneś mieć zamianę w kolejności często zalecanych śmiesznych rozmiarów (takich jak dwukrotność pamięci RAM)? No, no .
Powodem jest to, że zamiana jest przydatna nie tylko wtedy, gdy aplikacje zużywają więcej pamięci niż fizyczna pamięć RAM (w rzeczywistości w takim przypadku zamiana wcale nie jest bardzo przydatna, ponieważ ma poważny wpływ na wydajność). Główną zachętą do wymiany obecnie nie jest magiczne przekształcenie 16 GB pamięci RAM w 32 GiB, ale bardziej efektywne wykorzystanie zainstalowanej, dostępnej pamięci RAM.
Na nowoczesnym komputerze pamięć RAM nie jest nieużywana. Niewykorzystana pamięć RAM to coś, czego równie dobrze można nie kupić i zaoszczędzić. Dlatego buforowane jest wszystko, co ładujesz lub cokolwiek, co inaczej jest mapowane w pamięci, wszystko, co może być ponownie wykorzystane przez kogokolwiek później (ograniczone przez ograniczenia bezpieczeństwa). Wkrótce po uruchomieniu komputera cała fizyczna pamięć RAM zostanie do czegoś wykorzystana .
Ilekroć poprosisz o nową stronę pamięci z systemu operacyjnego, menedżer pamięci musi podjąć świadomą decyzję:
- Wyczyść stronę z bufora pamięci podręcznej
- Wyczyść stronę z mapowania (w rzeczywistości taka sama jak nr 1 w większości systemów)
- Przenieś stronę, do której nie uzyskiwano dostępu przez długi czas - najlepiej nigdy - aby zamienić (może to nawet nastąpić proaktywnie, niekoniecznie w ostatniej chwili)
- Zabij swój proces lub zabij losowy proces (OOM)
- Panika z jądra
Opcje # 4 i # 5 są bardzo niepożądane i pojawią się tylko wtedy, gdy system operacyjny nie będzie miał innego wyboru. Opcje 1 i 2 oznaczają, że wyrzucasz coś, co prawdopodobnie będzie wkrótce potrzebne. Wpływa to negatywnie na wydajność.
Opcja nr 3 oznacza przeniesienie czegoś, czego (prawdopodobnie) nie potrzebujesz wkrótce, na wolne miejsce. To dobrze, ponieważ teraz coś, czego potrzebujesz, może korzystać z szybkiej pamięci RAM.
Usuwając opcję # 3, skutecznie ograniczyłeś system operacyjny do robienia # 1 lub # 2. Przeładowanie strony z dysku jest tym samym, co przeładowanie ze swapu, z tym wyjątkiem, że przeładowanie ze swapu jest zwykle mniej prawdopodobne (z powodu podjęcia właściwych decyzji stronicowania).
Innymi słowy, poprzez wyłączenie wymiany nie zyskujesz nic, ale ograniczasz liczbę użytecznych opcji systemu operacyjnego w obsłudze żądania pamięci. Co może nie być , ale najprawdopodobniej może być wadą (i nigdy nie będzie zaletą).
[EDYTOWAĆ]
Uważny czytelnik strony mmap
podręcznika , w szczególności jej opis MAP_NORESERVE
, zauważy kolejny dobry powód, dla którego zamiana jest w pewnym stopniu konieczna nawet w systemie z „wystarczającą” pamięcią fizyczną:
„Gdy przestrzeń wymiany nie jest zarezerwowana, SIGSEGV może otrzymać zapis, jeśli nie jest dostępna pamięć fizyczna.”
- Poczekaj chwilę, co to znaczy?
Jeśli zamapujesz plik, możesz uzyskać dostęp do jego zawartości bezpośrednio, jak gdyby magicznie jakoś znajdował się w przestrzeni adresowej twojego programu. Aby uzyskać dostęp tylko do odczytu, system operacyjny potrzebuje w zasadzie nie więcej niż jednej strony pamięci fizycznej, którą może ponownie wypełnić różnymi danymi za każdym razem, gdy uzyskujesz dostęp do innej strony wirtualnej (ze względów wydajnościowych nie jest to oczywiście zrobione, ale w zasadzie można uzyskać dostęp do danych o wartości terabajtów za pomocą jednej strony pamięci fizycznej). A co jeśli ty teżzapisać do mapowania pliku? W takim przypadku system operacyjny musi mieć fizyczną stronę - lub przestrzeń wymiany - gotową na każdą zapisaną stronę. Nie ma innego sposobu na zachowanie danych, dopóki proces zapisu brudnych stron nie wykona pracy (co może potrwać kilka sekund). Z tego powodu system operacyjny rezerwuje (ale niekoniecznie zawsze zatwierdza) przestrzeń wymiany, więc jeśli piszesz do mapowania, podczas gdy strona fizyczna nie jest nieużywana (to całkiem możliwe i normalne warunki), „ re gwarantuje , że będzie nadal działać.
A co jeśli nie będzie wymiany? Oznacza to, że nie można zarezerwować wymiany (duh!), A to oznacza, że gdy nie ma już wolnych stron fizycznych i piszesz na stronie, otrzymujesz przyjemną niespodziankę w postaci otrzymywania procesu błąd segmentacji i prawdopodobnie został zabity.
[/EDYTOWAĆ]
Jednak tradycyjna rekomendacja dokonywania zamiany dwa razy więcej pamięci RAM jest bezsensowna. Chociaż miejsce na dysku jest tanie, przypisywanie takiej wymiany nie ma sensu. Marnowanie czegoś, co jest tanie, wciąż jest marnotrawstwem i absolutnie nie chcesz ciągle wymieniać i wyłączać działających zestawów o rozmiarach kilkuset megabajtów (lub więcej).
Nie ma jednego „prawidłowego” rozmiaru wymiany (jest tyle „prawidłowych” rozmiarów, ile użytkowników i opinii). Zwykle przypisuję stałe 512 MB, niezależnie od wielkości pamięci RAM, co dla mnie działa bardzo dobrze. Powodem tego jest to, że 512 MB to obecnie coś, na co zawsze możesz sobie pozwolić, nawet na małym dysku. Z drugiej strony dodanie kilku gigabajtów wymiany nie jest niczym lepszym. Nie będziesz ich używać, chyba że coś pójdzie nie tak.
Nawet na dysku SSD zamiana jest o rząd wielkości wolniejsza niż pamięć RAM (ze względu na przepustowość i opóźnienie magistrali) i chociaż jest bardzo dopuszczalne przeniesienie czegoś do zamiany, które prawdopodobnie nie będzie ponownie potrzebne (tj. Najprawdopodobniej nie będziesz zamieniając go ponownie, więc twoja pula dostępnych stron jest skutecznie powiększana za darmo), jeśli naprawdę potrzebujesz znacznej ilości swapów (to znaczy, że masz aplikację, która wykorzystuje np. zestaw danych 50GiB), jesteś prawie zagubiony.
Gdy komputer zacznie wymieniać strony na gigabajty, wszystko zaczyna się indeksować. Tak więc dla większości ludzi (w tym dla mnie) nie jest to opcja, a więc taka zamiana nie ma sensu.