検索

41.3. SystemTap の使用

download PDF
SystemTap は、SystemTap スクリプトを C に変換することで動作し、システム C コンパイラーを実行してそこからカーネルモジュールを作成します。モジュールが読み込まれると、カーネルにフックしてプローブされたイベントをすべてアクティベートします。その後、イベントが発生すると、コンパイルされたハンドラーが実行されます。最終的にセッションが停止し、フックが切断され、モジュールが削除されます。プロセス全体が 1 つのコマンドラインプログラム stap から実行されます。

41.3.1. トレーシング

プローブの最も単純な種類は、イベントを追跡することです。これは、ストラテジー的に配置された印刷ステートメントをプログラムに挿入する効果です。多くの場合、これは問題の解決の最初のステップです。発生したものの履歴を確認して確認します。
このスタイルのインストルメンテーションは最も単純なものです。systemtap に対して各イベントに何かを印刷するよう依頼するだけです。これをスクリプト言語で表現するには、プローブの場所と印刷先を指示する必要があります。

41.3.1.1. プローブの場所

SystemTap は、多くの組み込みイベントをサポートします。systemtap が同梱するスクリプトのライブラリー(それぞれをtapset と呼ばれます)は、組み込みファミリーの用語で定義された追加のスクリプトを定義できます。詳細は、stapprobes の man ページを参照してください。これらのイベントはすべて、ドットで区切られたパラメーター化された識別子のような統一された構文を使用して名前が付けられます。
表41.1 SystemTap イベント
イベント 説明
begin systemtap セッションの開始。
end systemtap セッションの終了
kernel.function("sys_open") カーネル内の sys_open という名前の関数へのエントリー。
syscall.close.return close システムコールから返されます。
module("ext3").statement(0xdeadbeef) ext3 ファイルシステムドライバーで対処された命令。
timer.ms(200) 200 ミリ秒ごとに実行されるタイマー。
すべての関数エントリーを追跡し、ソースファイル(カーネルの net/socket.c など)で終了するデモケースとして を使用します。kernel.function プローブポイントを使用すると、systemtap がカーネルのデバッグ情報を調べ、オブジェクトコードをソースコードに関連付けるため、これを簡単に表現できます。デバッガーのように機能します。名前や配置が可能な場合は、プローブできます。関数エントリーに kernel.function ("*@net/socket.c") を使用し、終了に kernel.function ("*@net/socket.c").return を使用します。関数名の部分と、その後の @FILENAME 部分でのワイルドカードの使用に注意してください。ワイルドカードをファイル名にしたり、検索を正確に制限したい場合はコロン(:)と行番号を追加することもできます。systemtap はプローブポイントに一致する場所に個別のプローブを配置するため、いくつかのワイルドカードを数百または数千のプローブに拡張できるため、質問する内容に注意してください。
プローブポイントを特定すると、systemtap スクリプトのスケルトンが表示されます。probe キーワードにより、プローブポイントまたはコンマ区切りのリストが導入されました。以下の { および } の中括弧は、一覧表示されたすべてのプローブポイントに対してハンドラーを囲みます。
このスクリプトはそのまま実行できますが、空のハンドラーでは出力はありません。2 つの行を新しいファイルに配置します。stap -v FILE を実行します。^C でいつでも終了します。( -v オプションは systemtap に対して、処理中により詳細なメッセージを出力するように指示します。他のオプションを確認するには、-h オプションを試してください。)

41.3.1.2. 印刷する内容

入力および終了された各関数に関心があるため、関数名が含まれる各行をそれぞれに出力する必要があります。この一覧を読みやすくするために、systemtap は、他のトレース関数が呼び出された関数をより深くネストできるように、行を識別する必要があります。各プロセスを、同時に実行できる他のプロセスとは別に指示するには、systemtap もその行にプロセス ID を出力する必要があります。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.