AL2023 カーネルでのマルチジェネレーション LRU (MGLRU) の使用 - Amazon Linux 2023

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

AL2023 カーネルでのマルチジェネレーション LRU (MGLRU) の使用

マルチジェネレーション LRU は Linux カーネルの最新のページ再利用アルゴリズムであり、メモリ負荷下でメモリ管理のパフォーマンスを向上させるように設計されています。これは、システムがメモリ不足になったときに再利用するメモリページを決定するために使用される従来の LRU (最も最近使用されていない) メカニズムを置き換えます。

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

MGLRU の利点は次のとおりです。

  • 再利用の決定の向上: コールド (未使用) ページのより正確な識別。

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

  • キャッシュ保持の改善: 最近使用されたページが早期に削除される可能性は低くなります。

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

設定とチューニング

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

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

ビット コンポーネント
0 多世代 LRU のメインスイッチ。
1 MMU が設定する場合 (例: x86)、リーフページテーブルエントリのアクセスビットを大きなバッチでクリアします。この動作は理論的にロック競合を悪化させる可能性があります (mmap_lock)。無効にすると、マルチジェネレーション LRU は、連続してホットページをマッピングするワークロードのパフォーマンスがわずかに低下します。そうしないと、アクセスビットをより少ない大きなバッチでクリアできます。
2 MMU が設定するとき (例: x86)、リーフ以外のページテーブルエントリのアクセスビットもクリアします。この動作は、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