Czy zamiana jest anachronizmem?


43

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”


Nie mam dużo brody un * x (jeszcze trochę włosów;), ale moje 2 centy byłyby takie, że „odrobina” zamiany dałaby Twojemu systemowi pewną odporność. Zamiast bezpośrednio OOM, zamiast tego przejdziesz na system wymiany, jeśli nieco przekroczysz granice systemu. Jasne, jeśli naprawdę przekroczysz granice twojego systemu, twój system ostatecznie się zawiesi / zatrzyma / sam nuke / cokolwiek-do diabła-możesz-sobie wyobrazić. Dając trochę sznurka do zabawy;)
Ouki

1
Rzecz w fork () jest w rzeczywistości prawdą, jeśli ustawisz system tak, aby nigdy nie przepełniał pamięci RAM (nie jest to ustawienie domyślne). Dlaczego nie potrzebujecie już tego ustawienia, nie mam pojęcia. Nie jest to przydatne do przetwarzania w czasie rzeczywistym.
Joshua

@Jushua: Nadmierne zaangażowanie pamięci może nie być domyślne, a nawet możliwe, w zależności od systemu operacyjnego.
jlliagre

Mam serwer NAS z 8 GB pamięci RAM, będzie działał do 2 maszyn wirtualnych. Nie wprowadziłem zamiany. Jeśli zacznie się intensywnie zamieniać, to i tak już jest martwy. To doskonale wspiera twój argument. Z drugiej strony nadal używam mojego zardzewiałego pulpitu, który jest ograniczony do 1 GB pamięci RAM i tam mam zamianę do obsługi rzadkiej pamięci. To trochę spowalnia, ale pomóż mi w tym samym czasie otwierać Firefox i inne aplikacje.
Huygens

Uważam, że zabójca OOM uruchamia się zbyt późno, dopiero po opróżnieniu wszystkich pamięci podręcznych i spowolnieniu systemu. Aby mój system był niezadowolony, korzystam z funkcji wczesnego lub nohang, aby wykonać tę samą pracę, ale wcześniej! Może być używany z wymianą lub bez.
joeytwiddle

Odpowiedzi:


28

Nie należy mylić zamiany (jako obszaru dysku) i zamiany (jako metody przenoszenia stron pamięci z pamięci RAM na dysk i wzajemnie).

Nadmierna zamiana jest czymś, czego należy unikać ze względu na wydajność, ale posiadanie obszaru wymiany niekoniecznie stanowi problem.

W systemach, takich jak Linux, które przeciążają pamięć, tj. Które pozwalają procesom na przydzielenie większej ilości pamięci niż dostępna, brak pamięci RAM przy niewystarczającej ilości wymiany do obsłużenia sytuacji spowoduje wyzwolenie OOM-a. Musisz zaufać algorytmowi stosowanemu do wybrania „właściwego” procesu do zabicia i zaakceptować jeden lub więcej procesów, które zostaną zabite bez możliwości prawidłowego zamknięcia. Oto słynna analogia, która wyjaśnia, dlaczego zabójca OOM może wcale nie być dobrym pomysłem.

W systemach takich jak Solaris, które nie przepełniają pamięci, tj. Upewnij się, że rezerwacja pamięci jest zawsze wspierana przez pamięć wirtualną, czy to w pamięci RAM, czy na dysku, posiadanie wystarczającej powierzchni wymiany jest absolutnie konieczne, w przeciwnym razie potencjalnie znaczna część pamięci RAM będzie zmarnowany.


1
Czy jesteś pewien, że punkt dotyczący Solaris jest nadal prawdziwy? blogs.oracle.com/jimlaurent/entry/solaris_faq_myths_and_facts stwierdza: Pamięć wirtualna składa się dzisiaj z sumy fizycznej pamięci RAM i przestrzeni wymiany 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. Myślę, że rozumiem o co ci chodzi - jeśli chcesz zmapować coś większego niż fizyczny taran bez zamiany, nie możesz? (Niezależnie od tego, że mmap jest leniwym inicjatorem).
synthesizerpatel

5
Tak, jestem pewien, że moje zdanie na temat Solaris jest nadal prawdziwe. Nawet jeśli cytat Jima Laurenta jest prawdziwy, tzn. Solaris nie wymaga wymiany, brak wymiany oznacza, że ​​wszystkie rezerwacje pamięci (tj. Malloc) muszą być wspierane przez RAM, nawet jeśli część przydzielonej pamięci nie jest używana. Nie jest to związane z dużymi mmapami lub tmpfs, chociaż tmpfs jest również powodem, dla którego możesz chcieć zamienić się z Solaris (i Linux również w tym przypadku).
jlliagre

1
Aktualizacja dla Linuksa: nadpisywanie można wyłączyć, algorytm OOM można zmodyfikować, możesz nawet mieć własny moduł obsługi OOM z cgroups.
peterph

1
@peterph Wyłączenie nadmiernego zaangażowania w Linuksie czyni z wymiany jeszcze mniej anachronizm. Jeśli nie przesadzisz, musisz upewnić się, że masz obszar wymiany wystarczająco duży, aby wszystkie rezerwacje mogły zostać poparte.
jlliagre

1
Pamięć wirtualna zarezerwowana przez rozwidlenie zależy od wielkości programu, który to robi. Załóżmy, że masz maszynę wirtualną Java, która korzysta z 2 GB pamięci na rozwidlenie, będzie to tymczasowo wymagać 2 GB więcej. Jeśli tak się stanie, gdy masz mniej niż 2 GB dostępnej pamięci lub jednocześnie wiele razy, jeden lub więcej wideł ulegnie awarii. Jest to częsta sytuacja w przypadku niepotrzebnych systemów operacyjnych, a także w przypadku Linuksa, gdy nadmierne zaangażowanie jest wyłączone. Można to łatwo naprawić, mając wystarczająco dużą powierzchnię wymiany, co IMHO jest znacznie lepszym rozwiązaniem niż nadmierne zaangażowanie pamięci.
jlliagre

3

Znam jeden powód, aby ciągle się wymieniać. Mam aplikację, która zajmuje tyle pamięci, ile mogę sobie pozwolić na skonfigurowanie dla mojego systemu. Korzysta z Hadoop, który w jednej części przetwarzania wykonuje rozwidlenie i exec do uruchomienia pojedynczej komendy unix (myślę, że „uname” lub „user” lub coś, dla czego nie mogliby znaleźć odpowiednika Java). Wygląda na to, że java nie robi vfork z kopiowaniem podczas semantyki zapisu, tak jak zrobiłaby to natywna aplikacja. Jeśli uruchomię aplikację przy użyciu 4 GB pamięci RAM, to gdy rozwidli się, widelec zużyje kolejne 4 GB pamięci RAM, ale szybko ją zwolni. Gdybym nie miał wymiany 4 Gb dla tego Hadoopa do zamiany, musiałbym płacić za 8 Gb pamięci RAM, aby mieć 4 GB dla mojej aplikacji.


To świetna uwaga, ale nie odzwierciedlenie współczesnego fork () - w Linuksie i FreeBSD (i, pozornie OSX?), Fork () jest implementowany za pomocą stron kopiujących przy zapisie. Kopiowanie przy zapisie (lub COW) to technika opóźniania lub całkowitego zapobiegania kopiowaniu danych. Zamiast powielać przestrzeń adresową procesu, rodzic i dziecko mogą udostępniać jedną kopię. Dane są jednak oznaczone w taki sposób, że jeśli są zapisywane, tworzony jest duplikat, a każdy proces otrzymuje unikalną kopię. Cytaty: forums.freebsd.org/showthread.php?t=26355 i Linux manpage for fork ()
synthesizerpatel

Chociaż jest to prawda, istnieje kilka stron, których nie można oznaczyć jako COW. Na przykład strony używane do stosu jądra nowego procesu potomnego oraz strony używane do wewnętrznych struktur danych (the files_struct, the struct signals, the task_structi inne). Ponadto wiele stron wykonywalnych nie jest kodem zależnym od pozycji (PIC), a zatem strony kodu wykonywalnego, które zostały zmodyfikowane przez moduł dynamicznego modułu ładującego ( ld-linux.so), muszą mieć zarezerwowane dla nich miejsce wymiany, nawet jeśli nic nie zostanie zapisane w miejscu wymiany natychmiast. Dlatego kocham Linuxa; możesz wyłączyć swap, a system nadal działa. :)
Azhrei

3

Nie mogę technicznie dodać do dyskusji, ale mogę podać kilka przykładów. Mój stary notebook (2 GB pamięci RAM kunbuntu lucid) zazwyczaj działa z wymianą na 0. Kiedy uruchamiam transmisję (klient bittorrent) z wieloma torrentami, które mogą łącznie korzystać ze 100 połączeń, moja zamiana może pójść w górę. Jest jeszcze gorzej, gdy mam uruchomioną maszynę XP XP, która wykorzystuje 1 GB prawdziwej pamięci.

Widziałem, jak inni komentują, że procesy wymagające dużej ilości pamięci, takie jak renderowanie grafiki, również mogą zamieniać się w swap. Jeśli robisz to tylko okazjonalnie, to nie jest to problem.

Jeśli chodzi o problemy z OOM, zamiana może być rzeczywiście ratownikiem, ponieważ kupuje ci czas między identyfikacją problemu a rzeczami zmierzającymi na południe. Wiele rzeczy zajmuje prawie całą moją pamięć, więc nie zwracam na to uwagi, ale kiedy zaczyna się zamiana, zauważam to i zaczynam szukać problemu - zanim mnie gryzie.


Cóż, starsze systemy nie mogą wiele zrobić bez włączonej wymiany. Nadal mam stary subnotebook z 256 MB pamięci RAM, gdzie wymagana jest zamiana, aby uruchomić prawie dowolny program. Uważam, że pytanie dotyczy jednak nowoczesnych systemów.
Dmitrij Grigoryev

3

Jest jedna bardzo ładna aplikacja do wymiany przestrzeni: rozszerzenie pamięci RAM poprzez umieszczenie przestrzeni wymiany na urządzeniu pamięci masowej korzystającym z pamięci RAM, aby pokonać ograniczenia instalowalnej pamięci RAM systemu

Spójrz na ten najobszerniejszy http://techreport.com/articles.x/16255 Zasadniczo jest to interfejs od S-ATA do DDR2-RAM. Możesz w nich umieścić do 64 GB pamięci RAM. Umieszczając miejsce wymiany na jednym z nich, zyskujesz znaczną dodatkową pamięć RAM. Oczywiście nie jest tak szybki jak zwykła pamięć RAM systemu. Ale w pewien sposób zamienia systemową pamięć RAM w coś w rodzaju dodatkowej warstwy pamięci podręcznej.


1
Zrozumienie jego ceny (549 USD) nie byłoby bardziej efektywne w zainwestowaniu 100 USD w płytę główną obsługującą 64 GB pamięci RAM ?
Dmitrij Grigoryev

1
@DmitryGrigoryev: Oczywiście. Ale czasami jesteś zmuszony do korzystania z tego konkretnego rodzaju sprzętu (ze względu na przyczyny kaszlu certyfikacji systemu medycznego kaszel ), ale także mamy do czynienia z absurdalnie dużych zbiorów danych wytwarzanych w bardzo krótkim czasie (myślę skanerów tomografii datarates> 3GiB / s).
datenwolf,

Czy w takim przypadku nie musiałbyś również certyfikować napędu RAM jako urządzenia medycznego? ;) Ale tak, mam rację.
Dmitry Grigoryev

1
@DmitryGrigoryev: Rzeczywiście musisz to zrobić. Jednak certyfikacja takiego urządzenia dyskowego S-ATA RAM jest o wiele, wiele łatwiejsza niż certyfikacja całej płyty głównej. Przy zakupie komputerów używanych w sprzęcie medycznym zwykle kupujesz tyle komponentów, ile to możliwe, certyfikowanych z półki. W przypadku części, w których nie ma nic z łatwo dostępną certyfikacją, samodzielnie wykonaj niezbędne testy i certyfikację. Jest to najbardziej opłacalne i najszybsze rozwiązanie, szczególnie w pracy badawczej, w której nacisk kładzie się na bezpieczeństwo pacjenta, a dane nie są wykorzystywane do planowania leczenia. BT; DT.
datenwolf,

3

Używam Linuksa i Windowsa bez wymiany (plik stronicowania, w nomenklaturze Windows), na notebookach / komputerach z 4 Gb lub więcej. Jest kilka przypadków wyczerpania pamięci, po prostu sobie z nimi radzę. Wydaje mi się, że system jest w ten sposób szybszy, na czym bardziej mi zależy. Jednak nie mam specjalnych wymagań dotyczących mojego obciążenia pracą.

Czego się nauczyłem:

  • Windows „traci” pamięć z czasem, w ciągu około 20-30 dni bezczynności dochodzę do momentu, w którym wolę po prostu zrestartować komputer. Nie wiem, dlaczego tak się dzieje. Domyślam się, że może to być wyciek jakiegoś sterownika lub programu antywirusowego. Jeśli masz plik stronicowania, uważam, że może on umieścić tę przeciekającą pamięć w pliku stronicowania, więc trudniej byłoby zauważyć ten problem w zwykłym systemie Windows.
  • Firefox radzi sobie znacznie lepiej przy małej ilości pamięci niż Chrome. Firefox ostrzega i nadal działa, Chrome po prostu ulega awarii.

2

Myślę, że twoje argumenty są dość poprawne dla serwera , na którym wydajność jest ważna, a wiedza, która aplikacja będzie działać w następnej kolejności, może nie być przewidywalna.

W przypadku komputerów stacjonarnych uznaję zamianę za przydatną podczas pchania i wyskakiwania zadań.

Na przykład, jeśli pracuję nad zadaniem za pomocą aplikacji, Aa następnie stwierdzam, że muszę do Bczegoś użyć aplikacji (poddziałania lub przerwy), to łatwiej jest mi mentalnie zezwolić na Azamianę dysku podczas pracy w Bcelu zamknięcia, Aa następnie pamiętaj, aby uruchomić go ponownie później.

Jest to szczególnie prawdziwe, jeśli Autrzymuje jakiś niezapisany stan, który nie zostałby przywrócony po ponownym uruchomieniu.

To, czy szybsze jest pchanie i przeciąganie Ado / z zamiany, czy zamykanie i ponowne uruchamianie, zależy od aplikacji. (Niektórym udaje się uruchomić powoli, ale niewielki rozmiar).

Zgadzam się jednak, że lepszym rozwiązaniem w celu zwiększenia wydajności byłoby zainstalowanie dodatkowej pamięci RAM.


Aktualizacja: po napisaniu tej odpowiedzi miałem laptop z dużą ilością pamięci RAM i wolnym dyskiem twardym. W takim przypadku moja rada się odwróciła! Oto podsumowanie zalet i wad .
joeytwiddle

1

W moim systemie / tmp przelewa się, aby wymienić, jeśli pochłonie zbyt dużo pamięci RAM.

Jest to o wiele szybsze niż używanie prawdziwego systemu plików dla / tmp.


To dość niebezpieczne - jeśli potrzebuję ramfs, określam w fstab (lub opcjach), aby jawnie ustawić rozmiar. Równie prawdopodobne jest, że program oszaleje z powodu alokacji pamięci, ponieważ zacznie tworzyć pliki w / tmp. Zamiana byłaby złym miejscem do wyświetlania plików ramfs (szczególnie jeśli zależy Ci na prędkości ramfs)
synthesizerpatel

2
Często przekraczam tam rozmiar pamięci RAM. tmpfs wspierany przez swap jest znacznie szybszy niż ext2, nawet podczas rozlewania.
Joshua

Przydatne, aby wiedzieć - i prawdopodobnie będę przedmiotem badań w przyszłości - nadal będę się martwił aplikacją wypełniającą mojego ram przez proxy tmpfs / ramfs w / tmp. To daje mi dziwne cyce!
synthesizerpatel

Następnie ustaw limit = rozmiar zamiany.
Joshua

Nawiasem mówiąc, na tym polega różnica między ramfs a tmpfs. tmpfs może się rozlewać i zamieniać, podczas gdy ramfs nie.
Joshua

1

Istnieje wiele powodów, dla których stosuje się swap.

Zwykle, gdy system nie ma wystarczającej ilości pamięci fizycznej, jądro może zamienić niektóre aplikacje (w rzeczywistości - niektóre części pamięci, które są używane przez nie uruchamiane aplikacje).

Później, gdy te aplikacje powinny coś zrobić (na przykład niektóre dane docierają do gniazda lub niektóre odpalają czasomierz) - jądro spowoduje zamianę innej aplikacji.

Innym przykładem użycia zamiany jest zawieszenie na dysku.

Jeśli chodzi o urządzenia osadzone, wszystkie z nich można podzielić na (co najmniej) dwie duże grupy:

  1. działają w systemie Linux / Windows lub podobnym innym niż RTOS (system operacyjny czasu rzeczywistego); lub
  2. prowadzą RTOS.

Oczywiście, są urządzenia, na których działa tylko pewien kod (jakiś rodzaj mikrokontrolerów) itp. Nie opisałbym ich, ponieważ takie urządzenia nie mają żadnego systemu operacyjnego, więc omawianie wymiany nie ma sensu dla takich urządzeń.

Pierwsza grupa urządzeń osadzonych (z systemem operacyjnym) może korzystać (i zwykle korzysta) z wymiany. Ogólnie rzecz biorąc, takie urządzenia używają wymiany w taki sam sposób, jak komputery stacjonarne i serwery.

Druga grupa urządzeń (z uruchomionym systemem RTOS) w ogóle nie używa wymiany, ponieważ RTOS ma ograniczony czas reakcji na zdarzenie, oraz

  • czytanie z wymiany może zająć nieprzewidziany czas
  • urządzenia mają zdefiniowaną (w czasie kompilacji) liczbę zadań, których nie trzeba wymieniać

BTW, istnieje wiele opisów tego, w jaki sposób Linux używa wymiany, jednym z nich jest http://distilledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page
Korzystanie z systemu Windows podobne podejście.


Również zamiana jest potrzebna do hibernacji (zawieszenia na dysk), chyba że używasz czegoś takiego jak TuxOnIce.
Renan

1

Wydaje mi się, że zarówno hibernacja, jak i sen hybrydowy wymagają przestrzeni wymiany w systemie Linux .

Nigdy nie korzystałem z przestrzeni wymiany / partycji w systemie Linux, dopóki nie stanąłem przed koniecznością użycia trybu uśpienia hybrydowego - ponieważ uśpienie na krytycznym poziomie baterii nie było dostępne w moim systemie, ponieważ było to obsługiwane przez Upower, który wybiera tylko pomiędzy Shut-Down, Hibernate i Hybrid -spać. (więcej tutaj )


0

Kilka dobrych zastosowań, które widziałem, to procesy, które zużywają dużo pamięci, ale nie są krytyczne pod względem wydajności. Jednym z przypadków był starożytny Firefox, który miał zły wyciek pamięci. Wypełniałoby pamięć RAM i rozlewałoby się, aby zamieniać bez negatywnego efektu. Kolejnym, który mieliśmy, był nasz rekurencyjny serwer DNS (te szybko gromadzą ogromną pamięć podręczną, która jest rzadko używana).

Inne wyjaśnienie, które widziałem o zamianie, brzmiało trochę tak: „Mówiono ci, aby zawsze konfigurować SWAP = 2 * RAM. To kompletny nonsens, nie ma związku między pamięcią RAM i zamianą. Zamień ma na celu przyspieszenie wzrostu wykorzystania pamięci , należy dodać wystarczającą ilość pamięci, aby przez większość czasu ładowanie mieściło się w pamięci RAM. Jeśli ładunek jest stabilny, nie potrzebujesz wymiany. Jeśli obciążenie jest bardzo zmienne, potrzebujesz wystarczającej ilości wymiany na skoki i ustaw tak, aby swap jest używany rzadko, aby nie wpływać znacząco na wydajność. Podsumowując, ponieważ nie masz pojęcia, jakie są skoki obciążenia, a dysk jest o wiele tańszy niż pamięć RAM, skonfiguruj SWAP = 2 * RAM. ”

Niektóre stare wersje systemu Solaris nie mogły w ogóle używać swapów, chyba że było co najmniej tyle swapów co RAM (pamiętam, że przydzielono stałą przestrzeń wymiany do wychodzenia z pamięci RAM lub coś w tym rodzaju), więc 2 * RAM było naprawdę około rozsądnego minimum wartość. Ale to było eony temu, kiedy nasza duża maszyna miała 64 MiB RAM i dysk 1 GiB ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.