JP2004506980A - コンピュータネットワークを介してブロックレベルストレージアクセスを提供するためのアーキテクチャ - Google Patents
コンピュータネットワークを介してブロックレベルストレージアクセスを提供するためのアーキテクチャ Download PDFInfo
- Publication number
- JP2004506980A JP2004506980A JP2002520080A JP2002520080A JP2004506980A JP 2004506980 A JP2004506980 A JP 2004506980A JP 2002520080 A JP2002520080 A JP 2002520080A JP 2002520080 A JP2002520080 A JP 2002520080A JP 2004506980 A JP2004506980 A JP 2004506980A
- Authority
- JP
- Japan
- Prior art keywords
- host computer
- storage
- network
- host
- storage server
- 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.)
- Pending
Links
- 238000005192 partition Methods 0.000 claims abstract description 89
- 238000000034 method Methods 0.000 claims abstract description 71
- 230000008569 process Effects 0.000 claims abstract description 37
- 230000004044 response Effects 0.000 claims description 41
- 238000009616 inductively coupled plasma Methods 0.000 claims 16
- 235000010384 tocopherol Nutrition 0.000 claims 16
- 235000019731 tricalcium phosphate Nutrition 0.000 claims 16
- 230000000903 blocking effect Effects 0.000 abstract 1
- 238000012546 transfer Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 235000014510 cooky Nutrition 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101150053844 APP1 gene Proteins 0.000 description 1
- 101100055496 Arabidopsis thaliana APP2 gene Proteins 0.000 description 1
- 101100189105 Homo sapiens PABPC4 gene Proteins 0.000 description 1
- 102100039424 Polyadenylate-binding protein 4 Human genes 0.000 description 1
- 101100016250 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GYL1 gene Proteins 0.000 description 1
- 102100038359 Xaa-Pro aminopeptidase 3 Human genes 0.000 description 1
- 101710081949 Xaa-Pro aminopeptidase 3 Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0626—Reducing size or complexity of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/80—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in storage media based on magnetic or optical technology, e.g. disks with sectors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
論理ネットワーク接続(好ましくはTCP/IPソケット)を介して1つまたはそれ以上のホストコンピュータ(102)に接続されてディスクストレージを提供する、1つまたはそれ以上のブロックレベルストレージサーバ(104)を有するネットワークベースのストレージシステム。一実施形態では、
各ホスト(102)は1つまたはそれ以上の各ストレージサーバ(104)へのソケット接続(400)を維持することができ、その接続を介して複数のI/O動作が非ブロック化方式で同時に実行可能である。ストレージサーバ(104)の物理的ストレージが選択的に複数のパーティションに分割されてもよく、各パーティションは特定のホスト(102)あるいはホストのグループに独立に割り付けられてもよい。ホストドライバソフトウェア(204)はこれらのパーティションをユーザレベルプロセスに1つまたは複数の局所ディスクドライブとして提供する。一実施形態でホスト(102)が最初にストレージサーバ(104)に接続すると、ストレージサーバ(104)は、まずホストを認証し、その後、ホスト(102)に対し、データ接続を確立するために使用できるポート、及びホスト(102)に割り付けられたパーティションについて知らせる。
各ホスト(102)は1つまたはそれ以上の各ストレージサーバ(104)へのソケット接続(400)を維持することができ、その接続を介して複数のI/O動作が非ブロック化方式で同時に実行可能である。ストレージサーバ(104)の物理的ストレージが選択的に複数のパーティションに分割されてもよく、各パーティションは特定のホスト(102)あるいはホストのグループに独立に割り付けられてもよい。ホストドライバソフトウェア(204)はこれらのパーティションをユーザレベルプロセスに1つまたは複数の局所ディスクドライブとして提供する。一実施形態でホスト(102)が最初にストレージサーバ(104)に接続すると、ストレージサーバ(104)は、まずホストを認証し、その後、ホスト(102)に対し、データ接続を確立するために使用できるポート、及びホスト(102)に割り付けられたパーティションについて知らせる。
Description
【0001】
本明細書は、本発明を実施する市販ソフトウェアの詳細な説明を記載した添付書類A〜Dを含む。これらの添付書類は、説明のために提供されたものであり、本発明の範囲を規定または限定するものではない。
【0002】
【発明の属する技術分野】
本発明は、コンピュータネットワークのためのストレージ(記憶)システムに関し、より詳細には、ネットワーク上の記憶リソース(記憶資源)にブロックレベルでアクセスするためのソフトウェアアーキテクチャに関する。
【0003】
【従来の技術】
ホストコンピュータがネットワーク上のハードディスクドライブおよびその他の記憶リソースを共有するのを可能にする様々な種類のアーキテクチャが、存在する。1つの良く知られている種類のアーキテクチャは、中央ファイルマネージャを使用することである。このアーキテクチャの1つの問題は、中央ファイルマネージャの不具合が、システム全体を動作不能にする場合があることである。もう1つの問題は、多くのソフトウェアアプリケーションは、中央ファイルマネージャを使用するようには設計されていないことである。
【0004】
ストレージアーキテクチャの中には、中央ファイルマネージャを使用せずに、ホストコンピュータがネットワークを介して記憶リソースに直接にアクセスするのを可能にすることによって、これらの欠陥を克服したものもある。典型的には、これらのアーキテクチャは、ホストが、ネットワーク接続(コネクション)を介して、(ファイルレベルとは対照的に)ブロックレベルで記憶リソースにアクセスするのを可能にする。この種のアーキテクチャの1つの問題は、I/O要求の障害が、同一ホストからのその他の未処理の要求を遅延させる場合があることである。もう1つの問題は、このアーキテクチャが、ネットワーク障害にきわめて弱いことである。
【0005】
【課題を解決するための手段】
本発明は、中央ファイルマネージャを必要とせずに、ディスクアレイのような記憶リソースにコンピュータネットワークを介してブロックレベルでアクセスするためのシステムアーキテクチャを備える。このアーキテクチャは、単独でまたは組み合わせて実施されてもよい様々な進歩性のある特徴を含む。
【0006】
アーキテクチャの1つの特徴は、同一のホストコンピュータ(「ホスト」)からの並行な入力/出力(I/O)要求が、別個の論理ネットワーク接続またはソケット(好ましくは、TCP/IPソケット)を介して処理されることである。例えば、好ましい実施形態においては、与えられたホストは、与えられたブロックレベルストレージサーバとの2つのソケットコネクション(接続)を確立し、一方のI/O要求を実行するのに一方のソケットを使用し、他方のI/O要求を実行するのに他方のソケットを使用することができる。その結果として、一方のI/O要求の障害または遅延が、他方のI/O要求を遮りあるいは妨害することがない。
【0007】
アーキテクチャのもう1つの特徴は、異なる種類および異なる帯域幅のネットワークも含めて複数のネットワークを介してソケットを確立することができ、大きなフォールトトレランスを提供することである。例えば、与えられたホストコンピュータとストレージサーバとは、TCP/IPプロトコルをサポートする2つのネットワークによって接続されてもよく、2つのネットワークの一方は、他方よりもきわめて遅い転送速度を提供してもよい。それらのネットワークの一方が、適切に機能している限りは、ホストは、ブロックサーバへの論理コネクション(接続)を確立し、I/O要求を実行することができる。
【0008】
一実施形態においては、アーキテクチャは、ホストコンピュータ上で実行されるホスト側デバイスドライバおよびホスト側リーダ/ライタコンポーネント(構成要素)を含む。さらに、アーキテクチャは、ブロックレベルストレージサーバ上で実行されるサーバ側デバイスドライバおよびサーバ側リーダ/ライタコンポーネントを含む。リーダ/ライタコンポーネントは、好ましくは、ペア(対、1つのホスト側リーダ/ライタプロセスおよび1つのサーバ側リーダ/ライタプロセス)で確立され独立したプロセスとして実行され、それぞれのペアは、ネットワークを介して、それぞれのソケットだけのために使用される。例えば、2つの論理コネクションが、与えられたホストコンピュータと与えられたストレージサーバとの間に確立されると、それぞれのそのようなソケットは、リーダ/ライタプロセスの異なるペアによって管理される。リーダ/ライタプロセスおよびソケットは、好ましくは、複数のI/O要求を通して常駐したままである。デバイスドライバおよびリーダ/ライタプロセスは、ストレージサーバのブロックレベルアクセスインタフェースをホストコンピュータにエクスポートするように動作し、それによって、ホストコンピュータにとっては、ブロックサーバのディスクドライブが、局所的な記憶リソースのように見える。
【0009】
アーキテクチャの進歩性のある1つの特徴によれば、ホストプロセスからのI/O要求が、データ量のしきい値を超える転送を必要とする場合、ホストのデバイスドライバは、I/O要求を2つかまたはそれ以上の単位I/O動作に分割する。それぞれのそのような動作は、ターゲットストレージサーバとのそれぞれ異なるソケットコネクションに割り当てられ、それによって、単位I/O動作は、ネットワークを介して並行して実行され、関係するI/Oデータが転送されてもよい。アーキテクチャのこの特徴は、比較的に大きなネットワーク帯域幅を比較的に大きなI/O要求に割り付けるのを可能にする。
【0010】
アーキテクチャのさらなる特徴は、ブロックレベルストレージサーバの物理記憶空間またはユニットを複数のパーティションに分割し、それらのパーティションをお互いに無関係にホストに割り付ける技法である。好ましい実施形態においては、1つのパーティションは、1つの特定のホストだけに割り付けられてもよく、あるいは、選択されたホストからなるグループに割り付けられてもよい(この場合には、異なるホストは、そのパーティションに対する異なるアクセス特権を有してもよい)。1つの特定のホストに割り当てられた1つのパーティションまたは複数のパーティションは、1つかまたはそれ以上の局所的なディスクドライブのように見え、かつ、そのように管理されてもよい。
【0011】
アーキテクチャの進歩性のあるさらなる特徴は、認証および発見プロトコルであり、そのプロトコルによって、ストレージサーバが、ホストを認証し、その後に、ホストに記憶リソースへのアクセスを許す前に、アクセス情報をそのホストに提供する。好ましい実施形態においては、ホストが、立ち上げられたとき、ホストは、まず最初に、ストレージサーバへのコンフィギュレーションソケットコネクションを確立する。このコンフィギュレーションソケットを使用して、ストレージサーバは、好ましくは、ドライバソフトウェアのバージョンに基づいたチャレンジレスポンス法を使用して、ホストを認証する。認証が成功すれば、ストレージサーバは、ストレージサーバへのデータコネクションのためにホストによって使用されるであろう動的ポートの識別子のようなアクセス情報と、そのホストに割り当てられたストレージサーバのパーティションに関する情報とをホストに提供する。アーキテクチャのこの特徴は、許可されないアクセスを防止する高い安全性を提供し、ストレージパーティションを個々のホストに確実に割り当てることができる。
【0012】
【発明の実施の形態】
以下、説明のためのものであり本発明の範囲を限定するものではない本発明の特定の実施形態の図面を参照して、これらの特徴およびその他の特徴を説明する。
【0013】
本セクションおよび添付書類に記載されるシステムアーキテクチャは、単独でまたは組み合わせて使用されてもよい本発明の様々な特徴を含む。いくつかのこれらの特徴は、他の特徴を備えずに実施されてもよく、および/または、特許請求の範囲に規定された本発明の範囲から逸脱することなく、ここに記載されたものとは異なって実施されてもよい。
【0014】
I.概論
本発明は、1つかまたはそれ以上のコンピュータネットワークを介してブロックレベルストレージアクセスを提供するシステムアーキテクチャからなる。このアーキテクチャは、1つのネットワークまたは組み合わせられたネットワークを介して通信するホストコンピュータとブロックレベルストレージサーバとをいくつでも組み込めるように設計される。一実施形態においては、アーキテクチャは、TCP/IPコネクションを介して、仮想ストレージブロックをエクスポートする。好ましい実施形態において、TCP/IPは、ホストコンピュータとブロックレベルストレージサーバとの間の通信に使用されるので、与えられたシステムのホストコンピュータとブロックサーバとをお互いに接続するのに様々なネットワークトポロジーを使用してもよい。例えば、比較的に小さなシステムの場合、ホストコンピュータとストレージサーバとは、ハブによってお互いに接続されてもよく、より大きなシステムの場合には、ハブは、スイッチに取り替えられてもよい。
【0015】
図1には、本発明を具体化した典型的なシステムのハードウェアコンポーネントが示される。システムは、10/100/1000Base−Tまたは1000Base−SXギガビットイーサネット(登録商標)カードのようなそれぞれのネットワークインタフェースカード106を介して、ネットワーク100によってお互いに接続されたホストコンピュータ102(「ホスト」)およびブロックレベルIPストレージサーバ104(「ブロックサーバ」)を含む。ホストコンピュータ102は、サーバまたはユーザコンピュータとして動作するように構成された標準的なPCまたはワークステーションであってもよい。ブロックサーバ104は、ブロックレベルデータストレージサービスをネットワーク100上のホストコンピュータ102に提供するネットワーク結合IPストレージボックスまたはネットワーク結合IPストレージデバイスであってもよい。
【0016】
図示された実施形態においては、ブロックサーバ104は、ディスクドライブ112からなるアレイを制御するディスクアレイコントローラ110を含む。このために、米国特許第6,098,114号に記載された種類のディスクアレイコントローラ110が使用されてもよく、その場合には、ディスクドライブ112は、ATA/IDEドライブであってもよい。ディスクアレイコントローラは、RAID0、RAID5、RAID10、および、JBODなどの様々なディスクアレイ構造をサポートしてもよく、また、好ましくは、複数のI/O要求を並行して処理することができるものである。さらに、ブロックサーバ104は、デバイスドライバおよび関係するソフトウェアを実行するためのCPUボードおよびプロセッサ108を含む。また、ブロックサーバは、I/Oデータをキャッシュするための揮発性RAM(図示しない)を含んでもよく、また、コンフィギュレーション情報(図8参照)を記憶するためのフラッシュメモリーまたはその他の不揮発性半導体メモリーを含んでもよい。
【0017】
一実施形態においては、ネットワーク100は、TCP/IPソケットをサポートするどのような種類のネットワークまたはどのような組み合わせのネットワークであってもよく、限定はしないが、ローカルエリアネットワーク(LAN)、無線LAN(例えば、802.11 WLAN)、広域ネットワーク(WAN)、インターネット、および、直接接続などが含まれる。1つの一般的な構成は、イーサネット(登録商標)ネットワークによって、ホスト102とブロックサーバ104とを局所的にお互いに接続して、イーサネット(登録商標)ベースSAN(ストレージエリアネットワーク)を生成することである。図1において破線で示されるように、ホスト102とブロックサーバ104とは、第2の組のネットワークカード106’を使用して、第2のネットワーク100’によってお互いに接続され、フォールトトレランスを増大させてもよい(以下で説明するように)。2つのネットワーク100、100’は、異なるメディアを使用しまた異なる転送速度を提供する異なる種類のネットワークであってもよい。様々なネットワークオプションのいくつかが、図3を参照して以下でより詳細に説明される。
【0018】
アーキテクチャのソフトウェアコンポーネント(構成要素)が、図2に示される。ホスト側102のソフトウェアアーキテクチャは、Unix(登録商標)、Windows(登録商標) NT、または、Linuxのようなオペレーティングシステム(O/S)202と、オペレーティングシステム202と通信するホスト側デバイスドライバ204(「ホストドライバ」)と、ホストドライバ204と通信するリーダ/ライタ(RW)コンポーネント200a(「エージェント」とも呼ばれる)とを含む。ストレージ側104のソフトウェアアーキテクチャは、リーダ/ライタ(RW)コンポーネント200bと、ストレージ側のデバイスドライバ206(「サーバドライバ」)とを含み、それらは、CPUボードのプロセッサ108(図1)によって実行される。サーバドライバ206は、サーバ側のRWコンポーネント200bから受信したI/O要求に応じて、ディスク操作を開始する。
【0019】
RWコンポーネント200a、200bは、好ましくは、2つで一組(1つのホスト側RWプロセスおよび1つのサーバ側RWプロセス)として確立された独立したプロセスとして実行され、それぞれのペアは、ネットワーク100を介して、それぞれのTCP/IPソケットだけのために使用される。ホストRW200aは、一般的には、ホストドライバ204からI/O要求を「読み込む」ことによって、そして、それらの要求をネットワーク100へ「書き込む」ことによって動作する。同様に、ストレージRW200bは、一般的には、ネットワーク100からI/O要求を読み込むことによって、そして、これらの要求をサーバドライバ206に書き込むことによって動作する。このプロセスは、その他のRWペアによる転送と同時に発生してもよく、また、ネットワーク100を介してどのような方向に発生してもよい。また、RWコンポーネント200は、好ましくは、転送されたI/Oデータのエラーチェックを実行する。
【0020】
それぞれのRWプロセス(および、それらの対応するソケット)は、好ましくは、それらのマシン102、104それぞれに常駐したままであり、コネクションに障害が発生し、あるいは、コネクションを終了するまでは、I/O要求を先入れ先出し方式で1つずつ処理する。ホストコンピュータ102は、専用コンフィギュレーションソケットを介して、関係するブロックサーバ104にサービス要求を送信することによって、ソケットを確立する。ソケットコネクションが、RWペア200aと200bとの間に確立されると、ソケットは、ホストコンピュータ102とブロックサーバ104との間の双方向トラフィックを制御する。
【0021】
図示された実施形態において、RWコンポーネント200は、それぞれ、ホストドライバ204およびサーバドライバ206から独立したプロセスとして動作する。あるいは、ホスト側のRW200aおよびストレージ側のRW200bは、例えば、以下に述べるものの1つかまたはそれ以上として実施されてもよい。すなわち、(a)(それぞれが)ホストドライバ204およびサーバドライバ206の一部、(b)(それぞれが)独立したデバイスドライバ204、206、(c)独立したカーネルスレッド、(d)1つのプロセス内の複数のスレッド、(e)複数のプロセス内の複数のスレッド、(f)1つのスレッド内の複数のプロセス。
【0022】
ホストコンピュータ102は、与えられた1つのブロックサーバ104への複数の論理コネクション(ソケット)を確立してもよく、および/または、以下で説明するように、複数の異なるブロックサーバ104へのソケットを確立してもよい。この特徴の大きな利点は、それによって、同一ホストからの複数のI/O要求を遮ることなく並行して処理できることであり(それぞれが、別個のソケットを介して)、1つのソケットに障害が発生した場合、その他のソケットを介して実行されるI/O要求は、その影響を受けない。それぞれのソケットは、それぞれのRWペアによって管理される。
【0023】
ホストドライバ204の重要な役割は、ブロックサーバ204によって提供されるストレージを仮想化することであり、それによって、オペレーティングシステムおよびその他のユーザレベルプロセスのようなホスト上のより高いレベルのすべてのソフトウェアプロセスは、ブロックサーバストレージを、1つかまたはそれ以上の局所的な物理ディスクドライブとみなすことができる。この役割を実現するために、ホストドライバは、そのようなコネクションの存在またはその他のネットワークの詳細をなにもユーザレベルプロセスに通知することなく、I/O要求をTCP/IPソケットコネクションに動的に割り当てる。ブロックサーバ104は、好ましくは、ホストのユーザレベルプロセスにとっては、SCSIデバイスのように見え、従来のボリュームマネージャを使用することができる。
【0024】
以下の第IIIのセクションで説明するように、アーキテクチャの一実施形態は、ブロックサーバ104の物理ストレージを複数の可変サイズのパーティションに分割するのを可能にする。そのようなパーティションのそれぞれは、1つかまたはそれ以上のホストに独立して割り当てられてもよく、また、それらのパーティションが独立した物理ディスクドライブとみなされて管理されるように構成されてもよい。別の実施形態においては、パーティションに分割することなく、ブロックレベルアクセスが、ホストに提供されてもよい。
【0025】
図3は、与えられたシステムのホスト102とブロックサーバ104とをお互いに接続するのに使用される様々なネットワーク100およびネットワークコンポーネントのいくつかを示す。これらには、ハブ302(LANセグメントを接続するのに一般的に使用される)、インターネット304、ルータ306(ヘッダー情報に基づいてパケットを送出するコンピュータ)、スイッチ308(LANセグメント間でパケットをフィルタリングおよび送出するデバイス)、および、ゲートウェイ310(2つの異なる種類のネットワークをお互いに接続するコンピュータ)が含まれる。このシステムアーキテクチャによれば、これらのネットワークオプションのどのような組み合わせでも、与えられたホストコンピュータ102とブロックサーバ104とをお互いに接続するのに使用することができる。
【0026】
このアーキテクチャの大きな特徴は、ネットワーク100のトラフィックが氾濫したときに、ネットワーク100のアドミニストレータが、ネットワーク100の能力をオンザフライで増大させることができ、あるいは、データをなんら消失させることなく、ネットワーク100のハードウェアを変更することができることである。ホスト側102およびストレージ側104のソフトウェアコンポーネントは、従来の方法を用いて、新しいネットワーク100コネクションが利用可能になったときにそれらのコネクションを検出および使用するように、また、コネクションが確立されるまで、動作を再試行するように構成される。例えば、ネットワーク100のアドミニストレータは、まず最初に、ネットワークハブ302を用いて、30台のホストコンピュータ102を少数のブロックサーバ104に接続してもよい。コンピュータの数が、ネットワークハブ302がもはや適切なものではない段階に達したとき、ネットワーク100をオフラインにすることなく、1000ポートのスイッチが、ネットワーク100に追加され、ハブ302は、取り除かれる。アーキテクチャは、このような役割をなす。なぜなら、ホストRW200aは、新しい物理的コネクションが利用可能になると、ストレージRW200bへの新しいソケットコネクションを自動的に生成するからである。
【0027】
アーキテクチャおよびそれに関連するストレージ制御プロトコルは、ブロック単位(例えば、512バイトのブロック)でアクセスすることのできる論理的に連続するバイトアレイとして、記憶リソースをホストコンピュータ102に提供する。実施形態の論理データストラクチャは、バイトレベルアクセスをサポートするが、ディスクドライブは、典型的には、所定のバイト数からなるブロックをエクスポートする。したがって、与えられたブロックにアクセスするために、ブロックアドレス(セクター番号)およびブロック(セクター)数が、提供される。一実施形態においては、プロトコルは、64ビットの論理ブロックアドレス(LBA)および64ビットのセクター数をエクスポートする。書き込み動作時には、ホスト側102において、I/O書き込みデータ要求が、ブロックストラクチャの中に入れられる。ブロック要求およびデータが、ホストRWプロセス200aによって管理される1つかまたはそれ以上のソケットコネクションを介して、ブロックサーバ104に送信される。さらに、アーキテクチャは、順次にではなくデータを記憶するのを可能にし、記憶媒体が、その空間を効率的に分割され、使用されていないセグメントを再利用するのを可能にする。
【0028】
図4に示されるのは、ネットワーク100を介して接続されたRWペア200によって生成された例としてのソケットコネクション400であり、ホストコンピュータ102をブロックサーバ104にリンクする。上述したように、ネットワーク100は、実際には、複数のネットワーク100からなり、まったく冗長なネットワーク100を含んでもよい。それぞれのホストコンピュータ102は、I/O要求を処理するのに必要であれば、1つかまたはそれ以上のいずれかのブロックサーバ104への1つかまたはそれ以上のソケットコネクション400を開くことができる(対応するRWペアを使用して)。例えば、ネットワーク100の長い応答時間、ソケットコネクション400における障害の発生、新しい物理的コネクションの使用可能性、および、I/O要求の増加に応じて、新しいソケットコネクション400を開いてもよい。例えば、ホストコンピュータ102は、まず最初に、第1のブロックサーバ104への2つのソケット400を開き、さらなる記憶リソースが必要になれば、その後に、もう1つのブロックサーバ104への2つのさらなるソケット400を開いてもよい。図示されるように、もう1つのホストコンピュータ102が、同じ組のブロックサーバ104へのソケットコネクション400を開いていてもよい。上述したように、それぞれのソケット400は、I/O要求を処理する独立したパイプラインとして動作し、エラーが発生するかまたはホスト102がソケットコネクション400を終了するまで、開かれたままである。
【0029】
II.I/O要求の処理
図5および図6は、ソケットコネクション400を介したホストコンピュータ102とブロックサーバ104との間のI/O読み込み動作および書き込み動作(それぞれ)に使用されてもよいネットワークストレージプロトコルを示す。図5および図6において、垂直線の上部に配置されているのは、以下のコンポーネントを表現する略語である。
【0030】
OS=オペレーティングシステム
HD=ホストドライバ204
HRW=ホストコンピュータのリーダ/ライタ200a
N=ネットワーク
SRW=(ブロックサーバの)サーバリーダ/ライタ200b
SD=(ブロックサーバの)サーバドライバ206
時間は、一定の縮尺率で示されてはいないが、これらの図面において上から下に行くにしたがって増加する。一方の垂直線から他方の垂直線への矢印は、一般的には、コンポーネント間のメッセージまたはデータの流れを表現する。同じコンポーネント(垂直線)において開始および終了する矢印は、そのコンポーネントが実行する動作を表現する。図における小さな円は、集合イベント(ランデブーイベント)を表現する。
【0031】
一実施形態においては、図5に示されるように、ホストリーダ/ライタ(HRW)は、まず最初に、I/Oコマンドパケットとして、要求1Hをホストドライバ(HD)に送信し、ソケットが利用可能であることを通知する。このステップは、「そちらになすべき業務があれば、こちらに回して下さい」というメッセージとみなすことができる。図示されるように、ホストドライバは、その結果として、I/O要求を指定したコマンドパケットを戻すことによって、この要求に応答する。符号2Hを付された矢印によって表現されるように、ホストリーダ/ライタ(HRW)は、コマンドパケットをネットワーク汎用命令に翻訳する。このステップは、様々なクロスプラットフォームのコンピュータ言語が共通のネットワーク100上で機能するのを可能にする。ホストコマンドパケットすなわちホスト言語からネットワークコマンドパケットすなわちネットワーク言語への局所的な計算変換は、アーキテクチャに固有のものである。
【0032】
この時点において、ホストリーダ/ライタ(HRW)は、2つのネットワークイベント3Hおよび4Hを生成する。メッセージ4Hは、3Hから、ネットワーク100を介して受信ネットワーク応答パケットを送ることを表現し、以下で説明される。メッセージ3Hは、ネットワーク汎用コマンドパケットが、既存の「ピン留めされた」TCP/IPコネクションを介して書き込まれることを表現する。好ましい実施形態においてこの転送が発生するためには、1Sによってランデブーが実施されなければならず、これは、ネットワーク100がコマンドパケットを受信するように要求することを表現する。この要求1Sは、なすべき「業務」がなければ、無限に待つ能力を有する。ネットワーク100とのランデブーが、達成されると、コマンドパケットが、ブロックサーバのリーダ/ライタ(SRW)によって受信され、ステップ2Sにおいて、SRWによってサーバ側の言語に再翻訳される。ステップ2Sは、2Hで示されるホストコマンドパケットからネットワークコマンドパケットへの翻訳に類似する。
【0033】
図5にさらに示されるように、メッセージ3Sは、サーバ側リーダ/ライタが、コマンドパケットをサーバドライバ(SD)206に送ることを表現する。コマンドパケットに含まれるものには、次のものがある。I/Oユニット番号(あらゆる種類のストレージディスクに存在するディスクドライブパーティションの論理識別子である小さな整数)、コマンド(読み込み動作または書き込み動作などのコマンドの種類を指示する小さな整数)、論理ブロック開始アドレス(I/O動作のための開始ブロックまたは開始セクターを指示する整数)、および、ブロック数(I/O動作のためのブロック数またはセクター数を指示する整数)。
【0034】
コマンドパケットが、サーバデバイスドライバ(SD)に配信された後、応答がサーバ側リーダ/ライタ(SRW)に送り返される。4Sによって示されるように、サーバ側リーダ/ライタは、ステップ4Sにおいて、この応答パケットをストレージ側命令からネットワーク命令に変換する。それに続いて、5Sおよび6Sによって示されるように、応答パケットのネットワーク書き込み(5S)と、読み込みによるI/Oデータのネットワーク書き込み(6S)とが、同時に発生する。
【0035】
その後、ランデブーが、応答パケット(5S)とネットワーク読み込み要求(4H)との間で発生し、ネットワーク読み込み要求が達成されたことを表す。このステップは、次の2つの理由のために実行される。(1)ネットワーク応答パケットがエラーを検査された後、そのネットワーク応答パケットが完了ステータスを含むかどうかを判定する。そして、(2)読み込み動作が失敗である場合、要求されたデータがホスト102に戻されるのを防止する。それらが満足されると、5Hにおいて、ネットワーク応答パケットが、ホスト応答パケット言語に翻訳される。
【0036】
次に、I/O(読み込み)データのために、ネットワーク読み込み要求6Hが、存在する。この要求6HはI/O読み込みデータのネットワーク書き込み6Sによって達成され、I/O読み込みデータがホストコンピュータへ転送される。最後に、7Hにおいて、ホストリーダ/ライタはI/O動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【0037】
図6に示される書き込み動作に関しては、ステップは、3Sまで読み込み動作とまったく同様である。以下の記述は、残るI/Oデータ転送およびネットワーク100の動作に関して、残りのステップを説明する。
【0038】
このI/O動作に対応する書き込みデータは、ネットワーク100によって受信され、ステップ3Sにおいて、受信動作が、ブロックサーバ104によってネットワーク100に送られる。このネットワーク読み込みは、ステップ2Sにおいてネットワークコマンドパケットをストレージシステム言語に翻訳した後に発生する。これは、ネットワークコマンドパケットのエラー検査の後、ネットワーク読み込み動作が適切な長さで送られるのを保証するものである。ステップ4Sにおいて、ブロックサーバ104はストレージシステムコマンドパケットをサーバドライバ(SD)に送信する。このコマンドパケットは、読み込みの場合に説明したものと同じ種類の情報を含む。SDは、指定された書き込み動作が論理的に(または、物理的に)完了した後、応答パケットを戻し、それに続いて、ステップ5Sにおいて、その応答パケットは、ネットワーク命令に変換される。このネットワーク応答パケットは、ステップ6Sにおいてネットワークにコマンドを送信することによって、ホストコンピュータ102に送信される。このネットワーク応答パケットは、ホストコンピュータ102によって受信され、ステップ6Hにおいてホスト応答パケットに翻訳される。それに続いて、ホストコンピュータ102は、I/O動作を完了するためにコマンドをHDに送信する。ステップ6Hおよび7Hは、図5に示される読み込み動作のステップに類似しており、ホストリーダ/ライタは、I/O動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【0039】
添付書類AおよびBは、本発明の一実施形態によるホスト側およびサーバ側の論理をより詳細に説明するものである。さらに、添付書類Cは、ホスト102とブロックサーバ104とが通信するプロトコルの一実施形態を詳細に説明するものである。これらの添付書類のいくつかの箇所は、いくつかのシステム機能しか動作することのできない試作段階の実施形態に対応している。
【0040】
図7は、ユーザレベルアプリケーションからのI/O要求が、それらのアプリケーションに透過的に、すなわち、アプリケーションとソケットとの間の固定されたマッピングを必要とせずに、TCP/IPソケットコネクションにどのようにして動的に割り当てられるかを示す。さらに、図7は、一実施形態において、I/O要求を複数のソケットコネクションを介して並行して発行および実行することのできるより小さいI/O動作にどのようにして細分化することができるかを示す。この図においては、ホスト側のRWコンポーネント200aは、「エージェント」と呼ばれる。
【0041】
この例において、ホスト102で実行されている複数のアプリケーション(APP1〜APP3)からのI/O要求は、複数のTCP/IPコネクションを介して、並行して処理される。具体的には、それぞれのアプリケーションは、それぞれのI/O要求R1〜R3を要求キュー730に登録している。I/O要求が要求キュー730に登録されると、関連するブロックサーバへのコネクションを有する次の利用可能なエージェント200aが、キューから要求を取り出し、その要求の処理を開始することによって応答する。この例においては、第1のエージェントであるエージェント1が、要求R1を取り出し、そのエージェント自身のソケットコネクションを介して、R1の処理を開始する。同様に、要求R3は、エージェント5によって取り出され、そのエージェント5は、要求を処理し、そのエージェント5自身のソケットを介して、その要求を完了する。しかしながら、APP2からのI/O要求R2は、より大きなデータ転送を必要とする。したがって、ホストドライバは、R2を3つの単位I/O要求または動作に分解し、それらのI/O要求または動作のそれぞれは、それぞれのエージェント(エージェント2、3、および、4)によって、それぞれのソケットコネクションを介して、通常のI/O要求と同じように処理される。したがって、I/O要求R2のそれらの下位要求は、複数のコネクションを介して並行して処理され、効率を増大させることができる。
【0042】
一実施形態においては、64kバイトを超えるデータ転送を必要とするI/O要求は、64kバイトかまたはそれ以下のブロックのI/O要求に細分化される。それぞれの単位I/O要求は、そのI/O要求に対応する元々のアプリケーションレベルI/O要求の識別子を備えたタグを適切に付けられる。単位I/O要求のすべてが、完了すると、ホストドライバは、アプリケーションレベルI/O要求の完了を報告する。この特徴の大きな利点は、それぞれのI/O要求に割り当てられるネットワーク帯域幅の大きさが、一般的には、転送されるI/Oデータの量に比例することである。
【0043】
III.ホストへのパーティションの割り付け
アーキテクチャに取り込まれてもよい1つの特徴は、それぞれのブロックサーバ104の物理記憶空間をより小さなユニットに効率的に分割し、それらのユニットを個々のホスト102に効率的に割り付けまたは割り当てるための技法である。この特徴を使用すると、複数のホスト102が、ブロックサーバを共有することができ、ホスト102のそれぞれは、自分専用のディスクドライブまたは自分専用のディスクドライブの組を「認識」することができる。この特徴の一実施形態が、図8に示される。
【0044】
図8に示されるように、それぞれのブロックサーバ104のディスク空間全体が、複数の可変サイズのデータストレージユニットすなわち「パーティション」にセグメント化または細分化されてもよく、それぞれのパーティションは、他のパーティションとは無関係にアクセス特権を有してもよい。これらのストレージパーティションは、好ましくは、ネットワークアドミニストレータによって、ブロックサーバ104で実行されているコンフィギュレーションおよびマネージメントプログラム820に接続するための標準的なウェブブラウザ810を用いて、またはブロックサーバ104で実行されているコマンドシェルインタプリタに直接に接続するコマンドラインインタフェースユーティリティを用いて(図示しない)、生成されかつ割り付けられる。
【0045】
それぞれのパーティションは、サイズ、「読み込み専用」、「読み書き」、または、アクセス前のゼロデータなどの属性によって、および許可されたホスト102のリストによって、独立して構成されてよい。例えば、パーティション#1は、「20GB、ホストAからは読み込み専用、ホストBおよびCからは読み書き」であるように構成されてもよく、パーティション#2は、「40GB、ホストAだけから読み書き」として構成されてもよい。さらに、それぞれのパーティションは、ホストのユーザレベルソフトウェアプロセスがパーティションを独立した物理ディスクドライブとみなして管理できるような形で、個々のホストコンピュータ102に確実にエクスポートされることが可能である。
【0046】
好ましい実施形態においては、パーティションのそれぞれは複数のディスクドライブ112の記憶空間を含んでもよく、さらに、いずれかの与えられたディスクドライブ112の記憶空間はパーティションを生成するために細分化されてもよい。ブロックサーバ104内に現時点で定義されている1つかまたはそれ以上のパーティションごとに、コンフィギュレーション/マネージメントプログラム820は、それぞれのパーティションテーブル830を、ブロックサーバ104のフラッシュメモリーまたはその他の不揮発性メモリー840内に維持する。このテーブル830は、パーティション内に含まれるディスクドライブ(または、いくつかのディスクドライブ)およびセクターを指定するコンフィギュレーションデータ、そのパーティションを使用するのを許可された1つかまたはそれ以上のホスト102のIPアドレス(または、いくつかのIPアドレス)、および、それに関係するアクセス特権を含む。さらに、不揮発性メモリー840内に記憶されたパーティションテーブル830または別のコンフィギュレーションストラクチャは、好ましくは、そのブロックサーバとのI/O動作のためにそれぞれのホストによって確立されてもよいソケットコネクションの最大数を指示するデフォルト値またはアドミニストレータ指定データを含む。次のセクションで説明するように、好ましくは、立ち上げ中にホスト102は当該ホストが探し出したそれぞれのブロックサーバ104への専用コンフィギュレーションソケットコネクション400を確立し、そのホストに割り当てられたパーティションのリスト(もしあれば)とそれらのパーティションのサイズとを得るために、このコンフィギュレーションコネクションを使用する。
【0047】
一実施形態においては、1つのブロックサーバ104につき最大100までのパーティションが生成されてもよく、また与えられた1つのホスト102につき最大16までのパーティションが割り当てられてもよい。それぞれのホスト102は、論理ブロックアドレス(LBA)0から始まるそのホストのそれぞれのパーティションを認識する。ブロックサーバ104は、それぞれのI/O要求で送信された(IPアドレス、パーティション番号、LBA)の組をI/O要求のたびに「物理LBA」にマッピングする。パーティションへのアクセスは、好ましくは要求したホスト102のIPアドレスに基づいて、ブロックサーバ104によって認可または拒否される。
【0048】
アーキテクチャのこの特徴を使用すれば、ネットワークアドミニストレータは、ホストで実行されているアプリケーションレベルソフトウェアに透過的に、ブロックサーバ記憶リソースをホスト104に柔軟にかつ動的に割り付けることができる。図8に示される例においては、ブロックサーバ104は、5つのセグメントまたはパーティションを有し、それぞれのパーティションは、可変のサイズを有する。パーティション0は、ブロックサーバで利用可能な割り当てられていないすなわち「空き」のディスク空間を表現し、そのパーティション0はさらなるパーティションを生成するのに使用されてもよく、および/または、すでに割り付けられているパーティションのサイズを増加させるのに使用されてもよい。この例においては、まず最初にパーティション1、2、および3が生成され、それぞれ、ホスト1、2、および3に割り当てられた。その後に、ホスト1のストレージ需要の増大に対処するために、新しいパーティションであるパーティション4が生成され、ホスト1に割り当てられた。ホスト1だけに割り付けられた2つのパーティション(1および4)は、ホスト1コンピュータ102に直接に設置されたディスクドライブの単一ドライブセグメントかまたは2つの別個の独立したディスクドライブのように見えるように構成されてもよい。図8においては、1つのパーティションが、1つのホスト102に割り当てられるように示されているが、1つのパーティションが、2つかまたはそれ以上のホスト102からなるグループに割り当てられてもよい。
【0049】
コンフィギュレーション/マネージメントプログラム820は、好ましくは、アドミニストレータがパーティションを生成および管理するのを可能にする様々なコマンドおよび機能をサポートする。上述したこれらの役割に加えて、プログラム820は、パーティションを削除し、またパーティションの所有権を変更する機能を提供する。削除されたパーティションから得られる空間は、好ましくは、再利用され、「最適適合」アルゴリズムを用いて再び割り付けられる。
【0050】
IV.認証および発見
アーキテクチャに取り込まれてもよいその他の特徴は、ブロックサーバ104がホスト102を認証するのを可能にするプロトコルである。具体的には、I/Oをすぐに開始させるのではなく、むしろ、それぞれのブロックサーバ104は、新しいホスト102にI/O動作を実行させる前に、その新しいホスト102を認証するように設計されてもよい。好ましい実施形態においては、認証プロセスは、ホスト側ドライバ204およびサーバ側ドライバ206内に含まれる「認証および発見」プロトコルの一部として実行される。
【0051】
具体的には、好ましい実施形態においては、ホスト102は、立ち上げ時に、次の2つの方法の1つを使用して利用可能なブロックサーバ104を探し出す。すなわち、(1)アドミニストレータによって予め設定されたホスト側コンフィギュレーションファイルを使用し、あるいは、(2)そのホスト102のサブネット上のすべてのブロックサーバ104を発見するために、ブロードキャストパケットを使用する。(2)の方法によれば、それぞれのブロックサーバ104は、好ましくは、そのサーバ104を探し出し、ネットワークを介してそのサーバ104を遠隔から構成するのを可能にするデーモンプロセスを含むが、IPアドレスは使用しない。そして、探し出されたブロックサーバ104ごとに、ホストは、認証および発見の段階に入り、その好ましい実施形態が図8に示されるが、エラー状態は示されていない。
【0052】
図9に状態910によって示されるように、ホスト102は、まず最初にコネクション要求を探し出したブロックサーバ104に送信し、状態915において、ブロックサーバ104はその要求を受け入れることによって応答する。状態920において、ブロックサーバ104は、ブロックサーバ104によってサポートされるソフトウェアバージョンのリストとともに、認証「チャレンジ」の役割をなすブロックサーバによって生成された乱数を戻す。状態925において、ホスト102は、リストから適切なバージョンを選択し、ブロックサーバ104に応答する。また、ホスト102は、予め定められた一組の数学演算をブロックサーバ104から受信された乱数に対して実行する。これらの演算は、好ましくは、プロトコルのバージョンごとに異なり、ただ単に新しいバージョンを追加するだけで、セキュリティアーキテクチャを容易に強固なものにすることができる。バージョンによって指定された数学演算の結果として、ブロックサーバ104によって送信された乱数「チャレンジ」から得られた値は、チャレンジに対するホストの「応答」として、ブロックサーバ104に送り返される。そして、状態930において、ブロックサーバ104は、(ホストに送信されたチャレンジおよび選択されたバージョンを与えて)予想応答を計算し、この予想応答をホスト102からの実際の応答と比較することによって、ホスト102を認証する。その応答が予想応答と一致しなければ、アクセスは拒否され、ホスト102とブロックサーバ104との間のすべてのソケットが閉じられる(図示しない)。一致すれば、状態935において、ブロックサーバ104は認証に成功したことを通知する肯定応答をホスト102に送り返す。
【0053】
状態940において、ホスト102は、与えられたブロックサーバ104においてホストに割り付けられる利用可能な容量を計算するようにとの要求を送信する。状態945において、ブロックサーバ104は、そのホストに割り当てられるパーティションの数およびそれらのパーティションのサイズを指定するデータによって、ホスト102に応答する。また、ブロックサーバ104は、I/Oトラフィックのためにホスト102とブロックサーバ104との間で確立されてもよいデータコネクションの最大数を指定し、かつ、それらのコネクションを確立するのに使用されてもよい動的ポートを指定するデータを戻す。状態950において、ブロックサーバ104は、許可されたホスト102から発生するトラフィックのために「リッスン(Listen)」ソケットを確立する。その後、ホストは、ブロックサーバによって指定されたデータコネクションの最大数まで、これらのソケットへのコネクションを確立してもよい。
【0054】
したがって、ホスト102と特定のブロックサーバ104との間の認証および発見の段階が完了すれば、ホスト102は、ブロックサーバに関する次の情報を通知されている。すなわち、(1)ホストは、データのためにどの動的ポートに接続できるか、(2)ホストに割り当てられたパーティションの数、(3)それらのパーティションのサイズ、である。
【0055】
認証および発見の段階を実施する市販ソフトウェアのさらなる詳細な説明が、添付資料Dに提供される。「ネットワークストレージユニット」または「NSU」という用語は、添付資料Dの全体を通して、ブロックサーバ104を実施する市販ソフトウェアを参照するのに使用される。
【0056】
特定の好ましい実施形態によって本発明を説明したが、この分野で通常の知識を有する者が考えだすことのできる異なる実施形態は、ここで説明した特徴および利点のすべてを提供しない実施形態も含めて、本発明の範囲内にある。したがって、本発明の範囲は、添付の特許請求の範囲に記載される。
【0057】
添付資料A
【0058】
添付資料B
【0059】
添付資料C
この資料は、ブロックサーバと通信するために、クライアントホストコンピュータが使用するストレージ制御プロトコル(SCP)を説明するものである。
【0060】
ストレージ制御プロトコルは、現在、TCP/IPを介して実行され、様々なプラットフォームで利用することができる。サポートされるオペレーティングシステムのいくつかの例としては、Windows(登録商標) NT、Linux、MacOS、Windows(登録商標) 2K、FreeBSD、および、Solarisなどがある。この資料は、主として、クライアントホストコンピュータの観点から書かれたものである。
【0061】
読み込みコマンドまたは書き込みコマンドは、128キロバイト(128KB)のデータしか要求することができない。
コネクション
現在、ブロックサーバとのI/Oを実行するために要求されるのは、ただ1つのTCP/IPコネクションだけである。ブロックサーバプロセスは、良く知られているポートを介して、入力コネクションを受け入れる。ホストは、冗長性およびより大きなスループットのために、1つのブロックサーバへの複数のTCP/IPコネクションを使用してもよい。
【0062】
認証および発見のために、補助的なコンフィギュレーションコネクションまたは「制御チャンネル」が、使用される(添付資料D参照)。認証および発見プロセスは、ホストに以下の情報を提供する。
−ブロックサーバに接続するために、ホストは、どの動的ポートを使用できるか、
−ブロックサーバが特定のホストに割り付けたパーティションの数、
−パーティションのサイズ。
ブロックサーバへのホストコネクションの確立およびI/Oの実行
ブロックサーバに接続するためには、ホストは、2つの情報が必要である。すなわち、
(1)ブロックサーバの名前またはIPアドレス、
(2)ブロックサーバが入力コネクションを受け入れる良く知られているポート番号。
【0063】
ホストは、標準Berkeleyソケットconnect()コールを使用して接続してもよい。ブロックサーバは、良く知られているポートに対してaccept()を実行することに注意されたい。
I/Oプロトコル
ホストは、まず最初に、ネットワーク命令内にある512バイトの要求ストラクチャをブロックサーバに送信することによって、読み込みまたは書き込みを開始する。その後、データが、読み込まれまたは書き込まれる。要求ストラクチャ(znreq_t)は、応答ストラクチャ(znres_t)と同じものである。これらのストラクチャは、以下で定義される。ホストのための疑似コードは、次の通りである。
1.データポートのブロックサーバに接続する。
2.ループ。
【0064】
2a.適切なフィールドに詰めることによって、znreq_tを満たし、すべてをネットワークバイト命令に変換する。
【0065】
2b.ブロックサーバにznreq_tストラクチャを送信する。
例えば、512バイトの要求ストラクチャをネットワークを介して書き込むために、send()コールを使用する。
【0066】
2c.書き込みの場合、すべてのデータを送信する。
例えば、64Kバイトを書き込む場合、64Kバイト全部を書き込むまで、1回かまたはそれ以上の回数だけsend()をコールする。
ネットワークバイト命令への変換は、なされない。
【0067】
2d.znres_tストラクチャ(znreq_tストラクチャと同じ)をブロックサーバから読み込む。ネットワークバイト命令からホスト命令に変換する。例えば、recv()をコールすることによって、512バイトを読み込む。
【0068】
2e.読み込みコマンドの場合、ブロックサーバからすべてのデータを読み込む。例えば、32Kバイトを読み込む場合、32Kバイト全部を読み込むまで、1回かまたはそれ以上の回数だけrecv()をコールする。
データ構造
ただ1つのネットワーク要求データ構造が定義される。それは、512バイトの長さである。遠隔のマシンに送信される前に、すべてのフィールドは、ネットワーク命令に個々に変換される。これは、htonl()またはntohl()のような標準的な機能を使用することによって実施されてもよい。C言語による実施形態は、次の通りである。
【0069】
添付資料D−ネットワークストレージユニット(NSU)コンフィギュレーションプロトコル
NSU上には、/etc/nsu.confと呼ばれるコンフィギュレーションファイルが存在する。とりわけ、このファイルは、ホストごとのユニット定義および割り付け機能を構成および管理するのに使用されるデータを含む。このファイルは、3DMユーティリティーによってのみ編集することができる。「HOST」エントリーのシンタックスおよびセマンティックスが、以下に示される。
【0070】
上述の補足説明:
−「ホスト1」は、構成されているホスト側インタフェースのためのIPアドレスを含む。
−DATA_PORTフィールドは、NSU側IPアドレスおよびポート番号を表現し、制御プロセスは、そのリモートIPアドレスからの要求に対して、データコネクションが確立されるのを待つ。
−ポート番号の後の(10)および(12)は、NSUがそのポートに確立するコネクションの最大数を表現する。これは、並行して実行することのできるIPアドレスごとのI/O動作の数を効率的に制限する。NSUによって使用されるストレージ抽象化は、ストレージをIPアドレスにマッピングすることに注意されたい。したがって、アドレス寿命の短いDHCPクライアントのような、それらのIPアドレスを頻繁に変更するホストは、このアーキテクチャにおいては、うまく機能しない。
−twed*フィールドは、リモートユニットがマッピングするローカル(NSU側)ユニットを表現する。(twedという用語は、NSUのディスクである3ware Escalade Diskを意味する)
−(x,y)は、NSUがその特定のリモートユニットに割り付けたlba範囲である。
コンセプト:
(1)どのようなクライアントも、複数のIP/ポートの組み合わせで、複数のデータコネクションを有することができる。
(2)どのようなクライアントも、複数のユニットを有することができ、ユニットは、ブロックサーバの特定の物理ユニット上のLBA範囲として定義される。
(3)このプロトコルのこの例においては、NSUは、100ユニット以上に分割されることはない。
プロトコル(すべての数値は、ネットワーク命令で送信される):
(1)(必須要件)ホストは、NSUコンフィギュレーションポート(デフォルト値として、ポート10001)に接続する。このコネクションは、1024以下のポート番号を備えたTCP/IP「特権ポート」から発行されなければならない。(いくつかのオペレーティングシステムは、1024以下の番号を有するポートを「予約ポート」と呼ぶ)
(2)NSUは、コネクション要求を受け入れ、それが1024以下のポート番号から入力していることを確認し(もしそうでなければ、NSUは、コネクションを閉じる)、タイプznreq_tのメッセージを送信することによって、ホストに応答し、演算コードは、Z_GET_VERSION(0×1005)にセットされ、NSUプロトコルバージョンのビットマスク(現在、0×01)が、zn_versionフィールドにセットされ、32ビットの疑似乱数が、zn_reqsz_loフィールドに詰められる。
(3)(必須要件)ホストは、NSUからZ_GET_VERSION要求を受信し、サポートされたバージョン番号のホスト自身のビットマスクとNSUによって供給されたバージョン番号との間で論理積演算を実行する。これらのバージョン番号は、NSU側およびホスト側において共通形式で表現される。論理積演算の結果が、0であれば、一致するバージョンが存在せず、ホストは、コネクションを閉じなければならず、バージョン不一致エラーをローカルオペレーティングシステムに通知する。論理積演算の結果が0でない値であれば一致しており、ホストは、ホストおよびNSUによってサポートされるどのバージョンを選択してもよい。この値は、NSUに送り返されるznreq_tストラクチャのzn_versionフィールドに詰められる。実際には、zn_versionフィールドは、ホストおよびNSUの両方がサポートしていることを示す「一致する最も大きな値」にセットされることを推奨する。さらに、ホストは、要求のzn_reqsz_loフィールドから得られる32ビットの疑似乱数の1の補数を計算して、その値をznreq_tリターンストラクチャのzn_reqsz_loフィールド内に詰めなければならない。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。そして、このznreq_tストラクチャは、NSUに送り返される。(通常の場合、NSUによって送信された疑似乱数は、その後に、プロトコルのステップ(14)において使用されることにも注意されたい。)
(4)NSUが、そのNSUがステップ(2)において送信したZ_GET_VERSION要求に対する応答を5秒以内に受信しなければ、NSUは、コネクションを閉じ、そのNSUの「受け入れ」状態に戻る。
(5)NSUが、ホストからの応答を割り当てられた時間の5秒以内に受信した場合、NSUは、zn_reqsz_loフィールド内にある値を検査して、その値が、実際に、NSUが送信した疑似乱数の32ビットの1の補数であるかどうかを確認する。そして、NSUは、応答をホストに送り返し、zn_reqsz_loフィールドが、期待値を含んでいれば、zn_statusフィールドは、0にセットされ、期待値を含んでいなければ、−1にセットされる。期待値でない場合、応答メッセージを送信した後、NSUは、コネクションを閉じる。
(6)(選択要件)成功した場合、ホストは、Z_GET_STARTTIMEという演算コードを備えたznreq_tをNSUに送信してもよい。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
(7)(選択要件)Z_GET_STARTTIME命令に応答して、NSUは、znreq_t応答を送り返し、zn_reqsz_loフィールドは、/etc/nsu.confファイルが最後に変更された時間を表現する不透明な「クッキー」を詰められる。これは、クライアントドライバが、NSUコンフィギュレーションチャンネルへのそれのコネクションを消失した場合、そのクライアントドライバが、再接続されたときに、わかっているそれの最後の状態がまだ有効かどうかを判定するためになされる。クッキーフィールドの実際の値は、アプリケーションからは不透明である。ドライバは、クッキーの古い値と新しい値とが等しいかどうかをテストするだけでよい。クッキーに対するその他の操作は、定義されていない。この応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(8)(必須要件)ホストは、演算コードZ_GET_CAPACITIESを備えたznreq_tをNSUに送信しなければならない。この要求内にあるその他のすべてのフィールドは、無視される。
(9)Z_GET_CAPACITIES要求に応答して、NSUは、znreq_t応答を送り返し、そのストラクチャのzn_reqsz_loフィールドは、そのホストが利用できるユニットの数、それに続いて、そのユニットの数だけのunit64_tを詰められ、そのunit64_tは、ユニットごとの容量を指定する。これらの容量は、単位がバイトで指定される。zn_reqsz_loフィールドが、0を含んでいれば、これは、NSUが、それのいずれかのストレージへのアクセスを、要求を送信したホストに提供するようにはまだ構成されていないことを意味する。応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(10)(必須要件)ホストは、演算コードZ_GET_DATAPORTを備えたznreq_tをNSUに送信する。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
(11)ホストからのZ_GET_DATAPORT要求に応答して、NSUは、znreq_t応答を送り返し、zn_reqsz_loフィールドは、開くのを許可されるデータIP/ポートコネクションの数、それに続いて、そのデータIP/ポートコネクションの数だけの以下のストラクチャを詰められる。
【0071】
応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(12)NSUは、適切な数のデータチャンネルに「リッスン」ソケットを確立し、ホストからのコネクションを待つ。
(13)ホストは、それが選択した数だけ、上述したホストごとのDATAPORTコンフィギュレーションセクションのmax_connectionsフィールドに指定された最大数まで、それらのソケットに接続する。(max_connectionsを超えてさらなるデータコネクションを生成しようとすれば、「拒絶されたコネクション」として失敗する。)
(14)そして、ホストは、znreq_tメッセージをそれぞれのデータソケットに送信し、そのホストがステップ(2)においてNSUから受信した疑似乱数が、ストラクチャのzn_reqsz_loフィールドに入れられる。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(15)NSUは、znreq_tメッセージによって、ステップ(14)において送信されたメッセージに応答し、zn_statusフィールドは、成功した場合には0に、失敗した場合には1にセットされる。
(16)この時点において、コンフィギュレーションおよび認証プロトコルが、完了し、ホストからのデータ転送要求が、NSUによって受け付けられる。
実施にあたっての一般的注意事項:
(1)NSUボックス上のそれぞれのデータポートは、どのようなユニットに対してもI/O要求を処理することができる。
(2)NSUが、コンフィギュレーションソケットが閉じられていることを検出することがあれば、NSUは、そのホストに関係するすべてのデータポートコネクションを閉じ、ホストが、再接続し、かつ、コンフィギュレーションプロトコルを再実行するのを待つ。したがって、コンフィギュレーションが完了したとき、ホスト側は、コンフィギュレーションソケットを閉じないことが重要である。なぜなら、シャットダウンおよび新しいユニットの追加などのイベントをホストに通知するのに使用されるのはそのソケットであるからである。ホストが、混乱状態でコネクションを整頓するのに敢えて使用できる1つの方法は、コンフィギュレーションソケットを閉じることである。ホストとNSUとの間にネットワークコネクティビティが存在する場合には、NSUは、閉じたことを検出し、コンフィギュレーションソケットに関係するすべてのデータソケットを閉じる。
(3)NSUが、/etc/nsu.confファイルを再び読み込むことがあれば(NSUコンフィギュレーションをアドミニストレータが更新したために)、NSUは、それらのユニット情報を変更されたすべてのホストに対するコンフィギュレーションソケットを閉じ、それらのホストが、再接続し、コンフィギュレーションプロトコルを再実行し、そして、新しいコンフィギュレーションデータを取り込むのを待つ。したがって、ホストドライバは、NSUコンフィギュレーションポートへのコネクションを開いたままにしておく必要があり、NSUによってそれが閉じられたことを、コンフィギュレーションプロトコルを再実行してユニットおよびデータポートのコンフィギュレーションを再確立するための信号として使用しなければならない。
【図面の簡単な説明】
【図1】本発明を実施してもよいシステムの主要なハードウェアコンポーネントを例として示す図であり、ホストコンピュータおよびブロックサーバを含む。
【図2】図1に示されるシステムのソフトウェアアーキテクチャを示す図であり、本発明に基づいて動作するホスト側およびサーバ側のデバイスドライバおよびリーダ/ライタ(RW)コンポーネントを含む。
【図3】ホストとブロックサーバとをお互いに接続するのに使用することのできるネットワークおよびネットワークコンポーネントの種類の例を示す図である。
【図4】並行ソケットコネクションが、リーダ/ライタコンポーネントのペアの間でどのようにして確立されるかを例として示す図である。
【図5】ホストコンピュータがブロックサーバから読み込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図6】ホストコンピュータがブロックサーバへ書き込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図7】I/O要求が、ユーザレベルアプリケーションに透過的に、ソケットコネクションにどのようにして割り当てられるかを示す図であり、また、複数のTCP/IPコネクションを介して処理するために、I/O要求をどのようにして細分化することができるかを示す図である。
【図8】ブロックサーバの物理ストレージを複数のパーティションにどのようにして分割することができるかを示す図であり、それぞれのパーティションは、1つかまたはそれ以上のホストコンピュータに独立して割り付けられてもよい。
【図9】認証および発見プロトコルを示す図であり、このプロトコルによって、ホストコンピュータは、ブロックサーバによって認証され、その後に、ブロックサーバにアクセスするための情報を得る。
本明細書は、本発明を実施する市販ソフトウェアの詳細な説明を記載した添付書類A〜Dを含む。これらの添付書類は、説明のために提供されたものであり、本発明の範囲を規定または限定するものではない。
【0002】
【発明の属する技術分野】
本発明は、コンピュータネットワークのためのストレージ(記憶)システムに関し、より詳細には、ネットワーク上の記憶リソース(記憶資源)にブロックレベルでアクセスするためのソフトウェアアーキテクチャに関する。
【0003】
【従来の技術】
ホストコンピュータがネットワーク上のハードディスクドライブおよびその他の記憶リソースを共有するのを可能にする様々な種類のアーキテクチャが、存在する。1つの良く知られている種類のアーキテクチャは、中央ファイルマネージャを使用することである。このアーキテクチャの1つの問題は、中央ファイルマネージャの不具合が、システム全体を動作不能にする場合があることである。もう1つの問題は、多くのソフトウェアアプリケーションは、中央ファイルマネージャを使用するようには設計されていないことである。
【0004】
ストレージアーキテクチャの中には、中央ファイルマネージャを使用せずに、ホストコンピュータがネットワークを介して記憶リソースに直接にアクセスするのを可能にすることによって、これらの欠陥を克服したものもある。典型的には、これらのアーキテクチャは、ホストが、ネットワーク接続(コネクション)を介して、(ファイルレベルとは対照的に)ブロックレベルで記憶リソースにアクセスするのを可能にする。この種のアーキテクチャの1つの問題は、I/O要求の障害が、同一ホストからのその他の未処理の要求を遅延させる場合があることである。もう1つの問題は、このアーキテクチャが、ネットワーク障害にきわめて弱いことである。
【0005】
【課題を解決するための手段】
本発明は、中央ファイルマネージャを必要とせずに、ディスクアレイのような記憶リソースにコンピュータネットワークを介してブロックレベルでアクセスするためのシステムアーキテクチャを備える。このアーキテクチャは、単独でまたは組み合わせて実施されてもよい様々な進歩性のある特徴を含む。
【0006】
アーキテクチャの1つの特徴は、同一のホストコンピュータ(「ホスト」)からの並行な入力/出力(I/O)要求が、別個の論理ネットワーク接続またはソケット(好ましくは、TCP/IPソケット)を介して処理されることである。例えば、好ましい実施形態においては、与えられたホストは、与えられたブロックレベルストレージサーバとの2つのソケットコネクション(接続)を確立し、一方のI/O要求を実行するのに一方のソケットを使用し、他方のI/O要求を実行するのに他方のソケットを使用することができる。その結果として、一方のI/O要求の障害または遅延が、他方のI/O要求を遮りあるいは妨害することがない。
【0007】
アーキテクチャのもう1つの特徴は、異なる種類および異なる帯域幅のネットワークも含めて複数のネットワークを介してソケットを確立することができ、大きなフォールトトレランスを提供することである。例えば、与えられたホストコンピュータとストレージサーバとは、TCP/IPプロトコルをサポートする2つのネットワークによって接続されてもよく、2つのネットワークの一方は、他方よりもきわめて遅い転送速度を提供してもよい。それらのネットワークの一方が、適切に機能している限りは、ホストは、ブロックサーバへの論理コネクション(接続)を確立し、I/O要求を実行することができる。
【0008】
一実施形態においては、アーキテクチャは、ホストコンピュータ上で実行されるホスト側デバイスドライバおよびホスト側リーダ/ライタコンポーネント(構成要素)を含む。さらに、アーキテクチャは、ブロックレベルストレージサーバ上で実行されるサーバ側デバイスドライバおよびサーバ側リーダ/ライタコンポーネントを含む。リーダ/ライタコンポーネントは、好ましくは、ペア(対、1つのホスト側リーダ/ライタプロセスおよび1つのサーバ側リーダ/ライタプロセス)で確立され独立したプロセスとして実行され、それぞれのペアは、ネットワークを介して、それぞれのソケットだけのために使用される。例えば、2つの論理コネクションが、与えられたホストコンピュータと与えられたストレージサーバとの間に確立されると、それぞれのそのようなソケットは、リーダ/ライタプロセスの異なるペアによって管理される。リーダ/ライタプロセスおよびソケットは、好ましくは、複数のI/O要求を通して常駐したままである。デバイスドライバおよびリーダ/ライタプロセスは、ストレージサーバのブロックレベルアクセスインタフェースをホストコンピュータにエクスポートするように動作し、それによって、ホストコンピュータにとっては、ブロックサーバのディスクドライブが、局所的な記憶リソースのように見える。
【0009】
アーキテクチャの進歩性のある1つの特徴によれば、ホストプロセスからのI/O要求が、データ量のしきい値を超える転送を必要とする場合、ホストのデバイスドライバは、I/O要求を2つかまたはそれ以上の単位I/O動作に分割する。それぞれのそのような動作は、ターゲットストレージサーバとのそれぞれ異なるソケットコネクションに割り当てられ、それによって、単位I/O動作は、ネットワークを介して並行して実行され、関係するI/Oデータが転送されてもよい。アーキテクチャのこの特徴は、比較的に大きなネットワーク帯域幅を比較的に大きなI/O要求に割り付けるのを可能にする。
【0010】
アーキテクチャのさらなる特徴は、ブロックレベルストレージサーバの物理記憶空間またはユニットを複数のパーティションに分割し、それらのパーティションをお互いに無関係にホストに割り付ける技法である。好ましい実施形態においては、1つのパーティションは、1つの特定のホストだけに割り付けられてもよく、あるいは、選択されたホストからなるグループに割り付けられてもよい(この場合には、異なるホストは、そのパーティションに対する異なるアクセス特権を有してもよい)。1つの特定のホストに割り当てられた1つのパーティションまたは複数のパーティションは、1つかまたはそれ以上の局所的なディスクドライブのように見え、かつ、そのように管理されてもよい。
【0011】
アーキテクチャの進歩性のあるさらなる特徴は、認証および発見プロトコルであり、そのプロトコルによって、ストレージサーバが、ホストを認証し、その後に、ホストに記憶リソースへのアクセスを許す前に、アクセス情報をそのホストに提供する。好ましい実施形態においては、ホストが、立ち上げられたとき、ホストは、まず最初に、ストレージサーバへのコンフィギュレーションソケットコネクションを確立する。このコンフィギュレーションソケットを使用して、ストレージサーバは、好ましくは、ドライバソフトウェアのバージョンに基づいたチャレンジレスポンス法を使用して、ホストを認証する。認証が成功すれば、ストレージサーバは、ストレージサーバへのデータコネクションのためにホストによって使用されるであろう動的ポートの識別子のようなアクセス情報と、そのホストに割り当てられたストレージサーバのパーティションに関する情報とをホストに提供する。アーキテクチャのこの特徴は、許可されないアクセスを防止する高い安全性を提供し、ストレージパーティションを個々のホストに確実に割り当てることができる。
【0012】
【発明の実施の形態】
以下、説明のためのものであり本発明の範囲を限定するものではない本発明の特定の実施形態の図面を参照して、これらの特徴およびその他の特徴を説明する。
【0013】
本セクションおよび添付書類に記載されるシステムアーキテクチャは、単独でまたは組み合わせて使用されてもよい本発明の様々な特徴を含む。いくつかのこれらの特徴は、他の特徴を備えずに実施されてもよく、および/または、特許請求の範囲に規定された本発明の範囲から逸脱することなく、ここに記載されたものとは異なって実施されてもよい。
【0014】
I.概論
本発明は、1つかまたはそれ以上のコンピュータネットワークを介してブロックレベルストレージアクセスを提供するシステムアーキテクチャからなる。このアーキテクチャは、1つのネットワークまたは組み合わせられたネットワークを介して通信するホストコンピュータとブロックレベルストレージサーバとをいくつでも組み込めるように設計される。一実施形態においては、アーキテクチャは、TCP/IPコネクションを介して、仮想ストレージブロックをエクスポートする。好ましい実施形態において、TCP/IPは、ホストコンピュータとブロックレベルストレージサーバとの間の通信に使用されるので、与えられたシステムのホストコンピュータとブロックサーバとをお互いに接続するのに様々なネットワークトポロジーを使用してもよい。例えば、比較的に小さなシステムの場合、ホストコンピュータとストレージサーバとは、ハブによってお互いに接続されてもよく、より大きなシステムの場合には、ハブは、スイッチに取り替えられてもよい。
【0015】
図1には、本発明を具体化した典型的なシステムのハードウェアコンポーネントが示される。システムは、10/100/1000Base−Tまたは1000Base−SXギガビットイーサネット(登録商標)カードのようなそれぞれのネットワークインタフェースカード106を介して、ネットワーク100によってお互いに接続されたホストコンピュータ102(「ホスト」)およびブロックレベルIPストレージサーバ104(「ブロックサーバ」)を含む。ホストコンピュータ102は、サーバまたはユーザコンピュータとして動作するように構成された標準的なPCまたはワークステーションであってもよい。ブロックサーバ104は、ブロックレベルデータストレージサービスをネットワーク100上のホストコンピュータ102に提供するネットワーク結合IPストレージボックスまたはネットワーク結合IPストレージデバイスであってもよい。
【0016】
図示された実施形態においては、ブロックサーバ104は、ディスクドライブ112からなるアレイを制御するディスクアレイコントローラ110を含む。このために、米国特許第6,098,114号に記載された種類のディスクアレイコントローラ110が使用されてもよく、その場合には、ディスクドライブ112は、ATA/IDEドライブであってもよい。ディスクアレイコントローラは、RAID0、RAID5、RAID10、および、JBODなどの様々なディスクアレイ構造をサポートしてもよく、また、好ましくは、複数のI/O要求を並行して処理することができるものである。さらに、ブロックサーバ104は、デバイスドライバおよび関係するソフトウェアを実行するためのCPUボードおよびプロセッサ108を含む。また、ブロックサーバは、I/Oデータをキャッシュするための揮発性RAM(図示しない)を含んでもよく、また、コンフィギュレーション情報(図8参照)を記憶するためのフラッシュメモリーまたはその他の不揮発性半導体メモリーを含んでもよい。
【0017】
一実施形態においては、ネットワーク100は、TCP/IPソケットをサポートするどのような種類のネットワークまたはどのような組み合わせのネットワークであってもよく、限定はしないが、ローカルエリアネットワーク(LAN)、無線LAN(例えば、802.11 WLAN)、広域ネットワーク(WAN)、インターネット、および、直接接続などが含まれる。1つの一般的な構成は、イーサネット(登録商標)ネットワークによって、ホスト102とブロックサーバ104とを局所的にお互いに接続して、イーサネット(登録商標)ベースSAN(ストレージエリアネットワーク)を生成することである。図1において破線で示されるように、ホスト102とブロックサーバ104とは、第2の組のネットワークカード106’を使用して、第2のネットワーク100’によってお互いに接続され、フォールトトレランスを増大させてもよい(以下で説明するように)。2つのネットワーク100、100’は、異なるメディアを使用しまた異なる転送速度を提供する異なる種類のネットワークであってもよい。様々なネットワークオプションのいくつかが、図3を参照して以下でより詳細に説明される。
【0018】
アーキテクチャのソフトウェアコンポーネント(構成要素)が、図2に示される。ホスト側102のソフトウェアアーキテクチャは、Unix(登録商標)、Windows(登録商標) NT、または、Linuxのようなオペレーティングシステム(O/S)202と、オペレーティングシステム202と通信するホスト側デバイスドライバ204(「ホストドライバ」)と、ホストドライバ204と通信するリーダ/ライタ(RW)コンポーネント200a(「エージェント」とも呼ばれる)とを含む。ストレージ側104のソフトウェアアーキテクチャは、リーダ/ライタ(RW)コンポーネント200bと、ストレージ側のデバイスドライバ206(「サーバドライバ」)とを含み、それらは、CPUボードのプロセッサ108(図1)によって実行される。サーバドライバ206は、サーバ側のRWコンポーネント200bから受信したI/O要求に応じて、ディスク操作を開始する。
【0019】
RWコンポーネント200a、200bは、好ましくは、2つで一組(1つのホスト側RWプロセスおよび1つのサーバ側RWプロセス)として確立された独立したプロセスとして実行され、それぞれのペアは、ネットワーク100を介して、それぞれのTCP/IPソケットだけのために使用される。ホストRW200aは、一般的には、ホストドライバ204からI/O要求を「読み込む」ことによって、そして、それらの要求をネットワーク100へ「書き込む」ことによって動作する。同様に、ストレージRW200bは、一般的には、ネットワーク100からI/O要求を読み込むことによって、そして、これらの要求をサーバドライバ206に書き込むことによって動作する。このプロセスは、その他のRWペアによる転送と同時に発生してもよく、また、ネットワーク100を介してどのような方向に発生してもよい。また、RWコンポーネント200は、好ましくは、転送されたI/Oデータのエラーチェックを実行する。
【0020】
それぞれのRWプロセス(および、それらの対応するソケット)は、好ましくは、それらのマシン102、104それぞれに常駐したままであり、コネクションに障害が発生し、あるいは、コネクションを終了するまでは、I/O要求を先入れ先出し方式で1つずつ処理する。ホストコンピュータ102は、専用コンフィギュレーションソケットを介して、関係するブロックサーバ104にサービス要求を送信することによって、ソケットを確立する。ソケットコネクションが、RWペア200aと200bとの間に確立されると、ソケットは、ホストコンピュータ102とブロックサーバ104との間の双方向トラフィックを制御する。
【0021】
図示された実施形態において、RWコンポーネント200は、それぞれ、ホストドライバ204およびサーバドライバ206から独立したプロセスとして動作する。あるいは、ホスト側のRW200aおよびストレージ側のRW200bは、例えば、以下に述べるものの1つかまたはそれ以上として実施されてもよい。すなわち、(a)(それぞれが)ホストドライバ204およびサーバドライバ206の一部、(b)(それぞれが)独立したデバイスドライバ204、206、(c)独立したカーネルスレッド、(d)1つのプロセス内の複数のスレッド、(e)複数のプロセス内の複数のスレッド、(f)1つのスレッド内の複数のプロセス。
【0022】
ホストコンピュータ102は、与えられた1つのブロックサーバ104への複数の論理コネクション(ソケット)を確立してもよく、および/または、以下で説明するように、複数の異なるブロックサーバ104へのソケットを確立してもよい。この特徴の大きな利点は、それによって、同一ホストからの複数のI/O要求を遮ることなく並行して処理できることであり(それぞれが、別個のソケットを介して)、1つのソケットに障害が発生した場合、その他のソケットを介して実行されるI/O要求は、その影響を受けない。それぞれのソケットは、それぞれのRWペアによって管理される。
【0023】
ホストドライバ204の重要な役割は、ブロックサーバ204によって提供されるストレージを仮想化することであり、それによって、オペレーティングシステムおよびその他のユーザレベルプロセスのようなホスト上のより高いレベルのすべてのソフトウェアプロセスは、ブロックサーバストレージを、1つかまたはそれ以上の局所的な物理ディスクドライブとみなすことができる。この役割を実現するために、ホストドライバは、そのようなコネクションの存在またはその他のネットワークの詳細をなにもユーザレベルプロセスに通知することなく、I/O要求をTCP/IPソケットコネクションに動的に割り当てる。ブロックサーバ104は、好ましくは、ホストのユーザレベルプロセスにとっては、SCSIデバイスのように見え、従来のボリュームマネージャを使用することができる。
【0024】
以下の第IIIのセクションで説明するように、アーキテクチャの一実施形態は、ブロックサーバ104の物理ストレージを複数の可変サイズのパーティションに分割するのを可能にする。そのようなパーティションのそれぞれは、1つかまたはそれ以上のホストに独立して割り当てられてもよく、また、それらのパーティションが独立した物理ディスクドライブとみなされて管理されるように構成されてもよい。別の実施形態においては、パーティションに分割することなく、ブロックレベルアクセスが、ホストに提供されてもよい。
【0025】
図3は、与えられたシステムのホスト102とブロックサーバ104とをお互いに接続するのに使用される様々なネットワーク100およびネットワークコンポーネントのいくつかを示す。これらには、ハブ302(LANセグメントを接続するのに一般的に使用される)、インターネット304、ルータ306(ヘッダー情報に基づいてパケットを送出するコンピュータ)、スイッチ308(LANセグメント間でパケットをフィルタリングおよび送出するデバイス)、および、ゲートウェイ310(2つの異なる種類のネットワークをお互いに接続するコンピュータ)が含まれる。このシステムアーキテクチャによれば、これらのネットワークオプションのどのような組み合わせでも、与えられたホストコンピュータ102とブロックサーバ104とをお互いに接続するのに使用することができる。
【0026】
このアーキテクチャの大きな特徴は、ネットワーク100のトラフィックが氾濫したときに、ネットワーク100のアドミニストレータが、ネットワーク100の能力をオンザフライで増大させることができ、あるいは、データをなんら消失させることなく、ネットワーク100のハードウェアを変更することができることである。ホスト側102およびストレージ側104のソフトウェアコンポーネントは、従来の方法を用いて、新しいネットワーク100コネクションが利用可能になったときにそれらのコネクションを検出および使用するように、また、コネクションが確立されるまで、動作を再試行するように構成される。例えば、ネットワーク100のアドミニストレータは、まず最初に、ネットワークハブ302を用いて、30台のホストコンピュータ102を少数のブロックサーバ104に接続してもよい。コンピュータの数が、ネットワークハブ302がもはや適切なものではない段階に達したとき、ネットワーク100をオフラインにすることなく、1000ポートのスイッチが、ネットワーク100に追加され、ハブ302は、取り除かれる。アーキテクチャは、このような役割をなす。なぜなら、ホストRW200aは、新しい物理的コネクションが利用可能になると、ストレージRW200bへの新しいソケットコネクションを自動的に生成するからである。
【0027】
アーキテクチャおよびそれに関連するストレージ制御プロトコルは、ブロック単位(例えば、512バイトのブロック)でアクセスすることのできる論理的に連続するバイトアレイとして、記憶リソースをホストコンピュータ102に提供する。実施形態の論理データストラクチャは、バイトレベルアクセスをサポートするが、ディスクドライブは、典型的には、所定のバイト数からなるブロックをエクスポートする。したがって、与えられたブロックにアクセスするために、ブロックアドレス(セクター番号)およびブロック(セクター)数が、提供される。一実施形態においては、プロトコルは、64ビットの論理ブロックアドレス(LBA)および64ビットのセクター数をエクスポートする。書き込み動作時には、ホスト側102において、I/O書き込みデータ要求が、ブロックストラクチャの中に入れられる。ブロック要求およびデータが、ホストRWプロセス200aによって管理される1つかまたはそれ以上のソケットコネクションを介して、ブロックサーバ104に送信される。さらに、アーキテクチャは、順次にではなくデータを記憶するのを可能にし、記憶媒体が、その空間を効率的に分割され、使用されていないセグメントを再利用するのを可能にする。
【0028】
図4に示されるのは、ネットワーク100を介して接続されたRWペア200によって生成された例としてのソケットコネクション400であり、ホストコンピュータ102をブロックサーバ104にリンクする。上述したように、ネットワーク100は、実際には、複数のネットワーク100からなり、まったく冗長なネットワーク100を含んでもよい。それぞれのホストコンピュータ102は、I/O要求を処理するのに必要であれば、1つかまたはそれ以上のいずれかのブロックサーバ104への1つかまたはそれ以上のソケットコネクション400を開くことができる(対応するRWペアを使用して)。例えば、ネットワーク100の長い応答時間、ソケットコネクション400における障害の発生、新しい物理的コネクションの使用可能性、および、I/O要求の増加に応じて、新しいソケットコネクション400を開いてもよい。例えば、ホストコンピュータ102は、まず最初に、第1のブロックサーバ104への2つのソケット400を開き、さらなる記憶リソースが必要になれば、その後に、もう1つのブロックサーバ104への2つのさらなるソケット400を開いてもよい。図示されるように、もう1つのホストコンピュータ102が、同じ組のブロックサーバ104へのソケットコネクション400を開いていてもよい。上述したように、それぞれのソケット400は、I/O要求を処理する独立したパイプラインとして動作し、エラーが発生するかまたはホスト102がソケットコネクション400を終了するまで、開かれたままである。
【0029】
II.I/O要求の処理
図5および図6は、ソケットコネクション400を介したホストコンピュータ102とブロックサーバ104との間のI/O読み込み動作および書き込み動作(それぞれ)に使用されてもよいネットワークストレージプロトコルを示す。図5および図6において、垂直線の上部に配置されているのは、以下のコンポーネントを表現する略語である。
【0030】
OS=オペレーティングシステム
HD=ホストドライバ204
HRW=ホストコンピュータのリーダ/ライタ200a
N=ネットワーク
SRW=(ブロックサーバの)サーバリーダ/ライタ200b
SD=(ブロックサーバの)サーバドライバ206
時間は、一定の縮尺率で示されてはいないが、これらの図面において上から下に行くにしたがって増加する。一方の垂直線から他方の垂直線への矢印は、一般的には、コンポーネント間のメッセージまたはデータの流れを表現する。同じコンポーネント(垂直線)において開始および終了する矢印は、そのコンポーネントが実行する動作を表現する。図における小さな円は、集合イベント(ランデブーイベント)を表現する。
【0031】
一実施形態においては、図5に示されるように、ホストリーダ/ライタ(HRW)は、まず最初に、I/Oコマンドパケットとして、要求1Hをホストドライバ(HD)に送信し、ソケットが利用可能であることを通知する。このステップは、「そちらになすべき業務があれば、こちらに回して下さい」というメッセージとみなすことができる。図示されるように、ホストドライバは、その結果として、I/O要求を指定したコマンドパケットを戻すことによって、この要求に応答する。符号2Hを付された矢印によって表現されるように、ホストリーダ/ライタ(HRW)は、コマンドパケットをネットワーク汎用命令に翻訳する。このステップは、様々なクロスプラットフォームのコンピュータ言語が共通のネットワーク100上で機能するのを可能にする。ホストコマンドパケットすなわちホスト言語からネットワークコマンドパケットすなわちネットワーク言語への局所的な計算変換は、アーキテクチャに固有のものである。
【0032】
この時点において、ホストリーダ/ライタ(HRW)は、2つのネットワークイベント3Hおよび4Hを生成する。メッセージ4Hは、3Hから、ネットワーク100を介して受信ネットワーク応答パケットを送ることを表現し、以下で説明される。メッセージ3Hは、ネットワーク汎用コマンドパケットが、既存の「ピン留めされた」TCP/IPコネクションを介して書き込まれることを表現する。好ましい実施形態においてこの転送が発生するためには、1Sによってランデブーが実施されなければならず、これは、ネットワーク100がコマンドパケットを受信するように要求することを表現する。この要求1Sは、なすべき「業務」がなければ、無限に待つ能力を有する。ネットワーク100とのランデブーが、達成されると、コマンドパケットが、ブロックサーバのリーダ/ライタ(SRW)によって受信され、ステップ2Sにおいて、SRWによってサーバ側の言語に再翻訳される。ステップ2Sは、2Hで示されるホストコマンドパケットからネットワークコマンドパケットへの翻訳に類似する。
【0033】
図5にさらに示されるように、メッセージ3Sは、サーバ側リーダ/ライタが、コマンドパケットをサーバドライバ(SD)206に送ることを表現する。コマンドパケットに含まれるものには、次のものがある。I/Oユニット番号(あらゆる種類のストレージディスクに存在するディスクドライブパーティションの論理識別子である小さな整数)、コマンド(読み込み動作または書き込み動作などのコマンドの種類を指示する小さな整数)、論理ブロック開始アドレス(I/O動作のための開始ブロックまたは開始セクターを指示する整数)、および、ブロック数(I/O動作のためのブロック数またはセクター数を指示する整数)。
【0034】
コマンドパケットが、サーバデバイスドライバ(SD)に配信された後、応答がサーバ側リーダ/ライタ(SRW)に送り返される。4Sによって示されるように、サーバ側リーダ/ライタは、ステップ4Sにおいて、この応答パケットをストレージ側命令からネットワーク命令に変換する。それに続いて、5Sおよび6Sによって示されるように、応答パケットのネットワーク書き込み(5S)と、読み込みによるI/Oデータのネットワーク書き込み(6S)とが、同時に発生する。
【0035】
その後、ランデブーが、応答パケット(5S)とネットワーク読み込み要求(4H)との間で発生し、ネットワーク読み込み要求が達成されたことを表す。このステップは、次の2つの理由のために実行される。(1)ネットワーク応答パケットがエラーを検査された後、そのネットワーク応答パケットが完了ステータスを含むかどうかを判定する。そして、(2)読み込み動作が失敗である場合、要求されたデータがホスト102に戻されるのを防止する。それらが満足されると、5Hにおいて、ネットワーク応答パケットが、ホスト応答パケット言語に翻訳される。
【0036】
次に、I/O(読み込み)データのために、ネットワーク読み込み要求6Hが、存在する。この要求6HはI/O読み込みデータのネットワーク書き込み6Sによって達成され、I/O読み込みデータがホストコンピュータへ転送される。最後に、7Hにおいて、ホストリーダ/ライタはI/O動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【0037】
図6に示される書き込み動作に関しては、ステップは、3Sまで読み込み動作とまったく同様である。以下の記述は、残るI/Oデータ転送およびネットワーク100の動作に関して、残りのステップを説明する。
【0038】
このI/O動作に対応する書き込みデータは、ネットワーク100によって受信され、ステップ3Sにおいて、受信動作が、ブロックサーバ104によってネットワーク100に送られる。このネットワーク読み込みは、ステップ2Sにおいてネットワークコマンドパケットをストレージシステム言語に翻訳した後に発生する。これは、ネットワークコマンドパケットのエラー検査の後、ネットワーク読み込み動作が適切な長さで送られるのを保証するものである。ステップ4Sにおいて、ブロックサーバ104はストレージシステムコマンドパケットをサーバドライバ(SD)に送信する。このコマンドパケットは、読み込みの場合に説明したものと同じ種類の情報を含む。SDは、指定された書き込み動作が論理的に(または、物理的に)完了した後、応答パケットを戻し、それに続いて、ステップ5Sにおいて、その応答パケットは、ネットワーク命令に変換される。このネットワーク応答パケットは、ステップ6Sにおいてネットワークにコマンドを送信することによって、ホストコンピュータ102に送信される。このネットワーク応答パケットは、ホストコンピュータ102によって受信され、ステップ6Hにおいてホスト応答パケットに翻訳される。それに続いて、ホストコンピュータ102は、I/O動作を完了するためにコマンドをHDに送信する。ステップ6Hおよび7Hは、図5に示される読み込み動作のステップに類似しており、ホストリーダ/ライタは、I/O動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【0039】
添付書類AおよびBは、本発明の一実施形態によるホスト側およびサーバ側の論理をより詳細に説明するものである。さらに、添付書類Cは、ホスト102とブロックサーバ104とが通信するプロトコルの一実施形態を詳細に説明するものである。これらの添付書類のいくつかの箇所は、いくつかのシステム機能しか動作することのできない試作段階の実施形態に対応している。
【0040】
図7は、ユーザレベルアプリケーションからのI/O要求が、それらのアプリケーションに透過的に、すなわち、アプリケーションとソケットとの間の固定されたマッピングを必要とせずに、TCP/IPソケットコネクションにどのようにして動的に割り当てられるかを示す。さらに、図7は、一実施形態において、I/O要求を複数のソケットコネクションを介して並行して発行および実行することのできるより小さいI/O動作にどのようにして細分化することができるかを示す。この図においては、ホスト側のRWコンポーネント200aは、「エージェント」と呼ばれる。
【0041】
この例において、ホスト102で実行されている複数のアプリケーション(APP1〜APP3)からのI/O要求は、複数のTCP/IPコネクションを介して、並行して処理される。具体的には、それぞれのアプリケーションは、それぞれのI/O要求R1〜R3を要求キュー730に登録している。I/O要求が要求キュー730に登録されると、関連するブロックサーバへのコネクションを有する次の利用可能なエージェント200aが、キューから要求を取り出し、その要求の処理を開始することによって応答する。この例においては、第1のエージェントであるエージェント1が、要求R1を取り出し、そのエージェント自身のソケットコネクションを介して、R1の処理を開始する。同様に、要求R3は、エージェント5によって取り出され、そのエージェント5は、要求を処理し、そのエージェント5自身のソケットを介して、その要求を完了する。しかしながら、APP2からのI/O要求R2は、より大きなデータ転送を必要とする。したがって、ホストドライバは、R2を3つの単位I/O要求または動作に分解し、それらのI/O要求または動作のそれぞれは、それぞれのエージェント(エージェント2、3、および、4)によって、それぞれのソケットコネクションを介して、通常のI/O要求と同じように処理される。したがって、I/O要求R2のそれらの下位要求は、複数のコネクションを介して並行して処理され、効率を増大させることができる。
【0042】
一実施形態においては、64kバイトを超えるデータ転送を必要とするI/O要求は、64kバイトかまたはそれ以下のブロックのI/O要求に細分化される。それぞれの単位I/O要求は、そのI/O要求に対応する元々のアプリケーションレベルI/O要求の識別子を備えたタグを適切に付けられる。単位I/O要求のすべてが、完了すると、ホストドライバは、アプリケーションレベルI/O要求の完了を報告する。この特徴の大きな利点は、それぞれのI/O要求に割り当てられるネットワーク帯域幅の大きさが、一般的には、転送されるI/Oデータの量に比例することである。
【0043】
III.ホストへのパーティションの割り付け
アーキテクチャに取り込まれてもよい1つの特徴は、それぞれのブロックサーバ104の物理記憶空間をより小さなユニットに効率的に分割し、それらのユニットを個々のホスト102に効率的に割り付けまたは割り当てるための技法である。この特徴を使用すると、複数のホスト102が、ブロックサーバを共有することができ、ホスト102のそれぞれは、自分専用のディスクドライブまたは自分専用のディスクドライブの組を「認識」することができる。この特徴の一実施形態が、図8に示される。
【0044】
図8に示されるように、それぞれのブロックサーバ104のディスク空間全体が、複数の可変サイズのデータストレージユニットすなわち「パーティション」にセグメント化または細分化されてもよく、それぞれのパーティションは、他のパーティションとは無関係にアクセス特権を有してもよい。これらのストレージパーティションは、好ましくは、ネットワークアドミニストレータによって、ブロックサーバ104で実行されているコンフィギュレーションおよびマネージメントプログラム820に接続するための標準的なウェブブラウザ810を用いて、またはブロックサーバ104で実行されているコマンドシェルインタプリタに直接に接続するコマンドラインインタフェースユーティリティを用いて(図示しない)、生成されかつ割り付けられる。
【0045】
それぞれのパーティションは、サイズ、「読み込み専用」、「読み書き」、または、アクセス前のゼロデータなどの属性によって、および許可されたホスト102のリストによって、独立して構成されてよい。例えば、パーティション#1は、「20GB、ホストAからは読み込み専用、ホストBおよびCからは読み書き」であるように構成されてもよく、パーティション#2は、「40GB、ホストAだけから読み書き」として構成されてもよい。さらに、それぞれのパーティションは、ホストのユーザレベルソフトウェアプロセスがパーティションを独立した物理ディスクドライブとみなして管理できるような形で、個々のホストコンピュータ102に確実にエクスポートされることが可能である。
【0046】
好ましい実施形態においては、パーティションのそれぞれは複数のディスクドライブ112の記憶空間を含んでもよく、さらに、いずれかの与えられたディスクドライブ112の記憶空間はパーティションを生成するために細分化されてもよい。ブロックサーバ104内に現時点で定義されている1つかまたはそれ以上のパーティションごとに、コンフィギュレーション/マネージメントプログラム820は、それぞれのパーティションテーブル830を、ブロックサーバ104のフラッシュメモリーまたはその他の不揮発性メモリー840内に維持する。このテーブル830は、パーティション内に含まれるディスクドライブ(または、いくつかのディスクドライブ)およびセクターを指定するコンフィギュレーションデータ、そのパーティションを使用するのを許可された1つかまたはそれ以上のホスト102のIPアドレス(または、いくつかのIPアドレス)、および、それに関係するアクセス特権を含む。さらに、不揮発性メモリー840内に記憶されたパーティションテーブル830または別のコンフィギュレーションストラクチャは、好ましくは、そのブロックサーバとのI/O動作のためにそれぞれのホストによって確立されてもよいソケットコネクションの最大数を指示するデフォルト値またはアドミニストレータ指定データを含む。次のセクションで説明するように、好ましくは、立ち上げ中にホスト102は当該ホストが探し出したそれぞれのブロックサーバ104への専用コンフィギュレーションソケットコネクション400を確立し、そのホストに割り当てられたパーティションのリスト(もしあれば)とそれらのパーティションのサイズとを得るために、このコンフィギュレーションコネクションを使用する。
【0047】
一実施形態においては、1つのブロックサーバ104につき最大100までのパーティションが生成されてもよく、また与えられた1つのホスト102につき最大16までのパーティションが割り当てられてもよい。それぞれのホスト102は、論理ブロックアドレス(LBA)0から始まるそのホストのそれぞれのパーティションを認識する。ブロックサーバ104は、それぞれのI/O要求で送信された(IPアドレス、パーティション番号、LBA)の組をI/O要求のたびに「物理LBA」にマッピングする。パーティションへのアクセスは、好ましくは要求したホスト102のIPアドレスに基づいて、ブロックサーバ104によって認可または拒否される。
【0048】
アーキテクチャのこの特徴を使用すれば、ネットワークアドミニストレータは、ホストで実行されているアプリケーションレベルソフトウェアに透過的に、ブロックサーバ記憶リソースをホスト104に柔軟にかつ動的に割り付けることができる。図8に示される例においては、ブロックサーバ104は、5つのセグメントまたはパーティションを有し、それぞれのパーティションは、可変のサイズを有する。パーティション0は、ブロックサーバで利用可能な割り当てられていないすなわち「空き」のディスク空間を表現し、そのパーティション0はさらなるパーティションを生成するのに使用されてもよく、および/または、すでに割り付けられているパーティションのサイズを増加させるのに使用されてもよい。この例においては、まず最初にパーティション1、2、および3が生成され、それぞれ、ホスト1、2、および3に割り当てられた。その後に、ホスト1のストレージ需要の増大に対処するために、新しいパーティションであるパーティション4が生成され、ホスト1に割り当てられた。ホスト1だけに割り付けられた2つのパーティション(1および4)は、ホスト1コンピュータ102に直接に設置されたディスクドライブの単一ドライブセグメントかまたは2つの別個の独立したディスクドライブのように見えるように構成されてもよい。図8においては、1つのパーティションが、1つのホスト102に割り当てられるように示されているが、1つのパーティションが、2つかまたはそれ以上のホスト102からなるグループに割り当てられてもよい。
【0049】
コンフィギュレーション/マネージメントプログラム820は、好ましくは、アドミニストレータがパーティションを生成および管理するのを可能にする様々なコマンドおよび機能をサポートする。上述したこれらの役割に加えて、プログラム820は、パーティションを削除し、またパーティションの所有権を変更する機能を提供する。削除されたパーティションから得られる空間は、好ましくは、再利用され、「最適適合」アルゴリズムを用いて再び割り付けられる。
【0050】
IV.認証および発見
アーキテクチャに取り込まれてもよいその他の特徴は、ブロックサーバ104がホスト102を認証するのを可能にするプロトコルである。具体的には、I/Oをすぐに開始させるのではなく、むしろ、それぞれのブロックサーバ104は、新しいホスト102にI/O動作を実行させる前に、その新しいホスト102を認証するように設計されてもよい。好ましい実施形態においては、認証プロセスは、ホスト側ドライバ204およびサーバ側ドライバ206内に含まれる「認証および発見」プロトコルの一部として実行される。
【0051】
具体的には、好ましい実施形態においては、ホスト102は、立ち上げ時に、次の2つの方法の1つを使用して利用可能なブロックサーバ104を探し出す。すなわち、(1)アドミニストレータによって予め設定されたホスト側コンフィギュレーションファイルを使用し、あるいは、(2)そのホスト102のサブネット上のすべてのブロックサーバ104を発見するために、ブロードキャストパケットを使用する。(2)の方法によれば、それぞれのブロックサーバ104は、好ましくは、そのサーバ104を探し出し、ネットワークを介してそのサーバ104を遠隔から構成するのを可能にするデーモンプロセスを含むが、IPアドレスは使用しない。そして、探し出されたブロックサーバ104ごとに、ホストは、認証および発見の段階に入り、その好ましい実施形態が図8に示されるが、エラー状態は示されていない。
【0052】
図9に状態910によって示されるように、ホスト102は、まず最初にコネクション要求を探し出したブロックサーバ104に送信し、状態915において、ブロックサーバ104はその要求を受け入れることによって応答する。状態920において、ブロックサーバ104は、ブロックサーバ104によってサポートされるソフトウェアバージョンのリストとともに、認証「チャレンジ」の役割をなすブロックサーバによって生成された乱数を戻す。状態925において、ホスト102は、リストから適切なバージョンを選択し、ブロックサーバ104に応答する。また、ホスト102は、予め定められた一組の数学演算をブロックサーバ104から受信された乱数に対して実行する。これらの演算は、好ましくは、プロトコルのバージョンごとに異なり、ただ単に新しいバージョンを追加するだけで、セキュリティアーキテクチャを容易に強固なものにすることができる。バージョンによって指定された数学演算の結果として、ブロックサーバ104によって送信された乱数「チャレンジ」から得られた値は、チャレンジに対するホストの「応答」として、ブロックサーバ104に送り返される。そして、状態930において、ブロックサーバ104は、(ホストに送信されたチャレンジおよび選択されたバージョンを与えて)予想応答を計算し、この予想応答をホスト102からの実際の応答と比較することによって、ホスト102を認証する。その応答が予想応答と一致しなければ、アクセスは拒否され、ホスト102とブロックサーバ104との間のすべてのソケットが閉じられる(図示しない)。一致すれば、状態935において、ブロックサーバ104は認証に成功したことを通知する肯定応答をホスト102に送り返す。
【0053】
状態940において、ホスト102は、与えられたブロックサーバ104においてホストに割り付けられる利用可能な容量を計算するようにとの要求を送信する。状態945において、ブロックサーバ104は、そのホストに割り当てられるパーティションの数およびそれらのパーティションのサイズを指定するデータによって、ホスト102に応答する。また、ブロックサーバ104は、I/Oトラフィックのためにホスト102とブロックサーバ104との間で確立されてもよいデータコネクションの最大数を指定し、かつ、それらのコネクションを確立するのに使用されてもよい動的ポートを指定するデータを戻す。状態950において、ブロックサーバ104は、許可されたホスト102から発生するトラフィックのために「リッスン(Listen)」ソケットを確立する。その後、ホストは、ブロックサーバによって指定されたデータコネクションの最大数まで、これらのソケットへのコネクションを確立してもよい。
【0054】
したがって、ホスト102と特定のブロックサーバ104との間の認証および発見の段階が完了すれば、ホスト102は、ブロックサーバに関する次の情報を通知されている。すなわち、(1)ホストは、データのためにどの動的ポートに接続できるか、(2)ホストに割り当てられたパーティションの数、(3)それらのパーティションのサイズ、である。
【0055】
認証および発見の段階を実施する市販ソフトウェアのさらなる詳細な説明が、添付資料Dに提供される。「ネットワークストレージユニット」または「NSU」という用語は、添付資料Dの全体を通して、ブロックサーバ104を実施する市販ソフトウェアを参照するのに使用される。
【0056】
特定の好ましい実施形態によって本発明を説明したが、この分野で通常の知識を有する者が考えだすことのできる異なる実施形態は、ここで説明した特徴および利点のすべてを提供しない実施形態も含めて、本発明の範囲内にある。したがって、本発明の範囲は、添付の特許請求の範囲に記載される。
【0057】
添付資料A
【0058】
添付資料B
【0059】
添付資料C
この資料は、ブロックサーバと通信するために、クライアントホストコンピュータが使用するストレージ制御プロトコル(SCP)を説明するものである。
【0060】
ストレージ制御プロトコルは、現在、TCP/IPを介して実行され、様々なプラットフォームで利用することができる。サポートされるオペレーティングシステムのいくつかの例としては、Windows(登録商標) NT、Linux、MacOS、Windows(登録商標) 2K、FreeBSD、および、Solarisなどがある。この資料は、主として、クライアントホストコンピュータの観点から書かれたものである。
【0061】
読み込みコマンドまたは書き込みコマンドは、128キロバイト(128KB)のデータしか要求することができない。
コネクション
現在、ブロックサーバとのI/Oを実行するために要求されるのは、ただ1つのTCP/IPコネクションだけである。ブロックサーバプロセスは、良く知られているポートを介して、入力コネクションを受け入れる。ホストは、冗長性およびより大きなスループットのために、1つのブロックサーバへの複数のTCP/IPコネクションを使用してもよい。
【0062】
認証および発見のために、補助的なコンフィギュレーションコネクションまたは「制御チャンネル」が、使用される(添付資料D参照)。認証および発見プロセスは、ホストに以下の情報を提供する。
−ブロックサーバに接続するために、ホストは、どの動的ポートを使用できるか、
−ブロックサーバが特定のホストに割り付けたパーティションの数、
−パーティションのサイズ。
ブロックサーバへのホストコネクションの確立およびI/Oの実行
ブロックサーバに接続するためには、ホストは、2つの情報が必要である。すなわち、
(1)ブロックサーバの名前またはIPアドレス、
(2)ブロックサーバが入力コネクションを受け入れる良く知られているポート番号。
【0063】
ホストは、標準Berkeleyソケットconnect()コールを使用して接続してもよい。ブロックサーバは、良く知られているポートに対してaccept()を実行することに注意されたい。
I/Oプロトコル
ホストは、まず最初に、ネットワーク命令内にある512バイトの要求ストラクチャをブロックサーバに送信することによって、読み込みまたは書き込みを開始する。その後、データが、読み込まれまたは書き込まれる。要求ストラクチャ(znreq_t)は、応答ストラクチャ(znres_t)と同じものである。これらのストラクチャは、以下で定義される。ホストのための疑似コードは、次の通りである。
1.データポートのブロックサーバに接続する。
2.ループ。
【0064】
2a.適切なフィールドに詰めることによって、znreq_tを満たし、すべてをネットワークバイト命令に変換する。
【0065】
2b.ブロックサーバにznreq_tストラクチャを送信する。
例えば、512バイトの要求ストラクチャをネットワークを介して書き込むために、send()コールを使用する。
【0066】
2c.書き込みの場合、すべてのデータを送信する。
例えば、64Kバイトを書き込む場合、64Kバイト全部を書き込むまで、1回かまたはそれ以上の回数だけsend()をコールする。
ネットワークバイト命令への変換は、なされない。
【0067】
2d.znres_tストラクチャ(znreq_tストラクチャと同じ)をブロックサーバから読み込む。ネットワークバイト命令からホスト命令に変換する。例えば、recv()をコールすることによって、512バイトを読み込む。
【0068】
2e.読み込みコマンドの場合、ブロックサーバからすべてのデータを読み込む。例えば、32Kバイトを読み込む場合、32Kバイト全部を読み込むまで、1回かまたはそれ以上の回数だけrecv()をコールする。
データ構造
ただ1つのネットワーク要求データ構造が定義される。それは、512バイトの長さである。遠隔のマシンに送信される前に、すべてのフィールドは、ネットワーク命令に個々に変換される。これは、htonl()またはntohl()のような標準的な機能を使用することによって実施されてもよい。C言語による実施形態は、次の通りである。
【0069】
添付資料D−ネットワークストレージユニット(NSU)コンフィギュレーションプロトコル
NSU上には、/etc/nsu.confと呼ばれるコンフィギュレーションファイルが存在する。とりわけ、このファイルは、ホストごとのユニット定義および割り付け機能を構成および管理するのに使用されるデータを含む。このファイルは、3DMユーティリティーによってのみ編集することができる。「HOST」エントリーのシンタックスおよびセマンティックスが、以下に示される。
【0070】
上述の補足説明:
−「ホスト1」は、構成されているホスト側インタフェースのためのIPアドレスを含む。
−DATA_PORTフィールドは、NSU側IPアドレスおよびポート番号を表現し、制御プロセスは、そのリモートIPアドレスからの要求に対して、データコネクションが確立されるのを待つ。
−ポート番号の後の(10)および(12)は、NSUがそのポートに確立するコネクションの最大数を表現する。これは、並行して実行することのできるIPアドレスごとのI/O動作の数を効率的に制限する。NSUによって使用されるストレージ抽象化は、ストレージをIPアドレスにマッピングすることに注意されたい。したがって、アドレス寿命の短いDHCPクライアントのような、それらのIPアドレスを頻繁に変更するホストは、このアーキテクチャにおいては、うまく機能しない。
−twed*フィールドは、リモートユニットがマッピングするローカル(NSU側)ユニットを表現する。(twedという用語は、NSUのディスクである3ware Escalade Diskを意味する)
−(x,y)は、NSUがその特定のリモートユニットに割り付けたlba範囲である。
コンセプト:
(1)どのようなクライアントも、複数のIP/ポートの組み合わせで、複数のデータコネクションを有することができる。
(2)どのようなクライアントも、複数のユニットを有することができ、ユニットは、ブロックサーバの特定の物理ユニット上のLBA範囲として定義される。
(3)このプロトコルのこの例においては、NSUは、100ユニット以上に分割されることはない。
プロトコル(すべての数値は、ネットワーク命令で送信される):
(1)(必須要件)ホストは、NSUコンフィギュレーションポート(デフォルト値として、ポート10001)に接続する。このコネクションは、1024以下のポート番号を備えたTCP/IP「特権ポート」から発行されなければならない。(いくつかのオペレーティングシステムは、1024以下の番号を有するポートを「予約ポート」と呼ぶ)
(2)NSUは、コネクション要求を受け入れ、それが1024以下のポート番号から入力していることを確認し(もしそうでなければ、NSUは、コネクションを閉じる)、タイプznreq_tのメッセージを送信することによって、ホストに応答し、演算コードは、Z_GET_VERSION(0×1005)にセットされ、NSUプロトコルバージョンのビットマスク(現在、0×01)が、zn_versionフィールドにセットされ、32ビットの疑似乱数が、zn_reqsz_loフィールドに詰められる。
(3)(必須要件)ホストは、NSUからZ_GET_VERSION要求を受信し、サポートされたバージョン番号のホスト自身のビットマスクとNSUによって供給されたバージョン番号との間で論理積演算を実行する。これらのバージョン番号は、NSU側およびホスト側において共通形式で表現される。論理積演算の結果が、0であれば、一致するバージョンが存在せず、ホストは、コネクションを閉じなければならず、バージョン不一致エラーをローカルオペレーティングシステムに通知する。論理積演算の結果が0でない値であれば一致しており、ホストは、ホストおよびNSUによってサポートされるどのバージョンを選択してもよい。この値は、NSUに送り返されるznreq_tストラクチャのzn_versionフィールドに詰められる。実際には、zn_versionフィールドは、ホストおよびNSUの両方がサポートしていることを示す「一致する最も大きな値」にセットされることを推奨する。さらに、ホストは、要求のzn_reqsz_loフィールドから得られる32ビットの疑似乱数の1の補数を計算して、その値をznreq_tリターンストラクチャのzn_reqsz_loフィールド内に詰めなければならない。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。そして、このznreq_tストラクチャは、NSUに送り返される。(通常の場合、NSUによって送信された疑似乱数は、その後に、プロトコルのステップ(14)において使用されることにも注意されたい。)
(4)NSUが、そのNSUがステップ(2)において送信したZ_GET_VERSION要求に対する応答を5秒以内に受信しなければ、NSUは、コネクションを閉じ、そのNSUの「受け入れ」状態に戻る。
(5)NSUが、ホストからの応答を割り当てられた時間の5秒以内に受信した場合、NSUは、zn_reqsz_loフィールド内にある値を検査して、その値が、実際に、NSUが送信した疑似乱数の32ビットの1の補数であるかどうかを確認する。そして、NSUは、応答をホストに送り返し、zn_reqsz_loフィールドが、期待値を含んでいれば、zn_statusフィールドは、0にセットされ、期待値を含んでいなければ、−1にセットされる。期待値でない場合、応答メッセージを送信した後、NSUは、コネクションを閉じる。
(6)(選択要件)成功した場合、ホストは、Z_GET_STARTTIMEという演算コードを備えたznreq_tをNSUに送信してもよい。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
(7)(選択要件)Z_GET_STARTTIME命令に応答して、NSUは、znreq_t応答を送り返し、zn_reqsz_loフィールドは、/etc/nsu.confファイルが最後に変更された時間を表現する不透明な「クッキー」を詰められる。これは、クライアントドライバが、NSUコンフィギュレーションチャンネルへのそれのコネクションを消失した場合、そのクライアントドライバが、再接続されたときに、わかっているそれの最後の状態がまだ有効かどうかを判定するためになされる。クッキーフィールドの実際の値は、アプリケーションからは不透明である。ドライバは、クッキーの古い値と新しい値とが等しいかどうかをテストするだけでよい。クッキーに対するその他の操作は、定義されていない。この応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(8)(必須要件)ホストは、演算コードZ_GET_CAPACITIESを備えたznreq_tをNSUに送信しなければならない。この要求内にあるその他のすべてのフィールドは、無視される。
(9)Z_GET_CAPACITIES要求に応答して、NSUは、znreq_t応答を送り返し、そのストラクチャのzn_reqsz_loフィールドは、そのホストが利用できるユニットの数、それに続いて、そのユニットの数だけのunit64_tを詰められ、そのunit64_tは、ユニットごとの容量を指定する。これらの容量は、単位がバイトで指定される。zn_reqsz_loフィールドが、0を含んでいれば、これは、NSUが、それのいずれかのストレージへのアクセスを、要求を送信したホストに提供するようにはまだ構成されていないことを意味する。応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(10)(必須要件)ホストは、演算コードZ_GET_DATAPORTを備えたznreq_tをNSUに送信する。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
(11)ホストからのZ_GET_DATAPORT要求に応答して、NSUは、znreq_t応答を送り返し、zn_reqsz_loフィールドは、開くのを許可されるデータIP/ポートコネクションの数、それに続いて、そのデータIP/ポートコネクションの数だけの以下のストラクチャを詰められる。
【0071】
応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(12)NSUは、適切な数のデータチャンネルに「リッスン」ソケットを確立し、ホストからのコネクションを待つ。
(13)ホストは、それが選択した数だけ、上述したホストごとのDATAPORTコンフィギュレーションセクションのmax_connectionsフィールドに指定された最大数まで、それらのソケットに接続する。(max_connectionsを超えてさらなるデータコネクションを生成しようとすれば、「拒絶されたコネクション」として失敗する。)
(14)そして、ホストは、znreq_tメッセージをそれぞれのデータソケットに送信し、そのホストがステップ(2)においてNSUから受信した疑似乱数が、ストラクチャのzn_reqsz_loフィールドに入れられる。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。
(15)NSUは、znreq_tメッセージによって、ステップ(14)において送信されたメッセージに応答し、zn_statusフィールドは、成功した場合には0に、失敗した場合には1にセットされる。
(16)この時点において、コンフィギュレーションおよび認証プロトコルが、完了し、ホストからのデータ転送要求が、NSUによって受け付けられる。
実施にあたっての一般的注意事項:
(1)NSUボックス上のそれぞれのデータポートは、どのようなユニットに対してもI/O要求を処理することができる。
(2)NSUが、コンフィギュレーションソケットが閉じられていることを検出することがあれば、NSUは、そのホストに関係するすべてのデータポートコネクションを閉じ、ホストが、再接続し、かつ、コンフィギュレーションプロトコルを再実行するのを待つ。したがって、コンフィギュレーションが完了したとき、ホスト側は、コンフィギュレーションソケットを閉じないことが重要である。なぜなら、シャットダウンおよび新しいユニットの追加などのイベントをホストに通知するのに使用されるのはそのソケットであるからである。ホストが、混乱状態でコネクションを整頓するのに敢えて使用できる1つの方法は、コンフィギュレーションソケットを閉じることである。ホストとNSUとの間にネットワークコネクティビティが存在する場合には、NSUは、閉じたことを検出し、コンフィギュレーションソケットに関係するすべてのデータソケットを閉じる。
(3)NSUが、/etc/nsu.confファイルを再び読み込むことがあれば(NSUコンフィギュレーションをアドミニストレータが更新したために)、NSUは、それらのユニット情報を変更されたすべてのホストに対するコンフィギュレーションソケットを閉じ、それらのホストが、再接続し、コンフィギュレーションプロトコルを再実行し、そして、新しいコンフィギュレーションデータを取り込むのを待つ。したがって、ホストドライバは、NSUコンフィギュレーションポートへのコネクションを開いたままにしておく必要があり、NSUによってそれが閉じられたことを、コンフィギュレーションプロトコルを再実行してユニットおよびデータポートのコンフィギュレーションを再確立するための信号として使用しなければならない。
【図面の簡単な説明】
【図1】本発明を実施してもよいシステムの主要なハードウェアコンポーネントを例として示す図であり、ホストコンピュータおよびブロックサーバを含む。
【図2】図1に示されるシステムのソフトウェアアーキテクチャを示す図であり、本発明に基づいて動作するホスト側およびサーバ側のデバイスドライバおよびリーダ/ライタ(RW)コンポーネントを含む。
【図3】ホストとブロックサーバとをお互いに接続するのに使用することのできるネットワークおよびネットワークコンポーネントの種類の例を示す図である。
【図4】並行ソケットコネクションが、リーダ/ライタコンポーネントのペアの間でどのようにして確立されるかを例として示す図である。
【図5】ホストコンピュータがブロックサーバから読み込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図6】ホストコンピュータがブロックサーバへ書き込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図7】I/O要求が、ユーザレベルアプリケーションに透過的に、ソケットコネクションにどのようにして割り当てられるかを示す図であり、また、複数のTCP/IPコネクションを介して処理するために、I/O要求をどのようにして細分化することができるかを示す図である。
【図8】ブロックサーバの物理ストレージを複数のパーティションにどのようにして分割することができるかを示す図であり、それぞれのパーティションは、1つかまたはそれ以上のホストコンピュータに独立して割り付けられてもよい。
【図9】認証および発見プロトコルを示す図であり、このプロトコルによって、ホストコンピュータは、ブロックサーバによって認証され、その後に、ブロックサーバにアクセスするための情報を得る。
Claims (52)
- 共有ブロックレベルネットワークストレージシステムであって、
ディスクドライブからなるアレイを備え、デバイスドライバを実行するプロセッサを備えて、ディスクドライブからなるアレイに記憶されたデータへのブロックレベルアクセスを提供するストレージサーバと、
少なくとも1つのコンピュータネットワークによってストレージサーバに結合されるホストコンピュータと、を備え、
ホストコンピュータとストレージサーバとが、少なくとも1つのコンピュータネットワークを介して、複数の並行な論理コネクションを用いて入力/出力(I/O)動作を実行し、それによって、第1のI/O動作が、第1の論理コネクションを介して実行され、第2のI/O動作が、第2の論理コネクションを介して実行される、
共有ブロックレベルネットワークストレージシステム。 - 前記論理コネクションのそれぞれが、ソケットコネクションである請求項1に記載のネットワークストレージシステム。
- 前記ソケットコネクションのそれぞれが、TCP/IPソケットコネクションである請求項2に記載のネットワークストレージシステム。
- 前記論理コネクションのそれぞれが、該論理コネクションを介して実行される複数のI/O動作が終わるまで常駐したままである請求項1に記載のネットワークストレージシステム。
- 前記ホストコンピュータが、1つのI/O動作を複数の単位I/O動作に分割するようにプログラムされ、かつ、前記複数の並行な論理コネクションのそれぞれの論理コネクションを介して、複数の単位I/O動作を並行して実行するようにプログラムされた請求項1に記載のネットワークストレージシステム。
- 前記ストレージサーバが、仮想ブロックレベルストレージアクセスをホストコンピュータに提供し、それによって、ホストコンピュータで実行されているユーザレベルプロセスにとっては、ブロックサーバが、局所的なディスクドライブストレージのように見える請求項1に記載のネットワークストレージシステム。
- 前記ストレージサーバが、複数のストレージパーティションを提供するように構成され、それらのストレージパーティションのそれぞれが、異なるホストコンピュータに割り付けられる請求項1に記載のネットワークストレージシステム。
- 前記ストレージサーバが、1つのホストコンピュータだけに割り当てられた第1のストレージパーティションを有し、それによって、そのホストコンピュータで実行されているユーザレベルプロセスにとっては、第1のストレージパーティションが、専用の局所的ディスクドライブのように見える請求項1に記載のネットワークストレージシステム。
- 前記ストレージサーバが、第2のホストコンピュータだけに割り当てられた第2のストレージパーティションをさらに有する請求項8に記載のネットワークストレージシステム。
- 前記ストレージサーバが、複数のホストコンピュータによって共有される第2のストレージパーティションをさらに有する請求項8に記載のネットワークストレージシステム。
- 前記ホストコンピュータにI/O動作を実行させる前に、ストレージサーバがホストコンピュータを認証する認証プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項1に記載のネットワークストレージシステム。
- 前記ストレージサーバがホストコンピュータに割り当てられているパーティションをそのホストコンピュータに通知する発見プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項1に記載のネットワークストレージシステム。
- 前記論理コネクションの少なくとも1つが、汎用コンピュータネットワークを介したものである請求項1に記載のネットワークストレージシステム。
- 前記論理コネクションの少なくとも1つが、イーサネット(登録商標)ネットワークを介したものである請求項1に記載のネットワークストレージシステム。
- 前記第1および第2の論理コネクションが、独立するコンピュータネットワークを介して存在する請求項1に記載のネットワークストレージシステム。
- 前記論理コネクションのそれぞれが、各リーダ/ライターペアの間に存在する請求項1に記載のネットワークストレージシステム。
- 前記ホストコンピュータと前記ストレージサーバとが、少なくとも1つのスイッチによってお互いに接続される請求項1に記載のネットワークストレージシステム。
- 前記ホストコンピュータおよび前記ストレージサーバが、それぞれ、ホストコンピュータとストレージサーバとの間に冗長なネットワーク接続を提供する2つのネットワークインタフェースを含む請求項1に記載のネットワークストレージシステム。
- ホストコンピュータのためのデータを記憶するシステムであって、
ネットワークに接続された複数のストレージサーバであり、該ストレージサーバのそれぞれは、ディスクドライブからなるアレイと、アレイコントローラと、プロセッサとを備えた、前記複数のストレージサーバと、
前記ネットワークに接続され、かつ、前記ストレージサーバにデータを記憶するようにプログラムされた複数のホストコンピュータと、
前記複数のストレージサーバを前記複数のホストコンピュータにお互いに接続する少なくとも1つのスイッチと、を備え、
各ホストコンピュータが、並行なI/O動作を実行するために、ネットワークを介してストレージサーバへの複数の並行なソケットを開くようにプログラムされた、前記システム。 - ソケットが、TCP/IPソケットである請求項19に記載のシステム。
- 複数のストレージサーバのそれぞれが、仮想ブロックレベルストレージアクセスをホストコンピュータに提供し、それによって、ホストコンピュータで実行されているユーザレベルプロセスにとっては、ブロックサーバが、局所的なディスクドライブストレージのように見える請求項19に記載のシステム。
- 前記複数のホストコンピュータの少なくとも第1のホストコンピュータが、1つのI/O動作を複数の単位I/O動作に分割するようにプログラムされ、かつ、第1のホストコンピュータとターゲットストレージサーバとの間のそれぞれの論理ソケットコネクションを介して、複数の単位I/O動作を並行して実行するようにプログラムされた請求項19に記載のシステム。
- 前記複数のストレージサーバのうちの第1のストレージサーバが、複数の可変サイズのパーティションを提供するように構成され、それらのパーティションのそれぞれが、複数のホストコンピュータの異なるホストコンピュータに割り付けらる請求項19に記載のシステム。
- 前記複数のストレージサーバのうちの第1のストレージサーバが、複数のホストコンピュータの第1のホストコンピュータだけに割り当てられた第1のパーティションを有し、それによって、第1のホストコンピュータにとっては、第1のパーティションが局所的なディスクドライブのように見える請求項19に記載のシステム。
- 前記第1のストレージサーバが、複数のホストコンピュータの第2のホストコンピュータだけに割り当てられた第2のパーティションをさらに有する請求項24に記載のシステム。
- 前記ホストコンピュータにI/O動作を実行させる前に、ストレージサーバがホストコンピュータを認証する認証プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項19に記載のシステム。
- 前記ストレージサーバがホストコンピュータに割り当てられているパーティションをそのホストコンピュータに通知する発見プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項19に記載のシステム。
- I/O動作を実行する方法であって、
1つかまたはそれ以上のコンピュータネットワークを介して、ホストコンピュータとブロックレベルストレージサーバとの間に第1および第2のTCP/IPコネクションを確立し、
前記第1のTCP/IPコネクションを介して第1のI/O動作を実行し、前記第2のTCP/IPコネクションを介して第2のI/O動作を実行し、前記I/O動作のそれぞれが、ホストコンピュータとストレージサーバとの間でI/Oデータを転送することからなり、
前記第1および第2のTCP/IPコネクションが常駐状態に維持され、それによって、それぞれのTCP/IPコネクションが、さらなるI/O動作を実行するのに使用される、前記方法。 - 前記第1および第2のTCP/IPコネクションが、独立したコンピュータネットワークを介して確立される請求項28に記載の方法。
- 前記第1のI/O動作が、ホストコンピュータで実行されている第1のアプリケーションから発行された第1のI/O要求であり、前記第2のI/O動作が、ホストコンピュータで実行されている第2のアプリケーションから発行された第2のI/O要求である請求項28に記載の方法。
- 前記第1および第2のI/O動作が、ホストコンピュータで実行されているプロセスによって発行されたI/O要求の単位I/O動作であり、それによって、I/O要求が、複数のTCP/IPコネクションを介して、並行して実行される請求項28に記載の方法。
- 前記ホストコンピュータとストレージサーバとの間に第3のTCP/IPコネクションを確立し、ストレージサーバがホストコンピュータを認証する認証手順を実行するために、第3のTCP/IPコネクションを使用することをさらに備えた請求項28に記載の方法。
- 前記ストレージサーバから第3のTCP/IPコネクションを介してホストコンピュータへアクセス情報を通知することをさらに備え、前記アクセス情報が、前記ホストコンピュータだけに割り当てられたアクセス特権を指定する請求項32に記載の方法。
- ホストコンピュータで実行されているユーザレベルプロセスから受信した入力/出力(I/O)要求を実行する方法であって、
ホストコンピュータにおいて、I/O要求を複数の単位I/O動作に分割し、
ホストコンピュータとターゲットストレージサーバとの間の複数の論理ネットワーク接続のそれぞれを介して、複数の単位I/O動作を並行して実行し、それによって、I/Oデータが、前記論理ネットワーク接続のそれぞれを介して、ホストコンピュータとストレージサーバとの間で転送される、
ことからなる方法。 - 前記論理ネットワーク接続のそれぞれが、ソケットコネクションである請求項34に記載の方法。
- 前記論理ネットワーク接続のそれぞれが、TCP/IPソケットコネクションである請求項34に記載の方法。
- 前記論理ネットワーク接続の少なくとも1つが、汎用コンピュータネットワークを介したものである請求項34に記載の方法。
- ブロックレベルストレージをコンピュータネットワークを介してホストコンピュータに提供するストレージサーバシステムであって、
プロセッサと、コントローラに結合されたディスクドライブからなるアレイと、ストレージサーバをコンピュータネットワークに接続するネットワークインタフェースとを備えたストレージサーバと、
ディスクドライブからなるアレイの記憶空間を複数のストレージパーティションに細分化する機能を提供し、かつ、1つのパーティションをネットワーク上の1つのホストコンピュータに割り付ける機能を提供し、それによって、ストレージサーバが、複数のホストコンピュータによって共有され、かつ、パーティションが、ホストコンピュータに割り付けられると、そのホストコンピュータのユーザレベルプロセスにとっては、そのパーティションが、局所的なディスクドライブに見えるソフトウェアシステムと、
を備えたストレージサーバシステム。 - 前記ソフトウェアシステムが、ホストコンピュータで実行されるホストドライバコンポーネントを備え、かつ、ストレージサーバのプロセッサによって実行されるサーバドライバコンポーネントを備え、ホストドライバコンポーネントとサーバドライバコンポーネントとが、TCP/IPコネクションによってコンピュータネットワークを介して通信する請求項38に記載のストレージサーバシステム。
- 前記ソフトウェアシステムが、コンフィギュレーションおよびマネージメントプログラムをさらに備え、そのコンフィギュレーションおよびマネージメントプログラムは、ストレージサーバで実行され、かつ、パーティションを生成し、ウェブブラウザを使用して、コンピュータネットワークを介して、ホストに割り当てる機能を提供する請求項38に記載のストレージサーバシステム。
- 前記ソフトウェアシステムが、パーティションを共有するのを可能にするために、1つのパーティションを複数のホストコンピュータに割り付ける機能をさらに提供する請求項38に記載のストレージサーバシステム。
- 前記パーティションが、ユーザが定義することのできるサイズを有する請求項38に記載のストレージサーバシステム。
- 前記ソフトウェアシステムが、ストレージサーバへの複数のそれぞれのTCP/IPコネクションを介して、複数の入力/動作をホストコンピュータが並行して実行できる能力をサポートする請求項38に記載のストレージサーバシステム。
- チャレンジレスポンスプロトコルを使用してストレージサーバがホストコンピュータを認証する認証プロトコルを、ソフトウェアシステムが実行する請求項38に記載のストレージサーバシステム。
- 前記ストレージサーバがホストコンピュータに割り当てられているストレージパーティションをそのホストコンピュータに通知する発見プロトコルを、ソフトウェアシステムが実行する請求項38に記載のストレージサーバシステム。
- コンピュータネットワークを介してストレージアクセスを提供する方法であって、
コンピュータネットワークを介して、ホストコンピュータとストレージサーバとの間に論理コネクションを確立し、
論理コネクションを介して認証手順を実行し、それによって、ストレージサーバが、ホストコンピュータを認証し、
認証手順が失敗した場合には、論理コネクションを終了し、かつ、ホストコンピュータがストレージサーバの記憶リソースにアクセスするのを拒否し、
認証手順が成功した場合には、ストレージサーバから論理コネクションを介してホストコンピュータへアクセス情報を提供し、ホストコンピュータが記憶リソースにアクセスするのを可能にし、少なくともなんらかのアクセス情報は、そのホストコンピュータに固有のものである、
ことからなる前記方法。 - 前記論理コネクションが、TCP/IPコネクションである請求項46に記載の方法。
- 前記認証手順が、ストレージサーバがランダム化チャレンジをホストコンピュータに送信し、その後に、ランダム化チャレンジに対するホストの応答が期待された応答と一致するかどうかを判定することからなる請求項46に記載の方法。
- 前記認証手順が、ストレージサーバとホストコンピュータとに共通するソフトウェアバージョンを選択し、選択されたソフトウェアバージョンに対応する認証方法を選択することをさらに備えた請求項46に記載の方法。
- 前記アクセス情報が、ホストコンピュータがI/O動作を実行するために接続してもよい一組の動的ポートを指定する請求項46に記載の方法。
- 前記アクセス情報が、ホストコンピュータによって確立されてもよいストレージサーバへの論理コネクションの最大数を指定する請求項46に記載の方法。
- 前記アクセス情報が、ホストコンピュータに割り付けられたストレージパーティションの数と、それらのストレージパーティションのサイズとを指定する請求項46に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US22466400P | 2000-08-11 | 2000-08-11 | |
PCT/US2001/025256 WO2002015018A1 (en) | 2000-08-11 | 2001-08-10 | Architecture for providing block-level storage access over a computer network |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004506980A true JP2004506980A (ja) | 2004-03-04 |
Family
ID=22841625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002520080A Pending JP2004506980A (ja) | 2000-08-11 | 2001-08-10 | コンピュータネットワークを介してブロックレベルストレージアクセスを提供するためのアーキテクチャ |
Country Status (5)
Country | Link |
---|---|
US (4) | US7392291B2 (ja) |
EP (1) | EP1317711A1 (ja) |
JP (1) | JP2004506980A (ja) |
AU (1) | AU2001286449A1 (ja) |
WO (1) | WO2002015018A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150036539A (ko) * | 2012-07-11 | 2015-04-07 | 실리콘 이미지, 인크. | 데이터 터널을 사용하는 인터페이스를 통한 복수의 프로토콜 데이터 엘러먼트들의 송신 |
KR102227189B1 (ko) * | 2020-04-03 | 2021-03-15 | 주식회사엔클라우드 | 서버에 장착되어 블록레벨 스토리지 및 리소스를 공유하는 모듈 |
Families Citing this family (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7392291B2 (en) * | 2000-08-11 | 2008-06-24 | Applied Micro Circuits Corporation | Architecture for providing block-level storage access over a computer network |
US20020154633A1 (en) * | 2000-11-22 | 2002-10-24 | Yeshik Shin | Communications architecture for storage-based devices |
JP4632574B2 (ja) * | 2001-05-25 | 2011-02-16 | 株式会社日立製作所 | 記憶装置およびファイルデータのバックアップ方法およびファイルデータのコピー方法 |
WO2003013080A1 (en) | 2001-07-31 | 2003-02-13 | Comverse Ltd. | Email protocol for a mobile environment and gateway using same |
US7370353B2 (en) * | 2001-11-05 | 2008-05-06 | Cisco Technology, Inc. | System and method for managing dynamic network sessions |
US20030189929A1 (en) * | 2002-04-04 | 2003-10-09 | Fujitsu Limited | Electronic apparatus for assisting realization of storage area network system |
EP1495577B1 (en) * | 2002-04-16 | 2014-12-10 | Thomson Licensing | Method, apparatus and system for supporting multiple collaborative sessions in a bi-directional communication device |
US8103754B1 (en) * | 2002-05-02 | 2012-01-24 | Hewlett-Packard Development Company, L.P. | Reserving a shared volume in a multiple node data storage system |
JP2004013215A (ja) * | 2002-06-03 | 2004-01-15 | Hitachi Ltd | ストレージシステム、ストレージサブシステム、および、それらを含む情報処理システム |
US7729268B2 (en) * | 2002-06-28 | 2010-06-01 | Ntt Docomo, Inc. | Method and apparatus for quality of service determination |
US7263108B2 (en) * | 2002-08-06 | 2007-08-28 | Netxen, Inc. | Dual-mode network storage systems and methods |
US7475124B2 (en) * | 2002-09-25 | 2009-01-06 | Emc Corporation | Network block services for client access of network-attached data storage in an IP network |
US7146499B2 (en) * | 2002-09-30 | 2006-12-05 | International Business Machines Corporation | Security system for replicated storage devices on computer networks |
US10051092B2 (en) * | 2002-10-15 | 2018-08-14 | Rockwell Collins, Inc. | Method and device for transparent interception of socket connections |
US8005918B2 (en) | 2002-11-12 | 2011-08-23 | Rateze Remote Mgmt. L.L.C. | Data storage devices having IP capable partitions |
US7649880B2 (en) | 2002-11-12 | 2010-01-19 | Mark Adams | Systems and methods for deriving storage area commands |
CN101448012B (zh) | 2002-11-12 | 2013-04-24 | 雷特泽遥距管理有限责任公司 | 具有ip能力分区的数据存储设备 |
US7433955B2 (en) * | 2002-11-21 | 2008-10-07 | International Business Machines Corporation | Apparatus and method for processing sequenced records across multiple network connections |
US7299279B2 (en) * | 2002-12-30 | 2007-11-20 | General Electric Company | System and method for real-time viewing of monitoring system data |
JP2005122640A (ja) * | 2003-10-20 | 2005-05-12 | Hitachi Ltd | サーバシステム及びi/oスロット共有方法。 |
JP4311637B2 (ja) | 2003-10-30 | 2009-08-12 | 株式会社日立製作所 | 記憶制御装置 |
JP2005165441A (ja) * | 2003-11-28 | 2005-06-23 | Hitachi Ltd | ストレージ制御装置、及びストレージ制御装置の制御方法 |
JP2005182122A (ja) | 2003-12-16 | 2005-07-07 | Alpine Electronics Inc | リムーバブル記録媒体及びそのファイル制御方法 |
US7739577B2 (en) * | 2004-06-03 | 2010-06-15 | Inphase Technologies | Data protection system |
CN1327724C (zh) * | 2004-06-28 | 2007-07-18 | 华为技术有限公司 | 一种用tcp发送sabp消息的方法 |
US7360237B2 (en) * | 2004-07-30 | 2008-04-15 | Lehman Brothers Inc. | System and method for secure network connectivity |
US20060102665A1 (en) * | 2004-11-12 | 2006-05-18 | International Business Machines Corporation | Retry of methods based on exception type and method type |
US8279886B2 (en) * | 2004-12-30 | 2012-10-02 | Intel Corporation | Dataport and methods thereof |
US9946729B1 (en) * | 2005-03-21 | 2018-04-17 | EMC IP Holding Company LLC | Sparse recall and writes for archived and transformed data objects |
FI120072B (fi) * | 2005-07-19 | 2009-06-15 | Ssh Comm Security Corp | Pakettidatan lähettäminen verkon yli tietoturvaprotokollaa käyttäen |
US8819092B2 (en) | 2005-08-16 | 2014-08-26 | Rateze Remote Mgmt. L.L.C. | Disaggregated resources and access methods |
US8010753B2 (en) * | 2005-09-28 | 2011-08-30 | International Business Machines Corporation | Systems and methods for temporarily transferring use of portions of partitioned memory between host computers |
US9270532B2 (en) | 2005-10-06 | 2016-02-23 | Rateze Remote Mgmt. L.L.C. | Resource command messages and methods |
US20070124400A1 (en) * | 2005-11-30 | 2007-05-31 | Digital River, Inc. | Sub Accounts System and Method |
US8171098B1 (en) * | 2006-06-29 | 2012-05-01 | Emc Corporation | Techniques for providing storage services using networked computerized devices having direct attached storage |
US9104324B2 (en) * | 2006-08-19 | 2015-08-11 | Hewlett-Packard Development Company, L.P. | Managing host logins to storage systems |
US7945643B2 (en) * | 2007-04-30 | 2011-05-17 | Hewlett-Packard Development Company, L.P. | Rules for shared entities of a network-attached storage device |
US7685374B2 (en) * | 2007-07-26 | 2010-03-23 | Siliconsystems, Inc. | Multi-interface and multi-bus structured solid-state storage subsystem |
US8392529B2 (en) | 2007-08-27 | 2013-03-05 | Pme Ip Australia Pty Ltd | Fast file server methods and systems |
US20090089864A1 (en) * | 2007-09-28 | 2009-04-02 | Nokia Corporation | Remote management of telecommunications network element during license expire and renewal period |
US9904969B1 (en) | 2007-11-23 | 2018-02-27 | PME IP Pty Ltd | Multi-user multi-GPU render server apparatus and methods |
WO2009067675A1 (en) | 2007-11-23 | 2009-05-28 | Mercury Computer Systems, Inc. | Client-server visualization system with hybrid data processing |
WO2009067680A1 (en) | 2007-11-23 | 2009-05-28 | Mercury Computer Systems, Inc. | Automatic image segmentation methods and apparartus |
US10311541B2 (en) | 2007-11-23 | 2019-06-04 | PME IP Pty Ltd | Multi-user multi-GPU render server apparatus and methods |
WO2011065929A1 (en) | 2007-11-23 | 2011-06-03 | Mercury Computer Systems, Inc. | Multi-user multi-gpu render server apparatus and methods |
US8028122B2 (en) * | 2008-01-07 | 2011-09-27 | Sandisk Il Ltd. | Methods and systems for classifying storage systems using fixed static-IP addresses |
US8214343B2 (en) * | 2008-03-19 | 2012-07-03 | Microsoft Corporation | Purposing persistent data through hardware metadata tagging |
US8261323B2 (en) * | 2008-07-11 | 2012-09-04 | International Business Machines Corporation | Managing logical sockets |
US8892789B2 (en) | 2008-12-19 | 2014-11-18 | Netapp, Inc. | Accelerating internet small computer system interface (iSCSI) proxy input/output (I/O) |
JP5241550B2 (ja) * | 2009-02-12 | 2013-07-17 | 株式会社日立製作所 | ファイル入出力方法 |
US8527697B2 (en) * | 2009-07-20 | 2013-09-03 | Netapp, Inc. | Virtualized data storage in a network computing environment |
US20110060815A1 (en) * | 2009-09-09 | 2011-03-10 | International Business Machines Corporation | Automatic attachment of server hosts to storage hostgroups in distributed environment |
EP2312437A1 (en) * | 2009-09-30 | 2011-04-20 | Thomson Licensing | Detecting client software versions |
CN101799788B (zh) * | 2010-03-23 | 2014-06-11 | 中兴通讯股份有限公司 | 一种分级管理存储资源的方法及系统 |
US8468007B1 (en) | 2010-08-13 | 2013-06-18 | Google Inc. | Emulating a peripheral mass storage device with a portable device |
KR20130081459A (ko) * | 2012-01-09 | 2013-07-17 | 삼성전자주식회사 | 휴대단말기의 pre―load 어플리케이션 탑재를 위한 메모리 영역구분 장치 |
CN103457963B (zh) * | 2012-05-28 | 2017-06-27 | 联想(北京)有限公司 | 存储文件的方法及分布式存储系统 |
TW201406101A (zh) * | 2012-07-30 | 2014-02-01 | Hon Hai Prec Ind Co Ltd | 網路設備連接方法及系統 |
US9244868B2 (en) | 2012-09-21 | 2016-01-26 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Leased lock in active-active high availability DAS systems |
US11244495B2 (en) | 2013-03-15 | 2022-02-08 | PME IP Pty Ltd | Method and system for rule based display of sets of images using image content derived parameters |
US8976190B1 (en) | 2013-03-15 | 2015-03-10 | Pme Ip Australia Pty Ltd | Method and system for rule based display of sets of images |
US10070839B2 (en) | 2013-03-15 | 2018-09-11 | PME IP Pty Ltd | Apparatus and system for rule based visualization of digital breast tomosynthesis and other volumetric images |
US10540803B2 (en) | 2013-03-15 | 2020-01-21 | PME IP Pty Ltd | Method and system for rule-based display of sets of images |
US9509802B1 (en) | 2013-03-15 | 2016-11-29 | PME IP Pty Ltd | Method and system FPOR transferring data to improve responsiveness when sending large data sets |
US11183292B2 (en) | 2013-03-15 | 2021-11-23 | PME IP Pty Ltd | Method and system for rule-based anonymized display and data export |
JP6291859B2 (ja) * | 2014-01-21 | 2018-03-14 | 富士通株式会社 | 判定プログラム,判定装置,判定方法 |
US9652308B2 (en) | 2014-09-05 | 2017-05-16 | International Business Machines Corporation | Sharing a partitioned data set across parallel applications |
US10152388B1 (en) * | 2014-09-30 | 2018-12-11 | EMC IP Holding Company LLC | Active stream counts for storage appliances |
US20170371782A1 (en) * | 2015-01-21 | 2017-12-28 | Hewlett Packard Enterprise Development Lp | Virtual storage |
US9984478B2 (en) | 2015-07-28 | 2018-05-29 | PME IP Pty Ltd | Apparatus and method for visualizing digital breast tomosynthesis and other volumetric images |
US11599672B2 (en) | 2015-07-31 | 2023-03-07 | PME IP Pty Ltd | Method and apparatus for anonymized display and data export |
US9880743B1 (en) * | 2016-03-31 | 2018-01-30 | EMC IP Holding Company LLC | Tracking compressed fragments for efficient free space management |
CN107688434B (zh) * | 2016-08-04 | 2020-03-06 | 新华三信息技术有限公司 | 磁盘阵列raid配置方法和装置 |
KR102567971B1 (ko) | 2016-11-10 | 2023-08-17 | 삼성전자주식회사 | 스토리지 어레이를 공유하는 다수의 서버 노드들을 포함하는 메모리 시스템 및 그 동작 방법 |
US10437503B2 (en) | 2017-08-02 | 2019-10-08 | Mastercard International Incorporated | Systems and methods for redundant array data alignment |
US10909679B2 (en) | 2017-09-24 | 2021-02-02 | PME IP Pty Ltd | Method and system for rule based display of sets of images using image content derived parameters |
US11209997B2 (en) | 2017-11-22 | 2021-12-28 | Blackberry Limited | Method and system for low latency data management |
US10831670B2 (en) | 2017-11-22 | 2020-11-10 | Blackberry Limited | Method and system for low latency data management |
US11514001B2 (en) * | 2018-04-17 | 2022-11-29 | EMC IP Holding Company LLC | Concurrent computations operating on same data for CPU cache efficiency |
US11436113B2 (en) * | 2018-06-28 | 2022-09-06 | Twitter, Inc. | Method and system for maintaining storage device failure tolerance in a composable infrastructure |
US10956315B2 (en) * | 2018-07-24 | 2021-03-23 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access |
TWI684914B (zh) * | 2018-12-25 | 2020-02-11 | 技嘉科技股份有限公司 | 免開機更新在板資料的電子裝置以及電子裝置包裝總成 |
US10776201B2 (en) * | 2018-12-28 | 2020-09-15 | Micron Technology, Inc. | Extended error correction in storage device |
US11340797B2 (en) * | 2019-10-04 | 2022-05-24 | Zettaset, Inc. | Dedicated encrypted container storage |
US11256816B2 (en) * | 2019-10-04 | 2022-02-22 | Zettaset, Inc. | Dynamic provisioning of encrypted container storage |
US11079944B2 (en) * | 2019-10-04 | 2021-08-03 | Zettaset, Inc. | Dynamic provisioning of container storage |
US11334482B2 (en) * | 2020-07-20 | 2022-05-17 | Vmware, Inc. | Upgrading on-disk format without service interruption |
US11651066B2 (en) * | 2021-01-07 | 2023-05-16 | EMC IP Holding Company LLC | Secure token-based communications between a host device and a storage system |
Family Cites Families (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA1293819C (en) * | 1986-08-29 | 1991-12-31 | Thinking Machines Corporation | Very large scale computer |
US5175865A (en) * | 1986-10-28 | 1992-12-29 | Thinking Machines Corporation | Partitioning the processors of a massively parallel single array processor into sub-arrays selectively controlled by host computers |
US5127097A (en) * | 1987-11-09 | 1992-06-30 | Mitsubishi Denki Kabushiki Kaisha | Memory writing apparatus |
US5163131A (en) * | 1989-09-08 | 1992-11-10 | Auspex Systems, Inc. | Parallel i/o network file server architecture |
US5239647A (en) * | 1990-09-07 | 1993-08-24 | International Business Machines Corporation | Data storage hierarchy with shared storage level |
US5544347A (en) * | 1990-09-24 | 1996-08-06 | Emc Corporation | Data storage system controlled remote data mirroring with respectively maintained data indices |
JP2868141B2 (ja) * | 1992-03-16 | 1999-03-10 | 株式会社日立製作所 | ディスクアレイ装置 |
US5581778A (en) * | 1992-08-05 | 1996-12-03 | David Sarnoff Researach Center | Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock |
US5548770A (en) * | 1993-02-25 | 1996-08-20 | Data Parallel Systems, Inc. | Method and apparatus for improving retrieval of data from a database |
JPH07234845A (ja) * | 1994-02-24 | 1995-09-05 | Fujitsu Ltd | 並列計算機における入出力用セルおよび並列計算機システム |
US5671377A (en) * | 1994-07-19 | 1997-09-23 | David Sarnoff Research Center, Inc. | System for supplying streams of data to multiple users by distributing a data stream to multiple processors and enabling each user to manipulate supplied data stream |
WO1996037840A1 (en) * | 1995-05-22 | 1996-11-28 | Mti Technology Corporation | Disk array system including a dual-ported staging memory and concurrent redundancy calculation capability |
US5628005A (en) * | 1995-06-07 | 1997-05-06 | Microsoft Corporation | System and method for providing opportunistic file access in a network environment |
US5721779A (en) * | 1995-08-28 | 1998-02-24 | Funk Software, Inc. | Apparatus and methods for verifying the identity of a party |
US6076142A (en) * | 1996-03-15 | 2000-06-13 | Ampex Corporation | User configurable raid system with multiple data bus segments and removable electrical bridges |
US5754830A (en) * | 1996-04-01 | 1998-05-19 | Openconnect Systems, Incorporated | Server and web browser terminal emulator for persistent connection to a legacy host system and method of operation |
US6101497A (en) * | 1996-05-31 | 2000-08-08 | Emc Corporation | Method and apparatus for independent and simultaneous access to a common data set |
US6137796A (en) * | 1996-06-28 | 2000-10-24 | Motorola, Inc. | Packet non-replicating comparator device for digital simulcast packet distribution |
US5867491A (en) * | 1996-06-30 | 1999-02-02 | Motorola, Inc. | Packet voting server and associated method for performing voting services on multiple radio channels simultaneously |
JPH10134485A (ja) * | 1996-10-30 | 1998-05-22 | Toshiba Corp | ストレージ共有型分散マルチメディアサーバシステム |
US6161165A (en) * | 1996-11-14 | 2000-12-12 | Emc Corporation | High performance data path with XOR on the fly |
US5907621A (en) * | 1996-11-15 | 1999-05-25 | International Business Machines Corporation | System and method for session management |
US6504817B2 (en) * | 1997-03-31 | 2003-01-07 | Hewlett-Packard Company | Fiber channel arbitrated loop dynamic loop sizing |
US6151297A (en) * | 1997-07-08 | 2000-11-21 | Hewlett-Packard Company | Method and system for link level server/switch trunking |
US5931947A (en) | 1997-09-11 | 1999-08-03 | International Business Machines Corporation | Secure array of remotely encrypted storage devices |
US6003045A (en) * | 1997-09-17 | 1999-12-14 | International Business Machines Corporation | Accessing stored files from multiple storage devices |
CN1281560A (zh) * | 1997-10-08 | 2001-01-24 | 西加特技术有限责任公司 | 混合数据存储和重建系统以及用于数据存储装置的方法 |
US6185316B1 (en) * | 1997-11-12 | 2001-02-06 | Unisys Corporation | Self-authentication apparatus and method |
US6098114A (en) * | 1997-11-14 | 2000-08-01 | 3Ware | Disk array system for processing and tracking the completion of I/O requests |
US5974532A (en) * | 1997-12-09 | 1999-10-26 | Mci Communications Corporation | System and method for generating responses for inputs using a hybrid state engine table |
US5941972A (en) * | 1997-12-31 | 1999-08-24 | Crossroads Systems, Inc. | Storage router and method for providing virtual local storage |
DE69833929T2 (de) * | 1998-04-10 | 2007-03-15 | Sun Microsystems, Inc., Mountain View | Netzzugriffsauthentifizierungssystem |
US6105067A (en) * | 1998-06-05 | 2000-08-15 | International Business Machines Corp. | Connection pool management for backend servers using common interface |
US6421711B1 (en) * | 1998-06-29 | 2002-07-16 | Emc Corporation | Virtual ports for data transferring of a data storage system |
US6260120B1 (en) * | 1998-06-29 | 2001-07-10 | Emc Corporation | Storage mapping and partitioning among multiple host processors in the presence of login state changes and host controller replacement |
US6393026B1 (en) * | 1998-09-17 | 2002-05-21 | Nortel Networks Limited | Data packet processing system and method for a router |
US6148414A (en) * | 1998-09-24 | 2000-11-14 | Seek Systems, Inc. | Methods and systems for implementing shared disk array management functions |
US6367033B1 (en) * | 1998-12-11 | 2002-04-02 | Lsi Logic Corporation | Method and apparatus for recreating fiber channel traffic |
US6564252B1 (en) * | 1999-03-11 | 2003-05-13 | Microsoft Corporation | Scalable storage system with unique client assignment to storage server partitions |
US6378036B2 (en) * | 1999-03-12 | 2002-04-23 | Diva Systems Corporation | Queuing architecture including a plurality of queues and associated method for scheduling disk access requests for video content |
US6766393B2 (en) * | 1999-03-30 | 2004-07-20 | Tvgateway, Llc | Method and apparatus for transferring data between independent fiber channel arbitrated loops in an interactive information distribution system |
US6701432B1 (en) * | 1999-04-01 | 2004-03-02 | Netscreen Technologies, Inc. | Firewall including local bus |
US6468160B2 (en) * | 1999-04-08 | 2002-10-22 | Nintendo Of America, Inc. | Security system for video game system with hard disk drive and internet access capability |
US6487581B1 (en) * | 1999-05-24 | 2002-11-26 | Hewlett-Packard Company | Apparatus and method for a multi-client event server |
US6662268B1 (en) * | 1999-09-02 | 2003-12-09 | International Business Machines Corporation | System and method for striped mirror re-synchronization by logical partition rather than stripe units |
US6633909B1 (en) * | 1999-09-23 | 2003-10-14 | International Business Machines Corporation | Notification method that guarantees a system manager discovers an SNMP agent |
US6671776B1 (en) * | 1999-10-28 | 2003-12-30 | Lsi Logic Corporation | Method and system for determining and displaying the topology of a storage array network having multiple hosts and computer readable medium for generating the topology |
US6339785B1 (en) * | 1999-11-24 | 2002-01-15 | Idan Feigenbaum | Multi-server file download |
US6725456B1 (en) * | 1999-11-29 | 2004-04-20 | Lucent Technologies Inc. | Methods and apparatus for ensuring quality of service in an operating system |
US6615315B1 (en) * | 1999-12-29 | 2003-09-02 | Emc Corporation | Fibre channel data storage system having improved fro-end I/O adapted hub |
US6983330B1 (en) * | 1999-12-29 | 2006-01-03 | Emc Corporation | Method and apparatus for using multiple paths for processing out of band commands |
US6834326B1 (en) * | 2000-02-04 | 2004-12-21 | 3Com Corporation | RAID method and device with network protocol between controller and storage devices |
US6714968B1 (en) * | 2000-02-09 | 2004-03-30 | Mitch Prust | Method and system for seamless access to a remote storage server utilizing multiple access interfaces executing on the remote server |
US6807559B1 (en) * | 2000-04-06 | 2004-10-19 | Attachmate Corporation | System and method for applet management |
US6970869B1 (en) * | 2000-05-09 | 2005-11-29 | Sun Microsystems, Inc. | Method and apparatus to discover services and negotiate capabilities |
US6618757B1 (en) * | 2000-05-17 | 2003-09-09 | Nortel Networks Limited | System and method for dynamic IP address management |
US6618798B1 (en) * | 2000-07-11 | 2003-09-09 | International Business Machines Corporation | Method, system, program, and data structures for mapping logical units to a storage space comprises of at least one array of storage units |
US7392291B2 (en) * | 2000-08-11 | 2008-06-24 | Applied Micro Circuits Corporation | Architecture for providing block-level storage access over a computer network |
US6955956B2 (en) * | 2000-12-26 | 2005-10-18 | Semiconductor Energy Laboratory Co., Ltd. | Method of manufacturing a semiconductor device |
US7543184B2 (en) * | 2006-05-23 | 2009-06-02 | The Mathworks, Inc. | System and method for distributing system tests in parallel computing environments |
-
2001
- 2001-08-10 US US09/927,894 patent/US7392291B2/en not_active Expired - Fee Related
- 2001-08-10 WO PCT/US2001/025256 patent/WO2002015018A1/en not_active Application Discontinuation
- 2001-08-10 AU AU2001286449A patent/AU2001286449A1/en not_active Abandoned
- 2001-08-10 EP EP01965893A patent/EP1317711A1/en not_active Withdrawn
- 2001-08-10 JP JP2002520080A patent/JP2004506980A/ja active Pending
-
2007
- 2007-03-08 US US11/683,944 patent/US7428581B2/en not_active Expired - Fee Related
-
2008
- 2008-08-20 US US12/195,211 patent/US8271606B2/en not_active Expired - Fee Related
- 2008-08-20 US US12/195,244 patent/US20080313187A1/en not_active Abandoned
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150036539A (ko) * | 2012-07-11 | 2015-04-07 | 실리콘 이미지, 인크. | 데이터 터널을 사용하는 인터페이스를 통한 복수의 프로토콜 데이터 엘러먼트들의 송신 |
KR102109431B1 (ko) | 2012-07-11 | 2020-05-13 | 래티스세미컨덕터코퍼레이션 | 데이터 터널을 사용하는 인터페이스를 통한 복수의 프로토콜 데이터 엘러먼트들의 송신 |
KR102227189B1 (ko) * | 2020-04-03 | 2021-03-15 | 주식회사엔클라우드 | 서버에 장착되어 블록레벨 스토리지 및 리소스를 공유하는 모듈 |
Also Published As
Publication number | Publication date |
---|---|
US20070233946A1 (en) | 2007-10-04 |
US20080313187A1 (en) | 2008-12-18 |
US20080313301A1 (en) | 2008-12-18 |
AU2001286449A1 (en) | 2002-02-25 |
US7428581B2 (en) | 2008-09-23 |
US8271606B2 (en) | 2012-09-18 |
US7392291B2 (en) | 2008-06-24 |
US20020049825A1 (en) | 2002-04-25 |
WO2002015018A1 (en) | 2002-02-21 |
EP1317711A1 (en) | 2003-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7428581B2 (en) | Architecture for providing block-level storage access over a computer network | |
US7877545B2 (en) | Online restriping technique for distributed network based virtualization | |
EP1399829B1 (en) | End node partitioning using local identifiers | |
US20190392150A1 (en) | Network-accessible computing service for micro virtual machines | |
JP5054531B2 (ja) | 暫定的に設けられたデータコンテナから未使用空間を返還要求するシステム、及び方法 | |
RU2427891C2 (ru) | Виртуальная сетевая система хранения информации, сетевое запоминающее устройство и виртуальный способ | |
TW583544B (en) | Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries | |
US7093024B2 (en) | End node partitioning using virtualization | |
JP4457185B2 (ja) | シリコンベースのストレージ仮想化サーバ | |
US6748559B1 (en) | Method and system for reliably defining and determining timeout values in unreliable datagrams | |
US7370172B2 (en) | Method and system for strategy driven provisioning of storage in a storage area network | |
US9813283B2 (en) | Efficient data transfer between servers and remote peripherals | |
US6718392B1 (en) | Queue pair partitioning in distributed computer system | |
US6907457B2 (en) | Architecture for access to embedded files using a SAN intermediate device | |
US20060095705A1 (en) | Systems and methods for data storage management | |
US20030050990A1 (en) | PCI migration semantic storage I/O | |
US20050066125A1 (en) | Storage system and virtual private volume control method | |
US7136907B1 (en) | Method and system for informing an operating system in a system area network when a new device is connected | |
US11379405B2 (en) | Internet small computer interface systems extension for remote direct memory access (RDMA) for distributed hyper-converged storage systems | |
TW583543B (en) | Infiniband work and completion queue management via head only circular buffers | |
US7409432B1 (en) | Efficient process for handover between subnet managers | |
US7774449B2 (en) | Performance profiling for improved data throughput | |
CN118266195A (zh) | 用于计算服务扩展位置处的受管第2层连接的虚拟网络接口 |