iostadd カーネル・サービス

目的

IOSTAT サブルーチンによって報告される入出力統計情報を更新するために使用される入出力統計情報構造体を登録します。

構文

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/iostat.h>
#include <sys/devinfo.h>
int iostadd ( devtype,  devstatp)
int devtype;
union {
       struct ttystat *ttystp;
       struct dkstat  *dkstp;
       } devstatp;

説明

ヨスタッド カーネル・サービスは、デバイス上で統計を維持するために必要な入出力統計構造を登録するために使用されます。 ヨスタッド サービスは通常、tty、ディスク、または CD-ROM デバイス・ドライバーによって呼び出され、 IOSTAT サブルーチンによって使用される統計情報を提供します。 IOSTAT サブルーチンは、システム上の tty およびディスク・デバイスの統計情報を表示します。 ヨスタッド サービスは、構成されたデバイスごとに 1 回使用する必要があります。

ヨスタッド カーネル・サービスおよび DKSTAT 構造は、マルチパス入出力 (MPIO) をサポートします。 MPIO デバイスの場合、アンカーはディスクの DKSTAT 構造です。 このアンカーは、 ヨスタッド カーネル・サービスを使用して登録される最初の DKSTAT 構造でなければなりません。 後で登録されるパス dkstat 構造体は、 dkstat.dk_mpio_anchor フィールドのアンカー dkstat (ディスク) 構造体のアドレスを参照する必要があります。

tty デバイスの場合、 devtype パラメーターの値は DD_tty (D)です。 この場合、 ヨスタッド サービスは DevStatp パラメーターを使用して、 TTYSTAT 構造体へのポインターを返します。

devtype の値が DD_DISK (D ディスク) または DD_CD-ROMのディスク装置または CD-ROM 装置の場合、呼び出し側は、入力パラメーターとして、ピン留めされ、初期化された DKSTAT 構造体を提供する必要があります。 この構造体は、 ヨスタッド カーネル・サービスへの入り口で DevStatp パラメーターによって指し示されます。

デバイスのデバイス・ドライバー・サポートが終了した場合は、 ヨストデル カーネル・サービスを呼び出すことによって、 ヨスタッド カーネル・サービスに登録されている DKSTAT または TTYSTAT 構造体を登録解除する必要があります。

入出力統計構造

iostadd カーネル・サービスは、 usr/include/sys/iostat.h ファイルにある 2 つの構造体 ( ttystat 構造体と dkstat 構造体) を使用します。

TTYSTAT 構造体には、以下のフィールドが含まれます。

フィールド 説明
rawinch tty デバイスによって受信されたロー文字の数
caninch 正規処理によって生成された正規文字の数
outch tty デバイスに出力される文字の数

ヨスタッド カーネル・サービスによって使用される 2 番目の構造は、ディスク装置に関する情報を含む DKSTAT 構造です。 この構造体には以下のフィールドがあります。

フィールド 説明
diskname ディスクの論理装置の 32 文字のストリング名
dknextp チェーン内の次の DKSTAT 構造体へのポインター
dk_status ディスク・エントリー状況フラグ
dk_time ディスクがアクティブになっている時間
dk_bsize Number of bytes in a block
dk_xfers ディスクとの間の転送の数
dk_rblks ディスクから読み取られたブロックの数。
dk_wblks ディスクに書き込まれたブロックの数。
dk_seeks ディスクのシーク操作の数
dk_version DKSTAT 構造体のバージョン
dk_q_depth 待ち行列内項目数
dk_mpio_anchor パス・データ・アンカー (ディスク) へのポインター
dk_mpio_next_path チェーン内の次のパス DKSTAT 構造体へのポインター
dk_mpio_path_id パス ID

tty デバイス・ドライバー・サポート

このrawinchTTYSTAT 構造体のフィールドは、tty デバイスが受け取る文字数だけ増分する必要があります。 このcaninchTTYSTAT 構造体のフィールドは、正規処理から生成される入力文字の数だけ増分する必要があります。 このoutchフィールドは、tty デバイスに出力される文字数だけ増やされます。 これらのフィールドは、デバイス・ドライバーによって増分する必要がありますが、クリアすることはできません。

ディスク・デバイス・ドライバー・サポート

ディスク・デバイス・ドライバーは、以下の 4 つのタスクを実行する必要があります。

  • デバイスの初期化中にdkstat構造体を割り当てて固定する。
  • 更新dkstat.disknameフィールドには装置の論理名が入ります。
  • 更新dkstat.dk_bsizeフィールドには, 装置上のブロックのバイト数が入ります。
  • 構造体内の他のすべてのフィールドを0に設定する。
ディスク・デバイス・ドライバーが MPIO をサポートする場合は、以下のタスクを実行する必要があります。
  • 装置の初期設定時に DKSTAT 構造体を割り振って固定します。
  • dkstat.diskname フィールドをデバイスの論理名で更新します。
  • dkstat.dk_bsize フィールドを、デバイス上のブロックのバイト数で更新します。
  • dkstat.dk_version の値を dk_qd_mpio_magicに設定します。
  • dkstat 追加構造体がディスクである場合は、 dkstat.dk_mpio_anchor の値を 0 に設定します。
  • dkstat.dk_mpio_anchor の値をパスのアンカー (ディスク) dkstat 構造体のアドレスに設定し、 dkstat.dk_mpio_path_id をパスの ID に設定します ( dkstat 追加構造体がパスの場合)。
  • 他のすべてのフィールドを 0 に設定します。

装置が個別シーク・コマンドをサポートしている場合は、dkstat.dk_xrateフィールドには、デバイスの転送速度(KB/sec)を設定しなければならない。 その後、iostaddカーネルサービスを使用して、デバイスのdkstat構造体を登録する必要がある。

ドライブ操作の更新中に、dkstat.dk_statusフィールドには, 装置の使用中または使用中でない状態を表示しなければなりません。 これは、 IOST_DK_BUSY フラグを設定およびリセットすることによって行うことができます。 このdkstat.dk_xfersフィールドは、装置との間で転送が開始されるたびに増分する必要があります。 このdkstat.dk_rblksおよびdkstat.dk_wblksフィールドは、読み取りまたは書き込みが行われるブロックの数だけ増分する必要があります。

装置が個別シーク・コマンドをサポートしている場合は、dkstat.dk_seekフィールドは、装置に送信されるシーク・コマンドの数だけ増分する必要があります。 デバイスがディスクリートシークコマンドをサポートしていない場合、以下の両方が実行されますdkstat.dk_seekおよびdkstat.dk_xrateフィールドの値は0のままにしておかなければならない。

基本カーネルは、dkstat.dk_nextpおよびdkstat.dk_timeフィールド 初期化後、デバイス・ドライバによって変更されることはない。 MPIO デバイスの場合、基本カーネルは dkstat.dk_mpio_next_path フィールドも更新します。

注: 同じ DKSTAT 構造体を複数回登録してはなりません。
基本的なタスクに加えて、ディスク・ドライバーは、 IOSTAT コマンドの -D オプションをサポートする場合、 ヨスタッド カーネル・サービスを呼び出す前に以下のタスクを実行する必要があります。
  • dkstat.dk_version の値を dk_qd_service2_magicに設定します。
  • ドライバーが MPIO をサポートしない場合は、 dkstat.ident.adapter フィールドをアダプター名に設定します。
入出力操作中に、ドライバーは以下のタスクを実行する必要があります。
  • 読み取り転送ごとに dkstat.__dk_rxfers フィールドを増やしてください。
  • dkstat.dk_q_depth フィールドを、進行中の入出力要求の数で更新します。
  • 進行中の入出力要求の数が最大キュー項目数に達した場合は、 dkstat.dk_q_full フィールドを増やしてください。
  • dkstat.dk_rserv フィールドをサービス時間 ( devstrat カーネル・サービスがアダプター・ドライバーに読み取り要求を送信してから、 iodone カーネル・サービスがアダプター・ドライバーから要求を返すまでの差分時間ベース値) だけ増やします。
  • ドライバーが失敗した読み取り要求を再試行する場合は、 dkstat.dk_rtimeout フィールドを増やしてください。
  • ドライバーが失敗した読み取り要求をエラーとして返した場合は、 dkstat.dk_rfailed フィールドを増やしてください。
  • 読み取り要求の最小サービス時間で dkstat.dk_min_rserv フィールドを更新します。
  • 読み取り要求の最大サービス時間で dkstat.dk_max_rserv フィールドを更新します。
  • dkstat.dk_wserv フィールドの値を、サービス時間 ( devstrat カーネル・サービスがアダプター・ドライバーに書き込み要求を送信してから、 iodone カーネル・サービスがアダプター・ドライバーから要求を返すまでの差分時間ベース値) だけ増やします。
  • ドライバーが失敗した書き込み要求を再試行する場合は、 dkstat.dk_wtimeout フィールドを増やしてください。
  • ドライバーが失敗した書き込み要求をエラーとして返した場合は、 dkstat.dk_wfailed フィールドを増やしてください。
  • 書き込み要求の最小サービス時間で dkstat.dk_min_wserv フィールドを更新します。
  • dkstat.dk_max_wserv フィールドを、書き込み要求の最大サービス時間で更新します。
  • ドライバーが入出力要求をエンキューおよびデキューするときに、 dkstat.dk_wq_depth フィールドを増減します。
  • dkstat.dk_wq_time フィールドを、ドライバーが入出力要求をエンキューしてから、 devstrat カーネル・サービスが要求をアダプター・ドライバーに送信するまでの間の差分時間ベース値である待機時間だけ増やします。
  • dkstat.dk_wq_min_time フィールドを最小待機時間で更新します。
  • dkstat.dk_wq_max_time フィールドを最大待機時間で更新します。

パラメーター

項目 説明
devtype 入出力統計が保持されるデバイスのタイプを指定します。 さまざまなデバイス・タイプが /usr/include/sys/devinfo.h ファイルに定義されています。 現在、入出力統計は、ディスク、CD-ROM、および tty デバイスについてのみ保持されます。 このパラメーターの可能な値は、次のとおりです。
DD_DISK (D ディスク)
ディスクの場合
DD_CD-ROM
CD-ROM の場合
DD_TTY (D)
tty デバイスの場合
DevStatp devtype パラメーターで指定されたデバイス・タイプの入出力統計構造を指します。 DD_tty (D)devtype パラメーターの場合、pinned (滞留) された TTYSTAT 構造のアドレスが戻されます。 DD_DISK (D ディスク) または DD_CD-ROMdevtype パラメーターの場合、このパラメーターは、呼び出し元によって以前に割り振られた DKSTAT 構造体を指す入力パラメーターです。

ストレージ・キーをサポートするプラットフォームでは、渡される DevStatp パラメーターは キー・パブリック または キー・ブロック・デバイス 保護ドメイン内になければなりません。

実行環境

ヨスタッド カーネル・サービスは、 プロセス環境 からのみ呼び出すことができます。

戻り値

項目 説明
0 エラーが検出されないことを示します。
EINVAL devtype パラメーターが無効な装置タイプを指定したことを示します。 MPIO デバイスの場合、パス DKSTAT 構造体のアンカーが見つからなかったことを示します。