Używam Uniksa od dłuższego czasu i przez ostatnie kilka lat czułem, że zamiana jest anachronizmem, ale byłbym ciekawy, co myślą inni ludzie.
Mój argument jest mniej więcej taki (zakładając, że nie ma globalnego limitu ani kręcenia ustawień OOM):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
W przypadku każdej usługi, która jest dostrojona pod kątem wydajności, sądzę, że zrozumienie górnych granic wykorzystania zasobów byłoby kluczem do dostrojenia jej w pierwszej kolejności, w którym to przypadku wiesz, ile potrzebujesz.
Nie mogę sobie wyobrazić wielu sytuacji (niektórych, ale niewielu), w których można zawiesić trwający proces i może on zamienić się, aby zrobić miejsce na inne rzeczy, ale nadal byś stracił swoje gniazda, gdybyś to zrobił, więc zmuszając zrzut pamięci przez gcc lub ręczne skopiowanie pamięci byłoby funkcjonalnie równoważne.
Zdecydowanie nie chciałbym wymiany w systemie osadzonym (nawet jeśli może mieć mniejszego dostępnego pamięci RAM), jeśli zabraknie pamięci RAM, wolę, aby mój proces umarł, niż podarłbym pamięć flash o milionie zapisów na sektor przejechać weekend, wyrównując zużycie sektorów do zera.
Jakieś brody unixowe mają jakieś ważne powody, aby ciągle się wymieniać?
AKTUALIZACJA odpowiedzi i analizy:
ZATWARDZIAŁY? - fork () wymaga takiej samej ilości pamięci dla procesu potomnego jak rodzic
Modern fork () to kopiowanie przy zapisie dla dzieci na POSIX (ogólnie), ale konkretnie Linux i FreeBSD , i zakładam OSX poprzez ekstrapolację. Uważam tę część anachronicznego bagażu, który zamienia ze sobą.
Co ciekawe, w tym artykule Solaris twierdzi się, że nawet jeśli Solaris używa Copy-on-Write z fork (), to powinieneś mieć co najmniej 2x (!) Rozmiar procesu nadrzędnego w wolnej pamięci wirtualnej, aby fork () nie zawalił się w środkowy. Podczas gdy element Solaris nieco odrzuca argument, że zamiana jest anachronizmem - myślę, że wystarczająca liczba systemów operacyjnych poprawnie implementuje CoW w taki sposób, że ważniejsze jest rozwiać mit niż oznaczyć go jako dalsze uzasadnienie zamiany. Od. Spojrzmy prawdzie w oczy. W tym momencie ludzie, którzy faktycznie korzystają z Solaris, są prawdopodobnie tylko facetami Oracle. Bez obrazy Solaris!
POTWIERDZONY - pliki tmpfs / ramfs mogą zostać zamienione jako przekonanie, gdy tmpfs / ramfs się zapełni
Nie używaj bez ograniczeń tmpfs / ramfs! Zawsze jawnie określ ilość pamięci RAM, którą ma używać tmpfs / ramfs.
PLAUSABLE - Zamień trochę „na wszelki wypadek”
Jeden z moich dawnych szefów miał świetne powiedzenie: „nie wiesz, czego nie wiesz” - w zasadzie nie możesz podjąć decyzji na podstawie informacji, których jeszcze nie masz. Jest to jednak prawdopodobny argument przemawiający za zamianą - podejrzewam, że rodzaje rzeczy, które możesz zrobić, aby wykryć, czy twoja aplikacja się wymienia, czy nie, byłyby cięższe niż sprawdzenie, czy malloc () się powiedzie lub wychwycenie wyjątku od nieudana nowa ().
Może to być przydatne w przypadkach, gdy korzystasz z pulpitu i dzieje się kilka losowych rzeczy, ale nawet nadal - jeśli coś zwariuje, wolę, żeby to było OOM niż nurkowanie w piekle. To tylko ja.
NIESTANDARDOWO! - W systemie Solaris wymiana jest ważna z kilku powodów
tmpfs - stany Ilość wolnego miejsca dostępnego dla tmpfs zależy od ilości nieprzydzielonego miejsca wymiany w systemie. Rozmiar systemu plików tmpfs rośnie, aby pomieścić zapisane w nim pliki, ale istnieją pewne nieodłączne kompromisy dla dużych użytkowników tmpfs. Tmpfs dzieli zasoby z segmentami danych i stosu wykonujących się programów. Na działanie bardzo dużych programów może mieć wpływ sytuacja, gdy systemy plików tmpfs są zbliżone do maksymalnego dopuszczalnego rozmiaru. Tmpfs może przydzielić wszystkie oprócz 4 MB przestrzeni wymiany systemu.
Solaris fakty i mity na temat zamiany - stwierdza Virtual memory dzisiaj składa się z sumy fizycznej pamięci RAM i swap na dysku. Solaris wcale NIE wymaga konfiguracji przestrzeni wymiany. Jeśli wybierzesz tę opcję, po zapełnieniu pamięci RAM nie będzie można rozpocząć nowych procesów. .
Nie jestem pewien, czy to oznacza, że maksymalna wirtualna mapa, którą możesz utworzyć, to ram + swap , czy też nadal możesz zrobić coś takiego jak mmap () plik większy niż ram i polegać na leniwej inicjalizacji mmap (). prawdopodobnie prawdopodobnie działa teraz w systemie Solaris bez wymiany, wygląda na to, że jest mniej przyjazny niż inne systemy operacyjne POSIXy.
NIESTANDARDOWO! Popularne narzędzia hibernacji Linuksa wydają się polegać na zamianie
Domyślnie TuxOnIce wygląda tak, jakby polegał na zamianie w hibernacji - chociaż istnieją inne backendy. Jednakże, jeśli nie korzystasz z urządzenia, które wymaga hibernacji, nadal stałbym za stwierdzeniem, że „swap jest anakroniczny w systemie Linux”