JP4567125B2 - データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及びその装置 - Google Patents
データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及びその装置 Download PDFInfo
- Publication number
- JP4567125B2 JP4567125B2 JP25773299A JP25773299A JP4567125B2 JP 4567125 B2 JP4567125 B2 JP 4567125B2 JP 25773299 A JP25773299 A JP 25773299A JP 25773299 A JP25773299 A JP 25773299A JP 4567125 B2 JP4567125 B2 JP 4567125B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- ion
- pit
- data
- write
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明が属する技術分野】
本発明は、一般に計算システムに関し、特にデータ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及び装置に関する。これは、プロセッサやメモリキャビネットの境界に関係なく、運用上において、仮想ストレージ割り当ての単一の視点を提供する。
【0002】
【従来の技術】
テクノロジの進化は、無関係に見える一連の技術開発の成果であることが多い。こうした無関係の開発はそれぞれ意義深いものかもしれないが、これらが結合することで、大きなテクノロジの進化の基盤を形成することができる。歴史的に見て、大きく複雑なコンピュータシステムの構成要素では、不均一な技術的成長がなされてきた。これには例えば、(1)ディスクI/O性能に比較して急速なCPU性能の進歩、(2)進化する内部CPUアーキテクチャ、(3)インターコネクト・ファブリックが含まれる。
【0003】
過去10年間に渡り、ディスクI/O性能が向上する割合は、ノードのそれに比べ、かなり遅かった。CPU性能は1年に40%〜100%の割合で増加してきたが、ディスクのシークタイムが改善される割合は1年にわずか7%だった。
この傾向が予測通りに継続すれば、代表的なサーバノードが動かすことのできるディスクドライブの数は、ほとんどの大規模システムの量と価値の両方において、ディスクドライブが最も影響の大きな構成要素となるほどに上昇する。この現象はすでに既存の大規模システムの導入において現実のものになっている。
【0004】
不均一な性能の向上はCPUの中でも発生している。CPU性能を改善するために、CPUベンダはクロック速度の増加とアーキテクチャの変更を組み合わせて利用している。こうしたアーキテクチャ変更の多くは、並行処理コミュニティの影響による証明されたテクノロジである。こうした変更はアンバランスな性能を生み出し、期待されるほどの性能の向上につながらない可能性もある。単純な例としては、CPUが割込みを処理できる割合は、基本命令のそれと同じ速度で向上してはいない。したがって、割込み性能に依存するシステム機能(I/Oなど)は計算能力と一緒に向上してはいない。
【0005】
インターコネクト・ファブリックも不均一なテクノロジ成長の特徴を示している。これは長年に渡り、10〜20MB/秒ほどの性能レベルにあったが、過去1年間に、帯域幅において100MB/秒(以上)レベルの大きな飛躍も起こっている。
【0006】
この大きな性能の向上により、大規模並行処理システムの経済的な配置が可能になった。
【0007】
この不均一な性能はアプリケーション・アーキテクチャ及びシステム構成のオプションに悪い影響を与える。例えば、アプリケーション性能に関して言えば、CPU性能の増加といった、システムのいくつかの部分における性能改善を利用するために仕事量を増やす試みは、ディスク・サブシステムにおいて同等の性能改善がなされていないために阻害されることが多い。CPUが1秒間に行うデータ処理の数を2倍にできたとしても、ディスク・サブシステムはその増加分の一部しか扱うことができない。不均一なハードウェア性能の成長による全体的な影響は、アプリケーション性能が特定の仕事の特徴に依存する度合いが高まっていることにある。
【0008】
プラットフォーム・ハードウェア・テクノロジの不均一な成長は別の深刻な問題も生み出している。マルチノードシステムの構成に利用できるオプションの数の減少である。この良い例は、ストレージ・インターコネクト・テクノロジの変化によってTERADATE4ノード・クリークのソフトウェア・アーキテクチャが受けた影響である。TERADATEのクリークモデルでは、シングル・クリークのノード間での均一なストレージ接続を期待していた。この場合、すべてのノードから各ディスクドライブにアクセスすることが可能である。したがって、一つのノードが止まった場合、そのノード用のストレージは残りのノードが分割できる。ストレージ及びノードテクノロジの不均一な成長により、ストレージ共有環境において、一つのノードに接続できるディスクの数は制限されている。
この制限は、一つのI/Oチャンネルに接続できるドライブの数及び4ノード共有I/Oトポロジにおいて接続可能なバスの物理的な数によって生じている。ノード性能の改善が続くにつれ、私たちは性能向上を実現するために、一つのノードに接続するディスクスピンドルの数を増加させなくてはいけない。
【0009】
クラスタ及び大規模並行処理(MPP)の設計は、上述の問題の解決を試みたマルチノードシステム設計の例である。クラスタは限られた拡張性が欠点であり、MPPシステムには、十分にシンプルなアプリケーションモデルを提供するための追加ソフトウェアが必要である(市販のMPPシステムでは、このソフトウェアは通常DBMS)。MPPシステムでは、非常に高い可用性を提供するために、内部クラスタリングの形式(クリーク)も必要になる。どちらのソリューションにおいても、いまだにディスクドライブの多数化の可能性を管理する上で課題が生じている。こうしたディスクドライブは、電気機械装置であり、十分に予測可能なほどの故障率を有している。MPPシステムでは、通常ノード数が大きいため、ノードのインターコネクトの問題はより悪化することになる。また、どちらのアプローチにおいても、ディスク接続性の課題が生じており、これも非常に大きなデータベースを保存するのに必要なドライブの数の多さが原因となっている。
【0010】
上述の問題は、ストレージ装置と計算装置が、高性能の接続ファブリックで計算を行い、アーキテクチャ上の同等の存在として働くアーキテクチャでは改善される。このアーキテクチャでは、ストレージ及び計算リソースの管理における柔軟性を増加させることができる。しかし、この柔軟性により、いくつかの独特な問題が現れる。こうした問題の一つは、このアーキテクチャが提供する速度と柔軟性を維持しながら、安全なデータ・ストレージを確保することである。
【0011】
従来のアーキテクチャでは、書き込みキャッシュのテクニックにより効率的なデータ・ストレージが可能となる。CPUによって通常はディスクに書き込まれるデータは、まず書き込みキャッシュに書き込まれる。そして、このデータはCPUのアイドル・サイクル中にディスクに書き込まれる。書き込みキャッシュへの書き込みはディスクやRAMへの書き込みよりも速いため、このテクニックによって性能が向上する。
【0012】
ディスクのために書き込みキャッシュを使用するのには一定のリスクも伴う。
ディスクメディアに書き込まれる前に、データがディスク装置の揮発性メモリに長い時間とどまることになるからである。これに要する時間は、普通は長くとも数秒だが、データが不揮発性のストレージに書き込まれる前にクラッシュやシステム不良が起これば、そのデータは失われる可能性がある。
【0013】
書き込みキャッシュは高度な分散アーキテクチャでも使用することができる。
しかし、こうしたアーキテクチャに書き込みキャッシュ・プロトコルを導入した場合、計算ノードとストレージ・メディアの間で通信及び処理に関する大量のオーバーヘッドが必要になり、システムの速度と効率が減少してしまう。
【0014】
【発明が解決しようとする課題】
本発明の目的は、分散アーキテクチャにおける効率的なデータ書き込みキャッシュのプロトコルを提供して、上述の欠点を改善することである。
【0015】
【課題を解決するための手段】
第一の観点によれば、本発明は、データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法であって、第一のI/Oノードにおいて、書き込みデータを含む書き込み要求を計算ノードから受領するステップと、書き込みデータを第一のI/Oノードから第二のI/Oノードに転送するステップと、確認メッセージを第二のI/Oノードから計算ノードに送信するステップと、を含み、確認メッセージを第二のI/Oノードから計算ノードに送信する場合には、確認メッセージを第一のI/Oノードから計算ノードに送信しないことを特徴とするキャッシュデータの転送方法を提供するものである。
【0016】
データが第一のI/Oノードの不揮発性ストレージに書き込まれた後、第二のI/Oノードの揮発性メモリから書き込みデータを排除するために、第二のI/Oノードに排除要求又はコマンドが送られる。実施形態によっては、排除要求は第一のI/Oノードが第二の書き込み要求を受け取るまで送られず、この場合、排除要求は第二の書き込み要求の書き込みデータと同じ割込みの中で送られる。
このデータ処理システムは第一の及び第二のI/Oノードで構成され、各ノードは計算ノードからの書き込み要求を受領し、別のI/Oノードへ書き込みノードを転送するための手段を有している。また、各I/Oノードには、書き込みデータを送ったI/Oノードを介して確認メッセージを送信するのではなく、計算ノードに直接確認メッセージを送る手段も有している。この成果が、データ保存に要する割込み回数を減らしながら、書き込みキャッシュを導入してストレージ速度及びターンアラウンドを改善するI/Oプロトコルである。
【0017】
第二の観点によれば、本発明は、データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送装置であって、第一のI/Oノードにおいて、書き込みデータを含む書き込み要求を計算ノードから受領する手段と、書き込みデータを第一のI/Oノードから第二のI/Oノードに転送する手段と、確認メッセージを第二のI/Oノードから計算ノードに送信する手段と、を備え、確認メッセージを第二のI/Oノードから計算ノードに送信する場合には、確認メッセージを第一のI/Oノードから計算ノードに送信しないことを特徴とするキャッシュデータの転送装置を提供するものである。
【0018】
更に、別の観点によれば、本発明は、コンピュータによる読み出しが可能で、上記したキャッシュデータの転送を遂行するために、コンピュータにより実行可能な一つ以上の命令プログラムを確実に具現するプログラム・ストレージ・デバイスを提供するものである。
【0019】
【発明の実施の形態】
以下、本発明の一実施形態について、添付図面を利用して例示的に説明する。
【0020】
A. 概要
図1は、本発明の同列間データ処理アーキテクチャの概観である。このアーキテクチャ100は1つ以上の計算リソース102及び一つ以上のストレージリソース104で構成され、ストレージリソース104は1つ以上のインターコネクト・ファブリック106及び通信パス108を介して計算リソース102と通信上で対になっている。ファブリック106はすべてのノードとストレージに通信媒体を与えているため、計算リソース102とストレージ・リソース104間の均一な同列アクセスを可能にしている。
【0021】
図1のアーキテクチャでは、ストレージは最新のノード中心アーキテクチャ内にあるため、単一のノードセットに限定されてはおらず、各ノードがすべてのストレージと通信することができる。これは、物理システムトポロジがストレージとノードの通信を制限し、仕事量に応じて異なるトポロジが必要になることの多い、今日のマルチノード・システムとは対照的である。図1のアーキテクチャでは、広範囲のシステム・トポロジをサポートする単一の物理アーキテクチャを提供しているため、アプリケーション・ソフトウェアの通信パターンは、あらゆる時期においてシステムのトポロジを決定し、不均一なテクノロジの成長を受け入れることが可能である。ファブリック106が与える分離によって、各主要システム・コンポーネントのための詳細なスケーリングが可能である。
【0022】
図2は、本発明の同列アーキテクチャの詳細な説明を表している。計算リソースは、1つ以上の計算ノード200で定義され、それぞれがOS202の管理下にある1つ以上のアプリケーション204を実行する1つ以上のプロセッサ216を有している。テープドライブ、プリンタその他のネットワークといった周辺機器208は計算ノード200と運用上で対になっている。さらに、OS202、アプリケーション204その他の情報を構成する命令といった、計算ノード200固有の情報を保存するハードディスクなどのローカルストレージ装置210も、計算ノード200と運用上で対になっている。アプリケーション命令は、分散処理の形式で、1つ以上の計算ノード200で保存や実行が行われる。実施形態では、プロセッサ206はINTEL P6のような既製の市販多目的プロセッサと、付随するメモリやI/O要素で構成される。
【0023】
ストレージ・リソース104は、クリーク226で定義され、このそれぞれには第一のI/Oノード又はION212と第二のI/Oノード又はION214が含まれ、そのそれぞれがシステム・インターコネクト228によってインターコネクト・ファブリック105と運用上で対になっている。第一のION212及び第二のION214は運用上、1つ以上のストレージディスク224(「一群のディスク」又はJBODとして知られる)と対になっており、これにはIBODエンクロージャ222が付随している。
【0024】
図2は、中規模システムを表しており、ION212と計算ノードは代表的な2対1の割合になっている。本発明のクリーク226には、3つ以上のION214を導入したり、ストレージ・ノードの可用性が不足している場合は、単一のION212を導入することもできる。クリーク226内の数は、ION212内で共有されるハードウェアは無いため、純粋にソフトウェアの問題である。ペアになったION212は「ダイポール」と呼ばれることもある。
【0025】
本発明の構成要素には、計算ノード200、ION212、インターコネクト・ファブリック106を接続する管理コンポーネント又はシステム管理者230も含まれる。
【0026】
ION212とJBOD222の接続は、ここでは簡単な形式で示してある。
実際の接続では、図の構成にあるストレージ・ディスク224のそれぞれの階層(列、ここでは4列)にファイバ・チャンネル・ケーブルを使用する。実際には、各ION212が管理するストレージ・ディスクの数は、図の実施形態のように20ではなく、40〜80になると思われる。
【0027】
B. ION(ストレージ・ノード)
1. 内部アーキテクチャ
a) ハードウェア・アーキテクチャ
図3は、ION212の構成とJBOD222とのインターフェースに関する詳細な図である。各ION212は、JBODインターコネクト216を介してJBOD222アレイ内のストレージ・ディスク224との通信接続を行うI/O接続モジュール302、ION212の機能を実行し、本文書で説明するION物理ディスクドライバ500の導入を行うCPU及びメモリ304、ION212の動作をサポートする電力を供給する電源モジュール306で構成される。
【0028】
b) JBOD
図4は、JBODエンクロージャ222の詳細を示す図である。モニター又はコントロールの可能なJBODエンクロージャ222のすべての構成要素はエレメント402〜424と呼ばれる。任意のJBODエンクロージャのあらゆるエレメント402〜424は、受領診断結果コマンドを通じて、構成ページコードと共に返送される。ION212はこのエレメントの順序リストを利用して、エレメントに番号を付ける。図の第一のエレメント402はエレメント0、二番目のエレメント404はエレメント1等となる。こうしたエレメント番号は、本文書で説明する管理サービスレイヤ706がコンポーネントのアドレスに使用するLUN_Cを作成する際に使用される。
【0029】
【表1】
【0030】
エンクロージャ内では、エレメントの位置は、上の表Iにあるように、ラック、シャシ、エレメントの番号で特定される。ラック番号は、ダイポールに属するラックに割り当てられたダイポール内部の番号である。シャシ位置は、キャビネット管理デバイスが報告した高さを表す。エレメント番号は、SES構成ページが返送したエレメント・リストのインデックスである。これらのフィールドはLUN_Cフォーマットを形成する。
【0031】
c)I/Oインターフェース・ドライバ・アーキテクチャ
図5は、ION212の「SCSIドライバ」として働くION物理ディスクドライバ500を含めた、ION212のI/Oアーキテクチャを示す図である。ION物理ディスクドライバ500は、RAID(安価ディスクのリダンダント・アレイ)ソフトウェアドライバやシステム管理者230の管理ユーティリティからのI/O要求の取り込みを管理し、JBODインターコネクト216のデバイス側にあるデバイスで要求を実行する。
【0032】
本発明の物理ディスクドライバ500には3つの主要なコンポーネントが含まれる。これは、高レベルドライバ(HDL)502、デバイス固有高レベルドライバ504、低レベルドライバ506である。HLD502は、共通部分503とデバイス固有高レベル部分504、及び低レベルドライバ506で構成される。共通及びデバイス固有高レベルドライバ502及び504は、アダプタに依存せず、新しいアダプタ・タイプのための修正は必要ない。ファイバ・チャンネル・インターフェース(FCI)低レベルドライバ506は、ファイバ・チャンネル・アダプタをサポートしており、そのためアダプタ固有ではなくプロトコル固有である。
【0033】
FCI低レベルドライバ506はSCSI要求をFCPフレームにトランスレートし、LoginやProcess Loginといったファイバ・チャンネル共通サービスを扱う。FCI低レベルドライバ506が運用上で対になっているのは、ハードウェア・インターフェース・モジュール(HIM)インターフェース508で、これはファイバ・チャンネル・プロトコル操作とアダプタ固有ルーチンを分離する。上述のコンポーネントの詳しい説明は以下に記述する。
【0034】
(1) 高レベルドライバ
高レベルドライバ(HLD)502は、アクセスしているデバイスのタイプに関係なく、ION212に対するすべての要求の入口点である。デバイスがオープンになると、HLD502はそのデバイスにコマンドページを結びつける。こうしたベンダ固有のコマンドページは、特定のSCSI機能に対して、どのようにSCSIコマンド記述子ブロックを形成するかを指示する。コマンドページにより、ドライバは、特定のSCSI機能を異なる方法で扱うデバイスを、SCSI仕様による指定よりも容易にサポートすることができる。
【0035】
(a) 共通(非デバイス固有)部分
HLD502の共通部分には以下の入口点が含まれる。
【0036】
・ cs_init ドライバ構造を初期化し、リソースを割り当てる。
【0037】
・ cs_open デバイス使用の準備をする。
【0038】
・ cs_close I/Oを完了し、サービスからデバイスを除去する。
【0039】
・ cs_strategy デバイスの読み出し/書き込みエントリをブロックする(Buf_tインターフェース)。
【0040】
・ cs_intr ハードウェアの割込みを支援する。
【0041】
これらのルーチンはあらゆるデバイスのタイプで同じ機能を実行する。こうしたルーチンのほとんどでは、デバイスのタイプ(ディスク、テープ、WORM、CD−ROMなど)によって示されるスイッチテーブルを利用し、デバイス固有のルーチンを呼び出して、デバイス固有の要件を取り扱う。
【0042】
cs_open機能はデバイスが存在しており、そこでI/O作業を行う準備ができていることを保証する。現行のシステムアーキテクチャとは違い、この共通部分503は、オペレーティング・システム(OS)の初期化中に既知デバイスの表を作成しない。代わりに、ドライバ共通部分503は自己構成を行う。ドライバ共通部分503は、デバイスが最初にオープンになる間に、そのデバイスの状態を判断する。これにより、ドライバ共通部分503では、OS202の初期化段階の後でオンラインに存在するであろうデバイスを「確認」することが可能になる。
【0043】
最初にオープンになる間、SCSIデバイスは、ターゲットデバイスに対するSCSI問合わせコマンドの発行によって、コマンドページと結びつけられる。
デバイスが肯定の反応を示した場合、SCSI構成モジュール516内で、応答データ(ベンダID、製品ID、ファームウェア改訂レベルなどの情報を含む)が既知デバイスの表と比較される。一致が見つかった場合、デバイスは、その表エントリが指定するコマンドページと明確に結びつけられる。一致が見つからなかった場合、デバイスは、応答データのフォーマットに基づいて、一般的なCCS(共通コマンドセット)又はSCSI IIコマンドページに不明確に結びつけられる。ドライバ共通部分503には、リソースの割り当て、分散収集作業用のDMAリストの作成、SCSI作業の完了のために、低レベルドライバ506が使用するルーチンとコマンドページ機能が含まれる。
【0044】
すべてのFCI低レベルドライバ506ルーチンは、ドライバ共通部分503から呼び出される。ドライバ共通部分503は、ハードウェアをセットアップして作業を開始するハードウェア・インターフェース・モジュール(HIM)内の適切な低レベルドライバ(LLD)ルーチンを呼び出すことで、SCSI作業を開始する唯一のレイヤである。また、LLDルーチンは、SCSI構成モジュール516から構成中に割り当てられるドライバIDが示すスイッチ表によってもアクセスされる。
【0045】
(b) デバイス固有部分
共通部分502とデバイス固有ルーチン504のインターフェースは、共通部分とのインターフェースと同様で、csxx_intt、csxx_open、csxx_close、csxx_strategyのコマンドが含まれる。「xx」の指定箇所はストレージ・デバイスのタイプ(ディスクの「dk」やテープの「tp」)を示す。これらのルーチンはあらゆるデバイス固有要件を扱う。例えば、デバイスがディスクの場合、csdk_openはディスクの特定のエリアからパーティション・テーブルの情報を読み出し、csdk_strategyはパーティション・テーブルの情報を利用してブロックが境界外にあるかどうかを判断することになる。(パーティション・テーブルは、特定の物理ディスクごとに、論理ディスクから物理ディスクのブロックマッピングを定義する)
(c) 高レベルドライバのエラー/フェールオーバの処理
(i) エラーの処理
(a) 再試行
HLD502の最も一般的な復旧措置では、失敗したI/Oの再試行を利用する。特定のコマンド・タイプの再試行の回数は、コマンドページによって指定されている。例えば、読み出しや書き込みコマンドは非常に重要とみなされるため、これに関連するコマンドページでは再試行回数を3に設定する場合もある。問合わせコマンドはそれほど重要ではなく、その日の第一の作業中に継続的に再試行を行うとシステムがスローダウンする可能性があるため、再試行回数を0に設定する場合もある。
【0046】
要求が初めて発行されるとき、その再試行回数は0に設定される。要求が失敗し、復旧スキムが繰り返される度に、再試行の回数は増えていく。再試行の回数が、コマンドページで指定された最大再試行回数を上回ると、I/Oは失敗に終わり、要求者にメッセージが返信される。これがない場合は、要求の再発行が行われる。このルールの唯一の例外は、ユニット・アテンションに関するもので、通常はエラーではなくイベントの通知である。ユニット・アテンションをコマンドとして受け取り、その最大再試行回数が0又は1に設定されていた場合、高レベルドライバ502は、このI/Oに関する最大再試行回数を2に設定する。こうして、ユニット・アテンション状態の影響でI/Oの失敗が早くなるのを防止する。
【0047】
遅延再試行も、一定の時間、待ち行列上で再試行の置き換えが行われない点を除き、上述の再試行スキムと同様に扱われる。
【0048】
(b) 失敗したScsi_op
FCI低レベルドライバ506に対して発行されたScsi_opは、いくつかの状況により失敗することがある。表IIは、FCI低レベルドライバ506がHLD502に戻すことのできる失敗のタイプを示している。
【0049】
【表2】
【0050】
(c) リソース不足
リソース不足のエラーは、いくつかの希望するリソースが要求時に利用できなかった際に起こる。普通、こうしたリソースはシステムメモリ及びドライバ構造メモリである。
【0051】
システムメモリ不足の処理は、セマフォ・ブロックによって行われる。メモリリソースをブロックするスレッドは、すべての新しいI/Oの発行を妨げる。このスレッドは、I/Oが完了してメモリがフリーになるまでブロックを続ける。
【0052】
ドライバ構造リソースは、Scsi_op及びI/Oベクトル(IOV)リストプールに関連している。IOVリストは、ディスクが送受信するメモリの開始値及び長さの値のリストである。このメモリプールは、プールのサイズを指定する調整可能なパラメータを利用して、その日の最初に初期化される。Scsi_op又はIOVプールが空の場合、新しいI/Oによって、これらのプールが増加する。どちらかのプールを増加させるために、一度に1ページ(4096バイト)のメモリが割り当てられる。新しいページのすべてのScsi_op又はIOVプールがフリーになるまで、このページはフリーにならない。ION212が、Scsi_opのページの割り当てとフリー化を行っている場合やページの割り当てとフリー化を絶えず行っている場合は、関連するパラメータの調整が望ましい。
【0053】
リソース不足の処置はすべてイベントを通じて記録される。
【0054】
(ii) その日の第一の処理
その日の最初に、HLD502は必要な構造とプールを初期化し、アダプタ固有のドライバ及びハードウェアを初期化するために呼び出しを行う。その日の第一の処理は、cs_init()の呼び出しによって始まり、これは(1)Scsi_Opプールの割り当て、(2)IOVプールの割り当て、(3)ファイバ・チャンネル構造及びハードウェアの初期化を行うFCIhw_int()の呼び出し、(4)割込みサービスルーチンcs_intr()と該当する割込みベクトルとの結びつけを行う。
【0055】
(iii) フェールオーバ処理
ION212のダイポールの半分はどちらも共通のディスクデバイスセットに接続されている。ダイポール226のION212及び214は常にすべてのデバイスにアクセスできなくてはいけない。HLD502から見て、特別なフェールオーバの処理は存在しない。
【0056】
(2)コマンドページ
本発明のION212は、SCSIコマンドの実際の組立から、共通部分とデバイス固有部分を抽象化するコマンドページ法を使用する。コマンドページは機能のポインタのリストで、各機能はSCSIコマンド(SCSI_2_Test_UnitReadyなど)を意味する。上述のように、デバイスには、第一のオープン時又はそのデバイスのアクセス時に特定のコマンドページが結びつけられる。ベンダー独自や非対応の特殊なSCSIデバイスは、そのデバイスの固有コマンドページで参照される機能によって管理する。通常のシステムは、出荷時に、コマンドコントロールセット(CCS)、SCSI I及びSCSI IIページ、ベンダー独自のページが入っており、非対応SCSIデバイス又はベンダ独自のSCSIコマンドの統合を可能にしている。
【0057】
コマンドページ機能は、デバイス共通部分503、デバイス固有部分504、FCI低レベルドライバ506(Request Sense)から、仮想デバイス(VDEV)インターフェースと呼ばれるインターフェースを通じて実施される。このレベルでは、ソフトウェアは、デバイスがどのSCSI言語を使用しているかではなく、デバイスが意図した機能を実施しているかどうかのみを問題にする。
【0058】
各コマンドページ機能はSCSIコマンドを組み立て、必要があればダイレクト・メモリ・アクセス(DMA)データの転送にメモリを割り当てる。次にこの機能はドライバ共通部分503にコントロールを戻す。ドライバ共通部分503は、SCSI作業を待ち行列に加え(必要であればここでソートする)、FCI低レベルドライバ506の開始ルーチンを呼び出して、このコマンドを実施する。コマンドが実行された後、「コール・オン・インタラプト」(COI)ルーチンがコマンドページ機能に存在していたら、ドライバのドライバ共通部分503が完了したコマンドのデータ/情報を検査する前にCOIが呼び出される。返信データ/情報を操作することで、COIは一致しないSCSIデータ/情報を標準のSCSIデータ/情報に変換できる。例えば、デバイスの問合わせデータに、バイト8ではなくバイト12で始まるベンダIDが含まれる場合、問い合わせのコマンドページ機能には、返信の問合わせデータのベンダIDをバイト8に変えるCOIが含まれる。ドライバ共通部分503は常にバイト8で始まるベンダID情報を抽出するため、一致しないデバイスについて知る必要はなくなる。
【0059】
(3) IBODとSCSI構成モジュール
RAIDコントローラの重要な機能はデータを損失から守ることである。この機能を実行するために、RAIDソフトウェアはディスクデバイスがどこにあり、そのケーブルがどのように接続されているかを、物理的に知らなくてはいけない。したがって、RAIDコントローラのテクニックを実施する上での重要な要件は、ストレージ・デバイスの構成をコントロールする能力である。
【0060】
JBOD及びSCSI構成モジュール516のJBOD部分にはION212のスタティックIBOD構成の定義のタスクがある。JBOD及びSCSI構成モジュール516が記述する構成情報を表IIIに示す。
【0061】
【表3】
【0062】
アダプタ、JBODエンクロージャ222、ストレージディスク224の物理的な位置情報に加え、FCI低レベルドライバ506及びドライバデバイス固有部分504の入口点といったその他の構成情報やコマンドページの定義も記述しなくてはいけない。この情報の提供にはspace.cファイルが使用され、ION212はION物理ディスクドライバ500のコンパイル時に構成情報を組み立てる。サポートするION212の構成が変化した場合は、新しいバージョンのION物理ディスクドライバ500をコンパイルしなくてはいけない。
【0063】
(4) ファイバ・チャンネル・インターフェース(FCI)低レベルドライバ
FCI低レベルドライバ506は高レベルドライバ502のためにSCSIインターフェースを管理する。ドライバ共通部分503とFCI低レベルドライバ506のインターフェースには、以下のルーチンが含まれる。なお「xx」の指定箇所には、FCI低レベルドライバ506がコントロールするハードウェア固有の識別子が入る(FCIhw_initなど)。
【0064】
・ xxhw_init ハードウェアを初期化する。
【0065】
・ xxhw_open ホストアダプタの現在の状況を判断する。
【0066】
・ xxhw_config ホストアダプタの構成情報をセットアップする(SCSI IDなど)。
【0067】
・ xxhw_start 可能ならば、SCSI作業を開始する。
【0068】
・ xxhw_intr すべてのSCSI割込みを処理する。
【0069】
低レベルドライバは、デバイスの仕様を認識したり問題にしたりせず、単純に上のレベルからのSCSIコマンドの経路となっている点では、純粋なSCSIドライバである。このレイヤには割込みサービスルーチン、ハードウェアの初期化、マッピング、アドレス・トランスレート、エラー復旧ルーチンがある。加えて、同じシステムに複数タイプの低レベルドライバが共存できる。こうした、ドライバのハードウェア管理レイヤとその他の分割により、同じ高レベルドライバを異なるマシンで実行することが可能になる。
【0070】
FCIモジュールの基本機能は(1)SCSI OpをFCI作業オブジェクト構造(I/Oブロック(IOB))にトランスレートするためのSCSI高レベルドライバ(SHLD)とのインターフェース、(2)異なるHIM508を通じた新しいファイバ・チャンネル・アダプタのサポートを容易にする共通インターフェースの提供、(3)いずれかのFC−4プロトコルレイヤ(図のファイバ・チャンネル・プロトコル(FCP))が使用するFC−3共通サービスの提供、(4)HIM508又はハードウェアが応答しない場合にHIMに送る非同期コマンド(FCPコマンド、FC−3コマンド、LIPコマンド)を保護するためのタイマーサービスの提供、(5)(a)I/O要求ブロック(IOB)、(b)ベクトル表、(c)HIM508リソース(ホストアダプタメモリ、DMAチャンネル、I/Oポート、スクラッチメモリなど)を含むファイバ・チャンネル・ドライバ全体(FCI及びHIM)のリソース管理、(6)ファイバ・チャンネルの(ファイバ・チャンネル・ファブリックに対する)アービトレイト・ループ使用の最適化
FCI低レベルドライバ506の重要なデータ構造のリストを下の表IVに示す。
【0071】
【表4】
【0072】
(a) エラー処理
FCI低レベルドライバ506が扱うエラーは、ファイバチャンネルやFCI自身に固有のエラーとなる傾向がある。
【0073】
(i) 複数段階のエラー処理
FCI低レベルドライバ506は特定のエラーを複数ステージ処理で扱う。これにより、エラーのタイプによってエラー処理テクニックを最適化することができる。例えば、破壊的でない手順を使用して効果がない場合は、さらに抜本的なエラー処理テクニックを行ったりする。
【0074】
(ii) 失敗したIOB
すべてのI/O要求は、I/O要求ブロックを通じて、HIM508へ送られる。以下は、HIM508が返信する可能性のあるエラーである。
【0075】
【表5】
【0076】
(iii) リソース不足
FCI低レベルドライバ506はIOBのリソースプールとベクトル表を管理する。こうしたプールのサイズはION212の構成に同調するため、こうしたリソースが足りなくなる可能性はないはずであるため、簡単な復旧手順が実施される。
【0077】
IOBやベクトル表の要求が行われ、この要求を満たすのに十分なリソースがない場合は、I/Oを待ち行列に戻し、I/Oを再試行するためのタイマーを設定する。リソース不足の発生は記録される。
【0078】
(b)その日の第一の処理
その日の最初に、高レベルドライは502は、サポートするそれぞれの低レベルドライバ(FCI低レベルドライバ506を含む)に対して呼び出しを行う。
FCIの低レベルドライバ506のその日の第一の処理は、FCIhw_int()ルーチンの呼び出しで始まり、これは以下の作業を行う。
まず、指定されたPCIバスとデバイスのために、HIM_FindController()関数が呼び出される。これはFindController()のバージョンを呼び出す。JBOD及びSCSI構成モジュール516は、探索のためにPCIバスとデバイスを指定する。次に、アダプタ(ADAPTECから¥利用できるものなど)が見つかった場合は、HCBを割り当て、アダプタ用に初期化する。そして、スクラッチメモリ、メモリマップI/O、DMAチャンネルといったアダプタ固有リソースを得るために、HIM_GetConfiguratION()を呼び出す。次に、リソースを割り当てて初期化し、ADAPTEC HIMとハードウェアを初期化するために、HIM_Initialize()を呼び出す。最後に、IOBとベクトル表を割り当てて初期化する。
【0079】
(c) フェールオーバ処理
ION212のダイポールの半分はどちらも共通のディスクデバイスセットに接続されている。両方のION212は常にすべてのデバイスにアクセスできなくてはいけない。FCI低レベルドライバ506から見て、特別なフェールオーバの処理は存在しない。
【0080】
(5) ハードウェア・インターフェース・モジュール(HIM)
ハードウェア・インターフェース・モジュール(HIM)508はADAPTECのSlimHIM509とインターフェースするように設計されている。HIM508モジュールは、FCI低レベルドライバ506からの要求を、SlimHIM509が理解してハードウェアに発行できる要求にトランスレートすることに主な責任を有している。これには、I/Oブロック(IOB)要求の取り込みと、SlimHIM509が理解可能な、対応する転送コントロールブロック(TCB)要求へのトランスレートが含まれる。
【0081】
HIM508の基本機能に含まれるのは(1)検索、構成、初期化、アダプタへのI/Oの送信を行うハードウェア固有関数に対する、低レベル・アプリケーション・プログラム・インターフェース(API)の定義、(2)I/OブロックをSlimHIM/ハードウェアが理解できるTCB要求(FCプリミティブTCB、FC拡張リンクサービス(ELS)TCB、SCSI−FCP作業TCBなど)にトランスレートするためのFCI低レベルドライバ506とのインターフェース、(3)SlimHIMに対して発行されたコマンド(TCB)の配信と完了の追跡、(4)SlimHIM509からの割り込みやイベント情報の解釈やFCI低レベルドライバ506に関する適切な割り込み処理やエラー復旧の実行である。TCBのデータ構造を下の表VIに示す。
【0082】
【表6】
【0083】
(a) その日の第一の処理
HIM508は、その日の第一の処理中に使用する3つの入口点を定義する。
第一の入口点はHIM_FindAdapterで、これはFCIhw_int()によって呼び出され、PCI BIOSルーチンを使用して、与えられたPCIバス及びデバイス上にアダプタがあるかどうかを判断する。アダプタの存在の判断には、アダプタのPCIベンダ及び製品IDを使用する。
【0084】
二番目の入口点はHIM_GetConfiguratIONで、これはアダプタが存在する場合にFCIhw_init()によって呼び出され、提供されたHCBにリソース要件を加える。ADAPTECの場合、このリソースにはIRQ、スクラッチ、TCBメモリが含まれる。この情報はSlimHIM509への呼び出しを行うことで見つかる。
【0085】
三番目の入口点はHIM_Initializeで、これはリソースの割り当てと初期化が終わった後でFCihw_int()によって呼び出され、スクラッチメモリ、TCB、ハードウェアの初期化を行うためにSlimHIMへの呼び出しを行うTCBメモリプールを初期化する。
【0086】
(b) フェールオーバ処理
ION212のダイポールの半分はどちらも共通のディスクデバイスセットに接続されている。ION212、214の両方は常にすべてのデバイスにアクセスできなくてはいけない。HIM509から見て、特別なフェールオーバの処理は存在しない。
【0087】
(6) AIC−1160 SlimHIM
SlimHIM509モジュールの最終的な目的は、アダプタ(図ではADAPTEC AIC−1160)のハードウェア抽象を提供することである。SlimHIM509の主な役割には、AIC−1160アダプタへのファイバ・チャンネル要求の転送、割り込みのサービス、SlimHIM509インターフェースを通じてのHIMモジュールへのステータス報告の返信がある。
【0088】
さらに、SlimHIM509は、AIC−1160ハードウェアの管理と初期化、ファームウェアのロード、ランタイム作業の実行を行い、AIC−1160のエラーの際にはAIC−1160ハードウェアをコントロールする。
【0089】
2. 外部インターフェースとプロトコル
ION物理ディスクドライバ・サブシステム500のすべての要求は、共通高レベルドライバ502を通じて行われる。
【0090】
a) 初期化(cs_init)
サブシステムへの単一呼び出しにより、デバイスがI/Oの準備をするのに必要なすべての初期化が行われる。サブシステムの初期化中には、すべてのドライバ構造とデバイス又はアダプタ・ハードウェアの割り当てと初期化が行われる。
【0091】
b) オープン/クローズ(cs_open/cs_close)
オープン/クローズ・インターフェース510は、デバイスにアクセスするのに必要な構造の初期化と分類を行う。インターフェース510は一般的なオープン/クローズ・ルーチンと異なり、すべての「オープン」と「クローズ」が明確に階層化されている。したがって、I/O物理インターフェースドライバ500が受領したすべての「オープン」には、受領した関連する「クローズ」が伴わなくてはならず、デバイス関連構造はすべての「オープン」が「クローズ」するまではフリーにならない。オープン/クローズ・インターフェース510は、要求の完了を示す「オープン」又は「クローズ」の返信については同期式である。
【0092】
c) Buf_t(cs_strategy)
Buf_tインターフェース512はデバイスに対する論理ブロックの読み出し及び書き込み要求の発行を可能にする。要求者は、そのI/Oを記述したBuf_t構造を伝える。デバイスID、論理ブロックアドレス、データアドレス、I/Oタイプ(読み出し/書き込み)、コールバック・ルーチンといった属性はBuf_tによって記述される。要求が完了すると、要求者がコールバックで指定した関数が呼び出される。Buf_tンターフェース512は非同期インターフェースである。要求者への関数の返信は要求の完了を示すものではない。関数が戻された時には、I/Oがデバイスで実行中の可能性もあり、そうではない可能性もある。その要求は待ち行列上で実行されるのを待っている可能性もある。
その要求は、コールバック関数が呼び出されるまでは完了しない。
【0093】
d) SCSILib
SCSILib514は、通常の読み出し及び書き込みを除くSCSIコマンド記述子ブロック(CDB)のデバイスへの送信を可能にするインターフェースを提供する。このインターフェースを通じて、ディスクのスピンやスピンダウンのためにユニットの開始及び停止といった要求が利用されたり、エンクロージャ・デバイスのモニタや管理のために診断の送信又は受領といった要求が利用される。すべてのSCSILibルーチンは同期式である。呼び出した関数の返信が要求の完了を意味する。
【0094】
e) 割り込み(cs_intr)
ION物理ディスクドライバ500は、すべてのSCSI及びファイバ・チャンネル・アダプタの割り込みの中心的なディスパッチャである。実施形態では、フロントエンド/バックエンド割り込みスキムが利用されている。この場合、割り込みがサービスされると、フロントエンド割り込みサービスルーチンが呼び出される。フロントエンドは割り込みスタックから実行され、割り込みのソースのクリア、アダプタによる更なる割り込み生成の無効化、バックエンド割り込みサービスルーチンのスケジュールに責任を有する。バックエンドは、(アダプタの割り込み無効化とバックエンド・タスク開始の間に発生した他の割り込みと共に)実際に割り込みを扱う優先度の高いタスクとして実行される。
【0095】
3. IONの機能
ION212は主に5つの機能を果たす。この機能は以下の通りである。
【0096】
ストレージのネーミングと射影:ストレージディスク224に保存されるストレージ・リソース・オブジェクトのイメージを計算ノード200に射影して、一貫したストレージのネーミングを行うために、計算ノード200と協力する。
【0097】
ディスク管理:ION212と運用上で対になっているストレージディスクドライブ224にデータ分配及びデータ冗長テクニックを実施する。
【0098】
ストレージ管理:ストレージのセットアップ、計算ノード200からのI/O要求の処理を含むデータ移動、性能の計測、イベント分配を取り扱う。
【0099】
キャッシュ管理:アプリケーション・ヒント・プレフェッチのようなキャッシュ充足作業を含むキャッシュデータの読み出しと書き込み。
【0100】
インターコネクト管理:性能の最適化のための計算ノード200のデータフローの制御及び要求の経路選択の制御と、それに伴うダイポール226の2つのION212の間のストレージ分配の制御。
【0101】
a)ストレージのネーミングと射影
ION212はストレージディスク224に保存されるストレージ・リソース・オブジェクトを計算ノード200に射影する。この機能の重要な部分は、ION212が管理する各ストレージリソース(仮想ファブリックディスクを含む)に、大域的にユニークな名前、ファブリックでユニークなID、ボリュームセット識別子(VSI)のいずれかの作成と割り当てである。
【0102】
図6は、VSI602と関連データの構造と内容を示す図である。VSI602がユニークで競合がないことが重要であるため、各ION212は、そのION212がローカルで管理するストレージリソースのために、大域的にユニークな名前を作成し割り当てることに責任を有する。また、ストレージ・リソース・オブジェクトを保存しているストレージリソースを管理するION212のみが、そのストレージリソースにVSI602を割り当てることができる。VSI602の作成と割り当てができるのは常駐するストレージリソースを管理するIONのみだが、他のION212もその後のストレージリソースの保存と検索の管理をすることがある。これは、IONが割り当てたVSI602が、他のIONによって管理されるストレージリソースに移動したとしても、特定のデータオブジェクトのVSI602を変更する必要がないためである。
【0103】
VSI602は、ION識別子604とシーケンス番号506の2つの部分を含む64ビットの数字として導入される。ION識別子は各ION212に割り当てられた、大域的にユニークなID番号である。大域的にユニークなION識別子604を入手するテクニックの1つでは、実時間時計チップにストアされることの多い電子的に読み出し可能なマザーボードのシリアル番号を使う。唯一のマザーボードに割り当てられるため、シリアル番号はユニークである。ION識別子604は大域的にユニークな番号であるため、各ION212は、ローカルでのみユニークなシーケンス番号606を割り当てることで、大域的にユニークなVSI602を作成できる。
【0104】
VSI602をION212上のストレージリソースに結びつけた後、ION212はストレージリソース104へのアクセスを可能にするために、同報メッセージを通じて、ファブリックのすべてのノードにVSI602をエキスポートする。このプロセスは、本文書のION名のエキスポートのセクションで詳しく論じる。
【0105】
エキスポートしたVSI602を使用して、計算ノード200のソフトウェアは、ローカル接続された他のすべてのストレージデバイスからは区別できないという点で意味的に透過なストレージリソースのために、ローカル入口点を作成する。例えば、計算ノードのOS202がUNIXであれば、周辺機器108やディスク210といったローカル接続デバイスと同様に、ブロックデバイスと未使用デバイスの入口がデバイスディレクトリに作成される。その他のOS202でも、同様の意味的な同値性が守られる。異なるOS202を実行する計算ノード200間でも、この複合コンピューティング環境での最善のサポートを行うために、ルート名の一貫性が維持される。計算ノード200のローカル入口点は、エキスポートしたストレージリソース104の現在の可用性を追跡するために、動的に更新される。計算ノード200で稼働するOS依存のアルゴリズムはVSI602を使用して、インポートしたストレージリソースのデバイス入口点名を作成する。この方法により、共通のOSを共有するノード間での名前の一貫性が保証される。これによりシステムは、各計算ノード200上の大域的な名前の付いたストレージリソースのローカル入口点を(静的ではなく)動的に作成することで、複合コンピューティング環境をサポートするルート名の一貫性を維持できる。
【0106】
上述のように、ストレージリソース104のVSI602作成の詳細は、ストレージリソース104をエキスポートしているION212が直接コントロールしている。計算ノード200内でのOS104の相違の可能性を考慮して、各VSI602には1つ又は複数の記述ヘッダが結びついており、ION212上のVSI602と共にストアされている。各VSI602記述子608にはオペレーティングシステム(OS)従属データセクション610が含まれており、これは特定のVSI602のために計算ノード200上でデバイス入口点の作成を一貫して(名前と運用上の意味を計算ノード200全体で同じにして)行う上で必要になる、十分なOS202従属データをストアするためである。このOS従属データ610に含まれるのは、例えば、データ記述ローカルアクセス権612や所有者情報614である。VSI602がION212によって確立され、計算ノード200によってインポートされた後で、VSI602に結びつくストレージリソース104の入口点が作成される前に、ION212は該当するOS固有データ610を計算ノード200に送る。VSI602の複数の記述ヘッダは、異なるOS(各OSは独自の記述ヘッダを持つ)を使用する複合計算ノード200の同時サポートと、異なる計算ノード200グループ内の分離アクセス権のサポートを可能にする。同じ記述ヘッダを共有する計算ノード200は、デバイス入口点の作成を共通する一貫した方法で行う。そのため、共通のアクセス権を共有するすべての計算ノード200において、名前と運用上の意味の一貫性が守られる。
【0107】
VSI記述子608にはエイリアス・フィールド616が含まれ、これは人間が読めるVSI602名を計算ノードに表示するのに使用される。例えば、VSI1984のエイリアスが「soma」の場合、計算ノード200は1984と「soma」の両方のディレクトリ・エントリを持つことになる。VSI記述子608はVSI602と一緒にION上でストアされるため、同じエイリアス及びローカルアクセス権が、VSI602をインポートする各計算ノード上に現れる。
【0108】
上述のように、本発明では分散割り当てスキムに適したネーミング方法を使用する。この方法では、大域的なユニーク性を保証するアルゴリズムに従って、名前をローカルで生成する。これのバリエーションとして、中央ネームサーバが各システムに存在する、ローカルな中央化の方法があるが、純粋な分散式の方法に比べて可用性と堅牢性の要件が大きくなる。上述の方法により、本発明では、大域的なユニーク性を保証するローカル実行のアルゴリズムを作成できる。
【0109】
大域的に一貫したストレージシステムの作成には、単に計算ノード200での名前の一貫性を維持する以上のサポートが必要である。名前と密接な関係にあるのはセキュリティの問題であり、本発明では二つの形をとる。一つはION212と計算ノード200間のインターフェースのセキュリティであり、二つ目は計算ノード200内からのストレージのセキュリティである。
【0110】
b)ストレージの認証と許可
VSI602リソースは2種類のメカニズム、認証、許可によって保護される。ION212が計算ノード200を認証した場合、VSI名は計算ノード200にエキスポートされる。エキスポートしたVSI602は計算ノード200上でデバイス名となる。計算ノード上のアプリケーション・スレッドは、このデバイス名で作業を試みることができる。デバイス入口点のアクセス権と計算ノード200のOS意味は、アプリケーション・スレッドが特定の許可の実施を許可されているかどうかを判断する。
【0111】
この許可の方法は、インターコネクト・ファブリック106がアクセスできる位置にあるストレージリソース104の、計算ノード200による許可を拡大する。しかし、本発明は、計算ノード200が本発明のストレージリソース104を直接管理しない点において、他のコンピュータアーキテクチャとは異なっている。この違いにより、ローカルの許可データを単純にファイルシステムと結びつけるのは実用的ではなくなる。代わりに、本発明では、計算ノード200の許可方針データをION212のVSI602と結びつけ、計算ノード200とION212が相互信頼のレベルを共有する2段階のアプローチを使用する。ION212は各計算ノード200による特定のVSI602へのアクセスを許可するが、VSIが指定するデータへの特定のアプリケーション・スレッドの許可の詳細化は計算ノード200の責任である。計算ノード200は、ION212にストアされた許可メタデータに含まれる方針を使用して、ストレージ104に許可方針を強制する。したがって、計算ノード200はION212によるメタデータの維持を信頼する必要があり、ION212に計算ノード200による許可の強制を信頼させる必要がある。この方法の利点の一つは、ION212がメタデータの解釈方法に関する知識を持つ必要がないことである。そのため、ION212は、計算ノード200が使用する異なるOS202がインポーズする異なる許可の意味によってインポーズされる特定の許可の意味の強制から分離される。
【0112】
VSI602に関連するすべてのデータ(アクセス権を含む)はION212にストアされるが、アクセス権データの内容を管理する責務は計算ノード200にある。さらに詳しく言えば、ION212がエキスポートしているVSI602のリストを計算ノード200に送る時、各VSI602に結びつくのは、計算ノード200がローカルでの許可を強制するのに必要なすべてのOS指定データである。例えば、UNIXを動かす計算ノード200は名前、グループ名、ユーザID、つまりファイルシステムにデバイス・エントリ・ノードを作成するのに十分なデータを送信される。計算ノードOS202に固有の(又は計算ノード200に固有の)VSI602の代替名は、各VSI602に含まれる。ストレージデバイスのアクセス権を変更するローカルOS固有コマンドは、計算ノード200のソフトウェアが捕獲し、ION212へ送るメッセージに変換される。このメッセージは、そのOSバージョン固有のVSIアクセス権をアップデートする。この変更が完了すると、ION212は、システムのOSを使用するすべての計算ノード200に、アップデートを送信する。
【0113】
計算ノード(CN)200は、オンラインになると、「自分はここにいる」というメッセージを各IONに送信する。このメッセージは計算ノード200を識別するデジタル署名を含んでいる。ION212が計算ノード200を認識すると(ION212が計算ノード200を承認すると)、ION212は計算ノード200がアクセス権を持っているすべてのVSI名をエキスポートする。計算ノード200は、このVSI602名のリストを使用して、システムストレージのローカルアクセス入口点を組み立てる。計算ノード200内のアプリケーション204が最初にローカル端点を参照した時、計算ノード200はインターコネクト・ファブリック106を通じて、そのVSI602のアクセス権記述データをION212に要求する。この要求メッセージには、要求している計算ノード200のデジタル署名が含まれる。ION212はメッセージを受領し、デジタル署名を使用して返信すべき該当VSIアクセス権のセットを見つけて、インターコネクト・ファブリック106を介して、要求した計算ノード200にそのデータを送信する。しかし、ION212は計算ノード200に送信するアクセス権を解釈せず、データの送信のみを行う。計算ノード200のソフトウェアは、このデータを利用して、該当するローカルアクセス権のセットを、この対象ストレージ・オブジェクトのローカル入口点に結びつける。
【0114】
計算ノード200のセットは、同じデジタル署名の使用、又はION212に複数の異なる署名を同じアクセス権のセットに結びつけさせることで、同じアクセス権のセットを共有することができる。本発明では、認証を使用して、計算ノード200の確認と、ローカル入口点の作成にどのローカル許可データを使用するかの指定の両方を行う。計算ノードが許可データを引き出すのは、アプリケーションが最初にVSI602を参照した時のみである。この「必要時に引き出す」モデルは、非常に大きなシステムの大量のアクセス権メタデータの移動によるスタートアップ・コストを回避することになる。
【0115】
計算ノード200が認証に失敗した場合、ION212はVSI602名を含まないメッセージを返信し、認証失敗フラグが設定される。計算ノード200はION212からのVSIデバイス名なしでそのまま継続することが可能で、システム管理者の希望に応じて失敗した認証の報告をすることができる。もちろん、認証が成功した場合でも、計算ノードへのVSIデバイス名の送信は行われない。
【0116】
c) 立ち上げ時の競合解消
立ち上げ時、ION212はインターコネクト・ファブリック106にVSI602をエキスポートしようとする。この場合、新しいION212によるあらゆる中断からシステムのデータ完全性を守らなくてはいけない。これを実現するために、新しいION212は、ストレージのエキスポートが可能になる前にチェックされる。これは次のように行われる。まず、ION212はローカルストレージを検査して、エキスポート可能なVSI602のリストを作成する。VSI602メタデータにはVSI生成又は変異番号が含まれる。VSI変異番号は、そのVSI602の状態に大きな変化があったときに増加する(VSIのネットワークへのエキスポートが成功した時など)。VSIの競合検知に関与するすべてのノードは、計算ノード200及びION212を含め、メモリにエキスポートされたVSIの履歴と変異番号を保持する。インターコネクト・ファブリック上のすべてのノードは、エキスポートされたVSI602のVSI競合を常にモニターする必要がある。最初(ストレージ拡張した最初に作成された時)、VSI変異番号はゼロに設定されている。エキスポートされたVSI602に前回エキスポートされた時よりも小さな変異番号がついている場合、たとえ実VSI602に結びつくION212がサービス外だったとしも、そのVSIは詐称VSIだと推定できる点では、変異番号は競合解消の基準を提供する。実VSI602の変異番号より大きな変異番号を持つION212に付随する詐称VSI602は、I/Oがすでに実VSI上で実施されていない限り、実VSI512とみなされる。新たにインターコネクト・ファブリックに導入されたION212は、変異番号0から開始する必要がある。
【0117】
システムへの加入希望を通知した後、ION212はVSI602のリストと関連する変異番号を送信する。他のすべてのION212と計算ノード200はこのリストを入手し、ION212がVSI602のリストをエキスポートする妥当性をチェックする。
【0118】
現在同じVSI602をエキスポートしている他のIONは有効であると仮定され、新しいIONに対して、競合している特定のVSIのエキスポートを認めないメッセージを送付する。新しいION512が現在システムで使用されているものよりも大きな生成又は変異番号を持っている場合は(VSIは大域的にユニークであるため、通常の運用では発生しないイベント)、必要な行動を行うシステム管理者に対してこれを通知及び報告する。競合がない場合、各ION212と計算ノードは続行投票により反応する。すべてのION212と計算ノード200からの反応を受領すると、競合していない新しいION212のすべてのVSI602では生成番号が増加し、システムへのエキスポートができるようになる。
【0119】
計算ノード200がVSI602のアプリケーション基準とアクセスを持つと、その計算ノード200は生成番号をローカルで追跡する。ION212がVSI602を公表した時(エキスポートを試みた時)は常に、計算ノード200はVSI602が公表した生成番号をVSI602に関してローカルでストアしている生成番号と比較する。生成番号が符号した場合、計算ノード200は続行の投票を行う。生成番号が競合する場合(古いバージョンのVSIがオンラインになった場合など)、計算ノード200は拒否のメッセージを送る。新しいIONがVSIに関して公表した生成番号より古い生成番号を持っている計算ノード200は続行を投票し、そのVSI602のローカルバージョンの生成番号を更新する。計算ノード200はリブートまでの間に生成番号を保存しない。これは基本設計において、インターコネクト・ファブリック106全体のシステムが安定し、計算ノード200及びION212を含むすべての新規参入者を絶えずチェックするからである。
【0120】
第一の電源投入時、VSI602のネームスペースの安定性が問題になる状況が起こり得る。この問題には、先にION212の電源を入れ、名前の競合を継続的に解消できるようにしてから、計算ノード200の加入を認める形で対処する。これにより、期限切れバージョンのVSI602(ディスクドライブの古いデータその他の変質条件による)を生成番号によって解消できる。
計算ノード200がそのVSI602を使用していない限り、より大きな生成番号を持つ新規参入者は、特定のVSI602を現在エキスポートしているものを無効化できる。
【0121】
(1) ネーム・サービス
(a) IONの名前のエキスポート
ION212は、独占的に所有するVSI602の作業セットをエキスポートして、関連するストレージへのアクセスを可能にする。ION212がエキスポートするVSIの作業セットは、バディION(ダイポール216内の他のION212、214で表される)とのVSI所有権の交渉を通じて動的に決定され、インターコネクト・ファブリック106で通信するすべてのノード内で大域的にユニークになる。このセットは普通は、ION212に割り当てられたVSI602のデフォルト又はプライマリセットである。ダイナミック・ロード・バランシングのためのVSIマイグレーションや、バディION214の異常及びI/Oパスの異常を含む例外的状況によって、エキスポートされるVSI602セットがプライマリセット以外に変更される場合もある。
【0122】
VSIの作業セットは、作業セットが変更になると常に、同報メッセージを利用してION212によってエキスポートされ、最新のVSI構成を計算ノード200に提供する。計算ノード200も、ION212に対して、VSI602の作業セットについて質問を行うことがある。エキスポートしたVSI602のためにION212がオンラインに加入又は再加入すると、計算ノード200によってVSI602へのI/Oアクセスが開始される。上述のように、エキスポートしたVSI602に何らかの競合があれば、ION212はオンラインへの加入を許可されない。ストレージの集合に付随するVSI602はすべてユニークであるはずだが、ストレージの複数の集合が同じVSIを持つ競合状態が発生する可能性もある(例えば、VSIがION212ハードウェアに付随するユニークなIDとION212が管理するシーケンス番号から形成され、そのION212ハードウェアが物理的に移動された場合)。
【0123】
作業セットをエキスポートすると、エキスポートしたION212は、オンライン状態に入って、エキスポートされたVSI602へのI/Oアクセスを可能にする前に、競合チェックタイマ(2秒)を設定する。競合チェックタイマは、インポートするものが競合チェック処理を行い、エキスポートしたものに競合を知らせるのに十分な時間を与えようとするが、タイマーを非常に大きな値に設定しない限り、これは保証できない。そのため、ION212はすべてのノード(計算ノード及びION212)から、オンライン加入を正式に認める明確な承認が必要である。すべてのノードは、オンライン同報メッセージに同時に反応し、結果はまとめられ、返送される。まとめた結果がACKであればION212は正式にオンラインに加入する。ION212がオンライン加入を認められなかった場合は、新しくエキスポートされたVSI602のセットにアクセスはできない。NAKを送ったノードは、その後VSI競合メッセージをエキスポートしたものに送り、競合を解消させる。競合が解消すると、ION212は調整した作業セットをエキスポートし、再度オンラインに加入を試みる。
【0124】
(b) CNの名前のインポート
計算ノード200には、ION212がエキスポートしたすべてのVSI504をインポートするために行動する責任がある。その日の第一の処理中、計算ノード200はオンライン上のすべてのION212に、前回エキスポートしたVSI602を要求し、ネームスペースの新しい状態を入手する。これ以降、計算ノード200はVSI602のエキスポートに注意を払う。
【0125】
VSI602に関する制御情報は、ION212が管理するvsノードに含まれる。vsノードの計算ノード200部分には、アプリケーション204に例示するネームの構築及び管理に使用される情報が含まれる。vsノード情報にはユーザアクセス権及びネーム・エイリアスが含まれる。
【0126】
(i) ネーム・ドメイン及びエイリアス
VSI602はアプリケーションが定義するネーム・エイリアスを持つ構成になる場合があり、これは関連するストレージにアクセスする代替名を提供する。
ネーム・エイリアスは、ネームのセットを論理的にまとめるために仮想ストレージドメインに属すことができる。ネーム・エイリアスは仮想ストレージドメイン内でユニークでなければいけない。
【0127】
(ii) vsノード
計算ノード200によるvsノードの修正は、所有するIONに送られ、すぐに更新と処理が行われる。次に、vsノードの変更は、ION212が変更のエキスポートとオンライン状態への再加入を行い、すべてのノードに伝達する。
【0128】
d) ストレージディスク管理
JBODエンクロージャ222は、ディスクデバイスのための物理環境の提供と、ディスクデバイス及びエンクロージャ管理アプリケーションへのいくつかのサービスの提供に責任を有する。こうしたサービスの中に含まれるのは(1)コンポーネント異常の通知(電源、ファンなど)、(2)しきい値の通知(温度や電圧)、(3)故障及びステータスライトの可能化と不能化、(4)音声警告の可能化と不能化、(5)ディスクデバイスのデバイスIDの設定である。
【0129】
以前は、管理アプリケーションは一般に、帯域外の接続によってエンクロージャとのインターフェースを行った。単一ネットワーク管理プロトコル(SNMP)のようなプロトコルを使用したリモート・エンクロージャへのシリアル又はイーサネット接続では、エンクロージャの状態に関するステータス情報を受領できた。本発明では、ディスクエンクロージャは物理的にホストシステムと離れている可能性があり、エンクロージャの構成やステータスを、分離したシリアル・パスのような直接的な接続によってモニターするのは実用的ではない。余分なケーブルを避けるために、本発明では、既存のノーマルなファイバ・チャンネル・ループによってエンクロージャのステータスをモニターし、エンクロージャの構成をコントロールできる帯域内接続を使用する。
【0130】
この帯域内接続では、構成情報の問い合わせや制御のためにホストからSCSIデバイスへ送信されるSCSIコマンドセットと、デバイスがこの情報をエンクロージャ自身に通信するメカニズムを使用する。ホストとディスクデバイスのプロトコルの部分は、SCSI−3エンクロージャサービス(SES)の仕様に詳述されており、これは本文書の参照事項に含まれる。
【0131】
SESインターフェースの導入には、問い合わせ、診断送信、診断結果受領の3つのSCSIコマンドが使用される。問い合わせコマンドは、特定のデバイスがエンクロージャデバイスか、SESコマンドをエンクロージャ・サービス・プロセスに転送できるデバイスかを指定する。診断送信、診断結果受領はそれぞれ、エンクロージャ要素からのステータス情報を管理、受領するために使用される。
【0132】
診断送信又は診断結果受領コマンドを使用する時は、ページコードを指定しなくてはいけない。ページコードは要求されているステータスや情報のタイプを指定する。診断送信及び診断結果受領コマンドによって要求できる既定SESページのすべてのセットは下の表VIIに記載されている。太字の項目はSESイベントモニタが必要とするものである。
【0133】
【表7】
【0134】
アプリケーション・クライアントは、診断結果読み出しコマンドを実行して断続的にエンクロージャをポーリングし、1より大きな最少割り当て長さのエンクロージャ・ステータス・ページを要求することがある。情報は、エンクロージャのステータスを要約した5ビットを含む1バイトによって戻される。これらのビットの一つが設定されている場合、アプリケーション・クライアントは、完全なステータスを入手するために、このコマンドを長い割り当て長さで再発行できる。
【0135】
e)IONエンクロージャ管理
図7は、IONエンクロージャ管理モジュールとION物理ディスクドライバ・アーキテクチャ500の関係を示している。このサブシステムは、SESイベントモニタ702とSCC2+to SESガスケット704の2つのコンポーネントで構成されている。SESイベントモニタ702は、接続するすべてのエンクロージャのサービス・プロセスのモニタと、ステータスが変化した場合のイベント記録サブシステムによる報告に責任を有している。この報告は、必要があれば管理サービスレイヤ706に転送される。SCC2+to SESガスケット704は、構成及び維持アプリケーションからのSCC2+コマンドのトランスレートと、エンクロージャ・サービスプロセスに対応する1つ以上のSESコマンドへのこれのトランスレートに責任を有する。これにより、アプリケーション・クライアントはJBOD構成の仕様を知る必要がなくなる。
【0136】
(1)SESイベントモニタ
SESイベントモニタ702は、エンクロージャ222のサービスプロセス・ステータスの変化に関する報告を、管理サービスレイヤ706に戻す。ステータス情報はイベント記録サブシステムによって報告される。SESイベントモニタ702は、エンクロージャ・ステータス・ページを要求する診断結果読み出しコマンドを実行して、各エンクロージャプロセスを断続的にポーリングする。診断結果読み出しコマンドは、ION物理デバイスディスクドライバ500が提供するSCSLibインターフェース514を介して送信される。報告されるステータスには、下の表VIIIのステータス項目が含まれる。
【0137】
【表8】
【0138】
SESイベントモニタ702は、起動すると、エンクロージャに含まれる各要素402−424のステータスを読み出す。このステータスは現在のステータスである。ステータスの変化を検知すると、現在のステータスから変化した各ステータスの報告が管理サービスレイヤ706に戻される。そして今度は、この新しいステータスが現在のステータスになる。例えば、ファン要素の現在のステータスがOKで、ステータス変化によりエレメントの状態がファン障害になった場合、このイベントはファンの故障を示すものとして報告される。別のステータス変化がエレメントの未インストールを示す場合、このイベントはファンがエンクロージャから取り外されたことを示すものとして報告される。さらに別のステータス変化がファン要素のOKであることを示す場合、このイベントは、ファンがホットプラグされ、正常に動いていることを示すものとして生成される。
【0139】
(a) その日の第一の処理
SESイベントモニタ702は、ION物理ディスクドライバ500の初期化成功の後で起動する。起動後、SESイベントモニタ602は、JBOD及びSCSI構成モジュール516を読み出して、ディスクデバイスとエンクロージャサービスデバイスの相互関係、デバイスのアドレスを確認する。次に、各エンクロージャ・ステータス・デバイスのステータスを読む。そして、すべてのエラー状態及び失われている要素に関してイベントを生成する。これらのステップが終了すると、そのステータスが現在のステータスになり、ポーリングが開始される。
【0140】
(2) SCC2+to SESガスケット
SCC2+は、ION212が仮想及び物理デバイスの構成と管理に使用するプロトコルである。SCC2+のプラス(+)は、SCC2によるION212デバイス及びコンポーネントの完全な管理と、SCC2が定義するコマンドのSESに対する一貫したマッピングを可能にするための追加を意味する。
【0141】
サービスレイヤ706は、SCC2メンテナンス・イン及びメンテナンス・アウトのコマンドを通じて、JBODエンクロージャ222要素をアドレスする。
以下のセクションでは、コンポーネントのステータスの構成、制御、報告に関するメカニズムを提供するサービス・アクションについて説明する。これらのコマンドはそれぞれ、一連の診断送信及び診断結果受領のSCSIコマンドとしてION212に導入される。
【0142】
コンポーネントの構成は以下のサービス・アクションを使用して実行される。
【0143】
コンポーネント・デバイス追加−コンポーネント・デバイス追加コマンドはシステム内でのコンポーネント・デバイスの構成と、LUNアドレスの定義に使用する。LUNアドレスは、SES構成ページのコンポーネントの位置に基づいて、ION212が割り当てる。このコマンドに続いて、LUN割り当ての結果を入手するために、コンポーネント・デバイス報告サービス・アクションが実行される。
【0144】
コンポーネント・デバイス報告−コンポーネント・デバイス・ステータス報告サービス・アクションは、コンポーネント・デバイスに関する完全なステータスをレトリーブするためのベンダー固有コマンドである。SESは、各要素タイプのステータスを4バイトで提供する。この新しいコマンドが必要なのは、ステータス報告及びコンポーネント・デバイス報告サービス・アクションがステータス情報に1バイトしか割り当てず、既定のステータスコードがSES標準で定義されるものと競合するからである。
【0145】
コンポーネント・デバイス接続−コンポーネント・デバイス接続は、一つ以上のユニットを論理的に特定のコンポーネント・デバイスに接続することを要求する。このコマンドは、ボリュームセットと、ファン、電源など、それに従属するコンポーネント・デバイスの論理関係を形成するのに使われることがある。
【0146】
コンポーネント・デバイス交換−コンポーネント・デバイス交換サービス・アクションは、あるコンポーネント・デバイスの他のものとの交換を要求する。
【0147】
コンポーネント・デバイス除去−周辺機器デバイス/コンポーネント・デバイス除去サービス・アクションは、システム構成からの周辺機器又はコンポーネント・デバイスの除去を要求する。論理ユニットを接続しているコンポーネント・デバイスを除去する場合、このコマンドは状況チェックで終了する。感知キーは不当な要求で、追加感知修飾子の障害論理ユニットの除去がついている。
【0148】
コンポーネントのステータスその他の情報は以下のサービス・アクションによって入手する。
【0149】
コンポーネント・ステータス報告−コンポーネント・デバイス・ステータス報告サービス・アクションは、コンポーネント・デバイスに関する完全なステータス情報をレトリーブするためのベンダー固有コマンドである。SESは各要素タイプのステータスを4バイトで提供する。ステータス報告及びコンポーネント・デバイス報告サービス・アクションはステータス情報に1バイトしか割り当てず、既定のステータスコードはSES標準で定義されるものと競合する。そのため、この新しいコマンドが必要になる。
【0150】
ステータス報告−ステータス報告サービス・アクションは、選択した論理ユニットのステータス情報を要求する。各論理ユニットの一つ以上のステータスが戻される。
【0151】
コンポーネント・デバイス報告−コンポーネント・デバイス報告サービス・アクションは、JBOD内のコンポーネント・デバイスに関する情報を要求する。
LUN記述子の順序リストが戻され、LUNアドレス、コンポーネントタイプ、全体のステータスの報告が行われる。このコマンドは、コンポーネント・デバイス追加サービス・アクションが割り当てるLUNアドレスを判断する初期構成プロセスの一部として利用される。
【0152】
コンポーネント・デバイス接続報告−コンポーネント・デバイス接続報告サービス・アクションは、特定のコンポーネント・デバイスに接続している論理ユニットに関する情報を要求する。コンポーネント・デバイス記述子のリストが戻され、それぞれにLUN記述子のリストが含まれる。LUN記述子は、対応するコンポーネントに接続する各論理ユニットのタイプ及びLUNアドレスを特定する。
【0153】
コンポーネント・デバイス識別子報告−コンポーネント・デバイス識別子報告サービス・アクションは、特定のコンポーネント・デバイスの位置を要求する。
コンポーネントの位置を示すASCII値が戻される。この値は、コンポーネント・デバイス識別子設定サービス・アクションによって事前に設定されている必要がある。
【0154】
コンポーネントの管理は以下によって実行される。
【0155】
コンポーネント・デバイス命令−コンポーネント・デバイス命令は、電源のオンオフといった制御命令をコンポーネント・デバイスに送るのに使用する。特定のデバイスに適用されるアクションは、コンポーネントタイプによって異なり、ベンダーに固有である。
【0156】
コンポーネント・デバイス中断−コンポーネント・デバイス中断サービス・アクションは、特定のコンポーネントを中断(無作動)状態にする。
【0157】
C. インターコネクト・ファブリック
1. 概要
大量のデータ移動を可能にするために、本発明のファブリックに接続するストレージモデルは、データのコピー及び割り込み処理コストに関するI/O性能問題に取り組まなくてはならない。本発明では、データのコピー、割り込み、フロー制御問題について、手法を独自に組み合わせて取り組んでいる。ほとんどのネットワークで使用されている目的地ベースのアドレス・モデルとは異なり、本発明では送信者ベースのアドレスモデルを使用しており、ここでは送信者が、データをファブリックに送信する前に、目的地のターゲット・バッファを選択する。
送信者ベース・モデルでは、目的地は送信者に対して、メッセージの送信前に、メッセージを送信できる目的地アドレスのリストを発信する。メッセージを送るために、送信者はまずリストから目的地バッファを選択する。これが可能なのは、ターゲット側アプリケーションがこれらのバッファのアドレスを先にOSに与え、ターゲットのネットワーク・ハードウェアが使用できるようにしており、そのため、ネットワーク・ハードウェアは、DNA作業によって、コピーせずにデータを正しいターゲットバッファに転送するための十分な情報を持っているからである。
【0158】
有益な点はあるものの、送信者ベースのアドレスにはいくつかの問題も存在する。まず、送信者ベースのアドレスでは、ファブリック全体の保護領域が目的地から送信者を含むまでに拡大し、全般的な分離が失われ、データのセキュリティと完全性の問題が持ち上がる。純粋な送信者ベースのアドレスでは、メモリアドレスを送信者に解放し、目的地は送信者を信頼する必要があり、これは高可用性システムにおける大きな問題である。例えば、目的地ノードが目的地アドレスのリストを送信者に与えたとする。送信者がこのすべてのアドレスを使用する前に、目的地ノードがクラッシュし、リブートを行う。すると送信側は、すでに有効ではなくなったアドレスバッファのセットを持つことになる。目的地では、このアドレスが別の目的で使用されているかもしれない。これのいずれかにメッセージを送信すると、目的地で重要なデータが破壊されるという深刻な結果につながる可能性がある。
【0159】
二番目に、送信者ベースのアドレスの導入には、ネットワークが協力して、データのDMAを開始する前にメッセージから目的地アドレスの抽出を行う必要があるが、ほとんどのネットワーク・インターフェースでは、こういった作業を行うように設計されていない。
【0160】
必要なアドレスモデルは、送信者ベースモデルの利点を含み、問題点を回避するものである。本発明では、BYNETに基づくインターコネクト・ファブリックを使用する独自の「プット・イット・ゼア」(PIT)プロトコルを利用したハイブリッド・アドレスモデルによって、この問題を解決している。
【0161】
2. BYNETとBYNETインターフェース
BYNETには、本発明の導入に役立つ三つの重要な属性がある。
【0162】
まず、BYNETは本質的にスケーラブルである−追加接続や帯域幅の追加を容易に実施でき、システム内のすべての存在をすぐに利用できる。これは、追加接続を行っても帯域幅を追加できない他のバス指向のインターコネクト技術とは対照的である。他のインターコネクトと比較すると、BYNETはファン・アウト(単一のファブリックで利用できるポート数)を増加できるだけでなく、ファン・アウトによって増加する二分帯域幅も有している。
【0163】
二番目に、BYNETはソフトウェアによって、アクティブ・メッセージ・インターコネクトに拡張できる−ユーザ(計算リソース102及びストレージリソース104)の指示の下で、BYNETは作業の中断を最低限に抑えながら、ノード間でデータを移動できる。DMAを使用して、データを既定のメモリアドレスに直接移動し、必要のない割り込みや内部でのデータコピーを回避する。この基本テクニックは、より小さなデータブロックを大きなインターコネクト・メッセージに多重化することで、こうしたデータブロックの移動に最適な形に拡張できる。それぞれのデータブロックは、修正したDMAベースのテクニックを使って処理することが可能で、ノードの運用上の有効性を失わずにインターコネクトの利用法を最適化できる。
【0164】
三番目に、BYNETは複数のファブリックを提供する構成にできるため、トラフィック整形を利用して、さらにインターコネクトを最適化できる。これは基本的にはBYNETソフトウェアが提供するメカニズムで、特定のインターコネクトチャンネル(ファブリック)を特定の種類のトラフィックに割り当てて、例えば、使用者の非常に多い共有チャンネルにおいて、長いメッセージと短いメッセージのランダムな組み合わせによって生じる干渉の減少などを行う。トラフィック整形はBYNETによって可能になるもので、予測されるトラフィックパターンのためにユーザが選択することもできる。
【0165】
図8は、BYNETとホスト側インターフェース802の図である。BYNETホスト側インターフェース802には、回線が作成されたときに常にチャンネルプログラムを実行するプロセッサ804が含まれる。チャンネルプログラムは、各ノードの送信側インターフェース806と目的地インターフェース808の両方で、このプロセッサ804が実行する。送信側インターフェース806ハードウェアは、回線の作成を制御するダウン・コールに従って作成されたチャンネルプログラムを実行し、データを送信し、その後この回線をシャットダウンする。目的地側インターフェース808ハードウェアはは、データを目的地のメモリに伝達するためにチャンネルプログラムを実行し、回線を完成させる。
【0166】
BYNETは、ネットワーク内のプロセッサとして稼働する計算ノード200とION212をインターコネクトするネットワークで構成される。またBYNETは、入出力ポート814を持つ複数のスイッチノード810で構成される。
スイッチノード810は、g(logbN)以上のスイッチノードステージ812に配列される。bはスイッチノードの入出力ポートの合計数、Nはネットワーク入出力ポート816の合計数で、g(x)は引数xより大きな最少の整数を得るための切り上げ関数である。したがって、スイッチノード810は、任意のネットワーク入力ポート816とネットワーク出力ポート816の間に複数のパスを提供して、誤り許容を拡張し、競合を減少する。さらにBYNETは、ネットワーク全体のメッセージ伝送管理のために、ネットワークの最高スイッチノードステージに沿った跳ね返り面818にある複数の跳ね返り点で構成される。跳ね返り点は、ネットワークを通じてバランスメッセージをロードするスイッチノード810と、受領するプロセッサへメッセージを方向付けするスイッチノード810を、論理的に区別する。
【0167】
計算ノード200やION212などのプロセッサは、論理的に独立した既定のプロセッサのサブセットで構成される1つ以上のスーパークラスタに区分できる。プロセッサ間の通信は2地点間方式又はマルチキャストで行われる。マルチキャストモードの通信では、単一のプロセッサは他のすべてのプロセッサ又はスーパークラスタにメッセージを同報できる。マルチキャスト・コマンドは異なるスーパークラスタ内で同時に発生できる。送信プロセッサは、転送チャンネルを通じてすべてのプロセッサ又はプロセッサの集団に伝達されるマルチキャスト・コマンドを発信する。マルチキャスト・メッセージは、跳ね返り面818の特定の跳ね返り点に向けられ、スーパークラスタ内のプロセッサへの経路が定まる。
特定の跳ね返り点を通過するマルチキャスト・メッセージを一度に一つだけにするため、これはネットワークのデッドロックを防ぎ、異なるスーパークラスタへのマルチキャスト・メッセージがお互いに干渉するのを防止する。マルチキャスト・メッセージを受領したプロセッサは、例えば、返信チャンネルを通じた現在のステータスの伝送などによって返答する。BYNETは返答を様々な形で組み合わせる役割を果たす。
【0168】
BYNETは現在、バンド内メッセージとバンド外メッセージという二つの基本タイプのメッセージをサポートしている。BYNETバンド内メッセージは、目的地ホストのメモリのカーネルバッファ(又はバッファ)にメッセージを伝達し、回線を完成させ、アップ・コール割り込みを通知する。BYNETバンド外メッセージでは、回線メッセージのヘッダ・データが、BYNETドライバの割り込み操作子に、受領中の残りの回線データ処理に使用するチャンネルプログラムを作成させる。どちらのタイプのメッセージにおいても、チャンネルプログラムの成功又は失敗は、BYNET返信チャンネル上の小さなメッセージによって送信者に戻される。この返信チャンネル・メッセージは、送信者のチャンネルプログラムによる回線シャットダウン作業の一部として処理される(返信チャンネルは、BYNET回線の定帯域幅の返信パスである)。回線がシャットダウンされた後、目的地でアップ・コール割り込みが(選択的に)通知され、新しいメッセージの到着を知らせる。
【0169】
BYNETバンド外メッセージの利用は、チャンネルプログラムがまず作成され、次に実行されるのを送信側が待つため、最も望ましい構成ではない。BYNETバンド内メッセージでは、送信者がアプリケーション・バッファを直接ターゲットにすることができないため、データのコピーが必要になる。この問題を解決するために、本発明ではBYNETハードウェアを独自の方法で利用している。目的地側インターフェース808にデータ処理に必要なチャンネルプログラムを作成させる代わりに、送信インターフェース806側が送信側と目的地側の両方のチャンネルプログラムを作成する。送信側チャンネルプログラムは、メッセージの一部として、目的地側が実行できる非常に小さなチャンネルプログラムを転送する。このチャンネルプログラムには、目的地側がターゲット・アプリケーション・スレッドの特定の目的地バッファにデータをどのように移動するかが記述されている。このメッセージを伝達すべき目的地のスレッドを送信者が知っているため、このテクニックでは、送信側がメッセージを伝達する方法と場所の両方を制御可能で、目的地側の従来のアップ・コール処理の損傷をほとんど避けることができる。このBYNETメッセージの形式は有向バンドメッセージと呼ばれる。アクティブメッセージ・プロセス間通信モデルで使用されるアクティブメッセージ(データと、目的地でのメッセージ処理に使用する小さなメッセージ処理ルーチンを含む)とは異なり、本発明では、BYNET I/Oプロセッサが単純なチャンネルプログラムを実行するBYNET有向バンドメッセージを使用する。アクティブメッセージでは普通はホストCPUがアクティブメッセージ操作子を実行する。
【0170】
返信チャンネルの利用により、送信側インターフェースは、メッセージ伝達完了を知らせるための従来の割り込み方法を抑止できる。バンド外及び有向バンドメッセージの両方において、送信側の成功の表示はメッセージが目的地のメモリに確かに伝達されたことのみを示す。
【0171】
これは目的地ノードのメモリスペースにメッセージが確かに移動したことを保証するが、目的地アプリケーションによるメッセージの処理は保証しない。例えば、目的地のノードが機能のあるメモリシステムを持っていても、目的地のアプリケーション・スレッドがメッセージの処理を恒久的に妨げる可能性のある異常を持っているかもしれない。本発明では、メッセージの確実な処理を行うために、メッセージ処理の異常を検知し修正する、独立したいくつかの方法を採用している。本発明の通信プロトコルに関して、送信側でのメッセージ消失の検知には時間切れが利用されている。必要に応じて再送信が行われ、ソフトウェアやハードウェアの異常が検知された場合は復旧作業が開始される。
【0172】
本発明では、有向バンドメッセージを利用しながら、目的地の特定のターゲットへのメッセージ伝達を可能にし、正しいターゲット・アプリケーション・スレッド・バッファにメッセージを送信するために十分なデータを送信側に与えるメカニズムを可能にしなくてはいけない。本発明では、チケット・ベース認証スキムによって、これを実現している。チケットは偽造できないデータ構造で、所有者に権利を与える。本質的には、チケットは特定のリソースを使用する一度限りの許可又は権利である。本発明では、ION212は、チケットの分配によって、計算ノード200へのサービスの分配を制御できる。加えて、チケットは、送信者ベースのフロー制御モデルを導入するための必要条件である特定のターゲットの指定を行う。
【0173】
D. 「プット・イット・ゼア」(PIT)プロトコル
1. 概要
PITプロトコルは、BYNET有向バンドメッセージ・プロトコルを使用したアクティブメッセージによってチケットとデータ・ペイロードを送信するチケット・ベース認証スキムである。PITプロトコルは、チケット・ベース認証、送信者ベース・アドレス、デビット/クレジット・フロー制御、ゼロメモリコピー、アクティブメッセージを独自に組み合わせたものである。
【0174】
2. PITメッセージ
図9は、PITヘッダ902とそれに続くペイロード・データ904を含む、PITメッセージ又はパケット901の基本的な特徴を示す図である。PITヘッダ902は、PIT IDで構成されており、これは抽象化したターゲット・データバッファを表し、指定された特定のサイズのバッファにアクセスする権利を意味する期限付きチケットである。PIT IDを所有する要素は、特定のバッファを使用する権利を持つ要素であり、PIT ID906はPITバッファを使用したときに放棄されなくてはいけない。目的地がPITメッセージを受領すると、PITヘッダのPIT ID906は、DMA作業によってペイロードが運ばれるBYNETハードウェアに対して、ターゲットバッファの指定を行う。
【0175】
PITプロトコルでのフロー制御は、送信者ベース・アドレスを使用したデビット/クレジット・モデルである。PITメッセージの送信は、送信者のフロー制御デビットと目的地のフロー制御クレジットを意味する。別の言い方をすれば、デバイスがPIT ID906をスレッドに送信した場合、スレッドにはそのアドレススペースのPITバッファがクレジットされる。デバイスがPIT ID906を送信者に返信した場合、デバイスは権利の放棄又はPIT ID906が指定するバッファの解放を行っている。デバイスがPIT ID906によって抽象化された目的地のバッファにメッセージを送ると、デバイスはPITバッファに対する権利も放棄する。デバイスがPIT ID906を受領すると、(そのPIT ID906が、デバイスの返信しているPIT ID906ではない限り)それは送信者のアドレススペースにあるPITバッファのクレジットになる。
【0176】
ヘッダ902の最上部は、PITパケット901を処理するBYNETチャンネルプログラム908(送信者側と目的地側)である。その下は、PIT IDチケットを伝送するための二つのフィールド、つまりクレジット・フィールド910とデビット・フィールド912である。デビット・フィールド912は、チャンネルプログラムを介して目的地ネットワークインターフェースによりペイロード・データが転送されるPIT ID906を含んでいる。これがデビット・フィールドと呼ばれるのは、PIT ID906は送信者のアプリケーション・スレッドにとって借りになるからである(目的地のスレッドでは貸し)。クレジット・フィールド910は、送信者スレッドが目的地スレッドに対してPITバッファを転送する、又は貸す場所である。クレジット・フィールド910は通常、送信者スレッドが返信メッセージの送信を期待するPIT ID906を有している。このクレジットPITの利用法は、SASE(自己アドレス・スタンプ・エンベロープ)PITと呼ばれる。コマンド・フィールド914は、ターゲットがペイロード・データに実行する作業を記述している(例えば、ディスク読み出し又は書き込みコマンド)。引数フィールド916は、コマンドに関するデータである(例えば、読み出し又は書き込み作業を行うディスクのディスク及びブロック番号)。シーケンス番号918は、各ソース及び目的地ノードのペアに固有の単調増加整数である(ノードの各ペアは、方向ごとに一つのシーケンス番号を持っている。)。長さフィールド920はPITペイロード・データの長さをバイトで特定する。フラグ・フィールド922は、PITメッセージの処理を修正する様々なフラグを含んでいる。一例として、メッセージ複製フラグがある。
これは、失われた可能性のあるメッセージの再送信を行い、イベントの二回以上の処理を防ぐときに使用される。
【0177】
システムが最初に起動されたとき、どのノードも他のノードのためのPIT ID906を持っていない。BYNETソフトウェアドライバは、PITの第一のオープン・プロトコルが完了するまで、すべての有向バンドメッセージの伝達を防止する。PIT ID906の分配は、計算ノード200のアプリケーション・スレッドが、ION212上の任意の仮想ディスクデバイスを最初にオープンにした際に開始される。第一のオープン中、ION212と計算ノード200は交渉の段階に入り、ここで作業パラメータの交換が行われる。第一のオープン・プロトコルの一部はPIT ID906の交換である。PIT ID906は、二つ以上のバッファを、送信者の収集DMA及び目的地の分散DMAの両方をサポートするインターフェースとして指定できる。このアプリケーションは、他のすべてのノードにある任意のアプリケーションに対して、PIT ID906の配布を自由に行える。
【0178】
この計算ノード200とION212が交換するPITバッファのサイズと数は、調整可能な値である。デビット及びクレジットPIT ID906(デビット・フィールド912とクレジット・フィールド910にあるもの)は、システムのフロー制御モデルの基盤を形成する。送信者は目的地に対して、クレジットされたPIT ID906と同じ数しかメッセージを送信できない。これによって、特定のホストが送信できるメッセージの数は制限される。また、各ノードは自分のPIT ID906プールを持っており、各送信者が消費できるのは多くとも割り当てられたPIT ID906のみであるという点で公平性を確保できる。
【0179】
ION212は計算ノード202に対して発行したPITチケットのプールを管理する。計算ノード202に対するPIT ID906の初期割り当ては、第一のオープン・プロトコル中に行われる。分配されるPIT ID906の数は、ION212を同じ時期に利用する同時稼働の計算ノード200の数の予測とION212内のメモリリソースに基づいている。これは予測に過ぎないため、PITプールのサイズも稼働中にION212によって動的に調整される。このPITリソースの再配布は、複数の計算ノード200からの要求に対する公平な対応を確保するのに必要である。
【0180】
稼働計算ノード200へのPIT再割り当ては以下のように行われる。計算ノード200は絶えずI/O要求を行っているため、完了したI/OメッセージのPITクレジットのフローを制御することで、PITリソースが再配布される。
適切なレベルになるまで、ION212の完了によるPITクレジットは送られない(計算ノード200のPITプールが減る)。すでにPIT割り当てを持っているが計算ノード200が稼働していない(そしてリソースが動かない)場合、状況はより複雑になる。この場合、ION212は稼働していない計算ノード200それぞれにPIT(又はPIT IDのリスト)を無効にするメッセージを送ることができる。稼働していない計算ノード200が反応しない場合、ION212はそのノードのPIT IDをすべて無効にすることができ、その後で他の計算ノード200にPIT IDを再分配できる。稼働していない計算ノード200が再割り当てされたPITを使おうとすると、その計算ノード200は第一のオープン・プロトコルに強制的に戻される。
【0181】
計算ノード200へのPIT割り当ての増加は以下のように行われる。PIT割り当てメッセージを使用して、新しく割り当てられたPIT IDを任意の計算ノードに送ることができる。代わりのテクニックでは、I/O完了メッセージごとに二つ以上のPITクレジットを送信する。
【0182】
3. PITプロトコルの働き−ディスクの読み出しと書き込み
PITプロトコルを説明するために、計算ノード200がストレージディスク224のION212からの読み出し作業を要求した場合ついて論じる。ここでは、第一のオープンはすでに行われ、計算ノード200及びION212の両方に十分な数の自由なPITバッファが存在すると仮定する。アプリケーション・スレッドは読み出しシステムコールを行い、ディスクデータを転送するバッファのアドレスを、計算ノードの高レベルSCSIドライバ(CNシステムドライバ)に渡す。CNシステムドライバは、この要求を含むPITパケットを作成する(仮想ディスク名、ブロック番号、データの長さが含まれる)。CNシステムドライバの上半分が、デビット及びクレジットPIT IDフィールド910、912に情報を与える。このデビットPITフィールド912は、この読み出し要求が送られる目的地ION212のPIT ID906である。これは読み出し要求であるため、ION212は、I/O完了パケットを作成する時に、アプリケーションのバッファ(読み出しシステムコールの一部として提供されたもの)を指定する方法が必要になる。PITパケットは送信者ベース・アドレスを利用しているため、PIT ID906を持っているならば、ION212だけがこのアプリケーション・バッファをアドレスできる。アプリケーション・バッファは通常のPITプールの一部ではないため、バッファはメモリに固定され、バッファのためにPIT ID906が作成される。読み出し要求には、ディスク作業からの返信ステータスも必要なため、返信ステータスを含むためにPITの分散バッファが作成される。読み出しPITパケットの一部として、SASE PITがクレジット・フィールドに送られる。PITパケットは出力待ち行列に置かれる。PITパケットを送るときに、BYNETインターフェース802は、これをDMA作業によって送信者側から移動し、インターコネクト・ファブリック106を通じて転送する。目的地側のBYNETインターフェース808では、PITパケットが到着すると、BYNETチャンネルプロセッサ804によるPITチャンネルプログラムの実行が開始される。ホスト側インターフェース802のBYNETチャンネルプロセッサ804は、デビットPIT ID906を抽出し、ION212上に端点を置く。チャンネルプログラムはバッファ・アドレスを抽出し、インターフェースDMAエンジンがペイロード・データをPITバッファに直接移動するのをプログラムする−こうして、PITプロトコルがゼロデータ・コピーの意味を提供できるようにする。BYNETインターフェース802はION212上の受領アプリケーションに割り込みを通知する。計算ノード200では割り込みは起こらない。返信チャンネルメッセージが転送の失敗を示すと、失敗の理由に応じて、I/Oが再試行される。数回の試行後、IONエラー状況が入力され(本文書中のION212復旧及びフェールオーバ作業の詳細を参照)、計算ノード200はダイポールのバディION214に要求を処理させようと試みる。メッセージが確実に目的地ノードのメモリに伝達されると、ホスト側は再送信期限を(I/Oサービス時間の最悪のケースより長く)設定し、ION212のメッセージ処理成功を確実にする。このタイマが時間切れになると、計算ノード200はION212にPITメッセージを再送信する。I/Oがまだ進行中の場合は、複製した要求は単純に却下され、そうでない場合は再送信した要求は通常通り処理される。選択的に、プロトコルは、期限切れタイマをリセットし、I/Oの失敗によるアプリケーションの被害を避けるために、再送信した要求の明確な通知を求めることもできる。
【0183】
図10は、ION212機能モジュールのブロック図である。ION212及び214への入力は、データライン1002及び1004と制御ライン1006である。ION212の各モジュールは、制御ライン1006と連絡する制御モジュール1008で構成される。制御モジュール1008はデータライン1002からコマンドを受け取り、モジュール制御機能を提供する。システム機能モジュール1010は本文書で説明するION機能を実施する。ION212及び214は、ファブリックモジュール1020、キャッシュモジュール1014、データ復元モジュール1016、ストレージモジュール1018で構成される。これら各モジュールは、制御モジュール、データライン1002及び1004でのデータの挿入とレトリーブを行う仕事インジェクタ1020、データの通過を禁止するデータフェンス1022で構成される。
【0184】
PIT読み出し要求は、ION212に送られた後、IONキャッシュモジュール1014の仕事インジェクタに転送される。仕事インジェクタは要求をIONキャッシュモジュール1014に挿入し、IONキャッシュモジュールはデータがキャッシュされるかデータのバッファが割り当てられた場合、データを直接戻し、要求をIONストレージモジュール1018に渡す。IONストレージモジュール1018は、この要求を一つ(又は複数)の物理ディスク要求にトランスレートし、要求を該当するディスクドライバ224に送る。ディスク読み出し作業が完了すると、ディスクコントローラは割り込みを通知し、ディスク読み出しの完了を知らせる。ION仕事インジェクタはI/O完了PITパケットを作成する。デビットPIT ID(デビット・フィールド912に格納)は、読み出し要求のSASE PIT(アプリケーションがディスクデータを置きたい場所)からのクレジットPIT ID(クレジット・フィールド910に格納)である。クレジットPIT IDは、計算ノード200がこの要求を送ったPITIDと同じか、バッファがフリーでない場合は置き換えたPIT IDである。このクレジットPITは計算ノードに、未来の要求を送るためのクレジットを渡す(この現在のPIT要求が完了したばかりなので、計算ノード200のION212に対する待ち行列は深さが1つ増える)。PITを処理した後、ION212がPITクレジットを戻さない理由は三つある。一つは、ION212が計算ノード200からの未処理待ち行列の数を減らしたい。二つ目の理由は、ION212がPITクレジットを別の計算ノード200に再分配したい。三つ目の理由は、単一のPITパケットに複数の要求が含まれている(本文書のスーパーPITパケットの解説を参照)。コマンドフィールド914は読み出し完了メッセージで、引数はディスクドライブ読み出し作業からの返信コードである。このPITパケットはBYNETインターフェース702への待ち行列に入れられ、計算ノード200に送り返される。このときBYNETハードウェアは、このPITパケットをDMAによって計算ノード200に移動する。これにより、計算ノード200BYNETチャンネルプログラムによるデビットPIT ID912の抽出が始まり、ターゲットPITバッファ(ここではアプリケーションの固定されたバッファ)へのDMAが開始する前にこれを確認する。DMAが完了すると、計算ノードBYNETハードウェアは割り込みを開始し、アプリケーションにディスク読み出しが完了したことを知らせる。ION212では、BYNETドライバがバッファをキャッシュシステムに戻す。
【0185】
書き込み要求の作業も、読み出し作業と同じように行われる。アプリケーションが計算ノードの高レベルドライバを呼び出し、データ、仮想ディスク名、ディスクブロック番号、データの長さを含むアドレスを渡す。計算ノードの高レベルドライバは、目的地ION212のPIT ID906を選択し、このデータを使ってPIT書き込み要求を作成する。SASE PITには、ION212からの書き込み作業の返信ステータスのみが含まれる。ION212では、PITパケットが到着すると割り込みが通知される。この要求は、PIT読み出し作業と同じ形で処理される。書き込み要求はキャッシュルーチンに渡され、これがその後データをディスクに書き込む。ディスク書き込みが完了すると(又はデータがIONノード212及び214の書き込みキャッシュに安全にストアされると)、I/O完了メッセージが計算ノード200に送り返される。ION212が作動中の書き込みキャッシュを動かしているときは、要求の送られたION212ではなく、ダイポールのもう一方のION214が、I/O完了メッセージを戻す。これについては、本文書のバミューダトライアングルプロトコルに関する場所でさらに説明する。
【0186】
4. 失効PIT IDと復旧問題
第一のオープン中のPIT IDの交換は、ハードウェア又はソフトウェアの以上によって生じた失効PIT ID906を無効にするメカニズムである。ION212と計算ノード200がPIT IDを交換し、突然ION212がクラッシュした状況を考える。PIT ID906はメモリに固定されたターゲットバッファを意味しており、無効化しない限り、リブートしたION212又は計算ノード200の未処理PIT ID906は、有効でなくなった又は失効したPIT IDの影響で、ソフトウェアの完全性に大きな問題を引き起こす可能性がある。BYNETハードウェアと有向バンドメッセージは、失効PIT ID906を無効化する基本メカニズムの提供をサポートする。
【0187】
第一のオープンプロトコルの終わりに、両者は計算ノード高レベルSCSIドライバに、PIT ID906が分配されるホストのリストを渡さなくてはいけない。別の言い方をすれば、ホストは計算ノード高レベルSCSIドライバに、PITパケットを受け取るホストのリストを渡している。計算ノード高レベルドライバは、このリストを利用して、有向バンドメッセージの配布を管理する表を作成する。この表では、有向バンドメッセージを相互に送ることのできるION212ペアを指定する(この表では片道PITメッセージフローも指定する)。
計算ノード高レベルドライバは、この表をBYNET構成プロセスの一部として、ホスト内部で(ドライバ専用データとして)保存する。このリストからのホストの追加や減少は、計算ノード高レベルドライバへの簡単な通知メッセージにより、PITプロトコルが常に行える。ノードの故障、シャットダウン、無応答が生じた場合、BYNETハードウェアはこれを検知し、ファブリック上の他のすべてのノードに通知する。キャッシュノード上のBYNETホストドライバはこの通知に反応し、有向バンドホスト表から、このホストへの参照をすべて削除する。このアクションによって、そのホストが他のホストに分配したPIT ID906をすべて無効化する。これは、以前に配布されたPITパケットからノードを保護する鍵である。そのホスト上の計算ノード高レベルドライバが再構成されるまで、BYNETはそのホストにすべてのメッセージを届けない。第一の再構成が行われた後も、ローカルPITプロトコルが知らせるまで、BYNETはこの新たに再起動又は再構成されたホストへの有向バンドメッセージの送信をまったく認めない。これにより、第一のオープン・プロトコルによって適切なPITプロトコルの初期化が行われるまで、失効PITパケットの配布から保護することができる。
【0188】
ホストが有向バンドメッセージを(無効化されたPIT ID906を使用する)無効ホストに送ろうとすると、送信側の計算ノード高レベルドライバは、送信者へのエラー状態と共にこのメッセージを拒否する。この拒否により、二つのノード間で第一のオープン・ハンドシェークが開始される。第一のオープン・ハンドシェークが完了した後で、(計算ノード200から見て)未処理になっているION212のI/O作業が再送信されることになる。しかし、これがウォーム・リスタートでない限り、ION212は長い間ダウンしている可能性が高く、未処理のI/O作業はフェールオーバ処理の一部として再起動され、ダイポール内の他のION212に送られると思われる(詳細はION失敗処理のセクションを参照)。クラッシュしたノードが計算ノード200の場合、第一のオープンをすでに行った計算ノード200の第一のオープン要求がION212に予期せず到着すると、これにより、PIT ID復旧作業が開始される。ION212は計算ノード200にクレジットされたPIT ID906をすべて無効化する(又は実際は古いものの再発行のみを行う)。計算ノード200の未処理のI/O作業はすべて完了できる(ただしノードを再起動する時間が極度に短くない限り、このイベントが起こる可能性は低い)。使用しているSASE PITは失効し、完了メッセージは拒否されることになる(そして、I/O要求を発行したアプリケーションスレッドは存在しなくなる)。
【0189】
5. スーパーPIT(SPIT)−小I/O性能の改善
PITプロトコルは通常のSCSIコマンドを利用することができる。本発明の中核は通信ネットワークであり、ストレージ・ネットワークではないため、システムはネットワーク・プロトコルを使用して、ストレージ・モデルが可能にする性能を改善する。アップ・コールを扱う際のオーバーヘッド処理は、小I/O要求に支配される仕事量にとって性能の壁を意味する。小I/O性能を改善する方法はいくつか存在している。一つは、割り込み処理コードのパスの長さを改善することである。二つ目は、デバイスドライバで採用されているものと同様のテクニックを利用して、複数の割り込みのベクトルを単一の割り込み操作子の呼び出しに縮小することである。三つ目は、個々のI/O作業の数を減らし、単一の要求にクラスタ化する(コンボイする)ことである。ソース及び目的地の物理リンクのMTUサイズの違いの影響で、出入りするデータフローを再パッケージ化する必要のあるノードには、データが集まる傾向がある。この問題は、送信側と目的地側ネットワークの速度の不一致(特に目的地ネットワークが遅くなる)により、さらに悪化する。こうしたノードは、絶えず目的地からのフロー制御の対象になる。その結果、バーストによりルータから流出するデータが生じる。これはデータ・コンボイと呼ばれる。
【0190】
本発明では、データ・コンボイを、ION212及び計算ノード200においてアップ・コールが生成した割り込みの数を減らすテクニックとして利用する。
説明のために、ION212から計算ノード200へのデータフローを考える。
本発明で使用するフロー制御のデビット/クレジット・モデルでは、I/O要求は計算ノード200とION212の両方で待ち行列に加わる。待ち行列はION212にストアされるPITパケットで始まり、これをすべて使うと、計算ノード200に戻って継続する。これはオーバーフロー状態と呼ばれる。通常、オーバーフローは、ノードが自分のPITバッファ・クレジットより多くの要求を持つときに生じる。I/Oが完了する度に、ION212は完了メッセージを計算ノード200に戻す。通常、この完了メッセージには、解放されたPITバッファ・リソースのクレジットが含まれる。これはデビット/クレジット・フロー制御の基盤である。システムにI/O要求が殺到すると、いおん212ではI/Oが完了する度に新しいI/O要求と置き換えられる。そのため、負荷が大きい時期には、I/O要求は一度に一つずつION212に流れ込み、不特定の期間、ION212の待ち行列に加えられる。こうしたそれぞれの要求によってアップ・コール割り込みが生じ、ION212の負荷が増加する。
【0191】
この二重待ち行列モデルは数多くの利点を持つ。計算ノード200に割り当てるPITバッファのかずに関しては綿密な相殺取引が行われる。十分な仕事量をION212のローカルの待ち行列に入れ、要求が完了したときに、即座に新しい仕事をディスパッチできるようにするべきである。しかし、キャッシュシステムに割り当てれば、ION212上の待ち行列にある要求が消費するメモリリソースをさらに効率的に利用できる。ION212のPIT待ち行列がメモリを維持するのに足りない状態にあるとき、ION212の仕事が無くなり、計算ノード200から仕事が送られるのを待たざるを得なくなれば性能は低下する。
【0192】
スーパーPITは、高負荷時にデビット/クレジット・システムのフロー制御を利用して、アップ・コール割り込みの数を減らすために設計された、PITプロトコルの特徴である。スーパーPITは、OLTPや大量の比較的小さなI/Oに支配される同様の仕事の性能を改善する。一度に一つの要求を送るのではなく、スーパーPITパケットは、単一の大きなスーパーPIT要求によってすべてが運ばれるI/O要求の集合である。それぞれのスーパーPITパケットは、通常のPITバッファと同じ方法で転送される。スーパーPITパケットに含まれる個々のI/O要求は、ION212リソースが利用可能になったときに、PIT仕事インジェクタによって抽出され、通常のいおん212待ち行列メカニズムに挿入される。この個々のI/O要求は、読み出し、書き込み、どちらの要求でもかまわない。
【0193】
PIT仕事インジェクタは、ION212に転送されたアプリケーション要求のローカルでの(ION212上の)代理の役割を果たす。PIT仕事インジェクタは、後のセクションで述べるRT−PIT及びFRAG−PITプロトコルとしても使われる。スーパーPITの個々の要求が空になると、このリソースは計算ノードに開放され、別のスーパーPITパケットを送って置き換えることが可能になる。一つのホストに認められるスーパーPITパケットの数は、第一のオープン交渉で決定する。当然、ION212の待ち行列にある仕事量は、別のスーパーPITパケットが運ばれるまでION212が仕事を続けるのに十分な量でなければいけない。
【0194】
計算ノード200によって、ION212が自分のPITクレジットを使い果たすのに十分な仕事が待ち行列に加えられ、要求の待ち行列への追加がローカルで始まった状況を考える。スーパーPIT要求の待ち行列に加えられる要求の数は、スーパーPITが転送されるバッファのサイズによってのみ制限される。スーパーPITパケットは通常のPITパケットとは異なる働きをする。本発明の制御モデルでは、目的地へのクレジットを持っている場合に限り、デバイスは要求(デビット)を送ることができる。デバイスがION212内の特定のアプリケーション・スレッドをターゲットにしているわけではないので、デバイスがどのPITパケットを使用するかは、特に関係ない。ION212へのPITパケットはバッファの利用を制限するだけである(そして副作用としてフロー制御をする)。対照的に、PIT要求内のSASE PITは異なっている。SASEPIT IDは計算ノード212内の特定のスレッドのアドレススペースを意味している。スーパーPITの各要求はSASE PITを含んでいるが、この要求のI/Oが完了したとき、作成されるI/O完了メッセージにはクレジットPITは含まれない。スーパーPIT内のすべての要求が無くなったときだけ、そのアドレススペースにクレジットPITが発行される。
【0195】
計算ノード200でのスーパーPITの作成は以下のように行われる。スーパーPITは、単一のION212へのI/O要求が、計算ノード200の待ち行列に最低2つあれば、常に作成できる。このION212に関して、計算ノード200のスーパーPITパケットがすでに限界に達している場合、計算ノード200はスーパーPITが戻るまで、要求を待ち行列に加え続ける。この計算ノードはその後、別のスーパーPITメッセージを発行する。このシステムドライバ内では、待ち行列が発生した場合、スーパーPITパケットを作成するためには、IONごとの待ち行列が必要になる。
【0196】
上述の通り、スーパーPITメッセージは、大量の小I/O要求に支配された仕事によるION212の処理負荷を減らすことができる。スーパーPITメッセージは、メッセージの平均サイズを増やすことで、目的地ノードの性能とインターコネクト・ファブリックの利用性を改善する。しかし、スーパーPITメッセージの概念は、ION212が、小I/O作業によって生じる計算ノード200の負荷を減少させる場合にも適用できる。ION212でのスーパーPITメッセージの作成では、計算ノード200での作成とはまったく異なる問題が生じる。計算ノード200では、I/O要求を作成するアプリケーション・スレッドは、ION212の過負荷を防止するためのフロー制御の対象となる。ディスクサブシステムのサービス速度は、残りのION212よりはるかに低いため、ION212の性能にとって常に最終的な制限となる。要求は、ION212がそれを待ち行列に加え、サービスを行うために十分なリソースを持つまで、システムに入ることをブロックされる。重要なのは、ION212上でリソースが利用可能になるまで、要求が計算ノードで待ち行列に加えられる(又はアプリケーションがブロックされる)という点である。リソース不足は計算ノード200での問題ではない。計算ノード200のアプリケーションがシステムに対してI/Oの要求を発信するとき、要求の一部にはI/Oを完了するのに必要な計算ノード200のメモリリソース(アプリケーション・スレッド・バッファ)が含まれる。ION212が計算ノード200に送る必要のあるI/O完了メッセージには、すでにPIT ID(SASE PIT ID)が割り当てられている。ION212から見ると、I/O完了メッセージはすでにターゲットバッファが割り当てられており、データの準備が終わり次第、実行することができる。I/O完了メッセージは、伝達すれば成功する(ION212は計算ノードのディスクストレージシステムのサービス時間を持つ必要はない)。そのため、ION212は、計算ノードからのフロー制御の圧力によるブロックができない。スーパーPITメッセージを作成するために、計算ノードはフロー制御待ち行列を利用するが、ION212はこのオプションを持っていない。ION212は、BYNETへのアクセスを除き、待つ必要のあるリソースをまったく持っていないため、スーパーPITメッセージを作成する機会ははるかに少なくなる。
【0197】
ION212でスーパーPITメッセージを作成するために、いくつかの方法が利用できる。一つは、I/O完了要求をわずかに遅らせて、スーパーPITパケット作成の機会を増やすことである。わずかな遅れの後、同じノードのために新しい完了メッセージが準備されていなければ、そのメッセージは通常のPITメッセージとして送られる。このテクニックの問題は、(計算ノードのアップ・コール・オーバーヘッドを減らすために)スーパーPIT作成を期待して要求を遅らせる時間を取れば、それに対応して要求サービス時間の合計が増加することである。最終的には計算ノード200の負荷を減らすことになるが、アプリケーションの速度も遅くなってしまう。適応性のある遅延時間が有効である(計算ノード200に対する平均サービス時間と特定の要求にかかった合計サービス時間によって決定)。二つ目の方法は、一つ目をわずかに変化させたものである。この場合、それぞれの計算ノード200は、計算ノードでの小I/Oの割合が上昇するにしたがって増加する遅延時間を、それぞれのION212に提供する必要がある。これにより、必要な時に特定のION212がスーパーPITメッセージを作成する機会を増やすことになる。三つ目の方法は、特定のトラフィックのタイプ、例えばキャッシュが直接サービスを行い、ストレージ224のディスク作業を待たなくていい小さな読み出し又は書き込みなどを遅らせることである。
キャッシュは要求の一部に関して、ディスク・トラフィックを回避して、平均I/O待ち時間を減らすが、待ち時間の配分はキャッシュのヒットによって変化する。キャッシュのヒット要求における短い待ち行列遅延時間は、ディスク作業を含むものに比べ、サービス時間の大きな増加にはつながらない。サービス時間の配分に敏感なアプリケーション(均一な反応時間が性能にとって重要なもの)では、ION212でのスーパーPITパケット作成のためのわずかな遅延によって、全体的なシステム性能が改善される可能性がある。
6. 大型ブロックのサポートと断片PITパケット
データベース・アプリケーションの性能要件は、データベースのサイズに関係しない場合が多い。データベースのサイズが大きくすれば、アプリケーション性能の浸食を防ぐために、ディスクストレージを調べる速度も比例して大きくしなくてはいけない。別の言い方をすれば、サイズが大きくなるカスタマ・データベースにおいて、一定の問い合わせに対する反応時間は一定に保たなくてはいけない。この要件を満たす上で問題は、これが現在のディスクドライブ・テクノロジの傾向と直接対立する点にある。ディスクドライブの容量が増加する一方で、ランダムI/O性能は変化していない。この傾向を緩和する方法の一つは、ディスクデバイスの容量増加にしたがって、ディスクI/O作業の平均サイズを増加させることである。ストレージ容量と性能要件の現在の傾向から言って、平均I/Oサイズである24KBは、非常に近い将来に128KBに増加する可能性がある。より積極的なキャッシュ使用と遅延書き込みテクニックが、多くの仕事にとって有効になるかもしれない。ディスクドライブにおける不均一なテクノロジの成長だけが、I/O要求サイズの増加を生み出しているわけではない。BLOBS(バイナリ大型オブジェクト)を利用するデータベースが普及するにつれ、1MB以上のサイズに達するオブジェクトが一般的になりつつある。特定の原因とは関係なく、システムには大きなI/Oオブジェクトをサポートする必要が生じ、そのサイズはディスクストレージの経済学に従っていくことになる。
【0198】
PITプロトコルを使用したION212と計算ノード200による大型データオブジェクトの送信に関しては、いくつかの問題がある。本文書で述べた通り、PITプロトコルの利点は、目的地バッファを先に割り当て、フロー制御と端点決定の問題に対処することにある。しかし、アップ・コール意味もメッセージを保管する十分なバッファスペースを確認(又は割り当て)する必要がある。PITプロトコルでは、送信側で各メッセージを保管するターゲットPIT ID906を送信側に選択させることで、この問題に対処する。大きなI/O書き込みは、メッセージのサイズが利用できるプールから特定のPIT ID906を選択する際の基準になるため、確実にプロトコルが複雑になる。負荷が大きい時期には、送信者が利用できるPIT ID906クレジットを持っているにも関わらず、そのすべてが大型I/O要求のバッファサイズ条件に合わない状況が生じる可能性がある。PITプロトコルでは、送信するデータサイズの幅が広い場合、送信側は受信側と協力してPITバッファの数とサイズの両方を管理しなくてはいけない。これによりPITバッファ割り当てサイズの問題が生じる。つまり、PITバッファのプールを作成する時に、特定の仕事のPITバッファのプールにとって、バッファサイズの適切な配分とは何か、である。BYNETソフトウェアは、書き込みだけでなく大型I/O読み出しも複雑にする追加最大転送単位(MTU)を強制する。BYNET MTUを超えるI/O要求(読み出しと書き込みの両方)は、ソフトエアのプロトコル(この場合はPITプロトコル)によって、送信側で断片化し、受信側で組み立て直す必要がある。これによってメモリ断片化の問題が生じる。簡単に言えば、内部断片化は割り当てられたバッファ内部の無駄なスペースであり、外部断片化は割り当てられたバッファ外部の、小さすぎてまったく要求を満たすことができない無駄なスペースである。解決策の一つは、大型PITバッファの一部のみを使用することだが、大きなPITバッファを使用した場合に不必要な内部断片化が生じることになる。大型PITバッファはメモリを無駄にし、コスト/性能を悪化させる。
【0199】
本発明では、BYNET MTU及びPITバッファ割り当ての問題は、PITメッセージのタイプを2つ追加することで解決している。これはRT−PIT(ラウンド・トリップPIT)とFRAG−PIT(断片PIT)である。FRAG−PITとRT−PITはどちらも、PITデータ・プッシュ・モデルではなく、データ・プル・モデルを利用している(プッシュ・データでは、送信側がデータを目的地にプッシュする。プル・データでは、目的地がデータをソースからプルする)。FRAG−PITメッセージは大型データ読み出しをサポートする設計になっており、RT−PITメッセージは大型データ書き込みをサポートしている。FRAG−PITとRT−PITはどちらもスーパーPITと同じように、ION PIT仕事インジェクタを使用してデータ・フローを管理する。
【0200】
a) RT−PITメッセージ
計算ノード200がION212に対して大きなディスク書き込み作業の実行を求め、そのI/O書き込みがBYNET MTU又は利用できる任意のION212PITバッファのどちらかより大きいとき、計算ノード200はRT−PIT作成メッセージを作成する。RT−PITメッセージは二つの段階で働く。
ブースト段階とラウンド・トリップ段階である。ブースト段階では、書き込まれるデータのためのソース・バッファのリストが計算ノード200一連のPIT IDに割り当てられる。ソース・バッファの断片化サイズがBYNET MTUとION初期オープンプロトコルで指定されたサイズ制約によって決定する。このPIT ID(及び地合おうするバッファサイズ)のリストは、単一のRT−PIT要求メッセージのペイロードに置かれ、目的地ION212に対するPITクレジットになる。RT−PITプロトコルが直接使用するために、追加PITバッファが計算ノードプールから割り当てられる。この追加バッファのPITIDは、PITヘッダのクレジット・フィールドに置かれる。残りのRT−PIT要求は、通常のPIT書き込みメッセージと同じである。次に計算ノード200は、このRT−PIT要求メッセージをION212に送る(ブーストする)。
【0201】
ION212では、PIT仕事インジェクタがRT−PIT要求メッセージを二つのステップで処理する。それそれのソース側PIT ID906に関して、仕事インジェクタはサイズの一致するPITバッファをIONキャッシュから要求しなくてはいけない(IONバッファキャッシュで利用できるスペースに応じて、これがすべて一緒に又は一度に一つずつ行われる)。PITバッファを一致させることで、ION212は動的にリソースを割り当て、書き込み要求に組み合わせる。これで、通常のPIT転送を修正したシーケンスを利用して、I/Oを進めることができるようになる。ここでRT−PITメッセージの処理はラウンド・トリップ段階に入り、仕事インジェクタはソースと目的地PIT IDの一致した一つ(以上)のペアのために、RT−PIT開始メッセージを作成する(ION212には、一致したPIT IDの一つ又は一部を送信するオプションも残されている)。単一のRT−PIT開始メッセージに含まれるPIT ID906の数は、ION212内のデータ転送の細かさをコントロールする(以下で解説)。
【0202】
このRT−PIT開始メッセージは計算ノード200に送り返され、RT−PITメッセージのブースト段階が終了する。RT−PIT開始メッセージを受領すると、計算ノード200は、通常PIT書き込みメッセージを使用して、一度に一つのPITペアずつ、ION212にデータを転送する。計算ノード200とION212の両方が失われた断片を処理するのに十分なデータを持っているので、計算ノード200は断片を順番に送る必要はない(一致したPITペアが再組立の順番を指定する)。ION212がPIT書き込みメッセージを受領すると、仕事インジェクタは通知を受け、この書き込み要求がもっと大きなRT−PIT I/O作業の一部であることを認識する。仕事インジェクタにはPIT書き込み処理に関して二つの選択肢があり、断片をキャッシュ・ルーチンに渡して書き込み作業を開始させる、又は書き込みを開始する前に最後の断片の送信を待つ。さきにI/Oを開始すると、キャッシュがパイプライン式にディスクドライブへデータフローを送ることができるが(書き込みキャッシュの方針による)、小さなI/Oサイズによる性能低下のリスクがある。しかし、すべての断片が到着するまでI/Oを保持すると、キャッシュシステムに過度の負荷がかかる可能性がある。断片の合計サイズと数量は最初から分かっているので、現在の稼働状況で大型I/O要求を最適化するのに必要なすべてのデータは、キャッシュシステムによって作られる。計算ノード200側では、PIT書き込み作業の送信が成功する度に、単一のRT−PIT開始メッセージに複数の断片が含まれるときには、次の断片書き出しの開始が起こる。単一のRT−PIT開始コマンド内の最後の断片が受領されると、要求インジェクタは、通常の書き込み要求と同様の処理のために、データをキャッシュシステムに渡す。データが安全であれば、キャッシュシステムはI/O完了メッセージを作成し、計算ノード200に送り返して、(RT−PIT開始作業の)処理のこの段階が完了したことを知らせる。断片がまだ残っている場合は、RT−PIT開始コマンドが作成され、計算ノードに送られ、すべての断片が処理されるまで上述のサイクルが繰り返される。
作業インジェクタとキャッシュが最後の断片の処理を完了すると、最終I/O完了メッセージがステータスと共に計算ノードに戻され、RT−PIT要求の処理の終了を同期させる。
【0203】
RT−PITメッセージはいくつかの変更でBYNETに最適化できる。ION212がRT−PIT要求を受領した直後の状況を考える。ION212の仕事インジェクタは、計算ノードのバッファとION212を一致させ、大型I/O要求をたくさんの小さな通常書き込み要求にトランスレートしようとしている。同期は中間RT−PIT開始コマンドによって行われる。しかし、BYNETによって、受領したチャンネルプログラムのデータ引き出しが可能になれば、RT−PIT開始コマンド送信の中間のステップが排除できる。説明のために、このBYNET作業のモードをループ・バンド・メッセージと呼ぶことにする。ループ・バンド・メッセージは実際は二つの有向バンド・メッセージで、片方が他方に組み込まれている。例えば、RT−PIT要求を受領した仕事インジェクタは、計算ノードで二番目のPIT書き込みメッセージを作成するのに必要なデータを含んだRT−PIT開始メッセージを作成することで、それぞれの断片を処理することになる。RT−PIT開始メッセージはPIT書き込み作業の断片化のテンプレートを計算ノード200に転送する。計算ノード200で実行されるチャンネルプログラム(RT−PIT開始メッセージと一緒に送られる)は、計算ノードBYNETドライバの送信待ち行列上にペイロードを保管する。このペイロードは、第一のRT−PIT要求をするアプリケーションスレッドからの要求待ち行列に似ている。このペイロードは、ソースと目的地のPIT IDのペアを使って、仕事インジェクタが送信するこの断片のために、PIT書き込み要求を作成する。PIT書き込みは断片をION212で保管し、仕事インジェクタに到着を知らせる。仕事インジェクタは、それぞれの断片についてこのサイクルを繰り返して、すべてを処理する。ループ・バンド・メッセージによる性能改善は、それぞれのRT−PIT開始メッセージに必要な割り込みと計算ノードの処理の排除に由来する。
【0204】
FRAG−PITメッセージは、計算ノードからの大型I/O読み出し要求の作業をサポートするように設計されている。アプリケーションが大型I/O読み出しを要求すると、計算ノードはターゲットバッファを固定し、各断片のターゲットバッファを意味するPIT IDのリストを作成する。それぞれのPIT IDは、断片のターゲットバッファと関連するステータスバッファで構成される分散リストを記述する。ステータスバッファはデータ送信時に更新され、これにより計算ノードは各断片がいつ処理されたかを判断できる。各断片のサイズは、RT−PITメッセージと同じアルゴリズムで決定する(上のRT−PITのセクションを参照)。これらのフィールドを組み合わせてFRAG−PITを作成する。
【0205】
FRAG−PIT要求は計算ノード200によってION212に送信され、ここで仕事インジェクタによって処理される。この要求には、仮想ディスク名、開始ブロック番号、ION212上のデータソースのデータの長さが含まれる。
仕事インジェクタはRT−PIT要求と同様の形でFRAG−PIT要求についての作業を行う。FRAG−PIT要求内の各断片は、別々のPIT読み出し要求として、キャッシュシステムとの協力によって処理される。キャッシュシステムは、各断片を個別に扱うか、又は単一の読み出し要求として扱うかを選択でき、可能になったときにディスクデータを仕事インジェクタに供給する。キャッシュがデータ断片を(個別に又は単一のI/O作業の一部として)供給すると、大型読み出し要求のデータが計算ノードにフローバックし始める。キャッシュがデータを利用可能にした各断片ごとに、仕事インジェクタはデータ断片をFRAG−PIT部分完了メッセージに入れて計算ノードに送り返す。それぞれのFRAG−PIT部分完了メッセージは、通常のPIT読み出し要求完了と同様にデータを伝送するが、FRAG−PIT部分完了メッセージは伝達されたときに計算ノードで割り込みを生成しない。最後の完了断片は、FRAG−PIT完全完了メッセージと一緒に計算ノードへ戻される。FRAG−PIT完全完了メッセージと部分完了メッセージの違いは、割り込みによってFRAG−PIT読み出し要求全体の完了を知らせる点にある(フル・アップ・コール)。
【0206】
7. 他のネットワークデバイスへのPITプロトコルの導入
ネットワーク接続ストレージに対する上述のアプローチによる性能の大部分は、インターコネクト・ファブリック106がPITプロトコルをサポートする能力に依存している。BYNETの場合、低レベルインターフェースが作成され、これはPITプロトコルと密接に調和している。ファイバ・チャンネル等の他のネットワーク・インターフェースにも、同様にPITプロトコルをサポートする能力がある。
【0207】
E. バミューダ・トライアングル・プロトコル
本発明では、IONクリーク226と書き込みキャッシュを使用して、データとI/O冗長を提供している。IONクリーク226を構成するのは複数のION(通常はペア又はダイポールとして設置)、例えばプライマリION212及びバディION214から成るION212及び214である。
【0208】
バディION214は、プライマリION212が修正したキャッシュページのコピーの一時格納場所として働き、データとI/O冗長を提供する。IONクリーク226(図のIONのペア又はダイポール)内のそれぞれのION212は、ボリューム・セットの一つのグループにとってのプライマリION212として機能し、他にとってのバディION214として機能する。
【0209】
高い可用性と書き込みキャッシュを提供するためには、アプリケーションが書き込みを確認できるまでの間、最低2カ所にデータを安全に格納する必要がある。これは、キャッシュメモリのバックアップコピーや高速度シーケンシャルディスク用ログを使用して行うこともある。書き込みが確認された後、データが恒久ストレージに記録される前に、ストレージ・コントローラが働かなくなった場合、この冗長コピー供給の失敗はデータの損失につながる可能性がある。
【0210】
しかし、ION212とION214は物理的に分離したコンピュータで構成されるため、インターコネクト・ファブリック106上の通信には、こうしたバックアップコピーを維持する必要がある。最高のシステム性能のためには、書き込みキャッシュを利用しながら、BYNET送信と書き込みプロトコルに伴う割り込みを最小化する必要がある。
【0211】
図11は、ダイポール226におけるディスク224へのデータ書き込みのために可能なプロトコルの一つを示している。ステップ1及び3では、計算ノード200は要求をプライマリION212とバディION214に送る。ステップ2及び4では、IONが書き込み要求に応答する。計算ノード200がION212と214の両方から応答を受領すると、書き込みが完了したとみなされる。
データがその後ディスクに書き込まれるとき、プライマリION212はバディION214に排除要求を送り、書き込みデータのページのコピーを保存しておく必要がないことを知らせる。「送信完了」割り込みを送信側で抑制すると仮定すると、それぞれの送信メッセージが計算ノード又はION212及びION214で割り込みを生成するため、このプロトコルでは最低5回の割り込みが必要になる。また、このプロトコルのもう一つの欠点は、書き込みが開始になった時に片方のIONがダウンした場合に二つ目の応答を永遠に待つのを避けるために、計算ノード200がプライマリION212及びバディION214の状況を知っておく必要があることである。
【0212】
図12は、考えられる別のプロトコルを表している。このプロトコルでは、プライマリION212に対して、書き込み要求をバディION214へ送り、応答を待ち、計算ノード200へ確認を送り返すように指示する。このプロトコルでも最低5回の割り込みが必要になる。第一の割り込みは、ステップ1で示されるように、計算ノード200がプライマリION212に書き込み要求を送るときに発生する。第二の割り込みはステップ2で、プライマリION212がデータをバディION214に送るときに発生する。3回目の割り込みはステップ3で、バディION214がデータの受領を知らせるときに発生する。4回目の割り込みはステップ4で、プライマリION212が計算ノード200に応答するときに発生し、最後の割り込みはステップ5で、データが安全にディスクに転送された後、プライマリION212が排除要求をバディION214に送るときに発生する。
【0213】
図13は、書き込み要求処理に必要な割り込み回数を最小化する、本発明で使用されているプロトコルを表している。このプロトコルをバミューダ・トライアングル・プロトコルと呼ぶ。
まず、計算ノード200が書き込みデータと共に書き込み要求をプライマリION212に対して発行する。この書き込み要求は、インターコネクト・ファブリック106を介して、プライマリION212に伝送される。これはステップ1で表される。プライマリION212はメモリ304に位置する書き込みキャッシュに書き込みデータを格納し、この書き込みデータをバディION214に送る。これはステップ2で表される。次に、バディION214は確認メッセージを計算ノード200に送り、書き込み要求を確認する。最後に、データが安全にディスクに保存されると、プライマリION212は排除要求をION214に送る。この排除ステップは図13のステップ3で示している。図11及び図12で示した方法では5つのステップが必要なのに対して、上述のプロトコルで必要なのは4つのプロセスであるため、これはデータ処理アーキテクチャ100の通信要件を減少し、処理能力を増加させる。
【0214】
図14は、上述の作業をフローチャートの形で示した図である。まず、プライマリION212が計算ノード200から書き込み要求を受領する1402。次に、プライマリION212からバディION214に書き込み要求の書き込みデータが転送される1404。バディION214から計算ノード200に確認メッセージが伝送され1406、排除論理を実行して1408、バディION214に格納された書き込みデータを排除する。
【0215】
図15は、排除論理の実施形態を示している。この実施形態では、プライマリION212の不揮発性ストレージに書き込みデータが格納されたときに、プライマリION212からバディIONに排除コマンドが送られる1502。通常、これはデータがメディアに書き込まれたときに発生する。
図16は、排除論理のもう一つの実施形態を示している。この実施形態は、不揮発性メモリに書き込みデータが格納されるまで1602、排除コマンドが送信されない点では、図15の実施形態と同じである。しかし、この実施形態では、排除コマンドを送信する前に、プライマリION212が二番目の書き込み要求を受領するのも待つ1604。したがって、排除要求を遅らせ、3回の割り込みプロトコルを発生させる次の書き込みデータ送信と組み合わせることで、さらに割り込みが減少する。このプロトコルのもう一つの利点は、書き込み要求を受領したときにバディION214がダウンした場合でも、プライマリION212がライト・バック・モードで要求を処理し、データが安全にディスクに保存された後、書き込みを知らせることができる点にある。計算ノード200はバディION214のステータスを知る必要はない。実施形態では、プライマリION212の受領する書き込み要求がなくなった場合でも、最後の排除命令の送信を確実に行うために、ソフトウェア・タイマ又はその他のデバイスを導入することもできる。
【0216】
バミューダ・トライアングル・プロトコルでは、従来のプロトコルよりも少ない割り込みによって書き込みキャッシュを利用でき、同時にデータの可用性を維持できる。これが可能なのは、バディION214がプライマリION212に送られた書き込み要求の確認を行うからである。現代のパイプライン式プロセッサにおいて割り込み処理のコストが高いことを考えれば、このプロトコルは、幅広い分散ストレージシステム・アーキテクチャでの使用が可能であり、システム全体のオーバーヘッド低下と性能の向上を生み出すことになる。
【0217】
F. 計算ノード
1. 概要
計算ノード200はユーザアプリケーション204を動かす。従来のシステムでは、使用される専用共通SCSIバスの数と、クラスタ又はクリーク内のノードにアクセスできるストレージの数は同じだった。本発明では、ストレージは一つ以上の通信ファブリック106を通じて計算ノード200に接続している。このネットワーク接続ストレージは、計算ノード200間に分散するユーザアプリケーション204内のプロセス間通信(IPC)トラフィックと、通信ファブリック106を共有している。ユーザアプリケーション204からのストレージ要求は、ファブリック/ストレージ・インターフェースによって、ION212に位置するストレージ管理アプリケーションに対するIPCメッセージに入れられる。こうしたストレージ・ノードの専用アプリケーションは、このIPCメッセージをローカル・キャッシュ又はI/O作業に変換し、必要に応じて結果を計算ノード200に送り返す。ユーザアプリケーション204にとって、ネットワーク接続ストレージとローカル接続ストレージは区別が付かない。
【0218】
仮想ディスクブロックの読み出し及び書き込み要求は、インターコネクト・ファブリック106を介してION212に到着する。特定のION212への要求の経路は、計算ノード200においてソースが行った選択によって決定できる。すべての計算ノード200は、システムのそれぞれのファブリック仮想ディスクへの要求を、どのION212が受け取るのかを知っている。ファブリック仮想ディスクは独自のストレージ拡張子が記述される仮想ディスクモデルを反映しているが、このストレージ拡張子は、その名前によって物理ディスクの物理的な位置を意味したり記号化するものではない。
【0219】
それぞれの計算ノード200は、ファブリック仮想ディスク名をIONダイポール226にマップするリストを持っている。このリストは、計算ノード200とION212との調整により、動的に作成される。電源投入及び失敗復旧作業時、ダイポール226内のION212は、仮想(及び物理)ディスク同士を区分し、どのION212がどの仮想ディスクを所有しているかについてのリストを作成する。ダイポール226の他のION214(仮想ディスク又はストレージリソースを所有していない)は、異常に備えて仮想ディスクに代替経路を提供する。
【0220】
このリストは、インターコネクト・ファブリック106を通して、他のすべてのダイポール226と計算ノード200に、定期的にエキスポート又は同報される。計算ノード200は、このデータを使って、システム内の各仮想ディスクへの第一の及び第二のパスのマスタ・テーブルを作成する。その後、計算ノード200内のインターコネクト・ファブリック・ドライバは、ダイポール226と調整し、I/O要求の経路を決める。ダイポール226は、この「自己発見」テクニックを使用して、稼働システムにおいてダイポール226が追加・除去されたときに発生する可能性のある仮想ディスク名の不一致を検知し、訂正する。
【0221】
計算ノード200上で動くアプリケーションは、ブロック・インターフェース・モデルを、計算ノード200にエキスポートされた各ファブリック仮想ディスクのローカルディスクのように見る。本文書で前に述べたように、計算ノード200はブート時に各ファブリック仮想ディスクの入口点を作成し、計算ノード200とION212の間で確立したネーミング・プロトコルを使って、こうした入口点を動的に更新する。
【0222】
この文書では、データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及び装置について説明した。この方法は、計算ノードからの書き込みデータを含む書き込み要求を第一のI/Oノードで受領し、この書き込みデータを第一のI/Oノードから第二のI/Oノードに転送し、第二のI/Oノードが書き込みデータを受領した後で、確認メッセージを第二のI/Oノードから計算ノードへ送るステップで構成されている。第一のI/Oノードの不揮発性ストレージにデータを書き込んだ後、排除要求又はコマンドを第二のI/Oノードに送り、第二のI/Oノードの揮発性メモリから書き込みデータを排除する。実施形態によっては、排除要求は第一のI/Oノードが第二の書き込み要求を受領するまで送信されず、この場合、排除要求は第二の書き込み要求の書き込みデータと同じ割り込みにおいて送信される。このデータ処理システムは、第一の及び第二のI/Oノードで構成され、各ノードは計算ノードからの書き込み要求を受領し、別のI/Oノードへ書き込みノードを転送するための手段を有している。また、各I/Oノードには、書き込みデータを送ったI/Oノードを介して確認メッセージを送信するのではなく、計算ノードに直接確認メッセージを送る手段も有している。この成果が、データ保存に要する割込み回数を減らしながら、書き込みキャッシュを導入してストレージ速度及びターンアラウンドを改善するI/Oプロトコルである。本発明は、本発明を実施すべき命令を遂行するために保存された命令を確実に具現するハードディスク、フロッピーディスク、CDといったプログラム・ストレージ・デバイスの見地から説明することも可能である。
【図面の簡単な説明】
【図1】本発明の主要なアーキテクチャ要素を示す最上部のブロック図。
【図2】本発明のシステム・ブロック図。
【図3】ION及びシステムのインターコネクト構造を示すブロック図。
【図4】JBODエンクロージャの要素のブロック図。
【図5】ION物理ディスクドライバの機能ブロック図。
【図6】ファブリック固有IDの構造を示す図。
【図7】IONエンクロージャ管理モジュールとION物理ディスクドライバの関係を示す機能ブロック図。
【図8】BYNETホスト側のインターフェースの図。
【図9】PITヘッダの図。
【図10】ION212機能モジュールのブロック図。
【図11】ダイポールのディスクにデータを書き込むためのプロトコルを示す図。
【図12】ダイポールのディスクにデータを書き込むための第二のプロトコルを示す図。
【図13】IONダイポールのディスクにデータを書き込むための効率的なプロトコルを示す図。
【図14】本発明の書き込みキャッシュ・プロトコルの実施形態を実行する際に利用する動作を示すフローチャート。
【図15】第一のIONの不揮発性ストレージにデータが書き込まれた後、他方のIONのメモリを排除する際に利用する動作を示すフローチャート。
【図16】第一のIONの不揮発性ストレージにデータが書き込まれた後、他方のIONのメモリを排除する際に利用する代替動作を示すフローチャート。
Claims (14)
- データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法であって、
第一のI/Oノードにおいて、書き込みデータを含む書き込み要求を計算ノードから受領するステップと、
書き込みデータを第一のI/Oノードから第二のI/Oノードに転送するステップと、
確認メッセージを第二のI/Oノードから計算ノードに送信するステップと、を含み、
確認メッセージを第二のI/Oノードから計算ノードに送信する場合には、確認メッセージを第一のI/Oノードから計算ノードに送信しないことを特徴とするキャッシュデータの転送方法。 - 更に、排除要求を第一のI/Oノードから第二のI/Oノードに送信するステップを含むことを特徴とする、請求項1記載のキャッシュデータの転送方法。
- 前記排除要求が、第一のI/Oノードの不揮発性ストレージに書き込みデータが保存された時に送信される、ことを特徴とする請求項2記載の方法。
- 前記排除要求が、第一のI/Oノードが第一の書き込み要求に続く第二の書き込み要求を受領した後で送信される、ことを特徴とする請求項2記載のキャッシュデータの転送方法。
- 前記第二の書き込み要求が第二の書き込みデータを含み、
更に、第二の書き込みデータと排除要求を単一のデータ割り込みによって第二のI/Oノードに送信するステップを含む、
ことを特徴とする請求項4記載のキャッシュデータの転送方法。 - 前記計算ノードと第一のI/Oノード及び第二のI/Oノードが、インターコネクト・ファブリックを介して通信上で結合されている、ことを特徴とする請求項1記載のキャッシュデータの転送方法。
- 前記計算ノードが第一のI/Oノード及び第二のI/Oノードにインターコネクト・ファブリックを介して結合されており、
前記インターコネクト・ファブリックが、前記計算ノードとI/Oノードを複数のネットワーク入力ポート及び複数のネットワーク出力ポートを介して接続するネットワークであって、bをスイッチノードの入出力ポートの合計数、Nをネットワーク入出力ポートの合計数、g(x)を引数xより大きな最小の整数を得るための切り上げ関数としたとき、g(logbN)以上のスイッチノードステージに配列された複数のスイッチノードで構成されるネットワークにおいて、スイッチノードステージがこれによって任意のネットワーク入力ポートとネットワーク出力ポート間に複数のパスを提供し、スイッチノードステージがネットワークの最高スイッチノードステージに複数の跳ね返り点を提供する、ネットワークを備えたことを特徴とする、請求項1記載のキャッシュデータの転送方法。 - データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送装置であって、
第一のI/Oノードにおいて、書き込みデータを含む書き込み要求を計算ノードから受領する手段と、
書き込みデータを第一のI/Oノードから第二のI/Oノードに転送する手段と、
確認メッセージを第二のI/Oノードから計算ノードに送信する手段と、
を備え、
確認メッセージを第二のI/Oノードから計算ノードに送信する場合には、確認メッセージを第一のI/Oノードから計算ノードに送信しないことを特徴とするキャッシュデータの転送装置。 - 更に、排除要求を第一のI/Oノードから第二のI/Oノードに送信する手段を備えた、ことを特徴とする請求項8記載のキャッシュデータの転送装置。
- 更に、第一のI/Oノードの不揮発性ストレージで書き込みデータを保存する時期を判断する手段と、
不揮発性ストレージに書き込みデータが保存されたときに排除要求を送信する手段と、
を備えたことを特徴とする請求項9記載のキャッシュデータの転送装置。 - 更に、第二の書き込み要求を受領する時期を判断する手段と、
第二の書き込み要求と一緒に第二のI/Oノードへ排除要求を送信する手段と、を備えたことを特徴とする請求項9記載のキャッシュデータの転送装置。 - 前記計算ノードと第一のI/Oノード及び第二のI/Oノードが、インターコネクト・ファブリックを介して通信上で結合されている、ことを特徴とする請求項8記載のキャッシュデータの転送装置。
- 前記計算ノードと第一のI/Oノード及び第二のI/Oノードが、インターコネクト・ファブリックを介して結合されており、
前記インターコネクト・ファブリックが、前記計算ノードとI/Oノードを複数のネットワーク入力ポート及び複数のネットワーク出力ポートを介して接続するネットワークであって、bをスイッチノードの入出力ポートの合計数、Nをネットワーク入出力ポートの合計数、g(x)を引数xより大きな最小の整数を得るための切り上げ関数としたとき、g(logbN)以上のスイッチノードステージに配列された複数のスイッチノードで構成されるネットワークにおいて、スイッチノードステージがこれによって任意のネットワーク入力ポートとネットワーク出力ポート間に複数のパスを提供し、スイッチノードステージがネットワークの最高スイッチノードステージに複数の跳ね返り点を提供する、ネットワークを備えたことを特徴とする、請求項8記載のキャッシュデータの転送装置。 - コンピュータによる読み出しが可能で、請求項1乃至7の何れかに記載のキャッシュデータの転送方法を遂行するためのプログラムを格納するプログラム・ストレージ・デバイス。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/132441 | 1998-08-11 | ||
US09/132,441 US6711632B1 (en) | 1998-08-11 | 1998-08-11 | Method and apparatus for write-back caching with minimal interrupts |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000259502A JP2000259502A (ja) | 2000-09-22 |
JP4567125B2 true JP4567125B2 (ja) | 2010-10-20 |
Family
ID=22454067
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP25773299A Expired - Fee Related JP4567125B2 (ja) | 1998-08-11 | 1999-08-10 | データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及びその装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6711632B1 (ja) |
EP (1) | EP0980041A3 (ja) |
JP (1) | JP4567125B2 (ja) |
Families Citing this family (101)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542961B1 (en) | 1998-12-22 | 2003-04-01 | Hitachi, Ltd. | Disk storage system including a switch |
US8225002B2 (en) * | 1999-01-22 | 2012-07-17 | Network Disk, Inc. | Data storage and data sharing in a network of heterogeneous computers |
US6785742B1 (en) * | 1999-02-24 | 2004-08-31 | Brocade Communications Systems, Inc. | SCSI enclosure services |
US7454457B1 (en) * | 2000-02-07 | 2008-11-18 | Parallel Networks, Llc | Method and apparatus for dynamic data flow control using prioritization of data requests |
US7464162B2 (en) * | 2000-07-10 | 2008-12-09 | Oracle International Corporation | Systems and methods for testing whether access to a resource is authorized based on access information |
US7124203B2 (en) * | 2000-07-10 | 2006-10-17 | Oracle International Corporation | Selective cache flushing in identity and access management systems |
US7194764B2 (en) * | 2000-07-10 | 2007-03-20 | Oracle International Corporation | User authentication |
US7249369B2 (en) * | 2000-07-10 | 2007-07-24 | Oracle International Corporation | Post data processing |
US6922414B1 (en) * | 2000-08-21 | 2005-07-26 | Hewlett-Packard Development Company, L.P. | Apparatus and method for dynamic command queue depth adjustment for storage area network nodes |
US6907474B2 (en) * | 2000-09-15 | 2005-06-14 | Microsoft Corporation | System and method for adding hardware registers to a power management and configuration system |
US6894970B1 (en) * | 2000-10-31 | 2005-05-17 | Chiaro Networks, Ltd. | Router switch fabric protection using forward error correction |
US6953392B2 (en) * | 2001-01-05 | 2005-10-11 | Asm Nutool, Inc. | Integrated system for processing semiconductor wafers |
US7185364B2 (en) * | 2001-03-21 | 2007-02-27 | Oracle International Corporation | Access system interface |
US6895453B2 (en) * | 2001-03-15 | 2005-05-17 | International Business Machines Corporation | System and method for improved handling of fiber channel remote devices |
US20020161852A1 (en) * | 2001-03-15 | 2002-10-31 | International Business Machines Corporation | System and method for fibre channel tracking of SCSI identifiers in unknown configurations |
US20020194407A1 (en) * | 2001-04-25 | 2002-12-19 | Kim Hyon T. | Maintaining fabric device configuration through dynamic reconfiguration |
US9836424B2 (en) | 2001-08-24 | 2017-12-05 | Intel Corporation | General input/output architecture, protocol and related methods to implement flow control |
US7152128B2 (en) | 2001-08-24 | 2006-12-19 | Intel Corporation | General input/output architecture, protocol and related methods to manage data integrity |
US7225256B2 (en) | 2001-11-30 | 2007-05-29 | Oracle International Corporation | Impersonation in an access system |
US20040044776A1 (en) * | 2002-03-22 | 2004-03-04 | International Business Machines Corporation | Peer to peer file sharing system using common protocols |
US7385971B1 (en) * | 2002-05-09 | 2008-06-10 | Cisco Technology, Inc. | Latency reduction in network data transfer operations |
JP4452438B2 (ja) * | 2002-11-11 | 2010-04-21 | 株式会社日立製作所 | 記憶システム |
US7373383B2 (en) * | 2002-12-06 | 2008-05-13 | International Business Machines Corporation | Location messaging method for delivering messages in a global virtual space |
US7174433B2 (en) * | 2003-04-03 | 2007-02-06 | Commvault Systems, Inc. | System and method for dynamically sharing media in a computer network |
US7624112B2 (en) * | 2003-04-03 | 2009-11-24 | Oracle International Corporation | Asynchronously storing transaction information from memory to a persistent storage |
US8301809B2 (en) | 2003-07-02 | 2012-10-30 | Infortrend Technology, Inc. | Storage virtualization computer system and external controller thereof |
WO2005010766A1 (ja) * | 2003-07-24 | 2005-02-03 | Fujitsu Limited | データ格納システム |
US7904487B2 (en) * | 2003-10-09 | 2011-03-08 | Oracle International Corporation | Translating data access requests |
US7882132B2 (en) * | 2003-10-09 | 2011-02-01 | Oracle International Corporation | Support for RDBMS in LDAP system |
US7467238B2 (en) | 2004-02-10 | 2008-12-16 | Hitachi, Ltd. | Disk controller and storage system |
JP4405277B2 (ja) | 2004-02-16 | 2010-01-27 | 株式会社日立製作所 | ディスク制御装置 |
JP4441286B2 (ja) * | 2004-02-10 | 2010-03-31 | 株式会社日立製作所 | ストレージシステム |
US7146484B2 (en) * | 2004-06-15 | 2006-12-05 | Hitachi, Ltd. | Method and apparatus for caching storage system |
US7500053B1 (en) | 2004-11-05 | 2009-03-03 | Commvvault Systems, Inc. | Method and system for grouping storage system components |
US20060129673A1 (en) * | 2004-12-01 | 2006-06-15 | Motorola, Inc. | Method and system for providing entity status information in a communication network |
US8816828B2 (en) * | 2005-06-09 | 2014-08-26 | Whirlpool Corporation | Recipe wand and recipe book for use with a networked appliance |
US8250163B2 (en) * | 2005-06-09 | 2012-08-21 | Whirlpool Corporation | Smart coupling device |
US9122788B2 (en) * | 2005-06-09 | 2015-09-01 | Whirlpool Corporation | Appliance network for a networked appliance with a network binder accessory |
US8155120B2 (en) * | 2005-06-09 | 2012-04-10 | Whirlpool Corporation | Software architecture system and method for discovering components within an appliance using fuctionality identifiers |
US20070288331A1 (en) * | 2006-06-08 | 2007-12-13 | Whirlpool Corporation | Product demonstration system and method |
US8676656B2 (en) * | 2005-06-09 | 2014-03-18 | Whirlpool Corporation | Method for product demonstration |
US8856036B2 (en) * | 2005-06-09 | 2014-10-07 | Whirlpool Corporation | Method of providing product demonstrations |
US9009811B2 (en) * | 2005-06-09 | 2015-04-14 | Whirlpool Corporation | Network system with electronic credentials and authentication for appliances |
US9164867B2 (en) * | 2005-06-09 | 2015-10-20 | Whirlpool Corporation | Network for communicating information related to a consumable to an appliance |
US10333731B2 (en) | 2005-06-09 | 2019-06-25 | Whirlpool Corporation | Methods and apparatus for communicatively coupling internal components within appliances, and appliances with external components and accessories |
US20080137670A1 (en) * | 2005-06-09 | 2008-06-12 | Whirlpool Corporation | Network System with Message Binding for Appliances |
US7831321B2 (en) | 2005-06-09 | 2010-11-09 | Whirlpool Corporation | Appliance and accessory for controlling a cycle of operation |
EP2247067B1 (en) * | 2005-06-09 | 2016-05-11 | Whirlpool Corporation | Appliance with embedded virtual router |
US8027752B2 (en) * | 2005-06-09 | 2011-09-27 | Whirlpool Corporation | Network for changing resource consumption in an appliance |
US8615332B2 (en) | 2005-06-09 | 2013-12-24 | Whirlpool Corporation | Smart current attenuator for energy conservation in appliances |
US8571942B2 (en) * | 2005-06-09 | 2013-10-29 | Whirlpool Corporation | Method of product demonstration |
US8688813B2 (en) * | 2006-01-11 | 2014-04-01 | Oracle International Corporation | Using identity/resource profile and directory enablers to support identity management |
US8682733B2 (en) * | 2006-06-08 | 2014-03-25 | Whirlpool Corporation | System for product demonstration |
US7425810B2 (en) * | 2006-06-30 | 2008-09-16 | Lenovo (Singapore) Pte., Ltd. | Disk drive management |
US7747634B2 (en) * | 2007-03-08 | 2010-06-29 | Microsoft Corporation | Rich data tunneling |
US8325633B2 (en) * | 2007-04-26 | 2012-12-04 | International Business Machines Corporation | Remote direct memory access |
US7889657B2 (en) * | 2007-05-04 | 2011-02-15 | International Business Machines Corporation | Signaling completion of a message transfer from an origin compute node to a target compute node |
US7948999B2 (en) * | 2007-05-04 | 2011-05-24 | International Business Machines Corporation | Signaling completion of a message transfer from an origin compute node to a target compute node |
US7890670B2 (en) * | 2007-05-09 | 2011-02-15 | International Business Machines Corporation | Direct memory access transfer completion notification |
US8037213B2 (en) | 2007-05-30 | 2011-10-11 | International Business Machines Corporation | Replenishing data descriptors in a DMA injection FIFO buffer |
US8018951B2 (en) | 2007-07-12 | 2011-09-13 | International Business Machines Corporation | Pacing a data transfer operation between compute nodes on a parallel computer |
US8478834B2 (en) * | 2007-07-12 | 2013-07-02 | International Business Machines Corporation | Low latency, high bandwidth data communications between compute nodes in a parallel computer |
US20090031001A1 (en) * | 2007-07-27 | 2009-01-29 | Archer Charles J | Repeating Direct Memory Access Data Transfer Operations for Compute Nodes in a Parallel Computer |
US7890597B2 (en) * | 2007-07-27 | 2011-02-15 | International Business Machines Corporation | Direct memory access transfer completion notification |
US8959172B2 (en) * | 2007-07-27 | 2015-02-17 | International Business Machines Corporation | Self-pacing direct memory access data transfer operations for compute nodes in a parallel computer |
US20090055234A1 (en) * | 2007-08-22 | 2009-02-26 | International Business Machines Corporation | System and methods for scheduling meetings by matching a meeting profile with virtual resources |
US9225545B2 (en) * | 2008-04-01 | 2015-12-29 | International Business Machines Corporation | Determining a path for network traffic between nodes in a parallel computer |
US9009350B2 (en) * | 2008-04-01 | 2015-04-14 | International Business Machines Corporation | Determining a path for network traffic between nodes in a parallel computer |
US20100064072A1 (en) * | 2008-09-09 | 2010-03-11 | Emulex Design & Manufacturing Corporation | Dynamically Adjustable Arbitration Scheme |
US9223787B2 (en) * | 2008-09-26 | 2015-12-29 | Apple Inc. | Systems and methods for sideband communication between device and host to minimize file corruption |
US8166146B2 (en) * | 2008-09-29 | 2012-04-24 | International Business Machines Corporation | Providing improved message handling performance in computer systems utilizing shared network devices |
US8566286B1 (en) | 2009-05-15 | 2013-10-22 | Idera, Inc. | System and method for high speed database backup using rapidly adjusted dynamic compression ratios controlled by a feedback loop |
US8250283B1 (en) * | 2009-05-22 | 2012-08-21 | Google Inc. | Write-distribute command for RAID mirroring |
US9477947B2 (en) | 2009-08-24 | 2016-10-25 | International Business Machines Corporation | Retrospective changing of previously sent messages |
US8544026B2 (en) | 2010-02-09 | 2013-09-24 | International Business Machines Corporation | Processing data communications messages with input/output control blocks |
US8306950B2 (en) * | 2010-08-26 | 2012-11-06 | International Business Machines Corporation | Managing data access requests after persistent snapshots |
US8949453B2 (en) | 2010-11-30 | 2015-02-03 | International Business Machines Corporation | Data communications in a parallel active messaging interface of a parallel computer |
US8490092B2 (en) | 2011-07-06 | 2013-07-16 | Microsoft Corporation | Combined live migration and storage migration using file shares and mirroring |
US8949328B2 (en) | 2011-07-13 | 2015-02-03 | International Business Machines Corporation | Performing collective operations in a distributed processing system |
US8689047B2 (en) * | 2011-07-22 | 2014-04-01 | Microsoft Corporation | Virtual disk replication using log files |
US8930962B2 (en) | 2012-02-22 | 2015-01-06 | International Business Machines Corporation | Processing unexpected messages at a compute node of a parallel computer |
US8621074B2 (en) * | 2012-04-27 | 2013-12-31 | Xerox Business Services, Llc | Intelligent work load manager |
US8996783B2 (en) | 2012-04-29 | 2015-03-31 | Hewlett-Packard Development Company, L.P. | Managing nodes in a storage system |
US8832325B1 (en) * | 2012-06-28 | 2014-09-09 | Emc Corporation | Transfer between storage devices |
US9600206B2 (en) | 2012-08-01 | 2017-03-21 | Microsoft Technology Licensing, Llc | Request ordering support when switching virtual disk replication logs |
US9002990B1 (en) | 2014-03-12 | 2015-04-07 | Instart Logic, Inc. | Fast cache purge in content delivery network |
US9549040B2 (en) * | 2014-03-12 | 2017-01-17 | Instart Logic, Inc. | First cache purge optimization handling of unavailable nodes |
JP6307962B2 (ja) * | 2014-03-19 | 2018-04-11 | 日本電気株式会社 | 情報処理システム、情報処理方法、及び、情報処理プログラム |
US9304865B2 (en) | 2014-03-26 | 2016-04-05 | International Business Machines Corporation | Efficient handing of semi-asynchronous raid write failures |
US20150378706A1 (en) * | 2014-06-30 | 2015-12-31 | Emc Corporation | Software overlays for disaggregated components |
JP2016018384A (ja) * | 2014-07-08 | 2016-02-01 | 富士通株式会社 | ストレージ制御装置、ストレージシステム、及びプログラム |
US9892041B1 (en) * | 2014-09-30 | 2018-02-13 | Veritas Technologies Llc | Cache consistency optimization |
US10866768B2 (en) * | 2014-12-12 | 2020-12-15 | Advanced Micro Devices, Inc. | Storage location assignment at a cluster compute server |
US10061734B2 (en) | 2015-05-20 | 2018-08-28 | International Business Machines Corporation | Adjustment of buffer credits and other parameters in a startup phase of communications between a plurality of channels and a control unit |
US9892065B2 (en) * | 2015-05-20 | 2018-02-13 | International Business Machines Corporation | Adjustments of buffer credits for optimizing the number of retry operations and transfer ready operations |
US9864716B2 (en) | 2015-05-20 | 2018-01-09 | International Business Machines Corporation | Receiving buffer credits by a plurality of channels of one or more host computational devices for transmitting data to a control unit |
US10248565B2 (en) | 2016-09-19 | 2019-04-02 | Qualcomm Incorporated | Hybrid input/output coherent write |
US11349912B2 (en) * | 2016-11-29 | 2022-05-31 | Level 3 Communications, Llc | Cross-cluster direct server return in a content delivery network (CDN) |
US20180308214A1 (en) * | 2017-04-21 | 2018-10-25 | Intel Corporation | Data scrambling mechanism |
CN108052435A (zh) * | 2017-12-13 | 2018-05-18 | 郑州云海信息技术有限公司 | 一种控制ses端方法、系统、设备及计算机存储介质 |
US11593223B1 (en) | 2021-09-02 | 2023-02-28 | Commvault Systems, Inc. | Using resource pool administrative entities in a data storage management system to provide shared infrastructure to tenants |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5014192A (en) | 1985-05-06 | 1991-05-07 | Motorola Computer X, Inc. | System for locating a file in a logical ring by sequentially forwarding access request with file system name and file name |
US5297269A (en) * | 1990-04-26 | 1994-03-22 | Digital Equipment Company | Cache coherency protocol for multi processor computer system |
US5544347A (en) * | 1990-09-24 | 1996-08-06 | Emc Corporation | Data storage system controlled remote data mirroring with respectively maintained data indices |
JP3237736B2 (ja) * | 1993-09-07 | 2001-12-10 | ヒュンダイ エレクトロニクス アメリカ | データ記憶装置のマトリックス構造 |
US5764903A (en) * | 1994-09-26 | 1998-06-09 | Acer America Corporation | High availability network disk mirroring system |
US5917723A (en) * | 1995-05-22 | 1999-06-29 | Lsi Logic Corporation | Method and apparatus for transferring data between two devices with reduced microprocessor overhead |
GB9601584D0 (en) * | 1996-01-26 | 1996-03-27 | Hewlett Packard Co | Fault-tolerant processing method |
US5802561A (en) * | 1996-06-28 | 1998-09-01 | Digital Equipment Corporation | Simultaneous, mirror write cache |
US6044367A (en) * | 1996-08-02 | 2000-03-28 | Hewlett-Packard Company | Distributed I/O store |
US6185601B1 (en) * | 1996-08-02 | 2001-02-06 | Hewlett-Packard Company | Dynamic load balancing of a network of client and server computers |
US6065102A (en) * | 1997-09-12 | 2000-05-16 | Adaptec, Inc. | Fault tolerant multiple client memory arbitration system capable of operating multiple configuration types |
US6192408B1 (en) * | 1997-09-26 | 2001-02-20 | Emc Corporation | Network file server sharing local caches of file access information in data processors assigned to respective file systems |
US6078990A (en) * | 1998-02-06 | 2000-06-20 | Ncr Corporation | Volume set configuration using a single operational view |
US6247099B1 (en) * | 1999-06-03 | 2001-06-12 | International Business Machines Corporation | System and method for maintaining cache coherency and data synchronization in a computer system having multiple active controllers |
US6601187B1 (en) * | 2000-03-31 | 2003-07-29 | Hewlett-Packard Development Company, L. P. | System for data replication using redundant pairs of storage controllers, fibre channel fabrics and links therebetween |
-
1998
- 1998-08-11 US US09/132,441 patent/US6711632B1/en not_active Expired - Lifetime
-
1999
- 1999-08-10 JP JP25773299A patent/JP4567125B2/ja not_active Expired - Fee Related
- 1999-08-10 EP EP99306310A patent/EP0980041A3/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
JP2000259502A (ja) | 2000-09-22 |
EP0980041A3 (en) | 2008-01-02 |
EP0980041A2 (en) | 2000-02-16 |
US6711632B1 (en) | 2004-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4567125B2 (ja) | データ・ストレージとデータ処理システムにおける書き込みキャッシュデータの転送方法及びその装置 | |
US6105122A (en) | I/O protocol for highly configurable multi-node processing system | |
US6247077B1 (en) | Highly-scalable parallel processing computer system architecture | |
US6078990A (en) | Volume set configuration using a single operational view | |
US6256740B1 (en) | Name service for multinode system segmented into I/O and compute nodes, generating guid at I/O node and exporting guid to compute nodes via interconnect fabric | |
US6594698B1 (en) | Protocol for dynamic binding of shared resources | |
US6148349A (en) | Dynamic and consistent naming of fabric attached storage by a file system on a compute node storing information mapping API system I/O calls for data objects with a globally unique identification | |
US6081812A (en) | Identifying at-risk components in systems with redundant components | |
Kronenberg et al. | VAXcluster: A closely-coupled distributed system | |
US8677034B2 (en) | System for controlling I/O devices in a multi-partition computer system | |
US8635318B1 (en) | Message broadcast protocol which handles configuration changes in a cluster of virtual servers | |
JPH09237226A (ja) | マルチコンピュータ・システムにおける信頼性の高いディスク・フェンシングのための方法および装置 | |
WO2006020039A1 (en) | Distributed parallel file system for a distributed processing system | |
JP2003515813A (ja) | 記憶ネットワーク内の定足数資源アービタ | |
US10331581B2 (en) | Virtual channel and resource assignment | |
US7711721B2 (en) | Apparatus, system, and method for suspending a request during file server serialization reinitialization | |
Mustafa | An assessment of a method to enhance the performance of cluster systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060710 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20080303 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100113 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100312 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100401 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100701 |
|
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: 20100716 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100805 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130813 Year of fee payment: 3 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
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 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |