AndroidとChrome OSで観察された動作に基づいて、GoogleはLinuxベースのOS向けの新しいページ再利用戦略に取り組み始めた。仮想メモリサブシステムが未使用のメモリページを再利用する方法を改善することを目的としている。最近の取り組みで、新しいMGLRUポリシーによってサーバ環境にもメリットがあることが示されている。
Linuxカーネルがメモリのオーバーコミットをどのように管理するかについてGoogleが調査したのは、数百ギガバイトのメモリを搭載したサーバと、個人のデバイスおよびモバイルデバイスの両方の分析に端を発している。どちらの場合も、Googleのエンジニアは次のような結論に達した。
現在のページの再利用は、CPU使用率の点でコストがかかりすぎです。何を削除するかについて不適切な選択をすることがよくあります。私たちは、パフォーマンスが高く、用途が広く、わかりやすい拡張機能を提供したいと考えています。
Linuxカーネルでのページ置換について、現在のLRUのような実装の2つの信条は、彼らの精査の対象となった。そこではページをアクティブリストと非アクティブリストに分類し、それらのリストを段階的にスキャンして、削除の候補を見つける。Googleのエンジニアによると、これが多くの非効率につながっている。
特に、rmap
を使用したインクリメンタルスキャンでは、CPU使用率が高くなり、メモリ不足の状況でパフォーマンスが低下を引き起こした。再利用する十分なページを見つけるために多くのページをスキャンする必要があるためである。一方、アクティブページと非アクティブページに関する推論は、サーバ環境でのジョブスケジューリングには役立たないようであり、AndroidとChrome OSでページの削除に偏りが生じ、UIレンダリングに悪影響を及ぼした。
新しいポリシーであるMGLRUでは、アクティブ/非アクティブの区別を超えるために、代わりに世代番号の概念を活用しており、ページテーブルを介した増分スキャンを差分スキャンに置き換える。大まかに言うと、これはページが世代にグループ化され、各世代が前の世代以降に参照されたすべてのページで構成されていることを意味する。世代は、差分スキャンを使用して検出される。古い世代は削除可能とマークされ、最終的には、最後のスキャン以降にページが使用されたかどうかを考慮したエージングプロセスによって削除される。
各差分スキャンのコストは、検出された参照ページの数にほぼ比例します。アドレス空間が非常にまばらでない限り、ページテーブルは通常、rmapよりも優れたメモリ局所性が得られます。
Googleの初期ベンチマークによると、数千万人のChrome OSユーザと約100万人のAndroidユーザへのMGLRUの展開に基づいて、新しいポリシーにより、Chrome OSでのOOMキル数が59%減少し、Androidでは18%減少した。他のUXメトリックの改善もあった
2021年3月に提出された最初のパッチ以来、Googleのエンジニアは、パフォーマンスを改善し、別のアーキテクチャにも拡張するためにMGLRUに取り組んできた。2022年初日に提出された最新のパッチには、Apache Hadoop、Memcached、MongoDB、PostgreSQLなどの最も人気のあるオープンソースのメモリを大量に消費するアプリケーション向けのベンチマークが含まれている。
独立したラボでは、上記のアプリケーションで最も広く使用されているベンチマークスイートを使ってMGLRUを評価しました。彼らは、合計ベンチマーク時間の500時間以上にわたって収集されたカーネルメトリックとパフォーマンスプロファイルとともに、960のデータポイントを提出しました。彼らの最終報告書において、95%の信頼区間(CI)で、上記のアプリケーションがすべて、ベンチマークマトリックスの少なくとも一部で大幅にパフォーマンスが向上したことが示されました。
Linus Torvalds氏は、以下の通り見ており、MGLRUに関するGoogleエンジニアの取り組みを支持した。
ですから、個人的にはこれは取り組む価値があると思っています。測定により改善が報告されたためです。しかも大部分において、多世代のLRUを実行するという概念全体が、まったくおかしなことではないためです。私たちはすでにアクティブvs非アクティブを使っていますが、すべてが多世代となるのもそれほど「遠い」ようには思いません。
見通しは明るいものの、MGLRUが5.17以降のバージョンに入るかどうかはまだ明らかではない。InfoQはこの新しいLinux機能について、より詳細がわかり次第、進捗状況を報告する。