「SystemTap」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(英語版よりコピー)
 
(Pkg/AUR テンプレートの更新)
 
(3人の利用者による、間の7版が非表示)
1行目: 1行目:
[[Category:Kernel]]
+
[[Category:カーネル]]
 
[[en:SystemTap]]
 
[[en:SystemTap]]
[[zh-cn:SystemTap]]
+
[[zh-hans:SystemTap]]
[http://sourceware.org/systemtap/ SystemTap] は動作中の Linux システムからの情報収集を簡略化するためのフリーソフトウェア(GPL)インフラストラクチャを提供します。
+
[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 tracepoints: kernel.trace("*")
+
* カーネルトレースポイント: kernel.trace("*")
* user-space probes: process("...").function("...") (for programs you build yourself with -g)
+
* ユーザースペースプローブ: process("...").function("...") (-g をつけて自分でビルドしたプログラムに限る)
* user-space markers: process("...").mark("...") (if they were configured with the ''<sys/sdt.h>'' markers)
+
* ユーザースペースマーカー: process("...").mark("...") (''<sys/sdt.h>'' のマーカーをつけて configure されていれば)
* perfctr-based probes: perf.*
+
* perfctrベースのプローブ: perf.*
* non-dwarf kernel probes: kprobe.function("...") and nd_syscall.* tapset (if a /boot/System.map* file is available, see below).
+
* 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].
 
   
===Prepare===
+
===準備===
  +
最初に {{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".
 
   
===modify config===
+
===config の修正===
Edit '''config''' (for 32-bit systems) or '''config.x86_64''' (for 64-bit systems), turn on these options:
+
'''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
By default only ''CONFIG_DEBUG_INFO'' and ''CONFIG_DEBUG_INFO_REDUCED'' are not set.
+
デフォルトでは ''CONFIG_DEBUG_INFO'' ''CONFIG_DEBUG_INFO_REDUCED'' だけが設定されていません。
   
With current core/linux (tested with 3.15.2) you can simply append these lines into config.[x86_64]:
+
現在の 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''.
 
   
Run {{ic|md5sum config[.x86_64]}} to get a new md5sum.
+
{{ic|sha256sum config[.x86_64]}} を実行して新しい sha256sum を計算します。
   
In '''PKGBUILD''' file, the {{ic|<nowiki>md5sums=('sum-of-first' ... 'sum-of-last')</nowiki>}} has the same order with
+
'''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===
 
Optional: It is recommended to set {{ic|<nowiki>MAKEFLAGS="-j16"</nowiki>}} in {{ic|/etc/makepkg.conf}} to speed up the compilation.
+
任意: コンパイル速度向上のために {{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}} and {{Pkg|linux-headers}} should be reinstalled, {{Pkg|linux-docs}} does not matter.
+
{{Pkg|linux}} {{Pkg|linux-headers}} の再インストールが必要です。{{Pkg|linux-docs}} は再インストールしなくても問題ありません。
   
Via this method, external modules (e.g. {{Pkg|nvidia}} and {{Pkg|virtualbox}}) do not need to be rebuilt.
+
この方法に従う場合、外部モジュール({{Pkg|nvidia}} {{Pkg|virtualbox}} など)を再ビルドする必要はありません。
   
  +
==カスタムカーネルをビルドする==
==Build custom kernel==
 
Please reference this [http://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=README;hb=HEAD README]
+
[http://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=README;hb=HEAD README] を参照してください。
   
  +
==トラブルシューティング==
==Troubleshooting==
 
   
=== Pass 4 fails when launching ===
+
=== 起動時にパス 4 が失敗する ===
   
  +
以下のメッセージが表示されるときは:
If you have:
 
   
/usr/share/systemtap/runtime/stat.c:214:2: error: 'cpu_possible_map' undeclared (first use in this function)
+
/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 is missing ===
+
=== 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 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_INFOCONFIG_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.confMAKEFLAGS="-j16" とセットしておくことを推奨します。

ビルドするには約 12 GB のディスク領域が必要です。大容量の DRAM を持っている場合はインメモリの tmpfs を使うことを検討してください。makepkg または makepkg --skipchecksums を実行してコンパイルします。そして sudo pacman -U *.pkg.tar.gz とするだけでパッケージをインストールできます。pacmanreinstall するかどうか尋ねてきますので y と答えます。

linuxlinux-headers の再インストールが必要です。linux-docs は再インストールしなくても問題ありません。

この方法に従う場合、外部モジュール(nvidiavirtualbox など)を再ビルドする必要はありません。

カスタムカーネルをビルドする

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 がないの手順に従ってください。