FreeBSD の procstat と kgdb でカーネルコードを探る2021年05月05日 13時46分11秒

ZFS の問題を探っていた時の記録。

状況としては kldload zfs をするとシステムの一部の反応が無くなること。porcstat で kldload が何をしているかを点検。

# procstat -kk 1049
  PID    TID COMM                TDNAME              KSTACK                       
 1049 100215 kldload             -                   spa_init+0xc6
zfs_kmod_init+0x1a zfs_modevent+0x34 module_register_init+0x8c
linker_load_module+0xaab kern_kldload+0xc1
sys_kldload+0x50 syscall+0x17d g_ctx+0xe280bf29 
その後、kgdb で spa_init の 0xc6 を調べる。
# kgdb101 /boot/kernel/zfs.ko
Reading symbols from /boot/kernel/zfs.ko...
Reading symbols from /usr/lib/debug//boot/kernel/zfs.ko.debug...
(kgdb) info line *spa_init+0xc6
Line 2385 of "/usr/src/sys/contrib/openzfs/module/zfs/spa_misc.c"
   starts at address 0x1f7b66 <spa_init+198>
   and ends at 0x1f7b6b <spa_init+203>.
(kgdb) disass 0x1f7b66
Dump of assembler code for function spa_init:
   0x001f7aa0 <+0>:     push   %ebp
   0x001f7aa1 <+1>:     mov    %esp,%ebp
   0x001f7aa3 <+3>:     push   %esi
   0x001f7aa4 <+4>:     mov    0x8(%ebp),%esi
   0x001f7aa7 <+7>:     push   $0x45
   0x001f7aa9 <+9>:     push   $0xc754c
   0x001f7aae <+14>:    push   $0x3a5db4
   0x001f7ab3 <+19>:    call   0x1f7ab4 <spa_init+20>
...
   0x001f7b52 <+178>:   call   0x1c1910 <metaslab_stat_init>
   0x001f7b57 <+183>:   call   0x1641e0 <ddt_init>
   0x001f7b5c <+188>:   call   0x2596d0 <zio_init>
   0x001f7b61 <+193>:   call   0x16bb50 <dmu_init>
   0x001f7b66 <+198>:   call   0x2571e0 <zil_init>
   0x001f7b6b <+203>:   call   0x20a5b0 <vdev_cache_stat_init>
   0x001f7b70 <+208>:   call   0x217ab0 <vdev_mirror_stat_init>
   0x001f7b75 <+213>:   call   0x21ed70 <vdev_raidz_math_init>
0xc6 はオフセット。これは十進法で 198 になる。そこで、上記の zil_init が該当行になる。

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/05/05/9374290/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。