Udostępniaj pamięć RAM przez sieć

49

Mój kolega używa aplikacji, która zużywa dużo pamięci, co powoduje, że system jest zbyt wolny. Czy można udostępniać pamięć innym komputerom przez Internet?

System ma 8 GB pamięci RAM, a aplikacja zużywa ponad 6 GB.

Innov
źródło
5
Uruchom go na silnym serwerze za pośrednictwem pulpitu zdalnego, VNC lub X11?
WGroleau
3
Lepiej jest używać dużych dysków (HDD lub SSD) jako pamięci podręcznej, jak już wspomniano w odpowiedziach.
Firebug
12
do wglądu w przyszłości: Tabela latencji, którą powinien znać każdy [kto robi komputery] .
Nick Alexeev
79
Możesz mieć więcej szczęścia, ściągając więcej pamięci RAM ...
Mehrdad
4
Nowoczesne wersje systemu Windows umożliwiają używanie pamięci USB lub kart SD w celu poprawy wydajności. Nie oznacza to, że urządzenie jest używane jako pamięć RAM, ale coś, co działa między pamięcią RAM a dyskiem twardym opartym na talerzach.
Salman A

Odpowiedzi:

162

Rozważałem tylko samodzielną aplikację, która działa na „standardowym” komputerze, bez możliwości po prostu zainstalowania jej gdzie indziej lub użycia specjalistycznego sprzętu lub oprogramowania. Inne odpowiedzi (poprawnie) dotyczą migracji oprogramowania lub dedykowanego sprzętu do zadania.

Każdy sposób „współdzielenia pamięci RAM” przez sieć będzie podlegał ograniczeniom tego medium sieciowego. Ponieważ nawet gigabitowy Ethernet jest ograniczony do około 100 MB / s (megabajtów), oznacza to, że twoja prędkość pamięci RAM również będzie ograniczona.

100 MB / s to niewielki ułamek prędkości pamięci RAM, która faktycznie znajduje się w twoim systemie. Twój program będzie boleśnie powolny i będzie działał na komputerze z początku lat 90-tych

Nowoczesne dyski twarde są, w przypadku sekwencyjnego odczytu i zapisu, nieco szybsze. Dyski SSD są kilka razy szybsze.

Ignoruje to problemy z opóźnieniami, które sprawią, że twój program będzie ponownie wolniejszy o rząd wielkości.

Ze względu na powolność i inne problemy techniczne nie jest to problem, który ktoś kiedykolwiek uważał za warty rozwiązania dla systemów „domowych” lub „biurowych”. Taniej i skuteczniej jest kupić więcej pamięci RAM, jeśli jest to potrzebne.

Wystarczy kupić więcej pamięci RAM lub nawet dysk SSD dla pliku strony. Nie ma innego sposobu na zrobienie tego, który nie wymagałby szalonej ilości pracy lub sprzętu dla niewielkich korzyści.

Mokubai
źródło
46
Zamiana / stronicowanie przez gigabit Ethernet może mieć mniejsze opóźnienia niż plik stronicowania na lokalnym dysku magnetycznym . np. opóźnienie dysku 10 ms w porównaniu z czasem pingowania poniżej 1 ms dla lokalnej sieci Ethernet. Jeśli serwer plików zawierający plik stronicowania (lub urządzenie iSCSI, na które się zamieniasz) utrzymuje go w swojej pamięci RAM, potencjalnie wygrywasz. IDK, jeśli system Windows obsługuje stronicowanie do pliku sieciowego. (Jestem prawie pewien, że Linux tak, ale to pytanie Windows). Och, właśnie zobaczyłem, że pytanie brzmi „przez Internet”, więc nvm.
Peter Cordes
2
@ MarkHu Biorąc pod uwagę, że zostało to zadane superużytkownikowi, nie sądzę, aby pytający miał jakąkolwiek kontrolę nad kodem używanego oprogramowania.
oldmud0
2
@PeterCordes To, co opisujesz, to wciąż strata przy zakupie większej ilości pamięci RAM lub dysku SSD. A jeszcze bardziej na pewno w systemie Windows. ;)
jpmc26
11
@TomTom dla domu i „normalnego” użytku biurowego gigabit wciąż jest prawie tym, co dostajesz na swoim komputerze stacjonarnym. To, że 25G i 100G są powszechne (lub przynajmniej dostępne) dla infrastruktury szkieletowej , nie oznacza, że ​​prawdopodobnie zobaczysz to na pulpicie. Nie mogę nawet znaleźć stacjonarnej karty 10GigE u jakiegokolwiek lokalnego dostawcy za rozsądną cenę, nie mówiąc już o 25GigE. Karty 10GigE są tutaj około 4 razy droższe niż karta pamięci o pojemności 8 GB. Wiem, co uważam za rozsądną aktualizację.
Mokubai
9
„czuję się, jakby działał na komputerze z początku lat 90.” - dziwne, komputery z lat 90. wydawały się znacznie szybsze niż dziś.
Jeremy Visser
73

Dla kompletności: InfiniBand umożliwia bezpośredni dostęp do pamięci innych maszyn.

Wymaga to jednak:

  • Przełącznik InfiniBand
  • Dodatkowa karta InfiniBand w każdym komputerze
  • Aplikacja musi być specjalnie zaprogramowana, aby z niej korzystać

NIE działa w istniejącej sieci, wymaga całkowicie niezależnej infrastruktury dla wszystkich podłączonych węzłów. NIE działa również przez Internet

Gerald Schneider
źródło
53
Jest to z pewnością o wiele droższe niż tylko uzyskanie kolejnych 8 GiB pamięci RAM :-).
sleske
40
Och, tylko o jeden rząd wielkości;)
Gerald Schneider
7
Nie potrzebujesz infinibandu, RoCE jest również możliwe. Wymaga to jednak kart sieciowych obsługujących RDMA i prawdopodobnie nowego przełącznika obsługującego karty sieciowe oraz aplikacji zaprogramowanej do korzystania z RDMA.
alex.forencich
7
+1, ponieważ jest świetny i poprawny, ale - w tej sytuacji - całkowicie bezużyteczna odpowiedź :-)
daniel.neumann
1
Robisz - chyba że otrzymasz 25G lub 100G, które są droższe. RDMA nie rozwiązuje problemu z opóźnieniem.
TomTom
19
Is there any alternative solution?

Zależy to w dużej mierze od charakteru danych.

Możesz uruchomić 2 różne serwery mysql na 2 różnych komputerach.

Następnie podziel dane na 1/2 i napisz program, aby automatycznie wiedział, do którego serwera się udać.

Oczywiście można to skalować do dowolnej liczby serwerów, jeśli są dostępne.

cybernard
źródło
Zastanawiałem się nad wspomnieniem, że ogólnie sposobem „dzielenia się pamięcią” jest aktywne przenoszenie aplikacji na inną maszynę, a następnie zdalna praca z nią za pomocą dostępnych metod. Jest to zdecydowanie alternatywa dla zakupu większej ilości pamięci, zwłaszcza jeśli dostępna jest już inna maszyna. +1
Mokubai
1
Jak zdalny pulpit?
Innov
4
Masz 2 komputery z osobnym systemem operacyjnym, a każdy z nich ma uruchomioną kopię mysql. Tak więc komputer nr 1 może być 192.168.0.1 i komputer nr 2 192.168.0.2 (lub cokolwiek innego). Na głównym komputerze możesz teraz uzyskać dostęp do obu adresów IP w celu odzyskania danych. Mysql lub jego darmowy mariadb zastępujący oferuje biblioteki takie jak libmysql, które można dodać do programu, aby miał natywny dostęp do mysql. To nie jest zdalny pulpit, jego relacja klient-serwer i / lub klient oraz wiele serwerów.
cybernard
15

Tak, jest to dość łatwe do zrobienia (i zrobiłem to, dla bezdyskowych systemów wymagających wymiany), używając protokołu Network Block Device.

Zainstaluj nbd-serverna serwerze i skonfiguruj go, aby automatycznie tworzył pliki dla poszczególnych hostów.

Upewnij się, że twoje maszyny klienckie mają skompilowane NBD w swoich jądrach, a następnie skonfiguruj je tak, aby zmieniały się na urządzenia montowane na NBD. nbd-clientPakiet może pomóc.

Przepraszam, jeśli powyższe jest trochę niejasne - maszyny, na których to zrobiłem, nie są stąd dostępne; Mogę być w stanie uzupełnić dane, kiedy mam do nich dostęp.

Istnieje alternatywna implementacja serwera NBD o nazwie nbdkit; Nic o tym nie wiem.

Toby Speight
źródło
Właśnie zauważyłem, że pytanie ma znacznik Windows. Nie wiem nic o Windowsie - przepraszam.
Toby Speight
8
+1, zamiana na GigE w sieci LAN powinien być niższy niż latencji lokalnym dysku magnetycznego kierowcy, jeśli plik-serwer jesteś swapping trzyma plik wymiany pamięci podręcznej w jego pamięci RAM. Czasy wyszukiwania HD ~ 10ms vs. czasy pingów LAN ~ 0,25 ms. Nie mam pojęcia, czy system Windows może zrobić coś podobnego, np. Z plikiem stronicowania za pośrednictwem systemu Windows File Sharing (SMB) lub dowolnego innego protokołu, ale może iSCSI może działać. PO wspomina o „przez Internet”; to nie byłby dobry pomysł. O ile czas pingowania nie jest krótszy niż opóźnienie dostępu losowego HD, nie jest to wygrana.
Peter Cordes
Nie rozumiem, jak to się kwalifikuje jako „dodatkowa pamięć RAM”. Nie różni się niczym od zrzutu niektórych danych do pliku na dysku lokalnym, prawda?
ivan_pozdeev
W przypadku klienta Wndows można udostępnić blokowane urządzenie w systemie Linux za pośrednictwem Samby i zamontować je jako dysk w systemie Windows za pomocą ImDisk (rozmiar należy określić ręcznie).
ivan_pozdeev
robiłem to również w przeszłości na Linuksie, chociaż użyłem własnej implementacji serwer-klient nbd, dobrze działało użycie urządzenia blokowego nbd jako partycji wymiany.
hanshenrik
9

Biorąc pod uwagę małe, nieistotne szczegóły „Windows 10, stacja robocza ma 8 GB pamięci RAM” , naprawdę jest tylko jedna rozsądna odpowiedź: Kup więcej pamięci RAM i uruchom mniej bzdur.

Kupując dysk SSD i umieszczając plik strony, byłaby kolejna najlepsza opcja, ale naprawdę ... kup więcej pamięci RAM.

Udostępnianie pliku stronicowania („dzielenie pamięci”) przez sieć jest oczywiście możliwe, ale jest to bardzo zły pomysł. Chociaż prawdą jest, że istnieją przypadki graniczne, w których czas dostępu przez sieć będzie lepszy niż dostęp do dysku lokalnego, nie ma to znaczenia dla przypadku użycia, ponieważ potrzebujesz spójnego niskiego czasu dostępu i dużej przepustowości w tym samym czasie. Pamiętaj, że nie spodziewasz się jednej lub dwóch błędów strony, ciągle się zmieniasz. O ile nie jesteś skłonny zapłacić kilka tysięcy, nie ma możliwości, abyś zbliżył się do zakupu pamięci RAM lub dysku SSD.

8 GB to za mało, aby jednocześnie uruchomić system Windows 10 i aplikację wymagającą dużej ilości pamięci. To ledwo wystarcza do jednoczesnego uruchamiania programów Word, Excel i Outlook. To jest dokładnie typowa całkowicie bezużyteczna „totalna bzdura korporacyjna konfiguracja”, z którą miliony ludzi muszą codziennie żyć na swoich laptopach w pracy. Zainwestuj 100-200 waluty w inny moduł pamięci i amortyzuje ona swój koszt w ciągu tygodnia (rzeczy, które zajęły minuty, teraz zajmują sekundy, a czas to pieniądz - na szczęście często trudno jest dostać się do głowy lokalnego licznika fasoli).

Alternatywnie, jeśli jesteś właścicielem komputera, możesz użyć NTLite, aby zmniejszyć bzdury systemu Windows 10, zmniejszając jego pamięć. Lub możesz po prostu wyłączyć 80% najczęściej niepotrzebnych usług. Wydaje się to niewiarygodne, ale możliwe jest uruchomienie najnowszej wersji systemu Windows przy użyciu mniej niż 2 GB pamięci RAM.

Ale tak naprawdę, po prostu kup pamięć RAM ... to o wiele szybsze i łatwiejsze niż spędzanie godzin cennego czasu na ograniczaniu bzdur systemu Windows.

Damon
źródło
2
Czy okna naprawdę tak źle działają na pamięci RAM? Używam Debiana z kompletnym systemem w pamięci RAM (bez dysku fizycznego) i mogę mieć dziesiątki otwartych kart przeglądarki internetowej, tekst i arkusze kalkulacyjne LibreOffice, edycję zdjęć gimp i oglądać wideo lub słuchać muzyki, pozostawiając około 3 koncertów za darmo miejsce na programy lub pliki - łącznie 8 GB. Nie przepadam za wygraną, ale z twoich słów „totalna konfiguracja korporacyjna BS” brzmi bardzo podobnie do samego systemu Windows ...
Xen2050
1
Cóż, jest to dyskusyjne - OP ma rację. OSTATNIE, kiedy kupiłem machiens 8 GB, było około 2010 roku. Jest to rok 2017. Aplikacje wykorzystujące pamięć 16 GB nie są tak rzadkie w niektórych dziedzinach (wskazówka: nie piszę e-maili i nie, słowo też jest w porządku, większość ludzi nie pisze na ten temat powieści). To niewielka inwestycja - pamięć 16 GB to dziwaczny lunch lub coś w tym rodzaju.
TomTom
7
@ Xen2050 Zastanawiałem się, czy to naprawdę tak źle, więc na moim komputerze z systemem Windows 10 o pojemności 6 GB otworzyłem Outlook, Excel, Word, Edge, mam bardzo małą instancję SQL Servera, Malwarebytes wydaje się robić coś z 170 MB , Otworzyłem Visual Studio 2017, mam tutaj Firefoksa i mam 65% wykorzystania pamięci, a Windows nawet nie musiał zacząć używać pamięci skompresowanej. Tak więc, IME, Windows 10 działa dobrze z mniej niż 8 GB pamięci RAM, a poza tym widoczna niechęć Damona do systemu Windows nie ma znaczenia dla odpowiedzi.
Andrew Morton
1
@Damon: Ale jeśli nie przeprowadzisz jakiejś analizy tego, co pochłania dodatkową pamięć RAM, nie ma podstaw do obwiniania jej za „badziew Windows” kontra „badziewny rynek wtórny zainstalowany przez pracodawcę”. Ponieważ wiele osób (w tym ja) wykonało obliczenia wymagające dużej ilości pamięci, w systemie Windows 7, Windows 8.x i Windows 10, bez tego rodzaju problemów, zdecydowanie sugeruje (ale nie dowodzi), że winowajca nie jest częścią samego systemu Windows.
Ben Voigt
6

Prostą alternatywą byłoby uruchomienie aplikacji na zdalnym komputerze , ewentualnie pod dedykowanym kontem użytkownika, i po prostu sterowanie nią za pomocą RDP, VNC lub cokolwiek dogodnego.

rackandboneman
źródło
Jeśli zdalny komputer ma wystarczającą ilość
pamięci
1
@LaterTerminal Implikowane.
Clonkex
2
Tak, połączenie pamięci RAM dwóch komputerów w sieci ... sieć nie będzie działać, nie dla zwykłych aplikacji (kwadratowy, szary z przyciskami i menu).
rackandboneman
6

Inną opcją jest tymczasowe wdrożenie aplikacji w środowisku, w którym ram można łatwo skalować w górę lub w dół.

Przyjrzałbym się instancji Amazon AWS, którą można zmienić za pomocą jednego restartu.

IE mała instancja, taka jak C5.large, ma 4 GB pamięci RAM i 2 rdzenie i kosztuje 2,04 USD dziennie za Linuksa lub 4,26 USD dziennie za instalację systemu Windows. Miejsce na dysku EBS to dodatkowy koszt i skaluje się liniowo z przydzielonymi GB.

Możesz ustawić swój system w mniejszym rozmiarze, a następnie, gdy chcesz przejść w tryb pełnego hałasu, zatrzymaj go, zmień rozmiar instancji i uruchom oprogramowanie.

  • m5.4xlarge to 64 GB RAM i 16 rdzeni, za 18,44 USD / dzień lub 36,10 USD / dzień dla systemu Windows.
  • r4,8xlarge to 244 GB i 32 rdzenie, za 51,07 USD / dzień lub 86,40 USD / dzień z oknami.
  • x 1,32 x duży to 1952 GB i 128 rdzeni, za 320,12 USD / dzień lub 461,43 USD / dzień z oknami

Lub największy ...

  • x1e.32xlarge to 3904 GB i 128 rdzeni, za 640,52 USD / dzień lub 781,82 USD / dzień w systemie Windows. Jeśli Twój kolega potrzebuje czegoś więcej, problem wymaga przepisania w bardziej optymalny sposób.

https://www.ec2instances.info/ pomoże Ci wybrać odpowiedni rozmiar. Pamiętaj, że niektóre lokalizacje kosztują więcej niż inne. Singapur i Północna Kalifornia są drogie. Jednak maszyna wirtualna nic nie kosztuje, gdy nie jest uruchomiona, poza kosztami przechowywania na dysku.

Minusem jest to, że jeśli potrzebujesz tej pamięci przez długi czas, kupowanie czasu VM jest drogim sposobem na zrobienie tego. Wydaje się jednak, że księgowi czasem wolą koszty operacyjne, takie jak wynajem, od kosztów inwestycyjnych, takich jak modernizacje.

Criggie
źródło
1
Zdaję sobie sprawę, że ta odpowiedź nie dotyczy „dostępu do pamięci RAM przez sieć” zgodnie z prośbą OP. To bardziej przypomina dostęp do zdalnego hosta, który ma więcej pamięci RAM. Jednak wiedza o tym, jak działają budżety w niektórych miejscach, może być dobrym rozwiązaniem, aby wykonać zadanie w sposób opłacalny.
Criggie
4

Jak powiedzieli inni, jest to technicznie możliwe, ale nie warte zachodu.

Jeśli jednak chcesz przyspieszyć korzystanie z komputera, możesz przenieść niektóre aplikacje na serwer zdalny.

Zależy to głównie od tego, nad czym pracujesz i jakiej aplikacji używasz. Jeśli korzystasz z programów, które wymagają dużo czasu przetwarzania niewielkich danych wyjściowych, możesz je uruchomić na serwerze innym niż komputer, aby zaoszczędzić czas i zasoby podczas pracy nad czymś innym.

Mam na myśli przykład serwera, który testuje mój kod za każdym razem, gdy wypycham modyfikację. Idea takiego rozwiązania polega na tym, że ogranicza się do konkretnych przypadków użycia.

każdy
źródło
4

Poproś IT, aby kupił więcej pamięci RAM na komputer i zademonstruj potrzebę, używając zrzutu ekranu z użycia aplikacji w Menedżerze zadań.

Christopher Hostage
źródło
4
Praktyczne rozwiązanie ... nawet proszenie IT o tymczasowe podmiana pamięci RAM z innych systemów powinno być „darmową” odpowiedzią.
Xen2050,
2
@ Xen2050 Tymczasem twój kolega płacze, ponieważ jego system nie uruchamia się już.
Willtech
3
@Willtech to normalne i właściwe dla działu IT utrzymywanie części zamiennych wszystkich części i części całych działających systemów. Przestoje to realny koszt.
Christopher Hostage
3

Istnieje komercyjne rozwiązanie tego problemu za pośrednictwem firmy o nazwie Kove ( http://kove.net/). Wymaga infrastruktury Infiniband do pracy na „płycie montażowej” (sieć Ethernet działa normalnie), chociaż czasami można udostępnić inne opcje, takie jak RoCE, w zależności od specyfiki. Zapewniają szereg przezroczystych interfejsów umożliwiających integrację zerowej zmiany kodu oraz interfejsy API do omijania jądra z bardziej bezpośrednim dostępem do procesora (tj. Unikając narzutu jądra). Pod względem wydajności zależy to od aplikacji. Jeśli jesteś związany z procesorem, wpływ może być minimalny (co może być zaskakujące). Jeśli przepustowość pamięci jest ograniczona do lokalnego hosta, dadzą ci one większą pamięć, ale dławią cię już istniejące wąskie gardła. W takim przypadku, czy korzystnym dla obciążenia pracą jest posiadanie większej pamięci, niż można ją umieścić w pudełku, i nie zabraknie Ci pamięci RAM? Widzieliśmy (bardzo) dobre wyniki z bibliotekami do wirtualizacji i uczenia maszynowego w języku Python. Aplikacje HPC klasy wyższej mają tendencję do pogorszenia się, ale korzystaliśmy z interfejsów API C i udało nam się utrzymać wydajność na akceptowalnym poziomie, jednocześnie zmniejszając liczbę węzłów (węzły były tam dla pamięci RAM, a nie cykli procesora), co jest plusem w porównaniu z MPI . Trudno powiedzieć, czy jest to dobre rozwiązanie dla twojego kolegi, ale jest to opcja, nad którą możesz się zastanowić. Mam nadzieję, że to pomaga. Żeby było jasne, nie pracuję dla Kove i nie mam bodźców finansowych, ale współpracowałem z nimi od wielu lat i uważam, że ta technologia może znacząco wpłynąć na sposób, w jaki niektóre komputery są wykonywane. ale użyliśmy interfejsów API C i udało nam się utrzymać wydajność na akceptowalnym poziomie, jednocześnie zmniejszając liczbę węzłów (węzły były tam dla pamięci RAM, a nie cykli procesora), co jest plusem w porównaniu z MPI. Trudno powiedzieć, czy jest to dobre rozwiązanie dla twojego kolegi, ale jest to opcja, nad którą możesz się zastanowić. Mam nadzieję, że to pomaga. Żeby było jasne, nie pracuję dla Kove i nie mam bodźców finansowych, ale współpracowałem z nimi od wielu lat i uważam, że ta technologia może znacząco wpłynąć na sposób, w jaki niektóre komputery są wykonywane. ale użyliśmy interfejsów API C i udało nam się utrzymać wydajność na akceptowalnym poziomie, jednocześnie zmniejszając liczbę węzłów (węzły były dostępne dla pamięci RAM, a nie cykli procesora), co stanowi plus w porównaniu z MPI. Trudno powiedzieć, czy jest to dobre rozwiązanie dla twojego kolegi, ale jest to opcja, nad którą możesz się zastanowić. Mam nadzieję, że to pomaga. Żeby było jasne, nie pracuję dla Kove i nie mam żadnej zachęty finansowej, ale współpracowałem z nimi od wielu lat i uważam, że ta technologia może znacząco wpłynąć na sposób wykonywania określonych obliczeń.

Rachunek
źródło
Ile gigabajtów pamięci można kupić do konfiguracji pasma nieskończoności?
joojaa
Tak, głównym problemem tutaj jest to, że mówi on o tym, że ma tylko 8 GB pamięci i potrzebuje 16. Nie chodzi o to, jak używać zdalnego RAM-a, ale dlaczego mam używać systemu, który ma 10-letnie specyfikacje .
TomTom
@jooja Mamy 6 TB. Na podstawie tego, co widzieliśmy, nie widzieliśmy limitu. Możesz dodawać kolejne zdalne urządzenia RAM. Wydaje się, że skaluje się dość liniowo, więc jest to problem techniczny / kosztowy. Raz zaprojektowaliśmy system 1PB na papierze, ale oczywiście nie mogliśmy go przetestować.
Bill
@TomTom Nie widziałem komentarza na temat 8 GB, ale tak, oczywiście, jeśli mówimy o 8 GB vs. 16 GB pamięci RAM, kilka $ K za nową maszynę rozwiąże problem.
Bill
Do licha, za kilkaset dolarów możesz prawdopodobnie zaktualizować pamięć RAM do 32 GB, chyba że płyta główna jest absurdalnie stara i ograniczona.
puszysty
2

Kolejny punkt widzenia - być może problemem nie jest ograniczenie zasobów systemowych, ale marnotrawna aplikacja, którą pisze twój przyjaciel. 6 GB pamięci RAM to strasznie dużo pamięci.

To, że wiele innych aplikacji jest nadmiernie rozdętych , niekoniecznie oznacza, że ​​twoja aplikacja musi być jedną z nich. Korzystanie z różnych metod programowania może zmniejszyć wymagania dotyczące pamięci przy jednoczesnym zwiększeniu prędkości. Na przykład, jeśli aplikacja ładuje cały zestaw danych do pamięci, a następnie działa na nim, będzie o wiele bardziej marnotrawstwem niż na przykład przechowywanie danych w (lokalnej lub zdalnej) bazie danych SQL z kilkoma wybranymi indeksami i uzyskiwanie do nich dostępu. Pozwól, aby przetwarzał dane blok po bloku, jeśli to możliwe, zamiast ładować je wszystkie naraz. Struktury w pamięci również mogą być marnotrawstwem. Zwolnij pamięć, gdy skończysz. Zamiast tego nie ładuj do pamięci RAM tego, co możesz mapować. I setki innych wskazówek ...

Jeśli jednak aplikacja naprawdę potrzebuje więcej pamięci, która musi być przechowywana na innych komputerach, można ją zmodyfikować, aby używać pamięci memcached i tym podobnych, aby ją tam przechowywać. Punkty bonusowe, ponieważ będą skalowane lepiej w przyszłości.

Matija Nalis
źródło
5
6 GB pamięci nie jest straszne w zależności od aplikacji. Nawet użytkownicy końcowi robią edycję zdjęć (Photoshop uwielbia pamięć RAM, a wysokiej klasy aparat robi 64 megapikselowe zdjęcia), edycję wideo (DUŻO gorzej), wtedy jest praca matematyczna. Heck, nawet Excel chętnie skorzysta z kilku GB. Nie każdy pisze e-maile, używa Twittera i innych podobnych rzeczy.
TomTom
@TomTom, jeśli potrzebujesz przetwarzania w wysokiej rozdzielczości megapikselowej, będziesz mieć wysokie wymagania dotyczące pamięci (z natury żądania). Ale chyba, że ​​robisz splatanie genomu DNA w arkuszu Excela i nadal używasz kilku GB RAM, to jest dokładnie taki rodzaj nadęty i niechlujny program, o którym mówię. Wiesz, na przykład, twój budżet domowy był z powodzeniem przetwarzany tak szybko (lub szybciej) w Lotus 1-2-3 kilka dekad temu na komputerach z 3 rzędami wielkości mniej pamięci RAM (i co najmniej setkami razy wolniejszymi procesorami) niż twój Excel z dzisiaj.
Matija Nalis
1
Co za nieświadomy anser. Mogę tylko założyć, że masz bardzo małe doświadczenie z tym, do czego ludzie używają programu Excel. Kiedy Microsoft stworzył 64-bitową wersję pakietu Office, powiedzieli, że jest mało przydatny - Z WYJĄTKIEM dla Access i Excela, ponieważ niektórzy ludzie (głównie menedżerowie) przeprowadzają brutalnie duże analizy za pomocą Excela, zużywając wiele gigabajtów pamięci. Elastyczność programu Excel i przystępność dla nieprogramiści sprawiają, że stają się narzędziem (statystycy są zwykle przeszkoleni w zakresie używania języka R). Osobiście widziałem 200 plików Excela w plikach Excela.
TomTom
Jeśli obliczenie budżetu domowego zajmuje dużo czasu w programie Excel, jesteś znacznie bogatszy ode mnie. Ciekawe pytanie o Excel vs 1-2-3 - podstawowa pętla obliczeniowa może być szybsza w 1-2-3, ponieważ nie robi tak wiele. Ale na maszynie wielordzeniowej Excel z łatwością pokona 1-2-3. I oczywiście gigantyczne arkusze do łączenia genomu prawdopodobnie nie otworzą się w 1-2-3 z powodu rozmiarów arkuszy. W trosce o przejrzystość powinienem przyznać, że poprzednio pracowałem nad programem Excel w podstawowym zespole kalkulacyjnym, więc mogę być stronniczy ...
Chris Rae
1

Tak więc użytkownik poprosił o JAK dzielić pamięci przez sieć. Nie, jeśli to dobry pomysł. Oto, w jaki sposób możesz to zrobić.

Nie twierdzę, że jest to dobry pomysł lub będzie skuteczny, ale powinien działać.

  • Komputer 1 = „master” - gdzie wykonywany jest kod
  • Komputer 2 = „dziecko” - dawca pamięci

Zakładam, że nie jest to system Windows Server, w którym można utworzyć punkt podłączenia iSCSI.

Komputer 1 kroki:

  1. Pobierz darmowy ramdysk Dataram: http://memory.dataram.com/products-and-services/software/ramdisk
  2. Utwórz ramdysk i sformatuj go za pomocą NTFS - instrukcje są dostępne na ich stronie
  3. W Menedżerze dysków utwórz plik VHD na ramdysku sformatowanym za pomocą NTFS
  4. Udostępnij katalog główny Ramdisk w sieci SMB - Kliknij dysk prawym przyciskiem myszy, udostępnij, udostępnij ten folder

Komputer 2 kroki:

  1. Zamapuj wspólny dysk z cild na dysk
  2. Podłącz dysk VHD utworzony w kroku 3 powyżej w Menedżerze dysków
  3. Przenieś lokalizację pliku strony lokalnej na zamontowany dysk VHD poprzez Przenieś plik strony systemu Windows
  4. Usuń wszystkie inne wpisy pliku strony.

Gotowy!

Ostrzeżenia - możesz pominąć nonsens VHD, jeśli Windows pozwala przenieść plik stronicowania do udziału sieciowego. Nie ma wielu przykładów tego w Internecie (z oczywistych powodów).

Może wystąpić całkowita niestabilność systemu lub coś zupełnie innego. Nikt tak naprawdę nie wie, co by się stało.

Brennen Smith
źródło
0

Jak wspominasz „RAM” do współdzielenia przez sieć, a nie tylko „pamięć” jakiegokolwiek rodzaju, ostateczna odpowiedź będzie teoretycznie tak, praktycznie nie.

Podczas gdy inne rodzaje pamięci, takie jak pamięć i inne dane tymczasowe, są regularnie udostępniane w sieci z różnych celów i przyczyn. W ten sam sposób można technicznie udostępnić pamięć RAM w sieci, jeśli to konieczne. Ale wydajność i koszty będą zbyt wysokie, aby były wykonalne w prawdziwym świecie.

Pamięć RAM lub pamięć o dostępie swobodnym jest używana przez system operacyjny jako przestrzeń robocza, dlatego wykonuje się na nim wiele operacji odczytu / zapisu. Przeciętnie w systemie szybkość danych z pamięcią RAM jest najwyższa w porównaniu z innymi częściami. Jeśli umieścisz pamięć RAM w sieci, musisz mieć bardzo dużą szybkość przesyłania danych, a koszt będzie niebotycznie wysoki, nawet jeśli będzie to możliwe technicznie. Za niewielką część kosztów aktualizacji prędkości sieci otrzymasz lokalnie pamięć RAM dla swojego komputera.

A. Bauani
źródło
0

Aplikacje zwykle działają w pamięci wirtualnej, więc ich zapotrzebowanie na pamięć wirtualną może przekraczać dostępną pamięć fizyczną systemu bez żadnych konsekwencji innych niż wydajność. System operacyjny będzie po prostu strona wirtualnego z pamięci na dysku, aby zwolnić pamięć fizyczną, ile potrzeba w danej chwili do aktywnego użytkowania. Zwykle działa to dobrze w przypadku aplikacji, które mają rozsądną lokalizację (aktywność w danym momencie jest nieco skoncentrowana na ograniczonych obszarach w pamięci wirtualnej aplikacji). Jeśli aplikacja ma słabą lokalizację (stale odwołującą się do pamięci w całej przestrzeni wirtualnej), będzie działała słabo, chyba że cała jej pamięć wirtualna zostanie zmieszczona w pamięci fizycznej (cała jej pamięć wirtualna jest rezydentna).

Istnieje więc kilka możliwości:

  • Jeśli aplikacja ma po prostu duży obszar działania, ale dobrą lokalizację, powinieneś być w stanie uruchomić ją na dostępnym komputerze; wydajność może być do zaakceptowania, może, ale nie musi, zauważalnie ulec poprawie na komputerze posiadającym więcej pamięci.
  • Jeśli ma słabą lokalizację, może się okazać, że i tak będzie działać na dostępnym komputerze, po prostu bardzo słabo. (Wydaje się, że tak jest w Twoim przypadku)
  • Zaktualizuj (zakładany) napęd dysków magnetycznych do napędu SSD (są one znacznie szybsze)
  • Dodaj pamięć do dostępnego komputera (jeśli to możliwe)
  • Może być konieczne znalezienie komputera, który ma więcej pamięci i uruchomienie go na tym.
  • Popraw aplikację, tak aby miała mniejszy wirtualny ślad lub lepszą lokalizację (jeśli jesteś lub jesteś w związku z autorem aplikacji).

Pomysł użycia pamięci na komputerze zdalnym polega w zasadzie na tworzeniu pliku stronicowania w sieci . Teoretycznie może działać, ale w praktyce wydajność będzie znacznie lepsza, jeśli plik stronicowania był lokalny dla komputera (własnego dysku twardego) z powodu przepustowości sieci i opóźnień. Nie ma znaczenia, czy zdalny system hostuje plik stronicowania w pamięci czy na dysku, wąskim gardłem (najważniejszym ogranicznikiem wydajności) będzie sieć. Będzie to szczególnie prawdziwe w Internecie, ale będzie również prawdą, nawet jeśli komputer zdalny sąsiaduje z tą samą siecią LAN.

Zenilogix
źródło
Windows nie zezwala na plik stronicowania na dysku sieciowym, więc nawet jeśli byłby wystarczająco szybki, po prostu nie da się tego zrobić.
Jamie Hanrahan,
@JamieHanrahan Najwyraźniej możesz to zrobić, jeśli zmienisz ustawienie bezpośrednio w rejestrze. Zastanawiam się, czy wykluczyli niektóre szczegóły, ponieważ dyski sieciowe są dla użytkownika w systemie Windows. Podejrzewam też, że to się zepsuje po ponownym uruchomieniu.
ivan_pozdeev
1
Niemniej jednak jest to okropny pomysł, dlatego interfejs użytkownika go wyklucza. Połączenia sieciowe nie są wystarczająco niezawodne, aby zaufać stronicowaniu. Pamiętaj, że wiele danych jądra (puli stronicowanej) może być stronicowanych. Jeśli nie będzie dostępny, nawet przez bardzo krótki czas, system operacyjny ulegnie awarii.
Jamie Hanrahan
0

Zależy to naprawdę od rodzaju zastosowania i od tego, jaki jest używany suwak.

Na przykład wiele aplikacji internetowych może korzystać z pamięci RAM przez sieć, łącząc się z memcachedserwerem. Umożliwi to przechowywanie danych w pamięci podręcznej (i innych danych, które powinny być szybko dostępne) na innym komputerze z dużą ilością pamięci RAM.

Oczywiście jest to specyficzne dla aplikacji i wymaga aplikacji, która może korzystać z memcached. To nie pomoże ci otworzyć drugiej instancji luzu, ponieważ przeglądarka nie obsługuje takiego zaplecza pamięci podręcznej.

allo
źródło
-1

Zamiast współdzielić pamięć RAM, po prostu koduj tę aplikację, aby utworzyć podrzędny plik .exe , który zostanie uruchomiony na komputerze sieciowym i zrobi to samo na tym komputerze.

T.Todua
źródło