RAM が部分的にいっぱいになるとなぜ遅延が発生するのでしょうか?

RAM が部分的にいっぱいになるとなぜ遅延が発生するのでしょうか?

より多くのデータを保存できるスペースがあるにもかかわらず、RAM が部分的にいっぱい (たとえば 80%) になると、デバイスの速度が大幅に低下するのはなぜですか? 99% までは正常に動作し続けると予想しています。

モバイルでは PC よりも RAM が少ないため、この現象が顕著になります。たとえば、私のモバイルには 2 GB の RAM が搭載されていますが、空き RAM が 1 GB 未満になると、動作がかなり遅くなります。まだ 1 GB 程度は使用できるのに、なぜこのようなことが起こるのでしょうか。

答え1

ここには多くのことが関係していますが、できるだけ簡単に、そしてほぼすべての OS に適用できる方法で説明したいと思います。

ここでは 2 つの基本原則があります。

  1. RAM に保持する必要があるもの、および RAM に保持することでメリットが得られるものの合計は、ほとんどの場合、RAM のサイズよりも大きくなります。RAM に保持することでメリットが得られるものには、プロセス ワーキング セットとスタンバイ リストがあります。スタンバイ リストには、かつてはアクティブに使用されていたが、その後非アクティブになったデータとコードが含まれます。これらの多くは再び使用され、一部はすぐに使用されるため、これを RAM に保持しておくと便利です。このメモリは一種のキャッシュとして機能しますが、実際には必須ではないため、使用可能なメモリのカテゴリに入ります。空きメモリと同様に、必要なプログラムにすぐに提供できます。パフォーマンスのためには、スタンバイ メモリは大きくする必要があります。

  2. メモリ ブロックの使用頻度はランダムとは程遠いものですが、かなり正確に予測できます。メモリはブロックに分割され、多くの場合 4K バイトです。一部のブロックは 1 秒間に何度もアクセスされますが、他のブロックは、システムが長時間稼働している場合は、何分、何時間、何日、あるいは何週間もアクセスされません。この 2 つの極端な使用法の間には、幅広い範囲があります。メモリ マネージャは、最近アクセスされたブロックとそうでないブロックを認識しています。最近アクセスされたメモリ ブロックは、すぐに再び必要になると考えるのは妥当です。最近アクセスされていないメモリは、すぐには必要にならない可能性があります。長年の経験から、これが有効な原則であることが証明されています。

メモリ マネージャーは、2 番目の原則を利用して、1 番目の原則の望ましくない結果を大幅に軽減します。これを行うには、最近アクセスされたデータを RAM に保持し、めったに使用されないデータを元のファイルまたはページ ファイルに保持するというバランスをとります。

RAM が十分にある場合、このバランスを取るのは簡単です。最近使用されていないデータの多くは RAM に保存できます。これは良い状況です。

作業負荷が増加すると、状況はより複雑になります。使用されるデータとコードの合計は大きくなりますが、RAM のサイズは同じままです。つまり、RAM に保持できるのは、このうちのより小さなサブセットです。最近あまり使用されていないデータの一部は、RAM に保持できず、ディスクに残す必要があります。メモリ マネージャーは、アクティブに使用されているメモリと使用可能なメモリの間で適切なバランスを維持しようと懸命に努力します。しかし、作業負荷が増加すると、メモリ マネージャーは実行中のプロセスに使用可能なメモリをさらに割り当てざるを得なくなります。これは好ましい状況ではありませんが、メモリ マネージャーには選択の余地がありません。

問題は、プログラムの実行中に RAM との間でデータを移動するのに時間がかかることです。RAM が十分にある場合、これはそれほど頻繁には発生せず、気付かれることもありません。しかし、RAM の使用率が高くなると、これははるかに頻繁に発生します。状況が悪化すると、RAM とのデータの移動に、実際に RAM を使用する時間よりも多くの時間が費やされることがあります。これはスラッシングと呼ばれ、メモリ マネージャはこれを回避しようと懸命に努力しますが、作業負荷が高い場合は回避できないことがよくあります。

メモリ マネージャーはユーザーの味方であり、悪条件下でも常に最適なパフォーマンスを維持できるよう最善を尽くします。しかし、作業負荷が大きく、使用可能なメモリが不足すると、機能し続けるために悪影響を及ぼさなければなりません。実際、これが最も重要なことです。優先事項は、まず動作を継続し、次に可能な限り高速化することです。

答え2

最新のオペレーティング システムはすべて、通常は使用されていないメモリをデータのキャッシュに使用して、低速のストレージではなく高速の RAM からアクセスできるようにします。アプリケーションは必要に応じてキャッシュをクリアして使用できるため、通常は空きメモリとして報告されますが、実際にはまだ使用されています。キャッシュが少ないほど、キャッシュできるデータが少なくなり、コンピューターの速度が低下します。

答え3

この回答は、構造を再編成し、メッセージをより明確にするために、大部分が書き直されました。また、コミュニティ ウィキの回答としても公開しました。自由に編集してください。

ページングは​​、固定サイズのメモリ ブロックにプロセスを割り当てるメモリ管理スキームです。メモリ使用量が高レベル (つまり、容量の 80%) に達すると、ページングが RAM から vRAM (仮想 RAM) に拡張され始めます。

vRAM は、通常はハード ドライブまたはその他の大きなストレージの場所にあるシステム ストレージに配置されます。

プロセスは、ハード ドライブの一部がメモリとして実行するように割り当てられ、そのセクションを RAM として扱います。これは完全に正常なプロセスですが、vRAM との間でデータを転送するのにかかる時間が長くなると、システム パフォーマンスが低下します。

専用 RAM は CPU からマザーボードを介して直接アクセスされるため、高速接続が実現しますが、仮想 RAM の場合はボードと vRAM の場所の間にケーブルを横断させる必要があります。

ただし、これによってパフォーマンスに及ぼす影響はわずかです。vRAM へのページングの発生率が急激に増加すると (専用 RAM が容量に近づくと)、スラッシングが発生します。

スラッシングとは、メモリのページを仮想メモリにすばやく高速に転送する手法です。データの取得とアドレス指定に多くの時間を費やす必要があるため、パフォーマンスに大きな負担がかかります。

たとえば、30 桁の数字を書き留めたいとします。画面の横でメモ帳を使って数字を書き留める (専用メモリを使用) か、5 桁ずつ覚えて隣の部屋に走って行き、そこのメモ帳に書き留める (仮想メモリを使用) かのどちらかです。どちらも作業は完了しますが、どちらが速いでしょうか。

詳細はこちらここでタッシング

この回答に貢献してくれた方々に心から感謝します。ダニエル・B異種そしてジョン・ベントレー

答え4

ハードドライブは桁違いだということを覚えておいてもっとゆっくりRAMよりも高速であり、RAM自体はそもそもそれほど高速ではありません(全体的なアーキテクチャでは)。アクセス速度の順序(各段は上の段よりも1桁遅い)は、

  1. プロセッサレジスタ- 実際には、レジスターは利用可能である1プロセッササイクル以内プロセッサが 1 秒間に数十億サイクル (3 GHz = 1 秒間に 30 億サイクル) を実行することを考慮すると、これは非常に高速です。
  2. プロセッサキャッシュ- レベルによって異なりますが、それでもかなり高速です (L1 キャッシュの場合は 3 ~ 5 サイクルの可用性)。
  3. ランダム アクセス メモリ (RAM)- ランダムな部分とは、アクセスしたときにどのような状態になっているかがわからないことを意味します。荷物の配達員が立ち止まって荷物を拾い、玄関まで歩いてドアベルを鳴らし、応答を待つ場面を想像してください。まったく待たないかもしれませんし、スミス夫人が家の裏のドアまで歩いてくるまで 1 ~ 2 分待つかもしれません。実際的には、14 ~ 27 サイクル (アクセスしたときの RAM の状態によって異なります) です。
  4. ハードディスクドライブ- ここでは物理的なプロセスが起こっており、可能な限り高速に処理している間、ヘッドが動き、そのヘッドの下でトラックが動くのを待っています。実際的には、7,200 RPMのHDDは約4ミリ秒で1回転する。、またはその付近3GHzプロセッサの場合750,000サイクルそれは遅いですね。

仮想メモリ マネージャーはギャンブラーです。RAM のすべてを常に必要とするわけではないと賭け、根拠のある推測を行い、ドキュメント プログラム (これを読んでいる間、10 分間バックグラウンドで実行されていた) はそれほど重要ではないと判断して、HDD に押し込みます。

しかし、その後、ドキュメントに戻るとクリックします。VMM は、すべてのデータを HDD からロードし直す必要があります。さらに悪いことに、RAM が不足している場合は、使用可能なスペースを解放するために、他のデータを HDD にプッシュする必要があります (さらにギャンブルになります)。Linux は、ここで限界に挑戦します。RAM の大部分を頻繁に使用されるデータで埋めます (プロセスが少ないサーバーに最適です)。

関連情報