(58)【調査した分野】(Int.Cl.,DB名)
前記データ経路スレッドは、前記I/Oコマンドを前記ターゲットに伝送し、前記ターゲットから状態及びデータの中の少なくとも1つを受信し、前記伝送スレッドの前記トランスミッタに前記状態及びデータの中の少なくとも1つを伝送することを特徴とする請求項2に記載の方法。
前記I/Oコマンド発行キュー及び前記I/O完了キューの各々は、MPMC(multi−producer multi−consumer)ロックレス・キューであり、
1つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、
特定の伝送スレッドからの作業要請は、1つ以上のデータ経路スレッドに到達し、
1つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、
特定のデータ経路スレッドからの作業要請は、1つ以上の伝送スレッドに到達することを特徴とする請求項1に記載の方法。
前記データ経路スレッドは、前記I/Oコマンドを前記ターゲットに伝送し、前記ターゲットから状態及びデータの中の少なくとも1つを受信し、前記伝送スレッドの前記トランスミッタに前記状態及びデータの中の少なくとも1つを伝送することを特徴とする請求項14に記載のデータストレージシステム。
前記消費者は、前記データ経路スレッドの各々に固有のスレッド識別子を利用して前記キューへの排他的なアクセスを獲得することを特徴とする請求項18に記載のデータストレージシステム。
前記I/Oコマンド発行キュー及び前記I/O完了キューの各々は、MPMC(multi−producer multi−consumer)ロックレス・キューであり、
1つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、
特定の伝送スレッドからの作業要請は、1つ以上のデータ経路スレッドに到達し、
1つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、
特定のデータ経路スレッドからの作業要請は、1つ以上の伝送スレッドに到達することを特徴とする請求項13に記載のデータストレージシステム。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。 本明細書で説明する特徴及び構成の各々は、高性能なロックレススケーラブルターゲット(lockless scalable target)を提供するための他の特徴及び構成と共に又は分離されて利用される。これらの追加的な特徴及び構成が分離されるか又は結合されて利用される代表的な例の詳細な説明は、単に本発明の一態様を具現するために当業者に開示するものである。したがって、発明の詳細な説明に記載した特徴の組合せは、広い意味で開示する必要はなく、代わりに特に代表的な実施形態を説明するために開示する。
【0015】
図面は、必ずしもスケール通りに示したものではなく、類似する構造又は機能の構成要素は、通常同じ参照番号で表示する。図面は、本明細書で説明する多様な実施形態の詳細な説明を可能にするために意図したものである。図面は、本明細書に記載したすべての構成を示すものではない。
【0016】
以下の説明では、単なる説明の目的のために、特定の名称を、本発明の完全な理解のために示す。しかし、このような特定の細部事項は、本発明を実施するために必須ではないことは当業者に明らかである。
【0017】
発明の詳細な説明の幾つかの部分は、アルゴリズム及びコンピュータメモリ内のデータビットに対する動作のシンボル表現で提示する。これらのアルゴリズム的な説明及び表現は、他の分野の通常の知識を有する技術者に作業の実体を効果的に伝達するために、データ処理分野の当業者によって使用される。ここで、アルゴリズムは、一般的に所望の結果を導く段階の一貫性のある手順である。段階は、物理量の物理的な操作が必要なものである。通常、必須ではないが、これらの量は、格納、伝達、結合、比較、及びその他の操作可能な電気信号又は磁気信号の形態を取る。これらの信号をビット、値、要素、シンボル、特徴、用語、数などと称することは、主に一般的な用法上の理由で便利である。
【0018】
しかし、これらの用語及び類似の用語の全ては、適切な物理量に関連し、単にこれらの量に適用される便宜的なラベルである。具体的に、以下の説明で、「処理」、「コンピューティング」、「計算」、「決定」、「表示」等の用語を使用する論議は、コンピュータシステムのレジスター及びメモリ内で物理(電気)量として表されるデータを、コンピュータシステムのメモリ及びレジスター、又は他の情報ストレージ、伝送装置又は表示装置内で物理量として示される他のデータに処置して変換するコンピュータシステム又は同様の電子コンピューティング装置の活動及びプロセスを示す。
【0019】
本明細書で説明するアルゴリズムは、本質的に任意の特定コンピュータ又は他の装置に関連しない。多様な汎用システム、コンピュータサーバー、又は個人用コンピュータは、本明細書の記載にしたがうプログラムと共に使用されるか、又は要求された方法の段階を遂行するための特化された装置を構成するのに便利である。このような多様なシステムのために要求される構造を以下で説明する。多様なプログラミング言語が本明細書に記載のように本発明を具現するのに使用される。
【0020】
また、代表的な実施形態及び従属請求項の多様な特徴は、本発明のさらに有用な実施形態を提供するために、特に明示的に列挙しない方式で結合される。また、エンティティーグループ(groups of entities)のすべての値の範囲又は指示は、本発明の範囲を制限する目的のみならず、元の目的のための全ての可能な中間値又は中間エンティティーを開示する。また、明示的な基準及び図面に示した構成要素の寸法及び形状は、本発明がどのように実施されるのかを理解するのを助けるように設計されるが、実施形態に示した寸法及び形状に限定されない。
【0021】
図1は、本発明の一実施形態によるモノリシック(monolithic)スレッディングモデルにおけるデータ経路の例を示す図である。
【0022】
データ経路は、iSCSIレシーバー経路(iSCSI receiver path)101、SCSIコマンド発行経路(command issue path)102、SCSIコマンド完了経路(command completion path)103、及びiSCSIトランスミッタ経路(transmitter path)104のモノリシックシーケンスを含む。
【0023】
ストレージシステムは、複数の中央処理装置(CPU:central processing unit)(例えば、N個のCPU)を含み、当該ストレージシステムの各CPUは、データ経路のライフサイクルに亘ってそれぞれのデータ経路の確立、処理、管理、及び完了を担当する。
【0024】
データ経路(101〜104)のうち、iSCSIレシーバー経路101及びiSCSIトランスミッタ経路104は、イニシエーターとSCSIターゲットとの間の伝送プロトコル(即ち、iSCSI)で確立され、コネクション単位に基づく。例えば、ログイン/ログアウト、バッファ管理、及び作業管理処理(task management handling)は、コネクション単位に基づいてセッション/コネクションレベルで実行される。I/Oコマンドは、セッション/コネクションレベルでキューイング(queue)されて、追跡(track)される。
【0025】
データ経路(101〜104)のうち、SCSIコマンド発行経路102及びSCSIコマンド完了経路103は、LUNレベルでSCSIターゲットとLUNとの間に確立される。例えば、ターゲットストレージ装置へのSCSIコマンド及びターゲットストレージ装置からのSCSIコマンド並びにエラー処理は、LUNレベルで追跡される。
図1に示すモノリシックスレッドモデルでは、ターゲットシステムの利用可能なCPUリソースは、伝送プロトコル及びSCSIコアレベルプロトコルの両方を作動させるために共有される。モノリシックスレッディングモデルは、キャッシュ局所性(cache locality)を最大化しない。
【0026】
本発明は、別個のスレッドで独立に伝送プロトコル及びSCSIコアプロトコルを分割して処理する新規なスレッディングモデル(threading model)を提供する。
【0027】
本スレッディングモデルは、伝送プロトコルスレッドとSCSIコアスレッドとの間でロックレス・キュー設計(lockless queue design)を採用する。ロックレス・キュー設計は、伝送プロトコル及びSCSIコアプロトコルに対するスレッドを分割し、独立に作動させることによって、I/O性能を向上させる。
【0028】
ストレージシステムのCPUリソースは、伝送プロトコル階層とSCSIコア階層との間で分配される。伝送プロトコルスレッドは、伝送プロトコル階層でのスレッド実行を処理するために割り当られたCPUでのみスケジューリングされる。SCSIコアスレッドは、SCSIコア階層で作動するスレッドを処理するために割り当られたCPUでのみスケジューリングされる。伝送プロトコルスレッドは、受信経路及び送信経路を処理する。SCSIコアスレッドは、特定のLUNに対するI/O要請及びその特定のLUNに対するI/O完了(completion)を処理する。
【0029】
本発明のシステム及び方法は、複数のLUN及びそれらへのコネクションに対して高い拡張性(scalability)を提供する。本発明のシステム及び方法は、さらにキャッシュ局所性を最大化するために伝送プロトコルスレッド及びLUNスレッドを分離する。その上で、ロックレス・キュー設計は、複数のLUNが複数のコネクションを通じてアクセスされた時、ロック衝突(lock contention)を除去する。
【0030】
本明細書ではiSCSIターゲットについて説明するが、本発明は、システムリソースを効率的に利用することと、同期化ボトルネックを回避するために高性能なターゲットI/O性能を提供することとを活用できる何れのSANプロトコル(例えば、FCP、pSCSI、iSCSI、HyperSCSI、Fibre Channel、ATA、SATA、AoE、InfiniBand、及びNVMe over Fabrics)にも適用される。例えば、NVMe over Fabricsプロトコルで、SCSIコア階層に相当するコア階層は、NVMeキューイングインターフェイス(NVMe Queuing interface)及びコマンドセットと称される。
【0031】
図2は、本発明の一実施形態によるスレッディングモデルの例におけるデータ経路を示すブロック図である。
【0032】
データ経路200は、コネクション特定経路251とLUN特定経路252とに分離される。コネクション特定経路251は、レシーバー201及びトランスミッタ211を含む。イニシエーター(クライアント)のレシーバー201は、ホストから命令語(instruction)を受信して、iSCSIコマンド202及び関連するデータ203を生成し、ターゲットとのコネクションを確立して、SCSI I/Oモジュール204とTM(task management) I/Oモジュール205とを通じてターゲットにiSCSIコマンド202及びデータ203を伝送する。
【0033】
LUN特定経路252は、読出し、書込み、及びトリム(trim)のようなSCSIコマンドに関連するデータを格納するためのデータCDB(data command descriptor blocks)221、及び問合せ(inquiry)、読出し、及び容量のようなSCSIコマンドを格納するための制御CDB(control CDB)222を含む。iSCSIコマンド202及びデータ203は、それぞれデータCDB221及び制御CDB222に格納される。
【0034】
LUN特定経路252は、SCSI管理コマンド(例えば、中断、LUNリセット)を格納するためのTM I/Oブロック223と、状態/データブロック224をさらに含む。ホストから受信したTMコマンドはTM I/Oブロック223に格納される。ターゲットから受信したターゲットの状態及び関連データは、状態/データブロック224に格納される。制御CDB222は、特定の制御コマンドに対する状態及びデータを更新するために、状態/データブロック224に直接アクセスする。I/O完了のようなターゲットに対する状態/データ情報は、コネクション特定経路251のトランスミッタ211に返送される。
【0035】
図3は、本発明の一実施形態による分割されたスレッディングモデルの例を示す図である。
【0036】
ターゲットシステムは、ワークロード(work load)の類型に基づいてiSCSI伝送プロトコルとSCSIコマンドとの間での処理のために分配された複数のCPUを含む。コネクション特定スレッド(即ち、伝送プロトコルでのiSCSI)は、イニシエーターとSCSIターゲットとの間のiSCSIレシーバー経路301及びiSCSIトランスミッタ経路304を含む。コネクション特定スレッドは、コネクション単位に基づく。SCSIコマンド発行経路302及びSCSIコマンド完了経路303は、LUNレベルで確立される。
【0037】
ターゲットシステムの複数の利用可能なCPUの中で、M個のCPUが、データ経路を確立し、イニシエーターとSCSIターゲットとの間のSCSIコマンドを伝送し、伝送プロトコル階層で確立されたデータ経路を完了するために割り当られる。一方、N個のCPUが、SCSIターゲットとLUNとの間のSCSIコマンドを処理し、管理し、取り扱うために割り当られる。
【0038】
イニシエーターとSCSIターゲットとの間のiSCSIプロトコルは、コネクション毎に確立されたコネクション特定スレッドを作動させ、iSCSIレシーバー経路301とiSCSIトランスミッタ経路304とのシーケンスを含む。コネクション特定スレッドは1つ以上のM個のCPUに割り当られる。
【0039】
iSICSIレシーバー経路301は、SCSIコマンド発行経路302(即ち、SCSIレシーバー)を含むSCSI I/O要請をキューイング(queue)する。SCSIコマンドが完了した後、SCSIターゲットはSCSIコマンド完了経路303(即ち、SCSIトランスミッタ)をキューイングする。
【0040】
LUN単位に基づいて確立されたSCSIコマンド発行経路302及びSCSIコマンド完了経路303は、N個のCPUに割り当られる。SCSIコマンドが完了した後、SCSIターゲットは、イニシエーターとSCSIターゲットとの間の前に確立された伝送コネクション上のイニシエーターにI/O完了(例えば、iSCSIトランスミッタ経路304)をキューイングする。最後に、I/O完了は、イニシエーターとSCSIターゲットとの間のコネクション特定スレッドを確立したCPUによって処理される。
【0041】
図4は、本発明の一実施形態によるスレッディングモデルの例を示す概略図である。本スレッディングモデルは、iSCSIレシーバー経路401、iSCSIトランスミッタ経路404、SCSIコマンド発行経路402、及びSCSIコマンド完了経路403を含むデータ経路を提供する。
【0042】
I/Oコマンド発行経路で、iSCSIレシーバー経路401は、I/Oコマンド発行キュー410を使用してI/OコマンドをSCSIコマンド発行経路402に配置する。I/Oコマンド返送(return)経路で、SCSIコマンド完了経路403は、I/O完了キュー411を使用してI/O完了をiSCSIトランスミッタ経路404に配置する。
【0043】
本実施形態で、I/Oコマンド発行キュー410及びI/O完了キュー411は、複数のコネクションからのI/Oコマンドが1つのLUNに到達し、1つのコネクションからのI/Oコマンドが複数のLUNに到達するMPMC(multi−producer and multi−consumer)ロックレス・キューである。
【0044】
本発明の一実施形態において、キューの文脈で、生産者(producer)はイニシエーターと称し、消費者(consumer)はターゲットと称する。いくつかの実施形態で、生産者はターゲットと称し、消費者はイニシエーターと称する。例えば、iSCSIレシーバー経路401とiSCSIトランスミッタ経路404とは生産者によって所有され、SCSIコマンド発行経路402とSCSIコマンド完了経路403は消費者によって所有される。他の実施形態で、SCSIコマンド発行経路402とSCSIコマンド完了経路403とは生産者によって所有され、iSCSIレシーバー経路401とiSCSIトランスミッタ経路404とは消費者によって所有される。
【0045】
MPMCキューで、生産者作業及び消費者作業は、複数のスレッドで作動する。例えば、生産者作業はn個のスレッドで作動し、消費者作業はm個のスレッドで作動する。特定の生産者スレッドを担当する複数の生産者が存在し、特定の消費者スレッドを担当する複数の消費者が存在する。
【0046】
I/O発行経路で、伝送プロトコル階層はSCSIコア階層への作業要請を生成する。この場合、伝送プロトコル階層は生産者であり、SCSIコア階層は消費者である。一方、I/O完了経路で、SCSIコア階層は伝送プロトコル階層への作業要請を生成する。この場合、SCSIコア階層は生産者であり、伝送プロトコル階層は消費者である。
【0047】
コネクション単位である伝送プロトコル階層によって生成された作業要請は、複数のLUNに伝達される。同様に、LUN単位であるSCSIコア階層によって生成された作業要請は、複数のコネクションに伝達される。伝送プロトコル階層とSCSIコア階層との間の通信は一般的にロック(lock)を要求する同期点を含む。
【0048】
本発明の一実施形態によるシステムは、伝送プロトコル階層及びSCSIコア階層がロックレス方式でアクセスされるようにする。
【0049】
図5は、本発明の一実施形態によるSPSC(single−producer single−consumer)ロックレス・キューを示すブロック図である。
【0050】
ロックレス・キュー内の各ノードは、データコンテナ(data container)及びポインターを含み、一連のノードがリンクされたリスト(linked list)に連結される。
【0051】
本実施形態によれば、
図4のI/Oコマンド発行キュー410及びI/O完了キュー411の各々は、
図5に示すロックレス・キューを含む。ロックレス・キューは、ヘッドノード501及びテールノード503を含む。キュー内にただ1つのノードしか存在しない場合、ヘッドノード501とテールノード503とは同一である。現在ノード(current node)502は、リストの開始点を意味し、開始点から消費者はリストトラバーサル(list traversal)を開始し、ノードを消費する。いくつかの実施形態で、現在ノード502は、消費者開始又は消費者ヘッド(生産者によって所有されるヘッドノード501に対して)と称される。
【0052】
図5に示すリンクされたリストの各ノードは、データコンテナ511と、次のノードを示すポインター512とを含む。生産者は、新しいノード(例えば、新しいI/Oコマンドに対応するノード)を生成し、新しく生成されたノードをキューのテールノード503に連結して、新しいノードを示すようにテールノード503のポインターを更新する。このような方法で、新しいノードが既存のキューに加えられる。同様に、生産者は、消費されたノードをヘッドノード501から現在ノード502まで解放させる。
【0053】
システムリソースが利用可能である場合、生産者は、消費者によるノード消費処理から独立して、消費されたノードを解放させる。この意味で、生産者による、消費されたノードを解放するプロセスは、レイジー削除(lazy delete)と称される。ヘッドノード501から現在ノード502の前までのノードは生産者によって所有され、現在ノード502からテールノード503までのノードは消費者によって所有される。消費者は、現在ノード502からテールノード503までリストをトラバース(traverse)し、現在ノード502でアイテムを消費し、後続のノードに現在のポインターを更新する。もし現在のポインターがテールノード503を示す場合、消費者はノードを消費しない。
【0054】
本発明のロックレス・キューは、制御情報を保有してロックレスリストを管理する制御構造(control structure)を提供する。生産者は先頭及び最後のポインターを所有する。生産者によって新しいノードがロックレスリストに加えられると、最後のポインターが更新される。生産者が消費されたノードを削除すると、先頭のポインターが更新される。消費者が現在ノード502からテールノード503までリストをトラバースするので、現在のポインターは消費者によって更新される。
【0055】
ロックレス・キューの現在のポインターの制御情報と所有権は、ロックレス・キューの制御構造を使用して生産者と消費者との間でシームレスに(seamlessly)交換されるので、本発明のロックレス・キューは、データ経路での同期点及びロックの必要性を除去し、特に、複数のセッションが同時に複数のLUNをアクセスする場合、I/O性能を向上させる。
【0056】
図6は、本発明の一実施形態によるMPMCロックレス・キュー(multi−producer multi−consumer lockless queue)の例を示すブロック図である。MPMCロックレス・キューは、N個のヘッドノード(ヘッド1〜ヘッドN)の制御アレイ601を含む。ここで、Nは生産者が作動させる予定のスレッド数である。
【0057】
生産者はN個のスレッドで作動させる予定であり、消費者はM個のスレッドで作動させる予定である。1つの生産者が複数のスレッドを作動させるので、生産者の数とスレッドの数(N)とは異なる。同様に、1つの消費者が複数のスレッドを作動させ、複数の生産者によって生産されたノードを消費できるので、消費者の数とスレッドの数(M)とは異なる。制御アレイ601で、生産者はノードを生成し、消費者はノードを消費する。N個のスレッドの各々に対応する制御構造はSPSCロックレス・キューを維持する。消費者はN個のスレッドの制御アレイ601を維持する。
【0058】
本実施形態において、MPMCロックレス・キューは、スレッド識別子(ID)を利用してスレッドへの排他的なアクセスを提供する。
【0059】
例えば、所定のスレッド上で実行作動させる生産者は、対応するキュー内に新しいノードを生成する必要がある。新しいノードを追加する場合、生産者は、自分のスレッド識別子(ID)を制御アレイ601にインデックス(index)することによって、キューに排他的にアクセスする。各々の生産者は、キューへの排他的なアクセスを獲得して新しいノードを生成するので、複数の生産者の間に競合がない。
【0060】
所定のスレッド上で作動させる消費者は、複数の生産者に属する複数のノードを消費する。同様に、各々の消費者は、制御アレイ601にあるキューに排他的にアクセスするので、複数の消費者の間に競合がない。
【0061】
図7は、本発明の一実施形態によるスレッディングモデルの例を示すブロック図である。本スレッディングモデルは、複数のiSCSIコネクションスレッド701及び複数のSCSI LUNスレッド751を含む。説明目的のために、iSCSIコネクションスレッド701は、3つのCPUで作動し、SCSI LUNスレッド751は2つのCPUで作動する。
【0062】
iSCSIコネクションスレッド701の各々は、SCSI LUNスレッド751を作動させるCPUの各々に対応する2つのノード(即ち、ヘッド1a、ヘッド2a)を含む。SCSI LUNスレッド751の各々は、iSCSIコネクションスレッド701を作動させるCPUの各々に対応する3つのノード(即ち、ヘッド1b、ヘッド2b、ヘッド3b)を含む。本実施形態では、iSCSIコネクションスレッド701の各々をそれぞれ作動させるために割り当られた3つのCPU、及びSCSI LUNスレッド751の各々をそれぞれ作動させるために割り当られた2つのCPUを含むが、本スレッディングモデルは、本発明の技術的範囲から逸脱しない範囲内で、任意の数のiSCSIコネクションスレッド及びSCSI LUNスレッドに適用される。
【0063】
各々のiSCSIコネクションスレッド(CT1、CT2、CT3)は、それぞれのCPU(CPU1、CPU2、CPU3)に割り当られる。同様に、各々のSCSI LUNスレッド(LT1、LT2)は、それぞれのCPU(CPU4、CPU5)に割り当られる。6個のiSCSIコネクション(C1〜C6)は、iSCSIスレッド(CT1、CT2、CT3)によってサービスされる。4個のLUN(L1〜L4)は、SCSI LUNスレッド(LT1、LT2)によってサービスされる。
【0064】
生産者コネクションスレッド(例えば、iSCSIコネクションスレッド701)は、(処理される予定の)I/Oコマンドを、それぞれのCPU−IDによってインデックスされたLUN単位のキューに直接生成する。SCSI LUNスレッド751は、(完了された)I/Oコマンドを、それぞれのCPU−IDによってインデックスされるようにiSCSIコネクションスレッド701によって生成されたI/Oコマンドにしたがって、コネクション単位のキューに直接生成する。
【0065】
消費者コネクションスレッド(例えば、SCSI LUNスレッド751)は、当該コネクションに属するI/Oコマンドを消費する。SCSI LUNスレッド751は、当該LUNに属するI/Oコマンドを消費する。
【0066】
iSCSIコネクションスレッド701(生産者)は、I/Oコマンドを個別のSCSI LUNスレッド751(消費者)に直接発行し、SCSI LUNスレッド751(生産者)は、I/O完了を個別のiSCSIコネクションスレッド701(消費者)に直接発行する。各々のI/Oコマンドは、特定のスレッドを作動させるプロセッサに固有のCPU−IDによって識別され、それにより、独立して作動するスレッド間で同期点又はロックの必要性を除去する。
【0067】
図8は、本発明の他の実施形態によるMPMCロックレス・キューの例を示すブロック図である。I/O発行経路内で、生産者は伝送プロトコル階層であり、消費者はSCSIコア階層である。伝送プロトコルスレッド(例えば、
図3のiSCSIレシーバー経路301)は、N個のCPUのLUNアレイ801にアクセスする。ここで、Nは伝送プロトコルスレッドのために割り当られたCPUの数である。
【0068】
アレイインデックスは、伝送プロトコルスレッドが作動中であるCPU番号(1〜N)を指す。アレイインデックスの各々は、ロックレスシングルリンクされたリスト(lockless single linked list)を含み、このロックレスシングルリンクされたリストで、伝送プロトコルスレッドは特定のLUNに発行されたI/Oコマンドの作業要請を生成する。
【0069】
SCSIコアスレッド(例えば、
図3のSCSIコマンド発行経路302)は、伝送プロトコルスレッドによってキューイングされる作業エントリを処理するSCSIコアCPUで実行される。SCSIコアスレッドは、対応するSCSIコアCPUで作動するスレッド内にある現在ポインターを更新する。SCSIモジュール(LUN)は、
図8に示すようなデータ構造を有し、I/O要請を生成して配置するためにiSCSIモジュール(伝送プロトコル階層)にインターフェイスを提供する。
【0070】
図9は、本発明のさらに他の実施形態によるMPMCロックレス・キューの例を示すブロック図である。I/O完了経路内で、生産者はSCSIコア階層であり、消費者は伝送プロトコル階層である。LUNスレッド(例えば、
図3のSCSIコマンド完了経路303)は、M個のCPUのコネクション単位のアレイ901にアクセスする。ここで、MはSCSIコアスレッドのために割り当られたCPUの数である。
【0071】
アレイインデックスは、SCSIコアスレッドが作動中であるCPU番号(1〜M)を指す。アレイインデックスの各々は、ロックレスシングルリンクされたリストを含み、このロックレスシングルリンクされたリストで、SCSIコアスレッドは特定のコネクションに対する完了されたI/Oコマンドの作業要請を生成する。
【0072】
対応するCPUで実行される伝送プロトコルスレッド(例えば、
図3のiSCSIトランスミッタ経路304)は、すべてのSCSIコアスレッドによってキューイングされるI/Oコマンドを処理する。iSCSIスレッドは、対応する伝送プロトコルCPUで作動するiSCSIスレッド内にある現在のポインターを更新する。iSCSIモジュール(iSCSIコネクション)は、
図9に示すようなデータ構造を有し、I/O完了を生成して配置するためにSCSIモジュール(SCSIコア階層)にインターフェイスを提供する。
【0073】
本発明のシステム及び方法は、伝送処理とデータ(又はコア)処理とを分離する。本発明のシステム及び方法は、伝送処理及びデータ処理に内在する同期化問題を解決するMPMC(multi−producer−multi−consumer)ロックレス設計を具現する。本発明のシステム及び方法は、伝送処理とデータ処理との間のリソース(例えば、CPU)共有を提供して、伝送階層及びコア階層の各々のリソースに対する互いに異なりかつ多様な要求に対応する。I/O書込み(IOW)及びCPUリソースの比率は、システム仕様に応じて異なる。
【0074】
本発明の一実施形態による方法は、複数のCPUを含むデータストレージシステムのターゲットに格納されたデータにアクセスするコマンドを受信する段階と、複数のCPUの中の第1グループのCPU上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを実行する段階と、複数のCPUの中の第2グループのCPU上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させる段階と、伝送スレッドのコマンドレシーバー経路を使用してI/Oコマンド発行キューにI/Oコマンドを配置し、データ経路スレッドのコマンド発行経路を使用してI/Oコマンドを処理する段階と、データ経路スレッドのコマンド完了経路を使用してI/O完了キューにI/O完了通知を配置し、伝送スレッドのコマンドトランスミッタ経路を使用してI/O完了通知を処理する段階と、を有し、I/Oコマンド発行キューは、第1キューアレイを含み、第1キューアレイの各々は、第1グループのCPUのそれぞれのCPUに対応し、I/O完了キューは、第2キューアレイを含み、第2キューアレイの各々は、第2グループのCPUのそれぞれのCPUに対応する。
【0075】
伝送スレッドは、レシーバー及びトランスミッタを含み、レシーバーはI/Oコマンドをデータ経路に伝送する。
【0076】
データ経路スレッドは、I/Oコマンドをターゲットに伝送し、ターゲットから状態及びデータの中の少なくとも1つを受信し、伝送スレッドのトランスミッタに状態及びデータの中の少なくとも1つを伝送する。
【0077】
第1キューアレイは、データ経路スレッドに割り当られた第2グループのCPUに対応する第1の複数のノードを含む。
【0078】
第1の複数のノードはヘッダーノード、テールノード、及び第1キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは、消費者によって所有され、第1キューアレイの残りのノードは生産者によって所有される。
【0079】
生産者はイニシエーターであり、消費者はターゲットである。
【0080】
消費者はデータ経路スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【0081】
第2キューアレイは伝送スレッドに割り当られた第1グループのCPUに対応する第2の複数のノードを含む。
【0082】
第2の複数のノードはヘッダーノード、テールノード、及び第2キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは消費者によって所有され、第2キューアレイの残りのノードは生産者によって所有される。
【0083】
生産者はターゲットであり、消費者はイニシエーターである。
【0084】
消費者は、伝送スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【0085】
I/Oコマンド発行キュー及びI/O完了キューの各々は、MPMC(multi−producer multi−consumer)ロックレス・キューである。
1つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、特定の伝送スレッドからの作業要請は、1つ以上のデータ経路スレッドに到達する。同様に、1つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、特定のデータ経路スレッドからの作業要請は、1つ以上の伝送スレッドに到達する。
【0086】
本発明の一実施形態によるデータストレージシステムは、複数のCPUと、複数のターゲットと、I/Oフロー、I/Oコマンド発行キュー、及びI/O完了キューを処理するソフトウェアモジュールセットを格納するメモリと、を備え、ソフトウェアモジュールセットは、複数のCPUを含むデータストレージシステムのターゲットに格納されたデータにアクセスするI/Oコマンドを受信し、複数のCPUの第1グループのCPUの中の第1CPU上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させ、複数のCPUの第2グループのCPUの中の第2CPU上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させ、伝送スレッドのコマンドレシーバー経路は、I/OコマンドをI/Oコマンド発行キューに配置し、データ経路スレッドのコマンド発行経路は、I/Oコマンドを処理し、データ経路スレッドのコマンド完了経路は、I/O完了通知をI/O完了キューに配置し、伝送スレッドのコマンドトランスミッタ経路は、I/O完了通知を処理し、I/Oコマンド発行キューは、第1キューアレイを含み、第1キューアレイの各々は、第1グループのCPUのそれぞれのCPUに対応し、I/O完了キューは、第2キューアレイを含み、第2キューアレイの各々は、第2グループのCPUのそれぞれのCPUに対応する。
【0087】
伝送スレッドは、レシーバー及びトランスミッタを含み、レシーバーは、I/Oコマンドをデータ経路に伝送する。
【0088】
データ経路スレッドは、I/Oコマンドをターゲットに伝送し、ターゲットから状態及びデータの中の少なくとも1つを受信し、伝送スレッドのトランスミッタに状態及びデータの中の少なくとも1つを伝送する。
【0089】
第1キューアレイは、データ経路スレッドに割り当られた第2グループのCPUに対応する第1の複数のノードを含む。
【0090】
第1の複数のノードは、ヘッダーノード、テールノード、及び第1キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは、消費者によって所有され、第1キューアレイの残りのノードは、生産者によって所有される。
【0091】
生産者はイニシエーターであり、消費者は前ターゲットである。
【0092】
消費者は、データ経路スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【0093】
第2キューアレイは、伝送スレッドに割り当られた第1グループのCPUに対応する第2複数のノードを含む。
【0094】
第2の複数のノードは、ヘッダーノード、テールノード、及び第2キューアレイのキューを示す現在ノードを含み、現在のノードからテールノードまでのノードは、消費者によって所有され、第2キューアレイの残りのノードは、生産者によって所有される。
【0095】
生産者はターゲットであり、消費者はイニシエーターである。
【0096】
消費者は、伝送スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【0097】
I/Oコマンド発行キュー及びI/O完了キューの各々は、MPMC(multi−producer multi−consumer)ロックレス・キューである。
1つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、特定の伝送スレッドからの作業要請は、1つ以上のデータ経路スレッドに到達する。同様に、1つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、特定のデータ経路スレッドからの作業要請は、1つ以上の伝送スレッドに到達する。
【0098】
以上、本発明による高性能なロックレススケーラブルターゲットを提供するためのシステム及び方法の多様な実施形態について説明したが。本発明は、上述の実施形態に限定されるものではなく、本発明が属する技術分野で通常の知識を有する者は、本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。