【続 Vol. 2】 Linux Kernel: cgroup 削除後も残り続ける slab キャッシュ についての調べ物 - upsteam は修正パッチが入って解決済み

どんどんタイトルが長くなっていますが... 先のエントリで書いた問題の補足記事エントリです。

hiboma.hatenadiary.jp

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.

詳細は下記のエントリに記しています

hiboma.hatenadiary.jp


ところが、下記のコミットで slub_memcg_sysfs に変更が入り特に何も機能しないコードになってしまいました。

github.com

実際にコードを見てみましょう

オプションを処理する 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 のディスカッションを追ってないので詳細はわかりません