グラフィカルな説明 | Linux メモリリサイクル LRU アルゴリズム

グラフィカルな説明 | Linux メモリリサイクル LRU アルゴリズム

[[421791]]

メモリは、オペレーティング システムにとって非常に重要なリソースです。オペレーティング システムがプログラムを実行するには、まずプログラム コード セグメントの命令とデータ セグメントの変数をハード ディスクからメモリにロードしてから実行する必要があります。次の図に示すように:

しかし、メモリ リソースには限りがあります。システム内で実行されるプロセスが増えるにつれて、システム内で使用可能なメモリは少なくなります。では、利用可能なメモリが少ない場合、Linux カーネルはどのように状況を処理するのでしょうか?

この記事では、使用可能なメモリが不足している状況を Linux カーネルがどのように処理するかについて説明します。

1. メモリ不足の対処方法

システムの使用可能なメモリが不足し、プロセスがメモリを要求し続けると何が起こるか考えてみましょう。

システムの使用可能なメモリが不足している場合、カーネルはメモリをリサイクルして、プロセスに十分なメモリが使用可能であることを確認します。メモリのリサイクルには主に次の手順が含まれます。

  • 特定の操作 (ファイル I/O など) を高速化するために、カーネルは操作の結果をキャッシュし (ファイル ページ キャッシュなど)、キャッシュによって使用されたメモリを再利用できます。したがって、使用可能なメモリが少ない場合は、カーネル キャッシュが最初に再利用されます。
  • カーネル キャッシュがリサイクルされた後もシステムの使用可能なメモリがまだ不足している場合。次に、カーネルはスワップ メカニズムをトリガーします。スワップ メカニズムは、特定のプロセスによって使用されるメモリをハード ディスクにスワップ (書き込み) し、その後メモリを解放して、システムで使用できるメモリを増やします。この記事では、スワップ メカニズムに焦点を当てます。
  • スワップ メカニズムがトリガーされた後もシステムの使用可能なメモリがシステム要件を満たせない場合は、OOM (Out Of Memory) メカニズムがトリガーされます。 OOM メカニズムは、いくつかのプロセスを選択して終了し、より多くのメモリを利用できるようにします。

メモリを再利用する方法は 3 つあるため、この記事ではスワップ メカニズムを分析対象として重点的に取り上げ、メモリが不足したときにカーネルがどのようにメモリを再利用するかを紹介します。

2. スワップメカニズムの原理

スワップ メカニズムの実装を分析する前に、まずスワップ メカニズムの原理を紹介します。

この記事では Linux-2.6.23 カーネルを使用します。

スワップという言葉は交換を意味します。名前が示すように、特定のプロセスによって占有されているメモリをハードディスクに交換 (書き込み) し、その後、オペレーティング システムがより多くのメモリを使用できるようにメモリをオペレーティング システムに解放することを意味します。次の図に示すように:

スワップ メカニズムの本質は、プロセスによって占有されているメモリをハード ディスクに書き込み、その後メモリを解放することだからです。次に、どのプロセスのメモリをハードディスクにスワップするかが問題になります。

各プロセスは、占有しているメモリがハードディスクにスワップされることを望みません。メモリがハードディスクにスワップされた後、プロセスがこのメモリを使用する場合、そのメモリを引き続き使用する前に、まずハードディスクからメモリにロードする必要があるため、プロセスのパフォーマンスが大幅に低下します。このため、カーネルは、プロセスのパフォーマンスへの影響を最小限に抑えながら、ディスクにスワップするメモリを選択するための最適なソリューションを提供する必要があります。

プロセスのメモリ空間は、コード セグメント、データ セグメント、mmap セグメント、ヒープ セグメント、スタック セグメントなどの複数のセグメントに分割されているためです。では、メモリのどのセグメントがハードディスクにスワップされるのでしょうか?

答えは、メモリのすべてのセグメントをハードディスクにスワップできるということです。ただし、コード セグメントや mmap セグメントなど、ファイルにマップされているメモリ領域の場合は、データをファイルに書き戻すだけで済みます (コード セグメントの内容は変更されないため、書き戻す必要はありません)。

データ セグメント、ヒープ セグメント、スタック セグメント内のメモリ ページはファイルにマップされないため (匿名メモリ ページと呼ばれる)、カーネルはこれらのメモリ ページのデータを格納するためのファイル (またはハード ディスク パーティション) を提供する必要があります。このファイル (またはハード ディスク パーティション) はスワップ パーティションと呼ばれます。

上記の分析から、2 つの重要なメッセージを引き出すことができます。

匿名メモリ ページ: どのファイルにもマップされていないメモリ ページ。

スワップ パーティション: 匿名メモリ ページ データを格納するために使用されるファイルまたはハード ディスク パーティション。

以下では、主にカーネルがプロセスの匿名メモリ ページをスワップ パーティションに書き込み、システムのメモリが不足しているときにこれらの匿名メモリ ページをリサイクルする方法について説明します。

1. LRUメモリ削除アルゴリズム

システム メモリが不足し、スワップ メカニズムがトリガーされた場合、カーネルはどの匿名メモリ ページをスワップ パーティションに書き込むように選択する必要がありますか? 一部の匿名メモリ ページがランダムに選択されてスワップ パーティションに書き込まれると、次の問題が発生する可能性があります。

プロセスの匿名メモリ ページをスワップ パーティションに書き込んだ後、プロセスはすぐにこのメモリ ページにアクセスするため、このメモリ ページをスワップ パーティションからメイン メモリに読み込む必要があります。これにより、システム負荷が増加するだけで、システムメモリ不足の問題は解決されません。

この問題を解決するために、Linux カーネルは LRU メモリ削除アルゴリズムを導入しました。Memcached または Redis を使用したことがある学生は、LRU アルゴリズムに精通しているはずです。システムのメモリが不足すると、Memcached と Redis はどちらも LRU アルゴリズムを使用してメモリを削除します。

LRU (Least Recently Used) は、中国語では「最も最近使われていない」と翻訳されます。その原理は、メモリが不足している場合、システム内で最も使用されていないメモリが削除されるため、システム パフォーマンスの低下が最小限に抑えられるというものです。

LRU アルゴリズムを実装するために、カーネルは active_list と inactive_list という 2 つの二重リンク リストを維持します。以下では、これら 2 つのリンク リストの機能について説明します。

  • active_list: アクティブなメモリ ページ リスト。つまり、プロセスはこのリンク リスト内のメモリ ページに頻繁にアクセスするため、メモリが削除されても、このリンク リスト内のメモリ ページは削除されません。
  • inactive_list: 非アクティブなメモリ ページのリスト。つまり、プロセスがこのリンク リスト内のメモリ ページにアクセスすることはほとんどないため、メモリが削除されるときは、主にこのリンク リスト内のメモリ ページが削除されます。

Linux カーネルでは、各メモリ ゾーンは active_list と inactive_list を維持します。メモリ領域は、メモリ管理におけるオブジェクトです。より明確な説明のために、カーネル内にメモリ領域が 1 つだけあると仮定します。つまり、カーネル内には active_list と inactive_list が 1 つだけ維持されていると仮定します。次の図に示すように:

さらに、各メモリ ページには PG_referenced フラグがあり、メモリ ページがアクセスされたかどうかを示します。このフラグは、メモリ回復プロセスで重要な役割を果たします。

プロセスが匿名メモリ ページを要求すると、カーネルはそのメモリ ページをアクティブ メモリ ページ リスト (active_list) に追加し、PG_referenced フラグを 0 に設定します。次の図に示すように:

プロセスによって匿名メモリ ページがアクセスされると、メモリ ページが配置されている LRU リンク リストに応じて異なる操作が実行されます。

  • メモリ ページが元々アクティブなリンク リストにあった場合、このメモリ ページの PG_referenced は 1 に設定されます。
  • メモリ ページが元々非アクティブ リストにあり、PG_referenced が 0 の場合。次に、メモリ ページの PG_referenced フラグを 1 に設定します。
  • メモリ ページが元々非アクティブ リストにあり、PG_referenced が 1 の場合。その後、メモリ ページは非アクティブ リストからアクティブ リストに移動され、PG_referenced は 0 に設定されます。

次の図は、上記の状況の流れを示しています。

システムのメモリが不足している場合は、メモリ削除プロセスが必要になります。メモリ ページ削除プロセスは、上記のプロセスと正反対です。次に、メモリ ページ削除プロセスを紹介します。

メモリが削除される場合、非アクティブなリンク リストからのみ削除できます。削除プロセスは次のとおりです。

  • メモリの削除は、非アクティブなリンク リストの末尾から始まります。メモリ ページの PG_referenced フラグが 1 の場合、このメモリ ページはスキップされ、このメモリ ページの PG_referenced フラグは 0 に設定されます。
  • メモリ ページの PG_referenced フラグが 0 の場合、メモリ ページはスワップ パーティションに書き込まれ、メモリ ページへのすべてのマッピングがバインド解除され、メモリ ページが解放されます。

上記のプロセスは、次の図に示すように、shrink_inactive_list 関数によって完了します。

さらに、アクティブなリンク リスト内のメモリ ページにも減少プロセスがあり、減少プロセスは次のとおりです。

  • メモリ ページの PG_referenced フラグが 1 の場合、減衰プロセスはこのメモリ ページの PG_referenced フラグを 0 に設定します。
  • メモリ ページの PG_referenced フラグが 0 の場合、減衰プロセスによりこのメモリ ページは非アクティブ リストに移動します。

上記のプロセスは、次の図に示すように、shrink_active_list 関数によって完了します。

2. LRUアルゴリズムの状態フロー

最後に、状態フロー図を使用して LRU アルゴリズムのプロセスを説明します。

結論

この記事では、Linuxカーネルのメモリリサイクルプロセスで使用されるLRUアルゴリズムの原理を主に紹介しました。次の記事では、Linuxカーネルがメモリリサイクルをどのように実装しているかを紹介します。ご興味があれば、お楽しみに。

<<:  人工知能は私たちの言語を理解するのでしょうか?思っていたよりも強力だ

>>:  自動運転の倫理的ジレンマを解決する: 道徳規範を数式に変換する

ブログ    
ブログ    

推薦する

マイクロソフトがOpenAIを救わなければならなかった6つの理由

メアリー・ブランスコム編纂者 | Yan Zheng生成型AIの寵児であるOpenAIは最近、混沌と...

未来の超人工知能はどれほど恐ろしいものになるのでしょうか?この記事を読んだら黙ってしまうかもしれません!

[[222688]]未来学者のケビン・ケリーはかつてこう言った。「人工知能は今後20年間で人類社会を...

...

2020 年のディープラーニング フレームワークの簡単な比較

ご存知のとおり、機械学習フレームワークの分野では、PyTorch と TensorFlow がそれぞ...

モバイル AI でよりスマートなアプリを構築

モバイル AI は、すでにペースが速いモバイル アプリ開発の世界に混乱をもたらしています。 2020...

...

2日間で星の数が1,000を突破:OpenAIのWhisperの蒸留後、音声認識が数倍高速化

少し前に、「テイラー・スウィフトが中国語を披露」する動画がさまざまなソーシャルメディアプラットフォー...

ディープフェイクの検出が得意なのは誰でしょうか?人間か機械か?

翻訳者 |陳俊レビュー | Chonglou Deepfakesと呼ばれる詐欺アプリをご存知ですか?...

JD.comクラウドファンディング599元、業界最安値を突破、Nokelock X1セルフパワースマートドアロックがイノベーション革命をリード

2019年5月15日、深センIoTロックテクノロジー株式会社は北京金宇シェラトンホテルで「nokel...

顔認証+総合決済、モバイル決済が新たな形を生む

モバイル決済は今や人々の生活の一部となり、人々に迅速で便利なショッピング体験をもたらしています。現在...

...

大きなモデルには画像がラベル付けされるので、簡単な会話だけで十分です。清華大学とNUSから

マルチモーダル大規模モデルに検出およびセグメンテーション モジュールを統合すると、画像の切り取りが簡...

米国が新たなオープンソースAIアルゴリズムを開発:モザイクの美しさを自動修復

ぼやけた写真を見ると、本来の姿を復元したいという衝動にかられることはありませんか?以前の技術ではこれ...

デジタルツインブレイン:生物と人工知能の架け橋

人間の脳の構造にヒントを得た神経科学と AI 技術の最近の一連の進歩により、知性の謎を解き明かす新た...

ソラを解剖:技術的な詳細を推測するための37ページのリバースエンジニアリング、マイクロソフトも参加、中国チームが制作

ソラは発売後すぐにリバースエンジニアリングによって「解剖」されたのでしょうか? !リーハイ大学とマイ...