この章では、Solaris カーネルをデバッグするために提供されているデバッガモジュール、dcmd、および walker について説明します。各カーネルデバッガモジュールは、対応する Solaris カーネルモジュールの後に指定されます。したがって、MDB によって自動的に読み込まれます。ここで説明する機能は、Solaris カーネルの現在の実装を反映したものであり、将来変更される場合があります。したがって、これらのコマンドの出力に依存するシェルスクリプトを作成することはお勧めできません。一般的に、この章で説明するカーネルデバッギング機能は、対応するカーネルサブシステム実装のコンテキストだけで意味を持ちます。Solaris カーネルの実装の詳細を説明したリファレンスのリストについては、関連マニュアルと論文を参照してください。
このマニュアルは、Solaris 9 オペレーティング環境での実装を説明しています。つまり、これらのモジュール、dcmd、および walker は、現在のカーネルの実装を反映しているので、過去または将来のリリースには、適切でない場合や適用できない場合もあります。これらはどんな種類の継続的な公開インタフェースを定義するものでもありません。モジュール、dcmd、walker、およびそれらの出力形式および引数に関して提供されている情報は、Solaris オペレーティング環境の将来のリリースでは変更される場合があります。
この節では、Solaris カーネルメモリーアロケータによって識別される問題のデバッグ、およびメモリーとメモリー使用率の検査に使用される dcmd と walker について説明します。ここで説明する dcmd と walker については、第 8 章「カーネルメモリーアロケータを使用するデバッギング」でさらに詳細に説明します。
指定されたカーネルスレッドのアドレスを使用して、そのスレッドが割り当てたメモリーのリストを新しい順に出力します。
指定された bufctl address についての bufctl 情報の要約を出力します。1 つまたは複数のオプションが指定されている場合は、オプション引数によって定義される条件に一致する bufctl 情報だけが出力されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-a オプションは、buctl の対応するバッファアドレスが指定されたアドレスと等しくなるように指定します。-c オプションは、指定された呼び出し元のプログラムカウント値が bufctl の保存されているスタックトレースの中に存在するように指定します。-e オプションは、bufctl の時刻表示が、指定された最も早い時刻表示よりも遅い時刻になるように指定します。-l オプションは、bufctl の時刻表示が、指定された最も遅い時刻表示よりも早い時刻になるように指定します。-t オプションは、bufctl のスレッドポインタが、指定されたスレッドアドレスと等しくなるように指定します。
::findleaks dcmd は、フルセットの kmem デバッギング機能が有効になっている場合に、カーネルクラッシュダンプ時に効率的にメモリーリークを検出します。::findleaks の最初の実行では、ダンプを処理してメモリーリークを探します。この処理には数分かかる場合があります。次に、割り当てスタックトレース別にリークがまとめられます。findleaks レポートには、識別されたメモリーリークごとに bufctl アドレスと先頭のスタックフレームが表示されます。
-v オプションが指定されている場合には、この dcmd は実行の際により詳細なメッセージを出力します。dcmd の前に明示的にアドレスが指定されている場合には、レポートがフィルタリングされ、割り当てスタックトレースに指定された関数アドレスが含まれているリークだけが表示されます。
指定されたカーネルスレッドのアドレスを使用して、そのスレッドが解放したメモリーのリストを新しい順に出力します。
カーネルアドレス空間の中で、指定されたポインタサイズ値を含んでいるポインタ整列アドレスを検索します。次に、一致する値を含んでいるアドレスのリストを出力します。MDB の組み込み検索演算子とは異なり、::kgrep はカーネルアドレス空間のすべてのセグメントを検索し、不連続セグメント境界にまたがって検索します。大きなカーネルでは、::kgrep は実行にかなりの時間がかかる場合があります。
カーネルメモリーアロケータトランザクションログ内のイベントを表示します。イベントは新しい順に (つまり、最新のイベントから) 表示されます。::kmalog は、イベントごとに、「T-」表示による最新のイベントを基準にした相対時間 (たとえば、T-0.000151879)、bufctl、バッファアドレス、kmem キャッシュ名、およびイベント発生時刻におけるスタックトレースを表示します。引数を指定しないと、::kmalog は kmem トランザクションログを表示しますが、このログは kmem_flags で KMF_AUDIT が設定されている場合にだけ存在します。::kmalog fail は、割り当て障害ログを表示します。このログは必ず存在します。これは、割り当て障害に正しく対処できないドライバのデバッグを行う場合に役立ちます。 ::kmalog slab は、スラブ作成ログを表示します。このログは必ず存在します。::kmalog slab は、メモリーリークの検索を行う場合に役立ちます。
カーネルメモリーアロケータキャッシュおよび仮想記憶領域のリストと該当する統計を表示します。
カーネルメモリーアロケータの現在のメモリーの割り当てが中程度あるいは多いユーザーに関する情報を出力します。この出力は、一意的なスタックトレースごとに 1 つのエントリで構成され、そのスタックトレースを使用して作成された合計メモリー量と割り当ての数が示されます。この dcmd を使用するには、kmem_flags で KMF_AUDIT フラグが設定されている必要があります。
1 つまたは複数のキャッシュ名 (たとえば、kmem_alloc_256) が指定されている場合、メモリー使用率の走査はそれらのキャッシュでだけ行われます。デフォルトでは、すべてのキャッシュが含まれます。-e オプションを指定すると、割り当て量の少ないユーザーが含まれます。割り当ての少ないユーザーとは、同じスタックトレースの合計メモリーが 1024 バイト未満または割り当て数 10 未満であるような割り当てのことです。-f オプションを指定すると、個々の割り当てのスタックトレースが出力されます。
指定されたアドレスに格納されている kmem_cache 構造体、またはアクティブ kmem_cache 構造体の完全なセットをフォーマットし、表示します。
kmem トランザクションログの完全なセットを新しい順にソートして表示します。この dcmd は、::kmalog より簡単な表形式で出力します。
指定されたアドレスに格納されている kmem_cache 構造体、またはアクティブ kmem_cache 構造体の完全なセットの完全性を検証します。明示的にキャッシュアドレスが指定されている場合、この dcmd はエラーに関するより冗長な情報を表示します。明示的に指定されていない場合は、要約レポートを表示します。::kmem_verify dcmd については、カーネルメモリーキャッシュで詳しく説明します。
指定されたアドレスに格納されている vmem 構造体、またはアクティブ vmem 構造体の完全なセットをフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。
指定されたアドレスに格納されている vmem_seg 構造体をフォーマットし、表示します。この構造体は、<sys/vmem_impl.h> で定義されます。
指定されたアドレスに関する情報をレポートします。特に、::whatis は、そのアドレスが kmem によって管理されているバッファへのポインタまたはスレッドスタックのような別のタイプの特殊メモリー領域へのポインタかどうかを判断し、検出結果をレポートします。-a オプションを指定すると、dcmd は照会に最初に一致するものだけでなく、すべての一致をレポートします。-b オプションを指定すると、dcmd はそのアドレスが既知の kmem bufctl によって参照されているかどうかも判断します。-v オプションを指定すると、この dcmd は、種々のカーネルデータ構造体を検索する際に進行状況をレポートします。
指定された kthread_t 構造体のアドレスを開始点として使用して、当該カーネルスレッドによって行われたメモリー割り当てに対応する bufctl 構造体のセットに対して反復適用します。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられた bufctl のセットに対して反復適用します。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空き bufctl のセットに対して反復適用します。
指定された kthread_t 構造体のアドレスを開始点として使用して、このカーネルスレッドによって行われたメモリー割り当て解除に対応する bufctl 構造体のセットに対して反復適用します。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する空きバッファのセットに対して反復適用します。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する割り当てられたバッファのセットに対して反復適用します。
アクティブな kmem_cache_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、このキャッシュに関連する CPU ごとの kmem_cpu_cache_t 構造体に対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。
指定された kmem_cache_t 構造体のアドレスを開始点として使用して、関連する kmem_slab_t 構造体のセットに対して反復適用します。この構造体は、<sys/kmem_impl.h> で定義されます。
kmem アロケータトランザクションログに格納されている bufctl のセットに対して反復適用します。
指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファに対応する bufctl 構造体のセットに対して反復適用します。leak walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。
指定された bufctl 構造体のアドレスを使用して、同様な割り当てスタックトレースを持つ、リークが発生したメモリーバッファに対応するバッファアドレスのセットに対して反復適用します。leakbuf walker を使用する前には、::findleaks dcmd を適用してメモリーリークを発見しておく必要があります。
MDBファイルシステムのデバッギングサポートには、vnode ポインタを対応するファイルシステムのパス名に変換する組み込み機能が含まれています。この変換は、Directory Name Lookup Cache (DNLC) を使用して行われます。その理由は、キャッシュはすべてのアクティブ vnode を保持しているわけではないので、一部の vnode はパス名に変換することができず、名前の代わりに “??” が表示されるからです。
マウントされているファイルシステムのテーブルを表示します。これには、vfs_t アドレス、ops ベクトル、および各ファイルシステムのマウントポイントが含まれます。
ロックマネージャによって登録されたアクティブネットワークロックを持つ vnodes のテーブルを表示します。各 vnode に対応するパス名が示されます。
指定された vnode アドレスに対応するパス名を表示します。-v オプションを指定すると、この dcmd はより詳細な表示を出力します。これには、各中間パスコンポーネントの vnode ポインタが含まれます。
アクティブなブロック I/O 転送構造体 (buf_t 構造体) のセットに対して反復適用します。buf 構造体は、<sys/buf.h> で定義されます (詳細については、buf(9S) のマニュアルページを参照)。
この節では、カーネル仮想メモリーサブシステムのデバッギングサポートについて説明します。
カーネルの segmap アドレス空間セグメント内の指定されたアドレスに対応する smap 構造体アドレスを出力します。
as_t アドレス as に対応するプロセスの proc_t アドレスを表示します。
指定された memlist 構造体または既知の memlist 構造体の 1 つを表示します。memlist アドレスとオプションを指定しないか、あるいは、-i オプションを指定すると、物理的にインストールされているメモリーを表す memlist が表示されます。-a オプションを指定すると、利用できる物理メモリーを表す memlist が表示されます。-v オプションを指定すると、利用できる仮想メモリーを表す memlist が表示されます。
システム全体のメモリー使用状況の要約を表示します。システムメモリーの合計とともに、さまざまなクラスのページ (カーネル、匿名メモリー、実行可能ファイルとライブラリ、ページキャッシュ、および空きリスト) が消費しているシステムメモリーの量とパーセンテージが表示されます。
指定された page_t のプロパティを表示します。page_t アドレスを指定しないと、dcmd はすべてのシステムページのプロパティを表示します。
指定されたアドレス空間セグメント (seg_t アドレス) をフォーマットし、表示します。
アクティブな swapinfo 構造体すべて、あるいは指定された swapinfo 構造体についての情報を表示します。各構造体の v ノード、ファイル名、および統計が表示されます。
指定された vnode_t アドレスおよびオフセットに対応する smap 構造体アドレスを出力します。
指定された anon_map 構造体のアドレスを開始点として使用して、関連する anon 構造体のセットに対して反復適用します。anon マップ実装は、<vm/anon.h> で定義されます。
指定された memlist 構造体のスパンに対して反復適用します。この walker を ::memlist dcmd と組み合わせて使用すると、各スパンを表示できます。
すべてのシステムの page 構造体に対して反復適用します。明示的なアドレスを walk に指定すると、v ノードのアドレスとして解釈され、walker は v ノードに関連するページだけに対して反復適用します。
指定された as_t 構造体のアドレスを開始点として使用して、指定されたアドレス空間に関連するアドレス空間セグメント (seg 構造体) のセットに対して反復適用します。seg 構造体は、<vm/seg.h> で定義されます。
アクティブな swapinfo 構造体のリストに対して反復適用します。この walker は ::swapinfo dcmd と組み合わせて使用できます。
この節では、CPU 構造体とカーネルディスパッチャの状態を調べる機能について説明します。
コールアウトテーブルを表示します。各コールアウトの関数、引数、有効期限が表示されます。
スケジューリングクラステーブルを表示します。
各 CPU 上で現在実行されているスレッドのテーブルを表示します。オプションの CPU 番号または CPU 構造体アドレスを dcmd 名の前に指定すると、指定した CPU の情報だけが表示されます。-v オプションを指定すると、::cpuinfo は、各 CPU 上で実行されるまで待機している実行可能スレッドとアクティブ割り込みスレッドも表示します。
カーネル CPU 構造体のセットに対して反復適用します。cpu_t 構造体は、<sys/cpuvar.h> で定義されます。
この節では、カーネル開発者やサードパーティのデバイスドライバ開発者にとって有用な dcmd と walker について説明します。
指定されたカーネル名とメジャー番号のバインディングハッシュテーブルエントリ (構造体 bind) のアドレスを使用して、ノードバインディング名、メジャー番号、および次の要素へのポインタを表示します。
名前を指定されたドライバについてすべてのインスタンスのリストを表示します。インスタンスごとに 1 つのエントリの出力、つまり、先頭から、構造体 dev_info へのポインタ ($<devinfo または ::devinfo で表示可能)、ドライバ名、インスタンス番号、そのインスタンスに関連するドライバとシステムのプロパティが表示されます。
devinfo ノードに関連するシステムプロパティおよびドライバプロパティを出力します。-q オプションを指定すると、そのデバイスノードのクイックサマリだけを表示します。
devinfo ノードに関連するドライバ (もしあれば) の名前を出力します。
カーネルの devnames テーブルと dn_head ポインタを表示します。このポインタは、ドライバインスタンスリストを指しています。-v フラグを指定すると、devnames テーブルの各エントリに格納されている追加情報が表示されます。
devinfo で指定されたデバイスノードからカーネルデバイスツリーを表示します。devinfo を指定しないと、デフォルトでルートからデバイスツリーが表示されます。-c オプションを指定すると、指定されたデバイスノードの子だけが表示されます。-p オプションを指定すると、指定されたデバイスノードの祖先だけが表示されます。-v オプションを指定すると、各ノードに関連するプロパティが表示されます。
指定されたメジャー番号に該当するドライバ名を表示します。メジャー番号は、dcmd の前に式の形で、またはコマンド行引数として指定できます。
指定された modctl アドレスに対応するすべてのデバイスノードを出力します。
指定されたデバイスドライバ名を使用して、そのメジャー番号を表示します。
指定された softstate 状態ポインタ (ddi_soft_state_init(9F) のマニュアルページを参照) とデバイスインスタンス番号を使用して、そのインスタンスのソフトの状態を表示します。
指定されたカーネルバインディングハッシュテーブルエントリの配列 (構造体 bind **) のアドレスを使用して、ハッシュテーブル内のすべてのエントリを調べて、各構造体 bind のアドレスを戻します。
最初に、指定された devinfo の親に対して反復適用し、それらを最下位から世代順に戻します。次に、指定された devinfo 自身を戻します。その次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。
最初に、指定された devinfo を戻し、次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。
指定された devinfo の親に対して、世代順に最上位から最下位まで反復適用し、次に、指定された devinfo を戻します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。
指定された devinfo の兄弟に対して反復適用します。dev_info 構造体は、<sys/ddi_impldefs.h> で定義されます。
devnames 配列のエントリに対して反復適用します。この構造体は、<sys/autoconf.h> で定義されます。
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体への NULL 以外のポインタをすべて表示します。
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体へのポインタをすべて表示します。未使用のインスタンスのポインタが NULL になることに注意してください。
この節では、カーネル開発者やサードパーティの STREAMS モジュールやドライバの開発者にとって有用な dcmd と walker について説明します。
指定された mblk_t のアドレスを使用して、対応する dblk_t のアドレスを出力します。
1 つまたは複数のメッセージブロックの整合性を確認します。アドレスを明示的に指定すると、そのメッセージブロックの整合性がチェックされます。アドレスを明示的に指定しないと、アクティブなメッセージブロックすべての整合性がチェックされます。この dcmd は、検出したが無効であるメッセージブロックについても出力します。
指定された queue_t データ構造体をフィルタリングし表示します。オプションを指定しないと、queue_t の種々のプロパティが表示されます。-v オプションを指定すると、待ち行列フラグが詳細に復号化されます。-f、-F、または -m オプションを指定すると、これらのオプションの引数によって定義される条件に一致した場合にだけ、待ち行列が表示されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-f オプションは、指定したフラグ (<sys/stream.h> の Q フラグ名の 1 つ) が待ち行列フラグの中に存在しなければならないことを指定します。-F オプションは、指定したフラグが待ち行列フラグの中に存在してはならないことを指示します。-m オプションは、待ち行列に関連するモジュール名が指定された modname に一致しなければならないことを指示します。-s オプションは、待ち行列に関連する syncq_t が指定された syncq_t アドレスに一致する必要があることを指示します。
指定された queue_t のアドレスを使用して、対応する syncq_t データ構造体のアドレスを出力します。
指定された queue_t のアドレスを使用して、ピアな読み取りまたは書き込み待ち行列構造体のアドレスを出力します。
指定された queue_t のアドレスを使用して、対応する読み取り待ち行列のアドレスを出力します。
指定された queue_t のアドレスを使用して、対応する書き込み待ち行列のアドレスを出力します。
指定された STREAM ヘッドを表す stdata_t 構造体のアドレスを使用して、カーネル STREAM データ構造体のイメージ図を表示します。読み取りと書き込みの待ち行列へのポインタ、バイト数、各モジュールのフラグが表示され、さらに、指定された待ち行列に関する追加情報が余白に表示される場合もあります。
指定された syncq_t データ構造体をフィルタリングし表示します。オプションを指定しないと、syncq_t の種々のプロパティが表示されます。-v オプションを指定すると、syncq フラグが詳細に復号化されます。-f、-F、-t、または -T オプションを指定すると、これらのオプションの引数によって定義される条件に一致する場合にだけ、syncq が表示されます。したがって、この dcmd をパイプラインの入力のフィルタとして使用できます。-f オプションは、指定したフラグ (<sys/strsubr.h> の SQ_ フラグ名の 1 つ) が syncq フラグの中に存在しなければならないことを指定します。-F オプションは、指定したフラグが syncq フラグの中に存在してはならないことを指示します。-t オプションは、指定したタイプ (<sys/strsubr.h> の SQ_CI または SQ_CO タイプ名の 1 つ) が syncq タイプビットの中に存在しなければならないことを指定します。-T オプションは、指定したタイプが syncq タイプビットの中に存在してはならないことを指定します。
指定された syncq_t のアドレスを使用して、対応する queue_t データ構造体のアドレスを出力します。
指定された mblk_t のアドレスを使用して、b_cont ポインタに従いながら、関連するメッセージ構造体のセットに対して反復適用します。b_cont ポインタは、指定されたメッセージブロックを、同じメッセージ上にある次の関連するメッセージブロックにリンクするために使用されます。メッセージブロックの詳細については、msgb(9S) のマニュアルページを参照してください。
指定された mblk_t のアドレスを使用して、b_next ポインタに従いながら、関連するメッセージ構造体のセットに対して反復適用します。b_next ポインタは、指定されたメッセージブロックを、指定された待ち行列上にある次の関連するメッセージブロックにリンクするために使用されます。メッセージブロックの詳細については、msgb(9S) のマニュアルページを参照してください。
指定された queue_t 構造体のアドレスを使用して、q_link ポインタを使用しながら、関連する待ち行列のリストを調べます。この構造体は、<sys/stream.h> で定義されます。
指定された queue_t 構造体のアドレスを使用して、q_next ポインタを使用しながら、関連する待ち行列のリストを調べます。この構造体は、<sys/stream.h> で定義されます。
指定された stdata_t 構造体のアドレスを使用して、読み取り側待ち行列構造体のリストを調べます。
指定された stdata_t 構造体のアドレスを使用して、書き込み側待ち行列構造体のリストを調べます。
この節では、中心となるカーネルネットワーキングスタックプロトコルをデバッグするときに役に立つ dcmd と walker について説明します。
指定されたカーネル MI_O を使用して、MI_O またはそのペイロードをフィルタリングおよび表示します。-p オプションを指定すると、MI_O に対応するペイロードのアドレスが表示され、指定しないと、MI_O 自身が表示されます。フィルタ -d または -m を指定すると、dcmd はそれぞれ、デバイスまたはモジュール MI_O オブジェクトをフィルタリングできます。
ネットワークの統計とアクティブな接続を表示します。-a オプションを指定すると、すべてのソケットの状態が表示されます。-v オプションを指定すると、より詳細な出力が表示されます。-f オプションを指定すると、指定したアドレスファミリに関連する接続だけが表示されます。-P オプションを指定すると、指定したプロトコルに関連する接続だけが表示されます。
sonode オブジェクトをフィルタリングおよび表示します。アドレスを指定しないと、AF_UNIX ソケットのリストが表示され、指定すると、指定した sonode だけが表示されます。-f オプションを指定すると、指定したファミリのソケットだけが表示されます。-t オプションを指定すると、指定した種類の sonode だけが表示されます。-p オプションを指定すると、指定したプロトコルのソケットだけが表示されます。
tcpb オブジェクトをフィルタリングおよび表示します。アドレスを指定しないと、すべての接続が検査され、指定すると、指定した tcpb だけがフィルタリングおよび表示されます。-a オプションを指定すると、アクティブな接続だけがフィルタリングされ、-P オプションを指定すると、TCP の IPv4 または IPv6 接続をフィルタリングできます。tcpb dcmd は TCP 接続のフィルタリング機能を持つため、IPv4 の接続を促進する状態の中で IPv6 の TCP も接続する場合、-P オプションを指定すると、::netstat とまったく同じように、接続は IPv4 と IPv6 の両方として認識されます。dcmd をフィルタとして使用せずに -v オプションを指定すると、dcmd からの出力は詳細になります。
指定された ar のアドレスを使用して、指定された ar から最後の ar までのすべての ar オブジェクトを調べます。アドレスを指定しないと、すべての ar オブジェクトが調べられます。
指定された icmp のアドレスを使用して、指定された icmp から最後の icmp までのすべての icmp オブジェクトを調べます。アドレスを指定しないと、すべての icmp オブジェクトが調べられます。
指定されたインタフェースリンク層構造体 (ill) のアドレスを使用して、指定された ill から最後の ill までのすべての ill オブジェクトを調べます。アドレスを指定しないと、すべての ill オブジェクトが調べられます。
指定された ipc のアドレスを使用して、指定された ipc から最後の ipc までのすべての ipc オブジェクトを調べます。アドレスを指定しないと、すべての ipc オブジェクトが調べられます。
指定された MI_O のアドレスを使用して、この MI 内にあるすべての MI_O を調べます。
指定された AF_UNIX sonode を使用して、指定された sonode から始まる関連する AF_UNIX sonode のリストを調べます。アドレスを指定しないと、すべての AF_UNIX ソケットのリストが調べられます。
指定された tcpb を使用して、指定された tcpb から最後の TCP 接続までのすべての TCP 接続を調べます。アドレスを指定しないと、すべての tcpb オブジェクトが調べられます。
指定された udp のアドレスを使用して、指定された udp から最後の udp までのすべての udp オブジェクトを調べます。アドレスを指定しないと、すべての udp オブジェクトが調べられます。
この節では、Solaris カーネルの種々の基本的ファイル、プロセス、およびスレッド構造体をフォーマットし調べるために使用される dcmd と walker について説明します。
指定されたプロセスに関連するファイル記述子 fd-num に対応する file_t アドレスを出力します。このプロセスを指定するには、その proc_t 構造体の仮想アドレスを使用します。
指定されたカーネルスレッド (kthread_t 構造体の仮想アドレスによって識別される) に関連するスタックトレースを出力します。この dcmd は、複数の異なるアルゴリズムを使用して該当するスタックバックトレースを見つけます。オプションのコマンド文字列を指定すると、ドット変数はスタックフレームの最先頭のフレームポインタアドレスにリセットされ、指定されたコマンドはコマンド行に入力された場合と同じように評価されます。デフォルトのコマンド文字列は、“<.$C0” です。すなわち、フレームポインタを含め、引数を付けずにスタックトレースを出力します。
指定されたプロセス ID に対応する proc_t アドレスを出力します。MDB のデフォルトは 16 進数であることを思い出してください。したがって、pgrep(1) または ps(1) を使用して取得した 10 進数のプロセス ID には接頭辞 0t を付ける必要があります。
指定されたプロセスアドレスに該当するプロセスのメモリーマップを出力します。この dcmd は pmap(1) に似た書式を使用して出力を表示します。-q オプションを指定すると、出力が省略形式で表示されるので、処理時間が短くなります。
指定されたプロセスまたはすべてのアクティブなシステムプロセスに関連する情報の要約を ps(1) に似た形式で出力します。-f オプションを指定すると、完全なコマンド名と初期引数が出力されます。-l オプションを指定すると、各プロセスに関連付けられた LWP が出力されます。-t オプションを指定すると、各プロセスの LWP に関連するカーネルスレッドが出力されます。-T オプションを指定すると、各プロセスに関連するタスク ID が出力されます。-P オプションを指定すると、各プロセスに関連するプロジェクト ID が出力されます。
それぞれの親プロセスから派生した子プロセスを含むプロセスツリーを出力します。この dcmd は ptree(1) に似た書式を使用して出力を表示します。
アクティブなカーネルタスク構造体とそれに関連する ID 番号および属性のリストを出力します。プロセスタスク ID の詳細については、settaskid(2) を参照してください。
指定された kthread_t カーネル構造体のプロパティを表示します。kthread_t のアドレスを指定しないと、すべてのカーネルスレッドのプロパティが表示されます。この dcmd オプションを使用すると、どの出力カラムを表示するかを制御できます。オプションを指定しないと、-i オプションがデフォルトで有効になります。-b オプションを指定すると、スレッドのターンスタイルとブロッキング同期オブジェクトに関連する情報が表示されます。-d オプションを指定すると、スレッドのディスパッチャの優先順位、バインディング、および最終ディスパッチ時刻が表示されます。-f オプションを指定すると、状態が TS_FREE であるスレッドが出力から削除されます。-i オプションを指定すると (デフォルト)、スレッドの状態、フラグ、優先順位、および割り込み情報が表示されます。-m オプションを指定すると、他のすべての出力オプションがマージされて、単一の出力行に表示されます。-p オプションを指定すると、スレッドのプロセス、LWP、および資格ポインタが表示されます。-s オプションを指定すると、スレッドのシグナル待ち行列とシグナルの保留と保持を示すマスクが表示されます。
指定されたvnode_t アドレスを使用して、現在この vnode をファイルテーブルに開いているプロセスの proc_t アドレスを出力します。
指定された proc_t 構造体のアドレスを開始点として使用して、指定されたプロセスに関連する開いているファイル (file_t 構造体) のセットに対して反復適用します。file_t 構造体は、<sys/file.h> で定義されます。
アクティブなプロセス (proc_t) 構造体に対して反復適用します。この構造体は、<sys/proc.h> で定義されます。
指定されたタスクポインタを使用して、指定されたタスクのメンバーであるプロセスの proc_t 構造体のリストに反復適用します。
カーネルスレッド (kthread_t) 構造体のセットに対して反復適用します。グローバル walk が起動されると、すべてのカーネルスレッドがこの walker によって返されます。proc_t アドレスを開始点として使用することによって ローカル walk が起動されると、指定したプロセスに関連するスレッドのセットが戻されます。kthread_t 構造体は、<sys/thread.h> で定義されます。
この節では、特定のカーネル同期プリミティブを調べるために使用される dcmd と walker について説明します。各プリミティブの意味論については、マニュアルページの対応するセクション (9f) を参照してください。
指定された読み取り書き込みロック (rwlock(9F) のマニュアルページを参照) のアドレスを使用して、現在のロックの状態と待機しているスレッドのリストを表示します。
同期オブジェクトのアドレスを対応するターンスタイルのアドレスに変換して、ターンスタイルのアドレスを出力します。
指定された turnstile_t のプロパティを表示します。turnstile_t のアドレスを指定しないと、すべてのターンスタイルのプロパティが表示されます。
指定された条件変数 (condvar(9F) のマニュアルページを参照) またはセマフォ (semaphore(9F) のマニュアルページを参照) のアドレスを使用して、このオブジェクト上で現在待機しているスレッドを表示します。明示的にアドレスを指定しないと、待機しているスレッドがあるすべてのオブジェクトが表示されます。-v オプションを指定すると、オブジェクトで現在ブロックされているスレッドのリストが表示されます。
指定された同期オブジェクト (たとえば、mutex(9F) または rwlock(9F)) のアドレスを使用して、ブロックされているカーネルスレッドのリストに対して反復適用します。
指定された条件変数 (condvar(9F) のマニュアルページを参照) またはセマフォ (semaphore(9F) のマニュアルページを参照) のアドレスを使用して、ブロックされているカーネルスレッドのリストに対して反復適用します。
cyclic サブシステムは下位レベルのカーネルサブシステムで、高解像度、他のカーネルサービスに対する各 CPU インターバルタイマー機能、およびプログラミングインタフェースを提供します。
CPU ごとに cyclic サブシステムの各 CPU の状態を表示します。-v オプションを指定すると、より詳細な表示が示されます。-V オプションを指定すると、-v よりもさらに詳細な表示が示されます。
指定されたアドレスの cyclic_t をフォーマットし、表示します。
cyclic サブシステムのコードカバレージ情報を表示します。この情報は、DEBUG カーネルだけで使用可能です。
cyclic サブシステムのトレース情報を表示します。この情報は、DEBUG カーネルだけで使用可能です。
各 CPU の cyc_cpu_t 構造体に対して反復適用します。この構造体は、<sys/cyclic_impl.h> で定義されます。
cyclic トレースバッファ構造体に対して反復適用します。この情報は、DEBUG カーネルだけで使用可能です。
タスク待ち行列サブシステムは、カーネル内のさまざまなクライアントに汎用の非同期タスクスケジューリング機能を提供します。
指定された taskq_entry 構造体の内容を出力します。
指定された taskq 構造体のアドレスを使用して、taskq_entry 構造体のリストに対して反復適用します。
エラー待ち行列サブシステムは、プラットフォームに固有なエラー処理コードに汎用の非同期エラーイベント処理機能を提供します。
指定されたエラー待ち行列に関連する情報の要約を表示します。アドレスを指定しないと、すべてのシステムエラー待ち行列に関連する情報が表示されます。各待ち行列のアドレス、名前、待ち行列の長さ、データ要素サイズ、および、さまざまな待ち行列統計が表示されます。
システムエラー待ち行列のリストを調べて、各エラー待ち行列のアドレスを返します。
指定されたエラー待ち行列のアドレスを使用して、保留中の各エラーイベントデータバッファのアドレスを戻します。
この節では、システム構成データを確認するときに使用できる dcmd について説明します。
システム初期化中にカーネルが解析したときの system(4) 構成ファイルの内容を表示します。
ipc モジュールは、メッセージ待ち行列、セマフォ、および共用メモリープロセス間通信プリミティブの実装に対してデバッギングサポートを提供します。
既知のメッセージ待ち行列、セマフォ、および共用メモリーセグメントに対応するシステム全体の IPC 識別子のリストを表示します。-l オプションを指定すると、より詳細な情報のリストが示されます。
指定されたメッセージ待ち行列要素 (構造体 msg) のプロパティを表示します。-l オプションを指定すると、メッセージの raw コンテンツが 16 進数と ASCII 形式で表示されます。-t オプションを指定すると、出力をフィルタリングして、指定された種類のメッセージだけを表示します。このオプションは、msgqueue walker の出力を ::msg にパイプで渡すときに便利です。
指定されたメッセージ待ち行列 IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させるメッセージ待ち行列キーとして id が代わりに解釈されます (msgget(2) を参照)。
指定された msqid_ds 構造体またはアクティブな msqid_ds 構造体 (メッセージ待ち行列識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。
指定されたセマフォ IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させるセマフォキーとして id が代わりに解釈されます (semget(2) を参照)。
指定された semid_ds 構造体またはアクティブな semid_ds 構造体 (セマフォ識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。
指定された共用メモリー IPC 識別子を対応するカーネル実装構造体へのポインタに変換して、このカーネル構造体のアドレスを出力します。-k オプションを指定すると、一致させる共用メモリーキーとして id が代わりに解釈されます (shmget(2) を参照)。
指定された shmid_ds 構造体またはアクティブな shmid_ds 構造体 (共用メモリーセグメント識別子) のテーブルを出力します。-l オプションを指定すると、より詳細な情報のリストが表示されます。
メッセージ待ち行列識別子に対応するアクティブな msqid_ds 構造体を調べます。この構造体は、<sys/msg.h> で定義されます。
現在指定されたメッセージ待ち行列に入っている message 構造体に対して反復適用します。
セマフォ識別子に対応するアクティブな semid_ds 構造体を調べます。この構造体は、<sys/sem.h> で定義されます。
共用メモリーセグメント識別子に対応するアクティブな shmid_ds 構造体を調べます。この構造体は、<sys/shm.h> で定義されます。
lofs モジュールは、 lofs(7FS) ファイルシステムのデバッギングサポートを提供します。
指定された lnode_t、またはカーネルのアクティブな lnode_t 構造体のテーブルを出力します。
指定された lnode_t アドレスに対応する配下のループバックマウントファイルシステムの dev_t (vfs_dev) を出力します。
指定された lnode_t アドレスに対応する配下のループバックマウントファイルシステムの dev_t (li_rdev) を出力します。
カーネルのアクティブな lnode_t 構造体を調べます。この構造体は、<sys/fs/lofs_node.h> で定義されます。
ip モジュールは、ip(7P) ドライバのデバッギングサポートを提供します。
指定された ire_t、またはカーネルのアクティブな ire_t 構造体のテーブルを出力します。-q フラグを指定すると、発信元および宛先アドレスではなく、送信および受信待ち行列ポインタが出力されます。
カーネルのアクティブな ire (Internet Route Entry) 構造体を調べます。この構造体は、<inet/ip.h> で定義されます。
この節では、カーネルモジュールとドライバの読み込みを行うカーネル実行時リンカーのデバッギングサポートについて説明します。
指定された modctl、またはカーネルのアクティブな modctl 構造体のテーブルを出力します。
指定された modctl 構造体のアドレスを使用して、モジュールの ELF 実行可能ヘッダーとセクションヘッダーを出力します。
アクティブカーネルモジュールに関する情報を出力します。/usr/sbin/modinfo コマンドの出力に似ています。
カーネルのアクティブな modctl 構造体のリストを調べます。この構造体は、<sys/modctl.h> で定義されます。
uchiモジュールは、USB (Universal Serial Bus) フレームワークのホストコントローラインタフェース部分にデバッギングサポートを提供します。
指定された USB UHCI コントローラの QH (Queue Head) 構造体のアドレスを使用して、この構造体の内容を出力します。-b オプションを指定すると、link_ptr チェインに対して反復適用され、見つかったすべての QH が出力されます。-d オプションを指定すると、element_ptr チェインに対して反復適用され、見つかったすべての TD が出力されます。
指定された USB UHCI コントローラの TD (Transaction Descriptor) 構造体のアドレスを使用して、この構造体の内容を出力します。これは、Control TD と Interrupt TD だけに機能することに注意してください。-d オプションを指定すると、element_ptr チェインに対して反復適用され、見つかったすべての TD が出力されます。
指定された USB UHCI コントローラの QH (Queue Head) 構造体のアドレスを使用して、このような構造体のリストに対して反復適用します。
指定された USB UHCI コントローラの TD (Transaction Descriptor) 構造体のアドレスを使用して、このような構造体のリストに対して反復適用します。
usba モジュールは、プラットフォームに依存しない USB (Universal Serial Bus) にデバッギングサポートを提供します。
指定されたホストコントローラのコールバック構造体 (usb_hcdi_cb) のアドレスを使用して、このコールバックの要約情報を出力します。
指定された usb_device 構造体のアドレスを使用して、要約情報を出力します。アドレスを指定しないと、usb_device 構造体のグロバールリストが調べられます。-p オプションを指定すると、当該デバイス上で開いているすべてのパイプについての情報が表示されます。-v オプションを指定すると、各デバイスのより詳細な情報が表示されます。
指定された USB パイプハンドル構造体 (usb_pipe_handle_impl) のアドレスを使用して、このハンドルの要約情報を出力します。
指定された USB ホストコントローラの devinfo ノードのアドレスを使用して、このコントローラの usb_hcdi_cb_t 構造体のリストに対して反復適用します。
指定された usba_list_entry 構造体のアドレスを使用して、このような構造体のチェインに対して反復適用します。
これらの dcmd と walker は、x86 用です。
トラップトレースレコードを新しい順に表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。明示的にドット値を指定すると、その正確な値に応じてこれが CPU ID 番号またはトラップトレースレコードアドレスとして解釈されます。CPU ID 番号を指定すると、出力はその CPU のバッファに制限されます。レコードアドレスを指定すると、そのレコードだけがフォーマットされます。-x オプションを指定すると、完全な raw レコードが表示されます。
トラップトレースレコードアドレスのリストを新しい順に調べます。トラップトレース機能は、DEBUG カーネルだけで使用可能です。
これらの dcmd と walker は、SPARC sun4m プラットフォーム用です。
トラップトレースレコードを新しい順に表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。明示的にドット値を指定すると、その正確な値に応じてこれが CPU ID 番号またはトラップトレースレコードアドレスとして解釈されます。CPU ID 番号を指定すると、出力はその CPU のバッファに制限されます。レコードアドレスを指定すると、そのレコードだけがフォーマットされます。-x オプションを指定すると、完全な raw レコードが表示されます。
トラップトレースレコードアドレスのリストを新しい順に調べます。トラップトレース機能は、DEBUG カーネルだけで使用可能です。
これらの dcmd と walker は、SPARC sun4u プラットフォーム用です。
指定されたアドレスのソフト割り込みベクトル構造体を表示するか、またはすべてのアクティブなソフト割り込みベクトルを表示します。各構造体の保留数、PIL、引数、およびハンドラ関数が表示されます。
トラップトレース制御レコードを表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。
トラップトレースレコードを新しい順に表示します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。明示的にドット値を指定すると、CPU ID として解釈され、出力はその CPU のバッファに制限されます。-x オプションを指定すると、完全な raw レコードが表示されます。
指定されたアドレスのクロスコールメールボックスを表示するか、または保留中の要求を持っているすべてのクロスコールメールボックスをフォーマットします。
CPU クロスコールアクティビティに関連するトラップトレースレコードを新しい順にフォーマットし、表示します。クロスコール機能は、DEBUG カーネルだけで使用可能です。
ソフト割り込みベクトルテーブルエントリに対して反復適用します。
トラップトレースレコードアドレスに対して新しい順に反復適用します。トラップトレース機能は、DEBUG カーネルだけで使用可能です。
CPU ハンドシェイクとクロスコール (x-call) 要求に使用されるメールボックスに対して反復適用します。