(57)【特許請求の範囲】
【請求項１】
２つの通信メディアへ相互接続された複数のデータ・ストレージ・デバイスを含むストレージ・シェルフ(1100)内で使用されるストレージ・シェルフ・ルータ (1018、1014、1500)の集積回路であって、
第１の通信メディア・ポート(1502)と、
第２の通信メディア・ポート(1504)とを備え、該第１および第２の通信メディア・ポートは、前記ストレージ・シェルフ・ルータが第１の通信方式の通信メディアからデータおよびコマンドを受け取り、該第１の通信方式の通信メディアにデータを送信するインタフェースを提供し、
１つ以上のプロセッサ(1503)と、
デバイス・リンク(1028、918)を介して前記複数のデータ・ストレージ・デバイスへデータおよびコマンドを送信する複数のデバイス・リンク・ポート(1512-1518)とを備え、該複数のデバイス・リンク・ポートのそれぞれは、ポートレイヤ（1722）を介して第２の通信方式の前記複数のデータ・ストレージ・デバイスとのインタフェースを提供し、
前記第１および第２の通信メディア・ポートからそれぞれ受け取られたメッセージおよびコマンドを前記１つ以上のプロセッサへルーティングするルーティングロジック(1506, 1508、1708)を備え、
前記ルーティングロジックは、前記第１および第２の通信メディア・ポートから受け取られたメッセージが、当該ストレージ・シェルフ・ルータ集積回路向けであるか、当該ストレージ・シェルフ・ルータ集積回路と相互通信する他のストレージ・シェルフ・ルータ集積回路（2403-2405）向けであるか、を少なくとも決定するロジック(1506)を含み、当該ストレージ・シェルフ・ルータ集積回路向けと決定された前記メッセージに関連するデータをグローバル共有メモリスイッチ（1510、1718）へ書き込むよう構成されており、
前記複数のデータ・ストレージ・デバイスは、前記ポートレイヤを介して前記グローバル共有メモリスイッチ内のデータにアクセスするよう構成されている、
ストレージ・シェルフ・ルータ集積回路。
【請求項２】
前記第１および第２の通信メディア・ポートのそれぞれが先入れ先出しバッファを備え、前記通信メディア・ポートによって受け取られたコマンドおよびデータが前記先入れ先出しバッファへ書き込まれ、前記通信メディア・ポートによって受け取られたコマンドおよびデータが前記ルーティングロジックによって前記先入れ先出しバッファからアクセスされる、請求項１に記載のストレージ・シェルフ・ルータ集積回路。
【請求項３】
前記第１および第２の通信メディア・ポートの一つがコマンドまたはデータの後の部分を前記先入れ先出しバッファへ書き込んでいる間に、前記ルーティングロジックが前記先入れ先出しバッファからコマンドまたはデータの始めの部分にアクセスする、請求項１に記載のストレージ・シェルフ・ルータ集積回路。
【請求項４】
前記ルーティングロジックが前記第１および代２の通信メディア・ポートの一つによって受け取られたコマンドおよびデータを前記先入れ先出しバッファからアクセスし、該コマンドをストレージ・シェルフ・ルータ集積回路へ方向づけ、該ストレージ・シェルフ・ルータ集積回路が該コマンドを共有メモリへ書き込み、１つ以上の前記プロセッサが該共有メモリからコマンドをアクセスする、請求項１に記載のストレージ・シェルフ・ルータ集積回路。
【請求項５】
前記ストレージ・シェルフ・ルータ集積回路が一意の番号を割り当てられ、前記第１の通信メディア・ポートおよび第１の通信メディアを介して第１のエンティティへリンクされ、前記第２の通信メディア・ポートおよび第２の通信メディアを介して第２のエンティティへリンクされ、
前記第１のエンティティが、ストレージ・シェルフの外部にあるリモートデバイス、および割り当てられた一意の番号よりも小さい一意の番号を有するストレージ・シェルフ・ルータ集積回路うちの１つであり、
前記第２のエンティティが、前記ストレージ・シェルフの外部にあるリモートデバイス、および前記割り当てられた一意の番号よりも大きい一意の番号を有する前記ストレージ・シェルフ・ルータ集積回路の１つである、
請求項１に記載のストレージ・シェルフ・ルータ集積回路。
【請求項６】
通信メディアへ相互接続された複数のデータ・ストレージ・デバイス(1108)を含むストレージ・シェルフ(1100)であって、
請求項１に記載の第１および第２のストレージ・シェルフ・ルータ集積回路(1014、1018)とを有し、
前記ストレージ・シェルフは、複数のパス・コントローラ・カード(図11の1110)を有し、前記パス・コントローラ・カードのそれぞれが、
前記第１および第２のストレージ・シェルフ・ルータ集積回路のうちの一つの集積回路の前記デバイス・リンク・ポート(1512-1518)から前記デバイス・リンクを介して送信されたデータおよびコマンドを受け取り、前記デバイス・リンクまたは前記デバイス・リンク・ポート(1512-1518)が故障したときは、前記第１および第２のストレージ・シェルフ・ルータ集積回路のもう一つの集積回路の前記デバイス・リンク・ポート(1512-1518)の１つまたは複数から送信されるデータおよびコマンドを受け取り、受け取られた前記データおよびコマンドを前記データ・ストレージ・デバイスへ送信するよう構成されている、
ストレージ・シェルフ。
【請求項７】
前記ストレージ・シェルフが第１および第２の通信メディアに相互接続されており、複数の前記ストレージ・シェルフ・ルータ集積回路が第１の相互接続で相互に接続され、該第１の相互接続において、
前記第１のストレージ・シェルフ・ルータ集積回路（2402）は、該集積回路の前記第１通信メディア・ポート（2412）を介して前記第１の通信メディアに接続され、該第１のストレージ・シェルフ・ルータ集積回路の前記第２通信メディア・ポート（2414）、前記第２のストレージ・シェルフ・ルータ集積回路（2405）の前記第１の通信メディア・ポート（ブロック2405のX）、および内部通信メディア（2416、2403、1418、2404、2420）を介して前記第２のストレージ・シェルフ・ルータ集積回路に接続されている、
請求項６に記載のストレージ・シェルフ。
【請求項８】
複数の前記ストレージ・シェルフ・ルータ集積回路が第２の相互接続で接続され、該第２の相互接続において、
前記第２のストレージ・シェルフ・ルータ集積回路（2405）は、該集積回路の前記第２の通信メディア・ポート（ブロック2405のY）を介して前記第２の通信メディアに接続され、該第２のストレージ・シェルフ・ルータ集積回路の前記第１の通信メディア・ポート（ブロック2405のX）、前記第１のストレージ・シェルフ・ルータ集積回路（2402）の第２の通信メディア・ポート（2414）、および内部通信メディア（2416、2403、1418、2404、2420）を介して前記第１のストレージ・シェルフ・ルータ集積回路に接続されている、
請求項７に記載のストレージ・シェルフ。
【請求項９】
請求項１記載の構造を有するローカルのストレージ・シェルフ・ルータ集積回路（2402）に含まれるルーティング・ロジック・コンポーネント(1506、1508)であって、該ローカルのストレージ・シェルフ・ルータ集積回路は、コマンドおよびエラー処理コンポーネント(1503)、およびポートレイヤ(1722)を備え、前記ルーティング・ロジック・コンポーネントは、
前記第１および第２の通信メディア・ポートから受け取られたメッセージが、前記ローカルのストレージ・シェルフ・ルータ集積回路へ方向づけられているのか、該ローカルのストレージ・シェルフ・ルータ集積回路と相互通信するリモートのストレージ・シェルフ・ルータ集積回路（2403-2405）へ方向づけられているのか、または前記ストレージ・シェルフ(2506)の外部にあるリモートエンティティ(2508)へ方向づけられているのかを決定するロジック(1506)と、
前記メッセージが前記リモートのストレージ・シェルフ・ルータ集積回路へ方向づけられていると決定されたとき、前記メッセージを前記リモートのストレージ・シェルフ・ルータ集積回路へ転送するため、前記第１および第２の通信メディア・ポートの１つから受け取られた前記メッセージを前記第１および第２の通信メディア・ポートの１つへルーティングし、前記メッセージがストレージ・シェルフ(2506)の外部にあるリモートエンティティ(2508)へ方向づけられていると前記決定するロジックが決定したとき、前記ストレージ・シェルフの外部にある前記リモートエンティティへメッセージを転送するため、前記第１および第２の通信メディア・ポートの１つから受け取られたメッセージを前記第１および第２の通信メディア・ポートの１つへルーティングし、メッセージが前記ローカルのストレージ・シェルフ・ルータ集積回路へ方向づけられていると前記決定するロジックが決定したとき、前記第１および第２の通信メディア・ポートの１つから受け取られたメッセージを、前記コマンドおよびエラー処理コンポーネントの１つまたは前記ポートレイヤへルーティングする、ルーティングロジック（1506および1508）と
を備えるルーティング・ロジック・コンポーネント。
【請求項１０】
前記ストレージ・シェルフ・ルータはルーティングテーブルを備え、該ルーティングテーブルは、前記ポートレイヤを介して前記ストレージ・シェルフ・ルータへ相互接続された複数のデータ・ストレージ・デバイスの各々について、該データ・ストレージ・デバイスに関連する第１の通信アドレス、前記データ・ストレージ・デバイスに関連する第２の通信アドレス、および前記データ・ストレージ・デバイスによってサポートされるデバイスアドレスを含んでおり、
前記ストレージ・シェルフ・ルータは、一意の番号を割り当てられ、前記第１の通信メディア・ポートを介して第１のエンティティへリンクされ、前記第２の通信メディア・ポートを介して第２のエンティティへリンクされ、
前記第１のエンティティが、前記ストレージ・シェルフの外部にあるリモートデバイス、および割り当てられた一意の番号よりも小さい一意の番号を有するストレージ・シェルフ・ルータのうちの１つであり、
前記第２のエンティティが、前記ストレージ・シェルフの外部にあるリモートデバイス、および割り当てられた一意の番号よりも大きい一意の番号を有するストレージ・シェルフ・ルータのうちの１つである、
請求項９に記載のルーティング・ロジック・コンポーネント。
【請求項１１】
前記第１の通信メディア・ポートを介して受け取られたコマンドメッセージにアクセスしたとき、
前記コマンドメッセージ内の行先アドレスが前記ルーティングテーブル内の第１通信アドレスとマッチする場合、前記コマンドおよびエラー処理コンポーネントへコマンドメッセージをルーティングし、
前記コマンドメッセージ内の行先アドレスが前記ルーティングテーブル内の第１通信アドレスとマッチせず、前記第２のエンティティがストレージ・シェルフの外部にあるリモートデバイスではない場合、前記第２のポートへコマンドメッセージをルーティングし、
前記コマンドメッセージの行先アドレスが前記ルーティングテーブル内の第１通信アドレスとマッチせず、前記第２のエンティティがストレージ・シェルフの外部にあるリモートデバイスである場合、前記第１の通信メディア・ポートへコマンドメッセージをルーティングし、
前記コマンドメッセージがエラー処理を必要とすることを決定したとき、前記コマンドおよびエラー処理コンポーネントへ前記コマンドメッセージをルーティングするよう構成された、
請求項１０に記載のルーティング・ロジック・コンポーネント。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の個々の大容量ストレージデバイス（mass storage device）から構成されるディスクアレイおよび他の大容量ストレージデバイスに関し、特に、ストレージ・シェルフ・ルータの集積回路実施形態およびパス・コントローラ・カードに関する。このパス・コントローラ・カードは、１つ以上の他のストレージ・シェルフ・ルータと一緒に使用され、ストレージ・シェルフ・ルータおよびパス・コントローラ・カードが高可用性データストレージシステムの基礎として働くことを可能にする高冗長性アーキテクチャを使用して、高帯域通信メディアとストレージ・シェルフ内の個々の大容量ストレージデバイスとの間でデータをルーティングし、高帯域通信メディアから受け取られたデータストレージコマンドを処理する。
【背景技術】
【０００２】
（関連出願への相互参照）
この一部継続出願は、２００３年１月１３日に出願した現在係属中の特許出願第１０／３４１，８３５号の利益を主張する。
【０００３】
（背景技術）
ファイバチャネル（Fibre Channel、ＦＣ）は、コンピュータおよび周辺装置の複数の異なった組み合わせを相互接続するデータ通信ネットワークのアーキテクチャおよびプロトコルである。ＦＣは、小型コンピュータシステムインタフェース（Small Computer System Interface、ＳＣＳＩ）プロトコルを含む多様な上位レベルプロトコルをサポートする。コンピュータまたは周辺装置は、ＦＣポートおよび銅線または光ファイバを介してネットワークへリンクされる。ＦＣポートはトランシーバおよびインタフェースコントローラを含み、ＦＣポートを含むコンピュータ周辺装置は「ホスト」と呼ばれる。ＦＣポートは、ローカルデータバス、たとえば周辺コンピュータインタフェース（Peripheral Computer Interface、ＰＣＩ）バスを介してホストとデータを交換する。インタフェースコントローラは、ファイバチャネルとＦＣポートが存在するコンピュータまたは周辺装置との間で低レベルのプロトコル交換を実行する。
【０００４】
コンピュータネットワークでリモートデータにアクセスする一般的なパラダイムは、クライアント／サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータはサーバコンピュータへデータを読み出すか書き込む要求を送る。サーバコンピュータは、クライアントコンピュータがデータを読み出すか書き込む認可および許可を有するかどうかをチェックし、要求された読み出しまたは書き込み動作を特定の大容量ストレージデバイスへマップし、書き込み動作の場合には、クライアントコンピュータから大容量ストレージデバイスへ、読み出し動作の場合には、大容量ストレージデバイスからクライアントへ、データを転送する仲介者として働くことによって、要求を処理する。
【０００５】
一般に、現在および過去に利用可能であった通信ネットワークアーキテクチャにおいて、サーバコンピュータはローカルエリアネットワーク（Local Aria Network、ＬＡＮ）を介してクライアントコンピュータと通信し、サーバコンピュータはローカルバス、たとえばＳＣＳＩバスを介して複数の大容量ストレージデバイスと通信する。そのようなシステムにおいて、サーバは、読み出しまたは書き込み動作の結果として転送されたデータを記憶および転送するように要求される。なぜなら、サーバは、２つの異なる通信メディアの間のブリッジを表すからである。ＦＣの出現と共に、クライアントコンピュータ、サーバコンピュータ、および大容量ストレージデバイスは、全て単一の通信メディアによって対称的に相互接続されてよい。従来のクライアント／サーバアーキテクチャは、前述したＬＡＮおよびＳＣＳＩネットワークで使用される同じタイプのクライアント／サーバプロトコルを使用して、ＦＣへ普通にポートされる。
【０００６】
高容量ディスクドライブを含むＳＣＳＩバス互換大容量ストレージデバイスは、広い範囲で入手することができ、特に中型および大型コンピュータシステムで広く使用されている。多くのＦＣベースシステムはＦＣ互換ディスクドライブを使用し、各々のディスクドライブは、ＦＣ応答側として機能するために必要な１つ以上のＦＣポートおよび論理（logic）を含んでいる。パーソナルコンピュータ（ＰＣ）を含む小型システムでは、インテグレーテッドドライブエレクトロニクス（Integrated Drive Electronics、ＩＤＥ）またはアドバンスドテクノロジアタッチメント（Advanced Technology Attachment、ＡＴＡ）ディスクドライブと呼ばれる異なったファミリーのディスクドライブが広く使用される。シリアルＡＴＡ（Serial ATA、ＳＡＴＡ）ディスクは、一般的に、業界標準アーキテクチャ（Industry Standard Architecture、ＩＳＡ）バスを介してシステムと相互接続する。
【０００７】
本発明は、ＦＣ、ＳＣＳＩ、およびＩＤＥ／ＡＴＡテクノロジに関連する。各々は、以下で３つの別々のサブセクションで順番に説明される。これらテクノロジのいずれか、または全てに精通する者は、このセクションの、ＦＣベースディスクアレイを説明している最後のサブセクション、およびそのサブセクションの直後の、発明の要約のセクションへ進んでよい。
【０００８】
ファイバチャネル
ファイバチャネル（「ＦＣ」）は、下記の表１でリストされる標準文書を含む複数のＡＮＳＩ標準文書で定義および説明されている。
【表１】
0004690202.tif 000002
【０００９】
表１でリストされた文書、およびファイバチャネルに関する追加情報は、次のアドレス、即ち、“http://www.t11.org/index.htm”および“http://www.Fibrechannel.com”を有するワールドワイドウェブページで見ることができる。
【００１０】
ＦＣの以下の説明は、本発明の解説を容易にするため、これらの文書に含まれる情報の幾つかを紹介および要約したものである。もし以下の説明で紹介したトピックの詳細な解説が望まれるのであれば、前述した文書が参考となるであろう。
【００１１】
ＦＣは、１つ以上の通信メディアによって相互接続されたＦＣノード、一般的にはコンピュータ、ワークステーション、周辺装置、および周辺装置のアレイまたは集合の間のデータ通信アーキテクチャおよびプロトコルである。通信メディアは、シールデッドツイステッドペア接続、同軸ケーブル、および光ファイバを含む。ＦＣノードは、少なくとも１つのＦＣポートおよびＦＣリンクを介して、通信メディアへ接続される。ＦＣポートはＦＣホストアダプタまたはＦＣコントローラであって、これらはＦＣノードの処理コンポーネントとレジスタおよびメモリインタフェースを共有し、ハードウェアおよびファームウェアにおいて、ＦＣプロトコルの下位レベルを実現する。ＦＣノードは、一般的に、共有メモリ内の共有データ構造およびＦＣポート内の制御レジスタを使用して、ＦＣポートとデータおよび制御情報を交換する。ＦＣポートは、電線または光ストランドを含むリンクを介して通信メディアへ結合された直列の送信機および受信機コンポーネントを含む。
【００１２】
以下の説明において、「ＦＣ」は、一般的なファイバチャネルアーキテクチャおよびプロトコルを指す形容詞として使用され、またファイバチャネル通信メディアの例示物を指す名詞として使用される。したがって、ＦＣ（アーキテクチャおよびプロトコル）ポートは、ＦＣ（通信メディア）からＦＣ（アーキテクチャおよびプロトコル）シーケンスを受け取ることができる。
【００１３】
ＦＣアーキテクチャおよびプロトコルは、図１Ａ〜図１Ｃで示される３つの異なったタイプの相互接続トポロジをサポートする。図１Ａは、３つの相互接続トポロジの中で最も単純な「ポイントツーポイントトポロジ」と呼ばれるものを示す。図１Ａで示されるポイントツーポイントトポロジにおいて、前記第１のノード１０１は、前記第１のノード１０１のＦＣポート１０４の送信機１０３を第２のノード１０２のＦＣポート１０６の受信機１０５へ直接結合し、第２のノード１０２のＦＣポート１０６の送信機１０７を前記第１のノード１０１のＦＣポート１０４の受信機１０８へ直接接続することによって、第２のノード１０２へ直接接続される。ポイントツーポイントトポロジで使用されるポート１０４および１０６は、Ｎ＿ポートと呼ばれる。
【００１４】
図１Ｂは、「ＦＣアービトレーテッドループトポロジ」と呼ばれる幾分複雑なトポロジを示す。図１Ｂは、アービトレーテッドループの中で相互接続された４つのノード１１０〜１１３を示す。電気または光バイナリデータから構成される信号は、１つのノードからループを円形に回って次のノードへ転送される。１つのノードの送信機、たとえば、ノード１１１を関連づけられた送信機１１４は、ループ内の次のノードの受信機、即ち、送信機１１４の場合には、ノード１１２を関連づけられた受信機１１５へ直接接続される。アービトレーテッドループの中でＦＣノードを相互接続するためには、ＦＣポートの２つのタイプを使用することができる。アービトレーテッドループで使用される最も普通のタイプは、「ＮＬ＿ポート」と呼ばれる。以下で説明するように、ＦＣファブリックトポロジを有するＦＣアービトレーテッドループを相互接続するためには、「ＦＬ＿ポート」と呼ばれる特殊タイプのポートを使用することができる。ただ１つのＦＬ＿ポートが、アービトレーテッドループトポロジへアクティブに組み込まれてよい。ＦＣアービトレーテッドループトポロジは、１２７個までのアクティブなＦＣポートを含み、追加の非関与ＦＣポートを含むことができる。
【００１５】
ＦＣアービトレーテッドループトポロジにおいて、複数のノードは、アービトレーテッドループの制御を得るため競争または調停する。複数のノードが制御を得るため競争している場合、一般的に、最低ポートアドレスを有するノードが制御を取得する。全てのノードが最終的に合理的な時間量の制御を受け取ることを保証するため、公平性アルゴリズムがノードによって実現されてよい。ノードがループの制御を取得したとき、ノードはアービトレーテッドループ内の他のノードへのチャネルを開くことができる。半二重チャネルにおいて、１つのノードはデータを送信し、他のノードはデータを受け取る。全二重チャネルにおいて、データが第２のノードによって送信され、前記第１のノードによって受信される同じ時間に、データが前記第１のノードによって送信され、第２のノードによって受信されてよい。たとえば、図１Ｂのアービトレーテッドループにおいて、もしノード１１１がノード１１３との全二重チャネルを開くならば、そのチャネルを介してノード１１１からノード１１３へ送信されるデータはノード１１２のＮＬ＿ポート１１６を通過し、ノード１１３によってノード１１１へ送信されるデータはノード１１０のＮＬ＿ポート１１７を通過する。
【００１６】
図１Ｃは、「ＦＣファブリック」と呼ばれる最も一般的で最も複雑なＦＣトポロジを示す。ＦＣファブリックは、図１Ｃにおいて、４つのＦＣノード１１９〜１２２が接続された不均整形状中央客体１１８によって表される。ＦＣノード１１９〜１２２のＮ＿ポート１２３〜１２６は、ファブリック１１８の中のＦ＿ポート１２７〜１３０へ接続される。ファブリックは、機能が電話システムと類似した切り換えまたはクロスポイントスイッチトポロジである。データは、ファブリックによって、「ファブリック要素」と呼ばれるスイッチまたは交換機を介してＦ＿ポートの間をルーティングされる。ファブリックの中の１つのＦ＿ポートと他のＦ＿ポートとの間に、多くの可能なルートが存在してよい。Ｆ＿ポートを関連づけられたファブリックの中で、データのルーティングおよびノードのアドレシングは、ＦＣノードまたはＮ＿ポートではなくＦＣファブリックによって処理される。
【００１７】
ＦＣはシリアル通信メディアである。データは非常に高い転送レートで一時に１ビットが転送される。図２は、ＦＣネットワークを通る転送について、時間的にデータが組織される非常に簡単な階層を示す。最低の概念レベルにおいて、データはデータビットのストリーム２００として考えられる。ＦＣネットワークによってサポートされるデータの最小単位、またはデータビットグループは、ＦＣポートによって８ビット文字としてデコードされる１０ビット文字である。ＦＣプリミティブは、１０ビットの文字またはバイトから構成される。或るＦＣプリミティブは、ＦＣポート間で交換される制御情報を搬送するように使用される。データ組織の次のレベル、即ち、ＦＣプロトコルに関する基本レベルはフレームである。７つのフレーム２０２〜２０８が図２で示される。フレームは、デリミタ、ヘッダおよび任意的ヘッダ、並びに０〜２０４８個のデータバイトを含む３６〜２，１４８個のバイトで構成される。たとえば、前記第１のＦＣフレームは、データビットストリーム２００の、水平括弧２０１によって包含されるデータビットに対応する。ＦＣプロトコルは、シーケンスと呼ばれる次に高い組織レベルを仕様に定める。前記第１のシーケンス２１０および第２のシーケンス２１２の一部分が図２で示される。前記第１のシーケンス２１０は、フレーム１〜４  ２０２〜２０５から構成される。第２のシーケンス２１２は、フレーム５〜７  ２０６〜２０８および図示されない追加フレームから構成される。ＦＣプロトコルは、交換と呼ばれる第３の組織レベルを仕様に定める。交換２１４の一部分が図２で示される。この交換２１４は、少なくとも図２で示される前記第１のシーケンス２１０および第２のシーケンス２１２から構成される。代替的に、この交換は、フレーム１〜７  ２０２〜２０８、および第２のシーケンス２１２並びに交換２１４を構成する追加シーケンスに含まれる追加フレームから構成されると見ることができる。
【００１８】
ＦＣは全二重データ伝送メディアである。フレームおよびシーケンスは、発信側またはイニシエータと応答側またはターゲットとの間で、双方向へ同時に渡される。交換は、単一のＩ／Ｏトランザクション、たとえば、読み出しトランザクションまたは書き込みトランザクションの間に、発信側と応答側との間で交換される全てのシーケンス、およびシーケンス内のフレームを含む。ＦＣプロトコルは、任意数の高レベルデータ交換プロトコルに従ってデータを転送するように設計される。これらのプロトコルには、インターネットプロトコル（「ＩＰ」）、スモールコンピュータシステムスインタフェース（「ＳＣＳＩ」）プロトコル、高パフォーマンスパラレルインタフェース（「ＨＩＰＰＩ」）、およびインテリジェントペリフェラルインタフェース（「ＩＰＩ」）が含まれる。ＳＣＳＩパスアーキテクチャは次のサブセクションで説明され、このサブセクションおよび残りのサブセクションの後続の説明の多くは、ＦＣプロトコルに埋め込まれたＳＣＳＩプロトコルに焦点を当てている。ファイバチャネルへのＳＣＳＩプロトコルの標準適合化は、今後、この文書の中では「ＦＣＰ」と呼ばれる。したがって、ＦＣは、ＳＣＳＩバスおよび他の周辺相互接続バスの特徴であるマスタスレイブ型通信パラダイム、および、たとえばインターネットを実現するために使用されるような比較的に開放および非構造化された通信プロトコルをサポートすることができる。イニシエータおよびターゲットのＳＣＳＩバスアーキテクチャコンセプトはＦＣＰへ継承され、前述したようにＳＣＳＩコマンドおよびデータ交換をカプセル化して、ＦＣを介してトランスポートするように設計されている。
【００１９】
図３は、標準ＦＣフレームの内容を示す。ＦＣフレーム３０２は、５つの高レベルセクション３０４、３０６、３０８、３１０、および３１２を含む。フレーム開始デリミタ３０４と呼ばれる前記第１の高レベルセクションは、フレームの始まりをマークする４つのバイトを含む。フレームヘッダ３０６と呼ばれる次の高レベルセクションは、アドレス情報、シーケンス情報、交換情報、および様々な制御フラグを含む２４バイトから成る。フレームヘッダ３１４の更に詳細な図が、図３のＦＣフレーム３０２から拡張されて示される。行先識別子（Destination Identifier、「Ｄ＿ＩＤ」）または行先ＩＤ  ３１６は、フレームの行先ＦＣポートを示す２４ビットＦＣアドレスである。送信元識別子（「Ｓ＿ＩＤ」）または送信元＿ＩＤ  ３１８は、フレームを送信したＦＣポートを示す２４ビットアドレスである。発信側ＩＤまたはＯＸ＿ＩＤ  ３２０および応答側ＩＤ  ３２２またはＲＸ＿ＩＤは、一緒になって３２ビットの交換ＩＤを構成する。交換ＩＤは、発信側またはイニシエータおよび応答側またはターゲットのＦＣポートに関して、フレームが所属する交換を識別する。シーケンスＩＤまたはＳＥＱ＿ＩＤ  ３２４は、フレームが所属するシーケンスを識別する。
【００２０】
データペイロードと呼ばれる次の高レベルセクション３０８は、ＦＣフレームの中にパッケージされた実際のデータを含む。データペイロードは、より高いレベルのプロトコル、たとえばＩＰおよびＳＣＳＩに従って転送されるデータおよびカプセル化プロトコル情報を含む。図３は、ＳＣＳＩプロトコルに従ったデータ転送に使用されるデータペイロードレイアウト３２６〜３２９の４つの基本タイプを示す。これらのフォーマットのＦＣＰ＿ＣＭＮＤと呼ばれる最初のフォーマット３２６は、イニシエータからターゲットへＳＣＳＩコマンドを送るために使用される。ＦＣＰ＿ＬＵＮフィールド３３０は８バイトアドレスを含み、このアドレスは、或る実施形態では、特定のＳＣＳＩバスアダプタ、そのＳＣＳＩバスアダプタを関連づけられたターゲットデバイス、および指定されたターゲットＳＣＳＩデバイスを関連づけられたロジカルデバイスに対応する論理装置番号（「ＬＵＮ」）を指定する。これらは一緒になってＦＣＰ＿ＣＭＮＤのターゲットを表す。他の実施形態では、ＦＣＰ＿ＬＵＮフィールド３３０はインデックスまたは参照番号を含み、この参照番号は、ＳＣＳＩバスアダプタ、そのＳＣＳＩバスアダプタを関連づけられたターゲットデバイス、および指定されたターゲットＳＣＳＩデバイスを関連づけられたロジカルデバイスに対応するＬＵＮを決定するため、ターゲットＦＣホストアダプタによって使用される。実際のＳＣＳＩコマンド、たとえば、ＳＣＳＩ読み出しまたは書き込みＩ／Ｏコマンドは、１６バイトフィールドのＦＣＰ＿ＣＤＢ３３２の中に含まれる。
【００２１】
図３で示されるデータペイロードフォーマットの第２のタイプ３２７は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹレイアウトと呼ばれる。このデータペイロードフォーマットは、ターゲットによるデータ受信または送信の開始が準備されたことをターゲットからイニシエータへ表示するために使用される。図３で示されるデータペイロードフォーマットの第３のタイプ３２８は、ＦＣＰ＿ＤＡＴＡフォーマットである。ＦＣＰ＿ＤＡＴＡフォーマットは、ＳＣＳＩ  Ｉ／Ｏトランザクションの実行の結果として、ＳＣＳＩデータストレージデバイスから読み出されるか書き込まれる実際のデータを転送するために使用される。図３で示される最後のデータペイロードフォーマット３２９は、ＦＣＰ＿ＲＳＰレイアウトとよばれる。このレイアウトは、Ｉ／Ｏトランザクションが完了したとき、ターゲットからイニシエータへＳＣＳＩステータスバイト３３４および他のＦＣＰステータス情報を戻すために使用される。
【００２２】
ＳＣＳＩバスアーキテクチャ
コンピュータバスは一組の電気信号線であって、これらの線を介して、コンピュータコマンドおよびデータが、コンピュータシステムの処理、記憶、および入力／出力（「Ｉ／Ｏ」）コンポーネントの間を伝送される。ＳＣＳＩ  Ｉ／Ｏバスは、最も普及および一般的なコンピュータバスであって、大容量ストレージデバイス、たとえばハードディスクおよびＣＤ−ＲＯＭドライブを、コンピュータシステムのメモリおよび処理コンポーネントへ相互接続する。ＳＣＳＩバスアーキテクチャは、３つの大きな標準で定義される。即ち、ＳＣＳＩ−１、ＳＣＳＩ−２、およびＳＣＳＩ−３である。ＳＣＳＩ−１およびＳＣＳＩ−２標準は、それぞれ米国国家規格協会（American National Standard Institute、ＡＮＳＩ）標準文書「Ｘ３．１３１−１９８６」および「Ｘ３．１３１−１９９４」で公開されている。ＳＣＳＩ−３標準は、現在ＡＮＳＩ委員会によって開発されている。ＳＣＳＩバスアーキテクチャの概要は、非特許文献１によって提供される。
【００２３】
図４は、ＳＣＳＩバスを含む通常のパーソナルコンピュータ（「ＰＣ」）アーキテクチャのブロック図である。ＰＣ４００は、高速ＣＰＵバス４０６によってシステムコントローラ４０４へリンクされた中央処理装置またはプロセッサ（「ＣＰＵ」）４０２を含む。システムコントローラは、メモリバス４１０を介してシステムメモリコンポーネント４０８へリンクされる。システムコントローラ４０４は、更に、ペリフェラルコンポーネントインターコネクト（「ＰＣＩ」）バス４１２を介して様々な周辺装置へリンクされる。バス４１２は、低速企業標準アーキテクチャ（「ＩＳＡ」）バス４１４およびＳＣＳＩバス４１６に相互接続される。ＰＣＩバスのアーキテクチャは、非特許文献２で説明されている。相互接続されたＣＰＵバス４０６、メモリバス４１０、ＰＣＩバス４１２、およびＩＳＡバス４１４によって、ＣＰＵは、コンピュータシステムに含まれる様々な処理およびメモリコンポーネント並びにＩ／Ｏデバイスと、データおよびコマンドを交換することができる。一般的に、超高速および高帯域Ｉ／Ｏデバイス、たとえば、ビデオディスプレイデバイス４１８は、ＰＣＩバスへ直接接続される。低速Ｉ／Ｏデバイス４２０、たとえばキーボード４２０およびポインティングデバイス（図示されず）は、ＩＳＡバス４１４へ直接接続される。ＩＳＡバスは、バスブリッジコンポーネント４２２を介してＰＣＩバスと相互接続される。大容量ストレージデバイス、たとえば、ハードディスク、フロッピーディスクドライブ、ＣＤ−ＲＯＭドライブ、およびテープドライブ４２４〜４２６は、ＳＣＳＩバス４１６へ接続される。ＳＣＳＩバスは、ＳＣＳＩバスアダプタ４３０を介してＰＣＩバス４１２と相互接続される。ＳＣＳＩバスアダプタ４３０は、プロセッサコンポーネント、たとえば、５３Ｃ８ｘｘ  ＳＣＳＩプロセッサのＳｙｍｂｉｏｓファミリーから選択されたプロセッサを含み、標準ＰＣＩバスプロトコルを使用してＰＣＩバス４１２へインタフェースする。ＳＣＳＩバスアダプタ４３０は、以下で部分的に説明するＳＣＳＩバスプロトコルを使用してＳＣＳＩバス４１６へインタフェースする。ＳＣＳＩバスアダプタ４３０は、ＳＣＳＩバスへ接続されて一般的に各々の大容量ストレージデバイス４２４〜４２６に埋め込まれているＳＣＳＩコントローラ（図示されず）またはＳＣＳＩデバイスと、コマンドおよびデータを交換する。ＳＣＳＩコントローラはハードウェア／ファームウェアコンポーネントである。このコンポーネントは、ＳＣＳＩバスを介してＳＣＳＩアダプタから受け取られたＳＣＳＩコマンドを解釈して応答し、ロジカルデバイスとインタフェースしてそれを制御することによってＳＣＳＩコマンドを実現する。ロジカルデバイスは、１つ以上のフィジカルデバイスに対応するか、１つ以上のフィジカルデバイスの一部分に対応する。フィジカルデバイスは、データストレージデバイス、たとえば、ディスク、テープ、およびＣＤ−ＲＯＭドライブを含む。
【００２４】
Ｉ／Ｏコマンドと呼ばれるコマンドの２つの重要なタイプは、ロジカルデバイスからデータを読み出し、ロジカルデバイスへデータを書き込むようにＳＣＳＩデバイスへ命令する。Ｉ／Ｏトランザクションは、コンピュータシステムの２つのコンポーネントの間のデータの交換であり、一般的に処理コンポーネント、たとえば、ＣＰＵ４０２によってイニシエートされる。データの交換は、部分的に、読み出しＩ／Ｏコマンドまたは書き込みＩ／Ｏコマンドによって実現される。したがって、Ｉ／Ｏトランザクションは、読み出しＩ／Ｏトランザクションおよび書き込みＩ／Ｏトランザクションを含む。
【００２５】
ＳＣＳＩバス４１６は、複数のデータビットを同時にトランスポートすることができるパラレルバスである。ＳＣＳＩバスによって同時にトランスポートされることのできるデータビットの数は、バス幅と呼ばれる。異なったタイプのＳＣＳＩバスは、８、１６、および３２ビットの幅を有する。１６および３２ビットＳＣＳＩバスは、ワイドＳＣＳＩバスと呼ばれる。
【００２６】
全てのコンピュータバスおよびプロセッサと同じように、ＳＣＳＩバスは、動作およびバス上のデータ転送の速度を決定するクロックによって制御される。ＳＣＳＩバスは多様なクロック速度を有する。ＳＣＳＩバスの幅と、ＳＣＳＩバスが動作するクロック速度との組み合わせは、ＳＣＳＩバスを介してトランスポートすることのできる１秒当たりのバイトの数、またはＳＣＳＩバスの帯域を決定する。ＳＣＳＩバスの異なったタイプは、１秒当たり２メガバイト（「Ｍバイト」）よりも小さいものから１秒当たり４０Ｍバイトまでの帯域を有し、将来、１秒当たり８０Ｍバイトおよび可能性として１秒当たり１６０Ｍバイトへの増加が計画されている。帯域が増加すれば、それに伴ってＳＣＳＩバスの物理的長さの制限が増加して得る。
【００２７】
図５はＳＣＳＩバスのトポロジを示す。コンピュータシステム５０２または他のハードウェアシステムは、１つ以上のＳＣＳＩバスアダプタ５０４および５０６を含むことができる。ＳＣＳＩバスアダプタ、ＳＣＳＩバスアダプタが制御するＳＣＳＩバス、およびＳＣＳＩバスへ取り付けられた周辺装置は、一緒になってドメインを構成する。図５のＳＣＳＩバスアダプタ５０４は第１のドメイン５０８を関連づけられ、ＳＣＳＩバスアダプタ５０６は第２のドメイン５１０を関連づけられる。最新のＳＣＳＩ−２バス実施形態では、１５の異なったＳＣＳＩデバイス５１３〜５１５および５１６〜５１７を、単一のＳＣＳＩバスへ取り付けることができる。図５において、ＳＣＳＩデバイス５１３〜５１５は、ＳＣＳＩバスアダプタ５０６によって制御されるＳＣＳＩバス５１８へ取り付けられ、ＳＣＳＩデバイス５１６〜５１７は、ＳＣＳＩバスアダプタ５０４によって制御されるＳＣＳＩバス５２０へ取り付けられる。各々のＳＣＳＩバスアダプタおよびＳＣＳＩデバイスは、ＳＣＳＩ識別番号またはＳＣＳＩ＿ＩＤを有する。ＳＣＳＩ＿ＩＤは、特定のＳＣＳＩバス内のデバイスまたはアダプタを一意に識別する。慣例によって、ＳＣＳＩバスアダプタはＳＣＳＩ＿ＩＤ  ７を有し、ＳＣＳＩバスへ取り付けられたＳＣＳＩデバイスは、０〜６および８〜１５のＳＣＳＩ＿ＩＤを有する。ＳＣＳＩデバイス、たとえばＳＣＳＩデバイス５１３は、複数のロジカルデバイスとインタフェースすることができ、各々のロジカルデバイスは１つ以上のフィジカルデバイスの一部分を含む。各々のロジカルデバイスは論理装置番号（「ＬＵＮ」）によって識別され、論理装置番号は、ロジカルデバイスを制御するＳＣＳＩデバイスに関してロジカルデバイスを一意に識別する。たとえば、ＳＣＳＩデバイス５１３は、それぞれＬＵＮ０、１、２を有するロジカルデバイス５２２〜５２４を制御する。ＳＣＳＩ用語に従えば、ＳＣＳＩバス上でＩ／Ｏコマンドをイニシエートするデバイスはイニシエータと呼ばれ、Ｉ／Ｏ動作を実行するようにＳＣＳＩデバイスへ命令するＩ／ＯコマンドをＳＣＳＩバス上で受け取るＳＣＳＩデバイスはターゲットと呼ばれる。
【００２８】
一般的に、ＳＣＳＩバスアダプタ、たとえばＳＣＳＩバスアダプタ５０４および５０６は、ターゲットデバイスへコマンドを送ることによってＩ／Ｏ動作をイニシエートする。ターゲットデバイス５１３〜５１５および５１６〜５１７は、ＳＣＳＩバスからＩ／Ｏコマンドを受け取る。次に、ターゲットデバイス５１３〜５１５および５１６〜５１７は、それらが制御する１つ以上のロジカルデバイスとインタフェースして、ロジカルデバイスからデータを読み出し、ＳＣＳＩバスを介してデータをイニシエータへ戻すか、ＳＣＳＩバスを介してイニシエータから受け取られたデータをロジカルデバイスへ書き込むことによって、コマンドを実現する。最後に、ターゲットデバイス５１３〜５１５および５１６〜５１７は、コマンドの実現の成功または失敗を示すステータスメッセージによって、ＳＣＳＩバスを介してイニシエータに応答する。
【００２９】
図６Ａ〜図６Ｃは、読み出しおよび書き込みＩ／Ｏ動作のイニシエーションおよび実現に関係するＳＣＳＩプロトコルを示す。読み出しおよび書き込みＩ／Ｏ動作は、ＳＣＳＩデバイスによって実行されるＩ／Ｏ動作の大部分を構成する。ＳＣＳＩバスによって相互接続された大容量ストレージデバイスシステムの動作の効率を最大にする努力は、最も普通には、読み出しおよび書き込みＩ／Ｏ動作が実行される効率を最大にすることに向けられる。したがって、以下の説明では、読み出しおよび書き込み動作に関連させて様々なハードウェアデバイスのアーキテクチャの特徴を説明する。
【００３０】
図６Ａは、ＳＣＳＩイニシエータ、最も普通にはＳＣＳＩバスアダプタによって、ＳＣＳＩターゲット、最も普通には１つ以上のロジカルデバイスを関連づけられたＳＣＳＩデバイスに埋め込まれたＳＣＳＩコントローラへ、読み出しまたは書き込みＩ／Ｏコマンドを送信することを示す。読み出しまたは書き込みＩ／Ｏコマンドの送信は、ＳＣＳＩ  Ｉ／Ｏ動作のコマンド段階と呼ばれる。図６Ａは、中央垂直線６０６によってイニシエータ６０２およびターゲット６０４へ分割される。イニシエータセクションおよびターゲットセクションの双方は、ＳＣＳＩバスの状態を記述する「状態」６０６および６０８と名付けられた欄、並びにイニシエータおよびターゲットを関連づけられたＳＣＳＩバスイベントを記述する「イベント」６１０および６１２と名付けられた欄を含む。Ｉ／Ｏコマンドの送信に関連したバス状態およびバスイベントは、図６Ａの上部から図６Ａの下部へ降下して時間順に配列される。図６Ｂ〜図６Ｃも、このフォーマットを守っている。
【００３１】
図６Ａで示されるように、イニシエータのＳＣＳＩバスアダプタからターゲットのＳＣＳＩデバイスへＩ／Ｏコマンドを送信することによって、ターゲットのＳＣＳＩデバイスによる読み出しまたは書き込みＩ／Ｏ動作がイニシエートされる。図４を参照すると、ＳＣＳＩバスアダプタ４３０は、Ｉ／Ｏトランザクションの一部分としてＩ／Ｏ動作をイニシエートする。一般的に、ＳＣＳＩバスアダプタ４３０は、読み出し動作または書き込み動作の実行をＳＣＳＩバスアダプタへ命令するＣＰＵ４０２から、ＰＣＩバス４１２、システムコントローラ４０４、およびＣＰＵバス４０６を介して、読み出しまたは書き込みコマンドを受け取る。読み出し動作において、ＣＰＵ４０２は、大容量ストレージデバイス４２４〜４２６からデータを読み出して、そのデータを、ＳＣＳＩバス４１６、ＰＣＩバス４１２、システムコントローラ４０４、およびメモリバス４１０を介してシステムメモリ４０８内のロケーションへ転送するように、ＳＣＳＩバスアダプタ４３０に命令する。書き込み動作において、ＣＰＵ４０２は、メモリバス４１０、システムコントローラ４０４、およびＰＣＩバス４１２を介してＳＣＳＩバスアダプタ４３０へデータを転送するようにシステムコントローラ４０４へ命令し、またデータが書き込まれる大容量ストレージデバイス４２４〜４２６へＳＣＳＩバス４１６を介してデータを送るようにＳＣＳＩバスアダプタ４３０へ命令する。
【００３２】
図６Ａはバス解放状態６１４のＳＣＳＩバスからスタートする。バス解放状態６１４は、ＳＣＳＩデバイス上で現在トランスポートされているコマンドまたはデータが存在しないことを示す。イニシエータまたはＳＣＳＩバスアダプタは、バスを調停状態６１６へ入れるためＳＣＳＩバスのＢＳＹ、Ｄ７、およびＳＥＬ信号線をアサートする。この状態において、イニシエータは、全てのデバイスへＳＣＳＩバス上でコマンドを伝送する意図を告知する。一時点では１つのデバイスだけがＳＣＳＩバスの動作を制御するので、調停が必要である。イニシエータがＳＣＳＩバスの制御を獲得したと仮定して、次にイニシエータは、ＳＣＳＩバスを選択状態６１８へ入れるため、ターゲットＳＣＳＩ＿ＩＤに対応するＡＴＮ信号線およびＤＸ信号線をアサートする。イニシエータまたはターゲットは、ＳＣＳＩバス状態変化、たとえば前述した調停状態６１６から選択状態６１８への状態変化を起こすため、特定の順序で様々なＳＣＳＩ信号線をアサートおよびドロップする。これらの順序は、非特許文献１およびＡＮＳＩ標準で見出され、したがって以下では詳細に説明しない。
【００３３】
ターゲットがイニシエータによって選択されたことをターゲットがセンスしたとき、ターゲットは、Ｉ／Ｏ動作のコマンド段階を完了するためＳＣＳＩバスの制御６２０を取る。次に、ターゲットは、メッセージアウト状態６２２へ入るためＳＣＳＩ信号線を制御する。メッセージアウト状態で起こる最初のイベントで、ターゲットはイニシエータから識別メッセージ６２３を受け取る。識別メッセージ６２３はＬＵＮフィールド６２４を含む。ＬＵＮフィールド６２４は、後続のコマンドメッセージがアドレスされるＬＵＮを識別する。識別メッセージ６２３は、更に、フラグ６２５を含む。フラグ６２５は、一般的に、識別メッセージ６２３は、更に、フラグ６２５を含む。フラグ６２５は、一般的に、後続するＩ／Ｏコマンドのターゲットによる実現の間、ターゲットがＳＣＳＩバスからの切り離しを許可されることをターゲットに示すようにセットされる。次に、ターゲットはキュータグメッセージ６２６を受け取る。キュータグメッセージ６２６は、後続するＩ／Ｏコマンドがどのようにキューにされるかをターゲットに示すと共に、キュータグ６２７をターゲットに提供する。キュータグはＩ／Ｏコマンドを識別するバイトである。したがって、ＳＣＳＩバスアダプタは、ＬＵＮ当たり２５６個の異なったＩ／Ｏコマンドを同時に管理することができる。イニシエータＳＣＳＩバスアダプタのＳＣＳＩ＿ＩＤ、ターゲットＳＣＳＩデバイスのＳＣＳＩ＿ＩＤ、ターゲットＬＵＮ、およびキュータグは、一緒になってＩ＿Ｔ＿Ｌ＿Ｑ連結参照番号を構成し、この参照番号は、ＳＣＳＩバス内で後続するＩ／Ｏコマンドに対応するＩ／Ｏ動作を一意に識別する。次に、ターゲットデバイスは、コマンド状態６２８へ入るためＳＣＳＩバス信号線を制御する。コマンド状態において、ターゲットは、イニシエータからＩ／Ｏコマンド６３０を要請および受信する。Ｉ／Ｏコマンド６３０は操作符号６３２を含む。操作符号６３２は、実行されるべき特定のコマンド、即ち、この場合には読み出しコマンドまたは書き込みコマンド、コマンドによって指定された読み出しまたは書き込み動作の開始点であるロジカルデバイスの論理ブロックを識別する論理ブロック番号６３６、およびコマンドの実行中に読み出されるか書き込まれるブロックの数を指定するデータ長６３８を含む。
【００３４】
ターゲットがＩ／Ｏコマンドを受信および処理したとき、ターゲットデバイスはメッセージイン状態６４０に入るためＳＣＳＩバス信号線を制御する。メッセージイン状態６４０において、ターゲットデバイスは、一般的に、イニシエータデバイスへ切り離しメッセージ６４２を送る。一般的に、ターゲットは、コマンドによって指定された読み出しまたは書き込み動作についてロジカルデバイスを準備するためロジカルデバイスとの対話を開始するので、ＳＣＳＩバスを切り離す。ターゲットはデータを受け取るためバッファを準備する必要がある可能性があり、またディスクドライブまたはＣＤ−ＲＯＭドライブの場合、ターゲットデバイスは、読み出しまたは書き込みコマンドの開始点として指定された適切なブロックの探索をロジカルデバイスに命令してもよい。切り離しによって、ターゲットデバイスは、ＳＣＳＩバスアダプタとターゲットデバイスとの間で追加のメッセージ、コマンド、またはデータをトランスポートするためＳＣＳＩバスを解放する。このようにして、ＳＣＳＩバス上で複数の異なったＩ／Ｏ動作を同時に多重化することができる。最後に、ターゲットデバイスは、ＳＣＳＩバスをバス解放状態６４４へ戻すためＢＳＹ信号線をドロップする。
【００３５】
次に、ターゲットデバイスは、読み出しまたは書き込み動作についてロジカルデバイスを準備する。ロジカルデバイスがデータの読み出しまたは書き込みを準備したとき、Ｉ／Ｏ動作のデータ段階が続く。図６Ｂは、ＳＣＳＩ  Ｉ／Ｏ動作のデータ段階を示す。ＳＣＳＩバスは、最初、バス解放状態６４６にある。読み出しＩ／Ｏコマンドに応答してデータを戻すか、書き込みＩ／Ｏコマンドに応答してデータを受け入れるかを、現在、準備したターゲットデバイスは、調停状態６４８に入るためＳＣＳＩバス信号線を制御する。ターゲットデバイスがＳＣＳＩバスの制御の調停に成功したと仮定すると、ターゲットデバイスは、再選択状態６５０に入るため、ＳＣＳＩバス信号線を制御する。再選択状態は、図６Ａで前に説明した選択状態と類似しているが、再選択状態で通信するＳＣＳＩバスアダプタを選択しているのがターゲットデバイスであり、選択状態でターゲットデバイスを選択するＳＣＳＩバスアダプタではないことが異なる。
【００３６】
一度、ターゲットデバイスがＳＣＳＩバスアダプタを選択すると、ターゲットデバイスは、ＳＣＳＩバスをメッセージイン状態６５２へ入れるため、ＳＣＳＩバス信号線を操作する。メッセージイン状態において、ターゲットデバイスは、ＳＣＳＩバスアダプタへ識別メッセージ６５４およびキュータグメッセージ６５６の双方を送る。これらのメッセージは、図６Ａで示されるように、Ｉ／Ｏコマンドがイニシエータからターゲットへ伝送される間、イニシエータによってターゲットデバイスへ送られた識別メッセージおよびキュータグメッセージと同じである。イニシエータはＩ＿Ｔ＿Ｌ＿Ｑ連結参照番号、即ち、イニシエータおよびターゲットデバイスのＳＣＳＩ＿ＩＤ、ターゲットＬＵＮ、およびキュータグメッセージに含まれるキュータグの組み合わせを使用してＩ／Ｏトランザクションを識別する。このＩ／Ｏトランザクションについて、読み出し動作の場合には、続いてデータがターゲットからイニシエータへ送られ、書き込み動作の場合は、続いてデータがイニシエータによって伝送される。したがって、Ｉ＿Ｔ＿Ｌ＿Ｑ連結参照番号は、未処理のＩ／ＯコマンドテーブルへのインデックスとしてＳＣＳＩバスアダプタによって使用されるＩ／Ｏ動作ハンドルであり、ＳＣＳＩバスアダプタは前記ハンドルを使用して、読み出しの場合にはターゲットデバイスからデータを受け取り、書き込みの場合にはターゲットデバイスへデータを送信する適切なバッファを位置決めする。
【００３７】
識別メッセージおよびキュータグメッセージを送った後、ターゲットデバイスは、データ状態６５８へ遷移するためＳＣＳＩ信号線を制御する。読み出しＩ／Ｏ動作の場合、ＳＣＳＩバスは、データイン状態へ遷移する。書き込みＩ／Ｏ動作の場合、ＳＣＳＩバスは、データアウト状態へ遷移する。ＳＣＳＩバスがデータ状態にある間、ターゲットデバイスは、各々のＳＣＳＩバスクロックサイクルの間、データ単位を送信する。このデータ単位は、データが送信されている特定のＳＣＳＩバスの幅に等しいビット数のサイズを有する。一般的に、各々のデータ単位の転送の一部分として、信号線ＡＣＫおよびＲＥＱを含むＳＣＳＩバス信号線ハンドシェーキングが存在する。たとえば、読み出しＩ／Ｏコマンドの場合、ターゲットデバイスは、ＳＣＳＩバス上に次のデータ単位を置き、ＲＥＱ信号線をアサートする。イニシエータは、ＲＥＱ信号線のアサートをセンスし、ＳＣＳＩバスからの送信データを検索し、データの受信に応答するためＡＣＫ信号をアサートする。このタイプのデータ転送は非同期転送と呼ばれる。ＳＣＳＩバスプロトコルによって、更に、ターゲットデバイスは、イニシエータから最初の肯定応答を受け取る前に、或る数のデータ単位を転送することができる。同期転送と呼ばれるこの転送モードでは、最初のデータ単位の送信とその送信の肯定応答の受信との間の待ち時間が回避される。データ送信の間、ターゲットデバイスは、切り離しメッセージによって後続されるポインタ保存メッセージをイニシエータへ送り、次にＳＣＳＩバス信号線を制御してバス解放状態へ入ることによって、データ送信を中断することができる。これによって、ターゲットデバイスは、更なるデータを受信または送信する前に、ターゲットデバイスが制御するロジカルデバイスと対話するため休止することができる。ＳＣＳＩバスを切り離した後、ターゲットデバイスは、後で再びＳＣＳＩバスの制御を調停し、追加の識別メッセージおよびキュータグメッセージをイニシエータへ送り、したがってイニシエータは、中断された点でのデータ受信または送信を再開することができる。切り離しおよび再接続の例６６０は、データ状態６５８を中断する図６Ｂで示される。最後に、Ｉ／Ｏ動作の全てのデータが送信されたとき、ターゲットデバイスは、メッセージイン状態６６２へ入るためＳＣＳＩ信号線を制御する。メッセージイン状態６６２において、ターゲットデバイスは、任意的にポインタ保存メッセージによって先行された切り離しメッセージをイニシエータへ送る。切り離しメッセージを送った後、ターゲットデバイスはＢＳＹ信号線をドロップし、したがってＳＣＳＩバストランザクションはバス解放状態６６４へ遷移する。
【００３８】
図６Ｂで示されるように、Ｉ／Ｏ動作のデータ送信に続いて、ターゲットデバイスは、Ｉ／Ｏ動作のステータス段階の間に、イニシエータへステータスを戻す。図６ＣはＩ／Ｏ動作のステータス段階を示す。図６Ａおよび図６Ｂと同じように、ＳＣＳＩバスは、図６Ｃで示されるように、バス解放状態６６６から調停状態６６８、再選択状態６７０、およびメッセージイン状態６７２へ遷移する。メッセージイン状態６７２の間に、ターゲットから識別メッセージ６７４およびキュータグメッセージ６７６を送信した後、ターゲットデバイスは、ステータス状態６７８へ入るためＳＣＳＩバス信号線を制御する。ステータス状態６７８において、ターゲットデバイスは、Ｉ／Ｏコマンドが成功裏に完了したかどうかを示すため、単一のステータスバイト６８４をイニシエータへ送る。図６Ｃにおいて、ステータスコード０で示される成功完了に対応するステータスバイト６８０が、ターゲットデバイスからイニシエータへ送られるように示される。ステータスバイトの送信に続いて、ターゲットデバイスは、メッセージイン状態６８２に入るためＳＣＳＩバス信号線を制御する。メッセージイン状態６８２において、ターゲットデバイスはイニシエータへコマンド完了メッセージ６８４を送る。この時点で、Ｉ／Ｏ動作は完了する。次に、ターゲットデバイスはＢＳＹ信号線をドロップし、ＳＣＳＩバスはバス解放状態６８６へ戻る。ここでＳＣＳＩバスアダプタは、Ｉ／Ｏコマンド部分を終了し、Ｉ／Ｏコマンドを実行するために割り振られた内部リソースを解放し、ＰＣＩバスを介してＣＰＵへ完了メッセージまたはステータスを戻すことができる。
【００３９】
ＦＣＰへのＳＣＳＩプロトコルのマッピング
図７Ａおよび図７Ｂは、イニシエータとターゲットとの間で交換されるＦＣＰシーケンスおよび図６Ａ〜図６Ｃで説明されたＳＣＳＩバス段階および状態のマッピングを示す。図７Ａおよび図７Ｂにおいて、ターゲットＳＣＳＩアダプタは、ＦＣＰホストアダプタと一緒にパッケージされるものと仮定され、したがってターゲットＳＣＳＩアダプタは、ＦＣを介してイニシエータと通信し、ＳＣＳＩバスを介してターゲットＳＣＳＩデバイスと通信することができる。図７Ａは、読み出しＩ／Ｏトランザクションについて、ＦＣＰシーケンスとＳＣＳＩ段階および状態との間のマッピングを示す。トランザクションは、ＦＣを介してターゲットＳＣＳＩアダプタへ、ＦＣＰ＿ＣＭＮＤ７０２のデータペイロードを含む単一フレームＦＣＰシーケンスを送るときにイニシエートされる。ターゲットＳＣＳＩバスアダプタがＦＣＰ＿ＣＭＮＤフレームを受け取るとき、ターゲットＳＣＳＩバスアダプタは、図７Ａで示されるような調停、選択、メッセージアウト、コマンド、およびメッセージインを含むコマンド段階７０４のＳＣＳＩ状態を進行する。コマンド段階が完了したとき、図６Ａで示されるように、Ｉ／ＯトランザクションのターゲットであるＳＣＳＩデバイスは、ＳＣＳＩバスを解放するためＳＣＳＩバスを切り離し、その間にターゲットＳＣＳＩデバイスはトランザクションの実行を準備する。後に、ターゲットＳＣＳＩデバイスはＳＣＳＩバスの制御を再調停し、Ｉ／Ｏトランザクションのデータ段階７０６を開始する。この時点で、ＳＣＳＩバスアダプタは、データ送信が現在進行できることを示すため、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンス７０８を送る。読み出しＩ／Ｏトランザクションの場合、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンスは任意的である。データ段階が継続するにつれて、ターゲットＳＣＳＩデバイスは、ロジカルデバイスからデータの読み出しを開始し、ＳＣＳＩバスを介してそのデータをターゲットＳＣＳＩバスアダプタへ送信する。次に、ターゲットＳＣＳＩバスアダプタは、ターゲットＳＣＳＩデバイスから受け取られたデータを、Ｉ／Ｏ読み出しトランザクションに対応する交換の第３のシーケンスから構成される或る数のＦＣＰ＿ＤＡＴＡフレームへパッケージし、ＦＣを介してそれらのＦＣＰ＿ＤＡＴＡフレームをイニシエータへ戻す。全てのデータが送信され、ターゲットＳＣＳＩデバイスがＳＣＳＩバスの制御を放棄したとき、ターゲットＳＣＳＩデバイスは、Ｉ／Ｏトランザクションのステータス段階７１４をイニシエートするためＳＣＳＩバスの制御を再び調停する。この段階において、ＳＣＳＩバストランザクションは、ターゲットＳＣＳＩデバイスからターゲットＳＣＳＩバスアダプタへＳＣＳＩステータスバイトを送るため、図７Ａで示されるように、バス解放状態から調停、再選択、メッセージイン、ステータス、メッセージイン、およびバス解放状態へ遷移する。ステータスバイトを受け取ると、ターゲットＳＣＳＩバスアダプタは、ＦＣＰ＿ＲＳＰ単一フレームシーケンス７１６へステータスバイトをパッケージし、ＦＣを介してイニシエータへＦＣＰ＿ＲＳＰ単一フレームシーケンスを送信する。これは、読み出しＩ／Ｏトランザクションを完了する。
【００４０】
多くのコンピュータシステムにおいて、ターゲットＦＣホストアダプタとターゲットＳＣＳＩバスアダプタとの間に、追加の内部コンピュータバス、たとえばＰＣＩバスが存在してもよい。言い換えれば、ＦＣホストアダプタおよびＳＣＳＩアダプタは、単一のターゲットコンポーネントの中に一緒にパッケージされない可能性がある。単純性を考慮して、その追加的相互接続は図７Ａ〜図７Ｂに示されていない。
【００４１】
図７Ｂは、図７Ａと同じ様式で、ＦＣＰ＿ＣＭＮＤフレーム７１８によって示される書き込みＩ／Ｏトランザクションの間の、ＦＣＰシーケンスとＳＣＳＩバス段階および状態との間のマッピングを示す。図７Ｂと図７Ａとの唯一の相違点は、書き込みトランザクションの間、ＦＣＰ＿ＤＡＴＡフレーム７２２〜７２５がＦＣを介してイニシエータからターゲットへ送信され、ターゲットからイニシエータ７２０へ送られるＦＣＰ＿ＸＦＥＲ＿ＲＤＹ単一フレームシーケンス７２０が、読み出しＩ／Ｏトランザクションのように任意的ではなく、必須であることである。図７Ａと同じように、書き込みＩ／Ｏトランザクションは、ターゲットがＦＣＰ＿ＲＳＰ単一フレームシーケンス７２６をイニシエータへ返すときを含む。
【００４２】
ＩＤＥ／ＡＴＡディスクドライブ
ＩＤＥ／ＡＴＡドライブは、ディスク論理コントローラおよびハードディスクを単一のモジュールへ一緒に統合するために開発された。ＩＤＥ／ＡＴＡドライブは、特に、ＩＳＡバスを介してＰＣシステムへ容易に統合できるように設計されている。元来、ＩＤＥ／ＡＴＡドライブは、並列１６ビット相互接続を有するように設計されており、システムクロックまたはバスクロックによって制御される離散的時間間隔で、ＩＤＥ／ＡＴＡドライブとシステムとの間で２バイトデータを交換できるようにしている。残念ながら、並列バス相互接続は、１００〜１３３ＭＢ／秒の現在のデータレートではパフォーマンスの限界に達しており、４０または８０ピンリボンケーブル接続は、もはや現代のコンピュータシステムにおける内部コンポーネントのクランプ型高密度パッケージングと互換的でない。これらの理由のため、ＳＡＴＡ（「ＳＡＴＡ」）標準が開発され、８０ピンリボンケーブル接続が４導体シリアルケーブルと置換されたＳＡＴＡディスクドライブが現在生産されている。ＳＡＴＡディスクの初期データレートは１５０ＭＢ／秒であり、まもなく３００ＭＢ／秒および６００ＭＢ／秒へ増加することが予想される。データを直列化して、ＡＴＡシリアルディスクドライブと周辺コンポーネント相互接続（「ＰＣＩ」）ベースコントローラとの間で転送するため、標準８Ｂ／１０Ｂエンコーディングが使用される。究極的には、様々なＩ／Ｏコントローラを統合し、周辺装置およびバスへインタフェースを提供し、１つ以上のＣＰＵおよびメモリをリンクする第２のブリッジとの間でデータを転送するサウスブリッジコントローラが設計されてＳＡＴＡテクノロジを完全に組み込み、ＳＡＴＡデバイスの直接相互接続を提供してもよい。
【００４３】
ＡＴＡインタフェース、特にＡＴＡ−５およびＡＴＡ−６標準インタフェースは多様なコマンドをサポートし、これらのコマンドによって、外部プロセッサまたは論理コントローラは、基本データ転送コマンド、探索、キャッシュ管理、および他の管理および診断関連タスクを実行するようにＡＴＡディスクドライブ内の論理コントローラへ命令することができる。下記の表２は、プロトコル番号、たとえばプロトコル「１」を、一般タイプのＡＴＡコマンドを関連づけている。コマンドのタイプは、プログラムされる入力／出力（「ＰＩＯ」）、非データコマンド、およびダイレクトメモリアクセス（「ＤＭＡ」）コマンドを含む。
【表２】
0004690202.tif 000003
【００４４】
下記で示される表３は、上記の表２で定義されるように、或る数のＡＴＡコマンド、およびコマンドが所属するコマンドタイプを示す対応プロトコルをリストしている。
【表３】
0004690202.tif 000004
【００４５】
パワーモードチェックによって、ホストはＡＴＡデバイスの現在のパワーモードを決定することができる。マイクロコードダウンロードコマンドによって、ホストはＡＴＡデバイスのマイクロコードを変更することができる。実行デバイス診断コマンドによって、ホストはＡＴＡデバイスによって実現される診断テストを呼び出すことができる。キャッシュフラッシュコマンドによって、ホストは、ＡＴＡデバイスがその書き込みキャッシュをフラッシュすることを要求することができる。このコマンドの２つのバージョンが表に含まれ、拡張バージョンは、ＡＴＡ−６標準インタフェースをサポートするデバイスで利用可能な４８ビットアドレシング特徴を表す。表３で示されるコマンドの追加の拡張バージョンは、以下で別々に説明されない。デバイス識別コマンドによって、ホストはパラメータ情報についてＡＴＡデバイスに質問することができる。パラメータ情報には、デバイスによって提供される論理セクタ、シリンダ、およびヘッドの数、デバイスによってサポートされるコマンド、デバイスによってサポートされる特徴、およびそのような他のパラメータが含まれる。ＤＭＡ読み出しコマンドによって、ホストはＤＭＡデータ転送プロトコルを使用してデバイスからデータを読み出すことができる。一般的に、これはデータが大量であるとき、はるかに効率的になる。セクタ読み出し確認コマンドによって、ホストはＡＴＡデバイスに命令して、ホスト内に記憶されたデータの一部分を読み出させ、デバイスから読み出されたデータをホストへ転送することなく、誤り状態が起こったかどうかを決定することができる。探索コマンドによって、ホストは、後続のコマンドで１つ以上の特定の論理ブロックにアクセスすることをＡＴＡデバイスに通知し、デバイスは、指定された１つ以上の論理ブロックへの後続アクセスを実行するため、ヘッドポジショニングを最適化することができる。特徴設定コマンドによって、ホストはＡＴＡデバイス内の様々なパラメータを修正し、デバイスによって提供される特徴をオンおよびオフにすることができる。スリープコマンドによって、ホストは、スピンダウンして後続のリセットコマンドを待つようにＡＴＡデバイスに命令することができる。ＤＭＡ書き込みコマンドによって、ホストはＤＭＡデータ転送を使用してＡＴＡデバイスへデータを書き込むことができる。一般的に、これはデータが大量になると効率的になる。
【００４６】
ＦＣベースディスクアレイ
中型および大型コンピュータシステムにおいて、データ記憶要件は、一般的に、ディスクドライブを埋め込まれた埋め込み型大容量ストレージデバイスの容量を著しく超過する。そのようなシステムにおいて、ハイエンド大容量デバイス、たとえば安価なディスクの冗長アレイ（Redundant Arrays of Inexpensive Disk、ＲＡＩＤ）を使用することが普通になってきた。このようなデバイスは、ローカルエリアネットワーク、光ファイバネットワーク、および他の高帯域通信メディアを介して中型およびハイエンドコンピュータシステムへリンクされる内部プロセッサを含む。ディスクアレイの設計および製造を容易にするため、ディスクの製造業者は、ディスクアレイ内のディスクドライブをディスクアレイコントローラへ直接相互接続するためのＦＣポートを含むディスクドライブを提供する。一般的に、個々のＦＣディスクドライブをディスクアレイコントローラへ相互接続するため、ディスクアレイの中でＦＣアービトレーテッドループトポロジが使用される。
【非特許文献１】Freidhelm Schmidt, “The SCSI Bus and IDE Interface”, Addison-Wesley Publishing Company, ISBN 0-201-17514-2, 1997
【非特許文献２】Shanley & Anderson, Mine Share, Inc., ”PCI System Architecture”,Addison-Wesley Publishing Company, ISBN 0-201-40993-3, 1995
【発明の開示】
【発明が解決しようとする課題】
【００４７】
図８Ａ〜図８Ｄは、ディスクアレイ内のＦＣディスクの使用に関連した幾つかの問題を示す。図８Ａは、ディスクアレイの内部コンポーネントを比較的に観念的に描写したものを示す。これから説明される図８Ｂ〜図８Ｄおよび図９は、同じ図示慣例を使用する。図８Ａにおいて、ディスクアレイコントローラ８０２は、高帯域通信メディア８０４を介して、リモートコンピュータシステムおよび他のリモートエンティティへ相互接続される。ディスクアレイコントローラは、ディスクアレイ内のディスクドライブへ比較的高レベルの論理装置および論理ブロックインタフェースをリモートコンピュータシステムへ提供するため、１つ以上のプロセッサ、１つ以上の比較的大型の電子メモリ、およびディスクアレイ制御ファームウェアおよびソフトウェアがディスクアレイコントローラ内に記憶および実行されることを可能にする他のコンポーネントを含む。図８Ａで示されるように、ディスクアレイはディスクアレイコントローラ８０２および複数のＦＣディスクドライブ８０６〜８１３を含む。ＦＣディスクドライブは、ＦＣアービトレーテッドループ８１４を介して、ディスクアレイコントローラ８０２に相互接続される。図８Ａで観念的に示されるようなＦＣベースディスクアレイは、記憶メディアとして標準および容易に入手可能なＦＣディスクを使用し、相互接続のためにＦＣアービトレーテッドループを使用し、ディスクアレイコントローラ内で標準ＦＣコントローラを使用して、比較的容易に設計および製造されることができる。ＦＣは高速のシリアル通信メディアであるから、ＦＣアービトレーテッドループ８１４は、ＦＣディスク８０６〜８１３とディスクアレイコントローラ８０２との間で、大きなデータ転送帯域を提供する。
【００４８】
しかし、ＦＣアービトレーテッドループ内の各々のＦＣノード、たとえばＦＣディスクドライブにおいて、データがノードのＦＣポートを通って処理および転送されるとき、著しいノード遅延が存在する。図８Ａにおいて、ノード遅延は、添え字を付けられた小文字の「ｔ」を有する短い矢印で示される。ノード遅延はＦＣアービトレーテッドループ内で累積し、ＦＣアービトレーテッドループ内のＦＣノードの数に比例した著しい累積ノード遅延を生じる。
【００４９】
図８Ａで示されたディスクアレイ実施形態に伴う第２の問題は、ＦＣアービトレーテッドループが潜在的な単一故障点を表すことである。一般的に、ＦＣディスクは、アービトレーテッドループから非機能ＦＣディスクを隔離するためポートバイパス回路を増強されるが、ポートバイパス回路だけでは防止することのできない複数の異なった故障モードが存在する。
【００５０】
第３の問題は、アービトレーテッドループへノードをリンクするＦＣポートが故障したときに生じる。そのような場合、故障したＦＣポートを識別および隔離するため、複雑で信頼できない手法を使用しなければならない。一般的に、故障したＦＣポートはループトポロジを崩壊させ、ディスクアレイコントローラは、故障したノードを隔離するため、ポートバイパス回路を順次に活性化して各々のノードをバイパスしなければならない。しかし、この手法は、様々な故障モードのもとでは、故障したノードを識別できない可能性がある。したがって、ノード故障はアービトレーテッドループトポロジに伴う重大な問題である。
【００５１】
図８Ｂは、潜在的単一点故障問題への解決法を示す。図８Ｂで示されるように、ディスクアレイコントローラ８０２は、２つの別々の独立ＦＣアービトレーテッドループ８１４および８１６を介してＦＣディスク８０６〜８１３に相互接続される。２つの別々のＦＣアービトレーテッドループの使用は、単一点故障問題を大きく解消する。しかし、ノード遅延問題は、２つのＦＣアービトレーテッドループの使用によっては改善されない。更に、各々のＦＣディスクは２つの別々のＦＣポートを含まなければならないので、個々のＦＣディスクは、むしろ複雑で高価になる。最後に、故障ポートの識別および隔離問題は部分的にのみ対処される。なぜなら、２つのアービトレーテッドループの１つを崩壊させるノード故障の場合、他のアービトレーテッドループは機能を継続するが、もはや通信メディアに二重冗長性は存在しない。二重冗長性を回復するため、ディスクアレイコントローラは、依然として、故障したノードを識別および隔離するように試みなければならず、前述したように、多くの故障モードが識別および隔離に抵抗する。
【００５２】
図８Ｃは、ディスクアレイのＦＣベース実施形態に伴う追加問題を示す。一般的に、ディスクアレイから要求される利用可能記憶空間の量が大きくなればなる程、それだけ多く個々のＦＣディスクが追加される。しかし、追加ディスクの包含はノード遅延問題を悪化させ、前述したように、単一のＦＣアービトレーテッドループは、最大で１２７個のノードまでしか含むことができない。この最大ノード問題を解決するため、独立したＦＣアービトレーテッドループがディスクアレイへ追加される。図８Ｄは、ＦＣディスクの第１のセット８１８が２つの別々のＦＣアービトレーテッドループ８１４および８１６を介してＦＣコントローラ８０２と相互接続され、ＦＣディスクの第２のセット８２０がＦＣアービトレーテッドループの第２のペア８２２および８２４を介してディスクアレイコントローラ８０２と相互接続される高容量ディスクアレイを示す。ＦＣディスクの各々のセット８１８および８２０は、シェルフ（ｓｈｅｌｆ）と呼ばれ、一般的に別々のエンクロージャに納められる。これらのエンクロージャは、冗長パワーシステム、冗長制御パス、およびディスクアレイの全体的な耐故障性および高可用性に寄与する他の特徴を有する。しかし、各々のシェルフの追加は、ディスクアレイコントローラ８０２内のＦＣコントローラおよびＦＣポートの数を増加させる。更に注意すべきは、各々の別々のＦＣアービトレーテッドループは、ＦＣアービトレーテッドループに含まれるＦＣノードの累積ノード遅延を経験することである。したがってディスクアレイの設計者、製造者、および使用者は、ＦＣベースディスクアレイ内でディスクアレイコントローラおよびＦＣディスクを相互接続するための、より柔軟で費用効果が高い効率的方法の必要性を認識してきた。更に、ディスクアレイの設計者、製造者、および使用者は、ＦＣベースディスクアレイ内でディスクアレイコントローラとＦＣディスクとを相互接続する方法であって、ポートの故障および他の通信およびコンポーネントの故障を、より容易かつ信頼性をもって識別させる方法の必要性を認識してきた。
【課題を解決するための手段】
【００５３】
本発明の１つの実施形態は、ストレージ・シェルフ・ルータ（storage shelf router）を実現する集積回路である。この集積回路は、パス・コントローラ・カード（path controller card）、および任意的に他のストレージ・シェルフ・ルータと組み合わせて使用され、ストレージ・シェルフまたはディスクアレイ内のＳＡＴＡディスクを高帯域通信メディア、たとえばＦＣアービトレーテッド（arbitrated）ループへ相互接続する。本発明の１つの実施形態を表す単一のストレージ・シェルフ・ルータを使用するストレージ・シェルフは、高可用性デバイスに要求されるコンポーネント冗長性を提供しない。２、４、６、８、またはそれ以上の個数のストレージ・シェルフ・ルータがストレージ・シェルフの中で使用され、またストレージ・シェルフ・ルータ、ディスクドライブ、および外部通信メディアの間の相互接続が適切に設計および構成されるとき、結果のストレージ・シェルフは、ディスクアレイまたは他のタイプの電子デバイスに含まれてよい離散的高可用性コンポーネントを構成する。
【００５４】
１つの実施形態において、各々のストレージ・シェルフ・ルータは、処理要素、複数のメモリ、層状論理アーキテクチャ、ストレージ・シェルフ・ルータを高帯域通信メディアへ相互接続する２つの完全なＦＣポート、および複数のＳＡＴＡポートを含む集積回路であり、各々のＳＡＴＡポートはＳＡＴＡディスクへインタフェースを提供する。ＦＣポートは、ストレージ・シェルフ内の全てのストレージ・シェルフ・ルータを一緒にストレージ・シェルフ・ルータ内の内部ファブリック空間へリンクする。相互接続されたストレージ・シェルフ・ルータは、２つの別々の部分的に外部のファブリック空間、たとえば部分的に外部のＦＣアービトレーテッドループへリンクされ、部分的に外部のファブリック空間はストレージ・シェルフをディスクアレイコントローラまたは他の制御コンポーネントに相互接続する。
【００５５】
ストレージ・シェルフ内で相互接続されたストレージ・シェルフ・ルータのセットは、ＦＣアービトレーテッドループまたは他の高帯域通信メディアの単一のポートを介してアクセス可能である。言い換えれば、各々のストレージ・シェルフは、現在の多くのディスクアレイのように、ストレージ・シェルフ内のディスクドライブの数に等しいノードセットではなく、ＦＣアービトレーテッドループの単一のノードを表すことができる。したがって、ストレージ・シェルフ・ルータによってストレージ・シェルフ内のディスクドライブを相互接続することは、本質的に、各々のディスクドライブが１つ以上のＦＣアービトレーテッドループへ直接接続される現在のストレージ・シェルフに固有の累積ノード遅延を取り除く。１つの実施において、ストレージ・シェルフ内で８個のストレージ・シェルフ・ルータを相互接続して、単一のＦＣアービトレーテッドループポートを介してＦＣアービトレーテッドループへストレージ・シェルフ内の６４個のディスクドライブを相互接続する高可用性相互接続を提供することができるので、ディスクアレイコントローラを含む単一のＦＣアービトレーテッドループは、ディスクアレイ内で８，０００個のディスクドライブをディスクアレイコントローラへ相互接続することができ、十分な相互接続冗長性が高可用性動作を可能にする。高可用性が必要とされないとき、ストレージ・シェルフ・ルータ８はストレージ・シェルフ内で１２５個のディスクドライブを相互接続することができ、ディスクアレイコントローラを含む単一のＦＣアービトレーテッドループを介して１６，０００個のディスクドライブを相互接続する。こうして、ディスクアレイ内で１２５個のディスクドライブごとに単一のＦＣアービトレーテッドループまたは一対のＦＣアービトレーテッドループを使用する代わりに、本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用すれば、１つまたは一対のＦＣアービトレーテッドループを介して、高可用性方式では８，０００個のディスクドライブを相互接続し、または冗長接続なしに１６，０００個のディスクドライブを相互接続することができる。
【００５６】
したがって、ストレージ・シェルフ・ルータは、ＦＣベース実施形態において、ＦＣアービトレーテッドループまたは他のＦＣファブリックとストレージ・シェルフ内のディスクドライブとの間でＦＣフレームをルーティングするように働く。一般的に、通常の動作では、ＦＣフレームは、ストレージ・シェルフ・ルータのデフォルトトポロジおよびストレージ・シェルフ・ルータを個々のディスクドライブへリンクする通信路を介してルーティングされる。しかし、個々の通信リンクが故障するか、１つのストレージ・シェルフ・ルータの全体が故障したとき、残りの正しく動作しているストレージ・シェルフ・ルータおよび相互接続は、冗長相互接続および冗長ストレージ・シェルフ・ルータを利用するように自動的に再構成され、ディスクドライブが１つ以上のＦＣアービトレーテッドループを介してディスクアレイコントローラへ相互接続されることは継続する。
【００５７】
１つの実施形態において、ストレージ・シェルフ・ルータは、ＦＣアービトレーテッドループ、ＦＣファブリック、または他の高帯域通信メディアを、個々のディスクドライブをストレージ・シェルフ・ルータとリンクする複数の内部専用通信メディアに相互接続する一種の通信ハブとして働くので、ストレージ・シェルフ・ルータは、ＦＣベース通信プロトコルを、内部リンクに適した１つ以上の通信プロトコルへ変換するように働くことができる。これは、更に、ストレージ・シェルフ内で安価な非ＦＣ互換ディスクドライブを使用できるようにし、ディスクアレイコントローラからストレージ・シェルフ・ルータによって受け取られたＦＣＰコマンドが、ストレージ・シェルフ・ルータによって、安価なディスクドライブに互換的なコマンドへ変換されるようにする。本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用して実現されたストレージ・シェルフは、実際に含む安価なディスクドライブではなく完全にＦＣ互換のディスクドライブを含むかのように、ディスクアレイコントローラへインタフェースする。多くの安価なディスクドライブは複数の通信リンクポートをサポートしないので、各々の安価なディスクドライブと１つ以上のストレージ・シェルフ・ルータとの間に二重冗長性通信リンクを提供するパス・コントローラ・カードが使用される。各々のディスクドライブは、ポイントツーポイントリンクを介してストレージ・シェルフ・ルータへ相互接続されるので、故障したディスクドライブ、故障したリンク、および故障したポートは、容易に検出および隔離される。
【発明を実施するための最良の形態】
【００５８】
本発明の１つの実施形態は、ストレージ・シェルフ・ルータの集積回路実現である。このストレージ・シェルフ・ルータは、ストレージ・シェルフ内のディスクドライブを高帯域通信メディアと相互接続するため、ディスクアレイまたは他の大型の別々に制御される大容量ストレージデバイスのストレージ・シェルフの中で、単独または組み合わせて使用されてよい。他方では、高帯域通信メディアは、ディスクアレイコントローラまたは類似の大容量ストレージデバイスのコントローラへストレージ・シェルフを相互接続する。説明される実施形態は、更に、ディスクドライブと１つ以上のストレージ・シェルフ・ルータとの間で冗長通信リンクを提供するパス・コントローラ・カードを含む。図８Ａ〜図８Ｄを参照して前に説明したように、ディスクアレイは、現在、ストレージ・シェルフ内でＦＣ互換ディスクドライブを使用することができ、各々のＦＣ互換ディスクドライブは、ＦＣ互換ディスクドライブをディスクアレイコントローラと相互接続する１つまたは２つのＦＣアービトレーテッドループまたは他のＦＣファブリックトポロジでＦＣノードとして働く。対照的に、本発明の１つの実施形態を部分的に表すストレージ・シェルフ・ルータは中間の通信ハブとして働く。このハブは、ポイントツーポイントシリアル通信メディアによって、ストレージ・シェルフ内の各々のディスクドライブへ直接接続され、１つ以上の高帯域通信メディア、たとえばファイバ・チャネル・アービトレーテッド・ループを介して、ディスクアレイコントローラと相互接続される。
【００５９】
本発明の１つの実施形態は、（１）概要、（２）ストレージ・シェルフ内部トポロジ、（３）パス・コントローラ・カードの概要、（４）ストレージ・シェルフ・ルータの概要、（５）ストレージ・シェルフ・インタフェース、（６）ストレージ・シェルフ・ルータの実施形態、および（７）ストレージ・シェルフ・ルータのルーティングレイヤ、を含む以下のサブセクションで詳細に説明される。更に、コンピュータプログラムの付録が、２つのコンパクトディスクで提供され、参照してここに組み込まれる。コンピュータプログラムの付録は、ルーティングレイヤ論理を指定するＲＴＬコード、ストレージ・シェルフ・ルータ実施形態のＣ言語モデル、およびストレージ・シェルフ・ルータ実施形態の参照マニュアルの５つの章を含む。２つのコンパクトディスクの各々に含まれるファイルは、以下のような仕様である。
【表４】
0004690202.tif 000005
【００６０】
概要
図９は、図８Ａ〜図８Ｄで使用された図示慣例を使用して、本発明の１つの実施形態を表すストレージ・シェルフ・ルータを観念的に示す。図９において、ディスクアレイコントローラ９０２は、ＬＡＮまたは光ファイバ通信メディア９０４を介して、１つ以上のリモートコンピュータシステムへリンクされる。ディスクアレイコントローラ９０２は、ＦＣアービトレーテッドループ９０８を介して、ストレージ・シェルフ・ルータ９０６に相互接続される。ストレージ・シェルフ・ルータ９０６は、別々のポイントツーポイントインターコネクト、たとえばインターコネクト９１８を介して、ストレージ・シェルフ９１０〜９１７内のディスクドライブの各々に直接相互接続される。図９で観念的に示された実施形態と図８Ａ〜図８Ｄで示された実施形態とを比較すると、図８Ａ〜図８Ｄで示された実施形態で識別された問題は、ストレージ・シェルフ・ルータ・ベースの実施形態によって対処されていることが容易に分かる。第１に、図９で示された実施形態のＦＣアービトレーテッドループ内の唯一のノード遅延は、単一のＦＣアービトレーテッドループノードとして働くストレージ・シェルフ・ルータによって導入される遅延である。対照的に、図８Ａで示されるように、各々のＦＣ互換ディスクドライブは別々のノード遅延を導入し、ＦＣアービトレーテッドループ８１４上の累積ノード遅延は、ＦＣアービトレーテッドループによって相互接続されたＦＣ互換ディスクドライブの数に比例する。ストレージ・シェルフ・ルータは、ストレージ・シェルフ・ルータを個々のディスクドライブへリンクする内部シリアルインターコネクトとＦＣポートとの間で、高度に並列および効率的データ転送を容易にするように設計される。したがって、ストレージ・シェルフ・ルータをＦＣアービトレーテッドループ９０８へ相互接続するオンボードＦＣコントローラによって導入される必然的ノード遅延を除いて、ストレージ・シェルフ・ルータによって導入される実質的な遅延および累積遅延は存在しない。
【００６１】
第２に、ストレージ・シェルフ・ルータを使用して、はるかに複数のディスクドライブをディスクアレイコントローラに相互接続することができる。図９の実施形態で使用されたＦＣアービトレーテッドループ９０８は、２つのノードだけ、即ち、ディスクアレイコントローラおよびストレージ・シェルフ・ルータを含む。各々のストレージ・シェルフ・ルータは８つのディスクドライブをＦＣアービトレーテッドループと相互接続できると仮定すれば、単一のＦＣアービトレーテッドループを使用し、１２５個のストレージ・シェルフ・ルータをディスクアレイコントローラへ相互接続して、単一のＦＣアービトレーテッドループを介して８，０００以上の個々のディスクドライブをディスクアレイコントローラへ相互接続することができる。もしＦＣファブリック（パブリックループ）に通常予約されているアドレスがストレージ・シェルフ・ルータによって使用されるとすれば、１２６個のストレージ・シェルフ・ルータを相互接続することができる。前述したように、高可用性が必要でないときには、単一のＦＣアービトレーテッドループを介して、１６，０００以上の個々のディスクドライブをディスクアレイコントローラへ相互接続することができる。対照的に、図８Ｃで示されるように、個々のＦＣ互換ディスクドライブの各々が別々のＦＣノードとして機能するのであれば、１２５個のディスクドライブだけが単一のＦＣアービトレーテッドループを介してディスクアレイコントローラと相互接続されるか、もしＦＣファブリック（パブリックループ）に通常予約されているアドレスがディスクドライブのために使用されるならば、１２６個のディスクドライブが相互接続される。
【００６２】
第３に、ストレージ・シェルフ・ルータを使用するストレージ・シェルフの中で故障を識別および隔離することが、はるかに容易である。従来の１ディスクドライブ／ＦＣアービトレーテッドループノード実施形態において、故障したＦＣポートまたはＦＣリンクは、識別するのが非常に難しく、或る故障モードでは、隔離するのが困難であるが、対照的に、ポイントツーポイントリンクを介してストレージ・シェルフ・ルータへ相互接続されたディスクドライブに関連する問題は、比較的容易に識別され、故障したポートまたはリンクは容易に隔離される。
【００６３】
ディスクドライブは、現在利用可能な複数の内部相互接続テクノロジを介して、ストレージ・シェルフ・ルータ９０６へ相互接続される。１つの実施形態において、ＳＡＴＡディスクドライブをストレージ・シェルフ・ルータに相互接続するため、ＳＡＴＡ互換相互接続が使用される。ストレージ・シェルフ・ルータは、ディスクアレイコントローラから受け取られた各々のＦＣＰコマンドを１つ以上の同等ＡＴＡインタフェースコマンドへ変換する論理を含み、ストレージ・シェルフ・ルータはＡＴＡインタフェースコマンドを適切なＳＡＴＡディスクドライブへ送信する。図９で示されるストレージ・シェルフ・ルータは、単一のＦＣアービトレーテッドループ９０８を介してディスクアレイコントローラに相互接続されるが、この後で説明するように、より普通には、ストレージ・シェルフ・ルータは、２つのＦＣアービトレーテッドループまたは他のファブリックトポロジを介してディスクアレイコントローラに相互接続される。
【００６４】
図１０は、コンピュータおよびディスクアレイの階層相互接続システム内で、本発明の１つの実施形態を部分的に表すストレージ・シェルフ・ルータによって占有される位置を示す。図１０において、２つのサーバコンピュータ１００１および１００４は相互に接続され、また高帯域通信メディア１００８、たとえば様々なＦＣファブリックトポロジの任意のものを介して、ディスクアレイコントローラ１００６に相互接続される。ディスクアレイコントローラ１００６は、２つの別々のＦＣアービトレーテッドループを介して、ストレージ・シェルフ１０１０に相互接続される。第１のＦＣアービトレーテッドループ１０１２は、ディスクアレイコントローラ１００６を第１のストレージ・シェルフ・ルータ１０１４に直接相互接続する。第２のＦＣアービトレーテッドループ１０１６は、ディスクアレイコントローラ１００６を第２のストレージ・シェルフ・ルータ１０１８へ直接相互接続する。２つのストレージ・シェルフ・ルータ１０１４および１０１８は、内部ポイントツーポイントＦＣ相互接続１０２０に相互接続され、相互接続１０２０は、第１のＦＣアービトレーテッドループ１０１２の一部分として第１のストレージ・シェルフ・ルータ１０１４から第２のストレージ・シェルフ・ルータ１０１８へＦＣフレームを搬送し、第２のＦＣアービトレーテッドループ１０１６の一部分として第２のストレージ・シェルフ・ルータ１０１８と第１のストレージ・シェルフ・ルータ１０１４との間でＦＣフレームを搬送する。更に、内部ＦＣリンク１０２０は、ストレージ・シェルフ１０１０内で内部的に生成および消費されて内部管理および通信に使用されるＦＣフレームを搬送することができる。以下で説明するように、ストレージ・シェルフとディスクアレイとを相互接続する２つのＦＣアービトレーテッドループを「Ｘループ」または「Ｘファブリック」および「Ｙループ」または「Ｙファブリック」と呼び、内部ＦＣ１０２０上で内部的に生成および消費される管理ＦＣフレームの交換をＳファブリックと呼ぶことが普通である。ストレージ・シェルフ１０１０は１６個のＳＡＴＡディスクドライブを含む。これらのディスクドライブは、図１０において、４つのディスクドライブ１０２２〜１０２５および明確に示されない１２個のディスクドライブを示す省略符号１０２６によって表される。各々のストレージ・シェルフ・ルータ１０１４および１０１８は、ポイントツーポイントシリアルリンク、たとえばシリアルリンク１０２８を介して、各々のＳＡＴＡディスクドライブに相互接続される。
【００６５】
図１０で示されるように、ディスクアレイコントローラ１００６およびストレージ・シェルフ１０１０を含むディスクアレイ内の相互通信路の各々において、少なくとも二重の冗長性が存在する。更に、ストレージ・シェルフ・ルータに二重の冗長性が存在する。もしいずれかの１つのリンクまたは１つのストレージ・シェルフ・ルータが故障すると、残りのリンクおよび残りのストレージ・シェルフ・ルータは、故障したリンクまたはストレージ・シェルフ・ルータによって前に取られていたワークロードを取り、ストレージ・シェルフ１０１０内でディスクアレイコントローラ１００６と１６個のＳＡＴＡディスクドライブの各々との間で完全な接続性を維持することができる。ディスクアレイコントローラは、更に、複数の異なった高可用性データストレージスキーム、たとえば、ＲＡＩＤストレージテクノロジの様々なレベルを実現し、１つ以上のＳＡＴＡディスクドライブが故障しても、回復および完全な動作を可能にすることができる。ＲＡＩＤテクノロジは、たとえば、２つ以上のディスクドライブに記憶されたデータの２つ以上の完全なコピーを、別々に、また完全な冗長性で復元することができる。サーバは、組み込まれた冗長性およびフェイルオーバを利用して、通信メディア、たとえばＦＣファブリックを介して、ディスクアレイコントローラ１００６および１つ以上のストレージ・シェルフ、たとえばストレージ・シェルフ１０１０を含むディスクアレイと相互通信する。ディスクアレイコントローラは論理装置（「ＬＵＮ」）および論理ブロックアドレス（「ＬＢＡ」）インタフェースを与える。このインタフェースによって、サーバコンピュータ１００２および１００４は、ストレージ・シェルフ内のディスクドライブにおけるデータの実際のロケーションを顧慮することなく、またデータの冗長コピーおよびディスクアレイコントローラ１００６によって提供される他の機能性および特徴を顧慮することなく、ファイルおよび他のデータオブジェクトをディスクアレイに記憶および検索することができる。ディスクアレイコントローラ１００６は、ストレージ・シェルフ・ルータ１０１４および１０１８によって提供されるインタフェースを介して、ストレージ・シェルフ１０１０とインタフェースする。ディスクアレイコントローラ１００６は、ＦＣＰプロトコルを介して出現する離散的ＦＣ互換ディスクドライブへＦＣ交換を送信し、ＦＣ交換を受信する。しかし、ディスクアレイコントローラとはトランスペアレントに、ディスクシェルフルータ１０１４および１０１８は、ＳＡＴＡディスクドライブとコマンドおよびデータを交換するため、ＦＣコマンドをＡＴＡコマンドへ変換する。
【００６６】
図１１および図１２は、本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用して実現されるストレージ・シェルフのコンポーネントの斜視図である。図１１において、ルータカードの上に取り付けられた２つのストレージ・シェルフ・ルータ１１０２および１１０４は、パッシブミッドプレイン（ｐａｓｓｉｖｅ  ｍｉｄｐｌａｎｅ）１１０６を介して、１６個のＳＡＴＡディスクドライブ、たとえばＳＡＴＡディスクドライブ１１０８に相互接続する。各々のＳＡＴＡディスクドライブキャリヤは、ＳＡＴＡディスクドライブおよびパス・コントローラ・カード１１１０を含む。パス・コントローラ・カード１１１０は、ＳＡＴＡディスクドライブを２つの別々のシリアルリンクに相互接続する。これらのシリアルリンクは、パッシブミッドプレインを介して、２つのストレージ・シェルフ・ルータ１１０２および１１０４の各々へ連結される。普通は、ＳＡＴＡディスクドライブは、外部システムへの単一のシリアル接続のみをサポートする。ストレージ・シェルフの中で完全に冗長な接続を提供するため、パス・コントローラ・カード１１１０が必要である。ストレージ・シェルフ１１００は、更に、冗長ファン１１１２および１１１４並びに冗長電源１１１６および１１１８を含む。図１２は、図１１と類似したストレージ・シェルフ実施形態を示す。この実施形態は二重ＳＡＴＡディスクドライブキャリヤを有し、このキャリヤの各々は、２つのパス・コントローラ・カードおよび２つのＳＡＴＡディスクドライブを含む。ディスクドライブ数の増加は、高可用性応用で必要となる二重冗長性を提供するため、ストレージ・シェルフ・ルータの対応する二重化を必要とする。
【００６７】
ストレージ・シェルフの内部トポロジ
図１３Ａ〜図１３Ｃは、本発明の１つの実施形態を部分的に表すストレージ・シェルフ・ルータを使用するストレージ・シェルフの３つの異なった実施形態を示す。図１３Ａにおいて、単一のストレージ・シェルフ・ルータ１３０２は、ＦＣアービトレーテッドループ１３２０を介して、１６個のＳＡＴＡディスクドライブ１３０４〜１３１９をディスクアレイコントローラに相互接続する。１つの実施形態において、ストレージ・シェルフ・ルータは、最大１６個のシリアルリンクを提供し、１６個までのＳＡＴＡディスクドライブの相互接続をサポートすることができる。図１３Ａに示されるストレージ・シェルフは、高可用性ではない。なぜなら、それは、冗長ストレージ・シェルフ・ルータを含まず、１つ以上のルータと各々のＳＡＴＡディスクドライブとの間に、冗長シリアルリンクも含まないからである。
【００６８】
対照的に、図１３Bで示されるストレージ・シェルフ実施形態は、高可用性である。このストレージ・シェルフにおいて、２つのストレージ・シェルフ・ルータ１３２２および１３２４は、ポイントツーポイントシリアルリンクを介して、１６個のＳＡＴＡディスクドライブ１３２６〜１３４１の各々へリンクされる。通常の動作の間、ストレージ・シェルフ・ルータ１３２２は、ＳＡＴＡディスクドライブの半分１３２６〜１３３３をディスクアレイコントローラへ相互接続し、ストレージ・シェルフ・ルータ１３２４はＳＡＴＡディスクドライブの他の半分１３３４〜１３４１をディスクアレイコントローラへ相互接続する。通常の動作の間に使用される内部ポイントツーポイントシリアルリンクは、たとえばシリアルリンク１３４２のように、図１３Ｂで太く示され、「１次リンク」と呼ばれる。内部シリアルリンク１３４４のように、通常の動作の間に使用されない内部シリアルリンクは「２次リンク」と呼ばれる。もし１次リンクが動作中に故障すると、故障した１次リンク、およびストレージ・シェルフ・ルータへ接続された他の全ての１次リンクを、故障した１次リンクが接続されたストレージ・シェルフ・ルータから他のストレージ・シェルフ・ルータへフェイルオーバして、故障した１次リンクを修理または置換することができる。この置換には、故障した１次リンクが接続されたストレージ・シェルフ・ルータの置換が含まれる。前述したように、２つのストレージ・シェルフ・ルータの各々は、ストレージ・シェルフをディスクアレイコントローラに相互接続する２つのＦＣアービトレーテッドループの１つのためにＦＣノードとして働く。もし１つのＦＣアービトレーテッドループが故障すると、通常は、故障したＦＣアービトレーテッドループを通るデータ転送は、残りの動作可能なＦＣアービトレーテッドループへフェイルオーバされる。同様に、もしストレージ・シェルフ・ルータが故障すると、他のストレージ・シェルフ・ルータがストレージ・シェルフの完全な動作制御を取ることができる。代替の実施形態において、１次パスの故障は、全体のストレージ・シェルフ・ルータをフェイルオーバすることなく、個々にフェイルオーバされてよい。或る実施形態および状況においては、１次パスフェイルオーバはストレージ・シェルフ・ルータ内で実行されてよく、他の実施形態および状況においては、１次パスフェイルオーバは１次パスを第２のストレージ・シェルフ・ルータへフェイルオーバすることを含んでよい。
【００６９】
図１３Ｃは、３２ＡＴＡディスク高可用性ストレージ・シェルフの実施形態を示す。図１３Ｃで示されるように、３２ＡＴＡディスクストレージ・シェルフは、４つのストレージ・シェルフ・ルータ１３５０、１３５２、１３５４、および１３５６を含む。各々のストレージ・シェルフ・ルータは、通常の動作中に、８つのＳＡＴＡディスクを２つのＦＣアービトレーテッドループに相互接続する。これらのＦＣアービトレーテッドループは、ストレージ・シェルフをディスクアレイコントローラへ相互接続する。各々のストレージ・シェルフ・ルータは、２次リンクを介して、８つの追加ＳＡＴＡディスクディスクドライブへ相互接続されるので、もしフェイルオーバが必要であれば、ストレージ・シェルフ・ルータは、全部で１６個のＳＡＴＡディスクドライブを２つのＦＣアービトレーテッドループに相互接続することができる。注意すべきは、４ストレージ・シェルフ・ルータ構成において、ストレージ・シェルフ・ルータ１３５０が１つのＦＣアービトレーテッドループに関して４つの全てのストレージ・シェルフ・ルータのためにＦＣノードとして働き、ストレージ・シェルフ・ルータ１３５６が、第２のＦＣアービトレーテッドループに関して４つの全てのストレージ・シェルフ・ルータのためにＦＣノードとして働くことである。図１３Ｃで示されるように、ストレージ・シェルフ・ルータ１３５０がＦＣノードとして働く第１のＦＣアービトレーテッドループは、ＸループまたはＸファブリックとして考えられ、ストレージ・シェルフ・ルータ１３５６がＦＣノードとして働く他のＦＣアービトレーテッドループは、ＹファブリックまたはＹループとして考えられる。ディスクアレイコントローラからＸループを介してストレージ・シェルフ内のＳＡＴＡディスクへ送信されたＦＣフレームは、最初にストレージ・シェルフ・ルータ１３５０によって受信される。ＦＣフレームは、通常動作の場合、１次リンクを介してストレージ・シェルフ・ルータ１３５０に相互接続されたＳＡＴＡディスクへ方向づけられるか、内部ＦＣリンク１３５８を介してストレージ・シェルフ・ルータ１３５２へ方向づけられる。ストレージ・シェルフ・ルータ１３５２は、１次リンクを介してＳＡＴＡディスクへ送信される１つ以上のＡＴＡコマンドへＦＣフレームを変換するか、下流のストレージ・シェルフ・ルータ１３５４へＦＣフレームを転送する。もし応答ＦＣフレームがＸファブリックを介してストレージ・シェルフ・ルータ１３５６によって送信されるのであれば、その応答フレームは、ストレージ・シェルフ・ルータ１３５４および１３５２からストレージ・シェルフ・ルータ１３５０へ、内部ＦＣリンク１３６０、１３６２、１３５８を介して転送されなければならない。ストレージ・シェルフ・ルータ１３５０から、応答フレームは外部Ｘファブリックへ送信される。説明された実施形態において、高可用性ストレージ・シェルフは、少なくとも２つのストレージ・シェルフ・ルータを含む必要があり、またストレージ・シェルフの中で８つのＳＡＴＡディスクの各々のセットについて１つのストレージ・シェルフ・ルータを含む必要がある。
【００７０】
パス・コントローラ・カードの概要
前述したように、２つのコンポーネントが、ＳＡＴＡディスクまたは他の安価なディスクドライブを使用する高可用性ストレージ・シェルフの構成を容易にする。これらのコンポーネントは、ＦＣアービトレーテッドループ上で単一のスロットまたはノードのみを使用して、ＦＣアービトレーテッドループまたは他の高帯域通信メディアと相互接続することができる。１つのコンポーネントはストレージ・シェルフ・ルータであり、他のコンポーネントは、２つのストレージ・シェルフ・ルータへＡＴＡドライブの冗長接続を提供するパス・コントローラ・カードである。図１４Ａ〜図１４Ｂは、ＡＴＡディスクドライブを２つのストレージ・シェルフ・ルータに相互接続するのに適したパス制御カードの２つの実施形態を示す。図１４Ａで示される実施形態は、パラレルＡＴＡディスクドライブへのパラレルコネクタを提供し、図１４Ｂで示される実施形態は、ＳＡＴＡディスクドライブへのシリアル接続を提供する。前述したように、ＳＡＴＡディスクドライブは、より高いデータ転送レートを提供するので、図１４Ｂで示される実施形態が好ましく、以下で説明される実施形態である。
【００７１】
パス・コントローラ・カードはＳＣＡ−２コネクタ１４０２を提供する。このコネクタ１４０２は、１次シリアルリンク１４０４および管理リンク１４０６を第１のストレージ・シェルフ・ルータへ外部接続し、２次シリアルリンク１４０８および第２の管理リンク１４１０を第２のストレージ・シェルフ・ルータへ外部接続する。１次リンクおよび２次リンクは、シリアルリンク１４１４を介してＳＡＴＡディスクドライブ１４１６へ相互接続される２：１マルチプレクサによって多重化される。管理リンク１４０６および１４１０はマイクロコントローラ１４１８へ入力される。マイクロコントローラ１４１８は管理サービスルーチン、たとえば、ディスクドライブ環境の温度をモニタし、ディスクドライブキャリヤ内のファンの動作を制御し、ディスクドライブエンクロージャの外部から見える様々な発光ダイオード（「ＬＥＤ」）信号光を活性化するルーチンを実行する。本質的に、通常の動作では、ＡＴＡコマンドおよびデータは１次リンクを介してパス・コントローラ・カードによって受け取られ、２：１マルチプレクサを介して、ＳＡＴＡディスクドライブ１４１６へ入力されるシリアルリンク１４１４へ転送される。もし１次リンクを介してパス・コントローラ・カードへ接続されたデフォルトのストレージ・シェルフ・ルータを非活性化するフェイルオーバが、ストレージ・シェルフの中で起こるならば、第２のストレージ・シェルフ・ルータが、２次リンクを介してＡＴＡコマンドおよびデータの転送を取り、これらのＡＴＡコマンドおよびデータが、ＳＡＴＡディスクドライブ１４１６へ直接入力されるシリアルリンク１４１４へ、２：１マルチプレクサを介して渡される。
【００７２】
パス・コントローラ・カードは、２つの別々のストレージ・シェルフ・ルータへ冗長接続を提供し、したがって高可用性ストレージ・シェルフで必要な二重冗長性を提供するために必要である。ストレージ・シェルフ・ルータは、異なったタイプの通信メディアの間で相互接続を提供し、異なったタイプの通信メディアの間でコマンドおよびデータパケットの変換を提供する。更に、ストレージ・シェルフ・ルータは、内部コンポーネントの故障を自動的に検出して適切なフェイルオーバプランを実行するフェイルオーバ論理を含み、冗長リンクおよび非故障コンポーネントを使用して、ディスクアレイコントローラとディスクドライブとの完全な相互接続を回復する。
【００７３】
ストレージ・シェルフ・ルータの概要
図１５は、ストレージ・シェルフ・ルータの主要な機能コンポーネントを示す高レベルブロック図である。ストレージ・シェルフ・ルータ１５００は、２つのＦＣポート１５０２および１５０４、ルーティングレイヤ１５０６、ＦＣＰレイヤ１５０８、グローバル共有メモリスイッチ１５１０、１６個のＳＡＴＡポート１５１２〜１５１８、ＣＰＵコンプレックス１５２０、および外部フラッシュメモリ１５１９を含む。ストレージ・シェルフ内で相互接続されたストレージ・シェルフ・ルータのセットにおけるストレージ・シェルフ・ルータの論理位置に依存して、ＦＣポートの１つまたは双方は、外部ＦＣアービトレーテッドループまたは他のＦＣファブリックへ接続され、ＦＣポートの１つまたは双方は、内部ポイントツーポイントＦＣリンクへ相互接続される。一般的に、ＦＣポートの１つは、ストレージ・シェルフ・ルータのセット内のストレージ・シェルフ・ルータの論理および物理位置とは無関係に、ストレージ・シェルフ・ルータを直接または間接に第１のＦＣアービトレーテッドループへリンクするものと考えてよく、他のＦＣポートは、ストレージ・シェルフ・ルータを第２のＦＣアービトレーテッドループに直接または間接に相互接続するものと考えてよい。
【００７４】
ルーティングレイヤ１５０６は、この後で説明するメモリの中に記憶された複数のルーティングテーブル、および双方のＦＣポートから到着するＦＣフレームをどこへ転送するかを決定するルーティングロジック（routing logic）を含む。ＦＣＰレイヤ１５０８は、様々なタイプの到着および出発ＦＣフレームを処理する制御論理、この後で説明するグローバル共有メモリスイッチへのインタフェース、および一緒になってＦＣＰ交換を構成するＦＣフレームの交換を容易にするＦＣ交換コンテキストをメモリの中にセットアップするため、ＣＰＵコンプレックス上で実行されているファームウェアルーチンにＦＣＰ＿ＣＭＮＤフレームを処理させるＣＰＵコンプレックス１５０３へのインタフェースを含んでいる。
【００７５】
グローバル共有メモリスイッチ１５１０は、ＦＣＰレイヤとＳＡＴＡポート１５１２〜１５１８との間でデータを渡すための非常に高速の時間多重化されたデータ交換ファシリティである。グローバル共有メモリスイッチ（「ＧＳＭＳ」）１５１０は、バーチャルキューの割り振りを可能にするバーチャルキューメカニズムを使用して、ＦＣＰレイヤと特定のＳＡＴＡポートとの間のデータ転送を容易にする。ＧＳＭＳは、本質的に非常に高帯域で高速の双方向マルチプレクサである。このマルチプレクサは、ＦＣＰレイヤと１６個のＳＡＴＡポートとの間で高度に並列のデータフローを促進し、ＦＣＰレイヤとＳＡＴＡポートとの間で同期境界の横断を容易にする。
【００７６】
ＣＰＵコンプレックス１５０３は、様々なファームウェアルーチンを実行する。これらのファームウェアルーチンは、ＦＣ交換のためにコンテキスト情報を初期化および維持するためＦＣＰコマンドを処理し、ＦＣＰコマンドをＡＴＡ等価コマンドへ変換し、またＳＡＴＡディスクドライブおよびストレージ・シェルフ・ルータの内部コンポーネントの動作をモニタし、問題が検出されたとき、複雑なフェイルオーバストラテジを実行する。フェイルオーバストラテジを実行するため、ＣＰＵコンプレックスはストレージ・シェルフ・ルータの他の論理コンポーネントに相互接続される。外部フラッシュメモリ１５１９は、構成パラメータおよびファームウェアルーチンを記憶する。注意すべきは、ストレージ・シェルフ・ルータが２つのＦＣポート１５０２および１５０４、１６個のＳＡＴＡポート１５１２〜１５１８、１６個のシリアル管理リンク１５２０、Ｉ２Ｃバス１５２２、およびコンソール１５２４へのリンクを介して、外部コンポーネントに相互接続されることである。
【００７７】
ストレージ・シェルフ・インタフェース
前述したように、ストレージ・シェルフ・ルータベースのストレージ・シェルフ実施形態は、現在のＦＣノード／ディスクドライブ実施形態よりも、多くの点で大きな柔軟性を提供する。ストレージ・シェルフ・ルータは、それが接続されたディスクアレイコントローラへ多くの異なった論理インタフェースを提供することができる。図１６Ａ〜図１６Ｇは、本発明の１つの実施形態を部分的に表す１つ以上のストレージ・シェルフ・ルータを組み込んだ高可用性ストレージ・シェルフによって提供される複数の異なった論理インタフェースを示す。図１６Ａは、図８Ａ〜図８Ｄを参照して前に説明したストレージ・シェルフの現在のＦＣ互換ディスクドライブ実施形態によって提供されるインタフェースを示す。図１６Ａは、図１６Ａ〜図１６Ｈを通して使用される観念的図示慣例を使用する。図１６Ａにおいて、各々のディスクドライブ１６０２〜１６０５は、番号０〜１９を付けられた一連のデータブロックとして論理的に表される。もちろん、実際のディスクドライブは、数十万から数百万の論理ブロックを含むが、インタフェースの様々な異なったタイプを例示するためには、図１６Ａの各々のディスクについて示された２０個の論理ブロックで十分である。図１６Ａにおいて、各々の個々のディスクドライブ１６０２〜１６０５はＦＣアービトレーテッドループ上の離散的ノードであり、したがって各々のディスクドライブは、別々のＦＣノードアドレス、または図１６Ａで「ＡＬ＿ＰＡ１」、「ＡＬ＿ＰＡ２」、「ＡＬ＿ＰＡ３」、および「ＡＬ＿ＰＡ４」として表されたアービトレーテッドループ物理アドレス（「ＡＬ＿ＰＡ」）を関連づけられる。しかし、注意すべきは、現在のＦＣアービトレーテッドループディスクアレイ実施形態、たとえば図８Ａ〜図８Ｄを参照して説明された実施形態とは異なり、ノードを関連づけられる累積ノード遅延が存在しないことである。なぜなら、各々のノードは、図９で示されるように、ポイントツーポイント接続を介してストレージ・シェルフ・ルータの相補的ＳＡＴＡポートに相互接続されるからである。したがって、ディスクアレイコントローラは、ディスクドライブを関連づけられたＦＣアドレスを介して、特定のディスクドライブ内の特定の論理ブロックにアクセスすることができる。所与のディスクドライブは、或る場合には、論理装置（「ＬＵＮ」）インタフェースを提供することができる。その場合、論理ブロックアドレス空間は別々の論理ブロックアドレス空間へ区分され、各々の論理ブロックアドレス空間は異なったＬＵＮを関連づけられる。しかし、現在の説明のためには、そのような複雑なレベルまで問題にする必要はない。
【００７８】
図１６Ｂは、ストレージ・シェルフ・ルータを介してＦＣアービトレーテッドループへ相互接続された図１６Ａの４つのディスクドライブを含むストレージ・シェルフの第１の可能なインタフェースを示す。この第１のインタフェースにおいて、各々のディスクドライブは、別々のＦＣノードアドレスを関連づけられたままである。各々のディスクドライブは、単一の論理ブロックアドレス空間を含む単一の論理装置と考えられる。このインタフェースは、今後は、本発明の１つの実施形態を部分的に表す１つ以上のストレージ・シェルフ・ルータを含むストレージ・シェルフの「トランスペアレントモード」と呼ばれる。
【００７９】
ストレージ・シェルフによって提供される第２の可能なインタフェースは、図１６Ｃで示される。この場合、４つの全てのディスクドライブは、単一のＦＣアービトレーテッドループノードアドレス「ＡＬ＿ＰＡ１」を関連づけられる。各々のディスクドライブは異なった論理装置として考えられ、ディスクドライブ１６０２は論理装置０と考えられ、ディスクドライブ１６０３は論理装置１と考えられ、ディスクドライブ１６０４は論理装置２と考えられ、ディスクドライブ１６０５は論理装置３と考えられる。したがって、ディスクアレイコントローラは、単一のＦＣノードアドレス、論理装置番号、および論理装置内の論理ブロックアドレスを介して、ストレージ・シェルフ内の４つのディスクドライブの論理ブロックにアクセスすることができる。
【００８０】
仮説のストレージ・シェルフにおける４つのディスクドライブへの代替インタフェースは、図１６Ｄで示される。この場合、４つの全てのディスクドライブは、単一の論理装置の中に含まれると考えられる。４つのディスクドライブ内の各々の論理ブロックは、一意の論理ブロックアドレスを割り当てられる。したがって、ディスクドライブ１６０２内の論理ブロック０〜１９は、論理ブロックアドレス０〜１９を関連づけられたままであり、ディスクドライブ１６０３内の論理ブロック０〜１９は、今度は論理ブロックアドレス２０〜３９を関連づけられる。このインタフェースは、今後は、図１６Ｃで示される純粋のＬＵＮベースインタフェースに対して、純粋の論理ブロックアドレスインタフェースと呼ばれる。
【００８１】
図１６Ｅは、４つのディスクドライブを含む仮説のストレージ・シェルフによって提供される他の可能な論理インタフェースを示す。この場合、２つのディスクドライブ１６０２および１６０３の第１のセットは、第１のＦＣノードアドレス「ＡＬ＿ＰＡ１」を関連づけられ、２つのディスクドライブ１６０２および１６０３は、２つの異なったＬＵＮ番号、即ち、それぞれＬＵＮ０およびＬＵＮ１を関連づけられる。同様に、ディスクドライブの第２のペア１６０４および１６０５は、共に第２のＦＣノードアドレス「ＡＬ＿ＰＡ２」を関連づけられ、ディスクドライブの第２のペアの各々は異なったＬＵＮ番号を関連づけられる。
【００８２】
図１６Ｆは、更に他の可能なインタフェースを示す。この場合、第１の２つのディスクドライブ１６０２および１６０３は、第１のＦＣノードアドレスを関連づけられ、第２の２つのディスクドライブ１６０４および１６０５は、第２のＦＣノードアドレスを関連づけられる。しかし、この場合、各々のグループ内の２つのディスクドライブは、共に単一の論理装置に所属するものと考えられ、２つのディスクドライブ内の論理ブロックは、単一の論理ブロックアドレス空間を構成する論理ブロックアドレスを関連づけられる。
【００８３】
最後のインタフェースは図１６Ｇに示される。この場合、前の２つのインタフェースと同じように、単一のＦＣノードアドレスを関連づけられたディスクドライブの各々のペアは、単一の論理ブロックアドレス空間を有する単一のＬＵＮを構成するものと考えられる。しかし、このインタフェースでは、論理ブロックアドレスは２つのディスクドライブの間で交替する。たとえば、ディスクドライブ１６０２および１６０３のペアの場合、論理ブロックアドレス０は第１の論理ブロック１６１０および第１のディスクドライブ１６０２を関連づけられ、論理ブロックアドレス１は第２のディスクドライブ１６０３内の第１のブロック１６１２を関連づけられる。
【００８４】
図１６Ａ〜図１６Ｇは、本発明の１つの実施形態を部分的に表すストレージ・シェルフ・ルータによってディスクアレイコントローラへ提供される多くの可能なインタフェースの中の幾つかを示すだけである。ディスクドライブおよびディスクドライブ内の物理ブロックへのＬＵＮおよび論理ブロックアドレスのマッピングであって、アルゴリズムで記述することができるマッピングは、どのようなものでもストレージ・シェルフ内のストレージ・シェルフ・ルータによって実現可能である。一般的に、これらの多くの論理インタフェースの異なったタイプは、次の４つの一般的なインタフェースのタイプへ区分することができる。（１）各々のディスクドライブが、局所的に一意の別々のＦＣノードアドレスを関連づけられるトランスペアレントモード、（２）各々のディスクドライブが、異なったＬＵＮ番号を関連づけられ、全てのディスクドライブが、単一のＦＣノードアドレスを介してアクセスされる純粋ＬＵＮモード、（３）全てのディスクドライブが、単一のＦＣノードアドレスおよび単一の論理装置番号を関連づけられる純粋論理ブロックアドレシングモード、および（４）ＬＵＮおよび論理ブロックアドレス空間区分の様々な異なる組み合わせを使用する混合ＬＵＮおよび論理ブロックアドレシングモード。
【００８５】
ストレージ・シェルフ・ルータの実施形態
図１７Ａは、本発明の１つの実施形態を表すストレージ・シェルフ・ルータ内のコマンドおよびデータフローの高レベル概略図である。ストレージ・シェルフ・ルータは、１つ以上のＦＣアービトレーテッドループまたは他のＦＣファブリック１７０２〜１７０３を介して、他のストレージ・シェルフ・ルータおよびディスクアレイコントローラとデータおよびコマンドのシリアルストリームを交換する。データのシリアルストリームはＦＣポートレイヤ１７０４に入り、低レベルのＦＣプロトコルレベルで処理される。データストリームから抽出されたＦＣフレームは、先入れ先出しバッファ（「ＦＩＦＯ」）１７０６〜１７０７へ入力される。ＦＣフレームの初期部分が利用可能になると、ＦＣフレームの後の部分がＦＩＦＯへ入力されていても、初期部分がルーティングレイヤ１７０８およびＦＣＰレイヤ１７１０によって処理される。したがって、ＦＣフレームは、バッファの中で完全にアセンブルされて内部メモリバッファから内部メモリバッファへコピーされる必要なしに、大きな時間および計算的効率を伴って処理される。
【００８６】
ルーティングレイヤ１７０８は、ＦＣフレームが、ストレージルータまたはリモートストレージルータ、またはＦＣアービトレーテッドループまたは他のＦＣファブリックによってストレージルータに相互接続された他のエンティティへ方向づけられているかどうかを、ＦＣフレームヘッダから決定する責任を有する。リモートエンティティへ方向づけられたフレームは、ルーティングレイヤによって、ＦＣアービトレーテッドループまたは他のＦＣファブリックを介してリモートエンティティへ送信されるように、ＦＣポートレイヤ内の出力ＦＩＦＯ１７１２〜１７１３へ方向づけられる。ストレージルータへ方向づけられたフレームは、ルーティングレイヤによってＦＣＰレイヤへ方向づけられ、状態機械がストレージ・シェルフ・ルータ内のディスポジションを制御する。
【００８７】
ストレージ・シェルフ・ルータによってコンテキストが確立された現在アクティブのＦＣ交換を関連づけられたＦＣＰ＿ＤＡＴＡフレームは、高度にストリームラインされた効率的方法で処理される。これらのフレームからのデータは、ＦＣＰレイヤによってＧＳＭＳ１７１８内のバーチャルキュー１７１４〜１７１６へ方向づけられ、そこからデータはＳＡＴＡポートレイヤ１７２２内の入力バッファ１７２０へ転送される。ＳＡＴＡポートレイヤから、データは、ＳＡＴＡパケットまたはデータフレーム情報構造（ＤＡＴＡ  ＦＩＳ）形式で、多くのＳＡＴＡリンクの１つ１７２４を介して、ストレージ・シェルフ・ルータに相互接続された複数のＳＡＴＡディスクドライブの１つ１７２６へ送信される。
【００８８】
ＦＣＰ＿ＣＭＮＤフレームは、ＦＣＰレイヤによって異なった方式で処理される。これらのフレームは、ＦＣＰレイヤによって、ＦＣＰレイヤとストレージ・シェルフ・ルータ内のＣＰＵとの間で共有されるメモリ１７２８へ転送される。ＣＰＵは、フレームの中に含まれたコマンドを処理するためフレームにアクセスする。たとえば、到着する書き込みコマンドが受け取られたとき、ストレージ・シェルフ・ルータのＣＰＵは、ファームウェアルーチンの制御のもとで、コマンドがどのＳＡＴＡドライブへ方向づけられているかを決定し、共有メモリに記憶されるコンテキストを書き込み動作のために確立する必要がある。ＣＰＵは、データを受け取るＳＡＴＡドライブを準備し、イニシエータ、即ち一般的にはディスクアレイコントローラへ、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹフレームを戻す必要がある。ＣＰＵによって準備され、共有メモリ内に記憶されたコンテキストは、ＦＣＰレイヤがＣＰＵの介入なしに到着ＦＣＰ＿ＤＡＴＡメッセージを処理して、書き込み動作をストリームラインすることを可能にする。
【００８９】
ストレージ・シェルフ・ルータ内の様々な論理レイヤは、一般的に、逆方向で対称に機能する。ＡＴＡコマンドへの応答は、ＳＡＴＡポートレイヤ１７２２によって、ＳＡＴＡディスクドライブからＳＡＴＡリンクを介して受け取られる。次に、ＳＡＴＡポートレイヤは、適切な信号およびメッセージを生成し、必要なときには、ＣＰＵに、ファームウェア制御のもとで適切なアクションおよび応答を実行させる。データがＳＡＴＡディスクからリモートエンティティへ転送されるとき、読み出しコマンドに応答して、ＣＰＵは、共有メモリに記憶されてＦＣＰレイヤによって処理される適切なキューエントリを生成する。ＦＣＰレイヤ内の状態機械は、共有メモリからＦＣフレームヘッダテンプレートを取得し、読み出しコマンドを関連づけられたバーチャルキュー１７３２〜１７３３からのデータ転送を手配し、ＦＣフレームヘッダを準備し、ＦＣフレームヘッダおよびＳＡＴＡポートレイヤから受け取られたデータを、バーチャルキューを介してＦＣポートレイヤの出力ＦＩＦＯ１７１２および１７１３へ転送するように調整し、要求するリモートエンティティ、即ち一般的にはディスクアレイコントローラへ送信する。
【００９０】
図１７Ａは、ストレージ・シェルフ・ルータにおけるデータおよび制御フローの簡単な概要を提供することを意図したものである。ストレージ・シェルフ・ルータの内部コンポーネントを正確に描写することは意図されず、むしろＦＣＰ＿ＣＭＮＤおよびＦＣＰ＿ＤＡＴＡフレームの受け取りおよび処理に関して論理レイヤの間の相互関係を示すことが意図される。たとえば、複数のバーチャルキューが図１７ＡのＧＳＭＳレイヤの中に示される。しかし、バーチャルキューは、一般的に静的エンティティではなく、ストレージ・シェルフ・ルータの現在の状態に依存して、必要に応じてダイナミックに割り振られる。図１７Ａは、単一のＳＡＴＡシリアル接続１７２４およびＳＡＴＡディスクドライブ１７２６だけを示すが、前述したように、各々のストレージルータは、１つの実施形態において、１６個の異なったＳＡＴＡディスクドライブへ接続されてよい。
【００９１】
図１７Ｂ〜図１７Ｆは、本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通るデータおよび制御情報のフローの詳細を提供する。図１７Ｂ〜図１７Ｆの説明において、簡潔を関心事として、同じコンポーネントを含む様々なペアで、双方のコンポーネントを具体的に参照することはしない。図面は、コンポーネントの完全な図解リストではなく、データおよび制御情報がストレージ・シェルフ・ルータの様々なコンポーネントをどのように移動するかを示すことが意図される。更に、様々なコンポーネントの数は、ストレージ・シェルフ・ルータの様々な異なる実施形態に依存して変更することができる。図１７Ｂは、ストレージ・シェルフ・ルータ内のＦＣＰ＿ＤＡＴＡフレームの初期フローを示す。ＦＣＰ＿ＤＡＴＡフレームは、最初にＦＣポート１７３６によって受け取られ、入力ＦＩＦＯ１７３７へ書き込まれ、そこから、十分なヘッダ情報が入力ＦＩＦＯで利用可能になると、直ちにルータ論理１７３８によって処理を開始されてよい。処理は、ＦＣＰ＿ＤＡＴＡフレームの残りが入力ＦＩＦＯへ書き込まれている間でも開始される。ＦＣポートは、新しいフレームの到着をルータ論理へ知らせて、ルータ論理がフレームの処理を開始できるようにする。ルータ論理１７３８は、ルーティングテーブル１７３９を使用して、フレームがストレージ・シェルフ・ルータへ方向づけられているかどうか、またはフレームがリモートエンティティへ方向づけられているかどうかを決定する。もしＦＣＰ＿ＤＡＴＡフレームがリモートエンティティへ方向づけられていれば、フレームは、リモートエンティティへ送信するためルータ論理によってＦＣポートへ方向づけられる。ルータは、更に、ＦＣＰ＿ＤＡＴＡフレームが所属するＦＣ交換のためにコンテキストがＣＰＵによって作成されて共有メモリへ記憶されたかどうかを決定するように、コンテキスト論理１７４０とインタフェースする。もしフレームのためのコンテキストが発見されるならば、ルータ論理は、フレームをＦＣＰインバウンドシーケンスマネージャ（「ＦＩＳＭ」）状態機械１７４１へ方向づける。もしコンテキストが発見されなければ、フレームは共有メモリへ方向づけられ、そこからＣＰＵによって、ファームウェア制御のもとで、誤って受け取られたフレームとして抽出および処理される。
【００９２】
ＦＩＳＭ１７４１は、ＦＣＰデータムーバ論理モジュール（「ＦＤＭ」）１７４２からＧＳＭＳチャネルを要求する。ＦＤＭ１７４２は、ＧＳＭＳ１７４４内のバーチャルキュー（「ＶＱ」）１７４３にアクセスし、ＦＩＳＭを介してコンテキスト論理からＶＱを特徴づけるパラメータを受け取る。次に、ＦＤＭはフレーム内に含まれるデータをＶＱへ書き込み、そこからデータは、ＳＡＴＡディスクドライブへ送信されるように、ＦＤＭとＶＱへのアクセスを共有するＳＡＴＡポートによって引き出される。注意すべきは、データがＶＱへ書き込まれ始めると、直ちにＳＡＴＡポートはデータをディスクドライブへ転送し始めてよいことである。ＳＡＴＡポートは、データをディスクドライブへ送信し始める前に、データの全てが書き込まれるのを待つ必要はない。一度、データ転送動作を関連づけられたデータの全てがＶＱへ書き込まれると、ＦＤＭは、データが転送されたことをコンテキストマネージャへ知らせ、コンテキストマネージャは、完了キューマネージャ（「ＣＱＭ」）１７４５が共有メモリ１７４７内の完了キュー１７４６へ完了メッセージ（「ＣＭＳＧ」）をキューにすることを要求する。ＣＱＭは、ＣＰＵデータムーバ（「ＣＰＵＤＭ」）１７４８がＣＭＳＧを共有メモリへ書き込むことを要求する。
【００９３】
図１７Ｃは、ＦＣ＿ＣＭＮＤフレーム、およびストレージ・シェルフ・ルータ内の誤りを関連づけられたフレームのフローを示す。前述したように、フレームはＦＣポート１７３６によって受け取られ、ルータ論理１７３８によって、ルーティングテーブル１７３９を参照してストレージ・シェルフ・ルータ内の様々なターゲットコンポーネントへ方向づけられる。ＦＣＰ＿ＣＭＮＤフレームおよび誤りとして受け取られたＦＣフレームは、ＣＰＵによる抽出および処理のために共有メモリ１７４７へルーティングされる。ルーティングロジック１７３８は、フレームバッファキューマネージャ（「ＦＢＱＭ」）１７６０がフレームを共有メモリ１７４７へ書き込むように要求を出す。ＦＢＱＭは、共有メモリ１７５０に記憶されたバッファポインタをＣＰＵＤＭ１７４８から受け取り、共有メモリ１７４７内のフレームバッファ１７４９へフレームを書き込む。注意すべきは、フレームがエラー処理のために共有メモリへ転送される幾つかの場合には、大きなフレームを収容するか複数のフレームを収容するため複数のフレームバッファが必要になる可能性があることである。最後に、ルータは、ＣＱＭ１７４５がＣＭＳＧをＣＱ１７４６へ書き込むように要求する。ＣＰＵは、最終的にＣＭＳＧを処理し、ＣＭＳＧ内に含まれる情報を使用してフレームバッファ１７４９に記憶されたフレームにアクセスする。
【００９４】
図１７Ｄは、１つのＦＣポートから他のＦＣポートへのＦＣフレームのフローを示す。第１のＦＣポート１７３６内の入力ＦＩＦＯ１７３７を介して受け取られたフレームが、ストレージルータへ方向づけられず、リモートエンティティへ方向づけられていることをルータ論理１７３６が決定する場合、ルータ論理は第２のＦＣポート１７５２内の出力ＦＩＦＯ１７５１へフレームを書き込み、フレームをリモートエンティティへ送信する。
【００９５】
図１７Ｅは、ストレージ・シェルフ・ルータ内のＣＰＵからＳファブリック、ＦＣアービトレーテッドループ、または他のＦＣファブリックへのデータおよび制御情報のフローを示す。ＣＰＵは、ファームウェアの制御のもとで、共有メモリ１７４７内の共有メモリキュー「ＳＲＱ」の中にエントリを記憶し、ＳＲＱエントリ（「ＳＲＥ」）の存在を示すため、ＳＲＱを関連づけられたＳＲＱプロデューサインデックスを更新する。ＳＲＥは、ＣＰＵが、ＦＣアービトレーテッドループまたは他のＦＣファブリックへ送信するために作成したシーケンスまたはフレーム、およびヘッダ並びにバッファへのポインタを記述する。ＳＲＱマネージャモジュール（「ＳＲＱＭ」）１７５５は、ＳＲＱプロデューサインデックスの更新を検出し、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７から次のＳＲＥをフェッチする。ＳＲＱＭは、フェッチされたＳＲＥをＳＲＱアービトレーションモジュール（「ＳＲＱ＿ＡＲＢ」）１７５６へ渡し、ＳＲＱ＿ＡＲＢ１７５６はアービトレーションスキーム、たとえばラウンドロビンスキームを実現して、複数のＣＰＵによって生成されて複数のＳＲＱに記憶されたＳＲＥの処理を確実にする。ＳＲＱ＿ＡＲＢは、次のＳＲＥを受け取るＳＲＱＭを選択し、ＦＣＰアウトバウンドシーケンスマネージャ（「ＦＯＳＭ」）状態機械１７５７へＳＲＥを渡す。ＦＯＳＭはＳＲＥを処理し、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７からＦＣヘッダテンプレートおよびフレームペイロードをフェッチする。ＦＯＳＭは、共有メモリからＣＰＵＤＭを介するＦＣヘッダテンプレートおよびフレームペイロードを使用してＦＣフレームを構成し、それをＦＣポート１７３６内の出力ＦＩＦＯ１７５８へ書き込む。ＦＣフレームは、出力ＦＩＦＯ１７５８からＦＣアービトレーテッドループまたは他のＦＣファブリックへ送信される。フレームがＦＣポートへ転送されたとき、ＦＯＳＭは、ＣＭＳＧを共有メモリへ書き込むようにＣＱＭ１７４５へ命令する。
【００９６】
図１７Ｆは、ＧＳＭＳおよび共有メモリからＦＣアービトレーテッドループまたは他のＦＣファブリックへのデータおよび制御情報のフローを示す。このプロセスにおけるステップの多くは、図１７Ｅを参照して説明したものと類似しており、簡潔を関心事として、再び説明しない。一般的に、ＦＣフレームヘッダ内に記憶されたＦＣＰ＿ＤＡＴＡフレームの制御部分は、図１７Ｅを参照して説明した他のタイプのフレームの生成と同じような方法で生成される。しかし、ＦＣＰ＿ＤＡＴＡフレームの場合、ＧＳＭＳを介してＳＡＴＡポートから取得されたデータを制御情報と結合するため、プロセスをステージする必要がある。ＦＯＳＭ１７５７が、ＦＣＰ＿ＤＡＴＡフレームを記述するＳＲＥを受け取るとき、ＦＯＳＭはＦＣＰ＿ＤＡＴＡフレームヘッダを構成し、ＦＤＭ１７４２を通るＧＳＭＳチャネルを介して、フレームへ組み込まれるデータを要求しなければならない。ＦＤＭ１７４２は、ＧＳＭＳ１７４４内のＶＱ１７５９を介してデータを取得する。一度、データおよび制御情報がＦＯＳＭによってＦＣＰ＿ＤＡＴＡフレームへ結合されると、フレームはＦＣポートへ渡され、ＦＣＰ＿ＤＡＴＡフレームがデータ転送動作の完了を表すとき、ＣＭＳＧメッセージは、前述したようにＣＱへのキューにされる。
【００９７】
図１８は、本発明の１つの実施形態を表すストレージ・シェルフ・ルータの論理コンポーネントの詳細なブロック図を示す。論理コンポーネントは、２つのＦＣポート１８０２および１８０４、ルーティングレイヤ１８０６、ＦＣＰレイヤ１８０８、ＧＳＭＳ１８１０、ＳＡＴＡポートレイヤ１８１２、およびＣＰＵコンプレックスを含む。ＣＰＵコンプレックスは、図１６および図１７に関して前に説明したように、２つのＣＰＵ１８１４および１８１６を含む。図１８の太い矢印、たとえば矢印１８１８で示される通信パスおよびリンクは、ストレージ・シェルフ・ルータ内のパフォーマンスクリティカルな通信路を表す。パフォーマンスクリティカルな通信路とは、ＦＣフレームの受信と出力、受信されたフレームを処理して、ＳＡＴＡポートによってＳＡＴＡディスクドライブへ送信される適切なＡＴＡコマンドを生成すること、受信されたＦＣＰ＿ＤＡＴＡフレームからＧＳＭＳを介してＳＡＴＡポートへデータをファネルすること、ＦＣポートを介してＦＣアービトレーテッドループまたは他のＦＣファブリックへ送信するためのＦＣフレームを生成すること、およびＧＳＭＳを介してＳＡＴＡポートから取得されたデータを出発ＦＣＰ＿ＤＡＴＡフレームへ組み込むことに関連した通信路である。パフォーマンスクリティカルでない通信路は、ＣＰＵ１８１４および１８１６をストレージ・シェルフ・ルータの様々な論理コンポーネントと直接相互接続する様々なプログラムドＩ／Ｏインタフェースを含む。たとえば、中央アービトレーションスイッチ１８２０とＧＳＭＳ、ＳＬポートレイヤ、および内部バスブリッジ１８２２との間にＰＩＯインタフェースが存在し、内部バスブリッジ１８２２は、１７個のＵＡＲＴポート１８２４、Ｉ２Ｃバスインタフェース１８２６、汎用ＰＩＯインタフェース（「ＧＰＩＯ」）１８２８、タイマコンポーネント１８３０、および幾つかの割り込みコントローラ１８３２と相互接続される。これらのＰＩＯインタフェースは、図１８では太くない双頭矢印１８３４〜１８３６として示される。更に、ＣＰＵ１８１４および１８１６とフラッシュメモリコントローラ１８４０との間に、ＰＩＯインタフェース１８３８が存在し、フラッシュメモリコントローラ１８４０は、外部フラッシュメモリ１８４２へインタフェースする。外部フラッシュメモリは、特殊構成管理情報およびファームウェアイメージを記憶するために使用される。ＣＰＵは、メモリアクセスインタフェース１８４４を介して内部ＳＲＡＭコントローラ１８４６へ接続され、内部ＳＲＡＭコントローラ１８４６はＳＲＡＭメモリ１８４８とインタフェースする。ＳＲＡＭメモリ１８４８は、ストレージ・シェルフ・ルータの内部およびそれらの間でフェイルオーバを命令するファームウェアルーチンを含む非パフォーマンスパスコードおよびデータを記憶する。ＣＰＵ１８１４および１８１６は、プロセッサデータ空間としても使用される２つのデータ緊密結合メモリ１８５０および１８５２に含まれる共有メモリキューを介して、ＦＣＰレイヤ１８０８およびＳＡＴＡポートレイヤ１８１２と相互接続される。各々のＣＰＵは、更に、ファームウェア命令１８５４および１８５６を記憶する別々のメモリと相互接続される。最後に、双方のＣＰＵは、単一のＰＩＯチャネル１８５８を介して、双方のＦＣポート１８０２および１８０４、ルーティングレイヤ１８０６、およびＦＣＰレイヤ１８０８に接続される。
【００９８】
図１９は、ＦＣポートレイヤの詳細な図を示す。ＦＣポートレイヤは２つのＦＣポート１９０２および１９０４を含み、これらの各々は入力ＦＩＦＯ１９０６および１９０８並びに２つの出力ＦＩＦＯ１９１０〜１９１１および１９１２〜１９１３を含む。ＦＣポートは、物理およびリンクレイヤ論理１９１４〜１９１７を含み、これらは一緒になって、ＦＣアービトレーテッドループまたは他のＦＣファブリックからの到着シリアルデータを、入力ＦＩＦＯへ渡されるＦＣフレームへ変換し、また出力ＦＩＦＯへ書き込まれる出発ＦＣフレームを、ＦＣアービトレーテッドループまたは他のＦＣファブリックへ送信されるシリアルデータへ変換する。
【００９９】
図２０は、ルーティングレイヤの詳細なブロック図を示す。図２０で示されるように、ルーティングレイヤ２００２は、ＦＣポートの各々を処理する別々のルーティングロジック２００４および２００６を含む。ルーティングレイヤは、更に、到着するＦＣフレームを適切なキューへルーティングするために必要なルーティング決定を容易にするため、本質的に超高速アクセスのメモリであるレジスタに記憶されたルーティングテーブル２００８を含む。注意すべきは、ＦＣデータフレームが、前述したように、ＦＩＳＭ２０１０および２０１２の制御のもとで、ルータによってＦＤＭ２０１１を介してＧＳＭＳレイヤ２０１５へ比較的直接にルーティングされ得ることである。ファームウェア処理を必要とするフレームは、ＦＢＱＭ２０１４および２０１６の制御のもとで、ルーティングレイヤによってＣＰＵＤＭ２０１７および２０１８を介して入力キューへルーティングされる。
【０１００】
図２１は、ＦＣＰレイヤの詳細なブロック図を示す。図２１に示されるこれらの内部コンポーネントの多くは前に説明されたか、以下のセクションで詳細に説明される。注意すべきは、一般的に、コンポーネントの重複したセットが存在することである。これらのコンポーネントは、一方では２つのＦＣポート１９０２および１９０４を処理し、他方では２つのＣＰＵ２１０２および２１０４を処理するように配列される。出発するフレームを生成するために必要な情報は、ファームウェア制御のもとでＣＰＵによって生成され、共有メモリ２１０６および２１０８に記憶される。共有メモリ２１０６および２１０８の各々は、主として単一のＣＰＵを関連づけられる。各々のメモリに記憶された情報は、送信のために２つのＦＣポート１９０２および１９０４へ渡されるＦＣフレームを生成するため、ＳＲＱＭ２１１０および２１１２、ＦＯＳＭ２１１４および２１１６、ＳＲＱ＿ＡＲＢＳ２１１８および２１２０、ＣＰＵＤＭ２１２２および２１２４、並びに他のコンポーネントの別々のセットによって処理される。各々のＦＣポートに到着するフレームは、別々のルータモジュール２００４および２００６、ＦＩＳＭ２０１０および２０１２、並びに他のコンポーネントによって処理される。
【０１０１】
図２２は、ＳＡＴＡポートレイヤの詳細なブロック図を示す。ＳＡＴＡポートレイヤの主な目的は、ＳＡＴＡポートレイヤ、ＧＳＭＳ、およびＦＣＰレイヤの間で共有されるタスクであるバーチャルキュー管理、およびＧＳＭＳ並びに個々のＳＡＴＡポートを介するＦＣＰレイヤとのデータ交換である。
【０１０２】
図２３は、ＳＡＴＡポートの詳細なブロック図を示す。ＳＡＴＡポートは物理レイヤ２３０２、リンクレイヤ２３０４、およびトランスポートレイヤ２３０６を含み、これらは一緒になってＳＡＴＡインタフェースを実現する。トランスポートレイヤは入力バッファ２３０８および出力バッファ２３１０を含み、これらのバッファは、相互接続されたＳＡＴＡディスクから到着するデータ転送およびＡＴＡメッセージ情報の一部分を記憶し、またＧＳＭＳレイヤからのデータ転送およびインタフェースからＣＰＵおよび共有メモリへ渡されるＡＴＡコマンドの一部分を記憶する。ＳＡＴＡポートに関する追加の詳細は、他のセクションで説明される。
【０１０３】
ストレージ・シェルフ・ルータのルーティングレイヤ
図２４は、４ストレージ・シェルフ・ルータ高可用性ストレージ・シェルフ内のルーティングトポロジの観念的表現を示す。この観念的表現は、以下の説明の有用なモデルおよびテンプレートである。図２４で示されるように、各々のストレージ・シェルフ・ルータ２４０２〜２４０５は、１次リンクを介してｎ個のディスクドライブ、たとえばディスクドライブ２４０６へ接続される。前述したように、各々のストレージ・シェルフ・ルータは、２次リンクを介してｎ個のディスクドライブの隣接セットへ接続される。もっとも２次リンクは、簡単にするため、図２４には示されない。１つのストレージ・シェルフ・ルータ２４０２は、第１のＦＣアービトレーテッドループまたはファブリックＸ２４０８と呼ばれる他のＦＣファブリックに関して、ストレージ・シェルフ・ルータの全体のセットのためのエンドポイントまたはＦＣノード接続点として働く。異なったストレージ・シェルフ・ルータ２４０５は、第２のＦＣアービトレーテッドループまたはファブリックＹと呼ばれる他のＦＣファブリック２４１０へのエンドポイントまたはＦＣノード接続として働く。各々のストレージ・シェルフ・ルータは、２つのＦＣポート、即ち、ＸポートおよびＹポート、たとえばストレージ・シェルフ２４０２内のＸポート２４１２およびＹポート２４１４を含む。４つのストレージ・シェルフ・ルータは、内部ポイントツーポイントＦＣリンク２４１６、２４１８、および２４２０に相互接続される。特定のストレージ・シェルフ・ルータ、たとえばストレージ・シェルフ・ルータ２４０４において、ファブリックＸから到着するＦＣフレームは、Ｘポート２４２２上で受け取られ、ストレージ・シェルフ・ルータ２４０４によってファブリックＸへ出力されるＦＣフレームは、Ｘポート２４２２を介して出力される。同様に、到着するＦＣフレームおよび出発するＦＣフレームが、それぞれＹファブリックから受け取られると共にＹファブリックへ方向づけられ、ＦＣポート２４２４を介して入力および出力される。注意すべきは、ＸおよびＹファブリックへの特定のＦＣポートの割り当てが構成可能であり、以下の例および例を参照する説明において、ＦＣポート０はＸファブリックポートであり、ＦＣポート１はＹポートであると仮定されるが、反対の割り当てが構成されてよいことである。
【０１０４】
Ｓファブリック内で使用されて「Ｓビット」と呼ばれるＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内の２ビット予約サブフィールドによって識別されるＳファブリック管理フレームは、ＸポートまたはＹポートおよびポイントツーポイント内部ＦＣリンクを介して、ストレージ・シェルフ・ルータ間で方向づけられる。各々のストレージ・シェルフ・ルータはルータ番号を割り当てられる。この番号は、ストレージ・シェルフ内で一意であり、管理フレームの中でＦＣフレームヘッダＤ＿ＩＤフィールドの一部分を形成する。ストレージ・シェルフ・ルータは、ＸおよびＹファブリックの１つに関して、厳密に増加する順序で番号を付けられ、ＸおよびＹファブリックの他のものに関して、厳密に減少する順序で番号を付けられる。たとえば、図２４において、ストレージ・シェルフ・ルータ２４０２、２４０３、２４０４、および２４０５は、それぞれルータ番号１、２、３、および４を割り当てられ、したがってＸファブリックに関して厳密に増加または上昇し、Ｙファブリックに関して厳密に減少または下降する。この順序づけは、この後で説明する詳細なフロー制御図で仮定されるが、前述したように、ファブリックとポートとの間の関係、およびポートへの上昇および下降順序は構成可能である。
【０１０５】
図２５は、ディスクアレイの２ストレージ・シェルフ実施形態である２ストレージ・シェルフ・ルータにおけるＸおよびＹのＦＣアービトレーテッドループ相互接続の観念的表現を示す。図２５において、ディスクアレイコントローラ２５０２は、ＦＣアービトレーテッドループＸ２５０４によって各々のストレージ・シェルフ２５０６および２５０８へリンクされ、ＦＣアービトレーテッドループＹ２５１０によって双方のストレージ・シェルフ２５０６および２５０８へリンクされる。図２５において、ストレージ・シェルフ・ルータ２５１２は、ストレージ・シェルフ２５０６のＸファブリックエンドポイントとして働き、ストレージ・シェルフ・ルータ２５１４は、ストレージ・シェルフ２５０８のＸファブリックエンドポイントとして働く。同様に、ストレージ・シェルフ・ルータ２５１６は、ストレージ・シェルフ２５０６のＹファブリックエンドポイントとして働き、ストレージ・シェルフ・ルータ２５１８は、ストレージ・シェルフ２５０８のＹファブリックエンドポイントとして働く。各々の個々のディスクドライブ、たとえばディスクドライブ２５１８は、ＸおよびＹアービトレーテッドループの双方を介するディスクアレイコントローラ２５０２にアクセス可能である。双方のストレージ・シェルフにおいて、ストレージ・シェルフ・ルータは、単一のポイントツーポイントＦＣリンク２５２０および２５２２を介して内部的に相互接続され、その相互接続は、ＸおよびＹファブリックフレームに加えて、内部的に生成され内部的に消費される管理フレームまたはＳファブリックフレームを搬送することができる。ストレージ・シェルフ２５０６の内部ポイントツーポイントＦＣリンクはＳ１ファブリックと呼ばれ、ストレージ・シェルフ・ルータ２５０８の内部ポイントツーポイントＦＣリンクはＳ２ファブリックと呼ばれる。本質的に、内部ポイントツーポイントＦＣリンクはＸファブリック、ＹファブリックのＦＣフレーム、および内部管理フレームを搬送するが、一度、ＸファブリックおよびＹファブリックのフレームがエンドポイントストレージ・シェルフ・ルータを介してストレージ・シェルフ・ルータに入ると、それらは、エンドポイントストレージ・シェルフ・ルータのＦＣポートを介してＸファブリックまたはＹファブリックへ消費またはエクスポートされるまで、Ｓファブリックフレームと考えられる。
【０１０６】
図２６Ａ〜図２６Ｅは、本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介してＦＣフレームを特定のストレージ・シェルフ・ルータまたはリモートエンティティへルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す。ＦＣフレームヘッダは、図３を参照して前に説明された。もちろん、ＦＣヘッダは、ストレージ・シェルフ・ルータに相互接続されるディスクドライブではなくＦＣノードへフレームを方向づけるように設計される。ストレージ・シェルフ・ルータは、単一のＦＣノードを介してＦＣアービトレーテッドループまたは他のＦＣファブリックへインタフェースする。したがって、ＦＣフレームを適切に方向づけるため、ストレージ・シェルフ内でストレージ・シェルフ・ルータおよびＳＡＴＡディスクドライブ構成へＦＣフレームヘッダフィールドをマップすることが必要である。ＦＣフレームヘッダ内の３バイトＤ＿ＩＤフィールドは、ＦＣノードのノードアドレスを表す。ＦＣアービトレーテッドループの場合、Ｄ＿ＩＤの高順位の２バイトは、一般的に非パブリックループとして「０」の値を有し、最低順位バイトは１２７個のノードの１つを指定するアービトレーテッドループ物理アドレス（「ＡＬ＿ＰＡ」）を含む。一般的に、ディスクアレイコントローラのために少なくとも１つのノードアドレスが使用され、ファブリックアービトレーテッドループ（パブリックループ）アドレスのために他のノードアドレスが予約される。３バイトのＳ＿ＩＤフィールドは、フレームが発信されたノードのノードアドレスを含む。一般的に、Ｓ＿ＩＤフィールドはディスクアレイコントローラのノードアドレスである。もっとも、ストレージ・シェルフはＦＣファブリックへ直接相互接続されてよく、その場合、Ｓ＿ＩＤは、ストレージ・シェルフにアクセスする複数のリモートエンティティの完全な２４ビットＦＣファブリックアドレスであってよい。
【０１０７】
図２６Ａで示されるように、ＦＣフレームヘッダ２６０６のＤＦ＿ＣＴＬフィールド２６０４内の２つの予約ビット２６０２は、ストレージ・シェルフ内、または言い換えれば、Ｓファブリック内で、記憶および送信されるフレームについて一種の方向表示または羅針盤２６０８として使用される。下記の表５は、この方向インディケータのエンコーディングを示す。
【表５】
0004690202.tif 000006
【０１０８】
ビットパターン「０１」は、フレームがＸファブリックフレームとしてＳファブリックへ入ったことを示し、ビットパターン「１０」は、フレームがＹファブリックフレームとしてＳファブリックへ入ったことを示し、ビットパターン「１１」は、フレームがＳファブリック管理フレームであることを示す。ＤＦ＿ＣＴＬフィールドのビット１８：１９によって表されるこの方向インディケータ、または内部羅針盤が必要である理由は、Ｓファブリックおよび外部ファブリックフレームの双方が、単一のＦＣポートを介してストレージ・シェルフ・ルータによって受け取られてよいからである。前述したように、ＤＦ＿ＣＴＬフィールドのビット１８：１９は、集合的に「Ｓビット」と呼ばれる。Ｓビットは、エンドポイントストレージ・シェルフ・ルータによってＸファブリックまたはＹファブリックのフレームが受け取られたときにセットされ、エンドポイントストレージ・シェルフ・ルータからＸファブリックまたはＹファブリックへＦＣフレームがエクスポートされる前にクリアされる。ＦＣフレームヘッダのＲ＿ＣＴＬフィールドは、ＦＣフレームのタイプの表示を含む。タイプの表示には、ＦＣＰ＿ＣＭＮＤ、ＦＣＰ＿ＤＡＴＡ、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ、およびＦＣＰ＿ＲＳＰフレームの表示が含まれる。このフィールドは、フレームがどのように処理されるべきかを迅速に決定するためルーティングロジックによって使用される。
【０１０９】
図２６Ｂは、ＦＣＰ＿ＣＭＮＤフレームのルーティングに関連するＦＣフレームヘッダフィールドを示す。Ｄ＿ＩＤフィールド２６１０は、ＦＣフレームを特定のＦＣノードへ方向づけるが、前述したように、ストレージ・シェルフは、トランスペアレントモードで動作しているとき、複数のＦＣノードを含む可能性があり、トランスペアレントモードで動作していないとき、全て単一のＤ＿ＩＤを含むＦＣフレームを散在させる必要がある複数のデータストレージデバイスを含む可能性がある。ストレージ・シェルフ・ルータのルーティングロジックは、本質的に、Ｄ＿ＩＤ、ストレージ・シェルフ、ストレージ・シェルフ・ルータ、および究極的に、ディスクドライブの間の様々なマッピング処理に充てられる。
【０１１０】
ルーティングロジックは、Ｄ＿ＩＤフィールドの値だけから、ＦＣフレームがストレージ・シェルフ・ルータへ方向づけられているかどうかを決定することはできない。Ｄ＿ＩＤが到着ＦＣ＿ＣＭＮＤフレームをストレージ・シェルフ・ルータへ方向づけているかどうかを決定するため、ルーティングロジックは、内部ルーティングテーブル２６１２および後で説明する幾つかのレジスタを調べて、ストレージ・シェルフ・ルータによって管理されるディスクドライブのアドレスをＤ＿ＩＤが表すかどうかを決定する必要がある。したがって、図２６Ｂで示されるように、Ｄ＿ＩＤフィールドは、内部ルーティングテーブル２６１２に関して解釈されて、ストレージ・シェルフ２６１６内の特定のストレージ・シェルフ・ルータおよびストレージ・シェルフ・ルータに相互接続された特定のディスク２６１８を指定する。更に、ルーティングロジックは、後で説明する追加の内部テーブル２６１４を調べて、Ｓ＿ＩＤフィールド２６１１によって指定されたＦＣフレームの送信元が、ストレージ・シェルフ・ルータと一緒に現在ログインされたリモートエンティティであるかどうか、またリモートエンティティが、アドレスされたディスクドライブとの相互接続を識別されるかどうかを決定する。したがって、Ｓ＿ＩＤフィールドは、様々な内部テーブル２６１４に関して解釈されて、ＦＣ＿ＣＭＮＤフレームによって表されたコマンドが実行されるべきであるかどうかを決定する許可スイッチ２６２０として働く。
【０１１１】
図２６Ｃは、ＦＣＰ＿ＤＡＴＡフレームのルーティングに関連したＦＣフレームヘッダフィールドを示す。ストレージ・シェルフ２６１６内の特定のストレージ・シェルフ・ルータおよびストレージ・シェルフ・ルータに相互接続された特定のディスクを指定し、またディスクへのデータ転送を２６２０に許可するため、ＦＣＰ＿ＣＭＮＤフレームのルーティングと同じように、Ｄ＿ＩＤおよびＳ＿ＩＤフィールド２６１０並びに２６１１および内部テーブル２６１２並びに２６１４が使用される。しかし、ＦＣＰ＿ＤＡＴＡフレームは、マルチＦＣＰ＿ＤＡＴＡフレーム書き込みシーケンスの一部分である可能性があるので、一度、ＦＣ＿ＤＡＴＡフレームがストレージ・シェルフ・ルータに対してローカルのディスクへ方向づけられていることをルーティングロジックが決定すると、ストレージ・シェルフ・ルータ内でＦＣＰ＿ＤＡＴＡフレームを方向づけるためＦＣフレームヘッダ２６０６の追加フィールドが使用される。図２６Ｃで示されるように、ＲＸ＿ＩＤフィールド２６２２は、ＦＣＰ＿ＤＡＴＡフレームを関連づけられた書き込みコマンドを指定したＦＣＰ＿ＣＭＮＤフレームの処理中に、ストレージ・シェルフ・ルータによって最初に生成された値を含み、この値は書き込みコマンドのためにコンテキスト２６２４を指定し、コンテキスト２６２４はバーチャルキュー２６２６を指定し、バーチャルキュー２６２６によって、データはＦＣＰレイヤからＧＳＭＳを介してＳＡＴＡポートレイヤへ転送され得る。更に、ＦＣフレームヘッダ２６０６のパラメータフィールド２６２８はデータの相対オフセットを含み、この相対オフセットは、書き込みコマンドによって転送されたデータの順次の全長２６３２におけるＦＣＰ＿ＤＡＴＡフレームに含まれるデータの位置２６３０を示す。コンテキスト２６２４は次のＦＣＰ＿ＤＡＴＡフレームの予想相対オフセットを記憶する。予想相対オフセットを使用して、ＦＣＰ＿ＤＡＴＡフレームが適切な順序にあるかどうかをチェックすることができる。もし記憶された予想相対オフセットがパラメータフィールドの値とマッチすれば、ＦＣＰ＿ＤＡＴＡフレームは順序を外れて受け取られており、エラー処理を呼び出す必要がある。
【０１１２】
図２６Ｄは、内部的に生成された管理フレームのルーティングに関連するＦＣフレームヘッダフィールドを示す。Ｓビット（図２６Ａの２６０２）は、フレームが管理フレームであることを示す。管理フレームの場合、Ｄ＿ＩＤフィールド２６１０の最低順位バイトは、ストレージ・シェルフ内の特定のストレージ・シェルフ・ルータを指定するルータ番号を含む。Ｄ＿ＩＤフィールドに含まれるルータ番号は、この後で説明するレジスタ２６３４内に含まれるローカルルータ番号と比較される。それは、管理フレームがストレージ・シェルフ・ルータ、たとえばストレージ・シェルフ・ルータ２６３６へ方向づけられているかどうか、または管理フレームが、Ｘファブリック関連ＦＣポート２６３８またはＹファブリック関連ＦＣポート２６４０を介してアクセス可能なストレージ・シェルフ内の他のストレージ・シェルフ・ルータへ方向づけられているかどうかを決定するためである。
【０１１３】
最後に、図２６Ｅは、受け取られたＦＣＰ＿ＸＦＥＲ＿ＲＤＹおよびＦＣＰ＿ＲＳＰフレームのルーティングに関連するＦＣフレームヘッダフィールドを示す。ＦＣＰ＿ＸＦＥＲ＿ＲＤＹおよびＦＣＰ＿ＲＳＰフレームの場合、ルーティングロジックは、フレームが、他のストレージ・シェルフ・ルータによってリモートエンティティ、即ち典型的にはディスクアレイコントローラへ方向づけられていること即時に認識する。したがって、ルーティングロジックは、ＦＣフレームヘッダのＲ＿ＣＴＬフィールド２６４２を検査して、フレームをＸファブリックまたはＹファブリックへ戻さなければならないことを決定するだけでよい。
【０１１４】
図２７は、ルーティングロジックによるＦＣフレームのルーティングを容易にするためストレージ・シェルフ・ルータ内で維持される７つの主なルーティングテーブルを示す。これらのテーブルは、内部ルーティングテーブル（「ＩＲＴ」）２７０２、ＸファブリックおよびＹファブリック外部ルーティングテーブル（「ＥＲＴ＿Ｘ」）および（「ＥＲＴ＿Ｙ」）２７０４および２７０６、ＸファブリックおよびＹファブリックイニシエータ／ターゲットテーブル（「ＩＴＴ＿Ｘ」）および（「ＩＴＴ＿Ｙ」）２７０８および２７１０、並びにＸファブリックおよびＹファブリックログインペアテーブル（「ＬＰＴ＿Ｘ」）および（「ＬＴＰ＿Ｙ」）２７１２および２７１４を含む。これら７つのルーティングテーブルの各々は、インデックスおよびデータレジスタ、たとえばインデックスおよびデータレジスタ（「ＩＲＴ＿ＩＮＤＥＸ」）および（「ＩＲＴ＿ＤＡＴＡ」）２７１６および２７１８を関連づけられる。テーブルの内容はＣＰＵからアクセス可能である。そのアクセスは、テーブル内の特定のフィールドを示す値をインデックスレジスタの中へ書き込み、データレジスタからフィールドの内容を読み出すか、データレジスタの中へフィールドの新しい内容を書き込むことによって行われる。更に、３つのレジスタ「ＳＦＡＲ」２７２０、「ＸＦＡＲ」２７２２、および「ＹＦＡＲ」２７２４が存在し、これらのレジスタは、ルータ番号、およびＸおよびＹファブリックに関してストレージ・シェルフ・ルータドレスに対応するＤ＿ＩＤの高位２バイトを記憶するために使用される。これによって、ＩＲＴ、ＥＲＴ＿Ｘ、およびＥＲＴ＿Ｙテーブルがコンパクトになり、これらのテーブルはＤ＿ＩＤの低順位バイトを記憶するだけでよい。
【０１１５】
ＩＲＴテーブル２７０２は、ストレージ・シェルフ・ルータに接続された各々のディスクドライブ、言い換えれば、各々のローカルディスクドライブについて１つの行を含む。行は、ディスクドライブへ方向づけられたフレームのＤ＿ＩＤフィールドの低順位バイトに含まれるディスクドライブへ割り当てられたＡＬ＿ＰＡ、ディスクドライブのＬＵＮ番号、ディスクドライブに含まれる論理ブロックアドレスの範囲、２つのＣＰＵのいずれがディスクドライブへ方向づけられたＩ／Ｏを管理するかを示すＣＰＵフィールド、および行がテーブル内の有効エントリを表すかどうかを示す有効ビットを含む。有効ビットは、最大可能数よりも少ないディスクドライブがストレージ・シェルフ・ルータへ接続されているときに便利である。
【０１１６】
ＥＲＴ＿ＸおよびＥＲＴ＿Ｙテーブル２７０４および２７０６は、ストレージ・シェルフ・ルータに対してローカルでなくストレージ・シェルフに対してローカルであるディスクドライブをアドレスする有効Ｄ＿ＩＤの低順位バイトを含む。これらのテーブルは、この後で説明するように、不必要な内部ＦＣフレームの転送を短絡するために使用可能である。
【０１１７】
ＸファブリックおよびＹファブリックＩＴＴテーブル２７０８および２７１０は、ストレージ・シェルフ・ルータと一緒に現在ログインされてストレージ・シェルフ・ルータおよびストレージ・シェルフ・ルータへ相互接続されたディスクドライブとのＦＣ交換をイニシエートできるリモートＦＣ発信側に対応するフルＳ＿ＩＤを含む。ログインペアテーブル２７１２および２７１４は本質的に散在マトリックスであり、ＦＣＰ交換のために現在ログインされているリモート発信側およびローカルディスクドライブのペアに対応するセルで、ビット値がオンである。したがって、ログインテーブル２７１２および２７１４は、リモートエンティティ、たとえばディスクアレイコントローラと、ストレージ・シェルフ・ルータへ相互接続されたローカルディスクドライブとの間で進行中の相互接続を表す有効ログインの表示を提供する。
【０１１８】
次に、一連の詳細なフロー制御図を参照して、ストレージ・シェルフ・ルータのルーティングレイヤを構成するルーティングロジックを説明する。図２８は、フロー制御図で使用される簡単なルーティングトポロジおよびルーティング行先の用語を提供する。図２９〜図３５は、ルーティングレイヤ論理を説明する一連の階層フロー制御図である。
【０１１９】
図２８で示されるように、ルーティングレイヤ２８０２は、ＦＣポート２８０４および２８０６から到着するＦＣフレームを、ＦＣポートへ直接戻すか、ＣＰＵで実行されているＦＣＰ論理およびファームウェアによって処理されるようにＦＣＰレイヤ２８１０へ転送するか、コンテキストが確立されたデータフレームの場合には、ＧＳＭＳレイヤへ比較的直接に転送することに関係する。ルーティングレイヤは、「Ｆｒｏｍ＿ＦＰ０」および「Ｆｒｏｍ＿ＦＰ１」と示されているようにＦＣポート内の入力ＦＩＦＯ２８１２および２８１４から到着するＦＣフレームを受け取る。ルーティングレイヤは、「Ｔｏ＿ＦＰ０」および「Ｔｏ＿ＦＰ０」と示されているようにＦＩＦＯ２８１６および２８１８の１つへＦＣフレームを書き込むことによって、一般的にフレームが受け取られたポートとは反対のポートであるＦＣポートへ戻すようにＦＣフレームを方向づけることができる。ルーティングレイヤは、「Ｔｏ＿ＧＳＭＳ」と呼ばれるプロセスとして、バーチャルキューを介してＦＣＰ＿ＤＡＴＡフレームをＧＳＭＳレイヤへ比較的直接に転送し、「Ｔｏ＿ＦＣＰ」と呼ばれるプロセスとして、ＦＣフレームをＦＣＰレイヤ２８１０へ転送することができる。ＦＩＦＯからの読み出しと書き込み、ＧＳＭＳバーチャルキューメカニズムを介するデータ転送、およびＣＰＵへの共有メモリインタフェースを介する状態機械媒介転送のプロセスを示す略記表示として、「Ｆｒｏｍ＿ＦＰ０」、「Ｆｒｏｍ＿ＦＰ１」、「Ｔｏ＿ＦＰ０」、「Ｔｏ＿ＦＰ１」、「Ｔｏ＿ＧＳＭＳ」、および「Ｔｏ＿ＦＣＰ」の表示がフロー制御図で使用される。
【０１２０】
図２９は、ルーティングレイヤ論理を表す第１の最高レベルフロー制御図である。ルーティングレイヤ論理は、到着するＦＣフレームを適切の行先へ方向づけるために行われる意思決定のセットとして記述される。機能しているストレージルータにおいて、図２９〜図３５に関して説明されるルーティングロジックは、到着するＦＣフレームが処理されるときに呼び出される。ルーティングロジックは、ストレージ・シェルフ・ルータの状態機械および論理回路の中に存在する。ストレージ・シェルフ・ルータは、記憶転送データコピー型（ｓｔｏｒｅ−ａｎｄ−ｆｏｗａｒｄ，  ｄａｔａ−ｃｏｐｙｉｎｇ  ｔｙｐｅ）の内部データ転送をできるだけ避けるように設計され、フレームがＦＣポートのＦＩＦＯへ入力されているときでも、フレームヘッダ内の情報を使用してフレームをルーティングできるようにストリームライン化される。言い換えれば、ＦＩＦＯから読み出すためフレームヘッダが入手されると、直ちにルーティングロジックが呼び出されてよく、ＦＣポートによる残りのデータの受け取りと並行して、フレームがルーティングされ、フレーム内に含まれる初期データがその行先へ転送されてよい。ストレージ・シェルフ・ルータは、２つのＦＣポートの２つの異なった入力ＦＩＦＯの公平処理を確実にするアービトレーション論理を含み、ＸファブリックおよびＹファブリックの双方から到着するＦＣフレームは、タイムリーに処理され、ＸファブリックもＹファブリックも、不必要なＦＣフレーム処理遅延または枯渇を経験しない。ルーティングロジックは、ＦＣポートによって生成された信号によって呼び出される。この信号は、新しく到着したフレームヘッダがＦＩＦＯで利用可能であることを示す。
【０１２１】
ステップ２９０２において、ルーティングレイヤ論理（「ＲＬＬ」）は、「Ｆｒｏｍ＿ＦＰ０」および「Ｆｒｏｍ＿ＦＰ１」として示されるように、次に到着するＦＣフレームヘッダを、ＦＣポートの入力ＦＩＦＯの１つから読み出す。ステップ２９０４において、ルーティングレイヤ論理は、フレームヘッダを含むＦＣフレームがクラス３のＦＣフレームかどうかを決定する。クラス３のＦＣフレームのみが、ストレージ・シェルフ・ルータの説明された実施形態によってサポートされる。もしＦＣフレームがクラス３のＦＣフレームでなければ、ステップ２９０６で、ＦＣフレームはエラー処理のためにＴｏ＿ＦＣＰとしてＦＣＰレイヤへ方向づけられる。注意すべきは、このフロー制御図および後続のフロー制御図において、フロー矢印を関連づけられた小文字の「ｅ」は、誤り状態を処理するために、フロー矢印によって表されたフローが起こることを示す。ステップ２９０４で決定されるように、もしＦＣフレームがクラス３のＦＣフレームであれば、次にＲＬＬは、ステップ２９０８で、ＦＣフレームを受け取らせたＦＣポートが、Ｓファブリックエンドポイント、または言い換えれば、ＸファブリックまたはＹファブリックノードであるかどうかを決定する。ストレージ・シェルフ・ルータは、構成可能セッティングから、特定のポートが、Ｓファブリックに関するエンドポイント、または言い換えれば、ＸファブリックまたはＹファブリックノードであるかどうかを決定することができる。ＦＣフレームヘッダは、前述したように、送信元ポートのポートアドレスを含む。
【０１２２】
もしＦＣフレームの送信元ポートがＳファブリックエンドポイントであれば、これはＦＣフレームがローカルＳファブリックの外部にあるエンティティから受け取られたことを示し、次にＲＬＬは、ステップ２９１０で、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドでＳビットのいずれかがセットされているかどうかを決定する。もしセットされていれば、誤りが起こっており、ＦＣフレームは、ステップ２９０６におけるエラー処理のために、Ｔｏ＿ＦＣＰとしてＦＣＰレイヤへ方向づけられる。もしセットされていなければ、ステップ２９１２で、適切なＳビットがセットされ、ＦＣフレームがＸファブリックまたはＸ空間またはＹファブリックまたはＹ空間に所属するかどうかが示される。注意すべきは、ストレージ・シェルフ内の相互接続されたストレージ・シェルフ・ルータのセットにおけるストレージ・シェルフ・ルータの位置とは無関係に、２つのＦＣポートの一方がＸファブリックに対応し、２つのＦＣポートの他方がＹファブリックに対応することである。前述したように、ＦＣポートとＸおよびＹファブリックとの間の関連づけは構成可能である。次に、ＲＬＬは、ステップ２９１４で、フレームがＳファブリックフレームであることを示すようにＳビットがセットされているかどうかを決定する。もしセットされていれば、フレームの行先を決定するためステップ２９１６でサブロジック「行先管理（management destination）」が呼び出され、その後で、ステップ２９１６で決定された行先へＦＣフレームを実際にルーティングするため、サブロジック「行先へのルーティング（route to destination）」がステップ２９１８で呼び出される。ステップ２９１４で決定されるように、もしＦＣフレームがＳファブリック管理フレームでなければ、ステップ２９２０で、ＲＬＬは、トランスペアレントモードで現在動作しているかどうかを決定する。トランスペアレントモードは、各々のディスクドライブがそれ自身のＦＣノードアドレスを有するモードとして前に説明された。もしストレージ・シェルフ・ルータがトランスペアレントモードで動作していれば、フレームの行先を決定するためステップ２９２２でサブロジック「トランスペアレント行先（transparent destination）」が呼び出され、次にフレームを行先へ実際にルーティングするため、ステップ２９１８でサブロジック「行先へのルーティング」が呼び出される。そうでなければ、フレームの行先を決定するためステップ２９２４でサブロジック「行先（destination）」が呼び出され、その後で、ステップ２９１８のサブロジック「行先へのルーティング」の呼び出しを介して、フレームはその行先へルーティングされる。
【０１２３】
図３０は、図２９のステップ２９１６から呼び出されるサブロジック「行先管理」のフロー制御図を示す。ステップ３００２において、ＲＬＬは、ＦＣフレームのヘッダのＤ＿ＩＤに記憶されたストレージ・シェルフ・ルータ番号が、ストレージ・シェルフ・ルータの番号に等しいかどうかを決定する。この決定は、ストレージ・シェルフ内のストレージ・シェルフ・ルータに割り当てられてＳＦＡＲレジスタに記憶されたルータ番号を使用して行うことができる。ステップ３００２で決定されるように、もしＤ＿ＩＤに含まれたルータ番号がＳＦＡＲレジスタ内のルータ番号とマッチすれば、変数「行先（destination）」がステップ３００４で値「Ｔｏ＿ＦＣＰ」へセットされる。この値は、フレームがＦＣＰレイヤへ送られるべきことを示す。もしルータ番号がマッチしなければ、ステップ３００６で、ＲＬＬは、ＦＣフレームのＤ＿ＩＤ内のルータ番号が、ストレージ・シェルフ・ルータのルータ番号よりも大きいかどうかを決定する。もしＦＣフレームのＤ＿ＩＤ内のルータ番号がＳＦＡＲレジスタに記憶されたストレージ・シェルフ・ルータの番号よりも大きければ、制御はステップ３００８へ流れる。そうでなければ、制御はステップ３０１０へ流れる。ステップ３００８および３０１０の双方において、ＲＲＬは、フレームがストレージ・シェルフ内のＳファブリックエンドポイントに達したかどうかを決定する。もし達していれば、管理フレームは正しくアドレスされていないか、誤って適切な行先をフィールドに指定されず、したがって双方の場合、行先はステップ３００４で「Ｔｏ＿ＦＣＰ」へセットされ、フレームは、誤って受け取られたフレームとしてＣＰＵで処理される。しかし、ステップ３００８および３０１０の双方において、もし現在のストレージ・シェルフ・ルータがＳファブリックエンドポイントでなければ、Ｄ＿ＩＤ内のルータ番号が現在のルータのルータ番号よりも小さい場合として、行先はステップ３０１２で「Ｔｏ＿ＦＰ０」へセットされ、もしＤ＿ＩＤ内のルータ番号が現在のストレージ・シェルフ・ルータのルータ番号よりも大きければ、ステップ３０１４で「Ｔｏ＿ＦＰ１」へセットされる。再び注意すべきこととして、ストレージ・シェルフ内のストレージルータの数字識別はＸファブリックに関して上昇順であり、Ｙファブリックに関して下降順である。
【０１２４】
図３１は、図２９のステップ２９２４から呼び出されるサブロジック「行先」のフロー制御図を示す。このサブロジックは、ストレージ・シェルフ・ルータがトランスペアレントモードで動作していないとき、または言い換えれば、ストレージ・シェルフ・ルータが複数のディスクドライブをＡＬ＿ＰＡへマップしているとき、ＦＣフレームの行先を決定する。ステップ３１０２において、ＲＬＬはフレームがＸＦＥＲ＿ＲＤＹであるかＲＳＰフレームであるかを決定する。これらのフレームは、ディスクアレイコントローラへ戻される必要がある。もしそうであれば、ＲＬＬは、フレームがＸファブリックに所属するかどうかをステップ３１０３で決定する。もしフレームがＸファブリックに所属すれば、フレームをＸ  ＦＣポートへ方向づけるため、ステップ３１０４で変数「行先」が値「Ｔｏ＿ＦＰ０」へセットされる。ステップ３１０３で決定されるように、もしフレームがＹファブリックフレームであれば、フレームをＹ  ＦＣポートへ方向づけるため、ステップ３１０６で変数「行先」が「Ｔｏ＿ＦＰ１」へセットされる。ステップ３１０２で決定されるように、もしフレームがＦＣＰ＿ＸＦＡＲ＿ＲＤＹまたはＦＣＰ＿ＲＳＰフレームでなければ、ステップ３１０８で、ＲＬＬは、フレームがＦＣＰ＿ＣＭＮＤフレームであるかどうかを決定する。もしそうであれば、ステップ３１１０で、変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。これは、フレームが、ストレージ・シェルフ・ルータに対してローカルであるＬＵＮへ方向づけられたＦＣＰ＿ＣＭＮＤフレームであること、およびファームウェアで処理してＦＣＰコマンドのコンテキストを確立するためフレームをＦＣＰレイヤへ方向づける必要があることを示す。ステップ３１０８で決定されるように、もしフレームがＦＣＰ＿ＣＭＮＤフレームでなければ、ステップ３１１２で、ＲＬＬはフレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを決定する。もしフレームがデータフレームでなければ、エラー処理を呼び出して、どのようなタイプのフレームが受け取られたか、またどのようにフレームを処理するかをファームウェアで決定するため、変数「行先」がステップ３１１４で「Ｔｏ＿ＦＣＰ」へセットされる。ステップ３１１２で決定されるように、もしフレームがＦＣＰ＿ＤＡＴＡフレームであれば、ステップ３１１６で、ＲＬＬは、フレームが応答側によって送られたか、または発信側によって送られたかを決定する。もしフレームが発信側によって送られたのであれば、フレームをＦＣＰレイヤ処理へ方向づけるため、ステップ３１１０で変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。もしデータフレームが応答側によって送られたのであれば、ステップ３１１８で、ＲＬＬは、フレームがＳファブリックの外から最初に受け取られたかどうか、またはフレームヘッダ内のＳビット符号化ファブリック表示が、フレームが受け取られたポートとは反対のポートと一致しないかどうかを決定する。もしいずれかの条件が真であれば、フレームは誤って受け取られており、エラー処理のためにフレームをＣＰＵへ方向づけるため、ステップ３１１４で変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。そうでなければ、ＸポートまたはＹポ��トへ方向づけるため、制御はステップ３１０３へ流れる。
【０１２５】
図３２は、図２９のステップ２９２２から呼び出されるサブロジック「トランスペアレント行先」のフロー制御図を示す。このサブロジックは、ストレージ・シェルフ・ルータがトランスペアレントモードで動作しているときＦＣフレームの行先を決定する。トランスペアレントモードでは、各々のディスクドライブがそれ自身のＡＬ＿ＰＡを有する。ステップ３２０２において、ＲＬＬは、ＦＣフレーム内のヘッダのＤ＿ＩＤフィールドの高位２バイトが、フレームを受け取った送信元ポートに対応するＸＦＡＲまたはＹＦＡＲレジスタの内容と等しいかどうか、および、Ｄ＿ＩＤフィールドの低位バイトがＩＲＴテーブルに含まれたＡＬ＿ＰＡを含んで、ＡＬ＿ＰＡがローカルディスクドライブへ割り当てられたことを示すかどうかを決定する。もしそうであれば、ＦＣフレームは現在のストレージ・シェルフ・ルータへ方向づけられた。そうでなければ、ＦＣフレームは他のストレージ・シェルフまたはストレージ・シェルフ・ルータへ方向づけられる。ＦＣフレームが現在のストレージ・シェルフ・ルータへ方向づけられる場合、ステップ３２０４で、ＲＬＬは、Ｓ＿ＩＤが適切なＩＩＴテーブルに含まれるＳ＿ＩＤに対応するかどうかをチェックし、もしＳ＿ＩＤが適切なＩＴＴテーブルの中に発見されるならば、更に適切なＬＰＴテーブルをチェックして、ＦＣフレームヘッダに含まれたＳ＿ＩＤを関連づけられたリモートエンティティが、フレームを方向づけられたディスクに関して現在ログインされているかどうかを調べることによって、ＦＣフレームの発信側が、ストレージ・シェルフ・ルータに相互接続されたディスクドライブとＦＣ交換を現在イニシエートできる外部ＦＣ発信側として識別されたリモートエンティティであるかどうかを決定する。ステップ３２０４で決定されるように、もし現在ログインされ、フレームが方向づけられたストレージ・シェルフ・ルータに相互接続されたディスクドライブとのＦＣ交換に着手できるリモートエンティティをＳ＿ＩＤが表すならば、処理のためにフレームをＦＣＰレイヤへ方向づけるため、ステップ３２０６で変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。対照的に、もしＳ＿ＩＤが適切なＩＩＴテーブルの中にないか、ＦＣフレームが方向づけられた送信元およびディスクドライブが、適切なＬＰＴテーブルによって示されるように現在ログインされていなければ、エラー処理のためにフレームをＦＣＰレイヤへ方向づけるため、ステップ３２０８で変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。
【０１２６】
ステップ３２０２で決定されるように、もしＤ＿ＩＤフィールドが適切なＦＡＲレジスタの内容とマッチしなければ、ステップ３２１０で、ＲＬＬは、フレームがＸファブリックフレームであるかどうかを決定する。もしそうであれば、ステップ３２１２で、ＲＬＬは、フレームがストレージ・シェルフ内の他のストレージ・シェルフ・ルータへ方向づけられているかどうかを決定する。もし方向づけられていなければ、フレームを外部Ｘファブリックへ戻して他のストレージ・シェルフへ転送するため、ステップ３２１４で変数「行先」が「Ｔｏ＿ＦＰ０」へセットされる。ステップ３２１２で決定されるように、もしフレームの行先が、ストレージ・シェルフ内の他のストレージ・シェルフ・ルータへ取り付けられたディスクドライブであることを示すエントリをＥＲＴ＿Ｘテーブルが含むならば、ステップ３２１６で、ＲＬＬは、現在のストレージ・シェルフ・ルータがＹファブリックエンドポイントを表すかどうかを決定する。もし表すならば、フレームは正しく処理されておらず、Ｙファブリックへ送られることはできない。したがって、エラー処理のためにフレームをＦＣＰレイヤへ方向づけることができるように、ステップ３２０８で、変数「行先」が値「Ｔｏ＿ＦＣＰ」へセットされる。そうでなければ、Ｓファブリックを介してストレージ・シェルフ内の後続のストレージ・シェルフ・ルータへフレームを転送するため、ステップ３２１８で、変数行先が「Ｔｏ＿ＦＰ１」へセットされる。ステップ３２１０で決定されるように、もし受け取られたフレームがＸファブリックフレームでなければ、ステップ３２２０で、ＲＬＬは、受け取られたフレームがＹファブリックフレームであるかどうかを決定する。もしそうであれば、フレームはＸファブリックフレームの処理と対称的および同等に処理され、ステップ３２２２が開始される。そうでなければ、エラー処理のためにフレームをＦＣＰレイヤへ方向づけるため、ステップ３２０８で、変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。
【０１２７】
図３３は、図２９のステップ２９１８から呼び出されるサブロジック「行先へのルーティング」のフロー制御図を示す。このサブロジックは、受け取られたＦＣフレームを、前に呼び出された論理で決定された行先へ方向づける。ステップ３３０２において、ＲＬＬは、変数「行先」の値が「Ｔｏ＿ＦＰ０」または「Ｔｏ＿ＦＰ１」であるかどうかを決定する。もしそうであれば、同じステップで、ＲＬＬは、行先が、ＦＣフレームを受け取ったポートとは反対のポートを関連づけられているかどうかを決定する。もしそうであれば、ステップ３３０４で、ＲＬＬは、変数「行先」の内容によって示された行先が、Ｓファブリックエンドポイントを表すポートを関連づけられたキューであるかどうかを決定する。もしそうであれば、ステップ３３０６で、ローカルのＳファブリックからフレームを送信する前に、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内にセットされたＳビットがクリアされる。ステップ３３０８において、ＲＬＬは、フレームがＸファブリックまたはＹファブリックのどちらに所属するかを決定し、ステップ３３１０または３３１２で、適切な出力キューでフレームをキューにする。ステップ３３０２で示されるように、もし変数「行先」の内容がＦＰ０またはＦＰ１ポートを示さないか、行先が、ＦＣフレームを受け取ったポートとは反対のポートでなければ、ステップ３３１４で、ＲＬＬは、フレームがＦＣポートの１つへ方向づけられるべきことを変数「行先」の内容が示すかどうかを決定する。もしフレームがＦＣポートの１つへ方向づけられるべきであれば、ＦＣＰレイヤによるエラー処理のために、ステップ３３１６で、フレームはＦＣＰレイヤへ方向づけられる。ステップ３３１８でＲＬＬによって決定されるように、フレームが「Ｔｏ＿ＦＣＰ」としてＦＣＰレイヤへ方向づけられることを、もし変数「行先」の内容が示すならば、フレームはステップ３３１６でＦＣＰレイヤへ方向づけられる。そうでなければ、ステップ３３２０で、ＲＬＬは、フレームがＦＣＰフレームであることを、ＦＣフレームヘッダのＲ＿ＣＴＬフィールドが示すかどうかをチェックする。もし示さなければ、エラー処理のために、ステップ３３１６で、フレームはＦＣＰレイヤへ方向づけられる。そうでなければ、ステップ３３２２で、ＲＬＬは、フレームがＦＣＰ＿ＣＭＮＤであるかどうかを決定する。もしそうであれば、ステップ３３２４でサブロジック「行先マップ」が呼び出され、その後のステップ３３２６で、ＲＬＬは、変数「行先」の内容が「Ｔｏ＿ＦＣＰ」と等しいかどうかを決定する。もし等しければ、フレームは、ステップ３３１６でＦＣＰレイヤへ方向づけられる。他方では、ステップ３３２８で決定されるように、もし変数「行先」の内容が、２つのＦＣポートの１つへのフレーム転送を示し、ＦＣポート行先が、フレームを受け取った同じＦＣポートであれば、エラー処理のために、ステップ３３１６で、フレームはＦＣＰレイヤへ方向づけられる。そうでなければ、２つのＦＣＰポートの１つへフレームをキューにするため、制御はステップ３３０４へ流れる。ステップ３３２２で決定されるように、もしフレームがＦＣＰ＿ＣＭＮＤフレームでなければ、ステップ３３３０で、サブロジック「他のルーティング」が呼び出される。
【０１２８】
図３４は、ステップ３３２４で呼び出されるサブロジック「行先マップ」のフロー制御図を示す。ＲＬＬは、最初にステップ３４０２で、ＬＵＮ、ＬＢＡ、またはＬＵＮおよびＬＢＡの組み合わせマッピングが、ストレージ・シェルフ・ルータによって現在実行されているかどうかを決定する。もし実行されていなければ、ＲＬＬは、ステップ３４０４で、ストレージ・シェルフ・ルータが、現在トランスペアレントモードで動作しているかどうかを決定する。もし動作していれば、変数「行先」の値が、ステップ３４０６で「Ｔｏ＿ＦＣＰ」へセットされる。ステップ３４０４で決定されるように、もしストレージ・シェルフ・ルータがトランスペアレントモードで動作していなければ、ＲＬＬは、ステップ３４０８で、フレームの送信元がフレームの行先とデータを交換するためログインされていることを、適切なＬＰＴテーブルが示すかどうかを決定する。もしそうであれば、ステップ３４０６で、変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。そうでなければ、エラー処理のためにフレームをＣＰＵへ方向づけるため、ステップ３４０６で、行先も「Ｔｏ＿ＦＣＰ」へセットされる。もしＬＵＮ、ＬＢＡ、またはＬＵＮおよびＬＢＡの組み合わせマッピングがストレージ・シェルフ・ルータによって実行されていれば、ＲＬＬは、ステップ３４１０で、指定された行先ディスクがＩＲＴテーブル内に関連エントリを有するかどうかを決定する。もし有すれば、制御はステップ３４０４へ流れる。そうでなければ、ステップ３４１２で、ＲＬＬは、範囲のチェックが不能にされたかどうかを決定する。もし範囲のチェックが不能にされたのであれば、ステップ３４１４で、ＲＬＬは、フレームがＦＰ０ポートで受け取られたかどうかを決定する。もしそうであれば、ステップ３４１６で、変数「行先」が「Ｔｏ＿ＦＰ１」へセットされる。そうでなければ、ステップ３４１８で、変数「行先」の内容が「Ｔｏ＿ＦＰ０」へセットされる。もし範囲のチェックが可能にされていれば、ステップ３４２０で、ＲＬＬは、指定された行先ディスクがＦＰ０ポートを介してアクセス可能であるかどうかを決定する。もしアクセス可能であれば、制御はステップ３４１８へ流れる。そうでなければ、ステップ３４２２で、ＲＬＬは、指定された行先ディスクがＦＣポートＦＰ１を介してアクセス可能であるかどうかを決定する。もしアクセス可能であれば、制御はステップ３４１６へ流れる。そうでなければ、エラー処理のため、ステップ３４０６で、変数「行先」が「Ｔｏ＿ＦＣＰ」へセットされる。最後のステップにおいて、ステップ３４１６または３４１８のいずれかで２つのＦＣポートの１つへマップされたフレームについて、ＲＬＬは、ステップ３４２４で、フレームを現在方向づけられたポートが、Ｓ空間エンドポイントであるかどうかを決定する。もしそうであれば、エラー処理のためにフレームをＦＣＰへ方向づけるため、ステップ３４０６で、変数「行先」の値が「Ｔｏ＿ＦＣＰ」へセットされる。
【０１２９】
図３５は、図３３のステップ３３３０のサブロジック「他のルーティング」のフロー制御図を示す。ステップ３５０２において、ＲＬＬは、現在のストレージ・シェルフ・ルータまたはそれに接続されたディスクドライブがフレームのＦＣ応答側であることを、フレームのＲＸ＿ＩＤフィールドが示すかどうかを決定する。もし示すならば、ステップ３５０４で、ＲＬＬは、フレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを決定する。もしそうであれば、ステップ３５０６で、ＲＬＬは、フレームの有効なコンテキストが存在するかどうかを決定する。もし存在すれば、前述したように、ＳＡＴＡポートへデータを転送するため、ステップ３５０８で、フレームは「Ｔｏ＿ＧＳＭＳ」のようにＧＳＭＳへ方向づけられる。そうでなければ、エラー処理のために、ステップ３５１０で、フレームはＦＣＰレイヤへ方向づけられる。ステップ３５０２で決定されるように、もしＦＣフレームヘッダのＲＸ＿ＩＤフィールドが、このストレージ・シェルフ・ルータをフレームのＦＣ応答側として示さなければ、ステップ３５１２で、ＲＬＬは、ＦＣフレームヘッダ内のＲＸ＿ＩＤフィールドによって識別されたストレージ・シェルフ・ルータが、フレームを受け取ったポートとは反対のポートを介してアクセス可能であるかどうかを決定する。もし可能でなければ、フレームは、ＦＣＰレイヤによるエラー処理のために、キュー「Ｔｏ＿ＦＣＰ」へキューにされる。そうでなく、ＲＸ＿ＩＤが、フレームを受け取ったポートとは反対のポートからアクセス可能なストレージ・シェルフ・ルータを識別する場合、ＲＬＬは、ステップ３５１４で、そのポートがＳファブリックエンドポイントであるかどうかを決定する。もしそうであれば、ステップ３５１６で、ＲＬＬは、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内にセットされたＳ空間ビットを除去する。ステップ３５１８で、ＲＬＬは、ＸファブリックおよびＹファブリックのどちらへフレームが所属するかを決定し、ステップ３５２０または３５２２で、フレームが所属するファブリックに適切なポートのＦＩＦＯへフレームを書き込む。
【０１３０】
ＳＣＳＩコマンド／ＡＴＡコマンドの変換
前述したように、本発明の１つの実施形態を表すストレージ・シェルフ・ルータは、ディスクアレイコントローラからストレージ・シェルフ・ルータへ方向づけられたＦＣＰ＿ＣＭＮＤフレームを、あたかもＦＣディスクドライブへ方向づけられたかのようにフィールドし、ＦＣＰ＿ＣＭＮＤフレーム内のＳＣＳＩコマンドを１つ以上のＡＴＡコマンドへ変換し、これらのＡＴＡコマンドがＳＡＴＡディスクドライブへ送信されて、ＳＣＳＩコマンドが実行されるようにする。下記の表６は、ストレージ・シェルフ・ルータによって受け取られたＳＣＳＩコマンドと、ＳＣＳＩコマンドを実行するために使用されるＡＴＡコマンドとの間の対応を示す。
【表６】
0004690202.tif 000007
【０１３１】
本発明は、特定の実施形態に関して説明されたが、この実施形態に限定されることは意図されない。本発明の趣旨の範囲内での修正は当業者に明らかであろう。たとえば、ほとんど無限数の異なった集積チップの設計および実施形態を使用して、ストレージ・シェルフ・ルータおよびパス・コントローラ・カードについて前に説明した機能を実現することができる。説明された実施形態は、ファイバチャネルファブリックに相互接続するストレージ・シェルフ・ルータに関連しているが、ストレージ・シェルフ・ルータは、代替的に、ストレージ・シェルフをディスクアレイコントローラおよび他の電子デバイスに相互接続するために使用される他のタイプの高帯域通信に相互接続するように設計されてよい。更に、代替の実施形態では、ＳＡＴＡディスクドライブに加えて、他のタイプの安価なディスクドライブが、ストレージ・シェルフ・ルータへ相互接続されるように、同じようにサポートされてよい。類似していないデータパケットフォーマット間の変換、コマンドのスイート、および異なった相互接続プロトコルの他の局面は、説明された実施形態で実行されたレイヤとは異なるレイヤで実行されてよい。説明されたストレージ・シェルフ・ルータにおいて、内部機能は一連の離散的論理コンポーネントとして説明された。これらの論理コンポーネントは、説明を明瞭にするため比較的恣意的に案出されたが、論理コンポーネントに対する内部論理の他のマッピングが可能である。高帯域通信メディアとディスクドライブまたは他のデータストレージデバイスとの間で通信メッセージのルーティングを達成するため、極めて多様な代替の内部リンク、プロセッサ、構成、および他の実施形態の詳細を設計することができる。ストレージ・シェルフ・ルータは、ディスクドライブ以外の他のタイプの大容量ストレージデバイスを電子デバイスコントローラへ相互接続するために使用されてよい。説明されたストレージ・シェルフ・ルータは、通常、８個のディスクドライブを処理し、フェイルオーバモードでは、１６個のディスクドライブを処理することができるが、代替のストレージ・シェルフ・ルータは、より多くの１次および２次リンクを処理するように実現されてよい。同様に、説明されたストレージ・シェルフ・ルータは、高帯域通信メディアへの２つの別々のポートを含むが、ストレージ・シェルフにおけるストレージ・シェルフ・ルータ間の、より複雑な内部接続のために、追加のポートを含むことが望ましいであろう。
【０１３２】
説明を目的としたこれまでの記述は、本発明の完全な理解を提供するため具体的な専門用語を使用した。しかし、本発明を実施するためには、具体的詳細は必要でないことが当業者に明らかであろう。他の場合には、周知の回路およびデバイスがブロック図形式で示されるが、これは根底の発明から注意力が不必要にそらされないようにするためである。このように、本発明の具体的実施形態のこれまでの記述は、例示および説明を目的として提供される。即ち、それらが全部を尽くしていること、または開示されたそのままの形式に限定されることは意図されない。これまでの教示を勘案して、明らかに多くの修正および変形が可能である。本発明の原理およびその実用的応用を最も良く説明し、それによって当技術分野に通じる他の者に、想定される特定の使用に適した様々な修正と共に本発明および様々な実施形態を最も良く利用させるため、実施形態が選択および説明された。本発明の範囲は、以下の請求項およびそれらの同等物によって限定されることが意図される。
【図面の簡単な説明】
【０１３３】
【図１Ａ】ＦＣ相互接続トポロジの３つの異なったタイプを示す図である。
【図１Ｂ】ＦＣ相互接続トポロジの３つの異なったタイプを示す図である。
【図１Ｃ】ＦＣ相互接続トポロジの３つの異なったタイプを示す図である。
【図２】ＦＣネットワークを介して転送されるデータが時間的に組織される非常に簡単な階層を示す図である。
【図３】標準ＦＣフレームの内容を示す図である。
【図４】ＳＣＳＩバスを含む普通のパーソナルコンピュータアーキテクチャのブロック図である。
【図５】ＳＣＳＩバストポロジを示す図である。
【図６Ａ】読み出し並びに書き込みＩ／Ｏ動作のイニシエーションおよび実施形態に含まれるＳＣＳＩプロトコルを示す図である。
【図６Ｂ】読み出し並びに書き込みＩ／Ｏ動作のイニシエーションおよび実施形態に含まれるＳＣＳＩプロトコルを示す図である。
【図６Ｃ】読み出し並びに書き込みＩ／Ｏ動作のイニシエーションおよび実施形態に含まれるＳＣＳＩプロトコルを示す図である。
【図７Ａ】イニシエータとターゲットとの間で交換されるＳＣＳＩシーケンス、および図６Ａ〜図６Ｃで示されるＳＣＳＩバス段階並びに状態へのＦＣプロトコルのマッピングを示す図である。
【図７Ｂ】イニシエータとターゲットとの間で交換されるＳＣＳＩシーケンス、および図６Ａ〜図６Ｃで示されるＳＣＳＩバス段階並びに状態へのＦＣプロトコルのマッピングを示す図である。
【図８Ａ】ディスクアレイ内でＦＣディスクを使用するときの幾つかの問題を示す図である。
【図８Ｂ】ディスクアレイ内でＦＣディスクを使用するときの幾つかの問題を示す図である。
【図８Ｃ】ディスクアレイ内でＦＣディスクを使用するときの幾つかの問題を示す図である。
【図８Ｄ】ディスクアレイ内でＦＣディスクを使用するときの幾つかの問題を示す図である。
【図９】図８Ａ〜図８Ｄで使用される図示慣例を使用して、本発明の１つの実施形態を表すストレージ・シェルフ・ルータを観念的に示す図である。
【図１０】コンピュータおよびディスクアレイの階層的に相互接続されたシステムの中で、本発明の１つの実施形態を表すストレージ・シェルフ・ルータによって占められる位置を示す図である。
【図１１】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用して実現されたストレージ・シェルフのコンポーネントの斜視図である。
【図１２】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用して実現されたストレージ・シェルフのコンポーネントの斜視図である。
【図１３Ａ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用するストレージ・シェルフの実施形態を示す図である。
【図１３Ｂ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用するストレージ・シェルフの実施形態を示す図である。
【図１３Ｃ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを使用するストレージ・シェルフの実施形態を示す図である。
【図１４Ａ】ＡＴＡディスクドライブをストレージ・シェルフ・ルータへ相互接続するのに適したパス・コントローラ・カードの実施形態を示す図である。
【図１４Ｂ】ＡＴＡディスクドライブをストレージ・シェルフ・ルータへ相互接続するのに適したパス・コントローラ・カードの実施形態を示す図である。
【図１５】ストレージ・シェルフ・ルータの主要な機能コンポーネントを示す高レベルのブロック図である。
【図１６Ａ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｂ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｃ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｄ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｅ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｆ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１６Ｇ】本発明の１つの実施形態を表す１つ以上のストレージ・シェルフ・ルータを組み込まれた高可用性ストレージ・シェルフによって提供される論理インタフェースを示す図である。
【図１７Ａ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１７Ｂ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１７Ｃ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１７Ｄ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１７Ｅ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１７Ｆ】本発明の１つの実施形態を表すストレージ・シェルフ・ルータを通過するデータおよび制御情報のフローを示す図である。
【図１８】本発明の１つの実施形態を表すストレージ・シェルフ・ルータの論理コンポーネントの詳細なブロック図である。
【図１９】ＦＣポートレイヤの詳細な図である。
【図２０】ルーティングレイヤの詳細なブロック図である。
【図２１】ＦＣＰレイヤの詳細なブロック図である。
【図２２】ＳＡＴＡポートレイヤの詳細なブロック図である。
【図２３】ＳＡＴＡポートの詳細なブロック図である。
【図２４】４ストレージ・シェルフ・ルータ可用性ストレージ・シェルフ内のルーティングトポロジの観念的な図である。
【図２５】ディスクアレイの２ストレージ・シェルフ・ルータおよび２ストレージ・シェルフ実施形態におけるＸおよびＹ  ＦＣアービトレーテッドループ相互接続の観念的な図である。
【図２６Ａ】本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介して特定のストレージ・シェルフ・ルータまたはリモートエンティティへＦＣフレームをルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｂ】本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介して特定のストレージ・シェルフ・ルータまたはリモートエンティティへＦＣフレームをルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｃ】本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介して特定のストレージ・シェルフ・ルータまたはリモートエンティティへＦＣフレームをルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｄ】本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介して特定のストレージ・シェルフ・ルータまたはリモートエンティティへＦＣフレームをルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２６Ｅ】本発明の１つの実施形態を表すストレージ・シェルフ内の特定のＦＣポートを介して特定のストレージ・シェルフ・ルータまたはリモートエンティティへＦＣフレームをルーティングするために使用されるＦＣフレームヘッダ内のデータフィールドを示す図である。
【図２７】ルーティングレイヤによるＦＣフレームのルーティングを容易にするため、ストレージ・シェルフ・ルータ内に維持される７つの主要なルーティングテーブルを示す図である。
【図２８】簡単なルーティングトポロジ、およびフロー制御図で使用されるルーティング行先用語を提供する図である。
【図２９】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３０】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３１】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３２】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３３】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３４】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図３５】ルーティングレイヤの論理を記述する一連の階層フロー制御図である。
【図１Ａ】
0004690202.tif 000008
【図１Ｂ】
0004690202.tif 000009
【図１Ｃ】
0004690202.tif 000010
【図２】
0004690202.tif 000011
【図３】
0004690202.tif 000012
【図４】
0004690202.tif 000013
【図５】
0004690202.tif 000014
【図６Ａ】
0004690202.tif 000015
【図６Ｂ】
0004690202.tif 000016
【図６Ｃ】
0004690202.tif 000017
【図７Ａ】
0004690202.tif 000018
【図７Ｂ】
0004690202.tif 000019
【図８Ａ】
0004690202.tif 000020
【図８Ｂ】
0004690202.tif 000021
【図８Ｃ】
0004690202.tif 000022
【図８Ｄ】
0004690202.tif 000023
【図９】
0004690202.tif 000024
【図１０】
0004690202.tif 000025
【図１１】
0004690202.tif 000026
【図１２】
0004690202.tif 000027
【図１３Ａ】
0004690202.tif 000028
【図１３Ｂ】
0004690202.tif 000029
【図１３Ｃ】
0004690202.tif 000030
【図１４Ａ】
0004690202.tif 000031
【図１４Ｂ】
0004690202.tif 000032
【図１５】
0004690202.tif 000033
【図１６Ａ】
0004690202.tif 000034
【図１６Ｂ】
0004690202.tif 000035
【図１６Ｃ】
0004690202.tif 000036
【図１６Ｄ】
0004690202.tif 000037
【図１６Ｅ】
0004690202.tif 000038
【図１６Ｆ】
0004690202.tif 000039
【図１６Ｇ】
0004690202.tif 000040
【図１７Ａ】
0004690202.tif 000041
【図１７Ｂ】
0004690202.tif 000042
【図１７Ｃ】
0004690202.tif 000043
【図１７Ｄ】
0004690202.tif 000044
【図１７Ｅ】
0004690202.tif 000045
【図１７Ｆ】
0004690202.tif 000046
【図１８】
0004690202.tif 000047
【図１９】
0004690202.tif 000048
【図２０】
0004690202.tif 000049
【図２１】
0004690202.tif 000050
【図２２】
0004690202.tif 000051
【図２３】
0004690202.tif 000052
【図２４】
0004690202.tif 000053
【図２５】
0004690202.tif 000054
【図２６Ａ】
0004690202.tif 000055
【図２６Ｂ】
0004690202.tif 000056
【図２６Ｃ】
0004690202.tif 000057
【図２６Ｄ】
0004690202.tif 000058
【図２６Ｅ】
0004690202.tif 000059
【図２７】
0004690202.tif 000060
【図２８】
0004690202.tif 000061
【図２９】
0004690202.tif 000062
【図３０】
0004690202.tif 000063
【図３１】
0004690202.tif 000064
【図３２】
0004690202.tif 000065
【図３３】
0004690202.tif 000066
【図３４】
0004690202.tif 000067
【図３５】
0004690202.tif 000068