【続 Vol. 2】 Linux Kernel: cgroup 削除後も残り続ける slab キャッシュ についての調べ物 - upsteam は修正パッチが入って解決済み
どんどんタイトルが長くなっていますが... 先のエントリで書いた問題の補足記事エントリです。
5.9-rc1 以降、slub_memcg_sysfs は何も機能しない
slub_memcg_sysfs
は、cgroup に関連する sysfs ファイル ( /sys/kernel/cgroup ... ) の作成を制御する カーネルのブートオプション(パラメータ) です。
slub_memcg_sysfs= [MM, SLUB] Determines whether to enable sysfs directories for memory cgroup sub-caches. 1 to enable, 0 to disable. The default is determined by CONFIG_SLUB_MEMCG_SYSFS_ON. Enabling this can lead to a very high number of debug directories and files being created under /sys/kernel/slub.
詳細は下記のエントリに記しています
ところが、下記のコミットで slub_memcg_sysfs
に変更が入り特に何も機能しないコードになってしまいました。
実際にコードを見てみましょう
オプションを処理する setup_slub_memcg_sysfs() をみてみる
カーネルのブート時に slub_memcg_sysfs
を指定していると setup_slub_memcg_sysfs() でオプションの値を扱います。
#ifdef CONFIG_MEMCG static bool memcg_sysfs_enabled = IS_ENABLED(CONFIG_SLUB_MEMCG_SYSFS_ON); 👈 static int __init setup_slub_memcg_sysfs(char *str) { int v; if (get_option(&str, &v) > 0) memcg_sysfs_enabled = v; 👈 return 1; } __setup("slub_memcg_sysfs=", setup_slub_memcg_sysfs); #endif
slub_memcg_sysfs={0|1}
を指定して起動すると、変数 memcg_sysfs_enabled
が指定した値にりますが、
しかし、この変数が参照される箇所は二箇所しかありません (ソースは 5.9-rc7 )
$ global -rsx memcg_sysfs_enabled memcg_sysfs_enabled 4885 mm/slub.c static bool memcg_sysfs_enabled = IS_ENABLED(CONFIG_SLUB_MEMCG_SYSFS_ON); memcg_sysfs_enabled 4892 mm/slub.c memcg_sysfs_enabled = v;
変数の参照元が、先の setup_slub_memcg_sysfs
だけということになります。
したがって 5.9-rc1 以降は特に何にも機能しないオプションになっているようです。
感想
- 該当のバージョン以降で検証をする機会にハマらないように、あるいは過去の関連するエントリへのポインタへなるよう本エントリの内容が役に立つと幸いです。
- 何にも機能しないなら消したらいいのかな? と思いつつ、後方互換として残しているのでしょうか? ML のディスカッションを追ってないので詳細はわかりません