鴫内🚴‍♂️

10/18 (土) 午後から鴫内でトレニーニング走。

f:id:hiboma:20201022120448p:plain


1-2% くらいの ゆるいーい坂を 30-40分ほど走って山のふもとにアプローチして、そこから +300m の獲得標高を稼ぐ感じなので 2時間くらいでちょいっと走るのにちょうどボリュームがいい

f:id:hiboma:20201018150038j:plain

山に向かって一本に伸びる農道。微かな風の音と鳥の声しか聞こえない。チュンチュンぴよぴよ

f:id:hiboma:20201018144715j:plain

近所のコンビニで見つけた山の案内図


車が皆無。安全・安心に走れるのが嬉しい。

f:id:hiboma:20201018150811j:plain

那須塩原を観光する人は、塩原方面かあるいは板室・那須に向かうので、その間に位置する鴫内に訪れる人は少ないようだ。地元に住う方も少なく、対向車や追い抜きの車で気を使うことがほぼ無い。


山にアプローチする手間に、ちょっとひんやりと暗い杉並木の林道がある。

f:id:hiboma:20201018151051j:plain

トトロでもでてくれそうな鬱蒼とした空気で、お気に入りポイント。

f:id:hiboma:20201018151115j:plain

いくら待っても猫バスはやってこない

f:id:hiboma:20201018151127j:plain

林道大蛇尾木綿線

北東側からアプローチする林道です。

f:id:hiboma:20201018151504j:plain

斜度は 5-8% くらいが続いて、途中 10% くらいの区間が続く。こういう 林道にありがちな めちゃくちゃな激坂区間はない。落石が多い区間があるのでパンク注意。

f:id:hiboma:20201018154341j:plain


最高地点の標高800m くらい。紅葉はまだかな

f:id:hiboma:20201018154346j:plain

f:id:hiboma:20201018154354j:plain

看板があるポイントから少し歩くと公園 (パラグライダーの出発じょ) があるはず ... だが、途中、泥道になってて5分くらい進んで諦めて途中で引き返した。ロードバイクだと進めない

f:id:hiboma:20201018154030j:plain


私です

f:id:hiboma:20201018155107j:plain

南西側の道は舗装も綺麗で、落石も少なく、快適なダウンヒルを楽しめます。

f:id:hiboma:20201018155424j:plain

北東側の道は落石と落ち葉が散乱してスリップしやすい区間があるのでダウンヒルは危険です。


帰りは塩原アグリパルに寄り道

ここらでよくみる牛さんのキャラです

f:id:hiboma:20201018161358j:plain

第12回 コンテナ技術の情報交換会@オンラインにて 「cgroup と sysfs ファイル - トラブルシューティングから cgroup を深追いする」を発表しました

第12回 コンテナ技術の情報交換会@オンラインに発表しました!

ct-study.connpass.com

スライド

発表のスライドは下記で公開しております

speakerdeck.com

speakerdeck でフォントがしゃばしゃばになるのを解決できていないので、PDF でも公開しています ...

github.com

スライドの概要

弊社 GMO ペパボの ロリポップ!マネージドクラウドでのトラブルシューティング事例を契機として cgroup の sysfs ( スラブキャッシュ ) 周りを追いかけた内容を発表しています。

発表内容は、過去のエントリを勉強会向けにまとめ直した内容です。モデル図などを加筆しています。

hiboma.hatenadiary.jp

トラブルの詳細については、ブログでは過去にも公開していなかった内容で、今回の発表でのみ閲覧できます。当時、実際に記録したコマンドやメトリクス図なども掲載しています。

配信動画

こちらで閲覧できます

www.youtube.com

私の発表パートは下記から閲覧できます

youtu.be

twitter #lxcjp

穏やかな感じで twitter タイムラインでした。みなさんの発表に対して「よかった」とフィードバックをいただけて嬉しいですね ☺️

twitter.com

謝辞

@ten_forward ( id:defiant ) さん、 windhole ( id:windholep )さん、@masami256( id:masami256 ) さん 運営の準備ありがとうございました!! 当時の発表お疲れ様でした!! この場を借りて謝辞を述べさせていただきます。

また何か発表かのネタになるような事例に遭ったら よろしくお願いします! ( でもトラブルは無い方がね ...

那須岳 峠の茶屋駐車場 🚴‍♂️

9/27(日) 那須高原の峠の茶屋駐車場までヒルクライム

f:id:hiboma:20200929153639p:plain

f:id:hiboma:20200927160801j:plain

走行距離 79km 獲得標高 1280m

2016年、2017年に訪れていて、3年たって今回3度目

hiboma.hatenadiary.jp

hiboma.hatenadiary.jp

続きを読む

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

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

以前に下記のエントリを書きました。勉強会に登壇するネタとして調べ直したところ 新しい Linux カーネルでは問題が解決されていました。

hiboma.hatenadiary.jp

hiboma.hatenadiary.jp

hiboma.hatenadiary.jp

hiboma.hatenadiary.jp

どんな問題ですか?

「cgroup を削除した後も sysfs の slab キャッシュ が残る」「slab キャッシュ が reclaim されるタイミングで必要のない uevent が送出される」 という二つの問題でした。

問題 と書いていますが、対象の slab キャッシュは inode っキャッシュや dentry キャッシュ であり、reclaimable な slab キャッシュです。 reclaimable な slab キャッシュは、カーネルにメモリプレッシャーがかかると自然に回収されため、大抵は問題として顕在化せずに気がつかないかと思います。送出される uevent も slab キャッシュの数が多くなければシステムへの負荷として観測されるほどにはなりません。

ところが、私が仕事で扱ってるサーバでは、以下のように問題を踏みました。

そもそも、このネタを調べていたのは「とある大量のコンテナを扱う production 環境」で、sysfs ファイル削除のタイミングで uevent が大量に送出され、それを処理するカーネルスレッドが競合を起こし TASK_UNINTERRUPTIBLE でブロックされ、ロードアベレージ上昇のアラートを招いていたのが発端でした。

Linux Kernel: cgroup, sysfs, kobject, uevent についての調べ物 - (3) slub_memcg_sysfs ブートパラメータについて - hibomaの日記

問題の回避・解決方法は?

1. slub_memcg_sysfs を指定する

ワークアラウンドとして、ブートオプションに slub_memcg_sysfs=0 を指定すると、cgroup によって sysfs のファイルが作成されなくなり slab っキャッシュも溜まらなくなり、「問題」を回避することができます。

2. 新しいカーネルにする

本エントリの本題になります。上記の新しいカーネルではパッチがあたり、問題が解決されています

パッチその1

cgroup 削除後も slab キャッシュが残ってしまうコードは下記で解決されたようです。5.9-rc1 で取り込まれているパッチです。

github.com

コミットログを見るに、memcg で使う kmem_cache を一つに統一する、という内容のようですがボリュームのでかいパッチで詳細まではちょっとわかりません

本エントリに関係するのは、diff で言うと下記のあたり。

@@ -5760,16 +5628,6 @@ static int sysfs_slab_add(struct kmem_cache *s)
    if (err)
        goto out_del_kobj;
 
-#ifdef CONFIG_MEMCG
-  if (is_root_cache(s) && memcg_sysfs_enabled) {
-      s->memcg_kset = kset_create_and_add("cgroup", NULL, &s->kobj);
-      if (!s->memcg_kset) {
-          err = -ENOMEM;
-          goto out_del_kobj;
-      }
-  }
-#endif
-
    if (!unmergeable) {
        /* Setup first alias */
        sysfs_slab_alias(s, s->name);

https://github.com/torvalds/linux/commit/10befea91b61c4e2c2d1df06a2e978d182fcf792#diff-4f86c03fe66c75bd50afc8e320349281L5763-L5772

パッチその2

cgroup が作る sysfs ファイルが udev イベントを飛ばしていたコードは下記のコミットで削除されました。5.8-rc1 で取り込まれています

github.com

「必要ないから消したよ」というコミットログですね。

I came across some unnecessary uevents once again which reminded me this. The patch seems to be lost in the leaves of the original discussion [1], so resending.


kmem_cache ( slub キャッシュ ) はカーネル内部の構造体なのに、ユーザ空間に通知を出すのは変だし、使ってるのみたことないというコメント

Kmem caches are internal kernel structures so it is strange that userspace notifiers would be needed. And I am not aware of any use of these notifiers.

https://lore.kernel.org/linux-mm/20200423115721.19821-1-mkoutny@suse.com/

先のエントリを書いた時に「 cgroup の sysfs が uevent を出して何に使うんだろう?」という疑問を抱いていたのですが、カーネルコミッタも同様に思っていたようですね。よかった 😀


These notifiers may just exist because in the initial slub release the sysfs code was copied from another subsystem.

さらに、「別のサブシステムからコピペして作った」という旨も書かれています ワハハ


イベントの宣伝

第12回 コンテナ技術の情報交換会@オンライン では、これらの話をまとめ直した内容を喋るつもりでいます

ct-study.connpass.com

TenForward id:defiant さん、こんな感じです!

八方ヶ原大間々台 🚴‍♂️

9/22 栃木県矢板市の八方ヶ原大間々台へヒルクライム。コロナのせいで遠方に出かけるのを控えていたので、ようやく今年初の山。

f:id:hiboma:20200928113242p:plain

f:id:hiboma:20200922161549j:plain

走行距離 61km, 獲得標高 1143m。在宅の合間で、ランニングやサイクルトレーナーでトレーニングしてものの、すっかり足が衰えていてしんどかった。

続きを読む