AL2023 カーネルでの多世代 LRU (MGLRU) の使用 - Amazon Linux 2023

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AL2023 カーネルでの多世代 LRU (MGLRU) の使用

多世代 LRU は、Linux カーネルの最新のページ再利用アルゴリズムであり、メモリに負荷がかかっている状況でメモリ管理のパフォーマンスが向上するように設計されています。このアルゴリズムによって、システムがメモリ不足になったときに再利用するメモリページを決定する従来の LRU (Least Recently Used) メカニズムが置き換えられます。

従来の LRU メカニズムでは、2 リストモデル (アクティブと非アクティブ) を使用してページの使用状況を追跡しているため、大規模な作業セットを伴う最新のワークロードでは効率が低下する場合があります。MGLRU では、これを複数の「世代」のページに置き換え、カーネルがよりきめ細かな経過時間情報に基づいてより賢明な決定を下せるようにします。

MGLRU には次のような利点があります。

  • より適切な再利用の決定: コールド (未使用) ページをより正確に識別する。

  • レイテンシーの短縮とスループットの向上: 特に、アドレススペースが大きいワークロードや多数の同時プロセスがあるワークロードの場合。

  • キャッシュ保持の改善: 最近使用されたページを早期に削除されにくくする。

  • スケーラブルでロック効率の高い設計: CPU が多いマシンでパフォーマンスが向上する。

設定と調整

カーネル設定 CONFIG_LRU_GEN は AL2023 カーネルで有効になっています。これは MGLRU でコンパイルされますが、デフォルトでは有効になりません。

MGLRU は、/sys/kernel/mm/lru_gen/enabled ファイルを使用して有効化および調整できます。値はビットマスクです。一部のコンポーネントに望ましくない副作用がない限り、すべてのコンポーネントを有効にすることをお勧めします。

Bit コンポーネント
0 多世代 LRU のメインスイッチ。
1 (x86 などで) MMU にこれを設定すると、リーフページテーブルエントリのアクセス済みビットが大規模なバッチでクリアされます。この動作は、理論的にはロック競合を悪化させる可能性があります (mmap_lock)。これを無効にした場合、ホットページを連続してマッピングするワークロードにおいて多世代 LRU のパフォーマンスがわずかに低下し、ホットページのアクセス済みビットが、より少ない数のより大規模なバッチでクリアされる可能性があります。
2 (x86 などで) MMU にこれを設定すると、リーフ以外のページテーブルエントリのアクセス済みビットもクリアされます。この動作は、Intel および AMD 以外の種類の x86 では検証されていません。これを無効にした場合、多世代 LRU のパフォーマンスはごくわずかですが低下します。
[yYnN] 上記のすべてのコンポーネントを有効または無効にします。

MGLRU を有効にする方法の例を以下に示します。

[ec2-user ~]$ echo y >/sys/kernel/mm/lru_gen/enabled

以下により、すべてのコンポーネントが有効になります。

[ec2-user ~]$ cat /sys/kernel/mm/lru_gen/enabled 0x0007