ファイバチャネル(「FC」)は、コンピュータと周辺装置とのいくつかの異なる組み合わせを相互接続するデータ通信ネットワークのアーキテクチャおよびプロトコルである。FCは、小型コンピュータシステムインターフェイス(「SCSI」)プロトコルを含む、様々な上位プロトコルをサポートする。コンピュータまたは周辺装置は、FCポートおよび銅線または光ファイバを介してネットワークにリンクされる。FCポートは、送受信機とインターフェースコントローラとを含み、FCポートが含まれているコンピュータ周辺装置を「ホスト」という。FCポートは、周辺コンピュータインターフェース(「PCI」)バスなどのローカルデータバスを介してホストとデータを交換する。インターフェースコントローラは、ファイバチャネルと、FCポートが存在するコンピュータまたは周辺装置との間の下位プロトコル交換を行う。
コンピュータネットワークにおいてリモートデータにアクセスする一般的パラダイムが、クライアント/サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータは、データを読み取り、または書き込むよう求める要求をサーバコンピュータに送る。サーバコンピュータは、クライアントサーバがデータを読み取り、または書き込むための権限および許可を有していることをチェックし、要求された読取りまたは書込み操作を特定の大容量記憶装置にマップし、書込み操作の場合には、クライアントコンピュータから大容量記憶装置への、読取り操作の場合には、大容量記憶装置からクライアントへのデータ転送における仲介として働くことによって要求を処理する。
一般の、現在利用可能な通信ネットワークアーキテクチャおよび以前から利用可能な通信ネットワークアーキテクチャでは、サーバコンピュータは、ローカルエリアネットワーク(「LAN」)を介してクライアントコンピュータと通信すると共に、SCSIバスなどのローカルバスを介していくつかの大容量記憶装置と通信する。かかるシステムにおいて、サーバは、読取りまたは書込み操作の結果として転送されたデータを格納し、転送することを必要とされる。なぜなら、サーバは、2つの異なる通信媒体の間のブリッジを表すからである。FCの出現により、クライアントコンピュータ、サーバコンピュータ、および大容量記憶装置は、すべて、単一の通信媒体によって対称的に相互接続され得るようになった。従来のクライアント/サーバアーキテクチャは、一般に、前述のLANおよびSCSIネットワークで使用されるのと同じタイプのクライアント/サーバプロトコルを使用してFCに移植される。
大容量ディスクドライブを含むSCSIバス互換の大容量記憶装置は、広範に流通し、特に、中規模および大規模のコンピュータシステムにおいて広範に使用されており、多くのFCベースのシステムが、それぞれ、1つまたは複数のFCポートと、ディスクドライブがFC応答側として機能するのに必要な論理を含む、FC互換ディスクドライブを用いている。パーソナルコンピュータ(「PC」)を含むより小規模のシステムでは、統合ドライブエレクトロニクス(「IDE」)またはアドバンストテクノロジアタッチメント(「ATA」)ディスクドライブと呼ばれる、異なるディスクドライブのファミリが広範に用いられている。シリアルATAディスク(「SATA」)は、一般に、産業標準アーキテクチャ(「ISA」)バスを介してシステムと相互接続される。
本発明は、FC、SCSIおよびIDE/ATA技術に関するものである。次に、それぞれを、以下の3つの別々の小節で論じる。これらの技術のいずれか、またはすべてに精通している場合には、以下の説明を飛ばして、FCベースのディスクアレイを説明している本節の最後の小節、およびその小節の直後に続く発明の開示の節に進んでもよい。
ファイバチャネル
ファイバチャネル(「FC」)は、以下の表1に列挙する規格文書を含めて、いくつかのANSI規格文書で定義され、記載されている。
表1に列挙されている文書、およびファイバチャネルに関するその他の情報は、「http://www.tll.org/index.htm」および「http://www.fibrechannel.com.」のアドレスを有するワールドワイドウェブページに記載されている。
以下のFCの説明は、本発明の考察を容易にするために、これらの文書に含まれている情報の一部を紹介し、要約するためのものである。以下の説明で紹介するトピックのいずれかについてのより詳細な考察が求められる場合には、前述の文書を参照するとよい。
FCは、一般に、1つまたは複数の通信媒体によって相互接続されている、コンピュータ、ワークステーション、周辺装置、およびディスクアレイなどの周辺装置のアレイまたは集合体である、FCノード間のデータ通信のためのアーキテクチャおよびプロトコルである。通信媒体は、シールドツイストペア接続、同軸ケーブル、および光ファイバを含む。FCノードは、少なくとも1つのFCポートおよびFCリンクを介して通信媒体に接続される。FCポートは、FCノードの処理コンポーネントとレジスタおよびメモリインターフェースを共用し、ハードウェアおよびファームウェアとして、下位のFCプロトコルを実施するFCホストアダプタまたはFCコントローラである。FCノードは、一般に、共用メモリ内の共用データ構造を使用し、FCポート内の制御レジスタを使用して、FCポートとデータおよび制御情報を交換する。FCポートは、電線または光学ストランドを含むリンクを介して通信媒体に結合されているシリアルの送信側および受信側コンポーネントを含む。
以下の考察では、「FC」を、ファイバチャネルアーキテクチャおよびプロトコル一般を指す形容詞として使用すると共に、ファイバチャネル通信媒体のインスタンスを指す名詞として使用する。よって、FC(アーキテクチャおよびプロトコル)ポートが、FC(通信媒体)から、FC(アーキテクチャおよびプロトコル)シーケンスを受け取ってもよい。
FCアーキテクチャおよびプロトコルは、図1A〜1Cに示す、3つの異なるタイプの相互接続技術をサポートする。図1Aに、「ポイントツーポイントトポロジ」という、3つの相互接続されたトポロジのうちで最も単純なものを示す。図1Aに示すポイントツーポイントトポロジでは、第1のノード101のFCポート104の送信機103を、第2のノード102のFCポート106の受信機105に直接結合すると共に、第2のノード102のFCポート106の送信機107を第1のノード101のFCポート104の受信機108に直接接続することによって、第1のノード101が、第2のノード102に直接接続されている。ポイントツーポイントトポロジで使用されるポート104および106をN_Portいう。
図1Bに、「FC調停ループトポロジ」という、多少複雑なトポロジを示す。図1Bには、調停ループ内で相互接続されている4つのノード110〜113が示されている。電気的または光学的バイナリデータからなる信号が、ループを循環するようにあるノードから次のノードに転送される。あるノードの送信機、例えば、ノード111に関連付けられている送信機114は、ループ内の次のノードの受信機、送信機114の場合はノード112に関連付けられた受信機115と直接接続されている。2タイプのFCポートを使って、調停ループ内のFCノードが相互接続されてもよい。調停ループで使用される最も一般的なタイプのポートを「NL_Port」という。以下で説明するように、「FL_Port」という、特殊なタイプのポートを使って、FC調停ループがFCファブリックトポロジと相互接続されてもよい。調停ループトポロジにただ1つのFL_Portだけが、アクティブに組み込まれていてもよい。FC調停ループトポロジは、最大127までのアクティブなFCポートを含んでいてもよく、さらなる別の非関与FCポートを含んでいてもよい。
FC調停ループトポロジでは、各ノードが調停ループの制御を争い、またはそれを調停する。一般に、複数のノードが制御を争う場合には、最も小さいポートアドレスを有するノードが制御を得る。すべてのノードが最終的には妥当な時間量内に制御を受け取るようにするために、各ノードによって、公平アルゴリズムが実施されてもよい。あるノードがループの制御を獲得すると、そのノードは、調停ループ内の他の任意のノードに対してチャネルを開くことができる。半二重チャネルでは、一方のノードがデータを送り、他方のノードがデータを受け取る。全二重チャネルでは、データが第2のノードによって送られ、第1のノードによって受け取られるのと同時に、データが第1のノードによって送られ、第2のノードによって受け取られてもよい。例えば、図1Bの調停ループで、ノード111がノード113と全二重チャネルを開く場合、そのチャネルを介してノード111からノード113に送られるデータはノード112のNL_Portを通り、ノード113によってノード111に送られるデータはノード110のNL_Port117を通る。
図1Cに、「FCファブリック」という、最も一般的で、最も複雑なFCトポロジを示す。FCファブリックは、図1Cで、4つのノード119〜122が接続されている不規則な形状の中央オブジェクト118で表されている。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ネットワークによってサポートされる最小データ単位、すなわちデータビットグループは、FCポートによって8ビット文字として復号化される10ビット文字である。FCプリミティブは、10ビット文字またはバイトで構成されている。いくつかのFCプリミティブを用いて、FCポート間で交換される制御情報が搬送される。FCプロトコルに関する基本レベルである次のデータ編成レベルは、フレームである。図2には7つのフレーム202〜208が示されている。1つのフレームは、区切り文字、ヘッダ、および任意のヘッダ、ならびに0から2048バイトのデータを含む、36から2148バイトで構成され得る。第1のFCフレームは、例えば、データビットストリーム200の水平ブラケット201で囲まれたデータビットに対応する。FCプロトコルは、シーケンスと呼ばれる、次に高い編成レベルを指定する。図2に、第1のシーケンス210および第2のシーケンス212の一部分が表示されている。第1のシーケンス210は、フレーム1から4、202〜205で構成されている。第2のシーケンス212は、フレーム5から7、206〜208および図示されていないさらに別のフレームで構成されている。FCプロトコルは、エクスチェンジと呼ばれる第3の編成レベルを指定する。エクスチェンジ214の一部分が図2に示されている。このエクスチェンジは、代替として、フレーム1から7、202〜208と、他の任意のフレームによって構成されていると見ることもできる。この任意のフレームは、エクスチェンジ214を構成する、第2のシーケンス212および他の任意のシーケンスに含まれる。
FCは全二重データ伝送媒体である。フレームおよびシーケンスが、発行元、すなわち開始側と、応答側、すなわち宛先との間で、両方向に、同時に受け渡しされ得る。エクスチェンジは、読取り入出力トランザクションや書込み入出力トランザクションといった、1回の入出力トランザクションの間に、発行元と応答側の間で交換される、すべてのシーケンス、およびそれらのシーケンス内のフレームを備える。FCプロトコルは、インターネットプロトコル(「IP」)、小型コンピュータシステムインターフェイス(「SCSI」)プロトコル、高性能パラレルインターフェース(「HIPPI」、High Performance Parallel Interface)、およびインテリジェント周辺インターフェース(「IPI」)を含む、任意の数の上位データ交換プロトコルに従ってデータを転送するように設計されている。以下の小節ではSCSIバスアーキテクチャについて論じ、この小節と残りの小節での後続の考察の大部分は、FCプロトコル内に組み込まれたSCSIプロトコルを中心に行う。SCSIプロトコルのファイバチャネルへの標準適合を、本明細書では、以後、「FCP」と称する。よって、FCは、SCSIバスおよび他の周辺相互接続バスに特徴的な、マスタ/スレーブ型通信パラダイム、ならびに、インターネットを実施するのに使用されるものなど、比較的オープンで、非構造的な通信プロトコルもサポートすることができる。FCPでは、開始側および宛先のSCSIバスアーキテクチャ概念が進められて、前述のように、FCを介したトランスポートのためにSCSIコマンドおよびデータエクスチェンジをカプセル化するように設計される。
図3に、標準FCフレームの内容を示す。FCフレーム302は、5つのハイレベルセクション304、306、308、310および312を備える。第1のハイレベルセクションを、フレーム開始区切り文字304といい、フレームの先頭を示す4バイトを備える。次のハイレベルセクションを、フレームヘッダ306といい、アドレス指定情報、シーケンス情報、エクスチェンジ情報、および様々な制御フラグを含む24バイトを備える。図3には、FCフレーム302から拡大されたフレームヘッダの詳細図314が示されている。宛先識別子(「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が示されている。これらのフォーマット326の第1のものを、FCP_CMNDといい、開始側から宛先にSCSIコマンドを送るのに使用される。FCP_LUNフィールド330は、いくつかの実装形態では、合わさってそのFCP_CMNDの宛先を表す、特定のSCSIバスアダプタ、そのSCSIバスアダプタと関連付けられた宛先デバイス、および指定された宛先SCSI装置と関連付けられた論理装置に対応する論理ユニット番号(「LUN」)を指定し得る8バイトアドレスを備える。他の実装形態では、FCP_LUNフィールド330は、宛先FCホストアダプタによって、SCSIバスアダプタ、そのSCSIバスアダプタと関連付けられた宛先デバイス、および指定された宛先SCSI装置と関連付けられた論理装置に対応するLUNを決定するのに使用され得るインデックスまたは参照番号を含む。SCSI読取りまたは書込み入出力コマンドなど、実際のSCSIコマンドは、16バイトフィールドFCP_CDB332に含まれる。
図3に示す第2のタイプのデータペイロードフォーマット327をFCP_XFER_RDYレイアウトという。このデータペイロードフォーマットは、宛先が開始側に対して、宛先がデータの受け取りまたは送り出しを開始する用意ができていることを指示するものとして使用される。図3に示す第3のタイプのデータペイロードフォーマット328はFCP_DATAフォーマットである。FCP_DATAフォーマットは、SCSI入出力トランザクション実行の結果として、SCSIデータ記憶装置から読み取られ、またはそこに書き込まれる実際のデータを転送するのに使用される。図3に示す最後のデータペイロードフォーマット329をFCP_RSPレイアウトといい、入出力トランザクションの完了時に、宛先から開始側に、SCSI状況バイト334、ならびに他のFCP状況情報を転送するのに使用される。
SCSIバスアーキテクチャ
コンピュータバスとは、コンピュータシステムの処理、格納、および入力/出力(「入出力」)コンポーネントの間でコンピュータのコマンドおよびデータを送るための電気信号線の組である。SCSI入出力バスは、ハードディスクやCD−ROMドライブといった大容量記憶装置を、コンピュータシステムのメモリおよび処理コンポーネントと相互接続するための、最も普及している一般的なコンピュータバスである。SCSIバスアーキテクチャは、SCSI−1、SCSI−2、SCSI−3という3つの主要な規格として定義されている。SCSI−1規格とSCSI−2規格は、それぞれ、米国規格協会(「ANSI」)規格文書「X3.131−1986」と「X3.131−1994」に公開されている。SCSI−3規格は、現在、ANSI委員会によって策定されている。SCSIバスアーキテクチャの概要は、「The SCSI Bus and IDE Interface」、Freidhelm Schmidt、Addison−Wesley Publishing Company、ISBN0−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が、コンピュータシステムに含まれている様々な処理およびメモリコンポーネント、ならびに入出力装置とデータおよびコマンドを交換することを可能にする。一般に、ビデオ表示装置418など、超高速高帯域幅の入出力装置は、PCIバスに直接接続される。キーボード420やポインティングデバイス(不図示)などの低速入出力装置420は、ISAバス414に直接接続されている。ISAバスは、バスブリッジコンポーネント422を介してPCIバスと相互接続されている。ハードディスク、フロッピーディスクドライブ、CD−ROMドライブ、テープドライブ424〜426などの大容量記憶装置は、SCSIバス416に接続されている。SCSIバスは、SCSIバスアダプタ430を介してPCIバス412と相互接続されている。SCSIバスアダプタ430は、Symbios製53C8xxSCSIプロセッサファミリから選択されたプロセッサなどのプロセッサコンポーネントを含み、標準のPCIバスプロトコルを使ってPCIバス412にインターフェースする。SCSIバスアダプタ430は、一部を以下で説明する、SCSIバスプロトコルを使ってSCSIバス416にインターフェースする
。SCSIバスアダプタ430は、一般に、SCSIバスに接続されている各大容量記憶装置424〜426、またはSCSI装置内に組み込まれているSCSIコントローラ(不図示)とコマンドおよびデータを交換する。SCSIコントローラは、SCSIバスを介してSCSIアダプタから受け取られるSCSIコマンドを解釈してそれに応答し、論理装置とインターフェースを取り、それを制御することによってSCSIコマンドを実施するハードウェア/ファームウェアコンポーネントである。論理装置は、1つまたは複数の物理装置に、または1つまたは複数の物理装置の部分に対応していてもよい。物理装置には、ディスクドライブ、テープドライブ、CD−ROMドライブなどのデータ記憶装置が含まれる。
入出力コマンドと呼ばれる、2タイプの重要なコマンドが、SCSI装置に、論理装置からデータを読み取り、論理装置にデータを書き込むよう指図する。入出力トランザクションは、読取り入出力コマンドによって、または書込み入出力コマンドによって一部実施される、一般に、CPU402などの処理コンポーネントによって開始される、コンピュータシステムの2つのコンポーネントの間のデータ交換である。よって、入出力トランザクションは、読取り入出力トランザクションおよび書込み入出力トランザクションを含む。
SCSIバス416は、いくつかのデータビットを同時にトランスポートすることのできるパラレルバスである。SCSIバスによって同時にトランスポートされ得るデータビットの数を、バスの幅という。様々なタイプのSCSIバスは、8ビット、16ビット、および32ビットの幅を有する。16ビットおよび32ビットのSCSIバスを、ワイドSCSIバスという。
すべてのコンピュータバスおよびプロセッサと同様に、SCSIバスは、バス上の動作およびデータ転送の速度を決定するクロックによって制御される。SCSIバスのクロック速度は様々である。SCSIバスの幅と、SCSIバスが動作するクロック速度の組み合わせが、1秒当たりにそのSCSIバスを介してトランスポートされ得るバイト数、すなわちSCSIバスの帯域幅を決定する。様々なタイプのSCSIバスは、毎秒2メガバイト(「Mバイト」)未満から、最大毎秒40Mバイトまでに及ぶ帯域幅を有し、将来的には毎秒80Mバイトおよび、恐らく、毎秒160Mバイトまで増大される予定である。帯域幅の増大は、SCSIバスの物理的長さの制限の増大を伴い得る。
図5に、SCSIバストポロジを示す。コンピュータシステム502、または他のハードウェアシステムは、1つまたは複数のSCSIバスアダプタ504および506を含んでいてもよい。SCSIバスアダプタ、SCSIバスアダプタが制御するSCSIバス、およびそのSCSIバスに接続されている任意の周辺装置は、一緒の1つのドメインを構成する。図5のSCSIバスアダプタ504は、第1のドメイン508と関連付けられており、SCSIバスアダプタ506は、第2のドメイン510と関連付けられている。最新のSCSI−2バス実装形態は、15の異なるSCSI装置513〜515および516〜517が、単一のSCSIバスに接続されることを可能にする。図5において、SCSI装置513〜515は、SCSIバスアダプタ506によって制御されるSCSIバス518に接続されており、SCSI装置516〜517は、SCSIバスアダプタ504によって制御されるSCSIバス520に接続されている。各SCSIバスアダプタおよびSCSI装置は、個々のSCSIバス内の装置またはアダプタを一意に識別するSCSI識別番号、すなわちSCSI_IDを有する。慣例により、SCSIバスアダプタはSCSI_ID7を有し、SCSIバスに接続されたSCSI装置は、0から6までと8から15までのSCSI_IDを有する。SCSI装置513などのSCSI装置は、それぞれが1つまたは複数の物理装置の部分を含む、いくつかの論理装置とインターフェースを取ってもよい。各論理装置は、その論理装置を制御するSCSI装置に対してその論理装置を一意に識別する論理ユニット番号(「LUN」)によって識別される。例えば、SCSI装置513は、それぞれ、LUN0、1、2を有する論理装置522〜524を制御する。SCSI用語によれば、SCSIバス上で入出力コマンドを開始する装置を開始側といい、SCSIバスを介して、SCSI装置に、入出力操作を実行するよう指図する入出力コマンドを受け取るSCSI装置を宛先という。
一般に、SCSIバスアダプタ504、506などのSCSIバスアダプタは、宛先装置にコマンドを送ることによって入出力操作を開始する。宛先装置513〜515および516〜517は、SCSIバスから入出力コマンドを受け取る。次いで、宛先装置513〜515および516〜517は、それらが制御する1つまたは複数の論理装置とのインターフェースをとり、論理装置からデータを読み取ってSCSIバスを介して開始側に返し、または開始側からSCSIバスを介して受け取られたデータを論理装置に書き込むことによってコマンドを実施する。最後に、宛先装置513〜515および516〜517は、コマンドの実施の成功または失敗を指示する状況メッセージで、SCSIバスを介して開始側に応答する。
図6A〜6Cに、読取りおよび書込み入出力操作の開始および実施に関与するSCSIプロトコルを示す。読取りおよび書込み入出力操作は、SCSI装置によって実行される大量の入出力操作を構成する。SCSIバスによって相互接続された大容量記憶装置のシステムの動作効率を最大にしようとする取り組みは、大部分が、読取りおよび書込み入出力操作が実行される効率を最大にすることを対象としている。よって、以下の考察においては、様々なハードウェア装置のアーキテクチャ上の特徴を、読取りおよび書込み操作の観点から論じる。
図6Aに、SCSI開始側、通常はSCSIバスアダプタによる、SCSI宛先、通常は、1つまたは複数の論理装置と関連付けられたSCSI装置に組み込まれているSCSIコントローラへの、読取りまたは書込み入出力コマンドの送出を示す。読取りまたは書込み入出力コマンドの送出を、SCSI入出力操作のコマンドフェーズという。図6Aは、中央の縦線606で、開始側602セクションと宛先604セクションとに分かれている。開始側セクションも宛先セクションも、SCSIバスの状態を記述する「状態」606という名称の列606、608と、開始側と宛先とにそれぞれ関連付けられるSCSIバスイベントを記述する「イベント」という名称の列610、612を含む。入出力コマンドの送出に関与するバス状態およびバスイベントは、図6Aの上から図6Aの下へ時間的に降順で並んでいる。また、図6B〜6Cも、このフォーマットに従ったものである。
図6Aに示す、開始側SCSIバスアダプタから宛先SCSI装置への入出力コマンドの送出は、宛先SCSI装置による読取りまたは書込み入出力操作を開始させる。図4を参照すると、SCSIバスアダプタ430は、入出力トランザクションの一部として入出力操作を開始する。一般に、SCSIバスアダプタ430は、PCIバス412、システムコントローラ404、およびCPUバス406を介して、CPU402から、SCSIバスアダプタに、読取り操作または書込み操作を実行するよう指図する読取りまたは書込みコマンドを受け取る。読取り操作では、CPU402は、SCSIバスアダプタ430に、大容量記憶装置424〜426からデータを読み取り、そのデータをSCSIバス416、PCIバス412、システムコントローラ404、およびメモリバス410を介して、システムメモリ408内の場所に転送するよう指図する。書込み操作では、CPU402は、システムコントローラ404に、システムメモリ408から、メモリバス410、システムコントローラ404、およびPCIバス412を介してSCSIバスアダプタ430にデータを転送するよう指図し、SCSIバスアダプタ430に、SCSIバスを介して、データが書き込まれる大容量記憶装置424〜426にデータを送るよう指図する。
図6Aは、現在、SCSI装置上でトランスポートされているコマンドもデータもないことを指示する、バス空き状態614のSCSIバスで開始する。開始側、すなわちSCSIバスアダプタは、バスを調停状態616に入らせるために、SCSIバスのBSY、D7およびSEL信号線をアサートする。この状態において、開始側は、すべての装置に、SCSIバス上でコマンドを送るという意図を告知する。調停が必要なのは、任意の瞬間において、ただ1つの装置だけが、SCSIバスの動作を制御できるからである。開始側がSCSIバスの制御を獲得したと仮定すると、次いで、開始側は、SCSIバスを選択状態618に入らせるために、ATN信号線および宛先SCSI_IDに対応するDX信号線をアサートする。開始側または宛先は、前述の、調停状態616から選択状態618への状態変更などのSCSIバス状態の変更を生じさせるために、特定の順序で様々なSCSI信号線をアサートし、ドロップする。これらのシーケンスは、SchmidtおよびANSI規格に記載されており、したがって、詳細な説明は行わない。
宛先は、宛先が開始側によって選択されていることを感知すると、入出力操作のコマンドフェーズを完了するために、SCSIバスの制御620を引き受ける。次いで、宛先は、SCSI信号線をメッセージ出力状態622に入るように制御する。メッセージ出力状態で発生する第1のイベントで、宛先は、開始側から、識別メッセージ623を受け取る。識別メッセージ623は、後に続くコマンドメッセージのアドレス指定先のLUNを識別するLUNフィールド624を含む。また、識別メッセージ623は、一般に、宛先に対して、後に続く入出力コマンドのその宛先による実施の間に、宛先がSCSIバスから切断することを許可されていると指示するように設定されているフラグ625を含む。次いで、宛先は、宛先に対して、後に続く入出力コマンドがどのようにして待ち行列に入れられるべきか指示すると共に、宛先に待ち行列タグ627を提供する待ち行列タグメッセージ626を受け取る。待ち行列タグは、入出力コマンドを識別する1バイトである。したがって、SCSIバスアダプタは、LUNごとに異なる入出力コマンドを同時に処理することができる256。開始側SCSIバスアダプタのSCSI_IDと、宛先SCSI装置のSCSI_IDと、宛先LUNと、待ち行列タグとの組み合わせは、SCSIバス内で、後に続く入出力コマンドに対応する入出力操作を一意に識別するI_T_L_Q連結参照番号を構成する。次に、宛先装置は、SCSIバス信号線をコマンド状態628に入るように制御する。コマンド状態において、宛先は、開始側に、入出力コマンド630を請求し、開始側からそれを受け取る。入出力コマンド630は、実行されるべき特定のコマンド、この場合は、読取りコマンドまたは書込みコマンドを識別する命令コード632と、コマンドによって指定される読取りまたは書込み操作の開始点になる論理装置の論理ブロックを識別する論理ブロック番号636と、コマンドの実行中に読み取られ、または書き込まれるブロックの数を指定するデータ長638とを含む。
宛先が入出力コマンドを受け取り、それを処理すると、宛先装置は、一般に、SCSIバス信号線を、宛先装置が開始側装置に切断メッセージ642を送り返すためのメッセージ入力状態640に入るように制御する。宛先は、一般には、宛先が、論理装置をコマンドによって指定された読取りまたは書込み操作に備えて論理装置と対話し始めるために、SCSIバスから切断する。宛先は、データを受け取るためのバッファを準備する必要があることも、ディスクドライブまたはCD−ROMドライブの場合には、宛先装置は、論理装置に、読取りまたは書込みコマンドの開始点に指定された適切なブロックに移動するよう指図することもある。切断することによって、宛先装置は、SCSIバスアダプタと宛先装置の間の次のメッセージ、コマンド、またはデータのトランスポートのためにSCSIバスを解放する。このようにして、多数の異なる入出力操作が、SCSIバス上で同時に多重化され得る。最後に、宛先装置は、SCSIバスをバス空き状態644に戻すために、BSY信号線をドロップする。
次いで、宛先装置は、読取りまたは書込み操作に備えて論理装置を準備する。論理装置がデータを読み取り、または書き込むことのできる状態になると、入出力操作のデータフェーズが続く。図6Bに、SCSI入出力操作のデータフェーズを示す。SCSIバスは、最初は、バス空き状態646にある。宛先装置は、目下、読取り入出力コマンドに応答してデータを返し、または書込み入出力コマンドに応答してデータを受け入れる用意ができており、SCSIバス信号線を調停状態648に入るように制御する。宛先装置が、SCSIバスの制御の調停に成功したと仮定すると、宛先装置は、SCSIバス信号線を再選択状態650に入るように制御する。再選択状態は、再選択状態において通信すべきSCSIバスアダプタの選択を行うのは、選択状態において宛先装置を選択するSCSIバスアダプタではなく、宛先装置であることを除けば、上記図6Aで説明した、選択状態と類似したものである。
宛先装置は、SCSIバスアダプタを選択した後で、SCSIバス信号線を、SCSIバスをメッセージ入力状態652に入らせるように操作する。メッセージ入力状態で、宛先装置は、SCSIバスアダプタに識別メッセージ654と待ち行列タグメッセージ656の両方を送る。これらのメッセージは、図6Aに示す、開始側から宛先への入出力コマンドの送出時に、開始側によって宛先装置に送られた識別メッセージおよび待ち行列タグメッセージと同じものである。開始側は、開始側および宛先装置のSCSI_IDと、宛先LUNと、待ち行列タグメッセージに含まれる待ち行列タグとの組み合わせであるI_T_L_Q連結参照番号を使って、読取り操作の場合には、データが続いて宛先から開始側に送られ、書込み操作の場合には、データが続いて開始側によって送られる入出力トランザクションを識別することができる。よって、I_T_L_Q連結参照番号は、読取りの場合には、宛先装置からデータを受け取るのに、書込みの場合には、宛先装置にデータを送り出すのに適したバッファを位置指定するために、SCSIバスアダプタによって、未処理の入出力コマンドの表へのインデックスとして使用され得る入出力操作ハンドルである。
識別メッセージおよび待ち行列タグメッセージを送った後で、宛先装置は、SCSI信号線をデータ状態658に遷移するように制御する。読取り入出力操作の場合、SCSIバスは、データ入力状態に遷移する。書込み入出力操作の場合、SCSIバスは、データ出力状態に遷移する。SCSIバスがデータ状態にある間、宛先装置は、各SCSIバスクロックサイクルごとに、データが送られる特定のSCSIバスの幅に等しいビット数サイズを有するデータ単位を送る。一般に、各データ単位の転送の一部として信号線ACKおよびREQが関与するSCSIバス信号線ハンドシェークが生じる。例えば、読取り入出力コマンドの場合、宛先装置は、次のデータ単位をSCSIバスに配置し、REQ信号線をアサートする。開始側は、REQ信号線のアサーションを感知し、SCSIバスから送られたデータを取り出し、データの受け取りを確認するためにACK信号線をアサートする。この種のデータ転送を非同期転送という。また、SCSIバスプロトコルは、開始側から第1の確認を受け取る前に、宛先装置がいくつかのデータ単位を転送することも可能にする。同期転送というこの転送モードでは、第1のデータ単位の送り出しとその送り出し確認の受け取りの間の待ち時間が回避される。データ送り出しの間、宛先装置は、開始側に、ポインタ保存メッセージに続けて切断メッセージを送り、次いで、SCSIバス信号線をバス空き状態に入るように制御することによって、データ送出に割込みをかけることができる。これは、宛先装置が、次のデータを受け取り、または送り出す前に、制御する論理装置と対話するために休止することを可能にする。SCSIバスから切断した後、宛先装置は、開始側が、割込みをかけられた点からデータ受け取りまたは転送を再開することができるように、後で再度、SCSIバスの制御を調停し、開始側に別の識別メッセージおよび待ち行列タグメッセージを送ってもよい。データ状態658に割込みをかける切断および再接続660の一例が図3Bに示されている。最後に、入出力操作のすべてのデータが送られると、宛先装置は、SCSI信号線をメッセージ入力状態662に入るように制御し、メッセージ入力状態662で、宛先装置は、任意でポインタ保存メッセージを先行させて、開始側に切断メッセージを送る。切断メッセージを送った後で、宛先装
置は、SCSIバスがバス空き状態664に遷移するように、BSY信号線をドロップする。
図6Bに示すような入出力操作のためのデータ送出に続いて、宛先装置は、入出力操作の状況フェーズの間に、開始側に状況を返す。図6Cに、入出力操作の状況フェーズを示す。図6A〜6Bの場合と同様に、SCSIバスは、図3Bの場合と同様に、バス空き状態666から調停状態668、再選択状態670、メッセージ入力状態672に遷移する。メッセージ入力状態672の間の宛先による開始側への識別メッセージ674および待ち行列タグメッセージ676の送出に続いて、宛先装置は、SCSIバス信号線を状況状態678に入るよう制御する。状況状態678で、宛先装置は、開始側に、入出力コマンドが正常に完了したか否か指示する単一の状況バイト684を送る。図6Cでは、状況コード0で示される正常な完了に対応する状況バイト680が、宛先装置から開始側に送られることが示されている。状況バイトの送出に続いて、宛先装置は、SCSIバス信号線を、宛先装置が開始側にコマンド完了メッセージ684を送るメッセージ入力状態682に入るように制御する。この時点において、入出力操作は完了している。次いで、宛先装置は、SCSIバスがバス空き状態686に戻るように、BSY信号線をドロップする。SCSIバスアダプタは、今や、その入出力コマンドの部分を終了し、コマンドを実行するために割り振られた任意の内部リソースを解放し、PCIバスを介してCPUに完了メッセージまたは状況を返すことができる。
SCSIプロトコルのFCPへのマッピング
図7Aおよび7Bに、開始側と宛先の間で交換されるFCPシーケンスと、図6A〜6Cに示すSCSIバスフェーズおよび状態の間のマッピングを示す。図7A〜7Bにおいて、宛先SCSIアダプタは、FCを介して開始側と通信し、SCSIバスを介して宛先SCSI装置と通信することができるように、FCPホストアダプタと一緒にパッケージされているものとする。図7Aには、読取り入出力トランザクションのFCPシーケンスとSCSIフェーズおよび状態の間のマッピングが示されている。このトランザクションは、開始側が、FCを介して宛先SCSIアダプタにFCP_CMND702データペイロードを含む単一フレームのFCPシーケンスを送るときに開始される。宛先SCSIバスアダプタは、FCP_CMNDフレームを受け取ると、調停、再選択、メッセージ出力、コマンドおよびメッセージ入力を含む、図6Aに示すコマンドフェーズの各SCSI状態704を経て進む。コマンドフェーズの終わりに、図6Aに示すように、入出力トランザクションの宛先であるSCSI装置は、SCSIバスを解放するためにSCSIバスから切断すると同時に、宛先SCSI装置は、トランザクションを実行する準備をする。後で、宛先SCSI装置は、SCSIバス制御を再調停し、入出力トランザクションのデータフェーズ706を開始する。この時点において、SCSIバスアダプタは、開始側に、現在データ送出が続行し得ることを指示するFCP_XFER_RDY単一フレームシーケンス708を送り返してもよい。読取り入出力トランザクションの場合、FCP_XFER_RDY単一フレームシーケンスは任意である。データフェーズが進むにつれて、宛先SCSI装置は、論理装置からのデータ読取り、およびそのデータの、SCSIバスを介した宛先SCSIバスアダプタへの送出を開始する。次いで、宛先SCSIバスアダプタは、宛先SCSI装置から受け取ったデータを、合わさって入出力読取りトランザクションに対応するエクスチェンジの第3のシーケンスを構成するいくつかのFCP_DATAフレームにパッケージし、FCを介してそれらのFCP_DATAフレームを開始側に送り返す。すべてのデータが送られ、宛先SCSI装置がSCSIバスの制御を放棄すると、次いで、宛先SCSI装置は、入出力トランザクションの状況フェーズ714を開始
するために、再度、SCSIバスの制御を調停する。このフェーズで、SCSIバスは、宛先SCSI装置から宛先SCSIアダプタにSCSI状況バイトを送るために、図7Aに示すように、バス空き状態から、調停、再選択、メッセージ入力、STATUS、メッセージ入力、バス空き状態へと遷移する。状況バイトを受け取ると、宛先SCSIバスアダプタは、状況バイトをFCP_RSP単一フレームシーケンス716にパッケージし、FCを介してそのFCP_RSP単一フレームシーケンスを開始側に送り返す。これで読取り入出力トランザクションが完了する。
多くのコンピュータシステムには、宛先FCホストアダプタと宛先SCSIバスアダプタの間に、PCIバスなど、別の内部コンピュータバスがあることもある。言い換えると、FCホストアダプタおよびSCSIアダプタは、単一の宛先コンポーネント内に一緒にパッケージされていなくてもよい。簡単にするために、図7A〜Bには、そうした別の相互接続は図示していない。
図7Bに、図7Aと同様に、FCP_CMNDフレーム718によって指示された書込み入出力トランザクション時の、FCPシーケンスと、SCSIバスフェーズおよび状況の間のマッピングを示す。図7Bが図7Aと異なるのは、書込みトランザクション時に、FCP_DATAフレーム722〜725が、開始側から、FCを介して宛先に送られ、宛先から開始側に送られたFCP_XFER_RDY単一フレームシーケンス720が、読取り入出力トランザクションの場合のように、任意ではなく、必須であることだけである。図7Aと同様に、書込み入出力トランザクションは、宛先がいつ開始側にFCP_RSP単一フレームシーケンス726を返すかを含む。
IDE/ATAディスクドライブ
IDE/ATAドライブは、ディスクロジックコントローラとハードディスクをまとめて単一モジュールとして統合するために開発されたものである。IDE/ATAドライブは、特に、ISAバスを介した、PCシステムへの容易な統合のために設計された。元々、IDE/ATAドライブは、システムまたはバスクロックによって制御される不連続な時間間隔での、IDE/ATAドライブとシステムの間の2バイトデータの交換を可能にするように、パラレルの16ビット相互接続を用いて設計された。残念ながら、パラレルバス相互接続は、現在の毎秒100から133MBのデータ転送速度を用いると性能限界に達し、40または80ピンリボンケーブル接続は、もはや、最新のコンピュータシステム内の内部コンポーネントの、窮屈な、高密度パッケージングには適合しない。これらの理由で、SerialATA(「SATA」)規格が策定されており、現在は、80ピンリボンケーブル接続が、4本心線シリアルケーブルで置き換えられている、SATAディスクドライブが生産されている。SATAディスクの初期データ転送速度は、毎秒150MBであり、すぐに毎秒300MBに、次いで、毎秒600MBに増大すると期待されている。ATAシリアルディスクドライブと周辺装置相互接続(「PCI」)ベースのコントローラの間の転送でデータを直列化するのに、標準8B/10B符号化が使用される。最終的には、SATA装置の直接相互接続を提供するSATA技術を完全に組み込むように、様々な入出力コントローラを統合し、周辺装置およびバスへのインターフェースを提供し、1つまたは複数のCPUとメモリをリンクさせる第2のブリッジとの間でデータを転送するサウスブリッジコントローラが、設計されてもよい。
ATAインターフェース、特に、ATA−5およびATA−6標準インターフェースは、外部プロセッサまたはロジックコントローラが、ATAディスクドライブ内のロジックコントローラに、基本データ転送コマンド、シーキング、キャッシュ管理ならびにその他の管理および診断に関連するタスクを実行するよう指図することができるようにする様々なコマンドをサポートする。以下の表2は、プロトコル「1」などのプロトコル番号を、一般的なタイプのATAコマンドと関連付けるものである。コマンドのタイプには、プログラムされた入力/出力(「PIO」)、非データコマンド、直接メモリアクセス(「DMA」)コマンドが含まれる。
(表2)
プロトコル コマンドのタイプ
1 PIOデータ入力コマンド
2 PIOデータ出力コマンド
3 非データコマンド
4 DMAコマンド
5 DMAコマンド
以下に示す表3に、いくつかのATAコマンドを、上記表2で定義されているコマンドが属するコマンドのタイプを指示する対応プロトコルと共に列記する。
(表3)
プロトコル ATAコマンド
3 電力モードチェック
2 マイクロコードダウンロード
3 エグゼクティブ装置診断
3 キャッシュフラッシュ
3 拡張キャッシュフラッシュ
1 装置識別
3 即座のアイドルモードへの移行
4 DMA読取り
4 拡張DMA読取り
3 検証セクタ読取り
3 拡張検証セクタ読取り
3 シーク
3 機能設定
3 休眠
4 DMA書込み
4 拡張DMA書込み
電力モードチェックコマンドは、ホストに、ATA装置の現在の電力モードを判定させる。マイクロコードダウンロードコマンドは、ホストに、ATA装置のマイクロコードを変更させる。エグゼクティブ装置診断コマンドは、ホストに、ATA装置によって実施される診断テストを呼び出させる。キャッシュフラッシュコマンドは、ホストに、ATA装置がその書込みキャッシュをフラッシュするよう要求させる。表には、このコマンドの2つのバージョンが含まれており、その拡張バージョンは、ATA−6標準インターフェースをサポートする装置上で利用可能な48ビットアドレス指定機能を表す。表3に示すコマンドの別の拡張バージョンについては、以下で別個には論じない。装置識別コマンドは、ホストがATA装置に、装置によって提供される論理セクタ、シリンダおよびヘッドの数、装置によってサポートされるコマンド、装置によってサポートされる機能、および他の類似のパラメータを含むパラメータ情報を問い合わせることができるようにする。DMA読取りコマンドは、ホストに、DMAデータ転送プロトコルを使って装置からデータを読み取らせ、一般に、大量のデータではずっと効率的である。検証セクタ読取りコマンドは、ホストが、ATA装置に、ホスト内に格納されたデータの一部分を読み取り、装置から読み取られたデータをホストに転送せずにエラー条件が発生しているか否か判定するよう指図することができるようにする。シークコマンドは、ホストが、ATA装置に、ホストが後続コマンドにおいて1つまたは複数の論理ブロックにアクセスし得ることを知らせて、ATA装置に、その後の指定された1つまたは複数の論理ブロックへのアクセスを実行するためのヘッド位置決めを最適化させることができるようにする。機能設定コマンドは、ホストが、ATA装置によって提供される機能をオンおよびオフにするために、装置内の様々なパラメータを変更できるようにする。休眠コマンドは、ホストが、ATA装置に、スピンダウンし、後続のリセットコマンドを待つよう指図することができるようにする。DMA書込みコマンドは、ホストが、一般に、大量のデータの場合にはずっと効率的であるDMAデータ転送を使ってATA装置にデータを書き込めるようにする。
FCベースのディスクアレイ
中規模および大規模コンピュータシステムでは、データ格納要求は、一般に、組込みディスクドライブを含む、組込み大容量記憶装置の容量をはるかに上回る。かかるシステムでは、ローカルエリアネットワーク、光ファイバネットワーク、およびその他の高帯域幅通信媒体を介して中規模およびハイエンドコンピュータシステムにリンクされている、内蔵プロセッサを含む、安価なディスクの冗長アレイ(「RAID」)などの、ハイエンドの大容量装置を用いるのが一般的になっている。ディスクアレイの設計および製造を円滑にするものとして、ディスク製造者は、ディスクアレイ内のディスクドライブをディスクアレイコントローラと直接相互接続するためのFCポートを含むディスクドライブを提供している。一般には、FC調停ループトポロジを用いて、ディスクアレイ内で個々のFCディスクドライブがディスクアレイコントローラと相互接続される。
図8A〜Dに、ディスクアレイ内でのFCディスクの使用に関連するいくつかの問題を示す。図8Aには、ディスクアレイの内部コンポーネントの比較的抽象的な表現が示されている。以下で論じる図8B〜Dおよび図9では、同じ図示規則を用いる。図8Aで、ディスクアレイコントローラ802は、高帯域幅通信媒体804を介して、リモートコンピュータシステムおよびその他のリモートエンティティと相互接続されている。ディスクアレイコントローラは、1つまたは複数のプロセッサと、1つまたは複数の、一般に比較的大容量の電子メモリと、リモートコンピュータシステムにディスクアレイ内のディスクドライブへの比較的高水準の論理ユニットおよび論理ブロックのインターフェースを提供するために、ディスクアレイ制御ファームウェアおよびソフトウェアをディスクアレイコントローラ内で格納させ、実行させるその他のコンポーネントとを含む。図8Aに示すように、ディスクアレイは、ディスクアレイコントローラ802と、いくつかのディスクドライブ806〜813とを含む。FCディスクドライブは、FC調停ループ814を介してディスクアレイコントローラ802と相互接続されている。図8Aに抽象的に示すようなFCベースのディスクアレイは、記憶媒体として標準的で容易に入手可能なFCディスク、相互接続のためのFC調停ループ、およびディスクアレイコントローラ内の標準FCコントローラを使って、比較的容易に設計され、製造される。FCは、高速シリアル通信媒体であるため、FC調停ループ814は、FCディスク806〜812とディスクアレイコントローラ802の間のデータ転送のために十分な帯域幅を提供する。
しかしながら、FCディスクドライブなど、FC調停ループ内の各FCノードにおいては、データが、ノードのFCポートを介して処理され、転送されるため、相当なノード遅延が生じる。図8Aに、ノード遅延を、添え字付きの小文字「t」でラベル付けされた短い矢印で示す。ノード遅延は、FC調停ループ内で累積され、FC調停ループ内のFCノードの数に比例する相当な累積ノード遅延をもたらす。
図8Aに示すディスクアレイ実装形態に伴う第2の問題が、FC調停ループが、潜在的な単一障害点を表すことである。一般に、FCディスクは、機能しないFCディスクを調停ループから隔離するために、ポートバイパス回路を用いて増強されてもよいが、ポートバイパス回路だけでは防止できないいくつかの異なる障害モードがある。
第3の問題は、ノードを調停ループにリンクさせるFCポートに障害が発生したときに生じる。かかる場合には、複雑で、信頼できない技法を用いて、障害が発生したFCポートを識別し、隔離しようとしなければならない。一般に、障害が発生したFCポートは、ループトポロジを分断し、ディスクアレイコントローラは、障害が発生したノードを隔離するために、順次、各ノードを迂回するポートバイパス回路をアクティブ化しようとしなければならない。しかしながら、この技法では、様々な障害モードの下で、障害が発生したノードを識別できないこともある。よって、ノード障害は、調停ループトポロジに伴う深刻な問題である。
図8Bに、潜在的な単一障害点問題への解決策を示す。図8Bに示すように、ディスクアレイコントローラ802は、2つの別々の、独立のFC調停ループ814および816を介してFCディスク806〜813と相互接続されている。2つの別々のFC調停ループを使用すれば、単一障害点問題は、おおむね除去される。しかしながら、ノード遅延問題は、2つのFC調停ループの使用によっては改善されない。しかも、各FCディスクが2つの別々のFCポートを含まなければならないため、個々のFCディスクは、むしろより複雑でより高価になる。最後に、障害発生ポートの識別および隔離の問題には、部分的にしか対処されない。なぜなら、2つの調停ループの一方を分断するノード障害の場合、他方の調停ループは機能し続けるが、もはや通信媒体における2倍の冗長性がなくなるからである。2倍の冗長性を復元するには、ディスクアレイコントローラは、依然として、障害が発生したノードを識別し、隔離しようとする必要があり、前述のように、多くの障害モードは、容易に識別し、隔離することができない。
図8Cに、FCベースのディスクアレイの実装形態に伴う別の問題を示す。一般に、ますます大量の利用可能記憶空間がディスクアレイに要求されると、結果として、より多数の個別FCディスクが追加されることになる。しかしながら、追加ディスクを含めることは、ノード遅延問題を悪化させ、また、前述のように、単一のFC調停ループは、最大で127ノードまでしか含むことができない。この最大ノード問題を解決するために、さらなる独立FC調停ループがディスクアレイに追加される。図8Dに、第1のFCディスクの組818が2つの別々のFC調停ループ814および816を介してFCコントローラ802と相互接続されており、第2のFCディスクの組820が、第2のFC調停ループ対822および824を介してディスクアレイコントローラ802と相互接続されている、より大容量のディスクアレイを示す。FCディスクの各組818および820をシェルフといい、一般に、冗長電源システム、冗長制御パス、およびディスクアレイ全体の耐障害性および高可用性に貢献するその他の機構を備える別々の筐体に含まれる。しかしながら、各シェフルの追加は、ディスクアレイコントローラ802内のFCコントローラとFCポートの数を増加させる。また、各別々のFC調停ループが、そのFC調停ループ内に含まれるFCノードの累積ノード遅延を被ることにも留意されたい。よって、ディスクアレイの設計者、製造者、およびユーザは、FCベースのディスクアレイ内でディスクアレイコントローラとFCディスクとを相互接続する、より柔軟で、より費用効果的で、より効率のよい方法の必要性を認識している。加えて、ディスクアレイの設計者、製造者、およびユーザは、ポート障害およびその他の通信およびコンポーネント障害の、より容易で、より信頼性の高い識別を可能にする、FCベースのディスクアレイ内でディスクアレイコントローラとFCディスクとを相互接続する方法の必要性も認識している。
本発明の一実施形態は、ストレージシェルフルータの集積回路実装形態である。この実装形態では、ディスクアレイまたはその他の大規模な、別々に制御される大容量記憶装置のストレージシェルフ内において、ストレージシェルフ内のディスクドライブを、高帯域幅通信媒体と相互接続するために、単独で、または組み合わせて用いることができる。高帯域幅通信媒体は、さらに、ディスクアレイコントローラ、または類似の高性能大容量記憶装置のコントローラを有するストレージシェルフを相互接続する。また、前述の実施形態は、ディスクドライブと、1つまたは複数のストレージシェルフ・ルータの間の冗長通信リンクを提供するパス制御カードも含む。図8A〜Dを参照して前述したように、ディスクアレイは、現在、ストレージシェルフ内においてFC互換ディスクドライブを用いることができ、各FC互換ディスクドライブは、FC互換ディスクドライブをディスクアレイコントローラと相互接続する1つまたは2つのFC調停ループ、あるいはその他のFCファブリックトポロジ上のFCノードとして働く。これに対して、本発明の一実施形態を一部表すストレージシェルフ・ルータは、ポイントツーポイントシリアル通信媒体によってストレージシェルフ内の各ディスクドライブに直接接続され、1つまたは複数の、ファイバチャネル調停ループなどの高帯域幅通信媒体を介してディスクアレイコントローラと相互接続された仲介通信ハブとして働く。
以下の、(1)概要、(2)ストレージシェルフ内部トポロジ、(3)パス制御カード概要、(4)ストレージシェルフ・ルータ概要、(5)ストレージシェルフインターフェース、(6)ストレージシェルフ・ルータ実装形態、および(7)ストレージシェルフ・ルータ経路指定層を含む各小節では、本発明の一実施形態を詳細に説明する。加えて、コンピュータプログラム付録を2枚のコンパクトディスクで提供し、参照によりこれを本明細書に組み込むものとする。このコンピュータプログラム付録は、経路指定層論理を指定するRTLコード、ストレージシェルフ・ルータ実装形態のC言語モデル、および5章からなるストレージシェルフ・ルータ実装形態の参照マニュアルを含む。2枚のコンパクトディスクのそれぞれに含まれるファイルを以下に示す。
RTL経路指定層仕様
ファイル名 ファイルサイズ 作成日時
rl 45KB 1/3/2003 11:25 AM
rl_router 145KB 12/4/2002 10:48 AM
rl_rt 20KB 1/3/2003 11:25 AM
rl_rt_ert 86KB 10/8/2002 6:21 PM
rl_rt_irt 168KB 12/3/2002 6:31 PM
rl_rt_itt 12KB 1/3/2003 11:26 AM
rl_rt_lpt 16KB 12/3/2002 6:31 PM
C言語モデル
ファイル名 ファイルサイズ 作成日時
sim1216.c 55KB 9/5/2002 1:43 AM
参照マニュアル
ファイル名 ファイルサイズ 作成日時
chaps1_5 1,881KB 1/13/2003 11:36 AM
概要
図9に、図8A〜Dに用いられている図示規則を使って、本発明の一実施形態を表すストレージシェルフ・ルータを抽象的に示す。図9では、ディスクアレイコントローラ902が、LANまたは光ファイバ通信媒体904を介して1つまたは複数のリモートコンピュータシステムにリンクされている。ディスクアレイコントローラ902は、FC調停ループ908を介してストレージシェルフ・ルータ906と相互接続されている。ストレージシェルフ・ルータ906は、相互接続918などの、別々のポイントツーポイント相互接続を介して、ストレージシェルフ910〜917内のディスクドライブのそれぞれと直接相互接続されている。図9に抽象的に示す実装形態を、図8A〜Dに示す実装形態と比べると、図8A〜Dに示す実装形態で識別された問題が、ストレージシェルフ・ルータベースの実装形態によって対処されていることがすぐに明らかになる。第1に、図9に示す実装形態のFC調停ループ内の唯一のノード遅延は、単一のFC調停ループノードとして働くストレージシェルフ・ルータによって導入されるものである。これに対して、図8Aに示すように、各FC互換ディスクドライブは、別々のノード遅延を導入し、FC調停ループ814上の累積ノード遅延は、FC調停ループによって相互接続されるFC互換ディスクドライブの数に比例する。ストレージシェルフ・ルータは、FCポートと、ストレージシェルフ・ルータを個々のディスクドライブにリンクさせる内部シリアル相互接続との間の高度に並列で、効率のよいデータ転送を円滑にするように設計されている。したがって、ストレージシェルフ・ルータをFC調停ループ908と相互接続する搭載FCコントローラによって導入される不可避のノード遅延以外には、ストレージシェルフ・ルータによって、実質的な遅延も、累積遅延も導入されない。
第2に、ストレージシェルフ・ルータを使用すれば、はるかに多数のディスクドライブが、ディスクアレイコントローラと相互接続され得る。図9に示す実装形態で用いられているFC調停ループ908は、ディスクアレイコントローラとストレージシェルフ・ルータの2つのノードだけしか含まない。各ストレージシェルフ・ルータが8台のディスクドライブをFC調停ループと相互接続させることができると仮定すると、単一のFC調停ループを使って、125のストレージシェルフ・ルータを、あるいは、通常、FCファブリック(共用ループ)用に予約されているアドレスがストレージシェルフ・ルータによって使用される場合には、126のストレージシェルフ・ルータをディスクアレイコントローラと相互接続することができ、それによって、8000台以上の個別ディスクドライブが、単一のFC調停ループを介してディスクアレイコントローラと相互接続される。前述のように、高可用性が必要とされないときには、16000台以上の個別ディスクドライブが、単一のFC調停ループを介してディスクアレイコントローラと相互接続されてもよい。これに対して、図8Cに示すように、個別のFC互換ディスクドライブがそれぞれ別個のFCノードとして機能するときには、単一のFC調停ループを介して、たった125台のディスクドライブ、または、通常、FCファブリック(共用ループ)用に予約されているアドレスがディスクドライブによって使用される場合には、126台のディスクドライブだけしかディスクアレイコントローラと相互接続され得ない。
第3に、ストレージシェルフ・ルータを用いたストレージシェルフ内の障害を識別し、隔離する方がはるかに容易である。従来の、1FC調停ループノード当たり1ディスクドライブの実装形態では、いくつかの障害モードの下において、障害が発生したFCポートまたはFCリンクを識別するのが極めて難しく、隔離するのが困難なことがあり、他方、これに対して、ポイントツーポイントリンクを介してストレージシェルフ・ルータと相互接続されたディスクドライブに関連付けられる問題は、比較的容易に識別され、障害が発生したポートまたはリンクが容易に隔離される。
各ディスクドライブは、いくつかの現在利用可能な内部相互接続技術のいずれかを介してストレージシェルフ・ルータ906に接続されている。一実施形態では、SATA互換相互接続を用いて、SATAディスクドライブが、ストレージシェルフ・ルータと相互接続されている。ストレージシェルフ・ルータは、ディスクアレイコントローラから受け取られた各FCPコマンドを、ストレージシェルフ・ルータがさらに適切なSATAディスクドライブに送る、1つまたは複数の等価のATAインターフェースコマンドに変換する論理を含む。図9に示すストレージシェルフ・ルータは、単一のFC調停ループ908を介してディスクアレイコントローラと相互接続されているが、以下で論じるように、ストレージシェルフ・ルータは、通常、2つのFC調停ループまたはその他のFCファブリックトポロジを介してディスクアレイコントローラと相互接続される。
図10に、コンピュータとディスクアレイが階層的に相互接続されたシステム内で、本発明の一実施形態を一部表すストレージシェルフ・ルータによって占められる位置を示す。図10では、2台のサーバコンピュータ1002および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は、図10で、4台のディスクドライブ1022〜1025と、明示的に図示しない12台のディスクドライブを示す省略記号1026によって表す16台のSATAディスクドライブを含む。各ストレージシェルフ・ルータ1014、1018は、シリアルリンク1028などのポイントツーポイントシリアルリンクを介して各SATAディスクドライブと相互接続されてい
る。
図10に示すように、ディスクアレイコントローラ1006およびストレージシェルフ1010を含むディスクアレイ内の相互通信経路のそれぞれには、少なくとも2倍の冗長性がある。さらに、ストレージシェルフ・ルータにも2倍の冗長性がある。任意の単一のリンク、または1個のストレージシェルフ・ルータに障害が発生した場合、残りのリンクおよび残りのストレージシェルフ・ルータは、ディスクアレイコントローラ1006と、ストレージシェルフ1010内の16台のSATAディスクドライブの間の完全な接続を維持するために、障害が発生したリンクまたは障害が発生したストレージシェルフ・ルータによって以前に担われていた作業負荷を引き受けることができる。加えて、ディスクアレイコントローラは、SATAディスクドライブのうちの1つまたは複数に障害が発生したとしても回復および完全稼動を可能にするように、様々なレベルのRAID記憶技術など、いくつかの異なる高可用性データ記憶方式のいずれかを実施してもよい。RAID技術は、例えば、格納データの2つ以上の完全なコピーを、2台以上のディスクドライブに、別々かつ完全に復元することができる。サーバは、組み込みの冗長性およびフェイルオーバを有する、FCファブリックなどの通信媒体を介して、ディスクアレイコントローラ1006と、ストレージシェルフ1010など1つまたは複数のストレージシェルフとを備えるディスクアレイと相互に通信する。ディスクアレイコントローラは、サーバコンピュータ1002および1004が、ストレージシェルフ内の各ディスクドライブ内のデータの実際の場所も考慮せず、データの冗長コピーも、ディスクアレイコントローラ1006によって提供されるその他の機能および機構も考慮せずに、ファイルおよびその他のデータオブジェクトを格納し、ディスクアレイから取り出すことを可能にする論理ユニット(「LUN」)および論理ブロックアドレス(「LBA」)インターフェースを提示する。ディスクアレイコントローラ1006は、さらに、ストレージシェルフ・ルータ1014および1018によって提供されるインターフェースを介して、ストレージシェルフ1010にインターフェースする。ディスクアレイコントローラ1006は、FCPプロトコルを介して、別個のFC互換ディスクドライブのように見えるものにFCエクスチェン
ジを送り、そこからFCエクスチェンジを受け取る。しかしながら、ディスクアレイコントローラに対しては透過的に、ディスクシェルフルータ1014および1018は、SATAディスクドライブとコマンドおよびデータを交換するために、FCコマンドをATAコマンドに変換する。
図11〜12に、本発明の一実施形態を表すストレージシェルフ・ルータを使用して実施されるストレージシェルフのコンポーネントの透視図を示す。図11では、ルータカード上に搭載された2つのストレージシェルフ・ルータ1102および1104が、受動ミッドプレーン1106を介して、SATAディスクドライブ1108など16台のSATAディスクドライブと相互接続されている。各SATAディスクドライブキャリアは、1台のSATAディスクドライブと、SATAディスクドライブを、受動ミッドプレーンを通って2つのストレージシェルフ・ルータ1102および1104のそれぞれに至る2つの別々のシリアルリンクと相互接続するパス制御カード1110とを含む。通常、SATAディスクドライブは、外部システムへの単一のシリアル接続だけをサポートする。ストレージシェルフ内で完全に冗長な相互接続を提供するには、パス制御カード1110が必要である。加えて、ストレージシェルフ1100は、冗長なファン1112および114と、冗長な電源1116および1118も含む。図12に、それぞれが2つのパス制御カードと2台のSATAディスクドライブを含むデュアルSATAディスクドライブキャリアを備える、図11に示すものと類似のストレージシェルフ実装形態を示す。ディスクドライブの台数の増加により、高可用性用途に必要な2倍の冗長性を提供するために、それに対応してストレージシェルフ・ルータの数も2倍にする必要がある。
ストレージシェルフ内部トポロジ
図13A〜Cに、本発明の一実施形態を一部表すストレージシェルフ・ルータを使ったストレージシェルフの3つの異なる実装形態を示す。図13Aでは、単一のストレージシェルフ・ルータ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をディスクアレイコントローラと相互接続する。図13Bでは、シリアルシンク1342など、通常の動作時に用いられる内部ポイントツーポイントシリアルリンクが太線で示されており、これらを「1次リンク」と称する。内部シリアルリンク1344など、通常の動作時には使用されない内部シリアルリンクを、「2次リンク」と称する。動作時に1次リンクに障害が発生した場合、障害が発生した1次リンク、およびストレージシェルフ・ルータに接続されている他のすべての1次リンクは、障害が発生した1次リンクが接続されているストレージシェルフ・ルータを交換することを含めて、障害が発生した1次リンクを修理し、または交換することができるように、障害が発生した1次リンクが接続されているストレージシェルフ・ルータから別のストレージシェルフ・ルータに切り換えられてもよい。前述のように、2つのストレージシェルフ・ルータは、それぞれ、ストレージシェルフをディスクアレイコントローラと相互接続している2つのFC調停ループの一方のFCノードとして働く。1つのFC調停ループに障害が発生した場合、通常はその障害が発生したFC調停ループを通るはずのデータ転送が、残りの、動作可能なFC調停ループに切り換えられる。同様に、ストレージシェルフ・ルータに障害が発生した場合には、他方のストレージシェルフ・ルータが、ストレージシェルフの完全な動作制御を引き受けることができる。代替の実施形態では、1次パス障害が、ストレージシェルフ・ルータ全体を切り換えず、個別に切り換えられてもよい。いくつかの実施形態および状況では、1次パスフェイルオーバが、ストレージシェルフ・ルータ内で実行されてもよく、別の実施形態および状況では、1次パスフェイルオ
ーバは、1次パスの第2のストレージシェルフ・ルータへの切り換えることを伴ってもよい。
図13Cに、32ATAディスク高可用性ストレージシェルフの実装を示す。図13Cに示すように、32ATAディスクストレージシェルフは、4つのストレージシェルフ・ルータ1350、1352、1354および1356を含む。各ストレージシェルフ・ルータは、通常の動作時、8台のSATAディスクを、ストレージシェルフをディスクアレイコントローラと相互接続する2つのFC調停ループと相互接続している。各ストレージシェルフ・ルータは、フェイルオーバが必要とされる場合に、ストレージシェルフ・ルータが、合計16台のSATAディスクドライブを2つのFC調停ループと相互接続できるように、2次リンクを介して、8台の別のSATAディスクドライブと相互接続されている。4ストレージシェルフ・ルータ構成では、ストレージシェルフ・ルータ1350が、一方のFC調停ループに関して4つのストレージシェルフ・ルータすべてのFCノードとして働き、ストレージシェルフ・ルータ1356が、第2のFC調停ループに関して4つのストレージシェルフ・ルータすべてのためのFCノードとして働くことに留意されたい。図13Cに示すように、ストレージシェルフ・ルータ1350がそのFCノードとして働く第1のFC調停ループは、XループまたはXファブリックとみなされ、ストレージシェルフ・ルータ1356がそのFCノードとして働く他方のFC調停ループは、YファブリックまたはYループとみなされる。ディスクアレイコントローラからXループを介してストレージシェルフ内のSATAディスクに送られたFCフレームは、まず、ストレージシェルフ・ルータ1350によって受け取られる。FCフレームは、通常動作の場合には、1次リンクを介してストレージシェルフ・ルータ1350と相互接続されているSATAディスクに宛先指定され、または内部FCリンク1358を介して、ストレージシェルフ・ルータ1352に宛先指定され、ストレージシェルフ・ルータ1352は、さらに、FCフレームを、1次リンクを介してSATAディスクに送られる1つまたは複数のATAコマンドに変換し、またはFCフレームダウンストリームをストレージシェルフ・ルータ1354に転送する。応答FCフレームは、Xファブリックを介してストレージシェルフ・ルータ1356によって送られる場合、内部FCリンク1360、1362および1
358を通り、ストレージシェルフ・ルータ1354および1352を経由して、ストレージシェルフ・ルータ1350へと転送されなければならず、そこから、応答フレームは、外部Xファブリックに送られ得る。前述の実施形態では、高可用性ストレージシェルフが、少なくとも2つのストレージシェルフ・ルータを含んでいる必要があり、ストレージシェルフ内の8台のSATAディスクの組ごとに、1つのストレージシェルフ・ルータを含んでいる必要がある。
パス制御カード概要
前述のように、2つのコンポーネントが、FC調停ループ上で単一のスロットまたはノードだけを使用してFC調停ループまたはその他の高帯域幅通信媒体と相互接続され得る、SATAディスクまたはその他の安価なディスクドライブを用いた、高可用性ストレージシェルフの構築を容易にする。一方のコンポーネントはストレージシェルフ・ルータであり、他方のコンポーネントは、ATAドライブの2つのストレージシェルフ・ルータへの冗長相互接続を提供するパス制御カードである。図14A〜Bに、ATAディスクドライブを2つのストレージシェルフ・ルータと相互接続するのに適したパス制御カードの2つの実装形態を示す。図14Aに示す実装形態は、パラレルATAディスクドライブへのパラレルコネクタを提供し、図14Bに示す実装形態は、SATAディスクドライブへのシリアル接続を提供する。前述のように、SATAディスクドライブは、より高速なデータ転送速度を実現するため、図14Bに示す実装形態の方が好ましく、以下では、この実装形態について論じる。
パス制御カードは、1次シリアルリンク1404および管理リンク1406の第1のストレージシェルフ・ルータへの外部接続のためのSCA−2コネクタ1402と、2次シリアルリンク1408および管理リンク1410の第2のストレージシェルフ・ルータへの外部接続のためのSCA−2コネクタ1402とを提供する。1次リンクおよび2次リンクは、シリアルリンク1414を介してSATAディスクドライブ1416と相互接続されている2:1マルチプレクサによって多重化される。管理リンク1406および1410は、ディスクドライブ環境の温度を監視し、ディスクドライブキャリア内のファンの動作を制御し、ディスクドライブ筐体の外部から見える様々な発光ダイオード(「LED」)信号灯を作動させるルーチンなどの管理サービスルーチンを実行するマイクロコントローラ1418に入力される。本質的に、通常の動作下では、ATAコマンドおよびデータが、1次リンクを介してパス制御カードによって受け取られ、2:1マルチプレクサを介して、SATAディスクドライブ1416に入力されるシリアルリンク1414に転送される。ストレージシェルフ内で、1次リンクを介してパス制御カードに接続されているデフォルトのストレージシェルフ・ルータの動作を停止させるフェイルオーバが発生した場合、第2のストレージシェルフ・ルータが、2次リンクを介したATAコマンドおよびデータの転送を引き受け、ATAコマンドおよびデータは、さらに、2:1マルチプレクサを介して、SATAディスクドライブ1416に直接入力されるシリアルリンク1414に渡される。
パス制御カードは、2つの別々のストレージシェルフ・ルータとの冗長相互接続を提供し、よって、高可用性ストレージシェルフで必要とされる2倍の冗長性を提供するのに必要である。ストレージシェルフ・ルータは、異なるタイプの通信媒体間の相互接続と、異なるタイプの通信媒体間のコマンドおよびデータパケットの変換とを実現する。加えて、ストレージシェルフ・ルータは、内部コンポーネント障害の自動検出と、冗長リンクおよび障害が発生していないコンポーネントを使って、ディスクドライブのディスクアレイコントローラとの完全な相互接続を復元するのに適したフェイルオーバ計画の実行のためのフェイルオーバ論理を含む。
ストレージシェルフ・ルータ概要
図15は、ストレージシェルフ・ルータの主要な機能コンポーネントを示すハイレベルブロック図である。ストレージシェルフ・ルータ1500は、2つのFCポート1502および1504と、経路指定層1506と、FCP層1508と、グローバル共用メモリスイッチ1510と、16個のSATAポート1512〜1518と、CPU複合体1520と、外部フラッシュメモリ1514とを含む。ストレージシェルフ内で相互接続されているストレージシェルフ・ルータの組内でのストレージシェルフ・ルータの論理的位置に応じて、FCポートの一方または両方が、外部FC調停ループまたはその他のFCファブリックに接続されていてもよく、FCポートの一方または両方が、内部ポイントツーポイントFCリンクに接続されていてもよい。一般に、FCポートの一方は、ストレージシェルフ・ルータの組内でのストレージシェルフ・ルータの論理的、物理的位置に関係なく、ストレージシェルフ・ルータを、直接的または間接的に、第1のFC調停ループとリンクさせるとみなされてもよく、他方のFCポートは、ストレージシェルフ・ルータを、第2のFC調停ループと直接的または間接的に相互接続するものとみなされ得る。
経路指定層1506は、以下で論じる、メモリに格納されているいくつかの経路指定表と、両方のFCポートからの入力FCフレームをどこに転送すべきか決定する経路指定論理とを備える。FCP層1508は、様々なタイプの入力および出力FCフレームを処理する制御論理と、以下で説明するグローバル共用メモリスイッチへのインターフェースと、CPU複合体上で実行されるファームウェアルーチンが、メモリ内のFCエクスチェンジコンテキストをセットアップして、共にFCPエクスチェンジを構成するFCフレームの交換を円滑にするためにFCP_CMNDフレームを処理することを可能にするCPU複合体1512へのインターフェースとを備える。
グローバル共用メモリスイッチ1510は、FCP層とSATAポート1512〜1518の間でデータを受け渡すための、極めて高速な時分割多重データ交換設備である。グローバル共用メモリスイッチ(「GSMS」)1510は、仮想待ち行列機構を用いて、FCP層と個々のSATAポートの間のデータ転送を円滑にさせる仮想待ち行列の割り振りを可能にする。GSMSは、本質的に、FCP層と16個のSATAポートの間の高度に並列なデータフローを円滑にし、FCP層とSATAポートの間の同期境界のトラバーサルを円滑にする同期機構を含む、非常に高い帯域幅を有する高速な双方向マルチプレクサである。
CPU複合体1512は、FCエクスチェンジのためのコンテキスト情報を初期設定して維持し、FCコマンドをATA等価コマンドに変換するためにFCPコマンドを処理すると共に、SATAディスクドライブおよびストレージシェルフ・ルータの内部コンポーネントの動作を監視し、問題が検出されたときに、洗練されたフェイルオーバ戦略を実行する、様々なファームウェアルーチンを実行する。フェイルオーバ戦略を実行するために、CPU複合体は、ストレージシェルフ・ルータのその他の論理コンポーネントと相互接続されている。外部フラッシュメモリ1514は、構成パラメータおよびファームウェアルーチンを格納している。ストレージシェルフ・ルータは、2つのFCポート1502および1504、16個のSATAポート1512〜1518、16個のシリアル管理リンク1520、I2Cバス1522、およびコンソール1524へのリンクを介して外部コンポーネントと相互接続されていることに留意されたい。
ストレージシェルフインターフェース
前述のように、ストレージシェルフ・ルータベースのストレージシェルフ実装形態は、現在の1ディスクドライブ1FCノードの実装形態よりも、多くの点で、より大きな柔軟性を提供する。ストレージシェルフ・ルータは、それが接続されているディスクアレイコントローラへの多種多様な論理インターフェースのいずれかを提供することができる。図16A〜Gに、本発明の一実施形態を一部表す1つまたは複数のストレージシェルフ・ルータを組み込んだ高可用性ストレージシェルフによって提供されるいくつかの異なる論理インターフェースを示す。図16Aに、図8A〜Dを参照して前述したような、ストレージシェルフの現在のFC互換ディスクドライブ実装形態によって提供されるインターフェースを示す。図16Aでは、図16A〜G全体を通して使用する抽象図示規則を使用している。図16Aでは、各ディスクドライブ1602〜1605が、0から19までの番号が付された一連のデータブロックとして論理的に表されている。当然ながら、実際のディスクドライブは、何十万から何百万もの論理ブロックを含むが、図16Aの各ディスクごとに示す20個の論理ブロックは、多種多様なインターフェースを示すのに十分である。図16Aでは、各個別ディスクドライブ1602〜1605はFC調停ループ上の別個のノードであり、したがって、各ディスクドライブが、図16Aで、それぞれ、「AL_PA1」、「AL_PA2」、「AL_PA3」、「AL_PA4」で表されている、別々のFCノードアドレス、すなわち調停ループ物理アドレス(「AL_PA」)と関連付けられている。しかしながら、図8A〜Dを参照して前述したような、現在のFC調停ループディスクアレイ実装形態と異なり、図9に示すように、各ノードがポイントツーポイント接続を介して、ストレージシェルフ・ルータの補完SATAポートと相互接続されているため、ノードに関連付けられた累積ノード遅延が生じないことに留意されたい。よって、ディスクアレイコントローラは、ディスクドライブと関連付けられたFCアドレスを介して個々のディスクドライブ内の個々の論理ブロックにアクセスできる。場合によっては、所与のディスクドライブが、論理ブロックアドレス空間が、それぞれが異なるLUNと関連付けられている別々の論理ブロックアドレス空間に区分されている論理ユニット(「
LUN」)インターフェースを提供してもよい。しかしながら、この説明では、そこまでの複雑さに対応する必要はない。
図16Bに、ストレージシェルフ・ルータを介してFC調停ループと相互接続されている図16Aに示す4台のディスクドライブを含むストレージシェルフの第1の可能なインターフェースを示す。この第1のインターフェースでは、各ディスクドライブが別々のFCノードアドレスと関連付けられたままである。各ディスクドライブが、単一の論理ブロックアドレス空間を含む単一の論理ユニットであるとみなされる。以下では、このインターフェースを、本発明の一実施形態を一部表す1つまたは複数のストレージシェルフ・ルータを含むストレージシェルフの「透過モード」動作と称する。
ストレージシェルフによって提供される第2の可能なインターフェースを図16Cに示す。この場合、4台のディスクドライブすべてが単一のFC調停ループノードアドレス「AL_PA1」と関連付けられている。各ディスクドライブは、異なる論理ユニットであるとみなされ、ディスクドライブ1602は論理ユニット0とみなされ、ディスクドライブ1603は論理ユニット1とみなされ、ディスクドライブ1604は論理ユニット2とみなされ、ディスクドライブ1605は論理ユニット3とみなされる。よって、ディスクアレイコントローラは、単一のFCノードアドレス、論理ユニット番号、および論理ユニット内の論理ブロックアドレスを介して、ストレージシェルフ内の4台のディスクドライブのいずれかの内の論理ブロックにもアクセスすることができる。
図16Dに、仮想ストレージシェルフ内の4台のディスクドライブへの代替のインターフェースを示す。この場合、4台のディスクドライブすべてが、単一の論理ユニット内に含まれるとみなされる。4台のディスクドライブ内の各論理ブロックには、一意の論理ブロックアドレスが割り当てられる。よって、ディスクドライブ1602内の論理ブロック0〜19は、引き続き論理ブロックアドレス0〜19と関連付けられており、ディスクドライブ1603内の論理ブロック0〜19は、今度は、論理ブロックアドレス20〜39と関連付けられている。以下では、このインターフェースを、図16Cに示す純粋なLUNベースのインターフェースに対して、純粋な論理ブロックアドレスインターフェースと称する。
図16Eに、4台のディスクドライブを含む仮想ストレージシェルフによって提供される別の可能な論理インターフェースを示す。この場合、第1の2台のディスクドライブ1602および1603の組は、第1のFCノードアドレス「AL_PA1」と関連付けられており、この2台のディスクドライブ1602および1603は、それぞれ、2つの異なるLUN番号、LUN0およびLUN1と関連付けられている。同様に、第2のディスクドライブ1604および1605の対は、共に、第2のFCノードアドレス「AL_PA2」と関連付けられており、この第2のディスクドライブ対は、それぞれは、異なるLUN番号と関連付けられている。
図16Fに、別の可能なインターフェースを示す。この場合、第1の2台のディスクドライブ1602および1603は、第1のFCノードアドレスと関連付けられており、第2の2台のディスクドライブ1604および1605は、第2のFCノードアドレスと関連付けられている。しかしながら、この場合、各グループの2台のディスクドライブは、共に単一の論理ユニットに属しているものとみなされ、2台のディスクドライブ内の論理ブロックは、単一の論理ブロックアドレス空間を構成する論理ブロックアドレスと関連付けられている。
最後のインターフェースを図16Gに示す。この場合、前述の2つのインターフェースの場合と同様に、単一のFCノードアドレスと関連付けられた各ディスクドライブ対が、単一の論理ブロックアドレス空間を有する単一のLUNを構成するとみなされる。しかしながら、このインターフェースでは、論理ブロックアドレスが、2つのディスクドライブ間で交替する。例えば、ディスクドライブ1602および1603の対の場合、論理ブロックアドレス0が第1の論理ブロック1610および第1のディスクドライブ1602と関連付けられ、論理ブロックアドレス1が、第2のディスクドライブ1603内の第1のブロック1612と関連付けられている。
図16A〜Gは、単に、本発明の一実施形態の一部を表すストレージシェルフ・ルータによってディスクアレイコントローラに提供される多くの可能なインターフェースのいくつかを示しているにすぎない。アルゴリズムとして記述され得る、LUNおよび論理ブロックアドレスの、ディスクドライブおよびディスクドライブ内の物理ブロックへのほとんどすべてのマッピングが、ストレージシェルフ内のストレージシェルフ・ルータによって実施され得る。一般に、これらの多種多様な論理インターフェースは、(1)ディスクドライブが、別々の、ローカルで一意のFCノードアドレスと関連付けられる透過モード、(2)各ディスクドライブが、異なるLUN番号と関連付けられ、すべてのディスクドライブに、単一のFCノードアドレスを介してアクセスされる純粋なLUNモード、(3)すべてのディスクドライブが、単一のFCノードアドレスおよび単一の論理ユニット番号と関連付けられる純粋な論理ブロックアドレス指定モード、および(4)LUNと論理ブロックアドレス空間区分の多種多様な組み合わせを用いる、LUNと論理ブロックアドレス指定の混合モードという、4タイプの一般的なインターフェースに区分され得る。
ストレージシェルフ・ルータ実装
図17Aに、本発明の一実施形態を表すストレージシェルフ・ルータ内のコマンドとデータの流れのハイレベル概要を示す。ストレージシェルフ・ルータは、1つまたは複数のFC調停ループまたはその他のFCファブリック1702〜1703を介して、他のストレージシェルフ・ルータおよびディスクアレイコントローラと、データおよびコマンドのシリアルストリームを交換する。データのシリアルストリームは、FCポート層1704に入り、そこで、下位FCプロトコルレベルで処理される。データストリームから抽出されたFCフレームは、先入れ先出しバッファ(「FIFO」)1706〜1707に入力される。FCフレームの最初の部分が利用可能になると、それらは、FCフレームの後方部分がFIFOに入力されているときであっても、経路指定層1708およびFCP層1710によって処理される。よって、FCフレームは、バッファ内で完全にアセンブルされ、内部メモリバッファから内部メモリバッファにコピーされることを必要とせずに、時間的にも計算処理上でも非常に効率よく処理される。
経路指定層1708は、FCフレームヘッダから、FCフレームがそのストレージルータに宛先指定されているか、それとも、FC調停ループまたはその他のFCファブリックによってストレージルータと相互接続されているリモートのストレージルータまたはその他のエンティティに宛先指定されているか判定する役割を果たす。リモートエンティティに宛先指定されているフレームは、FC調停ループまたはその他のFCファブリックを介してそれらのリモートエンティティに送るために、経路指定層によって、FCポート層内の出力FIFO1712〜1713に宛先指定される。ストレージルータに宛先指定されているフレームは、経路指定層によってFCP層に宛先指定され、そこで、状態機械が、それらのストレージシェルフ・ルータ内での処置を制御する。
ストレージシェルフ・ルータによってそのためのコンテキストが確立されている、現在アクティブなFCエクスチェンジと関連付けられているFCP−DATAフレームは、極めて合理的に、効率のよく処理される。これらのフレームからのデータは、FCP層によって、GSMS1718内の仮想待ち行列1714〜1716に宛先指定され、そこから、SATAポート層1722内の入力バッファ1720に転送される。SATAポート層から、データは、SATAパケット、またはデータフレーム情報構造(「DATA FIS」)として、多くのSATAリンク1724の1つを介して、ストレージシェルフ・ルータと相互接続されている何台かのSATAディスクドライブ1726の1つに送られる。
FCP−CMNDフレームは、FCP層によって異なる方法で処理される。これらのフレームは、FCP層によって、FCP層と、ストレージシェルフ・ルータ内のCPUの間で共用されるメモリ1728に転送される。CPUは、内部に含まれるコマンドを処理するためにフレームにアクセスする。例えば、入力書込みコマンドが受け取られると、ファームウェアルーチンの制御下にあるストレージシェルフ・ルータCPUは、そのコマンドがどのSATAドライブに宛先指定されるか判定し、書込み操作のために、共用メモリに格納されるコンテキストを確立する必要がある。CPUは、データを受け取るようにSATAドライブを準備し、一般にディスクアレイコントローラである、開始側へのFCP_XFER_RDYフレームの返送を指定する必要がある。CPUによって準備され、共用メモリに格納されたコンテキストは、FCP層が、CPUの介入なしで後続のFCP_DATAメッセージを処理することができるようにし、書込み操作の実行を簡素化する。
ストレージシェルフ・ルータ内の様々な論理層は、一般に、逆方向に対称に機能する。ATAコマンドに対する応答が、SATAポート層1722によって、SATAリンクを介してSATAディスクドライブから受け取られる。次いで、SATAポート層は、必要なときに、ファームウェア制御下にあるCPUが、適切な処置および応答を実行することができるように、適切な信号およびメッセージを生成する。読取りコマンドに応答して、データがSATAディスクからリモートエンティティに転送されると、CPUは、FCP層による処理のために共用メモリに格納される適切な待ち行列エントリを生成する。FCP層内の状態機械は、共用メモリから、FCフレームヘッダテンプレートを獲得し、読取りコマンドと関連付けられた仮想待ち行列1732〜1733からのデータ転送を手配し、FCフレームヘッダを作成し、一般にはディスクアレイコントローラである要求側リモートエンティティへの送出のために、SATAポート層から受け取られたFCフレームヘッダおよびデータの、仮想待ち行列を介したFCポート層の出力FIFO1712および1713への転送を調整する。
図17Aは、ストレージシェルフ・ルータ内のデータおよび制御フローの簡単な概要を提供するためのものである。ストレージシェルフ・ルータの内部コンポーネントを正確に描写するためのものではなく、FCP_CMNDおよびFCP_DATAフレームの受け取りと処理に関する論理層間の相互関係を示すことを目的としている。例えば、図17Aでは、GSMS層内にいくつかの仮想待ち行列が示されている。しかしながら、仮想待ち行列は、一般に、静的エンティティではなく、ストレージシェルフ・ルータの現在の状態により、必要に応じて動的に割り振られる。図17Aには、ただ1つのSATAシリアル接続1724およびSATAディスクドライブ1726だけしか示されていないが、前述のように、一実施形態では、各ストレージルータが、16台の異なるSATAディスクドライブに接続されていてもよい。
図17B〜Fに、本発明の一実施形態を表すストレージシェルフ・ルータを介したデータおよび制御情報の流れに関するさらなる詳細を示す。図17B〜Fの説明では、簡単にするために、様々な同一コンポーネント対の各コンポーネントを、両方とも個別的に参照することはしない。各図は、各コンポーネントの完全な明細を示すものではなく、データおよび制御情報が、ストレージシェルフ・ルータの様々なコンポーネントを介してどのように移動するかを示すためのものである。さらに、様々なコンポーネントの数も、ストレージシェルフ・ルータの多種多様な実装形態によって異なり得る。図17Bに、ストレージシェルフ・ルータ内のFCP_DATAフレームの初期フローを示す。FCP_DATAフレームは、まず、FCポート1736によって受け取られて入力FIFO1737に書き込まれ、入力FIFOにおいて十分なヘッダ情報が利用できるようになり次第、FCP_DATAフレームの残りがまだ入力FIFOに書き込まれている間であっても、そこから、ルータ論理1738による処理が開始され得る。FCポートは、ルータ論理が、フレームの処理を開始することができるように、ルータ論理に新しいフレームの到着を知らせる。ルータ論理1738は、経路指定表1739を用いて、フレームが、ストレージシェルフ・ルータに宛先指定されているか否か、あるいはフレームがリモートエンティティに宛先指定されているかどうか判定する。FCP−DATAフレームがリモートエンティティに宛先指定されている場合、フレームは、リモートエンティティに送るために、ルータ論理によってFCポートに宛先指定される。また、ルータは、コンテキスト論理1740ともインターフェースを取って、FCP−DATAフレームが属するFCエクスチェンジのために、CPUによってコンテキストが作成され、共用メモリに格納されているか否かも判定する。フレームのためのコンテキストが見つかった場合、ルータ論理は、フレームを、FCPインバウンドシーケンスマネージャ(「FISM」)状態機械1741に宛先指定する。コンテキストが見つからなかった場合、フレームは、共用メモリに宛先指定され、続いて、ファームウェア制御下のCPUによって、そこから抽出され、誤って受け取られたフレームとして処理される。
FISM1741は、FCPデータ移動論理モジュール(「FDM」)1742にGSMSチャネルを要求し、FDMは、さらに、GSMS1744内の仮想待ち行列(「VQ」)1743にアクセスし、FISMを介してコンテキスト論理からVQを特徴付けるパラメータを受け取る。次いで、FDMは、フレーム内に含まれるデータをVQに書き込み、そこからデータが、FDMとVQへのアクセスを共用するSATAポートによって、SATAディスクドライブに送るためにプルされる。SATAポートは、データがVQに書き込まれ始めるや否や、データをディスクドライブに転送し始めてもよいことに留意されたい。SATAポートは、データすべてが書き込まれるのを待たずに、データをディスクドライブに送り始めてもよい。データ転送操作に関連付けられたデータすべてがVQに書き込まれると、FDMは、コンテキストマネージャに、データが転送されていることを知らせ、コンテキストマネージャは、さらに、完了待ち行列マネージャ(「CQM」)1745が、共用メモリ1747内の完了待ち行列1746に完了メッセージ(「CMSG」)を入れるよう要求する。CQMは、さらに、CPUデータムーバ(「CPUDM」)1748が共用メモリにCMSGを書き込むよう要求する。
図17Cに、ストレージシェルフ・ルータ内の、FC_CMNDフレームと、エラーに関連付けられるフレームの流れを示す。前述のように、フレームは、FCポート1736によって受け取られ、ルータ論理1738によって、経路指定表1739を参照して、ストレージシェルフ・ルータ内の様々な宛先コンポーネントに宛先指定される。誤って受け取られたFCP_CMNDフレームおよびFCフレームは、CPUによる抽出および処理のために、共用メモリ1747に経路指定される。経路指定論理1738は、フレームバッファ待ち行列マネージャ(「FBQM」)1760がフレームを共用メモリ1747に書き込むよう求める要求を発行する。FBQMは、CPUDM1748から、共用メモリ1750に格納されたバッファポインタを受け取り、フレームを、共用メモリ1747内のフレームバッファ1749に書き込む。フレームがエラー処理のために共用メモリに転送されるいくつかの場合には、より大きいフレームを収容するために、または複数のフレームを収容するために、複数のフレームバッファが必要とされることもあることに留意されたい。最後に、ルータは、CQM1745に、CMSGをCQ1746に書き込むよう要求する。最終的には、CPUが、CMSG内に含まれる、フレームバッファ1749に格納されたフレームにアクセスするための情報を使って、CMSGを処理する。
図17Dに、あるFCポートから別のFCポートへのFCフレームの流れを示す。ルータ論理1736が、第1のFCポート1736内の入力FIFO1737を介して受け取られたフレームがストレージルータに宛先指定されておらず、リモートエンティティに宛先指定されていると判定した場合、ルータ論理は、そのフレームをリモートエンティティに送るために、そのフレームを第2のFCポート1752内の出力FIFO1751に書き込む。
図17Eに、ストレージシェルフ・ルータ内のCPUから、FC調停ループであるSファブリック、または別のFCファブリックへの、データおよび制御情報の流れを示す。ファームウェア制御下で、CPUは、共用メモリ1747内の共用メモリ待ち行列(「SRQ」)内にエントリを格納し、ヘッダおよびバッファを指し示すポインタと共に、CPUがFC調停ループまたはその他のFCファブリックに送るために作成してあるシーケンスまたはフレームを記述するSRQエントリ(「SRE」)の存在を指示するために、SRQと関連付けられたSRQ作成インデックスを更新する。SRQマネージャモジュール(「SRQM」)1755は、SRQ作成インデックスの更新を検出し、CPUDM1748を介して共用メモリ1747から、次のSREを取り出す。SRQMは、取り出したSREをSRQ調停モジュール(「SQR_ARB」)1756に渡し、そこで、複数のCPUによって生成され、複数のSRQに格納されたSREの処理を保証するために、ラウンドロビン方式などの調停方式を実施する。SRQ_ARBは、次のSREを受け取るべきSRQMを選択し、そのSREをFCPアウトバウンドシーケンスマネージャ(「FOSM」)状態機械1757に渡す。FOSMは、CPUDM1748を介して共用メモリ1747から、FCヘッダテンプレートおよびフレームペイロードを取り出すようにSREを処理する。FOSMは、共用メモリからのCPUDMを介したFCヘッダテンプレートおよびフレームペイロードを使ってFCフレームを構築し、それを、FCポート1736内の出力FIFO1758に書き込み、そこから、フレームが、FC調停ループまたはその他のFCファブリックに送られる。フレームがFCポートに転送されると、FOSMは、CQM1745に、共用メモリにCMSGを書き込むよう指図する。
図17Fに、GSMSおよび共用メモリからFC調停ループまたはその他のFCファブリックへのデータおよび制御情報の流れを示す。このプロセスのステップの多くは、図17Eを参照して説明したものに類似しており、簡略化するために、それらを再度説明することはしない。一般に、FCフレームヘッダ内に格納されているFCP_DATAフレームの制御部分は、図17Eを参照して説明した、他の任意のタイプのフレームの生成と同様に生成される。しかしながら、FCP_DATAフレームの場合には、制御情報と、GSMSを介してSATAポートから獲得されたデータと組み合わせるために、プロセスが段階的に実施される必要がある。FOSM1757は、FCP_DATAフレームを記述するSREを受け取ると、FCP_DATAフレームヘッダを構築し、フレームに組み込まれるデータを、GSMS1744内のVQ1759を介してデータを獲得するFDM1742を介し、GSMSチャネルを経由して要求しなければならない。データおよび制御情報が、FOSMによって、FCP_DATAフレームに組み込まれると、次いで、フレームはFCポートに渡され、FCP_DATAフレームがデータ転送操作の完了を表すときには、前述のように、CMSGメッセージが待ち行列に入れられる。
図18に、本発明の一実施形態を表すストレージシェルフ・ルータの論理コンポーネントの詳細なブロック図を示す。論理コンポーネントには、図16および17に関して前述した、2つのFCポート1802および1804と、経路指定層1806と、FCP層1808と、GSMS1810と、SATAポート層1812と、2つのCPU1814および1816を含むCPU複合体とが含まれる。図18に太矢印1818などの太矢印で示す通信パスおよびリンクは、ストレージシェルフ・ルータ内の性能に決定的な影響を及ぼす通信経路を表す。性能に決定的な影響を及ぼす通信経路とは、FCフレームの受信と出力、SATAポートによるSATAディスクドライブへの送出に適したATAコマンドを生成するための受け取ったフレームの処理、受け取ったFCP−DATAフレームからのデータのGSMSを介したSATAポートへの流し込み、FCポートを介したFC調停ループまたはその他のFCファブリックへの送出のためのFCフレームの生成、およびGSMSを介してSATAポートから獲得されたデータの、出力FCP−DATAフレームへの組み込みに関連する経路である。性能に決定的な影響を及ぼさない通信経路には、CPU1814および1816を、ストレージシェルフ・ルータの様々な論理コンポーネントと直接相互接続する、様々なプログラムされた入出力インターフェースが含まれる。例えば、中央調停スイッチ1820と、GSMS、SLポート層、および内部バスブリッジ1822との間にはPIOインターフェースがあり、内部バスブリッジ1822は、さらに、17UARTポート1824、I2Cバスインターフェース1826、一般のPOIインターフェース(「GPIO」)1828、タイマコンポーネント1830、およびいくつかの割込みコントローラ1832と相互接続されている。これらのPIOインターフェースは、図18で、太くない両方向矢印1834〜1836として示されている。加えて、CPU1814および1816とフラッシュメモリコントローラ1840の間にはPIOインターフェース1838があり、フラッシュメモリコントローラ1840は、さらに、外部フラッシュメモリ1842にインターフェースする。外部フラッシュメモリは、専用の構成管理情報およびファームウェアイメージを格納するのに使用される。CPUは
、メモリアクセスインターフェース1844を介して内部SRAMコントローラ1846に接続されており、内部SRAMコントローラ1846は、さらに、ストレージシェルフ・ルータ内、およびストレージシェルフ・ルータ間のフェイルオーバを指図するファームウェアルーチンを含む、非性能パスコードおよびDATAを格納するSRAMメモリ1848にインターフェースする。CPU1814および1816は、プロセッサデータ空間としても使用される、2つのデータ密結合メモリ1850および1852に含まれる共用メモリ待ち行列を介して、FCP層1808およびSATAポート層1812と相互接続されている。また、各CPUは、ファームウェア命令1854および1856を格納している別々のメモリとも相互接続されている。最後に、2つのCPUは、単一のPIOチャネル1858を介して、2つのFCポート1802および1804と、経路指定層1806と、FCP層1808とに接続されている。
図19に、FCポート層の詳細図を示す。FCポート層は、それぞれが、1つの入力FIFO1906、1908と、2つの出力FIFO1910〜1911、1912〜1913とを含む、2つのFCポート1902および1904を備える。FCポートは、共に、FC調停ループまたはその他のFCファブリックからの入力シリアルデータを、入力FIFOに渡されるFCフレームに変換し、出力FIFOに書き込まれた出力フレームを、FC調停ループまたはその他のFCファブリックに送られるシリアルデータに変換する物理およびリンク層論理1914〜1917を含む。
図20は、経路指定層を表す詳細なブロック図である。図20に示すように、経路指定層2002は、FCポートのそれぞれを処理する別々の経路指定論理2004および2006を含む。また、経路指定層は、入力FCフレームを適切な待ち行列に経路指定するのに必要な経路指定決定を円滑にするための、本質的には、極めて高速にアクセスできるメモリであるレジスタに格納された経路指定表2008も含む。FCデータフレームは、前述のように、ルータによって、FDM2011を介して、FISM2010および2012の制御下のGSMS層2015に、比較的直接経路指定され得ることに留意されたい。ファームウェア処理を必要とするフレームは、経路指定層によって、CPUDM2017および2018を介して、FBQM2014および2016の制御下の入力待ち行列に経路指定される。
図21は、FCP層を表す詳細なブロック図である。図21に示すこれらの内部コンポーネントの多くについては、すでに説明しており、または後続の節でより詳細に説明する。一般に、一方では2つのFCポート1902および1904を、他方では2つのCPU2102および2104を処理するように構成されている、二組の重複するコンポーネントがあることに留意されたい。出力フレームを生成するのに必要な情報は、ファームウェア制御の下で、CPUによって生成され、それぞれが基本的に単一のCPUと関連付けられている、共用メモリ2106および2108に格納される。次いで、格納された各メモリ内の情報は、別々の組のSRQM2110、2112、FOSM2114、2116、SQR_ARB2118、2120、CPUDM2122、2124、およびその他のコンポーネントによって、送出のために2つのFCポート1902および1904に渡されるFCフレームを生成するように処理される。各FCポートにおける入力フレームは、別々のルータモジュール2004、2006、FISM2010、2012、およびその他のコンポーネントによって処理される。
図22に、SATAポート層を表す詳細なブロック図を示す。SATAポート層の主要な目的は、SATAポート層とGSMSとFCP層の間で共用されるタスクである、仮想待ち行列管理と、GSMSおよび個々のSATAポートを介したFCP層とのデータ交換である。
図23は、SATAポートを表す詳細なブロック図である。SATAポートは、共にSATAインターフェースを実施する、物理層2302、リンク層2304、およびトランスポート層2306を含む。トランスポート層は、それぞれ、相互接続されたSATAディスクから到着するデータ転送部分とATAメッセージ情報を格納し、GSMS層からのデータ転送部分と、CPUおよび共用メモリへのインターフェースから渡されるATAコマンドを格納する、入力バッファ2308と出力バッファ2310とを含む。SATAポートに関するさらなる詳細は、別の節で論じる。
ストレージシェルフ・ルータ経路指定層
図24に、4ストレージシェルフ・ルータ高可用性ストレージシェルフ内の経路指定トポロジの抽象図を示す。この抽象図は、以下の考察に役立つモデルおよびテンプレートである。図24に示すように、各ストレージシェルフ・ルータ2402〜2405は、1次リンクを介して、ディスクドライブ2406など、n台のディスクドライブに接続されている。前述のように、各ストレージシェルフ・ルータは、2次リンクを介して、隣接するn台のディスクドライブの組に接続されているが、簡単にするために、図24には2次リンクを示していない。1つのストレージシェルフ・ルータ2402は、ファブリックX2408と称する、第1のFC調停ループまたはその他のFCファブリックに関してストレージシェルフ・ルータの組全体の端点またはFCノード接続点として働く。別のストレージシェルフ・ルータ2405は、ファブリックYと称する、第2のFC調停ループまたはその他のFCファブリック2410への端点、またはFCノード接続として働く。各ストレージシェルフ・ルータは、例えば、ストレージシェルフ・ルータ2402におけるXポート2412とYポート2414のように、2つのFCポート、XポートおよびYポートを含む。4つのストレージシェルフ・ルータは、内部ポイントツーポイントFCリンク2416、2418、2420と相互接続されている。例えば、ストレージシェルフ・ルータ2404などの任意の個々のストレージシェルフ・ルータについて、ファブリックXから入力されるFCフレームは、Xポート2422上で受け取られ、ストレージシェルフ・ルータ2404によってファブリックXに出力されたFCフレームは、Xポート2422を介して出力される。同様に、入力FCフレームおよび出力FCフレームは、それぞれ、Yファブリックから受け取られて、Yファブリックに宛先指定され、FCポート2424を介して入力され、出力される。個々のFCポートのXおよびYファブリックへの割り当ては、構成可能であり、以下の例および例を参照する考察においては、FCポート0がXファブリックポートであり、FCポート1がYポートであると仮定しているが、逆の割り当てが構成されてもよいことに留意すべきである。
Sファブリック内で使用される、「Sビット」と呼ばれるFCフレームヘッダのDF_CTLフィールド内の2ビットの予約済みサブフィールドによってそれと識別される、Sファブリック管理フレームは、XポートまたはYポートを介して、ストレージシェルフ・ルータと、ポイントツーポイント内部FCリンクの間で宛先指定される。各ストレージシェルフ・ルータには、ストレージシェルフ内で一意であり、管理フレームにおいて、FCフレームヘッダD_IDフィールドの一部を形成するルータ番号が割り当てられる。ストレージシェルフ・ルータには、XおよびYファブリックの一方に対しては厳密に増大する順序で、XおよびYファブリックの他方に対しては厳密に減少する順序で番号が付される。例えば、図24では、ストレージシェルフ・ルータ2402、2403、2404、2405に、それぞれ、ルータ番号1、2、3、4が割り当てられてもよく、よって、Xファブリックに対しては厳密に増加する順、すなわち昇順になり、Yファブリックに対しては厳密に減少する順、すなわち降順になる。以下で論じる詳細なフロー制御図では、この順序付けが想定されているが、前述のように、ファブリックとポートの間の関係、およびポートに対する昇順および降順は、構成可能である。
図25に、ディスクアレイの2ストレージシェルフ・ルータ2ストレージシェルフ実装形態内のXおよびY FC調停ループ相互接続の抽象図を示す。図25では、ディスクアレイコントローラ2502が、FC調停ループX2504によって、各ストレージシェルフ2506、2508にリンクされており、FC調停ループY2510によって、ストレージシェルフ2506と2508の両方にリンクされている。図25では、ストレージシェルフ・ルータ2512は、ストレージシェルフ2506のXファブリック端点として働き、ストレージシェルフ・ルータ2514は、ストレージシェルフ2508のXファブリック端点として働く。同様に、ストレージシェルフ・ルータ2516は、ストレージシェルフ2506のYファブリック端点として働き、ストレージシェルフ・ルータ2518は、ストレージシェルフ2508のYファブリック端点として働く。ディスクドライブ2518など、各個別ディスクドライブは、XとY両方の調停ループを介してディスクアレイコントローラ2502にアクセスすることができる。2つのストレージシェルフにおいて、ストレージシェルフ・ルータは、単一のポイントツーポイントFCリンク2520、2522を介して内部で相互接続されており、この相互接続は、XおよびYファブリックフレーム以外に、内部で生成され、内部で消費される管理フレーム、すなわちSファブリックフレームを運んでもよい。ストレージシェルフ2506内の内部ポイントツーポイントFCリンクを、S1ファブリックと呼び、ストレージシェルフ・ルータ2508内の内部ポイントツーポイントFCリンクをS2ファブリックと称する。本質的に、これらの内部ポイントツーポイントFCリンクは、Xファブリック、YファブリックのFCフレームと、内部管理フレームを運ぶが、XファブリックおよびYファブリックフレームは、それらが端点ストレージシェルフ・ルータを介してストレージシェルフ・ルータに入ると、それらが消費され、または端点ストレージシェルフ・ルータのFCポートを介してXファブリックまたはYファブリックに送り返されるまで、Sファブリックフレームとみなされる。
図26A〜Eに、FCフレームを、個々のストレージシェルフに、または本発明の一実施形態を表すストレージシェルフ内の個々のFCポートを介してリモートエンティティに経路指定するのに使用されるFCフレームヘッダ内のデータフィールドを示す。FCフレームヘッダについては、先に、図3を参照して論じている。当然ながら、FCヘッダは、フレームをFCノード宛先指定するために設計されており、単一のFCノードを介してFC調停ループまたはその他のFCファブリックに共にインターフェースするストレージシェルフ・ルータと相互接続されたディスクドライブに宛先指定するためではない。したがって、適正なFCフレームの宛先指定のためには、FCフレームヘッダフィールドの、ストレージシェルフ内のストレージシェルフ・ルータおよびSATAディスクドライブ構成へのマッピングが必要である。FCフレームヘッダ内の3バイトD_IDフィールドは、FCノードのノードアドレスを表す。FC調停ループの場合、D_IDの上位2バイトは、非共用ループでは、一般に、「0」の値を有し、最下位バイトは、127ノードの1つを指定する調停ループ物理アドレス(「AL_PA」)を含む。一般に、ディスクアレイコントローラには少なくとも1つのノードアドレスが使用され、ファブリック調停ループ(共用ループ)アドレスには別のノードアドレスが予約される。3バイトS_IDフィールドは、フレームが発行されたノードのノードアドレスを含む。一般に、S_IDフィールドは、ディスクアレイコントローラのノードアドレスであるが、ストレージシェルフがFCファブリックと直接相互接続されていてもよく、その場合、S_IDは、ストレージシェルフにアクセスし得る多数のリモートエンティティのいずれかの完全な24ビットFCファブリックアドレスとすることができる。
図26Aに示すように、FCフレームヘッダ2606のDF_CTLフィールド2604内の2つの予約済みビット2602は、ストレージシェルフ内で、すなわちSファブリック内で格納され、送出されるフレームのための、一種の宛先指示、すなわちコンパス2608として用いられる。以下の表4に、この方向標識の符号化を示す。
ビットパターン「01」は、フレームがXファブリックフレームとしてSファブリックに入ったことを示し、ビットパターン「10」は、フレームがYファブリックフレームとしてSファブリックに入ったことを示し、ビットパターン「11」は、フレームがSファブリック管理フレームであることを示す。DF_CTLフィールドのビット18:19で表されるこの方向標識、すなわち内部コンパスが必要なのは、Sファブリックフレームと外部ファブリックフレーム両方が、フレームが単一のFCポートを介して、ストレージシェルフ・ルータにより受け取られ得るからである。前述のように、DF_CTLフィールドのビット18:19を、総称して「Sビット」という。Sビットは、端点ストレージシェルフ・ルータによるXファブリックまたはYファブリックフレームの受け取り時に設定され、端点ストレージシェルフ・ルータからXファブリックまたはYファブリックに返されるFCフレームのエクスポートの前にクリアされる。FCフレームヘッダのR_CTLフィールドは、FCP_CMND、FCP_DATA、FCP_XFER_RDY、およびFCP_RSPフレームを含む、FCフレームのタイプの指示を含む。このフィールドは、経路指定論理によって、フレームがどのように処理されるべきか迅速に決定するために使用される。
図26Bに、FCP−CMNDフレームの経路指定に関与するFCフレームヘッダフィールドを示す。D_IDフィールド2610は、FCフレームを個々のFCノードに宛先指定するが、前述のように、ストレージシェルフは、透過モードで動作するときには、いくつかのFCノードを含むことがあり、透過モードで動作しないときには、すべてが単一のD_IDを含むFCフレームがそこに分散される必要のある多数のデータ記憶装置を含むことがある。ストレージシェルフの経路指定論理は、本質的に、D_IDと、ストレージシェルフと、ストレージシェルフ・ルータと、最終的には、ディスクドライブとの間の様々なマッピングを処理するためのものである。
経路指定論理は、D_IDフィールドの値だけから、FCフレームがそのストレージシェルフ・ルータに宛先指定されているか否かを判定することはできない。D_IDが、入力FC−CMDフレームをそのストレージシェルフ・ルータに宛先指定しているかどうか判定するために、経路指定論理は、内部経路指定表2612と、以下で論じるいくつかのレジスタを調べて、D_IDが、そのストレージシェルフ・ルータによって管理されるディスクドライブのアドレスを表しているかどうか判定する必要がある。よって、図26Bに示すように、内部経路指定表2612に関して解釈されたD_IDフィールドは、ストレージシェルフ2616内の個々のストレージシェルフ・ルータと、ストレージシェルフ・ルータ2618と相互接続されている個々のディスクを指定する。加えて、経路指定論理は、以下で論じる、別の内部表2614を調べて、S_IDフィールド2611によって指定されるFCフレームのソースが、現在ストレージシェルフ・ルータにログインしているリモートエンティティであるかどうか、およびそのリモートエンティティが、アドレス指定されたディスクドライブと相互接続されていると識別されるかどうかも判定する。よって、様々な内部表2614に関して解釈されたS_IDフィールドは、FC_CMNDフレームで表されるコマンドが実行されるべきか否か判定する許可スイッチ2620として働く。
図26Cに、FCP−DATAフレームの経路指定に関与するFCフレームヘッダフィールドを示す。D_IDフィールド2610およびS_IDフィールド2611ならびに内部表2612および2614は、FCP−CMNDフレームの経路指定の場合と同様に、ストレージシェルフ2616内の個々のストレージシェルフ・ルータと、そのストレージシェルフ・ルータと相互接続されている個々のディスクを指定し、ディスクへのデータの転送を許可2620するのに使用される。しかしながら、FCP_DATAフレームは、複数のFCP_DATAフレームによる書込みシーケンスの一部であることもあるため、経路指定論理が、そのFC_DATAフレームが、ストレージシェルフ・ルータにとってローカルのディスクに宛先指定されていると判定した後で、FCフレームヘッダ2606の別のフィールドを用いてストレージシェルフ・ルータ内でFCP_DATAフレームが宛先指定される。図26Cに示すように、
RX_IDフィールド2622は、FCP_CMNDフレームの処理の間に、元々、ストレージシェルフ・ルータによって生成された値を含む。FCP_CMNDフレームは、FCP_DATAフレームと関連付けられた書込みコマンドを指定したもので、FCP_DATAフレームは、書込みコマンドのコンテキスト2624を指定し、さらには、データを、FCP層からGSMSを介してSATAポート層に転送するための仮想待ち行列2626を指定するものである。加えて、FCフレームヘッダ2606のパラメータフィールド2628は、WRITEコマンドによって転送されたデータ2632の総連続長内でのFCP_DATAフレームに含まれるデータの位置2630を指示する、データの相対オフセットを含む。コンテキスト2624は、次のFCP_DATAフレームの期待される相対オフセットを格納しており、これは、FCP_DATAフレームの適正な順序付けをチェックするのに使用され得る。格納されている期待される相対オフセットが、パラメータフィールドの値とマッチする場合には、FCP_DATAフレームは、誤った順序で受け取られており、エラー処理が呼び出される必要がある。
図26Dに、内部で生成された管理フレームの経路指定に関与するFCフレームヘッダフィールドを示す。Sビット(図26Aの2602)は、フレームが管理フレームであることを指示している。管理フレームの場合、D_IDフィールド2610の最下位バイトは、ストレージシェルフ内の個々のストレージシェルフ・ルータを指定するルータ番号を含む。D_IDフィールドに含まれるルータ番号は、以下で論じるレジスタ2634に含まれるローカルルータ番号と比較されて、管理フレームが、例えばストレージシェルフ・ルータ2636などのストレージシェルフ・ルータに宛先指定されているかどうか、あるいは、管理フレームが、Xファブリックに関連付けられたFCポート2638またはYファブリックに関連付けられたFCポート2640を介してアクセス可能な、ストレージシェルフ内の別のストレージシェルフ・ルータに宛先指定されているかどうかが判定される。
最後に、図26Eに、受け取ったFCP_XFER_RDYおよびFCP_RSPフレームの経路指定に関与するFCフレームヘッダフィールドを示す。FCP_XFER_RDYおよびFCP_RSPフレームの場合、経路指定論理は、フレームが、別のストレージシェルフ・ルータによるリモートエンティティ、通常は、ディスクアレイコントローラに宛先指定されていると直ちに認識する。よって、経路指定論理は、FCフレームヘッダのR_CTLフィールド2642を検査するだけで、そのフレームが、XファブリックまたはYファブリックに送り返されなければならないと判定することができる。
図27に、経路指定論理によるFCフレームの経路指定を円滑にするためにストレージシェルフ・ルータ内に維持される7つの主要な経路指定表を示す。これらの表には、内部経路指定表(「IRT」)2702、XファブリックとYファブリックそれぞれの外部経路指定表(「ERT_X」)2704、(「ERT_Y」)2706、XファブリックとYファブリックの開始側/宛先表(「ITT_X」)2708、(「ITT_Y」)2710、およびXファブリックとYファブリックそれぞれのログインペア表(「LPT_X」)2712、(「LPT_Y」)2714が含まれる。これら7つの経路指定表は、それぞれ、インデックスレジスタ(「IRT_INDEX」)2716およびデータレジスタ(「IRT_DATA」)2718などの、インデックスレジスタおよびデータレジスタと関連付けられている。各表の内容には、CPUが、表内の個々のフィールドを示す値をインデックスレジスタに書き込み、フィールドの内容をデータレジスタから読み取り、またはフィールドの新しい内容をデータレジスタに書き込むことによってアクセスされ得る。加えて、それぞれが、ルータ番号と、XファブリックとYファブリックそれぞれに関するストレージシェルフ・ルータドレスに対応するD_IDの上位2バイトとを格納するのに使用される、3つのレジスタ、「SFAR」2720、「XFAR」2722、および「YFAR」2724もある。これは、D_IDの下位バイトだけを格納するだけでよい、よりコンパクトなIRT表、ERT_X表およびERT_Y表を可能にする。
IRT表2702は、ストレージシェルフ・ルータに接続されている各ディスクドライブごとに、すなわち、各ローカルディスクドライブごとに1行を含む。この行は、ディスクドライブに宛先指定されたフレームのD_IDフィールドの下位バイトに含まれる、ディスクドライブに割り当てられているAL_PAと、ディスクドライブのLUN番号と、ディスクドライブ内に含まれる論理ブロックアドレスの範囲と、2つのCPUのうちのどちらが、ディスクドライブに宛先指定された入出力を処理するか指示するCPUフィールドと、その行が表内の有効なエントリを表しているか否か指示する有効ビットとを含む。有効ビットは、可能な最大数より少ない数のディスクドライブがストレージシェルフ・ルータに接続されているときに好都合である。
ERT_X表2704およびERT_Y表2706は、ストレージシェルフ・ルータにとってローカルではなく、ストレージシェルフにとってローカルであるディスクドライブをアドレス指定する有効D_IDの下位バイトを含む。これらの表は、以下で論じるように、不要な内部FCフレーム転送を避けるのに使用され得る。
XファブリックITT表2708およびYファブリックITT表2710は、現在ストレージシェルフ・ルータにログインしており、ストレージシェルフ・ルータとのFC交換、およびストレージシェルフ・ルータと相互接続されているディスクドライブとのFC交換を開始することのできるリモートFC発行元に対応する完全なS_IDを含む。ログインペア表2712および2714は、本質的に、FCP交換のために現在ログインしているリモート発行元とローカルディスクドライブの対に対応するセルでビット値がオンにされている疎行列である。よって、ログイン表2712および2714は、ディスクアレイコントローラなどのリモートエンティティと、ストレージシェルフ・ルータと相互接続されているローカルディスクドライブの間の継続中の相互接続を表す有効なログインの指示を提供する。
次に、一連の詳細なフロー制御図を参照して、ストレージシェルフ・ルータの経路指定層を構成する経路指定論理を説明する。図28に、各フロー制御図で使用される簡略化した経路指定トポロジおよび経路指定宛先命名法を示す。図29〜35は、経路指定層論理を記述する階層的な一連のフロー制御図である。
図28に示すように、経路指定層2802は、FCポート2804および2806からの入力FCフレームを、FCポートに直接返す転送、CPU上で実行されるFCP論理およびファームウェアによる処理のためのFCP層2810への転送、または、コンテキストが確立されているデータフレームの場合の、GSMS層への比較的直接の転送に関与する。経路指定層は、FCポート内の入力FIFO2812および2814から、それぞれ、「From_FP0」、「From_FP1」と指定された入力FCフレームを受け取る。経路指定層は、FCフレームを、FIFO2816と2818の一方に、それぞれ、「To_FP0」、「To_FP1」と指定されたFCフレームを書き込むことによって、一般的にはそのフレームを受け取ったのと逆のポートであるFCポートに送り返してもよい。経路指定層は、「To_GSMS」と称するプロセスとして、FCP_DATAフレームを、仮想待ち行列を介してGSMS層に比較的直接転送してもよく、「To_FCP」と称する、FCフレームを処理するためのFCP層2810への転送を行ってもよい。フロー制御図では、FIFOからの読み取りおよび書き込み、GSMS仮想待ち行列機構によるデータ転送、ならびにCPUへの共用メモリインターフェースを介した状態機械媒介転送の各プロセスの省略表現として、名称「From_FP0」、「From_FP1」、「To_FP0」、「To_FP1」、「To_GSMS」、および「To_FCP」を用いる。
図29は、経路指定層論理を表す、第1の、最高レベルのフロー制御図である。経路指定層論理は、入力FCフレームをその適切な宛先に指定するために行われる決定の組として説明される。機能しているストレージルータでは、図29〜35に関して説明される経路指定論理が、入力FCフレームが処理される際に呼び出される。経路指定論理は、ストレージシェルフ・ルータの状態機械および論理回路内に存在する。ストレージシェルフ・ルータは、可能な限り、格納および転送の、データコピー型の内部データ転送を回避するように設計されており、その代わり、フレームがFCポートのFIFOに入力されているときでさえも、フレームヘッダ中の情報を使ってフレームが経路指定され得るように簡素化されている。言い換えると、経路指定論理は、フレームヘッダがFIFOからの読み取り可能になり次第呼び出されてもよく、FCポートによる残りのデータの受け取りと並行して、フレームが経路指定され、フレームに含まれる最初のデータが、その宛先に転送されてもよい。XファブリックとYファブリック両方から入力されるFCフレームが、適時に処理され、XファブリックもYファブリックも、不要なFCフレーム処理遅延または長時間の停止を被らないように、ストレージシェルフ・ルータは、2つのFCポートの2つの異なる入力FIFOの公平な処理を保証するための調停論理を含む。経路指定論理は、FCポートによって生成される、FIFO内の新しく到着したフレームヘッダの利用可能性を示す信号によって呼び出される。
ステップ2902で、経路指定層論理(「RLL」)は、それぞれ、「From_FP0」および「From_FP1」と指定されたFCポートの入力FIFOの一方から、次の入力FCフレームヘッダを読み取る。ステップ2904で、経路指定層論理は、フレームヘッダを含むFCフレームがクラス3 FCフレームであるか否か判定する。前述のストレージシェルフ・ルータの実施形態では、クラス3 FCフレームだけがサポートされている。FCフレームがクラス3 FCフレームでない場合、FCフレームは、ステップ2906で、エラー処理のために、To_FCPで、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フィールド内で設定されているかどうか判定する。そうである場合、エラーが発生しており、ステップ2906で、FCフレームが、エラー処理のために、To_FCPでFCP層に宛先指定される。そうでない場合、ステップ2912で、FCフレームがXファブリックすなわちX空間、それともYファブリックすなわちY空間に属しているか指示するように、適切なSビットが設定される。ストレージシェルフ内の相互接続されているストレージシェルフ・ルータの組の内部でのストレージシェルフ・ルータの位置に関係なく、2つのFCポートの一方はXファブリックに対応し、他方はYファブリックに対応することに留意されたい。前述のように、FCポートとXおよびYファブリックの間の関連付けは設定できる。次に、RLLは、ステップ2914で、Sビットが、フレームがSファブリックフレームであると指示するように設定されているかどうか判定する。そうである場合、ステップ2916で、フレームの宛先を決定するために下位論理「管理宛先」が呼び出され、その後、ステップ2918で、ステップ2916で決定された宛先にFCフレームを実際に経路指定するために、下位論理「宛先への経路指定」が呼び出される。ステップ2914で、FCフレームがSファブリック管理フレームでないと判定された場合、ステップ2920で、RLLは、RLLが、現在、前述の、各ディスクドライブが独自のFCノードアドレスを持つモードである透過モードで動作しているか否か判定する。ストレージシェルフ・ルータが透過モードで動作している場合、ステップ2922で、フレームの宛先を決定するために、下位論理「透過宛先」が呼び出され、次いで、ステップ2918で、フレームをその宛先に実際に経路指定するために、下位論理「宛先への経路指定」が呼び出される。そうでない場合、ステップ2924で、フレームの宛先を決定するために下位論理「宛先」が呼び出され、その後、ステップ2918で、フレームは、下位論理「宛先への経路指定」への呼び出しを介して、その宛先に経路指定される。
図30は、図29のステップ2916から呼び出される下位論理「管理宛先」を表すフロー制御図である。ステップ3002で、RLLは、FCフレームのヘッダのD_IDに格納されたストレージシェルフ・ルータ番号が、ストレージシェルフ・ルータの番号と等しいかどうか判定する。この判定は、ストレージシェルフ内のストレージシェルフ・ルータに割り当てられ、SFARレジスタに格納されているルータ番号を使って行われ得る。ステップ3002でD_IDに含まれるルータ番号がSFARレジスタ内のルータ番号にマッチすると判定された場合、ステップ3004で、変数「宛先」が、フレームがFCP層に送られるべきであると指示する値「To_FCP」に設定される。ルータ番号がマッチしない場合、ステップ3006で、RLLは、FCフレームのD_ID内のルータ番号が、ストレージシェルフ・ルータのルータ番号より大きいかどうか判定する。FCフレームのD_ID内のルータ番号が、SFARレジスタに格納されているストレージシェルフ・ルータのルータ番号より大きい場合、制御はステップ3008に進む。そうでない場合、制御はステップ3010に進む。ステップ3008でもステップ3010でも、RLLは、フレームがストレージシェルフ内のSファブリック端点に到達しているかどうか判定する。そうである場合、管理フレームは、誤ってアドレス指定されたか、あるいは誤って、適切な宛先によって処理されなかったものであり、そのため、どちらの場合にも、フレームがCPUによって、誤って受け取られたフレームとして処理されるように、ステップ3004で、宛先が「To_FCP」に設定される。しかしながら、3008でも3010でも、現在のストレージシェルフ・ルータがSファブリック端点でない場合、D_ID内のルータ番号が現在のルータのルータ番号より小さければ、宛先は、ステップ3012で「To_FP0」に設定され、D_ID内のルータ番号が現在のストレージシェルフ・ルータのルータ番号より大きければ、宛先は、ステップ3014で「To_FP1」に設定される。この場合もやはり、ストレージシェルフ内のストレージルータの数値識別は、Xファブリックに関しては昇順であり、Yファブリックに関しては降順であることに留意すべきである。
図31は、図29のステップ2924から呼び出される下位論理「宛先」を表すフロー制御図である。この下位論理は、ストレージシェルフ・ルータが透過モードで動作していないとき、すなわち、ストレージシェルフ・ルータがAL_PAに複数のディスクドライブをマップしているときに、FCフレームの宛先を決定する。ステップ3102で、RLLは、フレームがXFER_DRYまたはRSPフレームであるかどうか判定する。これらのフレームは、ディスクアレイコントローラに送り返される必要がある。そうである場合、ステップ3103で、RLLは、フレームがXファブリックに属しているかどうか判定する。フレームがXファブリックに属している場合、ステップ3104で、フレームをX FCポートに宛先指定するために、変数「宛先」が値「To_FP0」に設定される。ステップ3102で、フレームがYファブリックフレームであると判定された場合、ステップ3106で、フレームをY FCポートに宛先指定するために、変数「宛先」が「To_FP1」に設定される。ステップ3102で、フレームがFCP_XFER_RDYもFCP_RSPフレームでもないと判定された場合、ステップ3108で、RLLは、フレームがFCP_CMNDフレームであるかどうか判定する。そうである場合、ステップ3110で、変数「宛先」は、フレームがストレージシェルフ・ルータにとってローカルであるLUNに宛先指定されたFCP_CMNDフレームであって、フレームが、FCPコマンドのコンテキストを確立するためのファームウェア処理のために、FCP層に宛先指定される必要があることを指示する、「To_FCP」に設定される。ステップ3108で、フレームがFCP_CMNDフレームでないと判定された場合、ステップ3112で、RLLは、フレームがFCP_DATAフレームであるか否か判定する。フレームがデータフレームでない場合、ステップ3114で、ファームウェアが、どんなタイプのフレームが受け取られており、そのフレームがどのように処理されるべきか判定するためのエラー処理を呼び出すように、変数「宛先」が「To_FCP」に設定される。ステップ3112で、フレームがFCP_DATAフレームであると判定された場合、ステップ3116で、RLLは、フレームが応答側によって送られたものか、それとも発行元に
よって送られたものか判定する。フレームが発行元によって送られたものである場合、ステップ3110で、フレームをFCP層処理に宛先指定するために、変数「宛先」が「To_FCP」に設定される。データフレームが応答側によって送られたものである場合、ステップ3118で、RLLは、フレームが、最初に、Sファブリック外部から受け取られたかどうか、あるいは、フレームヘッダ内のSビット符号化ファブリック指示が、フレームが受け取られたポートと逆のポートと不整合であるかどうか判定する。どちらの条件も真である場合、フレームは、誤って受け取られており、ステップ3114で、フレームをエラー処理のためにCPUに宛先指定するように、変数「宛先」が「To_FCP」に設定される。そうでない場合、制御は、XポートまたはYポートへの宛先指定のために、ステップ3103に進む。
図32は、図29のステップ2922から呼び出される、下位論理「透過宛先」を表すフロー制御図である。この下位論理は、ストレージシェルフ・ルータが、各ディスクドライブが独自のAL_PAを有する透過モードで動作しているときにFCフレームの宛先を決定する。ステップ3202で、FCフレームのヘッダのD_IDフィールドの上位2バイトが、フレームが受け取られたソースポートに対応するXFARまたはYFARレジスタの内容と等価であるか否か、およびD_IDフィールドの下位バイトが、AL_PAがローカルディスクドライブに割り当てられていることを示す、IRT表に含まれるAL_PAを含むかどうか、RLLが判定する。そうである場合、FCフレームは、現在のストレージシェルフ・ルータに宛先指定されたものである。そうでない場合、FCフレームは、別のストレージシェルフまたはストレージシェルフ・ルータに宛先指定されている。FCフレームが現在のストレージシェルフ・ルータに宛先指定されている場合、ステップ3204で、RLLは、S_IDが、適切なITT表に含まれるS_IDに対応するかどうか調べることによって、FCフレームの発行元が、ストレージシェルフ・ルータと相互接続されているディスクドライブと現在FC交換を開始することのできる外部FC発行元であると識別されるリモートエンティティであるかどうか判定し、S_IDが適切なITT表で見つかった場合、RLLは、さらに、適切なLPT表をチェックして、FCフレームヘッダに含まれるS_IDと関連付けられたリモートエンティティが、フレームが宛先指定されているディスクに関して、現在ログインしているかどうか調べる。ステップ3204で、S_IDが、現在ログインしており、フレームがそこに宛先指定されているストレージシェルフ・ルータと相互接続されているディスクドライブとのFC交換を引き受けることのできるリモートエンティティを表すと判定された場合、ステップ3206で、フレームを処理のためにFCP層に宛先指定するように、変数「宛先」が「To_FCP」に設定される。これに対して、S_IDが適切なIIT表に含まれておらず、またはFCフレームが宛先指定されているソースおよびディスクドライブが、適切なLPT表によって、現在ログインしていないと示されている場合、ステップ3208で、フレームをエラー
処理のためにFCP層に宛先指定するように、変数「宛先」が「To_FCP」に設定される。
ステップ3202で、D_IDフィールドが適切なFARレジスタの内容とマッチしないと判定された場合、ステップ3210で、RLLは、フレームがXファブリックフレームであるか否か判定する。そうである場合、ステップ3212で、RLLは、フレームがストレージシェルフ内の別のストレージシェルフ・ルータに宛先指定されているか否か判定する。そうでない場合、ステップ3214で、フレームを別のストレージシェルフに転送するために外部Xファブリックに戻すよう、変数「宛先」が「To_FP0」に設定される。ステップ3212で、ERT_X表が、フレームの宛先に、ストレージシェルフ内の別のストレージシェルフ・ルータに接続されたディスクドライブであると指示するエントリを含むと判定された場合、ステップ3216で、RLLは、現在のストレージシェルフ・ルータが、Yファブリック端点を表すか否か判定する。そうである場合、フレームは正しく処理されなかったものであり、Yファブリックに送ることができず、したがって、ステップ3208で、フレームが、エラー処理のためにFCP層に宛先指定されるように、変数「宛先」が値「To_FCP」に設定される。そうでない場合、ステップ3218で、フレームを、Sファブリックを介してストレージシェルフ内の後続のストレージシェルフ・ルータに転送するために、変数「宛先」が「To_FP1」に設定される。ステップ3210で、受け取ったフレームがXファブリックフレームでないと判定された場合、ステップ3220で、RLLは、受け取ったフレームがYファブリックフレームであるか否か判定する。そうである場合、フレームは、ステップ3222から、Xファブリックフレームのための処理と対称的に、等価に処理される。そうでない場合、ステップ3208で、フレームをエラー処理のためにFCP層に宛先指定するよう、変数「宛先」が「To_FCP」に設定される。
図33は、図29のステップ2918から呼び出される下位論理「宛先への経路指定」を表すフロー制御図である。この下位論理は、受け取ったFCフレームを、以前に呼び出された論理で決定された宛先に宛先指定する。ステップ3302で、RLLは、変数「宛先」の値が「To_FP0」または「To_FP1」であるか判定する。そうである場合、同じステップで、RLLは、宛先が、フレームが受け取られたポートと逆のポートと関連付けられているかどうか判定する。そうである場合、ステップ3304で、RLLは、変数「宛先」の内容によって指示される宛先が、Sファブリック端点を表すポートと関連付けられた待ち行列であるかどうか判定する。そうである場合、ステップ3306で、フレームをローカルSファブリックから送り出す前に、FCフレームヘッダのDF_CTLフィールド内で設定されている任意のSビットがクリアされる。ステップ3308で、RLLは、フレームがXファブリックとYファブリックのどちらに属しているか判定し、ステップ3310または3312で、フレームを適切な出力待ち行列に入れる。ステップ3302で、変数「宛先」の内容が、FP0ポートまたはFP1ポートを指示しておらず、または宛先が、FCフレームが受け取られたポートと逆のポートではないと判定された場合、ステップ3314で、RLLは、変数「宛先」の内容が、フレームがFCポートの一方に宛先指定されるべきであると指示しているか否か判定する。フレームが、FCポートの一方に宛先指定されるべきである場合、ステップ3316で、フレームは、FCP層によるエラー処理のために、FCP層に宛先指定される。ステップ3318で、RLLによって、変数「宛先」の内容が、フレームがFCP層に宛先指定されている、「To_FCP」を指示していると判定された場合、ステップ3316で、フレームは、FCP層に宛先指定される。そうでない場合、ステップ3320で、RLLは、FCフレームヘッダのR_CTLフィールドが、フレームがFCPフレームであると指示しているかどうかチェックする。そうでない場合、ステップ3316で、フレームは、エラー処理のためにFCP層に宛先指定される。そうである場合、ステップ3322で、RLLは、フレームがFCP_CMNDフレームであるか否か判定する。そうである場合、ステップ3324で、
下位論理「宛先のマップ」が呼び出され、その後、RLLは、ステップ3326で、変数「宛先」の内容が、「To_FCP」に等しいままであるか否か判定する。そうである場合、ステップ3316で、フレームは、FCP層に宛先指定される。そうでない場合に、ステップ3328で、変数「宛先」の内容が、現時点で、2つのFCポートの1つへのフレームの転送を指示しており、FCポート宛先が、フレームが受け取られたのと同じFCポートであると判定された場合には、ステップ3316で、フレームは、エラー処理のためにFCP層に宛先指定される。そうでない場合、制御は、ステップ3304に進み、フレームを2つのFCPポートの1つの待ち行列に入れる。ステップ3322で、フレームが、FCP_CMNDフレームでないと判定された場合、ステップ3330で、下位論理「その他の経路指定」が呼び出される。
図34は、ステップ3324で呼び出される下位論理「宛先のマップ」を表すフロー制御図である。RLLは、まず、ステップ3402で、LUN、LBA、またはLUNとLBAとの組み合わせのマッピングが、ストレージシェルフ・ルータによって現在実行されているかどうか判定する。そうでない場合、RLLは、ステップ3404で、ストレージシェルフ・ルータが、現在、透過モードで動作しているかどうか判定する。そうである場合、ステップ3406で、変数「宛先」の値が「To_FCP」に設定される。ステップ3404で、ストレージシェルフ・ルータが、透過モードで動作していないと判定された場合、RLLは、ステップ3408で、適切なLPT表が、フレームのソースがフレームの宛先とデータを交換するためにログインしていることを指示しているかどうか判定する。そうである場合、ステップ3406で、変数「宛先」が「To_FCP」に設定される。そうでない場合、ステップ3406で、フレームをエラー処理のためにCPUに宛先指定するように、宛先は、やはり、「To_FCP」に設定される。LUN、LBA、またはLUNとLBAの組み合わせのマッピングが、ストレージシェルフ・ルータによって実行されている場合、RLLは、ステップ3410で、指定された宛先ディスクが、IRT表に関連付けられたエントリを持つかどうか判定する。そうである場合、制御がステップ3404に進む。そうでない場合、ステップ3412で、RLLは、範囲チェックが無効にされているか否か判定する。範囲チェックが無効にされている場合、ステップ3414で、RLLは、フレームがFP0ポートで受け取られたかどうか判定する。そうである場合、ステップ3416で、変数「宛先」が、「To_FP1」に設定される。そうでない場合、ステップ3418で、変数「宛先」の内容が、「To_FP0」に設定される。宛先チェックが有効にされている場合、ステップ3420で、RLLは、指定された宛先ディスクがFP0ポートを介してアクセス可能であるかどうか判定する。そうである場合、制御はステップ3418に進む。そうでない場合、ステップ3422で、RLLは、指定された宛先ディスクが、FCポートFP1を介してアクセス可能であるかどうか判定する。そうである場合、制御はステップ3416に進む。そうでない場合、ステップ3406
で、変数「宛先」は、エラー処理のために、「To_FCP」に設定される。最後のステップとして、ステップ3416または3418で2つのFCポートの一方にマップされたフレームについて、RLLは、ステップ3424で、フレームが現在宛先指定されているポートがS空間端点であるかどうか判定する。そうである場合、ステップ3406で、変数「宛先」の値は、フレームをエラー処理のためにFCPに宛先指定するように、「To_FCP」に設定される。
図35は、図33のステップ3330における、下位論理「その他の経路指定」を表すフロー制御図である。ステップ3502で、RLLは、フレームのRX_IDフィールドが、現在のストレージシェルフ・ルータ、または現在のストレージシェルフ・ルータに接続されているディスクドライブが、フレームのFC応答側であるかどうか判定する。そうである場合、ステップ3504で、RLLは、フレームがFCP_DATAフレームであるか否か判定する。そうである場合、ステップ3506で、RLLは、フレームの有効なコンテキストがあるか否か判定する。そうである場合、ステップ3508で、フレームは、前述のように、データのSATAポートへの転送のために、「To_GSMS」で、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で、フレームが属しているファブリックに適したポートのFIFOにフレームを書き込む。
SCSIコマンド/ATAコマンド変換
前述のように、本発明の一実施形態を表すストレージシェルフ・ルータは、ディスクアレイ制御によってストレージシェルフ・ルータに宛先指定されたFCP_CMNDフレームを、あたかもFCP_CMNDフレームが、FCディスクドライブに宛先指定されたかのように処理し、SCSIコマンドを実行するために、FCP_CMNDフレーム内のSCSIコマンドを、1つまたはSATAディスクドライブに送られ得るよりも多くのATAコマンドに変換する。以下の表5に、ストレージシェルフ・ルータによって受け取られるSCSIコマンドと、SCSIコマンドを実行するのに使用されるATAコマンドの間の対応を示す。
ストレージシェルフ抽象化層
ストレージシェルフ設計は、ストレージシェルフ内のすべてのディスクドライブが、均一の容量および構成、均一の動作挙動、ならびに均一のコマンド/制御インターフェースを提供することを要件とすることによって、簡略化され、円滑化されるはずである。その場合、ストレージシェルフファームウェア、またはその他のストレージシェルフ管理論理は、明確に、均一な容量、動作挙動、およびインターフェースのディスクドライブを管理するように設計され得るはずである。しかしながら、かかる制約条件は経済的に実現不可能であり、どんな特定のストレージシェルフ実装形態も、急速に、ほとんど即座に陳腐化を運命付けられることになる。たとえ、ストレージシェルフにおいて、単一のディスクドライブ製造者によって製造される1タイプのディスクドライブだけを断固として使用することが、可能であり、商業的に実現であったとしても、そのストレージシェルフ実装形態は、改善と、選択された任意の特定のディスクドライブの新しいバージョンによって急速に古いものになるはずである。
代わりに、ストレージシェルフが、ストレージシェルフ抽象化層を用いることによって、ストレージシェルフ製造者によって使用される様々なタイプの物理的ディスクドライブを効率よく収容し、管理するように設計されている。非常に一般的な場合には、ストレージシェルフ論理は、多種多様な通信媒体および入出力ポートを介してコントローラにインターフェースする極めて多種多様なディスクドライブのいずれかを管理するように設計され得る。以下で論じる実施形態では、ストレージシェルフが、様々な製造者によって製造される多種多様なパラレルATA(「PATA」)およびシリアルATA(「SATA」)ディスクドライブのいずれかを管理できるようにするために、よりやや制限的な手法が提供される。このよりやや制限的な手法では、ストレージシェルフ管理論理は、ストレージシェルフ内に含まれる様々なタイプのディスクドライブのいずれもが、ATAポートを介してストレージシェルフ管理論理にインターフェースすることができると想定している。したがって、ストレージシェルフ抽象化層は、前節で説明したATA通信プロトコルの一般的なフレームワーク内のATAディスクドライブの挙動の違いの処理に関与する必要がある。しかしながら、このより制限的なストレージシェルフ抽象化層、すなわちディスクドライブ適合層を設計し、実施する際に用いられる技法は、一般に、異なる入出力プロトコルを用いて非ATAディスクドライブ、および非ディスク記憶装置さえも処理する複数のタイプの入出力ポートを収容し得る適合層に適用することができる。
ストレージシェルフ抽象化層は、第三者ベンダが提供するディスクドライブおよびディスクドライブ制御論理における欠陥およびバグを改善し、ディスクドライブが提供する機能およびインターフェースの上に追加の制御論理をオーバーレイすることによって、望ましいATA機能を、ATAディスクドライブベンダ業界によるそれらの採用および標準化の前に提供し、ATAのエラーコード、状況コード、および他のATA特有の情報を、他の規格および他のタイプの装置で使用されるエラーおよび状況コードにマップし、専用の機能および特性を、標準のATA機能および特性にマップするのに使用され得る。一般に、ストレージシェルフ抽象化層は、個々のディスクドライブと、多くの実施形態におけるストレージシェルフ・ルータなどの、ストレージシェルフ内の残りの論理コンポーネントとによって提供されるインターフェースと機能の組の間に、任意のインターフェースと機能の組を置いてもよい。
一実施形態では、ストレージシェルフ・ルータ内にディスクドライブ適合層が実施されてもよい。図36に、ストレージシェルフ・ルータ内のディスクドライブ適合層の概念を示す。前の小節で論じたように、ストレージシェルフ・ルータ3605全体は、本質的に、ディスクアレイコントローラ3606または他のハイエンド記憶管理コンポーネントに対して、図36において面3604で表す、適合層およびインターフェースとして働く。ストレージシェルフ・ルータ3602は、ディスクアレイコントローラへの、適合層3604を介したインターフェースを示す。このディスクアレイコントローラは、ストレージシェルフ内のATAディスクドライブ3608〜3611をディスクアレイコントローラ3606に対して、あたかもそれらが、ハイエンド、デュアルポートファイバチャネルディスクであるかのように示す。この小節では、ストレージシェルフ・ルータ3602内で実施されたディスクドライブ適合層3612は、ストレージシェルフ・ルータファームウェアの大部分へのインターフェースを提供する。このファームウェアは、ストレージシェルフ内のATAディスクドライブ3608〜3611を、多少異なる動作挙動を呈し、したがって、幅広い、別個のファームウェア管理論理を必要とする、異なる製造者によって製造された、恐らく異なるタイプのATAディスクの集合体としてではなく、同じファームウェアとして見ることができる。
以前の小節で、ATAディスクドライブのコマンドインターフェースについて論じている。ATAディスクドライブによってサポートされるコマンドの1つが、装置識別コマンドであり、ストレージシェルフ・ルータなどのインターフェース制御コンポーネントが、そのディスクドライブ特有のタイプ、製造者、ファームウェアリビジョン、容量、およびその他のかかるパラメータおよび特性に関する詳細情報を獲得するために、ATAディスクドライブに発行することができる。図37に、装置識別コマンドを受け取ったことに応答してATAディスクドライブによって返されるフォーマット設定済みの512バイト情報ブロックを示す。この情報ブロックで返されるフィールドのいくつかを図37に明示的に示す。例えば、この情報ブロックは、アドレス指定可能なシリンダ数3702と、ユーザがアドレス指定可能なヘッド数3704と、1トラック当たりのフォーマット設定されていないバイト数3706と、1セクタ当たりのフォーマット設定されていないバイト数3708と、ユーザがアドレス指定可能なセクタ数3710などを記述する16ビット整数フィールドを含む。この情報ブロックは、20バイトのパディングされた連番3712と、8バイトのファームウェアリビジョン番号3714と、40バイトのパディングされたモデル番号3716と、現在のシリンダ数3718、ヘッド数3720および1トラック当たりのセクタ数のための別の16ビット整数フィールドと、容量をセクタ単位で指示する32ビット整数フィールド3724を含む。よって、装置識別コマンドを発行することによって、ストレージシェルフ・ルータは、ディスクドライブの主要なパラメータの多くを決定することができる。
ディスクドライブ適合層の1つの機能が、ストレージシェルフ内の各ディスクドライブごとの一般的な現在の特性を格納しているディスクドライブ構成表、またはディスクドライブ構成表に相当するものである。図38に、ディスクドライブ構成表の1つの可能な実装形態を示す。ディスクドライブ構成表3802は、ストレージシェルフ内の各ディスクドライブスロットごとに1つのエントリを含む。エントリ3804など、ディスクドライブ構成表内の各エントリは、ディスクドライブの現在の特性を指定する数値フィールド3806〜3813を含む。1つのエントリ3806は、以下で論じる、ディスクドライブのタイプに対応するディスクプロファイル表内のエントリを指定する。
ディスクドライブ構成表は、種々の方法で実施されてもよく、多種多様なフォーマットおよびレイアウトがあってもよい。いくつかの実施形態では、ストレージシェルフ内の各ストレージシェルフ・ルータが、ストレージシェルフ内の実行できるディスクドライブごとのスロットを備えるディスクドライブ構成表を別々に維持していてもよい。別の実施形態では、ディスクドライブ構成表が分散されており、各ストレージシェルフ・ルータが、任意の可能な通常の、またはフェイルオーバ動作モードの下で制御し得るディスクドライブだけのエントリを維持していてもよい。別の実施形態では、ディスクドライブ構成表が、ストレージシェルフ・ルータ以外の論理およびコンポーネントによって維持されていてもよい。単一のディスクドライブ構成表にあるのではなく、図38に示すディスクドライブ構成表エントリ内の情報が、複数のデータ構造およびメモリ位置にわたって分散されていてもよい。
ディスクドライブ適合層の第2の機能が、ディスクプロファイル表である。図39に、いくつかの実施形態で使用される、ストレージシェルフ内で実施されるディスクプロファイル表の1つの可能な実装形態を示す。ディスクプロファイル表3902は、好都合には、ディスクプロファイル表内のエントリをシステム管理者が変更できるように、ストレージシェルフ・ルータファームウェアからも、ストレージシェルフコンソールアプリケーションからもアクセス可能な、フラッシュメモリなどの不揮発性メモリに格納されている。ディスクプロファイル表は、ストレージシェルフ内に存在し得るディスクドライブの各タイプごとに別々のエントリを含み、ストレージシェルフ・ルータの、最初に電源オンされるディスクドライブと、装置識別コマンドによって返される情報によって、具体的なディスクドライブのタイプにマッチングさせることのできないディスクドライブとのデフォルトの対話を可能にするデフォルトエントリを含む。代替の実施形態では、ディスクプロファイル表は、ストレージシェルフ・ルータ以外の論理およびコンポーネントによって維持される。
ディスクプロファイル表の各エントリに格納されている情報は、装置識別コマンドに応答してディスクドライブによって返された512バイト情報ブロックから収集され得る情報と、様々なタイプの経験的情報および実験的に決定された情報の組み合わせである。例えば、以下で論じる、ディスクプロファイル表エントリ内のいくつかのフィールドは、ストレージシェルフ論理が、どのようにして、そのエントリに対応するディスクドライブのタイプを有するディスクドライブをリセットしようとすべきか指定する。ディスクドライブをリセットする方法は、装置識別コマンドに応答してディスクドライブによって返される512バイトの情報ブロックで報告されるディスクドライブのタイプおよび様々なディスクドライブ特性によって決まり、また、実験的な、試行錯誤法によって、ストレージシェルフ製造者およびストレージシェルフ設計者が収集した経験的特性にも左右される。ディスクプロファイル表の一実施形態では、各エントリが、以下のフィールドを含む。(1)DPF_MODEL3904、装置識別コマンドに応答してディスクドライブによって返される情報ブロック内のモデル番号フィールド(図37の3716)から獲得されるそのタイプのディスクドライブのモデル番号、(2)DPF_FWREV3906、やはり、装置識別コマンドに応答して情報ブロックで返される、そのタイプのディスクドライブのファームウェアリビジョン番号、(3)DPF_FEATURES3908、そのタイプのディスクドライブに適したリセット方法を指示するビットフラグを含む情報フィールド、(4)DPF_RBS3910、ディスクドライブ転送特性に関連する性能調整メトリックである、そのタイプのディスクドライブの読取りバーストサイズを指定する整数フィールド、(5)DPF_WBS3912、やはり、ディスクドライブ転送特性に関連する性能調整メトリックである、そのタイプのディスクの書込みバーストサイズを指定する整数フィールド、(6)DPF_PWRC3914、このタイプのドライブが、リセット手順の一部として電源オフされる場合に、ドライブが電源オフされる時間を、100ミリ秒単位で指定する整数フィールド、(7)DPF_RTOV3916、リセット試行に続いて、そのタイプのディスクドライブが応答するのを待つミリ秒数を指定する整数フィー
ルド、(8)DPF_TYPE3918、そのタイプのディスクドライブを指定する整数フィールド、(9)DPF_MULT3919、ハードリセットが試みられる場合の、DPF_RTOV値の増倍率。図39では、様々なディスクプロファイル表フィールドの長さを示すために、ディスクプロファイル表3902の最下行3920が、1バイト長単位で増分されることに留意されたい。
図40A〜Bに、装置プロファイル表エントリのDPF_FEATURESフィールドのフォーマットおよび内容を示す。図40に、DPF_FEATURESフィールドのフォーマットを示す。DPF_FEATURESフィールド4000は、(1)そのタイプのディスクドライブをリセットするのにハードリセットが用いられ得ることを指示するHR4002と、(2)その装置をリセットするのに電源オフ/電源オンサイクルが使用され得るか否か指示するDHPC4004と、(3)そのタイプのディスクドライブをリセットするのにソフトリセットが使用され得るかどうか指示するSR4006と、(4)WRITE−SAME加速機能が有効にされているかどうか指示するWS4008という、4つの1ビットフィールドを含む。図40Bに、DPF_FEATURESフィールド内のHR、DHPC、およびSRビットフィールドの値に応じて、ストレージシェルフ・ルータ論理によって用いられるリセット方法を指示する表を示す。行4010に示すように、SRおよびHRビットが設定されているとき、ストレージシェルフ論理は、ディスクドライブをリセットするために、まず、ソフトリセットを試行し、次いで、ソフトリセットに失敗した場合には、ハードリセットを試行してもよい。行4012に表すように、SRおよびDHPCビットフィールドが設定されているとき、ストレージシェルフ論理は、ディスクドライブをリセットするために、まず、ソフトリセットを試行し、それに失敗した場合、次いで、ディスクドライブに電源サイクルを使用する。行4014に示すように、HRおよびDHPCビットが設定されているとき、ストレージシェルフ論理は、ディスクドライブをリセットするために、まず、ハードリセットを使用し、それに失敗した場合、次いで、ディスクドライブに電源サイクルを使用する。最後に、行4016に示すように、3つのSR、HR,DHPCビット全部が設定されているとき、ストレージシェルフ論理は、ディスクドライブをリセットするために、まず、ソフトリセットを試行し、次いで、ソフトリセットに失敗した場合には、ハードリセットを、最後に、ハードウェアにもソフトリセットにも失敗した場合には、ディスクドライブに電源サイクルを使用する。
図41に、DPF_TYPEフィールドの値が、様々なタイプのATAディスクドライブのテキスト記述と関連付けられている表を示す。この表は、ディスクプロファイル表の一実施形態において、ディスクプロファイル表エントリのDPF_TYPEフィールド(図39の3918)の値として使用されるディスクドライブタイプの符号化の一実施形態を表すものである。
図42に、ストレージシェルフ論理が、最初に、新しく電源オンされたディスクドライブに応答し、装置識別コマンドに応答して返された情報ブロックの内容からそのタイプを完全に特徴付けることができないディスクドライブを管理し、または装置識別コマンドに応答してエラーを返すディスクドライブを管理することができるように、ディスクプロファイル表の最初の位置に置かれる、デフォルトのディスクプロファイル表エントリの内容を示す。加えて、個別のディスクプロファイル表エントリのいずれかが、初期設定されていない、または誤って指定されたフィールドの値を含むとき、ストレージシェルフ論理は、初期設定されていない、または誤って指定された値を含むエントリに対応するディスクドライブを管理するために、図42に示す、デフォルトのディスクプロファイル表エントリの使用に頼る。図42に示すように、デフォルトのディスクプロファイル表エントリでは、DPF_FEATURESフィールドのSRビットおよびDHPCビットが設定されており、32セクタの読取りバーストサイズを含み、64セクタの書込みバーストサイズを含み、8.5秒の電力サイクル回復タイムアウト値を含み、1秒のリセットタイムアウト値を含み、「Maxtor SATA」というディスクドライブのタイプを含む。
図39に示すディスクプロファイル表の例に戻って、ディスクプロファイル表エントリの内容および順序のいくつかの特徴を考察する。第1に、前述のように、デフォルトのディスクプロファイル表エントリが、表の最初の位置、すなわち行に表示されている。第2に、第3の表エントリ3922に示すように、DPF_MODELフィールドおよびDPF_FWREVフィールド内の任意の数の記号を、ワイルドカード文字「?」で置き換えることができる。これらのワイルドカード文字は、表エントリが、そのエントリのこれらのフィールドで指定されている、ワイルドカード記号を含むモデル番号またはファームウェアリビジョン番号の一部にしかマッチしないファームウェアリビジョン番号のモデル番号をウィザードするいくつかの関連するディスクドライブを表すことを可能にする。例えば、最初の7文字が「HDS7225」のモデル番号を有するディスクドライブは、エントリ3922の部分的に指定されたモデル番号とマッチする。この場合、どんなファームウェアリビジョン番号も、このエントリの全く指定されていないファームウェアリビジョン番号とマッチする。ストレージシェルフ論理が、装置識別コマンドに応答して返された、512バイト情報ブロックで返された情報を、ディスクプロファイル表エントリとマッチングさせようとするとき、ストレージシェルフ論理は、ディスクプロファイル表を、最上部のデフォルトエントリに続くエントリからサーチし始める。したがって、ディスクドライブが、表で見つかる最も明確に指定されたエントリとマッチングされるように、最も明確で完全に特徴付けられたモデル番号およびファームウェアリビジョン番号を含む最も明確で完全に特徴付けられたエントリが、ディスクプロファイル表内の部分的に指定されたエントリの前に配置されるべきである。当然ながら、代替の実施形態では、ストレージシェルフ論理が、ディスクプロファイル表での表示順序とは無関係に、最も明確なマッチングエントリを求めて表全体をサーチしてもよい。
図43は、ストレージシェルフ内の新しく電源オンされたディスクドライブによって生成された電源オン割込みに応答するために、ストレージシェルフファームウェアによって使用されるファームウェア電源オンルーチンを表すフロー制御図である。まず、ステップ4302で、ストレージシェルフ・ルータは、SATAまたはPATAポートから、一般に割込みの形でそのポートに接続されたディスクドライブの電源オン状態を指示する割込みを受け取る。次に、ステップ4304で、ストレージシェルフ論理は、デフォルトのプロファイル表エントリ内の情報を使って、装置識別コマンドのディスクドライブへの送出から生じている任意のエラー条件を解釈する。ステップ4306で、ストレージシェルフ論理は、ステップ4304で発行された装置識別要求に応答して512バイト情報ブロックを受け取る。ステップ4308で、ストレージシェルフ論理は、ディスクドライブのポート番号を使って、ディスクドライブ構成表内の対応するエントリを識別し、情報ブロック内のモデル番号およびファームウェアリビジョン番号を使って、ドライブプロファイル表内の対応するエントリをサーチする。ステップ4310で、適切なドライブプロファイル表エントリが見つかったと判定された場合、ステップ4312で、ディスクドライブに対応するディスクドライブ構成表エントリ内のフィールドが、見つかったプロファイル表エントリ(図38の3806)を指し示すように設定される。そうでない場合、ステップ4314で、ディスクドライブ構成表エントリ内のフィールドは、デフォルトのディスクプロファイル表エントリを指し示すように設定される。次いで、ステップ4316〜4319のforループで、ストレージシェルフ論理は、受け取った情報ブロックの内容と、ストレージシェルフ・ルータファームウェア内にカプセル化されている別の情報とから、ディスクドライブに対応するディスクドライブ構成表エントリ内のすべてのフィールド値を決定する。
ディスクドライブ構成表とディスクプロファイル表とに格納されている情報は、ストレージシェルフ論理が、少なくとも、デフォルトのディスクプロファイル表エントリで符号化されているディスクドライブ挙動および特性に従って動作する任意のATAディスクドライブを管理することを可能にする。これらの表に格納されている情報を使用して、ストレージシェルフ論理は、特定の処置を、特定のタイプのディスクドライブと、様々なタイプのディスクドライブの現在の状態とに適合させることができる。よって、これらの表、およびこれらの表にアクセスし、これらの表に格納されている値に基づく実行のためのルーチンまたはコードセグメントを選択する対応するストレージシェルフ・ルータファームウェアは、本発明の一実施形態を表すディスクドライブ適合層の一実施形態を構成する。ストレージシェルフ・ルータファームウェアが、どのようにして、ディスクプロファイル表に格納されている情報を用いるかの一例として、次に、ストレージシェルフ論理によって使用されるリセット手順を説明する。
図44は、ストレージシェルフ論理によって実行されるリセット手順を示す制御フロー図である。ステップ4402で、ストレージシェルフ論理は、特定のディスクドライブをリセットすることを決定すると、そのドライブに対応するディスクドライブ構成表エントリを識別し、それにアクセスする。そのエントリに格納されたポインタを使って、ストレージシェルフ論理は、ステップ4404で、そのディスクドライブに対応するディスクプロファイル表エントリにアクセスする。ステップ4406で、ディスクプロファイル表エントリのDPF_FEATURESフィールドのSRビットが設定されていると判定された場合、ストレージシェルフ論理は、ステップ4408で、ディスクドライブにソフトリセットを発行し、割込み応答を待つ。ステップ4410で、ドライブが正しく応答したと判定された場合、リセットが完了しており、ステップ4412で、ファームウェアルーチンが戻る。そうでない場合、または4408でソフトリセットが試みられなかったとき、ステップ4414で、ストレージシェルフ論理は、ディスクプロファイル表エントリのDPF_FEATURESフィールド内のHRビットフィールドが設定されているか否か判定する。そうである場合、ストレージシェルフ論理は、ステップ4416で、ディスクドライブにハードリセットを発行し、応答を待つ。ステップ4418で、ディスクドライブが正しく応答したと判定された場合、リセットが完了し、ステップ4420でファームウェアリセットルーチンが戻る。そうでない場合、またはステップ4416でハードリセットが発行されなかったとき、ストレージシェルフ論理は、ステップ4422で、ディスクプロファイル表エントリのDPF_FEATURESフィールド内のDHPCビットフィールドが設定されているかどうか判定する。そうである場合、ステップ4424で、ストレージシェルフ論理は、ディスクドライブの電源オフ/電源オンを行い、ディスクドライブからの応答を待つ。ステップ4426で、ドライブが正しく応答したと判定された場合、リセットが完了しており、ステップ4428で、リセットルーチンが戻る。そうでない場合、またはステップ4424で電源オフ/電源オンが行われなかったときには、ディスクリセットに失敗している。その場合、ストレージシェルフ論理は、ステップ4430で
、リセット失敗のフラグを立て、必要な任意のリセット失敗処置に着手し、次いで、ステップ4432で、失敗状態を返す。ソフトリセット、ハードリセット、または電源オフ/電源オンサイクルを発行した後、それぞれ、ステップ4408、4416、4424で、ストレージシェルフ論理が待機する期間は、ステップ4404で見出だされるディスクプロファイル表エントリのDPF_RTOVフィールドおよびDPF_PWRCフィールドによって指定されることに留意されたい。
本発明は、特定の実施形態に関して説明されているが、本発明をこの実施形態だけに限定することは意図していない。当業者には、本発明の精神の範囲内の変更が明らかである。例えば、前述のように、ほとんど無数のディスクドライブ適合層の異なる実装形態が可能である。ディスクドライブ構成表およびディスクプロファイル表に格納される情報は、代替として、他のタイプの表または他のタイプのデータ構造に格納されていてもよい。加えて、ストレージシェルフが、非ATAディスクおよび非ディスク記憶装置とさえも対話し、それらを管理することを可能にする別の情報が格納されていてもよい。当然ながら、その場合、別の入出力ポートを含む別のハードウェアサポートが必要になる。システム管理者が、ディスクドライブ適合層で用いられるディスクプロファイル表およびその他のデータ構造を直接変更し、またはそこに情報を追加することを可能にするための、種々のユーザインターフェース表示インターフェースが実施されてもよい。ディスクドライブ適合層は、ストレージシェルフ・ルータの一部として実施されてもよく、ストレージシェルフの別個のコンポーネントとして実施されてもよく、別のストレージシェルフ管理コンポーネントの一部として実施されてもよい。
本発明は、特定の実施形態に関して説明されているが、本発明をこの実施形態だけに限定することは意図していない。当業者には、本発明の精神の範囲内の変更が明らかである。例えば、ほとんど無数の異なる統合チップ設計および実装形態を使って、前述のストレージシェルフ・ルータおよびパス制御ガードの機能を実施することができる。前述の実施形態は、ファイバチャネルファブリックと相互接続されているストレージシェルフ・ルータに関するものであるが、ストレージシェルフ・ルータは、代替として、ストレージシェルフをディスクアレイコントローラおよびその他の電子装置と相互接続するのに使用される他のタイプの高帯域幅通信と相互接続するように設計されていてもよい。さらに、代替の実装形態では、SATAディスクドライブ以外の他のタイプの安価なディスクドライブが、ストレージシェルフ・ルータへの相互接続のために同様にサポートされていてもよい。異種のデータパケットフォーマット、コマンドスイート、および様々な相互接続プロトコルのその他の態様の間の変換が、前述の実施形態において変換が実行される層以外の層で実行されてもよい。前述のストレージシェルフ・ルータでは、内部機能が、一連の別個の論理コンポーネントとして説明されている。これらの論理コンポーネントは、説明を明確にするために、比較的恣意的に考案されているが、内部論理の論理コンポーネントへの他のマッピングも可能である。各種の代替の内部リンク、プロセッサ、構成、およびその他の実装詳細が、高帯域幅通信媒体とディスクドライブまたはその他のデータ記憶装置の間の通信メッセージの経路指定を実現するように設計され得る。ストレージシェルフ・ルータを使って、ディスクドライブ以外の他のタイプの大容量記憶装置が、電子装置コントローラと相互接続されてもよい。前述のストレージシェルフ・ルータは、通常、8台のディスクドライブを処理し、フェイルオーバモードでは、16台のディスクドライブを処理することができるが、より多数の1次リンクおよび2次リンクを処理するために、ストレージシェルフ・ルータの代替形態が実施されてもよい。同様に、前述のストレージシェルフ・ルータは、高帯域幅通信媒体への2つの別々のポートを含むが、ストレージシェルフ内のストレージシェルフ・ルータの間でのより複雑な内部接続のために、さらに別のポー
トを含むことが望ましい。
以上の記述では、説明として、本発明の十分な理解を提供するために、特定の用語が使用されている。しかしながら、本発明を実施するのにそれらの具体的詳細は必要でないことが、当業者には明らかである。他の例では、基礎をなす発明からの不要な脱線を回避するために、周知の回路および装置が、ブロック図の形で示されている。よって、以上の本発明の具体的な実施形態の記述は、図示と説明のために提示されているものであり、網羅的であることも、本発明を開示通りの形だけに限定することも意図されておらず、前述の教示を考慮すれば多くの変更および変形が可能であることは自明である。各実施形態は、本発明の原理およびその実用化を最も適切に説明し、それによって、当業者が、本発明、および企図される特定の用途に適した様々な変更を伴う様々な実施形態を最適に利用することができるように、選択され、説明されたものである。本発明の範囲は、添付の特許請求の範囲およびその均等物によって定義されるものである。