mdb写経/NFS

2012/09/21

dcmds

address ::nfs_expvis
exportinfo visible list の内容を表示します(visible list があるのは pseudo ノードだけ)。
> 0x60017e6ddc0::nfs_expvis
exportinfo->exp_visible = 60017e6ddc0

/Install/Images/sc_3.2_u2
    addr:      60017e6ddc0   exp : 0    ref: 1
    vp  :      60014a34b00   ino : 13 (0xd)
    seci:      6001679c300   nsec: 1
    Security Flavors :
        sys       ref: 1        flag: 0x0 ()

address ::nfs_expinfo
exportinfo 構造体の内容を表示します。
> 60017d50e40::nfs_expinfo

/Install/Images (pseudo)    60017d50e40
    rtvp: 600138becc0         ref : 1         flag: 0x4080 (EX_PSEUDO,EX_ROOT) VROOT
    dvp : 0                   anon: 0         logb: 0
    seci: 6001679c180         nsec: 1         fsid: (0x19a8ce 0x49514308)
    Security Flavors :
        sys       ref: 5        flag: 0x1 (M_RO)
    PseudoFS Nodes:
        /Install/Images/sc_3.2_u2
            addr:      60017e6ddc0   exp : 0    ref: 1
            vp  :      60014a34b00   ino : 13 (0xd)
            seci:      6001679c300   nsec: 1
            Security Flavors :
                sys       ref: 1        flag: 0x0 ()
        /Install/Images/sc_3.2_u2/mnt
            addr:      60017db9b80   exp : 1    ref: 1
            vp  :      600124d6980   ino : 36 (0x24)
            seci:                0   nsec: 0
    :
    :

[ address ] ::nfs_exptable
exportinfo テーブルの内容を表示します。
> ::nfs_exptable

/ (pseudo)    30015afcfc0
    rtvp: 30007095a40         ref : 1         flag: 0x4080 (EX_PSEUDO,EX_ROOT) VROOT
    dvp : 0                   anon: 0         logb: 0
    seci: 30015b12a80         nsec: 1         fsid: (0xd198852e 0x53d64408)
    Security Flavors :
        sys       ref: 1        flag: 0x1 (M_RO)
    PseudoFS Nodes:
        /install
            addr:      3001632d000   exp : 0    ref: 1
            vp  :      3001572f840   ino : 90701 (0x1624d)
            seci:                0   nsec: 0

/install    300176c43c0
    rtvp: 3001593c000         ref : 1         flag: 0x4000 (EX_ROOT) VROOT
    dvp : 30007095a40         anon: 0         logb: 0
    seci: 3000820b8c0         nsec: 1         fsid: (0xcc3e9a5f 0xca41b308)
    Security Flavors :
        sys       ref: 1        flag: 0x21 (M_RO,M_EXP)

::nfs_nstree [-v]
nfs pseudo namespace tree の内容を表示します。-v オプションを指定した場合、exportinfo と exp_visible 構造体の内容を表示します。
> ::nfs_nstree


TREENODE:
/
  addr:             30014446e38
  tree_parent:      0
  tree_child_first: 30014446280
  tree_sibling:     0
  tree_exi:         30015afcfc0
  tree_vis:         0


    TREENODE:
    /install
      addr:             30014446280
      tree_parent:      30014446e38
      tree_child_first: 0
      tree_sibling:     0
      tree_exi:         300176c43c0
      tree_vis:         3001632d000
> ::nfs_nstree -v


TREENODE:
/

  Dump treenode:

  addr:             30014446e38
  tree_parent:      0
  tree_child_first: 30014446280
  tree_sibling:     0
  tree_exi:         30015afcfc0
  tree_vis:         0

  Dump exportinfo:

  / (pseudo)    30015afcfc0
      rtvp: 30007095a40         ref : 1         flag: 0x4080 (EX_PSEUDO,EX_ROOT) VROOT
      dvp : 0                   anon: 0         logb: 0
      seci: 30015b12a80         nsec: 1         fsid: (0xd198852e 0x53d64408)
      Security Flavors :
          sys       ref: 1        flag: 0x1 (M_RO)
      PseudoFS Nodes:
          /install
              addr:      3001632d000   exp : 0    ref: 1
              vp  :      3001572f840   ino : 90701 (0x1624d)
              seci:                0   nsec: 0

    :
    :

[ address ] ::nfs_mntinfo [-v]
mntinfo_t 構造体の情報を表示します。
> ::nfs_mntinfo
NFS Version=2
   mi_flags: MI_HARD,MI_INT,MI_NOAC,MI_DYNAMIC
     mount point: /vol
     mount from : b100-2:vold(pid750)
> ::nfs_mntinfo -v
NFS Version=2
   mi_flags: MI_HARD,MI_INT,MI_NOAC,MI_DYNAMIC
     mount point: /vol
     mount from : b100-2:vold(pid750)
mi_zone=18bd768
mi_curread=8192, mi_curwrite=512, mi_retrans=5, mi_timeo=350
mi_acregmin=3000000000, mi_acregmax=60000000000, mi_acdirmin=30000000000, mi_acdirmax=60000000000
Server list: 300045b9968
     b100-2.vold

Current Server: 300045b9968      b100-2.vold

Total: Server Non-responses = 0 Server Failovers = 0
IO statistics for this mount
        No. of bytes read               0
        No. of read operations          0
        No. of bytes written            0
        No. of write operations         0
Async Request queue: max_threads = 8 active_threads = 0
     number requests queued:
     READ_AHEAD = 0    PUTPAGE = 0     PAGEIO = 0    READDIR = 0     COMMIT = 0   INACTIVE = 0
address ::nfs_servinfo [-v]
servinfo_t 構造体の情報を表示します。
> 300045b9968::nfs_servinfo
     b100-2.vold
> 300045b9968::nfs_servinfo -v
secdata ptr = 30004271560
address = 1/loopback/-/b100-2.vold
hostname = for volume management (/vol)
filehandle = 0000000000000001000000010000000000000000000000000000000000000000

::nfs_stat [-csb][-234][-anr] | $[count]
NFS statistics を表示します。以下の様な nfsstat コマンドと似たスイッチです。
::nfs_stat [-csb][-234][-anr]
::nfs_stat -c -> Client Statistics.
::nfs_stat -s -> Server Statistics.
::nfs_stat -b -> Callback Stats. (V4 only)
::nfs_stat -r -> RPC Statistics.
::nfs_stat -n -> NFS Statistics.
::nfs_stat -a -> ACL Statistics.
::nfs_stat -2 -> Version 2.
::nfs_stat -3 -> Version 3.
::nfs_stat -4 -> Version 4.
-csb のどちらも指定されていない場合は、3つ全てが想定されます。
-arn のどちらも指定されていない場合は、3つ全てが想定されます。
-234 のどちらも指定されていない場合は、3つ全てが想定されます。
-b は、-234 のフラグとは独立して動作します。

次の一般的な(非NFS固有の)形式がサポートされています。
<kstat addr>::nfs_stat $[count] -> kstat_named 配列の`count ' 要素内のステータスを表示します。
> ::nfs_stat -b
CALLBACK STATISTICS:
delegations     cb_getattr      cb_recall       cb_null
0               0               0               0
cb_dispatch     delegaccept_r   delegaccept_rw  delegreturn
0               0               0               0
callbacks       claim_cur       claim_cur_ok    recall_trunc
0               0               0               0
recall_failed   return_limit_wr return_limit_ad deleg_recover
0               0               0               0
cb_illegal
0
> ::nfs_stat -a4
CALLBACK STATISTICS:
delegations     cb_getattr      cb_recall       cb_null
0               0               0               0
cb_dispatch     delegaccept_r   delegaccept_rw  delegreturn
0               0               0               0
callbacks       claim_cur       claim_cur_ok    recall_trunc
0               0               0               0
recall_failed   return_limit_wr return_limit_ad deleg_recover
0               0               0               0
cb_illegal
0

SERVER STATISTICS:
ACL Statistics:
Version 4:
(0 calls)
null            getacl          setacl
0 0%            0 0%            0 0%

CLIENT STATISTICS:
ACL Statistics:
Version 4:
(0 calls)
null            getacl          setacl
0 0%            0 0%            0 0%

::nfs_vfs [-v]
全ての nfs vfs 構造体を表示します。
> ::nfs_vfs
vfs_t->300000a5840     , data = 30003cca6c0     , ops = 1872f78
     mount point: /vol
     mount from : b100-2:vold(pid750)
> ::nfs_vfs -v
vfs_t->300000a5840     , data = 30003cca6c0     , ops = 1872f78
     mount point: /vol
     mount from : b100-2:vold(pid750)
      vfs_flags:
     mount-time: 2012 May 16 09:01:56
     mount opts: remount, ro, rw, suid, nosuid, devices, nodevices, setuid, nosetuid, nbmand, nonbmand, exec, noexec, ignore, noquota
NFS Version=2
   mi_flags: MI_HARD,MI_INT,MI_NOAC,MI_DYNAMIC
mi_zone=18bd768
mi_curread=8192, mi_curwrite=512, mi_retrans=5, mi_timeo=350
mi_acregmin=3000000000, mi_acregmax=60000000000, mi_acdirmin=30000000000, mi_acdirmax=60000000000
Server list: 300045b9968
     b100-2.vold

Current Server: 300045b9968      b100-2.vold

Total: Server Non-responses = 0 Server Failovers = 0
IO statistics for this mount
        No. of bytes read               0
        No. of read operations          0
        No. of bytes written            0
        No. of write operations         0
Async Request queue: max_threads = 8 active_threads = 0
     number requests queued:
     READ_AHEAD = 0    PUTPAGE = 0     PAGEIO = 0    READDIR = 0     COMMIT = 0   INACTIVE = 0


walker

nfs_expinfo
exportinfo table を調査して、exportinfo 構造体のセットに対して反復適用します。
> ::walk nfs_expinfo |::print exportinfo_t exi_export.ex_path
exi_export.ex_path = 0x300162dea98 "/ (pseudo)"
exi_export.ex_path = 0x3001745d6d0 "/install"

nfs_expinfo_path
exportinfo path hash table を調査して、exportdata 構造体のセットに対して反復適用します。
> ::walk nfs_expinfo_path |::print exportdata_t
{
    ex_version = 0x2
    ex_path = 0x3001745d6d0 "/install"
    ex_pathlen = 0x9
    ex_flags = 0x4000
    ex_anon = 0
    ex_seccnt = 0x1
    ex_secinfo = 0x3000820b8c0
    ex_index = 0
    ex_log_buffer = 0
    ex_log_bufferlen = 0
    ex_tag = 0
    ex_taglen = 0
}
{
    ex_version = 0
    ex_path = 0x300162dea98 "/ (pseudo)"
    ex_pathlen = 0xa
    ex_flags = 0x4080
    ex_anon = 0
    ex_seccnt = 0x1
    ex_secinfo = 0x30015b12a80
    ex_index = 0
    ex_log_buffer = 0
    ex_log_bufferlen = 0
    ex_tag = 0
    ex_taglen = 0
}

nfs_expvis
exp_visible 構造体のセットに対して反復適用します。
> 60017e6ddc0::walk nfs_expvis |::print exp_visible_t vis_next
vis_next = 0x60017db9b80
vis_next = 0x60017f6ef40
vis_next = 0x60017f6ebc0
vis_next = 0x60018458f00
vis_next = 0x6001859e140
vis_next = 0x60017f6ec40
vis_next = 0x60018459380
vis_next = 0x60017db9a80
vis_next = 0x60018545880
vis_next = 0x60017f6eb40
vis_next = 0

nfs_mnt
NFS-mounted vfs 構造体を調べて(vfs_data)、mntinfo 構造体のセットに対して反復適用します。
> ::walk nfs_mnt |::print mntinfo_t
{
    mi_lock = {
        _opaque = [ 0 ]
    }
    mi_servers = 0x600167b5058
    mi_curr_serv = 0x600167b5058
    mi_failover_cv = {
        _opaque = 0
    }
    mi_readers = 0
    mi_vfsp = 0x60013263e00
    mi_type = 2 (VDIR)
    mi_flags = 0x55
    mi_tsize = 0x2000
    mi_stsize = 0x200
    mi_timeo = 0x15e
    mi_retrans = 0x5
    :
    :

nfs_mnt
全ての NFS-mounted vfs 構造体のセットに対して反復適用します。
> ::walk nfs_vfs |::print vfs_t
{
    vfs_next = 0x600127cea80
    vfs_prev = 0x60013942100
    vfs_op = vfssw+0x3b8
    vfs_vnodecovered = 0x60015e4d640
    vfs_flag = 0x2000
    vfs_bsize = 0x2000
    vfs_fstype = 0x7
    vfs_fsid = {
        val = [ 0x5ec0001, 0x7 ]
    }
    vfs_data = 0x60017a36680
    vfs_dev = 0x17b00000001
    vfs_bcount = 0
    vfs_list = zfs_ace_fuid_get_mask
    vfs_hash = 0
    vfs_reflock = {
        _opaque = [ 0, zfs_ace_fuid_set_flags ]
    }
    vfs_count = 0x10
    vfs_mntopts = {
        mo_count = 0x11
        mo_list = 0x60015db64c0
    }
    vfs_resource = 0x60017b245e0
    vfs_mntpt = 0x60017abefb0
    vfs_mtime = 2012 May  7 08:20:23
    vfs_implp = 0x60017a9c040
    vfs_zone = zone0
    vfs_zone_next = 0x600127cea80
    vfs_zone_prev = 0x60013942100
}

nfs_mnt
全ての NFS-mounted vfs 構造体のセットに対して反復適用します。
> ::walk nfs_vfs |::print vfs_t
{
    vfs_next = 0x600127cea80
    vfs_prev = 0x60013942100
    vfs_op = vfssw+0x3b8
    vfs_vnodecovered = 0x60015e4d640
    vfs_flag = 0x2000
    vfs_bsize = 0x2000
    vfs_fstype = 0x7
    vfs_fsid = {
        val = [ 0x5ec0001, 0x7 ]
    }
    vfs_data = 0x60017a36680
    vfs_dev = 0x17b00000001
    vfs_bcount = 0
    vfs_list = zfs_ace_fuid_get_mask
    vfs_hash = 0
    vfs_reflock = {
        _opaque = [ 0, zfs_ace_fuid_set_flags ]
    }
    vfs_count = 0x10
    vfs_mntopts = {
        mo_count = 0x11
        mo_list = 0x60015db64c0
    }
    vfs_resource = 0x60017b245e0
    vfs_mntpt = 0x60017abefb0
    vfs_mtime = 2012 May  7 08:20:23
    vfs_implp = 0x60017a9c040
    vfs_zone = zone0
    vfs_zone_next = 0x600127cea80
    vfs_zone_prev = 0x60013942100
}
Read more ...

mdb写経/カーネル実行時リンカー

2012/09/21

dcmds

::ctfinfo
モジュールの CTF(Compact ANSI-C Type Format) に関する情報を表示します。
> ::ctfinfo
MODULE                                  CTFDATA CTFSIZE
unix                           ffffff00c7bd5000 87877
genunix                        ffffff00c8398000 430688
specfs                         ffffff00c7bea920 538
fifofs                         ffffff00c7bea748 470
dtrace                         ffffff00cf7b3000 4271
devfs                          ffffff00c7beab3c 493
dev                            ffffff00c8401260 3319
dls                            ffffff00c8957000 31605
mac                            ffffff00c84ce000 50572
procfs                         ffffff00c865c000 4383

    :
    :

::modctl
指定された modctl、またはカーネルのアクティブな modctl 構造体のテーブルを表示します。
> ::modctl
          MODCTL           MODULE   BITS FLAGS REF FILE
         183a578          1861960    pli 0x01   0 /platform/sun4u/kernel/sparcv9/unix
         18660e8          1866190    pli 0x01   0 genunix
         18bb9b8          18bba68    pli 0x01   0 misc/platmod
         18bc0d8          18bc190    pli 0x01   0 cpu/SUNW,UltraSPARC-IIe
     300000afea8                0        0x00   0 misc/cl_bootstrap
     300000afe08      300000b7e40     li 0x00   3 fs/specfs
     300000afcc8      300000b7cc0     li 0x00   2 fs/fifofs
     300000afc28      30002e24dc0     li 0x00   1 drv/dtrace
     300000afd68      300000b7b40     li 0x00   0 fs/devfs
     300000afb88                0        0x00   0 misc/swapgeneric
     300000afae8                0        0x00   0 sys/lbl_edition
     300000afa48      300000b7840     li 0x00   1 sched/TS
     300000af9a8      300000b76c0     li 0x00   0 sched/TS_DPTBL
     300000af908      300000b7540     li 0x00   1 fs/ufs
     300000af868      300000b73c0     li 0x00   1 misc/fssnap_if
     300000af728      300000b7240     li 0x00   0 drv/rootnex
     300000af688      300000b70c0     li 0x00   0 drv/options
     300000af5e8      300000b6f40     li 0x00   0 drv/sad
     300000af548      300000b6dc0     li 0x00   0 drv/pseudo
     300000af4a8      300000b6c40     li 0x00   0 drv/clone
     300000af408      300000b6ac0     li 0x00   0 drv/scsi_vhci
     300000af368      300000b6940     li 0x00   5 misc/scsi
    :
    :
address ::modent
mod_hash_t 構造体の mod_hash_entry についての情報を表示します。
> 3000a056a00::print -a mod_hash_t
3000a056a00 {
    3000a056a00 mh_contents = {
        3000a056a00 _opaque = [ 0 ]
    }
    3000a056a08 mh_name = 0x300143f3378 "dls_link_t_30014455d98_hash"
    3000a056a10 mh_sleep = 0
    3000a056a18 mh_nchains = 0x43
    3000a056a20 mh_kdtor = mod_hash_null_keydtor
    3000a056a28 mh_vdtor = mod_hash_null_valdtor
    3000a056a30 mh_keycmp = mod_hash_idkey_cmp
    3000a056a38 mh_hashalg = mod_hash_byid
    3000a056a40 mh_hashalg_data = 0x47
    3000a056a48 mh_next = 0x3000bd68198
    3000a056a50 mh_stat = {
        3000a056a50 mhs_hit = 0xa89a
        3000a056a58 mhs_miss = 0xc
        3000a056a60 mhs_coll = 0
        3000a056a68 mhs_nelems = 0x4
        3000a056a70 mhs_nomem = 0
    }
    3000a056a78 mh_entries = [ 0x300024e65d8 ]
}
> 0x300024e65d8::modent
            ADDR              VAL              KEY
     300024e65d8      3000c481540          86dd000

[ address ] ::modhash [-ceht] [-k key] [-v val] [-i index]
mod_hash_t データベースの情報を表示します。アドレスが提供されていない場合、システム内のすべての登録されたハッシュの要約が表示されます。アドレスを指定した場合、詳細な情報を表示します。
-t ハッシュタイプを表示します
-e ハッシュのエレメントを表示します
-k key,
-v value,
-i index
指定した条件のエレメントのみを表示します
-h アドレスの代わりにハッシュインデックスを表示します
> ::modhash
            ADDR CHAINS ELEMS MAXLEN MAXIDX NAME
ffffff00e29a3580     1f     0      0      0 bpf_dev_tab
ffffff00d12fd900     43     0      0      0 iptun_hash
ffffff00dc93dc00     40     0      0      0 aggr_grp_hash
ffffff00dc93f640     40     0      0      0 vnic_hash
ffffff00cc3f44c0     43     3      1      0 dls_link_t_ffffff00ce079e68_hash
ffffff00cf2806c0     40     1      1      a softmac_hash
ffffff00cecbc580    137     2      1     b0 sticlts_sockaddr_hash
ffffff00cecba580    136     2      1     42 sticlts_ai_hash
ffffff00cecb8580    137     8      2     e8 sticots_sockaddr_hash
ffffff00cecb6580    136    14      1      6 sticots_ai_hash
ffffff00cecb4580    137     3      1     53 ticlts_addr_hash
ffffff00cecb2580    136     4      1     2c ticlts_ai_hash
ffffff00cecb0580    137     5      1     30 ticotsord_addr_hash
ffffff00cecae580    136     6      1     34 ticotsord_ai_hash
ffffff00cecac580    137     2      1     53 ticots_addr_hash
ffffff00cecaa580    136     3      1     3a ticots_ai_hash
ffffff00c77f6d00     65     0      0      0 gcgrp6_hash
ffffff00c77f7680     65     0      0      0 gcgrp4_hash
ffffff00c77fe040     65     0      0      0 gcdb_hash
ffffff00ca53d440     40     0      0      0 ipmp_grp_hash
ffffff00cafb6740     20     0      0      0 dld_autopush_hash
    :
    :
> ffffff00dc93f640::modhash
mod_hash_t ffffff00dc93f640 vnic_hash:
        Key comparator: fffffffffbb83e2c mod_hash_idkey_cmp
        Type: id
        Sleep flag = false, alloc failed = 0
        Number of chains = 0x40, elements = 0
        Hits = 0, misses = 0, dups = 0
        Maximum chain length = 0 (at index 0, first entry 0)
> 3000a056a00::modhash -e
            ADDR              VAL              KEY
     300024e65d8      3000c481540          86dd000
     30014445f38      3000c480708           806000
     300024e6d10      3000ae5b630           800000
     30014445800      30016a075e0          8035000

address ::modhdrs
指定された modctl 構造体のアドレスを使用して、モジュールの ELF 実行可能ヘッダーとセクションヘッダーを出力します。
> fffffffffbc43c30::modhdrs

ELF Header
  ei_magic:  { 0x7f, E, L, F }
  ei_class:  2                       ei_data: 1
  e_machine: 62                    e_version: 1
  e_type:    2
  e_flags:   0
  e_entry:   0x          c00000  e_ehsize:          64  e_shstrndx: 19
  e_shoff:   0x          201c78  e_shentsize:       64  e_shnum:    2
  e_phoff:   0x              40  e_phentsize:       56  e_phnum:    7

Section Header[0]:
    sh_addr:      0xffffff00c5afb080  sh_flags:   [ 0 ]
    sh_size:      0x2e3b0             sh_type:    [ SHT_SYMTAB ]
    sh_offset:    0x0                 sh_entsize: 0x18
    sh_link:      0x1                 sh_info:    0xc5a
    sh_addralign: 0x8

Section Header[1]:
    sh_addr:      0xffffff00c5b2e13e  sh_flags:   [ 0 ]
    sh_size:      0x1dbc0             sh_type:    [ SHT_STRTAB ]
    sh_offset:    0x0                 sh_entsize: 0x0
    sh_link:      0x0                 sh_info:    0x0
    sh_addralign: 0x1

::modinfo
アクティブカーネルモジュールに関する情報を出力します。/usr/sbin/modinfo コマンドの出力に似ています。
> ::modinfo
ID         LOADADDR     SIZE REV MODULE NAME
  0 fffffffffb800000   1ff8ae   0 unix (?)
  1 fffffffffb95d068   2df7e0   0 genunix (?)
  2                0        0   0 cl_bootstrap (?)
  3 fffffffffbbe4000     6008   1 specfs (filesystem for specfs)
  4 fffffffffbbe9f68     44a0   1 fifofs (filesystem for fifo)
  5 fffffffff7fc3000    1afa8   1 dtrace (Dynamic Tracing)
  6 fffffffffbbee350     5ae8   1 devfs (devices filesystem)
  7 fffffffff77fb000    133b8   1 dev (/dev filesystem)
  8 fffffffffbbf3bf0     6a18   1 dls (Data-Link Services)
  9 fffffffff780e000    30680   1 mac (MAC Services)
 10 fffffffff783e000    206e8   1 procfs (filesystem for proc)
    :
    :


walker

modctl
カーネルのアクティブな modctl 構造体のリストを調べます。
> ::walk modctl |::print modctl_t mod_modname
mod_modname = 0x1931df7 "unix"
mod_modname = 0x1936e68 "genunix"
mod_modname = 0x198d2cd "platmod"
mod_modname = 0x198d87c "SUNW,UltraSPARC-T1"
mod_modname = 0x300024f3380 "cl_bootstrap"
mod_modname = 0x30002504340 "specfs"
mod_modname = 0x300025042c8 "fifofs"
mod_modname = 0x300025042c0 "dtrace"
mod_modname = 0x300025042d0 "devfs"
mod_modname = 0x300025042a8 "procfs"
    :
    :
modent
mod_hash 構造体のエントリーのリストを調べます。
> 3000a056a00::print mod_hash_t mh_entries
mh_entries = [ 0x300024e65d8 ]
> 3000a056a00::walk modent |::print struct mod_hash_entry
{
    mhe_key = 0x86dd000
    mhe_val = 0x3000c481540
    mhe_next = 0
}
{
    mhe_key = 0x806000
    mhe_val = 0x3000c480708
    mhe_next = 0
}
{
    mhe_key = 0x800000
    mhe_val = 0x3000ae5b630
    mhe_next = 0
}
{
    mhe_key = 0x8035000
    mhe_val = 0x30016a075e0
    mhe_next = 0
}

modhash
mod_hash 構造体のリストを調べます。
> ::walk modhash |::print mod_hash_t mh_name
mh_name = 0x300036ec738 "vmusage anon hash"
mh_name = 0x300042707f8 "vmusage amp hash"
mh_name = 0x30004312e10 "vmusage vnode hash"
mh_name = 0x300035e5ec0 "vmusage anon hash"
mh_name = 0x30004312e28 "vmusage amp hash"
mh_name = 0x3000432aab0 "vmusage vnode hash"
mh_name = 0x300037f6228 "vmusage anon hash"
mh_name = 0x30002e3a198 "vmusage amp hash"
mh_name = 0x30002e3a168 "vmusage vnode hash"
mh_name = 0x30002e3a3a8 "vmusage project hash"
mh_name = 0x30002061b18 "sticlts_sockaddr_hash"
mh_name = 0x30001a6b3f0 "sticlts_ai_hash"
mh_name = 0x30002061b30 "sticots_sockaddr_hash"
mh_name = 0x30001a6b400 "sticots_ai_hash"
    :
    :

mod_hash_entries
mod_hash_entries キャッシュの mod_hash_entry 構造体を調べます。
> ::walk mod_hash_entries |::print struct mod_hash_entry
{
    mhe_key = 0x4a
    mhe_val = 0x300062b7688
    mhe_next = 0
}
{
    mhe_key = 0x42
    mhe_val = 0x300062b6c88
    mhe_next = 0
}
{
    mhe_key = 0x3d
    mhe_val = 0x300062b6788
    mhe_next = 0
}
    :
    :
Read more ...

mdb写経/デバイスドライバと DDI フレームワーク

2012/09/20

dcmds

address ::binding_hash_entry
指定されたカーネル名とメジャー番号のバインディングハッシュテーブルエントリ (構造体 bind) のアドレスを使用して、ノードバインディング名、メジャー番号、および次の要素へのポインタを表示します。

[ address ] ::dev2major <dev_t>
dev_t をメジャー番号に変換します。
> 4500000006::dev2major
0x45 (0t69)

[ address ] ::dev2minor <dev_t>
dev_t をメジャー番号に変換します。
> 4500000006::dev2minor
0x6 (0t6)

address ::dev2snode
dev_t を snode に変換します。
> e400000000::dev2snode
3000bd6d738
3000bd6d6a0
> 3000bd6d738::print struct snode s_vnode |::vnode2path
/devices/pseudo/zfs@0:zfs

[ address ] ::devbindings [-qs] [device-name | major-num]
名前を指定されたドライバについてすべてのインスタンスのリストを表示します。インスタンスごとに 1 つのエントリの出力、つまり、先頭から、構造体 dev_info へのポインタ ($<devinfo または ::devinfo で表示可能)、ドライバ名、インスタンス番号、そのインスタンスに関連するドライバとシステムのプロパティーが表示されます。
-q デバイスノードのクイックサマリだけが表示されます
-s dev_info 構造体の要約を表示します
 > ::devbindings zfs
3000628e058      zfs, instance #0 (driver name: zfs)
        Driver properties at 3000ae5a140:
            name='Nblocks' type=int64 items=1 dev=(228,2)
                value=0000000000200000
            name='Size' type=int64 items=1 dev=(228,2)
                value=0000000040000000
            name='name' type=string items=1 dev=(228,2)
                value='rpool/swap'
            name='Nblocks' type=int64 items=1 dev=(228,1)
                value=0000000000200000
            name='Size' type=int64 items=1 dev=(228,1)
                value=0000000040000000
            name='name' type=string items=1 dev=(228,1)
                value='rpool/dump'
> ::devbindings -s zfs
DEVINFO            MAJ           REFCNT NODENAME             NODESTATE
                  INST         CIRCULAR BINDNAME             STATE
                                 THREAD                      FLAGS          
000003000628e058   228                8 zfs@0                DS_READY
                     0                0 zfs                  <S_EVADD,S_NEED_RESET>
                                      0                      <>
> ::devbindings -q vdc
30002bff0c8      SUNW,sun4v-disk, instance #0 (driver name: vdc)
30002bfee00      SUNW,sun4v-disk, instance #1 (driver name: vdc)
30002bfeb38      SUNW,sun4v-disk, instance #2 (driver name: vdc)

address ::devinfo [-qs]
devinfo ノードに関連するシステムプロパティーおよびドライバプロパティーを出力します。
-q デバイスノードのクイックサマリだけが表示されます。
-s dev_info 構造体の要約を表示します
> ffffff00c96b8060::devinfo
ffffff00c96b8060 sd, instance #0 (driver name: sd)
        System properties at ffffff00cea84bd0:
            name='lun' type=int items=1
                value=00000000
            name='target' type=int items=1
                value=00000000
            name='class' type=string items=1
                value='scsi'
        Driver properties at ffffff00ce9d10b0:
            name='pm-components' type=string items=3
                value='NAME=spindle-motor' + '0=off' + '1=on'
            name='pm-hardware-state' type=string items=1
                value='needs-suspend-resume'
            name='ddi-failfast-supported' type=any items=0
            name='ddi-kernel-ioctl' type=any items=0
            name='fm-ereport-capable' type=any items=0
            name='removable-media' type=any items=0
        Hardware properties at ffffff00cea84f68:
            name='inquiry-revision-id' type=string items=1
                value='0.15'
            name='inquiry-product-id' type=string items=1
                value='QEMU DVD-ROM'
            name='inquiry-vendor-id' type=string items=1
                value='QEMU'
            name='inquiry-device-type' type=int items=1
                value=00000005
            name='variant' type=string items=1
                value='atapi'
        Global properties at ffffff00c620f088:
            name='ddi-devid-registrant' type=int items=1
                value=00000001

address ::devinfo2driver
devinfo ノードに関連するドライバ(もしあれば)の名前を出力します。
> ffffff00c96b8060::devinfo2driver
Driver 'sd' is associated with devinfo ffffff00c96b8060.

[ address ] ::devnames [-vm] [num]
カーネルの devnames テーブルと dn_head ポインタを表示します。このポインタは、ドライバインスタンスリストを指しています。
-v devnames テーブルの各エントリに格納されている追加情報が表示されます。
> ::devnames -v
NAME
cn
            flags DN_CONF_PARSED,DN_LEAF_DRIVER
               pl ffffff00c6022308
             head ffffff00c6314970
         instance 0
           inlist 0
  global_prop_ptr 0
zcons
            flags
               pl 0
             head 0
         instance 0
           inlist 0
  global_prop_ptr 0
glm
            flags DN_CONF_PARSED
               pl 0
             head 0
         instance 0
           inlist 0
  global_prop_ptr ffffff00c62179b8
  properties at ffffff00c6215a68:
      name='tape' type=string items=1
          value='sctp'
      name='scsi-initiator-id' type=int items=1
          value=00000007
      name='queue' type=string items=1
          value='qsort'
      name='flow_control' type=string items=1
          value='dsngl'

[ address ] ::devt <dev_t>
dev_t のメジャー番号とマイナー番号を表示します。
> 4500000006::devt
     MAJOR       MINOR
        69           6

[ address ] ::ldi_handle [-i]
ldi(layered driver identifier) ハンドルを表示します。アドレスを指定しない場合は、すべての ldi_handle_t 構造体を表示します。-i オプションを指定した場合、モジュール識別子の情報を表示します。
> ::ldi_handle
HANDLE           REFS            VNODE        DRV MINOR           EVENTS            IDENT
000003000709a498    1 00000300088c8000     consms     0                - 00000300062b8068
00000300143b2b28    1 000003000abce180       vnet  1003                - 000003000bd83730
000003000709a3f0    1 00000300088c8300    conskbd     1                - 0000030008d19458
000003000709a4d0    1 00000300088c8300    conskbd     1                - 00000300062b8068
000003000bca5148    1 000003000c734800        ip6 262199                - 00000300080ec280
000003000bca5228    1 000003000c734a00         ip 262200                - 00000300080ec280
000003000bc9c888    1 000003000822b040        ip6 262196                - 00000300080ec280
0000030015847d50    1 00000300169d7300        ip6 262182                - 00000300080ec280
000003000bd88af0    1 000003000c435480        ip6 262193                - 00000300080ec280
000003000bc9b538    1 000003000c41d400        zfs     0                - 00000300062b8068
0000030014f06038    1 00000300169d7500         ip 262183                - 00000300080ec280
0000030014f060a8    1 000003001446b600         ip 262207                - 00000300080ec280
00000300143b2a10    1 000003000c41da00       vnet  1004                - 000003000ad87d18
00000300082eb768    1 0000030007095c40        vdc     0                - 00000300062b8a68
0000030008d641c0    1 00000300165fde40        ip6 262192                - 00000300080ec280
00000300143b2b60    1 000003000aadde00       vnet  1002                - 000003000bd83730
> 00000300143b2b28::ldi_handle -i
HANDLE                      VNODE        DRV MINOR           EVENTS            IDENT              DIP MINOR MODID MODULE NAME
00000300143b2b28 000003000abce180       vnet  1003                - 000003000bd83730                -     -    78 udp

::ldi_ident
ldi(layered driver identifier) 識別子を表示します。
> ::ldi_ident
IDENT            REFS              DIP MINOR MODID MODULE NAME
00000300062b8068    6                -     -     1 genunix
00000300080ec280   13                -     -    72 ip
000003000aa57ea0    1 0000030002bfa878     -   181 iscsi
000003000ad861e8    1 000003000628b6a0     -   169 bmc
000003000bd83730    2                -     -    78 udp
0000030008d194a8    1                -     1    86 conskbd
00000300062b8a68    2                -     -    14 zfs
000003000ad87d18    1                -     -    79 udp6
000003001c63c0a0    1                -     -   211 iptun
00000300062b8a18    1                -     -    20 rpcmod
0000030008d19458    1                -     -    89 wc
000003001c6a3a50    1                -     -   218 sol_ucma
0000030008d19548    1                -     -    90 tem
000003000a032d98    1                -     -   157 rds

[ major-num ] ::major2name [major-num]
指定されたメジャー番号に該当するドライバ名を表示します。メジャー番号は、dcmd の前に式の形で、またはコマンド行引数として指定できます。
> 0x1c::major2name
sd

major-num ::major2snode
指定されたメジャー番号に関連する snode を表示します。
> 0xe4::major2snode  |::print struct snode s_vnode |::vnode2path
/devices/pseudo/zfs@0:zfs

address ::minornodes
指定された devinfo ノードの minor node を表示します。
> ::devbindings -q vdc
30002bff0c8      SUNW,sun4v-disk, instance #0 (driver name: vdc)
30002bfee00      SUNW,sun4v-disk, instance #1 (driver name: vdc)
30002bfeb38      SUNW,sun4v-disk, instance #2 (driver name: vdc)
> 30002bff0c8::minornodes
            ADDR              DEV SPEC TYPE        NAME       NODETYPE       
     300073c7a68       4500000000 b    DDI_MINOR   a          ddi_block
     300073c7a18       4500000000 c    DDI_MINOR   a,raw      ddi_block
     300073c79c8       4500000001 b    DDI_MINOR   b          ddi_block
     300073c7978       4500000001 c    DDI_MINOR   b,raw      ddi_block
     300073c7928       4500000002 b    DDI_MINOR   c          ddi_block
     300073c78d8       4500000002 c    DDI_MINOR   c,raw      ddi_block
     300073c7888       4500000003 b    DDI_MINOR   d          ddi_block
     300073c7838       4500000003 c    DDI_MINOR   d,raw      ddi_block
     300073c77e8       4500000004 b    DDI_MINOR   e          ddi_block
     300073c7798       4500000004 c    DDI_MINOR   e,raw      ddi_block
     300073c7748       4500000005 b    DDI_MINOR   f          ddi_block
     300073c76f8       4500000005 c    DDI_MINOR   f,raw      ddi_block
     300073c76a8       4500000006 b    DDI_MINOR   g          ddi_block
     300073c7658       4500000006 c    DDI_MINOR   g,raw      ddi_block
     300073c7608       4500000007 b    DDI_MINOR   h          ddi_block
     300073c75b8       4500000007 c    DDI_MINOR   h,raw      ddi_block

[ address ] ::msgbuf [-v]
直近の console messages を表示します。
> ::msgbuf
MESSAGE                                                                
        UltraDMA mode 5 selected
Disk0:  <Vendor 'Gen-ATA ' Product 'QEMU HARDDISK   '>
cmdk0 at ata0 target 0 lun 0
cmdk0 is /pci@0,0/pci-ide@1,1/ide@0/cmdk@0,0
imported version 0 pool rpool using 33
root on rpool/ROOT/solaris fstype zfs
acpinex0 at root
acpinex: sb@0, acpinex1
pseudo-device: dld0
dld0 is /pseudo/dld@0
pcplusmp: i8042 (i8042) instance 0 irq 0x1 vector 0x41 ioapic 0x4 intin 0x1 is bound to cpu 3
pcplusmp: i8042 (i8042) instance 0 irq 0xc vector 0x42 ioapic 0x4 intin 0xc is bound to cpu 0
gfxp_fb: 1024x768 - 16 bit framebuffer mapped at ffffff00c93b1000
gfxp_fb: shadow framebuffer mapped at ffffff00cb6b1000
gfxp_fb: using 12x22 fonts
pcplusmp: pciclass,0c0300 (uhci) instance 0 irq 0x7 vector 0x81 ioapic 0x4 intin 0xb is bound to cpu 1
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received, this USB UHCI host controller is unusable
8042 device:  keyboard@0, kb8042 # 0
kb80420 is /pci@0,0/isa@1/i8042@1,60/keyboard@0
8042 device:  mouse@1, mouse8042 # 0
    :
    :

[ address ] ::modctl2devinfo
指定された modctl アドレスに対応するすべてのデバイスノードを出力します。
> ffffff00c6254510::modctl2devinfo
ffffff00c630f300
> ffffff00c630f300::devinfo -q
ffffff00c630f300 clone, instance #0 (driver name: clone)

::name2major driver-name
指定されたデバイスドライバ名を使用して、そのメジャー番号を表示します。
> ::name2major sd
0x1c

[ devinfo ] ::prtconf [-cpv]
devinfo で指定されたデバイスノードからカーネルデバイスツリーを表示します。devinfo を指定しないと、デフォルトでルートからデバイスツリーが表示されます。
-c 指定されたデバイスノードの子だけが表示されます。
-p 指定されたデバイスノードの祖先だけが表示されます。
-v 各ノードに関連するプロパティーが表示されます。
> ffffff00c6314970::prtconf
DEVINFO          NAME
ffffff00c50d1c28 i86pc (driver name: rootnex)
    ffffff00c50c6018 pseudo, instance #0 (driver name: pseudo)
        ffffff00c6314970 cn, instance #0 (driver name: cn)

[ address ] ::softstate [ instance-number ]
指定された softstate 状態ポインタ (ddi_soft_state_init(9F) のマニュアルページを参照) とデバイスインスタンス番号を使用して、そのインスタンスのソフトの状態を表示します。

walker

binding_hash
指定されたカーネルバインディングハッシュテーブルエントリの配列 (構造体 bind **) のアドレスを使用して、ハッシュテーブル内のすべてのエントリを調べて、各構造体 bind のアドレスを戻します。

dev_info_node_cache
dev_info_node_cache について反復適用します。
> ::walk dev_info_node_cache |::print struct dev_info devi_node_name
devi_node_name = 0x3000a444480 "sppp"
devi_node_name = 0x3000a444490 "bpf"
devi_node_name = 0x3000a4444a0 "fssnap"
devi_node_name = 0x3000a4444b0 "pm"
devi_node_name = 0x3000a4444c0 "pool"
devi_node_name = 0x300062a5b50 "ntwdt"
devi_node_name = 0x300062a5b60 "mdesc"
devi_node_name = 0x300062a5b70 "bmc"
    :
    :

devinfo
最初に、指定された dev_info 構造体の親に対して反復適用し、それらを最下位から世代順に戻します。次に、指定された devinfo 自身を戻します。その次に、指定された dev_info 構造体の子に対して、世代順に最上位から最下位まで反復適用します。
> ::walk devinfo |::print struct dev_info devi_node_name
devi_node_name = 0x30002508fe0 "SUNW,Sun-Fire-T200"
devi_node_name = 0x30005c9f880 "scsi_vhci"
devi_node_name = 0x300024f23a0 "packages"
devi_node_name = 0x30002508f80 "SUNW,builtin-drivers"
devi_node_name = 0x300024f2360 "deblocker"
devi_node_name = 0x300024f2350 "disk-label"
devi_node_name = 0x30002508f20 "terminal-emulator"
    :
    :

devinfo_children
最初に、指定された dev_info 構造体を戻し、次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。
> 30002bfa020::walk devinfo_children |::devinfo -q
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devinfo_parents
指定された dev_info 構造体の親に対して、世代順に最上位から最下位まで反復適用し、次に、指定された devinfo を戻します。
> 30002bfa020::walk devinfo_parents |::devinfo -q
30002c03bd8      SUNW,Sun-Fire-T200 (driver name: rootnex)
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devi_next
指定された dev_info 構造体の兄弟に対して反復適用します。
> 30002bfa020::walk devi_next |::devinfo -q
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devnames
devnames 配列のエントリに対して反復適用します。
> ::walk devnames |::print struct devnames dn_name
dn_name = 0x300025054c0 "cn"
dn_name = 0x30002505100 "pcata"
dn_name = 0x30002505518 "fm"
dn_name = 0x30002505520 "ib"
dn_name = 0x30002504fc8 "srn"
dn_name = 0x300025053e8 "dcpc"
dn_name = 0x300025055e0 "dtrace"
dn_name = 0x30002519c28 "fasttrap"
dn_name = 0x30002504f90 "fbt"
    :
    :

softstate
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体への NULL 以外のポインタをすべて表示します。

softstate_all
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体へのポインタをすべて表示します。未使用のインスタンスのポインタが NULL になることに注意してください。
Read more ...