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:
- Jeśli nie mam zamiany, pojawia się błąd „brak pamięci”
- 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.
źródło
mmap
nad przydzieleniem stron zestawu roboczego. Wtedy twoja ilość swapów będzie dokładnie taka, jakiej potrzebujesz do swojego procesu.discard
na 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).Odpowiedzi:
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:
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ć.
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.)
źródło
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.
źródło
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:
Kiedy już go nie potrzebujesz:
Uwagi:
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.
Istnieją sposoby, aby Linux nie zawiódł, gdy nie ma dostępnej pamięci, a mianowicie poprzez manipulowanie wartościami tych wpisów sysctl:
źródło
If I have no swap, I get an 'out of memory' error
- co jestfalse
- 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.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.
źródło
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.
źródło
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.
źródło
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ć.
źródło
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.
źródło