web-dev-qa-db-ja.com

RAMが安いのであれば、すべてをRAMにロードしてそこから実行しないでください。

RAMは安価で、SSDよりはるかに高速です。揮発性です。それで、どうしてコンピュータはたくさんのRAMを持っていないのでしょうか、そして起動時に、ハードドライブ/ SSDからRAMにすべてをロードし、そこからすべてを実行するだけです。メモリの?コンピュータはもっと速くないでしょうか。

もちろん、現在のオペレーティングシステムはこれをまったくサポートしていないかもしれませんが、RAMがこのように使用されない理由はありますか?

131
pkr298

RAMがそのように使用されていない理由がいくつかあります。

  1. 一般的なデスクトップ(DDR3)RAMは安くなりますが、それほど安くはありません。特に比較的大きなDIMMを購入したい場合は特にそうです。
  2. RAMは電源を切るとその内容を失います。したがって、起動時にコンテンツをリロードする必要があります。たとえば、100GBのSSDサイズのRAMディスクを使用するとします。つまり、100GBがディスクからコピーされるまでに約2分の遅延があります。
  3. RAMはより多くの電力を消費します(DIMMあたり2〜3ワット、アイドルSSDとほぼ同じです)。
  4. 大量のRAMを使用するために、あなたのマザーボードはたくさんのDIMMソケットとそれらへのトレースを必要とするでしょう。通常これは6以下に制限されています。 (ボードスペースが大きいほどコストが高くなるため、価格が高くなります。)
  5. 最後に、プログラムを実行するためのRAMも必要になるので、作業には通常のRAMサイズが必要になります(例:18ギガバイト、使用するデータを格納するのに十分なサイズ)。 ).

そうは言っても:はい、RAM個のディスクが存在します。 DIMMソケット付きの PCIボードとして 、非常に高いIOps用のアプライアンスとしても。 (主にSSDが選択肢になる前に企業データベースで使用されていました)。しかし、これらのことは 安くない です。

これが本番になったローエンドのRAMディスクカードの2つの例です。

共通の作業メモリに RAMディスク を作成する以外にも、これを実行する方法がたくさんあります。

あなたはできる:

  1. 揮発性(動的)メモリを搭載した専用の物理ドライブを使用してください。アプライアンスとして、またはSAS、SATA、またはPCI [e]インターフェースを使用します。
  2. あなたはバッテリーでバックアップされた記憶装置でも同じことをすることができます(バックアップ電力が有効である限りその内容を保つのでそれに初期データをコピーする必要はありません)。
  3. DRAMではなくスタティックRAMを使用することができます(より単純で高価)。
  4. フラッシュや他の恒久的な記憶装置を使ってすべてのデータを保存することができます(警告:フラッシュは通常書き込み回数の制限があります)。フラッシュを唯一のストレージとして使用する場合は、SSDに移動しただけです。すべてを動的RAMに保存し、電源を切ってからフラッシュバックアップに保存すると、アプライアンスに戻ります。

Amiga RADから、生き残ったRAMディスクをIOPSにリセットしたり、ウェアレベリングを行ったり、G-dが何を知っているのかを説明することができると思います。ただし、これを短くして、もう1つだけ項目をリストします。

DDR3(現在のDRAM)の価格とSSDの価格

  • DDR3:1 GiBあたり10ユーロ、または1 TiBあたり10,000ユーロ
  • SSD:大幅に少なくなりました。 (1/4〜1/10)
177
Hennes

オペレーティングシステムはすでに ページキャッシュ を使ってこれを行います。

コンピューティングにおいて、しばしばディスクキャッシュと呼ばれるページキャッシュは、より速いアクセスのためにオペレーティングシステムによってメインメモリ(RAM)に保持されたディスクバックページの「トランスペアレント」キャッシュである。ページキャッシュは通常、ページングメモリ管理を使用してカーネルに実装され、アプリケーションに対して完全に透過的です。

あなたがディスクからページを読むとき、あなたのオペレーティングシステムはそのデータをメモリにロードして、それがそのメモリのためによりよく使われるまでそこに残します。十分なメモリがある場合、OSは各ページを一度だけ読み込み、それ以降はメモリからそれを使用します。 OSが実際のディスクIOを実行する唯一の理由は、まだメモリにないページを読み込む必要がある場合、またはページが書き込まれている場合です(この場合は、ディスクに保存することをお勧めします)。 ).

こうすることの1つの利点は、ハードドライブ全体をメモリにロードする必要がないということです。これは、収まらない場合に便利です。また、アプリケーションでは不可能なファイルの読み取りに時間を浪費しないという意味です。必要。もう1つの利点は、OSがより多くのメモリを必要とするときはいつでもキャッシュを破棄できることです(メモリ不足のためプログラムをクラッシュさせるよりも、次のディスクの読み込みを少し遅くするほうが良いです)。また、RAMディスクに入れるべきかどうかをユーザーが手動で決定する必要がないことも便利です。あなたが最も頻繁に使うものは自動的にメインメモリに保存されます。

あなたが大量のメモリを持っているが、あなたのアプリケーションがあなたが期待するほど速く走っていないならば、それらは安全に走っているので彼らが遅くなる可能性があります。たとえば、SQLiteは書き込みが完了するのを待たないように指示した場合、桁違いに速くなりますが、正しくシャットダウンしないとデータベースは完全に壊れます。

また、/tmpは通常LinuxディストリビューションのRAMディスクです。そのデータが失われても問題ないからです。あまりにも多くのデータが/tmpに書き込まれると、メモリ不足になる可能性があるので、それが良い考えであるかどうかについてはまだ議論があります。

71
Brendan Long

Alan Shutkoがその質問に対する彼のコメントで指摘しているように、RAMは実際には安くはありません。

ここにいくつかのデータポイントがあります。 Googleで4 GBのRAM、64 GBのSSD、1 TB HDD(Mechanical Hard Drive)を検索したところ、次のようなコストが発生しました(2013年8月25日)

おっ! HDDはRAMよりも100倍安いです。そしてSSDはRAMよりも8倍安いです。

(さらに、他の回答で指摘されているように、RAMは本質的に揮発性であるため、他の形式の永続記憶域が必要です。)

44
Suman

ローカルマシンのRAMディスクにコンテンツを生成するために、すべての即時読み取り/書き込み操作を行います。私のMongoDBジャーナルフォルダ、私のコンパイラ、Pythonインタプリタ、標準ライブラリもそこに格納します。このディスクはシャットダウン時に保存され、起動時に復元されます。私が使う2番目のRAMディスクは64メガバイトで、私のインターネットブラウザのキャッシュフォルダはすべてそこを指しています。その1つはシャットダウン時に失われ、いっぱいになるとフラッシュします。

私が考えている仕事に合った道具を使うのが、私があなたに与える答えでしょう。私は私の7200rpm Western DigitalよりもRAMディスクを使って30-1000倍速くデータを生成しています。

これは私が使っているプログラムです: http://www.romexsoftware.com/en-us/primo-ramdisk/

...そして32ギグのラムが200ドル未満であるとき、私はなぜこれがより一般的になっていないかわかりません。

8 gig RAM diskeveryday SATA III HDD

9
blakev

はい、これは市場に出回っている多くのインメモリデータベースの前提です。その一例がSAP HANAです。その考え方は、RAMは安価で、パフォーマンスの観点から見ると、RAMの読み取り/書き込み操作はディスク操作よりも1000倍高速です。そのため、ほとんどのデータはRAMに保持され、その後、古いデータをコールドストレージ(つまりディスク)にリサイクルするデータエージング戦略を定義します。

5
mithrandir

これは素晴らしい質問です、そして私はその反応が魅力的だと思います。これについてはOracle DBAとしてコメントしますが、私の回答はOracleデータベースに固有のものです。これは、Oracleを使用する際に多くの人が犯す大きな間違いです。これが他のアプリケーションにも当てはまるかどうかはわかりません。これは話題以外のものではありませんが、専門的な答えとしてのものです。

Oracleでパフォーマンスを調整するときは、ボトルネックを解消しようとしています。私たちのほとんどはそれを言わないが、それは制約の理論に基づいています。 https://en.wikipedia.org/wiki/Theory_of_constraints

メモリがボトルネックにならない可能性があります。 Oracleにはメモリー管理のための複雑なメカニズムがあり、他の領域がボトルネックになっている場合は、単にメモリーを増やすだけで実際に処理が遅くなる可能性があります。非常に一般的な例を一つ挙げましょう。

問い合わせは遅いようです。コンセンサスは、RAMを増やす場合、メモリはディスクより速いので、クエリの応答時間を増やすべきです。そうですね、これがOracleがデータのメモリ管理を処理する方法です。 Oracleには、特定の職務に割り当てられたさまざまなメモリー位置があります。だからあなたはこれらの思い出を増やすことができます。データに使用される領域は「バッファキャッシュ」と呼ばれます。これは一連のリンクリストです(リストの数はバージョンごとに増加する傾向があります)。問合せ中にディスク上でブロックが見つかるたびに、ハッシュ・アルゴリズムが実行され、どのリストに入れるかが決定されます。リストに入れる場所は、タッチ・カウント・アルゴリズムに基づいています(Oracleサポート・サイトで説明)。だからあなたはそれを得るために支払わなければなりません...それは本当に重要ではありません)。

ただし、問合せを実行すると、Oracleはその時点で検索していたバッファ・チェーンからラッチを解除します。このLATCH(注意:これはロックではありません。違いがわからない場合はGoogleの "ラッチ")は、読み取り中はそのチェーン上の他のすべての操作をブロックします。そのため、読み取りおよび書き込みをブロックします(これは、ロックが読み取りをブロックしないというOracleの主張とはまったく異なります)。

チェーン内のブロックを読むとき、Oracleはそれが「要求された」頻度に基づいて移動するため、これが必要です。要求頻度の高いブロックは一番上に移動され、要求頻度の低いブロックは一番下に残されて期限切れになります。 2つのセッションでリンクリストを読んでブロックを移動させることはできません。存在しない場所を指すポインタを押すことになります。

メモリのサイズを増やすと、各リンクリストのサイズも大きくなります。これにより、リストの読み取りにかかる時間が長くなります。単一の貧弱なクエリまたは複雑なクエリで、リンクリストに対して数万から数百万もの読み取りを実行できます。それぞれの読み込みは速いですが、それらの数はラッチが取られることにつながり、これらは他のセッションをブロックします。 Oracleはこれを「論理IO」(またはバッファ取得またはその他のもの)と呼びます。この用語はOracleに固有のものであり、ITの他の部分で何か他の意味を持つ可能性があります。

そのため、リストの長さが長く、SQLに問題がある場合は、SQL文のラッチが長くなります。メモリを増やすと、パフォーマンスが低下することがあります。ほとんどの場合、これは起こりません。人々はたくさんのお金を使うだろうし、何の利益も見ないだろう。とはいえ、バッファキャッシュにもっと多くのメモリが必要な場合もありますが、これが適切かどうかを判断するには、ボトルネックを適切に特定する必要があります。この記事では、これを分析する方法については説明できません。 DBAフォーラムを参照してください。議論する人もいます。かなり複雑です。

誰かがこれが起こり得る他のソフトウェアとの特定の例を持っていますか?工場での制約を緩和することを論じる「ゴール」と呼ばれる素晴らしいビジネス本があります。このプロセスは、パフォーマンスの問題を評価するときにOracle DBAが行うこととよく似ています。それはしばしばMBAプログラムの標準的な読み方です。 ITの職業について読むことは非常に貴重です。

https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt

4
Bob

簡単な説明

アプリケーションが初めて実行されると、アプリケーションはハードディスクまたはネットワークからRAMに転送されます。だから、心配しないで、あなたはすでにそれをやっています。

しかし、通常、アプリケーション/プロセスファイルは1つだけではなく、ハードディスクやネットワークをターゲットとしたI/O操作(アプリケーションの他のファイルやシステムとの他のI/O操作など)があります。応用。それらはRAMディスクに向けられるかもしれませんが、RAMディスクは電源を切ると削除され、起動時に再びいっぱいになることを考慮する必要があります。

そして質問に示されているようにRAMはそれほど安くはありません。 RAMのコストだけでなく、電源が落ちたときのマザーボード上のソケットを含むワーキングRAMのコスト(それらは限られている/まれであり、したがってより価値がある)およびデータ損失のコストを考慮する必要があります。

たとえば、1TBのHDDを搭載したコンピュータは安価で購入でき、それはホームコンピューティングに関するもので、1TBのRAMを搭載したコンピュータはスーパーコンピュータの範囲内です。 (しかし、Intelは中程度の範囲で取り組んでいます: http://vr-zone.com/articles/more-on-xeon-e5-terabyte-of-ram-even-at-midrange - /14366.html

4
Dee

RAMは安価かもしれませんが、従来のストレージほど安価ではありません。

私は3TBハードドライブを持っています($ 99): HDD見積もり

そして、あなたはそれぞれ(719ドル)で3TBのためにこれらのうちの48を必要とするでしょう: RAM見積もり

99ドルに対して合計34,512ドルになります。 3TBのRAMを実行するのに必要なハードウェアの価格は言うまでもありません。

3
Michael Irey

実際にはいくつかのシナリオで行われます。オペレーティングシステム/アプリケーションスタックが十分に小さい場合は、完全にRAMで実行できます。もちろん、受け入れられた答えが持っているすべての不利な点があります。しかし、それは可能であり起こります。

人気のあるLinuxディストリビューションであるPuppy Linuxを見てください。彼らがどのように動くかページはRAMから走ることについて話します: http://puppylinux.org/wikka/howPuppyWorks

2
David Hewitt

答えの一部は次のように答えられると思います。

前提:

  • 大量に生産され販売されているタイプのRAMのみが安価です。
  • RAMメーカーは自社製品を販売したいと考えています。
  • 低価格は利益を回すために大量を販売することを要求します
  • 大規模なユーザーベースは確立されたメモリ技術を使用
  • 新しいメモリ技術が広く採用されるには何年もかかります
  • メモリスロットは、ユーザーベースのこれまでにない小型デバイスでは非常に限られています
  • モバイル技術は増加しています
  • 少なくとも0.1%の1Bil。 PCユーザーは128GB RAM以上を選ぶかもしれません(推測)
  • 需要の高い技術の更新は、新しい技術世代よりも高い利益をもたらします

限られた数のメモリスロットを考えると、重要な解決策は、より小さい内部寸法を有するより高いメモリチップ、および/または3Dスタッキングの形で来る。どちらのプロセスも、過去36年以上にわたって予想どおりに進行しました。

質問は「DDR3最大メモリサイズ」または意味的には「DDR3」です。なぜ16GBを超えるメモリモジュールがないのですか

そして答えは:

DDR3規格では、512ギガビットから8ギガビットのチップ容量が可能で、実質的に最大16ギガバイトのメモリモジュールサイズを可能にしますsrc

このテクノロジマップで概説されているように、DDR4はこれを変更します。

enter image description here

結果:

  • 半デッドロックメモリ市場
  • Apple Macbook Proのextravaganzaが約16GBで停止する
  • クラウドサービスまたはリモートサービスに対する需要の増加(これらの仮想マシンおよびInMemoryデータベースを収容するために、多くの開発者やエンジニアがローカルで同様に幸せに動くだろう)
  • ……?

Hennesの徹底的な投稿に対するいくつかの注意点:

  • コモンデスクトップ(DDR3)RAMは安くなりますが、それほど安くはありません
  • RAMは電源を切ると内容を失います:人間は揮発性メモリよりも難しい問題に取り組んでいます。 2010年以降の「揮発性メモリの処理」に関する特許と解決策は、それを証明しています。
  • RAMはより多くの電力を消費します:モバイル機器の未使用メモリ(バンク)を選択的にオフにします。 800W GPUと比較して1Wから2Wの青さ
  • あなたは多くのDIMMソケットを必要とするでしょう:チップ技術は相変わらず進歩していました、つまりより高いメモリチップの選択肢はただ存在しません、しかしチップメーカーはそれらを喜んで売るでしょうあなたは大量に
  • プログラムをで実行するにはRAMも必要です。True。しかし、pkr298は、OSやプログラム全体がRAMにロードされることを前提としています。ハードドライブ/ SSDを廃止するべきではないということです
2
Lorenz Lo Sauer

あなたは実際に正しいです近い将来には、すべてのストレージとメモリはnano RAM上の形式になるでしょう。 NRAMは基本的に数原子幅の「機械的」スイッチです。状態を維持するために電流を必要としないのでエネルギー効率が良く、冷却する必要もありません。スイッチが非常に小さいので密度が非常に高く、これは、2つの理由で有効です。1つは、メモリへのアクセスが非常に高速で、携帯電話などの小型デバイスに数テラバイトのデータを保存できることです。もっと読みたい方はこちらを参照してください。 http://www.nantero.com/mission.html そしてこれ )http://ja.wikipedia.org/wiki/ Nano- RAM

1
noamtcohen