(57)【要約】【課題】外部処理エンティティによる高可用性ストレージシェルフの内部コンポーネントへの直接アクセスを容易化する手法を提供する。【解決手段】本発明は、ストレージシェルフ・ルータ・インターフェイスのトンネリングシステムを提供する。このシステムは、第１のプロトコルのコマンドを用いる第１の通信媒体によって、ストレージシェルフと相互接続された外部処理エンティティと、第２の通信媒体を介して大容量記憶デバイス用のプロトコルによってアクセスされる、ストレージシェルフ内の大容量記憶デバイスと、大容量記憶デバイスへの仮想インターフェイスを外部処理エンティティに提供して、さらに、前記外部処理エンティティによる前記大容量記憶デバイスへの直接アクセスを提供するストレージシェルフ・ルータと、を備える。【選択図】図３６Ａ【特許請求の範囲】
【請求項１】
第１のプロトコルのコマンドを用いる第１の通信媒体によって、ストレージシェルフと相互接続された外部処理エンティティと、
第２の通信媒体を介して大容量記憶デバイス用のプロトコルによってアクセスされる、前記ストレージシェルフ内の大容量記憶デバイスと、
前記大容量記憶デバイスへの仮想インターフェイスを外部処理エンティティに提供して、前記第１の通信媒体から受信される前記第１のプロトコルのコマンドを、前記第２の通信媒体を介して大容量記憶デバイスへ送信される前記大容量記憶デバイス用のプロトコルのコマンドに翻訳し、さらに、前記第１の通信媒体を介して受信される特定のタイプの第１プロトコルのコマンドフレームから、大容量記憶デバイス用のプロトコルのコマンドをアンパックすること、および、前記アンパックされた大容量記憶デバイス用のプロトコルのコマンドを、前記第２の通信媒体を介して翻訳せずに前記大容量記憶デバイスへ向けることによって、前記外部処理エンティティによる前記大容量記憶デバイスへの直接アクセスを提供する、ストレージシェルフ・ルータと、
を備える、ストレージシェルフ・ルータ・インターフェイスのトンネリングシステム。
【請求項２】
前記ストレージルータが、前記大容量記憶デバイスへ向けられた前記アンパックされた大容量記憶デバイス用のプロトコルのコマンドに対する応答を、前記第２の通信媒体を介して前記大容量記憶デバイスから受信し、前記応答を特定のタイプの第１プロトコルのフレームにパッケージ化し、前記第１の通信媒体を介して前記パッケージ化された応答を前記外部処理エンティティへ返送する、請求項１に記載のトンネリングシステム。
【請求項３】
さらに前記外部処理エンティティが、特定のタイプの第１プロトコルのコマンドフレーム及び応答フレームを介して、ストレージシェルフのデータ構造及びストレージシェルフ・ルータのファームウェアにアクセスできるようにする、請求項１に記載のトンネリングシステム。
【請求項４】
前記第１の通信媒体がファイバチャネル通信リンクであり、前記第２の通信媒体が、前記ストレージシェルフ・ルータをＡＴＡディスクドライブとインターフェイスをとるパスコントローラカードに相互接続するシリアル又はパラレル通信媒体である、請求項１に記載のトンネリングシステム。
【請求項５】
前記第１の通信媒体がファイバチャネル通信リンクであり、前記第２の通信媒体が、前記ストレージシェルフ・ルータをＡＴＡディスクドライブに相互接続するシリアル又はパラレル通信媒体である、請求項１に記載のトンネリングシステム。
【請求項６】
前記第１の通信媒体を介して受信される前記特定のタイプの第１プロトコルのコマンドフレームが、ＦＣＰコマンドフレーム内にパッケージ化されたバッファ書込みコマンドおよびバッファ読出しコマンドのうちの一方である、請求項１に記載のトンネリングシステム。
【請求項７】
前記第１の通信媒体を介して受信される特定のタイプの第１プロトコルのコマンドフレームから大容量記憶デバイス用のプロトコルのコマンドをアンパックすること、および、前記アンパックされた大容量記憶デバイス用のプロトコルのコマンドを、前記第２の通信媒体を介して翻訳せずに前記大容量記憶デバイスへ向けることに加えて、前記ストレージシェルフ・ルータが、前記第１の通信媒体を介して受信される前記特定のタイプの第１プロトコルのコマンドフレームから制御命令をアンパックし、対応する制御動作を大容量記憶デバイスを含むストレージシェルフ・コンポーネントに向ける、請求項１に記載のトンネリングシステム。
【請求項８】
前記制御命令がパワーオン制御命令、パワーオフ制御命令、及びリセット制御命令を含む、請求項７に記載のトンネリングシステム。
【請求項９】
前記第１の通信媒体を介して受信される特定のタイプの第１プロトコルのコマンドフレームから大容量記憶デバイス用のプロトコルのコマンドをアンパックすること、および、前記アンパックされた大容量記憶デバイス用のプロトコルコマンドを前記第２の通信媒体を介して翻訳せずに前記大容量記憶デバイスへ向けることに加えて、前記ストレージシェルフ・ルータが、前記第１の通信媒体を介して受信される前記特定のタイプの第１プロトコルのコマンドフレームからアクセス命令をアンパックし、大容量記憶デバイスを含む指定されたストレージシェルフ・コンポーネントにアクセスする、請求項１に記載のトンネリングシステム。
【請求項１０】
前記アクセス命令が、
ストレージシェルフ・ルータのフラッシュメモリに格納されたデータ構造の内容の全部又は一部を書き込むこと、
パスコントローラカードのフラッシュメモリに格納されたデータ構造の内容の全部又は一部を書き込むこと、
大容量記憶デバイス内の特殊セクタに格納されたデータ構造の内容の全部又は一部を書き込むこと、
ストレージシェルフ・ルータのフラッシュメモリに格納された前記ストレージシェルフファームウェアの全部又は一部を書き込むこと、
パスコントローラカードのフラッシュメモリに格納されたパスコントローラカードファームウェアの全部又は一部を書き込むこと、
ストレージシェルフ・ルータのフラッシュメモリに格納されたデータ構造の内容の全部又は一部を読み出すこと、
パスコントローラカードのフラッシュメモリに格納されたデータ構造の内容の全部又は一部を読み出すこと、
大容量記憶デバイス内の特殊セクタに格納されたデータ構造の内容の全部又は一部を読み出すこと、
ストレージシェルフ・ルータのフラッシュメモリに格納された前記ストレージシェルフファームウェアの全部又は一部を読み出すこと、及び
パスコントローラカードのフラッシュメモリに格納されたパスコントローラカードファームウェアの全部又は一部を読み出すこと
を含む、請求項９に記載のトンネリングシステム。
【請求項１１】
外部処理エンティティによるストレージシェルフ内の大容量記憶デバイスへの直接アクセスを提供する方法であって、該大容量記憶デバイスは、ストレージシェルフ内のストレージシェルフ・ルータにより、ストレージシェルフ・ルータ・インターフェイスを介して仮想化されており、
前記外部処理エンティティが前記ストレージシェルフ・ルータ・インターフェイスを介して仮想大容量記憶デバイスにアクセスするために用いる第１の通信プロトコルにおいて、前記第１の通信プロトコルをトンネリングコマンドで補足するため仕様されるコマンドフレームを特定するステップと、
大容量記憶デバイス用のネイティブコマンドを前記特定されたトンネリングコマンドフレームに挿入し、前記大容量記憶デバイス用のネイティブコマンドを前記トンネリングコマンドによって前記ストレージシェルフ・ルータへ送るステップと、
前記ストレージシェルフ・ルータが前記トンネリングコマンドを受信するステップと、
前記トンネリングコマンドから前記大容量記憶デバイス用のネイティブコマンドを抽出し、第２の通信媒体によって前記トンネリングコマンドを前記ストレージシェルフ内の大容量記憶デバイスへ転送するステップと
を含む方法。
【請求項１２】
前記ストレージシェルフ・ルータが、前記第２の通信媒体を介して前記転送された大容量記憶デバイス用のネイティブコマンドへの応答を受信し、前記応答を第１プロトコルの応答フレームに挿入し、前記応答を前記外部処理エンティティへ返送するステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記第１の通信媒体がファイバチャネル通信リンクであり、前記第２の通信媒体が、前記ストレージシェルフ・ルータをＡＴＡディスクドライブとインターフェイスをとるパスコントローラカードに相互接続するシリアル又はパラレル通信媒体である、請求項１１に記載の方法。
【請求項１４】
前記特定された第１のプロトコルのコマンドフレームが、ＦＣＰコマンドフレーム内にパッケージ化されたバッファ書込みコマンドおよびバッファ読出しコマンドのうちの一方である、請求項１１に記載の方法。
【請求項１５】
仮想大容量記憶デバイスへ向けられる第１の通信媒体を介して、第１のプロトコルのコマンドを受信するロジックと、
前記受信されたコマンドを大容量記憶デバイス用のネイティブコマンドに翻訳するロジックと、
前記翻訳されたネイティブコマンドを第２の通信媒体を介して大容量記憶デバイスへ送信するロジックと、
選択された第１のプロトコルのコマンド内にパッケージ化された大容量記憶デバイス用のネイティブコマンドを受信し、前記大容量記憶デバイス用のネイティブコマンドを、翻訳せずに大容量記憶デバイスへ転送するロジックと
を備えるストレージシェルフ・ルータ。
【請求項１６】
翻訳された大容量記憶デバイス用のコマンドに対する応答を、前記第２の通信媒体を介して大容量記憶デバイスから受信し、前記応答を第１プロトコルの応答に翻訳し、前記第１プロトコルの応答を前記第１の通信媒体へ転送するロジックと、
翻訳されていない大容量記憶デバイス用のコマンドに対する応答を、前記第２の通信媒体を介して大容量記憶デバイスから受信し、前記応答を翻訳せずに第１プロトコルの応答にパッケージ化し、第１プロトコルの応答内にパッケージ化された前記翻訳されていない応答を前記第１の通信媒体へ転送するロジックと
をさらに含む、請求項１５記載のストレージシェルフ・ルータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多数の個別の大容量記憶デバイスにより構成されたディスクアレイ及びその他の大容量記憶デバイスに関し、特に、１台以上の付加的なストレージシェルフ・ルータ（storage-shelf router）と共に併用されるストレージシェルフ・ルータの集積回路型実施及びパスコントローラカード（path controller card）と、ディスクアレイ・コントローラのような外部処理エンティティが、ストレージシェルフ内のディスクドライブと、ディスクドライブ内並びにストレージシェルフ及びパスコントローラカード内に格納された種々のデータ構造に直接的にアクセスするためのトンネリング（tunneling）方法及びシステムに関する。
【背景技術】
【０００２】
（関連出願の相互参照）
本願は、２００３年１月２３日に出願された第１０／３４１８３５号出願の一部継続出願である２００３年６月２３日に出願された第１０／６０２５２９号出願の一部継続出願である。
【０００３】
（背景技術）
ファイバチャネル（Fibre Channel：ＦＣ）は、コンピュータと周辺デバイスの複数の様々な組み合わせを相互接続するデータ通信ネットワークのアーキテクチャ及びプロトコルである。ＦＣは、スモールコンピュータシステムインターフェイス（ＳＣＳＩ）プロトコルを含む種々の上位レベルプロトコルをサポートする。コンピュータ又は周辺デバイスは、ＦＣポートと、銅線または光ファイバとを介してネットワークに連結される。ＦＣポートは、トランシーバ及びインターフェイスコントローラを含み、ＦＣポートを収容するコンピュータ周辺デバイスは「ホスト」と呼ばれる。ＦＣポートは、ペリフェラルコンピュータインターフェイス（ＰＣＩ）バスのようなローカルデータバスを介してホストとデータを交換する。インターフェイスコントローラは、ファイバチャネルと、ＦＣポートが存在するコンピュータまたは周辺デバイスとの間で低レベルプロトコル交換を実施する。
【０００４】
コンピュータネットワーク内の遠隔のデータにアクセスする一般的な実例はクライアント／サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータはサーバコンピュータとの間でデータを読み書きするための要求を送信する。サーバコンピュータは、クライアントサーバがデータを読み書きする権限及び許可を与えられているかどうかをチェックし、要求された読出し（READ）動作又は書込み（WRITE）動作を特定の大容量記憶デバイスにマッピングし、書込み動作の場合にはクライアントコンピュータから大容量記憶デバイスへのデータの転送の際に仲介者として、又は、読出し動作の場合には大容量記憶デバイスからクライアントへのデータの転送の際に仲介者として機能することによって要求を処理する。
【０００５】
現時点で利用可能であり、かつ、以前に利用可能である一般的な通信ネットワークアーキテクチャにおいて、サーバコンピュータはローカルエリアネットワーク（ＬＡＮ）を介してクライアントコンピュータと通信し、サーバコンピュータは、ＳＣＳＩバスのようなローカルバスを介して複数の大容量記憶デバイスと通信する。このようなシステムにおいて、サーバは２個の異種通信媒体の間のブリッジに相当するので、サーバは、読出し又は書込み動作の結果として転送されたデータを記憶し、回送することが要求される。ＦＣの出現によって、クライアントコンピュータ、サーバコンピュータ、及び大容量記憶デバイスはすべて、単一の通信媒体によって対称的に相互接続される。従来型のクライアント／サーバアーキテクチャは、上記のＬＡＮ及びＳＣＳＩネットワークで使用されるプロトコルと同じタイプのクライアント／サーバプロトコルを使用してＦＣに移植される。
【０００６】
高容量ディスクドライブを含むＳＣＳＩバス互換性大容量記憶デバイスは、特に、中規模及び大規模コンピュータシステムにおいて、広く利用可能であり、広く使用される。複数のＦＣベースシステムは、１台以上のＦＣポートと、ディスクドライブがＦＣレスポンダとして機能するために必要とされるロジックとがそれぞれに含まれるＦＣ互換性ディスクドライブを利用する。パーソナルコンピュータ（ＰＣ）を含む小規模システムにおいて、統合ドライブエレクトロニクス（Integrated Drive Electronics：ＩＤＥ）又はアドバンスト・テクノロジー・アタッチメント（Advanced Technology Attachment：ＡＴＡ）ディスクドライブと呼ばれるディスクドライブの種々のファミリーが広く利用される。シリアルＡＴＡディスク（ＳＡＴＡ）は、一般的に、業界標準アーキテクチャ（Industry Standard Architecture：ＩＳＡ）バスを介してシステムと相互接続される。
【０００７】
本発明は、ＦＣ技術、ＳＣＳＩ技術、及びＩＤＥ／ＡＴＡ技術に関係する。以下に、各々を、３つの別個のサブセクションで、順番に記載する。これらの技術の一部又は全部に精通している当業者は、ＦＣベースのディスクアレイを説明するこのセクションの最後のサブセクション、及びそのサブセクションの直後に続く発明の要約のセクションへ飛ばし読みすることを望むであろう。
【０００８】
ファイバチャネル
ファイバチャネル（ＦＣ）は、以下の表１Ａおよび表１Ｂに掲載された規格文書を含む複数のＡＮＳＩ規格文書によって規定され、記載されている。
【表１Ａ】
2007501987.tif 000002
【表１Ｂ】
2007501987.tif 000003
表１Ａおよび表１Ｂに掲載された文書、及びファイバチャネルに関するさらなる情報は、以下のアドレス：“http://www.t11.org/index.htm”及び“http://www.fibrechannel.com”を有するワールドワイドウェブホームページで入手できる。
【０００９】
以下のＦＣの説明は、本発明の検討を容易にするためこれらの文書に記載された情報の一部を紹介し要約することを目的とする。以下の説明中で紹介されたいずれかの話題についてのより詳細な検討を望むならば、上記の文書を参考にされたい。
【００１０】
ＦＣは、一般的に、１台以上の通信媒体によって相互接続されたコンピュータ、ワークステーション、周辺デバイス、及びディスクアレイのような周辺デバイスの配列又は集合であるＦＣノード間のデータ通信のためのアーキテクチャ及びプロトコルである。通信媒体には、シールドツイストペア接続、同軸ケーブル及び光ファイバが含まれる。ＦＣノードは、少なくとも１台のＦＣポート及びＦＣリンクを介して通信媒体に接続される。ＦＣポートは、ＦＣノードの処理コンポーネントとレジスタ及びメモリインターフェイスを共用し、ハードウェアとファームウェアにおいて、ＦＣプロトコルの下位レベルを実施するＦＣホストアダプタ又はＦＣコントローラである。ＦＣノードは、一般に、共有メモリ内の共有データ構造を使用し、かつ、ＦＣポート内の制御レジスタを使用して、ＦＣポートとデータ及び制御情報を交換する。ＦＣポートは、電線又は光学ストランドにより構成されたリンクを介して通信媒体に接続された、シリアルの送信機及び受信機コンポーネントを含む。
【００１１】
以下の説明中、「ＦＣ」は、一般的なファイバチャネルアーキテクチャ及びプロトコルを引用するために形容詞として使用され、ファイバチャネル通信媒体の例を引用するために名詞として使用される。したがって、ＦＣ（アーキテクチャ及びプロトコル）ポートは、ＦＣ（通信媒体）からＦＣ（アーキテクチャ及びプロトコル）シーケンスを受信する。
【００１２】
ＦＣアーキテクチャ及びプロトコルは、図１Ａ〜１Ｃに表された３種類の相互接続トポロジーをサポートする。図１Ａは、３種類の相互接続トポロジーのなかで最も単純な「ポイントツーポイントトポロジー（point-to-point topology）」と呼ばれる相互接続トポロジーを表す。図１Ａに表されたポイントツーポイントトポロジーでは、第１ノード１０１は、第１ノード１０１のＦＣポート１０４の送信機１０３を第２ノード１０２のＦＣポート１０６の受信機１０５に直接接続し、第２ノード１０２のＦＣポート１０６の送信機１０７を第１ノード１０１のＦＣポート１０４の受信機１０８に直接接続することにより第２ノード１０２に直結される。ポイントツーポイントトポロジーで使用されるポート１０４及び１０６はＮ＿Ｐｏｒｔと呼ばれる。
【００１３】
図１Ｂは、「ＦＣ調停ループトポロジー（FC arbitrated loop topology）」と呼ばれる少し複雑なトポロジーを表す。図１Ｂは調停ループ内で相互接続された４台のノード１１０〜１１３を表す。電気的又は光学的バイナリデータにより構成される信号は、環状にループを周回してあるノードから次のノードへ転送される。あるノードの送信機はループ内の次のノードの受信機に直接接続され、たとえば、ノード１１１に関連した送信機１１４の場合、送信機１１４はノード１１２に関連した受信機１１５に直接接続される。二つのタイプのＦＣポートが調停ループ内でＦＣノードを相互接続するために使用される。調停ループで使用される最も一般的なタイプのポートは「ＮＬ＿Ｐｏｒｔ」と呼ばれる。「ＦＬ＿Ｐｏｒｔ」と呼ばれる特別のタイプのポートは、後述されるように、ＦＣ調停ループをＦＣファブリックトポロジーと相互接続するため使用される。１台のＦＬ＿Ｐｏｒｔだけが調停ループトポロジー内にアクティブに組み込まれる。調停ループトポロジーは、最大で１２７台までのアクティブＦＣポートを含み、付加的な非参加ＦＣポートを含む。
【００１４】
ＦＣ調停ループトポロジーでは、ノードは、調停ループの制御を争い、すなわち、調停ループの制御を調停する。一般に、２台以上のノードが制御を争う場合、最小ポートアドレスを有するノードが制御を得る。全ノードが最終的には妥当な時間内に確実に制御を取得するため、公平性アルゴリズム（fairness algorithm）がノードによって実施される。ノードがループの制御を取得したとき、そのノードは調停ループ内の他のノードに対するチャネルを開くことが可能である。半二重チャネルでは、一方のノードがデータを送信し、他方のノードがデータを受信する。全二重チャネルでは、データは第１ノードによって送信され、第２ノードによって受信され、同時に、データが第２ノードによって送信され、第１ノードによって受信される。例えば、図１Ｂの調停ループにおいて、ノード１１１がノード１１３と全二重チャネルを開くならば、ノード１１１からノード１１３までそのチャネルを介して送信されるデータはノード１１２のＮＬ＿Ｐｏｒｔ１１６を通り、ノード１１３によってノード１１１へ送信されるデータはノード１１０のＮＬ＿Ｐｏｒｔ１１７を通る。
【００１５】
図１Ｃは、「ＦＣファブリック（FC fabric）」と呼ばれる、最も一般的であり、かつ、最も複雑なＦＣトポロジーを表す。ＦＣファブリックは、図１Ｃにおいて、４台のＦＣノード１１９〜１２２が接続された不揃いな形状の中心オブジェクト１１８によって表現される。ＦＣノード１１９〜１２２内のＮ＿Ｐｏｒｔ１２３〜１２６はファブリック１１８内のＦ＿Ｐｏｒｔ１２７〜１３０に接続される。ファブリックは、電話システムと機能が類似したスイッチ型又はクロスポイントスイッチトポロジーである。データは、「ファブリッ・エレメント（fabric element）」と呼ばれるスイッチ又は交換機を介してＦ＿Ｐｏｒｔの間でファブリックによって経路制御される。あるＦ＿Ｐｏｒｔと別のＦ＿Ｐｏｒｔとの間でファブリックを通る経路は複数存在する可能性がある。Ｆ＿Ｐｏｒｔに関連したファブリック内でのデータのルーティング（routing、経路指定）とノードのアドレス指定（addressing）は、ＦＣノード又はＮ＿Ｐｏｒｔではなく、ＦＣファブリックによって取り扱われる。
【００１６】
ＦＣはシリアル通信媒体である。データは、非常に高い転送レートで同時に１ビットずつ転送される。図２は、ＦＣネットワークを経由する転送のため、時間的に、データを組織化する非常に簡単な階層を示す。最下位概念レベルでは、データはデータビットのストリーム２００であると考えられる。ＦＣネットワークによってサポートされる最小のデータのユニット（すなわち、ひとまとまりのデータビット）は、ＦＣポートによって８ビット文字として復号化された１０ビット文字である。ＦＣプリミティブは１０ビットの文字又はバイトにより構成される。ある種のＦＣプリミティブは、ＦＣポート間で交換される制御情報を搬送するため利用される。データ編成の次のレベル、すなわち、ＦＣプロトコルに関する基本レベルはフレームである。７個のフレーム２０２〜２０８が図２に表されている。フレームは３６バイト〜２１４８バイトにより構成され、デリミッタ、ヘッダ、オプショナルヘッダ、及び０〜２０４８バイトのデータを含む。第１のＦＣフレームは、例えば、水平方向の括弧２０１によって囲まれたデータビットのストリーム２００のデータビットに対応する。ＦＣプロトコルは、シーケンスと呼ばれる次の上位レベルの編成レベルを指定する。第１のシーケンス２１０及び第２のシーケンス２１２の一部分が図２に表されている。第１のシーケンス２１０は第１から第４までのフレーム２０２〜２０５により構成される。第２のシーケンス２１２は第５から第７までのフレーム２０６〜２０８と、図示されないさらなるフレームとにより構成される。ＦＣプロトコルは、エクスチェンジ（exchange）と呼ばれる第３の編成レベルを指定する。エクスチェンジ２１４の一部分が図２に表されている。このエクスチェンジ２１４は、図２に表された少なくとも第１のシーケンス２１０及び第２のシーケンス２１２で構成される。このエクスチェンジは、或いは、第１から第７までのフレーム２０２〜２０８と、第２のシーケンス２１２及びエクスチェンジ２１４を構成するさらなるシーケンス内に収容された付加的なフレームとにより構成されているようにも見える。
【００１７】
ＦＣは全二重データ伝送媒体である。フレーム及びシーケンスは、オリジネータ（originator）およびレスポンダの間、またはイニシエータ（initiator）およびターゲット（target）の間で両方向へ同時に送られる。エクスチェンジは、読出し入出力トランザクション又は書込み入出力トランザクションのような単一の入出力トランザクションの間に、オリジネータとレスポンダとの間で交換された全シーケンスとシーケンス内のフレームとを含む。ＦＣプロトコルは、インターネットプロトコル（ＩＰ）、スモールコンピュータシステムインタフェース（ＳＣＳＩ）プロトコル、ハイパフォーマンスパラレルインターフェイス（ＨＩＰＰＩ）、及びインテリジェントペリフェラルインターフェイス（ＩＰＩ）を含む任意の個数の上位レベルデータ交換プロトコルに従ってデータを転送するように設計される。ＳＣＳＩバスアーキテクチャは以下のサブセクションに記載され、このサブセクション及び残りのサブセクションにおける後続の議論の多くはＦＣプロトコル内に埋め込まれたＳＣＳＩプロトコルに重点を置く。ＳＣＳＩプロトコルのファイバチャネルへの標準的な適応は、本明細書中では、以下では「ＦＣＰ」として参照される。したがって、ＦＣは、ＳＣＳＩバス及びその他の周辺相互接続バスの特色であるマスタースレーブ型の通信パラダイム、並びに、インターネットを実現するために使用される通信プロトコルのような比較的開放型であり、組織化されていない通信プロトコルをサポート可能である。イニシエータ又はターゲットのＳＣＳＩバスアーキテクチャの概念は、ＦＣＰでは進展させられ、上記のように設計され、ＦＣ経由の伝送のためのＳＣＳＩコマンド及びデータ交換をカプセル化する。
【００１８】
図３は標準的なＦＣフレームの内容を表す。ＦＣフレーム３０２は、５個の上位レベルセクション３０４、３０６、３０８、３１０及び３１２を備える。第１の上位レベルセクションは、フレーム開始（start-of-frame：SOF）デリミッタ３０４と呼ばれ、フレームの先頭にマークを付ける４バイトを備える。次の上位レベルセクションは、フレームヘッダ３０６と呼ばれ、アドレス指定情報、シーケンス情報、エクスチェンジ情報、及び種々の制御フラグを格納する２４バイトを含む。フレームヘッダ３１４のより詳細な図は図３のＦＣフレームから拡張されて表示されている。宛先識別子（destination identifier：Ｄ＿ＩＤ）、すなわち、ＤＥＳＴＩＮＡＴＩＯＮ＿ＩＤ３１６は、フレームの宛先ＦＣポートを示す２４ビットのＦＣアドレスである。ソース識別子（source identifier：Ｓ＿ＩＤ）、すなわち、ＳＯＵＲＣＥ＿ＩＤ３１８は、フレームを送信したＦＣポートを示す２４ビットのアドレスである。オリジネータ識別子、すなわち、ＯＸ＿ＩＤ３２０と、レスポンダ識別子３２２、すなわち、ＲＸ＿ＩＤは、オリジネータ及びレスポンダ、またはイニシエータおよびターゲットのＦＣポートに関してフレームが属するエクスチェンジを特定する３２ビットのエクスチェンジ識別子を一体となって構成する。シーケンス識別子、すなわち、ＳＥＱ＿ＩＤ３２４は、フレームが属するシーケンスを特定する。
【００１９】
次の上位レベルセクション３０８は、データ・ペイロードと呼ばれ、ＦＣフレーム内に詰め込まれた実際のデータを格納する。データ・ペイロードは、データと、ＩＰ及びＳＣＳＩのような上位レベルプロトコルに従って転送されたカプセル化プロトコル情報とを格納する。図３は、ＳＣＳＩプロトコルに準拠したデータ転送のため使用される４個の基本的なタイプのデータ・ペイロードのレイアウト３２６〜３２９を表す。これらのうちの第１のフォーマット３２６は、ＦＣＰコマンド（ＦＣＰ＿ＣＭＮＤ）と呼ばれ、イニシエータからターゲットへＳＣＳＩコマンドを送信するため使用される。ＦＣＰ論理ユニット番号（ＦＣＰ＿ＬＵＮ）フィールド３３０は、ある種の実施において、特定のＳＣＳＩ−バスアダプタ、ＳＣＳＩ−バスアダプタに関連したターゲットデバイス、及び指定されたターゲットＳＣＳＩデバイスと関連した論理デバイスに対応する論理ユニット番号（ＬＵＮ）を指定する８バイトのアドレスを含み、一体としてＦＣＰ＿ＣＭＮＤのターゲットを表現する。別の実施では、ＦＣＰ＿ＬＵＮフィールド３３０は、ＳＣＳＩ−バスアダプタ、ＳＣＳＩ−バスアダプタに関連したターゲットデバイス、及び指定されたターゲットＳＣＳＩデバイスと関連した論理デバイスに対応するＬＵＮを決定するためターゲットＦＣホストアダプタによって使用されるインデックス又は参照番号を格納する。ＳＣＳＩ読出し又は書込み入出力コマンドのような実際のＳＣＳＩコマンドは、１６バイトフィールドのＦＣＰ＿ＣＤＢ３３２に格納される。
【００２０】
図３に表された第２のタイプのデータ・ペイロードのフォーマット３２７は、ＦＣＰ転送準備完了（ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ）レイアウトと呼ばれる。このデータ・ペイロードフォーマットは、ターゲットがデータの受信又は送信を開始する準備を完了した旨のターゲットによるイニシエータへの通知として使用される。図３に表された第３のタイプのデータ・ペイロードのフォーマット３２８はＦＣＰデータ（ＦＣＰ＿ＤＡＴＡ）フォーマットである。ＦＣＰ＿ＤＡＴＡフォーマットは、ＳＣＳＩ入出力トランザクションの実行の結果として、ＳＣＳＩデータ記憶デバイスから読出し、又は、ＳＣＳＩデータ記憶デバイスへ書込みされている実際のデータを転送するため使用される。図３に表された最後のデータ・ペイロードのフォーマット３２９は、ＦＣＰレスポンス（ＦＣＰ＿ＲＳＰ）レイアウトと呼ばれ、ＳＣＳＩ状態バイト３３４、並びに、その他のＦＣＰ状態情報を、入出力トランザクションの完了次第にターゲットからイニシエータへ逆に転送するため使用される。
【００２１】
ＳＣＳＩバスアーキテクチャ
コンピュータバスは電気信号線の組であり、それを介してコンピュータコマンド及びデータがコンピュータシステムの処理コンポーネント、記憶コンポーネント、及び入出力（Ｉ／Ｏ）コンポーネントの間で伝送される。ＳＣＳＩ  入出力バスは、ハードディスクドライブ及びＣＤ−ＲＯＭドライブのような大容量記憶デバイスをコンピュータシステムのメモリコンポーネント及び処理コンポーネントと相互接続するため最も広く利用され、かつ、人気のあるコンピュータバスである。ＳＣＳＩバスアーキテクチャは、ＳＣＳＩ−１、ＳＣＳＩ−２及びＳＣＳＩ−３の三つの主要な規格に規定されている。ＳＣＳＩ−１規格及びＳＣＳＩ−２規格は、米国規格協会（ＡＮＳＩ）規格文書“Ｘ３．１３１−１９８６”及び“Ｘ３．１３１−１９９４”にそれぞれ公表されている。ＳＣＳＩ−３規格はＡＮＳＩ委員会によって現在開発中である。ＳＣＳＩバスアーキテクチャの概要は非特許文献１に記載されている。
【００２２】
図４は、ＳＣＳＩバスを含む一般的なパーソナルコンピュータ（ＰＣ）のブロック図である。ＰＣ４００は、高速ＣＰＵバス４０６によってシステムコントローラ４０４に連結された中央処理ユニット又はプロセッサ（ＣＰＵ）４０２を含む。システムコントローラは、次に、メモリバス４１０を介してシステムメモリコンポーネント４０８に連結される。システムコントローラ４０４は、さらに、低速の業界標準アーキテクチャ（ＩＳＡ）バス４１４及びＳＣＳＩバス４１６と相互接続されたペリフェラルコンポーネント相互接続（ＰＣＩ）バス４１２を介して種々の周辺デバイスに連結される。ＰＣＩバスのアーキテクチャは、非特許文献２に記載されている。相互接続されたＣＰＵバス４０６、メモリバス４１０、ＰＣＩバス４１２及びＩＳＡバス４１４は、ＣＰＵがデータ及びコマンドを、コンピュータシステムに収容された種々の処理コンポーネント及びメモリコンポーネントと入出力デバイス（I/O device）と交換することを可能にさせる。一般に、ビデオディスプレイデバイス４１８のような非常に高速、かつ、高帯域幅の入出力デバイスはＰＣＩバスに直接接続される。キーボード４２０及びポインティングデバイス（図示せず）のような低速入出力デバイス４２０はＩＳＡバス４１４に直接接続される。ＩＳＡバスはバスブリッジ・コンポーネント４２２を介してＰＣＩバスと相互接続される。ハードディスク、フレキシブルディスクドライブ、ＣＤ−ＲＯＭドライブ及びテープドライブ４２４〜４２６のような大容量記憶デバイスはＳＣＳＩバス４１６に接続される。ＳＣＳＩバスはＳＣＳＩ−バスアダプタ４３０を介してＰＣＩバス４１２と相互接続される。ＳＣＳＩ−バスアダプタ４３０は、Ｓｙｍｂｏｉｓの５３Ｃ８ｘｘＳＣＳＩプロセッサのファミリーから選択されたプロセッサのようなプロセッサコンポーネントを含み、標準的なＰＣＩバスプロトコルを使用してＰＣＩバス４１２とインターフェイスをとる。ＳＣＳＩ−バスアダプタ４３０は、部分的に後述されるＳＣＳＩバスプロトコルを使用してＳＣＳＩバス４１６とインターフェイスをとる。ＳＣＳＩ−バスアダプタ４３０は、ＳＣＳＩバスに接続された各大容量記憶デバイス４２４〜４２６、又は、ＳＣＳＩデバイス内に一般的に内蔵されたＳＣＳＩコントローラ（図示せず）とコマンド及びデータを交換する。ＳＣＳＩコントローラは、ＳＣＳＩバスを介してＳＣＳＩアダプタから受信したＳＣＳＩコマンドを解釈及び応答し、論理デバイスとインターフェイスをとり論理デバイスを制御することによりＳＣＳＩコマンドを実施するハードウェア／ファームウェアコンポーネントである。論理デバイスは、１台以上の物理デバイス、又は、１台以上の物理デバイスの一部分に対応する。物理デバイスは、ディスク、テープ及びＣＤ−ＲＯＭドライブのようなデータ記憶デバイスを含む。
【００２３】
入出力コマンドと呼ばれる二つの重要なタイプのコマンドは、論理デバイスからのデータの読出しと論理デバイスへのデータの書込みをＳＣＳＩデバイスに命令する。入出力トランザクションは、コンピュータシステムの２台のコンポーネント間でのデータの交換であり、ＣＰＵ４０２のような処理コンポーネントによって一般的に開始され、読出し入出力コマンド又は書込み入出力コマンドによって、部分的に、実施される。したがって、入出力トランザクションは、読出し入出力トランザクション及び書込み入出力トランザクションを含む。
【００２４】
ＳＣＳＩバス４１６は、複数のデータビットを同時に伝送できるパラレルバスである。ＳＣＳＩバスによって同時に伝送され得るデータビットの個数はバスの幅と呼ばれる。様々なタイプのＳＣＳＩバスは８ビット、１６ビット及び３２ビットの幅を有する。１６ビット及び３２ビットのＳＣＳＩバスはワイドＳＣＳＩバスと呼ばれる。
【００２５】
すべてのコンピュータバス及びプロセッサと同様に、ＳＣＳＩバスは、演算とバス上のデータ転送の速度を決めるクロックによって制御される。ＳＣＳＩバスの幅と、ＳＣＳＩバスが動作するクロックレートとの組み合わせは、１秒当たりにＳＣＳＩバスを介して伝送されるバイト数、すなわち、ＳＣＳＩバスの帯域幅を決める。様々なタイプのＳＣＳＩバスは毎秒２メガバイト（Ｍｂｙｔｅ）未満から毎秒４０Ｍｂｙｔｅまでに達し、今後は毎秒８０Ｍｂｙｔｅまで、おそらく毎秒１６０Ｍｂｙｔｅまでの増加が計画されている帯域幅を有する。帯域幅の増加はＳＣＳＩバスの物理長の限界の増加に伴って起こる。
【００２６】
図５はＳＣＳＩバステクノロジーを示す。コンピュータシステム５０２、又は、その他のハードウェアシステムは、１台以上のＳＣＳＩ−バスアダプタ５０４及び５０６を含む。ＳＣＳＩ−バスアダプタ、ＳＣＳＩ−バスアダプタが制御するＳＣＳＩバス、及びＳＣＳＩバスに取り付けられた周辺デバイスは、一体となってドメインを構成する。図５においてＳＣＳＩ−バスアダプタ５０４は第１のドメイン５０８と関連付けられ、ＳＣＳＩ−バスアダプタ５０６は第２のドメインと関連付けられる。殆どの現行のＳＣＳＩ−２バス実施は、１５台の異なるＳＣＳＩデバイス５１３〜５１５及び５１６〜５１７が単一のＳＣＳＩバスに取り付けられることを可能にする。図５において、ＳＣＳＩデバイス５１３〜５１５は、ＳＣＳＩ−バスアダプタ５０６によって制御されるＳＣＳＩバス５１８に取り付けられ、ＳＣＳＩデバイス５１６〜５１７はＳＣＳＩ−バスアダプタ５０４によって制御されるＳＣＳＩバス５２０に取り付けられる。各ＳＣＳＩ−バスアダプタ及びＳＣＳＩデバイスは、特定のＳＣＳＩバスにおいてデバイス又はアダプタを一意に特定するＳＣＳＩ識別番号、すなわち、ＳＣＳＩ＿ＩＤを有する。慣例的に、ＳＣＳＩ−バスアダプタのＳＣＳＩ＿ＩＤは７であり、ＳＣＳＩバスに取り付けられたＳＣＳＩデバイスのＳＣＳＩ＿ＩＤは、０から６まで、及び８から１５まで変動する。ＳＣＳＩデバイス５１３のようなＳＣＳＩデバイスは、各論理デバイスが１台以上の物理デバイスの一部分を構成する複数の論理デバイスとインターフェイスをとる。各論理デバイスは、論理デバイスを制御するＳＣＳＩデバイス毎に論理デバイスを一意に特定する論理ユニット番号（ＬＵＮ）によって特定される。例えば、ＳＣＳＩデバイス５１３は、それぞれ、０、１及び２のＬＵＮを有する論理デバイス５２２〜５２４を制御する。ＳＣＳＩの用語によれば、ＳＣＳＩバス上で入出力コマンドを開始するデバイスはイニシエータ（initiator）と呼ばれ、ＳＣＳＩバスを介して入出力コマンドを受信し、ＳＣＳＩデバイスに入出力動作の実行を命令するＳＣＳＩデバイスはターゲット（target）と呼ばれる。
【００２７】
一般に、ＳＣＳＩ−バスアダプタ５０４及び５０６のようなＳＣＳＩ−バスアダプタは、コマンドをターゲットデバイスへ送信することにより入出力動作を開始する。ターゲットデバイス５１３〜５１５及び５１６〜５１７は、ＳＣＳＩバスから入出力コマンドを受信する。ターゲットデバイス５１３〜５１５及び５１６〜５１７は、次に、論理デバイスからデータを読み出し、そのデータを、ＳＣＳＩバスを介して、イニシエータへ返送するために、又は、イニシエータからＳＣＳＩバスを介して受信されたデータを論理デバイスへ書き込むために制御する１台以上の論理デバイスとインターフェイスをとることにより、コマンドを実施する。最後に、ターゲットデバイス５１３〜５１５及び５１６〜５１７は、コマンドの実施の成功又は失敗を示す状態メッセージを用いてＳＣＳＩバスを介してイニシエータに応答する。
【００２８】
図６Ａ〜６Ｃは、読出し及び書込み入出力動作の開始及び実施に関与するＳＣＳＩプロトコルを示す。読出し及び書込み入出力動作はＳＣＳＩデバイスによって実行される入出力動作の大半を構成する。ＳＣＳＩバスによって相互接続された大容量記憶デバイスのシステムの動作の効率を最大化するための努力は、最も一般的には、読出し及び書込み入出力動作が実行される効率を最大化することへ向けられる。したがって、以下の議論では、種々のハードウェアデバイスのアーキテクチャ上の特色が読出し及び書込み動作に関して説明される。
【００２９】
図６Ａは、ＳＣＳＩイニシエータ、最も一般的にはＳＣＳＩ−バスアダプタによるＳＣＳＩターゲット、最も一般的には１台以上の論理デバイスに関連したＳＣＳＩデバイスに内蔵されたＳＣＳＩコントローラへの読出し又は書込み入出力コマンドの送信を表す。読出し又は書込み入出力コマンドの送信は、ＳＣＳＩ入出力動作のコマンドフェーズと呼ばれる。図６Ａは、中心垂直線６０６によってイニシエータ６０２のセクションとターゲット６０４のセクションに分割される。イニシエータセクションとターゲットセクションの両方は、ＳＣＳＩバスの状態を記述する「状態」６０６及び６０８という名前が付けられた列と、イニシエータ及びターゲットのそれぞれに関連したＳＣＳＩバスイベントを記述する「イベント」６１０及び６１２という名前が付けられた列とを含む。入出力コマンドの送信に関与するバス状態及びバスイベントは、図６Ａの上端から図６Ａの下端まで時間順に並べられる。図６Ｂ〜６Ｃはこの上記のフォーマットに従う。
【００３０】
図６Ａに示されたイニシエータＳＣＳＩ−バスアダプタからターゲットＳＣＳＩデバイスへの入出力コマンドの送信は、ターゲットＳＣＳＩデバイスによる読出し又は書込み入出力動作を開始する。図４を参照すると、ＳＣＳＩ−バスアダプタ４３０は入出力トランザクションの一部として入出力動作を開始する。一般に、ＳＣＳＩ−バスアダプタ４３０は、ＰＣＩバス４１２、システムコントローラ４０４、及びＣＰＵバス４０６を介して、ＳＣＳＩ−バスアダプタに読出し動作又は書込み動作のいずれかを実行することを命令するＣＰＵ４０２から読出し又は書込みコマンドを受信する。読出し動作の際、ＣＰＵ４０２は、大容量記憶デバイス４２４〜４２６からデータを読み出し、そのデータをＳＣＳＩバス４１６、ＰＣＩバス４１２、システムコントローラ４０４、及びメモリバス４１０を介して、システムメモリ４０８内のあるロケーションへ転送することをＳＣＳＩ−バスアダプタ４３０に命令する。書込み動作の際、ＣＰＵ４０２は、システムメモリ４０８から、メモリバス４１０、システムコントローラ４０４、及びＰＣＩバス４１２を介して、ＳＣＳＩ−バスアダプタ４３０にデータを転送することをシステムコントローラ４０４に命令し、ＳＣＳＩバス４１６を介して、データが書き込まれる大容量記憶デバイス４２４〜４２６へデータを送信することをＳＣＳＩ−バスアダプタ４３０に命令する。
【００３１】
図６Ａは、現在ＳＣＳＩデバイス上で伝送されているコマンド又はデータが存在しないことを示すバスフリー（ＢＵＳ  ＦＲＥＥ）状態６１４のＳＣＳＩバスで始まる。イニシエータ、すなわち、ＳＣＳＩ−バスアダプタは、バスを調停（ARBITRATION）状態６１６とするためＳＣＳＩバスのＢＳＹ、Ｄ７及びＳＥＬ信号線をアサート（assert）する。この状態では、イニシエータは、デバイスのすべてにＳＣＳＩバス上でコマンドを送信する意図を知らせる。いかなる時点でも１台のデバイスだけがＳＣＳＩバスの動作を制御するので、調停が必要である。イニシエータがＳＣＳＩバスの制御を取得すると仮定するならば、イニシエータは、次に、ＳＣＳＩバスを選択（SELECTION）状態６１８に入れるため、ＡＴＮ信号線、及びターゲットＳＣＳＩ＿ＩＤに対応するＤＸ信号線をアサートする。イニシエータ又はターゲットは、上記の調停状態６１６から選択状態６１８への状態の変化のようなＳＣＳＩバス状態変化を実行するため、特定のシーケンスで種々のＳＣＳＩ信号線をアサートし、ドロップさせる。これらのシーケンスは、特許文献１やＡＮＳＩ規格に記載されているので、これ以上の説明は行われない。
【００３２】
ターゲットがイニシエータによって選択されたことをターゲットが感知したとき、ターゲットは、入出力動作のコマンドフェーズを終了するためＳＣＳＩバスの制御６２０を引き受ける。ターゲットは、次に、メッセージアウト（MESSAGE OUT）状態６２２へ入るためにＳＣＳＩ信号線を制御する。メッセージアウト状態で起こる最初のイベントにおいて、ターゲットはイニシエータから識別（IDENTIFY）メッセージ６２３を受信する。識別メッセージ６２３は、後に続くコマンドメッセージがアドレス指定されるＬＵＮを特定する論理ユニット番号（LUN）フィールド６２４を含む。識別メッセージ６２３は、後に続く入出力コマンドをターゲットが実施する間にターゲットがＳＣＳＩバスとの接続を切断することを許可されたことをターゲットに知らせるために一般的にセットされるフラグ６２５をさらに含む。ターゲットは、次に、後続の入出力コマンドがどのようにキュー入れされるべきであるかをターゲットに知らせ、同時にターゲットにキュータグ６２７を供給するキュータグ（QUEUE TAG）メッセージ６２６を受信する。キュータグは入出力コマンドを特定するバイトである。ＳＣＳＩ−バスアダプタは、したがって、ＬＵＮ毎に２５６通りの入出力コマンドを同時に管理可能である。イニシエータＳＣＳＩ−バスアダプタのＳＣＳＩ＿ＩＤと、ターゲットＳＣＳＩデバイスのＳＣＳＩ＿ＩＤと、ターゲットＬＵＮと、キュータグとの組み合わせは、一体として、ＳＣＳＩバス内で後に続く入出力コマンドに対応する入出力動作を一意に特定するＩ＿Ｔ＿Ｌ＿Ｑネクサス参照番号を構成する。次に、ターゲットデバイスはコマンド（COMMAND）状態６２８へ入るためにＳＣＳＩバス信号線を制御する。コマンド状態において、ターゲットはイニシエータからの入出力コマンド６３０を要求し受信する。入出力コマンド６３０は、実行されるべき特別なコマンド、この場合には、読出しコマンド又は書込みコマンドを特定するオペコード（opcode）６３２と、そのコマンドによって指定された読出し又は書込み動作の開始点である論理デバイスの論理ブロックを特定する論理ブロック番号６３６と、コマンドの実行中に読み出されるか又は書き込まれるブロック数を指定するデータ長６３８とを含む。
【００３３】
ターゲットが入出力コマンドを受信し処理したとき、ターゲットデバイスは、ターゲットデバイスが切断メッセージ６４２をイニシエータデバイスに返信するメッセージイン（MESSAGE IN）状態６４０へ入るためにＳＣＳＩバス信号線を制御する。ターゲットは、一般に、ターゲットはコマンドによって指定された読出し又は書込み動作のため論理デバイスに準備させるために論理デバイスと相互作用を開始するので、ＳＣＳＩバスとの接続を切断する。ターゲットは、データを受信するバッファを準備する必要があり、ディスクドライブ又はＣＤ−ＲＯＭドライブの場合、ターゲットデバイスは、読出し又は書込みコマンドの開始点として指定された適切なブロックにシーク（seek）することを論理デバイスに命令する。切断によって、ターゲットデバイスは、ＳＣＳＩ−バスアダプタとターゲットデバイスとの間の付加的なメッセージ、コマンド、又は、データの伝送のためＳＣＳＩバスを解放する。このようにして、複数の異なる入出力動作がＳＣＳＩバス上で同時に多重化される。最終的に、ターゲットデバイスはＳＣＳＩバスをバスフリー状態６４４へ戻すためにＢＳＹ信号線をドロップさせる。
【００３４】
ターゲットデバイスは、次に、読出し又は書込み動作のため論理デバイスを準備させる。論理デバイスがデータを読み出し又は書き込む準備を完了したとき、入出力動作のデータフェーズが続く。図６Ｂは、ＳＣＳＩ入出力動作のデータフェーズを示す。ＳＣＳＩバスは最初にバスフリー状態６４６である。ターゲットデバイスは、読出し入出力コマンドに応答してデータを返送するか、又は、書込み入出力コマンドに応答してデータを受け取る準備が完了しているので、調停状態６４８へ入るためにＳＣＳＩバス信号線を制御する。ターゲットデバイスがＳＣＳＩバスの制御の調停に成功するならば、ターゲットデバイスは再選択（RESELECTION）状態６５０へ入るためにＳＣＳＩバス信号線を制御する。再選択状態は、図６Ａの上記の議論で説明された選択状態に類似しているが、ＳＣＳＩ−バスアダプタの選択を行うのはターゲットデバイスであり、ＳＣＳＩ−バスアダプタが選択状態であるターゲットデバイスを選択するのではない。
【００３５】
ターゲットデバイスがＳＣＳＩ−バスアダプタを選択すると、ターゲットデバイスはＳＣＳＩバスをメッセージイン状態６５２へ入れるためにＳＣＳＩバス信号線を操作する。メッセージイン状態では、ターゲットデバイスは、識別メッセージ６５４とキュータグメッセージ６５６の両方をＳＣＳＩ−バスアダプタへ送信する。これらのメッセージは、図６Ａに示されたイニシエータからターゲットへの入出力コマンドの伝送中にイニシエータによってターゲットデバイスへ送信された識別メッセージ及びキュータグメッセージと同じである。イニシエータは、読出し動作の場合にはターゲットからイニシエータへ続いてデータを送信するための入出力トランザクションを、或いは、書込み動作の場合にはイニシエータによって続いてデータが送信される入出力トランザクションを特定するために、I_T_L_Qネクサス参照番号（nexus reference number）と、イニシエータ及びターゲットデバイスのＳＣＳＩ＿ＩＤの組み合わせと、ターゲットＬＵＮと、キュータグメッセージに含まれるキュータグとを使用する。I_T_L_Qネクサス参照番号は、したがって、読出しの場合にターゲットデバイスからのデータを受信し、書込みの場合にターゲットデバイスへデータを送信する適切なバッファを見つけるために、ＳＣＳＩ−バスアダプタによって未解決の入出力コマンドのテーブルへのインデックスとして使用される入出力動作ハンドルである。
【００３６】
識別メッセージ及びキュータグメッセージを送信した後、ターゲットデバイスはデータ（ＤＡＴＡ）状態６５８へ遷移するためにＳＣＳＩ信号線を制御する。読出し入出力動作の場合、ＳＣＳＩバスはデータ入力（DATA IN）状態へ遷移する。書込み入出力動作の場合、ＳＣＳＩバスはデータ出力（DATA OUT）状態へ遷移する。ＳＣＳＩバスがデータ状態である間に、ターゲットデバイスは、各ＳＣＳＩバスクロックサイクル中に、データが送信される特別なＳＣＳＩの幅にビット数が一致するサイズを有するデータユニットを送信する。一般に、データの各ユニットの転送の一部として信号線ＡＣＫ及び信号線ＲＥＱを必要とするＳＣＳＩバス信号線ハンドシェイク（handshake）が存在する。読出し入出力コマンドの場合、例えば、ターゲットデバイスは、次のデータユニットをＳＣＳＩバスに置き、ＲＥＱ信号線をアサートする。イニシエータは、ＲＥＱ信号線のアサートを感知し、送信されたデータをＳＣＳＩバスから取り出し、データの受け取りを承認するためにＡＣＫ信号線をアサートする。このタイプのデータ転送は非同期転送と呼ばれる。ＳＣＳＩバスプロトコルは、ターゲットデバイスがイニシエータから最初の肯定応答（acknowledgement）を受信する前にある特定の個数のデータユニットを転送することをさらに許可する。同期転送と呼ばれるこの転送モードでは、最初のデータユニットの送信とその送信に対する肯定応答の受信との間の待ち時間（latency）は避けられる。データ送信中に、ターゲットデバイスは、セーブポインタ（SAVE POINTERS）メッセージ及びその後に続く切断メッセージをイニシエータへ送信し、次に、バスフリー状態へ入るようにＳＣＳＩバス信号線を制御することにより、データ送信を中断する。これは、ターゲットデバイスがさらなるデータを受信又は送信する前にそのターゲットデバイスが制御する論理デバイスと相互作用するために一時停止することを可能にさせる。ＳＣＳＩバスから切断した後、ターゲットデバイスは、ＳＣＳＩバスの制御を後で再び調停し、付加的な識別メッセージ及びキュータグメッセージをイニシエータへ送信するので、イニシエータはそのイニシエータが中断させられた時点でデータ受信又は転送を再開可能である。切断及び再接続６６０の一例は図６Ｂに表され、データ状態６５８を中断する。最終的に、入出力動作のすべてのデータが送信されたとき、ターゲットデバイスはメッセージイン状態６６２へ入るためにＳＣＳＩ信号線を制御し、そのメッセージイン状態では、ターゲットデバイスが切断メッセージをイニシエータへ送信し、場合によってセーブポインタメッセージが切断メッセージよりも先行する。切断メッセージを送信した後、ターゲットデバイスは、ＳＣＳＩバスがバスフリー状態６６４へ遷移するようにＢＳＹ信号線をドロップさせる。
【００３７】
図６Ｂに示されるように、入出力動作のためのデータの送信に続いて、ターゲットデバイスは、入出力動作の状態フェーズ中に状態をイニシエータへ返送する。図６Ｃは入出力動作の状態フェーズを示す。図６Ａ〜６Ｂのように、ＳＣＳＩバスは、バスフリー状態６６６から、図６Ｂのように、調停状態６６８、再選択状態６７０、及びメッセージイン状態６７２へ遷移する。メッセージイン状態６７２中のターゲットによるイニシエータへの識別メッセージ６７４及びキュータグメッセージ６７６の送信に続いて、ターゲットデバイスはステータス（STATUS）状態へ入るためにＳＣＳＩバス信号線を制御する。ステータス状態６７８では、ターゲットデバイスは、入出力コマンドが成功完了したかどうかを示すために単一の状態バイト６８４をイニシエータへ送信する。図６Ｃにおいて、成功完了に対応する状態バイト６８０は、０という状態コードで示され、ターゲットデバイスからイニシエータへ送信されることが表されている。状態バイトの送信に続いて、ターゲットデバイスは、次に、ターゲットデバイスがコマンド完了（COMMAND COMPLETE）メッセージ６８４をイニシエータへ送信するメッセージイン状態６８２へ入るためにＳＣＳＩバス信号線を制御する。この時点で、入出力動作が完了している。ターゲットデバイスは、次に、ＳＣＳＩバスがバスフリー状態６８６へ戻るようにＢＳＹ信号線をドロップさせる。ＳＣＳＩ−バスアダプタは、この時点で、入出力コマンドの割当部分を終え、そのコマンドを実行するため割り付けられた内部リソースを解放し、完了メッセージ又は状態を、ＰＣＩバスを介して、ＣＰＵへ返送することが可能である。
【００３８】
ＳＣＳＩプロトコルのＦＣＰへのマッピング
図７Ａ及び７Ｂは、図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣＰシーケンスのマッピングを示す。図７Ａ〜７Ｂにおいて、ターゲットＳＣＳＩアダプタは、ＦＣＰホストアダプタと一緒にパッケージ化されていると仮定され、ターゲットＳＣＳＩアダプタはＦＣを介してイニシエータと通信可能であり、ＳＣＳＩバスを介してターゲットＳＣＳＩデバイスと通信可能である。図７Ａは、読出し入出力トランザクションに対するＦＣＰシーケンスとＳＣＳＩフェーズ及び状態との間のマッピングを表す。トランザクションは、イニシエータがＦＣを介してＦＣＰコマンド（ＦＣＰ＿ＣＭＮＤ）７０２データ・ペイロードを含む単一フレームＦＣＰシーケンスをターゲットＳＣＳＩアダプタへ送信するときに開始される。ターゲットＳＣＳＩ−バスアダプタがＦＣＰコマンドフレームを受信するとき、ターゲットＳＣＳＩ−バスアダプタは、調停、再選択、メッセージアウト、コマンド及びメッセージインを含む図６Ａに示されたコマンドフェーズ７０４のＳＣＳＩ状態を移る。図６Ａに示されるように、コマンドフェーズの終わりに、入出力トランザクションのターゲットであるＳＣＳＩデバイスは、ＳＣＳＩバスを解放するためにＳＣＳＩバスとの接続を切断し、同時に、ターゲットＳＣＳＩデバイスはトランザクションを実行するために準備する。後で、ターゲットＳＣＳＩデバイスは、ＳＣＳＩバス制御を再調停し、入出力トランザクションのデータフェーズ７０６を始める。この時点で、ＳＣＳＩ−バスアダプタは、データ伝送が現在進行可能であることを知らせるためにＦＣＰ転送準備完了（ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ）単一フレームシーケンス７０８をイニシエータへ返信する。読出し入出力トランザクションの場合に、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンスはオプションである。データフェーズが継続すると共に、ターゲットＳＣＳＩデバイスは、論理デバイスからデータを読み出し始め、ＳＣＳＩバスを介してそのデータをターゲットＳＣＳＩ−バスアダプタへ送信する。ターゲットＳＣＳＩ−バスアダプタは、次に、ターゲットＳＣＳＩデバイスから受信されたデータを、入出力トランザクションに対応するエクスチェンジの第３のシーケンスを構成する複数のＦＣＰデータ（ＦＣＰ＿ＤＡＴＡ）フレームにパッケージ化し、これらのＦＣＰ＿ＤＡＴＡフレームを、ＦＣを介して、イニシエータへ返送する。すべてのデータが送信され、ターゲットＳＣＳＩデバイスがＳＣＳＩバスの制御を解放したとき、ターゲットＳＣＳＩデバイスは、次に、入出力トランザクション７１４の状態フェーズを開始するためにＳＣＳＩバスの制御を再び調停する。このフェーズにおいて、ＳＣＳＩバスは、ターゲットＳＣＳＩデバイスからターゲットＳＣＳＩ−バスアダプタへＳＣＳＩ状態バイトを送信するために、図６Ｃに示されるように、バスフリー状態から、調停状態、再選択状態、メッセージイン状態、ステータス状態、メッセージイン状態、及びバスフリー状態を経由して遷移する。状態バイトを受信すると、ターゲットＳＣＳＩ−バスアダプタは、状態バイトをＦＣＰレスポンス（ＦＣＰ＿ＲＳＰ）単一フレームシーケンス７１６にパッケージ化し、ＦＣＰ＿ＲＳＰ単一フレームシーケンスを、ＦＣを介して、イニシエータへ返信する。これは読出し入出力トランザクションを完了する。
【００３９】
多くのコンピュータシステムには、ターゲットＦＣホストアダプタとターゲットＳＣＳＩ−バスアダプタとの間に、ＰＣＩバスのような付加的な内部コンピュータバスがある。換言すれば、ＦＣホストアダプタ及びＳＣＳＩアダプタは単一のターゲットコンポーネントに一緒にパッケージ化されない。簡易化するために、その付加的な相互接続は図７Ａ〜Ｂには表されていない。
【００４０】
図７Ｂは、図７Ａと類似した形式で、ＦＣＰコマンドフレーム７１８によって示された書込み入出力トランザクション中のＦＣＰシーケンスとＳＣＳＩバスフェーズ及び状態との間のマッピングを表す。図７Ｂが図７Ａと相違するのは、書込みトランザクション中に、ＦＣＰ＿ＤＡＴＡフレーム７２２〜７２５がイニシエータからＦＣを介して送信され、ターゲットからイニシエータへ送信されるＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンス７２０が、読出し入出力動作の場合のようにオプションではなく、不可欠であるという点だけである。図７Ａと同様に、書込み入出力トランザクションは、ターゲットがＦＣＰ＿ＲＳＰ単一フレームシーケンス７２０をイニシエータへ返送するときを含む。
【００４１】
ＩＤＥ／ＡＴＡディスクドライブ
ＩＤＥ／ＡＴＡドライブは、ディスクロジックコントローラとハードディスクを一体的に単一のモジュールとして統合するために開発された。ＩＤＥ／ＡＴＡドライブは、ＩＳＡバスを用いてＰＣシステムに容易に統合するため特に設計された。当初、ＩＤＥ／ＡＴＡドライブは、システム又はバスクロックによって制御された離散的な時間間隔でＩＤＥ／ＡＴＡドライブとシステムとの間で２バイトのデータを交換できるようにするためパラレル１６ビット相互接続を用いて設計された。残念ながら、パラレルバス相互接続は性能限界に到達し、現行のデータレートは１００〜１３３ＭＢ／秒であり、４０〜８０ピンのリボンケーブル接続は、もはや最新コンピュータシステム内の内部コンポーネントの余裕のない高密度パッケージングとの互換性がない。これらの理由のため、ＳＡＴＡ規格が開発され、８０ピンのリボンケーブル（ribbon cable）接続が４導体シリアルケーブルで置き換えられたＳＡＴＡディスクドライブがこれまでのところ生産されている。ＳＡＴＡディスクの初期データレートは１５０ＭＢ／秒であり、直ぐに３００ＭＢ／秒まで増加し、その後、６００ＭＢ／秒まで増加することが予想される。標準的な８Ｂ／１０Ｂ符号化が、ＡＴＡシリアルディスクドライブと周辺コンポーネント相互接続（peripheral component interconnect：ＰＣＩ）に基づくコントローラとの間で転送するデータを直列化するため使用される。残念ながら、様々な入出力コントローラを統合し、周辺デバイス及びバスへのインターフェイスを提供し、１台以上のＣＰＵとメモリを連結する第２のブリッジとの間でデータを転送するサウスブリッジ（Southbridge）コントローラは、ＳＡＴＡデバイスの直接的な相互接続を提供するためにＳＡＴＡテクノロジーを完全に組み込むよう設計される。
【００４２】
ＡＴＡインターフェイス、特に、ＡＴＡ−５及びＡＴＡ−６の標準的なインターフェイスは、外部プロセッサ又は論理コントローラが基本的なデータ転送コマンド、シーク、キャッシュ管理、並びに、その他の管理及び診断関連タスクを実行することをＡＴＡディスクドライブ内の論理コントローラに命令することを可能にさせる多種多様なコマンドをサポートする。以下の表２は、プロトコル「１」のようなプロトコル番号を一般的なタイプのＡＴＡコマンドと関係付ける。コマンドのタイプには、プログラムド入出力（ＰＩＯ）、非データコマンド、及びダイレクトメモリアクセス（ＤＭＡ）コマンドが含まれる。
【表２】
2007501987.tif 000004
【００４３】
以下に記載された表３は、複数のＡＴＡコマンドを、上記の表２に定義されたようなそのコマンドが属するコマンドタイプを含む対応するプロトコルと共に列挙する。
【表３】
2007501987.tif 000005
【００４４】
パワーモードチェックコマンドは、ホストがＡＴＡデバイスの現在のパワーモードを決定することを可能にさせる。マイクロコードダウンロードコマンドは、ホストがＡＴＡデバイスのマイクロコードを変更することを可能にさせる。エグゼクティブデバイス診断コマンドは、ホストがＡＴＡデバイスによって実施される診断テストを呼び出すことを可能にさせる。フラッシュキャッシュコマンドは、ＡＴＡデバイスがその書込みキャッシュをフラッシュすることをホストに要求させる。このコマンドの二つのバージョンがテーブルに収容され、拡張版はＡＴＡ−６標準インターフェイスをサポートするデバイス上で４８ビットのアドレス指定機能が利用できることを表す。表３に表すコマンドをさらに詳しくしたものは、別個に下記しない。デバイス識別コマンドは、ホストがＡＴＡデバイスに、そのデバイスによって与えられる論理セクタ数、シリンダ数及びヘッド数と、デバイスによってサポートされるコマンドと、デバイスによってサポートされる機能と、その他のパラメータとを含むパラメータ情報を問い合わせることを可能にさせる。ＤＭＡ読出しコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるＤＭＡデータ転送プロトコルを使用してデバイスからデータを読み出すことを可能にさせる。セクタ検証読出し（READ VERIFY SECTORS）コマンドは、ホストがホスト内に格納されたデータの一部分を読み出すようＡＴＡデバイスに命令し、デバイスから読み出されたデータをホストへ転送せずにエラー条件が発生したかどうかを決定することを可能にさせる。シーク（SEEK）コマンドは、ホストが後のコマンドで１個以上の特殊な論理ブロックにアクセスできることをＡＴＡデバイスに通知し、指定された１個以上の論理ブロックへの後のアクセスを実行するために、デバイスがヘッド位置決めを最適化することを可能にする。フィーチャー設定（SET FEATURES）コマンドは、ホストが、ＡＴＡデバイス内の種々のパラメータを、そのデバイスによって提供される機能のオンとオフを切り換えるために修正することを可能にさせる。スリープコマンドは、ホストがＡＴＡデバイスに対して、スピンダウンし、後のリセットコマンドを待つことを命令することを可能にさせる。ＤＭＡ書込みコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるＤＭＡデータ転送を使用してＡＴＡデバイスにデータを書き込むことを可能にさせる。
【００４５】
ＦＣベースのディスクアレイ
中規模及び大規模コンピュータシステムでは、データ記憶装置の要件は、一般的に、内蔵ディスクドライブを含む内蔵型大容量記憶デバイスの能力を遙かに超えている。このようなシステムでは、ローカルエリアネットワーク、光ファイバネットワーク、及びその他の高帯域幅通信媒体を介して中規模かつ高性能であるコンピュータシステムにリンクされた内部プロセッサを含む、低コストディスクの冗長アレイ（redundant arrays of inexpensive disks：ＲＡＩＤ）のような高性能大容量デバイスを利用することが一般的になり始めている。ディスクアレイの設計及び製造を容易化するため、ディスク製造業者は、ディスクアレイ内のディスクドライブをディスクアレイ・コントローラへ直接的に相互接続するためにＦＣポートを含むディスクドライブを供給する。一般に、ＦＣ調停ループトポロジーは、個々のＦＣディスクドライブをディスクアレイ・コントローラへ相互接続するためディスクアレイ内で採用される。
【００４６】
図８Ａ〜Ｄは、ディスクアレイ内でのＦＣディスクの使用に関する複数の問題点を示す。図８Ａは、ディスクアレイの内部コンポーネントのかなり抽象的な表現である。後述の図８Ｂ〜Ｄと図９は、同じ説明図の慣例を採用する。図８Ａにおいて、ディスクアレイ・コントローラ８０２は、高帯域幅通信媒体８０４を介して遠隔のコンピュータシステム及びその他の遠隔のエンティティに相互接続される。ディスクアレイ・コントローラは、１台以上のプロセッサと、１台以上の一般的にかなり大規模な電子メモリと、ディスクアレイ内のディスクドライブへの比較的上位レベルの論理ユニット及び論理ブロックインターフェースを遠隔のコンピュータシステムに提供するために、ディスクアレイ制御ファームウェア及びソフトウェアがディスクアレイ・コントローラ内に記憶され実行されることを可能にさせるその他のコンポーネントとを含む。図８Ａに示されるように、ディスクアレイは、ディスクアレイ・コントローラ８０２と複数台のＦＣディスクドライバ８０６〜８１３を含む。ＦＣディスクドライブはＦＣ調停ループ８１４を介してディスクアレイ・コントローラ８０２と相互接続される。図８Ａに抽象的に示されているようなＦＣベースのディスクアレイは、標準的かつ容易に入手可能なＦＣディスクを記憶媒体として使用し、相互接続のためのＦＣ調停ループを使用し、ディスクアレイ・コントローラ内で標準的なＦＣコントローラを使用して、比較的簡単に設計、製造される。ＦＣは高速シリアル通信媒体であるため、ＦＣ調停ループ８１４は、ＦＣディスク８０６〜８１３とディスクアレイ・コントローラ８０２との間にデータ転送のための豊富な帯域幅を提供する。
【００４７】
しかし、ＦＣディスクドライブのようなＦＣ調停ループ内の各ＦＣノードには、データが処理され、そのノードのＦＣポートを介して転送されるときに、有意なノード遅延が存在する。ノード遅延は、添え字付きの小文字「ｔ」でラベルが付けられた短い矢印を用いて図８Ａに示されている。ノード遅延はＦＣ調停ループ内で累積的であり、ＦＣ調停ループ内のＦＣノードの台数に比例するかなりの累積ノード遅延を引き起こす。
【００４８】
図８Ａに示されたディスクアレイ実施に関する第２の問題点は、ＦＣ調停ループが潜在的な単一障害点（single point of failure）を示すことである。一般に、ＦＣディスクは、機能しないＦＣディスクを調停ループから分離させるためにポートバイアス回路で補強されるが、ポートバイアス回路だけでは防止できない複数の異なる故障モードが存在する。
【００４９】
第３の問題点は、ノードを調停ループにリンクするＦＣポートが故障するときに現れる。このような場合には、複雑であり、かつ、信頼できない技術が故障したＦＣポートを特定し分離することを試みるために利用される筈である。一般に、故障したＦＣポートはループトポロジーを中断させ、ディスクアレイ・コントローラは、故障したノードを分離させるために、各ノードをバイパスするようにポートバイパス回路を作動することを続いて試みるに違いない。しかし、この技術は、種々の故障モードの下で、故障したノードを特定できない。したがって、ノード故障は調停ループトポロジーによって生じる重大な問題である。
【００５０】
図８Ｂは、潜在的な単一障害点問題の解決策を示す。図８Ｂに示されるように、ディスクアレイ・コントローラ８０２は、２個の別個の独立したＦＣ調停ループ８１４及び８１６を介してＦＣディスク８０６〜８１３と相互接続される。２個の別個のＦＣ調停ループを使用することによって、単一障害点問題は概ね除去される。しかし、ノート遅延問題は２個のＦＣ調停ループを使用しても改善されない。その上、各ＦＣディスクは２個の別個のＦＣポートを含む必要があるので、個別のＦＣディスクはかなり複雑になり、かつ、高価になる。最終的に、故障したポートの特定及び分離問題は一部しか解決されないが、その理由は、２個の調停ループのうちの一方を中断するノード故障の場合、もう一方の調停ループは機能し続けるが、通信媒体に二重の冗長性が存在しなくなるからである。二重の冗長性を回復するために、ディスクアレイ・コントローラは、故障したノードを特定し分離することを試みることが依然として必要であり、上記のように、複数の故障ノードは特定及び分離が難しい。
【００５１】
図８Ｃは、ＦＣベースのディスクアレイの実施によって生じるさらに別の問題点を示す。一般に、ディスクアレイから要求される高可用性記憶空間の量が増大すると、その結果として、より多数の個別のＦＣディスクが追加される。しかし、付加的なディスクの収容はノード遅延問題を悪化させ、上記のように、単一ＦＣ調停ループは最大で１２７台のノードしか収容しない。この最大ノード問題を解決するため、付加的な独立したＦＣ調停ループがディスクアレイに追加される。図８Ｄは、第１のＦＣディスクの組８１８が２個の別個のＦＣ調停ループ８１４及び８１６を介してＦＣコントローラ８０２と相互接続され、第２のＦＣディスクの組８２０が第２のＦＣ調停ループ８２２及び８２４のペアを介してディスクアレイ・コントローラ８０２と相互接続されたより高容量のディスクアレイを示す。ＦＣディスクの組８１８及び８２０のそれぞれはシェルフと呼ばれ、一般に、冗長なパワーシステム、冗長な制御パス、及びディスクアレイの全体的な耐故障性及び高可用性に寄与するその他の機能と共に別個の筐体に収容される。しかし、各シェルフの追加は、ディスクアレイ・コントローラ８０２内のＦＣコントローラ及びＦＣポートの台数を増加させる。別個のＦＣ調停ループのそれぞれはＦＣ調停ループ内に収容されたＦＣノードの累積的なノード遅延が起こることに注意すべきである。ディスクアレイの設計者、製造業者及び使用者は、よって、ＦＣベースのディスクアレイ内でディスクアレイ・コントローラとＦＣディスクを相互接続するよりフレキシブルであり、より費用効率が高く、より効率的な方法の必要性を認識した。その上、ディスクアレイの設計者、製造業者及び使用者は、ポート故障と、その他の通信故障及びコンポーネント故障とをより容易かつより高い信頼性で特定することを可能にする、ＦＣベースのディスクアレイ内のディスクアレイ・コントローラとＦＣディスクを相互接続する方法の必要性を認識した。
【非特許文献１】“The SCSI Bus and IDE Interface”、Freidhelm Schmidt、Addison-Wesley Publishing Company、ISBN0-201-1751402、1997年
【非特許文献２】“PCI System Architecture”、Shanley & Anderson，Mine Share，Inc．、Addison-Wesley Publishing Company発行、ISBN0-201-40993-3、1995年
【発明の開示】
【発明が解決しようとする課題】
【００５２】
高可用性ストレージシェルフ内のストレージシェルフ・ルータ、又は、ストレージシェルフ・ルータの組み合わせは、ディスクアレイ・コントローラのような外部処理エンティティのため本質的に高可用性ストレージシェルフの内部コンポーネントを仮想化するが、ディスクアレイの製造、設定及び動作中に、ディスクアレイ・コントローラ又はその他の外部処理エンティティが、高可用性ストレージシェルフ内のディスクドライブ、並びに、ストレージシェルフ・ルータ、パスコントローラカード及びディスクドライブ自体を含む高可用性ストレージシェルフの種々の内部コンポーネントに格納されたデータ構造に直接的にアクセスすることが必要な状況が存在する。高可用性ストレージシェルフ、及び高可用性ストレージシェルフを含むディスクアレイの製造業者、設計者及びユーザは、その結果として、ストレージシェルフ・ルータが現時点で提供していない、外部処理エンティティによる高可用性ストレージシェルフの内部コンポーネントへの直接アクセスを容易化する必要性を認識した。
【課題を解決するための手段】
【００５３】
本発明の一実施形態は、パスコントローラカードおよび選択的に他のストレージシェルフ・ルータと共に使用され、ストレージシェルフ又はディスクアレイ内のＳＡＴＡディスクをＦＣ調停ループのような高帯域幅通信媒体に相互接続する、ストレージシェルフ・ルータを実施する集積回路である。一実施形態において、各ストレージシェルフ・ルータは、プロセシングエレメント、多数のメモリ、階層論理アーキテクチャ、ストレージシェルフ・ルータを高帯域幅通信媒体に相互接続する２台の完全なＦＣポート、及びそれぞれがＳＡＴＡディスクへのインターフェイスを提供する多数のＳＡＴＡポートを含む集積回路である。ＦＣポートは、ストレージシェルフ内の全ストレージシェルフ・ルータを一緒に、ストレージシェルフ・ルータ内の内部ファブリックスペースへリンクする。相互接続されたストレージシェルフ・ルータは、ストレージシェルフをディスクアレイ・コントローラ又はその他の制御コンポーネントと相互接続する、部分的に外部にあるＦＣ調停ループのような、２個の別々の、部分的に外部にあるファブリックスペースにリンクされる。
【００５４】
本発明の種々の実施形態は、外部処理エンティティがストレージシェルフ内の種々のコンポーネントへ直接的にアクセスできるようにするため、ストレージシェルフ内の１台以上のストレージシェルフ・ルータによって設けられたストレージシェルフ・インターフェイスによるトンネリングメカニズムを提供する。例えば、本発明の種々の実施形態は、外部処理エンティティがデータをフラッシュメモリ及び内部ディスクドライブに格納された種々のデータ構造に書き込み、ストレージシェルフ・ルータによる翻訳又は介入なしで内部ディスクドライブプロトコルを使用して内部ディスクドライブと直接的に相互作用するための手段を提供する。本発明の一実施形態では、バッファ書込み（WRITE-BUFFER）コマンド及びバッファ読出し（READ-BUFFER）コマンドがストレージシェルフ・ルータによってサポートされるコマンドに追加される。これらのコマンドは、ＳＣＳＩコマンドがＦＣＰプロトコル内にパッケージ化されるのと同じ方式でファイバチャネルを介してＦＣＰプロトコルによって交換される。ストレージシェルフ・ルータは、コマンドフレームに含まれる情報に応じて、バッファ書込みコマンド及びバッファ読出しコマンドを様々な方法で解釈する。ある種の場合に、バッファ書込みコマンド及びバッファ読出しコマンド内にパッケージ化された情報は内部ディスクドライブと直接的に交換される。その他の場合に、情報が抽出され、ストレージシェルフ・ルータの内部コンポーネントに保持された種々のデータ構造に書き込まれる。バッファ書込みコマンド及びバッファ読出しコマンドは、本質的にストレージシェルフ内の１台以上のストレージシェルフ・ルータによって設けられた高可用性ストレージシェルフ仮想インターフェイスに抜け道、すなわち、トンネルを設け、外部処理エンティティが、高可用性ストレージシェルフ内の１台以上のストレージシェルフ・ルータによる介入はないが、しかし、容易化され、サポートされたトンネルを介して情報を交換することを可能にさせる。
【発明を実施するための最良の形態】
【００５５】
本発明の一実施形態は、ディスクアレイ又はその他の大規模の別個に制御される大容量記憶デバイス内で、ストレージシェルフ内のディスクドライブを高帯域幅通信媒体に相互接続するため、単独若しくは組み合わせて利用されるストレージシェルフ・ルータの集積回路型実施であり、その高帯域幅通信媒体が次にストレージシェルフをディスクアレイ・コントローラ、又は、同様の大容量記憶デバイスのコントローラと相互接続する。上記の実施形態は、ディスクドライブと１台以上のストレージシェルフ・ルータとの間に冗長な通信リンクを提供するパスコントローラカードをさらに含む。上記のように、図８Ａ〜Ｄを参照すると、ディスクアレイは、現在、ストレージシェルフ内でＦＣ互換性ディスクドライブを利用し、各ＦＣ互換性ディスクドライブは、ＦＣ互換性ディスクドライブをディスクアレイ・コントローラと相互接続する１個若しくは２個のＦＣ調停ループ又はその他のＦＣファブリックトポロジーでＦＣノードとして機能する。これに対して、本発明の一実施形態を部分的に表すストレージシェルフ・ルータは、ポイントツーポイントシリアル通信媒体によってストレージシェルフ内の各ディスクドライブと直接接続され、かつ、ファイバチャネル調停ループのような１個以上の高帯域幅通信媒体によってディスクアレイ・コントローラと相互接続された中間通信ハブとして機能する。
【００５６】
本発明の一実施形態は、（１）概要、（２）ストレージシェルフ内部トポロジー、（３）パスコントローラカード概要、（４）ストレージシェルフ・ルータ概要、（５）ストレージシェルフ・インターフェイス、（６）ストレージシェルフ・ルータ実施、及び（７）ストレージシェルフ・ルータのルーティング層を含む以下のサブセクションで詳細に記載される。さらに、コンピュータプログラム付録が２枚のコンパクトディスクで用意され、参照として本明細書に組み込まれる。コンピュータプログラム付録は、ルーティング層ロジックを指定するＲＴＬコード、ストレージシェルフ・ルータ実施のＣ言語モデル、及びストレージシェルフ・ルータ実施のための５章の参考マニュアルを含む。２枚のコンパクトディスクのそれぞれに収容されたファイルは以下に明記する。
【００５７】
ＲＴＬルーティング層詳細
ファイル名 ファイルサイズ 作成日時
ｒｌ                    ４５ＫＢ      １／３／２００３  １１：２５ＡＭ
ｒｌ＿ｒｏｕｔｅｒ    １４５ＫＢ    １２／４／２００２  １０：４８ＡＭ
ｒｌ＿ｒｔ              ２０ＫＢ      １／３／２００３  １１：２５ＡＭ
ｒｌ＿ｒｔ＿ｅｒｔ      ８６ＫＢ    １０／８／２００２    ６：２１ＰＭ
ｒｌ＿ｒｔ＿ｉｒｔ    １６８ＫＢ    １２／３／２００２    ６：３１ＰＭ
ｒｌ＿ｒｔ＿ｉｔｔ      １２ＫＢ      １／３／２００３  １１：２６ＡＭ
ｒｌ＿ｒｔ＿ｌｐｔ      １６ＫＢ    １２／３／２００２    ６：３１ＰＭ
Ｃ言語モデル
ファイル名 ファイルサイズ 作成日時
ｓｉｍ１２１６．ｃ      ５５ＫＢ      ９／５／２００２    １：４３ＡＭ
参考マニュアル
ファイル名 ファイルサイズ 作成日時
ｃｈａｐｓ１＿５    １８８１ＫＢ    １／１３／２００３  １１：３６ＡＭ
【００５８】
概要
図９は、図８Ａ〜Ｄのため利用された説明図の規約を使用して、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す。図９において、ディスクアレイ・コントローラ９０２は、ＬＡＮ又は光ファイバ通信媒体９０４を介して、１台以上の遠隔のコンピュータシステムにリンクされる。ディスクアレイ・コントローラ９０２は、ＦＣ調停ループ９０８を介して、ストレージシェルフ・ルータ９０６と相互接続される。ストレージシェルフ・ルータ９０６は、相互接続９１８のような別個のポイントツーポイント相互接続を介して、ストレージシェルフ９１０〜９１７内の各ディスクドライバと直接的に相互接続される。図９に抽象的に示された実施と図８Ａ〜Ｄに示された実施を比較すると、図８Ａ〜Ｄに示された実施によって特定された問題がストレージシェルフ・ルータに基づく実施によって解決されることが容易に認められる。第一に、図９に表された実施のＦＣ調停ループ内のノード遅延だけが、単一のＦＣ調停ループノードとして機能するストレージシェルフ・ルータによってもたらされる遅延である。これに対して、図８Ａに示されるように、各ＦＣ互換性ディスクドライブは別個のノード遅延をもたらし、ＦＣ調停ループ８１４上の累積的なノード遅延はＦＣ調停ループによって相互接続されたＦＣ互換性ディスクドライブの台数に比例する。ストレージシェルフ・ルータは、ＦＣポートと、ストレージシェルフ・ルータを個別のディスクドライブへリンクする内部シリアル相互接続との間で、高度に並列化され効率的なデータ転送を容易に行うように設計される。したがって、ストレージシェルフ・ルータをＦＣ調停ループ９０８に相互接続するオンボードＦＣコントローラによってもたらされる避けられないノード遅延の他に、実質的な遅延及び累積的な遅延はストレージシェルフ・ルータによってもたらされない。
【００５９】
第二に、非常に多数のディスクドライブがストレージシェルフ・ルータを使用してディスクアレイ・コントローラと相互接続される。図９に表された実施で利用されるＦＣ調停ループ９０８は、すなわち、ディスクアレイ・コントローラとストレージシェルフ・ルータの２台のノードだけを含む。各ストレージシェルフ・ルータが８台のディスクドライブをＦＣ調停ループと相互接続可能であると仮定すると、単一のＦＣ調停ループは、１２５台のストレージシェルフ・ルータを、通常はＦＣファブリック（パブリックループ）のために確保されているアドレスがストレージシェルフ・ルータによって使用される場合には、１２６台のストレージシェルフ・ルータを、ディスクアレイ・コントローラに相互接続するため使用できるので、単一のＦＣ調停ループを介して８０００台以上の個別のディスクドライブをディスクアレイ・コントローラに相互接続する。上記のように、高可用性が必要とされないとき、１６０００台以上の個別のディスクドライブが単一のＦＣ調停ループを介してディスクアレイ・コントローラと相互接続される。これに対して、図８Ｃに示されるように、個別のＦＣ互換性ディスクドライバがそれぞれに別個のＦＣノードとして機能するとき、１２５台のディスクドライバだけが、或いは、ＦＣファブリック（パブリックループ）のために通常確保されたアドレスがディスクドライブのため使用されるならば、１２６台のディスクドライブが、単一のＦＣ調停ループを介してディスクアレイ・コントローラと相互接続される。
【００６０】
第三に、ストレージシェルフ・ルータを利用するストレージシェルフ内の故障の特定及び分離は遙かに容易になる。従来の、ＦＣ調停ループノード毎に１台のディスクドライブの実施では、故障したＦＣポート又はＦＣリンクは、特定することが非常に困難であり、ある種の故障モードの下で、分離することが困難であり、一方、これに対して、ポイントツーポイントリンクを介してストレージシェルフ・ルータに相互接続されたディスクドライブに関連した問題はかなり容易に特定され、故障したポート又はリンクが容易に分離される。
【００６１】
ディスクドライブは、複数の現在利用可能な内部相互接続トポロジーのいずれかを用いてストレージシェルフ・ルータ９０６に接続される。一実施形態では、ＳＡＴＡ互換性相互接続はＳＡＴＡディスクドライブをストレージシェルフ・ルータと相互接続するため使用される。ストレージシェルフ・ルータは、ディスクアレイ・コントローラから受信された各ＦＣＰコマンドを１個以上の等価的なＡＴＡインターフェイスコマンドに変換するロジックを含み、ストレージシェルフ・ルータがそのＡＴＡインターフェイスコマンドを適切なＳＡＴＡディスクドライブへ送信する。図９に表されたストレージシェルフ・ルータは単一のＦＣ調停ループ９０８を介してディスクアレイ・コントローラと相互接続されるが、上記のように、ストレージシェルフ・ルータは、より一般的には、２個のＦＣ調停ループ又はその他のＦＣファブリックトポロジーを介してディスクアレイ・コントローラと相互接続される。
【００６２】
図１０は、階層的に相互接続されたコンピュータとディスクアレイのシステム内において、本発明の一実施形態を部分的に表すストレージシェルフ・ルータが占める位置を示す図である。図１０では、２台のサーバコンピュータ１００１及び１００４は、種々のＦＣファブリックトポロジーのうちのいずれかのような高帯域幅通信媒体１００８を介して、互いに相互接続され、ディスクアレイ・コントローラ１００６と相互接続される。ディスクアレイ・コントローラ１００６は、２個の別個のＦＣファブリックループを介してストレージシェルフ１０１０と相互接続される。第１のＦＣ調停ループ１０１２は、ディスクアレイ・コントローラ１００６を第１のストレージシェルフ・ルータ１０１４と直接的に相互接続する。第２のＦＣ調停ループ１０１６は、ディスクアレイ・コントローラ１００６を第２のストレージシェルフ・ルータ１０１８と直接的に相互接続する。２台のストレージシェルフ・ルータ１０１４及び１０１８は、第１のＦＣ調停ループ１０１２の一部として第１のストレージシェルフ・ルータ１０１４から第２のストレージシェルフ・ルータ１０１８へＦＣフレームを伝送し、第２のＦＣ調停ループ１０１６の一部として第２のストレージシェルフ・ルータ１０１８と第１のストレージシェルフ・ルータ１０１４との間でＦＣフレームを伝送する内部ポイントツーポイントＦＣ相互接続１０２０と相互接続される。その上、内部ＦＣリンク１０２０は、ストレージシェルフ１０１０内で生成され内部で使われる内部管理及び通信のため使用されるＦＣフレームを伝送する。後述するように、ディスクアレイをストレージシェルフと相互接続する２本のＦＣ調停ループを、「Ｘループ」又は「Ｘファブリック（fabric）」、及び「Ｙループ」又は「Ｙファブリック」と呼び、内部ＦＣ１０２０上で内部的に生成され内部的に使用される管理ＦＣフレームのエクスチェンジをＳファブリックと呼ぶことは一般的である。ストレージシェルフ１０１０は、４台のディスクドライブ１０２２〜１０２５、及び明示的に記載されていない１２台のディスクドライブを示す省略記号１０２６によって図１０に表された１６台のＳＡＴＡディスクドライブを含む。各ストレージシェルフ・ルータ１０１４及び１０１８は、シリアルリンク１０２８のようなポイントツーポイントシリアルリンクを介して各ＳＡＴＡディスクドライブと相互接続される。
【００６３】
図１０に示されるように、ディスクアレイ・コントローラ１００６及びストレージシェルフ１０１０を含むディスクアレイ内の相互通信経路のそれぞれには少なくとも２重の冗長性がある。さらに、ストレージシェルフ・ルータに２重の冗長性がある。たとえ、いずれかの単一リンク、又は、一方のストレージシェルフ・ルータが故障しても、残りのリンクと残りのストレージシェルフ・ルータは、ディスクアレイ・コントローラ１００６とストレージシェルフ１０１０内の１６台のＳＡＴＡディスクドライブとの間で完全な接続性を維持するために、故障したリンク又は故障したストレージシェルフ・ルータがそれまで担っていた仕事を引き受けることが可能である。ディスクアレイ・コントローラは、１台以上のＳＡＴＡディスクドライブの故障にもかかわらず復旧及び完全動作を可能にするため、ＲＡＩＤストレージ技術の種々のレベルのような複数の異なる可用性データ記憶方式のうちのいずれかをさらに実施する。ＲＡＩＤ技術は、例えば、２台以上のディスクドライブ上に記憶されたデータの２個以上の完全なコピーを別々に、かつ、完全に冗長的に復元する。サーバは、冗長性とフェイルオーバー（failover）機能を備えたＦＣファブリックのような通信媒体を介して、ディスクアレイ・コントローラ１００６、及びストレージシェルフ１０１０のような１台以上のストレージシェルフを備えるディスクアレイと相互通信する。ディスクアレイ・コントローラは、サーバコンピュータ１００２及び１００４が、ストレージシェルフのディスクドライブの内部及びディスクドライブ間におけるデータの実際の位置とは無関係に、かつ、データの冗長なコピー、並びに、ディスクアレイ・コントローラ１００６によって提供されるその他の機能及び特長とは関係なく、ファイル及びその他のデータオブジェクトをディスクアレイに格納し、ディスクアレイから取り出すことを可能にさせる論理ユニット番号（logical unit number：ＬＵＮ）及び論理ブロックアドレス（logical block address：ＬＢＡ）インターフェイスを提供する。ディスクアレイ・コントローラ１００６は、次に、ストレージシェルフ・ルータ１０１４及び１０１８によって提供されたインターフェイスを介してストレージシェルフ１０１０とインターフェイスをとる。ディスクアレイ・コントローラ１００６は、ＦＣエクスチェンジを、ＦＣＰプロトコルを用いて、離散的なＦＣ互換性ディスクドライブとして見えるものとの間で送受信する。しかし、ディスクアレイ・コントローラからは見えないが、ディスクシェルフルータ１０１４及び１０１８は、ＳＡＴＡディスクドライブとコマンド及びデータを交換するためにＦＣコマンドをＡＴＡコマンドに変換する。
【００６４】
図１１及び１２は、本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。図１１において、ルータカードに取り付けられた２台のストレージシェルフ・ルータ１１０２及び１１０４は、パッシブ・ミッドプレーン（passive midplane）１１０６を介して、ＳＡＴＡディスクドライブ１１０８のような１６台のＳＡＴＡディスクドライブと相互接続する。各ＳＡＴＡディスクドライブキャリアは、ＳＡＴＡディスクドライバと、パスコントローラカード１１１０とを収容する。パスコントローラカードは、ＳＡＴＡディスクドライバを、パッシブ・ミッドプレーンを介して２台のストレージシェルフ・ルータ１１０２及び１１０４のそれぞれに達する２本の別個のシリアルリンクと相互接続する。一般に、ＳＡＴＡディスクドライバは外部システムへの単一のシリアル接続だけをサポートする。ストレージシェルフ内に完全に冗長な相互接続を設けるために、パスコントローラカード１１１０が必要とされる。ストレージシェルフ１１００は、二重化された（redundant）ファン１１１２、１１１４および電源１１１６、１１１８をさらに含む。図１２は、図１１に示されたストレージシェルフに類似したストレージシェルフの実施を表す。この実施例は、それぞれが２台のパスコントローラカード及び２台のＳＡＴＡディスクドライブを含む二重（dual）ＳＡＴＡディスクドライブキャリアを備える。ディスクドライバの台数の増加は、高可用性アプリケーションのため必要とされる２重の冗長性を提供するために、ストレージシェルフ・ルータが対応して２倍になることを必要とする。
【００６５】
ストレージシェルフ内部トポロジー
図１３Ａ〜Ｃは、本発明の一実施形態を部分的に表すストレージシェルフ・ルータを使用するストレージシェルフの３通りの実施を示す図である。図１３Ａでは、単一のストレージシェルフ・ルータ１３０２が１６台のＳＡＴＡディスクドライブディスクドライブ１３０４〜１３１９を、ＦＣ調停ループ１３２０を介して、ディスクアレイ・コントローラへ相互接続する。一実施形態では、ストレージシェルフ・ルータは、最大で１６本のシリアルリンクを提供し、１６台までのＳＡＴＡディスクドライブの相互接続をサポート可能である。図１３Ａに表されたストレージシェルフは高可用性ではないが、その理由は、ストレージシェルフが冗長ストレージシェルフ・ルータ、或いは、１台以上のルータと各ＳＡＴＡディスクドライバとの間の冗長シリアルリンクを含まないからである。
【００６６】
それに対して、図１３Ｂに表されたストレージシェルフの実施は高可用性である。このストレージシェルフでは、２台のストレージシェルフ・ルータ１３２２及び１３２４がポイントツーポイントシリアルリンクを介して１６台のＳＡＴＡディスクドライバ１３２６−１３４１のそれぞれにリンクされる。通常動作中に、ストレージシェルフ・ルータ１３２２は、半分のＳＡＴＡディスクドライブ１３２６−１３３３をディスクアレイ・コントローラに相互接続し、一方、ストレージシェルフ・ルータ１３２４は、残りの半分のＳＡＴＡディスクドライブ１３３４−１３４１をディスクアレイ・コントローラに相互接続する。正常動作中に利用される内部ポイントツーポイントシリアルリンクは、シリアルリンク１３４２のように図１３Ｂに太線で示され、「１次リンク（primary link）」と呼ばれる。内側シリアルリンク１３４４のような正常動作中に使用されない内部シリアルリンクは「２次リンク（secondary link）」と呼ばれる。１次リンクが動作中に故障するならば、故障した１次リンク、及びストレージシェルフ・ルータに接続されたすべての他の１次リンクは、故障した１次リンクが接続されたストレージシェルフ・ルータから、他のストレージシェルフ・ルータへフェイルオーバーされ、故障した１次リンクが接続されたストレージシェルフ・ルータの交換を含めて、故障した１次リンクを修理若しくは取り替えることが可能になる。上記のように、２台のストレージシェルフ・ルータのそれぞれは、ストレージシェルフをディスクアレイ・コントローラと相互接続する２個のＦＣ調停ループの一方のためのＦＣノードとして機能する。一方のＦＣ調停ループが故障するならば、故障したＦＣ調停ループを本来ならば通過するデータ転送は、残りの、動作可能なＦＣ調停ループへフェイルオーバー（failover）される。同様に、一方のストレージシェルフ・ルータが故障したならば、もう一方のストレージシェルフ・ルータがストレージシェルフの完全な動作制御を担う。代替的な実施形態では、１次パスの故障は、ストレージシェルフ・ルータ全体をフェイルオーバーするのではなく、個別にフェイルオーバーされる。ある種の実施形態及び状況では、１次パスのフェイルオーバーはストレージシェルフ・ルータ内で実行され、他の実施形態及び状況では、１次パスのフェイルオーバーは、１次パスの２次ストレージシェルフ・ルータへのフェイルオーバーを含む。
【００６７】
図１３Ｃは、３２台のＡＴＡディスクを備えた高可用性ストレージシェルフの実施形態を示す。図１３Ｃに表されるように、３２台のＡＴＡディスクを備えたストレージシェルフは、４台のストレージシェルフ・ルータ１３５０、１３５２、１３５４及び１３５６を含む。各ストレージシェルフ・ルータは、正常動作中に、８台のＳＡＴＡディスクを、ストレージシェルフをディスクアレイ・コントローラと相互接続する２個のＦＣ調停ループと相互接続する。各ストレージシェルフ・ルータは、２次リンクを介して、８台の付加的なＳＡＴＡディスクドライブに相互接続されるので、フェイルオーバーが必要であるならば、ストレージシェルフ・ルータは全部で１６台のＳＡＴＡディスクを２個のＦＣ調停ループと相互接続することが可能である。４台のストレージシェルフ・ルータの構造では、ストレージシェルフ・ルータ１３５０は、一つのＦＣ調停ループに関して、４台のストレージシェルフ・ルータのすべてのＦＣノードとして機能することと、ストレージシェルフ・ルータ１３５６は、第２のＦＣ調停ループに関して、４台のストレージシェルフ・ルータのすべてのＦＣノードとして機能することに注意すべきである。図１３Ｃに表されているように、ストレージシェルフ・ルータ１３５０がＦＣノードとして機能する第１のＦＣ調停ループは、Ｘループ又はＸファブリックであるとみなされ、ストレージシェルフ・ルータ１３５６がＦＣノードとして機能するもう一方のＦＣ調停ループは、Ｙファブリック又はＹループとみなされる。ディスクアレイ・コントローラからXループを介してストレージシェルフ内のＳＡＴＡディスクへ伝送されるＦＣフレームは、最初にストレージシェルフ・ルータ１３５０によって受信される。ＦＣフレームは、正常動作の場合に１次リンクを介してストレージシェルフ・ルータ１３５０と相互接続されたＳＡＴＡディスクへ向けられるか、又は、内部ＦＣリンク１３５８を介してストレージシェルフ・ルータ１３５２へ向けられ、このストレージシェルフ・ルータ１３５２が次にＦＣフレームを、１次リンクを介してＳＡＴＡディスクへ伝送される１個以上のＡＴＡコマンドに変換するか、若しくは、ＦＣフレームを下流のストレージシェルフ・ルータ１３５４へ転送する。応答ＦＣフレームがＸファブリックを介してストレージシェルフ・ルータ１３５６によって伝送されるならば、それは、内部ＦＣリンク１３６０、１３６２及び１３５８を通り、ストレージシェルフ・ルータ１３５４及び１３５２を介して、ストレージシェルフ・ルータ１３５０へ回送されるべきであり、そのストレージシェルフ・ルータ１３５０から応答フレームが外部Ｘファブリックへ伝送される。上記の実施形態では、高可用性ストレージシェルフは、少なくとも２台のストレージシェルフ・ルータを含むことが必要であり、ストレージシェルフ内の８台のＳＡＴＡディスク毎にストレージシェルフ・ルータを含むことが必要である。
【００６８】
パスコントローラカード概要
上記のように、２台のコンポーネントは、ＳＡＴＡディスク又はその他の低価格ディスクドライブを利用して高可用性ストレージシェルフの構築を容易化し、ＦＣ調停ループ、又は、ＦＣ調停ループ上の単一のスロット若しくはノードだけを使用してその他の高帯域幅通信媒体と相互接続される。一方のコンポーネントはストレージシェルフ・ルータであり、もう一方のコンポーネントは、ＡＴＡドライブの２台のストレージシェルフ・ルータへの冗長な相互接続を提供するパスコントローラカードである。図１４Ａ〜Ｂは、ＡＴＡディスクドライブを２台のストレージシェルフ・ルータに相互接続するため適したパスコントローラカードの二つの実施を示す図である。図１４Ａに表された実施は、並列したＡＴＡディスクドライブへのパラレルコネクタを提供し、図１４Ｂに表された実施は、ＳＡＴＡディスクへのシリアル接続を提供する。上記のように、ＳＡＴＡディスクドライブは非常に高いデータ転送レートを提供するので、図１４Ｂに表された実施の方が好ましく、以下ではその実施を説明する。
【００６９】
パスコントローラカードは、１次シリアルリンク１４０４及び管理リンク（management link）１４０６の第１のストレージシェルフ・ルータへの外部接続、並びに、２次シリアルリンク１４０８及び第２の管理リンク１４１０の第２のストレージシェルフ・ルータへの外部接続のためのＳＣＡ−２コネクタ１４０２を備える。１次リンク及び２次リンクは、シリアルリンク１４１４を介してＳＡＴＡディスクドライブ１４１６に相互接続された２：１のマルチプレクサによって多重化される。管理リンク１４０６及び１４１０は、ディスクドライブ環境の温度を監視し、ディスクドライブキャリア内のファンの動作を制御し、ディスクドライブ筐体の外部から見える種々の発光ダイオード（ＬＥＤ）信号光を作動する管理サービスルーチンを実行するマイクロコントローラ１４１８に入力される。本質的に、正常動作下で、ＡＴＡコマンド及びデータは、１次リンクを介してパスコントローラカードによって受信され、２：１のマルチプレクサを介してＳＡＴＡディスクドライブ１４１５へ入力されるシリアルリンク１４１４へ転送される。フェイルオーバーがストレージシェルフ内で起こり、１次リンクを介してパスコントローラカードに接続されたデフォルトのストレージシェルフ・ルータを停止状態にするならば、第２のストレージシェルフ・ルータは、２次リンクを介してＡＴＡコマンド及びデータの転送を担い、ＡＴＡコマンド及びデータは、次に、２：１のマルチプレクサを経由してＳＡＴＡディスクドライブ１４１６に直接的に入力されるシリアルリンク１４１４へ送られる。
【００７０】
パスコントローラカードは、２台の別個のストレージシェルフ・ルータへの冗長な相互接続を提供するので、高可用性ストレージシェルフで必要とされる２重の冗長性を提供するために必要である。ストレージシェルフ・ルータは、様々なタイプの通信媒体の間の相互接続と、様々なタイプの通信媒体の間のコマンド及びデータの変換とを提供する。その上、ストレージシェルフ・ルータは、内部コンポーネント故障を自動検出し、冗長なリンク及び無故障コンポーネントを使用してディスクドライブのディスクアレイ・コントローラとの完全な相互接続を復旧するために適切なフェイルオーバー計画を実行するフェイルオーバーロジックを含む。
【００７１】
ストレージシェルフ・ルータ概要
図１５は、ストレージシェルフ・ルータの主要機能コンポーネントを示す上位レベルブロック図である。ストレージシェルフ・ルータ１５００は、２台のＦＣポート１５０２及び１５０４と、ルーティング層１５０６と、ＦＣＰ層１５０８と、グローバル共有メモリスイッチ１５１０と、１６台のＳＡＴＡポート１５１２〜１５１８と、CPU複合体１５２０と、外部フラッシュメモリ１５１４とを含む。ストレージシェルフ内で相互接続するストレージシェルフ・ルータの組の中でのストレージシェルフ・ルータの論理的位置に応じて、一方又は両方のＦＣポートが外部ＦＣ調停ループ又は他のＦＣファブリックに接続され、一方又は両方のＦＣポートが内部ポイントツーポイントＦＣリンクに接続される。一般に、ＦＣポートの一方は、ストレージシェルフ・ルータの組の中でのストレージシェルフ・ルータの論理的位置及び物理的位置とは無関係に、ストレージシェルフ・ルータを第１のＦＣ調停ループと直接的又は間接的にリンクすると考えられ、もう一方のＦＣポートはストレージシェルフ・ルータを第２のＦＣ調停ループと直接的又は間接的に相互接続すると考えられる。
【００７２】
ルーティング層１５０６は、後述されるメモリに記憶された多数のルーティングテーブルと、両方のＦＣポートからの入力ＦＣフレームの転送先を決めるルーティングロジックとを備える。ＦＣＰ層１５０８は、種々のタイプの入力及び出力ＦＣフレームを処理する制御ロジックと、後述されるグローバル供給メモリスイッチへのインターフェイスと、一体としてＦＣＰエクスチェンジを構築するＦＣフレームの交換を容易化するようにＦＣエクスチェンジコンテキストをメモリ内にセットアップするために、ファームウェアルーチンがＦＣＰ＿ＣＭＮＤ（ＦＣＰコマンド）フレームを処理するためCPU複合体上で動くことを可能にさせるCPU複合体１５１２へのインターフェイスと、を備える。
【００７３】
グローバル共有メモリスイッチ１５１０は、ＦＣＰ層キューとＳＡＴＡポート１５１２〜１５１８との間でデータを受け渡す非常に高速な時間多重方式のデータ交換機能である。グローバル共有メモリスイッチ（ＧＳＭＳ）１５１０は、ＦＣＰ層と特別なＳＡＴＡポートとの間でデータの転送を容易化するために仮想キューの割り付けを可能にさせる仮想キューメカニズムを利用する。ＧＳＭＳは、基本的に、ＦＣＰ層と１６台のＳＡＴＡポートとの間で非常に並列的なデータフローを容易に行う非常に高帯域幅の高速双方向マルチプレクサであり、ＦＣＰ層とＳＡＴＡポートとの間で同期境界のトラバース（traverse）を容易化するために同期メカニズムを含む装置である。
【００７４】
CPU複合体１５１２は、ＦＣエクスチェンジのコンテキスト情報を初期化し維持するため、かつ、ＦＣＰコマンドをＡＴＡ等価コマンドに変換するためにＦＣＰコマンドを処理し、また、ＳＡＴＡディスクドライブ及びストレージシェルフ・ルータの内部コンポーネントの動作を監視し、問題が検出されたときに高機能のフェイルオーバー戦略を実行する種々のファームウェアルーチンを動かす。フェイルオーバー戦略を実行するため、CPU複合体はストレージシェルフ・ルータのその他の論理コンポーネントと相互接続される。外部フラッシュメモリ１５１４は、設定パラメータ及びファームウェアルーチンを格納する。注意すべき点は、ストレージシェルフ・ルータが２台のＦＣポート１５０２及び１５０４と、１６台のＳＡＴＡポート１５１２〜１５１８と、１６本のシリアル管理リンク１５２０と、Ｉ２Ｃバス１５２２と、コンソール１５２４へのリンクとを介して外部コンポーネントに相互接続されることである。
【００７５】
ストレージシェルフ・インターフェイス
上記のように、ストレージシェルフ・ルータベースのストレージシェルフの実施は、現行のディスクドライブ毎にＦＣノードを設ける実施よりも、様々な形で、より大きな柔軟性を提供する。ストレージシェルフ・ルータは、それが接続されたディスクアレイ・コントローラに多種類の論理インターフェイスのうちのいずれかを提供することができる。図１６Ａ〜Ｇは、本発明の一実施形態を部分的に表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフ・ルータによって提供される多数の異なる論理インターフェイスを示す図である。図１６Ａは、図８Ａ〜Ｄを参照して説明したような現行のストレージシェルフのＦＣ互換性ディスクドライブ実施によって提供されるインターフェイスを表す。図１６Ａは図１６Ａ〜Ｈを通じて使用される抽象的な説明図の規約を使用する。図１６Ａにおいて、各ディスクドライブ１６０２〜１６０５は、０から１９までの番号が付けられた一連のデータブロックとして論理的に表現される。当然ながら、実際のディスクドライブは何十万から何百万の論理ブロックを含むが、図１６Ａではディスク毎に表された２０個の論理ブロックが多種多様なタイプのインターフェイスを説明するために十分である。図１６Ａでは、それぞれの別個のディスクドライブ１６０２〜１６０５はＦＣ調停ループ上の離散的なノードであるので、各ディスクドライブは、「ＡＬ＿ＰＡ１」、「ＡＬ＿ＰＡ２」、「ＡＬ＿ＰＡ３」及び「ＡＬ＿ＰＡ４」としてそれぞれ図１６Ａに表された、別個のＦＣノードアドレス、すなわち、調停ループ物理アドレス（「ＡＬ＿ＰＡ」）と関連付けられる。しかし、図８Ａ〜Ｄを参照して説明したような現行のＦＣ調停ループディスクアレイの実施とは異なり、各ノードは、図９に表されるようにポイントツーポイント接続を介してストレージシェルフ・ルータの補完的なＳＡＴＡポートと相互接続されるので、ノードに関連した累積的なノード遅延がないことに注意すべきである。よって、ディスクアレイ・コントローラは、ディスクドライブに関連したＦＣアドレスを用いて特別なディスクドライブ内の特別な論理ブロックにアクセスする。あるディスクドライブは、ある種の場合に、論理ユニット（ＬＵＮ）インターフェイスを提供し、論理ブロックアドレス空間が異なるＬＵＮと関連付けられた別個の論理ブロックアドレス空間に区分される。しかし、ここでの説明の目的のために、複雑さのレベルを扱う必要はない。
【００７６】
図１６Ｂは、ストレージシェルフ・ルータを介してＦＣ調停ループに相互接続された図１６Ａに表された４台のディスクドライブを含むストレージシェルフのための第１の可能なインターフェイスを表す。この第１のインターフェイスでは、各ディスクドライブは依然として別個のＦＣノードアドレスと関連付けられる。各ディスクドライブは、単一の論理ブロックアドレス空間を含む単一の論理ユニットであるとみなされる。このインターフェイスは、以下では、本発明の一実施形態を部分的に表す１台以上のストレージシェルフ・ルータを含むストレージシェルフの「トランスペアレント・モード（transparent mode）」動作と呼ばれる。
【００７７】
ストレージシェルフによって提供される第２の可能なインターフェイスは図１６Ｃに表される。この場合、４台すべてのディスクドライブは単一のＦＣ調停ループノードアドレス「ＡＬ＿ＰＡ１」と関連付けられる。各ディスクドライブは異なる論理ユニットであると考えられ、ディスクドライブ１６０２は論理ユニット０（LUN０）であるとみなされ、ディスクドライブ１６０３は論理ユニット１であるとみなされ、ディスクドライブ１６０４は論理ユニット２であるとみなされ、ディスクドライブ１６０５は論理ユニット３であるとみなされる。よって、ディスクアレイ・コントローラは、単一のＦＣノードアドレス、論理ユニット番号、及び論理ユニット内の論理ブロックアドレスを用いてストレージシェルフの４台のディスクドライブのいずれかのうちの論理ブロックにアクセス可能である。
【００７８】
仮想ストレージシェルフ内の４台のディスクドライブへの代替的なインターフェイスは図１６Ｄに表されている。この場合、４台すべてのディスクドライブは単一の論理ユニット内に収容されているとみなされる。４台のディスクドライブ内の各論理ブロックは、固有論理ブロックアドレスが割り当てられる。よって、ディスクドライブ１６０２内の論理ブロック０〜１９は論理ブロックアドレス０〜１９と関連付けられ続け、さらにまたディスクドライブ１６０３内の論理ブロック０〜１９は論理ブロックアドレス２０〜３９と関連付けられる。このインターフェイスは、以下では、図１６Ｃに表された純粋なＬＵＮベースのインターフェイスに対して、純粋な論理ブロックアドレスのインターフェイスと呼ばれる。
【００７９】
図１６Ｅは４台のディスクドライブを含む仮想ストレージシェルフによって提供されるさらに別の可能な論理インターフェイスを表す。この場合、２台のディスクドライブ１６０２及び１６０３の第１の組は第１のＦＣノードアドレス「ＡＬ＿ＰＡ１」と関連付けられ、２台のディスクドライブ１６０２及び１６０３は２個の異なるＬＵＮ番号、すなわち、ＬＵＮ０及びＬＵＮ１とそれぞれ関連付けられる。同様に、ディスクドライブ１６０４及び１６０５の第２のペアは、第２のＦＣノードアドレス「ＡＬ＿ＰＡ２」と共に関連付けられ、ディスクドライブの第２のペアのそれぞれは異なるＬＵＮ番号と関連付けられる。
【００８０】
図１６Ｆはさらに別の可能なインターフェイスを表す。この場合、第１の２台のディスクドライブ１６０２及び１６０３は第１のＦＣノードアドレスと関連付けられ、第２の２台のディスクドライブ１６０４及び１６０５は第２のＦＣノードと関連付けられる。しかし、この場合、各グループ内の２台のディスクドライブは、共に単一の論理ユニットに属するとみなされ、２台のディスクドライブ内の論理ブロックは単一の論理ブロックアドレス空間を構成する論理ブロックアドレスと関連付けられる。
【００８１】
最後のインターフェイスは図１６Ｇに表される。この場合、前の二つのインターフェイスと同様に、単一のＦＣノードアドレスに関連付けられたディスクドライブの各ペアは単一の論理ブロックアドレス空間を有する単一のＬＵＮを構成するとみなされる。しかし、このインターフェイスでは、論理ブロックアドレスは２台のディスクドライブの間で交番する。例えば、ディスクドライブ１６０２及び１６０３のペアの場合、論理ブロックアドレス０は第１の論理ブロック１６１０及び第１のディスクドライブ１６０２と関連付けられ、論理ブロックアドレス１は第２のディスクドライブ１６０３の第１のブロック１６１２と関連付けられる。
【００８２】
図１６Ａ〜Ｇは、本発明の一実施形態を部分的に表すストレージシェルフ・ルータによってディスクアレイ・コントローラに提供されたある種の複数の可能なインターフェイスを示すことだけを意図している。アルゴリズム的に記述することができるＬＵＮ及び論理ブロックアドレスのディスクドライブ及びディスクドライブ内の物理ブロックへのマッピングの殆どは、ストレージシェルフ内のストレージシェルフ・ルータによって実施される。一般に、これらの多種多様なタイプの論理インターフェイスは、以下の４個の一般的なインターフェイスのタイプ、すなわち、（１）各ディスクドライブが別個の局所的に一意のＦＣノードアドレスと関連付けられるトランスペアレント・モードと、（２）各ディスクドライブが異なるＬＵＮ番号と関連付けられ、すべてのディスクドライブが単一のＦＣノードアドレスによってアクセスされる純粋なＬＵＮモードと、（３）すべてのディスクドライブが単一のＦＣノードアドレス及び単一の論理ユニット番号と関連付けられる純粋な論理ブロックアドレス指定モードと、（４）ＬＵＮと論理ブロックアドレス空間分割の多種多様な組み合わせを利用するＬＵＮモード及び論理アドレスアドレス指定モードの混合モードに分類される。
【００８３】
ストレージシェルフ・ルータ実施
図１７Ａは、本発明の一実施形態を表すストレージシェルフ・ルータ内のコマンドとデータのフローの上位レベル概要である。ストレージシェルフ・ルータは、データとコマンドのシリアルストリームを、１個以上のＦＣ調停ループ又はその他のＦＣファブリック１７０２〜１７０３を介して、他のストレージシェルフ・ルータ及びディスクアレイ・コントローラと交換する。データのシリアルストリームはＦＣポート層１７０４に入り、下位レベルＦＣプロトコルレベルで処理される。データストリームから抽出されたＦＣフレームは先入れ先出しバッファ（ＦＩＦＯ）１７０６〜１７０７へ入力される。ＦＣフレームの先頭部分は利用可能になると、ＦＣフレームの後半部分がＦＩＦＯへ入力されると同時に、ルーティング層１７０８及びＦＣＰ層１７１０によって処理される。よって、ＦＣフレームは、バッファで完全に組み立てられ、内部メモリバッファから内部メモリバッファへコピーされることを要することなく、高い時間効率及び演算効率で処理される。
【００８４】
ルーティング層１７０８は、ＦＣフレームヘッダから、ＦＣフレームがストレージルータへ向けられるか、又は、ＦＣ調停ループ若しくはその他のＦＣファブリックによってストレージルータと相互接続された遠隔のストレージルータ若しくはその他のエンティティへ向けられるかを決めなければならない。遠隔のエンティティへ向けられたフレームは、ルーティング層によって、ＦＣ調停ループ又はその他のＦＣファブリックを介して遠隔のエンティティへ送信するためのＦＣポート層内の出力ＦＩＦＯ  １７１２〜１７１３へ向けられる。ストレージルータへ向けられたフレームはルーティング層によってＦＣＰ層へ向けられ、ＦＣＰ層では状態機械がストレージシェルフ・ルータ内でのフレームの処分を制御する。
【００８５】
ストレージシェルフ・ルータによってコンテキストが確立された現在動作中のＦＣエクスチェンジと関連付けられたＦＣＰ−ＤＡＴＡフレームは、高度にストリームライン化され、かつ、効率的な方法で処理される。これらのフレームからのデータは、ＦＣＰ層によって、ＧＳＭＳ１７１８内の仮想キュー１７１４〜１７１６へ向けられ、そこからデータはＳＡＴＡポート層１７２２内の入力バッファ１７２０へ転送される。ＳＡＴＡポート層から、データは、ＳＡＴＡパケットで、又は、データフレーム情報構造（Data Flame Information Structures：ＤＡＴＡ  ＦＩＳｅｓ）で、多数のＳＡＴＡリンク１７２４のうちの一つを介して、ストレージシェルフ・ルータと相互接続された多数のＳＡＴＡディスクドライブ１７２６のうちの１台へ送信される。
【００８６】
ＦＣＰ−ＣＭＮＤフレームは種々の形式でＦＣＰ層によって処理される。これらのフレームは、ＦＣＰ層によって、ストレージシェルフ・ルータ内のＦＣＰ層とＣＰＵとの間で共有されるメモリ１７２８へ転送される。ＣＰＵはフレーム内に収容されたコマンドを処理するためフレームにアクセスする。例えば、入力書込みコマンドが受信されたとき、ストレージシェルフ・ルータのＣＰＵは、ファームウェアルーチンの制御下で、コマンドが向けられ、共有メモリに格納された書込み動作のためのコンテキストを確立するＳＡＴＡドライブを決定する必要がある。ＣＰＵは、データを受信するようにＳＡＴＡドライブを準備し、一般にディスクアレイ・コントローラであるイニシエータへのＦＣＰ−ＸＦＥＲ−ＲＤＹフレームの返送を指令することが必要である。ＣＰＵによって準備され、共有メモリに格納されたコンテキストは、ＦＣＰレイヤがＣＰＵの介入なしに後続の入力ＦＣＰ−ＤＡＴＡメッセージを処理することを可能にさせ、書込み動作の実行をストリーム化する。
【００８７】
ストレージシェルフ・ルータ内の種々の論理層は反対方向でほぼ対称的に機能する。ＡＴＡコマンドへの応答は、ＳＡＴＡディスクドライブからＳＡＴＡリンクを介してＳＡＴＡポート層１７２２によって受信される。ＳＡＴＡポート層は、次に、適切な信号及びメッセージを生成し、必要に応じて、ＣＰＵが、ファームウェアの制御下で、適切な動作及び応答を実行することを可能にさせる。データが、読出しコマンドに応答して、ＳＡＴＡディスクから遠隔のエンティティへ転送されるとき、ＣＰＵは、ＦＣＰ層による処理のための共有メモリに格納される適切なキューエントリーを生成する。ＦＣＰ層内の状態機械は、共有メモリから、ＦＣフレームヘッダテンプレートを取得し、読出しコマンドに関連した仮想キュー１７３２〜１７３３からのデータ転送を手配し、ＦＣフレームヘッダを準備し、仮想キューを介してＳＡＴＡポート層から受信されたＦＣフレームヘッダ及びデータの、一般的にディスクアレイ・コントローラである要求中の遠隔のエンティティへの伝送のためのＦＣポート層の出力ＦＩＦＯ１７１２及び１７１３への転送を調整する。
【００８８】
図１７Ａはストレージシェルフ・ルータ内のデータ及び制御フローの簡略な概要を与えることが意図されている。ストレージシェルフ・ルータの内部コンポーネントを正確に表現することではなく、ＦＣＰ−ＣＭＮＤ及びＦＣＰ−ＤＡＴＡフレームの受信及び処理に関して論理層間の相互関係を表すことが意図されている。例えば、複数の仮想キューがＧＳＭＳ層内で図１７Ａに表されている。しかし、仮想キューは、一般に、静的エンティティではなく、ストレージシェルフ・ルータの現在状態に依存して必要に応じて動的に割り付けられる。図１７Ａは単一のＳＡＴＡシリアル接続１７２４とＳＡＴＡディスクドライブ１７２６だけを表すが、上記のように、各ストレージルータは、一実施形態では、１６台の異なるＳＡＴＡディスクドライブに接続される。
【００８９】
図１７Ｂ〜Ｆは、本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローに関するより詳細を記載する。図１７Ｂ〜Ｆを説明する際に、同一コンポーネントの様々なペアの両方のコンポーネントは、簡易化するために具体的に言及されない。それらの図は、コンポーネントの完全な図解入りのリストとしてではなく、データ及び制御情報がストレージシェルフ・ルータ内の種々のコンポーネントの中を移動する様子を表すことを意図する。さらに、種々のコンポーネントの台数は、ストレージシェルフ・ルータの多種多様な実施に応じて変化する。図１７Ｂは、ストレージシェルフ・ルータ内のＦＣＰ−ＤＡＴＡフレームの初期フローを表す。ＦＣＰ−ＤＡＴＡフレームは、最初に、ＦＣポート１７３６によって受信され、入力ＦＩＦＯ１７３７に書き込まれ、この入力ＦＩＦＯからのＦＣＰ−ＤＡＴＡフレームは、たとえＦＣＰ−ＤＡＴＡフレームの残りが未だ入力ＦＩＦＯに書き込まれている間でも、十分なヘッダ情報が入力ＦＩＦＯで入手できるようになるとすぐに、ルータロジック１７３８によって処理され始める。ＦＣポートは、ルータロジックがフレームを処理し始めることを可能にさせるため、新フレームの到着をルータロジックに知らせる。ルータロジック１７３８は、フレームがストレージシェルフ・ルータへ向けられるか、若しくは、向けられないかを決めるため、又は、フレームが遠隔のエンティティへ向けられるか、若しくは、向けられないかを決めるためにルーティングテーブル１７３９を利用する。ＦＣＰ−ＤＡＴＡフレームが遠隔のエンティティへ向けられるならば、フレームはルータロジックによって遠隔のエンティティへの送信のためＦＣポートへ向けられる。ルータは、さらに、ＦＣＰ−ＤＡＴＡフレームが属するＦＣエクスチェンジのためのコンテキストがＣＰＵによって作成され、共有メモリに格納されたかどうかを決めるため、コンテキストロジック１７４０とインターフェイスを取る。そのフレームのコンテキストが見つけられるならば、ルータロジックはそのフレームをＦＣＰインバウンド・シーケンス・マネージャ（FCP Inbound Sequence Manager：ＦＩＳＭ）状態機械１７４１へ向ける。コンテキストが見つからないならば、フレームは共有メモリへ向けられ、そこからフレームは、次に、ファームウェア制御下のＣＰＵによって誤って受信されたフレームとして抽出され処理される。
【００９０】
ＦＩＳＭ１７４１はＦＣＰデータムーバ・ロジック・モジュール（FCP data mover logic module：ＦＤＭ）１７４２からのＧＳＭＳチャネルを要求し、ＦＣＰデータムーバ・ロジック・モジュールは、次に、ＧＳＭＳ１７４４内の仮想キュー（virtual queue：ＶＱ）１７４３にアクセスし、ＦＩＳＭを介してコンテキストロジックからＶＱを表すパラメータを受信する。ＦＤＭは、次に、フレームに含まれるデータをＶＱに書込み、ＶＱからそのデータは、ＳＡＴＡディスクドライブへの送信のためＶＱへのアクセスをＦＤＭと共有するＳＡＴＡポートによって集められる。ＳＡＴＡポートは、データがＶＱへ書き込まれ始めるとすぐにディスクドライブへのデータの転送を開始することに注意する必要がある。ＳＡＴＡポートは、ディスクドライブへデータを送信し始める前に、すべてのデータが書き込まれるまで待つ必要がない。一旦データ転送動作と関連したすべてのデータがＶＱに書き込まれると、ＦＤＭはデータが転送されたことをコンテキストマネージャに知らせ、コンテキストマネージャは、次に、完了キューマネージャ（completion queue manager：ＣＱＭ）１７４５が完了メッセージ（completion message：ＣＭＳＧ）を共有メモリ１７４７内の完了キュー１７４６にキュー入れすることを要求する。ＣＱＭは、次に、ＣＰＵデータムーバ（CPU data mover：ＣＰＵＤＭ）１７４８がＣＭＳＧを共有メモリに書き込むことを要求する。
【００９１】
図１７Ｃは、ストレージシェルフ・ルータ内のＦＣ−ＣＭＮＤフレームとエラーを伴うフレームのフローを表す。上記のように、フレームはＦＣポート１７３６によって受信され、ルータロジック１７３８によって、ルーティングテーブル１７３９を参照して、ストレージシェルフ・ルータ内の種々のターゲットコンポーネントへ向けられる。エラー受信されたＦＣＰ−ＣＭＮＤフレーム及びＦＣフレームは、ＣＰＵによる抽出及び処理のため共有メモリ１７４７へ経路制御される。ルーティングロジック１７３８は、フレームを共有メモリ１７４７へ書き込む用にフレームバッファ・キュー・マネージャ（flame buffer queue manager：ＦＢＱＭ）１７６０に要求を発行する。ＦＢＱＭは、ＣＰＵＤＭ１７４８から、メモリ１７５０に記憶されたバッファポインタを受信し、フレームを共有メモリ１７４７内のフレームバッファ１７４９に書き込む。フレームがエラー処理のため共有メモリへ転送されるある種の場合に、２台以上のフレームバッファがより多くのフレームを収容するために、又は、多数のフレームを収容するために必要とされることに注意すべきである。最後に、ルータは、ＣＱＭ１７４５がＣＭＳＧをＣＱ１７４６に書き込むことを要求する。ＣＰＵは、最終的に、フレームバッファ１７４９に格納されたフレームへアクセスするためにＣＭＳＧ内に含まれる情報を使用して、ＣＭＳＧを処理する。
【００９２】
図１７Ｄは、あるＦＣポートから別のＦＣポートへのＦＣフレームのフローを表す。ルータロジック１７３６が、第１のＦＣポート１７３６内の入力ＦＩＦＯ１７３７を介して受信されたフレームはストレージルータへ向けられるのではなく、代わりに遠隔のエンティティへ向けられることを決定する場合、ルータロジックは、フレームを遠隔のエンティティへ送信するためにフレームを第２のＦＣポート１７５２内の出力ＦＩＦＯ１７５１へ書き込む。
【００９３】
図１７Ｅは、ストレージシェルフ・ルータ内のＣＰＵから、Ｓファブリック、ＦＣ調停ループ又はその他のＦＣファブリックへのデータ及び制御情報のフローを表す。ＣＰＵは、ファームウェア制御下で、共有メモリ１７４７内の共有メモリキューＳＲＱにエントリーを格納し、ＣＰＵが、ヘッダ及びバッファへのポインタと共にＦＣ調停ループ又はその他のＦＣファブリックへの送信のため作成したフレームを記述するＳＲＱエントリー（SRQ entry：ＳＲＥ）の存在を示すためにＳＲＱと関連付けられたＳＲＱプロデューサ・インデックス（SQR producer index）を更新する。ＳＲＱマネージャモジュール（SRQ manager module：ＳＲＱＭ）１７５５は、ＳＲＱプロデューサ・インデックスの更新を検出し、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７から次のＳＲＥをフェッチ（fetch；取得）する。ＳＲＱＭはフェッチされたＳＲＥを、ラウンドロビン（round-robin）方式のような調停方式を実施するＳＲＱ調停モジュール（SRQ arbitration module：ＳＲＱ＿ＡＲＢ）１７５６へ渡し、複数のＣＰＵによって生成され、複数のＳＲＱに格納されたＳＲＥの処理を保証する。ＳＲＱ＿ＡＲＢは、次のＳＲＥを受信するためのＳＲＱＭを選択し、ＳＲＥをＦＣＰアウトバウンド・シーケンス・マネージャ（FCP outbound sequence manager：ＦＯＳＭ）状態機械１７５７へ渡す。ＦＯＳＭは、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７からＦＣヘッダテンプレート及びフレームペイロードをフェッチするためＳＲＷを処理する。ＦＯＳＭは、共有メモリからＣＰＵＤＭを経由したＦＣヘッダテンプレート及びフレームペイロードを使用してＦＣフレームを構築し、そのフレームをＦＣポート１７３６の出力ＦＩＦＯ１７５８に書込み、そこからフレームはＦＣ調停ループ又はその他のＦＣファブリックへ送信される。フレームがＦＣポートへ転送されたとき、ＦＯＳＭはＣＭＳＧを共有メモリへ書き込むためにＣＱＭ１７４５へ向ける。
【００９４】
図１７Ｆは、ＧＳＭＳ及び共有メモリからＦＣ調停ループ又はその他のＦＣファブリックへのデータ及び制御情報のフローを表す。この処理のステップの殆どは図１７Ｅに関して説明したステップと同様であり、簡易化するために、再度説明はしない。一般に、ＦＣＰ−ＤＡＴＡフレームの制御部は、ＦＣフレームヘッダ内に格納され、図１７Ｅに関して説明された他のタイプのフレームの生成と同様の形式で生成される。しかし、ＦＣＰ−ＤＡＴＡフレームの場合、処理は、制御情報を、ＳＡＴＡポートからＧＳＭＳを経由して取得されたデータと組み合わせるために段階化されるべきである。ＦＯＳＭ１７５７がＦＣＰ−ＤＡＴＡフレームを記述するＳＲＥを受信するとき、ＦＯＳＭは、ＦＣＰ−ＤＡＴＡフレームヘッダを構築し、ＧＳＭＳ１７４４内のＶＱ１７５９を介してデータを取得するＦＤＭ１７４２を通してＧＳＭＳチャネルによってフレームに組み入れられたデータを要求することが必要である。データ及び制御情報がＦＯＳＭによってＦＣＰ−ＤＡＴＡフレームに合成されると、フレームは次にＦＣポートへ渡され、そして、ＦＣＰ＿ＤＡＴＡフレームがデータ転送動作の完了を表すとき、ＣＭＳＧメッセージが、上述のように、ＣＱにキュー入れされる。
【００９５】
図１８は、本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントのより詳細なブロック図を表す。論理コンポーネントは、２台のＦＣポート１８０２及び１８０４と、ルーティング層１８０６と、ＦＣＰ層１８０８と、ＧＳＭＳ１８１０と、ＳＡＴＡポート層１８１２と、図１６及び１７に関して既に説明した２台のＣＰＵ１８１４及び１８１６を備えたCPU複合体とを含む。図１８に、太線矢印１８１８のような太線矢印で表された通信経路及び通信リンクは、ストレージシェルフ・ルータ内の性能がクリティカルな（performance-critical）通信経路を表す。性能がクリティカルな経路は、ＦＣフレームの受信及び出力と、ＳＡＴＡポートによってＳＡＴＡディスクドライブへ送信するための適切なＡＴＡコマンドを生成するための受信フレームの処理と、受信されたＦＣＰ−ＤＡＴＡフレームからのデータをＧＳＭＳ経由でＳＡＴＡポートへ送ることと、ＦＣポートを介してＦＣ調停ループ又はその他のＦＣファブリックへの送信のためのＦＣフレームの生成と、ＧＳＭＳ経由でＳＡＴＡポートから取得されたデータの発信ＦＣＰ−ＤＡＴＡフレームへの組み込みとに関係がある経路である。性能がクリティカルではない（non-performance-critical）経路は、ＣＰＵ１８１４及び１８１６をストレージシェルフ・ルータの種々の論理コンポーネントと直接的に相互接続する種々のプログラムドＩ／Ｏインターフェイスを含む。例えば、中央調停スイッチ１８２０と、ＧＳＭＳ、ＳＬポート層、及び内部バスブリッジ１８２２との間にＰＩＯインターフェイスが存在し、内部バスブリッジは、今度は、１７台のＵＡＲＴポート１８２４と、Ｉ２Ｃバスインターフェイス１８２６と、汎用ＰＩＯインターフェイス（ＧＰＩＯ）１８２８と、タイマーコンポーネント１８３０と、数台の割り込みコントローラ１８３２と相互接続される。これらのＰＩＯインターフェイスは、図１８に太字ではない両矢印１８３４〜１８３６として表される。その上、ＣＰＵ１８１４及び１８１６とフラッシュメモリコントローラ１８４０との間にＰＩＯインターフェイス１８３８が存在し、フラッシュメモリコントローラは、次に、外部フラッシュメモリ１８４２とインターフェイスをとる。外部フラッシュメモリは、特定の設定管理情報及びファームウェア画像を記憶するため使用される。ＣＰＵはメモリアクセス１８４４を介して内部ＳＲＡＭコントローラ１８４６に接続され、内部ＳＲＡＭコントローラ１８４６は、次に、ストレージシェルフ・ルータ内、及びストレージシェルフ・ルータ間でフェイルオーバーを命令するファームウェアルーチンを含む、ノンパフォーマンス（non-performance）経路のコード及びデータを記憶するＳＲＡＭメモリ１８４８とインターフェイスをとる。ＣＰＵ１８１４及び１８１６は、２台のデータが緊密に結合されたメモリ１８５０及び１８５２に収容され、プロセッサデータ空間のためにも使用される共有メモリキューを介して、ＦＣＰ層１８０８及びＳＡＴＡポート層１８１２と相互接続される。各ＣＰＵは、ファームウェア命令１８５４及び１８５６を格納する別個のメモリとも相互接続される。最後に、両方のＣＰＵは、単一のＰＩＯチャネル１８５８を介して、両方のＦＣポート１８０２及び���８０４と、ルーティング層１８０６と、ＦＣＰ層１８０８とに接続される。
【００９６】
図１９はＦＣポート層のより詳細な図を表す。ＦＣポート層は２台のＦＣポート１９０２及び１９０４を含み、それぞれが入力ＦＩＦＯ１９０６及び１９０８と、２台の出力ＦＩＦＯ１９１０−１９１１及び１９１２−１９１３を含む。ＦＣポートは、ＦＣ調停ループ又はその他のＦＣファブリックからの入力シリアルデータを入力ＦＩＦＯへ渡されるＦＣフレームへ共に変換し、出力ＦＩＦＯへ書き込まれる出力ＦＣフレームをＦＣ調停ループ又はその他のＦＣファブリックへ送信されるシリアルデータへ変換する物理層ロジック及びリンク層ロジック１９１４〜１９１７を含む。
【００９７】
図２０はルーティング層のより詳細なブロック図表示である。図２０に表されるように、ルーティング層２００２はＦＣポートのそれぞれを取り扱う別個のルーティングロジック２００４及び２００６を含む。ルーティング層は、入力ＦＣフレームを適切なキューへ経路制御するため必要なルーティング判定を容易化するため、本質的に非常に高速にアクセスされるメモリであるレジスタに格納されたルーティングテーブル２００８をさらに含む。ＦＣデータフレームは、上記のように、ＦＤＭ２０１１を介してＦＩＳＭ２０１０及び２０１２の制御下でＧＳＭＳ層２０１５にルータによってかなり直接的に経路制御されることに注意すべきである。ファームウェア処理を要求するフレームは、ルーティング層によって、ＣＰＵＤＭ２０１７及び２０１８を介してＦＢＱＭ２０１４及び２０１６の制御下で入力キューへ経路制御される。
【００９８】
図２１はＦＣＰ層のより詳細なブロック図表示である。図２１に表された内部コンポーネントのうちの殆どは既に説明されているか、又は、後のセクションでより詳細に説明される。一般に、一方で２台のＦＣポート１９０２及び１９０４を担当し、他方で２台のＣＰＵ２０１２及び２０１４を担当するために重複したコンポーネントの組が配置されることに注意すべきである。出力フレームを生成するため必要な情報は、ファームウェア制御下でＣＰＵによって生成され、主として単一ＣＰＵと個々に関連付けられた共有メモリ２１０６及び２１０８に格納される。各メモリに格納された情報は、次に、送信のため２台のＦＣポート１９０２及び１９０４へ送られるＦＣフレームを生成するために、ＳＲＱＭ２１１０及び２１１２と、ＦＯＳＭ２１１４及び２１１６と、ＳＲＱ＿ＡＲＢＳ２１１８及び２１２０と、ＣＰＵＤＭ２１２２及び２１２４と、その他のコンポーネントとからなる別個の組によって処理される。各ＦＣポートにおける入力フレームは、別個のルータモジュール２００４及び２００６と、ＦＩＳＭ２０１０及び２０１２と、その他のコンポーネントとによって処理される。
【００９９】
図２２はＳＡＴＡポート層のより詳細なブロック図表示を表す。ＳＡＴＡポート層の主な目的は、ＳＡＴＡポート層と、ＧＳＭＳと、ＦＣＰ層との間で共有されるタスク、すなわち、仮想キュー管理と、ＧＳＭＳ及び個別のＳＡＴＡポートによるＦＣＰ層とのデータの交換である。
【０１００】
図２３はＳＡＴＡポートのより詳細なブロック図表示である。ＳＡＴＡポートは、一体としてＳＡＴＡインターフェイスを実施する物理層２３０２、リンク層２３０４、及びトランスポート層２３０６を含む。トランスポート層は、相互接続されたＳＡＴＡディスクから到着するデータ転送の部分及びＡＴＡメッセージ情報を記憶する入力バッファ２３０８と、ＧＳＭＳ層からのデータ転送の部分、並びに、インターフェイスからＣＰＵ及び共有メモリへ送られるＡＴＡコマンドを記憶する出力バッファ２３１０とを含む。ＳＡＴＡポートに関するさらなる詳細は他のセクションで議論される。
【０１０１】
ストレージシェルフ・ルータのルーティング層
図２４は、４台のストレージシェルフ・ルータ型の高可用性ストレージシェルフ内のルーティングトポロジーの抽象的な表現を表す。この抽象的な表現は以下の説明のために有用なモデル及びテンプレートである。図２４に表されるように、各ストレージシェルフ・ルータ２４０２〜２４０５は、１次リンクを介して、ディスクドライブ２４０６のようなｎ台のディスクドライブに接続される。上記のように、各ストレージシェルフ・ルータは、２次リンクを介して、近傍のｎ台のディスクドライブの組に接続されるが、２次リンクは、図２４では、単純化するために図示されていない。１台のストレージシェルフ・ルータ２４０２は、ファブリックＸ  ２４０８と呼ばれる第１のＦＣ調停ループ、又は、その他のＦＣファブリックに関してストレージシェルフ・ルータの組全体のための終点又はＦＣノード接続ポイントとしての役割を担う。別のストレージシェルフ・ルータ２４０５は、終点、又は、第２の調停ループ、若しくは、ファブリックＹと呼ばれるその他のＦＣファブリック２４１０へのＦＣノード接続としての役割を担う。各ストレージシェルフ・ルータは、例えば、ストレージシェルフ・ルータ２４０２のＸポート２４１２及びＹポート２４１４のように、２台のＦＣポート、すなわち、Ｘポート及びＹポートを含む。４台のストレージシェルフ・ルータは、内部ポイントツーポイントＦＣリンク２４１６、２４１８及び２４２０と相互接続される。例えば、ストレージシェルフ・ルータ２４０４のような特定のストレージシェルフ・ルータの場合、ファブリックＸから入力するＦＣフレームはＸポート２４２２で受信され、ストレージシェルフ・ルータ２４０４によってファブリックＸへ出力されるＦＣフレームはＸポート２４２２を介して出力される。同様に、入力ＦＣフレーム及び出力ＦＣフレームは、それぞれ、Ｙファブリックから受信され、Ｙファブリックへ向けられ、ＦＣポート２４２４を介して入力され出力される。特定のＦＣポートのＸファブリック及びＹファブリックへの割当は設定可能であり、以下の例示のための実施例及び実施例を参照する説明では、ＦＣポート０がＸファブリックポートであり、ＦＣポート１がＹポートであると仮定されているが、逆の割当も設定可能であることに注意すべきである。
【０１０２】
Ｓファブリック内で使用され、「Ｓビット」と称されるＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内の２ビット予約サブフィールドによってそのものとして特定されるＳファブリック管理フレームは、Ｘポート又はＹポートのいずれか、及びポイントツーポイントの内部ＦＣリンクを介してストレージシェルフ・ルータの間に向けられる。各ストレージシェルフ・ルータは、ストレージシェルフ内で一意であり、かつ、管理フレームにおいてＦＣフレームヘッダの一部Ｄ＿ＩＤフィールドを形成するルータ番号が割り当てられる。ストレージシェルフ・ルータは、Ｘファブリック及びＹファブリックの一方に関して厳密に増加する順序に番号付けされ、Ｘファブリック及びＹファブリックのもう一方に関して厳密に減少する順序に番号付けされる。例えば、図２４において、ストレージシェルフ・ルータ２４０２、２４０３、２４０４及び２４０５は、それぞれ、ルータ番号１、２、３及び４が割り当てられ、よって、Ｘファブリックに関して厳密に増加、すなわち、昇順であり、Ｙファブリックに関して厳密に減少、すなわち、降順である。この順序は、後述の詳細なフロー制御図において前提とされ、しかし、上記のように、ファブリックとポートとの間の関係、及びポートへの昇順と降順は設定可能である。
【０１０３】
図２５は、２台のストレージシェルフ・ルータ、すなわち、ディスクアレイの２台のストレージシェルフ・ルータの実施内でのＸ及びＹのＦＣ調停ループ相互接続の抽象的な表現を表す図である。図２５において、ディスクアレイ・コントローラ２５０２はＦＣ調停ループＸ２５０４によって各ストレージシェルフ・ルータ２５０６及び２５０８にリンクされ、ＦＣ調停ループＹ２５１０によって両方のストレージシェルフ２５０６及び２５０８にリンクされる。図２５において、ストレージシェルフ・ルータ２５１２はストレージシェルフ２５０６のＸファブリック終点（endpoint）として機能し、ストレージシェルフ・ルータ２５１４はストレージシェルフ２５０８のＸファブリック終点として機能する。同様に、ストレージシェルフ・ルータ２５１６はストレージシェルフ２５０６のＹファブリック終点として機能し、ストレージシェルフ・ルータ２５１８はストレージシェルフ２５０８のＹファブリック終点として機能する。ディスクドライブ２５１８のような個別のディスクドライブのそれぞれは、Ｘ調停ループ及びＹ調停ループの両方を介してディスクアレイ・コントローラ２５０２にアクセス可能である。両方のストレージシェルフにおいて、ストレージシェルフ・ルータは、単一のポイントツーポイントＦＣリンク２５２０及び２５２２を介して内部的に相互接続され、その相互接続は、Ｘファブリックフレーム及びＹファブリックフレームの他に、内部的に生成され、内部的に使用される管理フレーム、すなわち、Ｓファブリックフレームを搬送する。ストレージシェルフ２５０６内の内部ポイントツーポイントＦＣリンクはＳ１ファブリックと称され、ストレージシェルフ２５０８内の内部ポイントツーポイントＦＣリンクはＳ２ファブリックと称される。本質的に、内部ポイントツーポイントＦＣリンクは、Ｘファブリック、Ｙファブリック、及び内部管理フレームのＦＣフレームを搬送するが、Ｘファブリック及びＹファブリックのフレームが終点ストレージシェルフ・ルータを経由してストレージシェルフ・ルータに入ると、それらは、使用されるか、又は、終点ストレージシェルフ・ルータのＦＣポートを介して元のＸファブリック又はＹファブリックへエクスポートされるまでＳファブリックフレームとみなされる。
【０１０４】
図２６Ａ〜Ｅは、本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す。ＦＣフレームヘッダは図３を参照して既に記載した。当然ながら、ＦＣヘッダは、フレームを、単一のＦＣノードを介してＦＣ調停ループ又はその他のＦＣファブリックへ一体的にインターフェイスを取るストレージシェルフ・ルータと相互接続されたディスクドライブではなく、ＦＣノードへ向けるため設計される。したがって、ストレージシェルフ内のストレージシェルフ・ルータ及びＳＡＴＡディスクドライブ設定へのＦＣフレームヘッダフィールドのマッピングはＦＣフレームの適切な宛先のために必要である。ＦＣフレームヘッダの３バイトのＤ＿ＩＤフィールドは、ＦＣノードのノードアドレスを表す。ＦＣ調停ループの場合、Ｄ＿ＩＤの最上位２バイトは、一般に、非公開ループのための値「０」をとり、最下位バイトは、１２７ノードのうちの一つを指定する調停ループ物理アドレス（ＡＬ＿ＰＡ）を含む。一般的に、少なくともあるノードアドレスはディスクアレイ・コントローラのため使用され、別のノードアドレスはファブリック調停ループアドレスのため予約される。３バイトのＳ＿ＩＤフィールドは、フレームが作り出されたノードのノードアドレスを含む。一般に、Ｓ＿ＩＤフィールドはディスクアレイ・コントローラのノードアドレスであるが、ストレージシェルフはＦＣファブリックに直接的に相互接続され、その場合、Ｓ＿ＩＤは、ストレージシェルフにアクセスする非常に多数の遠隔のエンティティのうちのいずれかの２４ビットＦＣファブリックアドレスの全体である。
【０１０５】
図２６Ａに表されるように、ＦＣフレームヘッダ２６０６のＤＦ＿ＣＴＬフィールド２６０４内の２個の予約ビット２６０２は、ストレージシェルフ内に、或いは、換言すれば、Ｓファブリック内に記憶され、送信されたフレームのある種の宛先指標、すなわち、コンパス２６０８として利用される。以下の表４はこの宛先指標の符号化を表す。
【表４】
2007501987.tif 000006
【０１０６】
ビットパターン「０１」はフレームがＸファブリックフレームとしてＳファブリックに入ったことを示し、ビットパターン「１０」はフレームがＹファブリックフレームとしてＳファブリックに入ったことを示し、ビットパターン「１１」はフレームがＳファブリック管理フレームであることを示す。ＤＦ＿ＣＴＬフィールドのビット１８：１９によって表された宛先指標、すなわち、内部コンパスは、Ｓファブリックと外部ファブリックの両方のフレームが単一のＦＣポートを介してストレージシェルフ・ルータによって受信されるので必要とされる。上記のように、ＤＦ＿ＣＴＬフィールドのビット１８：１９は「Ｓビット」のように総称される。Ｓビットは終点ストレージシェルフ・ルータによるＸファブリック又はＹファブリックフレームの受信によってセットされ、終点ストレージシェルフ・ルータから元のＸファブリック又はＹファブリックへのエクスポートの前にクリアされる。ＦＣフレームヘッダのＲ＿ＣＴＬフィールドは、ＦＣＰ＿ＣＭＮＤフレーム、ＦＣＰ＿ＤＡＴＡフレーム、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹフレーム、及びＦＣＰ＿ＲＳＰフレームの表示を含むＦＣフレームのタイプの表示を格納する。このフィールドはフレームがどのように処理されるべきであるかを迅速に決定するためルーティングロジックによって使用される。
【０１０７】
図２６Ｂは、ＦＣＰ−ＣＭＮＤフレームのルーティングと関連したＦＣフレームヘッダフィールドを説明する。Ｄ＿ＩＤフレーム２６１０はＦＣフレームを特定のＦＣノードへ向けるが、上記のように、ストレージシェルフは、トランスペアレント・モードで動作するとき、複数のノードを含み、トランスペアレント・モードで動作しないとき、単一のＤ＿ＩＤを収容するすべてのＦＣフレームを分散させる必要がある複数のデータ記憶デバイスを含む。ストレージシェルフ・ルータのルーティングロジックは、本質的に、Ｄ＿ＩＤと、ストレージシェルフと、ストレージシェルフ・ルータと、最終的には、ディスクドライブの間の種々のマッピングの取り扱いのために用いられる。ルーティングロジックは、ＦＣフレームがストレージシェルフ・ルータへ向けられているかどうかをＤ＿ＩＤフィールドの値だけからは決定できない。Ｄ＿ＩＤが入力ＦＣ＿ＣＭＮＤフレームをストレージシェルフ・ルータへ向けるかどうかを決定するために、ルーティングロジックは、後述の内部ルーティングテーブル２６１２及び複数のレジスタを参考にして、Ｄ＿ＩＤがストレージシェルフ・ルータによって管理されるディスクドライブのアドレスを表現するかどうかを決定することが必要である。よって、図２６Ｂに表されるように、内部ルーティングテーブル２６１２に関して解釈されるＤ＿ＩＤフィールドは、ストレージシェル２６１６内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続された特定のディスクを指定する。その上、ルーティングロジックは、Ｓ＿ＩＤフィールド２６１１によって指定されたＦＣフレームのソースがストレージシェルフ・ルータを用いて現在ログインされている遠隔のエンティティであるか、及びその遠隔のエンティティがアドレス指定されたディスクドライブと相互接続されているかを判定するために、後述の付加内部テーブル２６１４を参考にする。よって、種々の内部テーブル２６１４に関して解釈されるようなＳ＿ＩＤフィールドは、ＦＣ−ＣＭＮＤフレームによって表現されるコマンドが実行されるべきかどうかを決定する許可スイッチ２６２０として機能する。
【０１０８】
図２６ＣはＦＣＰ−ＤＡＴＡフレームのルーティングと関連したＦＣフレームヘッダフィールドを示す。Ｄ＿ＩＤフィールド２６１０及びＳ＿ＩＤフィールド２６１１と内部テーブル２６１２及び２６１４は、ＦＣＰ−ＣＭＮＤフレームのルーティングと同様に、ストレージシェルフ２６１６内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続されたディスクを指定し、データのディスクへの転送を許可２６２０するため使用される。しかし、ＦＣＰ＿ＤＡＴＡフレームはマルチＦＣＰ＿ＤＡＴＡフレームの書込みシーケンスの一部分であるため、ルーティングロジックがＦＣ＿ＤＡＴＡフレームはストレージシェルフ・ルータにローカルであるディスクへ向けられることを判定すると、ＦＣフレームヘッダ２６０６の付加フィールドはストレージシェルフ・ルータ内のＦＣＰ＿ＤＡＴＡフレームを方向付けるために利用される。図２６Ｃに表されるように、ＲＸ＿ＩＤフィールド２６２２は、ＦＣＰ＿ＤＡＴＡフレームに関連した書込みコマンドを指定したＦＣＰ＿ＣＭＮＤフレームの処理中に、ストレージシェルフ・ルータによって初期的に生成された値を含み、その値が書込みコマンドのコンテキスト２６２４を指定し、このコンテキストは、次に、データがＧＳＭＳを介してＦＣＰ層からＳＡＴＡポート層へ転送できるようにする仮想キュー２６２６を指定する。その上、ＦＣフレームヘッダ２６０６のパラメータフィールド２６２８は、書込みコマンドによって転送されたデータ２６３２の一連の全長の範囲内のＦＣＰ＿ＤＡＴＡフレームに収容されたデータの位置２６３０を示すデータの相対オフセットを含む。コンテキスト２６２４は、適切な順序付けのためＦＣＰ＿ＤＡＴＡフレームをチェックするため使用される次のＦＣＰ＿ＤＡＴＡフレームの予想相対オフセットを格納する。格納された予想相対オフセットがパラメータフィールドの値と一致しないならば、ＦＣＰ＿ＤＡＴＡフレームは乱れた順序で受信されているので、エラー処理を呼び出すことが必要である。
【０１０９】
図２６Ｄは、内部的に生成された管理ファイルのルーティングに関連したＦＣフレームヘッダフィールドを示す。Ｓビット（図２６Ａの２６０２）は、フレームが管理フレームであることを示す。管理ファイルの場合、Ｄ＿ＩＤフィールド２６１０の最下位バイトは、ストレージシェルフ内の特定のストレージシェルフ・ルータを指定するルータ番号を含む。Ｄ＿ＩＤフィールドに含まれるルータ番号は、管理フレームがストレージシェルフ・ルータ、例えば、ストレージシェルフ・ルータ２６３６へ向けられているか、又は、管理ファイルがＸファブリックに関連したＦＣポート２６３８、又は、Ｙファブリックに関連したＦＣポート２６４０を介してアクセス可能であるストレージシェルフ内の別のストレージシェルフ・ルータへ向けられているかを判定するため、後述されるレジスタ２６３４に含まれるローカルルータ番号と比較される。
【０１１０】
最後に、図２６Ｅは、受信されたＦＣＰ＿ＸＦＥＲ＿ＲＤＹフレーム及びＦＣＰ＿ＲＳＰフレームのルーティングに関連したＦＣフレームヘッダフィールドを示す。ＦＣＰ＿ＸＦＥＲ＿ＲＤＹフレーム及びＦＣＰ＿ＲＳＰフレームの場合、ルーティングロジックは、別のストレージシェルフ・ルータによって、遠隔のエンティティ、典型的にはディスクアレイ・コントローラへ向けられるようなフレームを直ちに認識する。よって、ルーティングロジックは、フレームがＸファブリック又はＹファブリックは返信されなければならないことを決定するために、ＦＣフレームヘッダのＲ＿ＣＴＬフィールド２６４２を調べることだけが必要である。
【０１１１】
図２７は、ルーティングロジックによるＦＣフレームのルーティングを容易化するためにストレージシェルフ・ルータ内に保持された７個のメインルーティングテーブルを示す。これらのテーブルは、内部ルーティングテーブル（ＩＲＴ）２７０２、Ｘファブリック外部ルーティングテーブル（ＥＲＴ＿Ｘ）２７０４、Ｙファブリック外部ルーティングテーブル（ＥＲＴ＿Ｙ）２７０６、Ｘファブリック・イニシエータ／ターゲットテーブル（ＩＴＴ＿Ｘ）２７０８、Ｙファブリック・イニシエータ／ターゲットテーブル（ＩＴＴ＿Ｙ）２７１０、Ｘファブリック・ログイン・ペアテーブル（ＬＰＴ＿Ｘ）２７１２、及びＹファブリック・ログイン・ペアテーブル（ＬＰＴ＿Ｙ）２７１４を含む。７個のルーティングテーブルのそれぞれは、インデックスレジスタ（ＩＲＴ＿ＩＮＤＥＸ）２７１６及びデータレジスタ（ＩＲＴ＿ＤＡＴＡ）２７１８のようなインデックス及びデータレジスタが関連付けられる。テーブルの内容は、テーブル内の特定のフィールドを示す値をインデックスレジスタに書き込み、データレジスタからフィールドの内容を読み出し、又は、フィールドの新しい内容をデータレジスタに書き込むことによりＣＰＵによってアクセス可能である。その上、ルータ番号と、Ｘファブリック及びＹファブリックのそれぞれに関してストレージシェルフ・ルータ・アドレスに対応するＤ＿ＩＤの上位２バイトとを格納するため３個のレジスタＳＦＡＲ２７２０、ＸＦＡＲ２７２２及びＹＦＡＲ２７２４が存在する。これは、Ｄ＿ＩＤの下位バイトだけを格納すればよいＩＲＴ、ＥＲＴ＿Ｘ及びＥＲＴ＿Ｙテーブルをよりコンパクトにすることが可能である。
【０１１２】
ＩＲＴテーブル２７０２は、ストレージシェルフ・ルータに接続されたディスクドライブ毎に、又は、換言すれば、ローカルディスクドライブ毎に行を含む。行は、ディスクドライブに割り当てられ、ディスクドライブへ向けられたフレームのＤ＿ＩＤフィールドの下位バイトに収容されたＡＬ＿ＰＡと、ディスクドライブのＬＵＮ番号と、ディスクドライブ内に収容された論理ブロックアドレスの範囲と、２台のＣＰＵのうちＩ／Ｏに向けられた方のＣＰＵを示すフィールドと、行がテーブル内の有効エントリーを表現するかどうかを示す有効ビットとを含む。有効ビットは最大可能台数未満のディスクドライブがストレージシェルフ・ルータに接続されるときに好都合である。
【０１１３】
ＥＲＴ＿Ｘテーブル２７０４及びＥＲＴ＿Ｙテーブル２７０６は、ストレージシェルフ・ルータにローカルではなく、ストレージシェルフにローカルであるディスクドライブをアドレス指定する有効Ｄ＿ＩＤの下位バイトを収容する。これらのテーブルは、後述するように、無駄な内部ＦＣフレーム転送を避けるために使用される。
【０１１４】
ＸファブリックＩＴＴテーブル２７０８及びＹファブリックＩＴＴテーブル２７１０は、ストレージシェルフ・ルータで現在ログインされ、ストレージシェルフ・ルータとのＦＣエクスチェンジを開始可能であり、かつ、ストレージシェルフ・ルータに接続されたディスクドライブでログインされた遠隔のＦＣオリジネータに対応するＳ＿ＩＤ全体を含む。ログインペアテーブル２７１２及び２７１４は、本質的に疎行列であり、ビット値は、ＦＣＰエクスチェンジのため現在ログインされている遠隔のリジネータとローカルディスクドライブのペアに対応するセル内でオンにされる。ログインテーブル２７１２及び２７１４は、かくして、ディスクアレイ・コントローラのような遠隔のエンティティと、ストレージシェルフ・ルータに相互接続されたローカルディスクドライブとの間で進行中の相互接続を表現する有効ログインの指標を与える。
【０１１５】
次に、ストレージシェルフ・ルータのルーティング層を構築するルーティングロジックが一連の詳細なフロー制御図を参照して説明される。図２８は、フロー制御図で使用される簡単化されたルーティングトポロジー及びルーティング宛先の名称を与える。図２９〜３５は、ルーティング層ロジックを記述する階層的な一連のフロー制御図である。
【０１１６】
図２８に表されるように、ルーティング層２８０２は、ＦＣポート２８０４及び２８０６からの入力ＦＣフレームを、そのまま元のＦＣポートに、ＣＰＵで動くＦＣＰロジック及びファームウェアによる処理のためＦＣＰ層２８１０に、又は、コンテキストが確立されたデータフレームの場合には、かなり直接的にＧＳＭＳ層に転送することに関与する。ルーティング層は、それぞれ「Ｆｒｏｍ＿ＦＰ０」及び「Ｆｒｏｍ＿ＦＰ１」と称されるＦＣポート内の入力ＦＩＦＯ２８１２及び２８１４から入力ＦＣフレームを受信する。ルーティング層は、それぞれ「Ｔｏ＿ＦＰ０」及び「Ｔｏ＿ＦＰ１」と称される出力ＦＩＦＯ２８１６及び２８１８の一方にＦＣフレームを書き込むことにより、ＦＣフレームを、一般的にフレームが受信されたポートは反対側のポートであるＦＣポートへ戻す。ルーティング層は、ＦＣＰ＿ＤＡＴＡフレームを、仮想キューを介して、ＧＳＭＳ層にかなり直接的に転送し、プロセス「Ｔｏ＿ＧＳＭＳ」と称され、さらに、ＦＣフレームを処理のためＦＣＰ層２８１０に転送し、「Ｔｏ＿ＦＣＰ」と称される。名称「Ｆｒｏｍ＿ＦＰ０」、「Ｆｒｏｍ＿ＦＰ１」、「Ｔｏ＿ＦＰ０」、「Ｔｏ＿ＦＰ１」、「Ｔｏ＿ＧＳＭＳ」及び「Ｔｏ＿ＦＣＰ」は、ＦＩＦＯからの読出し、ＦＩＦＯへの書込み、ＧＳＭＳ仮想キューメカニズムによるデータ転送、及びＣＰＵへの共有メモリインターフェイスによる状態機械介在型転送のプロセスの省略表記としてフロー制御図で利用される。
【０１１７】
図２９は、ルーティング層ロジックを表現する第１の最上位レベルのフロー制御図である。ルーティング層ロジックは、入力ＦＣフレームをその適切な宛先へ向けるために行われる判定の組として記述される。機能するストレージルータにおいて、図２９〜３５に関して記載されたルーティングロジックは入力ＦＣフレームが処理されるときに呼び出される。ルーティングロジックは、ストレージシェルフ・ルータの状態機械及び論理回路内にある。ストレージシェルフ・ルータは、蓄積交換性の（store-and-forward）、データコピータイプの内部データ転送をできる限り避け、その代わりに、ＦＣポートのＦＩＦＯへ入力されているときでさえ、フレームヘッダ内の情報を使用して、フレームが経路制御可能であるようにストリーム化されるように設計される。換言すれば、ルーティングロジックは、フレームヘッダがＦＩＦＯからの読出しのため利用可能になると直ちに呼び出され、フレームが経路制御され、フレームに収容された初期データが、ＦＣポートによる残りのデータの受信と並行してその宛先へ転送される。ストレージシェルフ・ルータは、２台のＦＣポートの２台の異なる入力ＦＩＦＯの偏りのない処理を確保するため調停ロジックを含むので、ＸファブリックとＹファブリックの両方から入力するＦＣフレームは適時に取り扱われ、ＸファブリックとＹファブリックのいずれも不必要なＦＣフレーム処理遅延、すなわち、飢餓状態に陥ることがない。ルーティングロジックは、ＦＩＦＯに新たに到着したフレームヘッダの利用可能性を示すＦＣポートによって生成された信号により呼び出される。
【０１１８】
ステップ２９０２において、ルーティング層ロジック（ＲＬＬ）は、それぞれ「Ｆｒｏｍ＿ＦＰ０」及び「Ｆｒｏｍ＿ＦＰ１」と称されるＦＣポートの入力ＦＩＦＯの一方から次の入力ＦＣフレームを読む。ステップ２９０４において、ルーティング層ロジックは、フレームヘッダを含むＦＣフレームがクラス３のＦＣフレームであるかどうかを判定する。クラス３のＦＣフレームだけが記載されたストレージシェルフ・ルータの実施形態によってサポートされる。ＦＣフレームがクラス３のフレームでないならば、ＦＣフレームは、ステップ２９０６におけるエラー処理のため、ＦＣＰ層、Ｔｏ＿ＦＣＰ、へ向けられる。尚、これ以降のフロー制御図では、フロー矢印に付随する小文字の「ｅ」は、その矢印によって表現されたフローがエラー状態を取り扱うために起こることを示す。ＦＣフレームが、ステップ２９０４で判定されるように、クラス３のＦＣフレームであるならば、ＲＬＬは、次に、ステップ２９０８において、ＦＣフレームの受信元であるＦＣポートがＳファブリック終点であるか、換言すれば、Ｘファブリックノード若しくはＹファブリックノードであるかどうかを判定する。ストレージシェルフ・ルータは、特定のポートがＳファブリックに関して終点であるかどうかを、換言すれば、設定可能なセッティングからＸファブリックノード若しくはＹファブリックノードであるかどうかを判定可能である。ＦＣフレームヘッダは、上記のようにソースポートのポートアドレスを含む。
【０１１９】
ＦＣフレームのソースポートがＳファブリック終点であり、ＦＣフレームがローカルＳファブリックの外部にあるエンティティから受信されたことを示すならば、ＲＬＬは、ステップ２９１０において、ＳビットのいずれかがＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内にセットされたかどうかを判定する。もしそうであるならば、エラーが発生しており、ＦＣフレームは、ステップ２９０６のエラー処理のためＦＣＰ層、Ｔｏ＿ＦＣＰ、へ向けられる。そうでないならば、ＦＣフレームがＸファブリック、すなわち、Ｘスペース、又は、Ｙファブリック、すなわち、Ｙスペースに属するかどうかを示すために、ステップ２９１２において、適切なＳビットがセットされる。ストレージシェルフ内で相互接続されたストレージシェルフ・ルータの組内でのストレージシェルフ・ルータの位置とは無関係に、２台のＦＣポートのうちの一方がＸファブリックに対応し、２台のＦＣポートのうちのもう一方がＹファブリックに対応することに注意すべきである。上記のように、ＦＣポートとＸ及びＴファブリックとの間の関連性は設定可能である。次に、ＲＬＬは、ステップ２９１４において、ＳビットがフレームはＳファブリックフレームであることを示すためにセットされるかどうかを判定する。もしそうであるならば、ステップ２９１６において、フレームの宛先を決定するためにサブロジック「宛先管理（Management Destination）」が呼び出され、その後、サブロジック「宛先へのルーティング（Route to Destination）」がＦＣフレームをステップ２９１６で決定された宛先へ実際に経路制御するため、ステップ２９１８において、呼び出される。ＦＣフレームが、ステップ２９１４で判定されるように、Ｓファブリック管理フレームでないならば、ステップ２９２０において、ＲＬＬは、各ディスクドライブがその固有のＦＣノードアドレスを有するモードとして記載されたトランスペアレント・モードでＲＬＬが現在動作しているかどうかを判定する。ストレージシェルフ・ルータがトランスペアレント・モードで動作しているならば、サブロジック「トランスペアレントデスティネーション（Transparent Destination）」が、ステップ２９２２において、フレームの宛先を決定するために呼び出され、次に、サブロジック「宛先へのルーティング」がフレームをその宛先へ実際に経路制御するためにステップ２９１８において呼び出される。そうでなければ、サブロジック「宛先（Destination）」が、ステップ２９２４において、フレームの宛先を決定するために呼び出され、その後、フレームは、ステップ２９１８におけるサブロジック「宛先へのルーティング」の呼び出しによって、その宛先へ経路制御される。
【０１２０】
図３０は、図２９のステップ２９１６から呼び出されるサブロジック「宛先管理」のフロー制御図表示である。ステップ３００２において、ＲＬＬは、ＦＣフレームのヘッダ内のＤ＿ＩＤに格納されたストレージシェルフ・ルータ番号がストレージシェルフ・ルータのストレージシェルフ・ルータ番号に一致するかどうかを判定する。この判定は、ストレージシェルフ内のストレージシェルフ・ルータに割り当てられ、ＳＦＡＲレジスタに格納されたルータ番号を使用して行える。Ｄ＿ＩＤに格納されたルータ番号が、ステップ３００２で判定されるときに、ＳＦＡＲレジスタ内のルータ番号と一致するならば、変数「DESTINATION」がステップ３００４において値「Ｔｏ＿ＦＣＰ」にセットされ、フレームがＦＣＰ層へ送信されるべきことを示す。ルータ番号が一致しないならば、ステップ３００６において、ＲＬＬはＦＣフレームのＤ＿ＩＤ内のルータ番号がストレージシェルフ・ルータのルータ番号よりも大きいかどうかを判定する。ＦＣフレームのＤ＿ＩＤ内のルータ番号がＳＦＡＲレジスタに格納されたストレージシェルフ・ルータのルータ番号よりも大きいならば、制御はステップ３００８へ進む。さもなければ、制御はステップ３０１０へ進む。ステップ３００８と３０１０の両方において、ＲＲＬは、フレームがストレージシェルフ内のＳファブリック終点に到達したかどうかを判定する。そうであるならば、管理フレームは、誤ってアドレス指定されたか、又は、適切な宛先により誤って対応されているので、どちらの場合も、変数「DESTINATION」は、ステップ３００４において、「Ｔｏ＿ＦＣＰ」にセットされ、その結果、そのフレームは、過って受信されたフレームとしてＣＰＵによって処理される。しかし、ステップ３００８と３０１０の両方において、現在のストレージシェルフ・ルータがＳファブリック終点でないならば、変数「DESTINATION」は、Ｄ＿ＩＤ内のルータ番号が現在のルータのルータ番号より小さい場合、ステップ３０１２において、「Ｔｏ＿ＦＰ０」にセットされ、Ｄ＿ＩＤ内のルータ番号が現在のストレージシェルフ・ルータのルータ番号よりも大きい場合、変数「DESTINATION」は、ステップ３０１４において、「Ｔｏ＿ＦＰ１」にセットされる。ストレージシェルフ内のストレージルータの数値識別番号は、Ｘファブリックに関して増加し、Ｙファブリックに関して減少することに再度注意すべきである。
【０１２１】
図３１は、図２９のステップ２９２４から呼び出されるサブロジック「宛先」のフロー制御図表示である。このサブロジックは、ストレージシェルフ・ルータがトランスペアレント・モードで動作していないとき、換言すれば、ストレージシェルフ・ルータが複数台のディスクドライブをＡＬ＿ＰＡにマッピングしているときに、ＦＣフレームの宛先を決定する。ステップ３１０２において、ＲＬＬは、フレームがＸＦＥＲ＿ＲＤＹ又はＲＳＰフレームであるかどうかを判定する。これらのフレームはディスクアレイ・コントローラへ返信される必要がある。そうであるならば、ステップ３１０３において、ＲＬＬはフレームがＸファブリックに属するどうかを判定する。フレームがＸファブリックに属するならば、変数「DESTINATION」は、ステップ３１０４において、値「Ｔｏ＿ＦＰ０」にセットされ、フレームをＸ  ＦＣポートへ向ける。フレームが、ステップ３１０２において判定されるときに、Ｙファブリックフレームであるならば、変数「DESTINATION」は、ステップ３１０６において、フレームをＹ  ＦＣポートへ向けるために「Ｔｏ＿ＦＰ１」にセットされる。ステップ３１０２において判定されるときに、フレームがＸＦＥＲ＿ＸＦＥＲ＿ＲＤＹフレーム又はＦＣＰ＿ＲＳＰフレームではないならば、ステップ３１０８で、ＲＬＬルーチンはそのフレームがＦＣＰ＿ＣＭＮＤであるかどうかを判定する。もしそうであるならば、変数「DESTINATION」は、ステップ３１１０で、「Ｔｏ＿ＦＣＰ」にセットされ、そのフレームはストレージシェルフ・ルータにローカルであるＬＵＮへ向けられたＦＣＰ＿ＣＭＮＤフレームであること、及び、そのフレームはＦＣＰコマンドのためのコンテキストを確立するためにファームウェア処理のためのＦＣＰ層へ向けられるべきであることを示す。ステップ３１０８で判定されるときに、フレームがＦＣＰ＿ＣＭＮＤフレームではないならば、ステップ３１１２で、ＲＬＬはそのフレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを判定する。そのフレームがデータフレームではないならば、変数「DESTINATION」は、ステップ３１１４で、「Ｔｏ＿ＦＣＰ」にセットされ、エラー処理を呼び出し、そのエラー処理を用いてファームウェアは、受信されたフレームのタイプとそのフレームが処理されるべき方法を判定する。ステップ３１１２で判定されるときに、フレームがＦＣＰ＿ＤＡＴＡフレームであるならば、ステップ３１１６で、ＲＬＬは、そのフレームがレスポンダ又はオリジネータによって送信されたかどうかを判定する。そのフレームがオリジネータによって送信されているならば、変数「DESTINATION」はステップ３１１０で「Ｔｏ＿ＦＣＰ」にセットされ、そのフレームをＦＣＰ層処理へ導く。データフレームがレスポンダによって送信されているならば、ステップ３１１８で、ＲＬＬは、フレームが最初にＳファブリックの外部から受信されたか、又は、フレームヘッダ内のＳビット符号化されたファブリック表示がそのフレームを受信したポートとは反対側のポートと矛盾するかどうかを判定する。いずれかの条件が真であるならば、フレームは誤って受信されたものであり、変数「DESTINATION」は、ステップ３１１４において、「Ｔｏ＿ＦＣＰ」にセットされ、そのフレームを��ラー処理のためＣＰＵへ向ける。そうでなければ、制御はステップ３１０３へ進み、Ｘポート又はＹポートのいずれかへ向かう。
【０１２２】
図３２は、図２９のステップ２９２２から呼び出されるサブロジック「トランスペアレントデスティネーション」のフロー制御図表示である。このサブロジックは、ストレージシェルフ・ルータがトランスペアレント・モードで動作し、各ディスクドライブがその固有のＡＬ＿ＰＡを有するときに、ＦＣフレームの宛先を決定する。ステップ３２０２で、ＲＬＬは、ＦＣフレーム内のヘッダのＤ＿ＩＤフィールドの上位２バイトがフレームを受信したソースポートに対応するＸＦＡＲレジスタ又はＹＦＡＲレジスタの内容と等価であるかどうか、並びに、Ｄ＿ＩＤフィールドの下位バイトはＡＬ＿ＰＡがローカルディスクドライブに割り当てられていることを示すＩＲＴテーブルに収容されたＡＬ＿ＰＡを含むかどうかを判定する。もしそうであるならば、ＦＣフレームは現在のストレージシェルフ・ルータへ向けられている。そうでなければ、ＦＣフレームは別のストレージシェルフ又はストレージシェルフ・ルータへ向けられている。ＦＣフレームが現在のストレージシェルフ・ルータへ向けられている場合、ステップ３２０４で、ＲＬＬは、Ｓ＿ＩＤが適切なＩＩＴテーブルに収容されたＳ＿ＩＤに対応するかをチェックすることにより、ＦＣフレームのオリジネータがストレージシェルフ・ルータと相互接続されたディスクドライブとのＦＣエクスチェンジを現時点で開始する能力を備えた外部ＦＣオリジネータとして特定された遠隔のエンティティであるかどうかを判定する。そして、Ｓ＿ＩＤが適切なＩＴＴテーブルで見つけられた場合、ＲＬＬは、ＦＣ−フレームヘッダに収容されたＳ＿ＩＤと関連付けられた遠隔のエンティティがフレームの宛先とされたディスクに関して現在ログインされているかどうかを調べるために適切なＬＰＴテーブルをさらにチェックする。ステップ３２０４で判定されるときに、Ｓ＿ＩＤが現在ログインされた遠隔のエンティティであり、かつ、ストレージシェルフ・ルータと相互接続されフレームの宛先とされたディスクドライブとのＦＣエクスチェンジを始める能力を備えた遠隔のエンティティを表すならば、ステップ３２０６で、変数「DESTINATION」は、フレームを処理のためＦＣＰ層へ向けるため「Ｔｏ＿ＦＣＰ」にセットされる。それに反して、Ｓ＿ＩＤが適切なＩＩＴテーブルではないか、又は、ＦＣフレームが向けられたソース及びディスクドライブが、適切なＬＰＴテーブルによって示されるように、現在ログインされていないならば、変数「DESTINATION」は、フレームをエラー処理のためＦＣＰ層へ向けるために、ステップ３２０８において、「Ｔｏ＿ＦＣＰ」にセットされる。
【０１２３】
Ｄ＿ＩＤフィールドが、ステップ３２０２で判定されるときに、適切なＦＡＲレジスタの内容と一致しない場合、ステップ３２１０において、ＲＬＬは、フレームがＸファブリックフレームであるかどうかを判定する。もしそうであるならば、ステップ３２１２において、ＲＬＬは、フレームがストレージシェルフ内の別のストレージシェルフ・ルータへ向けられているかどうかを判定する。そうでなければ、変数「DESTINATION」は、ステップ３２１４において、別のストレージシェルフへ転送する外部Ｘファブリックへフレームを返送するために、「Ｔｏ＿ＦＰ０」にセットされる。ＥＲＴ＿Ｘテーブルが、ステップ３２１２で判定されるときに、フレームの宛先がストレージシェルフ内の別のストレージシェルフ・ルータに取り付けられたディスクドライブであることを示すエントリーを含むならば、ステップ３２１６において、ＲＬＬは、現在のストレージシェルフ・ルータがＹファブリック終点を表現するかどうかを判定する。もしそうであるならば、フレームは正しく処理されず、Ｙファブリックには送信されないので、変数「DESTINATION」は、ステップ３２０８において、値「Ｔｏ＿ＦＣＰ」にセットされ、その結果として、フレームがエラー処理のためＦＣＰ層へ向けられる。そうでなければ、変数「DESTINATION」は、ステップ３２１８において、「Ｔｏ＿ＦＰ１」にセットされ、Ｓファブリックを介してフレームをストレージシェルフ内の後続のストレージシェルフ・ルータに転送する。ステップ３２１０で判定されるときに、受信フレームがＸファブリックフレームではないならば、ステップ３２２０において、ＲＬＬは受信フレームがＹファブリックフレームであるかどうかを判定する。もしそうであるならば、フレームは、ステップ３２２２から始めて、Ｘファブリックフレームの処理と対称的かつ同等に処理される。そうでなければ、変数「DESTINATION」は、フレームをエラー処理のためＦＣＰ層へ向けるために、ステップ３２０８において、「Ｔｏ＿ＦＣＰ」にセットされる。
【０１２４】
図３３は、図２９のステップ２９１８から呼び出されるサブロジック「宛先へのルーティング」のフロー制御図表示である。このサブロジックは、受信ＦＣフレームを前に呼び出されたロジックで決定された宛先へ向ける。ステップ３３０２において、ＲＬＬは、変数「DESTINATION」の値が「Ｔｏ＿ＦＰ０」又は「Ｔｏ＿ＦＰ１」であるかどうかを判定する。もしそうであるならば、同じステップにおいて、ＲＬＬは、宛先がＦＣフレームを受信したポートの反対側のポートと関連付けられているかどうかを判定する。もしそうであるならば、ステップ３３０４において、ＲＬＬは、変数「DESTINATION」の内容によって示される宛先がＳファブリック終点を表現するポートと関連付けられたキューであるかどうかを判定する。もしそうであるならば、ステップ３３０６において、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内にセットされたＳスペースビットは、ローカルＳファブリックからフレームを送出する前にクリアされる。ステップ３３０８において、ＲＬＬは、フレームがＸファブリックとＹファブリックのどちらに属するかを判定し、ステップ３３１０又は３３１２において、フレームを適切な出力キューにキュー入れする。ステップ３３０２において判定されるときに、変数「DESTINATION」の内容がＦＰ０ポート若しくはＦＰ１ポートを示さないならば、又は、宛先がＦＣフレームを受信したポートの反対側ではないならば、ステップ３３１４において、ＲＬＬは、変数「DESTINATION」の内容がフレームは一方のＦＣポートへ向けられるべきであることを示すかどうかを判定する。フレームが一方のＦＣポートへ向けられるべきであるならば、フレームは、ＦＣＰ層によるエラー処理のため、ステップ３３１６においてＦＣＰ層へ向けられる。ステップ３３１８でＲＬＬによって判定されるときに、変数「DESTINATION」の内容が、フレームはＦＣＰ層、「Ｔｏ＿ＦＣＰ」へ向けられることを示すならば、フレームはステップ３３１６においてＦＣＰ層へ向けられる。そうでなければ、ＲＬＬは、ステップ３３２０において、ＦＣフレームヘッダのＲ＿ＣＴＬフィールドがそのフレームはＦＣＰフレームであることを示すかどうかをチェックする。そうでなければ、フレームは、ステップ３３１６において、エラー処理のためＦＣＰ層へ向けられる。さもなければ、ステップ３３２２において、ＲＬＬは、フレームがＦＣＰ＿ＣＭＮＤフレームであるかどうかを判定する。もしそうであるならば、ステップ３３２４において、サブロジック「宛先をマッピング（Map Destination）」が呼び出され、その後、ＲＬＬは、ステップ３３２６において、変数「DESTINATION」の内容が「Ｔｏ＿ＦＣＰ」に一致したままであるかどうかを判定する。そうであるならば、フレームはステップ３３１６においてＦＣＰ層へ向けられる。さもなければ、変数「DESTINATION」の内容が今度は、ステップ３３２８で判定されるときに、２台のＦＣポートのうちの一方へのフレームの転送を示し、ＦＣポート宛先がフレームを受信したフレームと同じＦＣポートであるならば、フレームは、ステップ３３１６において、エラー処理のためＦＣＰ層へ向けられる。さもなければ、制御はステップ３３０４へ進み、フレームを２台のＦＣＰポートの一方に入れる。そのフレ���ムが、ステップ３３２２で判定されるときに、ＦＣＰ＿ＣＭＮＤフレームでないならば、サブロジック「他のルーティング（Other Routing）」がステップ３３３０で呼び出される。
【０１２５】
図３４は、ステップ３３２４で呼び出されるサブロジック「宛先をマッピング」のフロー制御図表示である。ＲＬＬは最初に、ステップ３４０２において、ＬＵＮ、ＬＢＡ、又は、ＬＵＮとＬＢＡの組み合わせのマッピングが現時点でストレージシェルフ・ルータによって実行されているかどうかを判定する。実行されていないならば、ＲＬＬは、ステップ３４０４で、ストレージシェルフ・ルータがこの時点においてトランスペアレント・モードで動作中であるかどうかを判定する。もしそうであるならば、変数「DESTINATION」の値はステップ３４０６で「Ｔｏ＿ＦＣＰ」にセットされる。ストレージシェルフ・ルータが、ステップ３４０４で判定されるときに、トランスペアレント・モードで動作していないならば、ＲＬＬは、ステップ３４０８において、フレームのソースがフレームの宛先とデータを交換するためログインされていることを適切なＬＰＴテーブルが示すかどうかを判定する。そうであるならば、変数「DESTINATION」はステップ３４０６において「Ｔｏ＿ＦＣＰ」にセットされる。そうでなければ、宛先は、フレームをエラー処理のためＣＰＵへ向けるためにステップ３４０６において「Ｔｏ＿ＦＣＰ」にセットされる。ＬＵＮ、ＬＢＡ、又は、ＬＵＮとＬＢＡの組み合わせのマッピングがストレージシェルフ・ルータによって実行中であるならば、ＲＬＬは、ステップ３４１０において、指定された宛先ディスクがＩＲＴテーブルに関連したエントリーを有するかどうかを判定する。そうであるならば、制御はステップ３４０４へ進む。そうでなければ、ステップ３４１２において、ＲＬＬは、レンジチェックが無効にされているかどうかを判定する。レンジチェックが無効であるならば、ステップ３４１４において、ＲＬＬは、フレームがＦＰ０ポートで受信されたかどうかを判定する。そうであるならば、変数「DESTINATION」はステップ３４１６で「Ｔｏ＿ＦＰ１」にセットされる。そうでなければ、変数「DESTINATION」の内容はステップ３４１８で「Ｔｏ＿ＦＰ０」にセットされる。レンジチェックが有効にされているならば、ステップ３４２０において、ＲＬＬは、指定された宛先ディスクがＦＰ０ポートを介してアクセス可能であるかどうかを判定する。もしそうであるならば、制御はステップ３４１８へ進む。そうでなければ、ステップ３４２２において、ＲＬＬは、指定された宛先ディスクがＦＣポートＦＰ１を介してアクセス可能であるかどうかを判定する。もしそうであるならば、制御はステップ３４１６へ進む。そうでなければ、変数「DESTINATION」は、エラー処理の目的のためステップ３４０６において「Ｔｏ＿ＦＣＰ」にセットされる。最終的なステップで、ステップ３４１６又はステップ３４１８のいずれかで２台のＦＣポートの一方へマッピングされたフレームに対し、ＲＬＬは、ステップ３４２４において、そのフレームがこの時点で向けられているポートがＳスペース終点であるかどうかを判定する。もしそうであるならば、変数「DESTINATION」の値は、フレームをエラー処理のためＦＣＰへ向けるためにステップ３４０６において「Ｔｏ＿ＦＣＰ」にセットされる。
【０１２６】
図３５は、図３３のステップ３３３０におけるサブロジック「他のルーティング」のフロー制御図表示である。ステップ３５０２において、ＲＬＬは、フレームのＲＸ＿ＩＤフィールドが現在のストレージシェルフ・ルータ、又は、それに接続されたディスクドライブがそのフレームのＦＣレスポンダであることを示すかどうかを判定する。もしそうであるならば、ステップ３５０４において、ＲＬＬは、フレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを判定する。もしそうであるならば、ステップ３５０６において、ＲＬＬは、そのフレームの有効コンテキストが存在するかどうかを判定する。もしそうであるならば、フレームは、上記のように、データをＳＡＴＡポートへ転送するため、ステップ３５０８においてＧＳＭＳ、「Ｔｏ＿ＧＳＭＳ」へ向けられる。そうでなければ、フレームは、ステップ３５１０において、エラー処理のためＦＣＰ層へ向けられる。ＦＣフレームヘッダのＲＸ＿ＩＤフィールドが、ステップ３５０２において判定されるときに、このストレージシェルフはフレームのＦＣレスポンダである旨を示さないならば、ステップ３５１２において、ＲＬＬは、ＦＣフレームヘッダ内のＲＸ＿ＩＤフィールドによって特定されたストレージシェルフ・ルータがフレームを受信したポートとは反対側のポートを介してアクセス可能であるかどうかを判定する。もしそうでなければ、フレームは、ＦＣＰ層によるエラー処理のためキュー「Ｔｏ＿ＦＣＰ」に入れられる。そうではなく、ＲＸ＿ＩＤがフレームを受信したポートとは反対側のポートからアクセス可能であるストレージシェルフ・ルータを特定する場合、ＲＬＬは、ステップ３５１４において、そのポートがＳファブリック終点であるかどうかを判定する。もしそうであるならば、ステップ３５１６において、ＲＬＬは、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドにセットされたＳスペースビットを除去する。ステップ３５１８において、ＲＬＬは、フレームがＸファブリックとＹファブリックのどちらに属するかを判定し、ステップ３５２０又は３５２２のいずれかで、そのフレームをそのフレームが属するファブリックに適したキューにキュー入れする。
【０１２７】
ＳＣＳＩコマンド／ＡＴＡコマンドの翻訳
上記のように、本発明の一実施形態を表すストレージシェルフ・ルータは、ＦＣＰ＿ＣＭＮＤフレームがＦＣディスクドライブへ向けられているかのように、ディスクアレイコントロールによってストレージシェルフ・ルータへ向けられたＦＣＰ＿ＣＭＮＤフレームを処理し、ＦＣＰ＿ＣＭＮＤフレーム内のＳＣＳＩコマンドを、ＳＣＳＩコマンドを実行するためＳＡＴＡディスクドライブへ送信され得る１個以上のＡＴＡコマンドに翻訳する。以下の表５は、ストレージシェルフ・ルータによって受信されたＳＣＳＩコマンドと、ＳＣＳＩコマンドを実行するために使用されるＡＴＡコマンドとの間の対応関係を表す。
【表５】
2007501987.tif 000007
【０１２８】
ストレージシェルフ・ルータ・インターフェイスのトンネリング
図３６Ａは、本発明の一実施形態を表すストレージシェルフ・ルータを含むディスクアレイ内の概念的なインターフェイスレベルを示す。図３６Ａにおいて、ディスクアレイ・コントローラ３６０２はストレージシェルフ・ルータ３６０４を介してストレージシェルフとインターフェイスをとる。ストレージシェルフ・ルータは、次に、高可用性ストレージシェルフの内部ディスクドライブ３６０６〜３６１３のような内部大容量記憶デバイスとインターフェイスをとる。ストレージシェルフ・ルータ３６０４はディスクアレイ・コントローラ３６０２への仮想インターフェイスを提供する。例えば、ストレージシェルフ・ルータは、ディスクアレイ・コントローラ３６０２がストレージシェルフの記憶容量全体を４台の仮想論理ユニット３６１４〜３６１７として見るインターフェイスを提供する。ストレージシェルフ・ルータは、ディスクアレイ・コントローラ３６０２によって仮想論理ユニット３６１４〜３６１７へ向けられたアクセス動作を、ストレージシェルフ・ルータ３６０４によって内部ディスクドライブ３６０６〜３６１３へ向けられた対応するアクセス動作に翻訳する。ディスクアレイ・コントローラ３６０２は、仮想インターフェイスを使用するとき、ストレージシェルフ・ルータ３６０４、又は、内部ドライブ３６０６〜３６１３の実際の特性及び容量を意識しないが、その代わりに、ストレージシェルフ・ルータ３６０４によって提供された仮想インターフェイスの仮想論理ユニット３６１４〜３６１７だけを認識する。
【０１２９】
上記のように、前のサブセクションにおいて、仮想インターフェイス及び仮想インターフェイスをサポートするメカニズムは相当に複雑であり、仮想インターフェイスは多数の複雑さと細部を隠すことによってディスクアレイ・コントローラに多大な利益をもたらす。しかし、ディスクアレイ・コントローラ３６０２のような外部処理エンティティが内部ディスクドライブ３６０６〜３６１３に直接アクセスすることを要求する状況がある。例えば、ディスクアレイ・コントローラは、マイクロコードを内部ディスクドライブへダウンロードすること、故障したディスクドライブを評価するため、若しくは、故障モードを予測するためにディスクドライブをテストすること、又は、種々のテスト用プロセスを実行することを必要とする。前のサブセクションに記載された、ストレージシェルフ・ルータによって一般的に提供される仮想インターフェイスは、外部処理エンティティによる内部ディスクドライブへのこのような直接アクセスを提供しない。
【０１３０】
ストレージルータは、ディスクアレイ・コントローラのような外部処理エンティティへの直接ディスクインターフェイスを提供するように設計される。しかし、本発明の一実施形態を表すストレージシェルフ・ルータは、前のセクションに記載されたような仮想インターフェイスを提供するだけでなく、ＦＣ互換性がないディスクドライブがストレージシェルフで使用され、ＦＣプロトコルによってアクセスされることを可能にする。多数のＡＴＡディスクドライブコマンドのような多数のデバイス専用コマンドは、ＦＣＰプロトコル内にかなり直接的な対応するコマンドを有するが、ＦＣＰプロトコルへ簡単に翻訳できない多数のデバイス専用及びベンダ専用コマンドが存在する。さらに、ストレージシェルフ・ルータは、このようなコマンドセット及びインターフェイスが非常に多種多様であるので、多数の異なるデバイス専用及びベンダ専用内部ドライブインターフェイスへのインターフェイスを簡単に準備できない。ある種の場合、外部処理エンティティは、ディスクドライブ製造業者によってストレージシェルフ・ルータ製造業者へ提供されていない特殊なコマンドを内部ディスクドライブへ向けることが必要である。よって、図３６Ａに表されるように、ディスクアレイ・コントローラ３６０２による内部ディスクドライブへのアクセスは、論理ユニット３６１４〜３７１７のような仮想インターフェイスを介するか、又は、外部エンティティがストレージシェルフ内に存在していると想定する仮想ＦＣディスクドライブ３６２０〜３６２７へ向けられたＦＣディスクドライブコマンドを用いるアクセスに制限される。内部ディスクドライブがＡＴＡディスクドライブ３６０３〜３６１３である場合、ディスクアレイ・コントローラは、ディスクドライブ及びベンダ専用コマンドを内部ディスクドライブへ向けることができない。
【０１３１】
図３６Ｂは、本発明の一実施形態を表すストレージシェルフ・ルータ・インターフェイスのトンネリング方法及びシステムを示す。図３６Ｂに示されるように、ストレージシェルフ・ルータは、一般的にストレージシェルフ・ルータによってディスクアレイ・コントローラに供給される仮想ストレージシェルフ３６１４〜３６１７と仮想ディスクドライブ３６２０〜３６２７を完全にバイパスして、ディスクアレイ・コントローラ３６０２がコマンドを内部ディスクドライブへ向け、そして、内部ディスクドライブから応答を受信するための直接的な経路、すなわち、トンネルを準備する。ストレージシェルフ・ルータは、ストレージシェルフ・ルータ・インターフェイス・トンネルを介して送受信されるコマンドを翻訳又は解釈せずに、単にＦＣフレームからデバイス専用コマンド及びベンダ専用コマンドをアンパックし、変更や翻訳がなされていないそのコマンドを内部ディスクドライブへ転送し、内部ディスクドライブからの応答を、変更や翻訳を加えずに、ＦＣフレームにパッケージ化し、そのＦＣフレームをディスクアレイ・コントローラへ転送する。
【０１３２】
ストレージシェルフ・インターフェイスのトンネリングの他に、ストレージシェルフ・インターフェイス・トンネルを実施するために使用されるメカニズムは、内部大容量記憶デバイス内に格納されたデータに向けられた通常のデータアクセス動作ではアクセスすることができないストレージシェルフ・ルータ内のフラッシュメモリ、パスコントローラカード、及び内部ディスクに格納された種々のデータ構造及び情報へアクセスするために、ディスクアレイ・コントローラのような外部処理エンティティによってさらに使用される。図３７は、本発明の一実施形態を表す高可用性ストレージシェルフの種々のコンポーネントに含まれる種々のデータ構造を示す。高可用性ストレージシェルフの一実施形態では、ストレージシェルフ・ルータ３７０４内のフラッシュメモリ３７０２は、カスタマ指定のビヘイビヤ（behavior）データ構造３７０６とパーシステントログ（persistent log）データ構造３７０８を含む。これらのデータ構造は、カスタマ専用パラメータと、ストレージシェルフ・ルータによって環状バッファに記録されたエラー情報とを含む。同じ実施形態では、パスコントローラカード３７１２のようなパスコントローラカード内のフラッシュメモリ３７１０のようなフラッシュメモリは、ディスクドライブビヘイビヤデータ構造を含む。ストレージシェルフ・ルータ及びパスコントローラカードのファームウェアはさらにフラッシュメモリに格納される。データ構造及びファームウェアは、ストレージシェルフ・ルータ・インターフェイストンネリングのため利用されたメカニズムによってストレージシェルフとの間で読み書きされる。最後に、内部ディスクドライブ３６１８のセクタ３７１４及び３７１６のような各内部ディスクドライブ内のある特殊なセクタは、ストレージシェルフ・ルータによって初期化され保持されるが、ストレージシェルフ・ルータ・インターフェイストンネルを実施するメカニズムを用いて、ディスクアレイ・コントローラのような外部処理エンティティによって部分的にアクセスされる。
【０１３３】
前のサブセクションに記載されるように、ディスクアレイ・コントローラのような外部処理エンティティは、ストレージシェルフ・ルータによって構築され保持された、ストレージシェルフのビュー、すなわち、仮想ストレージシェルフ・インターフェイスを介して、ストレージシェルフに格納されたデータにアクセスする。そのストレージシェルフ・インターフェイスは、一般に、１台以上の論理ユニットを提供するＦＣディスク又はＳＣＳＩデバイスとそれぞれが関連付けられた１個以上のファイバチャネルアドレスとして外部処理エンティティに見える。外部処理エンティティは、上記のようにＦＣＰプロトコル内にパッケージ化されたＳＣＳＩプロトコルコマンドを使用してストレージシェルフ内のＳＣＳＩに準拠した大容量記憶デバイスと相互作用する。しかし、実際にはストレージシェルフ内に存在する大容量記憶デバイスは、上記のように、ＦＣ／ＳＣＳＩに準拠しない。
【０１３４】
ＡＴＡディスクドライブインターフェイスのようなネイティブ内部ディスクドライブインターフェイスと図３７〜４０を参照して説明された種々のデータ構造の両方へのディスクアレイ・コントローラのような外部処理エンティティによる直接アクセスを提供するために、ストレージシェルフ・ルータは、ＦＣＰコマンド、すなわち、（１）バッファ書込み（ＷＲＩＴＥ−ＢＵＦＦＥＲ）、及び（２）バッファ読出し（ＲＥＡＤ−ＢＵＦＦＥＲ）を利用する。これらのコマンドは、外部処理エンティティによってストレージシェルフ・ルータへ送信されたＦＣＰ＿ＣＭＮＤフレーム内にパッケージ化される。ＷＲＩＴＥ−ＢＵＦＦＥＲ及びＲＥＡＤ−ＢＵＦＦＥＲは、現行のＦＣ互換性装置の観点からは多少旧式であり、トンネリングメカニズムのため利用可能なプロトコル伝達手段を表す。
【０１３５】
図３８Ａ〜Ｆは、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンド及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドのレイアウトと、一例としてのコマンドヘッダ及び応答を表す。図３８ＡはＦＣＰ＿ＣＭＮＤフレーム内のフィールドを表す。ＦＣＰ＿ＣＭＮＤフィールドには、（１）宛先論理ユニットのアドレスを収容するＬＵＮフィールド３８０２と、（２）タスク属性フィールド３８０４と、（３）種々のリセット及びアボート動作を指定するタスク管理フラグ３８０６と、（４）コマンド記述語ブロック（command descriptor block：ＣＤＢ）３８０８と、（５）転送されるべき最大バイト数を指定するデータ長フィールドとが含まれる。ストレージシェルフ・ルータ・インターフェイスのトンネリングのため使用されるとき、ＬＵＮフィールドは、コマンドが向けられる特定のＡＴＡディスクドライブの表示を格納するが、別個のＡＬ＿ＰＡが各内部ディスクドライブのため使用される場合には、ＬＵＮフィールドは０であり、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンド及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドはＦＣフレームヘッダによってディスクドライブへ向けられる。ＡＴＡディスクアドレスは管理ツールを介して外部処理エンティティによって獲得され、それによってストレージシェルフの詳細な設定がアクセスされる。ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンド又はＲＥＡＤ＿ＢＵＦＦＥＲコマンドの場合に、タスク管理フラグはセットされない。
【０１３６】
図３８Ｂは、汎用ＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドのレイアウトを表す。ＣＤＢは、（１）ＣＤＢによって提示されたコマンド及びＣＤＢの長さを指定するオペレーションコードフィールド３８１０と、（２）指定されたコマンドのためのコマンド専用パラメータ３８１２と、（３）チェック状態処理及び多重コマンドリンクなどを指定する制御バイト３８１４とを含む。ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンド及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドの場合、本発明の一実施形態において、オペレーションコードフィールドは、それぞれ、値「００１１１０１１ｂ」及び「００１１１１００ｂ」を格納し、制御バイトは「０」である。
【０１３７】
図３８ＣはＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドのＣＤＢを表す。ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドのＣＤＢは以下のコマンド専用パラメータを含み、すなわち、（１）モードフィールド３８１５は、値「０１ｈ」でベンダ専用モードが使用されることを示し、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドのタイプは後のバッファＩＤフィールドによって指定され、（２）バッファＩＤ３８１６は、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドによって要求される動作を本質的に指定し、要求される動作には、（ａ）ストレージシェルフ・ルータ及びオプション的なパスコントローラカードのファームウェアのダウンロード及びセーブ「００ｈ」と、（ｂ）デジタルドライブ・シグネチャーのディスクドライブ内の特殊セクタへの転送及び書き込み「０１ｈ」と、（ｃ）カスタマ指定ビヘイビヤデータ構造のストレージシェルフ・ルータフラッシュメモリへの転送「０２ｈ」と、（ｄ）ディスクドライブビヘイビヤデータ構造のパスコントローラフラッシュメモリへの転送及びセービング「０３ｈ」と、（ｅ）ＡＴＡパススルー（ATA pass through：ＡＰＴ）又はトンネル化ＡＴＡコマンド「０６ｈ」と、（ｆ）パスコントローラカードファームウェア「０８ｈ」とを含む。本質的に、バッファＩＤは、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドによって表現される要求された動作のタイプを指定するＷＲＩＴＥ＿ＢＵＦＦＥＲタイプフィールドであり、（３）バッファオフセットフィールド２８１８は無視され、（４）転送長フィールド３８２０は、コマンドヘッダ及び／又は後に続くＦＣＰ＿ＤＡＴＡフレームのデータ・ペイロードサイズを指定し、この転送長は、カスタマ指定ビヘイビヤ及びディスクドライブ・ビヘイビヤデータ構造のようなデータ構造の場合には既知の固定長であり、ＡＰＴコマンド及びファームウェアダウンロードの場合には可変長である。
【０１３８】
図３８Ｄは、ＡＰＴ、ストレージルータ・インターフェイスのトンネリングメカニズムの一部としてＦＣＰ＿ＣＭＮＤ  ＷＲＩＴＥ＿ＢＵＦＦＥＲフレームの後に続く後のＦＣＰ＿ＤＡＴＡフレームで送信されたＡＴＡコマンドのコマンドヘッダのレイアウトを表す。コマンドヘッダに含まれるのは、（１）ストレージシェルフ・ルータによって使用されるべきＡＴＡコマンドのタイムアウト値を指定するタイムアウト値フィールド３８２１と、（２）多数のフラグ、すなわち、（ａ）デバイス内のデバイス制御レジスタにデバイス制御フィールド内の値が書き込まれるべきかどうかを表すＤＣＶフラグ３８２２と、（ｂ）ディスクドライブからの電源の除去を指定するＰＯＦフラグ３８２４と、（ｃ）ディスクの電源が回復されるべきことを示すＰＵＰフィールド３８２６と、（ｄ）ディスクドライブにハードリセットを出すべきことを指定するＨＲＳＴフィールド３８２８と、（ｅ）プログラムドＩ／Ｏがコマンド転送のため使用されるかどうかを指定するＰＩＯフィールド３８３０と、（ｆ）コマンドがデータ転送に関係するかどうかを指定するデータフラグ３８３２と、（ｇ）コマンドが読出しコマンドであるか書込みコマンドであるかを指定するＲＮＷフラグとを含む多数のフラグと、（３）（データフラグがセットされている場合に）転送されるべきバイト数を指定するペイロード長３８３６と、（４）ＡＴＡコマンドを指定するために用いられる多数のＡＴＡコマンド専用フィールド３８３８である。
【０１３９】
図３８Ｅは、ＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＣＤＢを表す。ＲＥＡＤ＿ＢＵＦＦＥＲ  ＣＤＢは、上記のＷＲＩＴＥ＿ＢＵＦＦＥＲ  ＣＤＢに類似しているが、オペレーションコードフィールドは異なる値を格納し、転送長フィールド３８４０は要求中の外部処理エンティティへ返送されるべきデータの長さを指定し、バッファＩＤフィールド３８４２は、以下のＲＥＡＤ＿ＢＵＦＦＥＲタイプ識別子、すなわち、（ａ）ＣＳＢが返送されるべき旨を示す「０２ｈ」と、（ｂ）ＤＤＢが返送されるべき旨を示す「０３ｈ」と、（ｃ）ＡＰＴ応答ヘッダが返送されるべき旨を示す「０６ｈ」と、（ｄ）ディスク読出し動作からのデータのようなＡＰＴ応答ペイロードが返送されるべき旨を示す「０７ｈ」と、（ｅ）パスコントローラファームウェア状態が返送されるべき旨を示す「０８ｈ」と、（ｆ）パーシステントログデータが返送されるべき旨を示す「０９ｈ」と、（ｇ）コンソールログデータが返送されるべき旨を示す「０Ａｈ」のうちの一つを格納する。
【０１４０】
図３８Ｆは、ＲＥＡＤ＿ＢＵＦＦＥＲコマンドの受信に続いてＦＣＰ＿ＤＡＴＡフレームでストレージシェルフ・ルータによって返送されるＡＴＡコマンド応答のフォーマットを表す。ＡＴＡコマンド応答のフィールドはＡＴＡ専用であり、ストレージシェルフ・ルータによって翻訳若しくは処理されることがない。ＡＴＡ応答はＦＣＰ＿ＤＡＴＡフレーム内で可変個のバイトとして返送される。
【０１４１】
バッファＩＤフィールドによって指定された異なるＷＲＩＴＥ＿ＢＵＦＦＥＲタイプのそれぞれは、ＷＲＩＴＥ＿ＢＵＦＦＥＲ  ＣＤＢを収容するＦＣＰ＿ＣＭＮＤの後に続くＦＣＰ＿ＤＡＴＡペイロードの異なるフォーマットを利用する。異なるデータ・ペイロードは、例えば、ファームウェア書き込み、データ構造書き込み、及びデジタルディスクシグネチャー書き込みのため使用される。
【０１４２】
図３９Ａ〜４１は、本発明の一実施形態を表すＡＰＴストレージシェルフ・ルータ・インターフェイスのトンネリングのため使用されるＷＲＩＴＥ＿ＢＵＦＦＥＲプロトコル及びＲＥＡＤ＿ＢＵＦＦＥＲプロトコルと、そのプロトコルを実施する際の外部処理エンティティ及びストレージシェルフ・ルータの動作とを記述する制御フロー図である。図３９Ａ〜Ｂは、外部処理エンティティからストレージシェルフへのデータの転送が関係するときに、ＡＰＴトンネリングという状況で、ＷＲＩＴＥ＿ＢＵＦＦＥＲプロトコルを示す。図３９Ａ〜Ｂと、後に続く図４０Ａ〜４１において、転送された実際のコマンドは、図の中央の垂直列に順番に現れ、外部処理エンティティの動作は図の左側部分に示され、ストレージシェルフ・ルータの動作は図の右側部分に示される。最初に、ステップ３９０２において、外部処理エンティティは、ＦＣＰ＿ＣＭＮＤフレーム内にＷＲＩＴＥ＿ＢＵＦＦＥＲ  ＣＤＢを準備し、ＦＣＰ＿ＣＭＮＤフレーム３９０４をストレージシェルフ・ルータへ送信する。ＦＣＰ＿ＣＭＮＤコマンドは、ストレージシェルフ・ルータによって認識される特定のファイバチャネル調停ループアドレスへ向けられることに注意すべきである。種々の管理ツールは、外部処理エンティティ、及び／又は、ヒューマンユーザが、すべての内部ディスクドライブ、ストレージシェルフ・ルータ、パスコントローラカード、及びその他の内部ストレージシェルフコンポーネントのアイデンティティ（identity：ID）を判定することを可能にさせる。この情報は、外部処理エンティティが種々のコマンドをＷＲＩＴＥ＿ＢＵＦＦＥＲプロトコルによってストレージシェルフ内の特定のコンポーネントへ向けることを可能にさせる。
【０１４３】
ストレージシェルフ・ルータは、ステップ３９０６において、ＦＣＰコマンドを受信し、ＦＣＰ＿ＸＦＲ＿ＲＤＹフレーム３９０８を外部処理エンティティへ返信し、ストレージシェルフ・ルータがＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドに関連したデータを受信する準備が完了していることを示す。ステップ３９１０において、ＦＣＰ＿ＸＦＲ＿ＲＤＹフレームを受信し次第、外部処理エンティティは、コマンドヘッダをＦＣＰ＿ＤＡＴＡフレームにパッケージ化し、ＦＣＰ＿ＤＡＴＡフレーム３９１２をストレージシェルフ・ルータに返信する。
【０１４４】
ストレージシェルフ・ルータが、ステップ３９１４において、パッケージ化されたコマンドヘッダを受信するとき、ストレージシェルフ・ルータはコマンドヘッダを処理し、包含されたＡＴＡコマンドをターゲットＡＴＡディスクドライブへ送信し、ディスクドライブからのＡＴＡプロトコルのＸ−ＲＤＹパケットを待つ。コマンドをＡＴＡディスクドライブへ転送する際に、ストレージシェルフ・ルータは、ストレージシェルフ・ルータ内の種々のデータ転送リソースを割り付け、適切なＳＡＴＡポートを初期化し、そのポートをロックし、そうでなければ、次のデータ転送の準備をする。ストレージシェルフ・ルータは、次に、別のＦＣＰ＿ＸＦＲ＿ＲＤＹフレーム３９１６を外部処理エンティティへ送信し、ストレージシェルフ・ルータがデータを受信する準備が完了していることを示す。ステップ３９１８において、第２のＦＣＰ＿ＸＦＲ＿ＲＤＹフレームを受信し次第、外部処理エンティティは、コマンドのデータ・ペイロードをＦＣＰ＿ＤＡＴＡフレームにパッケージ化し、ＦＣＰ＿ＤＡＴＡフレーム３９２０をストレージシェルフ・ルータへ送信する。すべてのデータが第１のＦＣＰ＿ＤＡＴＡフレームで転送されるならば、ステップ３９２２、３９２４、３９２６及び３９２８はスキップされ、ステップ３９３０が後述のように実行される。そうでなければ、ストレージシェルフ・ルータは、ステップ３９２２において、ＦＣＰ＿ＤＡＴＡフレーム内のデータを受信し、データをそのターゲットへ転送するために内部データ転送リソースを利用する。ストレージシェルフ・ルータは、必要に応じて、付加的なＦＣＰ＿ＤＡＴＡフレームを要求するために別のＦＣＰ＿ＸＦＲ＿ＲＤＹフレーム３９２４を返送する。コントローラは、ステップ３９２６において、付加データを後のＦＣＰ＿ＤＡＴＡフレームにパッケージ化し、ＦＣＰ＿ＤＡＴＡフレーム３９２８をストレージシェルフ・ルータへ送信する。データ転送はすべてのデータが転送され終わるまでこのような形式で継続する。
【０１４５】
この時点で、ストレージシェルフ・ルータは、ステップ３９３０において、最終的なデータフレームを受信し、データを転送し、ターゲットＡＴＡディスクドライブが実行されたコマンドの状態を報告する状態パケットを返送するまで待ち、内部データ転送リソースの割り付けを取り消し、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドの状態を含むＦＣＰ＿ＳＴＡＴＵＳフレーム３９３２を外部処理エンティティへ送信する。ステップ３９３４において、ＦＣＰ＿ＳＴＡＴＵＳフレームを受信し次第、外部処理エンティティは、元の書き込みバッファ内にカプセル化されたＡＴＡコマンドの実行から生じる状態情報を受信するためにＦＣＰ＿ＣＭＮＤフレーム３９３６内のＲＥＡＤ＿ＢＵＦＦＥＲコマンドをストレージシェルフ・ルータへ送信する。ストレージシェルフ・ルータは、ステップ３９３０において状態がストレージシェルフ・ルータによって既に受信され、ローカルに記憶された旨を返送し、そして、ステップ３９３８において、図３８Ｆに表されるような応答フォーマットの状態をＦＣＰ＿ＤＡＴＡフレーム３９４０内にパッケージ化し、そのＦＣＰ＿ＤＡＴＡフレームは外部処理エンティティへ返送される。ストレージシェルフ・ルータは、次に、ステップ３９４２において、ＲＥＡＤ＿ＢＵＦＦＥＲコマンドの完了を示すために、ＦＣＰ＿ＳＴＡＴＵＳ３９４４フレームを外部処理エンティティへ直ちに送信する。ステップ３９４６において、外部処理エンティティは、ＦＣＰ状態フレーム及び応答ヘッダを受信し、データ転送動作の終了３９４８を示す。
【０１４６】
図４０Ａ〜Ｂは、図３９Ａ〜Ｂの制御フロー図に類似し、ストレージシェルフから外部処理エンティティへデータを返送するＡＰＴ動作に関してＷＲＩＴＥ＿ＢＵＦＦＥＲプロトコル及びＲＥＡＤ＿ＢＵＦＦＥＲプロトコルを記述する制御フロー図を表す。これらのステップの多くは、図３９Ａ〜Ｂにおいて既に説明したステップに類似し、簡潔さと明瞭さのために、図４０Ａ〜Ｂはそれほど詳細に記載されていない。外部処理エンティティは、ストレージシェルフ・ルータにデータを外部処理エンティティへ返送する動作の実行を準備するよう命令するために、ＷＲＩＴＥ＿ＢＵＦＦＥＲ  ＣＤＢを含むＦＣＰ＿ＣＭＮＤフレーム４００４をストレージシェルフ・ルータへ送信する。ストレージシェルフ・ルータは、ＦＣＰ＿ＸＦＲ＿ＲＤＹフレーム４００８で応答し、外部処理エンティティがコマンドヘッダをＦＣＰ＿ＤＡＴＡフレーム内にパッケージ化し、ＦＣＰ＿ＤＡＴＡフレーム４０１２をストレージシェルフ・ルータへ返信することを可能にさせる。ストレージシェルフ・ルータは、ステップ４０１４において、ターゲットＡＴＡディスクドライブとの通信のためのデータ転送コンテキストをセットアップし、ＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドに対する状態を報告するためにＦＣＰ＿ＳＴＡＴＵＳフレームを外部処理エンティティへ返信するが、ストレージシェルフ・ルータが外部処理エンティティから戻された、ＦＣＰ＿ＣＭＮＤフレーム４０２０内にパッケージ化されたＲＥＡＤ＿ＢＵＦＦＥＲコマンドを後で受信するまで、動作の実行の始動を延期する。その時点で、ストレージシェルフ・ルータは、ターゲットにコマンドの実行を命令し、ターゲットから受信されたデータを１個以上のＦＣＰ＿ＤＡＴＡ４０２４〜４０２５フレームで外部処理エンティティへ返信する。最終的に、ストレージシェルフ・ルータは、コマンドの完了を知らせるためにＦＣＰ＿ＳＴＡＴＵＳフレーム４０２８を外部処理エンティティへ送信すし、ＲＥＡＤ＿ＢＵＦＦＥＲコマンドの状態を返送するが、ターゲットＡＴＡディスクドライブによって返送された状態を保持し続ける。外部処理エンティティは、次に、コマンドに対するＡＴＡ状態を取り出すために第２のＲＥＡＤ＿ＢＵＦＦＥＲコマンド４０３０をストレージルータへ送信し、ストレージシェルフ・ルータは、このＡＴＡ状態をＦＣＰ＿ＤＡＴＡフレーム４０３２で返送し、次に、第３のＦＣＰ＿ＳＴＡＴＵＳフレーム４０３４で第２のＲＥＡＤ＿ＢＵＦＦＥＲコマンドに対する状態を返送する。ステップ４０３６で第３のＦＣＰ＿ＳＴＡＴＵＳフレームを受信し次第、外部処理エンティティは元のＡＰＴ  ＲＥＡＤコマンドが成功完了したことを判定する。
【０１４７】
図４１は、外部処理エンティティとストレージシェルフとの間でコマンド詳細及びリターン状態以外のデータを転送しない制御タイプコマンドと関連したＡＰＴコンテキストにおけるＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドプロトコル及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドプロトコルの制御フロー図である。外部処理エンティティは、制御タイプコマンドを開始するためにＦＣＰ＿ＣＭＮＤフレーム４０１４でＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドをストレージシェルフ・ルータへ送信する。応答としてＦＣＰ＿ＸＦＲ＿ＲＤＹフレーム４１０８を受信後、外部処理エンティティは、ＦＣＰ＿ＤＡＴＡフレーム４１１２内のコマンドヘッダをストレージシェルフ・ルータへ転送し、ストレージシェルフ・ルータは、ステップ４１１４において、受信されたコマンドヘッダを処理し、ターゲットによるコマンドの実行を開始し、コマンドの完了を待つ。ストレージシェルフ・ルータは、要求された動作の完了を待ち、ある種の場合に、ＡＴＡディスクドライブターゲットが完了状態を返信するまで待ち、パワーダウンのようなその他の場合には、ストレージシェルフ・ルータ自体がコマンド状態を決定する。最終的に、ストレージシェルフ・ルータは、動作のＷＲＩＴＥ−ＢＵＦＦＥＲフェーズの完了を通知するＦＣＰ＿ＳＴＡＴＵＳフレーム４１１６を返送する。ＦＣＰ＿ＳＴＡＴＵＳフレームを受信し次第、外部処理エンティティは、ストレージシェルフ・ルータがＷＲＩＴＥ＿ＢＵＦＦＥＲコマンドに含まれるコマンドに対する状態情報をＦＣＰ＿ＤＡＴＡフレーム４１２４で返送するように、ＦＣＰ＿ＣＭＮＤフレーム４１２０内のＲＥＡＤ−ＢＵＦＦＥＲコマンドをストレージシェルフ・ルータへ送信する。ストレージシェルフ・ルータは、最後に、ＲＥＡＤ＿ＢＵＦＦＥＲコマンドの完了に関するＦＣＰ＿ＳＴＡＴＵＳフレーム４１２８を返送し、外部処理エンティティがステップ４１３０でこのＦＣＰ＿ＳＴＡＴＵＳフレームを受信し、制御動作の実行が完了したかどうかを判定する。
【０１４８】
ストレージシェルフ・ルータ・インターフェイスのトンネリングの一実施形態の上記の制御フローに基づく説明において、エラー処理ステップは明瞭さと簡潔さのため省略されている。エラーは実行の種々の段階で検出され、多数の異なる実施固有の方法で取り扱われる。
【０１４９】
本発明は特定の実施形態の観点で説明されているが、本発明がこの実施形態に限定されることは意図されていない。本発明の理念の範囲内における変更は当業者に明白である。例えば、上記の解説は、かなり上位の一般的な概念レベルで本発明の一実施形態を表すストレージシェルフ・インターフェイストンネリング技術を説明する。データの内部ルーティング及び転送と、ＷＲＩＴＥ−ＢＵＦＦＥＲコマンドによって開始される動作の詳細は、前のサブセクションで部分的に説明され、そうでなければ、実施及び装置に固有である。殆ど制限のない数の異なるハードウェア、ファームウェア、及びソフトウェア実施が本発明の一実施形態を表すＷＲＩＴＥ−ＢＵＦＦＥＲ及びＲＥＡＤ−ＢＵＦＦＥＲトンネリングメカニズムのため実現可能である。ＷＲＩＴＥ−ＢＵＦＦＥＲコマンド内に指定された動作のタイプは、付加データ構造及び内部ストレージシェルフ・ルータコンポーネントにアクセスするために、並びに、トンネリングが、ＡＴＡディスクドライブ以外のインターフェイス及び他のタイプの大容量記憶デバイスへのインターフェイスを含む代替的なタイプのインターフェイスを利用することを可能にさせるために必要に応じて拡張される。
【０１５０】
上記の解説は、説明の目的のため、本発明の全体を通じた理解を与えるために特定の名称を使用した。しかし、当業者に明らかであるように、具体的な詳細は本発明を実施するために必要とはされない。換言すれば、周知の回路及び装置は根本的な発明から不必要に注意がそれることを避けるためにブロック図形式で表される。よって、本発明の具体的な実施形態の上記の解説は、例示と説明のために記載されたものであり、それらは、網羅的であること、或いは、発明を開示された形式そのままに制限することを意図せず、明らかに多数の変更及び変形が上記の教示内容に照らして可能である。実施形態は、本発明の原理及びその実際的な適用を最もよく説明し、それによって、当業者が本発明及び検討された特定用途に適するような実施形態と共に種々の実施形態を最もうまく利用することを可能にさせるために選択され記載された。本発明の範囲は特許請求の範囲及びその均等の範囲によって定められることが意図されている。
【図面の簡単な説明】
【０１５１】
【図１Ａ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図１Ｂ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図１Ｃ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図２】ＦＣネットワーク経由の転送のためデータが時間的に組織化された非常に簡単な階層を示す図である。
【図３】標準的なＦＣフレームの内容を表す図である。
【図４】ＳＣＳＩバスを含む一般的なパーソナルコンピュータアーキテクチャのブロック図である。
【図５】ＳＣＳＩバストポロジーを示す図である。
【図６Ａ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図６Ｂ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図６Ｃ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図７Ａ】図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣプロトコルのＳＣＳＩシーケンスへのマッピングを示す図である。
【図７Ｂ】図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣプロトコルのＳＣＳＩシーケンスへのマッピングを示す図である。
【図８Ａ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｂ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｃ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｄ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図９】図８Ａ〜Ｄのため利用された説明図の規約を使用して、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す図である。
【図１０】本発明の一実施形態を表すストレージシェルフ・ルータが階層的に相互接続されたコンピュータとディスクアレイのシステム内で占める位置を示す図である。
【図１１】本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。
【図１２】本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。
【図１３Ａ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１３Ｂ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１３Ｃ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１４Ａ】ＡＴＡディスクドライブを２台のストレージシェルフ・ルータと相互接続するため適したパスコントローラカードの二つの実施のうちの一つを示す図である。
【図１４Ｂ】ＡＴＡディスクドライブを２台のストレージシェルフ・ルータと相互接続するため適したパスコントローラカードの二つの実施のうちの一つを示す図である。
【図１５】ストレージシェルフ・ルータの主要機能コンポーネントを示す上位レベルブロック図である。
【図１６Ａ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｂ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｃ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｄ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｅ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｆ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｇ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される多数の異なる論理インターフェイスのうちの一つを示す図である。
【図１７Ａ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｂ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｃ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｄ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｅ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｆ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１８】本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントの詳細なブロック図表示である。
【図１９】ＦＣポート層を詳細に表す図である。
【図２０】ルーティング層を表す詳細なブロック図表示である。
【図２１】ＦＣＰ層を表す詳細なブロック図表示である。
【図２２】ＳＡＴＡポート層を表す詳細なブロック図表示である。
【図２３】ＳＡＴＡポートを表す詳細なブロック図表示である。
【図２４】４台のストレージシェルフ・ルータ可用性のストレージシェルフ内のルーティングトポロジーを概略的に表した図である。
【図２５】２台のストレージシェルフ・ルータ、すなわち、ディスクアレイの２台のストレージシェルフ・ルータの実施内でのＸ及びＹのＦＣ調停ループ相互接続の抽象的な表現を表す図である。
【図２６Ａ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｂ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｃ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｄ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｅ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２７】ルーティング層によるＦＣフレームのルーティングを容易化するためストレージシェルフ・ルータ内に保持された７個のメインルーティングテーブルを示す図である。
【図２８】フロー制御図で使用される簡易化されたルーティングトポロジー及びルーティング宛先の命名法を規定する図である。
【図２９】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３０】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３１】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３２】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３３】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３４】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３５】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３６Ａ】本発明の一実施形態を表すストレージシェルフ・ルータを含むディスクアレイ内の概念的なインターフェイスレベルを示す図である。
【図３６Ｂ】本発明の一実施形態を表すストレージシェルフ・ルータ・インターフェイストンネリング方法及びシステムを示す図である。
【図３７】本発明の一実施形態を表す高可用性ストレージシェルフの種々のコンポーネントに含まれる種々のデータ構造を示す図である。
【図３８Ａ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表す図である。
【図３８Ｂ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表す図である。
【図３８Ｃ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表す図である。
【図３８Ｄ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表す図である。
【図３８Ｅ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表す図である。
【図３８Ｆ】ＷＲＩＴＥ＿ＢＵＦＦＥＲ及びＲＥＡＤ＿ＢＵＦＦＥＲコマンドのＦＣＰ＿ＣＭＮＤ及びＦＣＰ＿ＣＭＮＤ  ＣＤＢフィールドレイアウトと、一例としてのコマンドヘッダ及び応答を表すを表す図である。
【図３９Ａ】外部処理エンティティからストレージシェルフ・ルータへのデータの転送が関係するときに、ＡＰＴトンネル化のコンテキストにおけるＷＲＩＴＥ−ＢＵＦＦＥＲプロトコルを示す図である。
【図３９Ｂ】外部処理エンティティからストレージシェルフ・ルータへのデータの転送が関係するときに、ＡＰＴトンネル化のコンテキストにおけるＷＲＩＴＥ−ＢＵＦＦＥＲプロトコルを示す図である。
【図４０Ａ】図３９Ａ〜Ｂの制御フロー図に類似し、ストレージシェルフ・ルータから外部処理エンティティへデータを返信するＡＰＴ動作に関してＷＲＩＴＥ−ＢＵＦＦＥＲ及びＲＥＡＤ−ＢＵＦＦＥＲプロトコルを記述する制御フロー図である。
【図４０Ｂ】図３９Ａ〜Ｂの制御フロー図に類似し、ストレージシェルフ・ルータから外部処理エンティティへデータを返信するＡＰＴ動作に関してＷＲＩＴＥ−ＢＵＦＦＥＲ及びＲＥＡＤ−ＢＵＦＦＥＲプロトコルを記述する制御フロー図である。
【図４１】コマンド指定及びリターン状態の他に外部処理エンティティとストレージシェルフとの間でデータを転送しない制御タイプコマンドと関連したＡＰＴコンテキストのＷＲＩＴＥ−ＢＵＦＦＥＲ及びＲＥＡＤ−ＢＵＦＦＥＲコマンドプロトコルの制御フロー図である。
【図１Ａ】
2007501987.tif 000008
【図１Ｂ】
2007501987.tif 000009
【図１Ｃ】
2007501987.tif 000010
【図２】
2007501987.tif 000011
【図３】
2007501987.tif 000012
【図４】
2007501987.tif 000013
【図５】
2007501987.tif 000014
【図６Ａ】
2007501987.tif 000015
【図６Ｂ】
2007501987.tif 000016
【図６Ｃ】
2007501987.tif 000017
【図７Ａ】
2007501987.tif 000018
【図７Ｂ】
2007501987.tif 000019
【図８Ａ】
2007501987.tif 000020
【図８Ｂ】
2007501987.tif 000021
【図８Ｃ】
2007501987.tif 000022
【図８Ｄ】
2007501987.tif 000023
【図９】
2007501987.tif 000024
【図１０】
2007501987.tif 000025
【図１１】
2007501987.tif 000026
【図１２】
2007501987.tif 000027
【図１３Ａ】
2007501987.tif 000028
【図１３Ｂ】
2007501987.tif 000029
【図１３Ｃ】
2007501987.tif 000030
【図１４Ａ】
2007501987.tif 000031
【図１４Ｂ】
2007501987.tif 000032
【図１５】
2007501987.tif 000033
【図１６Ａ】
2007501987.tif 000034
【図１６Ｂ】
2007501987.tif 000035
【図１６Ｃ】
2007501987.tif 000036
【図１６Ｄ】
2007501987.tif 000037
【図１６Ｅ】
2007501987.tif 000038
【図１６Ｆ】
2007501987.tif 000039
【図１６Ｇ】
2007501987.tif 000040
【図１７Ａ】
2007501987.tif 000041
【図１７Ｂ】
2007501987.tif 000042
【図１７Ｃ】
2007501987.tif 000043
【図１７Ｄ】
2007501987.tif 000044
【図１７Ｅ】
2007501987.tif 000045
【図１７Ｆ】
2007501987.tif 000046
【図１８】
2007501987.tif 000047
【図１９】
2007501987.tif 000048
【図２０】
2007501987.tif 000049
【図２１】
2007501987.tif 000050
【図２２】
2007501987.tif 000051
【図２３】
2007501987.tif 000052
【図２４】
2007501987.tif 000053
【図２５】
2007501987.tif 000054
【図２６Ａ】
2007501987.tif 000055
【図２６Ｂ】
2007501987.tif 000056
【図２６Ｃ】
2007501987.tif 000057
【図２６Ｄ】
2007501987.tif 000058
【図２６Ｅ】
2007501987.tif 000059
【図２７】
2007501987.tif 000060
【図２８】
2007501987.tif 000061
【図２９】
2007501987.tif 000062
【図３０】
2007501987.tif 000063
【図３１】
2007501987.tif 000064
【図３２】
2007501987.tif 000065
【図３３】
2007501987.tif 000066
【図３４】
2007501987.tif 000067
【図３５】
2007501987.tif 000068
【図３６Ａ】
2007501987.tif 000069
【図３６Ｂ】
2007501987.tif 000070
【図３７】
2007501987.tif 000071
【図３８Ａ】
2007501987.tif 000072
【図３８Ｂ】
2007501987.tif 000073
【図３８Ｃ】
2007501987.tif 000074
【図３８Ｄ】
2007501987.tif 000075
【図３８Ｅ】
2007501987.tif 000076
【図３８Ｆ】
2007501987.tif 000077
【図３９Ａ】
2007501987.tif 000078
【図３９Ｂ】
2007501987.tif 000079
【図４０Ａ】
2007501987.tif 000080
【図４０Ｂ】
2007501987.tif 000081
【図４１】
2007501987.tif 000082
【国際調査報告】
2007501987.tif 000083
2007501987.tif 000084