(57)【要約】【課題】大容量記憶デバイスへのディスクドライブの組み込み、および大容量記憶デバイスのエラー検出を効率的に行う手法を提供する。【解決手段】本発明の提供する仮想ディスクをフォーマッティングするシステムは、第１のセクタ長の物理セクタを有する複数の大容量記憶デバイスと、第２のセクタ長の仮想セクタを有する仮想ディスクへ向けられた、外部エンティティから受信されるアクセス動作を、前記複数の大容量記憶デバイスにマッピングすることにより、前記大容量記憶デバイスへの仮想ディスクインターフェイスを提供するルーティングコンポーネントと、を備える。【選択図】図９【特許請求の範囲】
【請求項１】
第１のセクタ長の物理セクタを有する複数の大容量記憶デバイスと、
第２のセクタ長の仮想セクタを有する仮想ディスクへ向けられた、外部エンティティから受信されるアクセス動作を、前記複数の大容量記憶デバイスにマッピングすることにより、前記大容量記憶デバイスへの仮想ディスクインターフェイスを提供するルーティングコンポーネントと、
を備える仮想ディスクをフォーマッティングするシステム。
【請求項２】
前記ルーティングコンポーネントが集積回路型のストレージシェルフ・ルータである、請求項１に記載のシステム。
【請求項３】
前記ストレージシェルフ・ルータが、ファイバチャネルディスクをベースとする仮想ディスク用のフォーマッティング・インターフェイスを外部エンティティに提供し、ファイバチャネルディスクをベースとするアクセス動作を、前記ストレージシェルフ・ルータを収容するストレージシェルフに組み込まれた複数のＡＴＡディスクドライブにマッピングする、請求項２に記載のシステム。
【請求項４】
前記ルーティングコンポーネントが、仮想ディスクのフォーマッティングを実行するプロセッサ及びファームウェア／ソフトウェアプログラムを含む、請求項１に記載のシステム。
【請求項５】
仮想セクタが連続的な物理セクタにマッピングされ、
仮想セクタの最初のバイトの前記物理セクタ及び物理バイトアドレスは、
前記第２のセクタ長が前記第１のセクタ長より長いとき、
ｆｓ１＝第１のセクタ長、
ｓｓ１＝第２のセクタ長、
モジュラス＝（ｆｓ１及びｓｓ１の両方で一様に割り切れる最小数）／ｓｓ１、
差分＝ｓｓ１−ｆｓ１とすると、
物理セクタ＝仮想セクタ＋（仮想セクタ／モジュラス）
物理バイトアドレス＝剰余（仮想セクタ／モジュラス）×差分
として計算され、
前記第２のセクタ長が前記第１のセクタより短いとき、
ｆｓ１＝第１のセクタ長、
ｓｓ１＝第２のセクタ長、
モジュラス＝（ｆｓ１及びｓｓ１の両方で一様に割り切れる最小数）／ｓｓ１、
差分＝ｆｓ１−ｓｓ１とすると、
物理セクタ＝仮想セクタ−（仮想セクタ／モジュラス）
物理バイトアドレス＝剰余(ｆｓ１−剰余(仮想セクタ／モジュラス)×差分）／ｆｓ１
として計算される、
請求項１に記載のシステム。
【請求項６】
前記モジュラス及び差分が共に２で一様に割り切れるとき、除算演算及び乗算演算がシフト演算で置き換えられ、剰余演算がビット単位演算で置き換えられる、請求項５に記載のシステム。
【請求項７】
第１のセクタ長の物理セクタを有する複数の大容量記憶デバイスと、
第２のセクタ長の仮想セクタを有する第１の仮想ディスクインターフェイスに向けられた、外部エンティティから受信されるアクセス動作を、前記第２のセクタ長より長い第３のセクタ長の内部仮想ディスクセクタを有する内部仮想ディスクインターフェイスにマッピングし、さらに、前記内部仮想ディスクインターフェイスからの前記アクセス動作を前記複数の大容量記憶デバイスにマッピングすることにより、前記大容量記憶デバイスへの前記第１の仮想ディスクインターフェイスを前記外部エンティティに提供するルーティングコンポーネントと、
を備える仮想ディスクをフォーマッティングするシステム。
【請求項８】
前記ルーティングコンポーネントを利用したエラー検査を提供するために、前記ルーティングコンポーネントが、前記内部仮想ディスクセクタ内にエラー検出情報を含む、請求項７記載の仮想ディスクフォーマッティングシステム。
【請求項９】
前記エラー検出情報が水平冗長検査符号である、請求項８に記載のシステム。
【請求項１０】
前記ルーティングコンポーネントが集積回路型のストレージシェルフ・ルータである、請求項７に記載のシステム。
【請求項１１】
前記ストレージシェルフ・ルータが、ファイバチャネルディスクをベースとする仮想ディスク用のフォーマッティング・インターフェイスを外部処理エンティティに提供し、ファイバチャネルディスクをベースとするアクセス動作を、前記ストレージシェルフ・ルータを収容するストレージシェルフに組み込まれた複数のＡＴＡディスクドライブにマッピングする、請求項１０に記載のシステム。
【請求項１２】
前記ルーティングコンポーネントが、仮想ディスクのフォーマッティングを実行するプロセッサ及びファームウェア／ソフトウェアプログラムを含む、請求項７に記載のシステム。
【請求項１３】
複数の大容量記憶デバイスの外部にある処理エンティティに仮想ディスクをフォーマッティングするインターフェイスを提供する方法であって、
ルーティングコンポーネントを設けるステップと、
第２のセクタ長の仮想セクタを有する仮想ディスクへ向けられた、外部エンティティから受信されるアクセス動作を、前記ルーティングコンポーネントによって前記複数の大容量記憶デバイスにマッピングするステップと、
を含む方法。
【請求項１４】
前記ルーティングコンポーネントが集積回路型のストレージシェルフ・ルータである、請求項１３に記載の方法。
【請求項１５】
前記ストレージシェルフ・ルータが、ファイバチャネルディスクをベースとする仮想ディスク用のフォーマッティング・インターフェイスを外部処理エンティティに提供し、
前記方法は、さらに、前記ストレージシェルフ・ルータが、ファイバチャネルディスクをベースとするアクセス動作を、前記ストレージシェルフ・ルータを収容するストレージシェルフに組み込まれた複数のＡＴＡディスクドライブにマッピングするステップを含む、
請求項１４に記載の方法。
【請求項１６】
前記ルーティングコンポーネントが、仮想ディスクのフォーマッティングを実行するプロセッサ及びファームウェア／ソフトウェアプログラムを含む、請求項１３に記載の方法。
【請求項１７】
前記ルーティングコンポーネントが仮想セクタを連続的な物理セクタにマッピングするステップをさらに含み、
仮想セクタの最初のバイトの前記物理セクタ及び物理バイトアドレスは、
前記第２のセクタ長が前記第１のセクタ長より長いとき、
ｆｓ１＝第１のセクタ長、
ｓｓ１＝第２のセクタ長、
モジュラス＝（ｆｓ１及びｓｓ１の両方で一様に割り切れる最小数）／ｓｓ１、
差分＝ｓｓ１−ｆｓ１とすると、
物理セクタ＝仮想セクタ＋（仮想セクタ／モジュラス）
物理バイトアドレス＝剰余（仮想セクタ／モジュラス）×差分
として計算され、
前記第２のセクタ長が前記第１のセクタより短いとき、
ｆｓ１＝第１のセクタ長、
ｓｓ１＝第２のセクタ長、
モジュラス＝（ｆｓ１及びｓｓ１の両方で一様に割り切れる最小数）／ｓｓ１、
差分＝ｆｓ１−ｓｓ１とすると、
物理セクタ＝仮想セクタ−（仮想セクタ／モジュラス）
物理バイトアドレス＝剰余(ｆｓ１−剰余(仮想セクタ／モジュラス)×差分）／ｆｓ１
として計算される、
請求項１３に記載の方法。
【請求項１８】
前記モジュラス及び差分が共に２で一様に割り切れるとき、除算演算及び乗算演算がシフト演算で置き換えられ、剰余演算がビット単位演算で置き換えられる、請求項１７に記載の方法。
【請求項１９】
第１のセクタ長を有する複数の大容量記憶デバイスのディスクセクタに、付加情報を収容する方法であって、
ルーティングコンポーネントを設けるステップと、
前記ルーティングコンポーネントが、第２のセクタ長の仮想セクタを有する第１の仮想ディスクインターフェイスに向けられた、外部エンティティから受信されるアクセス動作を、前記第２のセクタ長より長い第３のセクタ長の内部仮想ディスクセクタを有する内部仮想ディスクインターフェイスにマッピングし、さらに、前記アクセス動作を前記内部仮想ディスクインターフェイスから前記複数の大容量記憶デバイスにマッピングするステップと、
を含む方法。
【請求項２０】
前記ルーティングコンポーネントが、
エラー検出情報と、
外部処理エンティティによって前記第１の仮想ディスクインターフェイスに向けられたデータの暗号化バージョンを、前記内部仮想ディスクインターフェイスセクタに格納されたデータと共に供給する付加情報と、
エラー検出及びエラー訂正情報と、
のうちの一つを、前記内部仮想ディスクセクタ内に収容するステップをさらに含む、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の個別の大容量記憶デバイスにより構成されたディスクアレイ及びその他の大容量記憶デバイスに関し、特に、ストレージシェルフ・ルータ（storage-shelf router）の集積回路型実施及びパスコントローラカード（path controller card）に関する。パスコントローラカードは、仮想ディスクをフォーマッティング（formatting）する機能を提供する。この機能によって、高可用性のストレージシェルフ・ルータが、仮想ディスクをフォーマッティングするインターフェイスを外部コントローラ及びコンピュータに提供し、これによりストレージシェルフ内のディスクドライブ固有のフォーマッティングを分離し、ストレージシェルフのエラー検出能力を高める。
【背景技術】
【０００２】
（関連出願の相互参照）
本願は、２００３年１月２３日に出願された第１０／３４１８３５号出願の一部継続出願である２００３年６月２３日に出願された第１０／６０２５２９号出願の一部継続出願である。
【０００３】
（背景技術）
ファイバチャネル（Fibre Channel：ＦＣ）は、コンピュータと周辺デバイスの複数の様々な組み合わせを相互接続するデータ通信ネットワークのアーキテクチャ及びプロトコルである。ＦＣは、スモールコンピュータシステムインターフェイス（ＳＣＳＩ）プロトコルを含む種々の上位レベルプロトコルをサポートする。コンピュータ又は周辺デバイスは、ＦＣポートと、銅線または光ファイバとを介してネットワークに連結される。ＦＣポートは、トランシーバ及びインターフェイスコントローラを含み、ＦＣポートを収容するコンピュータ周辺デバイスは「ホスト」と呼ばれる。ＦＣポートは、ペリフェラルコンピュータインターフェイス（ＰＣＩ）バスのようなローカルデータバスを介してホストとデータを交換する。インターフェイスコントローラは、ファイバチャネルと、ＦＣポートが存在するコンピュータまたは周辺デバイスとの間で低レベルプロトコル交換を実施する。
【０００４】
コンピュータネットワーク内の遠隔のデータにアクセスする一般的な実例はクライアント／サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータはサーバコンピュータとの間でデータを読み書きするための要求を送信する。サーバコンピュータは、クライアントサーバがデータを読み書きする権限及び許可を与えられているかどうかをチェックし、要求された読出し（READ）動作又は書込み（WRITE）動作を特定の大容量記憶デバイスにマッピングし、書込み動作の場合にはクライアントコンピュータから大容量記憶デバイスへのデータの転送の際に仲介者として、又は、読出し動作の場合には大容量記憶デバイスからクライアントへのデータの転送の際に仲介者として機能することによって要求を処理する。
【０００５】
現時点で利用可能であり、かつ、以前に利用可能である一般的な通信ネットワークアーキテクチャにおいて、サーバコンピュータはローカルエリアネットワーク（ＬＡＮ）を介してクライアントコンピュータと通信し、サーバコンピュータは、ＳＣＳＩバスのようなローカルバスを介して複数の大容量記憶デバイスと通信する。このようなシステムにおいて、サーバは２個の異種通信媒体の間のブリッジに相当するので、サーバは、読出し又は書込み動作の結果として転送されたデータを記憶し、回送することが要求される。ＦＣの出現によって、クライアントコンピュータ、サーバコンピュータ、及び大容量記憶デバイスはすべて、単一の通信媒体によって対称的に相互接続される。従来型のクライアント／サーバアーキテクチャは、上記のＬＡＮ及びＳＣＳＩネットワークで使用されるプロトコルと同じタイプのクライアント／サーバプロトコルを使用してＦＣに移植される。
【０００６】
高容量ディスクドライブを含むＳＣＳＩバス互換性大容量記憶デバイスは、特に、中規模及び大規模コンピュータシステムにおいて、広く利用可能であり、広く使用される。複数のＦＣベースシステムは、１台以上のＦＣポートと、ディスクドライブがＦＣレスポンダとして機能するために必要とされるロジックとがそれぞれに含まれるＦＣ互換性ディスクドライブを利用する。パーソナルコンピュータ（ＰＣ）を含む小規模システムにおいて、統合ドライブエレクトロニクス（Integrated Drive Electronics：ＩＤＥ）又はアドバンスト・テクノロジー・アタッチメント（Advanced Technology Attachment：ＡＴＡ）ディスクドライブと呼ばれるディスクドライブの種々のファミリーが広く利用される。シリアルＡＴＡディスク（ＳＡＴＡ）は、一般的に、業界標準アーキテクチャ（Industry Standard Architecture：ＩＳＡ）バスを介してシステムと相互接続される。
【０００７】
本発明は、ＦＣ技術、ＳＣＳＩ技術、及びＩＤＥ／ＡＴＡ技術に関係する。以下に、各々を、３つの別個のサブセクションで、順番に記載する。これらの技術の一部又は全部に精通している当業者は、ＦＣベースのディスクアレイを説明するこのセクションの最後のサブセクション、及びそのサブセクションの直後に続く発明の要約のセクションへ飛ばし読みすることを望むであろう。
【０００８】
ファイバチャネル
ファイバチャネル（ＦＣ）は、以下の表１Ａおよび表１Ｂに掲載された規格文書を含む複数のＡＮＳＩ規格文書によって規定され、記載されている。
【表１Ａ】
2007506205.tif 000002
【表１Ｂ】
2007506205.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：Ｄ＿ＩＤ）、すなわち、DESTINATION_ID３１６は、フレームの宛先ＦＣポートを示す２４ビットのＦＣアドレスである。ソース識別子（source identifier：Ｓ＿ＩＤ）、すなわち、SOURCE_ID３１８は、フレームを送信したＦＣポートを示す２４ビットのアドレスである。オリジネータ識別子、すなわち、OX_ID３２０と、レスポンダ識別子３２２、すなわち、RX_IDは、オリジネータ及びレスポンダ、またはイニシエータおよびターゲットのＦＣポートに関してフレームが属するエクスチェンジを特定する３２ビットのエクスチェンジ識別子を一体となって構成する。シーケンス識別子、すなわち、SEQ_ID３２４は、フレームが属するシーケンスを特定する。
【００１９】
次の上位レベルセクション３０８は、データ・ペイロードと呼ばれ、ＦＣフレーム内に詰め込まれた実際のデータを格納する。データ・ペイロードは、データと、ＩＰ及びＳＣＳＩのような上位レベルプロトコルに従って転送されたカプセル化プロトコル情報とを格納する。図３は、ＳＣＳＩプロトコルに準拠したデータ転送のため使用される４個の基本的なタイプのデータ・ペイロードのレイアウト３２６〜３２９を表す。これらのうちの第１のフォーマット３２６は、ＦＣＰコマンド（ＦＣＰ＿ＣＭＮＤ）と呼ばれ、イニシエータからターゲットへＳＣＳＩコマンドを送信するため使用される。ＦＣＰ論理ユニット番号（ＦＣＰ＿ＬＵＮ）フィールド３３０は、ある種の実施において、特定のＳＣＳＩバス・アダプタ、ＳＣＳＩバス・アダプタに関連したターゲットデバイス、及び指定されたターゲットＳＣＳＩデバイスと関連した論理デバイスに対応する論理ユニット番号（logical unit number：ＬＵＮ）を指定する８バイトのアドレスを含み、一体としてＦＣＰ＿ＣＭＮＤのターゲットを表現する。別の実施では、ＦＣＰ＿ＬＵＮフィールド３３０は、ＳＣＳＩバス・アダプタ、ＳＣＳＩバス・アダプタに関連したターゲットデバイス、及び指定されたターゲットＳＣＳＩデバイスと関連した論理デバイスに対応するＬＵＮを決定するためターゲットＦＣホストアダプタによって使用されるインデックス又は参照番号を格納する。ＳＣＳＩ読出し又は書込み入出力コマンドのような実際のＳＣＳＩコマンドは、１６バイトフィールドのＦＣＰ＿ＣＤＢ３３２に格納される。
【００２０】
図３に表された第２のタイプのデータ・ペイロードのフォーマット３２７は、ＦＣＰ転送準備完了（ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ）レイアウトと呼ばれる。このデータ・ペイロードフォーマットは、ターゲットがデータの受信又は送信を開始する準備を完了したときにＳＣＳＩプロシードコマンドをターゲットからイニシエータへ転送するため使用される。図３に表された第３のタイプのデータ・ペイロードのフォーマット３２８はＦＣＰデータ（ＦＣＰ＿ＤＡＴＡ）フォーマットである。ＦＣＰ＿ＤＡＴＡフォーマットは、ＳＣＳＩ入出力トランザクションの実行の結果として、ＳＣＳＩデータ記憶デバイスから読出し、又は、ＳＣＳＩデータ記憶デバイスへ書込みされている実際のデータを転送するため使用される。図３に表された最後のデータ・ペイロードのフォーマット３２９は、ＦＣＰレスポンス（ＦＣＰ＿ＲＳＰ）レイアウトと呼ばれ、ＳＣＳＩ状態バイト３３４、並びに、その他のＦＣＰ状態情報を、入出力トランザクションの完了次第にターゲットからイニシエータへ逆に転送するため使用される。
【００２１】
ＳＣＳＩバスアーキテクチャ
コンピュータバスは電気信号線の組であり、それを介してコンピュータコマンド及びデータがコンピュータシステムの処理コンポーネント、記憶コンポーネント、及び入出力（Ｉ／Ｏ）コンポーネントの間で伝送される。ＳＣＳＩ  入出力バスは、ハードディスクドライブ及びＣＤ−ＲＯＭドライブのような大容量記憶デバイスをコンピュータシステムのメモリコンポーネント及び処理コンポーネントと相互接続するため最も広く利用され、かつ、人気のあるコンピュータバスである。ＳＣＳＩバスアーキテクチャは、ＳＣＳＩ−１、ＳＣＳＩ−２及びＳＣＳＩ−３の三つの主要な規格に規定されている。ＳＣＳＩ−１規格及びＳＣＳＩ−２規格は、米国規格協会（ＡＮＳＩ）規格文書“Ｘ３．１３１−１９８６”及び“Ｘ３．１３１−１９９４”にそれぞれ公表されている。ＳＣＳＩ−３規格はＡＮＳＩ委員会によって現在開発中である。ＳＣＳＩバスアーキテクチャの概要は非特許文献１に記載されている。
【００２２】
図４は、ＳＣＳＩバスを含む一般的なパーソナルコンピュータ（ＰＣ）のブロック図である。ＰＣ４００は、高速ＣＰＵバス４０６によってシステムコントローラ４０４に連結された中央処理ユニット又はプロセッサ（ＣＰＵ）４０２を含む。システムコントローラは、次に、メモリバス４１０を介してシステムメモリコンポーネント４０８に連結される。システムコントローラ４０４は、さらに、低速の業界標準アーキテクチャ（ＩＳＡ）バス４１４及びＳＣＳＩバス４１６と相互接続されたペリフェラルコンポーネント相互接続（ＰＣＩ）バス４１２を介して種々の周辺デバイスに連結される。ＰＣＩバスのアーキテクチャは、非特許文献２に記載されている。相互接続されたＣＰＵバス４０６、メモリバス４１０、ＰＣＩバス４１２及びＩＳＡバス４１４は、ＣＰＵがデータ及びコマンドを、コンピュータシステムに収容された種々の処理コンポーネント及びメモリコンポーネントと入出力デバイス（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）と、イニシエータ及びターゲットデバイスのSCSI_IDの組み合わせと、ターゲットＬＵＮと、キュータグメッセージに含まれるキュータグとを使用する。I_T_L_Qネクサス参照番号は、したがって、読出しの場合にターゲットデバイスからのデータを受信し、書込みの場合にターゲットデバイスへデータを送信する適切なバッファを見つけるために、ＳＣＳＩバス・アダプタによって未解決の入出力コマンドのテーブルへのインデックスとして使用される入出力動作ハンドルである。
【００３６】
識別メッセージ及びキュータグメッセージを送信した後、ターゲットデバイスはデータ（ＤＡＴＡ）状態６５８へ遷移するためにＳＣＳＩ信号線を制御する。読出し入出力動作の場合、ＳＣＳＩバスはデータ入力（DATA IN）状態へ遷移する。書込み入出力動作の場合、ＳＣＳＩバスはデータ出力（DATA OUT）状態へ遷移する。ＳＣＳＩバスがデータ状態である間に、ターゲットデバイスは、各ＳＣＳＩバス・クロックサイクル中に、データが送信される特別なＳＣＳＩの幅にビット数が一致するサイズを有するデータユニットを送信する。一般に、データの各ユニットの転送の一部として信号線ＡＣＫ及び信号線ＲＥＱを必要とするＳＣＳＩバス信号線ハンドシェイク（handshake）が存在する。読出し入出力コマンドの場合、例えば、ターゲットデバイスは、次のデータユニットをＳＣＳＩバスに置き、ＲＥＱ信号線をアサートする。イニシエータは、ＲＥＱ信号線のアサートを感知し、送信されたデータをＳＣＳＩバスから取り出し、データの受け取りを承認するためにＡＣＫ信号線をアサートする。このタイプのデータ転送は非同期転送と呼ばれる。ＳＣＳＩバスプロトコルは、ターゲットデバイスがイニシエータから最初の肯定応答（acknowledgement）を受信する前にある特定の個数のデータユニットを転送することをさらに許可する。同期転送と呼ばれるこの転送モードでは、最初のデータユニットの送信とその送信に対する肯定応答の受信との間の待ち時間（latency）は避けられる。データ送信中に、ターゲットデバイスは、セーブポインタ（SAVE POINTERS）メッセージ及びその後に続く切断メッセージをイニシエータへ送信し、次に、バスフリー状態へ入るようにＳＣＳＩバス信号線を制御することにより、データ送信を中断する。これは、ターゲットデバイスがさらなるデータを受信又は送信する前にそのターゲットデバイスが制御する論理デバイスと相互作用するために一時停止することを可能にさせる。ＳＣＳＩバスから切断した後、ターゲットデバイスは、ＳＣＳＩバスの制御を後で再び調停し、付加的な識別メッセージ及びキュータグメッセージをイニシエータへ送信するので、イニシエータはそのイニシエータが中断させられた時点でデータ受信又は転送を再開可能である。切断及び再接続６６０の一例は図６Ｂに表され、データ状態６５８を中断する。最終的に、入出力動作のすべてのデータが送信されたとき、ターゲットデバイスはメッセージイン状態６６２へ入るためにＳＣＳＩ信号線を制御し、そのメッセージイン状態では、ターゲットデバイスが切断メッセージをイニシエータへ送信し、場合によってセーブポインタメッセージが切断メッセージよりも先行する。切断メッセージを送信した後、ターゲットデバイスは、ＳＣＳＩバスがバスフリー状態６６４へ遷移するようにＢＳＹ信号線をドロップさせる。
【００３７】
図６Ｂに示されるように、入出力動作のためのデータの送信に続いて、ターゲットデバイスは、入出力動作の状態フェーズ中に状態をイニシエータへ返送する。図６Ｃは入出力動作の状態フェーズを示す。図６Ａ〜６Ｂのように、ＳＣＳＩバスは、バスフリー状態６６６から、図６Ｂのように、調停状態６６８、再選択状態６７０、及びメッセージイン状態６７２へ遷移する。メッセージイン状態６７２中のターゲットによるイニシエータへの識別メッセージ６７４及びキュータグメッセージ６７６の送信に続いて、ターゲットデバイスはステータス（STATUS）状態へ入るためにＳＣＳＩバス信号線を制御する。ステータス状態６７８では、ターゲットデバイスは、入出力コマンドが成功完了したかどうかを示すために単一の状態バイト６８４をイニシエータへ送信する。図６Ｃにおいて、成功完了に対応する状態バイト６８０は、０という状態コードで示され、ターゲットデバイスからイニシエータへ送信されることが表されている。状態バイトの送信に続いて、ターゲットデバイスは、次に、ターゲットデバイスがコマンド完了（COMMAND COMPLETE）メッセージ６８４をイニシエータへ送信するメッセージイン状態６８２へ入るためにＳＣＳＩバス信号線を制御する。この時点で、入出力動作が完了している。ターゲットデバイスは、次に、ＳＣＳＩバスがバスフリー状態６８６へ戻るようにＢＳＹ信号線をドロップさせる。ＳＣＳＩバス・アダプタは、この時点で、入出力コマンドの割当部分を終え、そのコマンドを実行するため割り付けられた内部リソースを解放し、完了メッセージ又は状態を、ＰＣＩバスを介して、ＣＰＵへ返送することが可能である。
【００３８】
ＳＣＳＩプロトコルのＦＣＰへのマッピング
図７Ａ及び７Ｂは、図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣＰシーケンスのマッピングを示す。図７Ａ〜７Ｂにおいて、ターゲットＳＣＳＩアダプタは、ＦＣＰホストアダプタと一緒にパッケージ化されていると仮定され、ターゲットＳＣＳＩアダプタはＦＣを介してイニシエータと通信可能であり、ＳＣＳＩバスを介してターゲットＳＣＳＩデバイスと通信可能である。図７Ａは、読出し入出力トランザクションに対するＦＣＰシーケンスとＳＣＳＩフェーズ及び状態との間のマッピングを表す。トランザクションは、イニシエータがＦＣを介してＦＣＰコマンド（ＦＣＰ＿ＣＭＮＤ）７０２データ・ペイロードを含む単一フレームＦＣＰシーケンスをターゲットＳＣＳＩアダプタへ送信するときに開始される。ターゲットＳＣＳＩバス・アダプタがＦＣＰコマンドフレームを受信するとき、ターゲットＳＣＳＩバス・アダプタは、調停、再選択、メッセージアウト、コマンド及びメッセージインを含む図６Ａに示されたコマンドフェーズ７０４のＳＣＳＩ状態を移る。図６Ａに示されるように、コマンドフェーズの終わりに、入出力トランザクションのターゲットであるＳＣＳＩデバイスは、ＳＣＳＩバスを解放するためにＳＣＳＩバスとの接続を切断し、同時に、ターゲットＳＣＳＩデバイスはトランザクションを実行するために準備する。後で、ターゲットＳＣＳＩデバイスは、ＳＣＳＩバス制御を再調停し、入出力トランザクションのデータフェーズ７０６を始める。この時点で、ＳＣＳＩバス・アダプタは、データ伝送が現在進行可能であることを知らせるためにＦＣＰ転送準備完了（ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ）単一フレームシーケンス７０８をイニシエータへ返信する。読出し入出力トランザクションの場合に、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンスはオプションである。データフェーズが継続すると共に、ターゲットＳＣＳＩデバイスは、論理デバイスからデータを読み出し始め、ＳＣＳＩバスを介してそのデータをターゲットＳＣＳＩバス・アダプタへ送信する。ターゲットＳＣＳＩバス・アダプタは、次に、ターゲットＳＣＳＩデバイスから受信されたデータを、入出力トランザクションに対応するエクスチェンジの第３のシーケンスを構成する複数のＦＣＰデータ（ＦＣＰ＿ＤＡＴＡ）フレームにパッケージ化し、これらのＦＣＰ＿ＤＡＴＡフレームを、ＦＣを介して、イニシエータへ返送する。すべてのデータが送信され、ターゲットＳＣＳＩデバイスがＳＣＳＩバスの制御を解放したとき、ターゲットＳＣＳＩデバイスは、次に、入出力トランザクション７１４の状態フェーズを開始するためにＳＣＳＩバスの制御を再び調停する。このフェーズにおいて、ＳＣＳＩバスは、ターゲットＳＣＳＩデバイスからターゲットＳＣＳＩバス・アダプタへＳＣＳＩ状態バイトを送信するために、図６Ｃに示されるように、バスフリー状態から、調停状態、再選択状態、メッセージイン状態、ステータス状態、メッセージイン状態、及びバスフリー状態を経由して遷移する。状態バイトを受信すると、ターゲットＳＣＳＩバス・アダプタは、状態バイトをＦＣＰレスポンス（ＦＣＰ＿ＲＳＰ）単一フレームシーケンス７１６にパッケージ化し、ＦＣＰ＿ＲＳＰ単一フレームシーケンスを、ＦＣを介して、イニシエータへ返信する。これは読出し入出力トランザクションを完了する。
【００３９】
多くのコンピュータシステムには、ターゲットＦＣホストアダプタとターゲットＳＣＳＩバス・アダプタとの間に、ＰＣＩバスのような付加的な内部コンピュータバスがある。換言すれば、ＦＣホストアダプタ及びＳＣＳＩアダプタは単一のターゲットコンポーネントに一緒にパッケージ化されない。簡易化するために、その付加的な相互接続は図７Ａ〜Ｂには表されていない。
【００４０】
図７Ｂは、図７Ａと類似した形式で、ＦＣＰコマンドフレーム７１８によって示された書込み入出力トランザクション中のＦＣＰシーケンスとＳＣＳＩバスフェーズ及び状態との間のマッピングを表す。図７Ｂが図７Ａと相違するのは、書込みトランザクション中に、ＦＣＰ＿ＤＡＴＡフレーム７２２〜７２５がイニシエータからＦＣを介して送信され、ターゲットからイニシエータへ送信されるＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンス７２０が、読出し入出力動作の場合のようにオプションではなく、不可欠であるという点だけである。図７Ａと同様に、書込み入出力トランザクションは、ターゲットがＦＣＰ＿ＲＳＰ単一フレームシーケンス７２０をイニシエータへ返送するときを含む。
【００４１】
ＩＤＥ／ＡＴＡディスクドライブ
ＩＤＥ／ＡＴＡドライブは、ディスクロジックコントローラとハードディスクを一体的に単一のモジュールとして統合するために開発された。ＩＤＥ／ＡＴＡドライブは、ＩＳＡバスを用いてＰＣシステムに容易に統合するため特に設計された。当初、ＩＤＥ／ＡＴＡドライブは、システム又はバスクロックによって制御された離散的な時間間隔でＩＤＥ／ＡＴＡドライブとシステムとの間で２バイトのデータを交換できるようにするためパラレル１６ビット相互接続を用いて設計された。残念ながら、パラレルバス相互接続は性能限界に到達し、現行のデータレートは１００〜１３３ＭＢ／秒であり、４０〜８０ピンのリボンケーブル接続は、もはや最新コンピュータシステム内の内部コンポーネントの余裕のない高密度パッケージングとの互換性がない。これらの理由のため、ＳＡＴＡ規格が開発され、８０ピンのリボンケーブル（ribbon cable）接続が４導体シリアルケーブルで置き換えられたＳＡＴＡディスクドライブがこれまでのところ生産されている。ＳＡＴＡディスクの初期データレートは１５０ＭＢ／秒であり、直ぐに３００ＭＢ／秒まで増加し、その後、６００ＭＢ／秒まで増加することが予想される。標準的な８Ｂ／１０Ｂ符号化が、ＡＴＡシリアルディスクドライブと周辺コンポーネント相互接続（peripheral component interconnect：ＰＣＩ）に基づくコントローラとの間で転送するデータを直列化するため使用される。残念ながら、様々な入出力コントローラを統合し、周辺デバイス及びバスへのインターフェイスを提供し、１台以上のＣＰＵとメモリを連結する第２のブリッジとの間でデータを転送するサウスブリッジ（Southbridge）コントローラは、ＳＡＴＡデバイスの直接的な相互接続を提供するためにＳＡＴＡテクノロジーを完全に組み込むよう設計される。
【００４２】
ＡＴＡインターフェイス、特に、ＡＴＡ−５及びＡＴＡ−６の標準的なインターフェイスは、外部プロセッサ又は論理コントローラが基本的なデータ転送コマンド、シーク、キャッシュ管理、並びに、その他の管理及び診断関連タスクを実行することをＡＴＡディスクドライブ内の論理コントローラに命令することを可能にさせる多種多様なコマンドをサポートする。以下の表２は、プロトコル「１」のようなプロトコル番号を一般的なタイプのＡＴＡコマンドと関係付ける。コマンドのタイプには、プログラムド入出力（ＰＩＯ）、非データコマンド、及びダイレクトメモリアクセス（ＤＭＡ）コマンドが含まれる。
【表２】
2007506205.tif 000004
【００４３】
以下に記載された表３は、複数のＡＴＡコマンドを、上記の表２に定義されたようなそのコマンドが属するコマンドタイプを含む対応するプロトコルと共に列挙する。
【表３】
2007506205.tif 000005
【００４４】
パワーモードチェックコマンドは、ホストがＡＴＡデバイスの現在のパワーモードを決定することを可能にさせる。マイクロコードダウンロードコマンドは、ホストがＡＴＡデバイスのマイクロコードを変更することを可能にさせる。エグゼクティブデバイス診断コマンドは、ホストがＡＴＡデバイスによって実施される診断テストを呼び出すことを可能にさせる。フラッシュキャッシュコマンドは、ＡＴＡデバイスがその書込みキャッシュをフラッシュすることをホストに要求させる。このコマンドの二つのバージョンがテーブルに収容され、拡張版はＡＴＡ−６標準インターフェイスをサポートするデバイス上で４８ビットのアドレス指定機能が利用できることを表す。表３に表すコマンドをさらに詳しくしたものは、別個に下記しない。デバイス識別コマンドは、ホストがＡＴＡデバイスに、そのデバイスによって与えられる論理セクタ数、シリンダ数及びヘッド数と、デバイスによってサポートされるコマンドと、デバイスによってサポートされる機能と、その他のパラメータとを含むパラメータ情報を問い合わせることを可能にさせる。ＤＭＡ読出しコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるＤＭＡデータ転送プロトコルを使用してデバイスからデータを読み出すことを可能にさせる。セクタ検証読出し（READ VERIFY SECTORS）コマンドは、ホストがホスト内に格納されたデータの一部分を読み出すようＡＴＡデバイスに命令し、デバイスから読み出されたデータをホストへ転送せずにエラー条件が発生したかどうかを決定することを可能にさせる。シーク（SEEK）コマンドは、ホストが後のコマンドで１個以上の特殊な論理ブロックにアクセスできることをＡＴＡデバイスに通知し、指定された１個以上の論理ブロックへの後のアクセスを実行するために、デバイスがヘッド位置決めを最適化することを可能にする。フィーチャー設定（SET FEATURES）コマンドは、ホストが、ＡＴＡデバイス内の種々のパラメータを、そのデバイスによって提供される機能のオンとオフを切り換えるために修正することを可能にさせる。スリープコマンドは、ホストがＡＴＡデバイスに対して、スピンダウンし、後のリセットコマンドを待つことを命令することを可能にさせる。ＤＭＡ書込みコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるＤＭＡデータ転送を使用してＡＴＡデバイスにデータを書き込むことを可能にさせる。
【００４５】
ＦＣベースのディスクアレイ
中規模及び大規模コンピュータシステムでは、データ記憶装置の要件は、一般的に、内蔵ディスクドライブを含む内蔵型大容量記憶デバイスの能力を遙かに超えている。このようなシステムでは、ローカルエリアネットワーク、光ファイバネットワーク、及びその他の高帯域幅通信媒体を介して中規模かつ高性能であるコンピュータシステムにリンクされた内部プロセッサを含む、低コストディスクの冗長アレイ（redundant arrays of inexpensive disks：ＲＡＩＤ）のような高性能大容量デバイスを利用することが一般的になり始めている。ディスクアレイの設計及び製造を容易化するため、ディスク製造業者は、ディスクアレイ内のディスクドライブをディスクアレイ・コントローラへ直接的に相互接続するためにＦＣポートを含むディスクドライブを供給する。一般に、ＦＣ調停ループトポロジーは、個々のＦＣディスクドライブをディスクアレイ・コントローラへ相互接続するためディスクアレイ内で採用される。
【００４６】
図８Ａ〜Ｄは、ディスクアレイ内でのＦＣディスクの使用に関する複数の問題点を示す。図８Ａは、ディスクアレイの内部コンポーネントのかなり抽象的な表現である。後述の図８Ｂ〜Ｄと図９は、同じ説明図の慣例を採用する。図８Ａにおいて、ディスクアレイ・コントローラ８０２は、高帯域幅通信媒体８０４を介して遠隔のコンピュータシステム及びその他の遠隔のエンティティに相互接続される。ディスクアレイ・コントローラは、１台以上のプロセッサと、１台以上の一般的にかなり大規模な電子メモリと、ディスクアレイ内のディスクドライブへの比較的上位レベルの論理ユニット及び論理ブロックインターフェースを遠隔のコンピュータシステムに提供するために、ディスクアレイ制御ファームウェア及びソフトウェアがディスクアレイ・コントローラ内に記憶され実行されることを可能にさせるその他のコンポーネントとを含む。図８Ａに示されるように、ディスクアレイは、ディスクアレイ・コントローラ８０２と複数台のＦＣディスクドライバ８０６〜８１３を含む。ＦＣディスクドライブはＦＣ調停ループ８１４を介してディスクアレイ・コントローラ８０２と相互接続される。図８Ａに抽象的に示されているようなＦＣベースのディスクアレイは、標準的かつ容易に入手可能なＦＣディスクを記憶媒体として使用し、相互接続のためのＦＣ調停ループを使用し、ディスクアレイ・コントローラ内で標準的なＦＣコントローラを使用して、比較的簡単に設計、製造される。ＦＣは高速シリアル通信媒体であるため、ＦＣ調停ループ８１４は、ＦＣディスク８０６〜８１３とディスクアレイ・コントローラ８０２との間にデータ転送のための豊富な帯域幅を提供する。
【００４７】
しかし、ＦＣディスクドライブのようなＦＣ調停ループ内の各ＦＣノードには、データが処理され、そのノードのＦＣポートを介して転送されるときに、有意なノード遅延が存在する。ノード遅延は、添え字付きの小文字「ｔ」でラベルが付けられた短い矢印を用いて図８Ａに示されている。ノード遅延はＦＣ調停ループ内で累積的であり、ＦＣ調停ループ内のＦＣノードの台数に比例するかなりの累積ノード遅延を引き起こす。
【００４８】
図８Ａに示されたディスクアレイ実施に関する第２の問題点は、ＦＣ調停ループが潜在的な単一障害点（single point of failure）を示すことである。一般に、ＦＣディスクは、機能しないＦＣディスクを調停ループから分離させるためにポートバイアス回路で補強されるが、ポートバイアス回路だけでは防止できない複数の異なる故障モードが存在する。
【００４９】
第３の問題点は、ノードを調停ループにリンクするＦＣポートが故障するときに現れる。このような場合には、複雑であり、かつ、信頼できない技術が故障したＦＣポートを特定し分離することを試みるために利用される筈である。一般に、故障したＦＣポートはループトポロジーを中断させ、ディスクアレイ・コントローラは、故障したノードを分離させるために、各ノードをバイパスするようにポートバイパス回路を作動することを続いて試みるに違いない。しかし、この技術は、種々の故障モードの下で、故障したノードを特定できない。したがって、ノード故障は調停ループトポロジーによって生じる重大な問題である。
【００５０】
図８Ｂは、潜在的な単一障害点問題の解決策を示す。図８Ｂに示されるように、ディスクアレイ・コントローラ８０２は、２個の別個の独立したＦＣ調停ループ８１４及び８１６を介してＦＣディスク８０６〜８１３と相互接続される。２個の別個のＦＣ調停ループを使用することによって、単一障害点問題は概ね除去される。しかし、ノード遅延問題は２個のＦＣ調停ループを使用しても改善されない。その上、各ＦＣディスクは２個の別個のＦＣポートを含む必要があるので、個別のＦＣディスクはかなり複雑になり、かつ、高価になる。最終的に、故障したポートの特定及び分離問題は一部しか解決されないが、その理由は、２個の調停ループのうちの一方を中断するノード故障の場合、もう一方の調停ループは機能し続けるが、通信媒体に二重の冗長性が存在しなくなるからである。二重の冗長性を回復するために、ディスクアレイ・コントローラは、故障したノードを特定し分離することを試みることが依然として必要であり、上記のように、複数の故障ノードは特定及び分離が難しい。
【００５１】
図８Ｃは、ＦＣベースのディスクアレイの実施によって生じるさらに別の問題点を示す。一般に、ディスクアレイから要求される高可用性記憶空間の量が増大すると、その結果として、より多数の個別のＦＣディスクが追加される。しかし、付加的なディスクの収容はノード遅延問題を悪化させ、上記のように、単一ＦＣ調停ループは最大で１２７台のノードしか収容しない。この最大ノード問題を解決するため、付加的な独立したＦＣ調停ループがディスクアレイに追加される。図８Ｄは、第１のＦＣディスクの組８１８が２個の別個のＦＣ調停ループ８１４及び８１６を介してＦＣコントローラ８０２と相互接続され、第２のＦＣディスクの組８２０が第２のＦＣ調停ループ８２２及び８２４のペアを介してディスクアレイ・コントローラ８０２と相互接続されたより高容量のディスクアレイを示す。ＦＣディスクの組８１８及び８２０のそれぞれはシェルフと呼ばれ、一般に、冗長なパワーシステム、冗長な制御パス、及びディスクアレイの全体的な耐故障性及び高可用性に寄与するその他の機能と共に別個の筐体に収容される。しかし、各シェルフの追加は、ディスクアレイ・コントローラ８０２内のＦＣコントローラ及びＦＣポートの台数を増加させる。別個のＦＣ調停ループのそれぞれはＦＣ調停ループ内に収容されたＦＣノードの累積的なノード遅延が起こることに注意すべきである。ディスクアレイの設計者、製造業者及び使用者は、よって、ＦＣベースのディスクアレイ内でディスクアレイ・コントローラとＦＣディスクを相互接続するよりフレキシブルであり、より費用効率が高く、より効率的な方法の必要性を認識した。その上、ディスクアレイの設計者、製造業者及び使用者は、ポート故障と、その他の通信故障及びコンポーネント故障とをより容易かつより高い信頼性で特定することを可能にする、ＦＣベースのディスクアレイ内のディスクアレイ・コントローラとＦＣディスクを相互接続する方法の必要性を認識した。
【００５２】
ディスクドライブ専用フォーマッティング及びディスクドライブエラー検出
ディスクドライブ技術及び実施は、他のタイプの大容量記憶デバイスと同様に、発展し続けている。ディスクアレイ製造御者は、最も費用効率が高く、技術的に進歩したディスクドライブをディスクアレイに使用することを望む。しかし、ディスクアレイ・コントローラは、現在利用可能であるディスクドライブ・インターフェイスのうちの１〜数個だけとインターフェイスをとるように実施され、新しいフォーマッティング規約を含む新しいインターフェイスを備えた新しいディスクドライブを組み込むことは、コスト高であり、かつ、時間を要するディスクアレイ・コントローラのリエンジニアリング（re-engineering）を伴う。
【００５３】
現在利用可能なディスクドライブは、一般に、パリティチェック符号及びその他の技術を使用して、基本的なエラーチェック及びエラー訂正を提供する。しかし、現行ディスクドライブによって提供されるエラーチェックのレベルは、商用アプリケーションにおいて使用されるディスクアレイ記憶デバイスのエラーチェック要件を満たしていない。付加的なエラー検出がディスクアレイ・コントローラにプログラムされ得るが、ディスクアレイ・コントローラに基づく技術は、コスト高であり、複雑なディスクアレイ・コントローラのソフトウェア及びファームウェアの再実施を必要とし、非効率的でもあり、ディスクアレイ・コントローラと記憶デバイスとの間のデータ転送の増加を必然的に伴う。さらに、ディスクアレイ・コントローラのエラー検出技術は非常に複数のディスクドライブ専用ロジックを必要とする。
【非特許文献１】“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年
【発明の開示】
【発明が解決しようとする課題】
【００５４】
ディスクアレイ及びその他の大容量記憶デバイスの設計者、製造業者及び使用者は、したがって、新しいタイプのディスクドライブをディスクアレイ及びその他の大容量記憶デバイスに組み込む費用効果の高い効率的な方法と、ディスクアレイ・コントローラを再実施することを要することなくディスクアレイのエラー検出能力を高める費用効果の高い効率的な方法との必要性を認識した。
【課題を解決するための手段】
【００５５】
本発明の一実施形態は、パスコントローラカードおよび選択的に他のストレージシェルフ・ルータと共に使用され、ストレージシェルフ又はディスクアレイ内のＳＡＴＡディスクをＦＣ調停ループのような高帯域幅通信媒体に相互接続する、ストレージシェルフ・ルータを実施する集積回路である。本発明の一実施形態を表す単一ストレージシェルフ・ルータを利用するストレージシェルフは、高可用性デバイスに必須であるコンポーネント冗長性を提供しない。２、４、６、又は、８台以上のストレージシェルフ・ルータがストレージシェルフ内で使用され、ストレージシェルフ・ルータ、ディスクドライブ、及び外部通信媒体の間の相互接続が適切に設計され設定されるとき、得られるストレージシェルフは、ディスクアレイ又はその他のタイプの電子デバイスに組み込まれる離散的な高可用性コンポーネントを構成する。
【００５６】
種々の実施形態において、本発明は、ストレージシェルフ・ルータ及びこのストレージシェルフ・ルータが収容されたストレージシェルフによる仮想ディスクのフォーマッティングを、ディスクアレイ・コントローラ及びホストコンピュータのような外部演算エンティティに提供する。仮想ディスクのフォーマッティングは幾つかの目的のために役立つ。第一に、ディスクアレイ・コントローラは、ディスクアレイ・コントローラによって管理されるストレージシェルフに収容されたディスクにおいて、１〜数個の専用ディスクフォーマッティング規約を要求する。要求されたフォーマッティング規約に準拠しないディスクドライブ及びその他のストレージシステムが、ストレージシェルフに収容され、ストレージシェルフ・ルータによって提供されたインターフェイスを介してディスクアレイ・コントローラ及びその他の外部処理エンティティに相互接続されるとしても、仮想ディスクのフォーマッティングを提供することにより、ストレージシェルフ・ルータは、ディスクアレイ・コントローラ及びその他の外部演算エンティティに、ディスクアレイ・コントローラによって要求されたディスクフォーマッティング規約を提供する。よって、仮想ディスクのフォーマッティングは、ディスクドライブ専用フォーマッティング規約及びその他の特性を、ディスクアレイ・コントローラのような外部演算エンティティから分離させる。仮想ディスクのフォーマッティングは、その上、ストレージシェルフ・ルータが外部演算エンティティによって期待されるディスクフォーマッティングとは別のやり方でディスクドライブをフォーマットすることを可能にするので、ストレージシェルフ・ルータは、付加的なエラー検出及びエラー訂正情報のような付加情報をトランスペアレント（transparent）にディスクセクタに収容可能である。よって、仮想ディスクのフォーマッティングは、ストレージシェルフ・ルータがストレージシェルフ・ルータ専用フォーマッティング規約をストレージシェルフ内に隔離することを可能にさせ、ディスクアレイ・コントローラ及びホストコンピュータのような外部演算エンティティへエクスポートされるディスクフォーマッティングインタフェースを保持する。
【発明を実施するための最良の形態】
【００５７】
本発明の一実施形態は、ディスクアレイ又はその他の大規模の別個に制御される大容量記憶デバイス内で単独若しくは組み合わせて利用され、ストレージシェルフ内のディスクドライブを高帯域幅通信媒体に相互接続する、ストレージシェルフ・ルータの集積回路型実施であり、その高帯域幅通信媒体が次にストレージシェルフをディスクアレイ・コントローラ、又は、同様の大容量記憶デバイスのコントローラと相互接続する。上記の実施形態は、ディスクドライブと１台以上のストレージシェルフ・ルータとの間に冗長な通信リンクを提供するパスコントローラカードをさらに含む。上記のように、図８Ａ〜Ｄを参照すると、ディスクアレイは、現在、ストレージシェルフ内でＦＣ互換性ディスクドライブを利用し、各ＦＣ互換性ディスクドライブは、ＦＣ互換性ディスクドライブをディスクアレイ・コントローラと相互接続する１個若しくは２個のＦＣ調停ループ又はその他のＦＣファブリックトポロジーでＦＣノードとして機能する。これに対して、本発明の一実施形態を部分的に表すストレージシェルフ・ルータは、ポイントツーポイントシリアル通信媒体によってストレージシェルフ内の各ディスクドライブと直接接続され、かつ、ファイバチャネル調停ループのような１個以上の高帯域幅通信媒体によってディスクアレイ・コントローラと相互接続された中間通信ハブとして機能する。
【００５８】
概要
図９は、図８Ａ〜Ｄのため利用された説明図の規約を使用して、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す。図９において、ディスクアレイ・コントローラ９０２は、ＬＡＮ又は光ファイバ通信媒体９０４を介して、１台以上の遠隔のコンピュータシステムにリンクされる。ディスクアレイ・コントローラ９０２は、ＦＣ調停ループ９０８を介して、ストレージシェルフ・ルータ９０６と相互接続される。ストレージシェルフ・ルータ９０６は、相互接続９１８のような別個のポイントツーポイント相互接続を介して、ストレージシェルフ９１０〜９１７内の各ディスクドライバと直接的に相互接続される。図９に抽象的に示された実施と図８Ａ〜Ｄに示された実施を比較すると、図８Ａ〜Ｄに示された実施によって特定された問題がストレージシェルフ・ルータに基づく実施によって解決されることが容易に認められる。第一に、図９に表された実施のＦＣ調停ループ内のノード遅延だけが、単一のＦＣ調停ループノードとして機能するストレージシェルフ・ルータによってもたらされる遅延である。これに対して、図８Ａに示されるように、各ＦＣ互換性ディスクドライブは別個のノード遅延をもたらし、ＦＣ調停ループ８１４上の累積的なノード遅延はＦＣ調停ループによって相互接続されたＦＣ互換性ディスクドライブの台数に比例する。ストレージシェルフ・ルータは、ＦＣポートと、ストレージシェルフ・ルータを個別のディスクドライブへリンクする内部シリアル相互接続との間で、高度に並列化され効率的なデータ転送を容易に行うように設計される。したがって、ストレージシェルフ・ルータをＦＣ調停ループ９０８に相互接続するオンボードＦＣコントローラによってもたらされる避けられないノード遅延の他に、実質的な遅延及び累積的な遅延はストレージシェルフ・ルータによってもたらされない。
【００５９】
図９に表された実施に利用されるＦＣ調停ループ９０８は、ディスクアレイ・コントローラとストレージシェルフ・ルータの２台のノードだけを含む。各ストレージシェルフ・ルータが８台のディスクドライブをＦＣ調停ループと相互接続可能であると仮定すると、単一のＦＣ調停ループは、１２５台のストレージシェルフ・ルータを、通常はＦＣファブリックのために確保されているアドレスがストレージシェルフ・ルータによって使用される場合には、１２６台のストレージシェルフ・ルータを、ディスクアレイ・コントローラに相互接続するため使用できるので、単一のＦＣ調停ループを介して８０００台以上の個別のディスクドライブをディスクアレイ・コントローラに相互接続する。上記のように、高可用性が必要とされないとき、１６０００台以上の個別のディスクドライブが単一のＦＣ調停ループを介してディスクアレイ・コントローラと相互接続される。これに対して、図８Ｃに示されるように、個別のＦＣ互換性ディスクドライバがそれぞれに別個のＦＣノードとして機能するとき、１２５台のディスクドライバだけが、或いは、ＦＣファブリックのために通常確保されたアドレスがディスクドライブのため使用されるならば、１２６台のディスクドライブが、単一のＦＣ調停ループを介してディスクアレイ・コントローラと相互接続される。
【００６０】
ディスクドライブは、複数の現在利用可能な内部相互接続トポロジーのいずれかを用いてストレージシェルフ・ルータ９０６に接続される。一実施形態では、ＳＡＴＡ互換性相互接続はＳＡＴＡディスクドライブをストレージシェルフ・ルータと相互接続するため使用される。ストレージシェルフ・ルータは、ディスクアレイ・コントローラから受信された各ＦＣＰコマンドを１個以上の等価的なＡＴＡインターフェイスコマンドに変換するロジックを含み、ストレージシェルフ・ルータがそのＡＴＡインターフェイスコマンドを適切なＳＡＴＡディスクドライブへ送信する。図９に表されたストレージシェルフ・ルータは単一のＦＣ調停ループ９０８を介してディスクアレイ・コントローラと相互接続されるが、上記のように、ストレージシェルフ・ルータは、より一般的には、２個のＦＣ調停ループ又はその他のＦＣファブリックトポロジーを介してディスクアレイ・コントローラと相互接続される。
【００６１】
図１０は、階層的に相互接続されたコンピュータとディスクアレイのシステム内において、本発明の一実施形態を部分的に表すストレージシェルフ・ルータが占める位置を示す図である。図１０では、２台のサーバコンピュータ１００１及び１００４は、種々のＦＣファブリックトポロジーのうちのいずれかのような高帯域幅通信媒体１００８を介して、互いに相互接続され、ディスクアレイ・コントローラ１００６と相互接続される。ディスクアレイ・コントローラ１００６は、２個の別個のＦＣファブリックループを介してストレージシェルフ１０１０と相互接続される。第１のＦＣ調停ループ１０１２は、ディスクアレイ・コントローラ１００６を第１のストレージシェルフ・ルータ１０１４と直接的に相互接続する。第２のＦＣ調停ループ１０１６は、ディスクアレイ・コントローラ１００６を第２のストレージシェルフ・ルータ１０１８と直接的に相互接続する。２台のストレージシェルフ・ルータ１０１４及び１０１８は、第１のＦＣ調停ループ１０１２の一部として第１のストレージシェルフ・ルータ１０１４から第２のストレージシェルフ・ルータ１０１８へＦＣフレームを伝送し、第２のＦＣ調停ループ１０１６の一部として第２のストレージシェルフ・ルータ１０１８と第１のストレージシェルフ・ルータ１０１４との間でＦＣフレームを伝送する内部ポイントツーポイントＦＣ相互接続１０２０と相互接続される。その上、内部ＦＣリンク１０２０は、ストレージシェルフ１０１０内で生成され内部で使われる内部管理及び通信のため使用されるＦＣフレームを伝送する。後述するように、ディスクアレイをストレージシェルフと相互接続する２本のＦＣ調停ループを、「Ｘループ」又は「Ｘファブリック（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０）であるとみなされ、ディスクドライブ１６０３は論理ユニット１であるとみなされ、ディスクドライブ１６０４は論理ユニット２であるとみなされ、ディスクドライブ１６０５は論理ユニット３であるとみなされる。よって、ディスクアレイ・コントローラは、単一のＦＣノードアドレス、論理ユニット番号、及び論理ユニット内の論理ブロックアドレスを用いてストレージシェルフの４台のディスクドライブのいずれかのうちの論理ブロックにアクセス可能である。
【００７７】
仮想ストレージシェルフ内の４台のディスクドライブへの代替的なインターフェイスは図１６Ｄに表されている。この場合、４台すべてのディスクドライブは単一の論理ユニット内に収容されているとみなされる。４台のディスクドライブ内の各論理ブロックは、固有論理ブロックアドレスが割り当てられる。よって、ディスクドライブ１６０２内の論理ブロック０〜１９は論理ブロックアドレス０〜１９と関連付けられ続け、さらにまたディスクドライブ１６０３内の論理ブロック０〜１９は論理ブロックアドレス２０〜３９と関連付けられる。このインターフェイスは、以下では、図１６Ｃに表された純粋なＬＵＮベースのインターフェイスに対して、純粋な論理ブロックアドレスのインターフェイスと呼ばれる。
【００７８】
図１６Ｅは４台のディスクドライブを含む仮想ストレージシェルフによって提供されるさらに別の可能な論理インターフェイスを表す。この場合、２台のディスクドライブ１６０２及び１６０３の第１の組は第１のＦＣノードアドレス「ＡＬ＿ＰＡ１」と関連付けられ、２台のディスクドライブ１６０２及び１６０３は２個の異なるＬＵＮ番号、すなわち、ＬＵＮ０及びＬＵＮ１とそれぞれ関連付けられる。同様に、ディスクドライブ１６０４及び１６０５の第２のペアは、第２のＦＣノードアドレス「ＡＬ＿ＰＡ２」と共に関連付けられ、ディスクドライブの第２のペアのそれぞれは異なるＬＵＮ番号と関連付けられる。
【００７９】
図１６Ｆはさらに別の可能なインターフェイスを表す。この場合、第１の２台のディスクドライブ１６０２及び１６０３は第１のＦＣノードアドレスと関連付けられ、第２の２台のディスクドライブ１６０４及び１６０５は第２のＦＣノードと関連付けられる。しかし、この場合、各グループ内の２台のディスクドライブは、共に単一の論理ユニットに属するとみなされ、２台のディスクドライブ内の論理ブロックは単一の論理ブロックアドレス空間を構成する論理ブロックアドレスと関連付けられる。
【００８０】
最後のインターフェイスは図１６Ｇに表される。この場合、前の二つのインターフェイスと同様に、単一のＦＣノードアドレスに関連付けられたディスクドライブの各ペアは単一の論理ブロックアドレス空間を有する単一のＬＵＮを構成するとみなされる。しかし、このインターフェイスでは、論理ブロックアドレスは２台のディスクドライブの間で交番する。例えば、ディスクドライブ１６０２及び１６０３のペアの場合、論理ブロックアドレス０は第１の論理ブロック１６１０及び第１のディスクドライブ１６０２と関連付けられ、論理ブロックアドレス１は第２のディスクドライブ１６０３の第１のブロック１６１２と関連付けられる。
【００８１】
図１６Ａ〜Ｇは、本発明の一実施形態を部分的に表すストレージシェルフ・ルータによってディスクアレイ・コントローラに提供されたある種の複数の可能なインターフェイスを示すことだけを意図している。アルゴリズム的に記述することができるＬＵＮ及び論理ブロックアドレスのディスクドライブ及びディスクドライブ内の物理ブロックへのマッピングの殆どは、ストレージシェルフ内のストレージシェルフ・ルータによって実施される。一般に、これらの多種多様なタイプの論理インターフェイスは、以下の４個の一般的なインターフェイスのタイプ、すなわち、（１）各ディスクドライブが別個の局所的に一意のＦＣノードアドレスと関連付けられるトランスペアレント・モードと、（２）各ディスクドライブが異なるＬＵＮ番号と関連付けられ、すべてのディスクドライブが単一のＦＣノードアドレスによってアクセスされる純粋なＬＵＮモードと、（３）すべてのディスクドライブが単一のＦＣノードアドレス及び単一の論理ユニット番号と関連付けられる純粋な論理ブロックアドレス指定モードと、（４）ＬＵＮと論理ブロックアドレス空間分割の多種多様な組み合わせを利用するＬＵＮモード及び論理アドレスアドレス指定モードの混合モードに分類される。
【００８２】
ストレージシェルフ・ルータ実施
図１７Ａは、本発明の一実施形態を表すストレージシェルフ・ルータ内のコマンドとデータのフローの上位レベル概要である。ストレージシェルフ・ルータは、データとコマンドのシリアルストリームを、１個以上のＦＣ調停ループ又はその他のＦＣファブリック１７０２〜１７０３を介して、他のストレージシェルフ・ルータ及びディスクアレイ・コントローラと交換する。データのシリアルストリームはＦＣポート層１７０４に入り、下位レベルＦＣプロトコルレベルで処理される。データストリームから抽出されたＦＣフレームは先入れ先出しバッファ（ＦＩＦＯ）１７０６〜１７０７へ入力される。ＦＣフレームの先頭部分は利用可能になると、ＦＣフレームの後半部分がＦＩＦＯへ入力されると同時に、ルーティング層１７０８及びＦＣＰ層１７１０によって処理される。よって、ＦＣフレームは、バッファで完全に組み立てられ、内部メモリバッファから内部メモリバッファへコピーされることを要することなく、高い時間効率及び演算効率で処理される。
【００８３】
ルーティング層１７０８は、ＦＣフレームヘッダから、ＦＣフレームがストレージルータへ向けられるか、又は、ＦＣ調停ループ若しくはその他のＦＣファブリックによってストレージルータと相互接続された遠隔のストレージルータ若しくはその他のエンティティへ向けられるかを決めなければならない。遠隔のエンティティへ向けられたフレームは、ルーティング層によって、ＦＣ調停ループ又はその他のＦＣファブリックを介して遠隔のエンティティへ送信するためのＦＣポート層内の出力ＦＩＦＯ  １７１２〜１７１３へ向けられる。ストレージルータへ向けられたフレームはルーティング層によってＦＣＰ層へ向けられ、ＦＣＰ層では状態機械がストレージシェルフ・ルータ内でのフレームの処分を制御する。
【００８４】
ストレージシェルフ・ルータによってコンテキストが確立された現在動作中のＦＣエクスチェンジと関連付けられたＦＣＰ−ＤＡＴＡフレームは、高度にストリームライン化され、かつ、効率的な方法で処理される。これらのフレームからのデータは、ＦＣＰ層によって、ＧＳＭＳ１７１８内の仮想キュー１７１４〜１７１６へ向けられ、そこからデータはＳＡＴＡポート層１７２２内の入力バッファ１７２０へ転送される。ＳＡＴＡポート層から、データは、ＡＴＡパケットで、複数のＳＡＴＡリンク１７２４のうちの一つを介して、ストレージシェルフ・ルータと相互接続された複数のＳＡＴＡディスクドライブ１７２６のうちの１台へ送信される。
【００８５】
ＦＣＰ−ＣＭＮＤフレームは種々の形式でＦＣＰ層によって処理される。これらのフレームは、ＦＣＰ層によって、ストレージシェルフ・ルータ内のＦＣＰ層とＣＰＵとの間で共有されるメモリ１７２８へ転送される。ＣＰＵはフレーム内に収容されたコマンドを処理するためフレームにアクセスする。例えば、入力書込みコマンドが受信されたとき、ストレージシェルフ・ルータのＣＰＵは、ファームウェアルーチンの制御下で、コマンドが向けられ、共有メモリに格納された書込み動作のためのコンテキストを確立するＳＡＴＡドライブを決定する必要がある。ＣＰＵは、データを受信するようにＳＡＴＡドライブを準備し、一般にディスクアレイ・コントローラであるイニシエータへのＦＣＰ−ＸＦＥＲ−ＲＤＹフレームの返送を指令することが必要である。ＣＰＵによって準備され、共有メモリに格納されたコンテキストは、ＦＣＰレイヤがＣＰＵの介入なしに後続の入力ＦＣＰ−ＤＡＴＡメッセージを処理することを可能にさせ、書込み動作の実行をストリーム化する。
【００８６】
ストレージシェルフ・ルータ内の種々の論理層は反対方向でほぼ対称的に機能する。ＡＴＡコマンドへの応答は、ＳＡＴＡディスクドライブからＳＡＴＡリンクを介してＳＡＴＡポート層１７２２によって受信される。ＳＡＴＡポート層は、次に、適切な信号及びメッセージを生成し、ＣＰＵが、ファームウェアの制御下で、又は、ＦＣＰ層が、適切な動作及び応答を実行することを可能にさせる。データが、読出しコマンドに応答して、ＳＡＴＡディスクから遠隔のエンティティへ転送されるとき、ＣＰＵは、ＦＣＰ層による処理のための共有メモリに格納される適切なキューエントリーを生成する。ＦＣＰ層内の状態機械は、共有メモリから、ＦＣフレームヘッダテンプレートを取得し、仮想キュー１７３２〜１７３３を経由するＳＡＴＡポート層内の出力バッファ１７３０からのデータ転送を手配し、ＦＣフレームヘッダを準備し、ＳＡＴＡポート層から受信されたＦＣフレームヘッダ及びデータの、一般的にディスクアレイ・コントローラである要求中の遠隔のエンティティへの伝送のためのＦＣポート層の出力ＦＩＦＯ１７１２及び１７１３への転送を調整する。
【００８７】
図１７Ａはストレージシェルフ・ルータ内のデータ及び制御フローの簡略な概要を与えることが意図されている。ストレージシェルフ・ルータの内部コンポーネントを正確に表現することではなく、ＦＣＰ−ＣＭＮＤ及びＦＣＰ−ＤＡＴＡフレームの受信及び処理に関して論理層間の相互関係を表すことが意図されている。例えば、複数の仮想キューがＧＳＭＳ層内で図１７Ａに表されている。しかし、仮想キューは、一般に、静的エンティティではなく、ストレージシェルフ・ルータの現在状態に依存して必要に応じて動的に割り付けられる。図１７Ａは単一のＳＡＴＡシリアル接続１７２４とＳＡＴＡディスクドライブ１７２６だけを表すが、上記のように、各ストレージルータは、一実施形態では、１６台の異なるＳＡＴＡディスクドライブに接続される。
【００８８】
図１７Ｂ〜Ｆは、本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローに関するより詳細を記載する。図１７Ｂ〜Ｆを説明する際に、同一コンポーネントの様々なペアの両方のコンポーネントは、簡易化するために具体的に言及されない。それらの図は、コンポーネントの完全な図解入りのリストとしてではなく、データ及び制御情報がストレージシェルフ・ルータ内の種々のコンポーネントの中を移動する様子を表すことを意図する。さらに、種々のコンポーネントの台数は、ストレージシェルフ・ルータの多種多様な実施に応じて変化する。図１７Ｂは、ストレージシェルフ・ルータ内のＦＣＰ−ＤＡＴＡフレームの初期フローを表す。ＦＣＰ−ＤＡＴＡフレームは、最初に、ＦＣポート１７３６によって受信され、入力ＦＩＦＯ１７３７に書き込まれ、この入力ＦＩＦＯからのＦＣＰ−ＤＡＴＡフレームは、たとえＦＣＰ−ＤＡＴＡフレームの残りが未だ入力ＦＩＦＯに書き込まれている間でも、十分なヘッダ情報が入力ＦＩＦＯで入手できるようになるとすぐに、ルータロジック１７３８によって処理され始める。ＦＣポートは、ルータロジックがフレームを処理し始めることを可能にさせるため、新フレームの到着をルータロジックに知らせる。ルータロジック１７３８は、フレームがストレージシェルフ・ルータへ向けられるか、若しくは、向けられないかを決めるため、又は、フレームが遠隔のエンティティへ向けられるか、若しくは、向けられないかを決めるためにルーティングテーブル１７３９を利用する。ＦＣＰ−ＤＡＴＡフレームが遠隔のエンティティへ向けられるならば、フレームはルータロジックによって遠隔のエンティティへの送信のためＦＣポートへ向けられる。ルータは、さらに、ＦＣＰ−ＤＡＴＡフレームが属するＦＣエクスチェンジのためのコンテキストがＣＰＵによって作成され、共有メモリに格納されたかどうかを決めるため、コンテキストロジック１７４０とインターフェイスを取る。そのフレームのコンテキストが見つけられるならば、ルータロジックはそのフレームをＦＣＰインバウンド・シーケンス・マネージャ（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 managermodule：ＳＲＱＭ）１７５５は、ＳＲＱプロデューサ・インデックスの更新を検出し、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７から次のＳＲＥをフェッチ（fetch；取得）する。ＳＲＱＭはフェッチされたＳＲＥを、ラウンドロビン（round-robin）方式のような調停方式を実施するＳＲＱ調停モジュール（SRQ arbitration module：ＳＲＱ＿ＡＲＢ）１７５６へ渡し、複数のＣＰＵによって生成され、複数のＳＲＱに格納されたＳＲＥの処理を保証する。ＳＲＱ＿ＡＲＢは、次のＳＲＥを受信するためのＳＲＱＭを選択し、ＳＲＥをＦＣＰアウトバウンド・シーケンス・マネージャ（FCP outbound sequence manager：ＦＯＳＭ）状態機械１７５７へ渡す。ＦＯＳＭは、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７からＦＣヘッダテンプレート及びフレームペイロードをフェッチするためＳＲＷを処理する。ＦＯＳＭは、共有メモリからＣＰＵＤＭを経由したＦＣヘッダテンプレート及びフレームペイロードを使用してＦＣフレームを構築し、そのフレームをＦＣポート１７３６の出力ＦＩＦＯ１７５８に書込み、そこからフレームはＦＣ調停ループ又はその他のＦＣファブリックへ送信される。フレームがＦＣポートへ転送されたとき、ＦＯＳＭはＣＭＳＧを共有メモリへ書き込むためにＣＱＭ１７４５へ向ける。
【００９３】
図１７Ｆは、ＧＳＭＳ及び共有メモリからＦＣ調停ループ又はその他のＦＣファブリックへのデータ及び制御情報のフローを表す。この処理のステップの殆どは図１７Ｅに関して説明したステップと同様であり、簡易化するために、再度説明はしない。一般に、ＦＣＰ−ＤＡＴＡフレームの制御部は、ＦＣフレームヘッダ内に格納され、図１７Ｅに関して説明された他のタイプのフレームの生成と同様の形式で生成される。しかし、ＦＣＰ−ＤＡＴＡフレームの場合、処理は、制御情報を、ＳＡＴＡポートからＧＳＭＳを経由して取得されたデータと組み合わせるために段階化されるべきである。ＦＯＳＭ１７５７がＦＣＰ−ＤＡＴＡフレームを記述するＳＲＥを受信するとき、ＦＯＳＭは、ＦＣＰ−ＤＡＴＡフレームヘッダを構築し、ＧＳＭＳ１７４４内のＶＱ１７５９を介してデータを取得するＦＤＭ１７４２を通してＧＳＭＳチャネルによってフレームに組み入れられたデータを要求することが必要である。データ及び制御情報がＦＯＳＭによってＦＣＰ−ＤＡＴＡフレームに合成されると、フレームは次にＦＣポートへ渡され、ＣＭＳＧメッセージが、上述のように、ＣＱにキュー入れされる。
【００９４】
図１８は、本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントのより詳細なブロック図を表す。論理コンポーネントは、２台のＦＣポート１８０２及び１８０４と、ルーティング層１８０６と、ＦＣＰ層１８０８と、ＧＳＭＳ１８１０と、ＳＡＴＡポート層１８１２と、図１６及び１７に関して既に説明した２台のＣＰＵ１８１４及び１８１６を備えたCPU複合体とを含む。図１８に、太線矢印１８１８のような太線矢印で表された通信経路及び通信リンクは、ストレージシェルフ・ルータ内の性能がクリティカルな（performance-critical）通信経路を表す。性能がクリティカルな経路は、ＦＣフレームの受信及び出力と、ＳＡＴＡポートによってＳＡＴＡディスクドライブへ送信するための適切なＡＴＡコマンドを生成するための受信フレームの処理と、受信されたＦＣＰ−ＤＡＴＡフレームからのデータをＧＳＭＳ経由でＳＡＴＡポートへ送ることと、ＦＣポートを介してＦＣ調停ループ又はその他のＦＣファブリックへの送信のためのＦＣフレームの生成と、ＧＳＭＳ経由でＳＡＴＡポートから取得されたデータの発信ＦＣＰ−ＤＡＴＡフレームへの組み込みとに関係がある経路である。性能がクリティカルではない（non-performance-critical）経路は、ＣＰＵ１８１４及び１８１６をストレージシェルフ・ルータの種々の論理コンポーネントと直接的に相互接続する種々のプログラムドＩ／Ｏインターフェイスを含む。例えば、中央調停スイッチ１８２０と、ＧＳＭＳ、ＳＬポート層、及び内部バスブリッジ１８２２との間にＰＩＯインターフェイスが存在し、内部バスブリッジは、今度は、１７台のＵＡＲＴポート１８２４と、Ｉ２Ｃバスインターフェイス１８２６と、汎用ＰＩＯインターフェイス（ＧＰＩＯ）１８２８と、タイマーコンポーネント１８３０と、数台の割り込みコントローラ１８３２と相互接続される。これらのＰＩＯインターフェイスは、図１８に太字ではない両矢印１８３４〜１８３６として表される。その上、ＣＰＵ１８１４及び１８１６とフラッシュメモリコントローラ１８４０との間にＰＩＯインターフェイス１８３８が存在し、フラッシュメモリコントローラは、次に、外部フラッシュメモリ１８４２とインターフェイスをとる。外部フラッシュメモリは、特定の設定管理情報及びファームウェア画像を記憶するため使用される。ＣＰＵは別のＰＩＯインターフェイス１８４４を介して内部ＳＲＡＭコントローラ１８４６に接続され、内部ＳＲＡＭコントローラ１８４６は、次に、ストレージシェルフ・ルータ内、及びストレージシェルフ・ルータ間でフェイルオーバーを命令するファームウェアルーチンを含む、ノンパフォーマンス（non-performance）経路のコード及びデータを記憶するＳＲＡＭメモリ１８４８とインターフェイスをとる。ＣＰＵ１８１４及び１８１６は、２台のデータが緊密に結合されたメモリ１８５０及び１８５２に収容され、プロセッサデータ空間のためにも使用される共有メモリキューを介して、ＦＣＰ層１８０８及びＳＡＴＡポート層１８１２と相互接続される。各ＣＰＵは、ファームウェア命令１８５４及び１８５６を格納する別個のメモリとも相互接続される。最後に、両方のＣＰＵは、単一のＰＩＯチャネル１８５８を介して、両方のＦＣポート���８０２及び１８０４と、ルーティング層１８０６と、ＦＣＰ層１８０８とに接続される。
【００９５】
図１９はＦＣポート層のより詳細な図を表す。ＦＣポート層は２台のＦＣポート１９０２及び１９０４を含み、それぞれが入力ＦＩＦＯ１９０６及び１９０８と、２台の出力ＦＩＦＯ１９１０−１９１１及び１９１２−１９１３を含む。ＦＣポートは、ＦＣ調停ループ又はその他のＦＣファブリックからの入力シリアルデータを入力ＦＩＦＯへ渡されるＦＣフレームへ共に変換し、出力ＦＩＦＯへ書き込まれる出力ＦＣフレームをＦＣ調停ループへ送信されるシリアルデータへ変換する物理層ロジック及びリンク層ロジック１９１４〜１９１７を含む。
【００９６】
図２０はルーティング層のより詳細なブロック図表示である。図２０に表されるように、ルーティング層２００２はＦＣポートのそれぞれを取り扱う別個のルーティングロジック２００４及び２００６を含む。ルーティング層は、入力ＦＣフレームを適切なキューへ経路制御するため必要なルーティング判定を容易化するため、メモリに格納されたルーティングテーブル２００８をさらに含む。ＦＣデータフレームは、上記のように、ＦＤＭ２０１１を介してＦＩＳＭ２０１０及び２０１２の制御下でＧＳＭＳ層２０１５にルータによってかなり直接的に経路制御されることに注意すべきである。ファームウェア処理を要求するフレームは、ルーティング層によって、ＣＰＵＤＭ２０１７及び２０１８を介してＦＢＱＭ２０１４及び２０１６の制御下で入力キューへ経路制御される。
【００９７】
図２１はＦＣＰ層のより詳細なブロック図表示である。図２１に表された内部コンポーネントのうちの殆どは既に説明されているか、又は、後のセクションでより詳細に説明される。一般に、一方で２台のＦＣポート１９０２及び１９０４を担当し、他方で２台のＣＰＵ２０１２及び２０１４を担当するために重複したコンポーネントの組が配置されることに注意すべきである。出力フレームを生成するため必要な情報は、ファームウェア制御下でＣＰＵによって生成され、主として単一ＣＰＵと個々に関連付けられた共有メモリ２１０６及び２１０８に格納される。各メモリに格納された情報は、次に、送信のため２台のＦＣポート１９０２及び１９０４へ送られるＦＣフレームを生成するために、ＳＲＱＭ２１１０及び２１１２と、ＦＯＳＭ２１１４及び２１１６と、ＳＲＱ＿ＡＲＢＳ２１１８及び２１２０と、ＣＰＵＤＭ２１２２及び２１２４と、その他のコンポーネントとからなる別個の組によって処理される。各ＦＣポートにおける入力フレームは、別個のルータモジュール２００４及び２００６と、ＦＩＳＭ２０１０及び２０１２と、その他のコンポーネントとによって処理される。
【００９８】
図２２はＳＡＴＡポート層のより詳細なブロック図表示を表す。ＳＡＴＡポート層の主な目的は、ＳＡＴＡポート層と、ＧＳＭＳと、ＦＣＰ層との間で共有されるタスク、すなわち、仮想キュー管理と、ＧＳＭＳ及び個別のＳＡＴＡポートによるＦＣＰ層とのデータの交換である。
【００９９】
図２３はＳＡＴＡポートのより詳細なブロック図表示である。ＳＡＴＡポートは、一体としてＳＡＴＡインターフェイスを実施する物理層２３０２、リンク層２３０４、及びトランスポート層２３０６を含む。トランスポート層は、相互接続されたＳＡＴＡディスクから到着するデータ転送の部分及びＡＴＡメッセージ情報を記憶する入力バッファ２３０８と、ＧＳＭＳ層からのデータ転送の部分、並びに、インターフェイスからＣＰＵ及び共有メモリへ送られるＡＴＡコマンドを記憶する出力バッファ２３１０とを含む。ＳＡＴＡポートに関するさらなる詳細は他のセクションで議論される。
【０１００】
ストレージシェルフ・ルータのルーティング層
図２４は、４台のストレージシェルフ・ルータ型の高可用性ストレージシェルフ内のルーティングトポロジーの抽象的な表現を表す。この抽象的な表現は以下の説明のために有用なモデル及びテンプレートである。図２４に表されるように、各ストレージシェルフ・ルータ２４０２〜２４０５は、１次リンクを介して、ディスクドライブ２４０６のようなｎ台のディスクドライブに接続される。上記のように、各ストレージシェルフ・ルータは、２次リンクを介して、近傍のｎ台のディスクドライブの組に接続されるが、２次リンクは、図２４では、単純化するために図示されていない。１台のストレージシェルフ・ルータ２４０２は、ファブリックＸ  ２４０８と呼ばれる第１のＦＣ調停ループ、又は、その他のＦＣファブリックに関してストレージシェルフ・ルータの組全体のための終点又はＦＣノード接続ポイントとしての役割を担う。別のストレージシェルフ・ルータ２４０５は、終点、又は、第２の調停ループ、若しくは、ファブリックＹと呼ばれるその他のＦＣファブリック２４１０へのＦＣノード接続としての役割を担う。各ストレージシェルフ・ルータは、例えば、ストレージシェルフ・ルータ２４０２のＸポート２４１２及びＹポート２４１４のように、２台のＦＣポート、すなわち、Ｘポート及びＹポートを含む。４台のストレージシェルフ・ルータは、内部ポイントツーポイントＦＣリンク２４１６、２４１８及び２４２０と相互接続される。例えば、ストレージシェルフ・ルータ２４０４のような特定のストレージシェルフ・ルータの場合、ファブリックＸから入力するＦＣフレームはＸポート２４２２で受信され、ストレージシェルフ・ルータ２４０４によってファブリックＸへ出力されるＦＣフレームはＸポート２４２２を介して出力される。同様に、入力ＦＣフレーム及び出力ＦＣフレームは、それぞれ、Ｙファブリックから受信され、Ｙファブリックへ向けられ、ＦＣポート２４２４を介して入力され出力される。特定のＦＣポートのＸファブリック及びＹファブリックへの割当は設定可能であり、以下の例示のための実施例及び実施例を参照する説明では、ＦＣポート０がＸファブリックポートであり、ＦＣポート１がＹポートであると仮定されているが、逆の割当も設定可能であることに注意すべきである。
【０１０１】
Ｓファブリック内で使用され、「Ｓビット」と称されるＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内の２ビット予約サブフィールドによってそのものとして特定されるＳファブリック管理フレームは、Ｘポート又はＹポートのいずれか、及びポイントツーポイントの内部ＦＣリンクを介してストレージシェルフ・ルータの間に向けられる。各ストレージシェルフ・ルータは、ストレージシェルフ内で一意であり、かつ、管理フレームにおいてＦＣフレームヘッダの一部Ｄ＿ＩＤフィールドを形成するルータ番号が割り当てられる。ストレージシェルフ・ルータは、Ｘファブリック及びＹファブリックの一方に関して厳密に増加する順序に番号付けされ、Ｘファブリック及びＹファブリックのもう一方に関して厳密に減少する順序に番号付けされる。例えば、図２４において、ストレージシェルフ・ルータ２４０２、２４０３、２４０４及び２４０５は、それぞれ、ルータ番号１、２、３及び４が割り当てられ、よって、Ｘファブリックに関して厳密に増加、すなわち、昇順であり、Ｙファブリックに関して厳密に減少、すなわち、降順である。この順序は、後述の詳細なフロー制御図において前提とされる。
【０１０２】
図２５は、２台のストレージシェルフ・ルータ、すなわち、ディスクアレイの２台のストレージシェルフ・ルータの実施内でのＸ及びＹのＦＣ調停ループ相互接続の抽象的な表現を表す図である。図２５において、ディスクアレイ・コントローラ２５０２はＦＣ調停ループＸ２５０４によって各ストレージシェルフ・ルータ２５０６及び２５０８にリンクされ、ＦＣ調停ループＹ２５１０によって両方のストレージシェルフ２５０６及び２５０８にリンクされる。図２５において、ストレージシェルフ・ルータ２５１２はストレージシェルフ２５０６のＸファブリック終点（endpoint）として機能し、ストレージシェルフ・ルータ２５１４はストレージシェルフ２５０８のＸファブリック終点として機能する。同様に、ストレージシェルフ・ルータ２５１６はストレージシェルフ２５０６のＹファブリック終点として機能し、ストレージシェルフ・ルータ２５１８はストレージシェルフ２５０８のＹファブリック終点として機能する。ディスクドライブ２５１８のような個別のディスクドライブのそれぞれは、Ｘ調停ループ及びＹ調停ループの両方を介してディスクアレイ・コントローラ２５０２にアクセス可能である。両方のストレージシェルフにおいて、ストレージシェルフ・ルータは、単一のポイントツーポイントＦＣリンク２５２０及び２５２２を介して内部的に相互接続され、その相互接続は、Ｘファブリックフレーム及びＹファブリックフレームの他に、内部的に生成され、内部的に使用される管理フレーム、すなわち、Ｓファブリックフレームを搬送する。ストレージシェルフ２５０６内の内部ポイントツーポイントＦＣリンクはＳ１ファブリックと称され、ストレージシェルフ２５０８内の内部ポイントツーポイントＦＣリンクはＳ２ファブリックと称される。本質的に、内部ポイントツーポイントＦＣリンクは、Ｘファブリック、Ｙファブリック、及び内部管理フレームのＦＣフレームを搬送するが、Ｘファブリック及びＹファブリックのフレームが終点のストレージシェルフ・ルータを経由してストレージシェルフ・ルータに入ると、それらは、使用されるか、又は、終点のストレージシェルフ・ルータのＦＣポートを介して元のＸファブリック又はＹファブリックへエクスポートされるまでＳファブリックフレームとみなされる。
【０１０３】
図２６Ａ〜Ｅは、本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す。ＦＣフレームヘッダは図３を参照して既に記載した。当然ながら、ＦＣヘッダは、フレームを、単一のＦＣノードを介してＦＣ調停ループ又はその他のＦＣファブリックへ一体的にインターフェイスを取るストレージシェルフ・ルータと相互接続されたディスクドライブではなく、ＦＣノードへ向けるため設計される。したがって、ストレージシェルフ内のストレージシェルフ・ルータ及びＳＡＴＡディスクドライブ設定へのＦＣフレームヘッダフィールドのマッピングはＦＣフレームの適切な宛先のために必要である。ＦＣフレームヘッダ２６０４の３バイトのＤ＿ＩＤフィールド２６０２は、ＦＣノードのノードアドレスを表す。ＦＣ調停ループの場合、Ｄ＿ＩＤの最上位２バイトは、一般に、非公開ループのための値「０」をとり、最下位バイトは、１２７ノードのうちの一つを指定する調停ループ物理アドレス（ＡＬ＿ＰＡ）を含む。一般的に、あるノードアドレスはディスクアレイ・コントローラのため使用され、別のノードアドレスはファブリック調停ループアドレスのため予約される。３バイトのＳ＿ＩＤフィールドは、フレームが作り出されたノードのノードアドレスを含む。一般に、Ｓ＿ＩＤフィールドはディスクアレイ・コントローラのノードアドレスであるが、ストレージシェルフはＦＣファブリックに直接的に相互接続され、その場合、Ｓ＿ＩＤは、ストレージシェルフにアクセスする非常に複数の遠隔のエンティティのうちのいずれかの２４ビットＦＣファブリックアドレスの全体である。
【０１０４】
図２６Ａに表されるように、ＦＣフレームヘッダ２６０６のＤＦ＿ＣＴＬフィールド２６０４内の２個の予約ビット２６０２は、ストレージシェルフ内に、或いは、換言すれば、Ｓファブリック内に記憶され、送信されたフレームのある種の宛先指標、すなわち、コンパス２６０８として利用される。以下の表４はこの宛先指標の符号化を表す。
【表４】
2007506205.tif 000006
【０１０５】
ビットパターン「０１」はフレームがＸファブリックフレームとしてＳファブリックに入ったことを示し、ビットパターン「１０」はフレームがＹファブリックフレームとしてＳファブリックに入ったことを示し、ビットパターン「１１」はフレームがＳファブリック管理フレームであることを示す。ＤＦ＿ＣＴＬフィールドのビット１８：１９によって表された宛先指標、すなわち、内部コンパスは、Ｓファブリックと外部ファブリックの両方のフレームが単一のＦＣポートを介してストレージシェルフ・ルータによって受信されるので必要とされる。上記のように、ＤＦ＿ＣＴＬフィールドのビット１８：１９は「Ｓビット」のように総称される。Ｓビットは終点ストレージシェルフ・ルータによるＸファブリック又はＹファブリックフレームの受信によってセットされ、終点ストレージシェルフ・ルータから元のＸファブリック又はＹファブリックへのエクスポートの前にクリアされる。
【０１０６】
図２６Ｂは、ＦＣＰ−ＣＭＮＤフレームのルーティングと関連したＦＣフレームヘッダフィールドを説明する。Ｄ＿ＩＤフレーム２６１０はＦＣフレームを特定のＦＣノードへ向けるが、上記のように、ストレージシェルフは、トランスペアレント・モードで動作するとき、複数のノードを含み、トランスペアレント・モードで動作しないとき、単一のＤ＿ＩＤを収容するすべてのＦＣフレームを分散させる必要がある複数のデータ記憶デバイスを含む。ストレージシェルフ・ルータのルーティングロジックは、本質的に、Ｄ＿ＩＤと、ストレージシェルフと、ストレージシェルフ・ルータと、最終的には、ディスクドライブの間の種々のマッピングの取り扱いのために用いられる。ルーティングロジックは、ＦＣフレームがストレージシェルフ・ルータへ向けられているかどうかをＤ＿ＩＤフィールドの値だけからは決定できない。Ｄ＿ＩＤが入力ＦＣ＿ＣＭＮＤフレームをストレージシェルフ・ルータへ向けるかどうかを決定するために、ルーティングロジックは、後述の内部ルーティングテーブル２６１２及び複数のレジスタを参考にして、Ｄ＿ＩＤがストレージシェルフ・ルータによって管理されるディスクドライブのアドレスを表現するかどうかを決定することが必要である。よって、図２６Ｂに表されるように、内部ルーティングテーブル２６１２に関して解釈されるＤ＿ＩＤフィールドは、ストレージシェル２６１６内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続された特定のディスクを指定する。その上、ルーティングロジックは、Ｓ＿ＩＤフィールド２６１１によって指定されたＦＣフレームのソースがストレージシェルフ・ルータを用いて現在ログインされている遠隔のエンティティであるか、及びその遠隔のエンティティがアドレス指定されたディスクドライブと相互接続されているかを判定するために、後述の付加内部テーブル２６１４を参考にする。よって、種々の内部テーブル２６１４に関して解釈されるようなＳ＿ＩＤフィールドは、ＦＣ−ＣＭＮＤフレームによって表現されるコマンドが実行されるべきかどうかを決定する許可スイッチ２６２０として機能する。
【０１０７】
図２６ＣはＦＣＰ−ＤＡＴＡフレームのルーティングと関連したＦＣフレームヘッダフィールドを示す。Ｄ＿ＩＤフィールド２６１０及びＳ＿ＩＤフィールド２６１１と内部テーブル２６１２及び２６１４は、ＦＣＰ−ＣＭＮＤフレームのルーティングと同様に、ストレージシェルフ２６１６内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続されたディスクを指定し、データのディスクへの転送を許可２６２０するため使用される。しかし、ＦＣＰ＿ＤＡＴＡフレームはマルチＦＣＰ＿ＤＡＴＡフレームの書込みシーケンスの一部分であるため、ルーティングロジックがＦＣ＿ＤＡＴＡフレームはストレージシェルフ・ルータにローカルであるディスクへ向けられることを判定すると、ＦＣフレームヘッダ２６０６の付加フィールドはストレージシェルフ・ルータ内のＦＣＰ＿ＤＡＴＡフレームを方向付けるために利用される。図２６Ｃに表されるように、ＲＸ＿ＩＤフィールド２６２２は、ＦＣＰ＿ＤＡＴＡフレームに関連した書込みコマンドを指定したＦＣＰ＿ＣＭＮＤフレームの処理中に、ストレージシェルフ・ルータによって初期的に生成された値を含み、その値が書込みコマンドのコンテキスト２６２４を指定し、このコンテキストは、次に、データがＧＳＭＳを介してＦＣＰ層からＳＡＴＡポート層へ転送できるようにする仮想キュー２６２６を指定する。その上、ＦＣフレームヘッダ２６０６のパラメータフィールド２６２８は、書込みコマンドによって転送されたデータ２６３２の一連の全長の範囲内のＦＣＰ＿ＤＡＴＡフレームに収容されたデータの位置２６３０を示すデータの相対オフセットを含む。コンテキスト２６２４は、適切な順序付けのためＦＣＰ＿ＤＡＴＡフレームをチェックするため使用される次のＦＣＰ＿ＤＡＴＡフレームの予想相対オフセットを格納する。格納された予想相対オフセットがパラメータフィールドの値と一致しないならば、ＦＣＰ＿ＤＡＴＡフレームは乱れた順序で受信されているので、エラー処理を呼び出すことが必要である。
【０１０８】
図２６Ｄは、内部的に生成された管理ファイルのルーティングに関連したＦＣフレームヘッダフィールドを示す。管理ファイルの場合、Ｄ＿ＩＤフィールド２６１０の最下位バイトは、ストレージシェルフ内の特定のストレージシェルフ・ルータを指定するルータ番号を含む。Ｄ＿ＩＤフィールドに含まれるルータ番号は、管理フレームがストレージシェルフ・ルータ、例えば、ストレージシェルフ・ルータ２６３６へ向けられているか、又は、管理ファイルがＸファブリックに関連したＦＣポート２６３８、又は、Ｙファブリックに関連したＦＣポート２６４０を介してアクセス可能であるストレージシェルフ内の別のストレージシェルフ・ルータへ向けられているかを判定するため、後述されるレジスタ２６３４に含まれるローカルルータ番号と比較される。
【０１０９】
最後に、図２６Ｅは、受信されたＦＣＰ＿ＴＲＡＮＳＦＥＲ＿ＲＤＹフレーム及びＦＣＰ＿ＲＥＳＰＯＮＳＥフレームのルーティングに関連したＦＣフレームヘッダフィールドを示す。ＦＣＰ＿ＴＲＡＮＳＦＥＲ＿ＲＤＹフレーム及びＦＣＰ＿ＲＥＳＰＯＮＳＥフレームの場合、ルーティングロジックは、別のストレージシェルフ・ルータによって、遠隔のエンティティ、典型的にはディスクアレイ・コントローラへ向けられるようなフレームを直ちに認識する。よって、ルーティングロジックは、フレームがＸファブリック又はＹファブリックは返信されなければならないことを決定するために、ＦＣフレームヘッダのＲ＿ＣＴＬフィールド２６４２を調べることだけが必要である。
【０１１０】
図２７は、ルーティングロジックによるＦＣフレームのルーティングを容易化するためにストレージシェルフ・ルータ内に保持された７個のメインルーティングテーブルを示す。これらのテーブルは、内部ルーティングテーブル（ＩＲＴ）２７０２、Ｘファブリック外部ルーティングテーブル（ＥＲＴ＿Ｘ）２７０４、Ｙファブリック外部ルーティングテーブル（ＥＲＴ＿Ｙ）２７０６、Ｘファブリック・イニシエータ／ターゲットテーブル（ＩＴＴ＿Ｘ）２７０８、Ｙファブリック・イニシエータ／ターゲットテーブル（ＩＴＴ＿Ｙ）２７１０、Ｘファブリック・ログイン・ペアテーブル（ＬＰＴ＿Ｘ）２７１２、及びＹファブリック・ログイン・ペアテーブル（ＬＰＴ＿Ｙ）２７１４を含む。７個のルーティングテーブルのそれぞれは、インデックスレジスタ（ＩＲＴ＿ＩＮＤＥＸ）２７１６及びデータレジスタ（ＩＲＴ＿ＤＡＴＡ）２７１８のようなインデックス及びデータレジスタが関連付けられる。テーブルの内容は、テーブル内の特定のフィールドを示す値をインデックスレジスタに書き込み、データレジスタからフィールドの内容を読み出し、又は、フィールドの新しい内容をデータレジスタに書き込むことによりＣＰＵによってアクセス可能である。その上、ルータ番号と、Ｘファブリック及びＹファブリックのそれぞれに関してストレージシェルフ・ルータ・アドレスに対応するＤ＿ＩＤの上位２バイトとを格納するため３個のレジスタＳＦＡＲ２７２０、ＸＦＡＲ２７２２及びＹＦＡＲ２７２４が存在する。これは、Ｄ＿ＩＤの下位バイトだけを格納すればよいＩＲＴ、ＥＲＴ＿Ｘ及びＥＲＴ＿Ｙテーブルをよりコンパクトにすることが可能である。
【０１１１】
ＩＲＴテーブル２７０２は、ストレージシェルフ・ルータに接続されたディスクドライブ毎に、又は、換言すれば、ローカルディスクドライブ毎に行を含む。行は、ディスクドライブに割り当てられ、ディスクドライブへ向けられたフレームのＤ＿ＩＤフィールドの下位バイトに収容されたＡＬ＿ＰＡと、ディスクドライブのＬＵＮ番号と、ディスクドライブ内に収容された論理ブロックアドレスの範囲と、２台のＣＰＵのうちＩ／Ｏに向けられた方のＣＰＵを示すフィールドと、行がテーブル内の有効エントリーを表現するかどうかを示す有効ビットとを含む。有効ビットは最大可能台数未満のディスクドライブがストレージシェルフ・ルータに接続されるときに好都合である。
【０１１２】
ＥＲＴ＿Ｘテーブル２７０４及びＥＲＴ＿Ｙテーブル２７０６は、ストレージシェルフ・ルータにローカルではなく、ストレージシェルフにローカルであるディスクドライブをアドレス指定する有効Ｄ＿ＩＤの下位バイトを収容する。これらのテーブルは、後述するように、無駄な内部ＦＣフレーム転送を避けるために使用される。
【０１１３】
ＸファブリックＩＴＴテーブル２７０８及びＹファブリックＩＴＴテーブル２７１０は、ストレージシェルフ・ルータで現在ログインされ、ストレージシェルフ・ルータとのＦＣエクスチェンジを開始可能であり、かつ、ストレージシェルフ・ルータに接続されたディスクドライブでログインされた遠隔のＦＣオリジネータに対応するＳ＿ＩＤ全体を含む。ログインペアテーブル２７１２及び２７１４は、本質的に疎行列であり、ビット値は、ＦＣＰエクスチェンジのため現在ログインされている遠隔のリジネータとローカルディスクドライブのペアに対応するセル内でオンにされる。ログインテーブル２７１２及び２７１４は、かくして、ディスクアレイ・コントローラのような遠隔のエンティティと、ストレージシェルフ・ルータに相互接続されたローカルディスクドライブとの間で進行中の相互接続を表現する有効ログインの指標を与える。
【０１１４】
次に、ストレージシェルフ・ルータのルーティング層を構築するルーティングロジックが一連の詳細なフロー制御図を参照して説明される。図２８は、フロー制御図で使用される簡単化されたルーティングトポロジー及びルーティング宛先の名称を与える。図２９〜３５は、ルーティング層ロジックを記述する階層的な一連のフロー制御図である。
【０１１５】
図２８に表されるように、ルーティング層２８０２は、ＦＣポート２８０４及び２８０６からの入力ＦＣフレームを、そのまま元のＦＣポートに、ＣＰＵで動くＦＣＰロジック及びファームウェアによる処理のためＦＣＰ層２８１０に、又は、コンテキストが確立されたデータフレームの場合には、かなり直接的にＧＳＭＳ層に転送することに関与する。ルーティング層は、それぞれ「Ｆｒｏｍ＿ＦＰ０」及び「Ｆｒｏｍ＿ＦＰ１」と称されるＦＣポート内の入力ＦＩＦＯ２８１２及び２８１４から入力ＦＣフレームを受信する。ルーティング層は、それぞれ「Ｔｏ＿ＦＰ０」及び「Ｔｏ＿ＦＰ１」と称される出力ＦＩＦＯ２８１６及び２８１８の一方にＦＣフレームを書き込むことにより、ＦＣフレームをＦＣポートへ戻す。ルーティング層は、ＦＣＰ＿ＤＡＴＡフレームを、仮想キューを介して、ＧＳＭＳ層にかなり直接的に転送し、プロセス「Ｔｏ＿ＧＳＭＳ」と称され、さらに、ＦＣフレームを処理のためＦＣＰ層２８１０に転送し、「Ｔｏ＿ＦＣＰ」と称される。名称「Ｆｒｏｍ＿ＦＰ０」、「Ｆｒｏｍ＿ＦＰ１」、「Ｔｏ＿ＦＰ０」、「Ｔｏ＿ＦＰ１」、「Ｔｏ＿ＧＳＭＳ」及び「Ｔｏ＿ＦＣＰ」は、ＦＩＦＯからの読出し、ＦＩＦＯへの書込み、ＧＳＭＳ仮想キューメカニズムによるデータ転送、及びＣＰＵへの共有メモリインターフェイスによる状態機械介在型転送のプロセスの省略表記としてフロー制御図で利用される。
【０１１６】
図２９は、ルーティング層ロジックを表現する第１の最上位レベルのフロー制御図である。ルーティング層ロジックは、入力ＦＣフレームをその適切な宛先へ向けるために行われる判定の組として記述される。機能するストレージルータにおいて、図２９〜３５に関して記載されたルーティングロジックは入力ＦＣフレームが処理されるときに呼び出される。ルーティングロジックは、ストレージシェルフ・ルータの状態機械及び論理回路内にある。ストレージシェルフ・ルータは、蓄積交換性の（store-and-forward）、データコピータイプの内部データ転送をできる限り避け、その代わりに、ＦＣポートのＦＩＦＯへ入力されているときでさえ、フレームヘッダ内の情報を使用して、フレームが経路制御可能であるようにストリーム化されるように設計される。換言すれば、ルーティングロジックは、フレームヘッダがＦＩＦＯからの読出しのため利用可能になると直ちに呼び出され、フレームが経路制御され、フレームに収容された初期データが、ＦＣポートによる残りのデータの受信と並行してその宛先へ転送される。ストレージシェルフ・ルータは、２台のＦＣポートの２台の異なる入力ＦＩＦＯの偏りのない処理を確保するため調停ロジックを含むので、ＸファブリックとＹファブリックの両方から入力するＦＣフレームは適時に取り扱われ、ＸファブリックとＹファブリックのいずれも不必要なＦＣフレーム処理遅延、すなわち、飢餓状態（starvation）に陥ることがない。ルーティングロジックは、ＦＩＦＯに新たに到着したフレームの利用可能性を示すＦＣポートによって生成された信号により呼び出される。
【０１１７】
ステップ２９０２において、ルーティング層ロジック（ＲＬＬ）は、それぞれ「Ｆｒｏｍ＿ＦＰ０」及び「Ｆｒｏｍ＿ＦＰ１」と称されるＦＣポートの入力ＦＩＦＯの一方から次の入力ＦＣフレームを読む。ステップ２９０４において、ルーティング層ロジックは、ＦＣフレームがクラス３のＦＣフレームであるかどうかを判定する。クラス３のＦＣフレームだけが記載されたストレージシェルフ・ルータの実施形態によってサポートされる。ＦＣフレームがクラス３のフレームでないならば、ＦＣフレームは、ステップ２９０６におけるエラー処理のため、ＦＣＰ層、Ｔｏ＿ＦＣＰ、へ向けられる。尚、これ以降のフロー制御図では、フロー矢印に付随する小文字の「ｅ」は、その矢印によって表現されたフローがエラー状態を取り扱うために起こることを示す。ＦＣフレームが、ステップ２９０４で判定されるように、クラス３のＦＣフレームであるならば、ＲＬＬは、次に、ステップ２９０８において、ＦＣフレームの受信元であるＦＣポートがＳファブリック終点であるか、換言すれば、Ｘファブリックノード若しくはＹファブリックノードであるかどうかを判定する。ストレージシェルフ・ルータは、特定のポートがＳファブリックに関して終点であるかどうかを、換言すれば、設定可能なセッティングからＸファブリックノード若しくはＹファブリックノードであるかどうかを判定可能である。ＦＣフレームヘッダは、上記のようにソースポートのポートアドレスを含む。
【０１１８】
ＦＣフレームのソースポートがＳファブリック終点であり、ＦＣフレームがローカルＳファブリックの外部にあるエンティティから受信されたことを示すならば、ＲＬＬは、ステップ２９１０において、ＳビットのいずれかがＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内にセットされたかどうかを判定する。もしそうであるならば、エラーが発生しており、ＦＣフレームは、ステップ２９０６のエラー処理のためＦＣＰ層、Ｔｏ＿ＦＣＰ、へ向けられる。そうでないならば、ＦＣフレームがＸファブリック、すなわち、Ｘスペース、又は、Ｙファブリック、すなわち、Ｙスペースに属するかどうかを示すために、ステップ２９１２において、適切なＳビットがセットされる。ストレージシェルフ内で相互接続されたストレージシェルフ・ルータの組内でのストレージシェルフ・ルータの位置とは無関係に、２台のＦＣポートのうちの一方がＸファブリックに対応し、２台のＦＣポートのうちのもう一方がＹファブリックに対応することに注意すべきである。上記のように、ＦＣポートとＸ及びＴファブリックとの間の関連性は設定可能である。次に、ＲＬＬは、ステップ２９１４において、ＳビットがフレームはＳファブリックフレームであることを示すためにセットされるかどうかを判定する。もしそうであるならば、ステップ２９１６において、フレームの宛先を決定するためにサブロジック「宛先管理（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」の値は、フレームをエラー処理のためＦＣＰへ向けるためにステップ３４０６において「Ｔｏ＿ＦＣＰ」にセットされる。
【０１２５】
図３５は、図３３のステップ３３３０におけるサブロジック「他のルーティング」のフロー制御図表示である。ステップ３５０２において、ＲＬＬは、フレームのＲＸ＿ＩＤフィールドが現在のストレージシェルフ・ルータ、又は、それに接続されたディスクドライブがそのフレームのＦＣレスポンダであることを示すかどうかを判定する。もしそうであるならば、ステップ３５０４において、ＲＬＬは、フレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを判定する。もしそうであるならば、ステップ３５０６において、ＲＬＬは、そのフレームの有効コンテキストが存在するかどうかを判定する。もしそうであるならば、フレームは、上記のように、データをＳＡＴＡポートへ転送するため、ステップ３５０８においてＧＳＭＳ、「Ｔｏ＿ＧＳＭＳ」へ向けられる。そうでなければ、フレームは、ステップ３５１０において、エラー処理のためＦＣＰ層へ向けられる。ＦＣフレームヘッダのＲＸ＿ＩＤフィールドが、ステップ３５０２において判定されるときに、このストレージシェルフはフレームのＦＣレスポンダである旨を示さないならば、ステップ３５１２において、ＲＬＬは、ＦＣフレームヘッダ内のＲＸ＿ＩＤフィールドによって特定されたストレージシェルフ・ルータがフレームを受信したポートとは反対側のポートを介してアクセス可能であるかどうかを判定する。もしそうでなければ、フレームは、ＦＣＰ層によるエラー処理のためキュー「Ｔｏ＿ＦＣＰ」に入れられる。そうではなく、ＲＸ＿ＩＤがフレームを受信したポートとは反対側のポートからアクセス可能であるストレージシェルフ・ルータを特定する場合、ＲＬＬは、ステップ３５１４において、そのポートがＳファブリック終点であるかどうかを判定する。もしそうであるならば、ステップ３５１６において、ＲＬＬは、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドにセットされたＳスペースビットを除去する。ステップ３５１８において、ＲＬＬは、フレームがＸファブリックとＹファブリックのどちらに属するかを判定し、ステップ３５２０又は３５２２のいずれかで、そのフレームをそのフレームが属するファブリックに適したキューにキュー入れする。
【０１２６】
ＳＣＳＩコマンド／ＡＴＡコマンドの翻訳
上記のように、本発明の一実施形態を表すストレージシェルフ・ルータは、ＦＣＰ＿ＣＭＮＤフレームがＦＣディスクドライブへ向けられているかのように、ディスクアレイコントロールによってストレージシェルフ・ルータへ向けられたＦＣＰ＿ＣＭＮＤフレームを処理し、ＦＣＰ＿ＣＭＮＤフレーム内のＳＣＳＩコマンドを、ＳＣＳＩコマンドを実行するためＳＡＴＡディスクドライブへ送信され得る１個以上のＡＴＡコマンドに翻訳する。以下の表５は、ストレージシェルフ・ルータによって受信されたＳＣＳＩコマンドと、ＳＣＳＩコマンドを実行するために使用されるＡＴＡコマンドとの間の対応関係を表す。
【表５】
2007506205.tif 000007
【０１２７】
仮想ディスクのフォーマッティング
種々の実施形態において、様々な予想外のディスクフォーマッティング規約がストレージシェルフディスクドライブによって実際には採用されるという事実にもかかわらず、ディスクアレイ・コントローラ及びその他の外部処理エンティティがストレージシェルフ内のディスクの予想されるディスクフォーマッティング規約とインターフェイスをとることができるように、ストレージシェルフ内のストレージシェルフ・ルータ又は複数台のストレージシェルフ・ルータは、仮想ディスクのフォーマッティングを提供する。仮想ディスクのフォーマッティングは、ディスクアレイ・コントローラがＡＴＡ及びＳＡＴＡディスクフォーマッティング規約とのインターフェイスをとるために再組み込みされることを必要とすることなく、ＡＴＡディスクドライブのようなより経済的なディスクドライブの使用を可能にさせる。さらに、ストレージシェルフ・ルータ、又は、一体的な複数台のストレージシェルフ・ルータは、付加的なエラー検出及びエラー訂正情報のような付加情報をディスクセクタ内に組み込むために、ディスクアレイ・コントローラのような外部演算エンティティを非標準的な予想外のディスクフォーマッティング規約にさらすことなく、ストレージシェルフ内で様々なディスクフォーマッティング規約を適用可能である。
【０１２８】
図３６Ａ〜Ｂは、ＡＴＡディスクドライブ及びＦＣディスクドライブによって利用されるディスクフォーマッティング規約を示す。図３６Ａに表されるように、ディスクドライブは、それぞれがセクタに分割された複数のトラックにより構成されると概念的に考えられる。トラックは、ＡＴＡディスクドライブプラッタ（platter）上の外周帯であるトラック３６０２のようなディスクプラッタの表面にある環状の帯である。各トラックは、第１のトラック３６０２の第１のセクタであるセクタ３６０４のようなセクタと呼ばれる放射状の区域に分割される。一般に、ディスクアクセス動作はセクタの粒度で行われる。最新のディスクドライブは、複数の平行方向のプラッタを含む。平行プラッタのすべての両面の同じ番号が付けられた全トラックは一体としてシリンダを構成する。図３６Ａに示されるようなＡＴＡディスクドライブでは、各トラックの各セクタは、一般に５１２バイトのデータ・ペイロードを含む。セクタは、セクタ番号とエラー検出及びエラー訂正情報を含む付加情報を格納する。この付加情報は、一般にディスクドライブコントローラによって維持され使用され、外部からアクセスできない。この付加情報は本発明に関連しない。したがって、セクタはセクタに含まれるデータ・ペイロードのバイト数に関して議論される。
【０１２９】
図３６Ｂは、ＦＣディスクドライブの概念的なトラック及びセクタのレイアウトを表す。ＦＣディスクドライブは、ＡＴＡディスクドライブによって利用される５１２バイトのセクタではなく、５２０バイトのセクタを利用する。図３６Ａに表されたＡＴＡ又はＳＡＴＡディスクドライブの概念的なレイアウトを、図３６Ｂに表されたＦＣディスクドライブの概念的なレイアウトと比較すると、図３６Ａ〜Ｂの両方のレイアウトは本質的に等しいデータバイト数をサポートするが、ＡＴＡディスクドライブフォーマットは、ＦＣディスクドライブより複数であり、かつ、より小型のセクタを各トラック内に設ける。しかし、一般に、ＡＴＡディスクとＦＣディスクは本質的に等しいバイト数を与えないので、ＦＣディスクは５１２バイトのセクタでフォーマットしてもよい。図３６Ａ〜Ｂは、簡略化された概念レベルでディスクフォーマッティング規約を説明することに注意すべきである。実際には、ディスクドライブは数千又は数万個のトラックを含み、各トラックは非常に複数のセクタを含む。
【０１３０】
種々の実施形態において、本発明の対象であるストレージシェルフ・ルータは、経済的なＡＴＡディスクドライブをファイバチャネルベースのディスクアレイのストレージシェルフ内で利用できるようにする。しかし、ある種の現在利用可能なＦＣベースのコントローラは、５２０バイトのセクタをサポートするディスクドライブだけとインターフェイスをとるように実施される。ＡＴＡ又はＳＡＴＡベースのストレージシェルフの製造業者は、今の時点でＡＴＡ非互換性のディスクアレイ・コントローラが５１２バイトのセクタを収容するＡＴＡ又はＳＡＴＡディスクドライブとインターフェイスをとるために機能強化されるように要求することを選択するが、より実現可能なアプローチは、仮想ディスクのフォーマッティングをサポートするようにストレージシェルフ・ルータを実施することである。仮想ディスクのフォーマッティングは、ディスクアレイ・コントローラのような外部エンティティに、ストレージシェルフがＦＣディスクドライブの５２０バイトセクタのフォーマッティング規約にフォーマットされたディスクドライブを収容するかのように見せかけ、ストレージシェル内の１台以上のストレージシェルフ・ルータが５２０バイトセクタベースのディスクアクセス命令をストレージシェルフ内のＡＴＡディスクドライブによって利用される５１２バイトセクタのフォーマッティングにマッピングする。
【０１３１】
図３７Ａ〜Ｄは、ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内の５１２バイトベースのディスクドライブへの５２０バイト書込みアクセスを取り扱う仮想ディスクのフォーマッティングの実施を示す。図３７Ａに表されるように、ディスクアレイ・コントローラのような外部処理エンティティは、書込みアクセスのターゲットとされるディスクを、５２０バイトセクタ（図３７Ａの３７０２）でフォーマットされているとみなすが、内部ディスクドライブは実際には５１２バイトセクタ（図３７Ａの３７０４）でフォーマットされている。ストレージシェルフ・ルータは、論理的な５２０バイトセクタベースのフォーマッティング３７０２と実際の５１２バイトセクタのフォーマッティング３７０４との間で、図３７Ａに垂直矢印３７０６〜３７１０によって表現されたマッピングを維持する役割を担う。図３７Ｂ〜Ｄは、５１２バイトセクタベースの内部ディスクドライブ３７０４への仮想的な５２０バイトセクタ２５７〜２５９、３７１２〜３７１４を指定する書込み動作を完了するために、ストレージシェルフ・ルータによって実行される動作を示す。ディスクドライブの先頭セクタはセクタ０であると考えられ、すべての後続のセクタが単調増加するセクタ番号を有するセクタ番号付け規約を仮定すると、２５６×５２０＝２６０×５１２＝１３３１２０であるので、仮想的な５２０バイトセクタ２５６  ３７１６は実際のディスクドライブ上の５１２バイトセクタ２６０  ３７１８の開始バイトで始まる。換言すれば、仮想的な５２０バイトセクタ２５６及び実際の５１２バイトセクタ２６０は、共にバイト番号１３３１２０から始まる。仮想セクタ２５６及び実際のセクタ２６０の始まりは同じバイトアドレス３７０６にマッピングされるが、仮想セクタ２５６は、図３７Ａのマッピング矢印３７０７によって示されるように、実際のセクタ２６０の終端よりも延びる。したがって、仮想セクタ２５７の開始は実際のセクタ２６１の開始から８バイト３７２０の変位でオフセットし、仮想セクタ２５８〜２６０の開始は、実際のセクタ２６２〜２６４の開始から１６バイト、２４バイト及び３２バイトのオフセット３７２２〜３７２４でオフセットする。したがって、仮想セクタ２５７〜２５９をディスクドライブに書き込むため、ストレージシェルフ・ルータは、仮想セクタ２５７〜２５９のため外部処理エンティティによって供給されたデータを、実際のディスクセクタ２６１〜２６４（３７２６〜３７２９）に書き込むことが必要である。
【０１３２】
図３７Ｂは、仮想フォーマッティング環境のストレージシェルフ・ルータによって実行される書込み動作処理の第１のフェーズを示す。図３７Ｂに表されるように、ストレージシェルフ・ルータは、最初に、実際のディスクセクタ２６１（３７２６）及び２６４（３７２９）をメモリバッファ３７３０に読み込む。メモリバッファ３７３２及び３７３４内のデータの網掛けされた部分は、書込みアクセスがアドレス指定された仮想セクタとは別個の仮想セクタに含まれるディスクドライブから読み出されたデータに対応する。セクタ２６１及び２６４（それぞれ３７２６及び３７２９）は、アクセス動作のための仮想セクタ境界を含むので、「境界セクタ（boundary sector）」と呼ばれる。ストレージシェルフ・ルータは、第２のメモリバッファ３７３６内の仮想セクタ２５７〜２５９（図３７Ａではそれぞれ３７１２〜３７１４）に書き込まれるべきデータを同時に受信する。
【０１３３】
図３７Ｃは、書込みアクセスのストレージシェルフ・ルータの処理の第２のフェーズを表す。図３７Ｃにおいて、受信データの網掛けされた部分３７３８及び３７４０は、それぞれ、図３７Ｂに表された実際のディスクドライブから読み出されたバッファデータの部分３７４２及び３７４４に書き込まれる。
【０１３４】
図３７Ｄは、書込みアクセスのストレージシェルフ・ルータの実施の最終的なフェーズを示す。図３７Ｄにおいて、実際のディスクセクタ２６１及び２６４のメモリバッファ３７３０に準備されたバッファデータは、実際のディスクセクタ２６２及び２６３（それぞれ、３７４６及び３７４８）に対応する第２のメモリバッファ内の受信データの部分３７３６と共に、実際のディスクセクタ２６１〜２６４にすべて書き込まれる。非境界ディスクセクタ２６２及び２６３は受信データバッファ３７３６から直接書き込み可能であることに注意すべきである。
【０１３５】
図３７Ａ〜Ｄに示された、仮想フォーマッティング環境におけるストレージシェルフ・ルータが実施する書込みアクセスを要約すると、ストレージシェルフ・ルータは、一般に、最初に実際のディスクドライブから境界セクタを読み出し、受信データをメモリ内の境界セクタに書き込み、そして、境界セクタ及びすべての非境界セクタをディスクドライブに書込みすることが必要である。したがって、一般に、５２０バイトセクタベースのｎセクタの仮想書込み動作は、２回の実際のディスクセクタの読出しと２＋ｎ−１回の実際のディスクセクタの書込みとを使用してストレージシェルフ・ルータによって実施される。
【０１３６】
書込みＩ／Ｏ（ｎ個の仮想５２０セクタ）→２回の読出し＋２回の書込み＋（ｎ−１）回の書込みであり、対応して低下する書き込み効率は、
書込みＩ／Ｏ効率＝（ｎ／（４＋（ｎ−１）））×１００
であり、ここで、仮想セクタのサイズは実際のディスクセクタにかなり近いことを仮定している。
【０１３７】
図３８Ａ〜Ｂは、ストレージシェルフ・ルータによる仮想的な５２０バイトセクタベースの読出し動作の実施を示す。図３８Ａは、図３７Ａに示されたマッピングと同様の、仮想的な５２０バイトベースのセクタと実際のディスクドライブの５１２バイトセクタとの間のマッピングを示すが、図３８Ａでは、ディスクアレイ・コントローラのような外部処理エンティティは仮想セクタ２５７〜２５９（それぞれ、３７１２〜３７１４）の読出しを要求している。図３８Ｂは、仮想セクタ２５７〜２５９に向けられた読出しアクセスを実施するために、ストレージシェルフ・ルータによって実行される動作を示す。ストレージシェルフ・ルータは、最初に、外部処理エンティティによって要求されたデータを収容する実際のディスクセクタを決定し、これは境界セクタ２６１及び２６４（それぞれ、３７２６及び３７２９）と非境界セクタ２６２及び２６３（それぞれ、３７２７及び３７２８）とを含む。ストレージシェルフ・ルータがアクセスされるべきデータを含む実際のディスクセクタを特定すると、ストレージシェルフ・ルータはこれらのセクタをメモリバッファ３８０２に読み込む。ストレージシェルフ・ルータは、次に、メモリバッファ内の仮想セクタ境界３８０４〜３８０７を特定し、メモリバッファ３８０２内の仮想セクタに対応するデータを要求中の外部処理エンティティへ返送し、最初の仮想セクタ３８０４の先頭バイトよりも前にあるメモリバッファデータ、及び最後の仮想セクタ３８０７の最終バイトより後に続くメモリバッファデータを棄てる。
【０１３８】
図３７Ａ〜Ｄ及び３８Ａ〜Ｂにおける仮想ディスクのフォーマッティングの実施の説明図は、上位レベルの概念説明図である。内部的には、ストレージシェルフ・ルータは、入力ＦＣ＿ＤＡＴＡパケットからデータを受信し、特定のＳＡＴＡディスクドライブへの転送のためストレージシェルフ・ルータを介してＳＡＴＡポートへデータを経路制御し、特定のＳＡＴＡポートでＳＡＴＡディスクドライブからデータを受信し、ストレージシェルフ・ルータを介して戻るようにそのデータを経路制御し、外部処理エンティティへ返信されるＦＣ＿ＤＡＴＡパケット及びＦＣ＿ＳＴＡＴＵＳパケットでデータ及び状態情報を送信するために、上記のサブセクションで説明した種々のデータ伝送経路を利用する。複数個の別個のメモリバッファが図３７Ｂ〜Ｄ及び３８Ｄに表されているが、ストレージシェルフ・ルータによる実際のデータの処理は、上記のサブセクションに記載された仮想キューメカニズム及びその他のデータ転送メカニズムを使用して最小限のデータ記憶で達成される。図３７Ｂ〜Ｄ及び３８Ｂに表されたメモリバッファは、ストレージシェルフ・ルータ内で実行されるデータ操作及び伝送についての上記の詳細なレベルではなく、概念レベルでストレージシェルフ・ルータによるデータ処理を説明するためのものである。
【０１３９】
図３８Ａ〜Ｂに示された読出し動作を要約すると、ストレージシェルフ・ルータは、ｎ個の仮想セクタの仮想読出しを実行するために、ｎプラス１個のディスクセクタを読むことが必要であり、読み出し効率は対応して減少し、次式で記述され、
読出しＩ／Ｏ（ｎ個の仮想５２０バイトセクタ）→１回の読出し＋ｎ回の読出し
であり、対応して減少する読み出し効率は、
読出しＩ／Ｏ効率＝（ｎ／（ｎ＋１））×１００
であり、ここで、仮想セクタのサイズは実際のディスクセクタにかなり近いことが仮定されている。
【０１４０】
図３９は図３７Ａ〜Ｄに示されたようなストレージシェルフ・ルータによる複数の仮想セクタの書込み動作の実施を表す制御フロー図である。最初に、ステップ３９０２において、ストレージシェルフ・ルータは、仮想セクタを指定する外部処理エンティティから書込みコマンドを受信する。次に、ステップ３９０４において、ストレージシェルフ・ルータは、下位境界セクタ及び上位境界セクタを含む書き込まれるべき実際のディスクセクタを決定する。次に、ストレージシェルフ・ルータは、境界セクタ３９０６の処理と非境界セクタ３９０８の処理を並行して行う。境界セクタの処理は、ステップ３９１０において、受信書込みコマンドに関連した下位境界セクタが存在するかどうかを判定する。もしそうであるならば、下位境界セクタの読み出しはステップ３９１２で開始される。同様に、ステップ３９１４において、ストレージシェルフ・ルータは、書込み動作に関与する上位境界セクタが存在するかどうかを判定し、もしそうであるならば、ステップ３９１６において上位境界の読出し動作を開始する。図３７Ａの仮想セクタ２５６と実際のディスクセクタ２６０の場合と同様に仮想セクタの先頭が実際のディスクセクタの先頭と一致するとき、下位境界セクタは書込み動作に関与しないことに注意すべきである。同様に、上位仮想セクタの最後が実際のディスクセクタの最後と一致するとき、書込み動作に関与する上位境界セクタは存在しない。
【０１４１】
ステップ３９１８において検出されるときに下位境界セクタの読出し動作が完了するとき、ストレージシェルフ・ルータは、書込みコマンドと関連した受信データの初期部分をステップ３９２０において下位境界セクタに書き込み、下位境界セクタのディスクドライブへの書込みをステップ３９２２で開始する。同様に、ストレージシェルフ・ルータがステップ３９２４で上位境界セクタの読み出しの完了を検出するならば、ストレージシェルフ・ルータは、ステップ３９２６において、上位境界セクタから読み出されたデータを含む受信データの最終部分をメモリバッファに書き込み、ステップ３９２８において、上位境界セクタのディスクドライブへの書込みを開始する。本発明の一実施形態では、ディスクセクタは最小セクタから最大セクタの順序でディスクに書き込まれる。非境界セクタの場合、ストレージシェルフ・ルータは、各非境界セクタを、ステップ３９３０、３９３２及び３９３４を含むｆｏｒループの一部として、ステップ３９３２において、ディスクドライブに書き込む。ストレージシェルフ・ルータが仮想書込み動作に関連したイベントを検出したとき、ストレージシェルフ・ルータは、ステップ３９３６で、すべての開始された書込み動作が完了したかどうかを判定する。もしそうであるならば、書込み動作はステップ３９３８で成功完了する。そうでなければ、ストレージシェルフ・ルータは、仮想セクタの書込み動作がタイムアウトしたかどうかをステップ３９４０で判定する。もしそうであるならば、エラー状態がステップ３９４２で取得される。そうでなければ、ストレージシェルフ・ルータは、ステップ３９４４において、すべての書込み動作の完了を待つ。
【０１４２】
図４０は、図３８Ａ〜Ｂに示されるような、１個以上の仮想セクタへ向けられた読出し動作のストレージシェルフ・ルータによる実施の制御フロー図である。ステップ４００２において、ストレージシェルフ・ルータは外部処理エンティティから読出しコマンドを受信する。ステップ４００４において、ストレージシェルフ・ルータは、境界セクタを含む読出し動作に関与するすべての実際のディスクセクタの識別情報を判定する。次に、ステップ４００６〜４００８により構成されたｆｏｒループにおいて、ストレージシェルフ・ルータは読出し動作に関与する実際のディスクセクタのそれぞれを読む。ストレージシェルフ・ルータが仮想読出し動作に関連したイベントの発生を検出したとき、ストレージシェルフ・ルータは、ステップ４０１０において、読み出し動作によって要求されたディスクセクタが受信されたかどうかを判定する。もしそうであるならば、ステップ４０１２において、ストレージシェルフ・ルータは、境界セクタ読出しが完了したかどうかを判定する。もしそうであるならば、ステップ４０１４において、ストレージシェルフ・ルータは境界セクタから仮想読出し動作に関連したデータを抽出し、そのデータを最終的に要求中の処理エンティティへ送信するためのバッファ又はキューに書き込む。受信セクタが境界セクタではないならば、ストレージシェルフ・ルータは、ステップ４０１６において、受信データを要求中の処理エンティティへの最終的な送信のためのバッファ又はキュー内の適切な位置に書き込むだけである。ステップ４０１８で判定されるときに、すべての読み出しが成功完了したならば、仮想読出し動作は、もちろんディスクドライブから読み出されたデータが処理エンティティへ順調に返信されたことを条件として、ステップ４０２０で成功完了する。そうでなければ、ストレージシェルフ・ルータはステップ４０２２でタイムアウトが発生したかどうかを判定する。もしそうであるならば、エラー状態がステップ４０２４で取得される。そうでなければ、ストレージシェルフ・ルータは、ステップ４０２６において、別の読出し動作の完了を待ち続ける。
【０１４３】
５２０バイトのＦＣディスクドライブセクタの５１２バイトのＡＴＡディスクドライブセクタへのマッピングは、本発明の仮想フォーマッティング方法及びシステムの一実施形態において、効率的に計算される。図４１は、本発明の一実施形態を表す仮想フォーマッティング方法及びシステムを実行するために必要とされる計算値を示す。図４１において、最上部の水平方向のセクタの帯４１０２は、仮想マッピングされた５２０バイトセクタを表し、最下部の水平方向の帯４１０４は物理的な５１２バイトＡＴＡセクタを表す。図４１は、仮想セクタ４１０６〜４１０８の物理セクタ４１１０〜４１１２へのマッピングを示す。図４１に表された実施例では、仮想セクタ４００〜４０９は対応する物理セクタへマッピングされることを前提とする。最初の仮想セクタの論理ブロックアドレス（ＬＢＡ）、「fc_lba」４１１４は、その結果、値「４００」をとり、マッピングされるべき仮想ブロックの個数、「fc_block_count」４１１６は、その結果、１０である。計算値「fc_lba_last」４１１８、すなわち、マッピングされるべき仮想セクタレンジの後に続く最初の仮想セクタのＬＢＡは「４１０」である。マッピングされるべき仮想セクタのためのデータを含む最初の物理セクタの論理ブロックアドレス、すなわち、「ata_lba」４１２０は、一般的なＣ言語の構文及び演算子を使用して、
ata_lba＝fc_lba＋(fc_lba>>6)
として計算される。この実施例では、ata_labの計算値は「４０６」である。この計算は、最初の仮想セクタのＬＢＡに、最初の仮想セクタより先行する仮想セクタの総数を６４で除算して計算された物理セクタの個数を加算することとして理解できるが、その理由は、６４個の仮想セクタの連続的な組のそれぞれが対応する６５個の物理セクタの連続的な組に正確にマッピングされるためであり、換言すれば、
６４＊５２０＝＝６５＊５１２＝＝３３２８０
である。最初の物理セクタの先頭から最初の仮想セクタの最初のバイトに対応する最初の物理セクタ内のバイトまでのオフセット、すなわち、「ata_lba_offset」４１２２は、以下の式：
ata_lba_offset＝（fc_lba&63）<<3
として計算される。この実施例では、ata_lba_offsetの計算値は「１２８」である。この計算は、開始仮想セクタＬＢＡの後に続く仮想セクタの個数を必要とされる８バイトシフトの回数に対応する６４で除算して、必要とされる最初の物理ブロック内の８バイトシフトの回数を決定することであると理解され、ここで、８バイトは仮想セクタ長と物理セクタ長の差である。最後の物理的な境界ブロックＬＢＡ、すなわち、「ata_ending_lba」４１２４は、
ata_ending_lba＝fc_lba_last＋（fc_lba_last>>6）
として計算される。この実施例では、ata_ending_lbaの計算値は「４１６」である。上記の計算は最初の物理セクタ「ata_lba」の計算と等価である。仮想セクタの範囲内ではない最初のバイトに対応する最後の物理的な境界ブロック内のオフセット、すなわち、「ata_ending_lba_offset」４１２６は、
ata_ending_lba_offset＝（fc_lba_last&63）<<3
として計算される。この実施例では、ata_ending_lba_offsetの計算値は「２０８」である。ata_ending_lba_offsetの計算値が「０」であるならば、
ata_ending_lba＝ata_ending_lba−1
であり、その理由は、物理セクタの最終バイトに対応し、最後ではない部分的に関連した境界セクタに対応する仮想セクタの最終バイトがアクセスされなければならないからである。この実施例では、ata_ending_lbaの値はこの最終ステップによって変更されない。仮想セクタに対応する物理ブロックの個数、すなわち、「ata_block_count」は最終的に、
ata_block_count＝ata_ending_lba−ata_lba＋1
として計算される。この実施例では、ata_block_countの計算値は「１１」である。仮想セクタが物理セクタより小さい場合に、類似しているが異なる計算が行われることに注意すべきである。本発明の方法によって任意のサイズの仮想セクタが任意のサイズの物理セクタにマッピングされる。
【０１４４】
図４２は、本発明の一実施形態を表す離散的な仮想フォーマッティング実施における仮想セクタ書込みを示す。離散的な仮想フォーマッティング実施は、本発明の一実施形態を表す集積回路型ストレージシェルフ・ルータ実施によって与えられるストレージシェルフインターフェイスを提供する汎用プロセッサ及び記憶されたファームウェア／ソフトウェアルーチンを利用するストレージルータのようなコンポーネントにおけるストレージルータ機能のファームウェア／ソフトウェア実施に関与する。図４２に表されるように、物理境界セクタ４２０２〜４２０３は、１２８Ｋのディスクバッファ４２０４に読み込まれ、受信された仮想セクタ４２０６〜４２０７の内容は１２８Ｋのディスクバッファ４２０４に書き込まれ、仮想セクタデータに対応する物理境界データの部分を上書きする。１２８Ｋのディスクバッファ４２０４の内容は、次に、ＡＴＡディスクドライブ４２０８に書き込まれる。よって、仮想ディスクのフォーマッティングは、ソフトウェア／ファームウェア／汎用プロセッサベースのコンポーネントを使用して実行される。
【０１４５】
図４３は本発明の一実施形態を表す集積回路型ストレージシェルフベースの仮想フォーマッティング実施における仮想セクタ書込みを示す。図４３に表されるように、物理境界セクタ４３０２〜４３０３は、ＧＳＭ４３０８内の最初のセクタバッファ（ＦＳＢ）４３０４及び最後のセクタバッファ（ＬＳＢ）４３０６に読み込まれ、ＦＳＢ及びＬＳＢは仮想セクタデータとオーバーレイされ、残りの仮想セクタデータは、ＦＳＢ及びＬＳＢと関連したＧＳＭ４３０８内の仮想キュー４３１０を介して転送するためセットアップされる。ＦＳＢ及びＬＳＢの内容と、仮想キューへ向けられたデータは、次に、前のサブセクションで説明されたデータ転送メカニズムによってＡＴＡディスクへ転送される。
【０１４６】
図３９〜４０の制御フロー図は、仮想書込みコマンド及び仮想読出しコマンドに関連したストレージシェルフ動作のかなり上位の概念的な説明図を表すことに注意すべきである。特に、簡単さ及び明瞭さのため、上記のセクションで説明されたデータフロー及びディスク動作の詳細は繰り返されない。
【０１４７】
図３６〜４３に関して記載された仮想ディスクのフォーマッティングは、上記のように、ストレージシェルフ・ルータがディスクアレイ・コントローラのような外部演算エンティティに対して、実際には、ストレージシェルフルが５１２バイトセクタのＡＴＡ又はＳＡＴＡディスクドライブを収容しているのにもかかわらず、ストレージシェルフ・ルータによって管理されるストレージシェルフが５２０バイトセクタのＦＣディスクドライブを収容しているように見せかけることを可能にさせる。同様に、仮想フォーマッティングは、ストレージシェルフ・ルータ内で利用されるローカルディスクフォーマッティングとは無関係に、外部エンティティによって予想若しくは希望される任意のタイプのディスクフォーマッティングへのインターフェイスを提供するためにストレージシェルフ・ルータによって使用される。例えば、新しい非常に経済的な１０２４バイトセクタのディスクドライブが利用可能になるならば、仮想ディスクのフォーマッティング技術は、ストレージシェルフ・ルータが仮想的な５２０バイトセクタベースのアクセス動作、又は、５１２バイトセクタベースのアクセス動作を、新しい１０２４バイトセクタベースのディスクドライブにマッピングすることを可能にさせる。その上、多層の仮想ディスクのフォーマッティングが、ディスクドライブの各セクタ内に記憶された付加情報に依拠するディスクドライブのエラー検出及びエラー訂正能力を提供若しくは強化するために、ストレージシェルフ・ルータによって利用される。
【０１４８】
図４４は、ストレージシェルフ・ルータがＡＴＡディスクドライブのエラー検出能力を強化することを可能にさせる２層の仮想ディスクのフォーマッティング技術を示す。図４４において、ＡＴＡディスクドライブは、垂直方向の実線４４０４のような垂直方向の実線を用いて直線的なセクタの部分列４４０２によって示された５１２バイトセクタを利用する。ストレージシェルフ・ルータは、５１２バイトセクタの短い部分列４４０６によって図４４に示されるように、５２０バイトセクタを内在するディスクドライブがサポートする５１２バイトセクタにマッピングするため、上記の仮想ディスクのフォーマッティング技術を使用する。仮想セクタ４４０８のような５２０バイト仮想セクタのそれぞれは、５１２バイトペイロードと、５１２バイトペイロードに追加された付加的な８バイトの水平冗長符号（longitudinal redundancy code：ＬＲＣ）フィールドとを含む。換言すれば、ストレージシェルフ・ルータは、５２０バイトセクタを内在するＡＴＡディスクドライブの５１２バイトセクタにマッピングするために第１の仮想ディスクのフォーマッティングを利用する。しかし、本実施形態では、ストレージシェルフ・ルータは、仮想セクタ４４１０のような外部から見える５１２バイトの第２レベルの仮想セクタを、ストレージシェルフ・ルータによって５１２バイトディスクセクタにマッピングされる第１レベルの仮想セクタ４４０８のような５２０バイトの第１レベルの仮想セクタにマッピングするために、第２の仮想ディスクのフォーマッティングレベルを利用する。この２段階の仮想化は、ストレージシェルフ・ルータが付加的な８バイトのＬＲＣフィールドを各セクタの最後に挿入することを可能にさせる。ディスクアレイ・コントローラのような外部処理エンティティは、ディスクドライブによって使用される同じフォーマッティングである５１２バイトセクタをサポートする第２レベルの仮想ディスクのフォーマッティング層へのインターフェイスをとるが、ストレージシェルフ・ルータが付加的な８バイトＬＲＣフィールドをセクタ毎にディスクドライブに格納するので、外部処理エンティティから見えるディスクドライブ内の総セクタは、ディスクドライブによってサポートされる実際のセクタ数より少ない。さらに、外部エンティティからディスクセクタに含まれるＬＲＣフィールドは見えない。
【０１４９】
図４５は、図４４に示された２層仮想レベルの実施形態の第１レベルの仮想５２０バイトセクタのそれぞれにストレージシェルフ・ルータによって収容されたＬＲＣフィールドの内容を示す。図４５に表されるように、５２０バイト仮想セクタ４５０２の最初の５１２バイトはペイロード又はデータバイトである。ＬＲＣフィールドの最後の８バイトは、２個の予約バイト４５０２、２バイト４５０６で構成される巡回冗長検査（cyclic redundancy check：ＣＲＣ）サブフィールド、及び最後の４バイトに格納された論理ブロックアドレス４５０８を含む。ＣＲＣフィールドは、周知のＣＲＣ−ＣＣＩＴＴ技術によって計算されたＣＲＣ値を含む。この値の計算は、以下で詳細に説明される。論理ブロックアドレス（ＬＢＡ）は仮想セクタに関連したセクタアドレスである。
【０１５０】
ＬＲＣフィールドの内容は、種々のデータ破壊エラーを検出するために利用されるハードウェアレベルのＥＣＣ情報及びディスクドライブコントローラ技術にもかかわらずＡＴＡディスクドライブに生じる様々なタイプのエラーをストレージシェルフ・ルータが検出することを可能にさせる。例えば、ディスクドライブ内の特定のセクタを指定する読出し要求は、異なるセクタに関連したディスクドライブコントローラによるデータ返送を生じることがたまにある。ＬＲＣフィールド内のＬＢＡは、ストレージシェルフ・ルータがこのようなエラーを検出することを可能にさせる。その上、ディスクドライブは様々なレベルのデータ破壊を被る。ハードウェアによって供給されるＥＣＣメカニズムは、１ビット又は２ビットのパリティエラーを検出するが、ＣＲＣフィールド４５０６に格納されたＣＲＣ値は、ＣＲＣ値を計算するため利用される技術に応じて、１ビット、２ビット及び３ビットのすべてのエラー、並びに、ある長さの範囲の一続きのエラーを検出することが可能である。換言すれば、ＣＲＣ値は機能強化されたエラー検出能力を提供する。図４４に示された２段階の仮想ディスクのフォーマッティング技術を利用することにより、ストレージシェルフ・ルータは、別のやり方ではストレージシェルフ・ルータによって検出できない広範囲のエラー状態を検出可能であり、そして、ディスクアレイ・コントローラのような外部処理エンティティから見えない方式でそのようにすることができる。上記のように、外部処理エンティティによって観察可能な唯一のトランスペアレントではない特性は、特定のディスクドライブのためアクセス可能なかなり少数のセクタである。
【０１５１】
図４６はＣＲＣ値の計算を示す。図４６に表されるように、５２０バイト仮想セクタのペイロード又はデータバイト４６０２及びＬＢＡフィールド４６０４は、一体的に非常に大きい数を表現していると考えられる。その非常に大きい数は、モジュロー２（modulo-2）の除算を使用して、特定の定数４６０６によって割り算され、モジュロー２の除算からの剰余が初期ＣＲＣ値４６０８として選ばれる。その定数は１７ビット数であり、よって、モジュロー２の除算からの剰余は最大で長さが１６ビットであり、その結果、２バイトのＣＲＣフィールド内に収まることに注意すべきである。初期ＣＲＣ値は、最終的なＣＲＣ値４６１０を生成するために一定値「ＦＦＦＦ」（１６進表記）で排他的論理和（ＸＯＲ）演算される。定数４６０６は、データバイト４６０２及びＬＢＡフィールド４６０４により構成される大きい数に加えられる小さな変化が、定数によるモジュロー２の除算の後に、異なる剰余、すなわち、初期ＣＲＣ値を生じることを保証するため代数的性質に関して慎重に選択される。様々なＣＲＣ計算技術は、各定数が僅かに異なるエラー検出能力を提供する異なる代数的性質を備えている異なる定数を利用する。
【０１５２】
図４７は、仮想セクタの内容がエラーを検出するために仮想セクタのＬＲＣフィールドに含まれるＣＲＣフィールドに関してチェックされる技術を示す。例えば、ストレージシェルフ・ルータが２個のディスクセクタから仮想セクタの内容を読むときに、ストレージシェルフ・ルータは、検出可能なエラーが仮想セクタ内に含まれる情報を記憶する際又は読む際に発生したかどうかを判定するために、ＣＲＣフィールドに関して仮想セクタの内容をチェック可能である。仮想セクタがディスクから読み出されるとき、ストレージシェルフ・ルータは、非常に大きい数を形成するため、データバイト４７０２、ＬＢＡフィールド４７０４、及びＣＲＣフィールド４７０６を一つに合成する。その非常に大きい数は、モジュロー２の除算を用いて、ＣＲＣ値を計算するために利用された定数４７０８と同じ数で割り算され、剰余がチェック値４７１０として利用される。ＣＲＣ−ＣＣＩＴＴ技術が利用されるとき、チェック値４７１０は、取り出されたデータ、ＬＢＡ及びＣＲＣフィールドが初期ＣＲＣ値を計算したときのデータ及びＬＢＡと同じであるときに「１Ｄ０Ｆ」（１６進）である。換言すれば、チェック値４７１０が一定値「１Ｄ０Ｆ」を有するとき、ストレージシェルフ・ルータは、仮想セクタの記憶及び取り出しの際にエラーが発生していないことが確信できる。当然ながら、ＣＲＣ技術は絶対確実なものではなく、非常に僅かな無言のエラーの可能性がある。一定チェック値が生じるのは、初期計算されたＣＲＣをデータ及びＬＢＡに追加することはデータ及びＬＢＡにより構成された数に２１６を乗ずることと等価であり、かつ、データ、ＬＢＡ及び初期計算されたＣＲＣにより構成された数は、ＣＲＣ−ＣＣＩＴＴ技術によって、一定値４７０８を用いて一様に割り切れることが保証されるためであることに注意すべきである。
【０１５３】
図４８は、取り出された仮想セクタのエラーをチェックするためにストレージシェルフ・ルータによって利用される完全なＬＲＣチェック技術を示す制御フロー図である。ステップ４８０２において、ストレージシェルフ・ルータは、ＣＲＣフィールド及びＬＢＡフィールドを含む取り出された仮想セクタを受信する。ステップ４８０４において、ストレージシェルフ・ルータは、取り出された仮想セクタ内のＬＢＡ値が予想ＬＢＡ値に一致するかどうかを判定する。一致しないならば、エラーがステップ４８０６において返送される。そうでなければ、ステップ４８０８において、ストレージシェルフ・ルータは、図４４に関して説明したように、取り出された仮想セクタのデータ、ＬＢＡ及びＣＲＣフィールドに基づいて新しいＣＲＣ値を計算する。新たに計算されたＣＲＣ値が、ステップ４８１０で判定されるときに、予想定数「１Ｄ０Ｆ」（１６進）と等しいならば、ストレージシェルフ・ルータはステップ４８１２においてチェックの成功の通知を返送する。そうでなければ、ストレージシェルフ・ルータはステップ４８１４でエラーを返送する。
【０１５４】
ストレージシェルフ・ルータは、書込み動作中に完全（full）ＬＲＣチェック又は延期（deferred）ＬＲＣチェックを実行する。図４９は延期ＬＲＣチェックを示す。図４９に表されるように、また、既に説明したように、単一の第２レベルの仮想５１２バイトセクタ４９０２がストレージシェルフ・ルータによってディスクドライブに書き込まれるとき、ストレージシェルフ・ルータは最初に、第２レベルの仮想セクタ４９０２に関連した２個の境界セクタ４９０６〜４９０７をメモリ４９１０に読み込む４９０４〜４９０５ことが必要である。境界セクタ４９０６〜４９０７は、一般にそれぞれがＬＲＣフィールド４９１２及び４９１３を含む。第２のＬＲＣフィールド４９１３は、第２レベルの仮想セクタ４９０２に対応する第１レベルの５２０バイト仮想セクタ４９１４内に存在する。延期ＬＲＣモードでは、ストレージシェルフ・ルータは、データ及びＬＢＡ値をバッファ４９１６に挿入し、ＣＲＣ計算を実行し、計算されたＣＲＣをＣＲＣフィールド４９１８に挿入し、次に、得られた第１レベルの仮想セクタをメモリバッファ４９１０に書き込む。メモリバッファの内容は、次に、２回の書込み動作４９２０及び４９２２によってディスクドライブへ返送される。第１レベルの仮想セクタと関連したＬＲＣフィールド４９１３の内容は有効であると仮定されることに注意すべきである。しかし、２回の書込み動作は、同時に、近接する第１レベルの仮想セクタに対応するデータ及びＬＲＣフィールドを元のディスクドライブに書き込む。このデータ及び付加ＬＲＣフィールドが有効であるかどうかをチェックするのではなく、ストレージシェルフ・ルータは、近接する第１レベルの仮想レベルが後で読み出されるまで、近接する第１レベルの仮想セクタのチェックを単に延期する。
【０１５５】
図５０は、受信された第２レベルの５１２バイト仮想セクタ上の書込み動作の完全ＬＲＣチェックを示す。図５０を図４９と比較することにより、完全ＬＲＣチェックでは、ストレージシェルフ・ルータが、第２レベルの仮想セクタ４９０２を囲む境界セクタ４９０６及び４９０７だけでなく、境界セクタ４９０６及び４９０７の隣接セクタ５００２及び５００４もまたメモリバッファ５００６に読み込むことが明らかである。これは、受信された第２レベルの仮想セクタ４９２をメモリバッファ５０１２へ書き込み、２個の境界セクタを元のディスクドライブ５０１４及び５０１８へ書き込むために進む前に、ストレージシェルフ・ルータが図４８を参照して説明されたＬＲＣチェック方法を使用して、下位及び上位の近接する第１レベルの５２０バイト仮想セクタ５００８及び５０１０はエラーなしであることをチェックすることを可能にさせる。完全ＬＲＣチェックは、したがって、２回の付加的な書き込みを要求し、対応した書き込み効率の減少を伴い、以下の式：
書込みＩ／Ｏ（ｎ個の仮想５２０セクタ）
→４回の読出し＋２回の書込み＋（ｎ−１）回の書込み
によって記述され、対応して減少する読み出し効率は、
書込みＩ／Ｏ効率＝（ｎ／（６＋（ｎ−１）））×１００
であり、仮想セクタのサイズは実際のディスクセクタにかなり近いことが仮定されている。
【０１５６】
ストレージシェルフ・ルータは、問題を検出し、外部処理エンティティから見えない問題を訂正するために種々の付加的な技術を利用する。例えば、ストレージシェルフ・ルータが図５０において下位境界セクタ４９０６をうまく読み出すことに失敗した場合、ストレージシェルフ・ルータは、それにもかかわらず、第２レベルの仮想セクタ４９１２に受信された下位境界セクタの部分をディスク上の下位境界セクタに書き込み、「エラーから回復」状態をディスクアレイ・コントローラへ返送する。次に、前の仮想セクタがアクセスされるとき、ディスクアレイ・コントローラは、前の書込み動作中に読まれなかった元の下位境界セクタの部分を取り出すために、関連したセクタのミラーコピーからのデータ復元をトリガーし、そのデータをディスクドライブに書き込み、エラーを訂正する。よって、ＬＲＣ故障はストレージシェルフ・ルータによって回避される。
【０１５７】
本発明は、特定の実施形態の観点で説明されているが、本発明がこの実施形態に限定されることは意図されていない。本発明の精神の範囲内における変更は当業者に明白である。例えば、上記のように、本発明の種々の実施形態を表現する仮想ディスクのフォーマッティング技術は、殆ど制限のない数の仮想ディスクのフォーマッティングインターフェイスを外部処理エンティティに提供し、よって、内部ディスクフォーマットを外部処理エンティティから分離するために、ストレージシェルフ・ルータによって使用される。任意のサイズの仮想セクタが本発明の方法によって任意のサイズの物理セクタにマッピングされる。これはストレージシェルフ・ルータが付加的なエラー検出情報を各セクタに収容し、外部処理エンティティによって想定されないフォーマッティング規約を使用するディスクドライブを利用することを可能にさせるだけでなく、仮想ディスクのフォーマッティング技術は多様なその他の目的のために使用される。例えば、仮想ディスクのフォーマッティングは、ストレージシェルフ・ルータが非常に安全なデータ記憶装置を提供するために仮想セクタペイロードを拡張された符号化ペイロードに符号化することを可能にさせる。別の例として、ストレージシェルフ・ルータは、十分な冗長なデータをディスクドライブ内に格納すべく仮想ディスクのフォーマッティングを使用し、ストレージシェルフ・ルータが、個々のセクタ内で発生する複数のタイプのデータエラーと、さらにセクタ境界を越えて発生するエラーを検出するだけでなく、訂正することを可能にさせる。どのようなハードウェア実施とも同様に、殆ど制限のない数の異なるハードウェア、ファームウェア、及びソフトウェアコンポーネントが、仮想ディスクのフォーマッティングにおける複数の異なる実施形態、並びに、複数のタイプの実施形態を実施するため設計される。当業者は、ストレージシェルフのストレージシェルフ・ルータ、内部ディスクドライブ、及びその他のコンポーネントの設計及び能力に応じて、膨大な数の最適化を利用可能である。
【０１５８】
上記の解説は、説明の目的のため、本発明の全体を通じた理解を与えるために特定の名称を使用した。しかし、当業者に明らかであるように、具体的な詳細は本発明を実施するために必要とはされない。換言すれば、周知の回路及びデバイスは根本的な発明から不必要に注意がそれることを避けるためにブロック図形式で表される。よって、本発明の具体的な実施形態の上記の解説は、例示と説明のために記載されたものであり、それらは、網羅的であること、或いは、発明を開示された形式そのままに制限することを意図せず、明らかに複数の変更及び変形が上記の教示内容に照らして可能である。実施形態は、本発明の原理及びその実際的な適用を最もよく説明し、それによって、当業者が本発明及び検討された特定用途に適するような実施形態と共に種々の実施形態を最もうまく利用することを可能にさせるために選択され記載された。本発明の範囲は特許請求の範囲及びその均等の範囲によって定められることが意図されている。
【図面の簡単な説明】
【０１５９】
【図１Ａ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図１Ｂ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図１Ｃ】３種類のＦＣ相互接続トポロジーの１タイプを表す図である。
【図２】ＦＣネットワーク経由の転送のためデータが時間的に組織化された非常に簡単な階層を示す図である。
【図３】標準的なＦＣフレームの内容を表す図である。
【図４】ＳＣＳＩバスを含む一般的なパーソナルコンピュータアーキテクチャのブロック図である。
【図５】ＳＣＳＩバストポロジーを示す図である。
【図６Ａ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図６Ｂ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図６Ｃ】読出し及び書込み入出力動作の初期化と実施に伴うＳＣＳＩプロトコルを示す図である。
【図７Ａ】図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣプロトコルのＳＣＳＩシーケンスへのマッピングを示す図である。
【図７Ｂ】図６Ａ〜６Ｃに記載されたイニシエータ及びターゲットとＳＣＳＩバスフェーズ及び状態との間で交換されたＦＣプロトコルのＳＣＳＩシーケンスへのマッピングを示す図である。
【図８Ａ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｂ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｃ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図８Ｄ】ディスクアレイでのＦＣディスクの使用に関連した複数の問題点を示す図である。
【図９】図８Ａ〜Ｄのため利用された説明図の規約を使用して、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す図である。
【図１０】本発明の一実施形態を表すストレージシェルフ・ルータが階層的に相互接続されたコンピュータとディスクアレイのシステム内で占める位置を示す図である。
【図１１】本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。
【図１２】本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。
【図１３Ａ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１３Ｂ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１３Ｃ】本発明の一実施形態を表すストレージシェルフ・ルータを使用する３種類の実施のうちの一つを示す図である。
【図１４Ａ】ＡＴＡディスクドライブを２台のストレージシェルフ・ルータと相互接続するため適したパスコントローラカードの二つの実施のうちの一つを示す図である。
【図１４Ｂ】ＡＴＡディスクドライブを２台のストレージシェルフ・ルータと相互接続するため適したパスコントローラカードの二つの実施のうちの一つを示す図である。
【図１５】ストレージシェルフ・ルータの主要機能コンポーネントを示す上位レベルブロック図である。
【図１６Ａ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｂ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｃ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｄ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｅ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｆ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１６Ｇ】本発明の一実施形態を表す１台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスのうちの一つを示す図である。
【図１７Ａ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｂ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｃ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｄ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｅ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１７Ｆ】本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローを示す図である。
【図１８】本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントのより詳細なブロック図表示である。
【図１９】ＦＣポート層をより詳細に表す図である。
【図２０】ルーティング層を表すより詳細なブロック図表示である。
【図２１】ＦＣＰ層を表すより詳細なブロック図表示である。
【図２２】ＳＡＴＡポート層を表すより詳細なブロック図表示である。
【図２３】ＳＡＴＡポートを表すより詳細なブロック図表示である。
【図２４】４台のストレージシェルフ・ルータ可用性のストレージシェルフ内のルーティングトポロジーを概略的に表した図である。
【図２５】２台のストレージシェルフ・ルータ、すなわち、ディスクアレイの２台のストレージシェルフ・ルータの実施内でのＸ及びＹのＦＣ調停ループ相互接続の抽象的な表現を表す図である。
【図２６Ａ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｂ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｃ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｄ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｅ】本発明の一実施形態を表すストレージシェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２７】ルーティング層によるＦＣフレームのルーティングを容易化するためストレージシェルフ・ルータ内に保持された７個のメインルーティングテーブルを示す図である。
【図２８】フロー制御図で使用される簡易化されたルーティングトポロジー及びルーティング宛先の命名法を規定する図である。
【図２９】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３０】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３１】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３２】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３３】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３４】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３５】ルーティング層ロジックを示す階層的な一連のフロー制御図である。
【図３６Ａ】ＡＴＡ及びＳＡＴＡディスクドライブによって採用されたディスクフォーマッティング規約を示す図である。
【図３６Ｂ】ＦＣディスクドライブによって採用されたディスクフォーマッティング規約を示す図である。
【図３７Ａ】ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内部の５１２バイトベースのディスクドライブへの５２０バイト書込みアクセスを処理するストレージシェルフ仮想ディスクのフォーマッティング実施を示す図である。
【図３７Ｂ】ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内部の５１２バイトベースのディスクドライブへの５２０バイト書込みアクセスを処理するストレージシェルフ仮想ディスクのフォーマッティング実施を示す図である。
【図３７Ｃ】ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内部の５１２バイトベースのディスクドライブへの５２０バイト書込みアクセスを処理するストレージシェルフ仮想ディスクのフォーマッティング実施を示す図である。
【図３７Ｄ】ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内部の５１２バイトベースのディスクドライブへの５２０バイト書込みアクセスを処理するストレージシェルフ仮想ディスクのフォーマッティング実施を示す図である。
【図３８Ａ】ストレージシェルフ・ルータによる５２０バイトセクタベースの仮想読出し動作の実施を示す図である。
【図３８Ｂ】ストレージシェルフ・ルータによる５２０バイトセクタベースの仮想読出し動作の実施を示す図である。
【図３９】図３７Ａ〜Ｄに示されるような仮想書込み動作のストレージシェルフ・ルータ実施を示す制御フロー図である。
【図４０】図３８Ａ〜Ｂに示されるような仮想読出し動作のストレージシェルフ・ルータ実施を示す制御フロー図である。
【図４１】本発明の一実施形態を表す仮想フォーマッティング方法及びシステムを実行するため必要な計算値を示す図である。
【図４２】本発明の一実施形態を表す離散的な仮想フォーマッティング実施における仮想セクタ書込みを示す図である。
【図４３】本発明の一実施形態を表すストレージシェルフベースの離散的な仮想フォーマッティング実施における仮想セクタ書込みを示す図である。
【図４４】ストレージシェルフ・ルータがＡＴＡ及びＳＡＴＡディスクドライブのエラー訂正能力を高めることができる２レベルの仮想ディスクのフォーマッティング技術を示す図である。
【図４５】図４１に示された２仮想レベルの実施形態の第１レベルの仮想５２０バイトセクタのそれぞれにストレージシェルフ・ルータによって収容されたＬＲＣフィールドの内容を示す図である。
【図４６】ＣＲＣ値の計算を示す図である。
【図４７】エラーを検出するため仮想セクタの内容を仮想セクタのＬＲＣフィールドに収容されたＣＲＣフィールドに対してチェックする技術を示す図である。
【図４８】取り出された仮想セクタのエラーをチェックするためストレージシェルフ・ルータによって利用される完全なＬＲＣチェック技術を示す制御フロー図である。
【図４９】延期されたＬＲＣチェックを示す図である。
【図５０】受信された第２レベルの５１２バイト仮想セクタ上での書込み動作の完全ＬＲＣチェックを示す図である。
【図１Ａ】
2007506205.tif 000008
【図１Ｂ】
2007506205.tif 000009
【図１Ｃ】
2007506205.tif 000010
【図２】
2007506205.tif 000011
【図３】
2007506205.tif 000012
【図４】
2007506205.tif 000013
【図５】
2007506205.tif 000014
【図６Ａ】
2007506205.tif 000015
【図６Ｂ】
2007506205.tif 000016
【図６Ｃ】
2007506205.tif 000017
【図７Ａ】
2007506205.tif 000018
【図７Ｂ】
2007506205.tif 000019
【図８Ａ】
2007506205.tif 000020
【図８Ｂ】
2007506205.tif 000021
【図８Ｃ】
2007506205.tif 000022
【図８Ｄ】
2007506205.tif 000023
【図９】
2007506205.tif 000024
【図１０】
2007506205.tif 000025
【図１１】
2007506205.tif 000026
【図１２】
2007506205.tif 000027
【図１３Ａ】
2007506205.tif 000028
【図１３Ｂ】
2007506205.tif 000029
【図１３Ｃ】
2007506205.tif 000030
【図１４Ａ】
2007506205.tif 000031
【図１４Ｂ】
2007506205.tif 000032
【図１５】
2007506205.tif 000033
【図１６Ａ】
2007506205.tif 000034
【図１６Ｂ】
2007506205.tif 000035
【図１６Ｃ】
2007506205.tif 000036
【図１６Ｄ】
2007506205.tif 000037
【図１６Ｅ】
2007506205.tif 000038
【図１６Ｆ】
2007506205.tif 000039
【図１６Ｇ】
2007506205.tif 000040
【図１７Ａ】
2007506205.tif 000041
【図１７Ｂ】
2007506205.tif 000042
【図１７Ｃ】
2007506205.tif 000043
【図１７Ｄ】
2007506205.tif 000044
【図１７Ｅ】
2007506205.tif 000045
【図１７Ｆ】
2007506205.tif 000046
【図１８】
2007506205.tif 000047
【図１９】
2007506205.tif 000048
【図２０】
2007506205.tif 000049
【図２１】
2007506205.tif 000050
【図２２】
2007506205.tif 000051
【図２３】
2007506205.tif 000052
【図２４】
2007506205.tif 000053
【図２５】
2007506205.tif 000054
【図２６Ａ】
2007506205.tif 000055
【図２６Ｂ】
2007506205.tif 000056
【図２６Ｃ】
2007506205.tif 000057
【図２６Ｄ】
2007506205.tif 000058
【図２６Ｅ】
2007506205.tif 000059
【図２７】
2007506205.tif 000060
【図２８】
2007506205.tif 000061
【図２９】
2007506205.tif 000062
【図３０】
2007506205.tif 000063
【図３１】
2007506205.tif 000064
【図３２】
2007506205.tif 000065
【図３３】
2007506205.tif 000066
【図３４】
2007506205.tif 000067
【図３５】
2007506205.tif 000068
【図３６Ａ】
2007506205.tif 000069
【図３６Ｂ】
2007506205.tif 000070
【図３７Ａ】
2007506205.tif 000071
【図３７Ｂ】
2007506205.tif 000072
【図３７Ｃ】
2007506205.tif 000073
【図３７Ｄ】
2007506205.tif 000074
【図３８Ａ】
2007506205.tif 000075
【図３８Ｂ】
2007506205.tif 000076
【図３９】
2007506205.tif 000077
【図４０】
2007506205.tif 000078
【図４１】
2007506205.tif 000079
【図４２】
2007506205.tif 000080
【図４３】
2007506205.tif 000081
【図４４】
2007506205.tif 000082
【図４５】
2007506205.tif 000083
【図４６】
2007506205.tif 000084
【図４７】
2007506205.tif 000085
【図４８】
2007506205.tif 000086
【図４９】
2007506205.tif 000087
【図５０】
2007506205.tif 000088
【国際調査報告】
2007506205.tif 000089
2007506205.tif 000090