CentOS7.5 カーネルの fsnotiy のバグと libev の inotify_add_watch(2) と inotify_rm_watch(2) を調べたけどよくわからん

hiboma.hatenadiary.jp

というエントリを書いたのちに、下記のような感想を頂いていて

確かにそうだなぁ〜〜 と思って td-agent -> libev のソースを追って見ました。

が、設計の意図は理解できず、特に収穫はなかった内容です 😯 せっかくなのでソースを突き止めたあたりのメモ等を残しておきます

環境

再現の環境は前回書いたエントリに倣う

hiboma.hatenadiary.jp

inotify_add_watch(2) と inotify_add_rm_watch(2) が呼びだされる場所を特定する

まずは問題となっているシステムコールがどういったパスで呼び出されるかを調べた. いろいろな方法があると思うが perf trace --call-graph dwarf で絞り込んだ.

続きを読む

CentOS7.5 の fsnotify がレースコンディションを起こすバグを nginx + td-agent + in_tail プラグインで踏む

2018/7/18 追記 3.10.0-862.9.1.el7 で fix されました

hiboma.hatenadiary.jp

2018/7/4 追記 最新の情報はこちらにまとめています

hiboma.hatenadiary.jp

2018/6/16 追記 CentOS Plus の kernel-plus では修正が入っています. 詳しくはこちらをご覧ください

hiboma.hatenadiary.jp

エントリの概要

CentOS7.5 の fsnotify() がレースコンディションを起こすバグを、 nginx + td-agent (fluentd) + in_tail プラグインで踏んだ際の調査内容を記していきます.

イントロダクション

このエントリを書いた時点では、CentOS 7.5.1804 以降でリリースされているカーネルは 3つありますが、カーネルの fsnotify() がレースコンディションを起こすバグを抱えています

  • kernel-3.10.0-862.el7.x86_64
  • kernel-3.10.0-862.2.3.el7.x86_64
  • kernel-3.10.0-862.3.2.el7.x86_64

レースコンディションの修正パッチ

mainline では修正済みです。詳細と修正パッチは以下のコミットで確かめられます

github.com

v4.17-rc3 でパッチがマージされており、 stable にもバックポートされています

CentOS / RHEL は?

CentOS (というか RHEL) で問題は修正されていません.

下記のリンクを見るに、RHEL では問題を認識済みであるようです (サブスクリプションがないので詳細はわかりません)

Soft lockups occur in fsnotify() after updating to RHEL 7.5 - Red Hat Customer Portal

CentOSのバグトラッキングシステムでも把握されているようです

0014823: 3.10.0-862.2.3.el7.x86_64 kernel panic and crash under Xen PV with NMI watchdog: BUG: soft lockup - CPU#2 - CentOS Bug Tracker

2018/6/7 13:50 追記

0006828: Tracking for centosplus kernels for CentOS-7 - CentOS Bug Tracker

f:id:hiboma:20180607135306p:plain

次のリリースで修正が入らない場合に CentOS 側で修正パッチを含めたカーネルを出すようですね. (注意 : distro kernelRHEL を指すのか CentOS を指すのか? CentOS Plus として出すのかな? )

レースコンディションの詳細

コミットログに詳細が記してある のですが ... SRCU という仕組みが関連するあたりが難しくてワカリマセン

勉強中です


カーネル内部で何が起こるには目をつぶり、ユーザランドで「どういう条件が重なる」と「どんなことが起こってしまう」のかでレースコンディションの問題を見ていきましょう.

続きを読む

perf trace で コールグラフを出す

以前こんなエントリを書いたが、それの perf trace 版

hiboma.hatenadiary.jp

perf trace で --call-graph というオプションを指定する

環境

CentOS7.5 で試した

使い方

こんな感じでワラワラと コールグラフ を出しつつトレースできる

続きを読む

GW(4) 泉ヶ岳 🚲

5/5(土) 仙台の泉ヶ岳をのぼってきた

f:id:hiboma:20180509111058p:plain

仙台市内から1時間ちょいでアクセスできるスキー場。近い割に獲得標高もそこそこで、一部かなりハードな斜度もあるヒルクライム場だった

hillclimblist.com

走行距離 64 km, 獲得標高 967m

続きを読む