Zamień rozmiar partycji na komputerze z 64 GB pamięci RAM na pracę wymagającą dużej ilości pamięci

36

Mam 64 GB pamięci RAM i 240 GB SSD na komputerze, którego zamierzam użyć do obliczeń wymagających dużej ilości pamięci (uczenie maszynowe, eksploracja danych itp.). Większość porad, które znalazłem w Internecie, dotyczy około 2-4-8 GB komputerów RAM i zalecają one 2x rozmiar partycji wymiany RAM (czyli 128 GB).

Czy rozsądnie jest utworzyć partycję wymiany o pojemności 128 GB? jakie korzyści mogę uzyskać, tworząc ogromną partycję wymiany?

Czy rozumiem poprawnie, że w przypadku braku fizycznej pamięci RAM:

  1. Jeśli nie mam zamiany, pojawia się błąd „brak pamięci”
  2. Jeśli mam zamianę, niektóre strony RAM zostaną skopiowane na partycję wymiany, a program będzie nadal działał (choć wolniej).

Niektórzy twierdzą, że złym pomysłem jest zamiana na SSD, ponieważ ma ograniczoną liczbę cykli odczytu / zapisu. Jak szybko za pomocą zamiany wyczerpuje ona cykle odczytu / zapisu SSD (o ile mi wiadomo, to około 50000 zapisów IOPS)?

Korzystam z systemu Linux ( Ubuntu 14.04 (Trusty Tahr)).

Na razie ustawię zamianę 16 GB, ponieważ powinno to być na pewno wystarczające (na przykład RedHat sugeruje 4 GB), a 16 GB miejsca na dysku nie jest w rzeczywistości wielkim problemem.

wrwt
źródło
1
Zamiast jawnie polegać na zamianie, jeśli znasz rozmiar swojego zestawu roboczego lub chcesz zrobić trochę więcej zarządzania pamięcią niskiego poziomu, zastanów się mmapnad przydzieleniem stron zestawu roboczego. Wtedy twoja ilość swapów będzie dokładnie taka, jakiej potrzebujesz do swojego procesu.
puszysty
5
Rada zalecająca „dwukrotną ilość pamięci RAM” pochodzi z dawnych czasów, kiedy komputery miały mało pamięci RAM. Kilka dokumentów stwierdza, że ​​ma to zastosowanie przede wszystkim do komputerów z <2 GB pamięci RAM. Co więcej, rozmiar zamiany jest głównie związany z tym, co robisz z maszyną.
John WH Smith,
Zobacz także: Usterkę serwera - pytania i odpowiedzi - jeśli korzystasz z Javy (i ewentualnie innych aplikacji), chcesz się upewnić, że masz wystarczającą liczbę wymian, aby zwiększyć alokację pamięci. Osobiście trzymam się standardu RHEL RAM + 2 dla mojej partycji wymiany
warren
2
Szkoda, że ​​większość komentarzy tutaj została usunięta. Dodając ponownie: Warto przy okazji wspomnieć, że jeśli jądro to obsługuje, możesz zamontować partycję wymiany discardna dysku SSD. Również (o czym wspomniano w odpowiedzi poniżej), nie zapomnij, że możesz użyć pliku zamiast partycji do potencjalnie łatwiejszego zarządzania (i nie ma spadku wydajności na dysku SSD z powodu np. Fragmentacji).
Jason C
1
Jeśli masz aplikację intensywnie korzystającą z pamięci, taką jak uczenie się SVM, a skończy Ci się pamięć RAM i zaczniesz zamieniać, wszystko stanie się zbyt powolne, aby się zregenerować, a jedynym dostępnym ruchem będzie wyciągnięcie wtyczki (co zdarzyło mi się kilka razy) . Prawdopodobnie chcesz, aby proces został zabity przez OOM, jeśli zacznie się zamieniać, abyś mógł przynajmniej zmienić rzeczy i zacząć od nowa. Może z dyskami SSD nie jest tak źle. Sprawdziłbym też ustawienia OOMK - zdarzało mi się na Ubuntu, że czasami procesy zabijały OOM, gdy wciąż było dużo
pamięci

Odpowiedzi:

36

Prawdopodobnie potrzebujesz tylko niewielkiej ilości zamiany. Kiedy masz wystarczającą ilość pamięci RAM dla typowego zestawu roboczego komputera, co jestem pewien, że tak, potrzebujesz zamiany tylko na dwie rzeczy:

  1. Potrzebujesz wymiany, aby uzyskać informacje, które prawdopodobnie nigdy nie będą dostępne z pamięci RAM, aby zwolnić więcej miejsca na pamięć podręczną dysku. Wiele aplikacji działa podczas uruchamiania systemu i nigdy nie będzie można uzyskać do nich dostępu. Nie chcesz, aby żadne zabrudzone strony utknęły na zawsze w pamięci RAM. Więc potrzebujesz zamiany, aby je zatrzymać.

  2. Potrzebujesz swapu na pokrycie przydziałów, które nigdy nie zostaną wypełnione. To miejsce musi być po prostu dostępne, nawet jeśli nie zostanie wykorzystane. Bez tego system będzie musiał odmówić alokacji pamięci, nawet gdy będzie miał dużo wolnej fizycznej pamięci RAM, ponieważ nie ma wystarczającej ilości kopii zapasowych, aby umożliwić wykorzystanie wszystkich alokacji jednocześnie.

Żadne z nich nie wymaga dużej wymiany. 16 GB, na przykład, powinno wystarczyć. Celem nie jest uruchomienie większych zestawów roboczych kosztem szybkości. Ma to na celu umożliwienie efektywnego korzystania z 64 GB i nie trzeba zapychać go śmieciami ani rezerwować na przypadkowe przypadki, które nigdy się nie zdarzają.

(Zgadzam się z Bertem, że 4 GB prawdopodobnie wystarczy.)

David Schwartz
źródło
2
@wrwt Umieść partycję wymiany na końcu dysku (lub przynajmniej po partycji danych), spowoduje to, że zmiana rozmiaru będzie szybsza i mniej intensywna w przypadku zapisywania, jeśli kiedykolwiek będziesz go dostosowywać (a dokładniej spowoduje zmianę rozmiaru partycji danych aby to ułatwić, ponieważ nie musisz ruszać początku). Nie ma związku między pozycją a wydajnością na dyskach SSD, ponieważ czasami występują na dyskach mechanicznych.
Jason C
Chociaż odpowiedź ta prawdopodobnie wystarcza większości hobbystów, jest to zła rada dla prawdziwych serwerów - odpowiedź zależy od tego, jak napisana jest aplikacja, ponieważ brak miejsca na zamianę spowoduje, że zabójca z braku pamięci uruchomi się i zakończy działanie proces losowo (tak, dobrze przeczytałeś; „losowo”)
Soren
3
@ Soren To jest superużytkownik, a nie błąd serwera. ;) Z pewnością jest prawdą, że ustawienie przestrzeni wymiany nie jest jedyną decyzją, którą musisz podjąć w przypadku „prawdziwych serwerów”. Musisz także podejmować decyzje dotyczące nadmiernego zaangażowania, być może będziesz musiał dostroić zabójcę OOM i tak dalej. (Odpowiedzi stają się znacznie bardziej skomplikowane, jeśli spodziewasz się, że Twój zestaw roboczy przekroczy fizyczną pamięć RAM. Ale prawie nikt już nie obsługuje maszyn w ten sposób.)
David Schwartz
5
Linux zastąpi pamięć nawet bez włączonej wymiany. Po prostu przetworzy OOMK, gdy faktycznie zostanie użyte zbyt dużo pamięci. Drugi punkt odpowiedzi jest błędny.
Ruslan
1
@MaciejPiechotka Lub użyj pliku.
Jason C
29

RedHat zaleca 4 GB na komputerze z 64 GB .

Jednak zmiana rozmiaru jest bardziej sztuką niż nauką. Zależy to od tego, do czego urządzenie jest używane, ile masz miejsca na dysku i pamięci oraz od innych czynników. Pamiętaj, że zawsze możesz później dodać więcej swapów.

Korzystanie z reguły pamięci fizycznej 2X jest przestarzałe z powodu ilości systemów pamięci, które mają obecnie. Ale uruchomienie z zerową zamianą nie jest zalecane, chyba że wiesz, co robisz. Zalecenia 4 GB to dobry punkt wyjścia.

Bert
źródło
12
+1 za ostatni akapit. Zalecenie 2x pochodzi z czasów, gdy większość komputerów nie miała wystarczającej ilości pamięci RAM, aby uniknąć zamiany podczas normalnego użytkowania. Subiektywnie, z użycia komputerów, limit 2x wydaje się być wybrany jako liczba wystarczająco duża, aby komputer stał się wyjątkowo wolny, zanim skończy się zamiana.
Dan Neely
1
2X działał również dobrze, gdy systemy miały 4 GB / 8 GB pamięci RAM i setki gigabajtów miejsca na dysku. Jasne, prawdopodobnie było to więcej niż potrzebne, ale jaka szkoda? Ale teraz, gdy systemy mają 16 GB / 64 GB pamięci RAM i 128 GB / 256 GB dysków SSD, szkoda jest oczywista.
David Schwartz
12

W systemie Linux potrzebujesz wystarczającej wymiany, aby całkowita dostępna pamięć wirtualna (RAM + SWAP) była wystarczająca dla wszystkich procesów, które chcesz uruchomić jednocześnie i ich maksymalny wirtualny ślad.

Jeśli masz mniej swapów lub w ogóle ich nie ma, to dzieje się tak: w systemie brakuje pamięci, próbując przydzielić stronę. Ale nadal jest to miękka awaria, mimo że nie ma wymiany, ponieważ system ma wiele stron „ofiar”, które można usunąć, aby zrobić miejsce: mianowicie strony wszystkich mapowań pamięci opartych na plikach, takich jak pliki wykonywalne i wspólne biblioteki!

Ponieważ system wymaga coraz więcej miejsca na dane (których nie można zamienić), będzie coraz bardziej ewakuować kod wykonywalny (biblioteki współdzielone i pliki wykonywalne), prowadząc do strasznego thrashingu, ponieważ zestaw roboczy jest przycinany do coraz ściślejszego zestawu strony.

Zamień przestrzeń łagodzi ten problem, zapewniając miejsce do wymiany anonimowych (nie zamapowanych plików) stron: stron używanych do alokacji pamięci, aby kod wykonywalny mógł pozostać w pamięci.

Mimo to, jeśli często nie uruchamiasz zadań intensywnie korzystających z pamięci, możesz przez większość czasu uciec od pracy bez zamiany i ręcznie skonfigurować plik wymiany (zamiast dedykowanej partycji), kiedy jest to potrzebne. Aby utworzyć plik wymiany w locie, stań się rootem i:

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

Kiedy już go nie potrzebujesz:

swapoff /path/to/swapfile
rm /path/to/swapfile

Uwagi:

  1. Zdecydowanie nie musisz konfigurować przynajmniej tyle swapów, ile masz pamięci RAM. Ta ogólna zasada sięga czasów systemów operacyjnych, w których było to trudne wymaganie ze względu na sposób zaprojektowania wymiany.

  2. Istnieją sposoby, aby Linux nie zawiódł, gdy nie ma dostępnej pamięci, a mianowicie poprzez manipulowanie wartościami tych wpisów sysctl:

    vm.overcommit_memory
    vm.overcommit_ratio
    
Kaz
źródło
2
+1 za faktyczne odniesienie się do parametrów konfiguracyjnych jądra - klucz znajduje się w części pytania If I have no swap, I get an 'out of memory' error- co jest false- prawda jest taka, że ​​kiedy zabraknie miejsca wymiany, zabójca braku pamięci włączy się i zabije losowy proces zwalniania miejsca - więc ilość potrzebnej przestrzeni wymiany zależy od tego, jak napisana jest aplikacja.
Soren
@ Soren Prawdopodobnie większość pamięci RAM zostanie wypełniona rzeczywistymi danymi, więc zabójca braku pamięci nie zrobi dużej różnicy. Dzięki za „prawdę”.
napisał
3

Jest więcej rozważań. Jeśli potrzebujesz / chcesz zawiesić działanie, potrzebujesz przynajmniej wielkości pamięci RAM, a następnie trochę. Wydaje się to jednak mało prawdopodobne, ponieważ wydaje się, że budujesz głównie konia obliczeniowego.

W takim przypadku rozważ użycie pliku wymiany zamiast partycji. Nie musisz martwić się o duży rozmiar, pozbywanie się lub dodawanie go później nie wymaga żadnego podziału na partycje. Nie ma (zauważalnego) obniżenia wydajności przy użyciu pliku na partycji. Jeśli kiedykolwiek będziesz go potrzebować, spójrz na rozmiar, a to da ci również dobre wskazówki.

kaste
źródło
1
@Kaz Myślę, że mówisz o czymś innym niż kaste. kaste mówi, że jeśli chcesz mieć możliwość zawieszenia / hibernacji komputera, wyłączenia go i wybrania tam, gdzie później przerwałeś, potrzebujesz wystarczającej przestrzeni wymiany, aby przechowywać całą pamięć RAM (gdzie indziej?).
amalloy
@amalloy Jeśli przechowujesz pamięć RAM w swoim obszarze wymiany, dokąd zmierza zamiana (pamiętanie, że zamiana jest traktowana jak pamięć - jeśli straciła, to to samo, co utrata pamięci RAM).
NPSF3000,
2

Obciążenie, które chcesz zastosować na maszynie, wymaga pewnej ilości pamięci do uruchomienia (pamiętaj, aby dodać do równania wystarczającą ilość, aby obsłużyć szczytowe obciążenia), i musisz skonfigurować komputer tak, aby miał przynajmniej to.

Nowoczesne systemy operacyjne zapewniają pamięć wirtualną jako połączenie pamięci fizycznej i przestrzeni wymiany, więc jeśli potrzebujesz więcej pamięci niż dostępna jest maszyna, musisz dodać wystarczającą przestrzeń wymiany, aby wypełnić lukę. To znaczy, jeśli potrzebujesz maksymalnie 80 GB, a urządzenie ma 64 GB, potrzebujesz wymiany 16 GB.

Zazwyczaj instalatorzy systemów operacyjnych proszą o utworzenie początkowego obszaru wymiany (ponieważ jest to najprostszy i pozwala na instalację nawet małych komputerów), i stwierdzono, że dobrą zasadą przy typowych operacjach uniksowych jest posiadanie pamięci wirtualnej o wielkości trzy razy więcej niż pamięć fizyczna, więc zwykle jest to sugerowane. Jednak wiesz więcej na temat schematu użytkowania, więc możesz to odpowiednio zmienić.

Nie ma nic złego w pracy bez swapspace, jeśli presja pamięci jest zawsze mniejsza. Linux w przejrzysty sposób wykorzysta każdą nieużywaną pamięć jako pamięć podręczną dysku.

Thorbjørn Ravn Andersen
źródło
2

O wiele lepszym pomysłem niż „dużo wymiany” jest (ponowne) uporządkowanie pracy tak, aby zestawy robocze zmieściły się w pamięci, a następnie użycie systemu plików do przechowywania i pobierania wykonanej pracy. To znaczy, zamiast zmuszać system operacyjny do zgadywania, jakie będą wzorce wykorzystania pamięci, użyj tego, co wiesz o swoich problemach, aby kontrolować wzorce wykorzystania pamięci.

Jako przypadkowy przykład, który jest bezpośrednio istotny dla mnie tego lata ... Przy implementacji sita kwadratowego potrzebna jest duża (najwyraźniej) ciągła tablica do zaznaczenia (z pewnym skomplikowanym algorytmem, którego szczegóły w rzeczywistości nie mają znaczenia dla tego przykładu). Tablica musi zawierać ~ 100 wpisów Giga, więc łatwo w zakresie 1 TB. Mógłbym udawać, że to przydzieliłem i pozwolić systemowi operacyjnemu wykonać niesamowitą ilość nieefektywnych zamian, aby dostać się do pamięci RAM i wyjść z niej, aby obsługiwać wszystkie sekwencyjne zapisy przez tablicę. Zamiast robić coś, co jest bezgraniczne, postanowiłem przydzielić znacznie mniejszą tablicę, która dokładnie mieści się w pamięci, a następnie ponownie użyć tej małej tablicy, aby iteracyjnie pokryć resztę dużej tablicy w plasterkach. Odebrałem też system operacyjny, usunąłem działający zestaw usług, wymieniłem powłokę,

Dysk SSD może być szybki, ale nie jest tak szybki, jak zorganizowanie obliczeń w celu wykonania tego samego zestawu operacji bez zatrzymywania się podczas wymiany.

Eric Towers
źródło
1

Jak wspomniano inni, partycja wymiany jest dobrym pomysłem, nawet jeśli masz dużo pamięci RAM. Nie jest dobrym pomysłem umieszczenie go na dysku SSD; częste zapisywanie partycji wymiany ostatecznie zużyje dysk.

Jeśli masz zapasowy port USB 3.0, sugeruję użycie dysku flash do wymiany przestrzeni dyskowej. Istnieje wiele szybkich dysków flash, które są tak szybkie jak dysk SSD, ale o wiele tańsze - wystarczająco tanie, aby je wymienić, jeśli zacznie się zawodzić. Szybkie wyszukiwanie na Amazon pokazuje, że istnieje wiele przyzwoitych dysków flash USB 3.0 16 GB za mniej niż 20 USD, a nawet niektóre dyski 64 GB poniżej 60 USD.

Podziel dysk flash na partycje jako przestrzeń wymiany, a będziesz potrzebować przestrzeni wymiany, jeśli jej potrzebujesz, i spokoju ducha wiedząc, że wielokrotnie zapisywane wspomnienia można łatwo (i tanio) wymienić.

ArmanX
źródło
3
+1 za brak zamiany na SSD, -1 za zamianę na komponent o bardzo krótkim okresie użytkowania, gdy jest używany w ten sposób.
Aviator45003
1
@TC ma rację, ArmanX - jeśli próbujesz unikać używania pamięci flash (SSD), dlaczego miałbyś używać pamięci flash na USB? To irracjonalne.
warren
2
@TC: Nieużywanie SSD do wymiany z powodu zużycia medium to nieuzasadniona miejska legenda. Zamiana nie następuje „przez cały czas”, ale rzadko. Jest to również coś, co zostało szeroko zbadane w firmie Microsoft po wydaniu Win7, w wyniku czego typowe wzorce dostępu do wymiany są całkiem akceptowalne dla dysków SSD (to jest Windows, a nie Ubuntu, ale prawdopodobnie Linux nie działa znacznie gorzej). Masz sto (lub tysiąc) razy więcej operacji zapisu, które niszczą dysk SSD z powodu głupich plików dziennika, których nikt nigdy nie czyta (zwykle synchronizuje każdą linię).
Damon
Logika jest błędna: jeśli napęd dyskowy jest rzeczywiście tak szybki jak dysk SSD, dlaczego jest tańszy?
Agent_L
To równowaga. Z jednej strony dobrym pomysłem jest mieć plik wymiany. Z drugiej strony, jeśli plik wymiany zużywa dysk SSD (co masz rację, prawdopodobnie nie będzie miało znaczenia), lepiej byłoby użyć taniego zamiennika - a dysk flash za 20 USD jest znacznie lepszy niż dysk SSD za ponad 100 USD.
ArmanX
1

Wszystko będzie dobrze, nawet z 1GiB (i prawdopodobnie mniej) zamiany. Mój komputer służbowy zwykle używa nie więcej niż 140-150 MiB. Gigabajt jest w tym przypadku zbyt dużym zapasem.
O ile nie wykonasz zadań obliczeniowych, które wymagają zestawów danych w setkach gigabajtów i (ten jest ważny!) Dostęp do danych jest mniej lub bardziej jednorazowy, nigdy nie będziesz chciał wymiany dużo większej. Ale z drugiej strony po prostu mapowanie pamięci pliku danych działa równie dobrze dla tej aplikacji.

Ale więcej zamiany pomaga więcej, prawda? Więcej wszystkiego jest zawsze lepsze!

Zastanów się, jaką różnicę zrobi zamiana, powiedzmy, 16GiB (lub pomyśl o 64GiB). Jeśli nigdy nie użyjesz tych 16GiB, równie dobrze możesz nie odłożyć ich na bok. Ale jeśli ich użyjesz, co się stanie? Dysk w porównaniu z pamięcią główną jest wyjątkowo wolny. Nawet z dyskiem SSD SATA-600 przesyłanie 16 GB zajmuje od 30 do 40 sekund i 2-4 razy dłużej w niektórych innych konfiguracjach.
Teraz ktoś nieuchronnie sprzeciwi się temu, że raczej przeglądasz kilkanaście stron 4kiB, a nie 16GiB za jednym razem. Chociaż jest to prawda, to prawda jest ważna. Jeśli potrzebujesz tylko zamienić kilka stron, nie potrzebujesz 16GiB swapu, ale jeśli potrzebujesz 16GiB swapu, to również je przeniesiesz (w ten czy inny sposób).

Teoretycznie 99,9% wszystkich użytkowników może nawet korzystać z maszyny 64GiB (lub dowolnej maszyny 8 + GiB) bez zamiany i najprawdopodobniej nigdy nie zauważy czegoś brakuje. Nie jest to jednak wskazane.
Po pierwsze, jest on nieoptymalny, ponieważ system operacyjny ma mniej możliwości wyboru, co może odrzucić, gdy zabraknie pamięci fizycznej. Są dwie rzeczy, które może zrobić: zamienić coś, co nie jest używane, lub wyrzucić strony z bufora bufora. Jeśli nie masz zamiany, możesz zrobić tylko jedną rzecz. Wyrzucanie stron z bufora bufora jest nieszkodliwe, ale może znacząco wpłynąć na wydajność.
Po drugie, prywatne anonimowe mapowania mogą po prostu zawieść, jeśli nie będzie wymiany. Zwykle tak się nie dzieje, ale w końcu, gdy nie ma wystarczającej ilości pamięci fizycznej, aby zaspokoić je wszystkie, i nie ma wymiany, system operacyjny ma tylko ten wybór, z wyjątkiem ...
Po trzecie, przerażający zabójca OOM może się uruchomić , Co oznacza, że ​​mniej lub bardziej losowy proces zostaje zabity. Nie, dziękuję. To nie jest coś, co chcesz mieć.

Biorąc to pod uwagę, porady takie jak potrzeba zamiany X razy ilość zainstalowanej pamięci RAM pochodzą od ludzi, którzy powtarzają coś, co słyszeli (i nie rozumieli!) Od kogoś, kto powtarzał coś, co słyszeli (i nie rozumieli!) Dekady temu.
Reguła „użyj 2 razy więcej pamięci RAM” była łatwą do zapamiętania praktyczną regułą w latach 80. i 90. XX wieku, nigdy nie była „złotą prawdą” (po prostu coś, co działało OK dla większości użytkowników) i obecnie nie ma zastosowania .

Powinieneś mieć rozsądną ilość swapów, na które możesz sobie łatwo pozwolić (powiedzmy, gigabajt), aby system operacyjny mógł znaleźć jakieś przestarzałe rzeczy, a świat nie kończy się natychmiast, gdy raz poprosisz o trochę więcej pamięci. Ale to jest to.

Damon
źródło