web-dev-qa-db-fra.com

Partager RAM sur le réseau

Mon collègue utilise une application qui consomme beaucoup de mémoire, ce qui ralentit trop le système. Est-il possible de partager la mémoire avec d'autres PC via Internet?

Le système dispose de 8 Go de RAM et l'application consomme plus de 6 Go.

48
Innov

 Je n'ai envisagé qu'une application autonome fonctionnant sur une machine "standard", sans possibilité de l'installer ailleurs ni d'utiliser du matériel ou des logiciels spécialisés. D'autres réponses (correctement) concernent la migration de logiciel ou le matériel dédié à la tâche.

Tout moyen de "partager la RAM" via un réseau sera soumis aux limitations de ce support réseau. Etant donné que même un gigabit Ethernet est limité à environ 100 Mo/s (mégaoctets), cela signifie que votre vitesse "RAM" sera également limitée.

100 Mo/s ne représente qu'une infime partie de la vitesse du RAM présent dans votre système. Votre programme sera douloureusement lent et donnera l'impression d'être exécuté sur un ordinateur dès le début des années 90.

Les disques durs modernes sont, en lecture et écriture séquentielles, légèrement plus rapides que cela. Les SSD sont plusieurs fois plus rapides.

Cela ignore les problèmes de latence, ce qui ralentira à nouveau votre programme d'un ordre de grandeur.

En raison de la lenteur et d'autres problèmes techniques, ce n'est pas un problème que quelqu'un a jamais jugé intéressant de tenter de résoudre pour des systèmes "domestiques" ou "de bureau". C'est plus économique et plus efficace d'acheter plus de RAM si nécessaire.

Achetez simplement plus de RAM ou même un SSD pour un fichier de page. Il n'y a pas d'autre moyen de faire cela qui n'exige pas une quantité insensée de travail ou de matériel pour un bénéfice minime.

160
Mokubai

Juste pour être complet: InfiniBand permet un accès direct à la mémoire d’autres machines.

Cependant, il nécessite:

  • Un commutateur InfiniBand
  • Une carte InfiniBand add on dans chaque machine
  • L'application doit être programmée spécifiquement pour utiliser cette

Il ne fonctionne PAS sur un réseau existant, il nécessite une infrastructure totalement indépendante pour tous les nœuds connectés. Cela ne marche PAS non plus sur Internet

73
Gerald Schneider
Is there any alternative solution?

Cela dépend fortement de la nature des données.

Vous pouvez exécuter 2 serveurs mysql différents sur 2 machines différentes.

Divisez ensuite les données en 1/2 et écrivez le programme pour savoir automatiquement sur quel serveur vous souhaitez vous rendre.

Bien sûr, cela peut être étendu à un nombre quelconque de serveurs si vous les avez disponibles.

18
cybernard

Oui, c'est assez facile à faire (et je l'ai fait pour les systèmes sans disque nécessitant un échange), en utilisant le protocole Network Block Device.

Installez nbd-server sur le serveur et configurez-le pour créer automatiquement des fichiers par hôte.

Assurez-vous que NBD soit bien compilé dans vos noyaux sur vos ordinateurs clients, puis configurez-les pour les échanger sur un périphérique monté par NBD. Le package nbd-client peut vous aider.

Désolé si ce qui précède est un peu vague - Les machines sur lesquelles j'ai fait cela ne sont pas accessibles d'ici; Je pourrai peut-être entrer les détails quand j'aurai accès à eux.

Il existe une autre implémentation de serveur NBD appelée nbdkit; Je n'en sais rien.

15
Toby Speight

Compte tenu des petits détails sans importance "Windows 10, la station de travail dispose de 8 Go de RAM" , il n'y a qu'une seule réponse sensée: achetez plus de RAM et exécutez moins de merde.

Acheter un SSD et y placer le fichier de page constituerait la meilleure option, mais vraiment ... achetez plus de RAM.

Servir le fichier de page ("partage de mémoire") sur le réseau est bien sûr possible, mais c'est une très mauvaise idée. S'il est vrai qu'il existe des cas limites dans lesquels le temps d'accès sur le réseau sera meilleur que l'accès à un lecteur local, cela n'a aucune importance pour votre utilisation, car vous avez besoin de cohérent temps d'accès réduit et bande passante élevée identique. temps. N'oubliez pas que vous n'anticipez pas une ou deux pages, vous échangez constamment. Sauf si vous êtes prêt à payer quelques milliers de dollars, il n’ya aucun moyen de vous rapprocher de l’achat de RAM ou d’un SSD.

8 Go ne suffisent pas pour exécuter Windows 10 et une application gourmande en mémoire en même temps. C’est à peine suffisant pour exécuter Word, Excel et Outlook en même temps. C'est exactement le type complètement inutilisable "configuration totale de l'entreprise" avec lequel des millions de personnes doivent vivre chaque jour avec leur ordinateur portable de travail. Investissez 100 à 200 devises dans un autre module de mémoire, qui en amortira le coût en une semaine (quelques minutes en quelques minutes seulement, et le temps, c'est de l'argent - malheureusement, il est souvent difficile d'entrer dans la tête de votre compteur de haricots local).

Sinon, si vous possédez la machine, vous pouvez utiliser NTLite pour réduire la merde Windows 10, réduisant ainsi l'encombrement de la mémoire. Vous pouvez également désactiver 80% des services pour la plupart inutiles. Cela semble incroyable, mais il est possible d’exécuter une version récente de Windows avec moins de 2 Go de RAM utilisé.

Mais vraiment, juste acheter de la RAM ... c'est tellement plus rapide et plus facile que de passer des heures de votre temps précieux à réduire la merde de Windows.

9
Damon

Une autre option consiste à déployer temporairement l'application dans un environnement dans lequel la RAM peut être facilement mise à l'échelle.

Je regarderais une instance Amazon AWS, qui peut être modifiée en taille avec un redémarrage.

Par exemple, un petit exemple comme un C5.large a 4 Go de RAM et 2 cœurs, et coûte 2,04 USD par jour pour Linux, ou 4,26 USD par jour pour une installation Windows. L'espace disque EBS est un coût supplémentaire et évolue linéairement avec les Go alloués.

Vous pouvez configurer votre système dans cette taille plus petite, puis, lorsque vous souhaitez utiliser le bruit, arrêtez-le, modifiez la taille de l'instance et exécutez le logiciel.

  • m5.4xlarge est 64 Go de RAM et 16 cœurs, pour 18,44 USD/jour ou 36,10 USD/jour pour Windows.
  • r4.8xlarge est de 244 Go et 32 ​​cœurs, pour 51,07 USD/jour ou 86,40 USD/jour avec fenêtres.
  • x1.32xlarge est 1952 Go et 128 cœurs, pour $ 320.12 USD/jour ou $ 461.43/jour avec fenêtres

Ou le plus gros ...

  • x1e.32xlarge est 3904 Go et 128 cœurs, pour 640,52 USD/jour ou 781,82 USD/jour avec Windows. Si votre collègue a besoin de plus que cela, le problème nécessite une réécriture plus optimale.

https://www.ec2instances.info/ vous aidera à choisir une taille appropriée. Notez que certains endroits coûtent plus cher que d’autres. Singapour et la Californie du Nord sont chers. Cependant, votre VM ne coûte rien lorsqu'il ne fonctionne pas, à l'exception des coûts de stockage sur disque.

L'inconvénient est que si vous avez besoin de cette mémoire pendant une longue période, acheter VM temps est un moyen coûteux. Cependant, les comptables semblent parfois préférer les coûts opérationnels tels que la location, aux coûts d'investissement tels que les mises à niveau.

6
Criggie

Une alternative simple consisterait à exécuter l'application sur le PC distant , éventuellement sous un compte utilisateur dédié, et simplement la contrôler via RDP, VNC ou tout autre moyen pratique.

6
rackandboneman

Demandez au service informatique d'acheter plus de RAM pour votre PC et de démontrer la nécessité d'utiliser une capture d'écran de l'utilisation de l'application dans le Gestionnaire des tâches.

4
Christopher Hostage

Comme d’autres l’ont dit, c’est techniquement possible mais ne vaut pas la peine.

Toutefois, si vous souhaitez accélérer l'utilisation de votre ordinateur, il est possible d'externaliser certaines de vos applications sur un serveur distant.

Cela dépendra principalement de ce sur quoi vous travaillez et de l'application que vous utilisez. Si vous exécutez des programmes nécessitant beaucoup de temps de traitement pour une petite sortie de données, vous pouvez les exécuter sur un serveur différent de celui de votre ordinateur pour gagner du temps et des ressources pendant que vous travaillez sur autre chose.

L'exemple que j'ai en tête est un serveur qui teste mon code chaque fois que j'effectue une modification. L’idée d’une telle solution est qu’elle se limite à des cas d’utilisation spécifiques.

4
everyone

Il existe une solution commerciale à cela, via une société appelée Kove ( http://kove.net/ ). Cela nécessite une infrastructure Infiniband pour fonctionner sur le "fond de panier" (Ethernet fonctionne normalement), bien que d'autres options telles que RoCE puissent parfois être disponibles, en fonction des spécificités. Elles fournissent un certain nombre d’interfaces transparentes permettant une intégration sans changement de code et des API pour le contournement du noyau avec un accès plus direct au processeur (c’est-à-dire qui évite la surcharge du noyau). En termes de performances, cela dépend de votre application. Si vous êtes lié au processeur, l'impact pourrait être minime (ce qui peut être surprenant). Si vous êtes lié à la bande passante mémoire sur l'hôte local, ils vous donneront une mémoire plus grande, mais vous serez limités par le goulot d'étranglement déjà existant. Dans ce cas, est-il avantageux pour la charge de travail d’avoir une mémoire plus grande que ce qui peut être mis dans une boîte et de ne pas manquer de RAM? Nous avons obtenu de très bons résultats avec les bibliothèques de virtualisation et d’apprentissage automatique python. Les applications HPC haut de gamme ont tendance à être plutôt pires, mais nous avons utilisé les API C et réussi à maintenir les performances à un niveau acceptable tout en réduisant le nombre de nœuds (les nœuds étaient là pour la RAM, pas pour les cycles de processeur), ce qui est un avantage par rapport à MPI . Il est difficile de savoir s'il s'agit d'une bonne solution pour votre collègue, mais c'est une option sur laquelle vous pouvez vous pencher. J'espère que cela pourra aider. Pour être clair, je ne travaille pas pour Kove et je n’ai aucune incitation financière, mais je collabore avec eux depuis un certain nombre d’années et je pense que cette technologie pourrait avoir un impact considérable sur la manière dont l’informatique est réalisée.

3
Bill

Un autre point de vue - le problème n'est peut-être pas la limite des ressources système, mais l'application inutile que votre ami écrit. 6 Go de RAM, c'est beaucoup de mémoire.

Le fait que beaucoup d’autres applications soient trop gonflées ne signifie pas nécessairement que l’application de votre ami doit être l’une d’elles. L'utilisation de différentes méthodes de programmation peut réduire les besoins en mémoire tout en améliorant la vitesse. Par exemple, si l'application charge l'intégralité de l'ensemble de données en mémoire et que cela fonctionne correctement, cela entraînera beaucoup plus de gaspillage que, par exemple, le stockage de données dans une base de données SQL (locale ou distante) avec peu d'index de sélection et d'y accéder. Faites-le traiter les données bloc par bloc si possible, au lieu de tout charger en une fois. Les structures en mémoire pourraient aussi être inutiles. Libérez de la mémoire quand vous en avez fini. Ne chargez pas dans RAM ce que vous pouvez mapper en mémoire. Et des centaines d'autres astuces ...

Si l'application nécessite toutefois davantage de mémoire qui doit être stockée sur d'autres ordinateurs, vous pouvez la modifier pour utiliser memcached et ainsi de suite pour la stocker là-bas. Des points bonus car ils évolueront mieux dans le futur.

2
Matija Nalis

L'utilisateur a donc demandé COMMENT de partager la mémoire sur le réseau. Pas si c'est une bonne idée. Voici donc comment vous pouvez le faire.

Je ne dis pas que c'est une bonne idée, ou sera performant, mais cela devrait fonctionne.

  • Ordinateur 1 = "maître" - où le code est exécuté
  • Ordinateur 2 = "enfant" - donateur de mémoire

Je suppose que ce n'est pas Windows Server où vous pourriez créer un point de montage iSCSI.

Ordinateur 1 Etapes:

  1. Téléchargez le disque virtuel gratuit de Dataram: http://memory.dataram.com/products-and-services/software/ramdisk
  2. Créer un disque mémoire et le formater avec NTFS - des instructions sont disponibles sur leur site
  3. Dans Disk Manager, créez un fichier VHD sur le disque virtuel formaté avec NTFS.
  4. Partagez le répertoire racine Ramdisk sur le réseau avec SMB - Faites un clic droit sur le lecteur, partager, partager ce dossier

Ordinateur 2 étapes:

  1. Mappez le lecteur partagé du répertoire sur un lecteur
  2. Montez le disque dur virtuel créé à l'étape 3 ci-dessus dans le Gestionnaire de disque.
  3. Déplacez l’emplacement du fichier de page local vers le disque dur virtuel monté via - Déplacer le fichier de page Windows
  4. Supprimez toutes les autres entrées du fichier de page.

Terminé!

Mises en garde: vous pourrez peut-être ignorer le non-sens du disque dur virtuel si Windows vous permet de déplacer le fichier d'échange vers le partage réseau. Il n'y a pas beaucoup d'exemples de cela en ligne (pour des raisons évidentes).

Une instabilité complète du système peut survenir, ou quelque chose d'autre. Personne ne sait vraiment ce qui se passerait.

1
Brennen Smith

Comme vous parlez de «RAM» pour partager sur le réseau, pas simplement de «mémoire», la réponse finale sera théoriquement oui, pratiquement non.

Tandis que d’autres types de mémoire, comme le stockage et d’autres données temporaires, sont régulièrement partagés sur le réseau pour diverses raisons. De la même manière, RAM peut être techniquement possible de partager sur le réseau si nécessaire. Mais les performances et les coûts seront trop élevés pour être réalisables dans le monde réel.

La mémoire RAM ou à accès aléatoire est utilisée par un système d'exploitation comme espace de travail, ce qui lui permet d'exécuter de nombreuses opérations de lecture/écriture. En moyenne, la vitesse de transmission de données avec RAM est supérieure à celle des autres composants. Si vous mettez RAM sur un réseau, vous devez disposer d'une capacité de transfert de données à très haute vitesse et les coûts seront exorbitants, même si cela est techniquement possible. Avec une infime partie du coût d’une mise à niveau de la vitesse du réseau, vous obtiendrez localement RAM.

0
A. Bauani

Cela dépend vraiment du type d'application utilisé et de l'utilisation du ram.

Par exemple, de nombreuses applications Web peuvent utiliser RAM sur le réseau en se connectant à un serveur memcached. Cela permettra de stocker les données en cache (et d’autres dont l’accès devrait être rapide) sur un autre ordinateur disposant de beaucoup de RAM.

Bien sûr, ceci est spécifique à l'application et nécessite une application qui puisse utiliser memcached. Cela ne vous aidera pas à ouvrir une seconde instance de slack car un navigateur ne prend pas en charge l'utilisation d'un tel back-end en cache.

0
allo

Les applications s'exécutent généralement en mémoire virtuelle. Par conséquent, leurs besoins en mémoire virtuelle peuvent dépasser la mémoire physique disponible du système sans autre conséquence que les performances. Le système d’exploitation va simplement page / mémoire virtuelle sur disque pour libérer de la mémoire physique selon les besoins, à tout moment, pour une utilisation active. Cela fonctionne généralement très bien pour les applications dont l’emplacement - localité est raisonnable (l’activité à un moment donné est quelque peu ciblée sur des zones limitées de l’espace mémoire virtuel de l’application). Si une application a une localisation médiocre (référençant constamment la mémoire dans tout son espace virtuel), ses performances seront médiocres à moins que toute sa mémoire virtuelle puisse être hébergée dans une mémoire physique (toute sa mémoire virtuelle est résidente).

Donc, il y a quelques possibilités ici:

  • Si l'application a simplement une grande empreinte, mais une bonne localisation, vous devriez pouvoir l'exécuter sur l'ordinateur dont vous disposez. les performances peuvent être acceptables, peuvent ou non améliorer sensiblement sur un ordinateur disposant de plus de mémoire.
  • Si la localisation est mauvaise, vous constaterez peut-être qu’il fonctionnera de toute façon sur l’ordinateur disponible, mais très mal. (Cela semble être le cas pour vous)
  • Mettez à niveau le lecteur (supposé) de disque magnétique vers un lecteur à semi-conducteurs (ils sont nettement plus rapides)
  • Ajouter de la mémoire à l'ordinateur dont vous disposez (si possible)
  • Vous devrez peut-être trouver un ordinateur disposant de plus de mémoire et l'exécuter.
  • Améliorez l'application de sorte qu'elle ait une empreinte virtuelle plus petite ou une meilleure localité (si vous êtes ou êtes associé à l'auteur de l'application).

L’idée d’utiliser la mémoire sur un ordinateur distant consiste essentiellement à créer un fichier paging en réseau . En théorie, cela peut fonctionner, mais en pratique, les performances seront bien meilleures si le fichier d'échange est local à l'ordinateur (son propre disque dur) en raison de la bande passante et de la latence du réseau. Peu importe que le système distant héberge le fichier d'échange dans sa mémoire ou sur son disque, le goulot d'étranglement (le limiteur de performances le plus important) sera le réseau. Cela sera particulièrement vrai sur Internet, mais également si l'ordinateur distant est adjacent au même réseau local.

0
Zenilogix