Hisayoshi Kato's weblog at Sun Solution Center

pageicon Tuesday Jun 10, 2008

door callを追ってみましょう。

システム/アプリケーションでよく見かけるdoor call(1対1で、server process内にある関数をたたく)なのですが、たとえば、svc.startd(1M)のdoorファイルを調べてみましょう(↓)。どんなアプリケーションで、どんなファイルを使ってdoorのやりとりをしているか?気になったりしませんか?(^^;(しません。。って周りにいわれます。。きっと私と同じように気になっている方がいると思います!!)たまに、コマンドのバグとかにひっかかるとdoor callをしたんだけど、コマンドがかえってきませんというようなバグに遭遇してしまう場合があります。というか、そのバグにあたったので、このブログを書いているかもしれませんが。。とにかく、1プロセスを追うコールではなくて、システムカーネルレベルで、すべてのアプリケーションのdoorコールを追ってみたい!

 # pfiles 1562 | grep door
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.startd[1562]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]



 カーネルレベルのdoor_callをコールしている際に、取得されるディクリプタとdoor_lookupをとる相手(サーバー?)をDTraceを用いて取得してみます。

//door.d 

 #!/usr/sbin/dtrace -s


door_call:entry
{
self->in=1;
self->door_file=fds[arg0].fi_pathname;
self->door_fs=fds[arg0].fi_fs;
}

door_lookup:return
/self->in/
{
        self->filed = args[1]->door_target;
}

door_call:return
/self->in&&self->filed!=0/
{
        @[execname,self->door_file,self->door_fs,stringof(self->filed->p_user.u_psargs)] = count();
        self->in = 0;
        self->filed = 0;
        self->door_file=0;
        self->door_fs=0;
}

 これを実行してみましょう。このスクリプトを実行する際に、pkill -9 svc.startdとかprtdiag(1M)とかしてみましょう。(何でもいいです。) そうすると下記のような出力結果が得られます。

kato@kato-osol:~$ pfexec ./door.d
dtrace: script './door.d' matched 3 probes
^C

  svcs                                                /etc/svc/volatile/repository_door                   namefs                                              /lib/svc/bin/svc.configd                                          1
  svcs                                                <unknown>                                           doorfs                                              /lib/svc/bin/svc.configd                                       9366



Comments:

Post a Comment:
  • HTML Syntax: NOT allowed


Hisayoshi Kato
I'm Customer Benchmark Engineer at Sun Solution Center.
My interest are Solaris and Oracle.
We're working on Commercial Benchmarking with Sun's customers.
Also I work as OpenSolaris Evangelist in Japan.
Recently my focus is to build OpenSolaris Community in Japan.
Photo By Jim Grisanzio


OpenSolaris.org


Tokyo OpenSolaris User Group


Tokyo Linux User Group


Sun Solution Center



Weblog menu


« November 2009
SunMonTueWedThuFriSat
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
     
       
Today

Recent Entries

Search this blog

Links

Sun Solution Center Links

Japan OpenSolaris User Blog Links

Japan OpenSolaris Distro

Visitor

Locations of visitors to this page

Tags