(57)【要約】【課題】ロックレススケーラブルターゲットのためのシステム及び方法を提供する。【解決手段】本発明の方法は、第１グループのＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させる段階と、第２グループのＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させる段階と、伝送スレッドのコマンドレシーバー経路を使用してＩ／Ｏコマンド発行キューにＩ／Ｏコマンドを配置し、データ経路スレッドのコマンド発行経路を使用してＩ／Ｏコマンドを処理する段階と、データ経路スレッドのコマンド完了経路を使用してＩ／Ｏ完了キューにＩ／Ｏ完了通知を配置し、伝送スレッドのコマンドトランスミッタ経路を使用してＩ／Ｏ完了通知を処理する段階と、を有する。【選択図】図１
2017191603.tif 000002
【特許請求の範囲】
【請求項１】
データストレージシステムのターゲットにアクセスする方法であって、
複数のＣＰＵを含む前記データストレージシステムのターゲットに格納されたデータにアクセスするコマンドを受信する段階と、
前記複数のＣＰＵの中の第１グループのＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させる段階と、
前記複数のＣＰＵの中の第２グループのＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させる段階と、
前記伝送スレッドの前記コマンドレシーバー経路を使用してＩ／Ｏコマンド発行キューにＩ／Ｏコマンドを配置し、前記データ経路スレッドの前記コマンド発行経路を使用して前記Ｉ／Ｏコマンドを処理する段階と、
前記データ経路スレッドの前記コマンド完了経路を使用してＩ／Ｏ完了キューにＩ／Ｏ完了通知を配置し、前記伝送スレッドの前記コマンドトランスミッタ経路を使用して前記Ｉ／Ｏ完了通知を処理する段階と、を有し、
前記Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、
前記第１キューアレイの各々は、前記第１グループのＣＰＵのそれぞれのＣＰＵに対応し、
前記Ｉ／Ｏ完了キューは、第２キューアレイを含み、
前記第２キューアレイの各々は、前記第２グループのＣＰＵのそれぞれのＣＰＵに対応することを特徴とする方法。
【請求項２】
前記伝送スレッドは、レシーバー及びトランスミッタを含み、
前記レシーバーは、Ｉ／Ｏコマンドを前記データ経路に伝送することを特徴とする請求項１に記載の方法。
【請求項３】
前記データ経路スレッドは、前記Ｉ／Ｏコマンドを前記ターゲットに伝送し、前記ターゲットから状態及びデータの中の少なくとも１つを受信し、前記伝送スレッドの前記トランスミッタに前記状態及びデータの中の少なくとも１つを伝送することを特徴とする請求項２に記載の方法。
【請求項４】
前記第１キューアレイは、前記データ経路スレッドに割り当られた前記第２グループのＣＰＵに対応する第１の複数のノードを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１の複数のノードは、ヘッダーノード、テールノード、及び前記第１キューアレイのキューを示す現在ノードを含み、
前記現在ノードから前記テールノードまでのノードは、消費者によって所有され、
前記第１キューアレイの残りのノードは、生産者によって所有されることを特徴とする請求項４に記載の方法。
【請求項６】
前記生産者は、イニシエーターであり、
前記消費者は、前記ターゲットであることを特徴とする請求項５に記載の方法。
【請求項７】
前記消費者は、前記データ経路スレッドの各々に固有のスレッド識別子を利用して前記キューへの排他的なアクセスを獲得することを特徴とする請求項６に記載の方法。
【請求項８】
前記第２キューアレイは、前記伝送スレッドに割り当られた前記第１グループのＣＰＵに対応する第２の複数のノードを含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記第２の複数のノードは、ヘッダーノード、テールノード、及び前記第２キューアレイのキューを示す現在ノードを含み、
前記現在ノードから前記テールノードまでのノードは、消費者によって所有され、
前記第２キューアレイの残りのノードは、生産者によって所有されることを特徴とする請求項８に記載の方法。
【請求項１０】
前記生産者は、前記ターゲットであり、
前記消費者は、イニシエーターであることを特徴とする請求項９に記載の方法。
【請求項１１】
前記消費者は、前記伝送スレッドの各々に固有のスレッド識別子を利用して前記キューへの排他的なアクセスを獲得することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記Ｉ／Ｏコマンド発行キュー及び前記Ｉ／Ｏ完了キューの各々は、ＭＰＭＣ（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ）ロックレス・キューであり、
１つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、
特定の伝送スレッドからの作業要請は、１つ以上のデータ経路スレッドに到達し、
１つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、
特定のデータ経路スレッドからの作業要請は、１つ以上の伝送スレッドに到達することを特徴とする請求項１に記載の方法。
【請求項１３】
複数のＣＰＵと、
複数のターゲットと、
Ｉ／Ｏフロー、Ｉ／Ｏコマンド発行キュー、及びＩ／Ｏ完了キューを処理するソフトウェアモジュールセットを格納するメモリと、を備え、
前記ソフトウェアモジュールセットは、
複数のＣＰＵを含むデータストレージシステムのターゲットに格納されたデータにアクセスするＩ／Ｏコマンドを受信し、
前記複数のＣＰＵの第１グループのＣＰＵの中の第１ＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させ、
前記複数のＣＰＵの第２グループのＣＰＵの中の第２ＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させ、
前記伝送スレッドの前記コマンドレシーバー経路は、Ｉ／Ｏコマンドを前記Ｉ／Ｏコマンド発行キューに配置し、
前記データ経路スレッドの前記コマンド発行経路は、前記Ｉ／Ｏコマンドを処理し、
前記データ経路スレッドの前記コマンド完了経路は、Ｉ／Ｏ完了通知を前記Ｉ／Ｏ完了キューに配置し、
前記伝送スレッドの前記コマンドトランスミッタ経路は、前記Ｉ／Ｏ完了通知を処理し、
前記Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、
前記第１キューアレイの各々は、前記第１グループのＣＰＵのそれぞれのＣＰＵに対応し、
前記Ｉ／Ｏ完了キューは、第２キューアレイを含み、
前記第２キューアレイの各々は、前記第２グループのＣＰＵのそれぞれのＣＰＵに対応することを特徴とするデータストレージシステム。
【請求項１４】
前記伝送スレッドは、レシーバー及びトランスミッタを含み、
前記レシーバーは、Ｉ／Ｏコマンドを前記データ経路に伝送することを特徴とする請求項１３に記載のデータストレージシステム。
【請求項１５】
前記データ経路スレッドは、前記Ｉ／Ｏコマンドを前記ターゲットに伝送し、前記ターゲットから状態及びデータの中の少なくとも１つを受信し、前記伝送スレッドの前記トランスミッタに前記状態及びデータの中の少なくとも１つを伝送することを特徴とする請求項１４に記載のデータストレージシステム。
【請求項１６】
前記第１キューアレイは、前記データ経路スレッドに割り当られた前記第２グループのＣＰＵに対応する第１の複数のノードを含むことを特徴とする請求項１３に記載のデータストレージシステム。
【請求項１７】
前記第１の複数のノードは、ヘッダーノード、テールノード、及び前記第１キューアレイのキューを示す現在ノードを含み、
前記現在ノードから前記テールノードまでのノードは、消費者によって所有され、
前記第１キューアレイの残りのノードは、生産者によって所有されることを特徴とする請求項１６に記載のデータストレージシステム。
【請求項１８】
前記生産者は、イニシエーターであり、
前記消費者は、前記ターゲットであることを特徴とする請求項１７に記載のデータストレージシステム。
【請求項１９】
前記消費者は、前記データ経路スレッドの各々に固有のスレッド識別子を利用して前記キューへの排他的なアクセスを獲得することを特徴とする請求項１８に記載のデータストレージシステム。
【請求項２０】
前記第２キューアレイは、前記伝送スレッドに割り当られた前記第１グループのＣＰＵに対応する第２の複数のノードを含むことを特徴とする請求項１３に記載のデータストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストレージシステムに関し、より詳しくは、高性能なロックレススケーラブルターゲットを提供するシステム及び方法に関する。
【背景技術】
【０００２】
一般的なＳＡＮ（ｓｔｏｒａｇｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）において、ターゲットは、持続的なデータストレージ空間（例えば、論理ユニットナンバー（ＬＵＮ：ｌｏｇｉｃａｌ  ｕｎｉｔ  ｎｕｍｂｅｒ）、名称空間（ｎａｍｅｓｐａｃｅ））を光ファイバーコネクション又はスイッチングネットワークを通じて１つ以上のイニシエーター（ｉｎｉｔｉａｔｏｒ）に露出させる。イニシエーターは、インターフェイスセッション（例えば、ＳＣＳＩ（ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）セッション）を開始して、コマンド（例えば、ＳＣＳＩコマンド）を伝送するエンドポイント（ｅｎｄｐｏｉｎｔ）を指す。ターゲットは、イニシエーターの作業要請を待って、入／出力（Ｉ／Ｏ）動作を遂行するエンドポイントを指す。一般的なコンピュータアーキテクチャにおいて、イニシエーターはクライアントと称され、ターゲットはサーバーと称される。１つのターゲットは複数のイニシエーターにサービスを提供し、イニシエーターに１つ以上のＬＵＮを提供する。
【０００３】
ターゲットは、相互に合意されたＳＡＮプロトコルを通じて１つ以上のイニシエーターと通信する。ＳＡＮプロトコルの例としては、ＦＣＰ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｐｒｏｔｏｃｏｌ）、ｐＳＣＳＩ（ｐａｒａｌｌｅｌ  ＳＣＳＩ）、ｉＳＣＳＩ（ｉｎｔｅｒｎｅｔ  ＳＣＳＩ）、ＨｙｐｅｒＳＣＳＩ、ファイバチャンネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＡＴＡ（Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）、ＡｏＥ（ＡＴＡ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（登録商標））、ＩｎｆｉｎｉＢａｎｄ、及びＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）  ｏｖｅｒ  Ｆａｂｒｉｃｓを含むが、これらに限定されない。
【０００４】
ＳＡＮプロトコルは、イニシエーターがターゲットにＩ／Ｏコマンドを伝送できるようにする。データセンターのデータストレージ装置は、ＳＡＮを通じて物理的及び／又は論理的に分散された複数のターゲットを含む。ＳＡＮプロトコルは、データストレージ装置がローカルに接続されたように見える錯覚をホストに提供しながら、データストレージ装置をターゲットのアレイに統合する。
【０００５】
ストレージターゲットは、一般的に複数のコネクションを通じて複数のイニシエーターにバックエンド（ｂａｃｋｅｎｄ）ＬＵＮを露出させる。各々のイニシエーターは、１つ以上のコネクションをターゲットに開放し、ターゲット内の１つ以上のＬＵＮにアクセスする。入／出力（Ｉ／Ｏ）フローの観点から、データ経路内に確立された複数の同期点（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｐｏｉｎｔ）は、特に、複数のセッションが同時に複数のＬＵＮにアクセスする場合、Ｉ／Ｏ性能に影響を及ぼす。
【０００６】
フロントエンドＩ／Ｏスタック（ｆｒｏｎｔｅｎｄ  Ｉ／Ｏ  ｓｔａｃｋ）でのデータ経路は、伝送プロトコル階層（ｌａｙｅｒ）とＳＣＳＩコア階層とに分けられる。伝送プロトコル階層での処理は、コネクション単位ベース（ｐｅｒ−ｃｏｎｎｅｃｔｉｏｎ  ｂａｓｅｄ）であり、ＳＣＳＩコア階層での処理は、ＬＵＮ単位ベース（ｐｅｒ−ＬＵＮ  ｂａｓｅｄ）である。
【０００７】
伝送プロトコル階層での処理は、Ｉ／Ｏコマンドを特定のコネクションで発行（ｉｓｓｕｅ）することと、その特定のコネクションでＩ／Ｏコマンドを完了（ｃｏｍｐｌｅｔｅ）することとを含む。ＳＣＳＩコア階層での処理は、Ｉ／Ｏコマンドを特定のＬＵＮに発行することと、その特定のＬＵＮに発行されたＩ／Ｏコマンドを完了することとを含む。全体のＩ／Ｏ経路が伝送プロトコル階層のスレッドコンテキスト（ｔｈｒｅａｄ  ｃｏｎｔｅｘｔ）で実行される場合、多様な同期点がＬＵＮレベルのみならず、コネクションレベルでも確立される、したがって、全体的なＩ／Ｏ性能に影響が及ぶ。これは、ＳＣＳＩコア階層でのＩ／ＯコンテキストがＬＵＮ固有であるのに対して、伝送プロトコル階層でのＩ／Ｏコンテキストはコネクション固有であるためである。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許第７３５５３０５号明細書
【特許文献２】米国特許第７９５３８７８号明細書
【特許文献３】米国特許第８５６６８３３号明細書
【特許文献４】米国特許第７７２００６４号明細書
【特許文献５】米国特許第８１３９４８２号明細書
【特許文献６】米国特許第８１４９８５４号明細書
【特許文献７】米国特許第８１８０９７３号明細書
【特許文献８】米国特許出願公開第２００７／０１５６９７４号明細書
【特許文献９】米国特許出願公開第２０１１／０２５２１９８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、上記従来の問題点に鑑みてなされたものであって、本発明の目的は、データストレージシステムにおいて、ロックレススケーラブルターゲットのためのシステム及び方法を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するためになされた本発明の一態様による方法は、データストレージシステムのターゲットにアクセスする方法であって、複数のＣＰＵを含むデータストレージシステムのターゲットに格納されたデータにアクセスするコマンドを受信する段階と、前記複数のＣＰＵの中の第１グループのＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させる段階と、前記複数のＣＰＵの中の第２グループのＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させる段階と、前記伝送スレッドの前記コマンドレシーバー経路を使用してＩ／Ｏコマンド発行キューにＩ／Ｏコマンドを配置し、前記データ経路スレッドの前記コマンド発行経路を使用して前記Ｉ／Ｏコマンドを処理する段階と、前記データ経路スレッドの前記コマンド完了経路を使用してＩ／Ｏ完了キューにＩ／Ｏ完了通知を配置し、前記伝送スレッドの前記コマンドトランスミッタ経路を使用して前記Ｉ／Ｏ完了通知を処理する段階と、を有し、前記Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、前記第１キューアレイの各々は、前記第１グループのＣＰＵのそれぞれのＣＰＵに対応し、前記Ｉ／Ｏ完了キューは、第２キューアレイを含み、前記第２キューアレイの各々は、前記第２グループのＣＰＵのそれぞれのＣＰＵに対応することを特徴とする。
【００１１】
上記目的を達成するためになされた本発明の一態様によるデータストレージシステムは、複数のＣＰＵと、複数のターゲットと、Ｉ／Ｏフロー、Ｉ／Ｏコマンド発行キュー、及びＩ／Ｏ完了キューを処理するソフトウェアモジュールセットを格納するメモリと、を備え、前記ソフトウェアモジュールセットは、複数のＣＰＵを含むデータストレージシステムのターゲットに格納されたデータにアクセスするＩ／Ｏコマンドを受信し、前記複数のＣＰＵの第１グループのＣＰＵの中の第１ＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させ、前記複数のＣＰＵの第２グループのＣＰＵの中の第２ＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させ、前記伝送スレッドの前記コマンドレシーバー経路はＩ／Ｏコマンドを前記Ｉ／Ｏコマンド発行キューに配置し、前記データ経路スレッドの前記コマンド発行経路は、前記Ｉ／Ｏコマンドを処理し、前記データ経路スレッドの前記コマンド完了経路は、Ｉ／Ｏ完了通知を前記Ｉ／Ｏ完了キューに配置し、前記伝送スレッドの前記コマンドトランスミッタ経路は、前記Ｉ／Ｏ完了通知を処理し、前記Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、前記第１キューアレイの各々は、前記第１グループのＣＰＵのそれぞれのＣＰＵに対応し、前記Ｉ／Ｏ完了キューは、第２キューアレイを含み、前記第２キューアレイの各々は、前記第２グループのＣＰＵのそれぞれのＣＰＵに対応することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、データ経路で同期点及びロックの必要性を除去し、複数のセッションが同時に複数のＬＵＮをアクセスする場合にＩ／Ｏ性能を向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態によるモノリシック（ｍｏｎｏｌｉｔｈｉｃ）スレッディングモデルにおけるデータ経路の例を示す図である。
【図２】本発明の一実施形態によるスレッディングモデルの例におけるデータ経路を示すブロック図である。
【図３】本発明の一実施形態による分割されたスレッディングモデルの例を示す図である。
【図４】本発明の一実施形態によるスレッディングモデルの例を示す概略図である。
【図５】本発明の一実施形態によるＳＰＳＣロックレス・キュー（ｓｉｎｇｌｅ−ｐｒｏｄｕｃｅｒ  ｓｉｎｇｌｅ−ｃｏｎｓｕｍｅｒ  ｌｏｃｋｌｅｓｓ  ｑｕｅｕｅ）を示すブロック図である。
【図６】本発明の一実施形態によるＭＰＭＣロックレス・キュー（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ  ｌｏｃｋｌｅｓｓ  ｑｕｅｕｅ）の例を示すブロック図である。
【図７】本発明の一実施形態によるスレッディングモデルの例を示すブロック図である。
【図８】本発明の他の実施形態によるＭＰＭＣロックレス・キューの例を示すブロック図である。
【図９】本発明のさらに他の実施形態によるＭＰＭＣロックレス・キューの例を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。  本明細書で説明する特徴及び構成の各々は、高性能なロックレススケーラブルターゲット（ｌｏｃｋｌｅｓｓ  ｓｃａｌａｂｌｅ  ｔａｒｇｅｔ）を提供するための他の特徴及び構成と共に又は分離されて利用される。これらの追加的な特徴及び構成が分離されるか又は結合されて利用される代表的な例の詳細な説明は、単に本発明の一態様を具現するために当業者に開示するものである。したがって、発明の詳細な説明に記載した特徴の組合せは、広い意味で開示する必要はなく、代わりに特に代表的な実施形態を説明するために開示する。
【００１５】
図面は、必ずしもスケール通りに示したものではなく、類似する構造又は機能の構成要素は、通常同じ参照番号で表示する。図面は、本明細書で説明する多様な実施形態の詳細な説明を可能にするために意図したものである。図面は、本明細書に記載したすべての構成を示すものではない。
【００１６】
以下の説明では、単なる説明の目的のために、特定の名称を、本発明の完全な理解のために示す。しかし、このような特定の細部事項は、本発明を実施するために必須ではないことは当業者に明らかである。
【００１７】
発明の詳細な説明の幾つかの部分は、アルゴリズム及びコンピュータメモリ内のデータビットに対する動作のシンボル表現で提示する。これらのアルゴリズム的な説明及び表現は、他の分野の通常の知識を有する技術者に作業の実体を効果的に伝達するために、データ処理分野の当業者によって使用される。ここで、アルゴリズムは、一般的に所望の結果を導く段階の一貫性のある手順である。段階は、物理量の物理的な操作が必要なものである。通常、必須ではないが、これらの量は、格納、伝達、結合、比較、及びその他の操作可能な電気信号又は磁気信号の形態を取る。これらの信号をビット、値、要素、シンボル、特徴、用語、数などと称することは、主に一般的な用法上の理由で便利である。
【００１８】
しかし、これらの用語及び類似の用語の全ては、適切な物理量に関連し、単にこれらの量に適用される便宜的なラベルである。具体的に、以下の説明で、「処理」、「コンピューティング」、「計算」、「決定」、「表示」等の用語を使用する論議は、コンピュータシステムのレジスター及びメモリ内で物理（電気）量として表されるデータを、コンピュータシステムのメモリ及びレジスター、又は他の情報ストレージ、伝送装置又は表示装置内で物理量として示される他のデータに処置して変換するコンピュータシステム又は同様の電子コンピューティング装置の活動及びプロセスを示す。
【００１９】
本明細書で説明するアルゴリズムは、本質的に任意の特定コンピュータ又は他の装置に関連しない。多様な汎用システム、コンピュータサーバー、又は個人用コンピュータは、本明細書の記載にしたがうプログラムと共に使用されるか、又は要求された方法の段階を遂行するための特化された装置を構成するのに便利である。このような多様なシステムのために要求される構造を以下で説明する。多様なプログラミング言語が本明細書に記載のように本発明を具現するのに使用される。
【００２０】
また、代表的な実施形態及び従属請求項の多様な特徴は、本発明のさらに有用な実施形態を提供するために、特に明示的に列挙しない方式で結合される。また、エンティティーグループ（ｇｒｏｕｐｓ  ｏｆ  ｅｎｔｉｔｉｅｓ）のすべての値の範囲又は指示は、本発明の範囲を制限する目的のみならず、元の目的のための全ての可能な中間値又は中間エンティティーを開示する。また、明示的な基準及び図面に示した構成要素の寸法及び形状は、本発明がどのように実施されるのかを理解するのを助けるように設計されるが、実施形態に示した寸法及び形状に限定されない。
【００２１】
図１は、本発明の一実施形態によるモノリシック（ｍｏｎｏｌｉｔｈｉｃ）スレッディングモデルにおけるデータ経路の例を示す図である。
【００２２】
データ経路は、ｉＳＣＳＩレシーバー経路（ｉＳＣＳＩ  ｒｅｃｅｉｖｅｒ  ｐａｔｈ）１０１、ＳＣＳＩコマンド発行経路（ｃｏｍｍａｎｄ  ｉｓｓｕｅ  ｐａｔｈ）１０２、ＳＣＳＩコマンド完了経路（ｃｏｍｍａｎｄ  ｃｏｍｐｌｅｔｉｏｎ  ｐａｔｈ）１０３、及びｉＳＣＳＩトランスミッタ経路（ｔｒａｎｓｍｉｔｔｅｒ  ｐａｔｈ）１０４のモノリシックシーケンスを含む。
【００２３】
ストレージシステムは、複数の中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）（例えば、Ｎ個のＣＰＵ）を含み、当該ストレージシステムの各ＣＰＵは、データ経路のライフサイクルに亘ってそれぞれのデータ経路の確立、処理、管理、及び完了を担当する。
【００２４】
データ経路（１０１〜１０４）のうち、ｉＳＣＳＩレシーバー経路１０１及びｉＳＣＳＩトランスミッタ経路１０４は、イニシエーターとＳＣＳＩターゲットとの間の伝送プロトコル（即ち、ｉＳＣＳＩ）で確立され、コネクション単位に基づく。例えば、ログイン／ログアウト、バッファ管理、及び作業管理処理（ｔａｓｋ  ｍａｎａｇｅｍｅｎｔ  ｈａｎｄｌｉｎｇ）は、コネクション単位に基づいてセッション／コネクションレベルで実行される。Ｉ／Ｏコマンドは、セッション／コネクションレベルでキューイング（ｑｕｅｕｅ）されて、追跡（ｔｒａｃｋ）される。
【００２５】
データ経路（１０１〜１０４）のうち、ＳＣＳＩコマンド発行経路１０２及びＳＣＳＩコマンド完了経路１０３は、ＬＵＮレベルでＳＣＳＩターゲットとＬＵＮとの間に確立される。例えば、ターゲットストレージ装置へのＳＣＳＩコマンド及びターゲットストレージ装置からのＳＣＳＩコマンド並びにエラー処理は、ＬＵＮレベルで追跡される。図１に示すモノリシックスレッドモデルでは、ターゲットシステムの利用可能なＣＰＵリソースは、伝送プロトコル及びＳＣＳＩコアレベルプロトコルの両方を作動させるために共有される。モノリシックスレッディングモデルは、キャッシュ局所性（ｃａｃｈｅ  ｌｏｃａｌｉｔｙ）を最大化しない。
【００２６】
本発明は、別個のスレッドで独立に伝送プロトコル及びＳＣＳＩコアプロトコルを分割して処理する新規なスレッディングモデル（ｔｈｒｅａｄｉｎｇ  ｍｏｄｅｌ）を提供する。
【００２７】
本スレッディングモデルは、伝送プロトコルスレッドとＳＣＳＩコアスレッドとの間でロックレス・キュー設計（ｌｏｃｋｌｅｓｓ  ｑｕｅｕｅ  ｄｅｓｉｇｎ）を採用する。ロックレス・キュー設計は、伝送プロトコル及びＳＣＳＩコアプロトコルに対するスレッドを分割し、独立に作動させることによって、Ｉ／Ｏ性能を向上させる。
【００２８】
ストレージシステムのＣＰＵリソースは、伝送プロトコル階層とＳＣＳＩコア階層との間で分配される。伝送プロトコルスレッドは、伝送プロトコル階層でのスレッド実行を処理するために割り当られたＣＰＵでのみスケジューリングされる。ＳＣＳＩコアスレッドは、ＳＣＳＩコア階層で作動するスレッドを処理するために割り当られたＣＰＵでのみスケジューリングされる。伝送プロトコルスレッドは、受信経路及び送信経路を処理する。ＳＣＳＩコアスレッドは、特定のＬＵＮに対するＩ／Ｏ要請及びその特定のＬＵＮに対するＩ／Ｏ完了（ｃｏｍｐｌｅｔｉｏｎ）を処理する。
【００２９】
本発明のシステム及び方法は、複数のＬＵＮ及びそれらへのコネクションに対して高い拡張性（ｓｃａｌａｂｉｌｉｔｙ）を提供する。本発明のシステム及び方法は、さらにキャッシュ局所性を最大化するために伝送プロトコルスレッド及びＬＵＮスレッドを分離する。その上で、ロックレス・キュー設計は、複数のＬＵＮが複数のコネクションを通じてアクセスされた時、ロック衝突（ｌｏｃｋ  ｃｏｎｔｅｎｔｉｏｎ）を除去する。
【００３０】
本明細書ではｉＳＣＳＩターゲットについて説明するが、本発明は、システムリソースを効率的に利用することと、同期化ボトルネックを回避するために高性能なターゲットＩ／Ｏ性能を提供することとを活用できる何れのＳＡＮプロトコル（例えば、ＦＣＰ、ｐＳＣＳＩ、ｉＳＣＳＩ、ＨｙｐｅｒＳＣＳＩ、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ、ＡＴＡ、ＳＡＴＡ、ＡｏＥ、ＩｎｆｉｎｉＢａｎｄ、及びＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ）にも適用される。例えば、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓプロトコルで、ＳＣＳＩコア階層に相当するコア階層は、ＮＶＭｅキューイングインターフェイス（ＮＶＭｅ  Ｑｕｅｕｉｎｇ  ｉｎｔｅｒｆａｃｅ）及びコマンドセットと称される。
【００３１】
図２は、本発明の一実施形態によるスレッディングモデルの例におけるデータ経路を示すブロック図である。
【００３２】
データ経路２００は、コネクション特定経路２５１とＬＵＮ特定経路２５２とに分離される。コネクション特定経路２５１は、レシーバー２０１及びトランスミッタ２１１を含む。イニシエーター（クライアント）のレシーバー２０１は、ホストから命令語（ｉｎｓｔｒｕｃｔｉｏｎ）を受信して、ｉＳＣＳＩコマンド２０２及び関連するデータ２０３を生成し、ターゲットとのコネクションを確立して、ＳＣＳＩ  Ｉ／Ｏモジュール２０４とＴＭ（ｔａｓｋ  ｍａｎａｇｅｍｅｎｔ）  Ｉ／Ｏモジュール２０５とを通じてターゲットにｉＳＣＳＩコマンド２０２及びデータ２０３を伝送する。
【００３３】
ＬＵＮ特定経路２５２は、読出し、書込み、及びトリム（ｔｒｉｍ）のようなＳＣＳＩコマンドに関連するデータを格納するためのデータＣＤＢ（ｄａｔａ  ｃｏｍｍａｎｄ  ｄｅｓｃｒｉｐｔｏｒ  ｂｌｏｃｋｓ）２２１、及び問合せ（ｉｎｑｕｉｒｙ）、読出し、及び容量のようなＳＣＳＩコマンドを格納するための制御ＣＤＢ（ｃｏｎｔｒｏｌ  ＣＤＢ）２２２を含む。ｉＳＣＳＩコマンド２０２及びデータ２０３は、それぞれデータＣＤＢ２２１及び制御ＣＤＢ２２２に格納される。
【００３４】
ＬＵＮ特定経路２５２は、ＳＣＳＩ管理コマンド（例えば、中断、ＬＵＮリセット）を格納するためのＴＭ  Ｉ／Ｏブロック２２３と、状態／データブロック２２４をさらに含む。ホストから受信したＴＭコマンドはＴＭ  Ｉ／Ｏブロック２２３に格納される。ターゲットから受信したターゲットの状態及び関連データは、状態／データブロック２２４に格納される。制御ＣＤＢ２２２は、特定の制御コマンドに対する状態及びデータを更新するために、状態／データブロック２２４に直接アクセスする。Ｉ／Ｏ完了のようなターゲットに対する状態／データ情報は、コネクション特定経路２５１のトランスミッタ２１１に返送される。
【００３５】
図３は、本発明の一実施形態による分割されたスレッディングモデルの例を示す図である。
【００３６】
ターゲットシステムは、ワークロード（ｗｏｒｋ  ｌｏａｄ）の類型に基づいてｉＳＣＳＩ伝送プロトコルとＳＣＳＩコマンドとの間での処理のために分配された複数のＣＰＵを含む。コネクション特定スレッド（即ち、伝送プロトコルでのｉＳＣＳＩ）は、イニシエーターとＳＣＳＩターゲットとの間のｉＳＣＳＩレシーバー経路３０１及びｉＳＣＳＩトランスミッタ経路３０４を含む。コネクション特定スレッドは、コネクション単位に基づく。ＳＣＳＩコマンド発行経路３０２及びＳＣＳＩコマンド完了経路３０３は、ＬＵＮレベルで確立される。
【００３７】
ターゲットシステムの複数の利用可能なＣＰＵの中で、Ｍ個のＣＰＵが、データ経路を確立し、イニシエーターとＳＣＳＩターゲットとの間のＳＣＳＩコマンドを伝送し、伝送プロトコル階層で確立されたデータ経路を完了するために割り当られる。一方、Ｎ個のＣＰＵが、ＳＣＳＩターゲットとＬＵＮとの間のＳＣＳＩコマンドを処理し、管理し、取り扱うために割り当られる。
【００３８】
イニシエーターとＳＣＳＩターゲットとの間のｉＳＣＳＩプロトコルは、コネクション毎に確立されたコネクション特定スレッドを作動させ、ｉＳＣＳＩレシーバー経路３０１とｉＳＣＳＩトランスミッタ経路３０４とのシーケンスを含む。コネクション特定スレッドは１つ以上のＭ個のＣＰＵに割り当られる。
【００３９】
ｉＳＩＣＳＩレシーバー経路３０１は、ＳＣＳＩコマンド発行経路３０２（即ち、ＳＣＳＩレシーバー）を含むＳＣＳＩ  Ｉ／Ｏ要請をキューイング（ｑｕｅｕｅ）する。ＳＣＳＩコマンドが完了した後、ＳＣＳＩターゲットはＳＣＳＩコマンド完了経路３０３（即ち、ＳＣＳＩトランスミッタ）をキューイングする。
【００４０】
ＬＵＮ単位に基づいて確立されたＳＣＳＩコマンド発行経路３０２及びＳＣＳＩコマンド完了経路３０３は、Ｎ個のＣＰＵに割り当られる。ＳＣＳＩコマンドが完了した後、ＳＣＳＩターゲットは、イニシエーターとＳＣＳＩターゲットとの間の前に確立された伝送コネクション上のイニシエーターにＩ／Ｏ完了（例えば、ｉＳＣＳＩトランスミッタ経路３０４）をキューイングする。最後に、Ｉ／Ｏ完了は、イニシエーターとＳＣＳＩターゲットとの間のコネクション特定スレッドを確立したＣＰＵによって処理される。
【００４１】
図４は、本発明の一実施形態によるスレッディングモデルの例を示す概略図である。本スレッディングモデルは、ｉＳＣＳＩレシーバー経路４０１、ｉＳＣＳＩトランスミッタ経路４０４、ＳＣＳＩコマンド発行経路４０２、及びＳＣＳＩコマンド完了経路４０３を含むデータ経路を提供する。
【００４２】
Ｉ／Ｏコマンド発行経路で、ｉＳＣＳＩレシーバー経路４０１は、Ｉ／Ｏコマンド発行キュー４１０を使用してＩ／ＯコマンドをＳＣＳＩコマンド発行経路４０２に配置する。Ｉ／Ｏコマンド返送（ｒｅｔｕｒｎ）経路で、ＳＣＳＩコマンド完了経路４０３は、Ｉ／Ｏ完了キュー４１１を使用してＩ／Ｏ完了をｉＳＣＳＩトランスミッタ経路４０４に配置する。
【００４３】
本実施形態で、Ｉ／Ｏコマンド発行キュー４１０及びＩ／Ｏ完了キュー４１１は、複数のコネクションからのＩ／Ｏコマンドが１つのＬＵＮに到達し、１つのコネクションからのＩ／Ｏコマンドが複数のＬＵＮに到達するＭＰＭＣ（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ａｎｄ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ）ロックレス・キューである。
【００４４】
本発明の一実施形態において、キューの文脈で、生産者（ｐｒｏｄｕｃｅｒ）はイニシエーターと称し、消費者（ｃｏｎｓｕｍｅｒ）はターゲットと称する。いくつかの実施形態で、生産者はターゲットと称し、消費者はイニシエーターと称する。例えば、ｉＳＣＳＩレシーバー経路４０１とｉＳＣＳＩトランスミッタ経路４０４とは生産者によって所有され、ＳＣＳＩコマンド発行経路４０２とＳＣＳＩコマンド完了経路４０３は消費者によって所有される。他の実施形態で、ＳＣＳＩコマンド発行経路４０２とＳＣＳＩコマンド完了経路４０３とは生産者によって所有され、ｉＳＣＳＩレシーバー経路４０１とｉＳＣＳＩトランスミッタ経路４０４とは消費者によって所有される。
【００４５】
ＭＰＭＣキューで、生産者作業及び消費者作業は、複数のスレッドで作動する。例えば、生産者作業はｎ個のスレッドで作動し、消費者作業はｍ個のスレッドで作動する。特定の生産者スレッドを担当する複数の生産者が存在し、特定の消費者スレッドを担当する複数の消費者が存在する。
【００４６】
Ｉ／Ｏ発行経路で、伝送プロトコル階層はＳＣＳＩコア階層への作業要請を生成する。この場合、伝送プロトコル階層は生産者であり、ＳＣＳＩコア階層は消費者である。一方、Ｉ／Ｏ完了経路で、ＳＣＳＩコア階層は伝送プロトコル階層への作業要請を生成する。この場合、ＳＣＳＩコア階層は生産者であり、伝送プロトコル階層は消費者である。
【００４７】
コネクション単位である伝送プロトコル階層によって生成された作業要請は、複数のＬＵＮに伝達される。同様に、ＬＵＮ単位であるＳＣＳＩコア階層によって生成された作業要請は、複数のコネクションに伝達される。伝送プロトコル階層とＳＣＳＩコア階層との間の通信は一般的にロック（ｌｏｃｋ）を要求する同期点を含む。
【００４８】
本発明の一実施形態によるシステムは、伝送プロトコル階層及びＳＣＳＩコア階層がロックレス方式でアクセスされるようにする。
【００４９】
図５は、本発明の一実施形態によるＳＰＳＣ（ｓｉｎｇｌｅ−ｐｒｏｄｕｃｅｒ  ｓｉｎｇｌｅ−ｃｏｎｓｕｍｅｒ）ロックレス・キューを示すブロック図である。
【００５０】
ロックレス・キュー内の各ノードは、データコンテナ（ｄａｔａ  ｃｏｎｔａｉｎｅｒ）及びポインターを含み、一連のノードがリンクされたリスト（ｌｉｎｋｅｄ  ｌｉｓｔ）に連結される。
【００５１】
本実施形態によれば、図４のＩ／Ｏコマンド発行キュー４１０及びＩ／Ｏ完了キュー４１１の各々は、図５に示すロックレス・キューを含む。ロックレス・キューは、ヘッドノード５０１及びテールノード５０３を含む。キュー内にただ１つのノードしか存在しない場合、ヘッドノード５０１とテールノード５０３とは同一である。現在ノード（ｃｕｒｒｅｎｔ  ｎｏｄｅ）５０２は、リストの開始点を意味し、開始点から消費者はリストトラバーサル（ｌｉｓｔ  ｔｒａｖｅｒｓａｌ）を開始し、ノードを消費する。いくつかの実施形態で、現在ノード５０２は、消費者開始又は消費者ヘッド（生産者によって所有されるヘッドノード５０１に対して）と称される。
【００５２】
図５に示すリンクされたリストの各ノードは、データコンテナ５１１と、次のノードを示すポインター５１２とを含む。生産者は、新しいノード（例えば、新しいＩ／Ｏコマンドに対応するノード）を生成し、新しく生成されたノードをキューのテールノード５０３に連結して、新しいノードを示すようにテールノード５０３のポインターを更新する。このような方法で、新しいノードが既存のキューに加えられる。同様に、生産者は、消費されたノードをヘッドノード５０１から現在ノード５０２まで解放させる。
【００５３】
システムリソースが利用可能である場合、生産者は、消費者によるノード消費処理から独立して、消費されたノードを解放させる。この意味で、生産者による、消費されたノードを解放するプロセスは、レイジー削除（ｌａｚｙ  ｄｅｌｅｔｅ）と称される。ヘッドノード５０１から現在ノード５０２の前までのノードは生産者によって所有され、現在ノード５０２からテールノード５０３までのノードは消費者によって所有される。消費者は、現在ノード５０２からテールノード５０３までリストをトラバース（ｔｒａｖｅｒｓｅ）し、現在ノード５０２でアイテムを消費し、後続のノードに現在のポインターを更新する。もし現在のポインターがテールノード５０３を示す場合、消費者はノードを消費しない。
【００５４】
本発明のロックレス・キューは、制御情報を保有してロックレスリストを管理する制御構造（ｃｏｎｔｒｏｌ  ｓｔｒｕｃｔｕｒｅ）を提供する。生産者は先頭及び最後のポインターを所有する。生産者によって新しいノードがロックレスリストに加えられると、最後のポインターが更新される。生産者が消費されたノードを削除すると、先頭のポインターが更新される。消費者が現在ノード５０２からテールノード５０３までリストをトラバースするので、現在のポインターは消費者によって更新される。
【００５５】
ロックレス・キューの現在のポインターの制御情報と所有権は、ロックレス・キューの制御構造を使用して生産者と消費者との間でシームレスに（ｓｅａｍｌｅｓｓｌｙ）交換されるので、本発明のロックレス・キューは、データ経路での同期点及びロックの必要性を除去し、特に、複数のセッションが同時に複数のＬＵＮをアクセスする場合、Ｉ／Ｏ性能を向上させる。
【００５６】
図６は、本発明の一実施形態によるＭＰＭＣロックレス・キュー（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ  ｌｏｃｋｌｅｓｓ  ｑｕｅｕｅ）の例を示すブロック図である。ＭＰＭＣロックレス・キューは、Ｎ個のヘッドノード（ヘッド１〜ヘッドＮ）の制御アレイ６０１を含む。ここで、Ｎは生産者が作動させる予定のスレッド数である。
【００５７】
生産者はＮ個のスレッドで作動させる予定であり、消費者はＭ個のスレッドで作動させる予定である。１つの生産者が複数のスレッドを作動させるので、生産者の数とスレッドの数（Ｎ）とは異なる。同様に、１つの消費者が複数のスレッドを作動させ、複数の生産者によって生産されたノードを消費できるので、消費者の数とスレッドの数（Ｍ）とは異なる。制御アレイ６０１で、生産者はノードを生成し、消費者はノードを消費する。Ｎ個のスレッドの各々に対応する制御構造はＳＰＳＣロックレス・キューを維持する。消費者はＮ個のスレッドの制御アレイ６０１を維持する。
【００５８】
本実施形態において、ＭＰＭＣロックレス・キューは、スレッド識別子（ＩＤ）を利用してスレッドへの排他的なアクセスを提供する。
【００５９】
例えば、所定のスレッド上で実行作動させる生産者は、対応するキュー内に新しいノードを生成する必要がある。新しいノードを追加する場合、生産者は、自分のスレッド識別子（ＩＤ）を制御アレイ６０１にインデックス（ｉｎｄｅｘ）することによって、キューに排他的にアクセスする。各々の生産者は、キューへの排他的なアクセスを獲得して新しいノードを生成するので、複数の生産者の間に競合がない。
【００６０】
所定のスレッド上で作動させる消費者は、複数の生産者に属する複数のノードを消費する。同様に、各々の消費者は、制御アレイ６０１にあるキューに排他的にアクセスするので、複数の消費者の間に競合がない。
【００６１】
図７は、本発明の一実施形態によるスレッディングモデルの例を示すブロック図である。本スレッディングモデルは、複数のｉＳＣＳＩコネクションスレッド７０１及び複数のＳＣＳＩ  ＬＵＮスレッド７５１を含む。説明目的のために、ｉＳＣＳＩコネクションスレッド７０１は、３つのＣＰＵで作動し、ＳＣＳＩ  ＬＵＮスレッド７５１は２つのＣＰＵで作動する。
【００６２】
ｉＳＣＳＩコネクションスレッド７０１の各々は、ＳＣＳＩ  ＬＵＮスレッド７５１を作動させるＣＰＵの各々に対応する２つのノード（即ち、ヘッド１ａ、ヘッド２ａ）を含む。ＳＣＳＩ  ＬＵＮスレッド７５１の各々は、ｉＳＣＳＩコネクションスレッド７０１を作動させるＣＰＵの各々に対応する３つのノード（即ち、ヘッド１ｂ、ヘッド２ｂ、ヘッド３ｂ）を含む。本実施形態では、ｉＳＣＳＩコネクションスレッド７０１の各々をそれぞれ作動させるために割り当られた３つのＣＰＵ、及びＳＣＳＩ  ＬＵＮスレッド７５１の各々をそれぞれ作動させるために割り当られた２つのＣＰＵを含むが、本スレッディングモデルは、本発明の技術的範囲から逸脱しない範囲内で、任意の数のｉＳＣＳＩコネクションスレッド及びＳＣＳＩ  ＬＵＮスレッドに適用される。
【００６３】
各々のｉＳＣＳＩコネクションスレッド（ＣＴ１、ＣＴ２、ＣＴ３）は、それぞれのＣＰＵ（ＣＰＵ１、ＣＰＵ２、ＣＰＵ３）に割り当られる。同様に、各々のＳＣＳＩ  ＬＵＮスレッド（ＬＴ１、ＬＴ２）は、それぞれのＣＰＵ（ＣＰＵ４、ＣＰＵ５）に割り当られる。６個のｉＳＣＳＩコネクション（Ｃ１〜Ｃ６）は、ｉＳＣＳＩスレッド（ＣＴ１、ＣＴ２、ＣＴ３）によってサービスされる。４個のＬＵＮ（Ｌ１〜Ｌ４）は、ＳＣＳＩ  ＬＵＮスレッド（ＬＴ１、ＬＴ２）によってサービスされる。
【００６４】
生産者コネクションスレッド（例えば、ｉＳＣＳＩコネクションスレッド７０１）は、（処理される予定の）Ｉ／Ｏコマンドを、それぞれのＣＰＵ−ＩＤによってインデックスされたＬＵＮ単位のキューに直接生成する。ＳＣＳＩ  ＬＵＮスレッド７５１は、（完了された）Ｉ／Ｏコマンドを、それぞれのＣＰＵ−ＩＤによってインデックスされるようにｉＳＣＳＩコネクションスレッド７０１によって生成されたＩ／Ｏコマンドにしたがって、コネクション単位のキューに直接生成する。
【００６５】
消費者コネクションスレッド（例えば、ＳＣＳＩ  ＬＵＮスレッド７５１）は、当該コネクションに属するＩ／Ｏコマンドを消費する。ＳＣＳＩ  ＬＵＮスレッド７５１は、当該ＬＵＮに属するＩ／Ｏコマンドを消費する。
【００６６】
ｉＳＣＳＩコネクションスレッド７０１（生産者）は、Ｉ／Ｏコマンドを個別のＳＣＳＩ  ＬＵＮスレッド７５１（消費者）に直接発行し、ＳＣＳＩ  ＬＵＮスレッド７５１（生産者）は、Ｉ／Ｏ完了を個別のｉＳＣＳＩコネクションスレッド７０１（消費者）に直接発行する。各々のＩ／Ｏコマンドは、特定のスレッドを作動させるプロセッサに固有のＣＰＵ−ＩＤによって識別され、それにより、独立して作動するスレッド間で同期点又はロックの必要性を除去する。
【００６７】
図８は、本発明の他の実施形態によるＭＰＭＣロックレス・キューの例を示すブロック図である。Ｉ／Ｏ発行経路内で、生産者は伝送プロトコル階層であり、消費者はＳＣＳＩコア階層である。伝送プロトコルスレッド（例えば、図３のｉＳＣＳＩレシーバー経路３０１）は、Ｎ個のＣＰＵのＬＵＮアレイ８０１にアクセスする。ここで、Ｎは伝送プロトコルスレッドのために割り当られたＣＰＵの数である。
【００６８】
アレイインデックスは、伝送プロトコルスレッドが作動中であるＣＰＵ番号（１〜Ｎ）を指す。アレイインデックスの各々は、ロックレスシングルリンクされたリスト（ｌｏｃｋｌｅｓｓ  ｓｉｎｇｌｅ  ｌｉｎｋｅｄ  ｌｉｓｔ）を含み、このロックレスシングルリンクされたリストで、伝送プロトコルスレッドは特定のＬＵＮに発行されたＩ／Ｏコマンドの作業要請を生成する。
【００６９】
ＳＣＳＩコアスレッド（例えば、図３のＳＣＳＩコマンド発行経路３０２）は、伝送プロトコルスレッドによってキューイングされる作業エントリを処理するＳＣＳＩコアＣＰＵで実行される。ＳＣＳＩコアスレッドは、対応するＳＣＳＩコアＣＰＵで作動するスレッド内にある現在ポインターを更新する。ＳＣＳＩモジュール（ＬＵＮ）は、図８に示すようなデータ構造を有し、Ｉ／Ｏ要請を生成して配置するためにｉＳＣＳＩモジュール（伝送プロトコル階層）にインターフェイスを提供する。
【００７０】
図９は、本発明のさらに他の実施形態によるＭＰＭＣロックレス・キューの例を示すブロック図である。Ｉ／Ｏ完了経路内で、生産者はＳＣＳＩコア階層であり、消費者は伝送プロトコル階層である。ＬＵＮスレッド（例えば、図３のＳＣＳＩコマンド完了経路３０３）は、Ｍ個のＣＰＵのコネクション単位のアレイ９０１にアクセスする。ここで、ＭはＳＣＳＩコアスレッドのために割り当られたＣＰＵの数である。
【００７１】
アレイインデックスは、ＳＣＳＩコアスレッドが作動中であるＣＰＵ番号（１〜Ｍ）を指す。アレイインデックスの各々は、ロックレスシングルリンクされたリストを含み、このロックレスシングルリンクされたリストで、ＳＣＳＩコアスレッドは特定のコネクションに対する完了されたＩ／Ｏコマンドの作業要請を生成する。
【００７２】
対応するＣＰＵで実行される伝送プロトコルスレッド（例えば、図３のｉＳＣＳＩトランスミッタ経路３０４）は、すべてのＳＣＳＩコアスレッドによってキューイングされるＩ／Ｏコマンドを処理する。ｉＳＣＳＩスレッドは、対応する伝送プロトコルＣＰＵで作動するｉＳＣＳＩスレッド内にある現在のポインターを更新する。ｉＳＣＳＩモジュール（ｉＳＣＳＩコネクション）は、図９に示すようなデータ構造を有し、Ｉ／Ｏ完了を生成して配置するためにＳＣＳＩモジュール（ＳＣＳＩコア階層）にインターフェイスを提供する。
【００７３】
本発明のシステム及び方法は、伝送処理とデータ（又はコア）処理とを分離する。本発明のシステム及び方法は、伝送処理及びデータ処理に内在する同期化問題を解決するＭＰＭＣ（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ−ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ）ロックレス設計を具現する。本発明のシステム及び方法は、伝送処理とデータ処理との間のリソース（例えば、ＣＰＵ）共有を提供して、伝送階層及びコア階層の各々のリソースに対する互いに異なりかつ多様な要求に対応する。Ｉ／Ｏ書込み（ＩＯＷ）及びＣＰＵリソースの比率は、システム仕様に応じて異なる。
【００７４】
本発明の一実施形態による方法は、複数のＣＰＵを含むデータストレージシステムのターゲットに格納されたデータにアクセスするコマンドを受信する段階と、複数のＣＰＵの中の第１グループのＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを実行する段階と、複数のＣＰＵの中の第２グループのＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させる段階と、伝送スレッドのコマンドレシーバー経路を使用してＩ／Ｏコマンド発行キューにＩ／Ｏコマンドを配置し、データ経路スレッドのコマンド発行経路を使用してＩ／Ｏコマンドを処理する段階と、データ経路スレッドのコマンド完了経路を使用してＩ／Ｏ完了キューにＩ／Ｏ完了通知を配置し、伝送スレッドのコマンドトランスミッタ経路を使用してＩ／Ｏ完了通知を処理する段階と、を有し、Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、第１キューアレイの各々は、第１グループのＣＰＵのそれぞれのＣＰＵに対応し、Ｉ／Ｏ完了キューは、第２キューアレイを含み、第２キューアレイの各々は、第２グループのＣＰＵのそれぞれのＣＰＵに対応する。
【００７５】
伝送スレッドは、レシーバー及びトランスミッタを含み、レシーバーはＩ／Ｏコマンドをデータ経路に伝送する。
【００７６】
データ経路スレッドは、Ｉ／Ｏコマンドをターゲットに伝送し、ターゲットから状態及びデータの中の少なくとも１つを受信し、伝送スレッドのトランスミッタに状態及びデータの中の少なくとも１つを伝送する。
【００７７】
第１キューアレイは、データ経路スレッドに割り当られた第２グループのＣＰＵに対応する第１の複数のノードを含む。
【００７８】
第１の複数のノードはヘッダーノード、テールノード、及び第１キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは、消費者によって所有され、第１キューアレイの残りのノードは生産者によって所有される。
【００７９】
生産者はイニシエーターであり、消費者はターゲットである。
【００８０】
消費者はデータ経路スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【００８１】
第２キューアレイは伝送スレッドに割り当られた第１グループのＣＰＵに対応する第２の複数のノードを含む。
【００８２】
第２の複数のノードはヘッダーノード、テールノード、及び第２キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは消費者によって所有され、第２キューアレイの残りのノードは生産者によって所有される。
【００８３】
生産者はターゲットであり、消費者はイニシエーターである。
【００８４】
消費者は、伝送スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【００８５】
Ｉ／Ｏコマンド発行キュー及びＩ／Ｏ完了キューの各々は、ＭＰＭＣ（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ）ロックレス・キューである。
１つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、特定の伝送スレッドからの作業要請は、１つ以上のデータ経路スレッドに到達する。同様に、１つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、特定のデータ経路スレッドからの作業要請は、１つ以上の伝送スレッドに到達する。
【００８６】
本発明の一実施形態によるデータストレージシステムは、複数のＣＰＵと、複数のターゲットと、Ｉ／Ｏフロー、Ｉ／Ｏコマンド発行キュー、及びＩ／Ｏ完了キューを処理するソフトウェアモジュールセットを格納するメモリと、を備え、ソフトウェアモジュールセットは、複数のＣＰＵを含むデータストレージシステムのターゲットに格納されたデータにアクセスするＩ／Ｏコマンドを受信し、複数のＣＰＵの第１グループのＣＰＵの中の第１ＣＰＵ上でコマンドレシーバー経路及びコマンドトランスミッタ経路を各々含む複数の伝送スレッドを作動させ、複数のＣＰＵの第２グループのＣＰＵの中の第２ＣＰＵ上でコマンド発行経路及びコマンド完了経路を各々含む複数のデータ経路スレッドを作動させ、伝送スレッドのコマンドレシーバー経路は、Ｉ／ＯコマンドをＩ／Ｏコマンド発行キューに配置し、データ経路スレッドのコマンド発行経路は、Ｉ／Ｏコマンドを処理し、データ経路スレッドのコマンド完了経路は、Ｉ／Ｏ完了通知をＩ／Ｏ完了キューに配置し、伝送スレッドのコマンドトランスミッタ経路は、Ｉ／Ｏ完了通知を処理し、Ｉ／Ｏコマンド発行キューは、第１キューアレイを含み、第１キューアレイの各々は、第１グループのＣＰＵのそれぞれのＣＰＵに対応し、Ｉ／Ｏ完了キューは、第２キューアレイを含み、第２キューアレイの各々は、第２グループのＣＰＵのそれぞれのＣＰＵに対応する。
【００８７】
伝送スレッドは、レシーバー及びトランスミッタを含み、レシーバーは、Ｉ／Ｏコマンドをデータ経路に伝送する。
【００８８】
データ経路スレッドは、Ｉ／Ｏコマンドをターゲットに伝送し、ターゲットから状態及びデータの中の少なくとも１つを受信し、伝送スレッドのトランスミッタに状態及びデータの中の少なくとも１つを伝送する。
【００８９】
第１キューアレイは、データ経路スレッドに割り当られた第２グループのＣＰＵに対応する第１の複数のノードを含む。
【００９０】
第１の複数のノードは、ヘッダーノード、テールノード、及び第１キューアレイのキューを示す現在ノードを含み、現在ノードからテールノードまでのノードは、消費者によって所有され、第１キューアレイの残りのノードは、生産者によって所有される。
【００９１】
生産者はイニシエーターであり、消費者は前ターゲットである。
【００９２】
消費者は、データ経路スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【００９３】
第２キューアレイは、伝送スレッドに割り当られた第１グループのＣＰＵに対応する第２複数のノードを含む。
【００９４】
第２の複数のノードは、ヘッダーノード、テールノード、及び第２キューアレイのキューを示す現在ノードを含み、現在のノードからテールノードまでのノードは、消費者によって所有され、第２キューアレイの残りのノードは、生産者によって所有される。
【００９５】
生産者はターゲットであり、消費者はイニシエーターである。
【００９６】
消費者は、伝送スレッドの各々に固有のスレッド識別子を利用してキューへの排他的なアクセスを獲得する。
【００９７】
Ｉ／Ｏコマンド発行キュー及びＩ／Ｏ完了キューの各々は、ＭＰＭＣ（ｍｕｌｔｉ−ｐｒｏｄｕｃｅｒ  ｍｕｌｔｉ−ｃｏｎｓｕｍｅｒ）ロックレス・キューである。
１つ以上の伝送スレッドからの作業要請は、特定のデータ経路スレッドに到達し、特定の伝送スレッドからの作業要請は、１つ以上のデータ経路スレッドに到達する。同様に、１つ以上のデータ経路スレッドからの作業要請は、特定の伝送スレッドに到達し、特定のデータ経路スレッドからの作業要請は、１つ以上の伝送スレッドに到達する。
【００９８】
以上、本発明による高性能なロックレススケーラブルターゲットを提供するためのシステム及び方法の多様な実施形態について説明したが。本発明は、上述の実施形態に限定されるものではなく、本発明が属する技術分野で通常の知識を有する者は、本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【００９９】
１０１、３０１、４０１    ｉＳＣＳＩレシーバー経路
１０２、３０２、４０２    ＳＣＳＩコマンド発行経路
１０３、３０３，４０３    ＳＣＳＩコマンド完了経路
１０４、３０４、４０４    ｉＳＣＳＩトランスミッタ経路
２００    データ経路
２０１    レシーバー
２０２    ｉＳＣＳＩコマンド
２０３    データ
２０４    ＳＣＳＩ  Ｉ／Ｏ（モジュール）
２０５    ＴＭ  Ｉ／Ｏ（モジュール）
２１１    トランスミッタ
２２１    データＣＤＢ
２２２    制御ＣＤＢ
２２３    ＴＭ  Ｉ／Ｏ（ブロック）
２２４    状態／データ（ブロック）
２５１    コネクション特定経路
２５２    ＬＵＮ特定経路
４１０    Ｉ／Ｏコマンド発行キュー
４１１    Ｉ／Ｏ完了キュー
５０１    ヘッドノード
５０２    現在ノード
５０３    テールノード
５１１    データコンテナ
５１２    ポインター
６０１    制御アレイ
７０１    ｉＳＣＳＩコネクションスレッド
７５１    ＳＣＳＩ  ＬＵＮスレッド
８０１、９０１    ＬＵＮアレイ
【図１】
2017191603.tif 000003
【図２】
2017191603.tif 000004
【図３】
2017191603.tif 000005
【図４】
2017191603.tif 000006
【図５】
2017191603.tif 000007
【図６】
2017191603.tif 000008
【図７】
2017191603.tif 000009
【図８】
2017191603.tif 000010
【図９】
2017191603.tif 000011