初めての(?) DTrace (その 2) - 基本型

さて今回より DTrace の実践。。。というにはちょっと遠いのですが、ひとまず人が書いているスクリプトを見て、何をしているのかがなんとなく徐々にわかるくらいを目指して、DTrace の説明をしていこうと思います。

DTrace には 3 種類の登場人物が出てきます。1 人(?)目はプローブで、カーネルに仕込まれた OS 観測ポイントです。定点観測船やセンサーをイメージするとわかりやすいかと思います。2 人目はプロバイダで、プローブをカテゴリごとにまとめたものと思っておけばよいかと思います。3 人目はコンシューマで、ユーザーがたたくコマンドと思っておけばよいかと思います。図はマニュアルからの抜粋です。

DTrace architecture 

トレースを行いたい人が DTrace を使う方法は大きく 2 通りあり、1 つ目が D 言語でのスクリプトを書いて dtrace(1M) コマンドに処理させる方法、2 つ目が lockstat(1M) のような実は DTrace を読んでいるコマンドを使う方法です。ここでは前者の「D 言語でスクリプトを組んで dtrace コマンドに処理させる」方法を掘り下げていくつもりです。この方法の場合、コンシューマは dtrace コマンドです。登場するプローブは、システムの追跡対象というか観測点の名前、登場するプロバイダはそのプローブが所属しているプロバイダ名ということになります。 

プローブは D スクリプトでは

プロバイダ:モジュール:関数:名前

の 4 つの識別名で識別されます。::: と書くと全てのプローブを指します。aaa::ccc:ddd だと、aaa プロバイダの関数 ccc の ddd で、モジュール名は何でもよい、という意味です。

例えば read(2) システムコールが呼ばれたときの状態を見てみたい場合、syscall::read:entry というプローブを観測点として見張ることとなります。流れとしては、「○○を見張りたいなー」となったとき、○○に対応するプローブとそれが所属するプロバイダをマニュアル等で探して、見張る対象として指定するわけです。

対象として指定する方法は、以下の D 言語の書式に従います。

プローブ
/ 述語 /
{
  アクション;
     : ;
}

このひとかたまりをプローブ節と呼び、D スクリプトはこのプローブ節の繰り返し (1 個でもよい) から構成されます。「プローブ」と書いてあるところに、観測対象のプローブ名を書くわけです。

プローブで指定した観測点で述語が真ならアクションを実行、となるわけですが、これだけではわかりにくいかもしれません。既にちょっと長くなってしまったので、続きは次回とさせていただきます。

投稿されたコメント:

コメント
  • HTML文法 不許可
About

user13138578

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日