「SystemTap」の版間の差分
(英語版よりコピー) |
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
||
(3人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:カーネル]] |
[[en:SystemTap]] |
[[en:SystemTap]] |
||
− | [[zh- |
+ | [[zh-hans:SystemTap]] |
− | [http://sourceware.org/systemtap/ SystemTap] は動作中の Linux システム |
+ | [http://sourceware.org/systemtap/ SystemTap] は動作中の Linux システムについての情報収集を簡略化するためのフリーソフトウェア (GPL) インフラストラクチャを提供します。 |
==SystemTap== |
==SystemTap== |
||
+ | {{AUR|systemtap}} パッケージを[[インストール]]してください。上流での最新のリリースと比較してみてください [https://sourceware.org/systemtap/wiki/SystemTapReleases]。また [https://sourceware.org/git/?p=systemtap.git;a=summary] にあるソースからビルドすることも検討してください。新しいカーネルやディストロのサポートは最初にここに現れます。 |
||
− | [[AUR]] から SystemTap をインストールします: {{AUR|systemtap}}。 |
||
− | |||
− | 上流での最新のリリースと比較します [https://sourceware.org/systemtap/wiki/SystemTapReleases]。 |
||
− | |||
− | [https://sourceware.org/git/?p=systemtap.git;a=summary] にあるソースからビルドすることも考慮してください。新しいカーネルやディストロのサポートは最初にここに現れます。 |
||
==標準的なカーネル== |
==標準的なカーネル== |
||
16行目: | 12行目: | ||
すくなくとも {{Pkg|linux-headers}} がインストールされている必要があります。 |
すくなくとも {{Pkg|linux-headers}} がインストールされている必要があります。 |
||
+ | Arch は配布バイナリ(カーネルを含む)からデバッグ情報を取り除いている(strip している)ので、systemtap の機能の多くは利用できません。なので ''/usr/share/doc/systemtap/examples'' にある例の多くは動作しません。しかし [https://sourceware.org/systemtap/man/stapprobes.3stap.html stapprobes man page] で動作する NON-DWARF および AUTO-DWARF のプローブタイプを見ることができます。例えば: |
||
− | Because Arch permanently strips debugging data from its distributed binaries (including the kernel), |
||
− | many normal/fancier systemtap capabilities are simply not available, so many examples at ''/usr/share/doc/systemtap/examples'' will not work. However, see the [https://sourceware.org/systemtap/man/stapprobes.3stap.html stapprobes man page] for the NON-DWARF and AUTO-DWARF probe types for what should still work, for example: |
||
− | * |
+ | * カーネルトレースポイント: kernel.trace("*") |
− | * |
+ | * ユーザースペースプローブ: process("...").function("...") (-g をつけて自分でビルドしたプログラムに限る) |
− | * |
+ | * ユーザースペースマーカー: process("...").mark("...") (''<sys/sdt.h>'' のマーカーをつけて configure されていれば) |
− | * perfctr |
+ | * perfctrベースのプローブ: perf.* |
− | * |
+ | * NON-DWARF カーネルプローブ: kprobe.function("...") と nd_syscall.* tapset (/boot/System.map* ファイルがあれば。下記参照) |
+ | ==カーネルのリビルド== |
||
− | ==Kernel rebuild== |
||
+ | SystemTap を実行するために ''linux-custom'' パッケージをビルドすることを考えているかもしれません。しかしオリジナルの {{Pkg|linux}} パッケージをリビルドすることは簡単で効率的です。[[カーネル/コンパイル/伝統的な方法]]も参照してください。 |
||
− | You may consider to build a ''linux-custom'' package to run SystemTap, but rebuilding the original {{Pkg|linux}} package is easy and efficient. See also [https://wiki.archlinux.org/index.php/Kernels/Compilation/Traditional]. |
||
− | === |
+ | ===準備=== |
+ | 最初に {{ic|<nowiki>cd ~/ && mkdir build && cd build/ && ASPROOT=. asp checkout linux && cd linux/</nowiki>}} を実行してオリジナルのカーネルビルドファイルを取得します。そして {{ic|makepkg --verifysource}} を実行して追加のファイルを取得します。この検証をしておけば「チェックサムの更新」のステップを飛ばしても安全です。 |
||
− | First, run {{ic|<nowiki>ABSROOT=. abs core/linux; cd core/linux</nowiki>}} to get the original kernel build files. |
||
− | Then use {{ic|makepkg --verifysource}} to get the additional files. By performing the verification, you can safely '''skip''' the steps on "Update checksum". |
||
− | === |
+ | ===config の修正=== |
− | + | '''config''' (32-bit システム向け) または '''config.x86_64''' (64-bit システム向け) を編集して以下のオプションを有効にします: |
|
* CONFIG_KPROBES=y |
* CONFIG_KPROBES=y |
||
* CONFIG_KPROBES_SANITY_TEST=n |
* CONFIG_KPROBES_SANITY_TEST=n |
||
44行目: | 38行目: | ||
* CONFIG_DEBUG_INFO_REDUCED=n |
* CONFIG_DEBUG_INFO_REDUCED=n |
||
* CONFIG_X86_DECODER_SELFTEST=n |
* CONFIG_X86_DECODER_SELFTEST=n |
||
− | + | デフォルトでは ''CONFIG_DEBUG_INFO'' と ''CONFIG_DEBUG_INFO_REDUCED'' だけが設定されていません。 |
|
− | + | 現在の core/linux (3.15.2 でテスト済み) では、以下の行を config.[x86_64] に追加するだけです: |
|
− | {{hc|x86_64| |
+ | {{hc|x86_64|<nowiki> |
− | <nowiki> |
||
echo ' |
echo ' |
||
CONFIG_DEBUG_INFO=y |
CONFIG_DEBUG_INFO=y |
||
CONFIG_DEBUG_INFO_REDUCED=n |
CONFIG_DEBUG_INFO_REDUCED=n |
||
' >> config.x86_64 |
' >> config.x86_64 |
||
− | </nowiki> |
+ | </nowiki>}} |
− | }} |
||
+ | ''これらの行を自己メンテナンスされているスクリプトに追加するときは CONFIG_* の行の前にスペースを入れないでください。.'' |
||
− | ''Note that if you want to put these lines into a self-maintained script, do not insert any space before CONFIG_* lines.'' |
||
+ | ===チェックサムを更新する=== |
||
− | ===Update checksum=== |
||
+ | ''ソースファイルが正しいと確信できるときはこのステップを飛ばしても安全です''。 |
||
− | ''You can safely skip this step if you believe the source files are correct''. |
||
− | + | {{ic|sha256sum config[.x86_64]}} を実行して新しい sha256sum を計算します。 |
|
− | + | '''PKGBUILD''' ファイル中で {{ic|<nowiki>sha256sum=('sum-of-first' ... 'sum-of-last')</nowiki>}} は {{ic|<nowiki>source=('first-source' ... 'last-source')</nowiki>}} と同じ順序で並んでいます。新しい sha256sum を正しい位置に入れてください。 |
|
− | {{ic|<nowiki>source=('first-source' ... 'last-source')</nowiki>}}, put your new md5sum in the right place. |
||
+ | ===ビルドとインストール=== |
||
− | ===Build and Install=== |
||
− | + | 任意: コンパイル速度向上のために {{ic|/etc/makepkg.conf}} で {{ic|<nowiki>MAKEFLAGS="-j16"</nowiki>}} とセットしておくことを推奨します。 |
|
+ | ビルドするには約 12 GB のディスク領域が必要です。大容量の DRAM を持っている場合はインメモリの tmpfs を使うことを検討してください。{{ic|makepkg}} または {{ic|makepkg --skipchecksums}} を実行してコンパイルします。そして {{ic|sudo pacman -U *.pkg.tar.gz}} とするだけでパッケージをインストールできます。'''pacman''' が '''reinstall''' するかどうか尋ねてきますので y と答えます。 |
||
− | You will need about 12 GB disk space for this build. Consider using an in-memory tmpfs if you have large DRAM. |
||
− | Run {{ic|makepkg}} or {{ic|makepkg --skipchecksums}} to compile, then simply {{ic|sudo pacman -U *.pkg.tar.gz}} to install the packages. |
||
− | '''pacman''' will tell you '''reinstall''', and you should say y. |
||
− | {{Pkg|linux}} |
+ | {{Pkg|linux}} と {{Pkg|linux-headers}} の再インストールが必要です。{{Pkg|linux-docs}} は再インストールしなくても問題ありません。 |
− | + | この方法に従う場合、外部モジュール({{Pkg|nvidia}} や {{Pkg|virtualbox}} など)を再ビルドする必要はありません。 |
|
+ | ==カスタムカーネルをビルドする== |
||
− | ==Build custom kernel== |
||
− | + | [http://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=README;hb=HEAD README] を参照してください。 |
|
+ | ==トラブルシューティング== |
||
− | ==Troubleshooting== |
||
− | === |
+ | === 起動時にパス 4 が失敗する === |
+ | 以下のメッセージが表示されるときは: |
||
− | If you have: |
||
− | + | /usr/share/systemtap/runtime/stat.c:214:2: error: 'cpu_possible_map' undeclared (first use in this function) |
|
+ | systemtap-git パッケージをインストールしてみてください。 |
||
− | Try to install systemtap-git package |
||
− | === System.map |
+ | === System.map がない === |
+ | DEBUG_INFO を有効にしてカーネルをビルドした場所から復元できます: |
||
− | You can recover it where you build your linux kernel with DEBUG_INFO enabled |
||
− | + | # cp src/linux-3.6/System.map /boot/System.map-3.6.7-1-ARCH |
|
+ | |||
+ | または: |
||
+ | |||
+ | # cp /proc/kallsyms /boot/System.map-`uname -r` |
||
+ | |||
+ | === Process return probes not available === |
||
+ | |||
+ | カーネルコンフィグが正しいのに {{ic|stap}} を起動したときに以下のメッセージが表示される場合: |
||
+ | |||
+ | WARNING: Kernel function symbol table missing [man warning::symbols] |
||
+ | semantic error: process return probes not available [man error::inode-uprobes] |
||
− | Alternately, |
||
+ | SystemTap が機能をサポートしているかどうか確認できていません。[[#System.map がない]]の手順に従ってください。 |
||
− | sudo cp /proc/kallsyms /boot/System.map-`uname -r` |
2018年3月25日 (日) 18:26時点における最新版
SystemTap は動作中の Linux システムについての情報収集を簡略化するためのフリーソフトウェア (GPL) インフラストラクチャを提供します。
目次
SystemTap
systemtapAUR パッケージをインストールしてください。上流での最新のリリースと比較してみてください [1]。また [2] にあるソースからビルドすることも検討してください。新しいカーネルやディストロのサポートは最初にここに現れます。
標準的なカーネル
すくなくとも linux-headers がインストールされている必要があります。
Arch は配布バイナリ(カーネルを含む)からデバッグ情報を取り除いている(strip している)ので、systemtap の機能の多くは利用できません。なので /usr/share/doc/systemtap/examples にある例の多くは動作しません。しかし stapprobes man page で動作する NON-DWARF および AUTO-DWARF のプローブタイプを見ることができます。例えば:
- カーネルトレースポイント: kernel.trace("*")
- ユーザースペースプローブ: process("...").function("...") (-g をつけて自分でビルドしたプログラムに限る)
- ユーザースペースマーカー: process("...").mark("...") (<sys/sdt.h> のマーカーをつけて configure されていれば)
- perfctrベースのプローブ: perf.*
- NON-DWARF カーネルプローブ: kprobe.function("...") と nd_syscall.* tapset (/boot/System.map* ファイルがあれば。下記参照)
カーネルのリビルド
SystemTap を実行するために linux-custom パッケージをビルドすることを考えているかもしれません。しかしオリジナルの linux パッケージをリビルドすることは簡単で効率的です。カーネル/コンパイル/伝統的な方法も参照してください。
準備
最初に cd ~/ && mkdir build && cd build/ && ASPROOT=. asp checkout linux && cd linux/
を実行してオリジナルのカーネルビルドファイルを取得します。そして makepkg --verifysource
を実行して追加のファイルを取得します。この検証をしておけば「チェックサムの更新」のステップを飛ばしても安全です。
config の修正
config (32-bit システム向け) または config.x86_64 (64-bit システム向け) を編集して以下のオプションを有効にします:
- CONFIG_KPROBES=y
- CONFIG_KPROBES_SANITY_TEST=n
- CONFIG_KPROBE_EVENT=y
- CONFIG_NET_DCCPPROBE=m
- CONFIG_NET_SCTPPROBE=m
- CONFIG_NET_TCPPROBE=y
- CONFIG_DEBUG_INFO=y
- CONFIG_DEBUG_INFO_REDUCED=n
- CONFIG_X86_DECODER_SELFTEST=n
デフォルトでは CONFIG_DEBUG_INFO と CONFIG_DEBUG_INFO_REDUCED だけが設定されていません。
現在の core/linux (3.15.2 でテスト済み) では、以下の行を config.[x86_64] に追加するだけです:
x86_64
echo ' CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO_REDUCED=n ' >> config.x86_64
これらの行を自己メンテナンスされているスクリプトに追加するときは CONFIG_* の行の前にスペースを入れないでください。.
チェックサムを更新する
ソースファイルが正しいと確信できるときはこのステップを飛ばしても安全です。
sha256sum config[.x86_64]
を実行して新しい sha256sum を計算します。
PKGBUILD ファイル中で sha256sum=('sum-of-first' ... 'sum-of-last')
は source=('first-source' ... 'last-source')
と同じ順序で並んでいます。新しい sha256sum を正しい位置に入れてください。
ビルドとインストール
任意: コンパイル速度向上のために /etc/makepkg.conf
で MAKEFLAGS="-j16"
とセットしておくことを推奨します。
ビルドするには約 12 GB のディスク領域が必要です。大容量の DRAM を持っている場合はインメモリの tmpfs を使うことを検討してください。makepkg
または makepkg --skipchecksums
を実行してコンパイルします。そして sudo pacman -U *.pkg.tar.gz
とするだけでパッケージをインストールできます。pacman が reinstall するかどうか尋ねてきますので y と答えます。
linux と linux-headers の再インストールが必要です。linux-docs は再インストールしなくても問題ありません。
この方法に従う場合、外部モジュール(nvidia や virtualbox など)を再ビルドする必要はありません。
カスタムカーネルをビルドする
README を参照してください。
トラブルシューティング
起動時にパス 4 が失敗する
以下のメッセージが表示されるときは:
/usr/share/systemtap/runtime/stat.c:214:2: error: 'cpu_possible_map' undeclared (first use in this function)
systemtap-git パッケージをインストールしてみてください。
System.map がない
DEBUG_INFO を有効にしてカーネルをビルドした場所から復元できます:
# cp src/linux-3.6/System.map /boot/System.map-3.6.7-1-ARCH
または:
# cp /proc/kallsyms /boot/System.map-`uname -r`
Process return probes not available
カーネルコンフィグが正しいのに stap
を起動したときに以下のメッセージが表示される場合:
WARNING: Kernel function symbol table missing [man warning::symbols]
semantic error: process return probes not available [man error::inode-uprobes]
SystemTap が機能をサポートしているかどうか確認できていません。#System.map がないの手順に従ってください。