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.
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.
Odpowiedzi:
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.
Dla kompletności: InfiniBand umożliwia bezpośredni dostęp do pamięci innych maszyn.
Wymaga to jednak:
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
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.
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-server
na 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-client
Pakiet 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.
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.
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.
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.
Lub największy ...
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.
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.
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ń.
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ń.
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.
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ć.
Zakładam, że nie jest to system Windows Server, w którym można utworzyć punkt podłączenia iSCSI.
Komputer 1 kroki:
Komputer 2 kroki:
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.
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.
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:
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.
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 memcached
serwerem. 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.