3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

突然起きた事件

まだ前職にいたある日、develop 環境の Linux が突然落ちました。

再起動することでことなきを得ましたが、再発防止のための原因調査は必要でした。
そこで同僚から教えられた journalctl を眺め、ログを追い、設定を疑い……
できることは一通りやったつもりでした。

しかし、

原因が、まったく分からない。

それっぽいエラーメッセージやログも見当たらない。
だから「なぜ起きたのか」「何が壊れたのか」が見えてこない。

「Linuxカーネルの気持ちが分からない...」

「Linuxを使っている」のに、
「Linuxの中身を何も分かっていない」ことを、強烈に突きつけられた瞬間でした。

反省と行動

これはさすがにまずい。

Linux カーネルについて、ちゃんと勉強しよう。

そう思い立ち、
Linux カーネルのソースコードを読むことにしました。

ただ、いきなり巨大なコードベースを前にしても歯が立たないので、
自作の VS Code 拡張機能 を使って、

  • 関数の呼び出し関係を追う
  • システムコールの入口から処理を辿る

といった形で、少しずつ読み進めることにしました。

万能感に浸るコードリーディング

最初は、とにかく楽しかったです。

「読める!読めるぞ、Linuxカーネル!」

もちろん、最初に読んだのは「write」システムコール。
なぜなら解説サイトがあったから(書いてくださりありがとうございます)。

  • write システムコールの流れが分かる
  • ファイル I/O の処理が追える

そうなると、不思議な万能感が湧いてきます。

「なんだ、意外といけるじゃん」と。

それ以降は、あまり検索エンジンで情報がひっからなかったので、ChatGPTと自作VSCodeに頼りながら進めていきました。

100時間コードリーディングに費やして、昔の成果物を見たら…

気づけば、100時間以上 コードリーディングに費やしていました。

そこでふと、
昔に自分が作ったコードリーディングの成果物 を見返してみたのです。

……正直、愕然としました。

全然、分かってない。

例えば、

  • write システムコールの探索
  • direct I/O が絡む経路

当時は「ここまで追った」と思っていたものが、
今見ると 肝心な分岐や処理を全く見ていない

「分かった気になっていただけだったんだな」と、はっきり分かりました。

どうすればよかったか

正直なところ、明確な答えは出ていません。

  • 時間をかけて慣れるしかなかったのか
  • 一度すべて忘れて、作り直すべきだったのか

今でも、
journalctl やメトリクスだけを見て
あの障害の原因が分かるかと言われると、怪しいです。

それでも一つだけ言えるのは、

「Linuxカーネルの気持ち」が、ほんの少しだけ分かるようになった

ということ。

完全に理解できていなくても、
「どこで何が起きていそうか」を想像できるようになった。

あの時「もっと Linux カーネルを勉強しておけば」と思った自分に、
今ならこう言える気がします。

遅くてもいいから、ちゃんと読みに行ってよかった。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?