パフォーマンスチューニングを支援するため、Oracle Solaris カーネルには kstat(3KSTAT) 機能が用意されています。stat 機能が提供する一連の関数やデータ構造体を使用すると、デバイスドライバなどのカーネルモジュールからモジュール固有のカーネル統計をエクスポートできます。
stat は、デバイスの使用に関する定量化可能な側面を記録するためのデータ構造体です。stat は、NULL で終わるリンクリストとして格納されます。各 stat には共通のヘッダーセクションとタイプ固有のデータセクションが含まれます。ヘッダーセクションは kstat_t 構造体によって定義されます。
stat のタイプを bus、 controller、 device_error、 disk、 hat、 kmem_cache、 stat、 misc、 net、 nfs、 pages、 partition、 rps、 Ufa、 vm、 mem のいずれかに分類します。
stat が作成された時間。ks_crtime は一般に、各種カウンタのレートを計算するときに使用されます。
stat のデータセクションを指します。
データセクションの合計サイズ (バイト)。
この stat を作成したカーネルモジュールのインスタンス。ks_instance を ks_module、ks_name と組み合わせることで、意味のある一意の名前が stat に付けられます。
stat の一意の ID。
この stat を作成したカーネルモジュールを識別します。ks_module を ks_instance、ks_name と組み合わせることで、意味のある一意の名前が stat に付けられます。KSTAT_STRLEN は ks_module の最大長を設定します。
ks_module および ks_instance とともに stat に割り当てられた名前。KSTAT_STRLEN は ks_module の最大長を設定します。
複数レコードをサポートする stat タイプ KSTAT_TYPE_RAW、KSTAT_TYPE_NAMED、および KSTAT_TYPE_TIMER のデータレコード数を示します。
チェーン内での次の stat を指します。
予約済みのフィールド。
前回のデータスナップショットのタイムスタンプ (レートの計算時に有用)。
データタイプ。バイナリデータの場合は KSTAT_TYPE_RAW、名前/値ペアの場合は KSTAT_TYPE_NAMED、割り込み統計の場合は KSTAT_TYPE_INTR、入出力統計の場合は KSTAT_TYPE_IO、イベントタイマーの場合は KSTAT_TYPE_TIMER になります。
デバイスドライバからエクスポートされる各カーネル統計 (stat) は、ヘッダーセクションとデータセクションから構成されます。stat(9S) 構造体は統計のヘッダー部分です。
割り込み kstat 用の構造体。割り込みのタイプは次のとおりです。
ハード割り込み - ハードウェアデバイス自体がソースとなる
ソフト割り込み – システムが何らかのシステム割り込みソースを使用することで引き起こされる
ウォッチドッグ割り込み – 定期的なタイマー呼び出しによって引き起こされる
見せかけの割り込み – 割り込みエントリポイントに入ったが、処理するべき割り込みが存在しなかった
複数の処理 – ほかの任意のタイプから制御が戻る直前に、割り込みが検出されて処理された
ドライバは一般に、自身のハンドラから要求されたハード割り込みとソフト割り込みのみを報告しますが、見せかけのクラスの割り込みの測定は、自動ベクトル化デバイスが特定のシステム構成内で任意の割り込み待ち時間の問題を特定する際に役立ちます。同じタイプの割り込みを複数持つデバイスでは、複数の構造体を使用するべきです。
入出力 kstat 用の構造体。
名前付き stat 用の構造体。名前付き stat は名前-値ペアの配列です。これらのペアは kstat_named 構造体に保持されます。
kstat (9S) 構造体を割り当てて初期化します。
システムから stat を削除します。
完全に初期化された stat をシステムに追加します。
名前付き stat を初期化します。kstat_named_setstr() は、名前付き stat のポインタに文字列 st を関連付けます。
多数の入出力サブシステムは、管理対象となる基本的なトランザクションキューを少なくとも 2 つ持ちます。1 つは、処理対象として受け付けられたものの、まだ処理が開始されていないトランザクション用のキューです。もう 1 つは、アクティブに処理されているものの、まだ完了していないトランザクション用のキューです。このため、待機時間と実行時間 という 2 つの累計時間統計が保持されます。待機時間は処理の開始前です。実行時間は処理中です。次の kstat_queue() ファミリ関数は、ドライバの待機キューと実行キュー間の遷移に基づいてこれらの時間を管理します。
次の表で説明する stat インタフェースは、Ethernet 物理層の統計をドライバから取得するための効果的な方法です。ユーザーが Ethernet 物理層の問題の診断や修復をより適切に行えるように、Ethernet ドライバからこれらの統計をエクスポートするようにしてください。link_up 以外のすべての統計では、存在しない場合のデフォルト値は 0 になります。link_up 統計の値は 1 を想定します。
次の例では、すべての共有リンク設定を提供しています。この場合、Mei を使用して統計をフィルタリングしています。
stat ce:0:mii:link_*
|