LoginSignup
9
4

More than 5 years have passed since last update.

カーネル初期化処理のグラフ

Posted at

do_initcall関数はドライバなどの初期化関数を呼び出します。
initcall_debugという起動パラメータを与えると、これらの初期化関数呼び出しの情報をdmesgに出力されるようになります。

この呼び出しの情報をbootgrapghというスクリプトを用いてグラフ化します。

準備

対象となるカーネルにおいてCONFIG_KALLSYMSCONFIG_PRINTK_TIMEが有効になっている必要があります。

初期化情報の取得

initcall_debugを起動パラメータに与えて起動します。

起動完了後にdmesgを確認すると以下のように初期化関数(initcall)の情報が出力されているはずです。

[    0.003582] initcall init_static_idmap+0x0/0xe0 returned 0 after 0 usecs
[    0.003610] calling  spawn_ksoftirqd+0x0/0x1c @ 1
[    0.003814] initcall spawn_ksoftirqd+0x0/0x1c returned 0 after 0 usecs
[    0.003844] calling  init_workqueues+0x0/0x270 @ 1
[    0.004475] initcall init_workqueues+0x0/0x270 returned 0 after 0 usecs
[    0.004506] calling  check_cpu_stall_init+0x0/0x20 @ 1
[    0.004530] initcall check_cpu_stall_init+0x0/0x20 returned 0 after 0 usecs
[    0.004556] calling  rcu_scheduler_really_started+0x0/0x18 @ 1
[    0.004578] initcall rcu_scheduler_really_started+0x0/0x18 returned 0 after 0 usecs

グラフの作成

グラフの生成はカーネルのソースに含まれるscripts/bootgraph.plを使用します。

対象マシン上にbootgraph.plが無い場合はdmesgの内容を保存します。

$ dmesg > boot.log

bootgraph.plが有る環境にて以下のようにsvg画像を出力します。

$ scripts/bootgraph.pl boot.log > boot.svg

対象マシン上にbootgraph.plが有る場合は以下のようにワンライナーでOKです。

$ dmesg | scripts/bootgraph.pl > boot.svg

作成されたグラフ

画像の向きは変えました。
※処理時間の短いものは文字が潰れていますが、svg画像ではちゃんと見れます。

boot.png

9
4
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
9
4