(58)【調査した分野】(Int.Cl.,DB名)
前記格納装置パスは、前記格納装置に格納された前記データにアクセスするためにI/Oキューのリンクリストを有するロックレス・キューを含むことを特徴とする請求項1に記載の方法。
前記制御パススレッドは、グローバル客体リストに基づいて前記管理ワーク要請を伝送するために前記データパススレッドを識別することを特徴とする請求項3に記載の方法。
前記グローバル客体リストは、制御パススレッドのリスト、制御スレッドのリスト、格納装置のリスト、及びターゲットポートのリストのグローバルルックアップを含むことを特徴とする請求項4に記載の方法。
前記所定のタイマー満了時まで前記格納装置に対して発行された前記未完了I/Oキューを遂行するように前記データパススレッドを許容する段階をさらに含むことを特徴とする請求項11に記載の方法。
前記所定のタイマー満了時まで前記格納装置に対して発行された前記未完了I/Oキューを遂行するように前記データパススレッドを許容する段階をさらに含むことを特徴とする請求項15に記載の方法。
【背景技術】
【0002】
データ格納システム(data storage system)は、異なるクライアントに永続的なデータ格納空間のプール(pool)を提供する。SCSI(small computer system interface)の文脈において、入力/出力(I/O)要請を伝送するクライアントは、イニシエーター(initiator)と呼ばれ、データを格納するデータ格納装置は、ターゲット(target)と呼ばれる。イニシエーターとターゲットとは、従来のSCSIのみならず、FCP(Fibre Channel Protocol)、iSCSI(Internet SCSI)、HyperSCSI、ATA(Advanced Technology Attachment)、SATA(Serial ATA)、AoE(ATA over Ethernet(登録商標))、InfiniBand、及びその他の格納ネットワーキングプロトコルに適用可能である。
【0003】
ターゲットは、1つ以上のイニシエーターに、最大限に多くのI/O要請を処理することが可能である。イニシエーターからターゲットへのI/Oフローを処理するデータ格納システムのソフトウェアモジュールの集合を、I/Oスタック(stack)と呼ぶ。I/Oスタックは2つの主要な構成要素を含む。1つはデータ客体(data object)との間でI/Oプロセシングを提供するデータパス(data path)であり、他の1つはデータパスのI/Oプロセシングのために必要なデータ客体を管理する制御パス(control path)である。制御パス管理の例は、データ客体の追加(addition)、削除(deletion)、及び変更(modification)を含むが、これらに制限されない。
【0004】
データ格納システムのI/Oスタックにおいて、制御パスの制御動作は、データパスで使用されるデータ客体の状態(state)又は内容(content)を変更する。これは競合を引き起こし、I/O性能を劣化させて、データ格納システムの拡張性(scalability)に影響を与える同期化プリミティブ(synchronization primitive)をもたらす。通常、制御パスとデータパスとの間の同期化プリミティブは、データパスで使用されるデータ客体が制御パスによって変更されないことを保証するために利用される。同期化プリミティブの使用は、I/Oワークロード(workload)を実行するデータパスプロセスが同期化プリミティブを取得することを要求する。したがって、これはI/Oプロセシングに対するオーバーヘッドを追加させ、競合の可能性を増大させる。同期化プリミティブは、データ客体自体と、データ客体のグローバルリスト(global list)とに必要とされる。同期化プリミティブの範囲が拡大することによって、データパス内で作動する異なるデータパススレッド間の競合の可能性もまた増大する。
【0005】
制御パスとデータパスとの間のインタラクション(interaction)は、データ格納システムにおける客体の追加、削除、及び変更を含む。データパスは、通常、制御パスより高速である。制御パスは、通常、データパスがアクセスしなければならない同一のデータ客体とインタラクトする。したがって、制御パスとデータパスとは同一データ客体に対して競合する。制御パス及びデータパスによるデータ客体へのアクセスは、通常、同期化メカニズム(synchronization mechanism)によって保護される。しかし、同期化メカニズムは、性能及び並列化の劣化を引き起こし、競合及びより長いコードパスを有して、遅延を追加させる。
【0006】
従来の格納ターゲットでは、LUN(logical unit number)、コネクション(connection)、及びACL(access control list)のようなデータ客体が、制御パスによって管理される。制御パスによるデータ客体管理は、新しい客体の追加、既存のデータ客体の削除又は変更を含む。通常、このようなデータ客体は、リスト(list)、ツリー(tree)、又はアレイ(array)のようなデータ構造を利用して維持される。このような格納管理客体は、制御パスによって所有されて管理されるが、データパスでもこれらの客体を参照しなければならない。このような状況で、制御パスとデータパスとは、必要なロック(lock)を獲得することによって互いに同期化されなければならない。
【発明を実施するための形態】
【0012】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳述に説明する。ここで説明するシステムと方法は、本発明の技術範囲から逸脱しない範囲で多様な実施形態で使用される。
本明細書で説明する特徴及び構成の各々は、データパススレッド(data path thread)間の競合を除去するための並列データスタックを提供する他の特徴及び構成と別個に又は共に利用される。これらの追加的な特徴及び構成の全てを利用する代表的な実施形態を図面を参照しながら詳細に説明する。発明の詳細な説明は技術範囲を限定するものではなく、単に本発明の一態様を具現するために当業者に開示するものである。したがって、発明の詳細な説明に記載した特徴の組み合わせは最も広い意味で構成を実施する必要は無く、代わりに特に代表的な実施形態を説明するために開示する。
図面は、望ましい実施形態を示し、一般的な説明と共に本発明の原理を開示する役割を遂行する。図面は必ずしもスケール(scale)通りに示されず、類似する構造及び機能の構成要素は一般的に図面を通じて示す目的のために参照符号で表示される。図面は単に多様な実施形態の説明を容易にするために使用される。図面は、本明細書に記載したすべての構成を説明するものではなく、技術範囲を制限しない。
【0013】
以下の説明では、単なる説明目的のために、特定の名称(specific nomenclature)が、本発明の完全な理解を提供するために示される。しかし、このような特定の細部事項が、本発明を実施するために必要とされないことは当業者には明らかである。
【0014】
本明細書の詳細な説明の一部は、コンピュータメモリ内部のデータビットに対する動作のアルゴリズム及びシンボル表現である用語で提示される。これらのアルゴリズム的な説明及び表現は、他の当業者に作業の実体(substance of work)を効果的に伝達するために、データ処理分野の当業者によって使用される。アルゴリズムは、ここでは、一般的に、所望の結果を導く段階の一貫性あるシーケンスであると看做される。段階は、物理量の物理的操作を必要とするものである。通常、必須ではないが、これらの量は、格納、伝送、結合、比較、又は操作が可能な電気的又は磁気的信号の形態を取る。これらの信号をビット、値、要素、シンボル、キャラクター、用語、数字、などと呼ぶことは一般的な使用のために便利である。
【0015】
しかし、これらの用語及び類似の用語の全ては、適切な物理量に関連し、これらの量に適用される便宜的なラベルに過ぎないことに留意すべきである。具体的に、以下の説明で特に記載しない限り、本明細書を通じて「プロセシング(processing)」、「計算(computing)」、「決定(determining)」、「表示(displaying)」又はこれらの用語を使用する論議は、コンピュータシステム又は電子計算装置の動作及びプロセスを指す。これらの動作及びプロセスは、コンピュータシステムのレジスター又はメモリ内部の物理量(電気的な量)として表されるデータを、コンピュータシステムメモリ若しくはレジスター、又は他の情報格納媒体、伝送媒体、又はディスプレイ装置内に物理量として同様に示される他のデータに、処置して変換する。
【0016】
本明細書に提示したアルゴリズムは、本質的に任意の特定コンピュータ又は他の装置に関連しない。多様な汎用システム、コンピュータサーバー、又は個人用コンピュータは、ここに開示したプログラムと共に使用され、又は要求された方法の段階を遂行する特殊化された装置を構成するのに便利である。多様なシステムのための構造は以下で説明される。多様なプログラミング言語が本発明を具現するために利用される。
【0017】
また、代表的な実施形態と従属請求項の多様な特徴は、本発明のさらに有用な実施形態を提供するためのものであり、特に詳細に列挙しない方法で組み合わせることができる。また、エンティティーグループ(groups of entities)のすべての値の範囲又は指示は、本発明の主題を制限する目的のみならず、元の目的のためのすべての可能な中間値又は中間エンティティーを開示する。また、図面に示した構成の寸法と形状は、実施形態に示した寸法と形状に制限されず、本発明がどのように実施されるかを理解するように助けるために設計されたものである。
【0018】
本発明は、複数のデータパスの中の競合(contention)を除去する並列データスタック(parallel data stack)を提供するためのシステム及び方法に関する。また、本発明の並列データスタックは、以下の実施形態でゼロ競合(zero contention)並列データスタックと呼ばれる。本発明の並列データスタックは、不一致が発生せず、ロックレス(lockless)方式で共有されたデータ構造に同時にアクセスするための1つ以上のデータ経路を許容する。さらに、本発明の並列データスタックは、制御パスとデータパスとの間の同期化プリミティブの必要性を除去する。
【0019】
本発明の一実施形態によるシステム及び方法は、制御パスがそれ自体のスレッド(例えば、制御パススレッド)で作動し、データパスが別々に作動する複数のデータパススレッドを有するロックレス・スレッディングモデル(lockless threading model)を提供する。各スレッドは、制御パススレッドとデータパススレッドとの間で同期化プリミティブを必要とせず、互いに独立に作動する。本発明のロックレス・スレッディングモデルは、制御パス動作とデータパス動作との間の依存関係を要求せず、伝送階層とLUN階層の両方におけるデータパス処理動作の中でインターロッキング(interlocking)を要求しない。本発明のロックレス・スレッディングモデルは、ロックフリー(lock−free)データ構造及び同期化フリー(synchronization−free)データパスを提供する。本発明のロックレス・スレッディングモデルは、制御パスとデータパスとの間の競合を除去し、したがって、制御パスとデータパスとの間の同期化プリミティブの必要性を除去することができる。
【0020】
データパススレッドは、互いに独立して、また制御パススレッドから独立して作動するので、各データパスはCPU(central processing unit)のようなコンピューティング・リソースの追加に伴って線形的に拡張することができ、したがって、データ格納システムは、必要に応じてより多くのコンピューティング・リソースを追加することによって向上したI/O性能が期待される。制御パス動作は、進行中のデータパス動作に干渉しないので、変化が制御パスに生じた場合にも、一貫した性能が得られる。特定のデータパススレッドがデータ客体を所有すると、他のデータパススレッドは、変更又は削除する権限が与えられずに、そのデータ客体にアクセスすることが許される。このように、本発明のロックレス・スレッディングモデルは、タイミングに関連する競合条件(timing related race conditions)を除去することができる。
【0021】
図1は、本発明の一実施形態によるデータ格納システムの入出力(I/O)スタックモデルを示す図である。I/Oスタックモデル100は、イニシエーター(initiator)で実行されるアプリケーション101とのインターフェイスを提供するように構成された複数のトランスポート・エンドポイント(102a〜102d)を含む。アプリケーション101は、トランスポート・エンドポイント(102a〜102d)、ターゲットポート(TP)(103a〜103d)、及び格納装置パス(104a〜104d)を通じて格納装置(105a〜105c)にI/O要請を発行する。また、格納装置(105a〜105c)の動作は、制御プレーン(control plane)110を通じて制御される。トランスポート・エンドポイント(102a〜102d)は、個別的又は集合的に、以下トランスポート・エンドポイント102と呼ぶ。同様に、ターゲットポート(103a〜103d)、格納装置パス(104a〜104d)、及び格納装置(105a〜105c)は、個別的又は集合的に、以下ターゲットポート103、格納装置パス104、及び格納装置105と呼ぶ。
図1では、4つのトランスポート・エンドポイント(102a〜102d)及び3つの格納装置(105a〜105c)が示される。しかし、
図1に示す実施形態は、単なる例示目的であり、任意の数のトランスポート・エンドポイント102及び格納装置105が本発明の技術範囲を逸脱することなく、使用される。
【0022】
ここで、格納装置105は、I/Oスタックモデル100に従ってデータを処理し、インターフェイスを制御するように採用されたデータ格納システム及びそのプロトコルの種類に依存する格納装置として一般的に参照される。例えば、SCSIプロトコルに従って、格納装置105は、物理SCSI装置(ターゲット)の一部である個別にアドレス指定可能な(論理)SCSI装置を示すLUN(logical unit number)と呼ばれる。他の実施形態において、格納装置105は、iSCSI環境で番号付き(numbered)ディスクドライブを表す。エンタープライズ配置で、格納装置105は、クライアント毎に1つずつ割り当られたRAIDディスクアレイのサブセット(subset)を表す。
【0023】
ターゲットポート103は、各々のトランスポート・エンドポイント102に対応するI/Oスタックモデル100のデータ客体を示す。各ターゲットポート103は、ターゲットポートパス130を通じて各々の格納装置パス104に連結される。ACL(access control list)に従って、格納装置パス104は、ターゲットポート103に格納装置105を露出(expose)し、露出された格納装置105にデータパスを提供する。本実施形態で、ターゲットポート103aのために確立された格納装置パス104aとターゲットポート103dのために確立された格納装置パス104bの両方は、格納装置105aを露出するために、リンクされた(linked)格納装置パス140を形成する。同様に、格納装置パス104bは、格納装置105bにデータパスインターフェイスを露出して提供する。そして、格納装置パス104cは、格納装置105cにデータパスインターフェイスを露出して提供する。本実施形態で、1つの格納装置パス104は、1つの格納装置105のみにデータパスインターフェイスを露出して提供する。格納装置パス104の各々は、データパスを形成する露出された格納装置105上のI/Oキューのリスト120を含む。
【0024】
本実施形態によるデータ格納システムは、アプリケーション101から発行されたI/Oキューを処理及び管理するためのI/Oスタックモデル100を採用する。このようなI/Oキューの例は、データパススレッドワークキュー(data path thread work queue)、ターゲットポート(TP)ワークキュー、及びデータパスワークキューを含むが、これらに限定されない。データパススレッドワークキューの例は、データパス生成コマンド(data path create command)を含むが、これに限定されない。TPワークキューの例は、イニシエーター生成コマンド(initiator create command)及びイニシエーター削除コマンド(initiator delete command)を含むが、これらに限定されない。データパスワークキューの例は、格納装置パス生成コマンド、格納装置パス削除コマンド、格納装置マップ(map)コマンド、格納装置アンマップ(unmap)コマンド、格納装置マップ動作のイニシエーターへの通知(notification)、LUNリサイズ(resize)コマンド、格納装置削除コマンド、及び容量通知(capacity notification、例えば、シンプロビジョンされた(thin provisioned)閾値に到達した通知)を含むが、これらに限定されない。
【0025】
イニシエーター上で作動するアプリケーション101は、ターゲットポート103及び格納装置パス104を通じてターゲット格納装置105と交渉(negotiate)し、ターゲット格納装置105との交渉に成功した後、ターゲット格納装置105との連結を確立する。アプリケーション101は、ロー(raw)格納装置(例えば、SCSI装置及びIDEハードドライブ)と同じような方式でターゲット格納装置105を取り扱う。例えば、NFS又はCIFS環境で遂行される遠隔ディレクトリを装着する代わりに、iSCIシステムは、格納装置(105a〜105c)上のファイルシステムをフォーマットして、直接管理する。
【0026】
制御プレーン110は、I/Oスタックモデル100に多様な動作コマンドを提供する。例えば、制御プレーン110は、ターゲットポート103を追加又は削除し、確立されたターゲットポート103を活性化又は非活性化し、格納装置105を追加又は削除し、そしてACL(access control list)を追加又は削除する。ACLは、格納装置105がターゲットポート103を通じてイニシエーターに伝達されるようにする。ターゲットポート103、格納装置105、及びACLを追加/削除するための動作コマンド、及びターゲットポート103を活性化/非活性化するための動作コマンドは、対応する格納装置パス104を削除又は生成する。
【0027】
通常、I/Oパス客体(例えば、格納装置パス104)は、削除動作の間に様々な同期化ポイント(synchronization point)に直面する。同期化ポイントは、I/Oスタック上でI/O処理量(throughput)の線形スケーリングを妨害する。例えば、格納装置パス104及び格納装置105は、他のデータ客体とターゲットポート103との間の同期化を要求し、削除からそれら自身を保護するためにロック(lock)を利用するACL(access control list)を要求する。格納装置パスリストへの新しい格納装置パス104の追加及び格納装置リストへの新しい格納装置105の追加は、通過するI/Oパス客体の各々に対して同期化ポイントを要求するいくつかのI/Oパス客体を通じてデータパスを通過する。また、制御プレーンとデータプレーンとの間に存在する本質的な競合(衝突)は、共有されたリストにロック(lock)が獲得された場合、データパスプレーンにおける複数のデータスレッドの中に間接的な競合を惹起する。さらに、I/O動作の完了に必要な制御プレーンとデータプレーンとの間の同期化は、複数の制御パス動作の同時制御を妨害する。
【0028】
本実施形態によるI/Oスタックモデル100は、物理的格納(例えば、ターゲットポート103及び格納装置105)と、格納アクセスポイント(例えば、トランスポート・エンドポイント102)とを抽象化するデータ客体を管理する。制御パスは、I/Oパス客体を生成し、削除する役割を担い、I/Oパスは、格納装置105、格納装置パス104、及びI/Oキューのリスト120を含む客体のサブセットを取り扱う。
【0029】
本I/Oスタックモデル100が提供するゼロ競合は、I/Oスタック上でI/O処理量の線形スケーリングを可能にする。データ格納システムのI/O処理量は、データ格納システムにより多くのデータ格納装置を追加することによって、又はデータパススレッドの個数を増加させることによって、線形的に増加する。本実施形態によるI/Oスタックモデル100は、並列化を増加させるため、制御プレーン及びデータプレーンにスレッドを利用する。また、本I/Oスタックモデル100は、同期化無しでI/Oパス客体の削除を許容することによって、ゼロ競合を提供し、これによりI/Oパス客体が削除される時、参照されるデータ客体を保護するためにロック(lock)を獲得する必要性を除去する。本I/Oスタックモデル100によれば、制御プレーンスレッドとデータプレーンスレッドとの間のインタラクション(interaction)は同期化を要求しない。したがって、本I/Oスタックモデル100は、多数の同時管理動作を制御することができ、I/Oパスでロック(lock)及び他の同期化メカニズムを獲得する必要性を除去することができる。
【0030】
図2は、本発明の一実施形態による客体のリストの一例を示すブロックダイヤグラムである。客体のリスト200は、格納装置の動作(例えば、追加/削除/変更動作)を管理するためのワーク要請250を管理及び制御する。本実施形態で、客体のリスト200は、スピンロック(spinlock)リストであり、スピンロックによって保護される。スピンロックは、多くても1つのスレッドによって維持されるロックである。もし、ロックが競合する間にスレッドがスピンロックを獲得しようとすると、スレッドはロックが使用可能になるのを待って回転(spin)する(即ち、ループ(loop)内で待つ)。一方、ロックが競合しなければ、スレッドは直ちにロックを獲得して継続する。スピニング(spinning)は、1つ以上のスレッドが任意の1回にデータにアクセスすることを防止する。
【0031】
本実施形態において、客体のリスト200は、二重にリンクされた循環リスト(doubly linked circular list)である。客体のリスト200は、ロックを通じて同期化された多数のアクセス要請(250a〜250n)を処理する。ロックは、安全に客体(例えば、ターゲットポート103、格納装置パス104、及び格納装置105)を削除するのに利用される。客体のリスト200は、複数のノード、即ち、ノード1(202a)〜ノード4(202d)を含み、リストヘッド(list head)201は、客体のリスト200のヘッダー(header)を示す。新しいノードを追加し、既存のノード200を削除する時、ロックは、参照されるデータ客体を保護するために利用される。
【0032】
図1を参照すると、I/Oキューは以下の順に処理される。I/Oキューは、各格納装置105に対応するリスト120としてバッファに格納される。I/Oキューが発行された格納装置パス104がルックアップ(locked up)され、格納装置105は格納装置パス104からルックアップされる。I/Oキューは、リスト120にキューイングされて格納装置105で処理される。本実施形態では、I/Oスタックモデル100は、データモデルのルート(root)として役割を果たすグローバル客体リスト(global object list)を採用する。グローバル客体リストは、客体及びスレッドの情報、並びにそれらの関係に関する情報を格納する。
【0033】
図3は、本発明の一実施形態による制御パススレッドとデータパススレッドとの間のプロセス間通信(inter−process communication)プロセスを示す図である。データスタック300は、グローバル客体リスト301を利用する様々な客体の並列生成、削除、及び管理と、制御パススレッド310とデータパススレッド320との間の非同期通信とを活性化する。制御プレーン360上で、1つ以上の制御パススレッド310が作動する。同様に、データプレーン370上で、1つ以上のデータパススレッド320が作動する。
図3に示す実施形態では、1つの制御パススレッド310と2つのデータパススレッド(320a、320b)とが示される。しかし、本実施形態は説明を目的とするものであって、任意の数の制御パススレッド310及びデータパススレッド320が本発明の技術範囲を逸脱しない範囲で利用される。
【0034】
グローバル客体リスト301は、データ格納システムのデータを格納する格納装置のグローバル状態(global state)を維持する。グローバル客体リスト301は、制御パススレッド310のリスト、制御スレッドのリスト、格納装置105のリスト、ターゲットポート103のリスト、多様なルックアップテーブル等のグローバルルックアップを提供する。グローバル客体リスト301は、データを格納するターゲットが、物理的又は論理的に、多数の個別にアドレス指定可能な格納装置105に分散されたデータ格納システムのグローバル状態に関する情報を提供する。
【0035】
制御パススレッド310は、管理ワーク要請351を生成し、プロセス間通信(IPC:inter−process communication)を通じてデータパススレッド320に管理ワーク要請351をポスト(post)する。IPCは、データを共有するためにオペレーティングシステム(operating system)の多数のプロセス(又はスレッド)を許容する。データパススレッド320は、管理ワーク要請351を完了する責任を有し、制御パススレッド310に返す応答352をポストする責任を有する。管理ワーク要請351及び応答352は、制御パススレッド310及びデータパススレッド320によって非同期的に伝送又は受信される。
【0036】
データスタック300は、制御プレーン360とデータプレーン370とによって客体オーナーシップ(所有権)及び管理の分割を提供する。例えば、制御パススレッド310は、
図1に示すターゲットポート103のようなトランスポート関連客体を所有して管理する。データパススレッド320は、
図1に示す格納装置105及び格納装置パス104のようなI/O関連客体を所有する。しかし、制御パススレッド310は、未だ格納装置105と格納装置パス104とを管理する責任を有している。管理動作の実施形態は、格納装置への新しい格納装置パスの追加/削除、及び格納装置の追加/削除を含むが、これらに制限されない。制御プレーン及びデータプレーンによるオーナーシップと管理の分割は、データスタックの客体を追加、削除、及び/又は変更する時、他に要求される同期化ポイントを除去する。スレッドが客体を所有する時、スレッドは追加/削除/変更動作を有する客体で動作するように権限を得る。追加/変更動作の場合、制御パススレッド310は、管理ワーク要請351をデータパススレッド320にポストする。削除動作の場合、制御プレーン360は、トランスポート関連客体(例えば、ターゲットポート103及び/又はI/O関連客体(例えば、格納装置105及び格納装置パス104)を含むデータスタックの客体の安全な削除のための削除−安全リスト(delete−safe list)を採用する。
【0037】
本実施形態において、制御プレーン360は、新しい格納装置105を追加するために管理ワーク要請351を受信する。制御パススレッド310は、1つ以上のデータ客体を割り当てて、それらを要請されたデータに基づいて初期化する。制御パススレッド310は、新しく追加された格納装置105のオーナーになるために最小負荷(least−loaded)データパススレッド(320)を選択する。その後、制御パススレッド310は、管理された客体のリストに格納装置105を追加する要請を含むデータパススレッド320への管理ワーク要請351を生成する。データパススレッド320は、管理された客体のリストに格納装置105を追加することによって管理ワーク要請351を処理し、制御パススレッド310に応答352を返信する。制御パススレッド310は、データパススレッド320から応答352を受信して、グローバル客体リスト301を更新し、管理要請(例えば、新しい格納装置105の追加)を完了する。
【0038】
本実施形態において、制御プレーン360は、既存の格納装置105を削除するための管理ワーク要請351を受信する。制御パススレッド310は、格納装置105にさらなる管理動作が発行されることを防止するために、グローバル客体リスト301の格納装置ルックアップテーブルから格納装置105を除去する。制御パススレッド310は、遅延ガーベッジコレクションのための削除リストで削除される格納装置105に対応する格納装置パス104を配置する。その後、制御パススレッド310は、格納装置105を削除するための管理ワーク要請351を生成し、データパススレッド320に管理ワーク要請351を伝送する。データパススレッド320は、以下の順序(sequence)にしたがって管理ワーク要請351を処理する。先ず、データパススレッド320は、格納装置105に対して発行されたすべてのI/Oを排出(drain)して、さらなるI/O活動を防止する。次に、データパススレッド320は、ローカルに管理された客体から格納装置105を除去し、制御パススレッド310に応答352を返信する。制御パススレッド310は、応答352を受信して、格納装置105の割り当てを解除し、削除リストから格納装置パス104を除去し、削除−安全タイマーが満了した後に格納装置パス104を解除することによって、管理動作(例えば、格納装置105の削除)を完了する。削除リストから格納装置パス104を除去し、格納装置パス104を解除する詳細な段階はさらに以下で詳細に説明する。
【0039】
本実施形態において、制御プレーン360は、格納装置105のための新しいアクセス制御リスト(ACL:access control list)を生成するための管理ワーク要請351を受信する。ACLは、ターゲットポート103を通じて特定のイニシエーターに格納装置105を露出する(expose)要請である。制御パススレッド310は、格納装置パス104のための客体を割り当てて、それを要請されたターゲットポイント103に属する格納装置パス104のリストに挿入する。その後、制御パススレッド310は、データパススレッド320が所有する格納装置パス104のリストに格納装置パス104を追加するように、格納装置105を所有するデータパススレッド320に管理ワーク要請351を伝送する。データパススレッド320は、管理ワーク要請351を受信して、格納装置105の格納装置パスのリストに格納装置パス104を追加し、制御パススレッド310に応答352を伝送する。制御パススレッド310は、応答352を受信して管理動作(例えば、ACL生成)を完了する。
【0040】
本実施形態において、制御プレーン360は、格納装置パス104を削除するための管理ワーク要請351を受信する。格納装置パス104を削除するプロセスは、2つの別個のイベントによって作動する。先ず、ターゲットポート103がオフライン状態になり、管理要請は格納装置パス104のACLを取り消す。ACLは、格納装置パス104がアクセスを提供する格納装置105を識別する。制御パススレッド310は、ターゲットポート103の格納装置パス104のリストから格納装置パス104を除去し、削除リストを通じて格納装置105の格納装置パス104のリストから格納装置パス104を除去する。制御パススレッド310は、遅延ガーベッジコレクションのための削除リストに格納装置パス104のデータ客体を追加することによって、管理動作(例えば、格納装置パス104を削除)を完了する。
【0041】
本実施形態における削除−安全リストは、制御プレーン360から出力される削除動作を保護せず、データ客体に継続してアクセスするデータパスを許容する。制御プレーン360は、データプレーン370と同期せず、削除のために必要なガーベッジコレクションを遂行する。削除−安全リストの意味は、管理された客体のリストを通じて動作するデータパススレッド320が常に正常なリストに保証されることを確実にする。さらに、削除−安全リストは、現在客体を参照しているデータパススレッド320が、参照されている客体が制御プレーン360によって削除されないことを常に保証することを確実にする。
【0042】
従来の客体のリストとは異なり、本実施形態の削除−安全リストは、以下の特徴を有する。先ず、本実施形態の削除−安全リストは、データ客体から独立したルックアップノードのリストを提供する。本実施形態において、ルックアップノードは、ルックアップリスト情報、削除リスト情報、削除タイムスタンプ、及び客体ポインターを含むが、これらに限定されない。ルックアップリスト情報は、客体のリストを探索するためにデータパススレッド320によって使用される。削除リスト情報は、客体が削除された時のみに有効である。制御パススレッド310は、削除された客体のリストを維持するために削除リスト情報を使用する。削除タイムスタンプは、削除動作が生じた時に使用される。削除タイムスタンプは、削除された客体の遅延ガーベッジコレクションを遂行するために制御パススレッド310によって使用される。客体ポインターは、実際のデータ客体をポイントするために使用される。客体ポインターは、データ客体を参照するデータパススレッド320によって、又はデータ客体に関連付けられた削除−安全タイマーが満了した後、リソースを解除(free−up)するために制御パススレッド310によって使用される。客体の削除後に、ルックアップリストは、データパススレッド320が客体の正常なリストに継続してアクセスできるように変更される。制御パススレッド310は、削除−安全タイマーが満了した後に客体のためにリソースを解除できるように保証する。
【0043】
本実施形態において、客体レファレンスカウント(object reference count)は、削除された客体のためのリソースを解除(free−up)する時に使用される。例えば、データパススレッド320は、客体で動作する時、客体に対する客体レファレンスカウントを維持する。場合によって、客体は、削除−安全タイマーが満了した後であっても未だ参照される状態にないことがある。制御パススレッド310は、客体のリソースが安全に解除されることを保証するために削除−安全タイマーが満了した後に、客体レファレンスカウントがゼロに到達したか否かをチェックする。客体レファレンスカウントは、客体の非競合削除(contention−free deletion)を可能にする。なぜなら、削除リストの客体に対する削除−安全タイマーが満了した後にのみ、制御パススレッド310がカウンターを読み出せる間に、データパススレッド320はカウンターを変更するためである。
【0044】
図4及び
図5は、本発明の一実施形態によるデータ客体を削除するための安全な削除(safe deletion)プロセスを示す図である。ルックアップハッシュテーブル(lookup hash table)401は、リンクリスト(linked list)によってリンクされた複数のルックアップノードを含む。特定の格納装置(例えば、
図1の格納装置105a)のための格納装置パスのリンクリストは、I/Oプロセシングの一部として格納装置パスを参照する間に、データパススレッドが制御パスに同期されなくてもよいことを保証する。本実施形態で、リンクリストは、二重リンクリスト(doubly linked list)によってリンクされるルックアップリスト(409、410、415)を含む。ルックアップリストの各々は、削除リスト、削除タイムスタンプ、及び客体をポイントする客体ポインターを含む。例えば、ルックアップリスト410は、削除リスト411、削除タイムスタンプ412、及び客体414(例えば、
図1に示す格納装置パス104、及び格納装置105)をポイントする客体ポインター413を含む。削除リスト411は、ルックアップハッシュテーブル401の削除リストを更新するために利用される。削除タイムスタンプ412は、客体414の安全な削除(safe deletion)のための時間を設定するために利用される。本実施形態で、ルックアップリスト410がリンクリストから除去された後、削除タイムスタンプ412は、客体414を永久に削除する安全な時間(safetime)を指示するために作動を開始する。
【0045】
図4を参照すると、安全な削除プロセスは、例えば、
図3の制御パススレッド310のように、制御パススレッドの文脈(context)で動作する。ルックアップハッシュテーブル401によって参照されるルックアップリストの中で、制御パススレッドは、ルックアップリスト410に関連する客体414を削除することを決定する。客体414を削除するための制御パススレッドによる管理ワーク要請で、ルックアップリスト410は、リンクリストから先にリンク解除(unlink)される。
【0046】
図5を参照すると、前及び次のルックアップリスト(409、415)のそれぞれとルックアップリスト410とのリンクは解除され、前及び次のルックアップリスト(409、415)が直接リンクされる。しかし、削除タイムスタンプ412によって満了後に安全に削除(safe deletion)される時まで、削除されたルックアップリストとしてマークされる間、ルックアップリスト410は変わらずルックアップリスト(409、415)を参照する。ルックアップハッシュテーブル401は、ルックアップリスト410の削除リスト411を追加するために自身の削除リスト430を更新する。ルックアップハッシュテーブル401の削除リスト430にリストされた後、ルックアップリスト410に発行された新しい管理ワーク要請は、ルックアップリスト410に到達しない。削除されたルックアップリスト410は、安全に削除タイマーが満了する時までデータパススレッドによるルックアップのために利用可能である。これは、データスレッドがハッシュルックアップテーブル401を通じてルックアップリスト410にアクセスし続けることを許容しながら、ハッシュルックアップテーブル401が制御パススレッドによって変更されることを許容する。安全に削除タイマーが満了した後、削除された客体414は、
図3を参照して詳細に説明したガーベッジコレクションによって解除される。客体414及びそれに関連する客体は、削除タイムスタンプ412によって示される削除−安全タイマーの満了後に、永久に削除される。いくつかの実施形態で、客体414が削除−安全タイマーの満了後にデータパススレッドによって変わらず参照される場合、ルックアップリスト410は、客体414の安全な削除を示す客体レファレンスカウンターを含む。本実施形態において、客体レファレンスカウンターは、削除された客体414にアクセスするデータパススレッドの数を示す。他の実施形態において、客体レファレンスカウンターは、データ格納装置に発行されたI/Oキューの数を示す。
【0047】
本実施形態によるデータ格納方法は、データ格納システムの格納装置に格納されたデータにアクセスするためにアプリケーションの制御パススレッド(control path thread)にターゲットポート(target port)を割り当てる段階と、ターゲットポートに対応する格納装置パスを生成する段階と、格納装置に格納されたデータにアクセスするためにデータパススレッドを作動させる段階と、ターゲットポート、格納装置パス、及び格納装置を含む客体の中のいずれか1つを稼動させるために管理ワーク要請を処理するように制御パススレッドを作動させる段階と、を有し、制御パススレッドは、非同期的にデータパススレッドに管理ワーク要請を伝送し、データパススレッドは、管理ワーク要請を完了して非同期的に制御パススレッドに管理ワーク要請完了の応答を伝送する。
【0048】
管理ワーク要請は、客体を追加するか又は削除するための動作を含む。
【0049】
格納装置パスは、格納装置に格納されたデータにアクセスするためにI/Oキューのリンクリスト(linked list)を有するロックレス・キュー(lockless queue)を含む。
【0050】
制御パススレッドは、グローバル客体リスト(global object list)に基づいて管理ワーク要請を伝送するためにデータパススレッドを識別する。
【0051】
制御パススレッドは、ターゲットポートを所有して管理する。
【0052】
データパススレッドは、格納装置及び格納装置パスを所有する。
【0053】
制御パススレッドは、格納装置及び格納装置パスを管理する。
【0054】
グローバル客体リストは、制御パススレッドのリスト、制御スレッドのリスト、格納装置のリスト、及びターゲットポートのリストのグローバルルックアップ(global look up)を含む。
【0055】
管理ワーク要請は、新しい格納装置を追加するための要請であり、本方法は、複数のデータパススレッドの中の最小負荷(least−loaded)データパススレッドを選択する段階と、最小負荷データパススレッドに新しい格納装置の所有権(ownership)を割り当てるために、制御パススレッドから最小負荷データパススレッドに第2管理ワーク要請を生成して伝送する段階と、最小負荷データパススレッドによって、新しい格納装置を追加することで最小負荷データパススレッドによって所有されて管理された客体のリストを更新する段階と、制御パススレッドによって、新しい格納装置の所有権を更新するためにグローバル客体リストを更新する段階と、をさらに含む。
【0056】
管理ワーク要請は、格納装置を削除するための要請であり、本方法は、グローバル客体リストの格納装置ルックアップテーブルから格納装置を除去する段階と、グローバル客体リストの削除リストに格納装置をリスティングする段階と、格納装置を削除するために、制御パススレッドから格納装置パスを所有するデータパススレッドに第2管理ワーク要請を生成して伝送する段階と、所定のタイマー満了後に格納装置を削除する段階と、をさらに含む。
【0057】
本方法は、格納装置に対して発行された未完了I/Oキューを遂行する段階と、制御パススレッドによって、制御パススレッドによって所有されて管理された客体のリストから格納装置を除去する段階と、所定のタイマー満了後にグローバル客体リストの削除リストから格納装置を削除する段階と、をさらに含む。
【0058】
本方法は、所定のタイマー満了時まで格納装置に対して発行された未完了I/Oキューを遂行するようにデータパススレッドを許容する段階をさらに含む。
【0059】
本方法は、格納装置に関連する客体レファレンスカウントを提供する段階と、所定のタイマー満了後に客体レファレンスカウントをチェックする段階と、客体レファレンスカウントが格納装置の安全な削除(safe deletion)を許容するゼロに到達した時に格納装置を削除するように決定する段階と、をさらに含む。
【0060】
管理ワーク要請は、格納装置のアクセス制御リスト(ACL:access control list)を生成するための要請であり、本方法は、ターゲットポートを通じて要請を受信する段階と、制御パススレッドによって、データパススレッドに格納装置が露出されるように新しい格納装置パスを生成する段階と、ターゲットポートに新しい格納装置パスをリンクする段階と、制御パススレッドから新しい格納装置パスに第2管理ワーク要請を生成して伝送する段階と、新しい格納装置パスによって、格納装置を追加することで新しい格納装置パスによって所有されて管理された客体のリストを更新する段階と、制御パススレッドによって、格納装置の所有権を更新するためにグローバル客体リストをアップデート更新する段階と、をさらに含む。
【0061】
管理ワーク要請は、格納装置パスを削除するための要請であり、本方法は、グローバル客体リストの削除リストに格納装置パスをリスティングする段階と、格納装置に対して発行された未完了I/Oキューを遂行する段階と、ターゲットポートによって所有されて管理された客体のリストから格納装置パスを除去する段階と、格納装置によって所有された格納装置パスのリストから格納装置パスを除去する段階と、所定のタイマー満了後に格納装置パスを削除する段階と、をさらに含む。
【0062】
本方法は、所定のタイマー満了時まで格納装置に対して発行された未完了I/Oキューを遂行するようにデータパススレッドを許容する段階をさらに含む。
【0063】
本方法は、格納装置パスに関連する客体レファレンスカウントを提供する段階と、所定のタイマー満了後に客体レファレンスカウントをチェックする段階と、客体レファレンスカウントが格納装置パスの安全な削除を許容するゼロに到達した時に格納装置パスを削除するように決定する段階と、をさらに含む。
【0064】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。