スポンサーリンク

SCSI(4) FreeBSD カーネルインタフェースマニュアル SCSI(4)

名称

SCSI, CAM − CAM SCSI サブシステム

書式

controller scbus0

controller scbus1 at ahc0

controller scbus3 at ahc1 bus 0

controller scbus2 at ahc1 bus 1

device cd0

device ch0

device da0

device pass0

device pt0

device sa0

device ch1 at scbus0 target 4 unit 0

options

CAMDEBUG

options

"CAM_DEBUG_BUS=-1"

options

"CAM_DEBUG_TARGET=-1"

options

"CAM_DEBUG_LUN=-1"

options

"CAM_DEBUG_FLAGS=CAM_DEBUG_INFO|CAM_DEBUG_CDB"

options

"CAM_MAX_HIGHPOWER=4"

options

SCSI_NO_SENSE_STRINGS

options

SCSI_NO_OP_STRINGS

options

SCSI_DELAY=8000

解説

CAM SCSI サブシステムは、各種の SCSI デバイスを制御するドライバや、ホスト アダプタドライバを経由して異なる SCSI ホストアダプタを利用するドライバを 実装するための、均質でモジュール化されたシステムを提供します。システムが SCSI バスをプローブし、発見したデバイスを適切なドライバにアタッチします。 pass(4) ドライバがカーネルに組み込まれていれば、すべての SCSI デバイスが アタッチされます。

カーネルの設定

CAM SCSI サブシステム用に一般的なカーネル設定オプションがいくつかありま す:

       CAMDEBUG

このオプションは、CAM デバッグ用の printf コードを 有効にします。実際には、このオプションだけではデ バッグ情報は出力されません。出力するためには追加設 定が必要です。詳細は下記を参照して下さい。

CAM_MAX_HIGHPOWER=4
同時使用できる "high power" コマンドの最大数を設定 します。 "high power" コマンドとは、他のコマンドに 比べて、実行するのにより多くの電力を必要とするコマ ンドです。その一例は SCSI START UNIT コマンドです (現在のところ "high power" の烙印を押されている唯 一のコマンドです)。 SCSI ディスクを起動するには、 通常のディスク操作に比べてかなり大きな電力を消費し ます。このオプションで、コンピュータの電源に負荷を かけ過ぎずに "high power" コマンドを同時にいくつま で発行できるかを指定できます。

SCSI_NO_SENSE_STRINGS
SCSI Additional Sense Code と Additional Sense Code Qualifier の組についての解説文をすべて除去し ます。この文は本当に大きなテキストデータベースなの で、除去すれば、カーネルのサイズを少し削減できま す。このオプションは、主としてブートフロッピや、他 のディスク空間あるいはメモリ空間が小さい環境で必要 となります。他の環境でも、多くの場合はこのオプショ ンを有効にすべきです。 SCSI のエラーメッセージの解 釈を速めることになるからです。カーネルを無用に膨張 ("kernel bloat") させることばかりに熱中しないで、 あなたのカーネルに解説文を残さないようにしましょ う!

SCSI_NO_OP_STRINGS
SCSI opcode の解説文をすべて無効にします。このオプ ションは、前述した sense 文字列と場合と同様、主と してカーネルサイズが重要なブートフロッピのような環 境で役に立ちます。通常の使用環境でこのオプションを 有効にすることは推奨されません。 SCSI の障害のデ バッグを遅らせるからです。

SCSI_DELAY=8000
SCSI のバスが安定するまでの遅延 ("bus settle delay") です。 CAM の場合、 ミリ秒単位で指定しま す。以前の SCSI 層で使われていた秒単位ではありませ ん。カーネルはブート時にバスリセットを各 SCSI バス に送り、各デバイスが転送ネゴシエーションやその他の 設定をデフォルトの状態に自分自身でリセットするよう 通知します。ほとんどの SCSI デバイスは、バスリセッ トから復帰するのに、ある程度の時間を必要とします。 最近のディスクは 100ms 程度の短かい時間しか必要と しませんが、古くて遅いデバイスはもっと長い時間を必 要とするかもしれません。 SCSI_DELAY を指定しなけれ ば、デフォルトでは 2 秒になります。 SCSI_DELAY の 最小値は "100"、すなわち 100ms です。唯一特殊な ケースは SCSI_DELAY に 0 を指定した場合で、"できる だけ小さい値" を意味します。この場合、 SCSI_DELAY は 100ms にリセットされます。

すべてのデバイスおよび SCSI バスはブート時の割当てをサポートしているの で、上位の番号のデバイスおよびコントローラを設定する必要はありません; device da0 は任意の番号のディスクドライバに対して十分な記述です。

デバイスは、特定のデバイスユニットとして認識される wired (束縛される) か、その次に有効な未使用ユニットとして認識される counted (数え上げられる) のどちらかです。

カーネル内のドライバがデバイスを束縛しないように設定するには、 device ch0 のような設定行を記述して、チェンジャドライバを組み込んで下さい。

ユニットを束縛するには、 device ch1 at scbus0 target 4 unit 0 のような設 定行を記述して、チェンジャ 1 を SCSI バス 0 上の SCSI ID 4、SCSI 論理ユ ニット 0 のチェンジャに割り当てます。各 SCSI バスを指定したコントローラに 束縛するには、 controller scbus0 at ahc0 のように設定行を記述します。これ は、SCSI バス 0 を ahc ドライバを用いる最初のユニットに割り当てます。複数 のバスをサポートするコントローラの場合、特定のバスを controller scbus3 at ahc1 bus 1 の形式で指定できます。これは、SCSI バス 1 を ahc1 デバイス上で 2 番目にプローブされたバスに割り当てます。

wired デバイスと counted デバイスが混在している場合、そのデバイスタイプに ついての最初の非 wired ユニットから数え始めます。すなわち、wired ディスク device da1 があると、最初の非 wired ディスクは da2 として認識されることに なります。

アダプタ

このシステムでは、たくさんの種類の異なるアダプタに共通のデバイスドライバ を使用することが可能です。アダプタは上位層から要求を受けて、 SCSI バスと システムの間のすべての IO を実行します。転送の最大サイズはアダプタによっ て支配されます。ほとんどのアダプタが一度の操作で 64KB を転送できますが、 多くのアダプタはもっと大量に転送できるかもしれません。

ターゲットモード

いくつかのアダプタは、 ターゲットモードをサポートしています。このモードで は、システムをひとつのデバイスとして操作することが可能となり、別のシステ ムが発行した操作に応答するようになります。ターゲットモードは、いくつかの アダプタでサポートされていますが、このバージョンの CAM SCSI サブシステム ではまだ完全ではありません。

関連ファイル

他の SCSI デバイスのエントリを参照して下さい。

診断

カーネルが options CAMDEBUG 付きでコンパイルされている場合、 XPT_DEBUG CCB を用いれば、任意の指定したデバイスに関して、さまざまな量のトレース情 報を取得可能になります。トレースされていないデバイスはトレース情報を生成 しません。現在は 4 つのデバッグフラグをオンにできます:

       CAM_DEBUG_INFO

該当するデバイス (群) について一般的な情報の printf 出力が可能になります。

CAM_DEBUG_TRACE
関数レベルでのコマンドフローのトレースが可能になりま す。すなわち、関数の入口と出口でカーネルの printf 出 力が発生します。

CAM_DEBUG_SUBTRACE
関数内部でのデバッグ出力が可能になります。

CAM_DEBUG_CDB
特定のデバイス (群) に送信されたすべての SCSI コマン ドをカーネルが印字するようになります。

これらのフラグのうち、特に CAM_DEBUG_TRACE と CAM_DEBUG_SUBTRACE は膨大な 量のカーネルの printf 出力を発生しますので、あまり有益ではありません。 CAM_DEBUG_INFO のレベルでログ出力されるものは多くはありませんので、これも それほど有益ではありません。最も有益なデバッグフラグは CAM_DEBUG_CDB フラ グです。以下のカーネルオプションを使用して、カーネル設定ファイルからデ バッグを有効にできます:

CAMDEBUG
CAM のデバッグを有効にします。このオプションなしでは、 ユーザランドから camcontrol(8) を経由してデバッグを有効 にすることもできません。

CAM_DEBUG_FLAGS
上に述べたような各種のデバッグフラグを、カーネル設定 ファイルで設定することが可能になります。フラグの論理和 を取れば、複数のデバッグレベルでの printf 出力を見るこ ともできます。

CAM_DEBUG_BUS
デバッグの対象とするバスを指定します。すべてのバスをデ バッグするには、この値を -1 に設定します。

CAM_DEBUG_TARGET
デバッグの対象とするターゲットを指定します。すべての ターゲットをデバッグするには、この値を -1 に設定しま す。

CAM_DEBUG_LUN
デバッグの対象とする論理ユニット番号を指定します。すべ ての論理ユニット番号をデバッグするには、この値を -1 に 設定します。

あるバス、ターゲット、もしくは論理ユニット番号を指定する場合には、上述し た 3 つのバス/ターゲット/論理ユニット番号のオプションをすべて指定すること が必須となります。ワイルドカードを使用すれば、ほとんどの機器についてデ バッグを有効にすることができます。

CAMDEBUG オプションを設定ファイルに含めていれば、 camcontrol(8) ユーティ リティを使用して、起動中に printf デバッグを有効にすることもできます。詳 細は camcontrol(8) を参照して下さい。

関連項目

aha(4), ahb(4), ahc(4), bt(4), cd(4), ch(4), da(4), pass(4), pt(4), sa(4), xpt(4), camcontrol(8)

歴史

CAM SCSI サブシステムは FreeBSD 3.0 で初めて登場しました。

作者

CAM SCSI サブシステムは Justin Gibbs と Kenneth Merry によって書かれまし た。

FreeBSD 3.0 October 15, 1998 FreeBSD 3.0

スポンサーリンク