ファイバチャネル(「FC」)は、コンピュータおよび周辺デバイスの複数の異なる組み合わせを相互接続するデータ通信ネットワーク用のアーキテクチャおよびプロトコルである。FCは、小型コンピュータシステムインターフェイス(「SCSI」)プロトコルをはじめとする種々の上位プロトコルをサポートする。コンピュータまたは周辺デバイスは、FCポートおよび銅線または光ファイバを介してネットワークに連結される。FCポートは、トランシーバおよびインターフェイスコントローラを含み、FCポートが収容されるコンピュータ周辺デバイスは、「ホスト」と呼ばれる。FCポートは、周辺コンピュータインターフェイス(「PCI」)バスなどのローカルデータバスを介してホストとデータを交換する。インターフェイスコントローラは、ファイバチャネルとFCポートが常駐するコンピュータまたは周辺デバイスとの間の下位プロトコル交換を実行する。
コンピュータネットワークにおける遠隔データアクセスのためのよく知られているパラダイムは、クライアント/サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータは、データの読み出しまたはデータの書き込みの要求をサーバコンピュータに送信する。サーバコンピュータは、クライアントサーバがデータの読み出しまたはデータの書き込みに対する認証および許可を有することを調べ、特定の大容量ストレージデバイスへの要求された読み出し動作または書き込み動作をマッピングし、書き込み動作の場合には、クライアントコンピュータから大容量ストレージデバイスへのデータの転送において中間物として機能することによって、または読み出し動作の場合には大容量ストレージデバイスからクライアントへのデータの転送において中間物として機能することによって、要求を処理する。
一般的な現在利用可能であり、これまで利用可能であった通信ネットワークアーキテクチャにおいて、サーバコンピュータは、ローカルエリアネットワーク(「LAN」)を介してクライアントコンピュータと通信し、サーバコンピュータは、SCSIバスなどのローカルバスを通じて複数の大容量ストレージデバイスと通信する。そのようなシステムにおいて、サーバは、2つの異種通信媒体間のブリッジを代表するため、サーバは、読み出し動作または書き込み動作の結果として転送されたデータを格納して転送するために必要とされる。FCの出現で、クライアントコンピュータ、サーバコンピュータおよび大容量ストレージデバイスはすべて、1つの通信媒体によって対称に相互接続されてもよい。従来のクライアント/サーバアーキテクチャは一般に、上述のLANおよびSCSIネットワークにおいて用いられるものと同種のクライアント/サーバプロトコルを用いて、FCに移植される。
大容量のディスクドライブをはじめとするSCSIバス準拠の大容量ストレージデバイスは、特に、中規模コンピュータシステムおよび大規模のコンピュータシステムにおいて、広範囲に利用可能であり、広く用いられており、多くのFCに基づくシステムは、FC準拠のディスクドライブを利用し、これらはそれぞれが1つまたは複数のFCポートと、FCレスポンダとして機能するためにディスクドライブ用に必要とされる論理回路と、を備える。パーソナルコンピュータ(「PC」)をはじめとするより小規模のシステムにおいて、「Integrated Drive Electronics」(「IDE」)ディスクドライブまたは「Advanced Technology Attachment」(「ATA」)ディスクドライブと呼ばれる異なるファミリのディスクドライブが、広範囲に利用される。シリアルATAディスク(「SATA」)は一般に、業界標準アーキテクチャ(「ISA」)バスを介してシステムと相互接続する。
本発明は、FC、SCSIおよびIDE/ATA技術に関する。それぞれについて、以下の3つの個別の小段落で順に説明する。これらの技術のいずれかまたはすべてに精通している当業者は、FCに基づくディスクアレイについて記述するこの段落の最後の小段落およびその小段落の直後の本発明の概要の段落まで飛ばして構わない。
<ファイバチャネル>
ファイバチャネル(「FC」)は、表1において以下に列挙された規格文書をはじめとする複数のANSI規格文書によって定義され、記載されている。
表1に列挙された文書およびファイバチャネルに関するさらなる情報は、以下のアドレスの「http://www.tll.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つの相互接続トポロジ(構成)の最も簡単なトポロジ(構成)を示す。図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アービトレイテッドループトポロジ(構成)」と呼ばれるある程度さらに複雑なトポロジ(構成)を示す。図1Bは、アービトレイテッドループの中で相互接続される4つのノード110〜113を示す。電気バイナリデータまたは光学バイナリデータからなる信号は、円形方式でループの周囲を1つのノードから次のノードに転送される。ノード111に関連する送信器114などの1つのノードの送信器は、ループにおける次のノードの受信器に直接的に接続され、送信器114の場合には、ノード112に関連する受信器115と直接的に接続される。2種類のFCポートが、アービトレイテッドループ内でFCノードを相互接続するために用いられてもよい。アービトレイテッドループにおいて用いられる最も一般的な種類のポートは、「NL_Port」と呼ばれる。「FL_Port」と呼ばれる特殊な種類のポートは、以下に記載されるFCファブリックトポロジ(構成)とFCアービトレイテッドループを相互接続するために用いられてもよい。1つのみのFL_Portが、アービトレイテッドループトポロジ(構成)にアクティブに組み込まれてもよい。FCアービトレイテッドループトポロジ(構成)は、127個までのアクティブなFCポートを含んでもよく、さらなる非参加FCポートを含んでもよい。
FCアービトレイテッドループトポロジ(構成)において、ノードは、アービトレイテッドループの制御のために競合してもよく、または調停が行われてもよい。一般に、2つ以上のノードが制御のために競合している場合には、最低のポートアドレスを有するノードが、制御を受ける。フェアネスアルゴリズムは、すべてのノードが最終的には、合理的な時間量の中で、制御を受信することを保証するために、ノードによって実行されてもよい。ノードが、ループの制御を受けたとき、ノードは、アービトレイテッドループの中の任意の他のノードへのチャネルを開くことができる。半二重チャネルにおいて、1つのノードがデータを送信し、他のノードがデータを受信する。全二重チャネルにおいて、データは、データが第2のノードによって送信され、第1のノードによって受信されると同時に、第1のノードによって送信され、第2のノードによって受信されてもよい。たとえば、図1Bのアービトレイテッドループにおいて、ノード111が、ノード113で全二重チャネルを開く場合には、ノード111からノード113へのチャネルを通じて送信されたデータは、ノード112のNL_Port116を通過し、ノード113からノード111によって送信されたデータは、ノード110のNL_Port117を通過する。
図1Cは、「FCファブリック」と呼ばれる最も一般的かつ最も複雑なFCトポロジ(構成)を示す。FCファブリックは、4つのFCノード119〜122が接続される不規則な形状の中心オブジェクト118によって図1Cにおいて表されている。FCノード119〜122の中のN_Port123〜126が、ファブリック118の中でF_Port127〜130に接続される。ファブリックは、電話システムにおける機能と類似のスイッチ式トポロジ(構成)またはクロスポイントスイッチトポロジ(構成)である。データは、スイッチを通じてF_Port間のファブリックまたは「ファブリックエレメント」と呼ばれる交換によってルーティングされる。あるF_Portと別のF_Portとの間のファブリックを介する可能な経路が、多くある可能性がある。F_Portに関連するファブリック内のデータのルーティングおよびノードのアドレス指定は、FCノードまたはN_Portによってではなく、FCファブリックによって扱われる。
FCは、シリアル通信媒体である。データは、きわめて高い転送速度で一度に1ビット転送される。図2は、FCネットワークを通じた転送のために、時間においてデータが体系化されるきわめて簡単な階層を示している。最下位の概念レベルで、データは、データビットのストリーム200であると考えることができる。FCネットワークによってサポートされるデータの最小単位またはデータビットのグループ化は、10ビット文字であり、8ビット文字としてFCポートによって復号化される。FCプリミティブは、10ビット文字またはバイトから構成される。あるFCプリミティブは、FCポート間で交換された制御情報を保持するために利用される。データ体系化の次のレベルであるFCプロトコルに関する基本レベルは、フレームである。7つのフレーム202〜208が、図2に示されている。フレームは、区切り符号、ヘッダを含む36〜2,148バイトから構成されてもよく、データ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プロトコルは、エクスチェンジと呼ばれる第3の構成レベルを指定する。エクスチェンジ214の一部が、図2に示されている。このエクスチェンジ214は、図2に示される少なくとも第1のシーケンス210および第2のシーケンス212から構成される。このエクスチェンジはあるいは、フレーム1〜フレーム7 202〜208と、第2のシーケンス212と、エクスチェンジ214を構成する任意のさらなるシーケンスとに含まれる任意のさらなるフレームから構成されるものとして見なすことができる。
FCは、全二重データ伝送媒体である。フレームおよびシーケンスは同時に、オリジネータまたはイニシエータと、レスポンダまたはターゲットとの間の両方向に渡されることができる。エクスチェンジは、すべてのシーケンスを含み、シーケンス内のフレームは、読み出しI/Oトランザクションまたは書き出しI/Oトランザクションなどの1つのI/Oトランザクション中に、オリジネータとレスポンダとの間で交換される。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を含む。フレーム開始部304と呼ばれる第1の高位セクションは、フレームの開始を印付ける4バイトを含む。フレームヘッダ306と呼ばれる次の高位セクションは、アドレス指定情報、シーケンス情報、エクスチェンジ情報および種々の制御フラグを含む24バイトを含む。フレームヘッダ314のさらに詳細な図は、図3においてFCフレーム302から拡大されて示されている。宛て先識別子(「D_ID」)またはDESTINATION_ID316は、フレーム用の宛て先FCポートを示す24ビットのFCアドレスである。発信元識別子(「S_ID」)またはSOURCE_ID318は、フレームを送信したFCポートを表す24ビットのアドレスである。オリジネータIDまたはOX_ID320およびレスポンダID322またはRX_IDは共に、フレームがオリジネータまたはイニシエータおよびレスポンダまたはターゲット、FCポートに対して属するエクスチェンジを識別する32ビットエクスチェンジIDから構成される。シーケンスIDまたはSEQ_ID324は、フレームが属するシーケンスを識別する。
データペイロードと呼ばれる次の高位セクション308は、FCフレーム内にパッケージ化される実際のデータを含む。データペイロードは、IPおよびSCSIなどのより高位のプロトコルに基づいて転送されることになっているデータおよびカプセル化するプロトコル情報を含む。図3は、SCSIプロトコルに基づくデータ転送のために用いられる4つの基本的な種類のデータペイロードレイアウト326〜329を示す。FCP_CMNDと呼ばれるこれらのフォーマットの第1のタイプ326は、イニシエータからターゲットにSCSIコマンドを送信するために用いられる。FCP_LUNフィールド330は、8バイトのアドレスを含み、これは一定の実装例において、特定のSCSIバスアダプタ、SCSIバスアダプタに関連するターゲットデバイス、指定されたターゲットSCSIデバイスに関連する論理デバイスに対応する論理単位番号(「LUN」)を指定することができ、これらは共に、FCP_CMND用のターゲットを表す。他の実装例において、FCP_LUNフィールド330は、SCSIバスアダプタ、SCSIバスアダプタに関連するターゲットデバイス、指定されたターゲットSCSIデバイスに関連する論理デバイスに対応するLUNを決定するために、ターゲットFCホストアダプタによって用いられることができるインデックスまたは参照符号を含む。SCSI読み出しI/OコマンドまたはSCSI書き込みI/Oコマンドなどの実際のSCSIコマンドは、16バイトのフィールドFCP_CDB332の中に含まれる。
図3に示されるデータペイロードフォーマットの第2のタイプ327は、FCP_XFER_RDYレイアウトと呼ばれる。このデータペイロードフォーマットは、ターゲットがデータの受信または送信を開始するために準備されているときに、ターゲットからイニシエータにSCSI開始コマンドを転送するために用いられる。図3に示されるデータペイロードフォーマットの第3のタイプ328は、FCP_DATAフォーマットである。FCP_DATAフォーマットは、SCSIのI/Oトランザクションの実行の結果として、SCSIデータストレージデバイスから読み出されている実際のデータまたはSCSIデータストレージデバイスに書き込まれている実際のデータを転送するために用いられる。図3に示される最後のデータペイロードフォーマット329は、FCP_RSPレイアウトと呼ばれ、I/Oトランザクションの終了時に、SCSI状態バイト334のほか、他のFCP状態情報をターゲットからイニシエータに戻すように転送するために用いられる。
<SCSIバスアーキテクチャ>
コンピュータバスは、コンピュータコマンドおよびデータがコンピュータシステムの処理構成要素、格納構成要素および入力/出力(「I/O」)構成要素の間で伝送される、一連の電気信号線である。SCSIのI/Oバスは、ハードディスクおよびCD−ROMドライブなどの大容量ストレージデバイスを、コンピュータシステムのメモリ構成要素および処理構成要素と相互接続するための最も広範囲に及ぶ人気のあるコンピュータバスである。SCSIバスアーキテクチャは、3つの主要な規格、すなわち、SCSI−1、SCSI−2およびSCSI−3で定義される。SCSI−1規格およびSCSI−2規格は、米国規格協会(American National Standards Institute「ANSI」)の「X3.131−1986」および「X3.131−1994」の規格文書でそれぞれ出版されている。SCSI−3規格は、ANSI委員会で現在開発中である。SCSIバスアーキテクチャの概要は、「The SCSI Bus and IDE Interface」,Freidhelm Schmidt,Addison−Wesley Publishing Company,ISBN 0−201−17514−2,1997(「Schmidt」)によって提供される。
図4は、SCSIバスを含む共通のパーソナルコンピュータ(「PC」)アーキテクチャのブロック図である。PC400は、高速CPUバス406によってシステムコントローラ404に連結される中央演算処理装置またはプロセッサ(「CPU」)402を含む。システムコントローラは次に、メモリバス410を介してシステムメモリ構成要素408に連結される。システムコントローラ404はさらに、より低速の業界標準アーキテクチャ(「ISA」)バス414およびSCSIバス416と相互接続される周辺構成要素相互接続(「PCI」)バス412を介して、種々の周辺デバイスと連結される。PCIバスのアーキテクチャは、「PCI System Architecture」,Shanley & Anderson,Mine Share,Inc.,Addison−Wesley Publishing Company,ISBN 0−201−40993−3,1995に記載されている。相互接続されるCPUバス406、メモリバス410、PCIバス412およびISAバス414により、CPUが、コンピュータシステムに含まれる種々の処理構成要素およびメモリ構成要素およびI/Oデバイスとデータおよびコマンドを交換することを可能にする。一般に、ビデオディスプレイデバイス418などのきわめて高速かつ高帯域幅のI/Oデバイスは、PCIバスに直接的に接続される。キーボード420およびポインティングデバイス(図示せず)などの低速のI/Oデバイス420は、ISAバス414に直接的に接続される。ISAバスは、バスブリッジ構成要素422を介してPCIバスと相互接続される。ハードディスク、フロッピディスクドライブ、CD−ROMドライブおよびテープドライブ424〜426などの大容量ストレージデバイスは、SCSIバス416に接続される。SCSIバスは、SCSIバスアダプタ430を介してPCIバス412と相互接続される。SCSIバスアダプタ430は、53C8xx SCSIプロセッサのSymbiosファミリから選択されるプロセッサなどのプロセッサ構成要素と、標準的なPCIバスプロトコルを用いたPCIバス412へのインターフェイスと、を含む。SCSIバスアダプタ430は、部分的に下記に記載するSCSIバスプロトコルを用いて、SCSIバス416とインターフェイス接続する。SCSIバスアダプタ430は、一般に、SCSIバスに接続される各大容量ストレージデバイス424〜426またはSCSIデバイスに埋め込まれるSCSIコントローラ(図示せず)とコマンドおよびデータを交換する。SCSIコントローラは、SCSIバスを介してSCSIアダプタから受信したSCSIコマンドを解釈してそれに応答するハードウェア/ファームウェア構成要素であり、論理デバイスとインターフェイスを取り、制御することによって、SCSIコマンドを実装するハードウェア/ファームウェア構成要素である。論理デバイスは、1つまたは複数の物理デバイスに対応してもよく、または1つまたは複数の物理デバイスの一部に対応してもよい。物理デバイスとしては、ディスクドライブ、テープドライブおよびCD−ROMドライブなどのデータストレージデバイスが挙げられる。
I/Oコマンドと呼ばれる2つ重要なタイプのコマンドが、SCSIデバイスに論理デバイスからのデータの読み出しおよび論理デバイスへのデータの書き込みを命令する。I/Oトランザクションは、コンピュータシステムの2つの構成要素間のデータの交換であり、一般に、読み出しI/Oコマンドまたは書き込みI/Oコマンドによって部分的に実装されるCPU402などの処理構成要素によって開始される。したがって、I/Oトランザクションは、読み出しI/Oトランザクションおよび書き込みI/Oトランザクションを含む。
SCSIバス416は、複数のデータビットを同時に輸送することができるパラレルバスである。SCSIバスによって同時に輸送することができるデータビットの数は、バスの幅と呼ばれる。異なるタイプのSCSIバスは、8ビット、16ビットおよび32ビットの幅を有する。16ビットおよび32ビットのSCSIバスは、ワイドSCSIバスと呼ばれる。
すべてのコンピュータバスおよびプロセッサと同様に、SCSIバスは、バスの動作およびデータ転送の速度を決定するクロックによって制御される。SCSIバスは、クロック速度が変化する。SCSIバスの幅およびSCSIバスが動作するクロック速度の組み合わせが、毎秒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のドメイン510に関連する。最近のSCSI−2バス実装により、15の異なるSCSIデバイス513〜515および516〜517を1つのSCSIバスに取り付けることが可能である。図5において、SCSIデバイス513〜515は、SCSIバスアダプタ506によって制御されるSCSIバス518に取り付けられ、SCSIデバイス516〜517は、SCSIバスアダプタ504によって制御されるSCSIバス520に取り付けられる。各SCSIバスアダプタおよびSCSIデバイスは、SCSI識別番号またはSCSI_IDを有し、特定のSCSIバスにおけるデバイスまたはアダプタを一意に識別する。規則により、SCSIバスアダプタは、SCSI_ID7を有し、SCSIバスに取り付けられるSCSIデバイスは、0〜6および8〜15の範囲のSCSI_IDを有する。SCSIデバイス513などのSCSIデバイスは、複数の論理デバイスとインターフェイスをとってもよく、各論理デバイスは、1つまたは複数の物理デバイスの一部を含む。各論理デバイスは、論理デバイスを制御するSCSIデバイスに対して論理デバイスを一意に識別する論理単位番号(「LUN」)によって識別される。たとえば、SCSIデバイス513はそれぞれ、LUN0、1および2を有する論理デバイス522〜524を制御する。SCSI専門用語によれば、SCSIバスでI/Oコマンドを起動するデバイスは、イニシエータと呼ばれ、I/O動作を実行するようにSCSIデバイスに命令するSCSIバスに関するI/Oコマンドを受信するSCSIデバイスは、ターゲットと呼ばれる。
一般に、SCSIバスアダプタ504および506などのSCSIバスアダプタは、コマンドをターゲットデバイスに送信することによって、I/O動作を起動する。ターゲットデバイス513〜515および516〜517は、SCSIバスからI/Oコマンドを受信する。ターゲットデバイス513〜515および516〜517は次に、論理デバイスからのデータを読み出してSCSIバスを介してイニシエータにデータを返すか、またはSCSIバスを介してイニシエータから論理デバイスに受信されたデータを書き込むように制御する1つまたは複数の論理デバイスとインターフェイスをとることによって、コマンドを実装する。最後に、ターゲットデバイス513〜515および516〜517は、コマンドの実装の成功または失敗を表す状態メッセージを用いて、SCSIバスを介してイニシエータに応答する。
図6A〜図6Cは、読み出しI/O動作および書き込みI/O動作の起動および実装に伴うSCSIプロトコルを示す。読み出しI/O動作および書き込みI/O動作は、SCSIデバイスによって行われる大量のI/O動作から構成される。SCSIバスによって相互接続される大容量ストレージデバイスのシステムの動作効率を最大限にするための努力は最も一般的には、読み出しI/O動作および書き込みI/O動作が行われる効率を最大限にすることに向けられている。したがって、以下の説明において、種々のハードウェアデバイスのアーキテクチャの特徴は、読み出し動作および書き込み動作に関して説明される。
図6Aは、SCSIイニシエータ、最も一般的にはSCSIバスアダプタによる、SCSIターゲット、最も一般的には1つまたは複数の論理デバイスに関連するSCSIデバイスに埋め込まれるSCSIコントローラへの読み出しI/Oコマンドまたは書き込みI/Oコマンドの送信を示す。読み出しI/Oコマンドまたは書き込みI/Oコマンドの送信は、SCSIのI/O動作のコマンド段階と呼ばれる。図6Aは、中心の垂直線606によってイニシエータ602セクションおよびターゲット604セクションに分割される。イニシエータセクションおよびターゲットセクションの両方は、SCSIバスの状態を記載する「状態」という名称の列606および608と、イニシエータおよびターゲットにそれぞれ関連するSCSIバスイベントを記載する「イベント」という名称の列610および612と、を含む。I/Oコマンドの送信に伴うバス状態およびバスイベントは、図6Aの上から図6Aの下まで時間順に並べられる。図6B〜図6Cもまた、この上述の形式に従う。
図6Aに示されるイニシエータSCSIバスアダプタからターゲットSCSIデバイスへのI/Oコマンドの送信は、ターゲットSCSIデバイスによる読み出しI/O動作または書き込みI/O動作を起動する。図4を参照すると、SCSIバスアダプタ430は、I/Oトランザクションの一部としてI/O動作を起動する。一般に、SCSIバスアダプタ430は、読み出し動作または書き込み動作のいずれかを行うようにSCSIバスアダプタに命令するCPU402から、PCIバス412、システムコントローラ404およびCPUバス406を介して読み出しコマンドまたは書き込みコマンドを受信する。読み出し動作において、CPU402は、SCSIバスアダプタ430に対して、大容量ストレージデバイス424〜426からデータを読み出して、SCSIバス416、PCIバス412、システムコントローラ404およびメモリバス410を介してそのデータをシステムメモリ408内の位置に転送するように命令する。書き込み動作において、CPU402は、システムコントローラ404に対して、システムメモリ408からメモリバス410、システムコントローラ404およびPCIバス412を介してSCSIバスアダプタ430にデータを転送するように命令し、SCSIバスアダプタ430に対して、SCSIバス416を介してデータが書き込まれる大容量ストレージデバイス424〜426にデータを送信するように命令する。
図6Aは、BUS FREE状態614のSCSIバスから始まる。この状態は、SCSIデバイスに現在輸送中のコマンドまたはデータがないことを表す。イニシエータまたはSCSIバスアダプタは、バスをARBITRATION状態616に入らせるために、SCSIバスのBSY信号線、D7信号線およびSEL信号線をアサートする。この状態において、イニシエータは、デバイスのすべてに、SCSIバスにコマンドを伝送する意志を通知する。1つのみのデバイスが任意の瞬間にSCSIバスの動作を制御してもよいことから、アービトレーションが必要である。イニシエータがSCSIバスの制御を獲得すると仮定すると、イニシエータは次に、SCSIバスをSELECTION状態618に入らせるために、ターゲットSCSI_IDに対応するATN信号線およびDX信号線をアサートする。イニシエータまたはターゲットは、上述したARBITRATION状態616からSELECTION状態618への状態の変更などのSCSIバス状態の変更を行うために、特定のシーケンスにおいて、種々のSCSI信号線のアサートおよびドロップを行う。これらのシーケンスは、Schmidt規格およびANSI規格において見つけることができるため、以下にはさらに記載しない。
ターゲットがイニシエータによって選択されたことをターゲットが検知する場合には、ターゲットは、I/O動作のコマンド段階を終了するために、SCSIバスの制御620を仮定する。ターゲットは次に、MESSAGE OUT状態622に入るために、SCSI信号線を制御する。MESSAGE OUT状態において生じる第1のイベントにおいて、ターゲットは、イニシエータからIDENTIFYメッセージ623を受信する。IDENTIFYメッセージ623は、後に続くコマンドメッセージが対処されるLUNを識別するLUNフィールド624を含む。IDENTIFYメッセージ623はまた、ターゲットが後に続くI/Oコマンドのターゲットの実装中に、SCSIバスから切断することをターゲットが認証するターゲットを表すために一般に設定されるフラグ625を含む。ターゲットは次に、後に続くI/Oコマンドがどのように待ち行列に入れられるべきかをターゲットに示すQUEUE TAGメッセージ626を受信するほか、ターゲットに待ち行列タグ627を提供する。待ち行列タグは、I/Oコマンドを識別する1バイトである。したがって、SCSIバスアダプタは、LUNごとに256個の異なるI/Oコマンドを同時に処理することができる。イニシエータSCSIバスアダプタのSCSI_ID、ターゲットSCSIデバイスのSCSI_ID、ターゲットLUNおよび待ち行列タグの組み合わせは共に、SCSIバスの中で後に続くI/Oコマンドに対応するI/O動作を一意に識別するI_T_L_Q結合参照番号を含む。次に、ターゲットデバイスは、COMMAND状態628に入るために、SCSIバス信号線を制御する。COMMAND状態において、ターゲットは、イニシエータからI/Oコマンド630を要請して受信する。I/Oコマンド630は、実行されることになっている特定のコマンド、この場合には、読み出しコマンドまたは書き込みコマンドを識別する命令コード632と、コマンドによって指定される読み出し動作または書き込み動作の開始時点である論理デバイスの論理ブロックを識別する論理ブロック番号636と、コマンドの実行中に読み出されるか、または書き込まれるブロックの数を指定するデータ長さ638と、を含む。
ターゲットがI/Oコマンドを受信して処理するとき、ターゲットデバイスは、ターゲットデバイスが一般に切断メッセージ642をイニシエータデバイスに戻すように送信するMESSAGE IN状態640に入るために、SCSIバス信号線を制御する。一般に、ターゲットは、コマンドによって指定される読み出し動作または書き込み動作のために論理デバイスを準備するために、論理デバイスと対話し始めるため、ターゲットは、SCSIバスから切断される。ターゲットは、データの受信のためのバッファを準備する必要がある可能性があり、ディスクドライブまたはCD−ROMドライブの場合には、ターゲットデバイスは、読み出しコマンドまたは書き込みコマンド用の開始時点として指定される適切なブロックを求めるように論理デバイスに命令してもよい。切断することによって、ターゲットデバイスは、SCSIバスアダプタとターゲットデバイスとの間でさらなるメッセージ、コマンドまたはデータの輸送のために、SCSIバスを解放する。このように、きわめて多数の異なるI/O動作が、SCSIバスを通じて同時に多重化されることができる。最後に、ターゲットデバイスは、BUS FREE状態644にSCSIバスを戻すためにBSY信号線をドロップする。
ターゲットデバイスは次に、読み出し動作または書き込み動作のために論理デバイスを準備する。論理デバイスにおいてデータの読み出しまたは書き込みのための準備が整っているとき、I/O動作のデータ段階が結果として生じる。
図6Bは、SCSIのI/O動作のデータ段階を示す。SCSIバスは最初は、BUS FREE状態646である。ターゲットデバイスは、読み出しI/Oコマンドに応じてデータを戻すか、または書き込みI/Oコマンドに応じてデータを許容するかの準備がここでなされ、ARBITRATION状態648に入るために、SCSIバス信号線を制御する。ターゲットデバイスが、SCSIバスの制御のための仲裁に成功すると仮定すると、ターゲットデバイスは、RESELECTION状態650に入るためにSCSIバス信号線を制御する。RESELECTION状態は、図6Aの上記の説明において記載したSELECTION状態に類似であり、RESELECTION状態において通信するために、SELECTION状態におけるターゲットデバイスを選択するSCSIバスアダプタではなく、SCSIバスアダプタの選択を行っているターゲットデバイスである点が異なる。
一旦、ターゲットデバイスが、SCSIバスアダプタを選択すると、ターゲットデバイスは、SCSIバスをMESSAGE IN状態652に入らせるために、SCSIバス信号線を操作する。MESSAGE IN状態において、ターゲットデバイスは、IDENTIFYメッセージ654およびQUEUE TAGメッセージ656の両方をSCSIバスアダプタに送信する。これらのメッセージは、図6Aに示されるイニシエータからターゲットへのI/Oコマンドの伝送中に、イニシエータによってターゲットデバイスに送信されるIDENTIFYメッセージおよびQUEUE TAGメッセージと同一である。イニシエータは、I_T_L_Q結合参照番号、イニシエータおよびターゲットデバイスのSCSI_ID、ターゲットLUN、QUEUE TAGメッセージに含まれる待ち行列タグの組み合わせを用いて、読み出し動作の場合には、データが続いてターゲットからイニシエータに送信されるI/Oトランザクションを識別してもよく、またはWRITE動作の場合には、データが続いてイニシエータによって伝送されるI/Oトランザクションを識別してもよい。したがって、I_T_L_Q結合参照番号は、読み出しの場合には、ターゲットデバイスからデータを受信するための適切なバッファ、書き込みの場合には、ターゲットデバイスにデータを伝送するための適切なバッファを位置決めするために、目立つI/Oコマンドの表へのインデックスとして、SCSIバスアダプタによって用いられることができるI/O動作処理である。
IDENTIFYメッセージおよびQUEUE TAGメッセージの送信後、ターゲットデバイスは、DATA状態658に移行するために、SCSI信号線を制御する。読み出しI/O動作の場合には、SCSIバスは、DATA IN状態に移行する。書き込みI/O動作の場合には、SCSIバスは、DATA OUT状態に移行する。SCSIバスがDATA状態にある時間中に、ターゲットデバイスは、各SCSIバスクロックサイクル中に、データが伝送中である特定のSCSIバスの幅に等しいビット単位のサイズを有するデータ単位を伝送する。一般に、データの各単位の転送の一部として、信号線ACKおよびREQを伴うSCSIバス信号線ハンドシェイクがある。読み出しI/Oコマンドの場合には、たとえば、ターゲットデバイスは、次のデータ単位をSCSIバスに配置し、REQ信号線をアサートする。イニシエータは、REQ信号線のアサーションを検知し、SCSIバスから伝送されたデータを検索し、データの受信を承認するために、ACK信号線をアサートする。この種のデータ転送は、非同期転送と呼ばれる。SCSIバスプロトコルはまた、ターゲットデバイスが、イニシエータからの第1の承認を受信する前に、一定数のデータ単位を転送することを可能にする。同期転送と呼ばれるこの転送モードにおいて、第1のデータ単位の送信と伝送のための承認の受信との間の待ち時間が、回避される。データ伝送中、ターゲットデバイスは、DISCONNECTメッセージが後に続くSAVE POINTERSメッセージをイニシエータに送信し、続いて、BUS FREE状態に入るためにSCSIバス信号線を制御することによって、データ伝送を中断することができる。これにより、ターゲットデバイスは、さらなるデータの受信または伝送前にターゲットデバイスが制御する論理デバイスと対話するために、休止することを可能にする。SCSIバスからの切断後、ターゲットデバイスは次に、SCSIバスの制御のために再び後で仲裁し、さらなるIDENTIFYメッセージおよびQUEUE TAGメッセージをイニシエータに送信し、イニシエータが中断された時点で、イニシエータがデータの受信または伝送を再開することができるようにしてもよい。切断および再接続660の実施例が、DATA状態658を中断する図3Bに示されている。最後に、I/O動作用のすべてのデータが伝送されると、ターゲットデバイスは、MESSAGE IN状態662に入るために、SCSI信号線を制御し、ターゲットデバイスは、任意にSAVE POINTERSメッセージによって先行されるDISCONNECTメッセージをイニシエータに送信する。DISCONNECTメッセージの送信後、ターゲットデバイスは、BSY信号線をドロップし、BUS FREE状態664にSCSIバスを移行させる。
図6Bに示されているように、I/O動作用のデータの伝送後に、ターゲットデバイスは、I/O動作の状態段階中に、状態をイニシエータに戻す。図6Cは、I/O動作の状態段階を示す。図6A〜図6Bの場合のように、SCSIバスは、図3Bの場合のように、BUS FREE状態666からARBITRATION状態668、RESELECTION状態670およびMESSAGE IN状態672に移行する。MESSAGE IN状態672中のターゲットによるイニシエータへのIDENTIFYメッセージ674およびQUEUE TAGメッセージ676の伝送後に、ターゲットデバイスは、STATUS状態678に入るようにするために、SCSIバス信号線を制御する。STATUS状態678において、ターゲットデバイスは、I/Oコマンドが正常に終了したかどうかを表すために、1つの状態バイト684をイニシエータに送信する。図6Cにおいて、0の状態コードによって表される正常終了に対応する状態バイト680は、ターゲットデバイスからイニシエータに送信されていることが示される。状態バイトの伝送後、ターゲットデバイスは次に、MESSAGE IN状態682に入るために、SCSIバス信号線を制御し、ターゲットデバイスは、COMMAND COMPLETEメッセージ684をイニシエータに送信する。この時点で、I/O動作が終了する。ターゲットデバイスは次に、BSY信号線をドロップし、SCSIバスがBUS FREE状態686に戻るようにする。SCSIバスアダプタはここで、I/Oコマンドのその部分を終了し、コマンドを実行し、PCIバスを介して終了メッセージまたは状態をCPUに戻すために割り当てられた任意の内部リソースを解放することができる。
<FCPへのSCSIプロトコルのマッピング>
図7Aおよび図7Bは、イニシエータとターゲットとの間で交換されたFCPシーケンスと図6A〜図6Cに記載されるSCSIバス段階および状態とのマッピングを示す。図7A〜図7Bにおいて、ターゲットSCSIアダプタは、FCPホストアダプタと共にパッケージ化されることが仮定され、その結果、ターゲットSCSIアダプタは、FCを介してイニシエータと通信し、SCSIバスを介してターゲットSCSIデバイスと通信することができる。図7Aは、読み出しI/Oトランザクションに関するFCPシーケンスとSCSI段階および状態との間のマッピングを示す。トランザクションは、イニシエータが、FCP_CMND702データペイロードを含む1フレームFCPシーケンスをFCを介してターゲットSCSIアダプタに送信するときに起動される。ターゲットSCSIバスアダプタがFCP_CMNDフレームを受信すると、ターゲットSCSIバスアダプタは、ARBITRATION、RESELECTION、MESSAGE OUT、COMMANDおよびMESSAGE INをはじめとする図6Aに示されるコマンド段階704のSCSI状態を介して続行する。図6Aに示されているように、コマンド段階の終わりで、I/OトランザクションのターゲットであるSCSIデバイスは、SCSIバスを解放するために、SCSIバスから切断し、ターゲットSCSIデバイスにおいて、トランザクションを実行する準備がなされる。後に、ターゲットSCSIデバイスは、SCSIバス制御のために再仲裁し、I/Oトランザクション706のデータ段階を開始する。この時点で、SCSIバスアダプタは、データ伝送がここで続行することができることを表すために、FCP_XFER_RDY1フレームシーケンス708をイニシエータに戻すように送信してもよい。読み出しI/Oトランザクションの場合には、FCP_XFER_RDY1フレームシーケンスは、任意である。データ段階が続行されるとき、ターゲットSCSIデバイスは、論理デバイスからデータを読み出して、SCSIバス上でそのデータをターゲットSCSIバスアダプタに伝送し始める。ターゲットSCSIバスアダプタは次に、ターゲットSCSIデバイスから受信されたデータを、共にI/O読み出しトランザクションに対応するエクスチェンジの第3のシーケンスを構成する複数のFCP_DATAフレームにパッケージ化し、FCを介してそれらのFCP_DATAフレームをイニシエータに伝送する。すべてのデータが伝送され、ターゲットSCSIデバイスがSCSIバスの制御を断念するとき、ターゲットSCSIデバイスは次に、I/Oトランザクションの状態段階714を起動するために、SCSIバスの制御を仲裁する。この段階において、SCSIバスは、ターゲットSCSIデバイスからターゲットSCSIバスアダプタにSCSI状態バイトを送信するために、図3Cに示されているように、BUS FREE状態からARBITRATION、RESELECTION、MESSAGE IN、STATUS、MESSAGE INおよびBUS FREE状態を介して移行する。状態バイトの受信時に、ターゲットSCSIバスアダプタは、状態バイトをFCP_RSP1フレームシーケンス716にパッケージ化し、FCを介してFCP_RSP1フレームシーケンスをイニシエータに伝送する。これが、読み出しI/Oトランザクションを終了する。
多くのコンピュータシステムにおいて、ターゲットFCホストアダプタとターゲットSCSIバスアダプタとの間に、PCIバスなどのさらなる内部コンピュータバスがあってもよい。言い換えれば、FCホストアダプタおよびSCSIアダプタは、1つのターゲット構成要素に共にパッケージ化されなくてもよい。簡単にするために、図7A〜図7Bにはさらなる相互接続は、示されない。
図7Bは、図7Aの類似の方式において、FCP_CMNDフレーム718によって示される書き込みI/Oトランザクション中のFCPシーケンスとSCSIバス段階および状態との間のマッピングを示す。図7Bは、書き込みトランザクション中に、FCP_DATAフレーム722〜725が、FCにわたってイニシエータからターゲットに伝送され、ターゲットからイニシエータに送信されるFCP_XFER_RDY1フレームシーケンス720が、読み出しI/Oトランザクションの場合のように任意ではなく、代わりに必須である点のみが図7Aとは異なる。図7Aの場合のように、書き込みI/Oトランザクションは、ターゲットがFCP_RSP1フレームシーケンス726をイニシエータに戻す場合に含まれる。
<IDE/ATAディスクドライブ>
IDE/ATAドライブは、ディスク論理コントローラおよびハードディスクを共に1つのモジュールとして統合するために開発された。IDE/ATAドライブは、ISAバスを介するPCシステムへの容易な統合のために特に設計された。元来、IDE/ATAドライブは、システムまたはバスクロックによって制御される離散的な時間間隔で、IDE/ATAドライブとシステムとの間のデータの2バイトの交換を可能にするために、パラレルな16ビット相互接続によって設計された。残念なことに、パラレルバス相互接続は、性能限界に達しつつあり、現在のデータ速度は100〜133MB/秒であり、40または80のピンリボンケーブル接続はもはや、現在のコンピュータシステム内の内部構成要素の窮屈な高密度パッケージ化に適合しない。これらの理由からSATA(「SATA」)規格が開発され、SATAディスクドライブが現在、製作されており、80ピンリボンケーブル接続が、4線式シリアルケーブルに取って代わっている。SATAディスクの場合の初期データ速度は、150MB/秒であり、まもなく300MB/秒に増大し、次には600MB/秒に達すると予想されている。標準的な8B/10B符号化は、ATAシリアルディスクドライブと周辺構成要素相互接続(「PCI」)に基づくコントローラとの間の転送のために、データのシリアル化のために用いられる。最終的には、種々のI/Oコントローラを統合し、インターフェイスを周辺デバイスおよびバスに提供し、1つまたは複数のCPUおよびメモリを連結する第2のブリッジとの間でデータ転送を行うサウスブリッジコントローラは、SATAデバイスの直接的な相互接続を提供するために、SATA技術を完全に組み込むように設計されてもよい。
ATAインターフェイス、特にATA−5およびATA−6規格のインターフェイスは、外部プロセッサまたは論理コントローラが、ATAディスクドライブ内の論理コントローラに、基本的なデータ転送コマンド、探索、キャッシュ管理および他の管理および診断に関連するタスクを実行するように命令することを可能にする、様々なコマンドをサポートする。以下の表2は、プロトコル「1」などのプロトコル番号を一般的なタイプのATAコマンドと関連付ける。コマンドのタイプとしては、プログラムされた入力/出力(「PIO」)、非データコマンドおよび直接メモリアクセス(「DMA」)コマンドが挙げられる。
以下に提供される表3は、複数のATAコマンドに加えて、表2において上記で定義したように、コマンドが属するコマンドタイプを表す対応するプロトコルを列挙している。
CHECK POWER MODEコマンドは、ホストがATAデバイスの電力モードを決定することを可能にする。DOWNLOAD MICROCODEコマンドは、ホストがATAデバイスのマイクロコードを変更することを可能にする。EXECUTIVE DEVICE DIAGNOSTICSコマンドは、ホストが、ATAデバイスによって実装される診断試験を呼び出すことを可能にする。FLUSH CACHEコマンドは、ホストが、ATAデバイスがその書き込みキャッシュをフラッシュすることを要求することを可能にする。このコマンドの2つのバージョンが表に含まれ、拡張バージョンはATA〜6規格インターフェイスをサポートするデバイスで利用可能な48ビットアドレス指定機能を表す。表3に示されるコマンドのさらなる拡張バージョンは、以下で個別に説明しない。IDENTIFY DEVICEコマンドは、ホストが、デバイスによって提供される論理セクタ、シリンダおよびヘッドの数、デバイスによってサポートされるコマンド、デバイスによってサポートされる機能および他のそのようなパラメータをはじめとするパラメータ情報に関して、ATAデバイスに照会することを可能にする。READ DMAコマンドは、ホストがDMAデータ転送プロトコルを用いて、デバイスからデータを読み出すことを可能にし、大量のデータの場合に、一般にはるかに効率的である。READ VERIFY SECTORSコマンドは、ホストが、ATAデバイスにホスト内に格納されたデータの一部を読み出すように命令して、デバイスからホストへのデータ読み出しを転送することなく、エラー状態が生じるかどうかを決定することを可能にする。SEEKコマンドは、ホストが次のコマンドにおける1つまたは複数の特定の論理ブロックにアクセスし、デバイスが指定された1つまたは複数の論理ブロックへの次のアクセスを実行するために、ヘッドの位置決めを最適化することを可能にしうることを、ホストがATAデバイスに通知することを可能にする。SET FEATURESコマンドは、ホストがATAデバイス内の種々のパラメータを修正して、デバイスによって提供された機能をオンおよびオフ状態にすることを可能にする。SLEEPコマンドは、ホストが、ATAデバイスに次のリセットコマンドを停止させて待機するように命令することを可能にする。WRITE DMAコマンドは、ホストが、より大量のデータの場合に一般的にさらに効率的であるDMAデータ転送を用いて、ATAデバイスにデータを書き込むことを可能にする。
<FCに基づくディスクアレイ>
中規模および大規模のコンピュータシステムにおいて、データ格納の要件は一般に、埋め込まれたディスクドライブを含む埋め込まれた大容量ストレージデバイスの容量をはるかに超える。そのようなシステムにおいて、ローカルエリアネットワーク、光ファイバネットワークおよび他の高帯域幅通信媒体を介して、中規模の高性能なコンピュータシステムに連結される内部プロセッサを含む廉価なディスクの冗長アレイ(「RAID」)などの高性能で大容量デバイスを利用することが一般的になっている。ディスクアレイの設計および製作を容易にするために、ディスク製造者は、ディスクアレイ内のディスクドライブをディスクアレイコントローラに直接的に相互連結するために、FCポートを含むディスクドライブを提供する。一般に、FCアービトレイテッドループトポロジ(構成)が、個別のFCディスクドライブをディスクアレイコントローラに相互連結するために、ディスクアレイ内で利用される。
図8A〜図8Dは、ディスクアレイにおけるFCディスクの使用に関連する複数の問題点を示している。図8Aは、ディスクアレイの内部構成要素の比較的抽象的なレンダリングを示している。以下に説明する図8B〜図8Dおよび図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アービトレイテッドループが、潜在的に1つの故障点を表すことである。一般に、FCディスクは、アービトレイテッドループから機能していないFCディスクを分離するために、ポートバイパス回路を用いて拡大されてもよいが、ポートバイパス回路のみによっては阻止されることができない異なるモードの故障が複数ある。
ノードをアービトレイテッドループに連結するFCポートが、機能しないときに、第3の問題点が生じる。そのような場合には、複雑かつ信頼性に欠ける技術が、機能しないFCポートを識別して分離する試みにおいて利用されなければならない。一般に、機能しないFCポートは、ループトポロジ(構成)が混乱しており、機能しないノードを分離するために、ディスクアレイコントローラは、各ノードをバイパスするためにポートバイパス回路を連続的に起動しようとしなければならない。しかし、この技術は、種々の故障モードの下で機能しないノードを識別することに失敗する可能性がある。したがって、ノードの故障は、アービトレイテッドループトポロジ(構成)に関する深刻な問題点である。
図8Bは、潜在的な1点故障問題に対する解決策を示している。図8Bに示されているように、ディスクアレイコントローラ802は、2つの個別の独立なFCアービトレイテッドループ814および816を介してFCディスク806〜813と相互接続される。2つの個別のFCアービトレイテッドループを用いることにより、1点故障問題を著しく解消する。しかし、ノード遅延問題は、2つのFCアービトレイテッドループを用いることにより、改善されるわけではない。さらに、各FCディスクが2つの個別のFCポートを含まなければならないため、個別のFCディスクは、さらに複雑かつさらに高価である。最後に、機能しないポートの識別および分離に関する問題は、部分的にのみ対処される。その理由は、2つのアービトレイテッドループの一方が混乱するノード故障の場合には、他方のアービトレイテッドループが機能し続けるが、通信媒体において2倍の冗長性はないためである。2倍の冗長性を復元するためには、ディスクアレイコントローラは依然として、機能しないノードを識別して分離しようとする必要があり、上述したように、識別および分離に抵抗する故障モードが多くある。
図8Cは、ディスクアレイのFCに基づく実装に関するさらなる問題点をさらに示している。一般に、ディスクアレイから必要とされる利用可能な格納空間が大きくなればなるほど、大量の個別のFCディスクの追加を結果として生じる。しかし、さらなるディスクを含むことは、ノード遅延問題を悪化させ、上述のように、1つのFCアービトレイテッドループが、最大127個のノードだけを含むことになる可能性がある。この最大ノード問題を克服するためには、さらに独立なFCアービトレイテッドループが、ディスクアレイに追加される。
図8Dは、より高性能のディスクアレイを示しており、ここでFCディスクの第1の集合818が、2つの個別のFCアービトレイテッドループ814および816を介してFCコントローラ802と相互接続され、FCディスクの第2の集合820が、第2のペアのFCアービトレイテッドループ822および824を介してディスクアレイコントローラ802と相互接続される。FCディスクの集合のそれぞれ818および820は、シェルフと呼ばれ、一般に冗長な電源システム、冗長な制御経路、全体的な故障の許容差およびディスクアレイの高可用性に寄与する他の特徴によって、個別のエンクロージャに含まれる。しかし、各シェルフの追加は、ディスクアレイコントローラ802内のFCコントローラおよびFCポートの数を増大させる。また、各個別のFCアービトレイテッドループは、FCアービトレイテッドループの中に含まれるFCノードの累積的なノード遅延を被ることも留意されたい。
本発明の実施形態は、RAIDコントローラにおいて用いられるI/Oコントローラを含む種々の複雑な電子デバイスにおける効率的な待ち行列管理を提供する。ストレージシェルフルータ、PCIe/SAS I/Oコントローラおよびストレージブリッジをはじめとする種々の複雑な電子デバイスは最初に、以下に記載され、本発明の効率的な待ち行列管理技術は、RAIDコントローラとI/Oコントローラとの間で共有される待ち行列を参照して説明される。
<概要>
図9は、図8A〜図8Dに関して利用された説明の規則を用いて、本発明の一実施形態を表すストレージシェルフルータを抽象的に示している。図9において、ディスクアレイコントローラ902は、LANまたは光ファイバ通信媒体904を介して1つまたは複数の遠隔コンピュータシステムに連結される。ディスクアレイコントローラ902は、FCアービトレイテッドループ908を介してストレージシェルフルータ906と相互接続される。ストレージシェルフルータ906は、相互接続918などの個別のポイントツーポイント相互接続を介して、ストレージシェルフ910〜917の中で、ディスクドライブのそれぞれと直接的に相互接続される。図9に抽象的に示された実装を図8A〜図8Dに示された実装と比較すると、図8A〜図8Dに示された実装によって識別された問題点が、ストレージシェルフルータに基づく実装によって対処されることが容易に明白である。第一に、図9に示された実装のFCアービトレイテッドループの中の唯一のノード遅延は、1つのFCアービトレイテッドループノードとして作用するストレージシェルフルータによって導入される。対照的に、図8Aに示されているように、各FC準拠のディスクドライブは、個別のノード遅延を導入し、FCアービトレイテッドループ814における累積的なノード遅延は、FCアービトレイテッドループによって相互接続されるFC準拠のディスクドライブの数に比例する。ストレージシェルフルータは、FCポートと、ストレージシェルフルータを個別のディスクドライブに連結する内部シリアル相互接続との間の、きわめてパラレルかつ効率的なデータ転送を容易にするように設計される。したがって、ストレージシェルフルータをFCアービトレイテッドループ908に相互接続する搭載されたFCコントローラによって導入される不可避のノード遅延以外のストレージシェルフルータによって導入される実質的な遅延および累積的な遅延はない。
図9に示された実装において利用されるFCアービトレイテッドループ908は、2つのノード、ディスクアレイコントローラおよびストレージシェルフルータのみを含む。各ストレージシェルフルータが、8個のディスクドライブをFCアービトレイテッドループと相互接続することができると仮定すると、1つのFCアービトレイテッドループは、125個のストレージシェルフルータをディスクアレイコントローラに相互接続するために用いられることができ、またはFCファブリック用に通常保存されるアドレスがストレージシェルフルータによって用いられる場合には、126個のストレージシェルフルータを相互接続するために用いられることができ、それにより、1つのFCアービトレイテッドループを介して8,000個以上の個別のディスクドライブをディスクアレイコントローラと相互接続する。上述したように、高可用性が必要でない場合には、16,000個以上の個別のディスクドライブが、1つのFCアービトレイテッドループを介してディスクアレイコントローラと相互接続されてもよい。対照的に、図8Cに示されているように、個別のFC準拠のディスクドライブのそれぞれが、個別のFCノードとして機能する場合には、125個のディスクドライブのみが1つのFCアービトレイテッドループを介してディスクアレイコントローラと相互接続されることができ、またはFCファブリック用に通常保存されるアドレスが、ディスクドライブのために用いられる場合には126個のディスクドライブが相互接続されることができる。
ディスクドライブは、複数の現在利用可能な内部相互接続技術のいずれかによって、ストレージシェルフルータ906に接続される。一実施形態において、SATA準拠の相互接続は、SATAディスクドライブをストレージシェルフルータと相互接続するために用いられる。ストレージシェルフルータは、ディスクアレイコントローラから受信された各FCPコマンドを、ストレージシェルフルータが適切なSATAディスクドライブに次に伝送する1つまたは複数の等価なATAインターフェイスコマンドに変換する論理回路を含む。図9に示されるストレージシェルフルータは、1つの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ファブリック」および「Yループ」または「Yファブリック」と呼び、内部FC1020における内部で生成され、内部で消費される管理FCフレームのエクスチェンジを「Sファブリック」と呼ぶことが一般的である。ストレージシェルフ1010は、4つのディスクドライブ1022〜1025および明確に図示されていない12個のディスクドライブを示す省略記号1026によって、図10に表される16個のSATAディスクドライブを含む。各ストレージシェルフルータ1014および1018は、シリアルリンク1028などのポイントツーポイントシリアルリンクを介して、各SATAディスクドライブと相互接続される。
図10に示されているように、ディスクアレイコントローラ1006およびストレージシェルフ1010を含むディスクアレイの中の相互通信経路のそれぞれにおいて、少なくとも2倍の冗長性がある。さらに、ストレージシェルフルータにおいて2倍の冗長性がある。任意の1つのリンクまたは1つのストレージシェルフルータが故障した場合には、ディスクアレイコントローラ1006とストレージシェルフ1010内の16個のSATAディスクドライブのそれぞれとの間の完全な接続性を維持するために、残りのリンクおよび残りのストレージシェルフルータが、故障したリンクまたは故障したストレージシェルフルータによって既に担われた作業負荷を担うことができる。SATAディスクドライブのうちの1つまたは複数の故障にもかかわらず、復旧および完全な動作を可能にするために、ディスクアレイコントローラはその上、種々のレベルのRAIDストレージ技術などの複数の異なる高可用性のデータストレージスキームのいずれかを実装してもよい。RAID技術は、たとえば、2つ以上のディスクドライブ上に格納されたデータの2つ以上の完全なコピーを個別かつ完全に冗長に復元してもよい。サーバは、FCファブリックなどの通信媒体を介して、本質的な冗長性およびフェイルオーバを備えたディスクアレイコントローラ1006およびストレージシェルフ1010などの1つまたは複数のストレージシェルフを含むディスクアレイと相互通信する。ディスクアレイコントローラは、論理単位(「LUN」)および論理ブロックアドレス(「LBA」)インターフェイスを提示し、サーバコンピュータ1002および1004が、ストレージシェルフにおけるディスクドライブの中のデータの実際の位置を意識することなく、かつ、ディスクアレイコントローラ1006によって提供されるデータおよび他の機能性および特徴の冗長なコピーを意識することなく、ディスクアレイからファイルおよび他のデータオブジェクトを格納して検索することを可能にする。ディスクアレイコントローラ1006は次に、ストレージシェルフルータ1014および1018によって提供されるインターフェイスを介して、ストレージシェルフ1010とインターフェイスをとる。ディスクアレイコントローラ1006は、FCPプロトコルを介して別個のFC準拠のディスクドライブに見えるものにFCエクスチェンジを伝送し、そこからFCエクスチェンジを受信する。しかし、ディスクアレイコントローラに対して透過的に、SATAディスクドライブとコマンドおよびデータを交換するために、ディスクシェルフルータ1014および1018は、FCコマンドをATAコマンドに変換する。
図11および図12は、本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。図11において、2つのストレージシェルフルータ1102および1104は、SATAディスクドライブ1108などの16個のSATAディスクドライブを用いて、パッシブ中央平面1106を介してルータカード相互接続上に取り付けられる。各SATAディスクドライブキャリアは、パッシブ中央平面を通って2つのストレージシェルフルータ1102および1104のそれぞれまで延びる2つの個別のシリアルリンクと、SATAディスクドライブとを相互接続する、SATAディスクドライブおよびパスコントローラカード1110と、を含む。通常は、SATAディスクドライブは、外部システムへの1つのシリアル接続のみをサポートする。ストレージシェルフの中で完全に冗長な相互接続を提供するために、パスコントローラカード1110が必要とされる。ストレージシェルフ1100はその上、冗長なファン1112および1114および冗長な電源1116および1118を含む。
図12は、それぞれが2つのパスコントローラカード1110および2つのSATAディスクドライブを含むデュアルSATAディスクドライブキャリアを備えた、図11に示されるものと類似のストレージシェルフ実装を示す。高可用性用途のために必要とされる2倍の冗長性を提供するために、ディスクドライブの数が増大すると、ストレージシェルフルータを対応して倍増することが必要である。
<ストレージシェルフ内部トポロジ(構成)>
図13A〜図13Cは、本発明の一実施形態を部分的に表すストレージシェルフルータを用いたストレージシェルフの3つの異なる実装を示している。図13Aにおいて、1つのストレージシェルフルータ1302が、FCアービトレイテッドループ1320を介して16個のSATAディスクドライブ1304〜1319をディスクアレイコントローラと相互接続する。一実施形態において、ストレージシェルフルータは、最大16個のシリアルリンクを提供し、16個までのSATAディスクドライブの相互接続をサポートすることができる。図13Aに示されるストレージシェルフは、1つまたは複数のルータと各SATAディスクドライブとの間に、冗長なストレージシェルフルータも冗長なシリアルリンクも含まないために、あまり高い可用性はない。
対照的に、図13Bに示されるストレージシェルフの実装は、きわめて高い可用性がある。このストレージシェルフにおいて、2つのストレージシェルフルータ1322および1324は、ポイントツーポイントシリアルリンクを介して、16個のSATAディスクドライブ1326〜1341のそれぞれに連結される。正常動作中、ストレージシェルフルータ1322は、SATAディスクドライブ1326〜1333の半分をディスクアレイコントローラに相互接続し、ストレージシェルフルータ1324は、SATAディスクドライブ1334〜1341の他方の半分をディスクアレイコントローラに相互接続する。正常動作中に利用される内部ポイントツーポイントシリアルリンクが、シリアルリンク1342などのように図13Bにおいて太線で示されており、「一次リンク」と呼ばれる。内部シリアルリンク1344などの正常動作中に用いられない内部シリアルリンクは、「二次リンク」と呼ばれる。一次リンクが、動作中に故障した場合には、故障した一次リンクが接続されるストレージシェルフルータの交換をはじめとする故障した一次リンクの修理または交換を可能にするために、故障した一次リンクと、ストレージシェルフルータに接続される他のすべての一次リンクは、故障した一次リンクが他のストレージシェルフルータに接続されるストレージシェルフルータからフェイルオーバされてもよい。上述のように、2つのストレージシェルフルータのそれぞれは、ディスクアレイコントローラとストレージシェルフを相互接続する2つのFCアービトレイテッドループのうちの一方のためのFCノードとして機能する。一方のFCアービトレイテッドループが故障する場合には、故障したFCアービトレイテッドループを通常通過するデータ転送は、残りの動作可能なFCアービトレイテッドループにフェイルオーバされる。同様に、ストレージシェルフルータが故障した場合には、他のストレージシェルフルータが、ストレージシェルフの完全な動作制御を担うことができる。別の実施形態において、一次パス故障が、全体のストレージシェルフルータをフェイルオーバすることなく、個別にフェイルオーバされてもよい。ある実施形態および状況において、一次パスのフェイルオーバは、ストレージシェルフルータの中で行われてもよく、他の実施形態および状況において、一次パスのフェイルオーバは、一次パスを第2のストレージシェルフルータにフェイルオーバする必要があってもよい。
図13Cは、32ATAディスク高可用性ストレージシェルフの実装を示している。図13Cに示されているように、32ATAディスクストレージシェルフは、4つのストレージシェルフルータ1350、1352、1354および1356を含む。各ストレージシェルフルータは、正常動作中、ストレージシェルフをディスクアレイコントローラと相互接続する2つのFCアービトレイテッドループと8個のSATAディスクを相互接続する。各ストレージシェルフルータは、二次リンクを介して8個のさらなるSATAディスクドライブに相互接続され、フェイルオーバが必要である場合には、ストレージシェルフルータが、合わせて16個のSATAディスクドライブを2つのFCアービトレイテッドループと相互接続することができる。4ストレージシェルフルータ設定において、ストレージシェルフルータ1350が、1つの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フレームは、正常動作の場合には、一次リンクを介してストレージシェルフルータ1350と相互接続されるSATAディスクに向けられるか、または内部FCリンク1358を介してストレージシェルフルータ1352に向けられかのいずれかであり、次にFCフレームを一次リンクを介してSATAディスクに伝送される1つまたは複数のATAコマンドに変換するか、またはFCフレームをストレージシェルフルータ1354の下流に転送する。応答FCフレームが、Xファブリックを介してストレージシェルフルータ1356によって伝送される場合には、内部FCリンク1360、1362および1358を通り、ストレージシェルフルータ1354および1352を介して、そこから応答フレームが外部Xファブリックに伝送されることができるストレージシェルフルータ1350に転送されなければならない。記載された実施形態において、高可用性ストレージシェルフは、少なくとも2つのストレージシェルフルータを含む必要があり、ストレージシェルフの中の8個のSATAディスクの各集合に関してストレージシェルフルータを含む必要がある。
<パスコントローラカードの概要>
上述のように、2つの構成要素が、SATAディスクまたは他の廉価なディスクドライブを利用し、FCアービトレイテッドループにおける唯一のスロットまたはノードを用いて、FCアービトレイテッドループまたは他の高帯域幅通信媒体と相互接続されることができる高可用性ストレージシェルフの構成を容易にする。一方の構成要素は、ストレージシェルフルータであり、他方の構成要素は、2つのストレージシェルフルータへのATAドライブの冗長な相互接続を提供するパスコントローラカードである。
図14A〜図14Bは、ATAディスクドライブを2つのストレージシェルフルータと相互接続するために適切なパス制御カードの2つの実装を示す。図14Aに示される実装は、パラレルコネクタをパラレルATAディスクドライブに提供し、図14Bに示される実装は、シリアル接続をSATAディスクドライブに提供する。上述のように、SATAディスクドライブは、より高いデータ転送速度を提供するため、図14Bに示される実装が好ましく、この実装について、以下で説明する。
パスコントローラカードは、第1のストレージシェルフルータへの一次シリアルリンク1404および管理リンク1406の外部接続、および第2のストレージシェルフルータへの二次シリアルリンク1408および第2の管理リンク1410の外部接続のために、SCA−2コネクタ1402を提供する。一次リンクおよび二次リンクは、シリアルリンク1414を介してSATAディスクドライブ1416に相互接続される2:1マルチプレクサによって多重化される。管理リンク1406および1410は、ディスクドライブ環境の温度を監視し、ディスクドライブキャリア内のファンの動作を制御し、ディスクドライブエンクロージャの外部から見ることができる種々の発光ダイオード(「LED」)信号の光を起動するルーチンなどの管理サービスルーチンを実行するマイクロコントローラ1418に入力される。本質的に、正常動作の下で、ATAコマンドおよびデータは、一次リンクを介してパスコントローラカードによって受信され、2:1マルチプレクサを介して、SATAディスクドライブ1416に入力されるシリアルリンク1414に転送される。一次リンクを介してパスコントローラカードに接続されるデフォルトのストレージシェルフルータの動作を停止するフェイルオーバが、ストレージシェルフの中で生じる場合には、第2のストレージシェルフルータが、二次リンクを介して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は、FCPエクスチェンジを共に構成するFCフレームの交換を容易にするために、メモリにおけるFCエクスチェンジコンテクストを設定するために、FCフレームおよび中間レベルプロトコルメッセージの一時的格納のための種々の待ち行列と、種々のタイプの入ってくるFCフレームと出て行くFCフレームを処理するための制御論理回路と、CPUコンプレックスで実行中のファームウェアルーチンがFCP_CMNDフレームを処理することを可能にするCPUコンプレックス1512へのインターフェイスと、を含む。
グローバル共有メモリスイッチ1510は、FCP層待ち行列とSATAポート1512〜1518との間でデータを通過させるためのきわめて高速の時分割データ交換機器である。グローバル共有メモリスイッチ(「GSMS」)1510は、仮想待ち行列の割り当てが、FCP層と特定のSATAポートとの間にデータの転送を容易にすることを可能にするために、仮想待ち行列機構を利用する。GSMSは、本質的にきわめて高い帯域幅で、高速の双方向マルチプレクサであり、FCP層と16個のSATAポートとの間のきわめてパラレルなデータ流れを促進すると同時に、FCP層とSATAポートとの間の同期境界の横断を促進するための同期機構を含むブリッジ状のデバイスである。
CPUコンプレックス1512は、種々のファームウェアルーチンを実行する。種々のファームウェアルーチンは、FCエクスチェンジ用のコンテクスト情報を初期化して維持し、FCPコマンドをATAの等価コマンドに変換するために、FCPコマンドを処理し、SATAディスクドライブおよびストレージシェルフルータの内部構成要素の動作も監視し、問題点が検出されるときには、精巧なフェイルオーバ戦略を実行する。フェイルオーバ戦略を実行するために、CPUコンプレックスは、ストレージシェルフルータの他の論理構成要素と相互接続される。外部フラッシュメモリ1514は、設定パラメータおよびファームウェアルーチンを格納する。ストレージシェルフルータは、2つのFCポート1502および1504、16個のSATAポート1512〜1518、16個のシリアル管理リンク1520、I2C BUS1522およびコンソール1524へのリンクを介して、外部構成要素に相互接続されることに留意されたい。
<ストレージシェルフインターフェイス>
上述のように、ストレージシェルフルータに基づくストレージシェルフ実装は、多くの方式で現在のディスクドライブごとのFCノードの実装より大きな自由度を提供する。ストレージシェルフルータは、接続されるディスクアレイコントローラに対して多くの異なる論理インターフェイスのいずれかを提供することができる。
図16A〜図16Gは、本発明の一実施形態を部分的に表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される、複数の異なる論理インターフェイスを示す。図16Aは、図8A〜図8Dを参照して上述したように、ストレージシェルフの現在のFC準拠のディスクドライブ実装によって提供されるインターフェイスを示す。図16Aは、図16A〜図16Gを通じて用いられる抽象的な説明の規則を用いる。図16Aにおいて、各ディスクドライブ1602〜1605は、0〜19の番号の付いた一連のデータブロックとして論理的に表されている。当然のことながら、実際のディスクドライブは、数十万〜数百万の論理ブロックを含むが、種々の異なるタイプのインターフェイスを示すためには、図16Aには各ディスクに関して示される20個の論理ブロックで十分である。図16Aにおいて、各個別のディスクドライブ1602〜1605は、FCアービトレイテッドループにおける別個のノードであり、したがって、各ディスクドライブは、「AL_PA1」、「AL_PA2」、「AL_PA3」および「AL_PA4」としてそれぞれ図16Aに表される個別のFCノードアドレスに関連している。しかし、図8A〜図8Dを参照して説明したFCアービトレイテッドループなどの現在のFCアービトレイテッドループディスクアレイ実装とは異なり、図9に示されているように、各ノードがポイントツーポイント接続を介して、ストレージシェルフルータの相補SATAポートと相互接続されるため、ノードに関連する累積的なノード遅延はないことに留意されたい。したがって、ディスクアレイコントローラは、ディスクドライブに関連するFCアドレスを介して特定のディスクドライブの中の特定の論理ブロックにアクセスしてもよい。所与のディスクドライブが、一定の場合において、論理ブロックアドレス空間が、それぞれが、異なるLUNに関連する個別の論理ブロックアドレス空間に区分けされる論理単位(「LUN」)インターフェイスを提供してもよい。しかし、現在の説明のために、複雑なレベルには対応する必要はない。
図16Bは、ストレージシェルフルータを介してFCアービトレイテッドループに相互接続される図16Aに示される4つのディスクドライブを含む、ストレージシェルフ用の第1の可能なインターフェイスを示す。この第1のインターフェイスにおいて、各ディスクドライブは、個別のFCノードアドレスに依然として関連している。各ディスクドライブは、1つの論理ブロックアドレス空間を含む1つの論理単位であると見なされる。このインターフェイスは、以下では、本発明の一実施形態を部分的に表す1つまたは複数のストレージシェルフルータを含むストレージシェルフの「トランスペアレントモード」動作と呼ばれる。
ストレージシェルフによって提供される第2の可能なインターフェイスが、図16Cに示される。この場合には、4つのディスクドライブのすべてが、1つのFCアービトレイテッドループノードアドレス「AL_PA1」に関連している。各ディスクドライブは、異なる論理単位であると見なされ、ディスクドライブ1602は、論理単位0と見なされ、ディスクドライブ1603は、論理単位1と見なされ、ディスクドライブ1604は、論理単位2と見なされ、ディスクドライブ1605は、論理単位3と見なされる。したがって、ディスクアレイコントローラは、1つのFCノードアドレス、論理単位番号および論理単位内の論理ブロックアドレスを介して、ストレージシェルフにおける4つのディスクドライブのいずれかの中の論理ブロックにアクセスすることができる。
仮説的ストレージシェルフの中の4つのディスクドライブに対する別のインターフェイスが、図16Dに示される。この場合には、4つのディスクドライブのすべてが、1つの論理単位内に含まれると見なされる。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つのディスクドライブは両方とも、1つの論理単位に属すると見なされ、2つのディスクドライブの中の論理ブロックは、1つの論理ブロックアドレス空間を構成する論理ブロックアドレスに関連している。
最後のインターフェイスは、図16Gに示される。この場合には、前の2つのインターフェイスの場合と同じように、1つのFCノードアドレスに関連するディスクドライブの各対が、1つの論理ブロックアドレス空間で1つのLUNを構成すると見なされる。しかし、このインターフェイスで、論理ブロックアドレスは、2つのディスクドライブの間で交互となる。たとえば、ディスクドライブ1602および1603の対の場合には、論理ブロックアドレス0は、第1の論理ブロック1610および第1のディスクドライブ1602に関連し、論理ブロックアドレス1は、第2のディスクドライブ1603における第1のブロック1612に関連する。
図16A〜図16Gは、本発明の一実施形態を部分的に表すストレージシェルフルータによってディスクアレイコントローラに提供される多くの可能なインターフェイスの一部を示すことだけを意図している。アルゴリズムによって記載されることができるディスクドライブおよびディスクドライブの中の物理ブロックへのLUNおよび論理ブロックアドレスのほとんどのマッピングは、ストレージシェルフの中のストレージシェルフルータによって実装されることができる。一般に、これらの多くの異なるタイプの論理インターフェイスは、以下の4つの一般的なタイプのインターフェイスに区分けされてもよい。(1)各ディスクドライブが、個別かつ局所的に一意のFCノードアドレスに関連するトランスペアレントモード、(2)各ディスクドライブが、異なるLUN番号に関連し、すべてのディスクドライブが、1つのFCノードアドレスを介してアクセスされる純粋LUNモード、(3)すべてのディスクドライブが、1つのFCノードアドレスおよび1つの論理単位番号に関連する純粋論理ブロックアドレシングモード、(4)LUNおよび論理ブロックアドレス空間の区分けの種々の異なる組み合わせを利用する混合LUNおよび論理ブロックアドレシングモードである。
<ストレージシェルフルータ実装>
図17Aは、本発明の一実施形態を表すストレージシェルフルータの中のコマンドおよびデータの流れの高位の概要である。ストレージシェルフルータは、1つまたは複数のFCアービトレイテッドループまたは他のFCファブリック1702〜1703を介して、データおよびコマンドのシリアルストリームを他のストレージシェルフルータおよびディスクアレイコントローラと交換する。データのシリアルストリームは、より低位のFCプロトコルレベルで処理される場合には、FCポート層1704に入る。データストリームから抽出されたFCフレームは、先入れ先出しバッファ(「FIFO」)1706〜1707に入力される。FCフレームの最初の部分は利用可能であるとき、FCフレームの後半部分がFIFOに入力されたとしても、ルーティング層1708およびFCP層1710によって処理される。したがって、FCフレームは、バッファで完全にアセンブルして、内部メモリバッファから内部メモリバッファにコピーされる必要なく、著しい時間および計算効率で処理される。
ルーティング層1708は、FCフレームヘッダから、FCフレームがストレージルータまたは遠隔ストレージルータ、またはFCアービトレイテッドループまたは他のFCファブリックによってストレージルータと相互接続される他のエンティティに向けられるかどうかを決定する役割を担っている。遠隔エンティティに向けられるそれらのフレームは、ルーティング層によって、FCアービトレイテッドループまたは他のFCファブリックを介する遠隔エンティティへの伝送のために、FCポート層の中のFIFO1712〜1713に出力されるように向けられる。状態機械がストレージシェルフルータの中のそれらの配置を制御する場合には、ストレージルータに向けられるフレームは、ルーティング層によってFCP層に向けられる。
現在アクティブであるFCエクスチェンジに関連し、コンテクストがストレージシェルフルータによって確立されたFCP−DATAフレームは、きわめて能率的かつ効率的な態様で処理される。これらのフレームからのデータは、FCP層によってGSMS1718の中の仮想待ち行列1714〜1716に向けられ、そこからデータがSATAポート層1722の中の入力バッファ1720に転送される。SATAポート層から、データは、多くのSATAリンク1724の1つを介して、ストレージシェルフルータと相互接続される複数のSATAディスクドライブ1726の1つにATAパケットで伝送される。
FCP−CMNDフレームは、異なる方式でFCP層によって処理される。これらのフレームは、FCP層によって、FCP層とストレージシェルフルータの中のCPUとの間で共有されるメモリ1728に転送される。CPUは、その中に含まれるコマンドを処理するために、フレームにアクセスする。たとえば、入ってくるWRITEコマンドが受信されると、ファームウェアルーチンの制御の下で、ストレージシェルフルータのCPUは、コマンドが向けられてWRITE動作のために、共有メモリに格納されるコンテクストを確立するSATAドライブを決定する必要がある。CPUは、SATAドライブがデータを受信して、FCP−XFER−RDYフレームの伝送を一般にディスクアレイコントローラであるイニシエータに戻すように向ける準備をする必要がある。CPUによって準備され、共有メモリに格納されるコンテクストにより、FCP層が、CPUを介在することなく、次に入ってくるFCP−DATAメッセージを処理することを可能にし、WRITE動作の能率的な実行を可能にする。
ストレージシェルフルータの中の種々の論理層は一般に、対称に逆方向に機能する。ATAコマンドに対する応答は、SATAリンクを介してSATAディスクドライブからSATAポート層1722によって受信される。SATAポート層は次に、適切な信号およびメッセージを生成し、ファームウェアの制御下で、CPUまたはFCP層が、適切な行為および応答を実行することを可能にする。READコマンドに応じて、SATAディスクから遠隔エンティティにデータが転送されるとき、CPUは、FCP層による処理のために、共有メモリに格納される適切な待ち行列エントリを生成する。FCP層内の状態機械が、共有メモリからFCフレームヘッダテンプレートを獲得し、仮想待ち行列1732〜1733を介してSATAポート層における出力バッファ1730からのデータ転送のために配置し、FCフレームヘッダを準備し、SATAポート層から受信されたFCフレームヘッダおよびデータの転送を調節して、一般にディスクアレイコントローラである要求中の遠隔エンティティへの伝送のために、FCポート層のFIFO1712および1713に出力する。
図17Aは、ストレージシェルフルータの中のデータおよび制御の流れの簡素化した概要を提供することを意図している。ストレージシェルフルータの内部構成要素を正確に表現することを意図しているわけではなく、FCP−CMNDフレームおよびFCP−DATAフレームの受信および処理に対して、論理層の間の相互関係を示すことを意図している。たとえば、複数の仮想待ち行列は、GSMS層の中に図17Aで示される。しかし、仮想待ち行列は一般に、静的エンティティではなく、必要に応じて、ストレージシェルフルータの現在の状態に基づいて動的に割り当てられる。図17Aは、1つのSATAシリアル接続1724およびSATAディスクドライブ1726のみを示しているが、上述のように、各ストレージルータは、一実施形態において、16個の異なるSATAディスクドライブに接続されてもよい。
図17B〜図17Fは、本発明の一実施形態を表すストレージシェルフルータによるデータおよび制御情報の流れについてさらなる詳細を提供する。図17B〜図17Fに記載するとき、簡略化するため、同一の構成要素の種々の対の両方の構成要素を特に参照するわけではない。図面は、構成要素の完全に例示するリストではなく、データおよび制御情報がストレージシェルフルータの種々の構成要素によってどのように移動するかを示すことを意図している。さらに、種々の構成要素の数は、ストレージシェルフルータの種々の異なる実装に応じて、変化してもよい。図17Bは、ストレージシェルフルータの中のFCP−DATAフレームの最初の流れを示す。FCP−DATAフレームは、第一にFCポート1736によって受信され、入力FIFO1737に書き込まれ、FCP−DATAフレームの残りが依然として入力FIFOに書き込まれている間であっても、十分なヘッダ情報が入力FIFOにおいて利用可能になるとすぐに、そこからルータ論理回路1738による処理が開始されてもよい。FCポートが、ルータ論理回路への新たなフレーム到着の信号を発し、ルータ論理回路によるフレームの処理開始を可能にする。ルータ論理回路1738は、ルーティングテーブル1739を利用して、フレームがストレージシェルフルータに向けられているかどうか、またはフレームが遠隔エンティティに向けられているかどうかを決定する。FCP−DATAフレームが、遠隔エンティティに向けられている場合には、遠隔エンティティへの伝送のために、フレームは、ルータ論理回路によってFCポートに向けられる。ルータはまた、コンテクスト論理回路1740とインターフェイスをとり、コンテクストが、FCP−DATAフレームが属するFCエクスチェンジのためにCPUによって共有メモリにおいて作成されて格納されているかどうかを決定する。フレーム用のコンテクストを見つけることができる場合には、ルータ論理回路は、フレームをFCPインバウンドシーケンスマネジャ(「FISM」)状態機械1741に向ける。コンテクストが見つからない場合には、フレームは、共有メモリに向けられ、そこから続いて、ファームウェア制御の下で、CPUによって誤って受信されたフレームとして抽出されて処理される。
FISM1741は、FCPデータムーバ論理モジュール(「FDM」)1742からGSMSチャネルを要求し、FCPデータムーバ論理モジュール1742は次に、GSM1744の中の仮想待ち行列(「VQ」)1743にアクセスして、FISMを介してコンテクスト論理回路からVQを特徴付けるパラメータを受信する。FDMは次に、フレーム内に含まれるデータをVQに書き込み、そこからSATAディスクドライブへの伝送のために、FDMを用いてVQへのアクセスを共有するSATAポートによってそのデータが引き出される。一旦、データがVQに書き込まれると、FDMは、データが転送されたことをコンテクストマネジャに信号発信し、コンテクストマネジャを次に、終了待ち行列マネジャ(「CQM」)1745が共有メモリ1747内の待ち行列1746を終了するために、終了メッセージ(「CMSG」)の待ち行列に入れることを要求する。CQMは次に、CPUデータムーバ(「CPUDM」)1748がCMSGを共有メモリに書き込むことを要求する。
図17Cは、ストレージシェルフルータの中のFC−CMNDフレームおよびエラーに関連するフレームの流れを示す。上述のように、フレームは、FCポート1736によって受信され、ルーティングテーブル1739を参照して、ルータ論理回路1738によって、ストレージシェルフルータの中の種々のターゲット構成要素に向けられる。FC−CMNDフレームおよびエラーで受信されたFCフレームは、CPUによる抽出および処理のために、共有メモリ1747に経路指定される。ルーティング論理回路1738は、フレームバッファ待ち行列マネジャ(「FBQM」)1746用の要求を発行して、フレームを共有メモリ1747に書き込む。FBQMは、CPUDM1748から共有メモリ1750に格納されたバッファポインタを受信し、フレームを共有メモリ1747内のフレームバッファ1749に書き込む。最後に、ルータは、CQM1745にCMSGをCQ1746に書き込むように要求する。CPUは最終的には、フレームバッファ1749に格納されたフレームにアクセスするために、CMSG中に含まれる情報を用いて、CMSGを処理する。
図17Dは、1つのFCポートから別のFCポートへのFCフレームの流れを示す。ルータ論理回路1736が、第1のFCポート1736の中の入力FIFO1737を介して受信されたフレームがストレージルータに向けられないが、代わりに、遠隔エンティティに向けられると決定する場合には、ルータ論理回路は、フレームを第2のFCポート1752内の出力FIFO1751に書き込み、フレームを遠隔エンティティに伝送する。
図17Eは、ストレージシェルフルータ内のCPUからFCアービトレイテッドループまたは他のFCファブリックへのデータおよび制御情報の流れを示す。CPUは、ファームウェア制御の下で、共有メモリ1747の中に共有メモリ待ち行列SRQの中のエントリを格納し、SRQに関連するSRQプロデューサインデックスを更新して、CPUがFCアービトレイテッドループまたは他のFCファブリックへの伝送のために作成したフレームを記述するSRQエントリの存在(「SRE」)を表す。SRQマネジャモジュール(「SRQM」)1755は、SRQプロデューサインデックスの更新を検出し、CPUDM1748を介して共有メモリ1747から次のSREをフェッチする。SRQMは、フェッチされたSREをSRQアービトレーションモジュール(「SRQ_ARB」)1756に渡し、総当たりスキームなどの仲裁スキームを実装して、複数のCPUによって生成され、複数のSRQに格納されたSREの処理を確実にする。SRQ_ARBは、そこから次のSREを受信するために、SRQMを選択し、SREをFCPアウトバウンドシーケンスマネジャ(「FOSM」)状態機械l757に渡す。FOSMは、SREを処理して、CPUDM1748を介して共有メモリ1747からFCヘッダテンプレートおよびフレームペイロードをフェッチする。FOSMは、共有メモリからCPUDMを介してFCヘッダテンプレートおよびフレームペイロードを用いてFCフレームを構成し、FCポート1736における出力FIFO1758にそれを書き込み、そこからFCアービトレイテッドループまたは他のFCファブリックに伝送される。フレームがFCポートに転送されたとき、FOSMは、CMSGを共有メモリに書き込むように、CQM1745を向ける。
図17Fは、GSMSおよび共有メモリからFCアービトレイテッドループまたは他のFCファブリックへのデータおよび制御情報の流れを示す。このプロセスにおけるステップの多くは、図17Eを参照して記載したものと類似であり、簡略化するため、再び記載しない。一般に、FCフレームヘッダの中に格納されたFCP−DATAフレームの制御部分は、図17Eを参照して記載した任意の他のタイプのフレームの生成と類似の方式で生成される。しかし、FCP−DATAフレームの場合には、プロセスは、SATAポートからGSMSを介して得られたデータを制御情報と組み合わせるために、段階的に行われる必要がある。FOSM1757がFCP−DATAフレームを記述するSREを受信すると、FOSMは、FCP−DATAフレームヘッダを構成し、GSMSチャネルを介してFDM1742を通ってフレームに組み込まれるデータを要求し、次に、GSMS1744の中のVQ1759を介してデータを得なければならない。一旦、データおよび制御情報が、FOSMによってFCP−DATAフレームに組み込まれると、前述のように、フレームは次に、FCポートに渡され、CMSGメッセージが、CQへの待ち行列に入れられる。
図18は、本発明の一実施形態を表すストレージシェルフルータの論理構成要素のさらに詳細なブロック図を示す。論理構成要素は、図16および図17に関して上述した2つのFCポート1802および1804、ルーティング層1806、FCP層1808、GSMS1810、SATAポート層1812、2つのCPU1814および1816を含むCPUコンプレックスを含む。太線の矢印1818などの太線の矢印で図18に示される通信経路およびリンクは、ストレージシェルフルータの中の性能臨界通信経路を表す。性能臨界通信経路は、FCフレームの受信および出力、SATAポートによってSATAディスクドライブへの伝送のための適切なATAコマンドを生成するための受信フレームの処理、受信されたFCP−DATAフレームからのデータのGSMSを通ったSATAポートへの送り込み、FCポートを通ってFCアービトレイテッドループまたは他のFCファブリックへの伝送するためのFCフレームの生成、GSMSを通ってSATAポートから得られたデータの出て行くFCP−DATAフレームへの組み込みに関連する経路である。非性能臨界通信経路は、ストレージシェルフルータの種々の論理構成要素と直接的にCPU1814および1816を相互接続する種々のプログラムされたI/Oインターフェイスを含む。たとえば、中心仲裁スイッチ1820とGSMS SLポート層との間にはPIOインターフェイスがあり、内部BUSブリッジ1822は次に、17個のUARTポート1824、I2C BUSインターフェイス1826、汎用PIOインターフェイス(「GPIO」)1828、タイマ構成要素1830および複数の割り込みコントローラ1832と相互接続される。これらのPIOインターフェイスは、太線でない両方向矢印1834〜1836として図18に示される。さらに、CPU1814および1816とフラッシュメモリコントローラ1840との間にPIOインターフェイス1838がある。フラッシュメモリコントローラ1840は次に、外部フラッシュメモリ1842に対してインターフェイスをとる。外部フラッシュメモリは、特殊な設定管理情報およびファームウェア画像を格納するために用いられる。CPUは、別のPIOインターフェイス1844によって、内部SRAMコントローラ1846に接続され、内部SRAMコントローラ1846は次に、ストレージシェルフルータの中およびストレージシェルフルータ間のフェイルオーバを向けるために、ファームウェアルーチンをはじめとする非性能経路コードおよびデータを格納するSRAMメモリ1848とインターフェイスをとる。CPU1814および1816は、プロセッサデータ空間用にも用いられる2つのデータ密結合メモリ1850および1852に含まれる共有メモリ待ち行列を介して、FCP層1808およびSATAポート層1812と相互接続される。各CPUはまた、ファームウェア命令1854および1856を格納する個別のメモリと相互接続される。最後に、両方のCPUは、1つのPIOチャネル1858を介して両方のFCポート1802および1804、ルーティング層1806およびFCP層1808に接続される。
図19は、FCポート層のさらに詳細な図を示す。FCポート層は、2つのFCポート1902および1904を備え、そのそれぞれが、入力FIFO1906および1908および2つの出力FIFO1910〜1911および1912〜1913を含む。FCポートは、物理およびリンク層論理回路1914〜1917を含む、FCアービトレイテッドループまたは他のFCファブリックから入ってくるシリアルデータを入力FIFOに供給されるFCフレームに共に変換し、出力FIFOに書き込まれた出て行くFCフレームをFCアービトレイテッドループに伝送されるシリアルデータに変換する。
図20は、ルーティング層のさらに詳細なブロック図である。図20に示されているように、ルーティング層2002は、FCポートのそれぞれを扱うための個別のルーティング論理回路2004および2006を含む。ルーティング層はまた、入ってくるFCフレームを適切な待ち行列に経路指定するために必要な経路指定決定を容易にするために、メモリに格納されたルーティングテーブル2008を含む。FCデータフレームは、上述したように、FDM2011を介してFlSM2010および2012の制御下で、ルータによってGSMS層2015に比較的直接的に経路指定されることができることに留意されたい。ファームウェア処理を必要とするフレームは、CPUDM2017および2018を介してFBQM2014および2016の制御下で、ルーティング層によって入力待ち行列に経路指定される。
図21は、FCP層のさらに詳細なブロック図である。図21に示されるこれらの内部構成要素の多くは、前述されているか、または次の段落でさらに詳細に記載される。一般に、一方では、2つのFCポート1902および1904を扱い、他方では、2つのCPU2102および2104を扱うために配置される、構成要素の複製集合があることに留意されたい。出て行くフレームを生成するために必要な情報は、ファームウェア制御の下でCPUによって生成され、それぞれが主に1つの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ポート層とGSMおよびFCP層の間で共有されるタスク、GSMSおよび個別のSATAポートを介したFCP層とのデータの交換である。
図23は、SATAポートのさらに詳細なブロック図を示す。SATAポートは、共にSATAインターフェイスを実装する物理層2302、リンク層2304およびトランスポート層2306を含む。トランスポート層は、入力バッファ2308および出力バッファ2310を含み、データ転送の一部および相互接続されたSATAディスクから来るATAメッセージ情報を格納し、GSMS層からのデータ転送の一部およびインターフェイスからCPUおよび共有メモリにそれぞれ供給されるATAコマンドを格納する。SATAポートに関するさらなる詳細は、他の段落に記載される。
<ストレージシェルフルータルーティング層>
図24は、4ストレージシェルフルータ高可用性ストレージシェルフの中のルーティングトポロジ(構成)の抽象表現を示す。この抽象表現は、以下の説明のための有用なモデルおよびテンプレートである。図24に示されているように、各ストレージシェルフルータ2402〜2405は、一次リンクを介してディスクドライブ2406などのn個のディスクドライブに接続される。上述のように、各ストレージシェルフルータは、二次リンクを介してn個のディスクドライブの隣接する集合に接続されるが、簡単にするため二次リンクは、図24に示されていない。1つのストレージシェルフルータ2402が、ファブリックX2408と呼ばれる第1のFCアービトレイテッドループまたは他のFCファブリックに対してストレージシェルフルータの全体的な集合のためのエンドポイントまたはFCノード接続点として機能する。異なるストレージシェルフルータ2405は、ファブリックYと呼ばれる第2のFCアービトレイテッドループまたは他のFCファブリック2410へのエンドポイントまたはFCノード接続点として機能する。各ストレージシェルフルータは、2つのFCポート、たとえば、ストレージシェルフルータ2402におけるXポート2412およびYポート2414などのXポートおよびYポートを含む。4つのストレージシェルフルータは、内部ポイントツーポイントFCリンク2416、2418および2420と相互接続される。たとえば、ストレージシェルフルータ2404のような任意の特定のストレージシェルフルータの場合には、ファブリックXから入ってくるFCフレームは、Xポート2422で受信され、ストレージシェルフルータ2404によってファブリックXに出力されるFCフレームは、Xポート2422を介して出力される。同様に、入ってくるFCフレームおよび出て行くFCフレームはそれぞれYファブリックから受信されて、Yファブリックに向けられ、FCポート2424にわたって入力および出力される。XおよびYファブリックへの特定のFCポートの割り当てが設定可能であり、以下の例示の実施例および実施例を参照する説明において、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つのストレージシェルフルータの中のXおよびY FCアービトレイテッドループ相互接続の抽象表現を示し、ディスクアレイの2ストレージシェルフ実装を示す。図25において、ディスクアレイコントローラ2502は、FCアービトレイテッドループX2504によって、各ストレージシェルフ2506および2508にリンクされ、FCアービトレイテッドループY2510によって両方のストレージシェルフ2506および2508にリンクされる。図25において、ストレージシェルフルータ2512は、ストレージシェルフ2506用のXファブリックエンドポイントとして機能し、ストレージシェルフルータ2514は、ストレージシェルフ2508用のXファブリックエンドポイントとして機能する。同様に、ストレージシェルフルータ2516は、ストレージシェルフ2506用のYファブリックエンドポイントとして機能し、ストレージシェルフルータ2518は、ストレージシェルフ2508用のYファブリックエンドポイントとして機能する。ディスクドライブ2518などの各個別のディスクドライブは、XおよびYの両方のアービトレイテッドループを介してディスクアレイコントローラ2502にアクセス可能である。両方のストレージシェルフにおいて、ストレージシェルフルータは、1つのポイントツーポイントFCリンク2520および2522を介して内部に相互接続され、相互接続は、XファブリックフレームおよびYファブリックフレームに加えて、内部で生成され内部で消費される管理フレームまたはSファブリックフレームを保持してもよい。ストレージシェルフ2506の中の内部ポイントツーポイントFCリンクは、S1ファブリックと呼ばれ、ストレージシェルフルータ2508の中の内部ポイントツーポイントFCリンクは、S2ファブリックと呼ばれる。本質的に、内部ポイントツーポイントFCリンクは、Xファブリック用のFCフレーム、Yファブリック用のFCフレームおよび内部管理フレームを保持するが、一旦、XファブリックフレームおよびYファブリックフレームが、エンドポイントストレージシェルフルータを通ってストレージシェルフルータに入ると、これらは消費されるか、またはエンドポイントストレージシェルフルータのFCポートを介してXファブリックまたはYファブリックにエクスポートされるまで、Sファブリックフレームと見なされる。
図26A〜図26Eは、本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、FCフレームを特定のストレージシェルフルータまたは遠隔エンティティに経路指定するために用いられるFCフレームヘッダの中のデータフィールドを示す。FCフレームヘッダについては、図3を参照して上述した。当然のことながら、FCヘッダは、フレームを、1つのFCノードを介してFCアービトレイテッドループまたは他のFCファブリックに対してインターフェイスを共にとるストレージシェルフルータと相互接続されるディスクドライブではなく、FCノードに向けるように設計される。したがって、ストレージシェルフの中のストレージシェルフルータへのFCフレームヘッダフィールドのマッピングおよびSATAディスクドライブの設定が、FCフレームの適切な方向のために必要とされる。FCフレームヘッダ2604における3バイトのD_IDフィールド2602は、FCノードのノードアドレスを表す。FCアービトレイテッドループの場合には、D_IDの最も高位の2バイトが一般に、非公共ループの場合には値「0」を有し、最も低位のバイトが、127個のノードのうちの1つを指定するアービトレイテッドループ物理アドレス(「AL_PA」)を含む。一般に、1つのノードアドレスが、ディスクアレイコントローラのために用いられ、別のノードアドレスが、ファブリックアービトレイテッドループアドレスのために保存される。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ファブリック管理フレームであることを示す。Sファブリックおよび外部ファブリックフレームが1つのFCポートを通ってストレージシェルフルータによって受信されてもよいことから、DF_CTLフィールドのビット18:19によって表されるこの方向インジケータまたは内部コンパスが必要とされる。上述したように、DF_CTLフィールドのビット18:19は、「Sビット」と総称的に呼ばれる。Sビットは、エンドポイントストレージシェルフルータによるXファブリックフレームまたはYファブリックフレームの受信時に設定され、エンドポイントストレージシェルフルータからXファブリックまたはYファブリックへのFCフレームのエクスポートの前にクリアされる。
図26Bは、FCP−CMNDフレームの経路指定を伴うFCフレームヘッダフィールドを示す。D_IDフィールド2610は、FCフレームを特定のFCノードに向けるが、上述のように、ストレージシェルフは、トランスペアレントモードで動作中である場合には、複数のFCノードを含んでもよく、トランスペアレントモードで動作中でない場合には、多数のデータストレージデバイスを含んでもよく、ここに1つのD_IDをすべて含むFCフレームが分散される必要がある。ストレージシェルフルータのルーティング論理回路は本質的に、D_ID、ストレージシェルフ、ストレージシェルフルータおよび最終的にはディスクドライブの間の種々のマッピングを扱うことに徹している。ルーティング論理回路は、D_IDフィールドのみの値からFCフレームがストレージシェルフルータに向けられているかどうかを決定することはできない。D_IDが、入ってくるFC−CMNDフレームをストレージシェルフルータに向けるかどうかを決定するためには、ルーティング論理回路は、以下で説明される内部のルーティングテーブル2612および複数のレジスタを調査して、D_IDがストレージシェルフルータによって管理されるディスクドライブのアドレスを表すかどうかを決定する必要がある。したがって、図26Bに示されているように、D_IDフィールドは、内部ルーティングテーブル2612に対して解釈されるときに、ストレージシェルフ2616の中の特定のストレージシェルフルータと、ストレージシェルフルータに相互接続される特定のディスクと、を指定する。さらに、ルーティング論理回路は、以下で説明される追加内部テーブル2614を調査し、S_IDフィールド2611によって指定されるFCフレームのソースが、ストレージシェルフルータによって現在ログインされている遠隔エンティティであるか、遠隔エンティティがアドレス指定されたディスクドライブと相互接続されるものとして識別されるかどうかを決定する。したがって、S_IDフィールドは、種々の内部テーブル2614に対して解釈されるとき、FC−CMNDフレームによって表されるコマンドが実行される必要があるかどうかを決定する認証スイッチ2620として作用する。
図26Cは、FCP−DATAフレームの経路指定を伴うFCフレームヘッダフィールドを示す。D_IDフィールド2610およびS_IDフィールド2611および内部テーブル2612および2614が、FCP−CMNDフレームの経路指定と共に、ストレージシェルフ2616の中の特定のストレージシェルフルータと、ストレージシェルフルータに相互接続される特定のディスクを指定し、ディスクへのデータの転送を認証する(2620)ために用いられる。しかし、FCP_DATAフレームは、マルチFCP_DATAフレームWRITEシーケンスの一部である可能性があるために、一旦、FC_DATAフレームがストレージシェルフルータに対して局所的なディスクに向けられることをルーティング論理回路が決定すると、FCフレームヘッダ2606のさらなるフィールドが、ストレージシェルフルータの中のFCP_DATAフレームを向けるために利用される。図26Cに示されているように、RX_IDフィールド2622は、WRITEコマンド用のコンテクスト2624を指定する、FCP_DATAフレームに関連するWRITEコマンドを指定したFCP_CMNDフレームの処理中にストレージシェルフルータによって最初に生成される値を含み、このコンテクスト2624は次に、データがGSMSを介してFCP層からSATAポート層に転送されることができる仮想待ち行列2626を指定する。さらに、FCフレームヘッダ2606のパラメータフィールド2628は、データ用の相対的なオフセットを含み、WRITEコマンドによって転送されるデータ2632の全体的なシーケンス長さの中のFCP_DATAフレームに含まれるデータの位置2630を表す。コンテクスト2624は、次のFCP_DATAフレームのための予想される相対的なオフセットを格納し、これは適正なシーケンシングのためにFCP_DATAフレームを調べるために用いられることができる。格納された予想される相対的なオフセットが、パラメータフィールドの値に適合する場合には、FCP_DATAフレームは、ばらばらの順で受信され、エラー処理を呼び出す必要がある。
図26Dは、内部で生成される管理フレームの経路指定を伴うFCフレームヘッダフィールドを示す。管理フレームの場合には、D_IDフィールド2610の最も低位のバイトは、ストレージシェルフの中の特定のストレージシェルフルータを指定するルータ番号を含む。D_IDフィールドに含まれるルータ番号は、以下で説明されるレジスタ2634に含まれる局所ルータ番号と比較され、管理フレームがストレージシェルフルータ、たとえばストレージシェルフルータ2636に向けられるかどうか、または管理フレームが、Xファブリックに関連するFCポート2638またはYファブリックに関連するFCポート2640によってアクセス可能であるストレージシェルフの中の別のストレージシェルフルータに向けられるかどうかを決定する。
最後に、図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によってアクセスされることができる。さらに、3つのレジスタSFAR2720、XFAR2722およびYFAR2724があり、ルータ番号と、それぞれXファブリックおよびYファブリックに対するストレージシェルフルータアドレスに対応するD_IDの高い方の2バイトを格納するために用いられる。これは、さらにコンパクトなIRT、ERT_XおよびERT_Yのテーブルを可能にし、D_IDの低位バイトを格納するだけで済む。
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ポートに直接的に、またはコンテクストが確立されているデータフレームの場合には、GSMS層に比較的直接的にCPUで実行するFCP論理およびファームウェアによる処理のために、FCP層2810に入ってくるFCフレームを転送することに関する。ルーティング層が、FCポート内の入力FIFO2812および2814から入ってくるFCフレームを受信し、それぞれ「From_FP0」「From_FP1」で表される。ルーティング層は、FCフレームを出力FIFO2816および2818の一方に書き込むことによって、FCフレームをFCポートに向けてもよく、それぞれ「To−FP0」および「To_FP1」で表される。ルーティング層は、仮想待ち行列を介してFCP_DATAフレームを比較的直接的にGSMS層に転送してもよく、このプロセスは「To_GSMS」と呼ばれ、「To_FCP」と呼ばれる処理のために、FCフレームをFCP層2810に転送してもよい。表示「From_FP0」、「From_FP1」、「To_FP0」、「To_FP1」、「To_GSMS」および「To_FCP」は、FIFOからの読み出しおよびFIFOへの書き込み、GSMS仮想待ち行列機構を介したデータ転送および共有メモリインターフェイスを介したCPUへの状態機械を介在した転送の処理のための略記として、フロー制御図において利用される。
図29は、ルーティング層論理回路を表す第1の最も高いレベルのフロー制御図である。ルーティング層論理回路は、入ってくるFCフレームをその適切な宛て先に向けるために行われる決定の集合として記載される。ストレージルータを機能させる際に、図29〜図35に関して記載されるルーティング論理回路は、入ってくるFCフレームが処理されるときに呼び出される。ルーティング論理回路は、ストレージシェルフルータの状態機械および論理回路の中に常駐する。ストレージシェルフルータは、内部データ転送の格納および転送、データ複製タイプを可能な限り回避し、FCポートのFIFOに入力中であっても、フレームヘッダにおける情報を用いて、フレームを経路指定することができるようにするために、代わりに能率的にするように設計される。言い換えれば、ルーティング論理回路は、フレームヘッダがFIFOからの読み出しのために利用可能となるとすぐに呼び出されてもよく、フレームは、経路指定されてもよく、FCポートによる残りのデータの受信と平行して、フレームに含まれる初期データがその宛て先に転送されてもよい。ストレージシェルフルータは、2つのFCポートの2つの異なる入力FIFOの公平な扱いを確保するために、仲裁論理回路を含み、その結果、XファブリックおよびYファブリックの両方から入ってくるFCフレームが、タイムリーな方式で扱われ、XファブリックおよびYファブリックのいずれも、不必要なFCフレームの扱いの遅延または窮乏を被らないようにする。ルーティング論理回路は、FIFOに新たに到着したフレームの可用性を表すFCポートによって生成された信号によって呼び出される。
ステップ2902において、ルーティング層論理回路(「RLL」)は、それぞれ「From_FP0」および「From_FP1」で表されるFCポートの入力FIFOの1つから次に入ってくるFCフレームを読み出す。ステップ2904において、ルーティング層論理回路は、FCフレームがクラス3のFCフレームであるかどうかを決定する。クラス3のFCフレームのみが、ストレージシェルフルータの記載された実施形態によってサポートされる。FCフレームがクラス3のFCフレームでない場合には、ステップ2906において、エラー処理のために、FCフレームは、FCP層に向けられる(To_FCP)。このフロー制御図および次のフロー制御図において、フロー矢印に関連する小文字の「e」は、フロー矢印によって示されたフローが、エラー状態を扱うために生じていることを示すことに留意されたい。ステップ2904においてに、FCフレームがクラス3のFCフレームである場合には、RLLが次に、ステップ2908において、FCフレームが受信されたFCポートがSファブリックエンドポイント、または言い換えれば、XファブリックノードまたはYファブリックノードであるかどうかを決定する。ストレージシェルフルータは、特定のポートがSファブリックに対してエンドポイントであるかどうか、または言い換えれば構成可能な設定からXファブリックノードまたはYファブリックノードであるかどうかを決定することができる。FCフレームヘッダは、上述のように、ソースポートのポートアドレスを含む。
FCフレームのソースポートが、FCフレームがローカルSファブリックに対して外部にあるエンティティから受信されたことを表すSファブリックエンドポイントである場合には、RLLは、ステップ2910において、Sビットのいずれかが、FCフレームヘッダのDF_CTLフィールドの中に設定されるかどうかを決定する。そうである場合には、エラーが生じ、FCフレームは、ステップ2906におけるエラー処理のために、FCP層に向けられる(To_FCP)。そうでない場合には、ステップ2912において、FCフレームがXファブリックまたはX空間またはYファブリックまたはY空間に属しているかどうかを表すために、適切なSビットが設定される。ストレージシェルフの中で相互接続ストレージシェルフルータの集合の中で、ストレージシェルフルータの位置に関係なく、2つのFCポートの一方がXファブリックに対応し、2つのFCポートの他方がYファブリックに対応することに留意されたい。上述したように、FCポートとXファブリックおよびTファブリックとの間の関連付けが、構成可能である。次に、RLLは、ステップ2914において、フレームがSファブリックフレームであることを示すように、Sビットが設定されるかどうかを決定する。そうである場合には、ステップ2916において、フレーム用の宛て先を決定するために、サブ論理(ルーチン)「Management Destination」が呼び出され、その後で、ステップ2916において決定された宛て先にFCフレームを実際に経路指定するために、ステップ2918において、サブ論理(ルーチン)「Route To Destination」が呼び出される。ステップ2914においてに、FCフレームがSファブリック管理フレームでない場合には、ステップ2920においてRLLは、各ディスクドライブがそれ自体のFCノードアドレスを有するモードとして上述したトランスペアレントモードにおいてRLLが現在動作中であるかどうかを決定する。ストレージシェルフルータがトランスペアレントモードにおいて動作中である場合には、フレーム用の宛て先を決定するために、ステップ2922において、サブ論理(ルーチン)「Transparent Destination」が呼び出され、次に、フレームをその宛て先に実際に経路指定するために、ステップ2918において、サブ論理(ルーチン)「Route To Destination」が呼び出される。他の場合には、フレーム用の宛て先を決定するために、ステップ2924において、サブ論理(ルーチン)「Destination」が呼び出され、その後で、ステップ2918において、サブ論理(ルーチン)「Route To Destination」への呼び出しを介して、その宛て先に経路指定される。
図30は、図29のステップ2916から呼び出されるサブ論理(ルーチン)「Management Destination」のフロー制御図である。ステップ3002において、RLLは、FCフレームのヘッダにおいてD_IDに格納されるストレージシェルフルータの数がストレージシェルフルータの数に等しいかどうかを決定する。この決定は、ストレージシェルフ内のストレージシェルフルータに割り当てられ、SFARレジスタに格納されたルータ数を用いて行われることができる。ステップ3002においてに、D_IDに含まれるルータ数が、SFARレジスタのルータ数と一致する場合には、変数「destination」は、ステップ3004において、フレームがFCP層に送られる必要があることを示す値「To_FCP」に設定される。ステップ3006において、ルータ数が一致しない場合には、RLLは、FCフレームのD_IDにおけるルータ数が、ストレージシェルフルータのルータ数を超えるかどうかを決定する。FCフレームのD_IDにおけるルータ数が、SFARレジスタに格納されたストレージシェルフルータのルータ数を超える場合には、制御フローは、ステップ3008に進む。他の場合には、制御フローは、ステップ3010に進む。いずれのステップ3008および3010においても、RRLは、フレームがストレージシェルフの中のSファブリックエンドポイントに達したかどうかを決定する。そうである場合には、管理フレームは、不正確にアドレス指定されたか、または誤って適切な宛て先が使われておらず、いずれの場合も、ステップ3004において、宛て先は、「To_FCP」に設定され、その結果、フレームは、誤って受信されたフレームとしてCPUによって処理される。しかし、いずれのステップ3008および3010においても、現在のストレージシェルフルータが、Sファブリックエンドポイントでない場合には、ステップ3012において、宛て先は、「To_FP0」に設定され、その場合には、D_IDにおけるルータ数は、現在のルータのルータ数未満であり、D_IDにおけるルータ数が、現在のストレージシェルフルータのルータ数を超える場合には、ステップ3014において、宛て先は、「To_FP1」に設定される。ストレージシェルフの中のストレージルータの数値的識別は、Xファブリックに対して、単調に昇順であり、Yファブリックに対して、単調に降順であることに再び留意すべきである。
図31は、図29におけるステップ2924から呼び出されるサブ論理(ルーチン)「Destination」のフロー制御図である。このサブ論理(ルーチン)は、ストレージシェルフルータがトランスペアレントモードで動作中でない場合、または言い換えれば、ストレージシェルフルータが複数のディスクドライブをAL_PAにマッピングしている場合に、FCフレーム用の宛て先を決定する。ステップ3102において、RLLは、フレームがXFER_RDYフレームまたはRSPフレームであるかを決定する。これらのフレームは、ディスクアレイコントローラに送り返される必要がある。そうである場合には、ステップ3102において、RLLは、フレームがXファブリックに属しているかどうかを決定する。フレームがXファブリックに属している場合には、変数「destination」は、ステップ3104において値「To_FP0」に設定され、フレームをX FCポートに向ける。ステップ3102においてに、フレームがYファブリックフレームである場合には、フレームをY FCポートに向けるために、ステップ3106において、変数「destination」は、「To_FP1」に設定される。ステップ3102においてに、フレームがXFER_RDYフレームまたはRSPフレームでない場合には、ステップ3108において、RLLは、フレームがFCP_CMNDフレームであるかどうかを決定する。そうである場合には、ステップ3110において、変数「destination」は、「To_FCP」に設定され、フレームがストレージシェルフルータに対して局所的であるLUNに向けられるFCP_CMNDフレームであることと、フレームがFCPコマンド用のコンテクストを確立するために、ファームウェア処理用のFCP層に向けられる必要があることを表す。ステップ3108においてに、フレームがFCP_CMNDフレームでない場合には、ステップ3112において、RLLは、フレームがFCP_DATAフレームであるかどうかを決定する。フレームがデータフレームでない場合には、ステップ3114において、変数「destination」は、「To_FCP」に設定され、どのタイプのフレームが受信され、フレームをどのように扱うべきかをファームウェアが決定するエラー処理を呼び出す。ステップ3112において、フレームがFCP_DATAフレームである場合には、ステップ3116において、RLLは、フレームがレスポンダまたはオリジネータによって送信されたかどうかを決定する。フレームがオリジネータによって送信された場合には、ステップ3110において、変数「destination」は、「To_FCP」に設定され、フレームをFCP層処理に向ける。データフレームがレスポンダによって送信された場合には、ステップ3118において、RLLは、フレームが最初はSファブリック以外から受信されたかどうか、またはフレームヘッダ内のSビット符号化ファブリック表示がフレームが受信された対向するポートと不一致であるかどうかを決定する。いずれの状態も当てはまる場合には、フレームはエラーで受信され、ステップ3114において、変数「destination」は、「To_FCP」に設定され、フレームをエラー処理のためのCPUに向ける。他の場合には、制御フローは、XポートまたはYポートのいずれかの方向のためのステップ3103に進む。
図32は、図29のステップ2922から呼び出されたサブ論理(ルーチン)「Transparent Destination」のフロー制御図である。このサブ論理(ルーチン)は、ストレージシェルフルータがトランスペアレントモードで動作中であり、各ディスクドライブがそれ自体の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テーブルを調べる。S_IDが、現在ログインされており、ステップ3204においてに、フレームが向けられるストレージシェルフルータと相互接続されるディスクドライブとのFCの交換を行うことができる遠隔エンティティを表している場合には、ステップ3206において、処理のためのFCP層にフレームを向けるために、変数「destination」は、「To_FCP」に設定される。対照的に、S_IDが適切なIITテーブルの中にないか、または適切なLPTテーブルによって示されているように、FCフレームが向けられるソースドライブおよびディスクドライブが現在ログインされていない場合には、ステップ3208において、フレームをエラー処理のためのFCP層に向けるために、変数「destination」は、「To_FCP」に設定される。
ステップ3202において決定されたように、D_IDフィールドが、適切なFARレジスタの内容に適合しない場合には、ステップ3210において、RLLは、フレームがXファブリックフレームであるかどうかを決定する。そうである場合には、ステップ3212において、RLLは、フレームがストレージシェルフ内の別のストレージシェルフルータに向けられるかどうかを決定する。そうでない場合には、ステップ3214において別のストレージシェルフに転送するために、フレームを外部Xファブリックに戻すために、変数「destination」が「To_FP0」に設定される。ERT_Xテーブルが、ステップ3212において決定されたように、フレームの宛て先がストレージシェルフ内の別のストレージシェルフルータに取り付けられるディスクドライブであることを表すエントリを含む場合には、ステップ3216において、RLLは、現在のストレージシェルフルータがYファブリックエンドポイントを表すかどうかを決定する。そうである場合には、フレームは、正確に処理されておらず、Yファブリックに送り込まれることができず、したがって、ステップ3208において、変数「destination」は、値「To_FCP」に設定され、その結果、フレームは、エラー処理のためのFCP層に向けられることができる。別の場合には、フレームをSファブリックを介してストレージシェルフ内の次のストレージシェルフルータに転送するために、変数の宛て先は、ステップ3218において、「To_FP1」に設定される。ステップ3210においてに、受信されたフレームがXファブリックフレームでない場合には、ステップ3220においてRLLは、受信されたフレームがYファブリックフレームであるかどうかを決定する。そうである場合には、フレームは、ステップ3222において始まるXファブリックフレームのための処理と対称かつ同等に処理される。別の場合には、ステップ3208において、フレームをエラー処理のためのFCP層に向けるために、変数「destination」は、「To_FCP」に設定される。
図33は、図29におけるステップ2918から呼び出されるサブ論理(ルーチン)「Route To Destination」のフロー制御図である。このサブ論理(ルーチン)は、受信された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において、フレームを適切な出力待ち行列に入れる。変数「destination」の内容がFP0ポートまたはFP1ポートを表さないか、またはステップ3302において、宛て先が、FCフレームが受信されたポートに対向していないかのいずれかである場合には、ステップ3314において、RLLは、変数「destination」の内容が、フレームがFCポートの1つに向けられるべきであることを示しているかどうかを決定する。フレームがFCポートの1つに向けられるべきである場合には、フレームは、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」が呼び出され、その後で、ステップ3326において、RLLは、変数「destination」の内容が「To_FCP」に依然として等しいかどうかを決定する。そうである場合には、フレームは、ステップ3316において、FCP層に向けられる。別の場合には、変数「destination」の内容が今度は、2つのFCポートの一方へのフレームの転送を表し、ステップ3328において決定されるように、FCポートの宛て先が、フレームが受信されたものと同一のFCポートである場合には、フレームは、ステップ3316において、エラー処理のためにFCP層に向けられる。別の場合には、制御フローは、ステップ3304に進み、フレームを2つのFCPポートの一方の待ち行列に入れる。ステップ3322においてに、フレームがFCP_CMNDフレームでない場合には、ステップ3330において、サブ論理(ルーチン)「Other Routing」が呼び出される。
図34は、ステップ3324において呼び出されるサブ論理(ルーチン)「Map Destination」のフロー制御図である。RLLは第一に、ステップ3402において、LUN、LBA、またはLUNおよびLBAマッピングの組み合わせが、ストレージシェルフルータによって現在実行中であるかどうかを決定する。そうでない場合には、RLLは、ステップ3404において、ストレージシェルフルータが現在、トランスペアレントモードで動作中であるかどうかを決定する。そうである場合には、ステップ3406において、変数「destination」の値は、「To_FCP」に設定される。ステップ3404においてに、ストレージシェルフルータがトランスペアレントモードで動作中でない場合には、RLLは、ステップ3408において、適切なLPTテーブルが、フレームのソースが、フレームの宛て先とのデータ交換のためにログイン中であることを示すかどうかを決定する。そうである場合には、ステップ3406において、変数「destination」は、「To_FCP」に設定される。別の場合には、フレームをエラー処理のためのCPUに向けるために、宛て先はまた、ステップ3406において、「To_FCP」に設定される。LUN、LBA、またはLUNおよびLBAマッピングの組み合わせが、ストレージシェルフルータによって実行中である場合には、RLLは、ステップ3410において、指定された宛て先のディスクが、IRTテーブルにおけるエントリに関連付けられているかどうかを決定する。そうである場合には、制御フローは、ステップ3404に進む。別の場合には、ステップ3412において、RLLは、範囲調査が無効かどうかを決定する。範囲調査が無効である場合には、ステップ3414において、RLLは、フレームがFP0ポートで受信されたかどうかを決定する。そうである場合には、ステップ3416において、変数「destination」は、「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空間エンドポイントであるかどうかを決定する。そうである場合には、フレームをエラー処理用のFCPに向けるために、変数「destination」の値は、ステップ3406において、「To_FCP」に設定される。
図35は、図33のステップ3330におけるサブ論理(ルーチン)「Other Routing」のフロー制御図である。ステップ3502において、RLLは、フレームのRX_IDフィールドが、現在のストレージシェルフルータまたはそれに接続されるディスクドライブが、フレーム用のFCレスポンダであることを示すかどうかを決定する。そうである場合には、ステップ3504において、RLLは、フレームがFCP_DATAフレームであるかどうかを決定する。そうである場合には、ステップ3506において、RLLは、フレーム用の有効なコンテクストがあるかどうかを決定する。そうである場合には、フレームは、上述のように、SATAポートに対するデータの転送のために、ステップ3508において、GSMSに向けられ、すなわち、「To_GSMS」である。別の場合には、ステップ3510において、フレームはエラー処理のためのFCP層に向けられる。ステップ3502において決定されるように、FCフレームヘッダのRX_IDフィールドが、フレーム用の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〜図36Bは、ATAディスクドライブおよびFCディスクドライブによって利用されるディスクフォーマティング規則を示す。図36Aに示されているように、ディスクドライブは、セクタにそれぞれ分割される複数のトラックからなると概念的に考えられる。トラックは、トラック3602などのディスクプラッタの表面における円形の帯、ATAディスクドライブプラッタにおける外周の帯である。各トラックは、セクタ3604、すなわち、第1のトラック3602の第1のセクタなどのセクタと呼ばれる放射部分に分割される。一般に、ディスクアクセス動作は、セクタの粒度で生じる。現代のディスクドライブは、複数の平行に向けられたプラッタを含んでもよい。平行なプラッタのすべての両面にすべての類似の番号の付いたトラックが、共に、円筒を構成する。図36Aに示されているように、ATAディスクドライブにおいて、各トラックの各セクタは一般に、512バイトのデータペイロードを含む。セクタは、セクタ番号およびエラー検出情報およびエラー補正情報をはじめとするさらなる情報を含む。このさらなる情報は一般に、ディスクドライブコントローラによって維持されて用いられ、外部からアクセス可能でない場合がある。このさらなる情報は、本発明には関係していない。したがって、セクタは、セクタに含まれるデータペイロードのバイト数に対して記載される。
図36Bは、FCディスクドライブ用の概念的なトラックおよびセクタのレイアウトを示す。FCディスクドライブは、ATAディスクドライブによって利用される512バイトセクタではなく、520バイトセクタを利用してもよい。図36Aに示されるATAディスクドライブまたはSATAディスクドライブに関する概念的なレイアウトを図36Bに示されるFCディスクドライブ用の概念的なレイアウトと比べると、図36A〜図36Bにおける両方のレイアウトは本質的に、等しい数のデータバイトをサポートしているが、ATAディスクドライブフォーマットは、FCディスクドライブより各トラック内により多数のより小さなセクタを提供することが分かる。しかし、一般に、ATAディスクおよびFCディスクは本質的に等しいバイト数を提供しなくてもよく、FCディスクもまた、512バイトセクタでフォーマットされてもよい。図36A〜図36Bは、簡素化された概念的なレベルにおけるディスクフォーマティング規則を示していることに留意すべきである。実際には、ディスクドライブは、数千または数万のトラックを含んでもよく、各トラックは多数のセクタを含んでもよい。
種々の実施形態において、本発明の主題であるストレージシェルフルータにより、経済的なATAディスクドライブが、ファイバチャネルに基づくディスクアレイのストレージシェルフの中で利用されることを可能にする。しかし、ある種の現在利用可能なFCに基づくコントローラは、520バイトセクタをサポートするディスクドライブを専ら用いてインターフェイスをとるように実装されてもよい。ATAまたはSATAに基づくストレージシェルフの製造者は、512バイトセクタを含むATAディスクドライブまたはSATAディスクドライブとインターフェイスをとるために、強化することになっている現在非ATA準拠のディスクアレイコントローラを必要とすることに決めている可能性があるが、さらに実現可能な手法は、仮想ディスクフォーマティングをサポートするようにストレージシェルフルータを実装することである。仮想ディスクフォーマティングは、ディスクアレイコントローラなどの外部エンティティに対し、FCディスクドライブの520バイトセクタフォーマティング規則にフォーマットされたディスクドライブを含むストレージシェルフの幻影をストレージシェルフルータまたはストレージシェルフ内のストレージシェルフルータに提供し、ストレージシェルフ内のATAディスクドライブによって利用される512バイトセクタフォーマティングへの520バイトセクタに基づくディスクアクセスコマンドのマッピングを処理する。
図37A〜図37Dは、ディスクアレイコントローラなどの外部エンティティによる、ストレージシェルフ内部の512バイトに基づくディスクドライブへの520バイトのWRITEアクセスを扱うための、仮想ディスクフォーマティング実装を示す。図37Aに示されているように、ディスクアレイコントローラなどの外部処理エンティティは、WRITEアクセスが対象とされるディスクを520バイトセクタでフォーマットされているものとして表示する(図37Aにおける3702)が、内部ディスクドライブは実際には、512バイトセクタでフォーマットされている(図37Aにおける3704)。ストレージシェルフルータは、論理的な520バイトセクタに基づくフォーマティング3702と実際の512バイトセクタのフォーマティング3704との間の垂直矢印3706〜3710によって、図37Aにおいて示されているマッピングの維持を担っている。図37B〜図37Dは、仮想の520バイトセクタ257〜259(3712〜3714)を512バイトセクタに基づく内部ディスクドライブ3704に指定するWRITE動作を終了するために、ストレージシェルフルータによって実行される動作を表す。ディスクドライブの第1のセクタがセクタ0と見なされ、次のセクタがすべて、単調に増大するセクタ番号を有するセクタ番号付け規則を仮定すると、256×520=260×512=133,120であるため、仮想の520バイトセクタ256(3716)は、実際のディスクドライブにおいて512バイトセクタ260(3718)の最初のバイトから始まる。言い換えれば、仮想の520バイトセクタ256および実際の512バイトセクタ2600はいずれも、バイト数133,120で始まる。仮想セクタ256および実際のセクタ260の始まりは、同一のバイトアドレスにマッピングされる(3706)が、仮想セクタ256は、図37Aのマッピング矢印3707によって表される実際のセクタ260の終わりを越えて延在する。したがって、仮想セクタ257の始まりは、8バイト(3720)の変位だけ実際のセクタ261の始まりからずれており、仮想セクタ258〜260の始まりは、実際のセクタ262〜264の始まりから、16バイト、24バイトおよび32バイトのオフセット3722〜3724のずれがある。したがって、ディスクドライブに仮想セクタ257〜259を書き込むために、ストレージシェルフルータは、実際のディスクセクタ261〜264(3726〜3729)に対する仮想セクタ257〜259の外部処理エンティティによって供給されるデータを書き込む必要がある。
図37Bは、仮想フォーマティング環境におけるストレージシェルフルータによって実行されるWRITE動作処理の第1の段階を示す。図37Bに示されているように、ストレージシェルフルータは最初に、実際のディスクセクタ261(3726)および264(3729)をメモリバッファ3730に読み出す。メモリバッファ3732および3734におけるデータの網掛け部分は、WRITEアクセスがアドレス指定される仮想セクタとは別の仮想セクタに含まれるディスクドライブからのデータ読み出しに対応する。セクタ261および264(それぞれ、3726および3729)は、アクセス動作のための仮想セクタ境界を含むため、「境界セクタ」と呼ばれる。ストレージシェルフルータは、第2のメモリバッファ3736において、仮想セクタ257〜259(図37Aにおけるそれぞれ3712〜3714)に書き込まれるデータを同時に受信する。
図37Cは、WRITEアクセスのストレージシェルフルータ処理の第2の段階を示す。図37Cにおいて、受信データ3738および3740の網掛け部分は、図37Bに示される実際のディスクドライブから読み出されるバッファデータのそれぞれの部分3742および3744に書き込まれる。
図37Dは、WRITEアクセスのストレージシェルフルータ実装の最後の段階を示す。図37Dにおいて、実際のディスクセクタ261および264用のメモリバッファ3730に準備されたバッファデータは、実際のディスクセクタ262および263(それぞれ3746および3748)に対応する第2のメモリバッファ3736における受信データの一部と共に、すべて実際のディスクセクタ261〜264に書き込まれる。非境界ディスクセクタ262および263は、受信データバッファ3736から直接的に書き込まれることができることに留意されたい。
図37A〜図37Dに示される仮想フォーマティング環境におけるストレージシェルフルータ実装WRITEアクセスを要約すると、ストレージシェルフルータは一般に、最初に実際のディスクドライブから境界セクタを読み出し、受信データをメモリにおける境界セクタにマッピングし、次に、境界セクタおよびすべての非境界セクタをディスクドライブにWRITEする必要がある。したがって、一般に、n個のセクタの520バイトセクタに基づく仮想書き込み動作は、2回の実際のディスクセクタ読み出しおよび2+n−1回の実際のディスクセクタ書き込みを用いて、ストレージシェルフルータによって実装される。
WRITE I/O(n個の仮想の520セクタ)→2回の読み出し+2回の書き込み+(n−1)回の書き込み
対応して減少した書き込み効率は、
仮想セクタが実際のディスクセクタにサイズが比較的近く、一般に、WRITE動作は、READ動作よりわずかに時間がかかるが、セクタの読み出しおよびセクタの書き込みに同量の時間がかかると仮定すると、その結果、上記で計算したWRITE I/O効率は、実際のWRITE I/O効率よりわずかに低く見積もられる。
図38A〜図38Bは、ストレージシェルフルータによる仮想の520バイトセクタに基づくREAD動作の実装を示す。図38Aは、図37Aに示されているように、仮想の520バイトに基づくセクタと実際のディスクドライブの512バイトセクタとの間の同じマッピングを示し、図38Aにおいて、ディスクアレイコントローラなどの外部処理エンティティが、仮想セクタ257〜259(それぞれ3712〜3714)の読み出しを要求する点が異なる。図38Bは、仮想セクタ257〜259に向けられるREADアクセスを実装するために、ストレージシェルフルータによって実行される動作を示す。ストレージシェルフルータは第一に、外部処理エンティティによって要求されたデータを含む実際のディスクセクタを決定する。このデータは、境界セクタ261および264(それぞれ、3726および3729)および非境界セクタ262および263(それぞれ、3727および3728)を含む。一旦、ストレージシェルフルータが、アクセスされることになっているデータを含む実際のディスクセクタを識別すると、ストレージシェルフルータは、それらのセクタをメモリバッファ3802に読み出す。ストレージシェルフルータは次に、メモリバッファ内の仮想セクタ境界3804〜3807を識別し、メモリバッファ3802内の仮想セクタに対応するデータを要求を出した外部処理エンティティに戻し、第1の仮想セクタ3804の第1のバイトに先立ち、最後の仮想セクタ3807の最後のバイトに続く任意のメモリバッファデータを棄却する。
図37A〜図37Dおよび図38A〜図38Bにおける仮想ディスクフォーマティングの実装の説明は、高位の概念的な説明である。入ってくるFC_DATAパケットからデータを受信し、特定のSATAディスクドライブへの伝送のためにストレージシェルフルータを通ってSATAポートにデータを経路指定し、SATAディスクドライブからのデータを特定のSATAポートで受信し、ストレージシェルフルータを通ってデータを経路指定し、外部処理エンティティに伝送されたFC_DATAパケットおよびFC_STATUSパケットにおけるデータおよび状態情報を伝送するために、内部では、ストレージシェルフルータは、前の小段落で説明した種々のデータ伝送経路を利用する。複数の個別のメモリバッファが、図37B〜図37Dおよび図38Dに示されるが、ストレージシェルフルータによるデータの実際の処理は、前の小段落に記載した仮想待ち行列機構および他のデータトランスポート機構を用いて、最小のデータストレージで達成されてもよい。図37B〜図37Dおよび図38Bに示されるメモリバッファは、ストレージシェルフルータ内で実行されるデータ操作および伝送の上述した詳細なレベルではなく、概念レベルでストレージシェルフルータによるデータ処理を示すことを意図している。
図38A〜図38Bに示される読み出し動作を要約すると、ストレージシェルフルータは、n個の仮想セクタの仮想READを実行するために、n+1回のディスクセクタを読み出す必要があり、対応して減少した読み出し効率は、以下の式によって表現される。
READ I/O(n個の仮想の520セクタ)→1回の読み出し+n回の読み出し
対応して減少した読み出し効率は、
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
図39は、図37A〜図37Dに示されているように、複数の仮想セクタのWRITE動作のストレージシェルフルータによる実装を示す制御フロー図である。第一に、ステップ3902において、ストレージシェルフルータは、仮想セクタを指定する外部処理エンティティからWRITEコマンドを受信する。次に、ステップ3904において、ストレージシェルフルータは、低境界セクタおよび高境界セクタをはじめとする書き込まれることになっている実際のディスクセクタを決定する。次に、ストレージシェルフルータは、境界セクタの処理3906および非境界セクタの処理3908を並列に行ってもよい。境界セクタの処理は、ステップ3910において、受信されたWRITEコマンドに関連する低境界セクタがあるかどうかを決定することを含む。そうである場合には、ステップ3912において、低境界セクタの読み出しが、起動される。同様に、ステップ3914において、ストレージシェルフルータは、WRITE動作において必要な高境界セクタがあるかどうかを決定し、そうである場合には、ステップ3916において、高境界セクタ用のREAD動作を起動する。仮想セクタの始まりが、図37Aにおいて仮想セクタ256および実際のディスクセクタ260に関して、実際のディスクセクタの始まりと一致する場合には、WRITE動作において必要とされる低境界セクタはないことに留意されたい。同様に、高い仮想セクタの終わりが、実際のディスクセクタの終わりと一致する場合には、WRITE動作において必要とされる高境界セクタはない。
ステップ3918において検出されたように、低境界セクタのREAD動作が終了するとき、ストレージシェルフルータは、ステップ3920において、WRITEコマンドに関連する受信データの最初の部分を低境界セクタに書き込み、ステップ3922において、ディスクドライブへの低境界セクタのWRITEを起動する。同様に、ストレージシェルフルータが、ステップ3924において、高境界セクタの読み出しの終了を検出する場合には、ストレージシェルフルータは、ステップ3926において、高境界セクタからのデータの読み出しを含む受信データの最後の部分をメモリバッファに書き込み、ステップ3928において、ディスクドライブへの高境界セクタのWRITEを起動する。本発明の一実施形態において、ディスクセクタは、最も低いセクタから最も高いセクタの順にディスクに書き込まれる。非境界セクタの場合には、ストレージシェルフルータは、ステップ3932において、ステップ3930、3932および3934を含むforループの一部として、ディスクドライブに各非境界セクタを書き込む。ストレージシェルフルータが、仮想WRITE動作に関連するイベントを検出するとき、ストレージシェルフルータは、ステップ3936において、起動されたWRITE動作のすべてが終了したかどうかを決定する。そうである場合には、ステップ3938において、WRITE動作は、首尾よく終了する。別の場合には、ストレージシェルフルータは、ステップ3940において、仮想セクタのWRITE動作が時間切れであったかどうかを決定する。そうである場合には、ステップ3942においてエラー状態を得る。別の場合には、ストレージシェルフルータは、ステップ3944において、すべてのWRITE動作の終了まで待機し続ける。
図40は、図38A〜図38Bに示されているように、1つまたは複数の仮想セクタに向けられるREAD動作のストレージシェルフルータによる実装に関する制御フロー図である。ステップ4002において、ストレージシェルフルータは、外部処理エンティティから読み出しコマンドを受信する。ステップ4004において、ストレージシェルフルータは、境界セクタを含む読み出し動作において必要とされるすべての実際のディスクセクタの素性を決定する。次に、ステップ4006〜4008を構成するforループにおいて、ストレージシェルフルータは、読み出し動作に必要とされる各実際のディスクセクタを読み出す。ストレージシェルフルータが、仮想READ動作に関連するイベントの発生を検出すると、ストレージシェルフルータは、ステップ4010において、READ動作を介して要求されたディスクセクタが受信されたかどうかを決定する。そうである場合には、ステップ4012において、ストレージシェルフルータは、境界セクタのREADが終了したかどうかを決定する。そうである場合には、ステップ4014において、ストレージシェルフルータは、境界セクタから仮想READ動作に関連するデータを抽出し、要求する処理エンティティに対する最終的な伝送のために、バッファまたは待ち行列にそのデータを書き込む。受信されたセクタが境界セクタでない場合には、ストレージシェルフルータは、ステップ4016において、要求する処理エンティティに対する最終的な伝送のために、バッファまたは待ち行列内の適切な位置に受信データを書き込むだけである。ステップ4018において決定されるように、すべての読み出しが首尾よく終了した場合には、ステップ4020において、仮想READ動作が首尾よく終了し、当然のことながら、ディスクドライブからのデータの読み出しが処理エンティティに戻るように首尾よく伝送されることになる。別の場合には、ストレージシェルフルータは、ステップ4022において、時間切れが生じたかどうかを決定する。そうである場合には、ステップ4024においてエラー状態を得る。別の場合には、ストレージシェルフルータは、ステップ4026において、別のREAD動作の終了まで待機し続ける。
本発明の仮想フォーマティング法およびシステムの一実施形態において、512バイトATAディスクドライブセクタへの520バイトFCディスクドライブセクタのマッピングが、効率的に計算されることができる。図41は、本発明の一実施形態を表す仮想フォーマティング法およびシステムを実行するために必要な計算値を示す。図41において、セクタ4102の一番上の水平方向の帯は、仮想的にマッピングされる520バイトセクタを表し、下の水平方向の帯4104は、物理的な512バイトATAセクタを表す。図41は、物理セクタ4110〜4112への仮想セクタ4106〜4108のマッピングを示す。図41に示される実施例の場合には、仮想セクタ400〜409が、対応する物理セクタにマッピングされることになっていると仮定する。したがって、第1の仮想セクタ「fc_lba」4114の論理ブロックアドレス(「LBA」)は、値「400」を有し、その結果、マッピングされることになっている仮想ブロックの数「fc_block_count」4116は、10である。計算値「fc_lba_last」4118は、「410」であり、マッピングされることになっている仮想セクタ範囲の後に、第1の仮想セクタのLBAが続く。マッピングされることになっている仮想セクタに関するデータを含む第1の物理セクタの論理ブロックアドレス「ata_lba」4120は、よく知られているC言語構文および演算子を用いて、
ata_lba=fc_lba+(fc_lba>>6)
として計算される。実施例において、ata_lbaの計算値は、「406」である。この計算は、第1の仮想セクタのLBAに、64によって分割された第1の仮想セクタの前の仮想セクタの総数として計算された複数の物理セクタを加えたものとして理解されることができる。この理由は、64個の仮想セクタの各連続集合は、65個の物理セクタの対応する連続集合に正確にマッピングされるため、または、言い換えれば、
64*520==65*512==33280
であるためである。第1の物理セクタの始まりから第1の仮想セクタの第1のバイトに対応する第1の物理セクタ内のバイトまでのオフセット「ata_lba_offset」4122は、以下のように計算される。
ata_lba_offset=(fc_lba&63)<<3
実施例において、ata_lba_offsetに関して計算された値は、「128」である。この計算は、必要な第1の物理ブロックの中で8バイトシフトの数を決定するものとして理解されることができ、8バイトは、仮想セクタおよび物理セクタの長さにおける差であり、仮想セクタの数は、必要な8バイトシフトの数に対応する64によって分割された最初の仮想セクタLBAの後に続く。最後の物理的境界ブロックLBA「ata_ending_lba」4124は、
ata_ending_lba=fc_lba_last+(fc_lba_last>>6)
として計算される。実施例において、ata_ending_lbaの計算値は、「416」である。上記の計算は、第1の物理セクタ「ata_lba」の計算に等価である。仮想セクタの中にない第1のバイトに対応する最後の物理的境界ブロックの中のオフセット「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は、本発明の一実施形態を表す個別の仮想フォーマティング実装における仮想セクタのWRITEを示す。個別の仮想フォーマティング実装は、汎用プロセッサと、本発明の一実施形態を表す集積回路ストレージルータ実装によって提供されるストレージルータインターフェイスを提供するための格納されたファームウェア/ソフトウェアルーチンと、を利用するストレージルータ状の構成要素の中の、ストレージルータ機能性のファームウェア/ソフトウェア実装を含む。図42に示されているように、物理的境界セクタ4202〜4203は、ディスクバッファ4204に読み出され、仮想セクタ4206〜4207の受信された内容が、ディスクバッファ4204に書き込まれ、物理的境界データのオーバライト部分が仮想セクタデータに対応する。ディスクバッファ4204の内容は次に、ATAディスクドライブ4208に書き込まれる。したがって、仮想ディスクフォーマティングは、ソフトウェア/ファームウェア/汎用プロセッサに基づく構成要素を用いて実行されることができる。
図43は、本発明の一実施形態を表す集積回路ストレージシェルフに基づく仮想フォーマティング実装における仮想セクタのWRITEを示す。図43に示されているように、物理的境界セクタ4302〜4303は、GSM4308の中の第1のセクタバッファ(「FSB」)4304および最後のセクタバッファ(「LSB」)4306に読み出され、FSBおよびLSBは、仮想セクタデータと重ね合わされ、残りの仮想セクタデータは、FSBおよびLSBに関連するGSM408の中の仮想待ち行列4310による転送のために設定される。FSBおよびLSBの内容および仮想待ち行列に向けられるデータは次に、前の小段落に記載したデータ転送機構によって、ATAディスクに転送される。
図39〜図40における制御フロー図は、仮想WRITEコマンドおよび仮想READコマンドに関連するストレージシェルフ動作のかなり高度で概念的な例示を表すことに留意されたい。特に、上記の段落に詳述したデータフローおよびディスク動作の詳細は、簡単および明確にするために繰り返さない。
図36〜図43を参照して記載した仮想ディスクフォーマティングは、上述のように、ストレージシェルフルータが、ストレージシェルフルータによって管理されるストレージシェルフが、520バイトセクタのFCディスクドライブを含むようなディスクアレイコントローラなどの外部計算エンティティへの幻影を提供することを可能にするが、実際には、ストレージシェルフは、512バイトセクタのATAまたはSATAディスクドライブを含む。同様に、仮想ディスクフォーマティングは、ストレージシェルフ内で利用されるローカルディスクフォーマティングにもかかわらず、外部エンティティによって予想または所望である任意のタイプのディスクフォーマティングに対するインターフェイスを提供するために、ストレージシェルフルータによって用いられることができる。たとえば、新たなきわめて経済的な1024バイトセクタディスクドライブが利用可能になる場合には、仮想ディスクフォーマティング技術は、ストレージシェルフルータが、仮想の520バイトセクタに基づくアクセス動作または512バイトセクタに基づくアクセス動作を新たな1024バイトセクタに基づくディスクドライブにマッピングすることを可能にする。さらに、ディスクドライブの各セクタ内に格納された追加情報に応じてディスクドライブのエラー検出能力およびエラー補正能力を提供または強化するために、ストレージシェルフルータによって、仮想ディスクフォーマティングの多層を利用してもよい。
図44は、ストレージシェルフルータがATAディスクドライブのエラー検出能力を強化することを可能にする2層仮想ディスクフォーマティング技術を示す。図44において、ATAディスクドライブは、512バイトセクタ境界を表す実線の垂直線4404などの実線の垂直線によって、セクタ4404のリニアサブシーケンスによって表される512バイトセクタを利用する。512バイトセクタのショートサブシーケンス4406によって図44に示されているように、ストレージシェルフルータは、520バイトセクタを下にあるディスクドライブでサポートされる512バイトセクタにマッピングするために、上記で説明した仮想ディスクフォーマティング技術を用いる。仮想セクタ4408などの各520バイト仮想セクタは、512バイトペイロードおよび512バイトペイロードに付加されるさらなる8バイトの水平冗長符号(「LRC」)フィールドを含む。言い換えれば、ストレージシェルフルータは、第1の仮想ディスクフォーマティング層を利用して、520バイトセクタをATAディスクドライブの下にある512バイトセクタにマッピングする。しかし、この実施形態において、ストレージシェルフルータは、第2の仮想ディスクフォーマティングレベルを利用し、仮想セクタ4410などの外部で見ることが可能な512バイトの第2のレベルの仮想セクタを第1のレベルの仮想セクタ4408などの520バイトの第1のレベルの仮想セクタにマッピングし、次に、ストレージシェルフルータによって512バイトのディスクセクタにマッピングされる。この2層仮想化により、ストレージシェルフルータは、各セクタの終わりにさらなる8バイトのLRCフィールドを挿入することができる。ディスクアレイコントローラなどの外部処理エンティティは、512バイトセクタをサポートする第2のレベルの仮想ディスクフォーマティング層に対してインターフェイスをとるが、ディスクドライブによって用いられる同一のフォーマティングにより、外部処理エンティティは、ディスクドライブによってサポートされるセクタの実際の数より少ないディスクドライブ内の総セクタを見る。この理由は、ストレージシェルフルータが、各セクタに関してディスクドライブにさらなる8バイトのLRCフィールドを格納するためである。さらに、外部エンティティは、ディスクセクタに含まれるLRCフィールドを認識しない。
図45は、図44に示される2つの仮想レベルの実施形態において、各第1のレベルの仮想の520バイトセクタにおいてストレージシェルフルータによって含まれるLRCフィールドの内容を示す。図45に示されているように、520バイト仮想セクタ4502の第1の512バイトは、ペイロードまたはデータバイトである。LRCフィールドの最後の8バイトは、2つの保管バイト4504、2バイトを含む巡回冗長検査(「CRC」)サブフィールド4506および最後の4バイトに格納される論理ブロックアドレス4508を含む。CRCフィールドは、公知のCRC−CCITT技術によって計算されるCRC値を含む。この値の計算は、さらに詳細に以下に記載される。論理ブロックアドレス(「LBA」)は、仮想セクタに関連するセクタアドレスである。
LRCフィールドの内容により、ストレージシェルフルータが、種々のデータ破損エラーを検出するために利用されるハードウェアレベルのECC情報およびディスクドライブコントローラ技術にもかかわらず、ATAディスクドライブにおいて生じる種々のタイプのエラーを検出することを可能にする。たとえば、ディスクドライブ内の特定のセクタを指定するREAD要求は、時折、異なるセクタに関連するディスクドライブコントローラによって、データを返す結果を生じることがある。LRCフィールド内のLBAは、ストレージシェルフルータがそのようなエラーを検出することを可能にする。さらに、ディスクドライブは、種々のレベルのデータ破損を被る可能性がある。ハードウェアが供給するECC機構は、1ビットまたは2ビットのパリティエラーを検出することができるが、CRCフィールド4506に格納されたCRC値は、CRC値を計算するために利用された技術に応じて、すべての1ビット、2ビット、3ビットのエラーのほか、一定の長さ範囲のエラーの実行を検出することができる。言い換えれば、CRC値は、強化したエラー検出能力を提供する。図44に示される2層仮想ディスクフォーマティング技術を利用することによって、ストレージシェルフルータは、他の場合には、ストレージシェルフルータによって検出することができないような広範囲のエラー状態を検出することができ、これをディスクアレイコントローラなどの外部処理エンティティに対してトランスペアレントな態様で行うことができる。上述したように、外部処理エンティティによって観察可能な唯一の非トランスペアレント特性は、特定のディスクドライブに関してアクセス可能なより少数のセクタである。
図46は、CRC値の計算を示す。図46に示されているように、520バイト仮想セクタのペイロードまたはデータバイト4602およびLBAフィールド4604は共に、きわめて大きな数を表すと考えられる。そのきわめて大きな数は、2を法(モジュロ)とした除算を用いて、特定の定数4606によって除算され、2を法(モジュロ)とした除算の剰余は、最初のCRC値4608と見なされる。定数は、17ビットの数であり、したがって、2を法(モジュロ)とした除算の剰余は、長さが最大で16ビットであることから、2バイトのCRCフィールドの中に収まることに留意されたい。最初のCRC値は、定数値「FFFF」(16進数表記)を用いてEXCLUSIVEまたは(「XOR」)動作を受け、最終的なCRC値4610を生成する。定数4606は、データバイト4602およびLBAフィールド4604を含む大きな数に対して行われる小さな変更が、定数による2を法(モジュロ)とした除算の後に続く異なる剰余または最初のCRC値を結果として生じることを確実にする代数特性に関して注意深く選択される。異なるCRC計算技術は、異なる定数を利用してもよく、それぞれが、わずかに異なるエラー検出能力を提供する異なる代数特性を有する。
図47は、エラーを検出するために、仮想セクタのLRCフィールドに含まれるCRCフィールドに対して仮想セクタの内容が検査される技術を示す。たとえば、ストレージシェルフルータが、2つのディスクセクタから仮想セクタの内容を読み出すとき、ストレージシェルフルータは、任意の検出可能なエラーが、仮想セクタの中に含まれる情報の格納または読み出しにおいて生じたかどうかを決定するために、CRCフィールドに対して仮想セクタの内容を検査することができる。仮想セクタが、ディスクから読み出されるとき、ストレージシェルフルータは、データバイト4702、LBAフィールド4704およびCRCフィールド4706を共に組み合わせて、きわめて大きな数を形成する。このきわめて大きな数は、CRC値を計算するために利用されたものと同じ定数4707によって、2を法(モジュロ)とした除算によって計算され、剰余が、検査値4710として利用される。CRC−CCITT技術が利用されるとき、検索データ、LBAおよびCRCフィールドが、最初のCRC値が計算された場合のデータおよびLBAと同一である場合には、検査値4710は、「1D0F」(16進数)である。言い換えれば、検査値4710が定数値「1D0F」を有するとき、ストレージシェルフルータは、仮想セクタの格納および検索にエラーが生じなかったことを確信する。当然のことながら、CRC技術は、絶対確実というわけではなく、サイレントエラーが生じる可能性がきわめてわずかにある。最初に計算されたCRCをデータおよびLBAに追加することは、データおよびLBAを含む数を216と乗算することに等しいため、およびデータ、LBAおよび最初に計算されたCRCを含む数が、定数値4708によって等しく除算可能であることを保証するCRC−CCITT技術によるために、定数の検査値が生じることに留意されたい。
図48は、検索された仮想セクタのエラーを検査するために、ストレージシェルフルータによって利用される完全なLRC検査技術を示す制御フロー図である。ステップ4802において、ストレージシェルフルータは、CRCフィールドおよびLBAフィールドを含む検索された仮想セクタを受信する。ステップ4804において、ストレージシェルフルータは、検索された仮想セクタにおけるLBA値が、予想LBA値に対応するかどうかを決定する。そうでない場合には、ステップ4806において、エラーが戻される。別の場合には、ステップ4808において、ストレージシェルフルータは、図44に関して上述したように、検索された仮想セクタのデータ、LBAフィールドおよびCRCフィールドに基づいて、新たなCRC値を計算する。新たに計算されたCRC値が、ステップ4810において決定されたように、予想定数「1D0F」(16進数)に等しい場合には、ストレージシェルフルータは、ステップ4812において、検査の成功の表示を戻す。別の場合には、ストレージシェルフルータは、ステップ4814において、エラーを戻す。
ストレージシェルフルータは、WRITE動作中に完全なLRC検査または延期型LRC検査のいずれかを実行してもよい。図49は、延期型LRC検査を示す。図49に示され、既に述べたように、1つの第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つのWRITE動作4920および4922を介してディスクドライブに戻される。第1のレベルの仮想セクタに関連するLRCフィールド4913の内容は、有効であると仮定されることに留意されたい。しかし、2つのWRITE動作はまた、隣接する第1のレベルの仮想セクタに対応するデータおよびLRCフィールドをディスクドライブに書き込む。このデータおよびさらなるLRCフィールドが有効であるかを検査するのではなく、ストレージシェルフルータは、隣接する第1のレベルの仮想レベルが続いて読み出されるまで、隣接する第1のレベルの仮想セクタの検査を単に延期する。
図50は、受信された第2のレベルの512バイト仮想セクタにおけるWRITE動作の完全なLRC検査を示す。図49と図50を比較すると、完全なLRC検査において、ストレージシェルフルータは、第2のレベルの仮想セクタ4902をひとまとめにする境界セクタ4906および4907を読み出すだけでなく、境界セクタ4906および4907の次の隣接セクタ5002および5004もメモリバッファ5006に読み出すことが明らかになる。これにより、ストレージシェルフルータは、受信された第2のレベルの仮想セクタ4902のメモリバッファ5012への書き込みおよび2つの境界セクタのディスクドライブ5014および5016への次の書き込みに進む前に、図48を参照して記載したLRC検査法を用いることによって、上下の隣接する第1のレベルの520バイト仮想セクタ5008および5010にエラーがないかどうかを検査することが可能となる。したがって、完全なLRC検査は、2回のさらなる書き込みを必要とし、以下の式によって記載したように、対応して減少する書き込み効率を伴う。
WRITE I/O(n個の仮想の520セクタ)→4回の読み出し+2回の書き込み+(n−1)回の書き込み
対応して減少した書き込み効率は、
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
ストレージシェルフルータは、問題を検出し、外部処理エンティティに対してトランスペアレントである問題を補正するために、種々のさらなる技術を利用してもよい。たとえば、ストレージシェルフルータは、図50における低境界セクタ4906を首尾よく読み出すことに失敗した場合に、ストレージシェルフルータは、それにもかかわらず、第2のレベルの仮想セクタ4912において受信された低境界セクタの部分をディスクにおける低境界セクタに書き込み、ディスクアレイコントローラに「復旧エラー」状態を戻してもよい。続いて、前の仮想セクタがアクセスされるときに、ディスクアレイコントローラは、前の書き込み動作中に読み出されなかった元の低境界セクタの部分を検索し、データをディスクドライブに書き込むために必要なセクタのミラーコピーからデータ復元を起動し、エラーを補正する。したがって、LRCの失敗は、ストレージシェルフルータによって回避されることができる。
<FC/SATA RAIDコントローラ内で利用されるI/Oコントローラ>
前の小段落において説明したように、ストレージシェルフルータは、ディスクアレイにおける現在利用可能なRAIDコントローラにFC通信媒体を介して相互接続されることができるあまり高価でないSATAディスクドライブを含む高可用性のストレージシェルフの開発を容易にする。しかしFCに基づくディスクアレイにあまり高価でないSATAディスクドライブを組み込むためのさらなる対処法が、可能である。図51は、FC/SAS RAIDコントローラを利用するFCに基づくディスクアレイ内にSATAディスクドライブを組み込むための別の手法を示す。図51において、ディスクアレイ5102は、2つのFC通信媒体5104および5106によってサーバと相互接続される。図51に示されるディスクアレイは、2つのFC/SAS RAIDコントローラ5108および5110を含む。各FC/SAS RAIDコントローラは、FC通信媒体(たとえば、FCリンク5104にインターフェイス接続するFC/SAS RAIDコントローラ5108)と、各FC/SAS RAIDコントローラを複数のSASおよび/またはSATAディスクドライブ5114〜5131と相互接続するシリアル接続SCSI(「SAS」)通信媒体5112と、インターフェイスをとる。ディスクアレイは、内部FCループおよびFCディスクドライブを利用する現在利用可能なディスクアレイによって提供されるものと同一のホストコンピュータに対するFCに基づくインターフェイスを提供することができ、FCに基づくディスクアレイ用に開発された既存のRAIDコントローラソフトウェアの大部分を用いてもよい。
図52は、FC/SAS RAIDコントローラのブロック図を示す。FC/SAS RAIDコントローラ5202は、FCリンク5206を介してホストコンピュータからコマンドを受信し、ホストコンピュータに応答を伝送し、周辺コンピュータ相互接続エクスプレス(「PCIe」)リンク5208によってPCIeルートコンプレックスチップ5210とコマンドおよび応答を交換することを担うFCプロトコルチップ5204を含む。PCIeルートコンプレックスチップ5210は本質的にPCIeスイッチであり、次に、FCプロトコルチップ5204をメモリ5212、デュアルコアプロセッサ5214およびPCIe/SAS I/Oコントローラチップ5216とリンクする。PCIe/SAS I/Oコントローラチップ5216は、デュアルコアプロセッサ5214で実行中のRAIDコントローラソフトウェアからコマンドを受信し、RAIDコントローラソフトウェアへ応答を伝送し、SAS通信媒体5218を介してPCIe/SAS I/Oコントローラ5216と相互接続される複数のSASおよび/またはSATAディスクドライブにコマンドを発し、これらのSASおよび/またはSATAディスクドライブから応答を受信する。
SAS通信媒体およびPCIe通信媒体はいずれも、以前のパラレル通信媒体にとって変わるように最近開発された新たなシリアル通信媒体である。シリアル通信媒体は、イニシエータとターゲットデバイスとの間の直接的な相互接続を提供する。SASおよびPCIeの階層的アーキテクチャはいずれも、イニシエータまたはより高位のスイッチを複数のより低位のスイッチおよび/またはターゲットデバイスのいずれかと直接的に相互接続することができるスイッチを提供する。SAS通信媒体およびPCIe通信媒体は、交換および切り替え構成要素の種々の組み合わせが、2つの電話間の直接的な相互接続を提供する電話交換に基づく通信システムに類似している。シリアル通信媒体は、バス状の媒体が複数のデバイスによって仲裁を介して共有されるパラレル通信媒体よりはるかに高いデータ転送帯域幅と、短いデータ転送待ち時間を達成するように設計されることができる。
図53は、1×SAS通信媒体物理リンクを示す。1×物理リンクは、第1のSASポート5302および第2のSASポート5304を含み、各ポートは、Phy層5305〜5306およびトランシーバ5308〜5309を含む。第1のポート5302の受信器5310は、第1の差分信号ペア5314によって第2のポート5304の送信器5312と相互接続され、第1のポート5302の送信器5316は、第2の差分信号ペア5320によって第2のポート5304の受信器5318と相互接続される。各差分信号ペアは、SAS実装に応じて、毎秒1.5ギガビット(「Gbps」)または3.0Gbpsのいずれかの速度で1方向のデータ転送を提供する。1方向のデータ転送速度は、次のSASバージョンでは、6.0Gbpsであると推定されている。データは、文字ごとに追加の2ビットがクロック復元、DCバランス、特殊文字の符号化およびエラー検出を提供する各8ビットバイトを10ビットの文字として転送するシリアル8b10b符号化プロトコルを用いて、各方向において転送される。図53に示される1×物理リンクは、各差分信号ペアが3.0Gbpsでデータを転送する場合には、毎秒600メガバイト(「MBs」)の全二重データ転送を提供することができる。
図54は、差分信号ペアの動作を示す。「+」で示される差分信号ペアの一方の信号線は、第1の電圧規則を用いてビットを符号化し、「−」で示される差分信号ペアの他方の信号線は、第1の電圧規則とは逆の第2の電圧規則を用いてビットを符号化する。図54において、「+」符号化ビットストリームの小さな部分が、時間の関数としてプロットされた電圧を用いて、グラフ5402に示される。「+」符号化ビットストリームにおいて、1500mVの正の電圧は、ビット値「1」5404を符号化してもよく、900mVのより低い正の電圧5406は、ビット値「0」を符号化してもよい。図54におけるグラフ5408は、第1のグラフ5402に示される「+」符号化ビットストリームに対応する「−」符号化ビットストリームを示す。SASポートトランシーバは、図54におけるグラフ5410に示されているように、最終的に符号化されたビットストリームを生成するために、正の符号化信号から負の符号化信号を減算し、ビット値「1」が600mVの正の電圧5412によって符号化され、ビット値「0」が、−600mVの負の電圧5414によって符号化される。図54に示されているように、差分信号符号化は、雑音を改善して、より鮮明な結果信号を生成する。
SASポートは、複数のPhyを含んでもよく、図53に示されているように、Phyは、物理リンクの一方の側である。図55は、異なる幅の複数の異なるSASポートを表す。1×SASポート5502は、1つのPhyを含む。2×SASポート5504は、2つのPhyを含む。同様に、4×SASポート5506は、4つのPhyを含み、8×SASポート5508は、8つのPhyを含む。第1の8×SASポートが第2の8×SASポートと相互接続されるとき、8つの物理リンクは、2つの1×SASポートの相互接続によって得られる帯域幅の8倍の帯域幅が可能となる。異なる幅の2つのSASポートが相互接続されるとき、最初の交渉を介して決定されて得られた帯域幅は、2つのSASポートの最低の幅のポートによって得られることができる帯域幅である。たとえば、4×SASポートへの8×SASポートの相互接続は、2つの1×SASポートの相互接続によって得られる帯域幅の4倍の帯域幅を提供することを可能にする。したがって、SAS通信媒体またはリンクは一般に、リンクによって相互接続される2つのポートの最低の幅によって決定されるように、「1×」、「2×」、「4×」または「8×」と示される。
PCIeも同様に、構造化される。PCIeリンクも、リンクによって相互接続される2つのPCIeポートの最小の幅に応じて、「1×」、「2×」、「4×」および「8×」と分類されてもよい。PCI Phyもまた、差分信号ペアを利用し、8b10b符号化を用いる。現在利用可能なPCIe差分信号ペアは、1方向において、2.5Gbpsの伝送を提供し、将来のPCIバージョンでははるかに高速の伝送速度が予想されている。SASと同様に、各PCIeポートは、受信器およびトランシーバを含む少なくとも1つのPhyを含み、それぞれが、差分信号ペアに接続される。
図56は、PCIe/SAS I/Oコントローラ(図52の5216)用の3つの異なる設定を示す。第1の設定5602において、PCIe/SAS I/Oコントローラは、8×PCIeリンク5604および1つの8×SASリンク5606とインターフェイスをとる。第2の設定5608において、PCIe/SAS I/Oコントローラは、1つの8×PCIeリンク5610および2つの4×SASリンク5612および5614とインターフェイスをとる。第3の設定5616において、PCIe/SAS I/Oコントローラは、1つの8×PCIeリンク5618および4つの2×SASリンク5620〜5623とインターフェイスをとる。PCIe/SAS I/Oコントローラは、種々の異なるSAS接続モードおよびSASトポロジ(構成)をサポートする。
図51に示されているように、故障許容差および高可用性を達成するため、ディスクアレイ内の各ディスクドライブの独立なデュアルポート化を可能にするために、図52に示されるFC/SAS RAIDコントローラを用いるディスクアレイは一般に、少なくとも2つのRAIDコントローラを利用する。
図57は、デュアルコントローラディスクアレイにおいて、PCIe/SAS I/OコントローラへのディスクドライブのSASに基づく接続を示す。図57に示される実施例の設定において、第1のPCIe/SAS I/Oコントローラは、8×SASリンクを介して第1のファンアウトエキスパンダ5702に相互接続される。第2のPCIe/SAS I/Oコントローラは、8×SASリンクを介して第2のSASファンアウトエキスパンダ5704に接続される。ファンアウトエキスパンダ5702および5704のそれぞれは次に、エッジエキスパンダ5708〜5713などの128個までのエッジエキスパンダに接続されることができる。エッジエキスパンダ5708〜5713のそれぞれは次に、1×SASリンクを介して、最大128個のターゲットデバイス、本実施例においては、SATAディスクドライブ5716などのSATAディスクドライブに相互接続されることができる。したがって、各SATAディスクドライブは、SATAディスクドライブ5716のポート5718などの第1のポートを介して第1のPCIe/SAS I/Oコントローラに接続されてもよく、SATAディスク5716のSATAポート5720などの第2のポートを介して第2のPCIe/SAS I/Oコントローラに接続されてもよい。SATAディスクドライブは、デュアルポート型デバイスとして製作されないが、各SATAディスクドライブは、2SASポートコネクタモジュールによって強化され、2つのSASポートを介した2つの異なるSASドメインへのSATAディスクドライブの相互接続を可能にしてもよい。スイッチの異なる設定を用いて、多大な数の異なるSASトポロジ(構成)を実装することができる。
図58は、SASによってサポートされる3つの異なるトランスポートプロトコルを示す。イニシエータデバイスは、シリアル管理プロトコル(「SMP」)5806を介してSASエキスパンダ5802および5804などのSASエキスパンダと通信することができる。イニシエータは、シリアルATAトンネリングプロトコル(「STP」)5810を介してSATAディスク5808にコマンドを送信し、SATAディスク5808から応答を受信することができる。イニシエータは、シリアルSCSIプロトコル(「SSP」)5814を介してSASディスク5812にコマンドを送信し、SASディスク5812から応答を受信することができる。
図52を参照して上述したように、PCIe/SAS I/Oコントローラ(図52の5216)は、PCIe/SAS I/Oコントローラの設定に応じて、1つ、2つまたは4つのSASポートへの8×PCIeリンクを介してマルチプロセッサRAIDコントローラ(図52の5214)とインターフェイスをとる。
図59は、2SASポートPCIe/SAS I/Oコントローラ設定において、2つのSASポートへのマルチプロセッサRAIDコントローラのインターフェイスを示す。図59の水平の破線5902の上に示されているように、デュアルコアRAIDコントローラCPUは、本発明の表示された実施形態において、4つまでの異なる同時に実行中のデバイスドライバ5904〜5907をサポートすることができる。PCIe/SAS I/Oコントローラは対応して、それぞれが、マルチプロセッサRAIDコントローラの上で同時に実行中のデバイスドライバ5904〜5907の1つへの機能的なインターフェイスを提供する、4つのPCIe機能5908〜5911を提供する。2つのSASポート5912〜5913のいずれかに接続される任意のSASまたはSATAディスクにコマンドを送信し、SASまたはSATAディスクから応答を受信するために、PCIe/SAS I/Oコントローラは本質的に、各PCIe機能5908〜5911を可能にする一種のスイッチとして、PCIe機能へのインターフェイスをとるデバイスドライバとして作用する。
図60は、図52に示されるRAIDコントローラに含まれるPCIe/SAS I/Oコントローラ(図52の5216)のブロック図レベルの表現を提供する。図60において、PCIe/SAS I/Oコントローラ5216を通るデータ、I/Oコマンドおよび管理コマンドの汎用経路が、両方向矢印6002などの両方向矢印として示されている。PCIe/SAS I/Oコントローラ5216は、(1)PCIe層6004、(2)CPUサブシステム6006、(3)グローバル共有メモリスイッチ6008、(4)コンテクストマネジャ6010、(5)PCIeトラフィックマネジャ6012、(6)SASトラフィックマネジャ6014および(7)SAS層6016を含む。PCIe/SAS I/Oコントローラの種々の構成要素は、一般にCPUを必要とすることなく、グローバル共有メモリスイッチ6008を通じて、PCIe層からSAS層へおよびSAS層からPCIe層への効率的かつ高速のデータ転送を可能にするように構成および配置される。I/Oコマンドは、最小のCPU6006を必要とするだけで、コンテクストマネジャ6010によって処理および追跡される。対照的に、SMPプロトコルによって発せられるコマンドを含む管理コマンドは一般に、大きなCPUサブシステム6006を必要とするほか、内部メモリキャッシュにおけるバッファも必要とする。
PCIe層は、PCIeリンクから入ってきてPCIeリンクに出て行くすべてのPCIeトラフィックを管理する。PCIe層は、図59を参照して説明したように、4つまでのRAIDコントローラデバイスドライバ用の4つのPCIe機能を実装する。各PCIe機能は、RAIDコントローラ/I/Oコントローラインターフェイスを共に含む以下に説明する待ち行列およびレジスタの集合を提供する。
グローバル共有メモリスイッチ6008は、図59を参照してさらに一般的に記載したように、PCIe層6004からSAS層6016に、およびSAS層6016からPCIe層6004にデータを経路指定する時分割多重化非ブロッキングスイッチである。グローバル共有メモリスイッチは、PCIe層とSAS層との間で交換されるデータを一時的にバッファに格納する。
コンテクストマネジャ6010は、I/Oコンテクストキャッシュテーブル(「ICCT」)およびデバイス属性テーブル(「DAT」)を含む。以下で説明されるこれらのデータ構造は、I/Oコマンドの追跡、変換および管理を可能にする。ICCTは、RAIDコントローラメモリにおけるICTからPCIe/SAS I/Oコントローラに移動されるI/Oキャッシュテーブル(「ICT」)エントリのキャッシュである。DATは、I/Oコマンドの適切な変換および実行のために必要なデバイス属性情報を含むように、RAIDコントローラによって初期化される。
SAS層6016は、図56を参照して上述したように、1つまたは複数のSASポートのほか、共にSASポートに埋め込まれるSAS物理層と共に、SASプロトコルを実装するSASリンク、ポートおよびトランスポート層を実装する。各SASポートは、PCIe層とSAS層との間で情報の高い帯域幅の転送を達成するために、グローバル共有メモリスイッチ6008と個別にインターフェイスをとる。CPUサブシステム6006は、プロセッサおよび種々の密結合メモリを含み、SMP管理コマンドを処理し、SSPエラーおよびSTPエラーを処理するために、RAIDコントローラプロセッサとの自在なインターフェイスを提供するPCIe/SAS I/Oコントローラファームウェアを実行する。
図61は、RAIDコントローラのデュアルコアプロセッサ(図52の5214)で実行中のRAIDコントローラの実行ファイルが、PCIe/SAS I/Oコントローラ(図52の5216)とインターフェイスをとるRAIDコントローラ/I/Oコントローラインターフェイスを示す。RAIDコントローラ/I/Oコントローラインターフェイスは、水平破線6102の上に図61に示されるRAIDコントローラメモリに格納される構成要素と、図61において破線6102の下に示されるPCIe/SAS I/Oコントローラコンテクストマネジャの中の構成要素と、を含む。RAIDコントローラ/I/Oコントローラインターフェイスは、ICT6104、6つの円形待ち行列6106〜6111、ICCT6114およびDAT6116を含む。図61において、矢印は、RAIDコントローラおよびPCIe/SAS I/Oコントローラのどのエンティティが、種々の構成要素にデータを入力し、種々の構成要素からデータを抽出するかを示す。たとえば、RAIDコントローラは、ICT6104へのICTエントリを入力(6120)し、エントリをICTとICCT6114との間で前後にマイグレートし、そこからデータがPCIe/SAS I/Oコントローラによって抽出される。RAIDコントローラは、DAT6116におけるDATエントリを初期化し、これはI/Oコマンドを実行するために、PCIe/SAS I/Oコントローラによって用いられる。一定の場合において、RAIDコントローラは、円形待ち行列6106などの円形待ち行列にエントリを入力し、PCIe/SAS I/Oコントローラは、エントリを除去するか、またはエントリから情報を抽出する。他の場合には、データフローは、円形待ち行列6108などで逆転される。ある場合には、PCIe/SAS I/Oコントローラは、円形待ち行列6109に情報を入力し、および円形待ち行列6109から情報を抽出する。
6つの円形待ち行列は、(1)RAIDコントローラがPCIe/SAS I/Oコントローラによる処理のためのI/O要求を入力するI/O要求待ち行列(「IRQ」)6106、(2)SMPコマンドおよび他の管理コマンドを含む、デバイスドライバとPCIe/SAS I/Oコントローラの中で実行中のファームウェアとの間で転送される非同期コマンド用の自在通信チャネルを提供する、非同期要求待ち行列(「ARQ」)6107、(3)デバイスドライバによってIRQ6106またはARQ6107の待ち行列に以前に入れられたタスクまたは要求の終了をデバイスドライバに通知するために、PCIe/SAS I/Oコントローラによって用いられる終了待ち行列(「CQ」)6108、(4)FC XFER_RDYフレームを管理するためのPCIe/SAS I/Oコントローラによって用いられる転送準備待ち行列(「XQ」)6109、(5)小さなRAIDコントローラメモリバッファをPCIe/SAS I/Oコントローラに提供するために用いられる小バッファ待ち行列(「SBQ」)6110、および(6)RAIDコントローラ内に大きなメモリバッファをPCIe/SAS I/Oコントローラに提供するために用いられる大バッファ待ち行列(「LBQ」)6111を含む。
図62は、図61を参照して上述したRAIDコントローラ/I/Oコントローラインターフェイスによるデータの流れを示す。I/Oコマンドを要求するために、RAIDコントローラは、ICTエントリ6201をI/Oコマンドを記述するICT6104に配置し、エントリ6203をIRQ6106に配置する。IRQ6106は、PCIe/SAS I/Oコントローラによって検出されたときに、I/OコマンドのPCIe/SAS I/Oコントローラ処理を起動する。IRQエントリは、I/Oコマンドを識別するトランザクションID(「TID」)6205を含み、ICTエントリ6201は、コマンドを記述する。コマンド処理の一部として、ICTエントリ6201は一般に、PCIe/SAS I/Oコントローラによるより高速のアクセスのために、ICCT6114に移動される。ICTエントリ6207は、コマンドが向けられるデバイスを記述する適切なDATエントリ6211を参照するフィールド6209を含むコマンドを記述する種々のフィールドを含む。ICTエントリはまた、RAIDコントローラメモリバッファ6228〜6230を参照する4つまでの明確な長さ−アドレス−バッファポインタ(「LAP」)6213を含むか、あるいはLAPブロック6217〜6218のリンクされたリストへのポインタ6215を含み、それぞれが、RAIDコントローラバッファ6220〜6224への3つのLAPポインタと、およびリストにおける次のLAPブロックへのポインタ6226と、を含み、最後のLAPブロックが、リストの終わりを指定するためにNULLポインタを有する。LAPポインタは、メモリバッファを明確に参照するか、またはLAPポインタブロックのリンクされたリストに含まれるかどうかに関係なく、共に、スキャッタギャザリスト(「SGL」)を含む。明確なLAP6213は、4個の個別のメモリバッファが参照される必要がある場合に限り、用いられる。I/Oコマンドを実行するために必要なメモリバッファの要件が、4個までの明確なLAPポインタによって参照されることができる要件を超える場合には、リンクポインタ6215によって参照されるLAPブロックリンクリストが、代わりに用いられる。ICTエントリ6207は、ICTエントリによって指定され、コマンドを起動するIRQエントリに含まれるTIDによって識別されるI/Oコマンドを実行するために、PCIe/SAS I/Oコントローラによって必要とされる情報のすべてを含む。コマンドが終了すると、PCIe/SAS I/Oコントローラは、エントリ6232をCQ待ち行列6108に配置し、エントリは、終了したI/Oコマンドを識別するTID6205を含む。CQエントリ6232は、PCIe/SAS I/OコントローラがRAIDコントローラへの通信のために、必要に応じて、SCSI IOに関連する応答フレームを中に配置することができるRAIDコントローラバッファ6238を指定するSBQエントリ6236への参照6234を含んでもよい。
図63は、1つのバッファREADコマンドのためのスキャッタギャザリストを示す。図63に示されているように、READ I/Oコマンドを特徴付けるICTエントリ6304の中の1つのLAP6302は、その中にデータ6308のブロックが読み出されることになっているRAIDコントローラバッファ6306を指定する。
図64は、2バッファREADコマンド用のスキャッタギャザリストを示す。図64において、ICTエントリ6402は、ディスク6408からのデータ読み出しが配置される2つのRAIDコントローラバッファ6406および6407を指定するために、2つのLAP6404〜6405を利用する。データ6410の第1の部分は、第1のホストバッファ6406に配置され、データ6412の第2の部分は、第2のホストバッファ6407に配置される。最後のバッファ6414の一部が、未使用であることに留意されたい。
図65は、RAIDコントローラ/I/Oコントローラインターフェイスによって指定される以下の小段落でさらに詳細に説明する未整列の仮想ブロックWRITE I/Oコマンドを示す。上記および下記のように、未整列の仮想ブロックWRITEは、境界ブロックにおけるREAD修正動作を伴う。未整列のWRITE I/Oコマンドを作動するため、境界ブロックREADはそれぞれ、個別のICTエントリ6502および6504によって記述される。第1の境界READ I/Oコマンドは、低位アドレス境界ブロックが読み出されることになっているRAIDコントローラバッファ6508を指すLAP6506を含む。同様に、第2の境界ブロックREAD動作6510用のICTエントリは、上位アドレス境界バッファが読み出されることになっているRAIDコントローラバッファ6514を参照するLAP6512を含む。個別のICTエントリ6516は、WRITE動作を記述する。WRITE ICTエントリ6516は、前に読み出された下位アドレス境界ブロックを含むRAIDコントローラメモリバッファ6508を指すLAP6518と、上位アドレス境界ブロックを含むRAIDコントローラバッファ6514を指す第2のLAP6520と、を含む。残りのLAP6522および6524は、書き込まれることになっている非境界ブロックを含むRAIDコントローラバッファ6526および6528を参照する。したがって、未整列の仮想ブロックWRITE動作の場合には、境界ブロックは、2つの個別のICTエントリ6502および6504によって指定されるREAD動作によって最初に読み出され、書き込まれることになっているデータは、境界ブロックのほか、WRITE動作を記述するICTエントリ6520において指定される任意の非境界ブロックを含む。ディスクから読み出される境界ブロックデータは、WRITEバッファに格納されてコピーされる必要はなく、代わりに、WRITE動作のためにSGLにおけるREADバッファを含むことによって、所定の場所で用いられる。
<ストレージブリッジ>
低コストSATAディスクドライブをディスクアレイに組み込むための2つの異なる戦略が、前段落において説明された。第1の手法は、1つまたは複数のストレージシェルフルータによって制御される高可用性のストレージシェルフを必要とする。第2の手法は、FC媒体を介してホストコンピュータとインターフェイスをとり、SAS通信媒体を介してSASディスクドライブおよびSATAディスクドライブとインターフェイスをとるFC/SAS RAIDコントローラを必要とする。第1の手法は、FCに基づくディスクアレイコントローラソフトウェアに対する修正を必要としないが、第2の手法は、PCIe/SAS I/OコントローラへのPCIeリンクを介してインターフェイスをとるために、FCに基づくディスクアレイコントローラソフトウェアの修正を必要とする。
この小段落において、FCディスクドライブに基づくディスクアレイにおいてSATAディスクドライブを利用するための第3の技術が、記載される。図66は、ブリッジインターフェイスカードを用いることによって、FCディスクドライブに基づくディスクアレイ内のSATAディスクドライブの使用を示す。図66において、ディスクアレイまたはストレージシェルフ6602はそれぞれ、2つのRAIDコントローラまたは2つのエンクロージャI/Oカード6604および6606のいずれかを含む。RAIDコントローラまたはエンクロージャI/Oカードは、2つのFCリンク6608および6610を介してコマンドおよびデータを受信し、2つの内部FCループ6614および6616を介してディスクドライブ6612などのディスクドライブにコマンドおよびデータを経路指定し、そこからデータを受信する。ディスクドライブは、中央平面を通って内部FCループに直接的に接続するデュアルポート型FCディスクドライブであってもよく、またはブリッジインターフェイスカード6620を通って、内部FCループ6614および6616に対するインターフェイスをとるSATAディスクドライブ6618などのSATAディスクドライブであってもよい。ブリッジインターフェイスカードを用いることによって、SATAディスクドライブは、標準的なFCに基づくディスクアレイの内部FCループに適合されることができる。
図67は、ブリッジインターフェイスカードのブロック図レベルを例示する。ブリッジインターフェイスカード6702は、SCA−2FCデュアルポートコネクタ6704、SATAディスクが接続されるSATAコネクタ6706、ストレージブリッジ集積回路6708、および電圧変換構成要素6710、2つのクロック6712および6714、フラッシュメモリ6716およびさらなるMOSFET回路6718をはじめとする種々のさらなる構成要素を含む。
図68は、図67に示されるストレージブリッジ集積回路のブロック図レベル表現を示す。ストレージブリッジ集積回路は、2つのFCポート6804および6806、FCプロトコル層6808、グローバル共有メモリスイッチ6810、SATA層6812、SATAポート6814およびCPUコンプレックス6816を含む。図69は、CPUコンプレックス(図68の6816)をさらに詳細に示す。図68において2つのFCポート6804および6806は、FCプロトコルの物理層およびリンク層の機能性を提供し、ストレージブリッジ集積回路6802とFCループ(図66の6614および6616)との間のインターフェイスを原則的に提供し、ストレージブリッジインターフェイスカードをRAIDコントローラまたはエンクロージャI/Oカードにリンクする。FCP層6808は、エクスチェンジおよびシーケンスの管理、フレーム構造に関するタスクの管理、フロー制御およびサービスのクラスを伴う上位FCPプロトコル層を実装する。FCP層は、FCPエクスチェンジおよびシーケンスに関するコンテクストを管理し、FCP I/Oコマンドを調節する。グローバル共有メモリスイッチ6810は、FCポートからSATAポートにコマンドおよびデータを経路指定し、SATAポートからFCポートにデータを経路指定する時分割多重化非ブロッキングスイッチを提供する。SATA層6812およびSATAポート6814は、SATAプロトコルの物理層、リンク層およびトランスポート層を実装する。CPUコンプレックス6816は、管理機能、I/Oコマンドの作動および他の非データパスタスクに必要なストレージブリッジルーチンを実行する。したがって、ストレージブリッジ集積回路6802は、FCリンクとSATAディスクドライブとの間のスイッチおよびブリッジとして作用する。ストレージブリッジ集積回路は、FCコマンドをSATAコマンドに変換し、SATAドライブによって戻されるデータをFCPフレームにパッケージ化する。
<効率的な待ち行列管理>
本発明の種々の実施形態は、I/Oコントローラなどの消費デバイスが廃棄される待ち行列エントリを処理しないようにするために、ホストコンピュータが既に待ち行列に入れられたエントリを効率的に廃棄することを可能にするために、ホストコンピュータなどの生成デバイスによる待ち行列を効率的に管理するための方法に関する。本発明の方法は、PCIe/SAS I/Oコントローラと、PCIe/SAS I/Oコントローラが含まれる次の段落において「ホスト」と呼ばれるRAIDコントローラとの間で共有される、IRQの実施例を用いて以下で説明される。しかし、本発明は一般に、任意の2つ以上の電子デバイスに適用可能であり、少なくとも1つは待ち行列を共有する個別の集積回路として実装される。
図70は、図61〜図62を参照して上述したIRQを示す。図70および次に説明される図71A〜図71D、図72A〜図72D、図73および図74は、図70において用いられるのと同一の説明規則を用いる。IRQ7002は、円形待ち行列であり、待ち行列はメモリにおいて線状に配置されるが、生成デバイスによって次のエントリを配置するために、待ち行列の中の次の利用可能なスロットへのポインタと、モジュール算術増分を介して、円形方式で待ち行列を行き来する消費デバイスによる除去および消費のための次の待ち行列エントリへのポインタとを用いて、待ち行列が円形として計算上処理されることを意味する。図70において、0番目の待ち行列要素7004などの待ち行列要素のアドレスは、ベースアドレスとして表される記号アドレスA+1バイトオフセットによって示される。したがって、第1の待ち行列エントリ7004は、アドレスAから始まり、第2の待ち行列エントリ7006は、アドレスA+32で始まり、それぞれの次の待ち行列エントリは、前の待ち行列エントリに対して32バイトのオフセットで始まる。あるいは、待ち行列エントリは、ベースアドレスAから下位アドレスまで展開されてもよく、第2の待ち行列エントリは、A−32であり、次の待ち行列エントリは、前の待ち行列エントリから−32バイトのオフセットである。図70に示されるIRQにおいて、18個のエントリがある。IRQは、I/Oコントローラによるホストメモリからのアクセスのために、ホストメモリに維持される。
図70および次の図面は、水平破線7008によって分割され、ホストメモリは図の破線の上の部分として表され、I/Oコントローラメモリは破線の下の部分として表される。ホストメモリは、I/Oコントローラによって書き込まれ、ホストによって読み出されるIRQ_CIメモリ位置7010を含み、この位置は、消費子インデックス(「CI」)に対応する現在の値を格納し、本質的にI/Oコントローラによる消費に利用可能な次の待ち行列エントリへのポインタである。I/Oコントローラメモリは、(1)IRQ用の64ビットベースアドレスを含むIRQ_BASEメモリ位置7012、(2)待ち行列エントリにおいて、IRQの全体長さ−1、あるいは同等に待ち行列のベースアドレスから最も遠いIRQエントリのインデックスを格納するIRQ_LENメモリ位置7014、(3)IRQ_CIメモリ位置のホストメモリアドレスを格納するIRQ_CI_ADDRメモリ位置7016および(4)生成デバイスによる次の待ち行列エントリのエントリに関する待ち行列内の次のスロットを示す生成子インデックス(「PI」)に対応する値を格納するIRQ_PIメモリ位置7018を含む。別の実施形態において、上述のメモリ位置は、レジスタまたは、ホストおよび/またはI/Oコントローラの他の特殊値格納特徴部であってもよい。
図71A〜図71Dは、IRQの動作を示す。図71Aに示されているように、待ち行列が空である場合には、PI7018およびCI7010の両方は、同一の値を格納する。図71Aにおいて、IRQの0番目の要素7004を参照して示されるPIポインタ7102およびCIポインタ7104によってそれぞれ示されているように、値「0」を有するPIインデックスおよびCIインデックスの両方によって、IRQは、初期化されている。図71Bに示されるように、ホストがエントリをIRQの上に配置する場合には、ホストは、1つの待ち行列エントリまたはインデックスだけPI7018およびPI7102を進める。IRQを円形待ち行列として計算上処理するために、ホストは、PIを1だけ増分し、次に、PIをIRQ_LENメモリ位置+1におけるIRQの格納された長さを法とする増分されたPI値7014に設定する。
PI=(PI+1)mod(IRQ_LEN+1)
I/Oコントローラは、同様の方式でモジュロ算法を用いてCIを更新し、その結果、CIは、最終の待ち行列エントリから0番目の待ち行列エントリまで包み込む。
図71Cは、ホストまたは生成子によるIRQへの4つのIRQエントリの配置の後のIRQを示す。I/Oコントローラは、IRQエントリを未だに消費しなければならないため、CI7010および7104は依然として0番目エントリを参照しているのに対し、PI7018および7102は5番目のIRQエントリ7106を参照していることに留意されたい。図71Dは、I/Oコントローラによる第1のIRQエントリの消費後のIRQを示す。I/Oコントローラは、第2の待ち行列エントリ7006を参照するために、CI7010および7104を更新した。
ホスト/PCIe/SASコントローラインターフェイスの一部として上述したIRQおよび他の待ち行列は、ホストとI/Oコントローラとの間で共有され、ホストおよびI/Oコントローラが互いと通信することを可能にする。ホストおよびI/Oコントローラは、一般に異なる周波数で作動する個別の電子デバイスであり、同期通信の複雑さを回避するために、IRQおよび他の待ち行列を用いて非同期的に通信する。一旦、ホストまたは生成子がIRQエントリをIRQに配置し、PIを更新すると、生成子は、I/Oコントローラが既にエントリにアクセスしたかどうかを認識する方法がないために、生成子は、IRQエントリを容易に変更または除去することができない。I/Oコントローラは、ホストから非同期的に実行され、したがって、ホストによるIRQへの待ち行列エントリの配置の後、マイクロ秒以内に待ち行列エントリにアクセスし始めてもよい。しかし、1つの特徴は、I/Oコントローラインターフェイスに含まれており、ホストがIRQなどの特定の待ち行列をフリーズすることを決定したことをI/Oコントローラに信号発信することを可能にする。一旦、I/Oコントローラが、フリーズ信号を認識すると、ホストは次に、I/Oコントローラによる同時アクセスを恐れることなく、IRQを操作して変更することができる。
図72A〜図72Dは、IRQへの複数のIRQエントリを入力した後に、ホストがIRQを変更することを決定することができる実施例のシナリオ(構成)を示す。図72Aに示されているように、ホストは、消費するために、I/Oコントローラ用の第1のエントリを参照するCI7012および7104と、ホストによって次のIRQエントリを配置するための次の自由なIRQスロットを参照するPI7018および7102とを用いて、IRQへの総数14個の新たなIRQエントリを入力した。図72Aおよび以下に説明する図72B〜図72Dにおいて、IRQエントリは、記号X1,X2,...,X14によって表される。図72Aに示される時点で、ホストは、待ち行列エントリに関するより高位のエンティティに関連するエラーの検出をはじめとする種々の理由から、IRQエントリX47202およびX87204が除去されるべきであることを決定すると仮定する。
第一に、図72Bに示されるように、ホストは、スクラッチメモリ7208を割り当てて、IRQエントリ7006などのホストが保存したいIRQのエントリをスクラッチメモリの連続スロットにコピーし、IRQエントリ7006をIRQスロット7210にコピーすることから始まる。ホストがIRQから廃棄したいエントリ7202および7204は、スクラッチメモリ7208にコピーされない。次に、図72Cに示されるように、ホストは、元のIRQを廃棄し、ベースアドレスC7212を有する新たなIRQを割り当てて、スクラッチメモリ7208に保存されたIRQエントリを新たに割り当てられたIRQの連続IRQエントリ7214にコピーする。あるいは、新たなIRQを割り当てるのではなく、元のIRQが、スクラッチメモリの内容を元のIRQにコピーすることによって上書きされてもよい。最後に、図72Dに示されるように、新たなIRQが前のIRQとは異なる長さを有し、適切なIRQスロットを示すために、PI7018およびCI7010の値を設定する場合には、ホストは、IRQ_BASEメモリ位置7012、IRQ_LENメモリ位置7014を更新する。一旦、IRQインターフェイスを含むメモリ位置のすべてが更新されると、IRQのフリーズを解除することができ、I/OコントローラによるIRQエントリの処理を再開することができる。
図72A〜図72Dを参照して上述したIRQエントリ除去方法は、効果的であるが、比較的遅く非能率的である。スクラッチメモリ割り当ておよび待ち行列エントリのコピーは、著しい待ち時間と、I/Oコントローラ通信後の中断とをもたらす。したがって、ストレージシェルフルータ、I/Oコントローラ、ブリッジおよび他のデバイスのシングル集積回路実装の設計者および開発者は、生成デバイスが、図72A〜図72Dを参照して上述した複雑なメモリ割り当ておよび待ち行列エントリ複製方法を行うことなく、既に待ち行列に入れられた待ち行列エントリを廃棄することを可能にするIRQなどの共有待ち行列をさらに効率的に管理することの必要性を認識している。
図73は、本発明の一実施形態を示す。図73は、図70、図71A〜図71D、図72A〜図72Dにおいて用いられるのと同一の説明規則を用いる。しかし、IRQエントリ7302などのIRQ7300における各IRQエントリは、新たなフィールド、たとえば、IRQエントリ7302の場合にはフィールド7306を含む。新たなフィールドは、2つの値のうちの一方を有することができる。第1の値は、IRQエントリが有効であることを示し、通常の方式で消費デバイスによって処理されるべきであることを示す。第2の値は、IRQエントリは、消費デバイスによって処理されるのではなく、廃棄されるべきであることを示す。このフィールド用に1つのビットを割り当てて、IRQエントリが有効であることを示すために、値「0」などの第1のブール演算値を用い、IRQエントリが廃棄されるべきであることを示すために、対向する第2のブール演算値「1」を用いれば十分である。当然のことながら、ブール演算値の意味は、別の実施形態において逆転してもよく、2つの異なる値を表すために、より大きなフィールドを用いてもよい。
図74は、本発明の実施形態によるIRQエントリに含まれる廃棄フィールドの使用を示し、実施例において、図72A〜図72Bを参照して上述したIRQエントリ除去問題を示す。図74は、図72Aに示されたものと同一のIRQ状態を示す。この場合には、IRQエントリX47402およびX87404を除去するために、スクラッチメモリを割り当てて、スクラッチメモリに待ち行列エントリをコピーし、スクラッチメモリから待ち行列エントリをコピーするのではなく、ホストは、これらのエントリが処理されるべきではないことをI/Oコントローラに示すために、2つのエントリの廃棄フィールド7406および7408をブール演算値「1」に設定するだけである。廃棄フィールドの値の変更が、IRQに非同期的にアクセスするI/Oコントローラに起因して、意図しない効果を生成する可能性があるために、当然のことながら、ホストは最初に、エントリの中で、廃棄フィールドを新たな値に設定する前に、IRQをフリーズしなければならない。しかし、本発明の実施形態を表すIRQエントリの廃棄フィールドは、スクラッチメモリの割り当ておよび複数のIRQエントリコピー動作の必要性を排除する。
図75は、本発明の実施形態を表す上述したPCIe/SAS I/Oコントローラの一実施形態において用いられるIRQエントリを示す。図75に示されるように、IRQエントリ7502の第1の32ビットワードの最低のインデックスビットが、廃棄フィールドとして用いられる。
図76A〜図76Bは、図72A〜図72Dを参照して上述した現在利用可能なエントリ除去法、および図73〜図74を参照して上述した本発明の実施形態を表すさらに効率的な待ち行列エントリ除去法を表す制御フロー図を提供する。図76Aにおける制御フロー図に示される現在利用可能な方法において、ホストは、ステップ7602において、除去するためのエントリのリストを受信または決定する。次に、ステップ7604において、ホストは、IRQフリーズ信号をI/Oコントローラに送信することによって、IRQをフリーズする。ステップ7606において、ホストは次に、I/OコントローラからのIRQフリーズの確認を待機する。効果的にフリーズされたIRQを用いて、ステップ7608において、ホストは次に、スクラッチメモリを割り当て、ステップ7610〜7613のforループにおいて、ホストが廃棄したくないエントリをスクラッチメモリにコピーする。ステップ7614において、ホストは、新たなIRQを割り当て、ステップ7616において、スクラッチメモリに保存されたIRQメモリを新たなIRQにコピーする。ステップ7618において、ホストは、CI、PI、ベースアドレスメモリ位置を更新し、必要に応じて、IRQ−LENメモリ位置を更新し、次に、ステップ7620において、IRQのフリーズを解除する。
図76Bは、本発明の実施形態を示す新たな待ち行列エントリ除去方法を示す。ステップ7630、7632および7634は、上述した図76Aにおけるステップ7602、7604および7606と同一である。ステップ7636〜7638のforループにおいて、ホストは、除去されることになっているIRQエントリのすべてに関して、廃棄ビットをIRQエントリが廃棄されるべきであることを示す値に設定する。次に、ステップ7640において、ホストは、IRQのフリーズを解除する。図76Aおよび図76Bの制御フロー図を比較することによって認識されるように、新たな方法は、図72A〜図72Dを参照して上述した現在利用可能な方法より複雑ではなく、計算上より効率的である。
図77は、本発明の実施形態を表すIRQエントリ除去法の下でIRQエントリのI/Oコントローラ処理を示す。図77に示される制御フロー図は、ステップ7702およびステップ7704〜7707を含むエンドレスループである。ステップ7704において決定されるように、CIによって参照されるIRQエントリにおける廃棄ビットまたはフィールドが、エントリが処理されるべきではないことを示す値を含まない場合には、I/Oコントローラは、ステップ7705においてエントリを消費して処理する。エントリの処理後またはステップ7704においてIRQエントリが廃棄されるべきであることが検出された後、I/Oコントローラは、ステップ7706においてCIを更新する。ステップ7707において決定されたように、PIがCIに等しい場合には、待ち行列は空であり、制御はステップ7702に戻る。他の場合には、I/Oコントローラによって次の待ち行列エントリを待ち行列から取り出すために、制御は、ステップ7704に戻る。
本発明は、特定の実施形態に関して記載してきたが、本発明は、これらの実施形態に限定されることを意図していない。本発明の範囲内の修正は、当業者には明白であろう。たとえば、本発明の待ち行列管理方法の多数の異なるファームウェア、ハードウェアおよびソフトウェアの実装が、本発明による待ち行列を共有する2つの電子デバイスにおいて用いられてもよい。待ち行列は、円形待ち行列、線状待ち行列として処理されてもよく、または他の実装を有してもよい。上述したように、待ち行列エントリに導入される廃棄フィールドは、1ビットまたは何らかのより大きな数のビットを含んでもよい。廃棄フィールドで符号化される第1の値は、待ち行列エントリが依然として有効であることを示し、第2の値は、待ち行列エントリが待ち行列エントリの消費子によって廃棄されるべきであることを示す。上述した実施例は、ホストによって維持される待ち行列を必要とするが、他の実施例は、廃棄フィールドのクリアおよび設定を行うI/Oコントローラを用いて、I/Oコントローラの中で維持される待ち行列を必要としてもよい。さらなる実施形態において、追加動作または別の動作が、IRQエントリに加えられる追加フィールドの値の変更によって起動されてもよい。上記の説明は、IRQに関するが、本発明は、PCIe/SAS I/OコントローラとPCIe/SAS I/Oコントローラが含まれるRAIDコントローラとの間のインターフェイスを表す上述の共有待ち行列のいずれかに適用されてもよい。本発明は、生成デバイスと消費デバイスとの間で共有される任意の待ち行列に適用されてもよい。本発明によって管理される待ち行列は、生成デバイスまたは消費デバイスのいずれのメモリに常駐してもよく、または生成デバイスおよび消費デバイスによって共有される個別のメモリに常駐してもよい。別の実施形態において、PIおよびCIは待ち行列エントリ用の整数インデックスを含むものとして記載されるが、円形待ち行列用のPIおよびCIを増分するために用いられる動作を法とするアドレスを用いて、PIおよびCIは待ち行列エントリのアドレスを含んでもよい。
前述の説明は、説明目的のために、本発明の全体的な理解を提供するために具体的な用語を用いた。しかし、具体的な詳細は、本発明を実行するために必要ではないことは当業者には明白であろう。本発明の指定の実施形態の前述の説明は、例示および説明の目的のために提示され、網羅することも開示された正確な形態に本発明を限定することも意図していない。上述の教示に鑑みて多くの修正および変形が可能である。実施形態は、本発明の原理およびその実際的な用途を最もよく説明するために示され説明されており、それにより、当業者は検討される特定の用途に合わせて種々の変更を行い、本発明および種々の実施形態を最もよく利用することが可能となる。本発明の範囲は、以下の特許請求の範囲およびその等価物によって定義されることを意図している。