JP5250031B2 - 割り当て単位に基づく仮想フォーマッティング法および割り当て単位に基づく仮想フォーマッティング法を利用するデバイス - Google Patents

割り当て単位に基づく仮想フォーマッティング法および割り当て単位に基づく仮想フォーマッティング法を利用するデバイス Download PDF

Info

Publication number
JP5250031B2
JP5250031B2 JP2010514853A JP2010514853A JP5250031B2 JP 5250031 B2 JP5250031 B2 JP 5250031B2 JP 2010514853 A JP2010514853 A JP 2010514853A JP 2010514853 A JP2010514853 A JP 2010514853A JP 5250031 B2 JP5250031 B2 JP 5250031B2
Authority
JP
Japan
Prior art keywords
data
storage shelf
block
virtual
frame
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010514853A
Other languages
English (en)
Other versions
JP2010532520A (ja
Inventor
セバスチャン、ドニア
スティーブンズ、スチュアート
オーエンズ、ジェイソン
Original Assignee
エミュレックス デザイン アンド マニュファクチュアリング コーポレーション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エミュレックス デザイン アンド マニュファクチュアリング コーポレーション filed Critical エミュレックス デザイン アンド マニュファクチュアリング コーポレーション
Publication of JP2010532520A publication Critical patent/JP2010532520A/ja
Application granted granted Critical
Publication of JP5250031B2 publication Critical patent/JP5250031B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0661Format or protocol conversion arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Description

本発明は、数々の個別の大容量ストレージデバイスから構成されるディスクアレイおよび他の大容量ストレージデバイスに関し、さらに詳細には、割り当て単位に基づく仮想フォーマッティング法を利用するストレージシェルフルータ、I/Oコントローラ、ストレージブリッジ集積回路に関する。
<関連出願の相互参照>
本出願は、2007年1月19日出願の出願番号第11/655,778号の一部継続出願である。出願番号第11/655,778号は、2003年11月4日出願の出願番号第10/702,137号の一部継続出願であり、出願番号第10/702,137号は、2003年6月23日出願の出願番号第10/602,529号の一部継続出願であり、出願番号第10/602,529号は、2003年1月13日出願の出願番号第10/341,835の一部継続出願である。
ファイバチャネル(「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規格文書によって定義され、記載されている。
Figure 0005250031
Figure 0005250031
Figure 0005250031
表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」)コマンドが挙げられる。
Figure 0005250031
以下に提供される表3は、複数のATAコマンドに加えて、表2において上記で定義したように、コマンドが属するコマンドタイプを表す対応するプロトコルを列挙している。
Figure 0005250031
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ノードの累積的なノード遅延を被ることも留意されたい。したがって、ディスクアレイの設計者、製造者および利用者は、FCに基づくディスクアレイの中でディスクアレイコントローラおよびFCディスクを相互接続するために、さらに柔軟性があり、さらにコスト効率がよく、さらに効率的な方法の必要性を認識している。さらに、ディスクアレイの設計者、製造者および利用者は、ポート故障および他の通信および構成要素の故障のより簡単かつより高い信頼性の識別を可能にするFCに基づくディスクアレイの中で、ディスクアレイコントローラおよびFCディスクを相互接続するための方法の必要性を認識している。
<ディスクドライブのフォーマティングおよびエラー検出>
ディスクドライブ技術および実装は、他のタイプの大容量ストレージデバイスと同様に。発展し続ける。ディスクアレイ製作は、ディスクアレイにおいて、最もコスト効果がよく、技術的に高度なディスクドライブを用いることを期待している。しかし、ディスクアレイコントローラは、唯一または少数の現在利用可能なディスクドライブインターフェイスに対してインターフェイスをとるために実装されてもよいが、新たなフォーマティングの規則をはじめとする新たなインターフェイスを新たなディスクドライブに組み込むことは、ディスクアレイコントローラのコストおよび時間のかかるリエンジニアリングを必要とする。現在利用可能なディスクドライブは一般に、パリティチェックコードおよび他の技術を用いる原始的なエラー検査およびエラー補正を提供する。しかし、現在のディスクドライブによって提供されるこのレベルのエラー検査は、商用に用いられるディスクアレイストレージデバイスに関するエラー検出要件には不十分である可能性がある。さらなるエラー検出は、ディスクアレイコントローラにおいてプログラムされることができるが、ディスクアレイコントローラに基づく技術は、コストがかかり、複雑なディスクアレイコントローラソフトウェアおよびファームウェアの再実装を必要とする可能性があり、非効率的で、ディスクアレイコントローラとストレージデバイスとの間の増大するデータ転送を伴う可能性がある。さらに、ディスクアレイコントローラのエラー検出技術は、大量のディスクドライブ指定論理を必要とすることになる。
したがってディスクアレイおよび他の大容量ストレージデバイスの設計者、製造者および利用者は、ディスクアレイおよび他の大容量ストレージデバイスの中に新たなタイプのディスクドライブを組み込むため、およびディスクアレイコントローラを再実装する必要のないディスクアレイのエラー検出能力を増大させるためのコスト効果および効率のよい方法の必要性を認識している。
種々の実施形態において、本発明は、(1)ストレージシェルフルータと、ディスクアレイコントローラおよびホストコンピュータなどの外部計算エンティティにストレージシェルフが含まれるストレージシェルフと、(2)I/Oコントローラと、(3)ストレージブリッジデバイスと、を含む中間デバイスによって仮想ディスクフォーマティングを提供する。本発明の仮想フォーマティング法は、割り当て単位に基づき、各割り当て単位が、論理ブロックの連続シーケンスと、デバイスブロックの対応する連続シーケンスと正確に整列して共にマッピングするさらなるパッド領域と、を備える。
3つの異なるタイプのFC相互接続トポロジ(構成)を示す。 3つの異なるタイプのFC相互接続トポロジ(構成)を示す。 3つの異なるタイプのFC相互接続トポロジ(構成)を示す。 データがFCネットワークを介した転送のために時間において体系化される極めて簡素な階層を示す。 標準的なFCフレームの内容を示す。 SCSIバスを含む一般的なパーソナルコンピュータアーキテクチャのブロック図である。 SCSIバストポロジ(構成)を示す。 読み出しI/O動作および書き込みI/O動作の開始および実装に伴うSCSIプロトコルを示す。 読み出しI/O動作および書き込みI/O動作の開始および実装に伴うSCSIプロトコルを示す。 読み出しI/O動作および書き込みI/O動作の開始および実装に伴うSCSIプロトコルを示す。 図6A〜図6Cに記載されるイニシエータとターゲットとの間で交換されるSCSIシーケンスおよびSCSIバス段階および状態に対する、FCプロトコルのマッピングを示す。 図6A〜図6Cに記載されるイニシエータとターゲットとの間で交換されるSCSIシーケンスおよびSCSIバス段階および状態に対する、FCプロトコルのマッピングを示す。 ディスクアレイにおけるFCディスクの構成例を示す。 ディスクアレイにおけるFCディスクの構成例を示す。 ディスクアレイにおけるFCディスクの構成例を示す。 ディスクアレイにおけるFCディスクの構成例を示す。 図8A〜図8Dのために利用される説明の規則を用いて、本発明の一実施形態を表すストレージシェルフルータを示す。 本発明の一実施形態を表すストレージシェルフルータによって占められるコンピュータおよびディスクアレイの階層的に相互接続されるシステムの中の位置を示す。 本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。 本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。 本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの3つの異なる実装を示す。 本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの3つの異なる実装を示す。 本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの3つの異なる実装を示す。 2つのストレージシェルフルータとATAディスクドライブを相互接続するために適切なパスコントローラカードの2つの実装を示す。 2つのストレージシェルフルータとATAディスクドライブを相互接続するために適切なパスコントローラカードの2つの実装を示す。 ストレージシェルフルータの主要な機能構成要素を示す高位ブロック図である。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表す1つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。 本発明の一実施形態を表すストレージシェルフルータの論理構成要素のさらに詳細なブロック図を示す。 FCポート層のさらに詳細な図を示す。 ルーティング層のさらに詳細なブロック図を示す。 FCP層のさらに詳細なブロック図を示す。 SATAポート層のさらに詳細なブロック図を示す。 SATAポートのさらに詳細なブロック図を示す。 4ストレージシェルフルータ可用性ストレージシェルフの中のルーティングトポロジ(構成)を示す。 2ストレージシェルフルータの中のXおよびYのFCアービトレイテッドループ相互接続の抽象表現を示し、ディスクアレイの2ストレージシェルフの実装を示す。 本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのFCフレームのルーティングのために用いられるFCフレームヘッダの中のデータフィールドを示す。 本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのFCフレームのルーティングのために用いられるFCフレームヘッダの中のデータフィールドを示す。 本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのFCフレームのルーティングのために用いられるFCフレームヘッダの中のデータフィールドを示す。 本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのFCフレームのルーティングのために用いられるFCフレームヘッダの中のデータフィールドを示す。 本発明の一実施形態を表すストレージシェルフの中で、特定のFCポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのFCフレームのルーティングのために用いられるFCフレームヘッダの中のデータフィールドを示す。 ルーティング層によってFCフレームのルーティングを容易にするためにストレージシェルフルータの中に維持される7つの主要ルーティングテーブルを示す。 フロー制御図に用いられる簡素化されたルーティングトポロジ(構成)およびルーティング宛て先の命名法を提供する。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ルーティング層論理回路を記述する一連の階層的なフロー制御図である。 ATAおよびSATAディスクドライブおよびFCディスクドライブによって利用されるディスクフォーマティングの規則を示す。 ATAおよびSATAディスクドライブおよびFCディスクドライブによって利用されるディスクフォーマティングの規則を示す。 ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の512バイトに基づくディスクドライブへの520バイトのWRITEアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。 ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の512バイトに基づくディスクドライブへの520バイトのWRITEアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。 ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の512バイトに基づくディスクドライブへの520バイトのWRITEアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。 ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の512バイトに基づくディスクドライブへの520バイトのWRITEアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。 ストレージシェルフルータによる520バイトセクタに基づく仮想READ動作の実装を示す。 ストレージシェルフルータによる520バイトセクタに基づく仮想READ動作の実装を示す。 図37A〜図37Dに示される、仮想WRITE動作のストレージシェルフルータ実装を示す制御フロー図である。 図38A〜図38Bに示される、仮想READ動作のストレージシェルフルータ実装を示す制御フロー図である。 本発明の一実施形態を表す物理セクタへの仮想セクタのマッピング例を示す。 本発明の一実施形態を表す離散的な仮想フォーマティング実装における仮想セクタWRITEの様子を示す。 本発明の一実施形態を表すストレージシェルフに基づく離散的な仮想フォーマティング実装における仮想セクタWRITEの様子を示す。 ストレージシェルフルータが、ATAおよびSATAディスクドライブのエラー検出能力を強化することを可能にする2レベル仮想ディスクフォーマティングを示す。 図41に示される2仮想レベル実施形態における各第1位仮想の520バイトセクタにおけるストレージシェルフルータによって含まれるLRCフィールドの内容を示す。 CRC値の計算フローを示す。 エラーを検出するために仮想セクタのLRCフィールドに含まれるCRCフィールドに対して仮想セクタの内容の検査を示す。 エラーのために検索される仮想セクタを検査するために、ストレージシェルフルータによって利用される完全なLRC検査技術を示す制御フロー図である。 遅延されるLRC検査を示す。 受信された第2位512バイト仮想セクタにおける書き込み動作の完全なLRC検査を示す。 FC/SAS RAIDコントローラを利用するFCに基づくディスクアレイの中にSATAディスクドライブを組み込むための別の手法を示す。 FC/SAS RAIDコントローラのブロック図を示す。 SAS通信媒体のIX物理層を示す。 差分信号ペアの動作を示す。 異なる幅の複数の異なるSASポートを示す。 FC/SAS I/Oコントローラ(図52の5216)のための3つの異なる設定を示す。 デュアルコントローラディスクアレイにおいてFC/SAS I/OコントローラへのディスクドライブのSASに基づく接続を示す。 SASによってサポートされる3つの異なる通信プロトコルを示す。 2SASポートPCIe/SAS I/Oコントローラ設定における2SASポートへのデュアルコアRAIDコントローラCPUのインターフェイスを示す。 図52に示されるRAIDコントローラに含まれるPCIe/SAS I/Oコントローラ(図52の5216)のブロック図である。 FC/SAS I/Oコントローラ(図52の5216)とのRAIDコントローラインターフェイスのデュアルコアプロセッサ(図52の5214)で実行中であるRAIDコントローラが実行可能な、RAIDコントローラ/I/Oコントローラインターフェイスを示す。 図61を参照して上述したRAIDコントローラ/I/Oコントローラインターフェイスによるデータの流れを示す。 1バッファREADコマンドに関するスキャッタギャザリストを示す。 2バッファREADコマンドに関するスキャッタギャザリストを示す。 RAIDコントローラ/I/Oコントローラインターフェイスによって指定される整列されていないWRITE I/Oコマンドを示す。 ブリッジインターフェイスカードを用いることによって、FCディスクドライブに基づくディスクアレイの中のSATAディスクドライブの使用状態を示す。 ブリッジインターフェイスカードのブロック図である。 図67に示されるストレージブリッジ集積回路のブロック図である。 CPUコンプレックス(図68の6816)の詳細である。 ストレージシェルフルータ、RAIDコントローラ/I/Oコントローラまたはストレージブリッジなどの中間デバイスが、仮想フォーマティングを提供するとき、WRITE動作のために一般に必要なREAD修正動作を示す。 整列単位と、仮想ブロックがデバイスブロックより大きい場合に、整列単位に関する計算フローを示す。 仮想ブロックサイズがデバイスブロックサイズより小さい場合に、整列単位に関連するパラメータおよび計算フローを示す。 512バイトのデバイスブロック長さおよび520バイト〜576バイトの範囲の仮想ブロック長さに関して、整列単位に関するパラメータを示す表1を示す。 仮想ブロックWRITE動作のために指定された仮想ブロックの連続数を含むAUの最小の連続数の最初と最後の仮想ブロックアドレスの計算フローを示す。 本発明の一実施形態を表す二重抽象化法を示す。 長さ0〜120バイトの中間仮想ブロックパディングに関するAUに関するパラメータおよび特性を提供する表2を示す。 図76に示される表2に表されるトレードオフを示す。 2つのREAD修正動作を一般に伴う整列されていない仮想ブロック動作を示す。 2つのREAD修正動作を一般に伴う整列されていない仮想ブロック動作を示す。 2つのREAD修正動作を一般に伴う整列されていない仮想ブロック動作を示す。 2つのREAD修正動作を一般に伴う整列されていない仮想ブロック動作を示す。 2つのREAD修正動作を一般に伴う整列されていない仮想ブロック動作を示す。 過密型デバイスブロックリスト法を示す。 過密型デバイスブロックリスト法を利用する中間デバイスによって行われる仮想ブロックWRlTE動作の一部を示す制御フロー図である。 過密型デバイスリストに基づく方法の組み込みの一部として、中間デバイスのREAD動作およびWRITE動作に対する修正フローを示す。 仮想ブロックWRITE動作のために中間デバイスによって戻されるFCP応答フレームを示す。 境界ブロックの様子を示す図である。 仮想ブロックサイズがデバイスブロックサイズより小さい場合に、PCIe/SAS I/Oコントローラのための仮想フォーマティングの様子を示す。 本発明の一実施形態を表す1つの割り当て単位に基づく仮想フォーマティング法を示し、この割り当て単位に基づく仮想フォーマティング法を、前述のパディング論理ブロック/AUに基づく仮想フォーマティング法および整列単位に基づく仮想フォーマティング法と比較する図である。
本発明の一実施形態は、ストレージシェルフの中でディスクドライブを、次にディスクアレイコントローラまたは類似の高性能の大容量ストレージデバイスのコントローラとストレージシェルフを相互接続する高帯域幅通信媒体と相互接続するために、ディスクアレイのストレージシェルフまたは他の大きな個別に制御される大容量ストレージデバイスの中で、単独でまたは組み合わせて利用することができるストレージシェルフルータの集積回路実装である。記載された実施形態はまた、ディスクドライブと1つまたは複数のストレージシェルフルータとの間の冗長な通信リンクを提供するパスコントローラカードを含む。図8A〜図8Dを参照して上述したように、ディスクアレイは、ストレージシェルフの中でFC準拠のディスクドライブを現在利用してもよく、各FC準拠のディスクドライブは、1つまたは2つのFCアービトレイテッドループ、またはFC準拠のディスクドライブをディスクアレイコントローラと相互接続する他のFCファブリックトポロジ(構成)でFCノードとして作用する。対照的に、本発明の一実施形態を部分的に表すストレージシェルフルータは、ストレージシェルフの中でポイントツーポイントシリアル通信媒体によって各ディスクドライブと直接的に接続され、ファイバチャネルアービトレイテッドループなどの1つまたは複数の高帯域幅通信媒体を介してディスクアレイコントローラと相互接続される、中間通信ハブとして機能する。
<概要>
図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、IC 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、IC 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リンクは、Sファブリックと呼ばれ、ストレージシェルフルータ2508の中の内部ポイントツーポイントFCリンクは、Sファブリックと呼ばれる。本質的に、内部ポイントツーポイント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は、この方向インジケータの符号化を示す。
Figure 0005250031
ビットパターン「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コマンドとの間の対応関係を示す。
Figure 0005250031
<仮想ディスクフォーマティング>
種々の実施形態において、ストレージシェルフルータまたはストレージシェルフ内の複数のストレージシェルフルータは、仮想ディスクフォーマティングを提供することができ、異なる予想外のディスクフォーマティング規則が実際には、ストレージシェルフディスクドライブにおいて利用されるという事実にもかかわらず、ディスクアレイコントローラおよび他の外部処理エンティティが、ストレージシェルフ内のディスク用の予想されるディスクフォーマティング規則とのインターフェイスをとることを可能にする。仮想ディスクフォーマティングは、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)回の書き込み
対応して減少した書き込み効率は、
Figure 0005250031
仮想セクタが実際のディスクセクタにサイズが比較的近く、一般に、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回の読み出し
対応して減少した読み出し効率は、
Figure 0005250031
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
図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)回の書き込み
対応して減少した書き込み効率は、
Figure 0005250031
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
ストレージシェルフルータは、問題を検出し、外部処理エンティティに対してトランスペアレントである問題を補正するために、種々のさらなる技術を利用してもよい。たとえば、ストレージシェルフルータは、図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フレームにパッケージ化する。
<二重抽象化>
上述のように、「中間デバイス」と呼ばれるストレージシェルフ、PCIe/SAS I/Oコントローラまたはストレージブリッジが、一定の用途においてホストブロックとも呼ばれるより大きなサイズの仮想ブロックが、より小さいサイズのデバイスブロックにマッピングされる仮想フォーマティングを提供するとき、仮想ブロックWRITE動作は一般に、未整列の境界ブロックを伴い、これはWRITE動作に対して提供されない境界ブロックデータを得るために、最初に読み出し、次に、仮想ブロックWRITE動作に含まれる境界ブロックデータの一部の修正後に、ディスクに書き込まれなければならない。
図70は、ストレージシェルフルータ、RAIDコントローラ/I/Oコントローラまたはストレージブリッジなどの中間デバイスが、仮想フォーマティングを提供するときに、WRITE動作のために一般に必要とされるREAD修正動作を示す。図70は、図70に実線で示される対応する論理ディスクブロック7010、7012、7014、7016および7018に重ね合わせられる破線の矩形7002、7004および7006として図70に示される一連の仮想ブロックの仮想ブロックWRITE動作を示す。第1のデバイスブロック7010は、別の仮想ブロックに属する第1のデータ部分7020のほか、第1の仮想ブロック7002におけるデータの第1の部分に対応する第2のデータ部分7022を含む。同様に、最後のデバイスブロック7018は、最終の仮想ブロック7006の最終部分を含む第1の部分7024と、次の仮想ブロックに属するデータを含む第2の部分7026と、を含む。仮想ブロックWRITE動作は、バッファ7030に仮想ブロック7002、7004および7006用のデータのみを提供する。したがって、仮想ブロックWRITE動作を実行するために、第1のデバイス論理ブロック7010は、メモリバッファ7032(第1の境界バッファ)に読み出され、最終のデバイス論理ブロック7018は、第2のメモリバッファ7034(最後の境界バッファ)に読み出される。次に、メモリバッファ7030における第1の仮想ブロック7002の部分7038が、第1の境界バッファ7032の最終の部分に転送され、最終の仮想ブロックの部分7038が、最後の境界バッファの第1の部分に転送される。次に、デバイスブロックWRITE動作が、ディスクドライブに対して行われる。第1の境界バッファ7032は、第1のデバイスブロック7010に書き込まれ、デバイスブロック7012、7014および7016に対応するメモリバッファ7030に格納されたデータが、デバイス論理ブロック7012、7014および7016に書き込まれ、最後に、最後の境界ブロックバッファ7034の内容が、最終の論理デバイスブロック7018に書き込まれる。要約すると、仮想ブロック7002、7004および7006のWRITEは、境界デバイスブロック7010および7018のREAD修正動作、および非境界デバイス論理ブロック7012、7014および7016に対するWRITE動作に変換される。
READ修正動作は、特に少数のデバイスブロックを伴う個別のWRITE動作に関するデータ転送混乱およびデータ転送の非能率を生じる可能性がある。ブロックを最初に読み出して次に書き込むことは、回転サイクルの損失を伴い、ディスクドライブコントローラおよび物理ディスクドライブレベルにおけるREAD動作とWRITE動作との間の移行を伴う他の非能率を伴う可能性がある。このため、ストレージシェルフルータ、PCIe/SAS I/Oコントローラおよびストレージブリッジインターフェイスカードをはじめとする中間デバイスの設計者および製造者は、未整列の仮想ブロックWRITE動作中にデバイス境界ブロックにおけるREAD修正動作によって生じる非能率およびデータ転送の混乱を被ることなく、仮想フォーマティングを提供する必要性を認識している。
未整列の仮想ブロックWRITE動作中に境界ブロックに関するREAD修正動作を除去するための1つの手法は、仮想ブロックにおいてWRITE動作の粒度を拡大し、整列単位を含む最小に対応するようにすることである。整列単位(「AU」)は、デバイスブロックの対応する集合と正確に整列された仮想ブロックの連続集合である。仮想ブロックではなく、AUを書き込むことによって、未整列の仮想ブロックWRITE動作は生じない。
図71は、仮想ブロックがデバイスブロックより大きい場合の整列単位と、整列単位に関する計算を示している。図71において、実線7102で表されるデバイスブロックのシーケンスは、図の中央部分に水平方向に表示される。デバイスブロックは、n,n+1,n+2,...,n+8と番号付けされる。デバイスブロックの番号付けは、デバイスブロック7102の表示の下に示される。垂直方向の破線を用いて、対応する仮想ブロックの表示が、デバイス論理ブロックの表示の上に重ね合わせられる。仮想ブロックは、仮想ブロック番号、m,m+1,m+2,...,m+7でラベル付けされる。仮想ブロックの番号付けは、デバイスブロック7102の表示の上に示される。仮想ブロックのサイズとデバイスブロックのサイズとの間の差Δ7104は、第1のデバイスブロックnの上位アドレス境界7106と第1の仮想ブロックmの上位アドレス境界7108との間の距離として、図71のように示されている。AU7110の中の連続ブロックに関して、連続デバイスブロックの上位アドレス境界と連続仮想ブロックの上位アドレス境界との間のバイト単位の距離は、各連続デバイスブロックおよび仮想ブロックに関してΔだけ増大する。たとえば、仮想ブロックm+1の上位アドレス境界の位置とデバイスブロックn+1の位置の間の差は、2Δ(図71の7112)である。576バイトの仮想ブロック長さおよび512バイトのデバイスブロック長さは、図71に示される実施例を生成するために用いられた。しかし、図71に示されるパラメータおよび計算は一般に、適用される。
図71に示される特定の場合において、1つのAU7110の中に8個の仮想ブロックおよび9個のデバイスブロックがある。AUは連続的に、デバイスブロック空間および仮想ブロック空間に広がる。AUは、デバイスブロック空間および仮想ブロック空間の両方に同時にマッピングされることができる超仮想ブロックとみなされることができる。AUにおいて、第1のデバイスブロックnおよび第1の仮想ブロックmは、下位アドレスブロック境界に完全に整列され、最終のデバイスブロックn+8および最終の仮想ブロックm+7は上位アドレスブロック境界に完全に整列された。AUにおける仮想ブロックの数virtualPerAUは、以下のように計算される。
Figure 0005250031
式中、LCM(x、y)は、最小公倍数の関数であり、nx*ny=mに関する最小のmを返し、n、nは整数である。
deviceLenは、デバイスブロックの長さであり、
virtualLenは、仮想ブロックの長さである。
AUの中のデバイスブロックの数devicePerAUは、以下のように計算されることができる。
Figure 0005250031
下位アドレスAU境界7114で、AUにおける第1のデバイスブロックのデバイスブロックアドレスnは、AU当たりのデバイスブロックの数によって等しく分割可能である。同様に、AUにおける第1の仮想ブロックの仮想ブロックアドレスmは、AUにおける仮想ブロックの数または仮想ブロックによって等しく分割可能である。さらに、nが周知であるとき、mは以下のように計算されることができる。
Figure 0005250031
仮想ブロックアドレスmが周知であるとき、デバイスブロックnは以下のように計算されることができる。
Figure 0005250031
仮想ブロックWRITE動作中のREAD修正動作を回避するために、書き込まれることになっている仮想ブロックを含む連続AUの最小数が、代わりに書き込まれるべきである。たとえば、図71に示される実施例において、仮想ブロックm+3およびm+4が、仮想ブロックm+3およびm+4のみに書き込まれるのではなく、仮想ブロックWRITE動作において書き込むために指定され、デバイスブロックn+3およびn+5におけるREAD修正動作のほか、デバイスブロックn+4の書き込みを伴う場合には、AU7110を含む全体が、代わりに書き込まれる必要がある。全体的なAUまたはAUの連続シーケンスが書き込まれる場合には、READ修正動作を必要とする整列および境界ブロックはない。
図72は、仮想ブロックサイズがデバイスブロックサイズより小さい場合の、整列単位に関連するパラメータおよび計算を示す。図72は、図71に用いられるものと同一の説明の規則を用いる。図72に示される計算は、種々の項の符号のみが、図71に示されるものと異なることが容易に観察される。
図73は、512バイトのデバイスブロック長さおよび520バイト〜576バイトの範囲の仮想ブロック長さに関する整列単位に関連するパラメータを示す表6を示す。表6において、仮想ブロック長さとデバイスブロック長さとの間の差のサイズΔは、各デバイスブロック長さ/仮想ブロック長さの組み合わせに関して示され、Δによって表される仮想ブロック長さの割合が、最終列に示される。表6において分かるように、長さΔが、第1の行7302の8から最後の行7304の64まで増大されるため、Δによって表される仮想ブロック長さの割合は、1.5%から11.1%にまで増大する。しかし、AU当たりのデバイスブロックの数は、65から9に減少する。
前段落において説明されるように、ストレージシェルフルータおよび他の中間デバイスのある実施形態において、仮想ブロック長さとデバイスブロック長さとの間のΔは、デバイスレベルに含まれるさらなるエラー検出データおよびエラー補正データを含むために導入されてもよい。他の実施形態において、Δは、ホストコンピュータなどのより高位のエンティティに適用されるブロックとデバイスブロックとの間の長さにおける差を表す。
図74は、仮想ブロックWRITE動作に関して指定された仮想ブロックの連続数を含むAUの最小連続数の最初の仮想ブロックアドレスおよび最終の仮想ブロックアドレスの計算を示す。図74において、2つの仮想ブロック7402は、書き込みのために指定される。第1の仮想ブロックは、アドレスVLBAinitialを有し、最後の仮想ブロックは、仮想ブロックアドレスVLBAfinalを有する。AUの最小のシーケンスの第1の仮想ブロックの仮想ブロックアドレスは、図74に示されるように、以下のように計算されることができる。
Figure 0005250031
AUの最小のシーケンスの最終の仮想ブロックは、以下のように計算される。
Figure 0005250031
図71に関して上述したように、AUの左端および右端におけるデバイスブロックのデバイスブロックアドレスは、AUの第1のブロックの仮想ブロックアドレスから容易に計算される。
図75は、本発明の一実施形態を表す二重抽象化法を示す。図75に示されているように、抽象化7502の第1のレベルで、520バイト仮想ブロックは、520バイト仮想ブロックをSATAディスクドライブの512バイトデバイスブロックに最終的にマッピングするストレージシェルフルータ、PCIe/SAS I/Oコントローラまたはストレージブリッジ集積回路などの中間デバイスによってサポートされる。前の小段落で説明したように、Δ差7504などの520バイト仮想ブロックと512バイトデバイスブロックとの間のΔ差は、さらなるエラー検出データおよびエラー補正データを含んでもよい。上述のように、未整列の仮想ブロックWRITE動作におけるREAD修正動作を回避するためのAUに基づく技術が、用いられることになっており、図73の表6に示されているように、AU当たりのデバイスブロックの数は、65となる。したがって、WRITE動作に関するバイト単位の粒度(granularity)は、32.5Kとなる。一定の場合には、32.5Kの粒度WRITE動作は、READ修正動作を回避することによって、未整列の仮想ブロックWRITE動作のためのREAD修正動作を有する512バイト粒度WRITE動作よりよいデータ転送効率を提供してもよい。しかし、他の場合には、特に、各WRITE動作において転送される余分なバイトが効果的にキャッシュに格納されることができず、次のREAD動作のために再使用されることができない場合には、32.5Kの粒度WRITE動作は、READ修正動作の回避にもかかわらず、データ転送効率にほとんどまたは全く改善を得られない結果に終わる可能性がある。したがって、本発明の一実施形態において、520バイト仮想ブロックは、さらに大きな中間仮想ブロック7504にマッピングされ、各中間仮想ブロックが520バイト仮想ブロックの520バイトのほか、中間仮想ブロック7510におけるパッド7508などのさらなる長さのパディングバイトを含む。中間仮想ブロックは次に、仮想フォーマティングの第2のレベルによって、512バイトデバイスブロック7512にマッピングされる。
図76は、長さ0〜120バイトの中間仮想ブロックパディングのためのAU関連パラメータおよび特性を提供する表7を示す。図76において分かるように、パッド長さが第1の行7604における0から最後の行7606における120バイトまで増大するとき、AU当たりのデバイスブロックの数は、65から5に減少する。したがって、たとえば、8の長さのパッド長さを用いることにより、表7の行7608に示されているように、AU当たりのデバイスブロックの数は33となり、パディングバイトが用いられない33KBの粒度WRITE動作ではなく、16.5KBの粒度WRITE動作を生じる。しかし、表7の最後の列7606に示されているように、パディングによって表される無駄空間の量は、パディングが用いられないときの0%から各中間仮想ブロックに関して120バイトのパディングが用いられる時の23%まで増大する。一般にパディングバイトのための使用はないため、パディングに用いられるバイトの数は本質的に無駄空間である。したがって、無駄空間は、AUのサイズを減少することと引き換えられ、それにより、WRITE動作の粒度を減少させる。
図77は、図76に示される表7に表されるトレードオフを示す。8バイトの倍数であるパッドサイズが、水平軸7602にプロットされる。左側の垂直軸7604には、AU当たりのデバイスブロックの数がプロットされる。曲線7608は、パッドサイズの関数として、AU当たりのデバイスブロックの数を表す。図77においてグラフによって表示されているように、AU当たりのデバイスブロックの数およびしたがって、WRITE動作の粒度は、最初はパッドサイズの増大と共に、24バイトのパッドサイズまで急速に減少し、その後で、24バイトから120バイトまではるかに緩慢に減少する。無駄空間の割合は、右側の垂直軸7610にプロットされる。線7612は、パッドサイズの関数として、無駄空間の割合を表す。図77において分かるように、無駄空間の割合は、パッドサイズに対して線形に増大する。したがって、AU長さ対無駄空間の割合を最適化することは、第1の解析において、8バイト〜56バイトの比較的小さいパッドサイズの場合に優先傾向を示す。しかし、パッドサイズの選択時に、さらなる考慮事項が一般に適用される。多くの場合には、ディスクドライブおよび通信システム、データがディスクドライブに転送される中間デバイスの物理特性に応じて、最適の仮想ブロックWRITE動作粒度がある。本発明の一実施形態において、512バイトのデバイスブロックにマッピングされる520バイトの仮想ブロックの場合には、8バイトのパッドサイズが最適であることが分かっている。図77に示されるグラフにおける曲線の形状が、8ブロックの倍数のパッドサイズに特有であることに留意すべきである。他のパッドサイズの場合には、異なる曲線が得られるであろう。
<過密型デバイスブロックリスト>
前の小段落で説明したように、未整列の仮想ブロック動作は一般に、2つのREAD修正動作を伴う。図78A〜図78Cは、未整列の仮想ブロック動作を示す。図78Aにおいて、書き込まれることになっているデータ7802は、一連の仮想ブロックVB0,VB1,...,VBnからなり、バッファ7804から対応するデバイスブロック7806〜7810に転送される。対応する仮想ブロックは、デバイスブロックに対する仮想ブロックデータの位置を示すために、破線の矩形に重ね合わせられた。前の小段落で説明したように、未整列の仮想ブロックWRITE動作は、境界デバイスブロック7806および7810をバッファ7804(図78Bに図示)の対応する位置に最初に読み出して、次に、図78Cに示されているように、WRITEデータ7802をバッファ7804に転送し、最後にバッファをデバイスブロック7806〜7810に書き込むことによって実行される。図78A〜図78Cにおいて、書き込まれることになっているデータは、黒い網掛けで示され、隣接する仮想ブロックに属する境界ブロックに書き込まれるデータは、ハッシング(hashing)で示される。
しかし、図78Dに示されているように、READ修正動作のREAD部分が機能しなかった場合を考える。この図において、バッファ7804の元の内容が、小さなディスクとして示される。この場合には、図78Eに示されているように、バッファ7804への書き込みのためのデータの転送7802およびデバイスブロック7806〜7810へのバッファの転送が、前の仮想ブロックの最終の部分7820および次の仮想ブロックの第1の部分7822に書き込まれているメモリバッファからの初期化していないデータを生じる。言い換えれば、図78Dに示されるREAD修正動作のREAD部分の不具合は、境界ブロック7806および7822の内容の破壊、または対応して、前の仮想ブロックおよび次の仮想ブロックの破壊を生じる。
一般に、ディスクアレイは、失敗したREAD−MODIFY−WRITE動作に起因する、境界ブロックの破壊を補正するために、十分に冗長なデータを含む。しかし、中間デバイスによって実行されたプロトコル間の変換、および一定のディスクアレイの実施形態における中間デバイスによって促進されるノンネイティブディスクドライブの使用のために、そのような破壊の識別および補正は、簡単ではない。本発明の一実施形態は、仮想ブロックWRITE動作中の失敗したREAD修正動作から生じるデバイスブロックの破壊を検出してフラグを立てて、RAIDコントローラなどのより高位のエンティティによって補正されるまで、そのような破壊を追跡するために、中間デバイス用の手段を提供する。
図79は、過密型デバイスブロックリスト法を示す。7つのデバイスブロック7904に広がる5つの仮想ブロック7902の仮想ブロックWRITE動作を考える。前の図と同様に、仮想ブロックは、垂直破線によって境界を定められ、デバイスブロックは、垂直実線によって示される。図79において、「X」記号7906および7907によって示されるように、2つの境界ブロックREAD動作が失敗する場合を考える。この場合には、図79において、破線7914および7915によってそれぞれ示されるように、ディスクドライブは、2つの失敗したデバイスブロック7910および7911を疎なブロック7912および7913に自動的に再マッピングされてもよい。次に、仮想ブロックWRITE動作のWRITE動作部分は、仮想ブロックデータを5つの非境界デバイスブロック7916に書き込み、失敗したREAD動作により破壊された境界ブロックデータを、READ動作が失敗した2つのブロック7910および7911に取って代わった疎なブロック7912および7913に書き込む。READ修正動作のREAD動作部分が失敗したことを検出すると、中間デバイスは、2つの新たなエントリ7918〜7919を過密型デバイスブロックリスト7920に追加する。これらのエントリは、2つの破壊されたブロックのデバイスブロックアドレスを参照する。スパーリング(sparing)は一般に、中間デバイスおよびより高位のデバイスに対してトランスペアレントであるため、疎なブロック7912および7913のデバイスブロックアドレスは、失敗したブロック7910および7911のデバイスブロックアドレスと同一であることに留意されたい。同時に、中間デバイスは、RAIDコントローラなどのより高位の検査状態7922を発して、仮想ブロックWRITE動作中に生じた境界ブロック破壊のより高位を通知する。
中間デバイスは、物理的なREAD動作を行う前に、過密型デバイスブロックリスト7920を調べることから、破壊されたブロック7912および7913が再書き込みされるまで、破壊されたブロックのいずれかを読み出す試みは、中間デバイスによって、結果として検査状態7924を発する。一旦、破壊されたデバイスブロックが再書き込みされると、図79の最終の部分に示されているように、過密型デバイスブロックリスト7920上の前に破壊されたブロックに関するエントリが、除去される。
RAIDコントローラは、元の仮想ブロックWRITE動作の失敗によって発せられた検査状態を調べるときに、破壊を生じた仮想ブロックWRITE動作に書き込まれた仮想ブロックと重なる仮想ブロックのわずかに大きなシーケンスに補正データを書き込むことによって、破壊を補正することができる。別の場合には、破壊されたブロックは、任意の読み出しの試みの前に、WRITE動作によって補正されてもよい。
図80は、過密型デバイスブロックリストに基づく方法を利用する中間デバイスによって行われた仮想ブロックWRITE動作の一部を示す制御フロー図である。図80は、図81を参照して以下に説明されるWRITE動作修正を省略する。ステップ8002において、中間デバイスは、仮想ブロックWRITE動作用のデータおよび仮想ブロックアドレスを受信し、書き込まれることになっている対応するデバイス論理ブロックを計算する。ステップ8004において決定されるように、WRITE動作が1つの境界または両方の境界で未整列である場合には、ステップ8006において、1つまたは複数の境界ブロックは、バッファに読み出される。ステップ8008において決定されるように、これらの1回または2回のREAD動作がエラーを返す場合には、ステップ8010において過密型デバイスブロックリストにおける読み出しに失敗した各境界ブロックに関するエントリが行われ、READエラーが生じたという事実が、ステップ8012において指摘される。次に、ステップ8014において、仮想ブロックデータが、デバイスへの書き込みのために、デバイスブロックに整列されたバッファに重ね合わせられる。次に、ステップ8016において、デバイスブロックに整列されたバッファが、ディスクに書き込まれる。ステップ8018において、応答が準備される。ステップ8020において決定されるように、WRITEエラーがディスクブロックの書き込み中に生じた場合には、ステップ8022において、応答が修正され、WRITEエラーの発生を表す。ステップ8024において決定されるように、WRITEエラーによって隠されないREADエラーが生じた場合には、READエラーの表示が応答に追加される。その上、ステップ8028において、図79(7922)を参照して上述したように、検査状態が発せられる。
図81は、過密型デバイスリストに基づく方法を中間デバイスに組み込む一部として、中間デバイスのREAD動作およびWRITE動作に対する修正を示す。READ動作中、物理的読み出しを発する前に、ステップ8102で得られる、読み出されることになっているデバイスブロックのデバイスブロックアドレスが、ステップ8104において、過密型デバイスブロックリストの内容に対して検査される。読み出されることになっているブロックのいずれかが、過密型デバイスブロックリストにおいて指摘される場合には、ステップ8106において、READ動作の結果で検査状態を発するための必要性の指摘が行われる。検査状態が発せられることになっているブロックの物理的なREADが、試みられるわけではない。ステップ8110から示されるWRITE動作の部分は、デバイスへのデバイスブロックの成功した書き込み時に、首尾よく書き込まれたデバイスブロックのいずれかが、過密型デバイスブロックリストにおいてエントリによって現在参照付けられるときに、過密型デバイスブロックリストにおけるエントリが、ステップ8112において除去されることを示す。ステップ8111および8112は、図80に示される仮想ブロックWRITEルーチンでステップ8020と8024との間に挿入されると考えることができる。
図82は、仮想ブロックWRITE動作用の一定の中間デバイスによって返されるFCP応答フレームを示す。応答フレーム8202は、FRU CODEフィールド8204を含み、これは一方または両方の境界ブロックの読み出しが失敗したかどうかを表すために、数字で符号化された値を用いる。失敗の場合には、失敗したブロックの論理ブロックアドレスが、情報フィールドまたは情報フィールドおよびコマンド指定情報フィールドの両方に配置され、FCP_SNS_INFOフィールドのVALIDビットが設定される。応答フレームに含まれる情報は、上述したように、破壊を積極的に修復するために、RAIDコントローラによって用いられることができる。
<PCIe/SAS I/Oコントローラ用の仮想フォーマティング法>
前の小段落において、PCIe/SAS I/Oコントローラのアーキテクチャは、図52および図60〜図62を参照して説明した。このアーキテクチャの特徴は、仮想ブロックWRITE動作中に、境界ブロック用のREAD修正動作中にディスクからのデータの読み出しを格納するために、PCIe/SAS I/Oコントローラによって用いられるバッファが、PCIe/SAS I/Oコントローラメモリではなく、RAIDコントローラメモリバッファ(図52の5212)に含まれることである。このため、未整列の仮想ブロックWRITE動作は、以下に記載するように、さらなる境界ブロックを含んでもよい。このため、仮想フォーマティングの計算および方法は、前の小段落に記載したストレージシェルフルータにおいて用いられる計算および方法とはPCIe/SAS I/Oコントローラで異なる。
図83は、さらなる境界ブロックの必要性を示す。図83において、RAIDコントローラメモリ8302は、仮想ブロックマップ8304と整列されることが示されており、この仮想ブロックマップ8304は次に、前の図において用いられた説明の規則を用いて、仮想ブロックが中間デバイスによってマッピングされる対応するデバイスブロック8306と整列される。2つのブロックの仮想ブロックWRITE動作を考える。2つの仮想ブロック8308は、デバイスに書き込まれることになっている。上述のように、未整列である仮想ブロックWRITE動作が、デバイス境界ブロック8310および8312に向けられるREAD修正動作を必要とする。しかし、READ修正動作のREAD動作部分によって読み出されるデータは、PCIe/SAS I/OコントローラからPCIeリンクを通ってPCIeルートコンプレックスおよびRAIDコントローラメモリ(図52の5210および5212)に送信される必要があるため、中間デバイスは、全体的な隣接仮想ブロック8315および8318用のバッファの内容を満たすために、さらなる境界ブロック8314および8316にさらなる情報を得ることが必要である。言い換えれば、デバイスブロックへの2つの仮想ブロックのマッピングは、デバイス境界ブロック8310および8312を結果として生じるが、書き込まれることになっている仮想ブロックに属さないこれらの2つの境界ブロックにおけるデータの部分は、隣接仮想ブロックに対応するホストメモリのメモリバッファに格納されなけばならず、隣接仮想ブロック8315および8318の内容全体を得るために、さらなるデバイス境界ブロック8314および8316の読み出しを必要とする。ブロックの内容は、転送中にエラー状態のために検査される可能性があり、これらの検査は、隣接仮想ブロックが有効データを含まない限り、失敗となることから、隣接仮想ブロックの部分的な内容は、RAIDコントローラメモリに転送されることはできない。
図84は、仮想ブロックサイズがデバイスブロックサイズより小さい場合に、PCIe/SAS I/Oコントローラに関する仮想フォーマティングの考慮事項を示す。図84は、図83において用いられるのと同一の説明の規則を用いる。図84は、2つの仮想ブロックの3つのセグメント用の仮想ブロックWRITE動作を示す。すなわち、(1)2つの対応するデバイスブロック8404と右側で整列される第1のセグメント8402、(2)2つの対応するデバイスブロック8408と左側で整列される第2の仮想ブロックセグメント8406および(3)2つの対応するデバイスブロック8412と完全に整列される第3の仮想ブロックセグメント8410である。3つのすべての場合において、仮想ブロック長さがデバイスブロックの長さを超える場合と同様に、その全体において、RAIDコントローラメモリに送信される必要がある隣接仮想ブロックを完全に満たすために、各境界ブロック用のさらなるデバイスブロックは、読み出される必要があってもよい。したがって、仮想ブロック8402の仮想ブロックWRITE動作に関して、隣接仮想ブロック8418を完全に満たすために、境界ブロック8416の前のさらなるデバイスブロック8414が、読み出される必要がある。
未整列の仮想ブロック書き込みに関して、RAIDコントローラは、PCIe/SAS I/Oコントローラに、各未整列の仮想ブロックセグメント境界に隣接するさらなるRAIDコントローラ仮想ブロックバッファを備えなければならない。RAIDコントローラによって供給される仮想ブロックバッファを完全に満たすために、PCIe/SAS I/Oコントローラは、各未整列の境界に関して、境界ブロックだけでなく、さらなる隣接デバイスブロックを読み出す必要がある。
PCIe/SAS I/Oコントローラのために必要な仮想フォーマティング計算は、以下のC++のような擬似コードでカプセル化される。第一に、複数の定数およびタイプの定義が提供される。
Figure 0005250031
定数「VBSZ」は、仮想ブロックサイズである。定数「DBSZ」は、デバイスブロックサイズである。定数「VperAU」および「DperAU」はそれぞれ、整列単位における仮想ブロックの数およびデバイスブロックの数である。定数「AUSZ」は、整列単位におけるバイト数である。タイプ「bufptr」は、文字ポインタである。
次に、複数のルーチンが宣言される。
Figure 0005250031
ルーチン「LCM」は、独立変数「x」および「y」として供給される2つの数の最小公倍数を計算し、計算された最小公倍数を戻り値として返す。ルーチン「DRead」は、指定したポインタに指定した数のデバイスブロックを読み出す物理的なデバイスブロックREADユーティリティであり、アドレス「Ds」を有するデバイスブロックから始まる。ルーチン「DWrite」は、指定したポインタからアドレス「Ds」を有するデバイスブロックで始まるデバイスまで指定された数のデバイスブロックを書き込む物理的なデバイスブロックWRITEユーティリティである。ルーチン「LCM」が一般に利用可能な数学ライブラリルーチンであり、物理的なREADルーチンおよびWRITEルーチンは、本説明の範囲を超えるほか、デバイスおよびコントローラオペレーティングシステムに左右されるため、これらのルーチンの実装については提供しない。
次に、ルーチン「computeFirstLevelMapping」は、指定した仮想ブロックアドレスおよび仮想ブロックの数から、対応する最初のデバイスブロックアドレス「Ds」、最後のデバイスブロックアドレス「Df」、第1のデバイスブロックにおける未使用のバイト「DsX」および最後のデバイスブロックにおける未使用のバイト「DfX」を計算する。
Figure 0005250031
6行目では、仮想ブロックの指定された実行の後の第1の仮想ブロックの仮想ブロックアドレスが、計算される。7行目では、第1の仮想ブロックのバイトアドレスが、計算される。8〜12行目では、デバイスブロックの対応する実行において未使用のバイトの最初の数および最後の数と共に、第1のデバイスブロックアドレスおよび最後のデバイスブロックアドレスが計算される。
次に、ルーチン「computeAUMapping」は、指定された最初のデバイスブロックアドレスおよび最後のデバイスブロックアドレスに関するデバイスブロックの実行を含む整列単位の最小の実行に関する最初のデバイスブロックアドレスおよび最後のデバイスブロックアドレスを計算する。
Figure 0005250031
次に、第1の仮想ブロックアドレス「Vs」で始まる指定した数の仮想ブロック「numBlocks」に対応するデバイスブロックを読み出し、仮想ブロックの内容をポインタ「buffer」によって参照されるバッファに配置するルーチン「VRead」が、提供される。
Figure 0005250031
ルーチン「VRead」は、6行目で関数「computeFirstLevelMapping」を呼び出すことによって、対応するデバイスブロックアドレスを最初に計算する。8行目で決定されるように、第1の仮想ブロックが整列されていない場合には、10〜13行目で、第1のデバイスブロックは、スクラッチバッファに読み出され、1つまたは複数の最初の仮想ブロックに対応する部分が、バッファに転送される。次に、第1のデバイスブロックと最後のデバイスブロックとの間にさらなるデバイスブロックがある場合には、17〜18行目で、それらがバッファに読み出される。20行目で決定されるように、最後のデバイスブロックが整列されていない場合には、22〜23行目で、最後のブロックが、スクラッチバッファに読み出され、適切なバイトがバッファに転送される。別の場合には、25行目で、最後のデバイスブロックが、バッファに直接的に読み出される。
次に、仮想ブロックの実行を整列単位を含む1つまたは複数の対応する実行に変換し、変数における整列単位の実行の仮想ブロックアドレスを返し、戻り値として整列単位の数を返す、ルーチン「VGetAU」が提供される。ルーチン「VGetAU」は、デバイスへの書き込みのために、仮想ブロックの実行を整列単位の実行に変換するために呼び出される。
Figure 0005250031
最後に、複数の整列単位をデバイスに書き込むルーチン「VWrite」が提供される。
Figure 0005250031
<本発明の一実施形態を表すストレージシェルフルータ、PCIe/SAS I/Oコントローラおよびストレージブリッジ用途のための別の仮想フォーマティング法>
「二重抽象化」と題した小段落で上述したように、大きな整列単位(「AU」)を用いるのではなく、または同段落で上述したより短いAUにおけるパッドされた論理ブロックを用いるのではない別の仮想フォーマティング法において、割り当て単位(「ALU」)と呼ばれるアクセスのより小さい単位が、一定数の論理ブロックおよび対応する一定数のデバイスブロックから構成され、パディングが、論理ブロック境界およびデバイスブロック境界の両方に対して割り当て単位境界をそろえるために、割り当て単位の終わりに利用される。割り当て単位に基づく仮想フォーマティングは、パッド型論理ブロック/AUに基づく仮想フォーマティングの利点の多くを提供するが、大容量ストレージデバイスアクセスパターンおよび特定のデータストレージシステムの制約特性の下で、中間デバイスから大容量ストレージデバイスへのデータ転送速度を最適化するためにより著しい能力を提供することができる。
図85は、本発明の一実施形態を表す1つの割り当て単位に基づく仮想フォーマティング法を示しており、割り当て単位に基づく仮想フォーマティング法を、前述のパッド型論理ブロック/AUに基づく仮想フォーマティング法および整列単位に基づく仮想フォーマティング法と比較する。図85において、デバイスブロックのシーケンスは、第1の水平行8502に示される。次に、論理ブロックまたは仮想ブロックの対応する集合が、デバイスブロック行8502と整列される第2の水平行8504に示される。前の小段落において説明したように、整列単位8506は、整列単位8508の左側縁および整列単位8510の右側縁の両方で完全に整列されるデバイスブロックおよび対応する論理ブロックの連続集合である。図85に示される実施例において、整列単位8506は、8個の論理装置または論理ブロックおよび9個のより小さなデバイスブロックを含む。前の小段落において説明したように、論理ブロックサイズが、520バイトであり、物理ブロックサイズが、512バイトであるとき、最小の整列単位は、64個の論理ブロックである。境界ブロックが不完全に書き込まれ、したがって、読み出し修正書き込み動作が必要とされる書き込みアクセス動作を回避するために、書き込みアクセス動作は、64個の論理ブロックの完全な整列単位に向けられる必要がある。しかし、また上述したように、大きな整列単位によって、物理的ストレージにアクセスすると同時に、読み出し修正書き込み動作を防止することは、比較的小さな粒度の個別の書き込み動作が効果的なキャッシュ格納戦略を阻むパターンにおいて頻繁に生じる場合には、全体のデータ転送帯域幅をあまり増大しない可能性がある。したがって、上述のように、別の仮想フォーマティング法において、論理ブロックパディングを行うことなく、最小の整列単位8506より短いパッドされた論理ブロック整列単位8514を提供するために、パッドされた論理ブロック8512の行に示されているように、論理ブロックがパッドされてもよい。パッドされた論理ブロックおよびデバイスブロックが、パッドされた論理ブロック整列単位8514の境界と完全に整列されることに留意されたい。論理ブロックのパディングによって、読み出し修正書き込み動作の必要性を回避すると同時に、データ転送帯域幅を増大するために、整列単位のサイズを減少させることが可能である。
本発明の実施形態を表す割り当て単位に基づく仮想フォーマティング法は、読み出し修正書き込み動作を回避するために、割り当て単位のパディングを利用する。図85において、パディング8518〜8520を規則的な割り当て単位サイズの間隔で追加することにより、ブロック8516の最終の行が、行8504における論理ブロックと同一のサイズの論理ブロックである。各割り当て単位8522は、一定数の論理ブロックおよび対応する一定数のデバイスブロックを含む。図85に示される実施例において、各割り当て単位は、5つの論理ブロックおよび6つのデバイスブロックを含む。パディング8518は、パッドされた割り当て単位8524を形成するために、各割り当て単位の終わりに追加される。論理ブロック境界およびデバイスブロック境界の両方と完全に整列されるために、パッドされた割り当て単位8524の左側境界8526および右側境界8528が、図85において見られる。
割り当て単位の論理ブロックまたはデバイスブロックにおける長さは、任意に選択されてもよい。しかし、実際には、割り当て単位の長さは一般に、特定のシステムにおいて観察された書き込みアクセスのパターンによって決定されるほか、システムにおける論理ブロックおよびデバイスブロックの周知の長さから決定される。1つの割り当て単位または多数の割り当て単位において実行されることになっている物理的なストレージへのすべての書き込みアクセスのために配置されることができるとき、読み出し修正書き込み動作は必要ではない。前に説明した仮想フォーマティング法の場合のように、パディングは、堅牢かつ確実なデータストレージを容易にするさらなるエラー補正データまたは他のタイプのデータを格納するために用いられることができる。図85に示される例示の割り当て単位において、パディングは、割り当て単位の終わりに含まれるが、別の実施形態において、パディングは、割り当て単位内の他の位置に含まれてもよく、割り当て単位のサイズは、手動で決定されてもよく、さらに、特定のシステムにおいて固有の実際の制約および書き込みアクセスパターンの下で、データ転送帯域幅が最適化される、種々の計算および数学的な最適化技術によって計算されてもよい。
一実施例として、16個の520バイト論理ブロックが、各ALUに含まれてもよく、384バイトがALUをパディングするために用いられ、その結果、本発明の一実施形態を表すALUに基づく仮想フォーマティングによれば、ALUは、17個のデバイスブロックの連続集合と正確に整列される。大部分のアクセスが、16の仮想ブロックアクセスであるとき、ALUに基づく仮想フォーマティングは、ALUごとに384パディングバイトが、情報交換のために用いられるわけではない場合であっても、64個の仮想ブロック整列単位を用いる場合よりよい効率および速いデータ転送速度を提供することができ、32個のパッドされた仮想ブロックを含むパッドされた仮想ブロックAUに転送される528バイトのパッドされた仮想ブロックを用いる場合よりよい効率および速いデータ転送速度を提供してもよい。アクセスされる16個の仮想ブロックを超える64個の仮想ブロックAUまたは32個のパッドされた仮想ブロックAUにおける仮想ブロックの数が、次の使用のために効率的にキャッシュ格納されることができない限り、64バイトまたは32ブロックAUが、16の仮想ブロックアクセスのために用いられるときに転送されるデータの大部分が無駄である。
次に、本発明の実施形態を表す仮想フォーマティング法の簡単なC++状の擬似コード実装が、提供される。このC++状の擬似コードは、割り当て単位に基づく仮想フォーマティング法が利用されるときに、論理ブロックに基づくアクセスをデバイスブロックアクセスに変換するために必要な計算および処理のタイプを示すことを意図している。前の小段落に記載したPCIe/SAS I/Oコントローラなどの一定の場合において、データ転送は、論理ブロックの単位において中間デバイスに指定される必要があり、その場合には、さらなるステップが、以下の実装に追加される必要がある。しかし、特定のシステムに向けられるのではなく、以下の実装は、割り当て単位に基づく仮想フォーマティングが一般にどのように行われることができるかを実証することを意図している。そのためには、以下の実装は、ストレージシェルフルータまたはI/Oコントローラにおいて実際にアドレス指定されるものよりさらに複雑なシナリオ(構成)をアドレス指定し、ブロックアドレス指定アクセスでなくバイトアドレス指定アクセスに対処する。
第一に、1〜7行目で、複数の定数が宣言される。
Figure 0005250031
これらの定数は、(1)VBSZ、バイト単位またはストレージの何か他の単位における仮想ブロックまたは論理ブロックのサイズ、(2)DBSZ、バイト単位またはストレージの何か他の単位におけるデバイスブロックまたは物理ブロックのサイズ、(3)VperALU、割り当て単位内の論理ブロックの数、(4)ALUSZ、パディングを含まない割り当て単位のバイト単位のサイズ、(5)DperALU、割り当て単位内のデバイスブロックの数、(6)DALUSZ、パッドされた割り当て単位におけるバイトまたは情報の他の物理単位の数および(7)DELTA、割り当て単位の境界がデバイスブロック境界に正確に対応するために、割り当て単位に追加される1つのパディング領域におけるバイトまたは他の情報ストレージ単位の数を含む。VBSZ、DBSZおよびVperALUは、任意の正の整数であるように一般に任意に定義されることができ、したがって特定の初期化は示されない。しかし、上述のように、割り当て単位は一般に、特定のシステムにおいて、物理的ストレージアクセスパターンから決定され、アクセス動作に関する最小の共通の粒度を表すように選択される。すべての書き込みアクセスが、1つまたは複数の割り当て単位として指定されるとき、読み出し修正書き込み動作が回避される。
さらに、タイプ「bufptr」が、バッファポインタタイプであるように定義され、擬似コード実装においてパディングのために用いられるシンボルは、以下のように定数「PAD」によって定義される。
Figure 0005250031
擬似コードにおいて、物理的ストレージアクセスは、以下の2つの関数によって定義される。
Figure 0005250031
関数「DRead」は、任意の物理的バイトアドレスDsからバッファポインタ「p」によって参照されるバッファに、指定した数のデバイスブロックを読み出す。関数「DWrite」は、バッファから任意の物理バイトアドレス「Ds」で始まる物理デバイスに、指定した数のブロックを書き込む。これらの関数は任意に、定義される。多くのシステムにおいて、任意のバイトアドレスを用いるのではなく、読み出しアクセスおよび書き込みアクセスが、ブロックアドレスまたはセクタアドレスに対してのみ実行される。他のシステムにおいて、書き込みアクセスおよび読み出しアクセスのサイズは、デバイスブロック未満の粒度を有してもよい。関数「DRead」および「DWrite」は、最も複雑な場合を表すことなく、アクセス動作が割り当て単位において指定されない場合に生じる複雑さを表すために用いられる。
次の関数「numGroups」は、複数のエンティティ「num」を含むために必要とされるサイズ「group」のグループの最小数を返す。
Figure 0005250031
値「group」が、値「num」を均等に分割する場合には、除算の整数結果が返される。別の場合には、除算の整数結果が増分されて返される。
次に、関数「computeMapping」が提供される。
Figure 0005250031
関数「computeMapping」は、論理バイトアドレス「Vs」によって指定されるアクセスに関連し、複数のバイト「numBytes」を含む複数のパラメータを計算する。パラメータは、(1)Ds、アクセスに関するデバイスブロックレベルにおけるバイトアドレス、(2)numALUs、「Vs」および「numBytes」の値によって指定されるアクセスを実行するために、アクセスされる必要がある割り当て単位の数、(3)numInitialDBs、指定されたアクセスの第1の割り当て単位の中においてアクセスされる必要があるデータブロックの数、(4)offset、指定されたアクセスのために、デバイスレベルバイトアドレス「Ds」からのバイトオフセットおよび(5)blockOffset、デバイスアドレス「Ds」を含む割り当て単位の始めからデバイスブロックにおいて指定されたアクセスのオフセットを含む。5行目および6行目で宣言されるローカル変数「Vi」および「Vf」は最初は、指定されたアクセスの第1の論理ブロックおよび最後の論理ブロックに設定される。次に、8〜9行目で、アクセスの第1の論理ブロックを含む割り当て単位の始まりからのバイトオフセットが計算される。10行目で、ローカル変数「Vi」が、指定されたアクセスの第1のバイトを含む割り当て単位の第1の論理ブロックを参照するように調整される。12〜13行目で、指定されたアクセスに対応する第1の割り当て単位におけるデバイスブロックの数が計算され、パラメータ「numDBs」に格納される。14〜18行目で、指定されたアクセスのデバイスレベルのアドレスが、指定されたアクセスに対応する第1のデバイスブロックを含むように種々のパラメータが調整され、パラメータ「blockOffset」が第1の割り当て単位の始めからのデバイスブロックオフセットを指定する。最後に、19行目で、アクセスに必要とされる割り当て単位の総数numALUsが計算される。
次に、ルーチン「VRead」が提供される。
Figure 0005250031
関数「VRead」は、任意の論理ブロックに基づく書き込みアドレス「Vs」で始まる指定した数の論理ブロックを、長さ「bufLength」のバッファ「buffer」に読み出す。このルーチンは、割り当て単位に必ずしも対応しない読み出しアクセスを処理するために、ある程度複雑である。コードの小さい部分のみが、1つの割り当て単位または固定数の連続割り当て単位に対応する読み出しアクセスを専用に処理する。10行目で、関数「computeMapping」は、読み出しアクセスのための種々の上述のパラメータを得るために呼び出される。次に、13〜52行のforループにおいて、読み出しアクセスに対応する割り当て単位のそれぞれが、1つずつバッファに読み出される。15〜24行目におけるコードは、指定された読み出しアクセスが最初は割り当て単位と整列しない場合を処理する。25〜30行目のコードは、読み出しアクセスの最終の部分が、割り当て単位境界と整列しない場合を処理する。
指定された読み出しアクセスが、1つまたは複数の割り当て単位に正確に対応するとき、33〜35行目におけるコードが呼び出される。ローカル変数「nxtRead」が、13〜52行のforループの次の反復において読み出されるデバイスブロックの数に設定される。ローカル変数「read」は、forループの次の反復において読み出されるパディングのないバイトの数に設定される。ローカル変数「actualRead」は、forループの次の反復において読み出されるパディングバイトを含むバイトの総数に設定される。
次の割り当て単位は次に、40行目でデバイス空間から関数「DRead」の呼び出しで読み出され、読み出し動作の結果として、種々のローカル変数が調整される。ローカル変数「res」は、forループのすべての前の反復のほか、現在の反復によって読み出されたバイトの数を計数する。パラメータ「buffer」および「bufLength」は、forループの現在の反復においてデバイスからバッファに読み出されたデータを反映するように調整される。パラメータ「Ds」および「numBytes」もまた、forループの現在の反復中にバッファに読み出されたデータを反映するように調整される。13〜52行目のforループは、指定された読み出しアクセスに対応する割り当て単位のすべてがバッファに読み出されるまで続く。読み出しが、1つまたは複数の割り当て単位として指定され、ルーチン「computeMapping」および「VRead」に含まれるきわめて少量のコードのみが、実行されるとき、読み出しアクセスは効率的であり、読み出し修正書き込み動作は実行されない。
最後に、関数「VWrite」が提供される。
Figure 0005250031
関数「VWrite」は、長さ「bufLength」の指定されたバッファ「buffer」から論理ブロックに基づくアドレス「Vs」に指定した数のバイトを書き込む。前述の関数「VRead」と同様に、指定された書き込みアクセスに対応する種々のパラメータが、12行目で関数「computeMapping」への呼び出しによって計算される。次に、14〜75行のwhileループにおいて、指定された書き込みに対応する割り当て単位のすべてが、1つずつデバイスアドレス空間に書き込まれる。14〜75行のwhileループの中の16〜56行目のコードは、指定された書き込みアクセスが1つまたは複数の割り当て単位に整列されておらず、必要な読み出し修正書き込み動作を実行する場合を処理する。59〜73行目のコードのみが、割り当て単位と完全に整列される書き込みアクセスのために呼び出される。59〜64行目で、デバイス空間に書き込まれることになっているバッファ内の一定のバイトは、内部バッファに格納され、パディングバイトが、格納されたバイトのために代入される。次に、65行目で、関数「DWrite」が、デバイス空間にバイトの次の割り当て単位値を書き込むために呼び出される。次に、66〜68行目で、内部バッファ内に前に格納されたバイトが、次の割り当て単位への書き込みのために、バッファに復元される。69〜73行目で、種々のローカル変数およびパラメータが、正に完全なデバイス空間書き込み動作を反映するために調整される。
本発明は、特定の実施形態に関して記載してきたが、本発明は、これらの実施形態に限定されることを意図していない。本発明の範囲内の修正は、当業者には明白であろう。たとえば、本発明の方法の実施形態は、ストレージブリッジ集積回路、PCIe/SAS I/Oコントローラおよびストレージシェルフルータをはじめとする種々の中間デバイスにおいて用いるため、または中間デバイスおよびより高位のデバイスの組み合わせにおいて実装するために、ファームウェア、ソフトウェア、ハードウェア、または2つ以上のファームウェア、ソフトウェアおよびハードウェアの組み合わせにおいて実装されることができる。実装は、無数の異なるデータ構造、制御構造、変数、プログラミング言語および他のそのような馴染みのある実装パラメータおよび特性を用いることができる。上述のように、パディングは、終わり、冒頭または中間位置をはじめとする、割り当て単位内の種々の位置のいずれかに加えられてもよい。割り当て単位がデバイスブロック境界と整列される必要がある制約の下で、割り当て単位は一般に任意のサイズであってもよい。しかし、最適または略最適のデータ転送速度および帯域幅を提供するために、割り当て単位サイズは一般に、特定のシステム内のアクセスパターンから決定される。割り当て単位に基づく仮想フォーマティングは、多くの異なるタイプのI/Oコントローラ、ブリッジおよびストレージシェルフルータのいずれかを含む中間デバイスの多数の異なるタイプのいずれかの中で利用されてもよい。
前述の説明は、説明目的のために、本発明の全体的な理解を提供するために具体的な用語を用いた。しかし、具体的な詳細は、本発明を実行するために必要ではないことは当業者には明白であろう。他の場合には、公知の回路およびデバイスが、根本にある本発明から不必要な余計なものを回避するために、ブロック図の形態で示される。したがって、本発明の具体的な実施形態の前述の説明は、例示および説明の目的のために提示され、網羅することも開示された正確な形態に本発明を限定することも意図しておらず、上述の教示に鑑みて多くの修正および変形が可能である。実施形態は、本発明の原理およびその実際的な用途を最もよく説明するために選択されて記載されており、それにより、当業者は検討される特定の用途に合わせて種々の変更を行い、本発明および種々の実施形態を最もよく利用することが可能となる。本発明の範囲は、以下の特許請求の範囲およびその等価物によって定義されることを意図している。

Claims (15)

  1. 外部コントローラまたはホストコンピュータに代わってデータストレージデバイスにリンクされる中間デバイスであり、ストレージシェルフルータ、PCI2/SAS I/Oコントローラまたはストレージブリッジである中間デバイスによって、前記データストレージデバイスに格納されるデータに効率的にアクセスするための方法であって、
    割り当て単位のサイズおよび構造を決定するステップであって、各割り当て単位一定数の連続する論理ブロックおよび1つの追加パッド領域を含み、各割り当て単位が対応する一定数の連続するデバイスブロックにマッピングされて整列され、各割り当て単位が、データストレージ単位における各論理ブロックのサイズ乗算された前記一定数の連続する論理ブロックに等しい一定量の非パッドデータを含み、かつ、連続する論理ブロックの数が、前記外部コントローラまたは前記ホストコンピュータと前記データストレージデバイスとの間のデータ転送速度に基づいて決定される、ステップと、
    前記外部コントローラまたは前記ホストコンピュータから、各割り当て単位における前記一定量の非パッドデータに等しいデータ量または各割り当て単位における前記一定量の非パッドデータの倍数に等しいデータ量を指定するアクセス要求を受信するステップであって、前記データ量が前記データストレージデバイスのデバイスブロック中のデータストレージ単位に対応する、ステップと、
    前記データストレージデバイス中に格納されたデバイスブロックであって、前記指定された量のデータを含む連続する数のデバイスブロックにアクセスすることによって、前記受信されたアクセス要求を実行するステップと、を含む方法。
  2. 前記割り当て単位のサイズおよび構造を決定するステップは、
    最小単位のアクセスであるとき、前記外部コントローラまたは前記ホストコンピュータと前記中間デバイスにリンクする前記データストレージデバイスとの間での前記データ転送速度を提供する連続する論理ブロックの数を決定するステップと、
    前記決定された数の連続する論理ブロックおよび前記追加パッド領域が共に、前記対応する一定数の連続するデバイスブロックと完全に整列される割り当て単位を形成するよう、前記決定された数の論理ブロックに前記1つの追加パッド領域として追加すべきデータ単位の数を決定するステップと、を含む、請求項1に記載の方法。
  3. 前記指定された量のデータを含む連続する数のデバイスブロックにアクセスすることによって、受信されたアクセス要求を実行するステップは、
    受信されたアクセス動作が、前記連続する数のデバイスブロックにデータを書き込むよう指示するとき、前記連続する数のデバイスブロックの非パッド部分に前記データを書き込むステップを含む、請求項1に記載の方法。
  4. 論理ブロックに基づくアドレスにおいて指定されたアクセス要求を受信し、データストレージデバイスの対応するデバイスブロックにアクセスすることによって、受信されたアクセス動作を実行する中間デバイスであり、ストレージシェルフルータ、PCI2/SAS I/Oコントローラまたはストレージブリッジである中間デバイスであって、
    前記中間デバイスへアクセス要求を伝送する外部コントローラまたはホストコンピュータに前記中間デバイスを相互接続する1つまたは複数の通信媒体に、前記中間デバイスをリンクする1つまたは複数のポートの第1集合と、
    前記外部コントローラまたは前記ホストコンピュータから受信された前記アクセス要求を実行するために、前記中間デバイスがデバイスブロックに基づくアクセス要求を伝送する2つ以上のデータストレージデバイスに前記中間デバイスをリンクする2つ以上のポートの第2集合と、
    前記ポートの第1集合を前記ポートの第2集合と相互接続する内部データ経路と、
    論理ブロックに基づくアドレスにおいて指定された受信されたアクセス要求を割り当て単位に基づく要求に変換し、対応するデバイスブロックに基づくアクセス要求を前記2つ以上のデータストレージデバイスの1つまたは複数に伝送することによって、前記割り当て単位に基づくアクセス要求を実行する仮想フォーマティング論理回路であって前記割り当て単位が、対応する一定数の連続するデバイスブロックにマッピングされ正確に整列される、一定数の連続する論理ブロックと1つの追加パッド領域とを含み、かつ、連続する論理ブロックの数が、前記外部コントローラまたは前記ホストコンピュータと前記データストレージデバイスとの間のデータ転送速度に基づいて決定される、仮想フォーマティング論理回路と、を含む、中間デバイス。
  5. 前記割り当て単位のサイズおよび構造は、
    最小単位のアクセスであるとき、前記外部コントローラまたは前記ホストコンピュータと前記中間デバイスにリンクされた前記データストレージデバイスとの間で、最適の前記データ転送速度を提供する連続する論理ブロックの数を決定し、
    前記決定された数の連続する論理ブロックおよび前記追加パッド領域が共に、対応する一定数の連続するデバイスブロックと完全に整列される割り当て単位を形成するよう、前記決定された数の論理ブロックに前記1つの追加パッド領域として追加すべきデータストレージ単位の数を決定すること、によって決定される、請求項4に記載の中間デバイス。
  6. 前記ポートの第1集合は、ファイバチャネルポート、高速ローカルエリアネットワークポート、内部バス接続、およびバックプレーン接続のうちの1つである、請求項4に記載の中間デバイス。
  7. 前記ポートの第2集合は、SASポート、SATAポートおよびATAポートのうちの1つである、請求項4に記載の中間デバイス。
  8. 前記ポートの第1集合を前記ポートの第2集合と相互接続する内部データ経路は、
    グローバルメモリスイッチおよびPCIeエクスプレスリンクのうちの1つまたは複数を含む、請求項4に記載の中間デバイス。
  9. 前記中間デバイスは、論理ブロックの各連続グループの間の追加パッド領域を含むことにより、1つまたは複数の割り当て単位に連続するシーケンスの論理ブロックをマッピングすることによって、論理ブロックに基づくアドレスにおいて指定された受信されたアクセス要求を割り当て単位に基づく要求に変換する、請求項4に記載の中間デバイス。
  10. 前記中間デバイスは、1つまたは複数の割り当て単位に対応し、且つ、1つまたは複数の割り当て単位と整列されるのデバイスブロックに対して、指示されたアクセス動作を伝送することによって、対応するデバイスブロックに基づくアクセス要求を前記2つ以上のデータストレージデバイスのうちの1つまたは複数に伝送する、請求項9に記載の中間デバイス。
  11. シングル集積回路仮想フォーマティングシステムであって、
    論理ブロックに基づくデータアクセス要求が受信される1つまたは複数のホストポートであって、各データアクセス要求が、1つまたは複数の論理ブロックへのREADアクセスまたはWRITEアクセスを指定し、各論理ブロックが一定の論理ブロックサイズを有する、1つまたは複数のホストポートと、
    各デバイスブロックが前記論理ブロックサイズとは異なる一定のデバイスブロックサイズを有する、1つまたは複数のデバイスブロックへのREADアクセスまたはWRITEアクセスを指定し、デバイスブロックに基づくデータアクセス要求が1つまたは複数の大容量ストレージデバイスに伝送される、1つまたは複数のデバイスポートであって、デバイスブロックに基づくデータアクセス要求に対する応答が1つまたは複数の前記大容量ストレージデバイスから受信される、1つまたは複数のデバイスポートと、
    第1の数の論理ブロックおよび1つの追加パディングを有しかつ、第2の数のデバイスブロックをする割り当て単位であって、論理ブロックの境界とデバイスブロック境界とが完全に整列される割り当て単位に基づき、前記1つまたは複数のホストポートから受信された各論理ブロックに基づくデータアクセス要求を、前記1つまたは複数のデバイスポートの1つへの伝送のための、対応するデバイスブロックに基づくデータアクセス要求に変換する論理部であって、前記第1の数が、前記1つまたは複数のホストポートと前記1つまたは複数のデバイスポートの1つとの間のデータ転送速度に基づいて決定される、論理部と、を含む、シングル集積回路仮想フォーマティングシステム。
  12. 前記割り当て単位は、前記1つの追加パディングのバイトが後に続く論理アドレス空間における第1数の連続する論理ブロックを含む、請求項11に記載のシングル集積回路仮想フォーマティングシステム。
  13. 前記割り当て単位は、前記1つの追加パディングのバイトが先行する論理アドレス空間における第1数の連続する論理ブロックを含む、請求項11に記載のシングル集積回路仮想フォーマティングシステム。
  14. 前記論理は、前記シングル集積回路仮想フォーマティングシステムにおいて実装される、1つまたは複数の状態機械、1つまたは複数のプロセッサによって実行されるファームウェア、および複数の論理回路のうちのいずれかを含む、請求項11に記載のシングル集積回路仮想フォーマティングシステム。
  15. 前記1つまたは複数のホストポートは、ファイバチャネルポート、PCIeポート、SATAポート、およびSASポートのうちのいずれかを含む、請求項11に記載のシングル集積回路仮想フォーマティングシステム。
JP2010514853A 2007-06-29 2008-06-30 割り当て単位に基づく仮想フォーマッティング法および割り当て単位に基づく仮想フォーマッティング法を利用するデバイス Expired - Fee Related JP5250031B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/824,512 US8289984B2 (en) 2003-01-13 2007-06-29 Allocation-unit-based virtual formatting methods and devices employing allocation-unit-based virtual formatting methods
US11/824,512 2007-06-29
PCT/US2008/008165 WO2009005792A2 (en) 2007-06-29 2008-06-30 Allocation-unit-based virtual formatting methods and devices employing allocation-unit-based virtual formatting methods

Publications (2)

Publication Number Publication Date
JP2010532520A JP2010532520A (ja) 2010-10-07
JP5250031B2 true JP5250031B2 (ja) 2013-07-31

Family

ID=40029081

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010514853A Expired - Fee Related JP5250031B2 (ja) 2007-06-29 2008-06-30 割り当て単位に基づく仮想フォーマッティング法および割り当て単位に基づく仮想フォーマッティング法を利用するデバイス

Country Status (5)

Country Link
US (1) US8289984B2 (ja)
EP (1) EP2176737A2 (ja)
JP (1) JP5250031B2 (ja)
KR (1) KR101252903B1 (ja)
WO (1) WO2009005792A2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8321650B2 (en) * 2003-01-13 2012-11-27 Emulex Design & Manufacturing Corporation Alignment-unit-based virtual formatting methods and devices employing the methods
US7409495B1 (en) * 2004-12-22 2008-08-05 Symantec Operating Corporation Method and apparatus for providing a temporal storage appliance with block virtualization in storage networks
US20070086448A1 (en) * 2005-10-17 2007-04-19 Sbc Knowledge Ventures Lp Integrated pseudo-wire and virtual routing and forwarding on a single provider edge router
US20090204773A1 (en) * 2008-02-07 2009-08-13 Inventec Corporation Method of writing device data in dual controller network storage environment
US8351785B2 (en) * 2008-04-21 2013-01-08 Futurewei Technologies, Inc. Gigabit passive optical network transmission convergence extension for next generation access
JP2009282708A (ja) * 2008-05-21 2009-12-03 Fujitsu Ltd ディスクアレイ装置の制御方法及び制御装置
US8078771B2 (en) * 2008-10-31 2011-12-13 Lsi Corporation Sending large command descriptor block (CDB) structures in serial attached SCSI (SAS) controller
US8180995B2 (en) 2009-01-21 2012-05-15 Micron Technology, Inc. Logical address offset in response to detecting a memory formatting operation
US8046533B2 (en) * 2009-03-10 2011-10-25 Emulex Design & Manufacturing Corporation System and method for sector remapping
US8116330B2 (en) * 2009-06-01 2012-02-14 Lsi Corporation Bridge apparatus and methods for coupling multiple non-fibre channel devices to a fibre channel arbitrated loop
US8341368B2 (en) 2010-06-07 2012-12-25 International Business Machines Corporation Automatic reallocation of structured external storage structures
US8838910B2 (en) 2010-06-07 2014-09-16 International Business Machines Corporation Multi-part aggregated variable in structured external storage
US9411517B2 (en) 2010-08-30 2016-08-09 Vmware, Inc. System software interfaces for space-optimized block devices
US8996839B1 (en) 2012-01-23 2015-03-31 Western Digital Technologies, Inc. Data storage device aligning partition to boundary of sector when partition offset correlates with offset of write commands
US9063838B1 (en) * 2012-01-23 2015-06-23 Western Digital Technologies, Inc. Data storage device shifting data chunks of alignment zone relative to sector boundaries
US20140281194A1 (en) 2013-03-15 2014-09-18 Seagate Technology Llc Dynamically-sizeable granule storage
US9588886B2 (en) 2013-03-15 2017-03-07 Seagate Technology Llc Staging sorted data in intermediate storage
US10019203B1 (en) * 2013-05-30 2018-07-10 Cavium, Inc. Method and system for processing write requests
US9430165B1 (en) * 2013-07-24 2016-08-30 Western Digital Technologies, Inc. Cold storage for data storage devices
US8943226B1 (en) * 2013-11-22 2015-01-27 Lsi Corporation Interface for heterogeneous PCI-e storage devices
US9838500B1 (en) * 2014-03-11 2017-12-05 Marvell Israel (M.I.S.L) Ltd. Network device and method for packet processing
US9542122B2 (en) * 2014-10-23 2017-01-10 Seagate Technology Llc Logical block addresses used for executing host commands
US10007556B2 (en) 2015-12-07 2018-06-26 International Business Machines Corporation Reducing utilization speed of disk storage based on rate of resource provisioning
US10482019B2 (en) 2016-02-24 2019-11-19 Hitachi, Ltd. Storage apparatus and control method thereof
US10732903B2 (en) * 2018-04-27 2020-08-04 Hewlett Packard Enterprise Development Lp Storage controller sub-LUN ownership mapping and alignment
MY196810A (en) * 2018-11-29 2023-05-03 Mimos Berhad A System and Method to Download and Convert a Virtual Appliance in a Cloud Computing System
CN110187835B (zh) * 2019-05-24 2023-02-03 北京百度网讯科技有限公司 用于管理访问请求的方法、装置、设备和存储介质
CN111611727B (zh) * 2020-06-23 2022-11-22 南昌航空大学 一种保证凸轮机构运动可靠性的优化设计方法
CN114328358A (zh) * 2022-03-04 2022-04-12 山东华翼微电子技术股份有限公司 一种7位寻址模式i2c控制器访问任意容量存储器的方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1110219A1 (en) * 1998-08-31 2001-06-27 Unisys Corporation Improved method for providing variable sector-format operation to a computer system
US6191712B1 (en) * 1999-06-28 2001-02-20 International Business Machines Corporation Circuit for aligning logical sectors with physical sectors in a disk storage system
US7634614B2 (en) 2003-01-13 2009-12-15 Sierra Logic Integrated-circuit implementation of a storage-shelf router and a path controller card for combined use in high-availability mass-storage-device shelves and that support virtual disk formatting
US7457906B2 (en) * 2003-01-21 2008-11-25 Nextio, Inc. Method and apparatus for shared I/O in a load/store fabric
US7237021B2 (en) 2003-04-04 2007-06-26 Bluearc Uk Limited Network-attached storage system, device, and method supporting multiple storage device types
US7401254B2 (en) * 2003-04-23 2008-07-15 Dot Hill Systems Corporation Apparatus and method for a server deterministically killing a redundant server integrated within the same network storage appliance chassis
JP4634157B2 (ja) * 2005-01-17 2011-02-16 株式会社日立製作所 ストレージシステム
US7277986B2 (en) * 2005-03-30 2007-10-02 Emc Corporation Sector-edge cache
JP5031392B2 (ja) * 2007-02-13 2012-09-19 株式会社日立製作所 記憶制御装置及びストレージシステム
JP2008269363A (ja) * 2007-04-20 2008-11-06 Hitachi Ltd 記憶制御装置および記憶制御方法

Also Published As

Publication number Publication date
KR20100044803A (ko) 2010-04-30
US8289984B2 (en) 2012-10-16
US20080016275A1 (en) 2008-01-17
WO2009005792A2 (en) 2009-01-08
KR101252903B1 (ko) 2013-04-10
EP2176737A2 (en) 2010-04-21
JP2010532520A (ja) 2010-10-07
WO2009005792A3 (en) 2009-02-19

Similar Documents

Publication Publication Date Title
JP5250031B2 (ja) 割り当て単位に基づく仮想フォーマッティング法および割り当て単位に基づく仮想フォーマッティング法を利用するデバイス
JP5047365B2 (ja) 割り当て単位に基づく仮想フォーマッティング法およびその方法を利用するデバイス
JP5250030B2 (ja) 効率的な待ち行列管理のための方法およびシステム
JP4406431B2 (ja) 仮想ディスクをフォーマッティングするシステムおよび方法
US8281084B2 (en) Method and interface for access to memory within a first electronic device by a second electronic device
JP4871880B2 (ja) ストレージシェルフ・ルータ集積回路
US7167929B2 (en) Integrated-circuit implementation of a storage-shelf router and a path controller card for combined use in high-availability mass-storage-device shelves that may be incorporated within disk arrays, and a storage-shelf-interface tunneling method and system
US7353321B2 (en) Integrated-circuit implementation of a storage-shelf router and a path controller card for combined use in high-availability mass-storage-device shelves that may be incorporated within disk arrays
US20160021031A1 (en) Global shared memory switch

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110316

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120717

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120718

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121010

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130403

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130412

R150 Certificate of patent or registration of utility model

Ref document number: 5250031

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160419

Year of fee payment: 3

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees