私はメモリcgroup v1でスワップメカニズムがどのように実装されているか知りたいです。
既存のほとんどの書籍(Linuxカーネルについて、プロフェッショナルなLinuxカーネルアーキテクチャ、Linux仮想メモリマネージャについて学ぶ)cgroupにはまったく言及しておらず、まだ2.6.xカーネルの古いデータ構造を参照しています。また、オンラインで検索しましたが、cgroupの実装に関する詳細が見つかりませんでした。
具体的には、メモリcgroupがある場合、LRUはどのように機能しますか?グローバルLRU、つまりグローバルアクティブ/非アクティブリストはありますか?私はこれが本当だと思います。直感的に、各メモリコントローラには個別のin/activeリストペアが必要です。しかし、まだ明確ではありません。たとえば、次のような場合
[cgroup1]
/ \
[cgroup2] pid1
/ \
pid2 pid3
cgroup1とcgroup2にはそれぞれ2対のアクティブ/非アクティブリストがありますか?この場合、cgroup1がメモリ不足に直面し、一部の匿名メモリをスワップ領域に置き換える必要がある場合、cgroup1のkswapdはcgroup2に属する一部のページを置き換える可能性があります。したがって、cgroup2のアクティブ/非アクティブリストもページ呼び出しを反映するように変更する必要があります。
ただし、階層が深くなると、最上位レベルで置き換えるには、すべてのサブリストを変更する必要があります。これはパフォーマンスの問題を引き起こしませんか?