Il mio collega sta usando un'applicazione che consuma molta memoria, il che rende il sistema troppo lento. È possibile condividere la memoria con altri PC su Internet?
Il sistema ha 8 GB di RAM e l'applicazione consuma più di 6 GB.
Il mio collega sta usando un'applicazione che consuma molta memoria, il che rende il sistema troppo lento. È possibile condividere la memoria con altri PC su Internet?
Il sistema ha 8 GB di RAM e l'applicazione consuma più di 6 GB.
Risposte:
Ho considerato solo un'applicazione standalone che gira su una macchina "standard" senza la possibilità di installarla altrove o utilizzare hardware o software specializzato. Altre risposte (correttamente) riguardano la migrazione del software o l'hardware dedicato per l'attività.
Qualsiasi modo di "condividere la RAM" tramite una rete sarà soggetto alle limitazioni di quel mezzo di rete. Poiché anche Gigabit Ethernet è limitato a circa 100 MB / s (megabyte), ciò significa che anche la velocità della "RAM" sarà limitata.
100 MB / s è una piccola frazione della velocità della RAM che è effettivamente nel tuo sistema. Il tuo programma sarà dolorosamente lento e ti sembrerà di essere in esecuzione su un computer dai primi anni '90
I dischi rigidi moderni sono, per la lettura e la scrittura sequenziali, leggermente più veloci di così. Gli SSD sono molte volte più veloci.
Ciò sta ignorando i problemi di latenza che rallenteranno il tuo programma di un ordine di grandezza.
A causa della lentezza e di altri problemi tecnici coinvolti, questo non è un problema che qualcuno abbia mai considerato degno di essere tentato di risolvere per i sistemi "domestici" o "d'ufficio". È più economico ed efficace acquistare più RAM se necessario.
Basta acquistare più RAM o persino un SSD per un file di paging. Non c'è altro modo per farlo che non richieda una folle quantità di lavoro o hardware per pochi benefici.
Solo per completezza: InfiniBand consente l'accesso diretto alla memoria di altre macchine.
Tuttavia, richiede:
NON funziona su una rete esistente, richiede un'infrastruttura completamente indipendente per tutti i nodi collegati. Inoltre NON funziona su Internet
Is there any alternative solution?
Ciò dipende fortemente dalla natura dei dati.
È possibile eseguire 2 server mysql diversi su 2 macchine diverse.
Quindi dividere i dati in 1/2 e scrivere il programma per sapere automaticamente a quale server andare.
Naturalmente questo può essere ridimensionato su qualsiasi numero di server se li hai disponibili.
Sì, è abbastanza facile da fare (e l'ho fatto, per i sistemi diskless che necessitano di scambio), usando il protocollo Network Block Device.
Installa nbd-server
sul computer server e configuralo per creare automaticamente i file per host.
Assicurati che i tuoi computer client abbiano NBD compilato nei loro kernel, quindi configurali per passare a un dispositivo montato su NBD. Il nbd-client
pacchetto può aiutare.
Scusate se quanto sopra è un po 'vago - Le macchine su cui ho fatto questo non sono raggiungibili da qui; Potrei essere in grado di compilare i dettagli quando ho accesso ad essi.
C'è un'implementazione alternativa del server NBD chiamata nbdkit
; Non ne so nulla.
Dati i piccoli dettagli non importanti "Windows 10, la workstation ha una RAM da 8 G B" , c'è davvero una sola risposta sana: acquistare più RAM ed eseguire meno schifezze.
L'acquisto di un SSD e l'inserimento del file di paging sarebbe la migliore opzione successiva, ma davvero ... acquista più RAM.
Servire il file di paging ("condividi memoria") sulla rete è ovviamente possibile, ma è una pessima idea. Sebbene sia vero che esistono casi limite in cui il tempo di accesso sulla rete sarà migliore dell'accesso a un'unità locale, questo è irrilevante per il tuo caso di utilizzo, perché è necessario allo stesso tempo tempo di accesso basso costante e larghezza di banda elevata. Ricorda, non stai anticipando errori di una o due pagine, stai costantemente scambiando. A meno che tu non sia disposto a pagare un paio di migliaia, non puoi assolutamente avvicinarti all'acquisto di RAM o SSD.
8 GB non sono quasi sufficienti per eseguire contemporaneamente Windows 10 e un'applicazione affamata di memoria. È appena sufficiente per eseguire Word, Excel e Outlook contemporaneamente. Questa è esattamente la tipica "totale installazione di cazzate" completamente inutilizzabile con cui milioni di persone devono convivere ogni giorno sul proprio laptop di lavoro. Investi 100-200 valuta in un altro modulo di memoria e ammortizza il suo costo in una settimana (le cose che richiedevano minuti ora impiegano pochi secondi e il tempo è denaro - sfortunatamente spesso è difficile entrare nella testa del tuo contatore di fagioli locale).
In alternativa, se possiedi la macchina, puoi usare NTLite per ridurre la merda di Windows 10, riducendo il suo ingombro di memoria. Oppure, potresti semplicemente disattivare l'80% dei servizi per lo più inutili. Sembra incredibile, ma è possibile eseguire una versione recente di Windows con meno di 2 GB di RAM utilizzati.
Ma davvero, basta acquistare RAM ... è molto più veloce e più facile che passare ore del tuo prezioso tempo a ridurre la merda di Windows.
Un'alternativa semplice sarebbe quella di eseguire l'applicazione sul PC remoto , possibilmente con un account utente dedicato, e controllarla semplicemente tramite RDP, VNC o qualunque cosa sia conveniente.
Un'altra opzione è quella di distribuire temporaneamente l'applicazione in un ambiente in cui ram può essere facilmente ridimensionato.
Guarderei un'istanza di Amazon AWS, che può essere modificata in dimensioni con un riavvio.
IE una piccola istanza come una C5.large ha 4 GB di RAM e 2 core e costa $ 2,04 USD al giorno per Linux, o $ 4,26 USD al giorno per un'installazione di Windows. Lo spazio su disco EBS è un costo aggiuntivo e si ridimensiona in modo lineare con GB assegnati.
È possibile impostare il sistema in dimensioni più ridotte, quindi quando si desidera ottenere il massimo livello di rumore, arrestarlo, modificare le dimensioni dell'istanza ed eseguire il software.
O il più grande ...
https://www.ec2instances.info/ ti aiuterà a scegliere una taglia adatta. Nota che alcune località costano più di altre. Singapore e la California del Nord sono costose. Tuttavia, la VM non costa nulla quando non è in esecuzione, a parte i costi di archiviazione su disco.
Il rovescio della medaglia è che se hai bisogno di questa memoria per molto tempo, l'acquisto di tempo VM è un modo costoso per farlo. Tuttavia, a volte i contabili sembrano preferire i costi operativi come l'affitto, ai costi di capitale come gli aggiornamenti.
Come altri hanno già detto, è tecnicamente possibile ma non ne vale la pena.
Tuttavia, se si desidera accelerare l'uso del computer, è possibile esternalizzare alcune applicazioni su un server remoto.
Questo dipenderà principalmente da cosa stai lavorando e da quale applicazione usi. Se stai eseguendo programmi che richiedono molto tempo di elaborazione per un piccolo output di dati, potresti farli funzionare su un server diverso dal tuo computer per risparmiare tempo e risorse mentre lavori su qualcos'altro.
L'esempio che ho in mente è un server che verifica il mio codice ogni volta che invio una modifica. L'idea con tale soluzione è che è limitata a casi d'uso specifici.
Chiedi all'IT di acquistare più RAM per il tuo PC e di dimostrare la necessità utilizzando uno screenshot dell'utilizzo dell'app in Task Manager.
Esiste una soluzione commerciale per questo, tramite una società chiamata Kove ( http://kove.net/). Richiede un'infrastruttura Infiniband per funzionare sul "backplane" (Ethernet funziona normalmente), sebbene a volte possano essere disponibili altre opzioni come RoCE, a seconda delle specifiche. Forniscono una serie di interfacce trasparenti per consentire l'integrazione con zero code change e API per il bypass del kernel con un accesso più diretto alla CPU (ovvero, evitando il sovraccarico del kernel). In termini di prestazioni, dipende dalla tua applicazione. Se sei legato alla CPU, l'impatto potrebbe essere minimo (il che può essere sorprendente). Se la larghezza di banda della memoria è legata all'host locale, ti daranno memoria più grande, ma sarai strozzato dal collo di bottiglia già esistente. In questo caso, è vantaggioso per il carico di lavoro avere una memoria maggiore di quella che può essere inserita in una scatola, e non esaurire la RAM? Abbiamo visto (molto) buoni risultati con le librerie di virtualizzazione e machine learning di Python. Le applicazioni HPC di fascia alta tendono a peggiorare, ma abbiamo usato le API C e siamo riusciti a mantenere accettabili le prestazioni, riducendo al contempo il conteggio dei nodi (i nodi erano lì per la RAM, non i cicli della CPU), un vantaggio rispetto all'MPI . È difficile capire se questa sia una buona soluzione per il tuo collega, ma è un'opzione che puoi esaminare. Spero che aiuti. Per essere chiari, non lavoro per Kove e non ho alcun incentivo finanziario, ma ho collaborato con loro per un certo numero di anni e penso che questa tecnologia abbia il potenziale per avere un impatto sostanziale sul modo in cui viene fatto un determinato calcolo. ma abbiamo usato le API C e siamo riusciti a mantenere le prestazioni accettabili riducendo il conteggio dei nodi (i nodi erano lì per la RAM, non i cicli della CPU), il che è un vantaggio rispetto a MPI. È difficile capire se questa sia una buona soluzione per il tuo collega, ma è un'opzione che puoi esaminare. Spero che aiuti. Per essere chiari, non lavoro per Kove e non ho alcun incentivo finanziario, ma ho collaborato con loro per un certo numero di anni e penso che questa tecnologia abbia il potenziale per avere un impatto sostanziale sul modo in cui viene fatto un determinato calcolo. ma abbiamo usato le API C e siamo riusciti a mantenere le prestazioni accettabili riducendo il conteggio dei nodi (i nodi erano lì per la RAM, non i cicli della CPU), il che è un vantaggio rispetto a MPI. È difficile capire se questa sia una buona soluzione per il tuo collega, ma è un'opzione che puoi esaminare. Spero che aiuti. Per essere chiari, non lavoro per Kove e non ho alcun incentivo finanziario, ma ho collaborato con loro per un certo numero di anni e penso che questa tecnologia abbia il potenziale per avere un impatto sostanziale sul modo in cui viene fatto un determinato calcolo.
Un altro punto di vista: forse il problema non è il limite delle risorse di sistema, ma l'applicazione dispendiosa che il tuo amico sta scrivendo. 6 GB di RAM sono un sacco di memoria.
Solo perché molte delle altre app sono eccessivamente gonfie , ciò non significa necessariamente che la tua applicazione amica debba essere una di queste. L'uso di diversi metodi di programmazione può ridurre i requisiti di memoria migliorando la velocità. Ad esempio, se l'app carica l'intero set di dati in memoria e quindi funziona, sarà molto più dispendiosa rispetto ad esempio archiviare i dati nel database SQL (locale o remoto) con pochi indici selezionati e accedervi da lì. Se possibile, esegui l'elaborazione dei dati blocco per blocco, anziché caricarli tutti in una volta. Anche le strutture in memoria potrebbero essere dispendiose. Memoria libera quando hai finito. Non caricare nella RAM ciò che è possibile invece mappare in memoria. E centinaia di altri suggerimenti ...
Se l'applicazione ha davvero bisogno di più memoria che deve essere archiviata su altri computer, può essere modificata per usare memcached e simili per archiviarla lì. Punti bonus in quanto si ridurranno meglio in futuro.
Quindi l'utente ha chiesto come condividere la memoria sulla rete. Non se è una buona idea. Quindi, ecco come puoi farlo.
Non sto dicendo che questa è una buona idea, o sarà performante, ma dovrebbe funzionare.
Suppongo che questo non sia Windows Server in cui è possibile creare un mount point iSCSI.
Computer 1 Passaggi:
Computer 2 passaggi:
Fatto!
Avvertenze: potresti essere in grado di saltare l'assurdità del disco rigido virtuale se Windows ti consente di spostare il file di paging nella condivisione di rete. Non ci sono molti esempi di questo online (per ovvi motivi).
Può verificarsi completa instabilità del sistema o qualcos'altro. Nessuno sa davvero cosa sarebbe successo.
Come hai detto "RAM" per la condivisione in rete non solo di "memoria" di qualsiasi tipo, la risposta finale sarà teoricamente sì, praticamente no.
Mentre altri tipi di memoria come l'archiviazione e altri dati temporanei vengono regolarmente condivisi in rete per vari scopi e motivi. Allo stesso modo, se necessario, la RAM può essere tecnicamente possibile condividere in rete. Ma le prestazioni e i costi saranno troppo alti per essere fattibili nel mondo reale.
La RAM o la memoria ad accesso casuale viene utilizzata da un sistema operativo come spazio di lavoro, pertanto vengono eseguite molte operazioni di lettura / scrittura. Su un sistema medio, la capacità di velocità dei dati con RAM è massima rispetto ad altre parti. Se si inserisce la RAM in una rete, è necessario disporre di una capacità di trasferimento dei dati ad altissima velocità e il costo sarà elevato anche se possibile per ottenere tecnicamente. Con una piccola parte del costo per un aggiornamento della velocità di rete otterrai RAM per la tua macchina localmente.
Le applicazioni in genere vengono eseguite nella memoria virtuale, quindi il loro requisito di memoria virtuale può superare la memoria fisica disponibile del sistema senza conseguenze diverse dalle prestazioni. Il sistema operativo semplicemente pagina virtuale memoria su disco per liberare memoria fisica come necessario in qualsiasi momento, per uso attivo. Questo di solito funziona bene per le applicazioni che hanno una località ragionevole (l'attività in un dato momento è in qualche modo focalizzata su aree limitate nello spazio di memoria virtuale dell'applicazione). Se un'applicazione ha una localizzazione scadente (facendo costantemente riferimento alla memoria in tutto il suo spazio virtuale), funzionerà male a meno che tutta la sua memoria virtuale non possa essere ospitata nella memoria fisica (tutta la sua memoria virtuale è residente).
Quindi, ci sono alcune possibilità qui:
L'idea di utilizzare la memoria su un computer remoto sta fondamentalmente creando un file di paging in rete . In teoria, può funzionare, ma in pratica le prestazioni saranno molto migliori se il file di paging fosse locale sul computer (il suo disco rigido) a causa della larghezza di banda e della latenza della rete. Non importa se il sistema remoto sta ospitando il file di paging in memoria o sul suo disco, il collo di bottiglia (limitatore di prestazioni più significativo) sarà la rete. Ciò sarà particolarmente vero su Internet, ma lo sarà anche se il computer remoto è adiacente sulla stessa LAN.
Questo dipende davvero dal tipo di applicazione e per quale ram viene utilizzato.
Ad esempio, molte applicazioni Web possono utilizzare la RAM sulla rete connettendosi a un memcached
server. Ciò consentirà di archiviare i dati della cache (e altri dati a cui dovrebbe essere rapido accedere) su un altro computer con molta RAM.
Naturalmente questo è specifico dell'applicazione e necessita di un'applicazione che può utilizzare memcached. Questo non ti aiuterà ad aprire una seconda istanza di gioco poiché un browser non supporta l'utilizzo di un tale backend della cache.