41.5. 便利な SystemTap スクリプトの例
SystemTap のインストール時に配布されるサンプルスクリプトは、/usr/share/systemtap/examples ディレクトリーにあります。
stap コマンドを使用して、さまざまな SystemTap スクリプトを実行できます。
- 関数呼び出しのトレース
para-callgraph.stpSystemTap スクリプトを使用して、関数の呼び出しと関数の戻り値をトレースできます。# stap para-callgraph.stp argument1 argument2このスクリプトは、2 つのコマンドライン引数を取ります。1 つは、開始/終了をトレースする対象となる関数の名前です。もう 1 つは、トリガー関数です (任意)。この関数は、スレッドごとのトレースを有効または無効にします。トリガー関数が終了するまで、各スレッドでのトレースが継続されます。
- ポーリングアプリケーションの監視
timeout.stp SystemTap スクリプトを使用して、どのアプリケーションがポーリングしているかを特定および監視できます。これを把握することで、不要なポーリングや過剰なポーリングを追跡できます。これは、トラッキングは、CPU 使用率や省電力を改善するための領域を特定するのに役立ちます。
# stap timeout.stpこのスクリプトは、各アプリケーションが
poll、select、epoll、itimer、futex、nanosleep、Signalシステムコールを何回使用したかを経時的に追跡します。- プロセスごとのシステムコールボリュームの追跡
syscalls_by_proc.stpSystemTap スクリプトを使用して、システムコールを最も多く実行しているプロセスを確認できます。システムコールを最も多く実行している 20 個のプロセスが表示されます。# stap syscalls_by_proc.stp- ネットワークソケットコードで呼び出された関数の追跡
socket-trace.stpSystemTap サンプルスクリプトを使用して、カーネルの net/socket.c ファイルから呼び出された関数を追跡できます。これにより、各プロセスがカーネルレベルでネットワークとどのように対話しているかを詳細に確認できます。# stap socket-trace.stp- 各ファイルの読み取りまたは書き込みの I/O 時間の追跡
iotime.stpSystemTap スクリプトを使用して、各プロセスがファイルへの読み取りまたは書き込みを行うのにかかる時間を監視できます。これにより、システムへの読み込みに時間がかかっているファイルを判断する上で役立ちます。# stap iotime.stp- タスクからサイクルを奪っている IRQ やその他のプロセスを追跡する
cycle_thief.stpSystemTap スクリプトを使用すると、タスクが実行されている時間と実行されていない時間を追跡できます。これにより、どのプロセスがタスクからサイクルを奪っているかを特定できます。# stap cycle_thief.stp -x pid
SystemTap スクリプトの詳細な例と情報は、/usr/share/systemtap/examples/index.html ファイルにあります。Web ブラウザーで開くと、使用可能なすべてのスクリプトとその説明がリスト表示されます。