(関連出願の相互参照)
本願は、2003年1月23日に出願された第10/341835号出願の一部継続出願である2003年6月23日に出願された第10/602529号出願の一部継続出願である。
(背景技術)
ファイバチャネル(Fibre Channel:FC)は、コンピュータと周辺デバイスの複数の様々な組み合わせを相互接続するデータ通信ネットワークのアーキテクチャ及びプロトコルである。FCは、スモールコンピュータシステムインターフェイス(SCSI)プロトコルを含む種々の上位レベルプロトコルをサポートする。コンピュータ又は周辺デバイスは、FCポートと、銅線または光ファイバとを介してネットワークに連結される。FCポートは、トランシーバ及びインターフェイスコントローラを含み、FCポートを収容するコンピュータ周辺デバイスは「ホスト」と呼ばれる。FCポートは、ペリフェラルコンピュータインターフェイス(PCI)バスのようなローカルデータバスを介してホストとデータを交換する。インターフェイスコントローラは、ファイバチャネルと、FCポートが存在するコンピュータまたは周辺デバイスとの間で低レベルプロトコル交換を実施する。
コンピュータネットワーク内の遠隔のデータにアクセスする一般的な実例はクライアント/サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータはサーバコンピュータとの間でデータを読み書きするための要求を送信する。サーバコンピュータは、クライアントサーバがデータを読み書きする権限及び許可を与えられているかどうかをチェックし、要求された読出し(READ)動作又は書込み(WRITE)動作を特定の大容量記憶デバイスにマッピングし、書込み動作の場合にはクライアントコンピュータから大容量記憶デバイスへのデータの転送の際に仲介者として、又は、読出し動作の場合には大容量記憶デバイスからクライアントへのデータの転送の際に仲介者として機能することによって要求を処理する。
現時点で利用可能であり、かつ、以前に利用可能である一般的な通信ネットワークアーキテクチャにおいて、サーバコンピュータはローカルエリアネットワーク(LAN)を介してクライアントコンピュータと通信し、サーバコンピュータは、SCSIバスのようなローカルバスを介して複数の大容量記憶デバイスと通信する。このようなシステムにおいて、サーバは2個の異種通信媒体の間のブリッジに相当するので、サーバは、読出し又は書込み動作の結果として転送されたデータを記憶し、回送することが要求される。FCの出現によって、クライアントコンピュータ、サーバコンピュータ、及び大容量記憶デバイスはすべて、単一の通信媒体によって対称的に相互接続される。従来型のクライアント/サーバアーキテクチャは、上記のLAN及びSCSIネットワークで使用されるプロトコルと同じタイプのクライアント/サーバプロトコルを使用してFCに移植される。
高容量ディスクドライブを含むSCSIバス互換性大容量記憶デバイスは、特に、中規模及び大規模コンピュータシステムにおいて、広く利用可能であり、広く使用される。複数のFCベースシステムは、1台以上のFCポートと、ディスクドライブがFCレスポンダとして機能するために必要とされるロジックとがそれぞれに含まれるFC互換性ディスクドライブを利用する。パーソナルコンピュータ(PC)を含む小規模システムにおいて、統合ドライブエレクトロニクス(Integrated Drive Electronics:IDE)又はアドバンスト・テクノロジー・アタッチメント(Advanced Technology Attachment:ATA)ディスクドライブと呼ばれるディスクドライブの種々のファミリーが広く利用される。シリアルATAディスク(SATA)は、一般的に、業界標準アーキテクチャ(Industry Standard Architecture:ISA)バスを介してシステムと相互接続される。
本発明は、FC技術、SCSI技術、及びIDE/ATA技術に関係する。以下に、各々を、3つの別個のサブセクションで、順番に記載する。これらの技術の一部又は全部に精通している当業者は、FCベースのディスクアレイを説明するこのセクションの最後のサブセクション、及びそのサブセクションの直後に続く発明の要約のセクションへ飛ばし読みすることを望むであろう。
ファイバチャネル
ファイバチャネル(FC)は、以下の表1Aおよび表1Bに掲載された規格文書を含む複数のANSI規格文書によって規定され、記載されている。
表1Aおよび表1Bに掲載された文書、及びファイバチャネルに関するさらなる情報は、以下のアドレス:“http://www.t11.org/index.htm”及び“http://www.fibrechannel.com”を有するワールドワイドウェブホームページで入手できる。
以下のFCの説明は、本発明の検討を容易にするためこれらの文書に記載された情報の一部を紹介し要約することを目的とする。以下の説明中で紹介されたいずれかの話題についてのより詳細な検討を望むならば、上記の文書を参考にされたい。
FCは、一般的に、1台以上の通信媒体によって相互接続されたコンピュータ、ワークステーション、周辺デバイス、及びディスクアレイのような周辺デバイスの配列又は集合であるFCノード間のデータ通信のためのアーキテクチャ及びプロトコルである。通信媒体には、シールドツイストペア接続、同軸ケーブル及び光ファイバが含まれる。FCノードは、少なくとも1台のFCポート及びFCリンクを介して通信媒体に接続される。FCポートは、FCノードの処理コンポーネントとレジスタ及びメモリインターフェイスを共用し、ハードウェアとファームウェアにおいて、FCプロトコルの下位レベルを実施するFCホストアダプタ又はFCコントローラである。FCノードは、一般に、共有メモリ内の共有データ構造を使用し、かつ、FCポート内の制御レジスタを使用して、FCポートとデータ及び制御情報を交換する。FCポートは、電線又は光学ストランドにより構成されたリンクを介して通信媒体に接続された、シリアルの送信機及び受信機コンポーネントを含む。
以下の説明中、「FC」は、一般的なファイバチャネルアーキテクチャ及びプロトコルを引用するために形容詞として使用され、ファイバチャネル通信媒体の例を引用するために名詞として使用される。したがって、FC(アーキテクチャ及びプロトコル)ポートは、FC(通信媒体)からFC(アーキテクチャ及びプロトコル)シーケンスを受信する。
FCアーキテクチャ及びプロトコルは、図1A〜1Cに表された3種類の相互接続トポロジーをサポートする。図1Aは、3種類の相互接続トポロジーのなかで最も単純な「ポイントツーポイントトポロジー(point-to-point topology)」と呼ばれる相互接続トポロジーを表す。図1Aに表されたポイントツーポイントトポロジーでは、第1ノード101は、第1ノード101のFCポート104の送信機103を第2ノード102のFCポート106の受信機105に直接接続し、第2ノード102のFCポート106の送信機107を第1ノード101のFCポート104の受信機108に直接接続することにより第2ノード102に直結される。ポイントツーポイントトポロジーで使用されるポート104及び106はN_Portと呼ばれる。
図1Bは、「FC調停ループトポロジー(FC arbitrated loop topology)」と呼ばれる少し複雑なトポロジーを表す。図1Bは調停ループ内で相互接続された4台のノード110〜113を表す。電気的又は光学的バイナリデータにより構成される信号は、環状にループを周回してあるノードから次のノードへ転送される。あるノードの送信機はループ内の次のノードの受信機に直接接続され、たとえば、ノード111に関連した送信機114の場合、送信機114はノード112に関連した受信機115に直接接続される。二つのタイプのFCポートが調停ループ内でFCノードを相互接続するために使用される。調停ループで使用される最も一般的なタイプのポートは「NL_Port」と呼ばれる。「FL_Port」と呼ばれる特別のタイプのポートは、後述されるように、FC調停ループをFCファブリックトポロジーと相互接続するため使用される。1台のFL_Portだけが調停ループトポロジー内にアクティブに組み込まれる。調停ループトポロジーは、最大で127台までのアクティブFCポートを含み、付加的な非参加FCポートを含む。
FC調停ループトポロジーでは、ノードは、調停ループの制御を争い、すなわち、調停ループの制御を調停する。一般に、2台以上のノードが制御を争う場合、最小ポートアドレスを有するノードが制御を得る。全ノードが最終的には妥当な時間内に確実に制御を取得するため、公平性アルゴリズム(fairness algorithm)がノードによって実施される。ノードがループの制御を取得したとき、そのノードは調停ループ内の他のノードに対するチャネルを開くことが可能である。半二重チャネルでは、一方のノードがデータを送信し、他方のノードがデータを受信する。全二重チャネルでは、データは第1ノードによって送信され、第2ノードによって受信され、同時に、データが第2ノードによって送信され、第1ノードによって受信される。例えば、図1Bの調停ループにおいて、ノード111がノード113と全二重チャネルを開くならば、ノード111からノード113までそのチャネルを介して送信されるデータはノード112のNL_Port116を通り、ノード113によってノード111へ送信されるデータはノード110のNL_Port117を通る。
図1Cは、「FCファブリック(FC fabric)」と呼ばれる、最も一般的であり、かつ、最も複雑なFCトポロジーを表す。FCファブリックは、図1Cにおいて、4台のFCノード119〜122が接続された不揃いな形状の中心オブジェクト118によって表現される。FCノード119〜122内のN_Port123〜126はファブリック118内のF_Port127〜130に接続される。ファブリックは、電話システムと機能が類似したスイッチ型又はクロスポイントスイッチトポロジーである。データは、「ファブリッ・エレメント(fabric element)」と呼ばれるスイッチ又は交換機を介してF_Portの間でファブリックによって経路制御される。あるF_Portと別のF_Portとの間でファブリックを通る経路は複数存在する可能性がある。F_Portに関連したファブリック内でのデータのルーティング(routing、経路指定)とノードのアドレス指定(addressing)は、FCノード又はN_Portではなく、FCファブリックによって取り扱われる。
FCはシリアル通信媒体である。データは、非常に高い転送レートで同時に1ビットずつ転送される。図2は、FCネットワークを経由する転送のため、時間的に、データを組織化する非常に簡単な階層を示す。最下位概念レベルでは、データはデータビットのストリーム200であると考えられる。FCネットワークによってサポートされる最小のデータのユニット(すなわち、ひとまとまりのデータビット)は、FCポートによって8ビット文字として復号化された10ビット文字である。FCプリミティブは10ビットの文字又はバイトにより構成される。ある種のFCプリミティブは、FCポート間で交換される制御情報を搬送するため利用される。データ編成の次のレベル、すなわち、FCプロトコルに関する基本レベルはフレームである。7個のフレーム202〜208が図2に表されている。フレームは36バイト〜2148バイトにより構成され、デリミッタ、ヘッダ、及び0〜2048バイトのデータを含む。第1のFCフレームは、例えば、水平方向の括弧201によって囲まれたデータビットのストリーム200のデータビットに対応する。FCプロトコルは、シーケンスと呼ばれる次の上位レベルの編成レベルを指定する。第1のシーケンス210及び第2のシーケンス212の一部分が図2に表されている。第1のシーケンス210は第1から第4までのフレーム202〜205により構成される。第2のシーケンス212は第5から第7までのフレーム206〜208と、図示されないさらなるフレームとにより構成される。FCプロトコルは、エクスチェンジ(exchange)と呼ばれる第3の編成レベルを指定する。エクスチェンジ214の一部分が図2に表されている。このエクスチェンジ214は、図2に表された少なくとも第1のシーケンス210及び第2のシーケンス212で構成される。このエクスチェンジは、或いは、第1から第7までのフレーム202〜208と、第2のシーケンス212及びエクスチェンジ214を構成するさらなるシーケンス内に収容された付加的なフレームとにより構成されているようにも見える。
FCは全二重データ伝送媒体である。フレーム及びシーケンスは、オリジネータ(originator)およびレスポンダの間、またはイニシエータ(initiator)およびターゲット(target)の間で両方向へ同時に送られる。エクスチェンジは、読出し入出力トランザクション又は書込み入出力トランザクションのような単一の入出力トランザクションの間に、オリジネータとレスポンダとの間で交換された全シーケンスとシーケンス内のフレームとを含む。FCプロトコルは、インターネットプロトコル(IP)、スモールコンピュータシステムインタフェース(SCSI)プロトコル、ハイパフォーマンスパラレルインターフェイス(HIPPI)、及びインテリジェントペリフェラルインターフェイス(IPI)を含む任意の個数の上位レベルデータ交換プロトコルに従ってデータを転送するように設計される。SCSIバスアーキテクチャは以下のサブセクションに記載され、このサブセクション及び残りのサブセクションにおける後続の議論の多くはFCプロトコル内に埋め込まれたSCSIプロトコルに重点を置く。SCSIプロトコルのファイバチャネルへの標準的な適応は、本明細書中では、以下では「FCP」として参照される。したがって、FCは、SCSIバス及びその他の周辺相互接続バスの特色であるマスタースレーブ型の通信パラダイム、並びに、インターネットを実現するために使用される通信プロトコルのような比較的開放型であり、組織化されていない通信プロトコルをサポート可能である。イニシエータ又はターゲットのSCSIバスアーキテクチャの概念は、FCPでは進展させられ、上記のように設計され、FC経由の伝送のためのSCSIコマンド及びデータ交換をカプセル化する。
図3は標準的なFCフレームの内容を表す。FCフレーム302は、5個の上位レベルセクション304、306、308、310及び312を備える。第1の上位レベルセクションは、フレーム開始(start-of-frame:SOF)デリミッタ304と呼ばれ、フレームの先頭にマークを付ける4バイトを備える。次の上位レベルセクションは、フレームヘッダ306と呼ばれ、アドレス指定情報、シーケンス情報、エクスチェンジ情報、及び種々の制御フラグを格納する24バイトを含む。フレームヘッダ314のより詳細な図は図3のFCフレームから拡張されて表示されている。宛先識別子(destination identifier:D_ID)、すなわち、DESTINATION_ID316は、フレームの宛先FCポートを示す24ビットのFCアドレスである。ソース識別子(source identifier:S_ID)、すなわち、SOURCE_ID318は、フレームを送信したFCポートを示す24ビットのアドレスである。オリジネータ識別子、すなわち、OX_ID320と、レスポンダ識別子322、すなわち、RX_IDは、オリジネータ及びレスポンダ、またはイニシエータおよびターゲットのFCポートに関してフレームが属するエクスチェンジを特定する32ビットのエクスチェンジ識別子を一体となって構成する。シーケンス識別子、すなわち、SEQ_ID324は、フレームが属するシーケンスを特定する。
次の上位レベルセクション308は、データ・ペイロードと呼ばれ、FCフレーム内に詰め込まれた実際のデータを格納する。データ・ペイロードは、データと、IP及びSCSIのような上位レベルプロトコルに従って転送されたカプセル化プロトコル情報とを格納する。図3は、SCSIプロトコルに準拠したデータ転送のため使用される4個の基本的なタイプのデータ・ペイロードのレイアウト326〜329を表す。これらのうちの第1のフォーマット326は、FCPコマンド(FCP_CMND)と呼ばれ、イニシエータからターゲットへSCSIコマンドを送信するため使用される。FCP論理ユニット番号(FCP_LUN)フィールド330は、ある種の実施において、特定のSCSIバス・アダプタ、SCSIバス・アダプタに関連したターゲットデバイス、及び指定されたターゲットSCSIデバイスと関連した論理デバイスに対応する論理ユニット番号(logical unit number:LUN)を指定する8バイトのアドレスを含み、一体としてFCP_CMNDのターゲットを表現する。別の実施では、FCP_LUNフィールド330は、SCSIバス・アダプタ、SCSIバス・アダプタに関連したターゲットデバイス、及び指定されたターゲットSCSIデバイスと関連した論理デバイスに対応するLUNを決定するためターゲットFCホストアダプタによって使用されるインデックス又は参照番号を格納する。SCSI読出し又は書込み入出力コマンドのような実際のSCSIコマンドは、16バイトフィールドのFCP_CDB332に格納される。
図3に表された第2のタイプのデータ・ペイロードのフォーマット327は、FCP転送準備完了(FCP_XFER_RDY)レイアウトと呼ばれる。このデータ・ペイロードフォーマットは、ターゲットがデータの受信又は送信を開始する準備を完了したときにSCSIプロシードコマンドをターゲットからイニシエータへ転送するため使用される。図3に表された第3のタイプのデータ・ペイロードのフォーマット328はFCPデータ(FCP_DATA)フォーマットである。FCP_DATAフォーマットは、SCSI入出力トランザクションの実行の結果として、SCSIデータ記憶デバイスから読出し、又は、SCSIデータ記憶デバイスへ書込みされている実際のデータを転送するため使用される。図3に表された最後のデータ・ペイロードのフォーマット329は、FCPレスポンス(FCP_RSP)レイアウトと呼ばれ、SCSI状態バイト334、並びに、その他のFCP状態情報を、入出力トランザクションの完了次第にターゲットからイニシエータへ逆に転送するため使用される。
SCSIバスアーキテクチャ
コンピュータバスは電気信号線の組であり、それを介してコンピュータコマンド及びデータがコンピュータシステムの処理コンポーネント、記憶コンポーネント、及び入出力(I/O)コンポーネントの間で伝送される。SCSI 入出力バスは、ハードディスクドライブ及びCD−ROMドライブのような大容量記憶デバイスをコンピュータシステムのメモリコンポーネント及び処理コンポーネントと相互接続するため最も広く利用され、かつ、人気のあるコンピュータバスである。SCSIバスアーキテクチャは、SCSI−1、SCSI−2及びSCSI−3の三つの主要な規格に規定されている。SCSI−1規格及びSCSI−2規格は、米国規格協会(ANSI)規格文書“X3.131−1986”及び“X3.131−1994”にそれぞれ公表されている。SCSI−3規格はANSI委員会によって現在開発中である。SCSIバスアーキテクチャの概要は非特許文献1に記載されている。
図4は、SCSIバスを含む一般的なパーソナルコンピュータ(PC)のブロック図である。PC400は、高速CPUバス406によってシステムコントローラ404に連結された中央処理ユニット又はプロセッサ(CPU)402を含む。システムコントローラは、次に、メモリバス410を介してシステムメモリコンポーネント408に連結される。システムコントローラ404は、さらに、低速の業界標準アーキテクチャ(ISA)バス414及びSCSIバス416と相互接続されたペリフェラルコンポーネント相互接続(PCI)バス412を介して種々の周辺デバイスに連結される。PCIバスのアーキテクチャは、非特許文献2に記載されている。相互接続されたCPUバス406、メモリバス410、PCIバス412及びISAバス414は、CPUがデータ及びコマンドを、コンピュータシステムに収容された種々の処理コンポーネント及びメモリコンポーネントと入出力デバイス(I/O device)と交換することを可能にさせる。一般に、ビデオディスプレイデバイス418のような非常に高速、かつ、高帯域幅の入出力デバイスはPCIバスに直接接続される。キーボード420及びポインティングデバイス(図示せず)のような低速入出力デバイス420はISAバス414に直接接続される。ISAバスはバスブリッジコンポーネント422を介してPCIバスと相互接続される。ハードディスク、フレキシブルディスクドライブ、CD−ROMドライブ及びテープドライブ424〜426のような大容量記憶デバイスはSCSIバス416に接続される。SCSIバスはSCSIバス・アダプタ430を介してPCIバス412と相互接続される。SCSIバス・アダプタ430は、Symboisの53C8xxSCSIプロセッサのファミリーから選択されたプロセッサのようなプロセッサコンポーネントを含み、標準的なPCIバスプロトコルを使用してPCIバス412とインターフェイスをとる。SCSIバス・アダプタ430は、部分的に後述されるSCSIバスプロトコルを使用してSCSIバス416とインターフェイスをとる。SCSIバス・アダプタ430は、SCSIバスに接続された各大容量記憶デバイス424〜426、又は、SCSIデバイス内に一般的に内蔵されたSCSIコントローラ(図示せず)とコマンド及びデータを交換する。SCSIコントローラは、SCSIバスを介してSCSIアダプタから受信したSCSIコマンドを解釈及び応答し、論理デバイスとインターフェイスをとり論理デバイスを制御することによりSCSIコマンドを実施するハードウェア/ファームウェアコンポーネントである。論理デバイスは、1台以上の物理デバイス、又は、1台以上の物理デバイスの一部分に対応する。物理デバイスは、ディスク、テープ及びCD−ROMドライブのようなデータ記憶デバイスを含む。
入出力コマンドと呼ばれる二つの重要なタイプのコマンドは、論理デバイスからのデータの読出しと論理デバイスへのデータの書込みをSCSIデバイスに命令する。入出力トランザクションは、コンピュータシステムの2台のコンポーネント間でのデータの交換であり、CPU402のような処理コンポーネントによって一般的に開始され、読出し入出力コマンド又は書込み入出力コマンドによって、部分的に、実施される。したがって、入出力トランザクションは、読出し入出力トランザクション及び書込み入出力トランザクションを含む。
SCSIバス416は、複数のデータビットを同時に伝送できるパラレルバスである。SCSIバスによって同時に伝送され得るデータビットの個数はバスの幅と呼ばれる。様々なタイプのSCSIバスは8ビット、16ビット及び32ビットの幅を有する。16ビット及び32ビットのSCSIバスはワイドSCSIバスと呼ばれる。
すべてのコンピュータバス及びプロセッサと同様に、SCSIバスは、演算とバス上のデータ転送の速度を決めるクロックによって制御される。SCSIバスの幅と、SCSIバスが動作するクロックレートとの組み合わせは、1秒当たりにSCSIバスを介して伝送されるバイト数、すなわち、SCSIバスの帯域幅を決める。様々なタイプのSCSIバスは毎秒2メガバイト(Mbyte)未満から毎秒40Mbyteまでに達し、今後は毎秒80Mbyteまで、おそらく毎秒160Mbyteまでの増加が計画されている帯域幅を有する。帯域幅の増加はSCSIバスの物理長の限界の増加に伴って起こる。
図5はSCSIバステクノロジーを示す。コンピュータシステム502、又は、その他のハードウェアシステムは、1台以上のSCSIバス・アダプタ504及び506を含む。SCSIバス・アダプタ、SCSIバス・アダプタが制御するSCSIバス、及びSCSIバスに取り付けられた周辺デバイスは、一体となってドメインを構成する。図5においてSCSIバス・アダプタ504は第1のドメイン508と関連付けられ、SCSIバス・アダプタ506は第2のドメインと関連付けられる。殆どの現行のSCSI−2バス実施は、15台の異なるSCSIデバイス513〜515及び516〜517が単一のSCSIバスに取り付けられることを可能にする。図5において、SCSIデバイス513〜515は、SCSIバス・アダプタ506によって制御されるSCSIバス518に取り付けられ、SCSIデバイス516〜517はSCSIバス・アダプタ504によって制御されるSCSIバス520に取り付けられる。各SCSIバス・アダプタ及びSCSIデバイスは、特定のSCSIバスにおいてデバイス又はアダプタを一意に特定するSCSI識別番号、すなわち、SCSI_IDを有する。慣例的に、SCSIバス・アダプタのSCSI_IDは7であり、SCSIバスに取り付けられたSCSIデバイスのSCSI_IDは、0から6まで、及び8から15まで変動する。SCSIデバイス513のようなSCSIデバイスは、各論理デバイスが1台以上の物理デバイスの一部分を構成する複数の論理デバイスとインターフェイスをとる。各論理デバイスは、論理デバイスを制御するSCSIデバイス毎に論理デバイスを一意に特定する論理ユニット番号(LUN)によって特定される。例えば、SCSIデバイス513は、それぞれ、0、1及び2のLUNを有する論理デバイス522〜524を制御する。SCSIの用語によれば、SCSIバス上で入出力コマンドを開始するデバイスはイニシエータ(initiator)と呼ばれ、SCSIバスを介して入出力コマンドを受信し、SCSIデバイスに入出力動作の実行を命令するSCSIデバイスはターゲット(target)と呼ばれる。
一般に、SCSIバス・アダプタ504及び506のようなSCSIバス・アダプタは、コマンドをターゲットデバイスへ送信することにより入出力動作を開始する。ターゲットデバイス513〜515及び516〜517は、SCSIバスから入出力コマンドを受信する。ターゲットデバイス513〜515及び516〜517は、次に、論理デバイスからデータを読み出し、そのデータを、SCSIバスを介して、イニシエータへ返送するために、又は、イニシエータからSCSIバスを介して受信されたデータを論理デバイスへ書き込むために制御する1台以上の論理デバイスとインターフェイスをとることにより、コマンドを実施する。最後に、ターゲットデバイス513〜515及び516〜517は、コマンドの実施の成功又は失敗を示す状態メッセージを用いてSCSIバスを介してイニシエータに応答する。
図6A〜6Cは、読出し及び書込み入出力動作の開始及び実施に関与するSCSIプロトコルを示す。読出し及び書込み入出力動作はSCSIデバイスによって実行される入出力動作の大半を構成する。SCSIバスによって相互接続された大容量記憶デバイスのシステムの動作の効率を最大化するための努力は、最も一般的には、読出し及び書込み入出力動作が実行される効率を最大化することへ向けられる。したがって、以下の議論では、種々のハードウェアデバイスのアーキテクチャ上の特色が読出し及び書込み動作に関して説明される。
図6Aは、SCSIイニシエータ、最も一般的にはSCSIバス・アダプタによるSCSIターゲット、最も一般的には1台以上の論理デバイスに関連したSCSIデバイスに内蔵されたSCSIコントローラへの読出し又は書込み入出力コマンドの送信を表す。読出し又は書込み入出力コマンドの送信は、SCSI入出力動作のコマンドフェーズと呼ばれる。図6Aは、中心垂直線606によってイニシエータ602のセクションとターゲット604のセクションに分割される。イニシエータセクションとターゲットセクションの両方は、SCSIバスの状態を記述する「状態」606及び608という名前が付けられた列と、イニシエータ及びターゲットのそれぞれに関連したSCSIバスイベントを記述する「イベント」610及び612という名前が付けられた列とを含む。入出力コマンドの送信に関与するバス状態及びバスイベントは、図6Aの上端から図6Aの下端まで時間順に並べられる。図6B〜6Cはこの上記のフォーマットに従う。
図6Aに示されたイニシエータSCSIバス・アダプタからターゲットSCSIデバイスへの入出力コマンドの送信は、ターゲットSCSIデバイスによる読出し又は書込み入出力動作を開始する。図4を参照すると、SCSIバス・アダプタ430は入出力トランザクションの一部として入出力動作を開始する。一般に、SCSIバス・アダプタ430は、PCIバス412、システムコントローラ404、及びCPUバス406を介して、SCSIバス・アダプタに読出し動作又は書込み動作のいずれかを実行することを命令するCPU402から読出し又は書込みコマンドを受信する。読出し動作の際、CPU402は、大容量記憶デバイス424〜426からデータを読み出し、そのデータをSCSIバス416、PCIバス412、システムコントローラ404、及びメモリバス410を介して、システムメモリ408内のあるロケーションへ転送することをSCSIバス・アダプタ430に命令する。書込み動作の際、CPU402は、システムメモリ408から、メモリバス410、システムコントローラ404、及びPCIバス412を介して、SCSIバス・アダプタ430にデータを転送することをシステムコントローラ404に命令し、SCSIバス416を介して、データが書き込まれる大容量記憶デバイス424〜426へデータを送信することをSCSIバス・アダプタ430に命令する。
図6Aは、現在SCSIデバイス上で伝送されているコマンド又はデータが存在しないことを示すバスフリー(BUS FREE)状態614のSCSIバスで始まる。イニシエータ、すなわち、SCSIバス・アダプタは、バスを調停(ARBITRATION)状態616とするためSCSIバスのBSY、D7及びSEL信号線をアサート(assert)する。この状態では、イニシエータは、デバイスのすべてにSCSIバス上でコマンドを送信する意図を知らせる。いかなる時点でも1台のデバイスだけがSCSIバスの動作を制御するので、調停が必要である。イニシエータがSCSIバスの制御を取得すると仮定するならば、イニシエータは、次に、SCSIバスを選択(SELECTION)状態618に入れるため、ATN信号線、及びターゲットSCSI_IDに対応するDX信号線をアサートする。イニシエータ又はターゲットは、上記の調停状態616から選択状態618への状態の変化のようなSCSIバス状態変化を実行するため、特定のシーケンスで種々のSCSI信号線をアサートし、ドロップさせる。これらのシーケンスは、特許文献1やANSI規格に記載されているので、これ以上の説明は行われない。
ターゲットがイニシエータによって選択されたことをターゲットが感知したとき、ターゲットは、入出力動作のコマンドフェーズを終了するためSCSIバスの制御620を引き受ける。ターゲットは、次に、メッセージアウト(MESSAGE OUT)状態622へ入るためにSCSI信号線を制御する。メッセージアウト状態で起こる最初のイベントにおいて、ターゲットはイニシエータから識別(IDENTIFY)メッセージ623を受信する。識別メッセージ623は、後に続くコマンドメッセージがアドレス指定されるLUNを特定する論理ユニット番号(LUN)フィールド624を含む。識別メッセージ623は、後に続く入出力コマンドをターゲットが実施する間にターゲットがSCSIバスとの接続を切断することを許可されたことをターゲットに知らせるために一般的にセットされるフラグ625をさらに含む。ターゲットは、次に、後続の入出力コマンドがどのようにキュー入れされるべきであるかをターゲットに知らせ、同時にターゲットにキュータグ627を供給するキュータグ(QUEUE TAG)メッセージ626を受信する。キュータグは入出力コマンドを特定するバイトである。SCSIバス・アダプタは、したがって、LUN毎に256通りの入出力コマンドを同時に管理可能である。イニシエータSCSIバス・アダプタのSCSI_IDと、ターゲットSCSIデバイスのSCSI_IDと、ターゲットLUNと、キュータグとの組み合わせは、一体として、SCSIバス内で後に続く入出力コマンドに対応する入出力動作を一意に特定するI_T_L_Qネクサス参照番号を構成する。次に、ターゲットデバイスはコマンド(COMMAND)状態628へ入るためにSCSIバス信号線を制御する。コマンド状態において、ターゲットはイニシエータからの入出力コマンド630を要求し受信する。入出力コマンド630は、実行されるべき特別なコマンド、この場合には、読出しコマンド又は書込みコマンドを特定するオペコード(opcode)632と、そのコマンドによって指定された読出し又は書込み動作の開始点である論理デバイスの論理ブロックを特定する論理ブロック番号636と、コマンドの実行中に読み出されるか又は書き込まれるブロック数を指定するデータ長638とを含む。
ターゲットが入出力コマンドを受信し処理したとき、ターゲットデバイスは、ターゲットデバイスが切断メッセージ642をイニシエータデバイスに返信するメッセージイン(MESSAGE IN)状態640へ入るためにSCSIバス信号線を制御する。ターゲットは、一般に、ターゲットはコマンドによって指定された読出し又は書込み動作のため論理デバイスに準備させるために論理デバイスと相互作用を開始するので、SCSIバスとの接続を切断する。ターゲットは、データを受信するバッファを準備する必要があり、ディスクドライブ又はCD−ROMドライブの場合、ターゲットデバイスは、読出し又は書込みコマンドの開始点として指定された適切なブロックにシーク(seek)することを論理デバイスに命令する。切断によって、ターゲットデバイスは、SCSIバス・アダプタとターゲットデバイスとの間の付加的なメッセージ、コマンド、又は、データの伝送のためSCSIバスを解放する。このようにして、複数の異なる入出力動作がSCSIバス上で同時に多重化される。最終的に、ターゲットデバイスはSCSIバスをバスフリー状態644へ戻すためにBSY信号線をドロップさせる。
ターゲットデバイスは、次に、読出し又は書込み動作のため論理デバイスを準備させる。論理デバイスがデータを読み出し又は書き込む準備を完了したとき、入出力動作のデータフェーズが続く。図6Bは、SCSI入出力動作のデータフェーズを示す。SCSIバスは最初にバスフリー状態646である。ターゲットデバイスは、読出し入出力コマンドに応答してデータを返送するか、又は、書込み入出力コマンドに応答してデータを受け取る準備が完了しているので、調停状態648へ入るためにSCSIバス信号線を制御する。ターゲットデバイスがSCSIバスの制御の調停に成功するならば、ターゲットデバイスは再選択(RESELECTION)状態650へ入るためにSCSIバス信号線を制御する。再選択状態は、図6Aの上記の議論で説明された選択状態に類似しているが、SCSIバス・アダプタの選択を行うのはターゲットデバイスであり、SCSIバス・アダプタが選択状態であるターゲットデバイスを選択するのではない。
ターゲットデバイスがSCSIバス・アダプタを選択すると、ターゲットデバイスはSCSIバスをメッセージイン状態652へ入れるためにSCSIバス信号線を操作する。メッセージイン状態では、ターゲットデバイスは、識別メッセージ654とキュータグメッセージ656の両方をSCSIバス・アダプタへ送信する。これらのメッセージは、図6Aに示されたイニシエータからターゲットへの入出力コマンドの伝送中にイニシエータによってターゲットデバイスへ送信された識別メッセージ及びキュータグメッセージと同じである。イニシエータは、読出し動作の場合にはターゲットからイニシエータへ続いてデータを送信するための入出力トランザクションを、或いは、書込み動作の場合にはイニシエータによって続いてデータが送信される入出力トランザクションを特定するために、I_T_L_Qネクサス参照番号(nexus reference number)と、イニシエータ及びターゲットデバイスのSCSI_IDの組み合わせと、ターゲットLUNと、キュータグメッセージに含まれるキュータグとを使用する。I_T_L_Qネクサス参照番号は、したがって、読出しの場合にターゲットデバイスからのデータを受信し、書込みの場合にターゲットデバイスへデータを送信する適切なバッファを見つけるために、SCSIバス・アダプタによって未解決の入出力コマンドのテーブルへのインデックスとして使用される入出力動作ハンドルである。
識別メッセージ及びキュータグメッセージを送信した後、ターゲットデバイスはデータ(DATA)状態658へ遷移するためにSCSI信号線を制御する。読出し入出力動作の場合、SCSIバスはデータ入力(DATA IN)状態へ遷移する。書込み入出力動作の場合、SCSIバスはデータ出力(DATA OUT)状態へ遷移する。SCSIバスがデータ状態である間に、ターゲットデバイスは、各SCSIバス・クロックサイクル中に、データが送信される特別なSCSIの幅にビット数が一致するサイズを有するデータユニットを送信する。一般に、データの各ユニットの転送の一部として信号線ACK及び信号線REQを必要とするSCSIバス信号線ハンドシェイク(handshake)が存在する。読出し入出力コマンドの場合、例えば、ターゲットデバイスは、次のデータユニットをSCSIバスに置き、REQ信号線をアサートする。イニシエータは、REQ信号線のアサートを感知し、送信されたデータをSCSIバスから取り出し、データの受け取りを承認するためにACK信号線をアサートする。このタイプのデータ転送は非同期転送と呼ばれる。SCSIバスプロトコルは、ターゲットデバイスがイニシエータから最初の肯定応答(acknowledgement)を受信する前にある特定の個数のデータユニットを転送することをさらに許可する。同期転送と呼ばれるこの転送モードでは、最初のデータユニットの送信とその送信に対する肯定応答の受信との間の待ち時間(latency)は避けられる。データ送信中に、ターゲットデバイスは、セーブポインタ(SAVE POINTERS)メッセージ及びその後に続く切断メッセージをイニシエータへ送信し、次に、バスフリー状態へ入るようにSCSIバス信号線を制御することにより、データ送信を中断する。これは、ターゲットデバイスがさらなるデータを受信又は送信する前にそのターゲットデバイスが制御する論理デバイスと相互作用するために一時停止することを可能にさせる。SCSIバスから切断した後、ターゲットデバイスは、SCSIバスの制御を後で再び調停し、付加的な識別メッセージ及びキュータグメッセージをイニシエータへ送信するので、イニシエータはそのイニシエータが中断させられた時点でデータ受信又は転送を再開可能である。切断及び再接続660の一例は図6Bに表され、データ状態658を中断する。最終的に、入出力動作のすべてのデータが送信されたとき、ターゲットデバイスはメッセージイン状態662へ入るためにSCSI信号線を制御し、そのメッセージイン状態では、ターゲットデバイスが切断メッセージをイニシエータへ送信し、場合によってセーブポインタメッセージが切断メッセージよりも先行する。切断メッセージを送信した後、ターゲットデバイスは、SCSIバスがバスフリー状態664へ遷移するようにBSY信号線をドロップさせる。
図6Bに示されるように、入出力動作のためのデータの送信に続いて、ターゲットデバイスは、入出力動作の状態フェーズ中に状態をイニシエータへ返送する。図6Cは入出力動作の状態フェーズを示す。図6A〜6Bのように、SCSIバスは、バスフリー状態666から、図6Bのように、調停状態668、再選択状態670、及びメッセージイン状態672へ遷移する。メッセージイン状態672中のターゲットによるイニシエータへの識別メッセージ674及びキュータグメッセージ676の送信に続いて、ターゲットデバイスはステータス(STATUS)状態へ入るためにSCSIバス信号線を制御する。ステータス状態678では、ターゲットデバイスは、入出力コマンドが成功完了したかどうかを示すために単一の状態バイト684をイニシエータへ送信する。図6Cにおいて、成功完了に対応する状態バイト680は、0という状態コードで示され、ターゲットデバイスからイニシエータへ送信されることが表されている。状態バイトの送信に続いて、ターゲットデバイスは、次に、ターゲットデバイスがコマンド完了(COMMAND COMPLETE)メッセージ684をイニシエータへ送信するメッセージイン状態682へ入るためにSCSIバス信号線を制御する。この時点で、入出力動作が完了している。ターゲットデバイスは、次に、SCSIバスがバスフリー状態686へ戻るようにBSY信号線をドロップさせる。SCSIバス・アダプタは、この時点で、入出力コマンドの割当部分を終え、そのコマンドを実行するため割り付けられた内部リソースを解放し、完了メッセージ又は状態を、PCIバスを介して、CPUへ返送することが可能である。
SCSIプロトコルのFCPへのマッピング
図7A及び7Bは、図6A〜6Cに記載されたイニシエータ及びターゲットとSCSIバスフェーズ及び状態との間で交換されたFCPシーケンスのマッピングを示す。図7A〜7Bにおいて、ターゲットSCSIアダプタは、FCPホストアダプタと一緒にパッケージ化されていると仮定され、ターゲットSCSIアダプタはFCを介してイニシエータと通信可能であり、SCSIバスを介してターゲットSCSIデバイスと通信可能である。図7Aは、読出し入出力トランザクションに対するFCPシーケンスとSCSIフェーズ及び状態との間のマッピングを表す。トランザクションは、イニシエータがFCを介してFCPコマンド(FCP_CMND)702データ・ペイロードを含む単一フレームFCPシーケンスをターゲットSCSIアダプタへ送信するときに開始される。ターゲットSCSIバス・アダプタがFCPコマンドフレームを受信するとき、ターゲットSCSIバス・アダプタは、調停、再選択、メッセージアウト、コマンド及びメッセージインを含む図6Aに示されたコマンドフェーズ704のSCSI状態を移る。図6Aに示されるように、コマンドフェーズの終わりに、入出力トランザクションのターゲットであるSCSIデバイスは、SCSIバスを解放するためにSCSIバスとの接続を切断し、同時に、ターゲットSCSIデバイスはトランザクションを実行するために準備する。後で、ターゲットSCSIデバイスは、SCSIバス制御を再調停し、入出力トランザクションのデータフェーズ706を始める。この時点で、SCSIバス・アダプタは、データ伝送が現在進行可能であることを知らせるためにFCP転送準備完了(FCP_XFER_RDY)単一フレームシーケンス708をイニシエータへ返信する。読出し入出力トランザクションの場合に、FCP_XFER_RDY単一フレームシーケンスはオプションである。データフェーズが継続すると共に、ターゲットSCSIデバイスは、論理デバイスからデータを読み出し始め、SCSIバスを介してそのデータをターゲットSCSIバス・アダプタへ送信する。ターゲットSCSIバス・アダプタは、次に、ターゲットSCSIデバイスから受信されたデータを、入出力トランザクションに対応するエクスチェンジの第3のシーケンスを構成する複数のFCPデータ(FCP_DATA)フレームにパッケージ化し、これらのFCP_DATAフレームを、FCを介して、イニシエータへ返送する。すべてのデータが送信され、ターゲットSCSIデバイスがSCSIバスの制御を解放したとき、ターゲットSCSIデバイスは、次に、入出力トランザクション714の状態フェーズを開始するためにSCSIバスの制御を再び調停する。このフェーズにおいて、SCSIバスは、ターゲットSCSIデバイスからターゲットSCSIバス・アダプタへSCSI状態バイトを送信するために、図6Cに示されるように、バスフリー状態から、調停状態、再選択状態、メッセージイン状態、ステータス状態、メッセージイン状態、及びバスフリー状態を経由して遷移する。状態バイトを受信すると、ターゲットSCSIバス・アダプタは、状態バイトをFCPレスポンス(FCP_RSP)単一フレームシーケンス716にパッケージ化し、FCP_RSP単一フレームシーケンスを、FCを介して、イニシエータへ返信する。これは読出し入出力トランザクションを完了する。
多くのコンピュータシステムには、ターゲットFCホストアダプタとターゲットSCSIバス・アダプタとの間に、PCIバスのような付加的な内部コンピュータバスがある。換言すれば、FCホストアダプタ及びSCSIアダプタは単一のターゲットコンポーネントに一緒にパッケージ化されない。簡易化するために、その付加的な相互接続は図7A〜Bには表されていない。
図7Bは、図7Aと類似した形式で、FCPコマンドフレーム718によって示された書込み入出力トランザクション中のFCPシーケンスとSCSIバスフェーズ及び状態との間のマッピングを表す。図7Bが図7Aと相違するのは、書込みトランザクション中に、FCP_DATAフレーム722〜725がイニシエータからFCを介して送信され、ターゲットからイニシエータへ送信されるFCP_XFER_RDY単一フレームシーケンス720が、読出し入出力動作の場合のようにオプションではなく、不可欠であるという点だけである。図7Aと同様に、書込み入出力トランザクションは、ターゲットがFCP_RSP単一フレームシーケンス720をイニシエータへ返送するときを含む。
IDE/ATAディスクドライブ
IDE/ATAドライブは、ディスクロジックコントローラとハードディスクを一体的に単一のモジュールとして統合するために開発された。IDE/ATAドライブは、ISAバスを用いてPCシステムに容易に統合するため特に設計された。当初、IDE/ATAドライブは、システム又はバスクロックによって制御された離散的な時間間隔でIDE/ATAドライブとシステムとの間で2バイトのデータを交換できるようにするためパラレル16ビット相互接続を用いて設計された。残念ながら、パラレルバス相互接続は性能限界に到達し、現行のデータレートは100〜133MB/秒であり、40〜80ピンのリボンケーブル接続は、もはや最新コンピュータシステム内の内部コンポーネントの余裕のない高密度パッケージングとの互換性がない。これらの理由のため、SATA規格が開発され、80ピンのリボンケーブル(ribbon cable)接続が4導体シリアルケーブルで置き換えられたSATAディスクドライブがこれまでのところ生産されている。SATAディスクの初期データレートは150MB/秒であり、直ぐに300MB/秒まで増加し、その後、600MB/秒まで増加することが予想される。標準的な8B/10B符号化が、ATAシリアルディスクドライブと周辺コンポーネント相互接続(peripheral component interconnect:PCI)に基づくコントローラとの間で転送するデータを直列化するため使用される。残念ながら、様々な入出力コントローラを統合し、周辺デバイス及びバスへのインターフェイスを提供し、1台以上のCPUとメモリを連結する第2のブリッジとの間でデータを転送するサウスブリッジ(Southbridge)コントローラは、SATAデバイスの直接的な相互接続を提供するためにSATAテクノロジーを完全に組み込むよう設計される。
ATAインターフェイス、特に、ATA−5及びATA−6の標準的なインターフェイスは、外部プロセッサ又は論理コントローラが基本的なデータ転送コマンド、シーク、キャッシュ管理、並びに、その他の管理及び診断関連タスクを実行することをATAディスクドライブ内の論理コントローラに命令することを可能にさせる多種多様なコマンドをサポートする。以下の表2は、プロトコル「1」のようなプロトコル番号を一般的なタイプのATAコマンドと関係付ける。コマンドのタイプには、プログラムド入出力(PIO)、非データコマンド、及びダイレクトメモリアクセス(DMA)コマンドが含まれる。
以下に記載された表3は、複数のATAコマンドを、上記の表2に定義されたようなそのコマンドが属するコマンドタイプを含む対応するプロトコルと共に列挙する。
パワーモードチェックコマンドは、ホストがATAデバイスの現在のパワーモードを決定することを可能にさせる。マイクロコードダウンロードコマンドは、ホストがATAデバイスのマイクロコードを変更することを可能にさせる。エグゼクティブデバイス診断コマンドは、ホストがATAデバイスによって実施される診断テストを呼び出すことを可能にさせる。フラッシュキャッシュコマンドは、ATAデバイスがその書込みキャッシュをフラッシュすることをホストに要求させる。このコマンドの二つのバージョンがテーブルに収容され、拡張版はATA−6標準インターフェイスをサポートするデバイス上で48ビットのアドレス指定機能が利用できることを表す。表3に表すコマンドをさらに詳しくしたものは、別個に下記しない。デバイス識別コマンドは、ホストがATAデバイスに、そのデバイスによって与えられる論理セクタ数、シリンダ数及びヘッド数と、デバイスによってサポートされるコマンドと、デバイスによってサポートされる機能と、その他のパラメータとを含むパラメータ情報を問い合わせることを可能にさせる。DMA読出しコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるDMAデータ転送プロトコルを使用してデバイスからデータを読み出すことを可能にさせる。セクタ検証読出し(READ VERIFY SECTORS)コマンドは、ホストがホスト内に格納されたデータの一部分を読み出すようATAデバイスに命令し、デバイスから読み出されたデータをホストへ転送せずにエラー条件が発生したかどうかを決定することを可能にさせる。シーク(SEEK)コマンドは、ホストが後のコマンドで1個以上の特殊な論理ブロックにアクセスできることをATAデバイスに通知し、指定された1個以上の論理ブロックへの後のアクセスを実行するために、デバイスがヘッド位置決めを最適化することを可能にする。フィーチャー設定(SET FEATURES)コマンドは、ホストが、ATAデバイス内の種々のパラメータを、そのデバイスによって提供される機能のオンとオフを切り換えるために修正することを可能にさせる。スリープコマンドは、ホストがATAデバイスに対して、スピンダウンし、後のリセットコマンドを待つことを命令することを可能にさせる。DMA書込みコマンドは、ホストが、一般的に大量のデータに対して非常に効率的であるDMAデータ転送を使用してATAデバイスにデータを書き込むことを可能にさせる。
FCベースのディスクアレイ
中規模及び大規模コンピュータシステムでは、データ記憶装置の要件は、一般的に、内蔵ディスクドライブを含む内蔵型大容量記憶デバイスの能力を遙かに超えている。このようなシステムでは、ローカルエリアネットワーク、光ファイバネットワーク、及びその他の高帯域幅通信媒体を介して中規模かつ高性能であるコンピュータシステムにリンクされた内部プロセッサを含む、低コストディスクの冗長アレイ(redundant arrays of inexpensive disks:RAID)のような高性能大容量デバイスを利用することが一般的になり始めている。ディスクアレイの設計及び製造を容易化するため、ディスク製造業者は、ディスクアレイ内のディスクドライブをディスクアレイ・コントローラへ直接的に相互接続するためにFCポートを含むディスクドライブを供給する。一般に、FC調停ループトポロジーは、個々のFCディスクドライブをディスクアレイ・コントローラへ相互接続するためディスクアレイ内で採用される。
図8A〜Dは、ディスクアレイ内でのFCディスクの使用に関する複数の問題点を示す。図8Aは、ディスクアレイの内部コンポーネントのかなり抽象的な表現である。後述の図8B〜Dと図9は、同じ説明図の慣例を採用する。図8Aにおいて、ディスクアレイ・コントローラ802は、高帯域幅通信媒体804を介して遠隔のコンピュータシステム及びその他の遠隔のエンティティに相互接続される。ディスクアレイ・コントローラは、1台以上のプロセッサと、1台以上の一般的にかなり大規模な電子メモリと、ディスクアレイ内のディスクドライブへの比較的上位レベルの論理ユニット及び論理ブロックインターフェースを遠隔のコンピュータシステムに提供するために、ディスクアレイ制御ファームウェア及びソフトウェアがディスクアレイ・コントローラ内に記憶され実行されることを可能にさせるその他のコンポーネントとを含む。図8Aに示されるように、ディスクアレイは、ディスクアレイ・コントローラ802と複数台のFCディスクドライバ806〜813を含む。FCディスクドライブはFC調停ループ814を介してディスクアレイ・コントローラ802と相互接続される。図8Aに抽象的に示されているようなFCベースのディスクアレイは、標準的かつ容易に入手可能なFCディスクを記憶媒体として使用し、相互接続のためのFC調停ループを使用し、ディスクアレイ・コントローラ内で標準的なFCコントローラを使用して、比較的簡単に設計、製造される。FCは高速シリアル通信媒体であるため、FC調停ループ814は、FCディスク806〜813とディスクアレイ・コントローラ802との間にデータ転送のための豊富な帯域幅を提供する。
しかし、FCディスクドライブのようなFC調停ループ内の各FCノードには、データが処理され、そのノードのFCポートを介して転送されるときに、有意なノード遅延が存在する。ノード遅延は、添え字付きの小文字「t」でラベルが付けられた短い矢印を用いて図8Aに示されている。ノード遅延はFC調停ループ内で累積的であり、FC調停ループ内のFCノードの台数に比例するかなりの累積ノード遅延を引き起こす。
図8Aに示されたディスクアレイ実施に関する第2の問題点は、FC調停ループが潜在的な単一障害点(single point of failure)を示すことである。一般に、FCディスクは、機能しないFCディスクを調停ループから分離させるためにポートバイアス回路で補強されるが、ポートバイアス回路だけでは防止できない複数の異なる故障モードが存在する。
第3の問題点は、ノードを調停ループにリンクするFCポートが故障するときに現れる。このような場合には、複雑であり、かつ、信頼できない技術が故障したFCポートを特定し分離することを試みるために利用される筈である。一般に、故障したFCポートはループトポロジーを中断させ、ディスクアレイ・コントローラは、故障したノードを分離させるために、各ノードをバイパスするようにポートバイパス回路を作動することを続いて試みるに違いない。しかし、この技術は、種々の故障モードの下で、故障したノードを特定できない。したがって、ノード故障は調停ループトポロジーによって生じる重大な問題である。
図8Bは、潜在的な単一障害点問題の解決策を示す。図8Bに示されるように、ディスクアレイ・コントローラ802は、2個の別個の独立したFC調停ループ814及び816を介してFCディスク806〜813と相互接続される。2個の別個のFC調停ループを使用することによって、単一障害点問題は概ね除去される。しかし、ノード遅延問題は2個のFC調停ループを使用しても改善されない。その上、各FCディスクは2個の別個のFCポートを含む必要があるので、個別のFCディスクはかなり複雑になり、かつ、高価になる。最終的に、故障したポートの特定及び分離問題は一部しか解決されないが、その理由は、2個の調停ループのうちの一方を中断するノード故障の場合、もう一方の調停ループは機能し続けるが、通信媒体に二重の冗長性が存在しなくなるからである。二重の冗長性を回復するために、ディスクアレイ・コントローラは、故障したノードを特定し分離することを試みることが依然として必要であり、上記のように、複数の故障ノードは特定及び分離が難しい。
図8Cは、FCベースのディスクアレイの実施によって生じるさらに別の問題点を示す。一般に、ディスクアレイから要求される高可用性記憶空間の量が増大すると、その結果として、より多数の個別のFCディスクが追加される。しかし、付加的なディスクの収容はノード遅延問題を悪化させ、上記のように、単一FC調停ループは最大で127台のノードしか収容しない。この最大ノード問題を解決するため、付加的な独立したFC調停ループがディスクアレイに追加される。図8Dは、第1のFCディスクの組818が2個の別個のFC調停ループ814及び816を介してFCコントローラ802と相互接続され、第2のFCディスクの組820が第2のFC調停ループ822及び824のペアを介してディスクアレイ・コントローラ802と相互接続されたより高容量のディスクアレイを示す。FCディスクの組818及び820のそれぞれはシェルフと呼ばれ、一般に、冗長なパワーシステム、冗長な制御パス、及びディスクアレイの全体的な耐故障性及び高可用性に寄与するその他の機能と共に別個の筐体に収容される。しかし、各シェルフの追加は、ディスクアレイ・コントローラ802内のFCコントローラ及びFCポートの台数を増加させる。別個のFC調停ループのそれぞれはFC調停ループ内に収容されたFCノードの累積的なノード遅延が起こることに注意すべきである。ディスクアレイの設計者、製造業者及び使用者は、よって、FCベースのディスクアレイ内でディスクアレイ・コントローラとFCディスクを相互接続するよりフレキシブルであり、より費用効率が高く、より効率的な方法の必要性を認識した。その上、ディスクアレイの設計者、製造業者及び使用者は、ポート故障と、その他の通信故障及びコンポーネント故障とをより容易かつより高い信頼性で特定することを可能にする、FCベースのディスクアレイ内のディスクアレイ・コントローラとFCディスクを相互接続する方法の必要性を認識した。
ディスクドライブ専用フォーマッティング及びディスクドライブエラー検出
ディスクドライブ技術及び実施は、他のタイプの大容量記憶デバイスと同様に、発展し続けている。ディスクアレイ製造御者は、最も費用効率が高く、技術的に進歩したディスクドライブをディスクアレイに使用することを望む。しかし、ディスクアレイ・コントローラは、現在利用可能であるディスクドライブ・インターフェイスのうちの1〜数個だけとインターフェイスをとるように実施され、新しいフォーマッティング規約を含む新しいインターフェイスを備えた新しいディスクドライブを組み込むことは、コスト高であり、かつ、時間を要するディスクアレイ・コントローラのリエンジニアリング(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年
本発明の一実施形態は、ディスクアレイ又はその他の大規模の別個に制御される大容量記憶デバイス内で単独若しくは組み合わせて利用され、ストレージシェルフ内のディスクドライブを高帯域幅通信媒体に相互接続する、ストレージシェルフ・ルータの集積回路型実施であり、その高帯域幅通信媒体が次にストレージシェルフをディスクアレイ・コントローラ、又は、同様の大容量記憶デバイスのコントローラと相互接続する。上記の実施形態は、ディスクドライブと1台以上のストレージシェルフ・ルータとの間に冗長な通信リンクを提供するパスコントローラカードをさらに含む。上記のように、図8A〜Dを参照すると、ディスクアレイは、現在、ストレージシェルフ内でFC互換性ディスクドライブを利用し、各FC互換性ディスクドライブは、FC互換性ディスクドライブをディスクアレイ・コントローラと相互接続する1個若しくは2個のFC調停ループ又はその他のFCファブリックトポロジーでFCノードとして機能する。これに対して、本発明の一実施形態を部分的に表すストレージシェルフ・ルータは、ポイントツーポイントシリアル通信媒体によってストレージシェルフ内の各ディスクドライブと直接接続され、かつ、ファイバチャネル調停ループのような1個以上の高帯域幅通信媒体によってディスクアレイ・コントローラと相互接続された中間通信ハブとして機能する。
概要
図9は、図8A〜Dのため利用された説明図の規約を使用して、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す。図9において、ディスクアレイ・コントローラ902は、LAN又は光ファイバ通信媒体904を介して、1台以上の遠隔のコンピュータシステムにリンクされる。ディスクアレイ・コントローラ902は、FC調停ループ908を介して、ストレージシェルフ・ルータ906と相互接続される。ストレージシェルフ・ルータ906は、相互接続918のような別個のポイントツーポイント相互接続を介して、ストレージシェルフ910〜917内の各ディスクドライバと直接的に相互接続される。図9に抽象的に示された実施と図8A〜Dに示された実施を比較すると、図8A〜Dに示された実施によって特定された問題がストレージシェルフ・ルータに基づく実施によって解決されることが容易に認められる。第一に、図9に表された実施のFC調停ループ内のノード遅延だけが、単一のFC調停ループノードとして機能するストレージシェルフ・ルータによってもたらされる遅延である。これに対して、図8Aに示されるように、各FC互換性ディスクドライブは別個のノード遅延をもたらし、FC調停ループ814上の累積的なノード遅延はFC調停ループによって相互接続されたFC互換性ディスクドライブの台数に比例する。ストレージシェルフ・ルータは、FCポートと、ストレージシェルフ・ルータを個別のディスクドライブへリンクする内部シリアル相互接続との間で、高度に並列化され効率的なデータ転送を容易に行うように設計される。したがって、ストレージシェルフ・ルータをFC調停ループ908に相互接続するオンボードFCコントローラによってもたらされる避けられないノード遅延の他に、実質的な遅延及び累積的な遅延はストレージシェルフ・ルータによってもたらされない。
図9に表された実施に利用されるFC調停ループ908は、ディスクアレイ・コントローラとストレージシェルフ・ルータの2台のノードだけを含む。各ストレージシェルフ・ルータが8台のディスクドライブをFC調停ループと相互接続可能であると仮定すると、単一のFC調停ループは、125台のストレージシェルフ・ルータを、通常はFCファブリックのために確保されているアドレスがストレージシェルフ・ルータによって使用される場合には、126台のストレージシェルフ・ルータを、ディスクアレイ・コントローラに相互接続するため使用できるので、単一のFC調停ループを介して8000台以上の個別のディスクドライブをディスクアレイ・コントローラに相互接続する。上記のように、高可用性が必要とされないとき、16000台以上の個別のディスクドライブが単一のFC調停ループを介してディスクアレイ・コントローラと相互接続される。これに対して、図8Cに示されるように、個別のFC互換性ディスクドライバがそれぞれに別個のFCノードとして機能するとき、125台のディスクドライバだけが、或いは、FCファブリックのために通常確保されたアドレスがディスクドライブのため使用されるならば、126台のディスクドライブが、単一のFC調停ループを介してディスクアレイ・コントローラと相互接続される。
ディスクドライブは、複数の現在利用可能な内部相互接続トポロジーのいずれかを用いてストレージシェルフ・ルータ906に接続される。一実施形態では、SATA互換性相互接続はSATAディスクドライブをストレージシェルフ・ルータと相互接続するため使用される。ストレージシェルフ・ルータは、ディスクアレイ・コントローラから受信された各FCPコマンドを1個以上の等価的なATAインターフェイスコマンドに変換するロジックを含み、ストレージシェルフ・ルータがそのATAインターフェイスコマンドを適切なSATAディスクドライブへ送信する。図9に表されたストレージシェルフ・ルータは単一のFC調停ループ908を介してディスクアレイ・コントローラと相互接続されるが、上記のように、ストレージシェルフ・ルータは、より一般的には、2個のFC調停ループ又はその他のFCファブリックトポロジーを介してディスクアレイ・コントローラと相互接続される。
図10は、階層的に相互接続されたコンピュータとディスクアレイのシステム内において、本発明の一実施形態を部分的に表すストレージシェルフ・ルータが占める位置を示す図である。図10では、2台のサーバコンピュータ1001及び1004は、種々のFCファブリックトポロジーのうちのいずれかのような高帯域幅通信媒体1008を介して、互いに相互接続され、ディスクアレイ・コントローラ1006と相互接続される。ディスクアレイ・コントローラ1006は、2個の別個のFCファブリックループを介してストレージシェルフ1010と相互接続される。第1のFC調停ループ1012は、ディスクアレイ・コントローラ1006を第1のストレージシェルフ・ルータ1014と直接的に相互接続する。第2のFC調停ループ1016は、ディスクアレイ・コントローラ1006を第2のストレージシェルフ・ルータ1018と直接的に相互接続する。2台のストレージシェルフ・ルータ1014及び1018は、第1のFC調停ループ1012の一部として第1のストレージシェルフ・ルータ1014から第2のストレージシェルフ・ルータ1018へFCフレームを伝送し、第2のFC調停ループ1016の一部として第2のストレージシェルフ・ルータ1018と第1のストレージシェルフ・ルータ1014との間でFCフレームを伝送する内部ポイントツーポイントFC相互接続1020と相互接続される。その上、内部FCリンク1020は、ストレージシェルフ1010内で生成され内部で使われる内部管理及び通信のため使用されるFCフレームを伝送する。後述するように、ディスクアレイをストレージシェルフと相互接続する2本のFC調停ループを、「Xループ」又は「Xファブリック(fabric)」、及び「Yループ」又は「Yファブリック」と呼び、内部FC1020上で内部的に生成され内部的に使用される管理FCフレームのエクスチェンジをSファブリックと呼ぶことは一般的である。ストレージシェルフ1010は、4台のディスクドライブ1022〜1025、及び明示的に記載されていない12台のディスクドライブを示す省略記号1026によって図10に表された16台のSATAディスクドライブを含む。各ストレージシェルフ・ルータ1014及び1018は、シリアルリンク1028のようなポイントツーポイントシリアルリンクを介して各SATAディスクドライブと相互接続される。
図10に示されるように、ディスクアレイ・コントローラ1006及びストレージシェルフ1010を含むディスクアレイ内の相互通信経路のそれぞれには少なくとも2重の冗長性がある。さらに、ストレージシェルフ・ルータに2重の冗長性がある。たとえ、いずれかの単一リンク、又は、一方のストレージシェルフ・ルータが故障しても、残りのリンクと残りのストレージシェルフ・ルータは、ディスクアレイ・コントローラ1006とストレージシェルフ1010内の16台のSATAディスクドライブとの間で完全な接続性を維持するために、故障したリンク又は故障したストレージシェルフ・ルータがそれまで担っていた仕事を引き受けることが可能である。ディスクアレイ・コントローラは、1台以上のSATAディスクドライブの故障にもかかわらず復旧及び完全動作を可能にするため、RAIDストレージ技術の種々のレベルのような複数の異なる可用性データ記憶方式のうちのいずれかをさらに実施する。RAID技術は、例えば、2台以上のディスクドライブ上に記憶されたデータの2個以上の完全なコピーを別々に、かつ、完全に冗長的に復元する。サーバは、冗長性とフェイルオーバー(failover)機能を備えたFCファブリックのような通信媒体を介して、ディスクアレイ・コントローラ1006、及びストレージシェルフ1010のような1台以上のストレージシェルフを備えるディスクアレイと相互通信する。ディスクアレイ・コントローラは、サーバコンピュータ1002及び1004が、ストレージシェルフのディスクドライブの内部及びディスクドライブ間におけるデータの実際の位置とは無関係に、かつ、データの冗長なコピー、並びに、ディスクアレイ・コントローラ1006によって提供されるその他の機能及び特長とは関係なく、ファイル及びその他のデータオブジェクトをディスクアレイに格納し、ディスクアレイから取り出すことを可能にさせる論理ユニット番号(logical unit number:LUN)及び論理ブロックアドレス(logical block address:LBA)インターフェイスを提供する。ディスクアレイ・コントローラ1006は、次に、ストレージシェルフ・ルータ1014及び1018によって提供されたインターフェイスを介してストレージシェルフ1010とインターフェイスをとる。ディスクアレイ・コントローラ1006は、FCエクスチェンジを、FCPプロトコルを用いて、離散的なFC互換性ディスクドライブとして見えるものとの間で送受信する。しかし、ディスクアレイ・コントローラからは見えないが、ディスクシェルフルータ1014及び1018は、SATAディスクドライブとコマンド及びデータを交換するためにFCコマンドをATAコマンドに変換する。
図11及び12は、本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されたストレージシェルフのコンポーネントの斜視図である。図11において、ルータカードに取り付けられた2台のストレージシェルフ・ルータ1102及び1104は、パッシブ・ミッドプレーン(passive midplane)1106を介して、SATAディスクドライブ1108のような16台のSATAディスクドライブと相互接続する。各SATAディスクドライブキャリアは、SATAディスクドライバと、パスコントローラカード1110とを収容する。パスコントローラカードは、SATAディスクドライバを、パッシブ・ミッドプレーンを介して2台のストレージシェルフ・ルータ1102及び1104のそれぞれに達する2本の別個のシリアルリンクと相互接続する。一般に、SATAディスクドライバは外部システムへの単一のシリアル接続だけをサポートする。ストレージシェルフ内に完全に冗長な相互接続を設けるために、パスコントローラカード1110が必要とされる。ストレージシェルフ1100は、二重化された(redundant)ファン1112、1114および電源1116、1118をさらに含む。図12は、図11に示されたストレージシェルフに類似したストレージシェルフの実施を表す。この実施例は、それぞれが2台のパスコントローラカード及び2台のSATAディスクドライブを含む二重(dual)SATAディスクドライブキャリアを備える。ディスクドライバの台数の増加は、高可用性アプリケーションのため必要とされる2重の冗長性を提供するために、ストレージシェルフ・ルータが対応して2倍になることを必要とする。
ストレージシェルフ内部トポロジー
図13A〜Cは、本発明の一実施形態を部分的に表すストレージシェルフ・ルータを使用するストレージシェルフの3通りの実施を示す図である。図13Aでは、単一のストレージシェルフ・ルータ1302が16台のSATAディスクドライブディスクドライブ1304〜1319を、FC調停ループ1320を介して、ディスクアレイ・コントローラへ相互接続する。一実施形態では、ストレージシェルフ・ルータは、最大で16本のシリアルリンクを提供し、16台までのSATAディスクドライブの相互接続をサポート可能である。図13Aに表されたストレージシェルフは高可用性ではないが、その理由は、ストレージシェルフが冗長ストレージシェルフ・ルータ、或いは、1台以上のルータと各SATAディスクドライバとの間の冗長シリアルリンクを含まないからである。
それに対して、図13Bに表されたストレージシェルフの実施は高可用性である。このストレージシェルフでは、2台のストレージシェルフ・ルータ1322及び1324がポイントツーポイントシリアルリンクを介して16台のSATAディスクドライバ1326−1341のそれぞれにリンクされる。通常動作中に、ストレージシェルフ・ルータ1322は、半分のSATAディスクドライブ1326−1333をディスクアレイ・コントローラに相互接続し、一方、ストレージシェルフ・ルータ1324は、残りの半分のSATAディスクドライブ1334−1341をディスクアレイ・コントローラに相互接続する。正常動作中に利用される内部ポイントツーポイントシリアルリンクは、シリアルリンク1342のように図13Bに太線で示され、「1次リンク(primary link)」と呼ばれる。内側シリアルリンク1344のような正常動作中に使用されない内部シリアルリンクは「2次リンク(secondary link)」と呼ばれる。1次リンクが動作中に故障するならば、故障した1次リンク、及びストレージシェルフ・ルータに接続されたすべての他の1次リンクは、故障した1次リンクが接続されたストレージシェルフ・ルータから、他のストレージシェルフ・ルータへフェイルオーバーされ、故障した1次リンクが接続されたストレージシェルフ・ルータの交換を含めて、故障した1次リンクを修理若しくは取り替えることが可能になる。上記のように、2台のストレージシェルフ・ルータのそれぞれは、ストレージシェルフをディスクアレイ・コントローラと相互接続する2個のFC調停ループの一方のためのFCノードとして機能する。一方のFC調停ループが故障するならば、故障したFC調停ループを本来ならば通過するデータ転送は、残りの、動作可能なFC調停ループへフェイルオーバー(failover)される。同様に、一方のストレージシェルフ・ルータが故障したならば、もう一方のストレージシェルフ・ルータがストレージシェルフの完全な動作制御を担う。代替的な実施形態では、1次パスの故障は、ストレージシェルフ・ルータ全体をフェイルオーバーするのではなく、個別にフェイルオーバーされる。ある種の実施形態及び状況では、1次パスのフェイルオーバーはストレージシェルフ・ルータ内で実行され、他の実施形態及び状況では、1次パスのフェイルオーバーは、1次パスの2次ストレージシェルフ・ルータへのフェイルオーバーを含む。
図13Cは、32台のATAディスクを備えた高可用性ストレージシェルフの実施形態を示す。図13Cに表されるように、32台のATAディスクを備えたストレージシェルフは、4台のストレージシェルフ・ルータ1350、1352、1354及び1356を含む。各ストレージシェルフ・ルータは、正常動作中に、8台のSATAディスクを、ストレージシェルフをディスクアレイ・コントローラと相互接続する2個のFC調停ループと相互接続する。各ストレージシェルフ・ルータは、2次リンクを介して、8台の付加的なSATAディスクドライブに相互接続されるので、フェイルオーバーが必要であるならば、ストレージシェルフ・ルータは全部で16台のSATAディスクを2個のFC調停ループと相互接続することが可能である。4台のストレージシェルフ・ルータの構造では、ストレージシェルフ・ルータ1350は、一つのFC調停ループに関して、4台のストレージシェルフ・ルータのすべてのFCノードとして機能することと、ストレージシェルフ・ルータ1356は、第2のFC調停ループに関して、4台のストレージシェルフ・ルータのすべてのFCノードとして機能することに注意すべきである。図13Cに表されているように、ストレージシェルフ・ルータ1350がFCノードとして機能する第1のFC調停ループは、Xループ又はXファブリックであるとみなされ、ストレージシェルフ・ルータ1356がFCノードとして機能するもう一方のFC調停ループは、Yファブリック又はYループとみなされる。ディスクアレイ・コントローラからXループを介してストレージシェルフ内のSATAディスクへ伝送されるFCフレームは、最初にストレージシェルフ・ルータ1350によって受信される。FCフレームは、正常動作の場合に1次リンクを介してストレージシェルフ・ルータ1350と相互接続されたSATAディスクへ向けられるか、又は、内部FCリンク1358を介してストレージシェルフ・ルータ1352へ向けられ、このストレージシェルフ・ルータ1352が次にFCフレームを、1次リンクを介してSATAディスクへ伝送される1個以上のATAコマンドに変換するか、若しくは、FCフレームを下流のストレージシェルフ・ルータ1354へ転送する。応答FCフレームがXファブリックを介してストレージシェルフ・ルータ1356によって伝送されるならば、それは、内部FCリンク1360、1362及び1358を通り、ストレージシェルフ・ルータ1354及び1352を介して、ストレージシェルフ・ルータ1350へ回送されるべきであり、そのストレージシェルフ・ルータ1350から応答フレームが外部Xファブリックへ伝送される。上記の実施形態では、高可用性ストレージシェルフは、少なくとも2台のストレージシェルフ・ルータを含むことが必要であり、ストレージシェルフ内の8台のSATAディスク毎にストレージシェルフ・ルータを含むことが必要である。
パスコントローラカード概要
上記のように、2台のコンポーネントは、SATAディスク又はその他の低価格ディスクドライブを利用して高可用性ストレージシェルフの構築を容易化し、FC調停ループ、又は、FC調停ループ上の単一のスロット若しくはノードだけを使用してその他の高帯域幅通信媒体と相互接続される。一方のコンポーネントはストレージシェルフ・ルータであり、もう一方のコンポーネントは、ATAドライブの2台のストレージシェルフ・ルータへの冗長な相互接続を提供するパスコントローラカードである。図14A〜Bは、ATAディスクドライブを2台のストレージシェルフ・ルータに相互接続するため適したパスコントローラカードの二つの実施を示す図である。図14Aに表された実施は、並列したATAディスクドライブへのパラレルコネクタを提供し、図14Bに表された実施は、SATAディスクへのシリアル接続を提供する。上記のように、SATAディスクドライブは非常に高いデータ転送レートを提供するので、図14Bに表された実施の方が好ましく、以下ではその実施を説明する。
パスコントローラカードは、1次シリアルリンク1404及び管理リンク(management link)1406の第1のストレージシェルフ・ルータへの外部接続、並びに、2次シリアルリンク1408及び第2の管理リンク1410の第2のストレージシェルフ・ルータへの外部接続のためのSCA−2コネクタ1402を備える。1次リンク及び2次リンクは、シリアルリンク1414を介してSATAディスクドライブ1416に相互接続された2:1のマルチプレクサによって多重化される。管理リンク1406及び1410は、ディスクドライブ環境の温度を監視し、ディスクドライブキャリア内のファンの動作を制御し、ディスクドライブ筐体の外部から見える種々の発光ダイオード(LED)信号光を作動する管理サービスルーチンを実行するマイクロコントローラ1418に入力される。本質的に、正常動作下で、ATAコマンド及びデータは、1次リンクを介してパスコントローラカードによって受信され、2:1のマルチプレクサを介してSATAディスクドライブ1415へ入力されるシリアルリンク1414へ転送される。フェイルオーバーがストレージシェルフ内で起こり、1次リンクを介してパスコントローラカードに接続されたデフォルトのストレージシェルフ・ルータを停止状態にするならば、第2のストレージシェルフ・ルータは、2次リンクを介してATAコマンド及びデータの転送を担い、ATAコマンド及びデータは、次に、2:1のマルチプレクサを経由してSATAディスクドライブ1416に直接的に入力されるシリアルリンク1414へ送られる。
パスコントローラカードは、2台の別個のストレージシェルフ・ルータへの冗長な相互接続を提供するので、高可用性ストレージシェルフで必要とされる2重の冗長性を提供するために必要である。ストレージシェルフ・ルータは、様々なタイプの通信媒体の間の相互接続と、様々なタイプの通信媒体の間のコマンド及びデータの変換とを提供する。その上、ストレージシェルフ・ルータは、内部コンポーネント故障を自動検出し、冗長なリンク及び無故障コンポーネントを使用してディスクドライブのディスクアレイ・コントローラとの完全な相互接続を復旧するために適切なフェイルオーバー計画を実行するフェイルオーバーロジックを含む。
ストレージシェルフ・ルータ概要
図15は、ストレージシェルフ・ルータの主要機能コンポーネントを示す上位レベルブロック図である。ストレージシェルフ・ルータ1500は、2台のFCポート1502及び1504と、ルーティング層1506と、FCP層1508と、グローバル共有メモリスイッチ1510と、16台のSATAポート1512〜1518と、CPU複合体1520と、外部フラッシュメモリ1514とを含む。ストレージシェルフ内で相互接続するストレージシェルフ・ルータの組の中でのストレージシェルフ・ルータの論理的位置に応じて、一方又は両方のFCポートが外部FC調停ループ又は他のFCファブリックに接続され、一方又は両方のFCポートが内部ポイントツーポイントFCリンクに接続される。一般に、FCポートの一方は、ストレージシェルフ・ルータの組の中でのストレージシェルフ・ルータの論理的位置及び物理的位置とは無関係に、ストレージシェルフ・ルータを第1のFC調停ループと直接的又は間接的にリンクすると考えられ、もう一方のFCポートはストレージシェルフ・ルータを第2のFC調停ループと直接的又は間接的に相互接続すると考えられる。
ルーティング層1506は、後述されるメモリに記憶された複数のルーティングテーブルと、両方のFCポートからの入力FCフレームの転送先を決めるルーティングロジックとを備える。FCP層1508は、FCフレーム及び中間レベルプロトコルメッセージを一時的に記憶する種々のキューと、種々のタイプの入力及び出力FCフレームを処理する制御ロジックと、一体としてFCPエクスチェンジを構築するFCフレームの交換を容易化するようにFCエクスチェンジコンテキストをメモリ内にセットアップするために、ファームウェアルーチンがFCP_CMND(FCPコマンド)フレームを処理するためCPU複合体上で動くことを可能にさせるCPU複合体1512へのインターフェイスと、を含む。
グローバル共有メモリスイッチ1510は、FCP層キューとSATAポート1512〜1518との間でデータを受け渡す非常に高速な時間多重方式のデータ交換機能である。グローバル共有メモリスイッチ(GSMS)1510は、FCP層と特別なSATAポートとの間でデータの転送を容易化するために仮想キューの割り付けを可能にさせる仮想キューメカニズムを利用する。GSMSは、基本的に、FCP層と16台のSATAポートとの間で非常に並列的なデータフローを容易に行う非常に高帯域幅の高速双方向マルチプレクサであり、同時に、FCP層とSATAポートとの間で同期境界のトラバース(traverse)を容易化するために同期メカニズムを含むブリッジのようなデバイスである。
CPU複合体1512は、FCエクスチェンジのコンテキスト情報を初期化し維持するため、かつ、FCPコマンドをATA等価コマンドに変換するためにFCPコマンドを処理し、また、SATAディスクドライブ及びストレージシェルフ・ルータの内部コンポーネントの動作を監視し、問題が検出されたときに高機能のフェイルオーバー戦略を実行する種々のファームウェアルーチンを動かす。フェイルオーバー戦略を実行するため、CPU複合体はストレージシェルフ・ルータのその他の論理コンポーネントと相互接続される。外部フラッシュメモリ1514は、設定パラメータ及びファームウェアルーチンを格納する。注意すべき点は、ストレージシェルフ・ルータが2台のFCポート1502及び1504と、16台のSATAポート1512〜1518と、16本のシリアル管理リンク1520と、I2Cバス1522と、コンソール1524へのリンクとを介して外部コンポーネントに相互接続されることである。
ストレージシェルフ・インターフェイス
上記のように、ストレージシェルフ・ルータベースのストレージシェルフの実施は、現行のディスクドライブ毎にFCノードを設ける実施よりも、様々な形で、より大きな柔軟性を提供する。ストレージシェルフ・ルータは、それが接続されたディスクアレイ・コントローラに多種類の論理インターフェイスのうちのいずれかを提供することができる。図16A〜Gは、本発明の一実施形態を部分的に表す1台以上のストレージシェルフ・ルータを組み込む高可用性ストレージシェルフ・ルータによって提供される複数の異なる論理インターフェイスを示す図である。図16Aは、図8A〜Dを参照して説明したような現行のストレージシェルフのFC互換性ディスクドライブ実施によって提供されるインターフェイスを表す。図16Aは図16A〜Hを通じて使用される抽象的な説明図の規約を使用する。図16Aにおいて、各ディスクドライブ1602〜1605は、0から19までの番号が付けられた一連のデータブロックとして論理的に表現される。当然ながら、実際のディスクドライブは何十万から何百万の論理ブロックを含むが、図16Aではディスク毎に表された20個の論理ブロックが多種多様なタイプのインターフェイスを説明するために十分である。図16Aでは、それぞれの別個のディスクドライブ1602〜1605はFC調停ループ上の離散的なノードであるので、各ディスクドライブは、「AL_PA1」、「AL_PA2」、「AL_PA3」及び「AL_PA4」としてそれぞれ図16Aに表された別個のFCノードアドレスと関連付けられる。しかし、図8A〜Dを参照して説明したような現行のFC調停ループディスクアレイの実施とは異なり、各ノードは、図9に表されるようにポイントツーポイント接続を介してストレージシェルフ・ルータの補完的なSATAポートと相互接続されるので、ノードに関連した累積的なノード遅延がないことに注意すべきである。よって、ディスクアレイ・コントローラは、ディスクドライブに関連したFCアドレスを用いて特別なディスクドライブ内の特別な論理ブロックにアクセスする。あるディスクドライブは、ある種の場合に、論理ユニット(LUN)インターフェイスを提供し、論理ブロックアドレス空間が異なるLUNと関連付けられた別個の論理ブロックアドレス空間に区分される。しかし、ここでの説明の目的のために、複雑さのレベルを扱う必要はない。
図16Bは、ストレージシェルフ・ルータを介してFC調停ループに相互接続された図16Aに表された4台のディスクドライブを含むストレージシェルフのための第1の可能なインターフェイスを表す。この第1のインターフェイスでは、各ディスクドライブは依然として別個のFCノードアドレスと関連付けられる。各ディスクドライブは、単一の論理ブロックアドレス空間を含む単一の論理ユニットであるとみなされる。このインターフェイスは、以下では、本発明の一実施形態を部分的に表す1台以上のストレージシェルフ・ルータを含むストレージシェルフの「トランスペアレント・モード(transparent mode)」動作と呼ばれる。
ストレージシェルフによって提供される第2の可能なインターフェイスは図16Cに表される。この場合、4台すべてのディスクドライブは単一のFC調停ループノードアドレス「AL_PA1」と関連付けられる。各ディスクドライブは異なる論理ユニットであると考えられ、ディスクドライブ1602は論理ユニット0(LUN0)であるとみなされ、ディスクドライブ1603は論理ユニット1であるとみなされ、ディスクドライブ1604は論理ユニット2であるとみなされ、ディスクドライブ1605は論理ユニット3であるとみなされる。よって、ディスクアレイ・コントローラは、単一のFCノードアドレス、論理ユニット番号、及び論理ユニット内の論理ブロックアドレスを用いてストレージシェルフの4台のディスクドライブのいずれかのうちの論理ブロックにアクセス可能である。
仮想ストレージシェルフ内の4台のディスクドライブへの代替的なインターフェイスは図16Dに表されている。この場合、4台すべてのディスクドライブは単一の論理ユニット内に収容されているとみなされる。4台のディスクドライブ内の各論理ブロックは、固有論理ブロックアドレスが割り当てられる。よって、ディスクドライブ1602内の論理ブロック0〜19は論理ブロックアドレス0〜19と関連付けられ続け、さらにまたディスクドライブ1603内の論理ブロック0〜19は論理ブロックアドレス20〜39と関連付けられる。このインターフェイスは、以下では、図16Cに表された純粋なLUNベースのインターフェイスに対して、純粋な論理ブロックアドレスのインターフェイスと呼ばれる。
図16Eは4台のディスクドライブを含む仮想ストレージシェルフによって提供されるさらに別の可能な論理インターフェイスを表す。この場合、2台のディスクドライブ1602及び1603の第1の組は第1のFCノードアドレス「AL_PA1」と関連付けられ、2台のディスクドライブ1602及び1603は2個の異なるLUN番号、すなわち、LUN0及びLUN1とそれぞれ関連付けられる。同様に、ディスクドライブ1604及び1605の第2のペアは、第2のFCノードアドレス「AL_PA2」と共に関連付けられ、ディスクドライブの第2のペアのそれぞれは異なるLUN番号と関連付けられる。
図16Fはさらに別の可能なインターフェイスを表す。この場合、第1の2台のディスクドライブ1602及び1603は第1のFCノードアドレスと関連付けられ、第2の2台のディスクドライブ1604及び1605は第2のFCノードと関連付けられる。しかし、この場合、各グループ内の2台のディスクドライブは、共に単一の論理ユニットに属するとみなされ、2台のディスクドライブ内の論理ブロックは単一の論理ブロックアドレス空間を構成する論理ブロックアドレスと関連付けられる。
最後のインターフェイスは図16Gに表される。この場合、前の二つのインターフェイスと同様に、単一のFCノードアドレスに関連付けられたディスクドライブの各ペアは単一の論理ブロックアドレス空間を有する単一のLUNを構成するとみなされる。しかし、このインターフェイスでは、論理ブロックアドレスは2台のディスクドライブの間で交番する。例えば、ディスクドライブ1602及び1603のペアの場合、論理ブロックアドレス0は第1の論理ブロック1610及び第1のディスクドライブ1602と関連付けられ、論理ブロックアドレス1は第2のディスクドライブ1603の第1のブロック1612と関連付けられる。
図16A〜Gは、本発明の一実施形態を部分的に表すストレージシェルフ・ルータによってディスクアレイ・コントローラに提供されたある種の複数の可能なインターフェイスを示すことだけを意図している。アルゴリズム的に記述することができるLUN及び論理ブロックアドレスのディスクドライブ及びディスクドライブ内の物理ブロックへのマッピングの殆どは、ストレージシェルフ内のストレージシェルフ・ルータによって実施される。一般に、これらの多種多様なタイプの論理インターフェイスは、以下の4個の一般的なインターフェイスのタイプ、すなわち、(1)各ディスクドライブが別個の局所的に一意のFCノードアドレスと関連付けられるトランスペアレント・モードと、(2)各ディスクドライブが異なるLUN番号と関連付けられ、すべてのディスクドライブが単一のFCノードアドレスによってアクセスされる純粋なLUNモードと、(3)すべてのディスクドライブが単一のFCノードアドレス及び単一の論理ユニット番号と関連付けられる純粋な論理ブロックアドレス指定モードと、(4)LUNと論理ブロックアドレス空間分割の多種多様な組み合わせを利用するLUNモード及び論理アドレスアドレス指定モードの混合モードに分類される。
ストレージシェルフ・ルータ実施
図17Aは、本発明の一実施形態を表すストレージシェルフ・ルータ内のコマンドとデータのフローの上位レベル概要である。ストレージシェルフ・ルータは、データとコマンドのシリアルストリームを、1個以上のFC調停ループ又はその他のFCファブリック1702〜1703を介して、他のストレージシェルフ・ルータ及びディスクアレイ・コントローラと交換する。データのシリアルストリームはFCポート層1704に入り、下位レベルFCプロトコルレベルで処理される。データストリームから抽出されたFCフレームは先入れ先出しバッファ(FIFO)1706〜1707へ入力される。FCフレームの先頭部分は利用可能になると、FCフレームの後半部分がFIFOへ入力されると同時に、ルーティング層1708及びFCP層1710によって処理される。よって、FCフレームは、バッファで完全に組み立てられ、内部メモリバッファから内部メモリバッファへコピーされることを要することなく、高い時間効率及び演算効率で処理される。
ルーティング層1708は、FCフレームヘッダから、FCフレームがストレージルータへ向けられるか、又は、FC調停ループ若しくはその他のFCファブリックによってストレージルータと相互接続された遠隔のストレージルータ若しくはその他のエンティティへ向けられるかを決めなければならない。遠隔のエンティティへ向けられたフレームは、ルーティング層によって、FC調停ループ又はその他のFCファブリックを介して遠隔のエンティティへ送信するためのFCポート層内の出力FIFO 1712〜1713へ向けられる。ストレージルータへ向けられたフレームはルーティング層によってFCP層へ向けられ、FCP層では状態機械がストレージシェルフ・ルータ内でのフレームの処分を制御する。
ストレージシェルフ・ルータによってコンテキストが確立された現在動作中のFCエクスチェンジと関連付けられたFCP−DATAフレームは、高度にストリームライン化され、かつ、効率的な方法で処理される。これらのフレームからのデータは、FCP層によって、GSMS1718内の仮想キュー1714〜1716へ向けられ、そこからデータはSATAポート層1722内の入力バッファ1720へ転送される。SATAポート層から、データは、ATAパケットで、複数のSATAリンク1724のうちの一つを介して、ストレージシェルフ・ルータと相互接続された複数のSATAディスクドライブ1726のうちの1台へ送信される。
FCP−CMNDフレームは種々の形式でFCP層によって処理される。これらのフレームは、FCP層によって、ストレージシェルフ・ルータ内のFCP層とCPUとの間で共有されるメモリ1728へ転送される。CPUはフレーム内に収容されたコマンドを処理するためフレームにアクセスする。例えば、入力書込みコマンドが受信されたとき、ストレージシェルフ・ルータのCPUは、ファームウェアルーチンの制御下で、コマンドが向けられ、共有メモリに格納された書込み動作のためのコンテキストを確立するSATAドライブを決定する必要がある。CPUは、データを受信するようにSATAドライブを準備し、一般にディスクアレイ・コントローラであるイニシエータへのFCP−XFER−RDYフレームの返送を指令することが必要である。CPUによって準備され、共有メモリに格納されたコンテキストは、FCPレイヤがCPUの介入なしに後続の入力FCP−DATAメッセージを処理することを可能にさせ、書込み動作の実行をストリーム化する。
ストレージシェルフ・ルータ内の種々の論理層は反対方向でほぼ対称的に機能する。ATAコマンドへの応答は、SATAディスクドライブからSATAリンクを介してSATAポート層1722によって受信される。SATAポート層は、次に、適切な信号及びメッセージを生成し、CPUが、ファームウェアの制御下で、又は、FCP層が、適切な動作及び応答を実行することを可能にさせる。データが、読出しコマンドに応答して、SATAディスクから遠隔のエンティティへ転送されるとき、CPUは、FCP層による処理のための共有メモリに格納される適切なキューエントリーを生成する。FCP層内の状態機械は、共有メモリから、FCフレームヘッダテンプレートを取得し、仮想キュー1732〜1733を経由するSATAポート層内の出力バッファ1730からのデータ転送を手配し、FCフレームヘッダを準備し、SATAポート層から受信されたFCフレームヘッダ及びデータの、一般的にディスクアレイ・コントローラである要求中の遠隔のエンティティへの伝送のためのFCポート層の出力FIFO1712及び1713への転送を調整する。
図17Aはストレージシェルフ・ルータ内のデータ及び制御フローの簡略な概要を与えることが意図されている。ストレージシェルフ・ルータの内部コンポーネントを正確に表現することではなく、FCP−CMND及びFCP−DATAフレームの受信及び処理に関して論理層間の相互関係を表すことが意図されている。例えば、複数の仮想キューがGSMS層内で図17Aに表されている。しかし、仮想キューは、一般に、静的エンティティではなく、ストレージシェルフ・ルータの現在状態に依存して必要に応じて動的に割り付けられる。図17Aは単一のSATAシリアル接続1724とSATAディスクドライブ1726だけを表すが、上記のように、各ストレージルータは、一実施形態では、16台の異なるSATAディスクドライブに接続される。
図17B〜Fは、本発明の一実施形態を表すストレージシェルフ・ルータを通るデータ及び制御情報のフローに関するより詳細を記載する。図17B〜Fを説明する際に、同一コンポーネントの様々なペアの両方のコンポーネントは、簡易化するために具体的に言及されない。それらの図は、コンポーネントの完全な図解入りのリストとしてではなく、データ及び制御情報がストレージシェルフ・ルータ内の種々のコンポーネントの中を移動する様子を表すことを意図する。さらに、種々のコンポーネントの台数は、ストレージシェルフ・ルータの多種多様な実施に応じて変化する。図17Bは、ストレージシェルフ・ルータ内のFCP−DATAフレームの初期フローを表す。FCP−DATAフレームは、最初に、FCポート1736によって受信され、入力FIFO1737に書き込まれ、この入力FIFOからのFCP−DATAフレームは、たとえFCP−DATAフレームの残りが未だ入力FIFOに書き込まれている間でも、十分なヘッダ情報が入力FIFOで入手できるようになるとすぐに、ルータロジック1738によって処理され始める。FCポートは、ルータロジックがフレームを処理し始めることを可能にさせるため、新フレームの到着をルータロジックに知らせる。ルータロジック1738は、フレームがストレージシェルフ・ルータへ向けられるか、若しくは、向けられないかを決めるため、又は、フレームが遠隔のエンティティへ向けられるか、若しくは、向けられないかを決めるためにルーティングテーブル1739を利用する。FCP−DATAフレームが遠隔のエンティティへ向けられるならば、フレームはルータロジックによって遠隔のエンティティへの送信のためFCポートへ向けられる。ルータは、さらに、FCP−DATAフレームが属するFCエクスチェンジのためのコンテキストがCPUによって作成され、共有メモリに格納されたかどうかを決めるため、コンテキストロジック1740とインターフェイスを取る。そのフレームのコンテキストが見つけられるならば、ルータロジックはそのフレームをFCPインバウンド・シーケンス・マネージャ(FCP Inbound Sequence Manager:FISM)状態機械1741へ向ける。コンテキストが見つからないならば、フレームは共有メモリへ向けられ、そこからフレームは、次に、ファームウェア制御下のCPUによって誤って受信されたフレームとして抽出され処理される。
FISM1741はFCPデータムーバ・ロジック・モジュール(FCP data mover logic module:FDM)1742からのGSMSチャネルを要求し、FCPデータムーバ・ロジック・モジュールは、次に、GSMS1744内の仮想キュー(virtual queue:VQ)1743にアクセスし、FISMを介してコンテキストロジックからVQを表すパラメータを受信する。FDMは、次に、フレームに含まれるデータをVQに書込み、VQからそのデータは、SATAディスクドライブへの送信のためVQへのアクセスをFDMと共有するSATAポートによって集められる。一旦データがVQに書き込まれると、FDMはデータが転送されたことをコンテキストマネージャに知らせ、コンテキストマネージャは、次に、完了キューマネージャ(completion queue manager:CQM)1745が完了メッセージ(completion message:CMSG)を共有メモリ1747内の完了キュー1746にキュー入れすることを要求する。CQMは、次に、CPUデータムーバ(CPU data mover:CPUDM)1748がCMSGを共有メモリに書き込むことを要求する。
図17Cは、ストレージシェルフ・ルータ内のFC−CMNDフレームとエラーを伴うフレームのフローを表す。上記のように、フレームはFCポート1736によって受信され、ルータロジック1738によって、ルーティングテーブル1739を参照して、ストレージシェルフ・ルータ内の種々のターゲットコンポーネントへ向けられる。エラー受信されたFCP−CMNDフレーム及びFCフレームは、CPUによる抽出及び処理のため共有メモリ1747へ経路制御される。ルーティングロジック1738は、フレームを共有メモリ1747へ書き込む用にフレームバッファ・キュー・マネージャ(flame buffer queue manager:FBQM)1760に要求を発行する。FBQMは、CPUDM1748から、メモリ1750に記憶されたバッファポインタを受信し、フレームを共有メモリ1747内のフレームバッファ1749に書き込む。最後に、ルータは、CQM1745がCMSGをCQ1746に書き込むことを要求する。CPUは、最終的に、フレームバッファ1749に格納されたフレームへアクセスするためにCMSG内に含まれる情報を使用して、CMSGを処理する。
図17Dは、あるFCポートから別のFCポートへのFCフレームのフローを表す。ルータロジック1738が、第1のFCポート1736内の入力FIFO1737を介して受信されたフレームはストレージルータへ向けられるのではなく、代わりに遠隔のエンティティへ向けられることを決定する場合、ルータロジックは、フレームを遠隔のエンティティへ送信するためにフレームを第2のFCポート1752内の出力FIFO1751へ書き込む。
図17Eは、ストレージシェルフ・ルータ内のCPUからFC調停ループ又はその他のFCファブリックへのデータ及び制御情報のフローを表す。CPUは、ファームウェア制御下で、共有メモリ1747内の共有メモリキューSRQにエントリーを格納し、CPUがFC調停ループ又はその他のFCファブリックへの送信のため作成したフレームを記述するSRQエントリー(SRQ entry:SRE)の存在を示すためにSRQと関連付けられたSRQプロデューサ・インデックス(SQR producer index)を更新する。SRQマネージャモジュール(SRQ managermodule:SRQM)1755は、SRQプロデューサ・インデックスの更新を検出し、CPUDM1748を介して共有メモリ1747から次のSREをフェッチ(fetch;取得)する。SRQMはフェッチされたSREを、ラウンドロビン(round-robin)方式のような調停方式を実施するSRQ調停モジュール(SRQ arbitration module:SRQ_ARB)1756へ渡し、複数のCPUによって生成され、複数のSRQに格納されたSREの処理を保証する。SRQ_ARBは、次のSREを受信するためのSRQMを選択し、SREをFCPアウトバウンド・シーケンス・マネージャ(FCP outbound sequence manager:FOSM)状態機械1757へ渡す。FOSMは、CPUDM1748を介して共有メモリ1747からFCヘッダテンプレート及びフレームペイロードをフェッチするためSRWを処理する。FOSMは、共有メモリからCPUDMを経由したFCヘッダテンプレート及びフレームペイロードを使用してFCフレームを構築し、そのフレームをFCポート1736の出力FIFO1758に書込み、そこからフレームはFC調停ループ又はその他のFCファブリックへ送信される。フレームがFCポートへ転送されたとき、FOSMはCMSGを共有メモリへ書き込むためにCQM1745へ向ける。
図17Fは、GSMS及び共有メモリからFC調停ループ又はその他のFCファブリックへのデータ及び制御情報のフローを表す。この処理のステップの殆どは図17Eに関して説明したステップと同様であり、簡易化するために、再度説明はしない。一般に、FCP−DATAフレームの制御部は、FCフレームヘッダ内に格納され、図17Eに関して説明された他のタイプのフレームの生成と同様の形式で生成される。しかし、FCP−DATAフレームの場合、処理は、制御情報を、SATAポートからGSMSを経由して取得されたデータと組み合わせるために段階化されるべきである。FOSM1757がFCP−DATAフレームを記述するSREを受信するとき、FOSMは、FCP−DATAフレームヘッダを構築し、GSMS1744内のVQ1759を介してデータを取得するFDM1742を通してGSMSチャネルによってフレームに組み入れられたデータを要求することが必要である。データ及び制御情報がFOSMによってFCP−DATAフレームに合成されると、フレームは次にFCポートへ渡され、CMSGメッセージが、上述のように、CQにキュー入れされる。
図18は、本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントのより詳細なブロック図を表す。論理コンポーネントは、2台のFCポート1802及び1804と、ルーティング層1806と、FCP層1808と、GSMS1810と、SATAポート層1812と、図16及び17に関して既に説明した2台のCPU1814及び1816を備えたCPU複合体とを含む。図18に、太線矢印1818のような太線矢印で表された通信経路及び通信リンクは、ストレージシェルフ・ルータ内の性能がクリティカルな(performance-critical)通信経路を表す。性能がクリティカルな経路は、FCフレームの受信及び出力と、SATAポートによってSATAディスクドライブへ送信するための適切なATAコマンドを生成するための受信フレームの処理と、受信されたFCP−DATAフレームからのデータをGSMS経由でSATAポートへ送ることと、FCポートを介してFC調停ループ又はその他のFCファブリックへの送信のためのFCフレームの生成と、GSMS経由でSATAポートから取得されたデータの発信FCP−DATAフレームへの組み込みとに関係がある経路である。性能がクリティカルではない(non-performance-critical)経路は、CPU1814及び1816をストレージシェルフ・ルータの種々の論理コンポーネントと直接的に相互接続する種々のプログラムドI/Oインターフェイスを含む。例えば、中央調停スイッチ1820と、GSMS、SLポート層、及び内部バスブリッジ1822との間にPIOインターフェイスが存在し、内部バスブリッジは、今度は、17台のUARTポート1824と、I2Cバスインターフェイス1826と、汎用PIOインターフェイス(GPIO)1828と、タイマーコンポーネント1830と、数台の割り込みコントローラ1832と相互接続される。これらのPIOインターフェイスは、図18に太字ではない両矢印1834〜1836として表される。その上、CPU1814及び1816とフラッシュメモリコントローラ1840との間にPIOインターフェイス1838が存在し、フラッシュメモリコントローラは、次に、外部フラッシュメモリ1842とインターフェイスをとる。外部フラッシュメモリは、特定の設定管理情報及びファームウェア画像を記憶するため使用される。CPUは別のPIOインターフェイス1844を介して内部SRAMコントローラ1846に接続され、内部SRAMコントローラ1846は、次に、ストレージシェルフ・ルータ内、及びストレージシェルフ・ルータ間でフェイルオーバーを命令するファームウェアルーチンを含む、ノンパフォーマンス(non-performance)経路のコード及びデータを記憶するSRAMメモリ1848とインターフェイスをとる。CPU1814及び1816は、2台のデータが緊密に結合されたメモリ1850及び1852に収容され、プロセッサデータ空間のためにも使用される共有メモリキューを介して、FCP層1808及びSATAポート層1812と相互接続される。各CPUは、ファームウェア命令1854及び1856を格納する別個のメモリとも相互接続される。最後に、両方のCPUは、単一のPIOチャネル1858を介して、両方のFCポート1802及び1804と、ルーティング層1806と、FCP層1808とに接続される。
図19はFCポート層のより詳細な図を表す。FCポート層は2台のFCポート1902及び1904を含み、それぞれが入力FIFO1906及び1908と、2台の出力FIFO1910−1911及び1912−1913を含む。FCポートは、FC調停ループ又はその他のFCファブリックからの入力シリアルデータを入力FIFOへ渡されるFCフレームへ共に変換し、出力FIFOへ書き込まれる出力FCフレームをFC調停ループへ送信されるシリアルデータへ変換する物理層ロジック及びリンク層ロジック1914〜1917を含む。
図20はルーティング層のより詳細なブロック図表示である。図20に表されるように、ルーティング層2002はFCポートのそれぞれを取り扱う別個のルーティングロジック2004及び2006を含む。ルーティング層は、入力FCフレームを適切なキューへ経路制御するため必要なルーティング判定を容易化するため、メモリに格納されたルーティングテーブル2008をさらに含む。FCデータフレームは、上記のように、FDM2011を介してFISM2010及び2012の制御下でGSMS層2015にルータによってかなり直接的に経路制御されることに注意すべきである。ファームウェア処理を要求するフレームは、ルーティング層によって、CPUDM2017及び2018を介してFBQM2014及び2016の制御下で入力キューへ経路制御される。
図21はFCP層のより詳細なブロック図表示である。図21に表された内部コンポーネントのうちの殆どは既に説明されているか、又は、後のセクションでより詳細に説明される。一般に、一方で2台のFCポート1902及び1904を担当し、他方で2台のCPU2012及び2014を担当するために重複したコンポーネントの組が配置されることに注意すべきである。出力フレームを生成するため必要な情報は、ファームウェア制御下でCPUによって生成され、主として単一CPUと個々に関連付けられた共有メモリ2106及び2108に格納される。各メモリに格納された情報は、次に、送信のため2台のFCポート1902及び1904へ送られるFCフレームを生成するために、SRQM2110及び2112と、FOSM2114及び2116と、SRQ_ARBS2118及び2120と、CPUDM2122及び2124と、その他のコンポーネントとからなる別個の組によって処理される。各FCポートにおける入力フレームは、別個のルータモジュール2004及び2006と、FISM2010及び2012と、その他のコンポーネントとによって処理される。
図22はSATAポート層のより詳細なブロック図表示を表す。SATAポート層の主な目的は、SATAポート層と、GSMSと、FCP層との間で共有されるタスク、すなわち、仮想キュー管理と、GSMS及び個別のSATAポートによるFCP層とのデータの交換である。
図23はSATAポートのより詳細なブロック図表示である。SATAポートは、一体としてSATAインターフェイスを実施する物理層2302、リンク層2304、及びトランスポート層2306を含む。トランスポート層は、相互接続されたSATAディスクから到着するデータ転送の部分及びATAメッセージ情報を記憶する入力バッファ2308と、GSMS層からのデータ転送の部分、並びに、インターフェイスからCPU及び共有メモリへ送られるATAコマンドを記憶する出力バッファ2310とを含む。SATAポートに関するさらなる詳細は他のセクションで議論される。
ストレージシェルフ・ルータのルーティング層
図24は、4台のストレージシェルフ・ルータ型の高可用性ストレージシェルフ内のルーティングトポロジーの抽象的な表現を表す。この抽象的な表現は以下の説明のために有用なモデル及びテンプレートである。図24に表されるように、各ストレージシェルフ・ルータ2402〜2405は、1次リンクを介して、ディスクドライブ2406のようなn台のディスクドライブに接続される。上記のように、各ストレージシェルフ・ルータは、2次リンクを介して、近傍のn台のディスクドライブの組に接続されるが、2次リンクは、図24では、単純化するために図示されていない。1台のストレージシェルフ・ルータ2402は、ファブリックX 2408と呼ばれる第1のFC調停ループ、又は、その他のFCファブリックに関してストレージシェルフ・ルータの組全体のための終点又はFCノード接続ポイントとしての役割を担う。別のストレージシェルフ・ルータ2405は、終点、又は、第2の調停ループ、若しくは、ファブリックYと呼ばれるその他のFCファブリック2410へのFCノード接続としての役割を担う。各ストレージシェルフ・ルータは、例えば、ストレージシェルフ・ルータ2402のXポート2412及びYポート2414のように、2台のFCポート、すなわち、Xポート及びYポートを含む。4台のストレージシェルフ・ルータは、内部ポイントツーポイントFCリンク2416、2418及び2420と相互接続される。例えば、ストレージシェルフ・ルータ2404のような特定のストレージシェルフ・ルータの場合、ファブリックXから入力するFCフレームはXポート2422で受信され、ストレージシェルフ・ルータ2404によってファブリックXへ出力されるFCフレームはXポート2422を介して出力される。同様に、入力FCフレーム及び出力FCフレームは、それぞれ、Yファブリックから受信され、Yファブリックへ向けられ、FCポート2424を介して入力され出力される。特定のFCポートのXファブリック及びYファブリックへの割当は設定可能であり、以下の例示のための実施例及び実施例を参照する説明では、FCポート0がXファブリックポートであり、FCポート1がYポートであると仮定されているが、逆の割当も設定可能であることに注意すべきである。
Sファブリック内で使用され、「Sビット」と称されるFCフレームヘッダのDF_CTLフィールド内の2ビット予約サブフィールドによってそのものとして特定されるSファブリック管理フレームは、Xポート又はYポートのいずれか、及びポイントツーポイントの内部FCリンクを介してストレージシェルフ・ルータの間に向けられる。各ストレージシェルフ・ルータは、ストレージシェルフ内で一意であり、かつ、管理フレームにおいてFCフレームヘッダの一部D_IDフィールドを形成するルータ番号が割り当てられる。ストレージシェルフ・ルータは、Xファブリック及びYファブリックの一方に関して厳密に増加する順序に番号付けされ、Xファブリック及びYファブリックのもう一方に関して厳密に減少する順序に番号付けされる。例えば、図24において、ストレージシェルフ・ルータ2402、2403、2404及び2405は、それぞれ、ルータ番号1、2、3及び4が割り当てられ、よって、Xファブリックに関して厳密に増加、すなわち、昇順であり、Yファブリックに関して厳密に減少、すなわち、降順である。この順序は、後述の詳細なフロー制御図において前提とされる。
図25は、2台のストレージシェルフ・ルータ、すなわち、ディスクアレイの2台のストレージシェルフ・ルータの実施内でのX及びYのFC調停ループ相互接続の抽象的な表現を表す図である。図25において、ディスクアレイ・コントローラ2502はFC調停ループX2504によって各ストレージシェルフ・ルータ2506及び2508にリンクされ、FC調停ループY2510によって両方のストレージシェルフ2506及び2508にリンクされる。図25において、ストレージシェルフ・ルータ2512はストレージシェルフ2506のXファブリック終点(endpoint)として機能し、ストレージシェルフ・ルータ2514はストレージシェルフ2508のXファブリック終点として機能する。同様に、ストレージシェルフ・ルータ2516はストレージシェルフ2506のYファブリック終点として機能し、ストレージシェルフ・ルータ2518はストレージシェルフ2508のYファブリック終点として機能する。ディスクドライブ2518のような個別のディスクドライブのそれぞれは、X調停ループ及びY調停ループの両方を介してディスクアレイ・コントローラ2502にアクセス可能である。両方のストレージシェルフにおいて、ストレージシェルフ・ルータは、単一のポイントツーポイントFCリンク2520及び2522を介して内部的に相互接続され、その相互接続は、Xファブリックフレーム及びYファブリックフレームの他に、内部的に生成され、内部的に使用される管理フレーム、すなわち、Sファブリックフレームを搬送する。ストレージシェルフ2506内の内部ポイントツーポイントFCリンクはS1ファブリックと称され、ストレージシェルフ2508内の内部ポイントツーポイントFCリンクはS2ファブリックと称される。本質的に、内部ポイントツーポイントFCリンクは、Xファブリック、Yファブリック、及び内部管理フレームのFCフレームを搬送するが、Xファブリック及びYファブリックのフレームが終点のストレージシェルフ・ルータを経由してストレージシェルフ・ルータに入ると、それらは、使用されるか、又は、終点のストレージシェルフ・ルータのFCポートを介して元のXファブリック又はYファブリックへエクスポートされるまでSファブリックフレームとみなされる。
図26A〜Eは、本発明の一実施形態を表すストレージシェルフ内の特定のFCポートを介してFCフレームを特定のストレージシェルフ・ルータ又は遠隔のエンティティへルーティングするため使用されるFCフレームヘッダ内のデータフィールドを示す。FCフレームヘッダは図3を参照して既に記載した。当然ながら、FCヘッダは、フレームを、単一のFCノードを介してFC調停ループ又はその他のFCファブリックへ一体的にインターフェイスを取るストレージシェルフ・ルータと相互接続されたディスクドライブではなく、FCノードへ向けるため設計される。したがって、ストレージシェルフ内のストレージシェルフ・ルータ及びSATAディスクドライブ設定へのFCフレームヘッダフィールドのマッピングはFCフレームの適切な宛先のために必要である。FCフレームヘッダ2604の3バイトのD_IDフィールド2602は、FCノードのノードアドレスを表す。FC調停ループの場合、D_IDの最上位2バイトは、一般に、非公開ループのための値「0」をとり、最下位バイトは、127ノードのうちの一つを指定する調停ループ物理アドレス(AL_PA)を含む。一般的に、あるノードアドレスはディスクアレイ・コントローラのため使用され、別のノードアドレスはファブリック調停ループアドレスのため予約される。3バイトのS_IDフィールドは、フレームが作り出されたノードのノードアドレスを含む。一般に、S_IDフィールドはディスクアレイ・コントローラのノードアドレスであるが、ストレージシェルフはFCファブリックに直接的に相互接続され、その場合、S_IDは、ストレージシェルフにアクセスする非常に複数の遠隔のエンティティのうちのいずれかの24ビットFCファブリックアドレスの全体である。
図26Aに表されるように、FCフレームヘッダ2606のDF_CTLフィールド2604内の2個の予約ビット2602は、ストレージシェルフ内に、或いは、換言すれば、Sファブリック内に記憶され、送信されたフレームのある種の宛先指標、すなわち、コンパス2608として利用される。以下の表4はこの宛先指標の符号化を表す。
ビットパターン「01」はフレームがXファブリックフレームとしてSファブリックに入ったことを示し、ビットパターン「10」はフレームがYファブリックフレームとしてSファブリックに入ったことを示し、ビットパターン「11」はフレームがSファブリック管理フレームであることを示す。DF_CTLフィールドのビット18:19によって表された宛先指標、すなわち、内部コンパスは、Sファブリックと外部ファブリックの両方のフレームが単一のFCポートを介してストレージシェルフ・ルータによって受信されるので必要とされる。上記のように、DF_CTLフィールドのビット18:19は「Sビット」のように総称される。Sビットは終点ストレージシェルフ・ルータによるXファブリック又はYファブリックフレームの受信によってセットされ、終点ストレージシェルフ・ルータから元のXファブリック又はYファブリックへのエクスポートの前にクリアされる。
図26Bは、FCP−CMNDフレームのルーティングと関連したFCフレームヘッダフィールドを説明する。D_IDフレーム2610はFCフレームを特定のFCノードへ向けるが、上記のように、ストレージシェルフは、トランスペアレント・モードで動作するとき、複数のノードを含み、トランスペアレント・モードで動作しないとき、単一のD_IDを収容するすべてのFCフレームを分散させる必要がある複数のデータ記憶デバイスを含む。ストレージシェルフ・ルータのルーティングロジックは、本質的に、D_IDと、ストレージシェルフと、ストレージシェルフ・ルータと、最終的には、ディスクドライブの間の種々のマッピングの取り扱いのために用いられる。ルーティングロジックは、FCフレームがストレージシェルフ・ルータへ向けられているかどうかをD_IDフィールドの値だけからは決定できない。D_IDが入力FC_CMNDフレームをストレージシェルフ・ルータへ向けるかどうかを決定するために、ルーティングロジックは、後述の内部ルーティングテーブル2612及び複数のレジスタを参考にして、D_IDがストレージシェルフ・ルータによって管理されるディスクドライブのアドレスを表現するかどうかを決定することが必要である。よって、図26Bに表されるように、内部ルーティングテーブル2612に関して解釈されるD_IDフィールドは、ストレージシェル2616内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続された特定のディスクを指定する。その上、ルーティングロジックは、S_IDフィールド2611によって指定されたFCフレームのソースがストレージシェルフ・ルータを用いて現在ログインされている遠隔のエンティティであるか、及びその遠隔のエンティティがアドレス指定されたディスクドライブと相互接続されているかを判定するために、後述の付加内部テーブル2614を参考にする。よって、種々の内部テーブル2614に関して解釈されるようなS_IDフィールドは、FC−CMNDフレームによって表現されるコマンドが実行されるべきかどうかを決定する許可スイッチ2620として機能する。
図26CはFCP−DATAフレームのルーティングと関連したFCフレームヘッダフィールドを示す。D_IDフィールド2610及びS_IDフィールド2611と内部テーブル2612及び2614は、FCP−CMNDフレームのルーティングと同様に、ストレージシェルフ2616内の特定のストレージシェルフ・ルータ、及びストレージシェルフ・ルータに相互接続されたディスクを指定し、データのディスクへの転送を許可2620するため使用される。しかし、FCP_DATAフレームはマルチFCP_DATAフレームの書込みシーケンスの一部分であるため、ルーティングロジックがFC_DATAフレームはストレージシェルフ・ルータにローカルであるディスクへ向けられることを判定すると、FCフレームヘッダ2606の付加フィールドはストレージシェルフ・ルータ内のFCP_DATAフレームを方向付けるために利用される。図26Cに表されるように、RX_IDフィールド2622は、FCP_DATAフレームに関連した書込みコマンドを指定したFCP_CMNDフレームの処理中に、ストレージシェルフ・ルータによって初期的に生成された値を含み、その値が書込みコマンドのコンテキスト2624を指定し、このコンテキストは、次に、データがGSMSを介してFCP層からSATAポート層へ転送できるようにする仮想キュー2626を指定する。その上、FCフレームヘッダ2606のパラメータフィールド2628は、書込みコマンドによって転送されたデータ2632の一連の全長の範囲内のFCP_DATAフレームに収容されたデータの位置2630を示すデータの相対オフセットを含む。コンテキスト2624は、適切な順序付けのためFCP_DATAフレームをチェックするため使用される次のFCP_DATAフレームの予想相対オフセットを格納する。格納された予想相対オフセットがパラメータフィールドの値と一致しないならば、FCP_DATAフレームは乱れた順序で受信されているので、エラー処理を呼び出すことが必要である。
図26Dは、内部的に生成された管理ファイルのルーティングに関連したFCフレームヘッダフィールドを示す。管理ファイルの場合、D_IDフィールド2610の最下位バイトは、ストレージシェルフ内の特定のストレージシェルフ・ルータを指定するルータ番号を含む。D_IDフィールドに含まれるルータ番号は、管理フレームがストレージシェルフ・ルータ、例えば、ストレージシェルフ・ルータ2636へ向けられているか、又は、管理ファイルがXファブリックに関連したFCポート2638、又は、Yファブリックに関連したFCポート2640を介してアクセス可能であるストレージシェルフ内の別のストレージシェルフ・ルータへ向けられているかを判定するため、後述されるレジスタ2634に含まれるローカルルータ番号と比較される。
最後に、図26Eは、受信されたFCP_TRANSFER_RDYフレーム及びFCP_RESPONSEフレームのルーティングに関連したFCフレームヘッダフィールドを示す。FCP_TRANSFER_RDYフレーム及びFCP_RESPONSEフレームの場合、ルーティングロジックは、別のストレージシェルフ・ルータによって、遠隔のエンティティ、典型的にはディスクアレイ・コントローラへ向けられるようなフレームを直ちに認識する。よって、ルーティングロジックは、フレームがXファブリック又はYファブリックは返信されなければならないことを決定するために、FCフレームヘッダのR_CTLフィールド2642を調べることだけが必要である。
図27は、ルーティングロジックによるFCフレームのルーティングを容易化するためにストレージシェルフ・ルータ内に保持された7個のメインルーティングテーブルを示す。これらのテーブルは、内部ルーティングテーブル(IRT)2702、Xファブリック外部ルーティングテーブル(ERT_X)2704、Yファブリック外部ルーティングテーブル(ERT_Y)2706、Xファブリック・イニシエータ/ターゲットテーブル(ITT_X)2708、Yファブリック・イニシエータ/ターゲットテーブル(ITT_Y)2710、Xファブリック・ログイン・ペアテーブル(LPT_X)2712、及びYファブリック・ログイン・ペアテーブル(LPT_Y)2714を含む。7個のルーティングテーブルのそれぞれは、インデックスレジスタ(IRT_INDEX)2716及びデータレジスタ(IRT_DATA)2718のようなインデックス及びデータレジスタが関連付けられる。テーブルの内容は、テーブル内の特定のフィールドを示す値をインデックスレジスタに書き込み、データレジスタからフィールドの内容を読み出し、又は、フィールドの新しい内容をデータレジスタに書き込むことによりCPUによってアクセス可能である。その上、ルータ番号と、Xファブリック及びYファブリックのそれぞれに関してストレージシェルフ・ルータ・アドレスに対応するD_IDの上位2バイトとを格納するため3個のレジスタSFAR2720、XFAR2722及びYFAR2724が存在する。これは、D_IDの下位バイトだけを格納すればよいIRT、ERT_X及びERT_Yテーブルをよりコンパクトにすることが可能である。
IRTテーブル2702は、ストレージシェルフ・ルータに接続されたディスクドライブ毎に、又は、換言すれば、ローカルディスクドライブ毎に行を含む。行は、ディスクドライブに割り当てられ、ディスクドライブへ向けられたフレームのD_IDフィールドの下位バイトに収容されたAL_PAと、ディスクドライブのLUN番号と、ディスクドライブ内に収容された論理ブロックアドレスの範囲と、2台のCPUのうちI/Oに向けられた方のCPUを示すフィールドと、行がテーブル内の有効エントリーを表現するかどうかを示す有効ビットとを含む。有効ビットは最大可能台数未満のディスクドライブがストレージシェルフ・ルータに接続されるときに好都合である。
ERT_Xテーブル2704及びERT_Yテーブル2706は、ストレージシェルフ・ルータにローカルではなく、ストレージシェルフにローカルであるディスクドライブをアドレス指定する有効D_IDの下位バイトを収容する。これらのテーブルは、後述するように、無駄な内部FCフレーム転送を避けるために使用される。
XファブリックITTテーブル2708及びYファブリックITTテーブル2710は、ストレージシェルフ・ルータで現在ログインされ、ストレージシェルフ・ルータとのFCエクスチェンジを開始可能であり、かつ、ストレージシェルフ・ルータに接続されたディスクドライブでログインされた遠隔のFCオリジネータに対応するS_ID全体を含む。ログインペアテーブル2712及び2714は、本質的に疎行列であり、ビット値は、FCPエクスチェンジのため現在ログインされている遠隔のリジネータとローカルディスクドライブのペアに対応するセル内でオンにされる。ログインテーブル2712及び2714は、かくして、ディスクアレイ・コントローラのような遠隔のエンティティと、ストレージシェルフ・ルータに相互接続されたローカルディスクドライブとの間で進行中の相互接続を表現する有効ログインの指標を与える。
次に、ストレージシェルフ・ルータのルーティング層を構築するルーティングロジックが一連の詳細なフロー制御図を参照して説明される。図28は、フロー制御図で使用される簡単化されたルーティングトポロジー及びルーティング宛先の名称を与える。図29〜35は、ルーティング層ロジックを記述する階層的な一連のフロー制御図である。
図28に表されるように、ルーティング層2802は、FCポート2804及び2806からの入力FCフレームを、そのまま元のFCポートに、CPUで動くFCPロジック及びファームウェアによる処理のためFCP層2810に、又は、コンテキストが確立されたデータフレームの場合には、かなり直接的にGSMS層に転送することに関与する。ルーティング層は、それぞれ「From_FP0」及び「From_FP1」と称されるFCポート内の入力FIFO2812及び2814から入力FCフレームを受信する。ルーティング層は、それぞれ「To_FP0」及び「To_FP1」と称される出力FIFO2816及び2818の一方にFCフレームを書き込むことにより、FCフレームをFCポートへ戻す。ルーティング層は、FCP_DATAフレームを、仮想キューを介して、GSMS層にかなり直接的に転送し、プロセス「To_GSMS」と称され、さらに、FCフレームを処理のためFCP層2810に転送し、「To_FCP」と称される。名称「From_FP0」、「From_FP1」、「To_FP0」、「To_FP1」、「To_GSMS」及び「To_FCP」は、FIFOからの読出し、FIFOへの書込み、GSMS仮想キューメカニズムによるデータ転送、及びCPUへの共有メモリインターフェイスによる状態機械介在型転送のプロセスの省略表記としてフロー制御図で利用される。
図29は、ルーティング層ロジックを表現する第1の最上位レベルのフロー制御図である。ルーティング層ロジックは、入力FCフレームをその適切な宛先へ向けるために行われる判定の組として記述される。機能するストレージルータにおいて、図29〜35に関して記載されたルーティングロジックは入力FCフレームが処理されるときに呼び出される。ルーティングロジックは、ストレージシェルフ・ルータの状態機械及び論理回路内にある。ストレージシェルフ・ルータは、蓄積交換性の(store-and-forward)、データコピータイプの内部データ転送をできる限り避け、その代わりに、FCポートのFIFOへ入力されているときでさえ、フレームヘッダ内の情報を使用して、フレームが経路制御可能であるようにストリーム化されるように設計される。換言すれば、ルーティングロジックは、フレームヘッダがFIFOからの読出しのため利用可能になると直ちに呼び出され、フレームが経路制御され、フレームに収容された初期データが、FCポートによる残りのデータの受信と並行してその宛先へ転送される。ストレージシェルフ・ルータは、2台のFCポートの2台の異なる入力FIFOの偏りのない処理を確保するため調停ロジックを含むので、XファブリックとYファブリックの両方から入力するFCフレームは適時に取り扱われ、XファブリックとYファブリックのいずれも不必要なFCフレーム処理遅延、すなわち、飢餓状態(starvation)に陥ることがない。ルーティングロジックは、FIFOに新たに到着したフレームの利用可能性を示すFCポートによって生成された信号により呼び出される。
ステップ2902において、ルーティング層ロジック(RLL)は、それぞれ「From_FP0」及び「From_FP1」と称されるFCポートの入力FIFOの一方から次の入力FCフレームを読む。ステップ2904において、ルーティング層ロジックは、FCフレームがクラス3のFCフレームであるかどうかを判定する。クラス3のFCフレームだけが記載されたストレージシェルフ・ルータの実施形態によってサポートされる。FCフレームがクラス3のフレームでないならば、FCフレームは、ステップ2906におけるエラー処理のため、FCP層、To_FCP、へ向けられる。尚、これ以降のフロー制御図では、フロー矢印に付随する小文字の「e」は、その矢印によって表現されたフローがエラー状態を取り扱うために起こることを示す。FCフレームが、ステップ2904で判定されるように、クラス3のFCフレームであるならば、RLLは、次に、ステップ2908において、FCフレームの受信元であるFCポートがSファブリック終点であるか、換言すれば、Xファブリックノード若しくはYファブリックノードであるかどうかを判定する。ストレージシェルフ・ルータは、特定のポートがSファブリックに関して終点であるかどうかを、換言すれば、設定可能なセッティングからXファブリックノード若しくはYファブリックノードであるかどうかを判定可能である。FCフレームヘッダは、上記のようにソースポートのポートアドレスを含む。
FCフレームのソースポートがSファブリック終点であり、FCフレームがローカルSファブリックの外部にあるエンティティから受信されたことを示すならば、RLLは、ステップ2910において、SビットのいずれかがFCフレームヘッダのDF_CTLフィールド内にセットされたかどうかを判定する。もしそうであるならば、エラーが発生しており、FCフレームは、ステップ2906のエラー処理のためFCP層、To_FCP、へ向けられる。そうでないならば、FCフレームがXファブリック、すなわち、Xスペース、又は、Yファブリック、すなわち、Yスペースに属するかどうかを示すために、ステップ2912において、適切なSビットがセットされる。ストレージシェルフ内で相互接続されたストレージシェルフ・ルータの組内でのストレージシェルフ・ルータの位置とは無関係に、2台のFCポートのうちの一方がXファブリックに対応し、2台のFCポートのうちのもう一方がYファブリックに対応することに注意すべきである。上記のように、FCポートとX及びTファブリックとの間の関連性は設定可能である。次に、RLLは、ステップ2914において、SビットがフレームはSファブリックフレームであることを示すためにセットされるかどうかを判定する。もしそうであるならば、ステップ2916において、フレームの宛先を決定するためにサブロジック「宛先管理(Management Destination)」が呼び出され、その後、サブロジック「宛先へのルーティング(Route to Destination)」がFCフレームをステップ2916で決定された宛先へ実際に経路制御するため、ステップ2918において、呼び出される。FCフレームが、ステップ2914で判定されるように、Sファブリック管理フレームでないならば、ステップ2920において、RLLは、各ディスクドライブがその固有のFCノードアドレスを有するモードとして記載されたトランスペアレント・モードでRLLが現在動作しているかどうかを判定する。ストレージシェルフ・ルータがトランスペアレント・モードで動作しているならば、サブロジック「トランスペアレントデスティネーション(Transparent Destination)」が、ステップ2922において、フレームの宛先を決定するために呼び出され、次に、サブロジック「宛先へのルーティング」がフレームをその宛先へ実際に経路制御するためにステップ2918において呼び出される。そうでなければ、サブロジック「宛先(Destination)」が、ステップ2924において、フレームの宛先を決定するために呼び出され、その後、フレームは、ステップ2918におけるサブロジック「宛先へのルーティング」の呼び出しによって、その宛先へ経路制御される。
図30は、図29のステップ2916から呼び出されるサブロジック「宛先管理」のフロー制御図表示である。ステップ3002において、RLLは、FCフレームのヘッダ内のD_IDに格納されたストレージシェルフ・ルータ番号がストレージシェルフ・ルータのストレージシェルフ・ルータ番号に一致するかどうかを判定する。この判定は、ストレージシェルフ内のストレージシェルフ・ルータに割り当てられ、SFARレジスタに格納されたルータ番号を使用して行える。D_IDに格納されたルータ番号が、ステップ3002で判定されるときに、SFARレジスタ内のルータ番号と一致するならば、変数「DESTINATION」がステップ3004において値「To_FCP」にセットされ、フレームがFCP層へ送信されるべきことを示す。ルータ番号が一致しないならば、ステップ3006において、RLLはFCフレームのD_ID内のルータ番号がストレージシェルフ・ルータのルータ番号よりも大きいかどうかを判定する。FCフレームのD_ID内のルータ番号がSFARレジスタに格納されたストレージシェルフ・ルータのルータ番号よりも大きいならば、制御はステップ3008へ進む。さもなければ、制御はステップ3010へ進む。ステップ3008と3010の両方において、RRLは、フレームがストレージシェルフ内のSファブリック終点に到達したかどうかを判定する。そうであるならば、管理フレームは、誤ってアドレス指定されたか、又は、適切な宛先により誤って対応されているので、どちらの場合も、変数「DESTINATION」は、ステップ3004において、「To_FCP」にセットされ、その結果、そのフレームは、過って受信されたフレームとしてCPUによって処理される。しかし、ステップ3008と3010の両方において、現在のストレージシェルフ・ルータがSファブリック終点でないならば、変数「DESTINATION」は、D_ID内のルータ番号が現在のルータのルータ番号より小さい場合、ステップ3012において、「To_FP0」にセットされ、D_ID内のルータ番号が現在のストレージシェルフ・ルータのルータ番号よりも大きい場合、変数「DESTINATION」は、ステップ3014において、「To_FP1」にセットされる。ストレージシェルフ内のストレージルータの数値識別番号は、Xファブリックに関して単調に増加し、Yファブリックに関して単調に減少することに再度注意すべきである。
図31は、図29のステップ2924から呼び出されるサブロジック「宛先」のフロー制御図表示である。このサブロジックは、ストレージシェルフ・ルータがトランスペアレント・モードで動作していないとき、換言すれば、ストレージシェルフ・ルータが複数台のディスクドライブをAL_PAにマッピングしているときに、FCフレームの宛先を決定する。ステップ3102において、RLLは、フレームがXFER_RDY又はRSPフレームであるかどうかを判定する。これらのフレームはディスクアレイ・コントローラへ返信される必要がある。そうであるならば、ステップ3103において、RLLはフレームがXファブリックに属するどうかを判定する。フレームがXファブリックに属するならば、変数「DESTINATION」は、ステップ3104において、値「To_FP0」にセットされ、フレームをX FCポートへ向ける。フレームが、ステップ3102において判定されるときに、Yファブリックフレームであるならば、変数「DESTINATION」は、ステップ3106において、フレームをY FCポートへ向けるために「To_FP1」にセットされる。ステップ3102において判定されるときに、フレームがXFER_RDYフレーム又はRSPフレームではないならば、ステップ3108で、RLLルーチンはそのフレームがFCP_CMNDであるかどうかを判定する。もしそうであるならば、変数「DESTINATION」は、ステップ3110で、「To_FCP」にセットされ、そのフレームはストレージシェルフ・ルータにローカルであるLUNへ向けられたFCP_CMNDフレームであること、及び、そのフレームはFCPコマンドのためのコンテキストを確立するためにファームウェア処理のためのFCP層へ向けられるべきであることを示す。ステップ3108で判定されるときに、フレームがFCP_CMNDフレームではないならば、ステップ3112で、RLLはそのフレームがFCP_DATAフレームであるかどうかを判定する。そのフレームがデータフレームではないならば、変数「DESTINATION」は、ステップ3114で、「To_FCP」にセットされ、エラー処理を呼び出し、そのエラー処理を用いて、ファームウェアは受信されたフレームのタイプとそのフレームが処理されるべき方法を判定する。ステップ3112で判定されるときに、フレームがFCP_DATAフレームであるならば、ステップ3116で、RLLは、そのフレームがレスポンダ又はオリジネータによって送信されたかどうかを判定する。そのフレームがオリジネータによって送信されているならば、変数「DESTINATION」はステップ3110で「To_FCP」にセットされ、そのフレームをFCP層処理へ導く。データフレームがレスポンダによって送信されているならば、ステップ3118で、RLLは、フレームが最初にSファブリックの外部から受信されたか、又は、フレームヘッダ内のSビット符号化されたファブリック表示がそのフレームを受信したポートとは反対側のポートと矛盾するかどうかを判定する。いずれかの条件が真であるならば、フレームは誤って受信されたものであり、変数「DESTINATION」は、ステップ3114において、「To_FCP」にセットされ、そのフレームをエラー処理のためCPUへ向ける。そうでなければ、制御はステップ3103へ進み、Xポート又はYポートのいずれかへ向かう。
図32は、図29のステップ2922から呼び出されるサブロジック「トランスペアレント宛先」のフロー制御図表示である。このサブロジックは、ストレージシェルフ・ルータがトランスペアレント・モードで動作し、各ディスクドライブがその固有のAL_PAを有するときに、FCフレームの宛先を決定する。ステップ3202で、RLLは、FCフレーム内のヘッダのD_IDフィールドの上位2バイトがフレームを受信したソースポートに対応するXFARレジスタ又はYFARレジスタの内容と等価であるかどうか、並びに、D_IDフィールドの下位バイトはAL_PAがローカルディスクドライブに割り当てられていることを示すIRTテーブルに収容されたAL_PAを含むかどうかを判定する。もしそうであるならば、FCフレームは現在のストレージシェルフ・ルータへ向けられている。そうでなければ、FCフレームは別のストレージシェルフ又はストレージシェルフ・ルータへ向けられている。FCフレームが現在のストレージシェルフ・ルータへ向けられている場合、ステップ3204で、RLLは、S_IDが適切なIITテーブルに収容されたS_IDに対応するかをチェックすることにより、FCフレームのオリジネータがストレージシェルフ・ルータと相互接続されたディスクドライブとのFCエクスチェンジを現時点で開始する能力を備えた外部FCオリジネータとして特定された遠隔のエンティティであるかどうかを判定する。そして、S_IDが適切なITTテーブルで見つけられた場合、RLLは、FC−フレームヘッダに収容されたS_IDと関連付けられた遠隔のエンティティがフレームの宛先とされたディスクに関して現在ログインされているかどうかを調べるために適切なLPTテーブルをさらにチェックする。ステップ3204で判定されるときに、S_IDが現在ログインされた遠隔のエンティティであり、かつ、ストレージシェルフ・ルータと相互接続されフレームの宛先とされたディスクドライブとのFCエクスチェンジを始める能力を備えた遠隔のエンティティを表すならば、ステップ3206で、変数「DESTINATION」は、フレームを処理のためFCP層へ向けるため「To_FCP」にセットされる。それに反して、S_IDが適切なIITテーブルではないか、又は、FCフレームが向けられたソース及びディスクドライブが、適切なLPTテーブルによって示されるように、現在ログインされていないならば、変数「DESTINATION」は、フレームをエラー処理のためFCP層へ向けるために、ステップ3208において、「To_FCP」にセットされる。
D_IDフィールドが、ステップ3202で判定されるときに、適切なFARレジスタの内容と一致しない場合、ステップ3210において、RLLは、フレームがXファブリックフレームであるかどうかを判定する。もしそうであるならば、ステップ3212において、RLLは、フレームがストレージシェルフ内の別のストレージシェルフ・ルータへ向けられているかどうかを判定する。そうでなければ、変数「DESTINATION」は、ステップ3214において、別のストレージシェルフへ転送する外部Xファブリックへフレームを返送するために、「To_FP0」にセットされる。ERT_Xテーブルが、ステップ3212で判定されるときに、フレームの宛先がストレージシェルフ内の別のストレージシェルフ・ルータに取り付けられたディスクドライブであることを示すエントリーを含むならば、ステップ3216において、RLLは、現在のストレージシェルフ・ルータがYファブリック終点を表現するかどうかを判定する。もしそうであるならば、フレームは正しく処理されず、Yファブリックには送信されないので、変数「DESTINATION」は、ステップ3208において、値「To_FCP」にセットされ、その結果として、フレームがエラー処理のためFCP層へ向けられる。そうでなければ、変数「DESTINATION」は、ステップ3218において、「To_FP1」にセットされ、Sファブリックを介してフレームをストレージシェルフ内の後続のストレージシェルフ・ルータに転送する。ステップ3210で判定されるときに、受信フレームがXファブリックフレームではないならば、ステップ3220において、RLLは受信フレームがYファブリックフレームであるかどうかを判定する。もしそうであるならば、フレームは、ステップ3222から始めて、Xファブリックフレームの処理と対称的かつ同等に処理される。そうでなければ、変数「DESTINATION」は、フレームをエラー処理のためFCP層へ向けるために、ステップ3208において、「To_FCP」にセットされる。
図33は、図29のステップ2918から呼び出されるサブロジック「宛先へのルーティング」のフロー制御図表示である。このサブロジックは、受信FCフレームを前に呼び出されたロジックで決定された宛先へ向ける。ステップ3302において、RLLは、変数「DESTINATION」の値が「To_FP0」又は「To_FP1」であるかどうかを判定する。もしそうであるならば、同じステップにおいて、RLLは、宛先がFCフレームを受信したポートの反対側のポートと関連付けられているかどうかを判定する。もしそうであるならば、ステップ3304において、RLLは、変数「DESTINATION」の内容によって示される宛先がSファブリック終点を表現するポートと関連付けられたキューであるかどうかを判定する。もしそうであるならば、ステップ3306において、FCフレームヘッダのDF_CTLフィールド内にセットされたSスペースビットは、ローカルSファブリックからフレームを送出する前にクリアされる。ステップ3308において、RLLは、フレームがXファブリックとYファブリックのどちらに属するかを判定し、ステップ3310又は3312において、フレームを適切な出力キューにキュー入れする。ステップ3302において判定されるときに、変数「DESTINATION」の内容がFP0ポート若しくはFP1ポートを示さないならば、又は、宛先がFCフレームを受信したポートの反対側ではないならば、ステップ3314において、RLLは、変数「DESTINATION」の内容がフレームは一方のFCポートへ向けられるべきであることを示すかどうかを判定する。フレームが一方のFCポートへ向けられるべきであるならば、フレームは、FCP層によるエラー処理のため、ステップ3316においてFCP層へ向けられる。ステップ3318でRLLによって判定されるときに、変数「DESTINATION」の内容が、フレームはFCP層、「To_FCP」へ向けられることを示すならば、フレームはステップ3316においてFCP層へ向けられる。そうでなければ、RLLは、ステップ3320において、FCフレームヘッダのR_CTLフィールドがそのフレームはFCPフレームであることを示すかどうかをチェックする。そうでなければ、フレームは、ステップ3316において、エラー処理のためFCP層へ向けられる。さもなければ、ステップ3322において、RLLは、フレームがFCP_CMNDフレームであるかどうかを判定する。もしそうであるならば、ステップ3324において、サブロジック「宛先をマッピング(Map Destination)」が呼び出され、その後、RLLは、ステップ3326において、変数「DESTINATION」の内容が「To_FCP」に一致したままであるかどうかを判定する。そうであるならば、フレームはステップ3316においてFCP層へ向けられる。さもなければ、変数「DESTINATION」の内容が今度は、ステップ3328で判定されるときに、2台のFCポートのうちの一方へのフレームの転送を示し、FCポート宛先がフレームを受信したフレームと同じFCポートであるならば、フレームは、ステップ3316において、エラー処理のためFCP層へ向けられる。さもなければ、制御はステップ3304へ進み、フレームを2台のFCPポートの一方に入れる。そのフレームが、ステップ3322で判定されるときに、FCP_CMNDフレームでないならば、サブロジック「他のルーティング(Other Routing)」がステップ3330で呼び出される。
図34は、ステップ3324で呼び出されるサブロジック「宛先のマッピング」のフロー制御図表示である。RLLは最初に、ステップ3402において、LUN、LBA、又は、LUNとLBAの組み合わせのマッピングが現時点でストレージシェルフ・ルータによって実行されているかどうかを判定する。実行されていないならば、RLLは、ステップ3404で、ストレージシェルフ・ルータがこの時点においてトランスペアレント・モードで動作中であるかどうかを判定する。もしそうであるならば、変数「DESTINATION」の値はステップ3406で「To_FCP」にセットされる。ストレージシェルフ・ルータが、ステップ3404で判定されるときに、トランスペアレント・モードで動作していないならば、RLLは、ステップ3408において、フレームのソースがフレームの宛先とデータを交換するためログインされていることを適切なLPTテーブルが示すかどうかを判定する。そうであるならば、変数「DESTINATION」はステップ3406において「To_FCP」にセットされる。そうでなければ、宛先は、フレームをエラー処理のためCPUへ向けるためにステップ3406において「To_FCP」にセットされる。LUN、LBA、又は、LUNとLBAの組み合わせのマッピングがストレージシェルフ・ルータによって実行中であるならば、RLLは、ステップ3410において、指定された宛先ディスクがIRTテーブルに関連したエントリーを有するかどうかを判定する。そうであるならば、制御はステップ3404へ進む。そうでなければ、ステップ3412において、RLLは、レンジチェックが無効にされているかどうかを判定する。レンジチェックが無効であるならば、ステップ3414において、RLLは、フレームがFP0ポートで受信されたかどうかを判定する。そうであるならば、変数「DESTINATION」はステップ3416で「To_FP1」にセットされる。そうでなければ、変数「DESTINATION」の内容はステップ3418で「To_FP0」にセットされる。レンジチェックが有効にされているならば、ステップ3420において、RLLは、指定された宛先ディスクがFP0ポートを介してアクセス可能であるかどうかを判定する。もしそうであるならば、制御はステップ3418へ進む。そうでなければ、ステップ3422において、RLLは、指定された宛先ディスクがFCポートFP1を介してアクセス可能であるかどうかを判定する。もしそうであるならば、制御はステップ3416へ進む。そうでなければ、変数「DESTINATION」は、エラー処理の目的のためステップ3406において「To_FCP」にセットされる。最終的なステップで、ステップ3416又はステップ3418のいずれかで2台のFCポートの一方へマッピングされたフレームに対し、RLLは、ステップ3424において、そのフレームがこの時点で向けられているポートがSスペース終点であるかどうかを判定する。もしそうであるならば、変数「DESTINATION」の値は、フレームをエラー処理のためFCPへ向けるためにステップ3406において「To_FCP」にセットされる。
図35は、図33のステップ3330におけるサブロジック「他のルーティング」のフロー制御図表示である。ステップ3502において、RLLは、フレームのRX_IDフィールドが現在のストレージシェルフ・ルータ、又は、それに接続されたディスクドライブがそのフレームのFCレスポンダであることを示すかどうかを判定する。もしそうであるならば、ステップ3504において、RLLは、フレームがFCP_DATAフレームであるかどうかを判定する。もしそうであるならば、ステップ3506において、RLLは、そのフレームの有効コンテキストが存在するかどうかを判定する。もしそうであるならば、フレームは、上記のように、データをSATAポートへ転送するため、ステップ3508においてGSMS、「To_GSMS」へ向けられる。そうでなければ、フレームは、ステップ3510において、エラー処理のためFCP層へ向けられる。FCフレームヘッダのRX_IDフィールドが、ステップ3502において判定されるときに、このストレージシェルフはフレームのFCレスポンダである旨を示さないならば、ステップ3512において、RLLは、FCフレームヘッダ内のRX_IDフィールドによって特定されたストレージシェルフ・ルータがフレームを受信したポートとは反対側のポートを介してアクセス可能であるかどうかを判定する。もしそうでなければ、フレームは、FCP層によるエラー処理のためキュー「To_FCP」に入れられる。そうではなく、RX_IDがフレームを受信したポートとは反対側のポートからアクセス可能であるストレージシェルフ・ルータを特定する場合、RLLは、ステップ3514において、そのポートがSファブリック終点であるかどうかを判定する。もしそうであるならば、ステップ3516において、RLLは、FCフレームヘッダのDF_CTLフィールドにセットされたSスペースビットを除去する。ステップ3518において、RLLは、フレームがXファブリックとYファブリックのどちらに属するかを判定し、ステップ3520又は3522のいずれかで、そのフレームをそのフレームが属するファブリックに適したキューにキュー入れする。
SCSIコマンド/ATAコマンドの翻訳
上記のように、本発明の一実施形態を表すストレージシェルフ・ルータは、FCP_CMNDフレームがFCディスクドライブへ向けられているかのように、ディスクアレイコントロールによってストレージシェルフ・ルータへ向けられたFCP_CMNDフレームを処理し、FCP_CMNDフレーム内のSCSIコマンドを、SCSIコマンドを実行するためSATAディスクドライブへ送信され得る1個以上のATAコマンドに翻訳する。以下の表5は、ストレージシェルフ・ルータによって受信されたSCSIコマンドと、SCSIコマンドを実行するために使用されるATAコマンドとの間の対応関係を表す。
仮想ディスクのフォーマッティング
種々の実施形態において、様々な予想外のディスクフォーマッティング規約がストレージシェルフディスクドライブによって実際には採用されるという事実にもかかわらず、ディスクアレイ・コントローラ及びその他の外部処理エンティティがストレージシェルフ内のディスクの予想されるディスクフォーマッティング規約とインターフェイスをとることができるように、ストレージシェルフ内のストレージシェルフ・ルータ又は複数台のストレージシェルフ・ルータは、仮想ディスクのフォーマッティングを提供する。仮想ディスクのフォーマッティングは、ディスクアレイ・コントローラがATA及びSATAディスクフォーマッティング規約とのインターフェイスをとるために再組み込みされることを必要とすることなく、ATAディスクドライブのようなより経済的なディスクドライブの使用を可能にさせる。さらに、ストレージシェルフ・ルータ、又は、一体的な複数台のストレージシェルフ・ルータは、付加的なエラー検出及びエラー訂正情報のような付加情報をディスクセクタ内に組み込むために、ディスクアレイ・コントローラのような外部演算エンティティを非標準的な予想外のディスクフォーマッティング規約にさらすことなく、ストレージシェルフ内で様々なディスクフォーマッティング規約を適用可能である。
図36A〜Bは、ATAディスクドライブ及びFCディスクドライブによって利用されるディスクフォーマッティング規約を示す。図36Aに表されるように、ディスクドライブは、それぞれがセクタに分割された複数のトラックにより構成されると概念的に考えられる。トラックは、ATAディスクドライブプラッタ(platter)上の外周帯であるトラック3602のようなディスクプラッタの表面にある環状の帯である。各トラックは、第1のトラック3602の第1のセクタであるセクタ3604のようなセクタと呼ばれる放射状の区域に分割される。一般に、ディスクアクセス動作はセクタの粒度で行われる。最新のディスクドライブは、複数の平行方向のプラッタを含む。平行プラッタのすべての両面の同じ番号が付けられた全トラックは一体としてシリンダを構成する。図36Aに示されるようなATAディスクドライブでは、各トラックの各セクタは、一般に512バイトのデータ・ペイロードを含む。セクタは、セクタ番号とエラー検出及びエラー訂正情報を含む付加情報を格納する。この付加情報は、一般にディスクドライブコントローラによって維持され使用され、外部からアクセスできない。この付加情報は本発明に関連しない。したがって、セクタはセクタに含まれるデータ・ペイロードのバイト数に関して議論される。
図36Bは、FCディスクドライブの概念的なトラック及びセクタのレイアウトを表す。FCディスクドライブは、ATAディスクドライブによって利用される512バイトのセクタではなく、520バイトのセクタを利用する。図36Aに表されたATA又はSATAディスクドライブの概念的なレイアウトを、図36Bに表されたFCディスクドライブの概念的なレイアウトと比較すると、図36A〜Bの両方のレイアウトは本質的に等しいデータバイト数をサポートするが、ATAディスクドライブフォーマットは、FCディスクドライブより複数であり、かつ、より小型のセクタを各トラック内に設ける。しかし、一般に、ATAディスクとFCディスクは本質的に等しいバイト数を与えないので、FCディスクは512バイトのセクタでフォーマットしてもよい。図36A〜Bは、簡略化された概念レベルでディスクフォーマッティング規約を説明することに注意すべきである。実際には、ディスクドライブは数千又は数万個のトラックを含み、各トラックは非常に複数のセクタを含む。
種々の実施形態において、本発明の対象であるストレージシェルフ・ルータは、経済的なATAディスクドライブをファイバチャネルベースのディスクアレイのストレージシェルフ内で利用できるようにする。しかし、ある種の現在利用可能なFCベースのコントローラは、520バイトのセクタをサポートするディスクドライブだけとインターフェイスをとるように実施される。ATA又はSATAベースのストレージシェルフの製造業者は、今の時点でATA非互換性のディスクアレイ・コントローラが512バイトのセクタを収容するATA又はSATAディスクドライブとインターフェイスをとるために機能強化されるように要求することを選択するが、より実現可能なアプローチは、仮想ディスクのフォーマッティングをサポートするようにストレージシェルフ・ルータを実施することである。仮想ディスクのフォーマッティングは、ディスクアレイ・コントローラのような外部エンティティに、ストレージシェルフがFCディスクドライブの520バイトセクタのフォーマッティング規約にフォーマットされたディスクドライブを収容するかのように見せかけ、ストレージシェル内の1台以上のストレージシェルフ・ルータが520バイトセクタベースのディスクアクセス命令をストレージシェルフ内のATAディスクドライブによって利用される512バイトセクタのフォーマッティングにマッピングする。
図37A〜Dは、ディスクアレイ・コントローラのような外部エンティティによるストレージシェルフ内の512バイトベースのディスクドライブへの520バイト書込みアクセスを取り扱う仮想ディスクのフォーマッティングの実施を示す。図37Aに表されるように、ディスクアレイ・コントローラのような外部処理エンティティは、書込みアクセスのターゲットとされるディスクを、520バイトセクタ(図37Aの3702)でフォーマットされているとみなすが、内部ディスクドライブは実際には512バイトセクタ(図37Aの3704)でフォーマットされている。ストレージシェルフ・ルータは、論理的な520バイトセクタベースのフォーマッティング3702と実際の512バイトセクタのフォーマッティング3704との間で、図37Aに垂直矢印3706〜3710によって表現されたマッピングを維持する役割を担う。図37B〜Dは、512バイトセクタベースの内部ディスクドライブ3704への仮想的な520バイトセクタ257〜259、3712〜3714を指定する書込み動作を完了するために、ストレージシェルフ・ルータによって実行される動作を示す。ディスクドライブの先頭セクタはセクタ0であると考えられ、すべての後続のセクタが単調増加するセクタ番号を有するセクタ番号付け規約を仮定すると、256×520=260×512=133120であるので、仮想的な520バイトセクタ256 3716は実際のディスクドライブ上の512バイトセクタ260 3718の開始バイトで始まる。換言すれば、仮想的な520バイトセクタ256及び実際の512バイトセクタ260は、共にバイト番号133120から始まる。仮想セクタ256及び実際のセクタ260の始まりは同じバイトアドレス3706にマッピングされるが、仮想セクタ256は、図37Aのマッピング矢印3707によって示されるように、実際のセクタ260の終端よりも延びる。したがって、仮想セクタ257の開始は実際のセクタ261の開始から8バイト3720の変位でオフセットし、仮想セクタ258〜260の開始は、実際のセクタ262〜264の開始から16バイト、24バイト及び32バイトのオフセット3722〜3724でオフセットする。したがって、仮想セクタ257〜259をディスクドライブに書き込むため、ストレージシェルフ・ルータは、仮想セクタ257〜259のため外部処理エンティティによって供給されたデータを、実際のディスクセクタ261〜264(3726〜3729)に書き込むことが必要である。
図37Bは、仮想フォーマッティング環境のストレージシェルフ・ルータによって実行される書込み動作処理の第1のフェーズを示す。図37Bに表されるように、ストレージシェルフ・ルータは、最初に、実際のディスクセクタ261(3726)及び264(3729)をメモリバッファ3730に読み込む。メモリバッファ3732及び3734内のデータの網掛けされた部分は、書込みアクセスがアドレス指定された仮想セクタとは別個の仮想セクタに含まれるディスクドライブから読み出されたデータに対応する。セクタ261及び264(それぞれ3726及び3729)は、アクセス動作のための仮想セクタ境界を含むので、「境界セクタ(boundary sector)」と呼ばれる。ストレージシェルフ・ルータは、第2のメモリバッファ3736内の仮想セクタ257〜259(図37Aではそれぞれ3712〜3714)に書き込まれるべきデータを同時に受信する。
図37Cは、書込みアクセスのストレージシェルフ・ルータの処理の第2のフェーズを表す。図37Cにおいて、受信データの網掛けされた部分3738及び3740は、それぞれ、図37Bに表された実際のディスクドライブから読み出されたバッファデータの部分3742及び3744に書き込まれる。
図37Dは、書込みアクセスのストレージシェルフ・ルータの実施の最終的なフェーズを示す。図37Dにおいて、実際のディスクセクタ261及び264のメモリバッファ3730に準備されたバッファデータは、実際のディスクセクタ262及び263(それぞれ、3746及び3748)に対応する第2のメモリバッファ内の受信データの部分3736と共に、実際のディスクセクタ261〜264にすべて書き込まれる。非境界ディスクセクタ262及び263は受信データバッファ3736から直接書き込み可能であることに注意すべきである。
図37A〜Dに示された、仮想フォーマッティング環境におけるストレージシェルフ・ルータが実施する書込みアクセスを要約すると、ストレージシェルフ・ルータは、一般に、最初に実際のディスクドライブから境界セクタを読み出し、受信データをメモリ内の境界セクタに書き込み、そして、境界セクタ及びすべての非境界セクタをディスクドライブに書込みすることが必要である。したがって、一般に、520バイトセクタベースのnセクタの仮想書込み動作は、2回の実際のディスクセクタの読出しと2+n−1回の実際のディスクセクタの書込みとを使用してストレージシェルフ・ルータによって実施される。
書込みI/O(n個の仮想520セクタ)→2回の読出し+2回の書込み+(n−1)回の書込みであり、対応して低下する書き込み効率は、
書込みI/O効率=(n/(4+(n−1)))×100
であり、ここで、仮想セクタのサイズは実際のディスクセクタにかなり近いことを仮定している。
図38A〜Bは、ストレージシェルフ・ルータによる仮想的な520バイトセクタベースの読出し動作の実施を示す。図38Aは、図37Aに示されたマッピングと同様の、仮想的な520バイトベースのセクタと実際のディスクドライブの512バイトセクタとの間のマッピングを示すが、図38Aでは、ディスクアレイ・コントローラのような外部処理エンティティは仮想セクタ257〜259(それぞれ、3712〜3714)の読出しを要求している。図38Bは、仮想セクタ257〜259に向けられた読出しアクセスを実施するために、ストレージシェルフ・ルータによって実行される動作を示す。ストレージシェルフ・ルータは、最初に、外部処理エンティティによって要求されたデータを収容する実際のディスクセクタを決定し、これは境界セクタ261及び264(それぞれ、3726及び3729)と非境界セクタ262及び263(それぞれ、3727及び3728)とを含む。ストレージシェルフ・ルータがアクセスされるべきデータを含む実際のディスクセクタを特定すると、ストレージシェルフ・ルータはこれらのセクタをメモリバッファ3802に読み込む。ストレージシェルフ・ルータは、次に、メモリバッファ内の仮想セクタ境界3804〜3807を特定し、メモリバッファ3802内の仮想セクタに対応するデータを要求中の外部処理エンティティへ返送し、最初の仮想セクタ3804の先頭バイトよりも前にあるメモリバッファデータ、及び最後の仮想セクタ3807の最終バイトより後に続くメモリバッファデータを棄てる。
図37A〜D及び38A〜Bにおける仮想ディスクのフォーマッティングの実施の説明図は、上位レベルの概念説明図である。内部的には、ストレージシェルフ・ルータは、入力FC_DATAパケットからデータを受信し、特定のSATAディスクドライブへの転送のためストレージシェルフ・ルータを介してSATAポートへデータを経路制御し、特定のSATAポートでSATAディスクドライブからデータを受信し、ストレージシェルフ・ルータを介して戻るようにそのデータを経路制御し、外部処理エンティティへ返信されるFC_DATAパケット及びFC_STATUSパケットでデータ及び状態情報を送信するために、上記のサブセクションで説明した種々のデータ伝送経路を利用する。複数個の別個のメモリバッファが図37B〜D及び38Dに表されているが、ストレージシェルフ・ルータによる実際のデータの処理は、上記のサブセクションに記載された仮想キューメカニズム及びその他のデータ転送メカニズムを使用して最小限のデータ記憶で達成される。図37B〜D及び38Bに表されたメモリバッファは、ストレージシェルフ・ルータ内で実行されるデータ操作及び伝送についての上記の詳細なレベルではなく、概念レベルでストレージシェルフ・ルータによるデータ処理を説明するためのものである。
図38A〜Bに示された読出し動作を要約すると、ストレージシェルフ・ルータは、n個の仮想セクタの仮想読出しを実行するために、nプラス1個のディスクセクタを読むことが必要であり、読み出し効率は対応して減少し、次式で記述され、
読出しI/O(n個の仮想520バイトセクタ)→1回の読出し+n回の読出し
であり、対応して減少する読み出し効率は、
読出しI/O効率=(n/(n+1))×100
であり、ここで、仮想セクタのサイズは実際のディスクセクタにかなり近いことが仮定されている。
図39は図37A〜Dに示されたようなストレージシェルフ・ルータによる複数の仮想セクタの書込み動作の実施を表す制御フロー図である。最初に、ステップ3902において、ストレージシェルフ・ルータは、仮想セクタを指定する外部処理エンティティから書込みコマンドを受信する。次に、ステップ3904において、ストレージシェルフ・ルータは、下位境界セクタ及び上位境界セクタを含む書き込まれるべき実際のディスクセクタを決定する。次に、ストレージシェルフ・ルータは、境界セクタ3906の処理と非境界セクタ3908の処理を並行して行う。境界セクタの処理は、ステップ3910において、受信書込みコマンドに関連した下位境界セクタが存在するかどうかを判定する。もしそうであるならば、下位境界セクタの読み出しはステップ3912で開始される。同様に、ステップ3914において、ストレージシェルフ・ルータは、書込み動作に関与する上位境界セクタが存在するかどうかを判定し、もしそうであるならば、ステップ3916において上位境界の読出し動作を開始する。図37Aの仮想セクタ256と実際のディスクセクタ260の場合と同様に仮想セクタの先頭が実際のディスクセクタの先頭と一致するとき、下位境界セクタは書込み動作に関与しないことに注意すべきである。同様に、上位仮想セクタの最後が実際のディスクセクタの最後と一致するとき、書込み動作に関与する上位境界セクタは存在しない。
ステップ3918において検出されるときに下位境界セクタの読出し動作が完了するとき、ストレージシェルフ・ルータは、書込みコマンドと関連した受信データの初期部分をステップ3920において下位境界セクタに書き込み、下位境界セクタのディスクドライブへの書込みをステップ3922で開始する。同様に、ストレージシェルフ・ルータがステップ3924で上位境界セクタの読み出しの完了を検出するならば、ストレージシェルフ・ルータは、ステップ3926において、上位境界セクタから読み出されたデータを含む受信データの最終部分をメモリバッファに書き込み、ステップ3928において、上位境界セクタのディスクドライブへの書込みを開始する。本発明の一実施形態では、ディスクセクタは最小セクタから最大セクタの順序でディスクに書き込まれる。非境界セクタの場合、ストレージシェルフ・ルータは、各非境界セクタを、ステップ3930、3932及び3934を含むforループの一部として、ステップ3932において、ディスクドライブに書き込む。ストレージシェルフ・ルータが仮想書込み動作に関連したイベントを検出したとき、ストレージシェルフ・ルータは、ステップ3936で、すべての開始された書込み動作が完了したかどうかを判定する。もしそうであるならば、書込み動作はステップ3938で成功完了する。そうでなければ、ストレージシェルフ・ルータは、仮想セクタの書込み動作がタイムアウトしたかどうかをステップ3940で判定する。もしそうであるならば、エラー状態がステップ3942で取得される。そうでなければ、ストレージシェルフ・ルータは、ステップ3944において、すべての書込み動作の完了を待つ。
図40は、図38A〜Bに示されるような、1個以上の仮想セクタへ向けられた読出し動作のストレージシェルフ・ルータによる実施の制御フロー図である。ステップ4002において、ストレージシェルフ・ルータは外部処理エンティティから読出しコマンドを受信する。ステップ4004において、ストレージシェルフ・ルータは、境界セクタを含む読出し動作に関与するすべての実際のディスクセクタの識別情報を判定する。次に、ステップ4006〜4008により構成されたforループにおいて、ストレージシェルフ・ルータは読出し動作に関与する実際のディスクセクタのそれぞれを読む。ストレージシェルフ・ルータが仮想読出し動作に関連したイベントの発生を検出したとき、ストレージシェルフ・ルータは、ステップ4010において、読み出し動作によって要求されたディスクセクタが受信されたかどうかを判定する。もしそうであるならば、ステップ4012において、ストレージシェルフ・ルータは、境界セクタ読出しが完了したかどうかを判定する。もしそうであるならば、ステップ4014において、ストレージシェルフ・ルータは境界セクタから仮想読出し動作に関連したデータを抽出し、そのデータを最終的に要求中の処理エンティティへ送信するためのバッファ又はキューに書き込む。受信セクタが境界セクタではないならば、ストレージシェルフ・ルータは、ステップ4016において、受信データを要求中の処理エンティティへの最終的な送信のためのバッファ又はキュー内の適切な位置に書き込むだけである。ステップ4018で判定されるときに、すべての読み出しが成功完了したならば、仮想読出し動作は、もちろんディスクドライブから読み出されたデータが処理エンティティへ順調に返信されたことを条件として、ステップ4020で成功完了する。そうでなければ、ストレージシェルフ・ルータはステップ4022でタイムアウトが発生したかどうかを判定する。もしそうであるならば、エラー状態がステップ4024で取得される。そうでなければ、ストレージシェルフ・ルータは、ステップ4026において、別の読出し動作の完了を待ち続ける。
520バイトのFCディスクドライブセクタの512バイトのATAディスクドライブセクタへのマッピングは、本発明の仮想フォーマッティング方法及びシステムの一実施形態において、効率的に計算される。図41は、本発明の一実施形態を表す仮想フォーマッティング方法及びシステムを実行するために必要とされる計算値を示す。図41において、最上部の水平方向のセクタの帯4102は、仮想マッピングされた520バイトセクタを表し、最下部の水平方向の帯4104は物理的な512バイトATAセクタを表す。図41は、仮想セクタ4106〜4108の物理セクタ4110〜4112へのマッピングを示す。図41に表された実施例では、仮想セクタ400〜409は対応する物理セクタへマッピングされることを前提とする。最初の仮想セクタの論理ブロックアドレス(LBA)、「fc_lba」4114は、その結果、値「400」をとり、マッピングされるべき仮想ブロックの個数、「fc_block_count」4116は、その結果、10である。計算値「fc_lba_last」4118、すなわち、マッピングされるべき仮想セクタレンジの後に続く最初の仮想セクタのLBAは「410」である。マッピングされるべき仮想セクタのためのデータを含む最初の物理セクタの論理ブロックアドレス、すなわち、「ata_lba」4120は、一般的なC言語の構文及び演算子を使用して、
ata_lba=fc_lba+(fc_lba>>6)
として計算される。この実施例では、ata_labの計算値は「406」である。この計算は、最初の仮想セクタのLBAに、最初の仮想セクタより先行する仮想セクタの総数を64で除算して計算された物理セクタの個数を加算することとして理解できるが、その理由は、64個の仮想セクタの連続的な組のそれぞれが対応する65個の物理セクタの連続的な組に正確にマッピングされるためであり、換言すれば、
64*520==65*512==33280
である。最初の物理セクタの先頭から最初の仮想セクタの最初のバイトに対応する最初の物理セクタ内のバイトまでのオフセット、すなわち、「ata_lba_offset」4122は、以下の式:
ata_lba_offset=(fc_lba&63)<<3
として計算される。この実施例では、ata_lba_offsetの計算値は「128」である。この計算は、開始仮想セクタLBAの後に続く仮想セクタの個数を必要とされる8バイトシフトの回数に対応する64で除算して、必要とされる最初の物理ブロック内の8バイトシフトの回数を決定することであると理解され、ここで、8バイトは仮想セクタ長と物理セクタ長の差である。最後の物理的な境界ブロックLBA、すなわち、「ata_ending_lba」4124は、
ata_ending_lba=fc_lba_last+(fc_lba_last>>6)
として計算される。この実施例では、ata_ending_lbaの計算値は「416」である。上記の計算は最初の物理セクタ「ata_lba」の計算と等価である。仮想セクタの範囲内ではない最初のバイトに対応する最後の物理的な境界ブロック内のオフセット、すなわち、「ata_ending_lba_offset」4126は、
ata_ending_lba_offset=(fc_lba_last&63)<<3
として計算される。この実施例では、ata_ending_lba_offsetの計算値は「208」である。ata_ending_lba_offsetの計算値が「0」であるならば、
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の計算値は「11」である。仮想セクタが物理セクタより小さい場合に、類似しているが異なる計算が行われることに注意すべきである。本発明の方法によって任意のサイズの仮想セクタが任意のサイズの物理セクタにマッピングされる。
図42は、本発明の一実施形態を表す離散的な仮想フォーマッティング実施における仮想セクタ書込みを示す。離散的な仮想フォーマッティング実施は、本発明の一実施形態を表す集積回路型ストレージシェルフ・ルータ実施によって与えられるストレージシェルフインターフェイスを提供する汎用プロセッサ及び記憶されたファームウェア/ソフトウェアルーチンを利用するストレージルータのようなコンポーネントにおけるストレージルータ機能のファームウェア/ソフトウェア実施に関与する。図42に表されるように、物理境界セクタ4202〜4203は、128Kのディスクバッファ4204に読み込まれ、受信された仮想セクタ4206〜4207の内容は128Kのディスクバッファ4204に書き込まれ、仮想セクタデータに対応する物理境界データの部分を上書きする。128Kのディスクバッファ4204の内容は、次に、ATAディスクドライブ4208に書き込まれる。よって、仮想ディスクのフォーマッティングは、ソフトウェア/ファームウェア/汎用プロセッサベースのコンポーネントを使用して実行される。
図43は本発明の一実施形態を表す集積回路型ストレージシェルフベースの仮想フォーマッティング実施における仮想セクタ書込みを示す。図43に表されるように、物理境界セクタ4302〜4303は、GSM4308内の最初のセクタバッファ(FSB)4304及び最後のセクタバッファ(LSB)4306に読み込まれ、FSB及びLSBは仮想セクタデータとオーバーレイされ、残りの仮想セクタデータは、FSB及びLSBと関連したGSM4308内の仮想キュー4310を介して転送するためセットアップされる。FSB及びLSBの内容と、仮想キューへ向けられたデータは、次に、前のサブセクションで説明されたデータ転送メカニズムによってATAディスクへ転送される。
図39〜40の制御フロー図は、仮想書込みコマンド及び仮想読出しコマンドに関連したストレージシェルフ動作のかなり上位の概念的な説明図を表すことに注意すべきである。特に、簡単さ及び明瞭さのため、上記のセクションで説明されたデータフロー及びディスク動作の詳細は繰り返されない。
図36〜43に関して記載された仮想ディスクのフォーマッティングは、上記のように、ストレージシェルフ・ルータがディスクアレイ・コントローラのような外部演算エンティティに対して、実際には、ストレージシェルフルが512バイトセクタのATA又はSATAディスクドライブを収容しているのにもかかわらず、ストレージシェルフ・ルータによって管理されるストレージシェルフが520バイトセクタのFCディスクドライブを収容しているように見せかけることを可能にさせる。同様に、仮想フォーマッティングは、ストレージシェルフ・ルータ内で利用されるローカルディスクフォーマッティングとは無関係に、外部エンティティによって予想若しくは希望される任意のタイプのディスクフォーマッティングへのインターフェイスを提供するためにストレージシェルフ・ルータによって使用される。例えば、新しい非常に経済的な1024バイトセクタのディスクドライブが利用可能になるならば、仮想ディスクのフォーマッティング技術は、ストレージシェルフ・ルータが仮想的な520バイトセクタベースのアクセス動作、又は、512バイトセクタベースのアクセス動作を、新しい1024バイトセクタベースのディスクドライブにマッピングすることを可能にさせる。その上、多層の仮想ディスクのフォーマッティングが、ディスクドライブの各セクタ内に記憶された付加情報に依拠するディスクドライブのエラー検出及びエラー訂正能力を提供若しくは強化するために、ストレージシェルフ・ルータによって利用される。
図44は、ストレージシェルフ・ルータがATAディスクドライブのエラー検出能力を強化することを可能にさせる2層の仮想ディスクのフォーマッティング技術を示す。図44において、ATAディスクドライブは、垂直方向の実線4404のような垂直方向の実線を用いて直線的なセクタの部分列4402によって示された512バイトセクタを利用する。ストレージシェルフ・ルータは、512バイトセクタの短い部分列4406によって図44に示されるように、520バイトセクタを内在するディスクドライブがサポートする512バイトセクタにマッピングするため、上記の仮想ディスクのフォーマッティング技術を使用する。仮想セクタ4408のような520バイト仮想セクタのそれぞれは、512バイトペイロードと、512バイトペイロードに追加された付加的な8バイトの水平冗長符号(longitudinal redundancy code:LRC)フィールドとを含む。換言すれば、ストレージシェルフ・ルータは、520バイトセクタを内在するATAディスクドライブの512バイトセクタにマッピングするために第1の仮想ディスクのフォーマッティングを利用する。しかし、本実施形態では、ストレージシェルフ・ルータは、仮想セクタ4410のような外部から見える512バイトの第2レベルの仮想セクタを、ストレージシェルフ・ルータによって512バイトディスクセクタにマッピングされる第1レベルの仮想セクタ4408のような520バイトの第1レベルの仮想セクタにマッピングするために、第2の仮想ディスクのフォーマッティングレベルを利用する。この2段階の仮想化は、ストレージシェルフ・ルータが付加的な8バイトのLRCフィールドを各セクタの最後に挿入することを可能にさせる。ディスクアレイ・コントローラのような外部処理エンティティは、ディスクドライブによって使用される同じフォーマッティングである512バイトセクタをサポートする第2レベルの仮想ディスクのフォーマッティング層へのインターフェイスをとるが、ストレージシェルフ・ルータが付加的な8バイトLRCフィールドをセクタ毎にディスクドライブに格納するので、外部処理エンティティから見えるディスクドライブ内の総セクタは、ディスクドライブによってサポートされる実際のセクタ数より少ない。さらに、外部エンティティからディスクセクタに含まれるLRCフィールドは見えない。
図45は、図44に示された2層仮想レベルの実施形態の第1レベルの仮想520バイトセクタのそれぞれにストレージシェルフ・ルータによって収容されたLRCフィールドの内容を示す。図45に表されるように、520バイト仮想セクタ4502の最初の512バイトはペイロード又はデータバイトである。LRCフィールドの最後の8バイトは、2個の予約バイト4502、2バイト4506で構成される巡回冗長検査(cyclic redundancy check:CRC)サブフィールド、及び最後の4バイトに格納された論理ブロックアドレス4508を含む。CRCフィールドは、周知のCRC−CCITT技術によって計算されたCRC値を含む。この値の計算は、以下で詳細に説明される。論理ブロックアドレス(LBA)は仮想セクタに関連したセクタアドレスである。
LRCフィールドの内容は、種々のデータ破壊エラーを検出するために利用されるハードウェアレベルのECC情報及びディスクドライブコントローラ技術にもかかわらずATAディスクドライブに生じる様々なタイプのエラーをストレージシェルフ・ルータが検出することを可能にさせる。例えば、ディスクドライブ内の特定のセクタを指定する読出し要求は、異なるセクタに関連したディスクドライブコントローラによるデータ返送を生じることがたまにある。LRCフィールド内のLBAは、ストレージシェルフ・ルータがこのようなエラーを検出することを可能にさせる。その上、ディスクドライブは様々なレベルのデータ破壊を被る。ハードウェアによって供給されるECCメカニズムは、1ビット又は2ビットのパリティエラーを検出するが、CRCフィールド4506に格納されたCRC値は、CRC値を計算するため利用される技術に応じて、1ビット、2ビット及び3ビットのすべてのエラー、並びに、ある長さの範囲の一続きのエラーを検出することが可能である。換言すれば、CRC値は機能強化されたエラー検出能力を提供する。図44に示された2段階の仮想ディスクのフォーマッティング技術を利用することにより、ストレージシェルフ・ルータは、別のやり方ではストレージシェルフ・ルータによって検出できない広範囲のエラー状態を検出可能であり、そして、ディスクアレイ・コントローラのような外部処理エンティティから見えない方式でそのようにすることができる。上記のように、外部処理エンティティによって観察可能な唯一のトランスペアレントではない特性は、特定のディスクドライブのためアクセス可能なかなり少数のセクタである。
図46はCRC値の計算を示す。図46に表されるように、520バイト仮想セクタのペイロード又はデータバイト4602及びLBAフィールド4604は、一体的に非常に大きい数を表現していると考えられる。その非常に大きい数は、モジュロー2(modulo-2)の除算を使用して、特定の定数4606によって割り算され、モジュロー2の除算からの剰余が初期CRC値4608として選ばれる。その定数は17ビット数であり、よって、モジュロー2の除算からの剰余は最大で長さが16ビットであり、その結果、2バイトのCRCフィールド内に収まることに注意すべきである。初期CRC値は、最終的なCRC値4610を生成するために一定値「FFFF」(16進表記)で排他的論理和(XOR)演算される。定数4606は、データバイト4602及びLBAフィールド4604により構成される大きい数に加えられる小さな変化が、定数によるモジュロー2の除算の後に、異なる剰余、すなわち、初期CRC値を生じることを保証するため代数的性質に関して慎重に選択される。様々なCRC計算技術は、各定数が僅かに異なるエラー検出能力を提供する異なる代数的性質を備えている異なる定数を利用する。
図47は、仮想セクタの内容がエラーを検出するために仮想セクタのLRCフィールドに含まれるCRCフィールドに関してチェックされる技術を示す。例えば、ストレージシェルフ・ルータが2個のディスクセクタから仮想セクタの内容を読むときに、ストレージシェルフ・ルータは、検出可能なエラーが仮想セクタ内に含まれる情報を記憶する際又は読む際に発生したかどうかを判定するために、CRCフィールドに関して仮想セクタの内容をチェック可能である。仮想セクタがディスクから読み出されるとき、ストレージシェルフ・ルータは、非常に大きい数を形成するため、データバイト4702、LBAフィールド4704、及びCRCフィールド4706を一つに合成する。その非常に大きい数は、モジュロー2の除算を用いて、CRC値を計算するために利用された定数4708と同じ数で割り算され、剰余がチェック値4710として利用される。CRC−CCITT技術が利用されるとき、チェック値4710は、取り出されたデータ、LBA及びCRCフィールドが初期CRC値を計算したときのデータ及びLBAと同じであるときに「1D0F」(16進)である。換言すれば、チェック値4710が一定値「1D0F」を有するとき、ストレージシェルフ・ルータは、仮想セクタの記憶及び取り出しの際にエラーが発生していないことが確信できる。当然ながら、CRC技術は絶対確実なものではなく、非常に僅かな無言のエラーの可能性がある。一定チェック値が生じるのは、初期計算されたCRCをデータ及びLBAに追加することはデータ及びLBAにより構成された数に216を乗ずることと等価であり、かつ、データ、LBA及び初期計算されたCRCにより構成された数は、CRC−CCITT技術によって、一定値4708を用いて一様に割り切れることが保証されるためであることに注意すべきである。
図48は、取り出された仮想セクタのエラーをチェックするためにストレージシェルフ・ルータによって利用される完全なLRCチェック技術を示す制御フロー図である。ステップ4802において、ストレージシェルフ・ルータは、CRCフィールド及びLBAフィールドを含む取り出された仮想セクタを受信する。ステップ4804において、ストレージシェルフ・ルータは、取り出された仮想セクタ内のLBA値が予想LBA値に一致するかどうかを判定する。一致しないならば、エラーがステップ4806において返送される。そうでなければ、ステップ4808において、ストレージシェルフ・ルータは、図44に関して説明したように、取り出された仮想セクタのデータ、LBA及びCRCフィールドに基づいて新しいCRC値を計算する。新たに計算されたCRC値が、ステップ4810で判定されるときに、予想定数「1D0F」(16進)と等しいならば、ストレージシェルフ・ルータはステップ4812においてチェックの成功の通知を返送する。そうでなければ、ストレージシェルフ・ルータはステップ4814でエラーを返送する。
ストレージシェルフ・ルータは、書込み動作中に完全(full)LRCチェック又は延期(deferred)LRCチェックを実行する。図49は延期LRCチェックを示す。図49に表されるように、また、既に説明したように、単一の第2レベルの仮想512バイトセクタ4902がストレージシェルフ・ルータによってディスクドライブに書き込まれるとき、ストレージシェルフ・ルータは最初に、第2レベルの仮想セクタ4902に関連した2個の境界セクタ4906〜4907をメモリ4910に読み込む4904〜4905ことが必要である。境界セクタ4906〜4907は、一般にそれぞれがLRCフィールド4912及び4913を含む。第2のLRCフィールド4913は、第2レベルの仮想セクタ4902に対応する第1レベルの520バイト仮想セクタ4914内に存在する。延期LRCモードでは、ストレージシェルフ・ルータは、データ及びLBA値をバッファ4916に挿入し、CRC計算を実行し、計算されたCRCをCRCフィールド4918に挿入し、次に、得られた第1レベルの仮想セクタをメモリバッファ4910に書き込む。メモリバッファの内容は、次に、2回の書込み動作4920及び4922によってディスクドライブへ返送される。第1レベルの仮想セクタと関連したLRCフィールド4913の内容は有効であると仮定されることに注意すべきである。しかし、2回の書込み動作は、同時に、近接する第1レベルの仮想セクタに対応するデータ及びLRCフィールドを元のディスクドライブに書き込む。このデータ及び付加LRCフィールドが有効であるかどうかをチェックするのではなく、ストレージシェルフ・ルータは、近接する第1レベルの仮想レベルが後で読み出されるまで、近接する第1レベルの仮想セクタのチェックを単に延期する。
図50は、受信された第2レベルの512バイト仮想セクタ上の書込み動作の完全LRCチェックを示す。図50を図49と比較することにより、完全LRCチェックでは、ストレージシェルフ・ルータが、第2レベルの仮想セクタ4902を囲む境界セクタ4906及び4907だけでなく、境界セクタ4906及び4907の隣接セクタ5002及び5004もまたメモリバッファ5006に読み込むことが明らかである。これは、受信された第2レベルの仮想セクタ492をメモリバッファ5012へ書き込み、2個の境界セクタを元のディスクドライブ5014及び5018へ書き込むために進む前に、ストレージシェルフ・ルータが図48を参照して説明されたLRCチェック方法を使用して、下位及び上位の近接する第1レベルの520バイト仮想セクタ5008及び5010はエラーなしであることをチェックすることを可能にさせる。完全LRCチェックは、したがって、2回の付加的な書き込みを要求し、対応した書き込み効率の減少を伴い、以下の式:
書込みI/O(n個の仮想520セクタ)
→4回の読出し+2回の書込み+(n−1)回の書込み
によって記述され、対応して減少する読み出し効率は、
書込みI/O効率=(n/(6+(n−1)))×100
であり、仮想セクタのサイズは実際のディスクセクタにかなり近いことが仮定されている。
ストレージシェルフ・ルータは、問題を検出し、外部処理エンティティから見えない問題を訂正するために種々の付加的な技術を利用する。例えば、ストレージシェルフ・ルータが図50において下位境界セクタ4906をうまく読み出すことに失敗した場合、ストレージシェルフ・ルータは、それにもかかわらず、第2レベルの仮想セクタ4912に受信された下位境界セクタの部分をディスク上の下位境界セクタに書き込み、「エラーから回復」状態をディスクアレイ・コントローラへ返送する。次に、前の仮想セクタがアクセスされるとき、ディスクアレイ・コントローラは、前の書込み動作中に読まれなかった元の下位境界セクタの部分を取り出すために、関連したセクタのミラーコピーからのデータ復元をトリガーし、そのデータをディスクドライブに書き込み、エラーを訂正する。よって、LRC故障はストレージシェルフ・ルータによって回避される。
本発明は、特定の実施形態の観点で説明されているが、本発明がこの実施形態に限定されることは意図されていない。本発明の精神の範囲内における変更は当業者に明白である。例えば、上記のように、本発明の種々の実施形態を表現する仮想ディスクのフォーマッティング技術は、殆ど制限のない数の仮想ディスクのフォーマッティングインターフェイスを外部処理エンティティに提供し、よって、内部ディスクフォーマットを外部処理エンティティから分離するために、ストレージシェルフ・ルータによって使用される。任意のサイズの仮想セクタが本発明の方法によって任意のサイズの物理セクタにマッピングされる。これはストレージシェルフ・ルータが付加的なエラー検出情報を各セクタに収容し、外部処理エンティティによって想定されないフォーマッティング規約を使用するディスクドライブを利用することを可能にさせるだけでなく、仮想ディスクのフォーマッティング技術は多様なその他の目的のために使用される。例えば、仮想ディスクのフォーマッティングは、ストレージシェルフ・ルータが非常に安全なデータ記憶装置を提供するために仮想セクタペイロードを拡張された符号化ペイロードに符号化することを可能にさせる。別の例として、ストレージシェルフ・ルータは、十分な冗長なデータをディスクドライブ内に格納すべく仮想ディスクのフォーマッティングを使用し、ストレージシェルフ・ルータが、個々のセクタ内で発生する複数のタイプのデータエラーと、さらにセクタ境界を越えて発生するエラーを検出するだけでなく、訂正することを可能にさせる。どのようなハードウェア実施とも同様に、殆ど制限のない数の異なるハードウェア、ファームウェア、及びソフトウェアコンポーネントが、仮想ディスクのフォーマッティングにおける複数の異なる実施形態、並びに、複数のタイプの実施形態を実施するため設計される。当業者は、ストレージシェルフのストレージシェルフ・ルータ、内部ディスクドライブ、及びその他のコンポーネントの設計及び能力に応じて、膨大な数の最適化を利用可能である。
上記の解説は、説明の目的のため、本発明の全体を通じた理解を与えるために特定の名称を使用した。しかし、当業者に明らかであるように、具体的な詳細は本発明を実施するために必要とはされない。換言すれば、周知の回路及びデバイスは根本的な発明から不必要に注意がそれることを避けるためにブロック図形式で表される。よって、本発明の具体的な実施形態の上記の解説は、例示と説明のために記載されたものであり、それらは、網羅的であること、或いは、発明を開示された形式そのままに制限することを意図せず、明らかに複数の変更及び変形が上記の教示内容に照らして可能である。実施形態は、本発明の原理及びその実際的な適用を最もよく説明し、それによって、当業者が本発明及び検討された特定用途に適するような実施形態と共に種々の実施形態を最もうまく利用することを可能にさせるために選択され記載された。本発明の範囲は特許請求の範囲及びその均等の範囲によって定められることが意図されている。