(57)【要約】【課題】ゼロ競合並列データスタックを有するシステムのデータ格納方法を提供する。【解決手段】本発明によるデータ格納方法は、データ格納システムの格納装置に格納されたデータにアクセスするためにアプリケーションの制御パススレッドにターゲットポートを割り当てる段階と、ターゲットポートに対応する格納装置パスを生成する段階と、格納装置に格納されたデータにアクセスするためにデータパススレッドを作動させる段階と、ターゲットポート、格納装置パス、及び格納装置を含む客体の中のいずれか１つを動作させるために管理ワーク要請を処理するように制御パススレッドを作動させる段階と、を含み、制御パススレッドは、非同期的にデータパススレッドに管理ワーク要請を伝送し、データパススレッドは、管理ワーク要請を完了して非同期的に制御パススレッドに管理ワーク要請完了の応答を伝送する。【選択図】図１
2017191599.tif 000002
【特許請求の範囲】
【請求項１】
データ格納システムのデータ格納方法であって、
前記データ格納システムの格納装置に格納されたデータにアクセスするためにアプリケーションの制御パススレッドにターゲットポートを割り当てる段階と、
前記ターゲットポートに対応する格納装置パスを生成する段階と、
前記格納装置に格納された前記データにアクセスするためにデータパススレッドを作動させる段階と、
前記ターゲットポート、前記格納装置パス、及び前記格納装置を含む客体の中のいずれか１つを動作させるために管理ワーク要請を処理するように制御パススレッドを作動させる段階と、を有し、
前記制御パススレッドは、非同期的に前記データパススレッドに前記管理ワーク要請を伝送し、
前記データパススレッドは、前記管理ワーク要請を完了して非同期的に前記制御パススレッドに管理ワーク要請完了の応答を伝送することを特徴とする方法。
【請求項２】
前記管理ワーク要請は、前記客体を追加するか又は削除するための動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記格納装置パスは、前記格納装置に格納された前記データにアクセスするためにＩ／Ｏキューのリンクリストを有するロックレス・キューを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記制御パススレッドは、グローバル客体リストに基づいて前記管理ワーク要請を伝送するために前記データパススレッドを識別することを特徴とする請求項３に記載の方法。
【請求項５】
前記制御パススレッドは、前記ターゲットポートを所有して管理することを特徴とする請求項１に記載の方法。
【請求項６】
前記データパススレッドは、前記格納装置及び前記格納装置パスを所有することを特徴とする請求項１に記載の方法。
【請求項７】
前記制御パススレッドは、前記格納装置及び前記格納装置パスを管理することを特徴とする請求項６に記載の方法。
【請求項８】
前記グローバル客体リストは、制御パススレッドのリスト、制御スレッドのリスト、格納装置のリスト、及びターゲットポートのリストのグローバルルックアップを含むことを特徴とする請求項４に記載の方法。
【請求項９】
前記管理ワーク要請は、新しい格納装置を追加するための要請であり、
複数のデータパススレッドの中の最小負荷データパススレッドを選択する段階と、
前記最小負荷データパススレッドに前記新しい格納装置の所有権を割り当てるために、前記制御パススレッドから前記最小負荷データパススレッドに第２管理ワーク要請を生成して伝送する段階と、
前記最小負荷データパススレッドによって、前記新しい格納装置を追加することで前記最小負荷データパススレッドによって所有されて管理された客体のリストを更新する段階と、
前記制御パススレッドによって、前記新しい格納装置の前記所有権を更新するために前記グローバル客体リストを更新する段階と、をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記管理ワーク要請は、前記格納装置を削除するための要請であり、
前記グローバル客体リストの格納装置ルックアップテーブルから前記格納装置を除去する段階と、
前記グローバル客体リストの削除リストに前記格納装置をリスティングする段階と、
前記格納装置を削除するために、前記制御パススレッドから前記格納装置パスを所有する前記データパススレッドに第２管理ワーク要請を生成して伝送する段階と、
所定のタイマー満了後に前記格納装置を削除する段階と、をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１１】
前記格納装置に対して発行された未完了Ｉ／Ｏキューを遂行する段階と、
前記制御パススレッドによって、前記制御パススレッドによって所有されて管理された客体のリストから前記格納装置を除去する段階と、
前記所定のタイマー満了後に前記グローバル客体リストの前記削除リストから前記格納装置を削除する段階と、をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記所定のタイマー満了時まで前記格納装置に対して発行された前記未完了Ｉ／Ｏキューを遂行するように前記データパススレッドを許容する段階をさらに含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記格納装置に関連する客体レファレンスカウントを提供する段階と、
前記所定のタイマー満了後に前記客体レファレンスカウントをチェックする段階と、
前記客体レファレンスカウントが前記格納装置の安全な削除を許容するゼロに到達した時に前記格納装置を削除するように決定する段階と、をさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記管理ワーク要請は、前記格納装置のアクセス制御リスト（ＡＣＬ）を生成するための要請であり、
前記ターゲットポートを通じて前記要請を受信する段階と、
前記制御パススレッドによって、前記データパススレッドに前記格納装置が露出されるように新しい格納装置パスを生成する段階と、
前記ターゲットポートに前記新しい格納装置パスをリンクする段階と、
前記制御パススレッドから前記新しい格納装置パスに第２管理ワーク要請を生成して伝送する段階と、
前記新しい格納装置パスによって、前記格納装置を追加することで前記新しい格納装置パスによって所有されて管理された客体のリストを更新する段階と、
前記制御パススレッドによって、前記格納装置の所有権を更新するために前記グローバル客体リストを更新する段階と、をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１５】
前記管理ワーク要請は、前記格納装置パスを削除するための要請であり、
前記グローバル客体リストの削除リストに前記格納装置パスをリスティングする段階と、
前記格納装置に対して発行された未完了Ｉ／Ｏキューを遂行する段階と、
前記ターゲットポートによって所有されて管理された客体のリストから前記格納装置パスを除去する段階と、
前記格納装置によって所有された格納装置パスのリストから前記格納装置パスを除去する段階と、
所定のタイマー満了後に前記格納装置パスを削除する段階と、をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１６】
前記所定のタイマー満了時まで前記格納装置に対して発行された前記未完了Ｉ／Ｏキューを遂行するように前記データパススレッドを許容する段階をさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記格納装置パスに関連する客体レファレンスカウントを提供する段階と、
前記所定のタイマー満了後に前記客体レファレンスカウントをチェックする段階と、
前記客体レファレンスカウントが前記格納装置パスの安全な削除を許容するゼロに到達した時に前記格納装置パスを削除するように決定する段階と、をさらに含むことを特徴とする請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ格納システムに関し、より詳しくは、データパススレッド（ｄａｔａ  ｐａｔｈ  ｔｈｒｅａｄ）間の競合（ｃｏｎｔｅｎｔｉｏｎ）を除去する並列データスタック（ｐａｒａｌｌｅｌ  ｄａｔａ  ｓｔａｃｋ）を提供するデータ格納システムのデータ格納方法に関する。
【背景技術】
【０００２】
データ格納システム（ｄａｔａ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍ）は、異なるクライアントに永続的なデータ格納空間のプール（ｐｏｏｌ）を提供する。ＳＣＳＩ（ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）の文脈において、入力／出力（Ｉ／Ｏ）要請を伝送するクライアントは、イニシエーター（ｉｎｉｔｉａｔｏｒ）と呼ばれ、データを格納するデータ格納装置は、ターゲット（ｔａｒｇｅｔ）と呼ばれる。イニシエーターとターゲットとは、従来のＳＣＳＩのみならず、ＦＣＰ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｐｒｏｔｏｃｏｌ）、ｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  ＳＣＳＩ）、ＨｙｐｅｒＳＣＳＩ、ＡＴＡ（Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）、ＡｏＥ（ＡＴＡ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（登録商標））、ＩｎｆｉｎｉＢａｎｄ、及びその他の格納ネットワーキングプロトコルに適用可能である。
【０００３】
ターゲットは、１つ以上のイニシエーターに、最大限に多くのＩ／Ｏ要請を処理することが可能である。イニシエーターからターゲットへのＩ／Ｏフローを処理するデータ格納システムのソフトウェアモジュールの集合を、Ｉ／Ｏスタック（ｓｔａｃｋ）と呼ぶ。Ｉ／Ｏスタックは２つの主要な構成要素を含む。１つはデータ客体（ｄａｔａ  ｏｂｊｅｃｔ）との間でＩ／Ｏプロセシングを提供するデータパス（ｄａｔａ  ｐａｔｈ）であり、他の１つはデータパスのＩ／Ｏプロセシングのために必要なデータ客体を管理する制御パス（ｃｏｎｔｒｏｌ  ｐａｔｈ）である。制御パス管理の例は、データ客体の追加（ａｄｄｉｔｉｏｎ）、削除（ｄｅｌｅｔｉｏｎ）、及び変更（ｍｏｄｉｆｉｃａｔｉｏｎ）を含むが、これらに制限されない。
【０００４】
データ格納システムのＩ／Ｏスタックにおいて、制御パスの制御動作は、データパスで使用されるデータ客体の状態（ｓｔａｔｅ）又は内容（ｃｏｎｔｅｎｔ）を変更する。これは競合を引き起こし、Ｉ／Ｏ性能を劣化させて、データ格納システムの拡張性（ｓｃａｌａｂｉｌｉｔｙ）に影響を与える同期化プリミティブ（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｐｒｉｍｉｔｉｖｅ）をもたらす。通常、制御パスとデータパスとの間の同期化プリミティブは、データパスで使用されるデータ客体が制御パスによって変更されないことを保証するために利用される。同期化プリミティブの使用は、Ｉ／Ｏワークロード（ｗｏｒｋｌｏａｄ）を実行するデータパスプロセスが同期化プリミティブを取得することを要求する。したがって、これはＩ／Ｏプロセシングに対するオーバーヘッドを追加させ、競合の可能性を増大させる。同期化プリミティブは、データ客体自体と、データ客体のグローバルリスト（ｇｌｏｂａｌ  ｌｉｓｔ）とに必要とされる。同期化プリミティブの範囲が拡大することによって、データパス内で作動する異なるデータパススレッド間の競合の可能性もまた増大する。
【０００５】
制御パスとデータパスとの間のインタラクション（ｉｎｔｅｒａｃｔｉｏｎ）は、データ格納システムにおける客体の追加、削除、及び変更を含む。データパスは、通常、制御パスより高速である。制御パスは、通常、データパスがアクセスしなければならない同一のデータ客体とインタラクトする。したがって、制御パスとデータパスとは同一データ客体に対して競合する。制御パス及びデータパスによるデータ客体へのアクセスは、通常、同期化メカニズム（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｍｅｃｈａｎｉｓｍ）によって保護される。しかし、同期化メカニズムは、性能及び並列化の劣化を引き起こし、競合及びより長いコードパスを有して、遅延を追加させる。
【０００６】
従来の格納ターゲットでは、ＬＵＮ（ｌｏｇｉｃａｌ  ｕｎｉｔ  ｎｕｍｂｅｒ）、コネクション（ｃｏｎｎｅｃｔｉｏｎ）、及びＡＣＬ（ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）のようなデータ客体が、制御パスによって管理される。制御パスによるデータ客体管理は、新しい客体の追加、既存のデータ客体の削除又は変更を含む。通常、このようなデータ客体は、リスト（ｌｉｓｔ）、ツリー（ｔｒｅｅ）、又はアレイ（ａｒｒａｙ）のようなデータ構造を利用して維持される。このような格納管理客体は、制御パスによって所有されて管理されるが、データパスでもこれらの客体を参照しなければならない。このような状況で、制御パスとデータパスとは、必要なロック（ｌｏｃｋ）を獲得することによって互いに同期化されなければならない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第７８１８４３６号明細書
【特許文献２】米国特許第９０６９４７３号明細書
【特許文献３】米国特許第８９５４９８６号明細書
【特許文献４】米国特許第８７１９８０６号明細書
【特許文献５】米国特許第８１９０８１８号明細書
【特許文献６】米国特許第７００７０４７号明細書
【特許文献７】米国特許第８３３２，７４号明細書
【特許文献８】米国特許出願公開第２０１３／０２１２２２７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、上記従来の問題点に鑑みてなされたものであって、本発明の目的は、ゼロ競合並列データスタックを有するシステムのデータ格納方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するためになされた本発明の一態様によるデータ格納システムのデータ格納方法は、前記データ格納システムの格納装置に格納されたデータにアクセスするためにアプリケーションの制御パススレッド（ｃｏｎｔｒｏｌ  ｐａｔｈ  ｔｈｒｅａｄ）にターゲットポート（ｔａｒｇｅｔ  ｐｏｒｔ）を割り当てる段階と、前記ターゲットポートに対応する格納装置パスを生成する段階と、前記格納装置に格納された前記データにアクセスするためにデータパススレッドを作動させる段階と、前記ターゲットポート、前記格納装置パス、及び前記格納装置を含む客体の中のいずれか１つを動作させるために管理ワーク要請を処理するように制御パススレッドを作動させる段階と、を有し、前記制御パススレッドは、非同期的に前記データパススレッドに前記管理ワーク要請を伝送し、前記データパススレッドは、前記管理ワーク要請を完了して非同期的に前記制御パススレッドに管理ワーク要請完了の応答を伝送することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、Ｉ／Ｏスタックモデルがゼロ競合を提供して、Ｉ／ＯスタックにおけるＩ／Ｏ処理量の線形スケーリングを可能にすることにより、向上したＩ／Ｏ性能を提供できる。また、本Ｉ／Ｏスタックモデルは、同期化無しでＩ／Ｏパス客体の削除を許容することによって、ゼロ競合を提供し、Ｉ／Ｏパス客体の削除時に参照されるデータ客体を保護するロック（ｌｏｃｋ）を獲得する必要性が除去されるので、オーバーヘッドを低減することができる。
さらに、本発明によれば、制御プレーンスレッドとデータプレーンスレッドとの間のインタラクション（ｉｎｔｅｒａｃｔｉｏｎ）が同期化を要求しないので、本Ｉ／Ｏスタックモデルは、多数の同時管理動作を制御することができ、Ｉ／Ｏパスでロック（ｌｏｃｋ）を獲得する必要性及び他の同期化メカニズムが除去されることで一貫した性能が得られる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態によるデータ格納システムの入出力（Ｉ／Ｏ）スタックモデルを示す図である。
【図２】本発明の一実施形態による客体のリストの一例を示すブロックダイヤグラムである。
【図３】本発明の一実施形態による制御パススレッドとデータパススレッドとの間のプロセス間通信のプロセスを示す図である。
【図４】本発明の一実施形態によるデータ客体を削除するための安全な削除プロセスを示す図である。
【図５】本発明の一実施形態によるデータ客体を削除するための安全な削除プロセスを示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳述に説明する。ここで説明するシステムと方法は、本発明の技術範囲から逸脱しない範囲で多様な実施形態で使用される。
本明細書で説明する特徴及び構成の各々は、データパススレッド（ｄａｔａ  ｐａｔｈ  ｔｈｒｅａｄ）間の競合を除去するための並列データスタックを提供する他の特徴及び構成と別個に又は共に利用される。これらの追加的な特徴及び構成の全てを利用する代表的な実施形態を図面を参照しながら詳細に説明する。発明の詳細な説明は技術範囲を限定するものではなく、単に本発明の一態様を具現するために当業者に開示するものである。したがって、発明の詳細な説明に記載した特徴の組み合わせは最も広い意味で構成を実施する必要は無く、代わりに特に代表的な実施形態を説明するために開示する。
図面は、望ましい実施形態を示し、一般的な説明と共に本発明の原理を開示する役割を遂行する。図面は必ずしもスケール（ｓｃａｌｅ）通りに示されず、類似する構造及び機能の構成要素は一般的に図面を通じて示す目的のために参照符号で表示される。図面は単に多様な実施形態の説明を容易にするために使用される。図面は、本明細書に記載したすべての構成を説明するものではなく、技術範囲を制限しない。
【００１３】
以下の説明では、単なる説明目的のために、特定の名称（ｓｐｅｃｉｆｉｃ  ｎｏｍｅｎｃｌａｔｕｒｅ）が、本発明の完全な理解を提供するために示される。しかし、このような特定の細部事項が、本発明を実施するために必要とされないことは当業者には明らかである。
【００１４】
本明細書の詳細な説明の一部は、コンピュータメモリ内部のデータビットに対する動作のアルゴリズム及びシンボル表現である用語で提示される。これらのアルゴリズム的な説明及び表現は、他の当業者に作業の実体（ｓｕｂｓｔａｎｃｅ  ｏｆ  ｗｏｒｋ）を効果的に伝達するために、データ処理分野の当業者によって使用される。アルゴリズムは、ここでは、一般的に、所望の結果を導く段階の一貫性あるシーケンスであると看做される。段階は、物理量の物理的操作を必要とするものである。通常、必須ではないが、これらの量は、格納、伝送、結合、比較、又は操作が可能な電気的又は磁気的信号の形態を取る。これらの信号をビット、値、要素、シンボル、キャラクター、用語、数字、などと呼ぶことは一般的な使用のために便利である。
【００１５】
しかし、これらの用語及び類似の用語の全ては、適切な物理量に関連し、これらの量に適用される便宜的なラベルに過ぎないことに留意すべきである。具体的に、以下の説明で特に記載しない限り、本明細書を通じて「プロセシング（ｐｒｏｃｅｓｓｉｎｇ）」、「計算（ｃｏｍｐｕｔｉｎｇ）」、「決定（ｄｅｔｅｒｍｉｎｉｎｇ）」、「表示（ｄｉｓｐｌａｙｉｎｇ）」又はこれらの用語を使用する論議は、コンピュータシステム又は電子計算装置の動作及びプロセスを指す。これらの動作及びプロセスは、コンピュータシステムのレジスター又はメモリ内部の物理量（電気的な量）として表されるデータを、コンピュータシステムメモリ若しくはレジスター、又は他の情報格納媒体、伝送媒体、又はディスプレイ装置内に物理量として同様に示される他のデータに、処置して変換する。
【００１６】
本明細書に提示したアルゴリズムは、本質的に任意の特定コンピュータ又は他の装置に関連しない。多様な汎用システム、コンピュータサーバー、又は個人用コンピュータは、ここに開示したプログラムと共に使用され、又は要求された方法の段階を遂行する特殊化された装置を構成するのに便利である。多様なシステムのための構造は以下で説明される。多様なプログラミング言語が本発明を具現するために利用される。
【００１７】
また、代表的な実施形態と従属請求項の多様な特徴は、本発明のさらに有用な実施形態を提供するためのものであり、特に詳細に列挙しない方法で組み合わせることができる。また、エンティティーグループ（ｇｒｏｕｐｓ  ｏｆ  ｅｎｔｉｔｉｅｓ）のすべての値の範囲又は指示は、本発明の主題を制限する目的のみならず、元の目的のためのすべての可能な中間値又は中間エンティティーを開示する。また、図面に示した構成の寸法と形状は、実施形態に示した寸法と形状に制限されず、本発明がどのように実施されるかを理解するように助けるために設計されたものである。
【００１８】
本発明は、複数のデータパスの中の競合（ｃｏｎｔｅｎｔｉｏｎ）を除去する並列データスタック（ｐａｒａｌｌｅｌ  ｄａｔａ  ｓｔａｃｋ）を提供するためのシステム及び方法に関する。また、本発明の並列データスタックは、以下の実施形態でゼロ競合（ｚｅｒｏ  ｃｏｎｔｅｎｔｉｏｎ）並列データスタックと呼ばれる。本発明の並列データスタックは、不一致が発生せず、ロックレス（ｌｏｃｋｌｅｓｓ）方式で共有されたデータ構造に同時にアクセスするための１つ以上のデータ経路を許容する。さらに、本発明の並列データスタックは、制御パスとデータパスとの間の同期化プリミティブの必要性を除去する。
【００１９】
本発明の一実施形態によるシステム及び方法は、制御パスがそれ自体のスレッド（例えば、制御パススレッド）で作動し、データパスが別々に作動する複数のデータパススレッドを有するロックレス・スレッディングモデル（ｌｏｃｋｌｅｓｓ  ｔｈｒｅａｄｉｎｇ  ｍｏｄｅｌ）を提供する。各スレッドは、制御パススレッドとデータパススレッドとの間で同期化プリミティブを必要とせず、互いに独立に作動する。本発明のロックレス・スレッディングモデルは、制御パス動作とデータパス動作との間の依存関係を要求せず、伝送階層とＬＵＮ階層の両方におけるデータパス処理動作の中でインターロッキング（ｉｎｔｅｒｌｏｃｋｉｎｇ）を要求しない。本発明のロックレス・スレッディングモデルは、ロックフリー（ｌｏｃｋ−ｆｒｅｅ）データ構造及び同期化フリー（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ−ｆｒｅｅ）データパスを提供する。本発明のロックレス・スレッディングモデルは、制御パスとデータパスとの間の競合を除去し、したがって、制御パスとデータパスとの間の同期化プリミティブの必要性を除去することができる。
【００２０】
データパススレッドは、互いに独立して、また制御パススレッドから独立して作動するので、各データパスはＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）のようなコンピューティング・リソースの追加に伴って線形的に拡張することができ、したがって、データ格納システムは、必要に応じてより多くのコンピューティング・リソースを追加することによって向上したＩ／Ｏ性能が期待される。制御パス動作は、進行中のデータパス動作に干渉しないので、変化が制御パスに生じた場合にも、一貫した性能が得られる。特定のデータパススレッドがデータ客体を所有すると、他のデータパススレッドは、変更又は削除する権限が与えられずに、そのデータ客体にアクセスすることが許される。このように、本発明のロックレス・スレッディングモデルは、タイミングに関連する競合条件（ｔｉｍｉｎｇ  ｒｅｌａｔｅｄ  ｒａｃｅ  ｃｏｎｄｉｔｉｏｎｓ）を除去することができる。
【００２１】
図１は、本発明の一実施形態によるデータ格納システムの入出力（Ｉ／Ｏ）スタックモデルを示す図である。Ｉ／Ｏスタックモデル１００は、イニシエーター（ｉｎｉｔｉａｔｏｒ）で実行されるアプリケーション１０１とのインターフェイスを提供するように構成された複数のトランスポート・エンドポイント（１０２ａ〜１０２ｄ）を含む。アプリケーション１０１は、トランスポート・エンドポイント（１０２ａ〜１０２ｄ）、ターゲットポート（ＴＰ）（１０３ａ〜１０３ｄ）、及び格納装置パス（１０４ａ〜１０４ｄ）を通じて格納装置（１０５ａ〜１０５ｃ）にＩ／Ｏ要請を発行する。また、格納装置（１０５ａ〜１０５ｃ）の動作は、制御プレーン（ｃｏｎｔｒｏｌ  ｐｌａｎｅ）１１０を通じて制御される。トランスポート・エンドポイント（１０２ａ〜１０２ｄ）は、個別的又は集合的に、以下トランスポート・エンドポイント１０２と呼ぶ。同様に、ターゲットポート（１０３ａ〜１０３ｄ）、格納装置パス（１０４ａ〜１０４ｄ）、及び格納装置（１０５ａ〜１０５ｃ）は、個別的又は集合的に、以下ターゲットポート１０３、格納装置パス１０４、及び格納装置１０５と呼ぶ。図１では、４つのトランスポート・エンドポイント（１０２ａ〜１０２ｄ）及び３つの格納装置（１０５ａ〜１０５ｃ）が示される。しかし、図１に示す実施形態は、単なる例示目的であり、任意の数のトランスポート・エンドポイント１０２及び格納装置１０５が本発明の技術範囲を逸脱することなく、使用される。
【００２２】
ここで、格納装置１０５は、Ｉ／Ｏスタックモデル１００に従ってデータを処理し、インターフェイスを制御するように採用されたデータ格納システム及びそのプロトコルの種類に依存する格納装置として一般的に参照される。例えば、ＳＣＳＩプロトコルに従って、格納装置１０５は、物理ＳＣＳＩ装置（ターゲット）の一部である個別にアドレス指定可能な（論理）ＳＣＳＩ装置を示すＬＵＮ（ｌｏｇｉｃａｌ  ｕｎｉｔ  ｎｕｍｂｅｒ）と呼ばれる。他の実施形態において、格納装置１０５は、ｉＳＣＳＩ環境で番号付き（ｎｕｍｂｅｒｅｄ）ディスクドライブを表す。エンタープライズ配置で、格納装置１０５は、クライアント毎に１つずつ割り当られたＲＡＩＤディスクアレイのサブセット（ｓｕｂｓｅｔ）を表す。
【００２３】
ターゲットポート１０３は、各々のトランスポート・エンドポイント１０２に対応するＩ／Ｏスタックモデル１００のデータ客体を示す。各ターゲットポート１０３は、ターゲットポートパス１３０を通じて各々の格納装置パス１０４に連結される。ＡＣＬ（ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）に従って、格納装置パス１０４は、ターゲットポート１０３に格納装置１０５を露出（ｅｘｐｏｓｅ）し、露出された格納装置１０５にデータパスを提供する。本実施形態で、ターゲットポート１０３ａのために確立された格納装置パス１０４ａとターゲットポート１０３ｄのために確立された格納装置パス１０４ｂの両方は、格納装置１０５ａを露出するために、リンクされた（ｌｉｎｋｅｄ）格納装置パス１４０を形成する。同様に、格納装置パス１０４ｂは、格納装置１０５ｂにデータパスインターフェイスを露出して提供する。そして、格納装置パス１０４ｃは、格納装置１０５ｃにデータパスインターフェイスを露出して提供する。本実施形態で、１つの格納装置パス１０４は、１つの格納装置１０５のみにデータパスインターフェイスを露出して提供する。格納装置パス１０４の各々は、データパスを形成する露出された格納装置１０５上のＩ／Ｏキューのリスト１２０を含む。
【００２４】
本実施形態によるデータ格納システムは、アプリケーション１０１から発行されたＩ／Ｏキューを処理及び管理するためのＩ／Ｏスタックモデル１００を採用する。このようなＩ／Ｏキューの例は、データパススレッドワークキュー（ｄａｔａ  ｐａｔｈ  ｔｈｒｅａｄ  ｗｏｒｋ  ｑｕｅｕｅ）、ターゲットポート（ＴＰ）ワークキュー、及びデータパスワークキューを含むが、これらに限定されない。データパススレッドワークキューの例は、データパス生成コマンド（ｄａｔａ  ｐａｔｈ  ｃｒｅａｔｅ  ｃｏｍｍａｎｄ）を含むが、これに限定されない。ＴＰワークキューの例は、イニシエーター生成コマンド（ｉｎｉｔｉａｔｏｒ  ｃｒｅａｔｅ  ｃｏｍｍａｎｄ）及びイニシエーター削除コマンド（ｉｎｉｔｉａｔｏｒ  ｄｅｌｅｔｅ  ｃｏｍｍａｎｄ）を含むが、これらに限定されない。データパスワークキューの例は、格納装置パス生成コマンド、格納装置パス削除コマンド、格納装置マップ（ｍａｐ）コマンド、格納装置アンマップ（ｕｎｍａｐ）コマンド、格納装置マップ動作のイニシエーターへの通知（ｎｏｔｉｆｉｃａｔｉｏｎ）、ＬＵＮリサイズ（ｒｅｓｉｚｅ）コマンド、格納装置削除コマンド、及び容量通知（ｃａｐａｃｉｔｙ  ｎｏｔｉｆｉｃａｔｉｏｎ、例えば、シンプロビジョンされた（ｔｈｉｎ  ｐｒｏｖｉｓｉｏｎｅｄ）閾値に到達した通知）を含むが、これらに限定されない。
【００２５】
イニシエーター上で作動するアプリケーション１０１は、ターゲットポート１０３及び格納装置パス１０４を通じてターゲット格納装置１０５と交渉（ｎｅｇｏｔｉａｔｅ）し、ターゲット格納装置１０５との交渉に成功した後、ターゲット格納装置１０５との連結を確立する。アプリケーション１０１は、ロー（ｒａｗ）格納装置（例えば、ＳＣＳＩ装置及びＩＤＥハードドライブ）と同じような方式でターゲット格納装置１０５を取り扱う。例えば、ＮＦＳ又はＣＩＦＳ環境で遂行される遠隔ディレクトリを装着する代わりに、ｉＳＣＩシステムは、格納装置（１０５ａ〜１０５ｃ）上のファイルシステムをフォーマットして、直接管理する。
【００２６】
制御プレーン１１０は、Ｉ／Ｏスタックモデル１００に多様な動作コマンドを提供する。例えば、制御プレーン１１０は、ターゲットポート１０３を追加又は削除し、確立されたターゲットポート１０３を活性化又は非活性化し、格納装置１０５を追加又は削除し、そしてＡＣＬ（ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）を追加又は削除する。ＡＣＬは、格納装置１０５がターゲットポート１０３を通じてイニシエーターに伝達されるようにする。ターゲットポート１０３、格納装置１０５、及びＡＣＬを追加／削除するための動作コマンド、及びターゲットポート１０３を活性化／非活性化するための動作コマンドは、対応する格納装置パス１０４を削除又は生成する。
【００２７】
通常、Ｉ／Ｏパス客体（例えば、格納装置パス１０４）は、削除動作の間に様々な同期化ポイント（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｐｏｉｎｔ）に直面する。同期化ポイントは、Ｉ／Ｏスタック上でＩ／Ｏ処理量（ｔｈｒｏｕｇｈｐｕｔ）の線形スケーリングを妨害する。例えば、格納装置パス１０４及び格納装置１０５は、他のデータ客体とターゲットポート１０３との間の同期化を要求し、削除からそれら自身を保護するためにロック（ｌｏｃｋ）を利用するＡＣＬ（ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）を要求する。格納装置パスリストへの新しい格納装置パス１０４の追加及び格納装置リストへの新しい格納装置１０５の追加は、通過するＩ／Ｏパス客体の各々に対して同期化ポイントを要求するいくつかのＩ／Ｏパス客体を通じてデータパスを通過する。また、制御プレーンとデータプレーンとの間に存在する本質的な競合（衝突）は、共有されたリストにロック（ｌｏｃｋ）が獲得された場合、データパスプレーンにおける複数のデータスレッドの中に間接的な競合を惹起する。さらに、Ｉ／Ｏ動作の完了に必要な制御プレーンとデータプレーンとの間の同期化は、複数の制御パス動作の同時制御を妨害する。
【００２８】
本実施形態によるＩ／Ｏスタックモデル１００は、物理的格納（例えば、ターゲットポート１０３及び格納装置１０５）と、格納アクセスポイント（例えば、トランスポート・エンドポイント１０２）とを抽象化するデータ客体を管理する。制御パスは、Ｉ／Ｏパス客体を生成し、削除する役割を担い、Ｉ／Ｏパスは、格納装置１０５、格納装置パス１０４、及びＩ／Ｏキューのリスト１２０を含む客体のサブセットを取り扱う。
【００２９】
本Ｉ／Ｏスタックモデル１００が提供するゼロ競合は、Ｉ／Ｏスタック上でＩ／Ｏ処理量の線形スケーリングを可能にする。データ格納システムのＩ／Ｏ処理量は、データ格納システムにより多くのデータ格納装置を追加することによって、又はデータパススレッドの個数を増加させることによって、線形的に増加する。本実施形態によるＩ／Ｏスタックモデル１００は、並列化を増加させるため、制御プレーン及びデータプレーンにスレッドを利用する。また、本Ｉ／Ｏスタックモデル１００は、同期化無しでＩ／Ｏパス客体の削除を許容することによって、ゼロ競合を提供し、これによりＩ／Ｏパス客体が削除される時、参照されるデータ客体を保護するためにロック（ｌｏｃｋ）を獲得する必要性を除去する。本Ｉ／Ｏスタックモデル１００によれば、制御プレーンスレッドとデータプレーンスレッドとの間のインタラクション（ｉｎｔｅｒａｃｔｉｏｎ）は同期化を要求しない。したがって、本Ｉ／Ｏスタックモデル１００は、多数の同時管理動作を制御することができ、Ｉ／Ｏパスでロック（ｌｏｃｋ）及び他の同期化メカニズムを獲得する必要性を除去することができる。
【００３０】
図２は、本発明の一実施形態による客体のリストの一例を示すブロックダイヤグラムである。客体のリスト２００は、格納装置の動作（例えば、追加／削除／変更動作）を管理するためのワーク要請２５０を管理及び制御する。本実施形態で、客体のリスト２００は、スピンロック（ｓｐｉｎｌｏｃｋ）リストであり、スピンロックによって保護される。スピンロックは、多くても１つのスレッドによって維持されるロックである。もし、ロックが競合する間にスレッドがスピンロックを獲得しようとすると、スレッドはロックが使用可能になるのを待って回転（ｓｐｉｎ）する（即ち、ループ（ｌｏｏｐ）内で待つ）。一方、ロックが競合しなければ、スレッドは直ちにロックを獲得して継続する。スピニング（ｓｐｉｎｎｉｎｇ）は、１つ以上のスレッドが任意の１回にデータにアクセスすることを防止する。
【００３１】
本実施形態において、客体のリスト２００は、二重にリンクされた循環リスト（ｄｏｕｂｌｙ  ｌｉｎｋｅｄ  ｃｉｒｃｕｌａｒ  ｌｉｓｔ）である。客体のリスト２００は、ロックを通じて同期化された多数のアクセス要請（２５０ａ〜２５０ｎ）を処理する。ロックは、安全に客体（例えば、ターゲットポート１０３、格納装置パス１０４、及び格納装置１０５）を削除するのに利用される。客体のリスト２００は、複数のノード、即ち、ノード１（２０２ａ）〜ノード４（２０２ｄ）を含み、リストヘッド（ｌｉｓｔ  ｈｅａｄ）２０１は、客体のリスト２００のヘッダー（ｈｅａｄｅｒ）を示す。新しいノードを追加し、既存のノード２００を削除する時、ロックは、参照されるデータ客体を保護するために利用される。
【００３２】
図１を参照すると、Ｉ／Ｏキューは以下の順に処理される。Ｉ／Ｏキューは、各格納装置１０５に対応するリスト１２０としてバッファに格納される。Ｉ／Ｏキューが発行された格納装置パス１０４がルックアップ（ｌｏｃｋｅｄ  ｕｐ）され、格納装置１０５は格納装置パス１０４からルックアップされる。Ｉ／Ｏキューは、リスト１２０にキューイングされて格納装置１０５で処理される。本実施形態では、Ｉ／Ｏスタックモデル１００は、データモデルのルート（ｒｏｏｔ）として役割を果たすグローバル客体リスト（ｇｌｏｂａｌ  ｏｂｊｅｃｔ  ｌｉｓｔ）を採用する。グローバル客体リストは、客体及びスレッドの情報、並びにそれらの関係に関する情報を格納する。
【００３３】
図３は、本発明の一実施形態による制御パススレッドとデータパススレッドとの間のプロセス間通信（ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  ｃｏｍｍｕｎｉｃａｔｉｏｎ）プロセスを示す図である。データスタック３００は、グローバル客体リスト３０１を利用する様々な客体の並列生成、削除、及び管理と、制御パススレッド３１０とデータパススレッド３２０との間の非同期通信とを活性化する。制御プレーン３６０上で、１つ以上の制御パススレッド３１０が作動する。同様に、データプレーン３７０上で、１つ以上のデータパススレッド３２０が作動する。図３に示す実施形態では、１つの制御パススレッド３１０と２つのデータパススレッド（３２０ａ、３２０ｂ）とが示される。しかし、本実施形態は説明を目的とするものであって、任意の数の制御パススレッド３１０及びデータパススレッド３２０が本発明の技術範囲を逸脱しない範囲で利用される。
【００３４】
グローバル客体リスト３０１は、データ格納システムのデータを格納する格納装置のグローバル状態（ｇｌｏｂａｌ  ｓｔａｔｅ）を維持する。グローバル客体リスト３０１は、制御パススレッド３１０のリスト、制御スレッドのリスト、格納装置１０５のリスト、ターゲットポート１０３のリスト、多様なルックアップテーブル等のグローバルルックアップを提供する。グローバル客体リスト３０１は、データを格納するターゲットが、物理的又は論理的に、多数の個別にアドレス指定可能な格納装置１０５に分散されたデータ格納システムのグローバル状態に関する情報を提供する。
【００３５】
制御パススレッド３１０は、管理ワーク要請３５１を生成し、プロセス間通信（ＩＰＣ：ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  ｃｏｍｍｕｎｉｃａｔｉｏｎ）を通じてデータパススレッド３２０に管理ワーク要請３５１をポスト（ｐｏｓｔ）する。ＩＰＣは、データを共有するためにオペレーティングシステム（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）の多数のプロセス（又はスレッド）を許容する。データパススレッド３２０は、管理ワーク要請３５１を完了する責任を有し、制御パススレッド３１０に返す応答３５２をポストする責任を有する。管理ワーク要請３５１及び応答３５２は、制御パススレッド３１０及びデータパススレッド３２０によって非同期的に伝送又は受信される。
【００３６】
データスタック３００は、制御プレーン３６０とデータプレーン３７０とによって客体オーナーシップ（所有権）及び管理の分割を提供する。例えば、制御パススレッド３１０は、図１に示すターゲットポート１０３のようなトランスポート関連客体を所有して管理する。データパススレッド３２０は、図１に示す格納装置１０５及び格納装置パス１０４のようなＩ／Ｏ関連客体を所有する。しかし、制御パススレッド３１０は、未だ格納装置１０５と格納装置パス１０４とを管理する責任を有している。管理動作の実施形態は、格納装置への新しい格納装置パスの追加／削除、及び格納装置の追加／削除を含むが、これらに制限されない。制御プレーン及びデータプレーンによるオーナーシップと管理の分割は、データスタックの客体を追加、削除、及び／又は変更する時、他に要求される同期化ポイントを除去する。スレッドが客体を所有する時、スレッドは追加／削除／変更動作を有する客体で動作するように権限を得る。追加／変更動作の場合、制御パススレッド３１０は、管理ワーク要請３５１をデータパススレッド３２０にポストする。削除動作の場合、制御プレーン３６０は、トランスポート関連客体（例えば、ターゲットポート１０３及び／又はＩ／Ｏ関連客体（例えば、格納装置１０５及び格納装置パス１０４）を含むデータスタックの客体の安全な削除のための削除−安全リスト（ｄｅｌｅｔｅ−ｓａｆｅ  ｌｉｓｔ）を採用する。
【００３７】
本実施形態において、制御プレーン３６０は、新しい格納装置１０５を追加するために管理ワーク要請３５１を受信する。制御パススレッド３１０は、１つ以上のデータ客体を割り当てて、それらを要請されたデータに基づいて初期化する。制御パススレッド３１０は、新しく追加された格納装置１０５のオーナーになるために最小負荷（ｌｅａｓｔ−ｌｏａｄｅｄ）データパススレッド（３２０）を選択する。その後、制御パススレッド３１０は、管理された客体のリストに格納装置１０５を追加する要請を含むデータパススレッド３２０への管理ワーク要請３５１を生成する。データパススレッド３２０は、管理された客体のリストに格納装置１０５を追加することによって管理ワーク要請３５１を処理し、制御パススレッド３１０に応答３５２を返信する。制御パススレッド３１０は、データパススレッド３２０から応答３５２を受信して、グローバル客体リスト３０１を更新し、管理要請（例えば、新しい格納装置１０５の追加）を完了する。
【００３８】
本実施形態において、制御プレーン３６０は、既存の格納装置１０５を削除するための管理ワーク要請３５１を受信する。制御パススレッド３１０は、格納装置１０５にさらなる管理動作が発行されることを防止するために、グローバル客体リスト３０１の格納装置ルックアップテーブルから格納装置１０５を除去する。制御パススレッド３１０は、遅延ガーベッジコレクションのための削除リストで削除される格納装置１０５に対応する格納装置パス１０４を配置する。その後、制御パススレッド３１０は、格納装置１０５を削除するための管理ワーク要請３５１を生成し、データパススレッド３２０に管理ワーク要請３５１を伝送する。データパススレッド３２０は、以下の順序（ｓｅｑｕｅｎｃｅ）にしたがって管理ワーク要請３５１を処理する。先ず、データパススレッド３２０は、格納装置１０５に対して発行されたすべてのＩ／Ｏを排出（ｄｒａｉｎ）して、さらなるＩ／Ｏ活動を防止する。次に、データパススレッド３２０は、ローカルに管理された客体から格納装置１０５を除去し、制御パススレッド３１０に応答３５２を返信する。制御パススレッド３１０は、応答３５２を受信して、格納装置１０５の割り当てを解除し、削除リストから格納装置パス１０４を除去し、削除−安全タイマーが満了した後に格納装置パス１０４を解除することによって、管理動作（例えば、格納装置１０５の削除）を完了する。削除リストから格納装置パス１０４を除去し、格納装置パス１０４を解除する詳細な段階はさらに以下で詳細に説明する。
【００３９】
本実施形態において、制御プレーン３６０は、格納装置１０５のための新しいアクセス制御リスト（ＡＣＬ：ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）を生成するための管理ワーク要請３５１を受信する。ＡＣＬは、ターゲットポート１０３を通じて特定のイニシエーターに格納装置１０５を露出する（ｅｘｐｏｓｅ）要請である。制御パススレッド３１０は、格納装置パス１０４のための客体を割り当てて、それを要請されたターゲットポイント１０３に属する格納装置パス１０４のリストに挿入する。その後、制御パススレッド３１０は、データパススレッド３２０が所有する格納装置パス１０４のリストに格納装置パス１０４を追加するように、格納装置１０５を所有するデータパススレッド３２０に管理ワーク要請３５１を伝送する。データパススレッド３２０は、管理ワーク要請３５１を受信して、格納装置１０５の格納装置パスのリストに格納装置パス１０４を追加し、制御パススレッド３１０に応答３５２を伝送する。制御パススレッド３１０は、応答３５２を受信して管理動作（例えば、ＡＣＬ生成）を完了する。
【００４０】
本実施形態において、制御プレーン３６０は、格納装置パス１０４を削除するための管理ワーク要請３５１を受信する。格納装置パス１０４を削除するプロセスは、２つの別個のイベントによって作動する。先ず、ターゲットポート１０３がオフライン状態になり、管理要請は格納装置パス１０４のＡＣＬを取り消す。ＡＣＬは、格納装置パス１０４がアクセスを提供する格納装置１０５を識別する。制御パススレッド３１０は、ターゲットポート１０３の格納装置パス１０４のリストから格納装置パス１０４を除去し、削除リストを通じて格納装置１０５の格納装置パス１０４のリストから格納装置パス１０４を除去する。制御パススレッド３１０は、遅延ガーベッジコレクションのための削除リストに格納装置パス１０４のデータ客体を追加することによって、管理動作（例えば、格納装置パス１０４を削除）を完了する。
【００４１】
本実施形態における削除−安全リストは、制御プレーン３６０から出力される削除動作を保護せず、データ客体に継続してアクセスするデータパスを許容する。制御プレーン３６０は、データプレーン３７０と同期せず、削除のために必要なガーベッジコレクションを遂行する。削除−安全リストの意味は、管理された客体のリストを通じて動作するデータパススレッド３２０が常に正常なリストに保証されることを確実にする。さらに、削除−安全リストは、現在客体を参照しているデータパススレッド３２０が、参照されている客体が制御プレーン３６０によって削除されないことを常に保証することを確実にする。
【００４２】
従来の客体のリストとは異なり、本実施形態の削除−安全リストは、以下の特徴を有する。先ず、本実施形態の削除−安全リストは、データ客体から独立したルックアップノードのリストを提供する。本実施形態において、ルックアップノードは、ルックアップリスト情報、削除リスト情報、削除タイムスタンプ、及び客体ポインターを含むが、これらに限定されない。ルックアップリスト情報は、客体のリストを探索するためにデータパススレッド３２０によって使用される。削除リスト情報は、客体が削除された時のみに有効である。制御パススレッド３１０は、削除された客体のリストを維持するために削除リスト情報を使用する。削除タイムスタンプは、削除動作が生じた時に使用される。削除タイムスタンプは、削除された客体の遅延ガーベッジコレクションを遂行するために制御パススレッド３１０によって使用される。客体ポインターは、実際のデータ客体をポイントするために使用される。客体ポインターは、データ客体を参照するデータパススレッド３２０によって、又はデータ客体に関連付けられた削除−安全タイマーが満了した後、リソースを解除（ｆｒｅｅ−ｕｐ）するために制御パススレッド３１０によって使用される。客体の削除後に、ルックアップリストは、データパススレッド３２０が客体の正常なリストに継続してアクセスできるように変更される。制御パススレッド３１０は、削除−安全タイマーが満了した後に客体のためにリソースを解除できるように保証する。
【００４３】
本実施形態において、客体レファレンスカウント（ｏｂｊｅｃｔ  ｒｅｆｅｒｅｎｃｅ  ｃｏｕｎｔ）は、削除された客体のためのリソースを解除（ｆｒｅｅ−ｕｐ）する時に使用される。例えば、データパススレッド３２０は、客体で動作する時、客体に対する客体レファレンスカウントを維持する。場合によって、客体は、削除−安全タイマーが満了した後であっても未だ参照される状態にないことがある。制御パススレッド３１０は、客体のリソースが安全に解除されることを保証するために削除−安全タイマーが満了した後に、客体レファレンスカウントがゼロに到達したか否かをチェックする。客体レファレンスカウントは、客体の非競合削除（ｃｏｎｔｅｎｔｉｏｎ−ｆｒｅｅ  ｄｅｌｅｔｉｏｎ）を可能にする。なぜなら、削除リストの客体に対する削除−安全タイマーが満了した後にのみ、制御パススレッド３１０がカウンターを読み出せる間に、データパススレッド３２０はカウンターを変更するためである。
【００４４】
図４及び図５は、本発明の一実施形態によるデータ客体を削除するための安全な削除（ｓａｆｅ  ｄｅｌｅｔｉｏｎ）プロセスを示す図である。ルックアップハッシュテーブル（ｌｏｏｋｕｐ  ｈａｓｈ  ｔａｂｌｅ）４０１は、リンクリスト（ｌｉｎｋｅｄ  ｌｉｓｔ）によってリンクされた複数のルックアップノードを含む。特定の格納装置（例えば、図１の格納装置１０５ａ）のための格納装置パスのリンクリストは、Ｉ／Ｏプロセシングの一部として格納装置パスを参照する間に、データパススレッドが制御パスに同期されなくてもよいことを保証する。本実施形態で、リンクリストは、二重リンクリスト（ｄｏｕｂｌｙ  ｌｉｎｋｅｄ  ｌｉｓｔ）によってリンクされるルックアップリスト（４０９、４１０、４１５）を含む。ルックアップリストの各々は、削除リスト、削除タイムスタンプ、及び客体をポイントする客体ポインターを含む。例えば、ルックアップリスト４１０は、削除リスト４１１、削除タイムスタンプ４１２、及び客体４１４（例えば、図１に示す格納装置パス１０４、及び格納装置１０５）をポイントする客体ポインター４１３を含む。削除リスト４１１は、ルックアップハッシュテーブル４０１の削除リストを更新するために利用される。削除タイムスタンプ４１２は、客体４１４の安全な削除（ｓａｆｅ  ｄｅｌｅｔｉｏｎ）のための時間を設定するために利用される。本実施形態で、ルックアップリスト４１０がリンクリストから除去された後、削除タイムスタンプ４１２は、客体４１４を永久に削除する安全な時間（ｓａｆｅｔｉｍｅ）を指示するために作動を開始する。
【００４５】
図４を参照すると、安全な削除プロセスは、例えば、図３の制御パススレッド３１０のように、制御パススレッドの文脈（ｃｏｎｔｅｘｔ）で動作する。ルックアップハッシュテーブル４０１によって参照されるルックアップリストの中で、制御パススレッドは、ルックアップリスト４１０に関連する客体４１４を削除することを決定する。客体４１４を削除するための制御パススレッドによる管理ワーク要請で、ルックアップリスト４１０は、リンクリストから先にリンク解除（ｕｎｌｉｎｋ）される。
【００４６】
図５を参照すると、前及び次のルックアップリスト（４０９、４１５）のそれぞれとルックアップリスト４１０とのリンクは解除され、前及び次のルックアップリスト（４０９、４１５）が直接リンクされる。しかし、削除タイムスタンプ４１２によって満了後に安全に削除（ｓａｆｅ  ｄｅｌｅｔｉｏｎ）される時まで、削除されたルックアップリストとしてマークされる間、ルックアップリスト４１０は変わらずルックアップリスト（４０９、４１５）を参照する。ルックアップハッシュテーブル４０１は、ルックアップリスト４１０の削除リスト４１１を追加するために自身の削除リスト４３０を更新する。ルックアップハッシュテーブル４０１の削除リスト４３０にリストされた後、ルックアップリスト４１０に発行された新しい管理ワーク要請は、ルックアップリスト４１０に到達しない。削除されたルックアップリスト４１０は、安全に削除タイマーが満了する時までデータパススレッドによるルックアップのために利用可能である。これは、データスレッドがハッシュルックアップテーブル４０１を通じてルックアップリスト４１０にアクセスし続けることを許容しながら、ハッシュルックアップテーブル４０１が制御パススレッドによって変更されることを許容する。安全に削除タイマーが満了した後、削除された客体４１４は、図３を参照して詳細に説明したガーベッジコレクションによって解除される。客体４１４及びそれに関連する客体は、削除タイムスタンプ４１２によって示される削除−安全タイマーの満了後に、永久に削除される。いくつかの実施形態で、客体４１４が削除−安全タイマーの満了後にデータパススレッドによって変わらず参照される場合、ルックアップリスト４１０は、客体４１４の安全な削除を示す客体レファレンスカウンターを含む。本実施形態において、客体レファレンスカウンターは、削除された客体４１４にアクセスするデータパススレッドの数を示す。他の実施形態において、客体レファレンスカウンターは、データ格納装置に発行されたＩ／Ｏキューの数を示す。
【００４７】
本実施形態によるデータ格納方法は、データ格納システムの格納装置に格納されたデータにアクセスするためにアプリケーションの制御パススレッド（ｃｏｎｔｒｏｌ  ｐａｔｈ  ｔｈｒｅａｄ）にターゲットポート（ｔａｒｇｅｔ  ｐｏｒｔ）を割り当てる段階と、ターゲットポートに対応する格納装置パスを生成する段階と、格納装置に格納されたデータにアクセスするためにデータパススレッドを作動させる段階と、ターゲットポート、格納装置パス、及び格納装置を含む客体の中のいずれか１つを稼動させるために管理ワーク要請を処理するように制御パススレッドを作動させる段階と、を有し、制御パススレッドは、非同期的にデータパススレッドに管理ワーク要請を伝送し、データパススレッドは、管理ワーク要請を完了して非同期的に制御パススレッドに管理ワーク要請完了の応答を伝送する。
【００４８】
管理ワーク要請は、客体を追加するか又は削除するための動作を含む。
【００４９】
格納装置パスは、格納装置に格納されたデータにアクセスするためにＩ／Ｏキューのリンクリスト（ｌｉｎｋｅｄ  ｌｉｓｔ）を有するロックレス・キュー（ｌｏｃｋｌｅｓｓ  ｑｕｅｕｅ）を含む。
【００５０】
制御パススレッドは、グローバル客体リスト（ｇｌｏｂａｌ  ｏｂｊｅｃｔ  ｌｉｓｔ）に基づいて管理ワーク要請を伝送するためにデータパススレッドを識別する。
【００５１】
制御パススレッドは、ターゲットポートを所有して管理する。
【００５２】
データパススレッドは、格納装置及び格納装置パスを所有する。
【００５３】
制御パススレッドは、格納装置及び格納装置パスを管理する。
【００５４】
グローバル客体リストは、制御パススレッドのリスト、制御スレッドのリスト、格納装置のリスト、及びターゲットポートのリストのグローバルルックアップ（ｇｌｏｂａｌ  ｌｏｏｋ  ｕｐ）を含む。
【００５５】
管理ワーク要請は、新しい格納装置を追加するための要請であり、本方法は、複数のデータパススレッドの中の最小負荷（ｌｅａｓｔ−ｌｏａｄｅｄ）データパススレッドを選択する段階と、最小負荷データパススレッドに新しい格納装置の所有権（ｏｗｎｅｒｓｈｉｐ）を割り当てるために、制御パススレッドから最小負荷データパススレッドに第２管理ワーク要請を生成して伝送する段階と、最小負荷データパススレッドによって、新しい格納装置を追加することで最小負荷データパススレッドによって所有されて管理された客体のリストを更新する段階と、制御パススレッドによって、新しい格納装置の所有権を更新するためにグローバル客体リストを更新する段階と、をさらに含む。
【００５６】
管理ワーク要請は、格納装置を削除するための要請であり、本方法は、グローバル客体リストの格納装置ルックアップテーブルから格納装置を除去する段階と、グローバル客体リストの削除リストに格納装置をリスティングする段階と、格納装置を削除するために、制御パススレッドから格納装置パスを所有するデータパススレッドに第２管理ワーク要請を生成して伝送する段階と、所定のタイマー満了後に格納装置を削除する段階と、をさらに含む。
【００５７】
本方法は、格納装置に対して発行された未完了Ｉ／Ｏキューを遂行する段階と、制御パススレッドによって、制御パススレッドによって所有されて管理された客体のリストから格納装置を除去する段階と、所定のタイマー満了後にグローバル客体リストの削除リストから格納装置を削除する段階と、をさらに含む。
【００５８】
本方法は、所定のタイマー満了時まで格納装置に対して発行された未完了Ｉ／Ｏキューを遂行するようにデータパススレッドを許容する段階をさらに含む。
【００５９】
本方法は、格納装置に関連する客体レファレンスカウントを提供する段階と、所定のタイマー満了後に客体レファレンスカウントをチェックする段階と、客体レファレンスカウントが格納装置の安全な削除（ｓａｆｅ  ｄｅｌｅｔｉｏｎ）を許容するゼロに到達した時に格納装置を削除するように決定する段階と、をさらに含む。
【００６０】
管理ワーク要請は、格納装置のアクセス制御リスト（ＡＣＬ：ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）を生成するための要請であり、本方法は、ターゲットポートを通じて要請を受信する段階と、制御パススレッドによって、データパススレッドに格納装置が露出されるように新しい格納装置パスを生成する段階と、ターゲットポートに新しい格納装置パスをリンクする段階と、制御パススレッドから新しい格納装置パスに第２管理ワーク要請を生成して伝送する段階と、新しい格納装置パスによって、格納装置を追加することで新しい格納装置パスによって所有されて管理された客体のリストを更新する段階と、制御パススレッドによって、格納装置の所有権を更新するためにグローバル客体リストをアップデート更新する段階と、をさらに含む。
【００６１】
管理ワーク要請は、格納装置パスを削除するための要請であり、本方法は、グローバル客体リストの削除リストに格納装置パスをリスティングする段階と、格納装置に対して発行された未完了Ｉ／Ｏキューを遂行する段階と、ターゲットポートによって所有されて管理された客体のリストから格納装置パスを除去する段階と、格納装置によって所有された格納装置パスのリストから格納装置パスを除去する段階と、所定のタイマー満了後に格納装置パスを削除する段階と、をさらに含む。
【００６２】
本方法は、所定のタイマー満了時まで格納装置に対して発行された未完了Ｉ／Ｏキューを遂行するようにデータパススレッドを許容する段階をさらに含む。
【００６３】
本方法は、格納装置パスに関連する客体レファレンスカウントを提供する段階と、所定のタイマー満了後に客体レファレンスカウントをチェックする段階と、客体レファレンスカウントが格納装置パスの安全な削除を許容するゼロに到達した時に格納装置パスを削除するように決定する段階と、をさらに含む。
【００６４】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【００６５】
１００    Ｉ／Ｏスタックモデル
１０１    アプリケーション
１０２（１０２ａ〜１０２ｄ）    トランスポート・エンドポイント
１０３（１０３ａ〜１０３ｄ）    ターゲットポート
１０４（１０４ａ〜１０４ｄ）    格納装置パス
１０５（１０５ａ〜１０５ｃ）    格納装置
１１０    制御プレーン
１２０    （Ｉ／Ｏキューの）リスト
１３０    ターゲットポートパス
１４０    リンクされた（ｌｉｎｋｅｄ）格納装置パス
２００    （客体の）リスト
２０１    リストヘッド
２０２（２０２ａ〜２０２ｄ）    ノード
２５０（２５０ａ〜２５０ｎ）    ワーク要請
３００    データスタック
３０１    グローバル客体リスト
３１０    制御パススレッド
３２０（３２０ａ、３２０ｂ）    データパススレッド
３５１（３５１ａ、３５２ｂ）    管理ワーク要請
３５１ａ、３５１ｂ    非同期管理ワーク要請
３５２    応答
３５２ａ、３５２ｂ    非同期応答
３６０    制御プレーン
３７０    データプレーン
４０１    ルックアップハッシュテーブル
４０９、４１０、４１５    ルックアップリスト
４１１、４３０    削除リスト
４１２    削除タイムスタンプ
４１３    客体ポインター
４１４    客体
【図１】
2017191599.tif 000003
【図２】
2017191599.tif 000004
【図３】
2017191599.tif 000005
【図４】
2017191599.tif 000006
【図５】
2017191599.tif 000007