mdb写経/スレッド、プロセス、タスク、およびプロジェクト

2012/09/21

dcmds

thread ::findstack [-v]
指定されたカーネルスレッド (kthread_t 構造体の仮想アドレスによって識別される) に関連するスタックトレースを出力します。複数の異なるアルゴリズムを使用して該当するスタックバックトレースを見つけます。オプションのコマンド文字列を指定すると、ドット変数はスタックフレームの最先頭のフレームポインタアドレスにリセットされ、指定されたコマンドはコマンド行に入力された場合と同じように評価されます。デフォルトのコマンド文字列は、「<.$C0」です。すなわち、フレームポインタを含め、引数を付けずにスタックトレースを出力します。
> 000002a100067c60::findstack
stack pointer for thread 2a100067c60: 2a1000670c1
[ 000002a1000670c1 cv_wait+0x3c() ]
  000002a100067171 scsi_hba_barrier_daemon+0x80()
  000002a100067251 thread_start+4()

::pgrep [-x] [-n|-o] regexp
名前が regexp 正規表現パターンに適合するプロセスのプロセス情報を表示します。pgrep(1) コマンドに似ています。すべてのプロセスを対象にしたパターンマッチングに使用されます。
-n オプションを指定すると、パターンに適合する最新のプロセスだけが表示されます。
-o オプションを指定すると、パターンに適合するもっとも古いプロセスだけが表示されます。
-x オプションを指定すると、検索パターンと正確に一致する名前を持つプロセスだけが表示されます。
kmdb(1) では、::pgrep に使用する regexp は、英数字のプレーンテキスト文字列でなければなりません。
> ::pgrep ssh
S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME
R    613      1    612    612      0 0x42000000 ffffff00cf527000 sshd
R   1206    613    612    612      0 0x42010000 ffffff00cf4f1058 sshd
R   1207   1206    612    612      0 0x42010000 ffffff00cf6e6050 sshd

pid ::pid2proc
指定されたプロセス ID に対応する proc_t アドレスを出力します。MDB のデフォルトは 16 進数であることを思い出してください。したがって、pgrep(1) または ps(1) を使用して取得した 10 進数のプロセス ID には接頭辞 0t を付ける必要があります。
> 265::pid2proc
ffffff00cf527000

process ::pmap [-q]
指定されたプロセスアドレスに該当するプロセスのメモリーマップを出力します。pmap(1) に似た書式を使用して出力を表示します。-q オプションを指定すると、出力が省略形式で表示されるので、処理時間が短くなります。
> ffffff00ce5e2008::pmap
             SEG             BASE     SIZE      RES PATH
ffffff00c98f2818 0000000008044000      16k      16k [ anon ]
ffffff00ca636178 0000000008050000      44k      44k /usr/sbin/cron
ffffff00ca649a08 000000000806b000      12k      12k /usr/sbin/cron
ffffff00ca62a720 000000000806e000      60k      44k [ anon ]
ffffff00c94d0658 00000000fe820000     128k     128k /lib/libbsm.so.1
ffffff00ca6cb408 00000000fe840000      36k      36k /lib/libbsm.so.1
ffffff00c98f21b8 00000000fe849000       4k       0k [ anon ]
ffffff00c98f8808 00000000fe9d0000      56k      52k /usr/lib/locale/common/metho
ffffff00ca6ad200 00000000fe9ed000       8k       8k /usr/lib/locale/common/metho
ffffff00ce58d850 00000000fe9f0000    1288k     104k /usr/lib/locale/ja_JP.UTF-8/
ffffff00ce5906c8 00000000feb42000       4k       4k /usr/lib/locale/ja_JP.UTF-8/
ffffff00ca649d08 00000000feda0000      20k      20k /lib/libcontract.so.1
ffffff00ca65a618 00000000fedb5000       4k       4k /lib/libcontract.so.1
ffffff00c9504de0 00000000fedc0000       4k       4k /system/volatile/tzsyncrpaqF
ffffff00ca6cb108 00000000fedd0000       4k       4k [ anon ]
    :
    :

::project
kernel project を表示します。
> ::project
            ADDR PROJID ZONEID REFCNT
ffffff00c8a94e90      0      0    692
ffffff00cfbb4840      3      0      5
ffffff010a9f9360      1      0      4
    :
    :

[address] ::ps [- fltTP]
指定されたプロセスまたはすべてのアクティブなシステムプロセスに関連する情報の要約を  ps(1) に似た形式で出力します。
-f 完全なコマンド名と初期引数が出力されます。
-l 各プロセスに関連する LWP が出力されます。
-t 各プロセスの LWP に関連するカーネルスレッドが出力されます。
-T 各プロセスに関連するタスク ID が出力されます。
- 各プロセスに関連するプロジェクト ID が出力されます。
> ffffff00c7e80030::ps -fltTP
S    PID   PPID   PGID    SID  TASK  PROJ    UID      FLAGS             ADDR NAME
R      7      0      0      0     0     0      0 0x00020001 ffffff00c7e80030 intrd
        T  0xffffff00021fcc20 <TS_SLEEP>
        L  0xffffff00c6c450c0 ID: 1

::ptree
それぞれの親プロセスから派生した子プロセスを含むプロセスツリーを出力します。ptree(1) に似た書式を使用して出力を表示します。
> ::ptree
fffffffffbc35e30  sched
     ffffff00c7e7f038  vmtasks
     ffffff00c7e80030  intrd
     ffffff00c7e84028  fsflush
     ffffff00c7e86020  pageout
     ffffff00c7e89018  init
          ffffff00cf51c008  sendmail
    :
    :

::task
アクティブなカーネルタスク構造体とそれに関連する ID 番号および属性のリストを出力します。プロセスタスク ID の詳細については、settaskid(2) を参照してください。
> ::task
            ADDR TASKID PROJID ZONEID REFCNT      FLAGS
ffffff00d6338010     98      0      0      1 0x00000000
ffffff00d63380c8     96      0      0      1 0x00000000
ffffff00d6338180     95      0      0      1 0x00000000
ffffff00d6338238     94      0      0      1 0x00000000
ffffff00d63382f0     93      0      0      1 0x00000000
ffffff00d63383a8    112      0      0      1 0x00000000
ffffff00d6338460     91      0      0      1 0x00000000
ffffff00d6338518     89      0      0      1 0x00000000
ffffff00d63385d0     88      0      0      1 0x00000000
ffffff00d6338688     82      0      0      2 0x00000000
ffffff00d6338740     80      0      0      2 0x00000000
ffffff00d63387f8     75      0      0      4 0x00000000
ffffff00d63388b0     81      0      0      1 0x00000000
ffffff00d6338968     68      0      0      1 0x00000000
ffffff00d6338a20     65      0      0      1 0x00000000
ffffff00dc3d6b98    107      0      0      1 0x00000000
ffffff00d6338b90     61      0      0      1 0x00000000
ffffff00dc3d6c50    109      0      0      1 0x00000000
    :
    :

[address] ::thread [-bdfimps]
指定された kthread_t 構造体のプロパティーを表示します。kthread_t 構造体のアドレスを指定しないと、すべてのカーネルスレッドのプロパティーが表示されます。
-b オプションを指定すると、スレッドのターンスタイルとブロッキング同期オブジェクトに関連する情報が表示されます。
-d スレッドのディスパッチャーの優先順位、バインディング、および最終ディスパッチ時刻が表示されます。
-f 状態が TS_FREE であるスレッドが出力から削除されます。
-i スレッドの状態、フラグ、優先順位、および割り込み情報が表示されます(デフォルト)。
-m ほかのすべての出力オプションがマージされて、単一の出力行に表示されます。
-p スレッドのプロセス、LWP、および資格ポインタが表示されます。
-s スレッドのシグナル待ち行列とシグナルの保留と保持を示すマスクが表示されます。
> ::thread
            ADDR    STATE  FLG PFLG SFLG   PRI  EPRI PIL             INTR
fffffffffbc36de0 stopped  10000  100 3e03    96     0   0              n/a
ffffff0002005c20 onproc   10008    0    3    -1     0   0              n/a
ffffff000200bc20 sleep    10008    0    3    60     0   0              n/a
ffffff0002011c20 sleep    10008    0    3    60     0   0              n/a
ffffff0002017c20 sleep    10008    0    3    60     0   0              n/a
    :
    :
ffffff0002071c20 free     10009    0    3     0     0   0              n/a
ffffff0002077c20 free     10009    0    3     0     0   0              n/a
ffffff000207dc20 free     10009    0    3     0     0   0              n/a
ffffff0002083c20 free     10009    0    3     0     0   0              n/a
ffffff0002089c20 free     10009    0    3     0     0   0              n/a
ffffff000208fc20 free     10009    0    3     0     0   0              n/a
ffffff0002095c20 free     10009    0    3   109     0  10 ffffff00020a1c20
ffffff000209bc20 free     10009    0    3   109     0  10 ffffff00020a1c20
ffffff00020a1c20 free     10009    0    3   105     0   6 ffffff00cd0d80c0
    :
    :

[address] ::threadlist [-t] [-v [count]]
スレッドと、関連するスタックトレースを表示します。
-v スタックトレースを含む詳細な情報を表示します
-t taskq に属するスレッドをスキップします。
count count 以上の引数を表示しません(デフォルト値は 0)
> ::threadlist
            ADDR             PROC              LWP CMD/LWPID
fffffffffbc36de0 fffffffffbc35e30 fffffffffbc3f470 sched/1
ffffff0002005c20 fffffffffbc35e30                0 idle()
ffffff000200bc20 fffffffffbc35e30                0 thread_reaper()
ffffff0002011c20 fffffffffbc35e30                0 tq:kmem_move_taskq
ffffff0002017c20 fffffffffbc35e30                0 tq:pseudo_nexus_enum_tq
ffffff000201dc20 fffffffffbc35e30                0 scsi_hba_barrier_daemon()
ffffff0002023c20 fffffffffbc35e30                0 scsi_lunchg1_daemon()
ffffff0002029c20 fffffffffbc35e30                0 scsi_lunchg2_daemon()
ffffff000202fc20 fffffffffbc35e30                0 tq:scsi_vhci_nexus_enum_tq
ffffff00020c5c20 fffffffffbc35e30                0 tq:mdi_taskq
ffffff00020b3c20 fffffffffbc35e30                0 tq:mdi_taskq
    :
    :
> fffffffffbc36de0::threadlist -v
            ADDR             PROC              LWP CLS PRI            WCHAN
fffffffffbc36de0 fffffffffbc35e30 fffffffffbc3f470   0  96                0
  PC: _resume_from_idle+0xf2    CMD: sched
  stack pointer for thread fffffffffbc36de0: fffffffffbc7f970
  [ fffffffffbc7f970 _resume_from_idle+0xf2() ]
    swtch+0x13c()
    sched+0x451()
    main+0x513()
    _locore_start+0x90()


walker

proc
アクティブなプロセス構造体(proc_t)に対して反復適用します。
> ::walk proc |::print proc_t p_user.u_psargs
p_user.u_psargs = [ "sched" ]
p_user.u_psargs = [ "nfsd_kproc" ]
p_user.u_psargs = [ "lockd_kproc" ]
p_user.u_psargs = [ "vmtasks" ]
p_user.u_psargs = [ "intrd" ]
p_user.u_psargs = [ "fsflush" ]
p_user.u_psargs = [ "pageout" ]
p_user.u_psargs = [ "/usr/sbin/init" ]
p_user.u_psargs = [ "/usr/lib/sendmail -bl -q15m" ]
    :
    :

task
指定されたタスクポインタを使用して、指定されたタスクのメンバーのプロセス構造体(proc_t)のリストに反復適用します。
> 00000300062b7368::walk task |::ps
S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME
R    393    388    387    387      0 0x4a004000 00000300165040b8 hald-addon-cpufr
R    388    387    387    387      0 0x4a004000 000003001584d008 hald-runner
R    387      1    387    387      0 0x42000000 00000300140fcfe8 hald

thread
カーネルスレッド (kthread_t) 構造体のセットに対して反復適用します。大域 walk が起動されると、すべてのカーネルスレッドがこの walker によって戻されます。プロセス構造体(proc_t) のアドレスを開始点として使用することによって局所 walk が起動されると、指定したプロセスに関連するスレッドのセットが戻されます。
> ::walk thread |::print kthread_t t_procp |::ps
S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
R      0      0      0      0      0 0x00000001 00000000018a62c0 sched
    :
    :

0 件のコメント:

コメントを投稿