IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-22
(45)【発行日】2024-01-05
(54)【発明の名称】メモリシステム及びその制御方法
(51)【国際特許分類】
   G06F 13/10 20060101AFI20231225BHJP
   G06F 3/06 20060101ALI20231225BHJP
   G06F 3/08 20060101ALI20231225BHJP
   G06F 12/00 20060101ALI20231225BHJP
【FI】
G06F13/10 310B
G06F3/06 301F
G06F3/06 301R
G06F3/06 304N
G06F3/08 H
G06F12/00 571A
G06F12/00 597U
【請求項の数】 18
(21)【出願番号】P 2019207174
(22)【出願日】2019-11-15
(65)【公開番号】P2021081858
(43)【公開日】2021-05-27
【審査請求日】2022-09-12
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】梶原 裕嗣
(72)【発明者】
【氏名】檜田 和浩
(72)【発明者】
【氏名】野村 周央
(72)【発明者】
【氏名】鈴木 智哉
(72)【発明者】
【氏名】佐野 伸太郎
【審査官】北村 学
(56)【参考文献】
【文献】特開2019-175292(JP,A)
【文献】国際公開第2018/175063(WO,A1)
【文献】特開2004-126694(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 3/08
G06F 12/00
G06F 13/10
(57)【特許請求の範囲】
【請求項1】
不揮発性メモリと、
ホストに接続可能であり、前記不揮発性メモリを制御するコントローラと、を具備し、
前記コントローラは、
前記ホストからサブミッションキューの更新頻度情報を受信し、
前記更新頻度情報にしたがって前記サブミッションキューに格納されているコマンド情報をリードし、
前記コマンド情報に基づいて前記不揮発性メモリを制御し、
前記コマンド情報は、更新されているか否かを示す更新情報を含む、メモリシステム。
【請求項2】
前記更新頻度情報は、前記サブミッションキューの更新予定数と、単位時間あたりの更新回数とのうちの少なくとも一方を含む、請求項1のメモリシステム。
【請求項3】
前記コントローラは、前記サブミッションキューに格納されている複数の前記コマンド情報を含むセットをリードする、請求項1または請求項2のメモリシステム。
【請求項4】
前記サブミッションキューは、循環バッファであり、
前記更新情報で更新されていることを示す状態は、前記循環バッファの周回にしたがって反転し、
前記コントローラは、前記循環バッファの周回にしたがって前記更新情報が更新されているか否かの判断基準を反転する、請求項のメモリシステム。
【請求項5】
前記コントローラは、前記更新情報が更新されていることを示す場合に、前記コマンド情報に基づいて前記制御を実行し、前記更新情報が更新されていないことを示す場合に、前記コマンド情報を破棄する、請求項1ないし請求項4のうちのいずれか1項のメモリシステム。
【請求項6】
不揮発性メモリと、
ホストに接続可能であり、前記不揮発性メモリを制御するコントローラと、を具備し、
前記コントローラは、
前記ホストのメモリに含まれるサブミッションキューに格納されているコマンド情報をリードし、
前記コマンド情報に基づいて前記不揮発性メモリを制御し、
前記コマンド情報から決定されるアドレスにしたがって、前記ホストの前記メモリに、前記コマンド情報に対するコンプリーション情報をライトし、
前記コマンド情報は、前記アドレスを含み、
前記コントローラは、前記コマンド情報内の前記アドレスにしたがって、前記メモリに、前記コンプリーション情報をライトする、メモリシステム。
【請求項7】
前記メモリは、複数の領域を含み、
前記コントローラは、前記メモリの前記複数の領域のうち、前記コマンド情報を含む一つの領域内に、前記コンプリーション情報をライトする、請求項のメモリシステム。
【請求項8】
前記メモリは、複数の領域を含み、
前記コントローラは、前記メモリの前記複数の領域のうちの一つの領域内に、複数の前記コンプリーション情報をライトする、請求項のメモリシステム。
【請求項9】
前記メモリは、複数の領域を含み、
前記コントローラは、前記メモリの前記複数の領域のうちの一つの領域内に、前記コマンド情報に基づいて前記不揮発性メモリからリードされたリードデータと、前記コンプリーション情報とをライトする、請求項のメモリシステム。
【請求項10】
コントローラによる不揮発性メモリの制御方法であって、
前記コントローラにより、ホストからサブミッションキューの更新頻度情報を受信することと、
前記コントローラにより、前記更新頻度情報にしたがって前記サブミッションキューに格納されているコマンド情報をリードすることと、
前記コントローラにより、前記コマンド情報に基づいて前記不揮発性メモリを制御することと、を具備し、
前記コマンド情報は、更新されているか否かを示す更新情報を含む、制御方法。
【請求項11】
前記更新頻度情報は、前記サブミッションキューの更新予定数と、単位時間あたりの更新回数とのうちの少なくとも一方を含む、請求項10の制御方法。
【請求項12】
前記コマンド情報をリードすることは、前記コントローラにより、前記サブミッションキューに格納されている複数の前記コマンド情報を含むセットをリードすることを含む、請求項10または請求項11の制御方法。
【請求項13】
前記サブミッションキューは、循環バッファであり、
前記更新情報で更新されていることを示す状態は、前記循環バッファの周回にしたがって反転し、
前記コントローラにより、前記循環バッファの周回にしたがって前記更新情報が更新されているか否かの判断基準を反転することをさらに具備する、請求項10の制御方法
【請求項14】
前記更新情報が更新されていることを示す場合に、前記コントローラにより、前記コマンド情報に基づいて前記制御を実行し、前記更新情報が更新されていないことを示す場合に、前記コントローラにより、前記コマンド情報を破棄することをさらに具備する、請求項10ないし請求項13のうちのいずれか1項の制御方法。
【請求項15】
コントローラによる不揮発性メモリの制御方法であって、
前記コントローラにより、ホストのメモリに含まれるサブミッションキューに格納されているコマンド情報をリードすることと、
前記コントローラにより、前記コマンド情報に基づいて前記不揮発性メモリを制御することと、
前記コントローラにより、前記コマンド情報から決定されるアドレスにしたがって、前記ホストの前記メモリに、前記コマンド情報に対するコンプリーション情報をライトすることと、を具備し、
前記コマンド情報は、前記アドレスを含み、
前記コンプリーション情報をライトすることは、前記コントローラにより、前記コマンド情報内の前記アドレスにしたがって、前記メモリに、前記コンプリーション情報をライトすることを含む、制御方法。
【請求項16】
前記メモリは、複数の領域を含み、
前記コンプリーション情報をライトすることは、前記コントローラにより、前記メモリの前記複数の領域のうち、前記コマンド情報を含む一つの領域内に、前記コンプリーション情報をライトすることを含む、請求項15の制御方法。
【請求項17】
前記メモリは、複数の領域を含み、
前記コンプリーション情報をライトすることは、前記コントローラにより、前記メモリの前記複数の領域のうちの一つの領域内に、複数の前記コンプリーション情報をライトすることを含む、請求項15の制御方法。
【請求項18】
前記メモリは、複数の領域を含み、
前記コンプリーション情報をライトすることは、前記コントローラにより、前記メモリの前記複数の領域のうちの一つの領域内に、前記コマンド情報に基づいて前記不揮発性メモリからリードされたリードデータと、前記コンプリーション情報とをライトする、請求項15の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステム及びその制御方法に関する。
【背景技術】
【0002】
不揮発性メモリを備えるメモリシステムが普及している。メモリシステムの一例として、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDは、例えば、データセンタのサーバなどのようなホスト計算機システムのストレージデバイスとして使用される。
【先行技術文献】
【特許文献】
【0003】
【文献】米国特許第9652199号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本実施形態は、プロセッサとメモリシステムのコントローラとの間の通信を効率化することを目的とする。
【課題を解決するための手段】
【0005】
本実施形態に係るメモリシステムは、不揮発性メモリと、ホストに接続可能であり、不揮発性メモリを制御するコントローラとを含む。コントローラは、ホストからサブミッションキューの更新頻度情報を受信し、更新頻度情報にしたがってサブミッションキューに格納されているコマンド情報をリードし、コマンド情報に基づいて不揮発性メモリを制御する。前記コマンド情報は、更新されているか否かを示す更新情報を含む。
【図面の簡単な説明】
【0006】
図1】実施形態1-Aに係るストレージシステムの構成の一例を示すブロック図。
図2】実施形態1-Aに係るキャッシュメモリとコントローラの内部メモリとの一例を示す図。
図3】実施形態1-Aに係るストレージシステムによって実行される処理の一例を示すフローチャート。
図4】第1の比較例のストレージシステムの構成の一例を示すブロック図。
図5】第1の比較例のキャッシュメモリとメモリシステムの内部メモリとの一例を示す図。
図6】第2の比較例のストレージシステムの構成の一例を示すブロック図。
図7】更新頻度情報のデータ構成の一例を示す図。
図8】サブミッションキューからコントローラの内部メモリへまとめてDMA転送されるコマンド情報の一例を示す図。
図9】サブミッションキューに格納されているコマンド情報に含まれている更新情報の状態の一例を示す図。
図10】奇数周回時のサブミッションキューにおける更新情報の例を示す図。
図11】偶数周回時のサブミッションキューにおける更新情報の例を示す図。
図12】実施形態2-Aに係るストレージシステムの構成の一例を示すブロック図。
図13】実施形態2-Aに係るストレージシステムの処理の一例を示すフローチャート。
図14】第3の比較例のストレージシステムの構成の一例を示すブロック図。
図15】実施形態2-Bに係るキャッシュメモリにおけるコマンド情報とコンプリーション情報との配置関係の例を示す図。
図16】実施形態2-Cに係るキャッシュメモリにおけるコンプリーション情報の配置例を示す図。
図17】実施形態2-Dに係るストレージシステムの構成の一例を示すブロック図。
図18】実施形態2-Eに係るキャッシュメモリにおけるリードデータとコンプリーション情報との第1の配置関係の例を示す図。
図19】実施形態2-Eに係るキャッシュメモリにおけるリードデータとコンプリーション情報との第2の配置関係の例を示す図。
図20】実施形態2-Eに係るキャッシュメモリにおけるリードデータとコンプリーション情報との第3の配置関係の例を示す図。
図21】実施形態2-Fに係るストレージシステムの構成の一例を示すブロック図。
図22】実施形態2-Gに係るストレージシステムの構成の一例を示すブロック図。
図23】実施形態3-Aに係るストレージシステムの構成の一例を示すブロック図。
図24】実施形態3-Bに係るストレージシステムの構成の一例を示すブロック図。
図25】実施形態3-Cに係るストレージシステムの構成の一例を示すブロック図。
図26】実施形態3-Dに係るストレージシステムの構成の一例を示すブロック図。
図27】実施形態3-Eに係るストレージシステムの構成の一例を示すブロック図。
図28】実施形態3-Fに係るストレージシステムの構成の一例を示すブロック図。
図29】実施形態3-Gに係るストレージシステムの構成の一例を示すブロック図。
【発明を実施するための形態】
【0007】
以下、図面を参照して、本実施形態について具体的に説明する。なお、以下の説明において、実質的に同一の構成要素及び機能については、同一符号を付し、必要に応じて説明を行う。以下の説明において、例として挙げる数値は好ましい数値であり、本実施形態はこれらの数値に制限されない。
【0008】
以下で説明する各実施形態においては、プロセッサと、当該プロセッサによって発行されたコマンドにしたがって不揮発性メモリを制御するコントローラとの間の通信、および、プロセッサおよびコントローラで実行される制御、を効率化する。
【0009】
(実施形態1-A)
実施形態1-Aでは、プロセッサからコントローラへ、キューに格納されているコマンドに関する情報(以下、コマンド情報という)の更新頻度を通知するストレージシステムを説明する。
【0010】
図1は、実施形態1-Aに係るストレージシステム1Aの構成の一例を示すブロック図である。
図2は、実施形態1-Aに係るキャッシュメモリ3とコントローラ7の内部メモリ27との一例を示す図である。
【0011】
ストレージシステム1Aは、プロセッサ2と、キャッシュメモリ3と、メインメモリ4と、システムバス5と、ペリフェラルバス6と、コントローラ7と、不揮発性メモリ8とを備える。
【0012】
プロセッサ2とキャッシュメモリ3とメインメモリ4とは、ホストデバイス9の構成要素でもよい。メインメモリ4としては、例えば、DRAM(Dynamic Random Access Memory)が用いられる。
【0013】
コントローラ7と不揮発性メモリ8とは、メモリシステム10の構成要素でもよい。ストレージシステム1Aは、並列に動作可能な複数台のメモリシステム10を備えてもよい。
【0014】
ホストデバイス9は、メモリシステム10に対してキュー制御機能を用いたデータアクセスを行う。
【0015】
プロセッサ2は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、または、MPU(Micro-Processing Unit)などである。プロセッサ2は、マルチコア型プロセッサにおける1つのプロセッサコアとしてもよい。
【0016】
プロセッサ2は、例えばレジスタなどのような内部メモリ11を備える。プロセッサ2の内部メモリ11は、プロセッサ2によって発行されたコマンドに関するコマンド情報を格納するキュー(以下、サブミッションキューという)SQの更新頻度を示す更新頻度情報12を格納する。更新頻度情報12は、例えば、プロセッサ2によって生成される。更新頻度情報12は、換言すれば、プロセッサ2によるコマンドの発行頻度を示す情報である。更新頻度情報12は、プロセッサ2の内部メモリ11に代えて、キャッシュメモリ3またはメインメモリ4に格納されてもよい。
【0017】
プロセッサ2は、キャッシュメモリ3をアクセス可能である。プロセッサ2は、システムバス5を介してメインメモリ4をアクセス可能である。プロセッサ2は、システムバス5およびペリフェラルバス6を介してメモリシステム10のコントローラ7と通信可能である。プロセッサ2とコントローラ7とは、システムバス5およびペリフェラルバス6を介して、例えば、情報、データ、リクエスト、指示、命令などを、互いに送信および受信する。
なお、説明を簡略化するため、以下においてはシステムバス5とペリフェラルバス6に関しては説明を省略する。
【0018】
プロセッサ2は、キャッシュメモリ3またはメインメモリ4に格納されているプログラム13にそって動作する。
【0019】
実施形態1-Aにおいて、プロセッサ2とコントローラ7とは、NVMe規格を改良した通信インタフェースにしたがって動作する。
【0020】
キャッシュメモリ3は、プロセッサ2によって発行されたコマンドに関するコマンド情報14を格納するサブミッションキューSQと、コマンドの完了を示すコンプリーション情報15を格納するキュー(以下、コンプリーションキュー)CQとを含む。
【0021】
以下の各実施形態において、各コンプリーション情報15がキャッシュメモリ3にライトされる順序は、各コンプリーション情報15に対応するコマンド情報14がサブミッションキューSQからリードされた順序と異なっていてもよい。換言すれば、コンプリーション情報15は、任意の順序で、キャッシュメモリ3にライトされ得る。
【0022】
キャッシュメモリ3は、例えば、プロセッサ2内に備えられていてもよく、プロセッサ2とは別構成としてもよい。以下の各実施形態においても同様である。
【0023】
サブミッションキューSQおよびコンプリーションキューCQは、循環バッファ(循環キュー)とする。
【0024】
サブミッションキューSQは、プロセッサ2からコントローラ7へコマンド情報14を通知するために使用される。
【0025】
サブミッションキューSQは、複数の管理単位の領域を備えており、複数のコマンド情報14を格納可能である。ここで、管理単位とは、例えば、1回のリード動作でリードされるデータの単位としてもよい。1つのコマンド情報14は、プロセッサ2またはコントローラ7で効率的に処理可能なサイズとしてもよい。
【0026】
サブミッションキューSQへのコマンド情報14のライトおよびサブミッションキューSQからのコマンド情報14のリードは、先入れ先出し方式で実行される。
【0027】
実施形態1-Aにおいて、サブミッションキューSQに対するライトポインタ(以下、SQテールという)SQTは、キャッシュメモリ3で管理される。SQテールSQTは、例えばプロセッサ2によって更新される。SQテールSQTは、プロセッサ2によって発行されたコマンドに関するコマンド情報14を次にライトすべきサブミッションキューSQの位置を示すポインタである。なお、SQテールSQTは、例えば、プロセッサ2の内部メモリ11、メインメモリ4、または、コントローラ7の内部メモリ27などのような、キャッシュメモリ3ではない他のメモリで管理されてもよい。
【0028】
サブミッションキューSQに対するリードポインタ(以下、SQヘッドという)SQHは、コントローラ7の内部メモリ27で管理される。SQヘッドSQHは、例えばコントローラ7によって更新される。SQヘッドSQHは、サブミッションキューSQから次にリードすべきコマンド情報14の位置を示すポインタである。なお、SQヘッドSQHは、例えば、プロセッサ2の内部メモリ11、キャッシュメモリ3、または、メインメモリ4などのような、コントローラ7の内部メモリ27ではない他のメモリで管理されてもよい。
【0029】
プロセッサ2によってサブミッションキューSQにライトされるコマンド情報14は、例えば、コマンドID16、オペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20、更新情報21を含む。コマンド情報14は、換言すれば、リクエストである。
【0030】
コマンドID16は、プロセッサ2によって発行されたコマンドに個別に付与される識別情報である。コマンド情報14にコマンドID16が含まれることにより、コマンド情報14に関する制御の実行順序が乱れた場合であっても、コマンドと制御の結果とを関連付けることができる。
【0031】
オペレーションコード17は、実行すべきコマンドの種類を示す。
【0032】
データ長18は、コマンドに関するデータのサイズである。データ長18は、例えば、コマンドがリードコマンドの場合、リードデータのサイズであり、例えば、コマンドがライトコマンドの場合、ライトデータのサイズである。なお、コマンドがデータを扱わない場合、このデータ長18はコマンド情報14に含まれなくてもよい。
【0033】
ホストアドレス19は、コマンドに関するデータのホストデバイス9側の格納位置を指定する。例えば、コマンドがライトコマンドの場合、ホストアドレス19は、ライトデータを格納しているホストデバイス9側の位置を指定する。例えば、コマンドがリードコマンドの場合、ホストアドレス19は、リードデータをライトすべきホストデバイス9側の位置を指定する。
【0034】
メモリアドレス20は、コマンドに関するデータのメモリシステム10側の格納位置を指定する。例えば、コマンドがライトコマンドの場合、メモリアドレス20は、ライトデータのライト先となるメモリシステム10側の位置を指定する。例えば、コマンドがリードコマンドの場合、メモリアドレス20は、リードデータを格納しているメモリシステム10側の位置を指定する。
【0035】
更新情報21は、サブミッションキューSQに格納されているコマンド情報14が更新されたか否かを示す情報である。具体的には、更新情報21は、サブミッションキューSQに格納されているコマンド情報14が未処理か否かを判断するために用いられる情報である。
【0036】
コンプリーションキューCQは、コントローラ7からプロセッサ2へコマンド完了を通知するために使用される。コンプリーションキューCQは、複数の管理単位の領域を備えており、複数のコンプリーション情報15を格納可能である。1つのコンプリーション情報15は、プロセッサ2またはコントローラ7で効率的に処理可能なサイズとしてもよい。
【0037】
コンプリーション情報15は、例えば、コマンドID16とステータス情報22とを含む。
【0038】
コマンドID16は、コンプリーション情報15がどのコマンドに関する完了情報かを指定する。
【0039】
ステータス情報22は、コマンドID16の指定するコマンドの状態を表す。例えば、コマンドID16で指定されるコマンドが正常に完了した場合、ステータス情報22は、正常完了を表す。例えば、コマンドID16で指定されるコマンドの実行にエラーが発生した場合、ステータス情報22は、エラー発生を表す。
【0040】
コンプリーションキューCQへのコンプリーション情報15のライトおよびコンプリーションキューCQからのコンプリーション情報15のリードは、先入れ先出し方式で実行される。
【0041】
実施形態1-Aにおいて、コンプリーションキューCQに対するライトポインタ(以下、CQテールという)CQTは、コントローラ7の内部メモリ27で管理される。CQテールCQTは、例えばコントローラ7によって更新される。CQテールCQTは、コントローラ7によって生成されたコンプリーション情報15を次にライトすべきコンプリーションキューCQの位置を示すポインタである。なお、CQテールCQTは、例えば、プロセッサ2の内部メモリ11、キャッシュメモリ3、または、メインメモリ4などのような、コントローラ7の内部メモリ27ではない他のメモリで管理されてもよい。
【0042】
コンプリーションキューCQに対するリードポインタ(以下、CQヘッドという)CQHは、キャッシュメモリ3で管理される。CQヘッドCQHは、例えばプロセッサ2によって更新される。CQヘッドCQHは、コンプリーションキューから次にリードすべきコンプリーション情報15の位置を示すポインタである。なお、CQヘッドCQHは、例えば、プロセッサ2の内部メモリ11、メインメモリ4、または、コントローラ7の内部メモリ27などのような、キャッシュメモリ3ではない他のメモリで管理されてもよい。
【0043】
プロセッサ2は、コマンドを発行すると、SQテールSQTによって指定されるサブミッションキューSQの位置にコマンド情報14をライトし、SQテールSQTの値を更新(例えばインクリメント)する。
【0044】
プロセッサ2は、CQヘッドCQHによって指定されるコンプリーションキューCQの位置からコンプリーション情報15をリードすると、CQヘッドCQHの値を更新(例えばインクリメント)する。
【0045】
プロセッサ2は、リードしたコンプリーション情報15内のコマンドID16からどのコマンドが完了したかを判断するとともに、ステータス情報22の示す状態を判断する。
【0046】
コントローラ7は、プロセッサ2から通知されたコマンド情報14にしたがって不揮発性メモリ8を制御する。例えば、コントローラ7は、ライトコマンドに対応するコマンド情報14にそってライトデータを不揮発性メモリ8にライトするための制御を実行する。例えば、コントローラ7は、リードコマンドに対応するコマンド情報14にそって不揮発性メモリ8からリードデータをリードし、リードデータをキャッシュメモリ3またはメインメモリ4にライトする。
【0047】
より具体的には、コントローラ7は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報14をリード(フェッチ)し、コマンド情報14に基づいてコマンドを実行する。そして、コントローラ7は、コマンドの実行後に、CQテールによって指定されるコンプリーションキューCQの位置に、コンプリーション情報15をライトする。
【0048】
実施形態1-Aにおいて、コントローラ7は、複数の不揮発性メモリ8を例えば並列に制御可能であるが、コントローラ7は1つの不揮発性メモリ8を制御するとしてもよい。
【0049】
コントローラ7は、検出部23、コマンド実行部24、コンプリーション生成部25、メモリ・インタフェース・コントローラ26、コントローラ7の内部メモリ27を備える。
【0050】
コントローラ7の内部メモリ27は、プロセッサ2から通知された更新頻度情報12、SQヘッドSQH、サブミッションキューSQからリードされたコマンド情報14、例えばリードデータまたはライトデータなどのデータ28、コンプリーション情報15、CQテールCQTを格納する。コントローラ7の内部メモリ27としては、例えば、レジスタ、キャッシュメモリ、バッファメモリ、または、メインメモリなどが用いられる。コントローラ7の内部メモリ27の一部または全部は、コントローラ7と別構成としてもよい。なお、以下の各実施形態でも同様に、コントローラの内部メモリとして、レジスタ、キャッシュメモリ、バッファメモリ、または、メインメモリが用いられてもよい。また、以下の各実施形態でも同様に、コントローラの内部メモリの一部または全部は、コントローラと別構成としてもよい。
【0051】
検出部23は、DMAC(Direct Memory Access Controller)29を含むポーリングコントローラ30を含む。
【0052】
DMAC29は、プロセッサ2の内部メモリ11に格納されている更新頻度情報12をコントローラ7の内部メモリ27へ転送する。これにより、コントローラ7は、プロセッサ2から更新頻度情報12を受信したことになる。
【0053】
なお、以下の各実施形態においては、DMACを用いたデータ転送方式に代えて、一方の要素が他方の要素へ情報またはデータを送信し、他方の要素が一方の要素からの情報またはデータを受信するデータ転送方式を用いてもよい。具体的には、各実施形態においては、DMACによる転送に代えて、MMIO(Memory Mapped Input/Output)が用いられてもよい。
【0054】
DMAC29は、更新頻度情報12の示す更新頻度に基づいて、例えば周期的にポーリングを実行し、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコントローラ7の内部メモリ27へコマンド情報14を転送する。そして、ポーリングコントローラ30は、SQヘッドSQHの値を更新(例えばインクリメント)する。なお、以下の実施形態1-Cで説明するように、ポーリングコントローラ30は、1回のポーリングに対して、SQヘッドSQHによって指定されるサブミッションキューSQの位置を基準として用いて、複数のコマンド情報14をリードしてもよい。
【0055】
コマンド実行部24は、コマンド情報14に含まれている更新情報21が更新されていることを示す場合に、コマンド情報14に基づいて不揮発性メモリ8に対する制御を実行する。例えば、コマンド実行部24は、リードコマンドを実行した場合に、不揮発性メモリ8からリードされたデータ28をコントローラ7の内部メモリ27にライトし、コントローラ7の内部メモリ27のデータ28をキャッシュメモリ3へライトする。例えば、コマンド実行部24は、ライトコマンドを実行した場合に、キャッシュメモリ3に格納されているデータ28をコントローラ7の内部メモリ27にライトし、コントローラ7の内部メモリ27のデータ28を不揮発性メモリ8へライトする。
【0056】
コマンド実行部24は、コマンド情報14に含まれている更新情報21が未更新であることを示す場合に、コマンド情報14を破棄する。
【0057】
コンプリーション生成部25は、DMAC31を備える。
コンプリーション生成部25は、コマンド情報14に基づいて実行された制御のコンプリーション情報15を生成し、コンプリーション情報15をコントローラ7の内部メモリ27にライトする。
【0058】
DMAC31は、コントローラ7の内部メモリ27のコンプリーション情報15をCQテールCQTによって指定されるコンプリーションキューCQの位置へ転送する。なお、上記のように、DMAC31を用いた転送に代えて、MMIOを用いてもよい。そして、コンプリーション生成部25は、CQテールCQTの値を更新(例えばインクリメント)する。
【0059】
メモリ・インタフェース・コントローラ26は、例えば、不揮発性メモリ8へのデータ28のライト、不揮発性メモリ8からのデータ28のリード、不揮発性メモリ8に対する消去を制御する。
【0060】
不揮発性メモリ8は、NAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)としてもよい。個々の不揮発性メモリ8は独立して動作可能である。このため、不揮発性メモリ8は、並列動作可能な単位として機能する。
【0061】
不揮発性メモリ8は、例えばNOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phasechange Random Access Memory:相変化メモリ)、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)など他の不揮発性半導体メモリでもよい。例えば、不揮発性メモリ8は、磁気メモリ、3次元構造の半導体メモリなどでもよい。
【0062】
不揮発性メモリ8に対するデータのリードおよびライトは、ページと呼ばれる単位で実行され得る。不揮発性メモリ8に対するデータのイレーズは、ブロックと呼ばれる単位で実行され得る。ブロックの1単位は、複数のページを含む。不揮発性メモリ8に対するデータのリード及びライトが複数のページ単位で、イレーズが複数のブロック単位で、それぞれ実行されてもよい。
【0063】
上記のようなコントローラ7の構成において、DMAC29とDMAC31とは、統合されてもよい。
【0064】
以下で、上記のような構成を持つ実施形態1-Aに係るストレージシステム1Aによって実行される処理を説明する。
【0065】
図3は、実施形態1-Aに係るストレージシステム1Aによって実行される処理の一例を示すフローチャートである。
【0066】
プロセッサ2は、サブミッションキューSQの更新頻度情報12を、事前に(例えばストレージシステム1Aを起動してからポーリングコントローラ30がポーリングを開始するまでの間に)、ポーリングコントローラ30へ通知する(S301)。
【0067】
更新頻度情報12の通知後、プロセッサ2は、更新情報21を含むコマンド情報14を、SQテールSQTによって指定されるサブミッションキューSQの位置にライトし(S302)、SQテールの値を更新する(S303)。
【0068】
コントローラ7の検出部23は、プロセッサ2から通知された更新頻度情報12に基づいて、例えば周期的にSQヘッドSQHによって指定されるサブミッションキューSQからコマンド情報14をリードし、コントローラ7の内部メモリ27にライトする(S304)。
【0069】
コマンド実行部24は、コマンド情報14に含まれている更新情報21が更新されていることを示すか否か判断する(S305)。
【0070】
コマンド実行部24は、更新情報21が未更新であることを示す場合に、コマンド情報14を破棄し(S306)、処理は終了する。
【0071】
コマンド実行部24は、更新情報21が更新されていることを示す場合に、コマンド情報14に基づいてコマンドを実行する(S307)。
【0072】
コンプリーション生成部25は、コマンド実行部24によって実行された制御のコンプリーション情報15を生成し、コンプリーション情報15をコントローラ7の内部メモリ27にライトする(S308)。
【0073】
コンプリーション生成部25のDMAC31は、コントローラ7の内部メモリ27からCQテールCQTによって指定されるコンプリーションキューCQの位置へコンプリーション情報15を転送し(S309)、コンプリーション生成部25は、CQテールCQTの値を更新する(S310)。
【0074】
プロセッサ2は、CQヘッドCQHによって指定されるコンプリーションキューCQの位置からコンプリーション情報15をリードし(S311)、CQヘッドCQHの値を更新する(S312)。
【0075】
以下で、第1の比較例のストレージシステムと比較しながら、実施形態1-Aに係るストレージシステム1Aの特徴を説明する。
【0076】
図4は、第1の比較例のストレージシステムC1の構成の一例を示すブロック図である。
また、図5は、第1の比較例のキャッシュメモリ35とメモリシステム33の内部メモリ37との一例を示す図である。
【0077】
第1の比較例のストレージシステムC1は、ホストデバイス32と、システムバス5と、ペリフェラルバス6と、メモリシステム33とを備える。ホストデバイス32は、プロセッサ34と、キャッシュメモリ35と、メインメモリ4とを備える。メモリシステム33は、内部メモリ37を備える。
【0078】
第1の比較例において、プロセッサ34とメモリシステム33とは、NVMe規格にしたがって動作する。
【0079】
キャッシュメモリ35は、サブミッションキューSQとコンプリーションキューCQとを含む。
【0080】
第1の比較例において、SQテールSQTは、キャッシュメモリ35で管理される。SQテールSQTは、例えばプロセッサ34によって更新される。SQヘッドSQHは、メモリシステム33で管理される。SQヘッドSQHは、例えばメモリシステム33によって更新される。
【0081】
プロセッサ34によってサブミッションキューSQに格納されるコマンド情報38は、例えば、コマンドID16、オペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20を含む。
【0082】
コンプリーションキューCQは、コンプリーション情報15を格納する。
【0083】
第1の比較例において、CQテールCQTは、メモリシステム33で管理される。CQテールCQTは、例えばメモリシステム33によって更新される。CQヘッドCQHは、キャッシュメモリ35で管理される。CQヘッドCQHは、例えばプロセッサ34によって更新される。
【0084】
第1の比較例において、プロセッサ34からメモリシステム33へコマンドを通知する場合、プロセッサ34は、SQテールSQTによって指定されるサブミッションキューSQの位置にコマンド情報38をライトし、SQテールSQTをメモリシステムに通知し(以下、mmio(Memory Mapped IO)_write”SQ Tail”という)、SQテールSQTの値を更新する。
【0085】
メモリシステム33は、SQテールSQTの通知を受けると、SQヘッドSQHからSQテールSQTまでの範囲のコマンド情報38をリード(フェッチ)する。
【0086】
また、第1の比較例において、メモリシステム33からプロセッサ34へ完了を通知する場合、メモリシステム33は、CQテールCQTによって指定されるコンプリーションキューCQの位置にコンプリーション情報15をライトし、CQテールCQTの値を更新する。
【0087】
プロセッサ34は、CQヘッドCQHによって指定されるコンプリーションキューCQの位置のコンプリーション情報15をリードし、実行されたコマンドとその状態を判断し、CQヘッドCQHをメモリシステム33に通知し(以下、mmio_write”CQ Head”という)、CQヘッドCQHの値を更新する。
【0088】
上記のmmio_write”SQ Tail”およびmmio_write”CQ Head”を含む処理mmio_writeは、ドアベル制御と呼ばれてもよい。
【0089】
第1の比較例において、サブミッションキューSQにコマンド情報38をライトし、SQテールSQTをメモリシステム33に通知するプロセッサ34の処理は負荷が大きい。また、コンプリーションキューCQからコンプリーション情報15をリードし、CQヘッドCQHをメモリシステム33に通知するプロセッサ34の処理も負荷が大きい。
【0090】
これに対して、実施形態1-Aに係るストレージシステム1Aにおいて、プロセッサ2は、更新頻度情報12を事前にコントローラ7へ通知し、コントローラ7へSQテールSQTを通知しない。また、プロセッサ2は、更新情報21を含むコマンド情報14をサブミッションキューSQへライトする。コントローラ7は、更新頻度情報12の示す更新頻度にしたがって、更新情報21を含むコマンド情報14をサブミッションキューSQからリードする。コントローラ7は、リードしたコマンド情報14に含まれる更新情報21が更新されたことを示す場合に、コマンド情報14に基づく制御を実行し、更新情報21が未更新を示す場合に、コマンド情報14を破棄する。
【0091】
このような実施形態1-Aに係るストレージシステム1Aにおいては、第1の比較例におけるmmio_write”SQ Tail”を排除することができ、プロセッサ2からコントローラ7へサブミッションキューSQにコマンド情報14が格納されたことを効率よく通知することができる。
【0092】
より具体的に説明すると、第1の比較例のストレージシステムC1では、プロセッサ34からメモリシステム33へSQテールSQTを通知することと、プロセッサ34からメモリシステム33へコマンド情報38を通知することとが必要である。これに対して、実施形態1-Aに係るストレージシステム1Aでは、プロセッサ2からメモリシステム10へSQテールSQTを通知する必要はなく、プロセッサ2からメモリシステム10へコマンド情報14を通知すればよい。
【0093】
このため、実施形態1-Aに係るストレージシステム1Aにおいては、プロセッサ2の処理負荷を軽減させることができ、システムバス5およびペリフェラルバス6のトランザクション数を削減することができる。したがって、ストレージシステム1Aにおいては、ホストデバイス9とメモリシステム10との間の通信インタフェースに基づく制御の処理時間を短縮することができ、システムバス5およびペリフェラルバス6の使用率を低下させることができ、ストレージシステム1AのIOPS(Input/Output Per Second)を高くすることができる。
【0094】
実施形態1-Aに係るストレージシステム1Aは、システムバス5およびペリフェラルバス6が広帯域の伝送バスである場合に有効である。実施形態1-Aのストレージシステム1Aは、例えば、DRAMまたはSRAM(Static Random Access Memory)並みのIOPSを安定して達成することができ、DRAMまたはSRAMに代えて使用可能である。
【0095】
第1の比較例のストレージシステムC1では、プロセッサ34の処理負荷が大きく、例えば1つのプロセッサ34あたり10メガIOPS程度の性能となる。第1の比較例のストレージシステムC1においては、mmio_writeの完了まで100ナノ秒程度待つ場合がある。
【0096】
これに対して、実施形態1-Aに係るストレージシステム1Aにおいては、mmio_write”SQ Tail”を排除することにより、例えば1つのプロセッサ34あたり50メガIOPS以上の性能を実現することができる。
【0097】
以下で、第2の比較例のストレージシステムと比較しながら、実施形態1-Aに係るストレージシステム1Aの特徴を説明する。
【0098】
図6は、第2の比較例のストレージシステムC2の構成の一例を示すブロック図である。
【0099】
第2の比較例のストレージシステムC2は、ホストデバイス39と、システムバス5と、ペリフェラルバス6と、メモリシステム40とを備える。ホストデバイス39は、プロセッサ41と、キャッシュメモリ42と、メインメモリ4とを備える。
【0100】
第2の比較例において、メモリシステム40は、プロセッサ41に対してポーリングを行い、コマンド情報38がサブミッションキューSQに格納されたことを検出する。しかしながら、メモリシステム40は、実施形態1-Aのような、プロセッサ41がメモリシステム40へ更新頻度情報12を通知する機能はない。
【0101】
また、第2の比較例では、リード完了時に、メモリシステム40は、コンプリーション情報15をキャッシュメモリ42へライトしない。プロセッサ41は、リード完了前に、キャッシュメモリ42内のデータバッファメモリ43を初期化し、メモリシステム40は、リードデータ44をデータバッファメモリ43にライトする。プロセッサ41は、データバッファメモリ43のデータの更新を検出した場合に、リードの完了を検出する。この第2の比較例では、リード時に限り、プロセッサ41は、コンプリーションキューCQおよびコンプリーション情報15を利用することなく、完了を検出する。
【0102】
これに対して、実施形態1-Aに係るストレージシステム1Aにおいては、プロセッサ2が更新頻度情報12をコントローラ7へ通知する。このため、コントローラ7は、第2の比較例のメモリシステム40よりも、ポーリングのタイミングまたは間隔を適切化することができ、サブミッションキューSQからコマンド情報14を効率的にリードすることができる。
【0103】
さらに、実施形態1-Aに係るストレージシステム1Aにおいては、コマンド情報14に更新情報21が含まれているが、第2の比較例のコマンド情報38には更新情報21が含まれていない。このため、コントローラ7は、更新頻度情報12に基づいたポーリングのタイミングや間隔を、サブミッションキューSQから取得したコマンド情報14に含まれる更新情報21の成否回数に基づいて適切化することができ、第2の比較例のメモリシステム40よりも、効率的に、サブミッションキューSQにおけるコマンド情報14の更新を検出することができる。
【0104】
(実施形態1-B)
実施形態1-Bは、上記の実施形態1-Aの変形例である。実施形態1-Bでは、更新頻度情報12の具体的な例を説明する。
【0105】
図7は、更新頻度情報12のデータ構成の一例を示す図である。
【0106】
更新頻度情報12は、サブミッションキューSQを指定するキューID45と、更新予定の情報数46と、単位時間あたりの情報更新回数47とを含む。
【0107】
プロセッサ2が複数のメモリシステム10と通信可能に接続されている場合、プロセッサ2は、それぞれのメモリシステム10に対応するサブミッションキューSQを管理する。また、プロセッサ2が1つのメモリシステム10と通信可能に接続されている場合であっても、複数のサブミッションキューSQを用いる場合がある。
【0108】
キューID45は、複数のサブミッションキューSQのうちの特定のサブミッションキューSQを一意に指定する。
【0109】
更新予定の情報数46は、プロセッサ2がサブミッションキューSQに対して更新する予定のコマンド情報14の数である。ポーリングコントローラ30は、サブミッションキューSQの更新予定の情報数46から、ポーリングの終了条件を決定する。例えば、ポーリングコントローラ30は、更新予定の情報数46に相当する数のコマンド情報14をキューID45の示すサブミッションキューSQからリードした場合に、ポーリングを停止するか、または、ポーリング間隔を長くする。
【0110】
単位時間あたりの情報更新回数47は、単位時間あたりに、プロセッサ2がサブミッションキューSQに対してコマンド情報14を更新する回数である。ポーリングコントローラ30は、単位時間あたりの情報更新回数47からポーリングの頻度または周期を決定し、最適化を図る。例えば、ポーリングコントローラ30は、単位時間あたりの情報更新回数47に基づいて、サブミッションキューSQからコマンド情報14をリードするタイミングと、1回のタイミングでリードするコマンド情報の数を最適化(決定)してもよい。
【0111】
例えば、更新予定の情報数46と単位時間あたりの情報更新回数47とがゼロの場合には、サブミッションキューSQの更新がないことを意味してもよい。
【0112】
以上説明した実施形態1-Bにおいては、プロセッサ2がコントローラ7へ更新頻度情報12を通知し、この更新頻度情報12が更新予定の情報数46と単位時間あたりの情報更新回数47とを含む。これにより、コントローラ7は、サブミッションキューSQから、適切な頻度で、および、適切な個数でコマンド情報14をリードすることができる。
【0113】
なお、更新頻度情報12は、更新予定の情報数46と単位時間あたりの情報更新回数47とのうちの一方を含むとしてもよい。
【0114】
(実施形態1-C)
実施形態1-Cは、上記の実施形態1-Bの変形例である。実施形態1-Cでは、ポーリングコントローラ30のDMAC29がサブミッションキューSQからコントローラ7の内部メモリ27へ複数のコマンド情報14をまとめてDMA転送する場合の具体的な例を説明する。
【0115】
図8は、サブミッションキューSQからコントローラ7の内部メモリ27へまとめてDMA転送されるコマンド情報14の一例を示す図である。
【0116】
ポーリングコントローラ30のDMAC29は、システムバス5とペリフェラルバス6とがビジー状態となる機会を削減するために、1回の転送(リード)要求に対して、サブミッションキューSQのSQヘッドSQHから所定数のコマンド情報14をまとめたセットCISを、コントローラ7の内部メモリ27へ転送する。ポーリングコントローラ30は、コントローラ7の内部メモリ27に格納されている複数のコマンド情報14のうち更新情報21が更新されていることを示すコマンド情報14を維持し、更新情報21が未更新を示すコマンド情報14を破棄する。
【0117】
図8の例では、ポーリングコントローラ30は、更新情報「High」(1)を含むコマンド情報14を維持し、更新情報「Low」(0)を含むコマンド情報14を破棄する。
【0118】
ポーリングコントローラ30は、更新頻度情報12における更新予定の情報数46と単位時間あたりの情報更新回数47とに基づいて、一度にサブミッションキューSQからリードするコマンド情報14の数を最適化する。
【0119】
最適化の一例として、ポーリングコントローラ30は、更新予定の情報数46または単位時間あたりの情報更新回数47が閾値より小さいうちは一度にリードするコマンド情報14の数を所定数より少なくし、更新予定の情報数46または単位時間あたりの情報更新数47が閾値以上になると一度にリードするコマンド情報14の数を所定数以上としてもよい。
【0120】
以上説明した実施形態1-Cにおいては、ポーリングコントローラ30が、サブミッションキューSQから一度に複数のコマンド情報14をリードするため、システムバス5とペリフェラルバス6を使用する通信の回数を削減することができ、バスのトランザクション数を減少させることができる。
【0121】
実施形態1-Cにおいて、コントローラ7は、更新頻度情報12にしたがって、ホストデバイス9から、適切な数のコマンド情報14を、適切な頻度および回数で取得することができ、コマンド情報14を効率よく取得することができる。コントローラ7は、コマンド情報14をまとめて取得することにより、コマンド情報14の取得にかかる総時間を短くすることができる。
【0122】
(実施形態1-D)
実施形態1-Dは、上記の実施形態1-Aないし1-Cに係るコマンド情報14に含まれている更新情報21を具体的に説明する。
【0123】
図9は、サブミッションキューSQに格納されているコマンド情報14に含まれている更新情報21の状態の一例を示す図である。
【0124】
この図9では、コマンド情報14が更新されていることを示す更新情報21を「High」(1)とし、未更新であることを示す更新情報21を「Low」(0)としている。
【0125】
プロセッサ2は、SQテールSQTによって指定されるサブミッションキューSQの位置にコマンド情報14をライトする場合に、当該コマンド情報14に含まれている更新情報21を「High」とする。
【0126】
コントローラ7は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報14をリードする。すると、コントローラ7は、このSQヘッドSQHで指定される位置のコマンド情報14の更新情報21を「High」から「Low」へ変換するクリア操作を行う。
【0127】
このように、コマンド情報14が更新情報21を含むことで、プロセッサ2がコントローラ7へ更新を通知するmmio_writeを排除した場合であっても、コントローラ7は、サブミッションキューSQ内のコマンド情報14が更新済みであるか否かを判断することができる。このため、実施形態1-Dでは、プロセッサ2の処理負荷を軽減することができ、IOPSを高くすることができ、プロセッサ2とメモリシステム10との間の通信の効率を向上させることができる。
【0128】
(実施形態1-E)
実施形態1-Eは、上記の実施形態1-Dの変形例である。実施形態1-Eでは、クリア操作を不要とする更新情報21の管理を説明する。
【0129】
図10は、奇数周回(1,3,5,…)時のサブミッションキューSQにおける更新情報21の例を示す図である。
【0130】
実施形態1-Eに係るサブミッションキューSQは、循環バッファである。実施形態1-Eにおいては、サブミッションキューSQの周回ごとに、更新情報21を反転してライトするフェーズビット方式が適用される。
【0131】
プロセッサ2は、サブミッションキューSQ内の更新情報21のフィールドを「Low」で初期化する。
【0132】
プロセッサ2は、奇数周回時において、SQテールSQTによって指定される位置にコマンド情報14を構成する内容をセットするとともに、SQテールSQTによって指定される位置の更新情報21のフィールドを「Low」から「High」へ反転させる。
【0133】
コントローラ7は、奇数周回時にサブミッションキューSQに格納された更新情報21について、「High」のときに更新ありと判断し、「Low」のときに未更新と判断する。
【0134】
図11は、偶数周回(2,4,6,…)時のサブミッションキューSQにおける更新情報21の例を示す図である。
【0135】
プロセッサ2は、偶数周回時において、SQテールSQTによって指定される位置にコマンド情報14を構成する内容をセットするとともに、SQテールSQTによって指定される位置の更新情報21のフィールドを「High」から「Low」へ反転させる。
【0136】
コントローラ7は、偶数周回時にサブミッションキューSQに格納された更新情報21について、「Low」のときに更新ありと判断し、「High」のときに未更新と判断する。
【0137】
以上説明した実施形態1-Eにおいて、更新情報21で更新されていることを示す状態は、サブミッションキューSQの周回にしたがって反転する。コントローラ7は、サブミッションキューSQの周回にしたがって更新情報21が更新されているか否かを判断する基準を反転する。
【0138】
実施形態1-Eにおいて、コントローラ7は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報14をリードした後に、SQヘッドSQHによって指定される位置の更新情報21に対してクリア操作を行わなくてもよい。
【0139】
したがって、実施形態1-Eにおいては、コントローラ7がクリア操作を行う上記の実施形態1-Dの場合と比べて、コントローラ7からの更新情報21のクリア操作が不要となり、ペリフェラルバス6上でコマンド情報14のリード操作が阻害されず、更新頻度情報12に基づいた適切なタイミングと間隔でコマンド情報14をリードできる。
【0140】
(実施形態2-A)
実施形態2-Aでは、コンプリーションキューCQに代えて、サブミッションキューSQに格納されているコマンド情報14、または、サブミッションキューSQの管理単位から決定されるエリアにコンプリーション情報(例えば、コンプリーションフラグ)を格納する。
【0141】
実施形態2-Aは、上記の実施形態1-Aないし1-Eと組み合わせて適用可能である。
【0142】
図12は、実施形態2-Aに係るストレージシステム1Bの構成の一例を示すブロック図である。
【0143】
ストレージシステム1Bは、ホストデバイス48、システムバス5、ペリフェラルバス6、メモリシステム49を備える。
【0144】
ホストデバイス48は、プロセッサ50、キャッシュメモリ51、メインメモリ4を備える。
【0145】
メモリシステム49は、コントローラ52と不揮発性メモリ8とを備える。
【0146】
キャッシュメモリ51は、サブミッションキューSQと、コンプリーション情報53を格納する複数のエリアE1~Enとを含む。
【0147】
実施形態2-Aにおいて、コンプリーション情報53は、上記の実施形態1-Aで説明したコンプリーション情報15よりデータサイズが小さくてもよく、例えば、1ビットとしてもよい。この場合、1つのコマンドが完了したか否かを、1ビットで表すことになる。
【0148】
エリアE1~Enのそれぞれの位置は、サブミッションキューSQに格納されているコマンド情報14、または、サブミッションキューSQの各管理単位から決定される。換言すれば、エリアE1~Enのそれぞれは、サブミッションキューSQ内のコマンド情報14、または、管理単位と一意に対応付けられている。
【0149】
プロセッサ50は、各エリアE1~Enを示す各アドレスを決定、取得、または、計算し、エリアE1~Enを準備または確保する。
【0150】
実施形態2-Aにおいて、各エリアE1~Enは最小1ビットの情報を格納可能であればよい。
【0151】
コントローラ52は、検出部23、コマンド実行部24、アドレス計算部54、コンプリーション生成部55、メモリ・インタフェース・コントローラ26、コントローラ52の内部メモリ56を備える。
【0152】
コントローラ52の内部メモリ56は、プロセッサ50から通知された更新頻度情報12、SQヘッドSQH、サブミッションキューSQからリードされたコマンド情報14、データ28、コンプリーションアドレス57、コマンド情報14に対応するコンプリーション情報53を格納する。コントローラ52の内部メモリ56は、例えばレジスタでもよい。
【0153】
アドレス計算部54は、コマンド情報14のコマンドの実行完了を示すコンプリーション情報53のライト先となるエリアE1を指定するコンプリーションアドレス57を計算し、コンプリーションアドレス57をコントローラ52の内部メモリ56へライトする。なお、エリアE1~Enへのコンプリーション情報53のライト順序は、このコンプリーション情報53に対応するコマンド情報14のリード順序と異なってもよい。
【0154】
コンプリーション生成部55は、DMAC31を備える。コンプリーション生成部55は、コマンドの実行後、コンプリーション情報53を生成し、コントローラ52の内部メモリ56にライトする。DMAC31は、コントローラ52の内部メモリ56からコンプリーションアドレス57によって指定されるエリアE1へ、コンプリーション情報53を転送する。
【0155】
プロセッサ50は、サブミッションキューSQ内のコマンド情報14、または、サブミッションキューSQの管理単位から決定されるエリアE1からコンプリーション情報53をリードすることで、コマンド情報14に対応するコマンドが完了したか否か判断する。
【0156】
以下で、上記のような構成を持つ実施形態2-Aに係るストレージシステム1Bによって実行される処理を説明する。
【0157】
図13は、実施形態2-Aに係るストレージシステム1Bの処理の一例を示すフローチャートである。
【0158】
プロセッサ50は、サブミッションキューSQに格納されているコマンド情報14、または、サブミッションキューSQの管理単位から決定されるエリアE1~Enのアドレスを計算し、キャッシュメモリ51のエリアE1~Enを確保する。エリアE1~Enは、コンプリーション情報53のライト先となる(S1301)。
【0159】
図13のS1302からS1308は、上記図3のS301からS307と同様であるため、説明を省略する。
【0160】
アドレス計算部54は、コンプリーション情報53のライト先となるエリアE1を示すコンプリーションアドレス57を計算し、コントローラ52の内部メモリ56にライトする(S1309)。
【0161】
コンプリーション生成部55は、コンプリーション情報53を生成し、コンプリーション情報53をコントローラ52の内部メモリ56にライトする(S1310)。
【0162】
コンプリーション生成部55のDMAC31は、コントローラ52の内部メモリ56からコンプリーションアドレス57によって指定されるエリアE1へ、コンプリーション情報15を転送する(S1311)。
【0163】
プロセッサ50は、サブミッションキューSQのコマンド情報14、または、サブミッションキューSQの管理単位からコンプリーションアドレス57を計算し(S1312)、コンプリーションアドレス57によって指定されるエリアE1に格納されているコンプリーション情報53をリードし、コマンドの完了を判断する(S1313)。
なお、S1312のアドレス計算は、上記のS1301でコンプリーションアドレス57が計算済みの場合には省略してもよい。
【0164】
以上説明した実施形態2-Aに係るストレージシステム1Bは、サブミッションキューSQのコマンド情報14、または、サブミッションキューSQの管理単位から一意に決まるエリアE1に、コンプリーション情報53をライトする。この実施形態2-Aにおいては、1つのコマンド情報14に対応する1つのコンプリーション情報53のデータサイズを例えば1ビットなどのように小さくすることができ、キャッシュメモリ51の使用量を削減することができる。
【0165】
実施形態2-Aにおいては、コンプリーションキューCQが使用されないため、CQヘッドCQHおよびCQテールCQTに対するプロセッサ50およびコントローラ52の処理負荷を軽減することができる。プロセッサ50は、コマンド情報14に対応するコンプリーション情報53をキャッシュメモリ51に対する1回のアクセスで取得することができ、コンプリーション制御を単純化することができる。実施形態2-Aに係るストレージシステム1Bは、DRAMまたはSRAM並みの高いIOPSを安定して達成することができる。
【0166】
以下で、上記の図6で説明した第2の比較例のストレージシステムC2と比較しながら、実施形態2-Aに係るストレージシステム1Bの特徴を説明する。
【0167】
第2の比較例のストレージシステムC2では、リードデータ44によりデータバッファメモリ43が更新されたことを検出すると、リードコマンドが完了したと判断する。このように、第2の比較例のストレージシステムC2は、リードコマンド実行時にのみ、コンプリーション制御を単純化している。
【0168】
また、第2の比較例のストレージシステムC2では、例えば、初期化の状態と同じ内容のリードデータ44がデータバッファメモリ43にライトされた場合など、リードデータ44の内容によってはデータバッファメモリ43の更新が適切に検出されず、リードコマンドの完了を適切に判断できない場合がある。
【0169】
これに対して、実施形態2-Aに係るストレージシステム1Bは、リードコマンド実行時のみではなく、様々な種類のコマンド実行時のコンプリーション制御を単純化することができる。また、実施形態2-Aに係るストレージデバイス1Bは、リードデータ44の内容に影響されることなく、コマンド完了を判断することができる。
【0170】
第2の比較例のストレージシステムC2では、リードデータ44自体を使用してリードコマンドの完了を判断するが、実施形態2-Aに係るストレージシステム1Bは、リードデータではなくコンプリーション情報53によりコマンド完了を判断するため、コンプリーション情報53の自由度を高くすることができる。
【0171】
以下で、第3の比較例のストレージシステムC3と比較しながら、実施形態2-Aに係るストレージシステム1Bの特徴を説明する。
【0172】
図14は、第3の比較例のストレージシステムC3の構成の一例を示すブロック図である。
【0173】
第3の比較例のストレージシステムC3において、プロセッサ34とメモリシステム33とは、NVMe規格にしたがって動作する。
【0174】
第3の比較例のプロセッサ34は、リードコマンドに対するコンプリーション制御において、キャッシュメモリ35をアクセスする。
【0175】
キャッシュメモリ35は、サブミッションキューSQと、コンプリーションキューCQとを備えている。
【0176】
コンプリーション情報15は、例えば16バイトとする。
【0177】
プロセッサ34は、リードコマンドに対するコンプリーション制御において、CQヘッドCQHによって指定されるコンプリーションキューCQの位置からコンプリーション情報15をリードする。
【0178】
プロセッサ34は、コンプリーション情報15のステータス情報22が更新されていることを示す場合に、コンプリーション情報15のコマンドID16と同じコマンドID16を含むコマンド情報38に基づいて、コマンドID16に対応するリードデータのホストアドレス19を取得し、ホストアドレス19によって指定される位置のリードデータをロードする。
【0179】
プロセッサ34は、CQヘッドCQHの値を更新し、CQヘッドCQHをメモリシステム33へ通知する(mmio_write”CQ Head”)。
【0180】
この第3の比較例に係るストレージシステムC3で50メガIOPSの性能を達成するためには、上記のようなコンプリーション制御を数ナノ秒以内に完了させることが望ましい。
【0181】
しかしながら、mmio_write”CQ Head”で100ナノ秒程度待ち状態が生じる場合があり、第3の比較例のコンプリーション制御を数ナノ秒以内に完了することは困難である。
【0182】
また、第3の比較例のストレージシステムC3では、1つのコマンド情報14に対応する1つのコンプリーション情報15が16バイト必要である。
【0183】
複数のメモリシステム33を並列化することでストレージシステムC3の性能向上を図ることができる。しかしながら、この場合、1つのプロセッサ34あたりの負荷が大きくなり、キャッシュメモリ35の使用量も大きくなる。
【0184】
これに対して、実施形態2-Aにおいては、mmio_write”CQ Head”を排除することにより、1つのプロセッサ50あたりの処理負荷を軽減することができる。
【0185】
また、実施形態2-Aに係るストレージシステム1Bのコンプリーション制御においては、コンプリーション情報53のデータサイズを削減し、キャッシュメモリの使用量を削減することができる。
【0186】
したがって、実施形態2-Aに係るストレージシステム1Bにおいては、DRAMまたはSRAM並みの高IOPSを安定して達成することができる。
【0187】
(実施形態2-B)
実施形態2-Bは、上記の実施形態2-Aの変形例である。実施形態2-Bでは、キャッシュメモリ51におけるコンプリーション情報53の第1の配置例を説明する。
【0188】
図15は、実施形態2-Bに係るキャッシュメモリ51におけるコマンド情報14とコンプリーション情報53との配置関係の例を示す図である。
【0189】
キャッシュメモリ51の1管理単位(ロード単位)のサイズは、例えば64バイトとする。このキャッシュメモリ51の1管理単位は、キャッシュラインと呼んでもよい。
【0190】
サブミッションキューSQのコマンド情報14と、当該コマンド情報14に対応するコンプリーション情報53とは、キャッシュメモリ51の同じ管理単位内に配置されている。
【0191】
実施形態2-Bでは、例えばハイイネーブル方式が適用される。
【0192】
具体的に説明すると、コンプリーション情報53は、「Low」のときに未完了を示し、「High」になると完了を示す。
【0193】
プロセッサ50は、キャッシュメモリ51の管理単位の領域へコマンド情報14をライトすると同時に、コンプリーション情報53に「Low」をライトしてクリアする。
【0194】
コントローラ52は、コマンドが完了すると、キャッシュメモリ51における管理単位内のコンプリーション情報53に「High」をライトする。この実施形態2-Bにおいて、コントローラ52は、キャッシュメモリ51のコマンド情報14と同じ管理単位へ当該コマンド情報14に対応するコンプリーション情報53をライトする。この場合、コントローラ52は、管理単位内のコマンド情報14が変更されないようにこのコマンド情報14の値を書き戻してもよく、または、別の値をライトしてもよい。
【0195】
プロセッサ50は、コマンド情報14と同じ管理単位の領域内に格納されているコンプリーション情報53が「High」であるか「Low」であるかにより、コマンドの完了または未完了を判断する。
【0196】
以上説明した実施形態2-Bにおいては、キャッシュメモリ51の同じ管理単位の領域内に、コマンド情報14と当該コマンド情報14に対応するコンプリーション情報53がライトされるため、コンプリーション情報53のために新たな管理単位の領域を消費する必要がない。
【0197】
したがって、実施形態2-Bにおいては、キャッシュメモリ51の使用量を削減することができ、コンプリーション情報51のアクセスを効率的に行うことができる。
【0198】
また、実施形態2-Bにおいては、上記の実施形態2-Aで説明したアドレス計算部54をコントローラ52から削除することができ、コントローラ52の構成および動作を簡略化することができる。
【0199】
(実施形態2-C)
実施形態2-Cは、上記の実施形態2-Aの変形例である。
【0200】
図16は、実施形態2-Cに係るキャッシュメモリ51におけるコンプリーション情報53の配置例を示す図である。
【0201】
キャッシュメモリ51の1つの管理単位に、複数のコンプリーション情報53を配置してもよい。この場合、プロセッサ50は、キャッシュメモリ51から1度に複数のコンプリーション情報53をリード可能である。また、コントローラ52は、キャッシュメモリ51に対して1度に複数のコンプリーション情報53をライト可能である。
【0202】
実施形態2-Cにおいて、コントローラ52は、コンプリーション情報53が完了を示すか、または、未完了を示すかを切り替える場合に、フェーズビット方式を採用することが好ましい。
【0203】
実施形態2-Cにおいて、キャッシュメモリ51の1つの管理単位の先頭ビットをCF0、末尾ビット(Most Significant Bit)をCFxとする。コントローラ52は、キャッシュメモリ51の管理単位内のコンプリーション情報53をCF0からCFxへ向けて順次更新し、再び先頭ビットCF0から末尾ビットCFxへ向けて更新を繰り返す場合にはコンプリーション情報53を反転させる。このように、CF0からCFxまでの周回ごとに、コンプリーション情報53を反転させ、奇数周回と偶数周回とで完了または未完了の判断基準も同期して反転させる。コントローラ52内でのコマンドの完了順序と、コンプリーション情報53の更新順序とが異なっていてもよい。
【0204】
プロセッサ50は、キャッシュメモリ51の管理単位内のコンプリーション情報53と周回数に基づいて、コマンドの完了または未完了を判断する。
【0205】
実施形態2-Cにおける別の方法として、コントローラ52は、キャッシュメモリ51の管理単位内のコンプリーション情報53をコマンドが完了した順に反転させる。
【0206】
プロセッサ50は、キャッシュメモリ51の管理単位内のコンプリーション情報53のビット毎の更新回数に基づいて、コマンドの完了または未完了を判断する。
【0207】
以上説明した実施形態2-Cにおいては、コンプリーション情報53をまとめてライトおよびリードすることができるため、キャッシュメモリ51へのアクセス回数を削減することができ、プロセッサ50の処理負荷を軽減することができる。
【0208】
(実施形態2-D)
実施形態2-Dは、上記の実施形態2-Aの変形例である。実施形態2-Dでは、サブミッションキューSQの管理単位内に、コンプリーションアドレス57を格納するためのフィールドを設けることで、コマンド情報14とコンプリーション情報53とを関連付ける。
【0209】
図17は、実施形態2-Dに係るストレージシステム1Cの構成の一例を示すブロック図である。
【0210】
ストレージシステム1Cは、ホストデバイス59、システムバス5、ペリフェラルバス6、メモリシステム60を備える。
【0211】
ホストデバイス59は、プロセッサ61、キャッシュメモリ62、メインメモリ4を備える。
【0212】
メモリシステム60は、コントローラ63と不揮発性メモリ8とを備える。
【0213】
キャッシュメモリ62は、サブミッションキューSQとエリアE1~Enとを含む。
【0214】
サブミッションキューSQに格納されるコマンド情報64は、当該コマンド情報64に対応するコンプリーション情報53の格納先となる位置を指定するコンプリーションアドレス57を格納するフィールドを含む。より具体的に説明すると、サブミッションキューSQに格納されるコマンド情報64は、例えばコマンドID16、オペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20などの情報と、コンプリーションアドレス57とを含む。
【0215】
コントローラ63は、検出部65、コマンド実行部24、コンプリーション生成部66、メモリ・インタフェース・コントローラ26、コントローラ63の内部メモリ67を備える。
【0216】
コントローラ63の内部メモリ67は、更新頻度情報12、SQヘッドSQH、サブミッションキューSQからリードされたコマンド情報64、データ28、コンプリーション情報53を格納する。
【0217】
検出部65は、ポーリングコントローラ30を備える。検出部65は、SQヘッドSQHによって指定されるサブミッションキューSQからコンプリーションアドレス57を含むコマンド情報64をリードし、コマンド情報64をコントローラ63の内部メモリ67にライトする。
【0218】
コンプリーション生成部66は、コマンド実行後、コンプリーション情報53を生成し、コンプリーション情報53をコントローラ63の内部メモリ67にライトする。コンプリーション生成部66のDMAC31は、コマンド情報64に含まれているコンプリーションアドレス57によって指定されるキャッシュメモリ62のエリアE1に、コンプリーション情報53を転送する。
【0219】
プロセッサ61は、サブミッションキューSQ内のコマンド情報64に含まれているコンプリーションアドレス57の示すエリアE1からコンプリーション情報53をリードすることで、コマンド情報64に対応するコマンドが完了したか否か判断する。
【0220】
以上説明した実施形態2-Dにおいては、プロセッサ61が自由にコンプリーションアドレスを指定することができ、コンプリーション情報53を自由なエリアへ格納することができる。
【0221】
(実施形態2-E)
実施形態2-Eは、上記の実施形態2-Aの変形例である。実施形態2-Eでは、リードデータとコンプリーション情報53との配置例を説明する。
【0222】
図18は、実施形態2-Eに係るキャッシュメモリ68におけるリードデータ69とコンプリーション情報53との第1の配置関係の例を示す図である。
【0223】
第1の配置関係においては、キャッシュメモリ68の1つの管理単位内に、リードデータ69とコンプリーション情報53とが配置されている。この第1の配置関係では、リードデータ69の先頭位置に、コンプリーション情報53が配置されている。しかしながら、これとは逆に、リードデータ69の末尾位置に、コンプリーション情報53が配置されてもよい。
【0224】
図19は、実施形態2-Eに係るキャッシュメモリ68におけるリードデータ69とコンプリーション情報53との第2の配置関係の例を示す図である。
【0225】
第2の配置関係においては、キャッシュメモリ68の1つの管理単位内に、リードデータ69とコンプリーション情報53とが離れて配置されている。
【0226】
図20は、実施形態2-Eに係るキャッシュメモリ68におけるリードデータ69とコンプリーション情報53との第3の配置関係の例を示す図である。
【0227】
第3の配置関係においては、キャッシュメモリ68の複数の管理単位にわたって、リードデータ69とコンプリーション情報53とが配置されている。
【0228】
このような実施形態2-Eにおいて、プロセッサ50は、キャッシュメモリ68から、リードコマンドに対応するリードデータ69と当該リードコマンドに対応するコンプリーション情報53とを同時にリードすることができる。これにより、プロセッサ50によるキャッシュメモリ68へのアクセス回数を削減することができ、プロセッサ50の処理負荷を軽減することができる。
【0229】
また、実施形態2-Eにおいては、リードデータ69をライトするホストアドレス19をコンプリーション情報53のライト先のアドレスとして利用することが可能となり、上記の実施形態2-Aで説明したアドレス計算部54をコントローラ52から削除することができ、コントローラ52の構成および動作を簡略化することができる。
【0230】
(実施形態2-F)
実施形態2-Fは、上記の実施形態2-Aの変形例である。実施形態2-Fでは、サブミッションキューSQの管理単位に付されるインデックスと、ベースアドレスと、ストライド(間隔)とに基づいて、コンプリーションアドレス57を計算する。
【0231】
図21は、実施形態2-Fに係るストレージシステム1Dの構成の一例を示すブロック図である。
【0232】
ストレージシステム1Dは、ホストデバイス70、システムバス5、ペリフェラルバス6、メモリシステム71を備える。
【0233】
ホストデバイス70は、プロセッサ72とキャッシュメモリ73とを備える。
【0234】
メモリシステム71は、コントローラ74と不揮発性メモリ8とを備える。
【0235】
キャッシュメモリ73は、サブミッションキューSQと、コンプリーション情報53を格納するエリアE1~Enとを含む。
【0236】
サブミッションキューSQの各管理単位には、アクセスを効率化するためのインデックスX1~Xnが付されている。
【0237】
コンプリーション情報53を格納するためのエリアE1~Enは、各管理単位のインデックスX1~Xnと、ベースアドレス75と、ストライド(間隔)76とに基づいて、配列される。より具体的に説明すると、エリアE1~Enのアドレスは、インデックスX1~Xnと、ベースアドレス75と、ストライド76とを引き数とする関数により計算される。
【0238】
プロセッサ72は、例えば、キャッシュメモリ73にコンプリーション情報53を格納する場合に利用されるベースアドレス75とストライド76を決定し、事前に(例えば、ストレージシステム1Dが起動してからコマンドを発行するまでの間に)、コントローラ74へ通知する。
【0239】
コントローラ74は、検出部77、コマンド実行部24、アドレス計算部78、コンプリーション生成部55、メモリ・インタフェース・コントローラ26、コントローラ74の内部メモリ79を備える。
【0240】
コントローラ74の内部メモリ79は、ベースアドレス75、ストライド76、コマンド情報14、インデックスX1、コンプリーションアドレス57、コンプリーション情報53を格納する。
【0241】
検出部77は、プロセッサ72から通知されたベースアドレス75およびストライド76をコントローラ74の内部メモリ79にライトする。
【0242】
検出部77は、コマンド情報14をリードする時点で、インデックス情報X1を保有しており、内部メモ79にライトしている。また、検出部77は、サブミッションキューSQからコマンド情報14をリードし、コントローラ74の内部メモリ79へライトする。
【0243】
アドレス計算部78は、ベースアドレス75、インデックスX1、ストライド76に基づいて、コンプリーションアドレス57を計算し、コンプリーションアドレス57をコントローラ74の内部メモリ79へライトする。例えば、アドレス計算部78は、コンプリーションアドレス57=ベースアドレス75+(インデックスX1×ストライド76)を計算する。
【0244】
コンプリーション生成部55は、DMAC31を備える。コンプリーション生成部55は、コマンドの実行後、コンプリーション情報53を生成し、コントローラ74の内部メモリ79にライトする。DMAC31は、コントローラ74の内部メモリ79からコンプリーションアドレス57によって指定されるエリアE1に、コンプリーション情報53を転送する。
【0245】
プロセッサ72は、サブミッションキューSQに格納されているコマンド情報14のインデックスX1、ベースアドレス75、ストライド76に基づいてコンプリーションアドレス57を計算し、コンプリーションアドレス57によって指定されるエリアE1からコンプリーション情報53をリードすることで、コマンド情報14に対応するコマンドが完了したか否か判断する。
【0246】
以上説明した実施形態2-Fにおいて、コンプリーション情報53を格納するエリアE1~Enは、サブミッションキューSQのインデックスX1~Xn、ベースアドレス75、ストライド76に基づいて設定される配列構造を持つ。
【0247】
実施形態2-Fにおいては、プロセッサ72が、サブミッションキューSQの管理単位に対応する専用のエリアE1を静的に決定し、コントローラ74が、当該エリアE1のアドレスを計算する。
【0248】
したがって、実施形態2-Fにおいては、コンプリーションキューCQを使わないコンプリーション制御を実行することができる。
【0249】
実施形態2-Fにおいては、上記の実施形態2-Dにように、すべてのコマンド情報14に対してエリアE1~Enを指定するコンプリーションアドレス57を追加する必要がないため、キャッシュメモリ73の使用量を削減することができる。
【0250】
なお、実施形態2-Fにおいて、インデックスX1~Xnは、サブミッションキューSQの管理単位の位置情報としてもよく、サブミッションキューSQの管理単位に対する通し番号としてもよい。
【0251】
実施形態2-Fにおいて、インデックスX1~Xnは、コマンド情報14内のコマンドID16としてもよい。
【0252】
実施形態2-Fにおいて、コンプリーションアドレス57の計算にサブミッションキューSQの位置情報を用いる場合、コマンド情報14は、この位置情報を格納するためのフィールドを持たなくてもよい。
【0253】
(実施形態2-G)
実施形態2-Gは、上記の実施形態2-Aの変形例である。実施形態2-Gでは、コンプリーション情報が、コマンドの完了又は未完了を示す情報に加えて、さらに付加的な情報(以下、アトリビュート情報という)を含む。
【0254】
図22は、実施形態2-Gに係るストレージシステム1Eの構成の一例を示すブロック図である。
【0255】
実施形態2-Gにおいて、コンプリーション情報80は、コマンドの完了又は未完了を示す情報(例えばビット)と、アトリビュート情報81とを含む。
【0256】
アトリビュート情報81は、例えば、NVMeのステータス、エラー情報、コマンド実行結果、リードデータ、その他の付帯情報を含むとしてもよい。
【0257】
ストレージシステム1Eは、ホストデバイス82、システムバス5、ペリフェラルバス6、メモリシステム83を備える。
【0258】
ホストデバイス82は、プロセッサ84、キャッシュメモリ85、メインメモリ4を備える。
【0259】
メモリシステム83は、コントローラ86と不揮発性メモリ8とを備える。
【0260】
コントローラ86は、検出部23、コマンド実行部24、アドレス計算部54、コンプリーション生成部87、メモリ・インタフェース・コントローラ26、コントローラ86の内部メモリ88を備える。
【0261】
コントローラ86の内部メモリ88は、更新頻度情報12、SQヘッドSQH、コマンド情報14、データ28、コンプリーションアドレス57、コンプリーション情報80を格納する。
【0262】
コンプリーション生成部87は、DMAC31を備える。コンプリーション生成部87は、コマンドの実行後、アトリビュート情報81を含むコンプリーション情報80を生成し、コントローラ86の内部メモリ88にライトする。DMAC31は、コントローラ86の内部メモリ88からコンプリーションアドレス57によって指定されるエリアE1に、コンプリーション情報80を転送する。
【0263】
プロセッサ84は、エリアE1のコンプリーション情報80をリードし、コマンドの完了または未完了の判断およびアトリビュート情報81に基づいて各種の処理を実行することができる。プロセッサ84は、例えば、ライトエラーを検出した場合に、リライトコマンドを発行してもよい。
【0264】
以上説明した実施形態2-Gにおいて、プロセッサ84は、コンプリーション情報80からコマンドが完了したか否かのみではなく、様々な情報を得ることができ、例えば適切なエラー処理など、コマンド完了時に実現可能な機能を追加することができる。
【0265】
(実施形態3-A)
実施形態3-Aでは、コマンド情報のデータサイズを小さくしてキャッシュメモリの使用量を削減し、プロセッサの処理負荷を軽減するストレージシステムを説明する。
【0266】
実施形態3-Aは、上記の実施形態1-Aないし2-Gと組み合わせて適用可能である。以下の各実施形態において、コントローラの構成は簡略化して説明するが、上記の実施形態1-Aないし2-Gと同様に、コントローラは、検出部、コマンド実行部、アドレス計算部、コンプリーション生成部、メモリ・インタフェース・コントローラ、内部メモリなどを適宜備えるとしてもよい。
【0267】
図23は、実施形態3-Aに係るストレージシステム1Fの構成の一例を示すブロック図である。
【0268】
ストレージシステム1Fは、プロセッサ89、キャッシュメモリ90、メモリシステム91を備える。メモリシステム91は、コントローラ92と不揮発性メモリ8とを備える。
【0269】
キャッシュメモリ90は、サブミッションキューSQ1~SQ3を備える。
【0270】
プロセッサ89は、サブミッションキューSQ1に対して、標準のコマンド情報38の一部として使用され得るオペレーションコードOP1とデータ長DL1とを設定し、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133Aを、事前に、コントローラ92に通知する。データ長DL1は、オペレーションコードOP1によって指定されるコマンドで取り扱うデータのデータ長である。例えば、オペレーションコードOP1がライトコマンドを指定する場合、データ長DL1は、ライトデータのデータ長である。
【0271】
オペレーションコードOP1とデータ長DL1とがサブミッションキューSQ1に対して設定されているため、サブミッションキューSQ1に格納されるコマンド情報I1では、オペレーションコード17とデータ長18とが省略される。したがって、コマンド情報I1は、オペレーションコード17とデータ長18とを含まず、コマンドID16とホストアドレス19とメモリアドレス20とを含む。
【0272】
プロセッサ89は、オペレーションコードOP1およびデータ長DL1に対応するコマンドを発行する場合に、コマンド情報I1を、SQテールSQTによって指定されるサブミッションキューSQ1の位置にライトする。
【0273】
コントローラ92は、SQヘッドSQHによって指定されるサブミッションキューSQ1の位置からコマンド情報I1をリードすると、コマンド情報I1と、サブミッションキューSQ1に設定されているオペレーションコードOP1およびデータ長DL1とに基づいて、コマンドを実行する。
【0274】
プロセッサ89は、サブミッションキューSQ2に対して、オペレーションコードOP2とデータ長DL2とを設定し、サブミッションキューSQ2に対してオペレーションコードOP2とデータ長DL2とが設定されていることを示す情報133Bを、事前に、コントローラ92に通知する。データ長DL2は、オペレーションコードOP2によって指定されるコマンドで取り扱うデータのデータ長である。例えば、オペレーションコードOP2がリードコマンドを指定する場合、データ長DL2は、リードデータのデータ長である。
【0275】
オペレーションコードOP2とデータ長DL2とがサブミッションキューSQ2に対して設定されているため、サブミッションキューSQ2に対して格納されるコマンド情報I2では、オペレーションコード17とデータ長18とが省略される。したがって、コマンド情報I2は、オペレーションコード17とデータ長18とを含まず、コマンドID16とホストアドレス19とメモリアドレス20とを含む。
【0276】
プロセッサ89は、オペレーションコードOP2およびデータ長DL2に対応するコマンドを発行する場合に、コマンド情報I2を、SQテールSQTによって指定される第2のサブミッションキューSQ2の位置にライトする。
【0277】
コントローラ92は、SQヘッドSQHによって指定されるサブミッションキューSQ2の位置からコマンド情報I2をリードすると、コマンド情報I2と、サブミッションキューSQ2に設定されているオペレーションコードP2およびデータ長DL2とに基づいて、コマンドを実行する。
【0278】
プロセッサ89は、オペレーションコードOP1およびデータ長DL1に対応するコマンドではなく、かつ、オペレーションコードOP2およびデータ長DL2に対応するコマンドではないその他のコマンドを発行する場合に、当該その他のコマンドに関するコマンド情報38をサブミッションキューSQ3にライトする。
【0279】
なお、プロセッサ89は、オペレーションコードOP1およびデータ長DL1に対応するコマンド、または、オペレーションコードOP2およびデータ長DL2に対応するコマンドを発行する場合であっても、当該コマンドに対応するコマンド情報38をサブミッションキューSQ3にライトしてもよい。
【0280】
サブミッションキューSQ3に対して格納される標準のコマンド情報38は、コマンドID16、オペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20を含む。
【0281】
プロセッサ89は、オペレーションコードOP1およびデータ長DL1に対応するコマンドではなく、かつ、オペレーションコードOP2およびデータ長DL2に対応するコマンドではないコマンドを発行する場合に、コマンド情報38を、SQテールSQTによって指定されるサブミッションキューSQ3の位置にライトする。
【0282】
コントローラ92は、SQヘッドSQHによって指定されるサブミッションキューSQ3の位置からコマンド情報38をリードすると、コマンド情報38に基づいて、コマンドを実行する。
【0283】
以上説明した実施形態3-Aにおいては、オペレーションコードOP1,P2とデータ長DL1,DL2とをそれぞれサブミッションキューSQ1,SQ2に設定し、サブミッションキューSQ1,SQ2に格納されるコマンド情報I1,I2からオペレーションコード17とデータ長18とを削除する。
【0284】
これにより、コマンド情報I1,I2ごとにオペレーションコード17とデータ長18とを設定する必要がなく、プロセッサ89の処理負荷を軽減することができ、キャッシュメモリ90の使用量を削減することができる。
【0285】
なお、コマンド情報I1,I2のデータサイズは、プロセッサ89の1命令サイズまたは1拡張命令サイズ以下であればよい。例えば、コマンド情報I1,I2はコマンドID16、ホストアドレス19、メモリアドレス20を含むため、このコマンド情報I6のデータサイズは32ビット以上であるとする。また、プロセッサの1命令サイズは64ビットであるとする。このような場合、実施形態3-Aでは、コマンド情報I1,I2のデータサイズを、プロセッサの1命令サイズまたは1拡張命令以下の例えば32ビット~128ビットの範囲とすることにより、プロセッサ116の処理効率を向上させることができる。なお、以下の各実施形態3-B~3-Gで説明されるコマンド情報I3~I7も同様に32ビット~128ビットの範囲としてもよい。
【0286】
(実施形態3-B)
実施形態3-Bは、上記の実施形態3-Aの変形例である。実施形態3-Bでは、サブミッションキューSQに格納されるコマンド情報からコマンドID16を削除する。
【0287】
図24は、実施形態3-Bに係るストレージシステム1Gの構成の一例を示すブロック図である。
【0288】
ストレージシステム1Gは、プロセッサ93、キャッシュメモリ94、メモリシステム95を備える。メモリシステム95は、コントローラ96と不揮発性メモリ8とを備える。
【0289】
キャッシュメモリ94は、サブミッションキューSQとコンプリーションキューCQとを備える。
【0290】
サブミッションキューSQに格納されるコマンド情報I3は、オペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20を含むが、コマンドID16を含まない。
【0291】
コントローラ96は、コマンド情報I3をリードする時点で、サブミッションキューSQにおけるコマンド情報I3の位置情報(例えば、アドレス、サブミッションキューSQの管理単位に対する通し番号、または、インデックス)P1を保有しており、コントローラ96の内部メモリ134にライトしている。
【0292】
コントローラ96は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報I3をリードする。
【0293】
コントローラ96は、サブミッションキューSQにおけるコマンド情報I3の位置情報P1を、コマンドID16に代えてコマンド情報I3を特定する情報として用いる。コントローラ96は、コマンド実行後、サブミッションキューSQにおけるコマンド情報I3の位置情報P1をコマンドIDとして用いてコンプリーション情報97を生成し、位置情報P1とステータス情報22とを含むコンプリーション情報97をコントローラ96の内部メモリ134にライトする。そして、コントローラ96は、コンプリーション情報97を、CQテールCQTによって指定されるコンプリーションキューCQの位置へライトする。
【0294】
以上説明した実施形態3-Bにおいては、サブミッションキューSQに格納されるコマンド情報I3からコマンドID16を削除することができるため、コマンド情報I3のデータサイズを小さくすることができ、キャッシュメモリ94の使用量を削減することができる。
【0295】
なお、実施形態3-Bにおいて、コントローラ96は、位置情報P1に基づいて計算をし、コンプリーション情報97は、位置情報P1に代えてこの計算結果を含むとしてもよい。
【0296】
(実施形態3-C)
実施形態3-Cは、上記の実施形態3-Aまたは3-Bの変形例である。以下では、実施形態3-Bの変形例を説明するが、実施形態3-Cは実施形態3-Aに対しても同様に適用可能である。実施形態3-Cでは、サブミッションキューSQに格納されるコマンド情報からホストアドレス19を削除する。
【0297】
図25は、実施形態3-Cに係るストレージシステム1Hの構成の一例を示すブロック図である。
【0298】
ストレージシステム1Hは、プロセッサ98、キャッシュメモリ99、メモリシステム100を備える。メモリシステム100は、コントローラ104と不揮発性メモリ8とを備える。
【0299】
キャッシュメモリ99の一部は、例えばメモリシステム100から転送されたリードデータまたはメモリシステム100へ転送すべきライトデータなどのコマンドに関するデータ28を格納するデータバッファメモリ101として利用される。なお、キャッシュメモリ99とデータバッファメモリ101とは、別構成としてもよい。
【0300】
コマンドに関するデータ28は、サブミッションキューSQにおけるコマンド情報I4の位置情報P1と、ベースアドレス102と、ストライド103とに基づいて配列される。データバッファメモリ101に格納されるデータ28の位置は、例えば、位置情報P1と、ベースアドレス102と、ストライド103とを引き数とする関数により計算されてもよい。
【0301】
プロセッサ98は、例えば、データバッファメモリ101にデータ28を格納する場合に利用されるベースアドレス102とストライド103を決定し、事前に、コントローラ104へ通知する。
【0302】
コントローラ104は、ベースアドレス102とストライド103とをコントローラ104の内部メモリ105にライトする。
【0303】
プロセッサ98は、SQテールSQTによって指定されるサブミッションキューSQの位置に、コマンド情報I4をライトする。
【0304】
実施形態3-Cにおいて、コマンド情報I4は、オペレーションコード17とデータ長18とメモリアドレス20とを含むが、コマンドID16とホストアドレス19とを含まない。
【0305】
コントローラ104は、コマンド情報I4をリードする時点で、サブミッションキューSQにおけるコマンド情報I4の位置情報P1を保有しており、コントローラ104の内部メモリ105にライトしている。
【0306】
コントローラ104は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報I4をリードし、コントローラ104の内部メモリ105へライトする。
【0307】
コントローラ104は、ベースアドレス102、位置情報P1、ストライド103に基づいて、データ28のアドレスADを計算する。具体的には、コントローラ104は、例えば、ベースアドレス102+(位置情報P1×ストライド103)を計算し、データのアドレスADを得る。
【0308】
コントローラ104は、コマンド情報I4とアドレスADに基づいてコマンドを実行する。例えば、コマンドがリードコマンドの場合、コントローラ104は、不揮発性メモリ8からデータ28をリードし、アドレスADによって指定されるデータバッファメモリ101の位置に、データ28をライトする。例えば、コマンドがライトデータの場合、コントローラ104は、アドレスADによって指定されるデータバッファメモリ101の位置からデータ28をリードし、データ28を不揮発性メモリ8にライトする。
【0309】
以上説明した実施形態3-Cにおいては、コマンドに関するデータ28のアドレスADが、ベースアドレス102と位置情報P1とストライド103とに基づいて計算される。コントローラ104は、アドレスADによって指定される位置へデータ28をライトし、または、アドレスADによって指定される位置からデータ28をリードする。実施形態3-Cにおいては、サブミッションキューSQに格納されるコマンド情報I4からホストアドレス19を削除することができるため、コマンド情報I4のデータサイズを小さくすることができ、キャッシュメモリ99の使用量を削減することができる。
【0310】
なお、実施形態3-Cにおいて、コンプリーション制御は、上記の各種の態様を適用することができ、例えばコンプリーションキューCQを用いてコンプリーション制御を実行してもよく、例えばコマンド情報またはサブミッションキューSQの管理単位の位置から決まるエリアE1~Enを用いてコンプリーション制御を実行してもよい。
【0311】
(実施形態3-D)
実施形態3-Dでは、コマンド情報からホストアドレス19を削除可能とする。実施形態3-Dは、上記の実施形態1-Aないし3-Bと組み合わせて適用可能である。
【0312】
図26は、実施形態3-Dに係るストレージシステム1Iの構成の一例を示すブロック図である。
【0313】
ストレージシステム1Iは、プロセッサ106、キャッシュメモリ107、メモリシステム108を備える。メモリシステム108は、コントローラ109と不揮発性メモリ8とを備える。
【0314】
この図26では、コマンドがリードコマンドである場合を例示しているが、コマンドが例えばライトコマンドなどの場合であっても、同様の構成を適用可能である。
【0315】
実施形態3-Dに係るキャッシュメモリ107は、サブミッションキューSQとコンプリーションキューCQとデータキュー110とを含む。データキュー110は、コマンドに関するデータ28を格納する。
【0316】
コマンドに関するデータ28のデータキュー110へのライトおよびデータキュー110からのデータ28のリードは先入れ先出し方式で実行される。
【0317】
プロセッサ106およびコントローラ109は、この先入れ先出し方式を実現するために、データキュー110において次にリードすべき位置を示すリードポインタ111、および、データキュー110において次にライトすべき位置を示すライトポインタ112を管理する。
【0318】
プロセッサ106は、例えば、データキュー110にデータ28を格納する場合に利用されるベースアドレス113とデータキュー110のサイズ114とを決定し、事前に、ベースアドレス113とデータキュー110のサイズ114とをコントローラ109へ通知する。
【0319】
コントローラ109は、コントローラ109の内部メモリ115にベースアドレス113とデータキュー110のサイズ114とをライトする。
【0320】
プロセッサ106は、SQテールSQTによって指定されるサブミッションキューSQの位置に、コマンド情報I5をライトする。
【0321】
コマンド情報I5は、コマンドID16、オペレーションコード17、データ長18、メモリアドレス20を含むが、ホストアドレス19を含まない。
【0322】
コントローラ109は、SQヘッドSQHによって指定されるサブミッションキューSQの位置からコマンド情報I5をリードし、コントローラ109の内部メモリ115へ格納する。
【0323】
コントローラ109は、コマンド情報I5と、ライトポインタ112によって指定されるデータキュー110の位置に基づいてコマンドを実行する。
【0324】
コントローラ109は、コマンドの実行により、不揮発性メモリ8からリードしたデータ28を、ライトポインタ112によって指定される位置にライトする。コントローラ109は、ライトポインタ112によって指定される位置にデータ28がライトされると、ライトポインタ112を更新する。具体的には、コントローラ109は、ライトポインタ112の値と、ライトポインタ112によって指定される位置に格納されているデータ28のデータ長18とを加算して、ライトポインタ112の値を更新する。コントローラ109は、更新したライトポインタ112がデータキュー110の範囲外を指定する場合は、ライトポインタ112を再びベースアドレス113へ戻す。
【0325】
コントローラ109は、コマンドID16とステータス情報22とを含むコンプリーション情報15を生成し、CQテールCQTによって指定されるコンプリーションキューCQの位置にコンプリーション情報15をライトする。
【0326】
プロセッサ106は、リードポインタ111によって指定される位置からデータ28をリードする。その後、プロセッサ106は、リードポインタ111の値と、リードポインタ111によって指定される位置に格納されているデータ28のデータ長18とを加算して、リードポインタ111の値を更新する。プロセッサ106は、更新したリードポインタ111がデータキュー110の範囲外を指定する場合は、リードポインタ111を再びベースアドレス113へ戻す。
【0327】
以上説明した実施形態3-Dにおいては、前のコマンドに続いて次のコマンドが実行された場合に、前のコマンドに関するデータの終端に、次のコマンドに関するデータが追加される。コントローラ109は、ライトポインタ112によって指定されるデータキュー110の位置に、データ28をライトする。
【0328】
実施形態3-Dにおいては、サブミッションキューSQに格納されるコマンド情報I5からホストアドレス19を削除することができるため、コマンド情報I5のデータサイズを小さくすることができ、キャッシュメモリ107の使用量を削減することができる。
【0329】
なお、実施形態3-Dにおいて、コンプリーション制御は、上記の各種の態様に変更することができ、例えば専用のエリアE1~Enを用いてコンプリーション制御を実行してもよい。
【0330】
実施形態3-Dにおいて、データキュー110に、コンプリーションキューCQが組み込まれていてもよい。
【0331】
プロセッサ106またはコントローラ109は、コンプリーションキューCQの管理単位の位置からデータを指定するポインタを取得してもよい。
【0332】
実施形態3-Dではプロセッサ106がリードコマンドを発行した場合を例として説明しているが、プロセッサ106がライトコマンドを発行した場合も同様にデータキュー110を適用可能である。プロセッサ106がライトコマンドを発行した場合には、ライトデータを格納するデータキュー110のリードポインタ111はコントローラ109が管理し、ライトポインタ112はプロセッサ106が管理する。プロセッサ106は、ライトポインタ112によって指定されるデータキュー110の位置にデータ28をライトし、コントローラ109は、リードポインタ111によって指定されるデータキュー110の位置からデータ28をリードして不揮発性メモリ8にライトする。
【0333】
(実施形態3-E)
実施形態3-Eでは、上記の実施形態3-Aと実施形態3-Cとの組み合わせを説明する。
【0334】
図27は、実施形態3-Eに係るストレージシステム1Jの構成の一例を示すブロック図である。
【0335】
ストレージシステム1Jは、プロセッサ116、キャッシュメモリ117、メモリシステム118を備える。メモリシステム118は、コントローラ119と不揮発性メモリ8とを備える。
【0336】
キャッシュメモリ117は、サブミッションキューSQ1,SQ2とコンプリーションキューCQとデータバッファメモリ101とを含む。
【0337】
以下においては、サブミッションキューSQ1に対する制御を代表して説明するが、サブミッションキューSQ2に対する制御も同様である。
【0338】
プロセッサ116は、例えば、データバッファメモリ101にデータ28を格納する場合に利用されるベースアドレス102とストライド103を決定し、事前に、コントローラ119へ通知する。
【0339】
また、プロセッサ116は、サブミッションキューSQ1に対して、オペレーションコードOP1とデータ長DL1とを設定し、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133Aを、事前に、コントローラ119に通知する。
【0340】
コントローラ119は、ベースアドレス102、ストライド103、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133Aを、コントローラ119の内部メモリ120にライトする。
【0341】
サブミッションキューSQに対して格納されるコマンド情報I6は、コマンドID16とメモリアドレス20とを含むが、オペレーションコード17とデータ長18とホストアドレス19とを含まない。
【0342】
プロセッサ116は、オペレーションコードOP1およびデータ長DL1に対応するコマンドを発行する場合に、コマンド情報I6を、SQテールSQTによって指定されるサブミッションキューSQ1の位置にライトする。実施形態3-Eでは、プロセッサ116の1命令又は1拡張命令により、コマンド情報I6がサブミッションキューSQ1へライトされるものとする。
【0343】
コントローラ119は、コマンド情報I6をリードする時点で、位置情報P1を保有しており、コントローラ119の内部メモリ120にライトしている。また、コントローラ119は、SQヘッドHによって指定されるサブミッションキューSQ1の位置からコマンド情報I6をリードし、コントローラ119の内部メモリ120へライトする。
【0344】
コントローラ119は、ベースアドレス102、位置情報P1、ストライド103に基づいて、データ28のアドレスADを計算し、コントローラ119の内部メモリ120にライトする。
【0345】
コントローラ119は、コマンド情報I6と、オペレーションコードOP1と、データ長DL1と、アドレスADとに基づいてコマンドを実行する。例えば、コマンドがリードコマンドの場合、コントローラ119は、不揮発性メモリ8からデータ28をリードし、アドレスADによって指定されるデータバッファメモリ101の位置に、データ28をライトする。例えば、コマンドがライトコマンドの場合、コントローラ119は、アドレスADによって指定されるデータバッファメモリ101の位置からデータ28をリードし、データ28を不揮発性メモリ8にライトする。
【0346】
コントローラ119は、コンプリーション情報15を生成し、コンプリーション情報15を、CQテールCQTによって指定されるコンプリーションキューCQの位置に転送する。
【0347】
プロセッサ116は、CQヘッドCQHによって指定されるコンプリーションキューCQの位置からコンプリーション情報15をリードする。また、プロセッサ116は、コマンドがリードコマンドの場合、ベースアドレス102、ストライド103、位置情報P1に基づいてデータ28のアドレスADを計算し、アドレスADによって指定されるデータバッファメモリ101の位置からデータ28をリードする。
【0348】
以上説明した実施形態3-Eにおいては、上記の実施形態3-Aおよび実施形態3-Cと同様の効果を得ることができる。具体的には、実施形態3-Eにおいては、コマンド情報I6からオペレーションコード17とデータ長18とホストアドレス19とを削除することができ、コマンド情報I6のデータサイズを削減することができ、キャッシュメモリ117の使用量を削減することができ、プロセッサ116の処理負荷を軽減することができる。
【0349】
実施形態3-Eにおいて、例えば、プロセッサ116が64ビットマシンであり、コマンド情報I6のデータサイズが64ビットまたは128ビットであるとすると、プロセッサ116は、64ビットストアの1命令または1拡張命令でコマンド情報I6をサブミッションキューSQ1に格納することができる。このため、プロセッサ116の処理効率を向上させることができる。
【0350】
(実施形態3-F)
実施形態3-Fでは、上記の実施形態3-Eの変形例を説明する。この実施形態3-Fは、上記の実施形態3-Aと実施形態3-Cと実施形態2-Aとの組み合わせに相当する。
【0351】
図28は、実施形態3-Fに係るストレージシステム1Kの構成の一例を示すブロック図である。
【0352】
実施形態3-Fにおいて、コマンド情報I6は、コマンドID16とメモリアドレス20とを含み、オペレーションコード17、データ長18、ホストアドレス19を含まない。なお、実施形態3-Fにおいて、コマンド情報I6は、コマンドID16を含まないとしてもよい。
【0353】
ストレージシステム1Kは、プロセッサ121、キャッシュメモリ122、メモリシステム123を備える。メモリシステム123は、コントローラ124と不揮発性メモリ8とを備える。
【0354】
キャッシュメモリ122は、サブミッションキューSQ1,SQ2と、エリアE1~Enと、データバッファメモリ101とを含む。
【0355】
以下においてはサブミッションキューSQ1に対する制御を代表して説明するが、サブミッションキューSQ2に対する制御も同様である。
【0356】
プロセッサ121は、例えば、データバッファメモリ101のベースアドレス102とストライド103を決定し、事前に、コントローラ124へ通知する。
【0357】
また、プロセッサ121は、サブミッションキューSQ1に対して、オペレーションコードOP1とデータ長DL1とを設定し、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133Aを、事前に、コントローラ124に通知する。
【0358】
さらに、プロセッサ121は、サブミッションキューSQ1に格納されているコマンド情報I6から一意に決まりエリアE1~Enとして使用される位置を示すアドレスを決定、取得、または、計算し、エリアE1~Enを準備または確保する。
【0359】
コントローラ124は、ベースアドレス102、ストライド103、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133Aを、コントローラ124の内部メモリ125にライトする。
【0360】
プロセッサ121は、オペレーションコードOP1およびデータ長DL1に対応するコマンドを発行する場合に、コマンド情報I6を、SQテールSQTによって指定されるサブミッションキューSQ1の位置にライトする。
【0361】
コントローラ124は、コマンド情報I6をリードする時点で、位置情報P1を保有しており、コントローラ124の内部メモリ125にライトしている。また、コントローラ124は、SQヘッドSQHによって指定されるサブミッションキューSQ1の位置からコマンド情報I6をリードし、コントローラ124の内部メモリ125へライトする。
【0362】
コントローラ124は、ベースアドレス102、位置情報P1、ストライド103に基づいて、データ28のアドレスADを計算する。
【0363】
さらに、コントローラ124は、コマンド情報I6に対応するコマンドの実行後、コンプリーション情報53のライト先となるエリアE1を指定するコンプリーションアドレス57を計算し、コンプリーションアドレス57をコントローラ124の内部メモリ125へライトする。
【0364】
コントローラ124は、コマンド情報I6、サブミッションキューSQ1に対してオペレーションコードOP1とデータ長DL1とが設定されていることを示す情報133A、アドレスADに基づいて、コマンドを実行する。例えば、コマンドがリードコマンドの場合、コントローラ124は、不揮発性メモリ8からデータ28をリードし、アドレスADによって指定されるデータバッファメモリ101の位置に、データ28をライトする。例えば、コマンドがライトコマンドの場合、コントローラ124は、アドレスADによって指定されるデータバッファメモリ101の位置からデータ28をリードし、データ28を不揮発性メモリ8にライトする。
【0365】
コントローラ124は、コンプリーション情報53を生成し、コンプリーション情報53を、コントローラ124の内部メモリ125に格納されているコンプリーションアドレス57によって指定されるエリアE1にライトする。
【0366】
プロセッサ121は、サブミッションキューSQ1に格納されているコマンド情報I6から決まるエリアE1から、コンプリーション情報53をリードし、ベースアドレス102、ストライド103、位置情報P1に基づいてデータ28のアドレスADを計算し、データ28をリードする。
【0367】
以上説明した実施形態3-Fにおいては、上記の上記の実施形態3-Aと実施形態3-Cと実施形態2-Aと同様の効果を得ることができる。具体的には、実施形態3-Fにおいては、コマンド情報I6のデータサイズを削減することができる。また、実施形態3-Fにおいては、コンプリーションキューCQを使用しないため、コンプリーション制御を軽減することができる。これにより、実施形態3-Fにおいては、キャッシュメモリの使用量を削減することができ、プロセッサ121の処理負荷を軽減することができる。
【0368】
(実施形態3-G)
実施形態3-Gでは、上記の実施形態1-Aないし3-Fをキーバリュー検索方式で実現する場合を説明する。
【0369】
実施形態3-Gでは、実施形態3-Dに対してキーバリュー検索方式を適用する場合を例として説明する。しかしながら、実施形態1-Aないし3-C、3-E、3-Fに対しても、同様に、キーバリュー検索方式を適用可能である。
【0370】
実施形態3-Gでは、コマンド情報がキーを含み、キーに対応するバリュー(リードデータ)がキャッシュメモリのデータキューに格納される。
【0371】
図29は、実施形態3-Gに係るストレージシステム1Lの構成の一例を示すブロック図である。
【0372】
ストレージシステム1Lは、プロセッサ126、キャッシュメモリ127、メモリシステム128を備える。メモリシステム128は、コントローラ129と不揮発性メモリ8とを備える。
【0373】
この図29では、コマンドがリードコマンドである場合を例示しているが、コマンドが例えばライトコマンドなどの場合であっても、同様の構成を適用可能である。
【0374】
各キーKに対応する各バリューVのデータサイズは可変である。
【0375】
キャッシュメモリ127は、サブミッションキューSQ1,SQ2とコンプリーションキューCQとデータキュー110とを含む。
【0376】
サブミッションキューSQ1は、リードコマンドを示すオペレーションコードOP1と対応付けられている。
【0377】
データキュー110は、コントローラ129によってリードされたバリューVを格納する。データキュー110に対するバリューVのライトおよびデータキュー110からのバリューのリードは先入れ先出し方式で実行される。
【0378】
ライトポインタ112は、次にバリューVをライトすべき位置を指定する。コントローラ129は、キーKに対応するバリューVを不揮発性メモリ8からリードすると、ライトポインタ112によって指定される位置にバリューVをライトする。コントローラ129は、ライトポインタ112の示す位置にバリューVがライトされると、ライトポインタ112の値とバリューVのデータ長130とを加算して、ライトポインタ112の値を更新する。
【0379】
リードポインタ111は、次にバリューVをリードすべき位置を指定する。プロセッサ126は、リードポインタ111によって指定される位置からバリューVをリードする。プロセッサ126は、リードポインタ111の示す位置からバリューVをリードすると、リードポインタ111の値とリードされたバリューVのデータ長130とを加算して、リードポインタ111の値を更新する。
【0380】
実施形態3-Gにおいては、コントローラ129がライトポインタ112を管理し、プロセッサ126がリードポインタ111を管理する場合を例として説明する。しかしながら、プロセッサ126がライトポインタ112を管理してもよく、コントローラ129がリードポインタ111を管理してもよい。
【0381】
実施形態3-Gにおいて、サブミッションキューSQ1に格納されるコマンド情報I7は、コマンドID16とキーKとを含むが、例えばオペレーションコード17、データ長18、ホストアドレス19、メモリアドレス20などを含まない。また、コマンド情報I7は、キーの長さを含まなくてもよい。
【0382】
コンプリーションキューCQに格納されるコンプリーション情報131は、コマンドIDとステータス情報22とバリューVのデータ長130とを含む。
【0383】
プロセッサ126は、サブミッションキューSQ1に対して、リードコマンドを示すオペレーションコードOP1を設定し、サブミッションキューSQ1に対してオペレーションコードOP1が設定されていることを示す情報133Cを、事前に、コントローラ129に通知する。
【0384】
コントローラ129は、サブミッションキューSQ1に対してオペレーションコードOP1が設定されていることを示す情報133Cを、コントローラ129の内部メモリ132にライトする。
【0385】
プロセッサ126は、リードコマンドが発行された場合に、コマンド情報I7を、SQテールSQTによって指定されるサブミッションキューSQ1の位置にライトする。実施形態3-Gでは、プロセッサ126の1命令又は1拡張命令により、コマンド情報I7がサブミッションキューSQへライトされるものとする。
【0386】
コントローラ129は、SQヘッドSQHによって指定されるサブミッションキューSQ1の位置からコマンド情報I7をリードし、コントローラ129の内部メモリ132にライトする。
【0387】
コントローラ129は、コマンド情報I7と、サブミッションキューSQ1に対してオペレーションコードOP1が設定されていることを示す情報133Cとに基づいてコマンドを実行し、不揮発性メモリ8からキーKに対応するバリューVをリードし、ライトポインタ112によって指定されるデータキュー110の位置に、バリューVをライトする。
【0388】
コントローラ129は、ライトポインタ112の値にバリューVのデータ長130を加算して、ライトポインタ112の値を更新する。
【0389】
コントローラ129は、コンプリーション情報131を生成し、CQテールCQTによって指定されるコンプリーションキューCQの位置に、コンプリーション情報131をライトする。
【0390】
プロセッサ126は、CQヘッドCQHによって指定されるコンプリーションキューCQの位置からコンプリーション情報131をリードする。
【0391】
プロセッサ126は、リードポインタ111によって指定されるデータキュー110の位置から、コンプリーション情報131に含まれているデータ長130のバリューVをリードする。
【0392】
さらに、プロセッサ126は、リードポインタ111の値にコンプリーション情報131に含まれているリードしたバリューVのデータ長130を加算して、リードポインタ111の値を更新する。
【0393】
以上説明した実施形態3-Gにおいては、キーバリュー検索型のストレージシステム1Lにおいても、上記の各実施形態に係る手法を適宜組み合わせて、上記の各実施形態と同様の効果を得ることができる。具体的には、実施形態3-Gでは、コマンド情報I7のデータサイズを削減することができ、キャッシュメモリ127の使用量を減らすことができ、サブミッションキューSQに対する制御およびコンプリーション制御を簡略化してプロセッサ126の処理効率を向上させることができる。
【0394】
実施形態3-Gにおいては、上記の実施形態3-Fと同様に、コマンド情報I7のデータサイズを、プロセッサ126の1命令サイズまたは1拡張命令サイズ以下とし、プロセッサ126の処理効率を向上させてもよい。
【0395】
上記の実施形態3-Cないし3-Gにおいて、データバッファメモリ101またはデータキュー110に対してデータ28またはバリューVをライトする位置、すなわちアドレスは、その他の様々な手法で決定されてもよい。
【0396】
例えば、データバッファメモリ101またはデータキュー110のアドレスは、コマンド情報を構成する値、サブミッションキューSQ内のコマンド情報の位置、メモリシステム側にあらかじめ設定されている値、メモリシステムが以前にリクエストを処理した結果として保持している値に基づいて算出されてもよい。
【0397】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0398】
1A~1L…ストレージシステム、2…プロセッサ、3…キャッシュメモリ、SQ…サブミッションキュー、CQ…コンプリーションキュー、7…コントローラ、8…不揮発性メモリ、9…ホストデバイス、10…メモリシステム、12…更新頻度情報、14,I1~I7…コマンド情報、CIS…複数のコマンド情報のセット、15,53,131…コンプリーション情報、21…更新情報、23…検出部、24…コマンド実行部、25…コンプリーション生成部、46…更新予定の情報数、47…単位時間あたりの情報更新回数、E1~En…エリア、57…コンプリーションアドレス、78…アドレス計算部、x1~xn…インデックス、75,102…ベースアドレス、76,103…ストライド、81…アトリビュート情報、P1…位置情報、101…データバッファエリア、110…データキュー、111…リードポインタ、112…ライトポインタ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29