こんなスクリプトを作って、
[root@www****** ~]# cat diskstats_show.stp #!/usr/bin/stap -v probe kernel.statement("*@*block/genhd.c:1078") { print_backtrace() }
実行すると、
[root@www****** ~]# ./diskstats_show.stp Pass 1: parsed user script and 86 library script(s) using 98700virt/24108res/2952shr/21500data kb, in 160usr/10sys/168real ms. semantic error: while resolving probe point: identifier 'kernel' at ./diskstats_show.stp:2:7 source: probe kernel.statement("diskstats_show@block/genhd.c:1078") { ^ semantic error: missing x86_64 kernel/module debuginfo under '/lib/modules/2.6.32-358.18.1.el6.x86_64/build' Pass 2: analyzed script: 0 probe(s), 0 function(s), 0 embed(s), 0 global(s) using 104120virt/29224res/4768shr/24816data kb, in 50usr/100sys/156real ms. Pass 2: analysis failed. Try again with another '--vp 01' option. Missing separate debuginfos, use: debuginfo-install kernel-2.6.32-358.18.1.el6.x86_64
とエラーが出た。
以下のように回避してインストール。
debuginfo-install --nogpgcheck --enablerepo debug glibc-2.12-1.47.el6_2.5.x86_64nogpgcheck は普段使わないリポジトリを有効にするオプションです。
/etc/yum.repos.d/*.repo に記載されている無効("enabled=0")のリポジトリ を一回限り有効にします。
ここでは具体的には
/etc/yum.repos.d/CentOS-Debuginfo.repo
の debug セクションを一時的に有効にしています。nogpgcheck はgpg署名の検査を無効にして実行するオプションです。
CentOS6.2でgdb | ぷろぐらま
を参考に debuginfo をインストールして、
[root@www****** ~]# debuginfo-install --nogpgcheck --enablerepo debug kernel-2.6.32-358.18.1.el6.x86_64 ... Installed: kernel-debuginfo.x86_64 0:2.6.32-358.18.1.el6 yum-plugin-auto-update-debug-info.noarch 0:1.1.30-14.el6 Dependency Installed: kernel-debuginfo-common-x86_64.x86_64 0:2.6.32-358.18.1.el6 Complete!
リトライしてみると、
[root@www****** ~]# ./diskstats_show.stp Pass 1: parsed user script and 86 library script(s) using 98700virt/24108res/2952shr/21500data kb, in 150usr/10sys/157real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 268908virt/79732res/17892shr/63468data kb, in 220usr/110sys/329real ms. Pass 3: translated to C into "/tmp/stapd78fzu/stap_9e327733fab96b27495da4a3d840a827_969_src.c" using 268908virt/82024res/20168shr/63468data kb, in 500usr/20sys/524real ms. Pass 4: compiled C into "stap_9e327733fab96b27495da4a3d840a827_969.ko" in 9500usr/720sys/9109real ms. Pass 5: starting run. ...
解決!
おまけ
debuginfo でインストールしたカーネルのソースがどこにあるか確認してみた。
[root@www****** ~]# rpm -ql kernel-debuginfo-common-x86_64.x86_64 0:2.6.32-358.18.1.el6|head -10 /usr/src/debug/kernel-2.6.32-358.18.1.el6 /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64 /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86 /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto/aes-x86_64-asm_64.S /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto/aes-x86_64.mod.c /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto/aes_glue.c /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto/aesni-intel.mod.c /usr/src/debug/kernel-2.6.32-358.18.1.el6/linux-2.6.32-358.18.1.el6.x86_64/arch/x86/crypto/aesni-intel_asm.S
参考
- 作者: 平田豊
- 出版社/メーカー: 工学社
- 発売日: 2011/07/01
- メディア: 単行本
- 購入: 1人 クリック: 48回
- この商品を含むブログ (5件) を見る