FreeBSD の procstat と kgdb でカーネルコードを探る ― 2021年05月05日 13時46分11秒
状況としては kldload zfs をするとシステムの一部の反応が無くなること。porcstat で kldload が何をしているかを点検。
その後、kgdb で spa_init の 0xc6 を調べる。
# 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
0xc6 はオフセット。これは十進法で 198 になる。そこで、上記の zil_init が該当行になる。
# 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>
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/05/05/9374290/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。