web-dev-qa-db-ja.com

ネットワーク経由でRAMを共有

私の同僚は、システムを遅くしすぎるメモリを大量に消費するアプリケーションを使用しています。インターネットを介して他のPCとメモリを共有することは可能ですか?

システムには8 GBのRAMがあり、アプリケーションは6 GB以上を消費します。

48
Innov

私は、他の場所にインストールしたり、専門のハードウェアやソフトウェアを使用したりすることができない、「標準の」マシン上で動作するスタンドアロンアプリケーションのみを検討しました。他の答えは(正しく)ソフトウェア移行またはタスクのための専用ハードウェアに対処します。

ネットワークを介して「RAMを共有」する方法は、そのネットワークメディアの制限を受けます。ギガビットイーサネットでさえ約100MB/s(メガバイト)に制限されているので、これはあなたの "RAM"速度も制限されることを意味します。

100MB/sは、実際にシステムにあるRAMの速度のごく一部です。あなたのプログラムは非常に遅く、90年代初頭からコンピュータで実行されているように感じます。

最近のハードドライブは、シーケンシャル読み取りおよび書き込みでは、これよりわずかに高速です。 SSDは数倍高速です。

これはあなたのプログラムを再び一桁遅くする待ち時間の問題を無視しています。

遅いことやその他の技術的な問題が関係しているので、これは誰もが「家庭用」または「オフィス用」システムを解決しようと試みる価値があると考えている問題ではありません。必要に応じてRAMを追加購入すると、より安価で効果的です。

RAMを増やしたり、ページファイル用のSSDを増やしたりするだけです。少しの利益のために非常に多くの作業やハードウェアを必要としない、これを行う他の方法はありません。

161
Mokubai

完全を期すために、 InfiniBand を使用すると、他のマシンのメモリに直接アクセスできます。

しかし、それは必要です:

  • InfiniBandスイッチ
  • InfiniBandが各マシンにカードを追加
  • アプリケーションはこれを使用するために特別にプログラムされなければなりません

既存のネットワーク上では機能しません。接続されているすべてのノードに対して完全に独立したインフラストラクチャが必要です。インターネット経由でも動作しません

74
Is there any alternative solution?

これはデータの性質に大きく依存します。

あなたは2つの異なるマシン上で2つの異なるmysqlサーバーを実行することができます。

次に、データを1/2に分割してプログラムを書くと、どのサーバーに移動するかが自動的にわかります。

もちろん、利用可能であれば、これは任意の数のサーバーに拡張できます。

19
cybernard

はい、ネットワークブロックデバイスプロトコルを使用して(そしてスワップを必要とするディスクレスシステムのために私はこれをしました)、かなり簡単です。

サーバマシンにnbd-serverをインストールし、ホストごとのファイルを自動作成するように設定します。

クライアントマシンにNBDがカーネルにコンパイルされていることを確認してから、NBDマウントデバイスと交換するように設定します。 nbd-clientパッケージが役に立ちます。

上記が少しあいまいな場合は申し訳ありません - これを行ったマシンにはここから到達できません。私はそれらにアクセスするとき私は詳細を記入することができるかもしれません。

nbdkitと呼ばれる別のNBDサーバー実装があります。私はそれについて何も知りません。

15
Toby Speight

小さくて重要でない詳細「Windows 10、ワークステーションには8G B RAM」があるを考えると、正解はたった1つしかありません:RAMを追加購入し、無駄を減らします。

SSDを購入してページファイルを配置するのが次に最適なオプションですが、実際には... RAMを追加購入します。

ネットワーク経由でページファイル(「共有メモリ」)を提供することはもちろん可能ですが、それは非常に悪い考えです。ネットワーク経由のアクセス時間がローカルドライブにアクセスするよりも優れている境界線のケースが存在するのは事実ですが、それは使用例には関係ありません。なぜなら、consistent low access time and =同時に高帯域幅。 1つまたは2つのページフォールトを予測するのではなく、常にスワップしていることに注意してください。数千を支払わない限り、RAMまたはSSDを購入することに近づく方法はありません。

8 GBは、Windows 10を実行するのに十分ではありませんおよび同時にメモリを大量に消費するアプリケーションです。 Word、Excel、Outlookを同時に実行するのに十分です。これはまさに典型的な完全に使用不可能です「でたらめな企業のセットアップ」毎日何百万人もの人々が職場のラップトップで生活しなければなりません。 100-200通貨を別のメモリモジュールに投資すると、1週間以内にその費用が償却されます(数分かかっていたものが数秒かかり、時は金なりです-残念ながら、これはローカルBeanカウンターの頭に入れるのが難しい場合があります)。

または、マシンを所有している場合は、NTLiteを使用してWindows 10のがらくたを削減し、メモリフットプリントを削減できます。または、ほとんど不要なサービスの80%だけをオフにすることもできます。信じられないように思われますが、可能 2 GB未満のRAMを使用してWindowsの最新バージョンを実行することです。

しかし、実際には、RAMを購入するだけです Windowsのがらくたを削減するために貴重な時間を費やすよりもはるかに高速で簡単です。

9
Damon

もう1つの選択肢は、RAMを簡単に拡大または縮小できる環境にアプリケーションを一時的にデプロイすることです。

Amazon AWSインスタンスを見てみましょう。これは1回の再起動でサイズを変更できます。

IEのC5.largeのような小さなインスタンスは4GBのRAMと2つのコアを持ち、Linuxでは1日あたり2.04ドル、Windowsインストールでは1日あたり4.26ドルの費用がかかる。 EBSディスク容量は追加コストであり、割り当てられたGBに比例して増加します。

あなたはあなたのシステムをこの小さいサイズに設定することができ、そしてあなたが完全なノイズに行きたいとき、それを止め、インスタンスサイズを変え、そしてソフトウェアを走らせることができます。

  • m5.4xlargeは64 GBのRAMと16コアで、Windowsは1日18.44ドル、または36.10ドルです。
  • r4.8xlargeは244 GB、32コアで、ウィンドウ付きで1日51.07ドル、または1日あたり86.40ドルです。
  • x1.32xlargeは1952 GB、128コアで、ウィンドウは1日320.12米ドル、または1日461.43米ドルです。

または最大のもの...

  • x1e.32xlargeは3904 GB、128コアで、1日640.52ドル、または1ウィンドウで781.82ドルです。あなたの同僚がこれ以上のものを必要とするならば、問題はより最適な方法で書き直す必要があります。

https://www.ec2instances.info/ は適切なサイズを選択するのに役立ちます。場所によっては他の場所よりも費用がかかることに注意してください。シンガポールとカリフォルニア北部は高価です。ただし、VMは、ディスクストレージのコスト以外、実行されていないときは何もかかりません。

欠点は、このメモリを長時間必要とする場合、VM timeを購入するのが高価な方法であることです。しかし会計士は、アップグレードのような資本コストよりも、レンタルのような運用コストを好むように見えることがあります。

6
Criggie

簡単な方法としては、リモートPC上で、おそらく専用のユーザーアカウントでアプリケーションを実行し、RDP、VNC、またはその他のものを使用してアプリケーションを制御する方法があります。便利。

6
rackandboneman

お使いのPC用にRAMをもっと購入するようITに依頼し、タスクマネージャでアプリの使用状況のスクリーンショットを使用して必要性を説明してください。

4

他の人が言っているように、それは技術的には可能ですが、それだけの価値はありません。

あなたがあなたのコンピュータの使用をスピードアップしたいのであればしかし、それはあなたのアプリケーションのいくつかをリモートサーバーに外部化することは可能です。

これは主にあなたが何に取り組んでいるか、そしてあなたがどのアプリケーションを使用するかに依存するでしょう。小さなデータ出力に多くの処理時間を必要とするプログラムを実行している場合は、他の作業をしながら時間とリソースを節約するために、それらを自分のコンピューターとは異なるサーバーで実行することができます。

私が考えている例は、変更をプッシュするたびに自分のコードをテストするサーバーです。そのような解決策の考えはそれが特定の使用例に制限されるということです。

4
everyone

これには、Koveという会社を通じて商業的な解決策があります( http://kove.net/ )。 「バックプレーン」上で動作するにはInfinibandインフラストラクチャが必要です(イーサネットは通常通りに動作します)が、仕様によってはRoCEのような他のオプションを使用できる場合があります。それらは、ゼロコード変更統合を可能にするための多数のトランスペアレントインターフェース、およびより直接的なCPUアクセスを伴うカーネルバイパスのためのAPIを提供する(すなわち、カーネルオーバーヘッドを回避する)。パフォーマンスの面では、それはあなたのアプリケーションに依存します。あなたがCPUに縛られているならば、その時の影響は最小であるかもしれません(それは驚くことであるかもしれません)。あなたがローカルのホストに縛られたメモリ帯域幅であるならば、それらはあなたにより大きなメモリを与えるでしょう、しかしあなたはすでに存在するボトルネックによって抑制されるでしょう。この場合、ボックスに収めることができ、RAMを使い果たすことができないよりも大きいメモリを持つことがワークロードにとって有利ですか。仮想化とpythonの機械学習ライブラリで(非常に)良い結果が得られました。ハイエンドHPCアプリケーションはかなり悪化する傾向がありますが、C APIを使用し、ノード数(CPUサイクルではなくRAM用のノード)を削減しながらパフォーマンスヒットを許容範囲内に維持できるように管理しました。 。これが同僚にとって良い解決策であるかどうかはわかりにくいですが、検討できる選択肢です。それが役立つことを願っています。明らかに、私はKoveのために働いておらず、金銭的なインセンティブも持っていませんが、私は何年もの間彼らと共同作業をしてきました。

3
Bill

別の見方 - おそらく問題はシステムリソースの制限ではなく、あなたの友人が書いている無駄なアプリケーションです。 6 GBのRAMはひどいメモリです。

他のアプリの多くが過度に肥大化しているという理由だけで、必ずしもあなたの友達アプリケーションがそれらのうちの1つである必要があるという意味ではありません。さまざまなプログラミング方法を使用すると、速度を向上させながらメモリ要件を減らすことができます。たとえば、アプリがデータセット全体をメモリにロードしてから作業すると、選択インデックスをほとんど持たない(ローカルまたはリモートの)SQLデータベースにデータを格納してそこにアクセスするよりもはるかに無駄になります。一度にすべてをロードするのではなく、可能であればブロックごとにデータを処理するようにします。メモリ内構造も無駄になる可能性があります。それが終わったら、メモリを解放してください。代わりにRAMにロードしないでください。そして他の何百ものヒント...

しかしアプリケーションが他のコンピュータに保存する必要があるより多くのメモリを本当に必要とする場合、それをそこに保存するために memcached などを使用するように変更できます。将来的にスケールが拡大するので、ボーナスポイント。

2
Matija Nalis

そのため、ユーザーはHOWにネットワーク経由でメモリを共有するように要求しました。それが良い考えではないです。だからここに実際にあなたがそれをすることができる方法があります

これは良い考えだとか言っているわけではないし、実行するつもりはないが、shouldworkとすること。

  • コンピュータ1 = "マスタ" - コードが実行される場所
  • コンピュータ2 = "子供" - 記憶提供者

私はこれがiSCSIマウントポイントを作成できるWindows Serverではないと思います。

コンピューター1のステップ:

  1. Dataramの無料のRAMディスクをダウンロードします。 http://memory.dataram.com/products-and-services/software/ramdisk
  2. RAMディスクを作成し、NTFSでフォーマットします - 指示は彼らのサイトで利用可能です
  3. ディスクマネージャ内で、NTFSでフォーマットされたRAMディスクにVHDファイルを作成します。
  4. SMBでRamdiskのルートディレクトリをネットワーク上で共有します - ドライブを右クリックし、共有し、このフォルダを共有します

コンピューター2のステップ:

  1. 共有ドライブをcildからドライブにマップします。
  2. 上記の手順3で作成したVHDをディスクマネージャにマウントします。
  3. Windowsページファイルの移動 を使用して、ローカルページファイルの場所をマウントされたVHDに移動します。
  4. 他のページファイルエントリを削除します。

完了しました。

警告 - Windowsでページファイルをネットワーク共有に移動できる場合は、VHDのナンセンスをスキップすることができます。オンラインの例はそれほど多くありません(明白な理由から)。

システムが完全に不安定になるか、またはまったく別のことが起こる可能性があります。何が起こるのか本当に誰も知りません。

1
Brennen Smith

どんな種類の "メモリ"だけでなく、ネットワーク上で共有するための "RAM"について言及したように、最終的な答えは理論的にはい、実際にはいいえになります。

ストレージやその他の一時データのような他のタイプのメモリは、さまざまな目的や理由でネットワーク上で定期的に共有されています。同様にRAMは必要ならばネットワーク上で共有することが技術的に可能です。しかし、パフォーマンスとコストは現実世界では実現不可能なほど高くなります。

RAMまたはランダムアクセスメモリは、作業領域としてオペレーティングシステムによって使用されるため、多くの読み取り/書き込み操作が実行されます。平均的なシステムでは、RAMのデータ速度容量は他の部分に比べて最高です。ネットワーク上にRAMを置くと、非常に高速なデータ転送容量が必要になり、技術的に達成するには可能であってもコストが非常に高くなります。ネットワークスピードのアップグレードにかかる費用のほんの一部で、あなたはあなたのマシン用にローカルでRAMを手に入れるでしょう。

0
A. Bauani

これは本当にそれがどんな種類のアプリケーションであるか、そしてどのRAMが使われているかに依存します。

たとえば、多くのWebアプリケーションはmemcachedサーバーに接続することによってネットワーク上でRAMを使用できます。これにより、キャッシュデータ(およびアクセスが速いはずの他のデータ)を大量のRAMを搭載した別のコンピュータに格納できます。

もちろんこれはアプリケーション固有のものであり、memcachedを使用できるアプリケーションが必要です。ブラウザはそのようなキャッシュバックエンドの使用をサポートしていないので、これはslackの2番目のインスタンスを開くのに役立ちません。

0
allo

通常、アプリケーションは仮想メモリ内で実行されるため、仮想メモリ要件はシステムの使用可能な物理メモリを超えることがあり、パフォーマンス以外の影響はありません。オペレーティングシステムは、アクティブな使用のために任意の瞬間に必要に応じて物理メモリを解放するために仮想メモリを単純に ページング します。これは通常、妥当な ローカリティ を持つアプリケーションでは問題なく動作します(常にアクティビティは、アプリケーションの仮想メモリ空​​間の限られた領域に集中しています)。アプリケーションのローカリティが低い(仮想空間全体にわたって常にメモリを参照している)場合、すべての仮想メモリを物理メモリに収めることができない(すべての仮想メモリが常駐していない)場合、アプリケーションのパフォーマンスは低下します。

だから、ここにいくつかの可能性があります。

  • アプリケーションのフットプリントが大きいだけでローカリティが良い場合は、利用可能なコンピュータで実行できるはずです。パフォーマンスは許容範囲内であり、より多くのメモリを搭載したコンピュータでは著しく向上することも、向上しないこともあります。
  • ローカリティが低い場合は、とにかく利用可能なコンピュータ上で実行される可能性がありますが、非常に貧弱です。 (これはあなたに当てはまるようです)
  • (想定される)磁気ディスクドライブをソリッドステートドライブにアップグレードします(それらはかなり高速です)
  • 利用可能なコンピュータにメモリを増設する(可能であれば)
  • あなたはより多くのメモリを持っているコンピュータを見つけてそれを実行する必要があるかもしれません。
  • アプリケーションの仮想フットプリントが小さくなるか、またはローカリティが向上するようにアプリケーションを改善します(あなたがアプリケーションの作成者と関連している、または関連している場合)。

リモートコンピュータでメモリを使用するという考えは、基本的にネットワーク化された ページングファイル を作成することです。理論的には機能しますが、実際には、ネットワーク帯域幅と待ち時間のために、ページングファイルがコンピュータ(そのハードドライブ)に対してローカルであれば、パフォーマンスははるかに向上します。リモートシステムがページングファイルをメモリまたはディスクのどちらでホストしているかは問題ではありません。ボトルネック(パフォーマンスの最も重要な制限要因)はネットワークです。これはインターネット上で特に当てはまりますが、リモートコンピュータが同じLAN上で隣接している場合でも同様です。

0
Zenilogix