(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-03
(45)【発行日】2023-03-13
(54)【発明の名称】ストレージシステム及びその制御方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20230306BHJP
G06F 3/08 20060101ALI20230306BHJP
G06F 13/10 20060101ALI20230306BHJP
G06F 16/28 20190101ALI20230306BHJP
【FI】
G06F3/06 302J
G06F3/06 302A
G06F3/08 H
G06F13/10 340A
G06F16/28
(21)【出願番号】P 2019167669
(22)【出願日】2019-09-13
【審査請求日】2022-03-09
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】檜田 和浩
【審査官】松平 英
(56)【参考文献】
【文献】特開2013-200839(JP,A)
【文献】米国特許出願公開第2013/0250686(US,A1)
【文献】米国特許出願公開第2019/0108267(US,A1)
【文献】特開2018-055504(JP,A)
【文献】特開平11-085585(JP,A)
【文献】増永 良文 他,リレーショナルデータベース入門,第3版,日本,株式会社サイエンス社,2017年02月25日,pp.207-226,ISBN 978-4-7819-1390-2
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
13/10-13/14
16/00-16/958
(57)【特許請求の範囲】
【請求項1】
プロセッサと、
前記プロセッサから受信した検索キーに基づいて、前記検索キーに対応するバリューを検索するストレージデバイスと、
前記バリューを含むデータの位置情報を検索するために用いられる検索情報を記憶する第1のメモリと、
を具備し、
前記ストレージデバイスは、
前記データを記憶する不揮発性メモリと、
前記不揮発性メモリを制御するコントロール回路と、
前記コントロール回路により前記不揮発性メモリより高速にアクセス可能な第2のメモリと、
を具備し、
前記プロセッサは、前記検索キーと前記検索情報とに基づいて、前記位置情報を検索し、前記位置情報と前記検索キーとを前記コントロール回路へ送信し、
前記コントロール回路は、前記位置情報と前記検索キーとに基づいて、前記不揮発性メモリから前記データの少なくとも一部をリードし、前記データの少なくとも一部を前記第2のメモリに記憶させ、前記データの少なくとも一部の中から前記検索キーに対応する前記バリューを検索し、前記バリューを前記プロセッサへ送信する、
ストレージシステム。
【請求項2】
前記不揮発性メモリは、ルートノードと、前記ルートノードより下層の複数のブランチノードと、前記複数のブランチノードより下層の複数のリーフノードとを含む木構造を持つデータを記憶し、
前記ルートノードは、キーとブランチノードの位置情報とのペアを複数含み、
前記複数のブランチノードのそれぞれは、キーとリーフノードの位置情報とのペアを複数含み、
前記複数のリーフノードのそれぞれは、キーとバリューとのペアを複数含み、
前記検索情報は、前記ルートノードと前記複数のブランチノードの少なくとも一部とを含み、前記リーフノードを含まない、
請求項1のストレージシステム。
【請求項3】
前記コントロール回路は、前記検索キーに対応する前記バリュー、又は、前記データのうち前記バリューを含む部分に対して、エラー訂正と伸長とのうちの少なくとも一方を実行する、
請求項1又は請求項2のストレージシステム。
【請求項4】
前記データは、前記データに含まれている複数のキーを分解して得られる複数の要素に基づいて木構造を形成し、前記複数の要素に対して前記データに含まれている複数のバリューを関係付けたデータ構造を持ち、
前記コントロール回路は、前記検索キーに基づいて、前記データの少なくとも一部を探索し、前記検索キーに対応する前記バリューを検索する、
請求項1乃至請求項3のいずれか1項のストレージシステム。
【請求項5】
前記プロセッサと前記コントロール回路との間のデータ転送に用いられるデータ転送バスと、
前記コントロール回路と前記不揮発性メモリとの間のデータ転送に用いられる伝送路と、
をさらに具備し、
前記データ転送バスにおける前記データ転送で使用される帯域幅は、前記伝送路における前記データ転送で使用される帯域幅より狭い、
請求項1乃至請求項4のいずれか1項のストレージシステム。
【請求項6】
前記コントロール回路は、前記データの一部である第1の部分データを、前記不揮発性メモリから受信し、前記第1の部分データに前記検索キーが含まれていない場合に、前記データの一部であり前記第1の部分データとは異なる第2の部分データを受信する、請求項1乃至請求項5のいずれか1項のストレージシステム。
【請求項7】
前記コントロール回路は、前記第1の部分データに基づいて、前記データ内のどの位置にどのキーが配置されているかを推測可能であり、
前記コントロール回路は、前記第1の部分データに前記検索キーが含まれていない場合に、前記第1の部分データに基づいて、前記第2の部分データを求める、
請求項6のストレージシステム。
【請求項8】
前記コントロー
ル回路は、前記データの一部である部分データを前記不揮発性メモリからリードする場合に、部分データリードコマンドを、前記不揮発性メモリに送信し、
前記不揮発性メモリは、前記部分データリードコマンドを受信した場合に、前記不揮発性メモリに備えられているメモリチップからリードされた前記データのうちの前記部分データを、前記コントロー
ル回路へ送信する、
請求項6又は請求項7のストレージシステム。
【請求項9】
前記不揮発性メモリは、ルートノードと、前記ルートノードより下層の複数のブランチノードと、前記複数のブランチノードより下層の複数のリーフノードとを含む木構造を持つデータを記憶し、
前記ルートノードは、キーとブランチノードの位置情報とのペアを複数含み、
前記複数のブランチノードのそれぞれは、キーとリーフノードの位置情報とのペアを複数含み、
前記複数のリーフノードのそれぞれは、キーとバリューとのペアを複数含み、
前記プロセッサは、前記ストレージシステムの起動時に、前記ルートノードと前記複数のブランチノードとをリードするためのリードリクエストを前記ストレージデバイスへ送信し、
前記ストレージデバイスは、前記リードリクエストに対して、前記不揮発性メモリに記憶されている前記ルートノードと前記複数のブランチノードとをリードし、前記リードしたルートノードと前記リードした複数のブランチノードとを前記プロセッサへ送信し、
前記プロセッサは、前記ストレージデバイスから送信された前記ルートノードと前記複数のブランチノードとを前記検索情報として前記第1のメモリに記憶させる、
請求項1のストレージシステム。
【請求項10】
プロセッサと、第1のメモリと、不揮発性メモリ及び第2のメモリを備えるストレージデバイスと、を具備するストレージシステムの制御方法であって、
前記プロセッサにより検索キーを指定するリードリクエストを受信し、
前記プロセッサにより前記受信したリードリクエストで指定された前記検索キーと、前記第1のメモリに記憶されている検索情報とに基づいて、前記検索キーとバリューとのペアを含む第1のデータの前記不揮発性メモリにおける位置情報を検索し、
前記プロセッサにより前記位置情報と前記検索キーとを前記ストレージデバイスへ送信し、
前記ストレージデバイスにより前記位置情報と前記検索キーとに基づいて、前記不揮発性メモリから前記第1のデータの少なくとも一部である第2データをリードし、前記第2のデータを前記第2のメモリに記憶し、
前記ストレージデバイスにより前記第2のメモリに記憶された前記第2のデータから前記検索キーに対応する前記バリューを検索し、
前記ストレージデバイスにより前記検索されたバリューを前記プロセッサへ送信し、
前記プロセッサにより前記検索されたバリューを前記受信したリードリクエストに対する応答として送信する、
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、ストレージシステム及びその制御方法に関する。
【背景技術】
【0002】
データベースの構築に利用されるデータ管理方式の一例として、KVS(Key Value Store)方式が知られている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
本実施形態は、不揮発性メモリに記憶されているデータの中から所望のデータを高速に検索可能とすることを目的とする。
【課題を解決するための手段】
【0005】
本実施形態によれば、ストレージシステムは、プロセッサと、ストレージデバイスと、第1のメモリとを含む。ストレージデバイスは、プロセッサから受信した検索キーに基づいて、検索キーに対応するバリューを検索する。第1のメモリは、バリューを含むデータの位置情報を検索するために用いられる検索情報を記憶する。ストレージデバイスは、データを記憶する不揮発性メモリと、不揮発性メモリを制御するコントロール回路と、コントロール回路により不揮発性メモリより高速にアクセス可能な第2のメモリとを含む。プロセッサは、検索キーと検索情報とに基づいて、位置情報を検索し、位置情報と検索キーとをコントロール回路へ送信し、コントロール回路は、位置情報と検索キーとに基づいて、不揮発性メモリからデータの少なくとも一部をリードし、データの少なくとも一部を第2のメモリに記憶させ、データの少なくとも一部の中から検索キーに対応するバリューを検索し、バリューをプロセッサへ送信する。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態に係るストレージシステムの一例を示すブロック図。
【
図2】第1の実施形態に係るストレージシステムで管理される木構造を持つデータの一例を示すデータ構造図。
【
図3】第1の実施形態に係るストレージシステムの起動時の処理の一例を示すフローチャート。
【
図4】第1の実施形態に係るストレージシステムによって実行されるキーバリュー検索処理の一例を示すフローチャート。
【
図5】第1の実施形態に係る不揮発性メモリの構成の一例を示すブロック図。
【
図6】第1の実施形態に係るページデータのデータ構造におけるノードとノード番号との関係の表現例を示す図。
【
図7】第1の実施形態に係るページデータのデータ構造におけるノードとバリューとの関係の表現例を示す図。
【
図8】第1の実施形態に係るページデータのデータ構造における親子の関係を持つノードの表現例を示す図。
【
図9】第1の実施形態に係るページデータのデータ構造における兄弟の関係を持つノードの表現例を示す図。
【
図10】第1の実施形態に係るページデータの一例をグラフで表現したデータ構造図。
【
図11】第1の実施形態に係るページ内検索回路の処理の一例を示すフローチャート。
【
図12】第2の実施形態に係るストレージシステムの一例を示すブロック図。
【
図13】第2の実施形態に係るコントローラ回路と不揮発性メモリとにより実行される処理の一例を示すフローチャート。
【
図14】第2の実施形態に係る部分ページリード回路及び部分ページ内検索回路の処理の一例を示すフローチャート。
【発明を実施するための形態】
【0007】
まず、本実施形態の概要を説明する。
本実施形態に係るストレージシステムは、プロセッサと、メモリと、少なくとも1つのストレージデバイスとを備える。
【0008】
プロセッサは、メモリに対してストレージデバイスよりも高速にアクセス可能である。
【0009】
ストレージデバイスは、KVS方式ストレージシステムであり、コントロール回路と、不揮発性メモリと、バッファメモリとを備える。
【0010】
ストレージシステムは、データを不揮発性メモリとメモリとに分散配置する。具体的には、ストレージシステムは、各種のキーとバリューとのペアを含むデータを不揮発性メモリに記憶させる。さらに、ストレージシステムは、検索対象のキー(以下、検索キーと称する)と当該検索キーに対応するバリューとのペアを含むデータの位置情報を検索するために用いられる検索情報をメモリに記憶させる。
【0011】
プロセッサは、検索キーとメモリに記憶されている検索情報とに基づいて、不揮発性メモリにおける検索キーとバリューとのペアを含むデータの位置情報を検索する。
【0012】
コントロール回路は、プロセッサによって検索された位置情報に基づいて、不揮発性メモリから検索キーとバリューとのペアを含むデータの少なくとも一部をリードし、データの少なくとも一部をバッファメモリに記憶させる。
【0013】
そして、コントロール回路は、バッファメモリに記憶されているデータの少なくとも一部の中から検索キーに対応するバリューを検索し、検索されたバリューに対して各種の処理を実行し、バリューをプロセッサへ送信する。
【0014】
このように、本実施形態に係るストレージシステムは、検索キーに対応するバリューを検索するための処理をプロセッサとコントロール回路とに分散させることで、高速なデータ検索を実現し、高IOPS(Input/Output Per Second)を実現する。
【0015】
本実施形態に係るストレージシステムに備えられるストレージデバイスは、例えばSSD(Solid State Drive)などのメモリシステムであるとする。しかしながら、本実施形態に係るストレージシステムと同様の機能は、例えばHDD(Hard Disk Drive)、USB(Universal Serial Bus)メモリ、メモリカード、ハードディスクドライブとSSDとを含むハイブリッド型ストレージシステム、光ディスクデバイスなど様々な種類のストレージデバイスに適用可能である。
【0016】
本実施形態において、ストレージシステムは、KVS方式ストレージシステムである場合を例として説明する。しかしながら、例えば、保存したいデータに対して、当該データに対応する一意の標識を設定し、この保存したいデータと標識とをペアで記憶する他の様々なデータベースシステムに対して、本実施形態に係るストレージシステムと同様の構成及び機能を適用可能である。
【0017】
以下、図面を参照して、本実施形態について具体的に説明する。なお、以下の説明において、実質的に同一の構成要素及び機能については、同一符号を付し、必要に応じて説明を行う。以下の説明において、例として挙げる数値は好ましい数値であり、本実施形態はこれらの数値に制限されない。
【0018】
(第1の実施形態)
図1は、第1の実施形態に係るストレージシステム1の一例を示すブロック図である。
【0019】
ストレージシステム1は、例えば、リレーショナルデータベースシステムである。ストレージシステム1は、インタフェース部2と、プロセッサ3と、メモリ4と、データ転送バス5と、ストレージデバイスSD1~SDkとを備える。ストレージシステム1が備えるストレージデバイスの数は、1以上であればよい。
【0020】
ストレージデバイスSD1は、インタフェース回路6と、コントロール回路7と、伝送路8と、バッファメモリ9と、不揮発性メモリ10とを備える。
【0021】
インタフェース部2は、キーバリュー検索時に、例えばクライアント100などの外部装置から検索キーを含むリードリクエストを受信し、受信したリードリクエストをプロセッサ3へ送信する。
【0022】
プロセッサ3は、例えばCPU(Centrol Prosessing Unit)であるが、例えばマイクロプロセッサなどでもよい。プロセッサ3は、複数のストレージデバイスSD1~SDkを制御するコントローラとしてもよい。
【0023】
プロセッサ3は、ストレージシステム1の起動時に、不揮発性メモリ10から、伝送路8、コントロール回路7、インタフェース回路6、データ転送バス5経由で、KVSにしたがって管理される木構造のデータD中のルートノード及びブランチノード(すなわち、非リーフノード)をリードし、ルートノード及びブランチノードを含みリーフノードを含まない検索情報11をメモリ4に記憶させる。KVSの木構造のデータDに関しては
図2を用いて後で説明する。
【0024】
メモリ4は、プロセッサ3がストレージデバイスSD1よりも高速にアクセス可能なメモリであり、例えばDRAM(Dynamic Rondom Access Memory)又はSRAM(Static Rondom Access Memory)などであり、例えばメインメモリとして使用される。
【0025】
プロセッサ3は、キーバリュー検索時に、クライアント100からインタフェース部2経由で受信したリードリクエストに基づいてメモリ4の検索情報11を参照し、リードリクエストに含まれている検索キーと検索情報11とに基づいて、検索キーに対応するバリューを記憶しているページ(すなわち、リーフノード)の位置情報を検索する。そして、プロセッサ3は、検索されたページの位置情報と検索キーとを含むリードリクエストを、データ転送バス5経由でストレージデバイスSD1へ送信する。
【0026】
プロセッサ3は、キーバリュー検索の結果であるバリュー(検索キーに対応するデータ)を一時記憶するため内部メモリ12を備える。内部メモリ12は、例えばDRAM又はSRAMなどでもよい。
【0027】
プロセッサ3内に備えられる内部メモリ12は、例えば、プロセッサ3によりメインメモリとして利用されるメモリ4よりも高速にアクセス可能であり、低遅延であるとする。内部メモリ12は、例えば、メモリ4よりも広帯域の周波数で使用可能とする。
なお、メモリ4と内部メモリ12とは、1つのメモリに統合されてもよい。
【0028】
プロセッサ3は、送信したリードリクエストの応答でありストレージデバイスSD1からデータ転送バス5経由で受信したバリューを、内部メモリ12に記憶させる。より具体的には、ストレージデバイスSD1に備えられているデータ転送回路17が、ストレージデバイスSD1に備えられているバッファメモリ9に記憶されているバリューをプロセッサ3に備えられている内部メモリ12へ転送する。
【0029】
プロセッサ3の内部バス(図示せず)とデータ転送バス5との間の帯域幅は、データ転送バス5の帯域幅より広いとしてもよい。プロセッサ3の内部バスとデータ転送バス5との間のデータ転送速度は、例えば40ギガバイト/秒程度としてもよい。
【0030】
第1の実施形態において、データ転送バス5におけるデータ転送で使用される帯域幅は、コントロール回路7と不揮発性メモリ10との間の伝送路8におけるデータ転送で使用される帯域幅よりも狭い。データ転送バス5の帯域幅と伝送路8の帯域幅との比は、例えば1:8から1:800までのいずれかであるとし、例えば1:500程度であるとしてもよい。
【0031】
ストレージデバイスSD1のインタフェース回路6は、プロセッサ3からデータ転送バス5経由で受信したリードリクエストを、コントロール回路7へ送信する。
【0032】
コントロール回路7は、ストレージサブシステムであり、ページリード回路13と、ページ内検索回路14と、エラー訂正回路15と、伸長回路16と、データ転送回路17とを備える。コントロール回路7は、例えば、FPGA(Field Programmable Gate Array)でもよい。コントロール回路7におけるページリード回路13と、ページ内検索回路14と、エラー訂正回路15と、伸長回路16と、データ転送回路17とのうちの少なくとも1つの機能は、例えばファームウェアなどのソフトウェアを例えばプロセッサとして動作するコントロール回路7により実行することで実現してもよい。
【0033】
ページリード回路13は、インタフェース回路6によって受信されたリードリクエストに含まれているページの位置情報に基づいて、不揮発性メモリ10の当該位置情報の示す位置に記憶されているページ単位のデータ(以下、ページデータと称する)に対するリードコマンドを、不揮発性メモリ10へ送信し、リードコマンドに応じて不揮発性メモリ10からリードされたページデータP1をバッファメモリ9に記憶させる。第1の実施形態において、ページサイズは、例えば3.5~4.5キロバイトの間であり、例えばおよそ4キロバイト程度もしくはそれ以上としてもよい。
【0034】
ページ内検索回路14は、バッファメモリ9に記憶されているページデータP1の中から検索キーに対応するバリューを検索する。ここで、検索キーに対応するバリューは、リードされたページデータP1の一部分であるとする。このページ内検索回路14によってページデータP1内のバリューを検索する具体的な処理は、
図6乃至
図11を用いて後で説明する。
【0035】
エラー訂正回路15は、ページ内検索回路14によって検索されたバリューに対してエラー訂正処理を実行し、エラー訂正されたバリューをバッファメモリ9に記憶させる。なお、エラー訂正回路15は、ページデータP1の一部でありページ内検索回路14によって検索されたバリューを含む部分データに対してエラー訂正処理を実行し、エラー訂正されたバリューを含む部分データをバッファメモリ9に記憶させるとしてもよい。
【0036】
伸長回路16は、ページ内検索回路14によって検索され圧縮されているバリューを伸長し、伸長されたバリューをバッファメモリ9に記憶させる。なお、ページデータP1は、圧縮されている部分と圧縮されていない部分とを含むとしてもよく、この場合、伸長回路16は、圧縮されている部分に対して伸長を行い、圧縮されていない部分に対しては伸長を行わない。また、伸長回路16は、ページデータP1の一部でありページ内検索回路14によって検索された圧縮されているバリューを含む部分データを伸長し、伸長されたバリューを含む部分データをバッファメモリ9に記憶させるとしてもよい。
【0037】
エラー訂正回路15及び伸長回路16は、バッファメモリ9を作業用メモリとして用いてバリューに対する処理を実行してもよい。
【0038】
データ転送回路17は、リードリクエストの応答でありバッファメモリ9に記憶されているエラー訂正及び伸長されたバリューを、インタフェース回路6及びデータ転送バス5経由でプロセッサ3の内部メモリ12へ転送する。なお、データ転送回路17は、バッファメモリ9に記憶されている複数のバリューをまとめてプロセッサ3の内部メモリ12へ転送してもよい。これにより、ストレージデバイスSD1とプロセッサ3との間のデータ転送回数を削減することができ、ストレージデバイスSD1とプロセッサ3との間で所定のサイズのデータを効率的に転送させることができる。
【0039】
データ転送回路17は、例えばDMA(Direct Memory Access)転送を実現するDMAC(Direct Memory Access Controller)としてもよい。第1の実施形態において、データ転送回路17によってバッファメモリ9からインタフェース回路6及びデータ転送バス5経由で内部メモリ12へ転送されるデータのサイズは、例えば、ページデータP1より小さい512バイトに削減されるとする。また、データ転送回路17の性能は、例えば4メガIOPSであるとする。
【0040】
伝送路8は、コントロール回路7と不揮発性メモリ10との間をデータ転送可能に接続する。
【0041】
バッファメモリ9は、例えば、コントロール回路7が不揮発性メモリ10よりも高速にアクセス可能なメモリであり、例えばDRAM、SRAM、ラッチ回路、又は、レジスタなどで構成されてもよい。バッファメモリ9は、リードリクエストに応じて不揮発性メモリ10からリードされたページデータP1を一時的に記憶する。バッファメモリ9は、上記のように、バリューに対する各種処理の作業用メモリとして使用され得る。
【0042】
不揮発性メモリ10は、ルートノードと、ブランチノードと、リーフノードとを含むデータDを記憶する。不揮発性メモリ10に記憶されているルートノード及びブランチノードは、検索情報11として、ストレージシステム1の起動時に、例えば、伝送路8、コントロール回路7、インタフェース回路6、データ転送バス5、プロセッサ3経由で、メモリ4にキャッシュされてもよい。具体的には、不揮発性メモリ10に記憶されているルートノード及びブランチノードは、ストレージシステム1の起動時に、例えば、一旦バッファメモリ9に記憶され、このバッファメモリ9からデータ転送回路17により、インタフェース回路6、データ転送バス5経由で内部メモリ12へ転送されてもよい。
【0043】
不揮発性メモリ10は、例えばNAND型フラッシュメモリとするが、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phasechange Random Access Memory:相変化メモリ)、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)など他の不揮発性半導体メモリでもよい。不揮発性メモリ10は、1以上のメモリチップを含むとしてもよい。例えば、不揮発性メモリ10は、磁気メモリ、3次元構造の半導体メモリなどでもよい。また、不揮発性メモリ10に代えて、あるいは不揮発性メモリ10とともに、磁気ディスク、光ディスク、その他の記録媒体が用いられてもよい。
【0044】
不揮発性メモリ10に対するデータのリード及びライトは、ページと呼ばれる単位で実行され得る。不揮発性メモリ10に対するデータのイレーズは、ブロックと呼ばれる単位で実行され得る。ブロックの1単位は、複数のページを含む。不揮発性メモリ10に対するデータのリード及びライトが複数のページ単位で、イレーズが複数のブロック単位で、それぞれ実行されてもよい。
【0045】
第1の実施形態において、不揮発性メモリ10は、例えば、4~8メガIOPS、32ギガバイト/秒の性能を持ち、高IOPSであるとしてもよい。
【0046】
図2は、第1の実施形態に係るストレージシステム1で管理される木構造を持つデータDの一例を示すデータ構造図である。
【0047】
この
図2のデータDでは、キーと、ページ番号と、バリューとがB+木構造により管理されている。キーはK、ページ番号はP、バリューはVと表現されている。しかしながら、B+木構造に代えて、例えばB木構造、2分木構造、多分木構造などのような他のデータ構造が適用されてもよい。
【0048】
データDは、ルートノードN0と、ルートノードN0より下層の複数のブランチノードN1~N6と、複数のブランチノードN1~N6より下層の複数のリーフノードN7~N9とを含む木構造を持つ。木構造は、複数の階層を持つ。
図2の1つのノードは、ページデータに相当し、例えば、およそ4キロバイトのサイズとしてもよい。ページデータは、所定の範囲ごとにエラー訂正コードを含み、エラー訂正回路15は、ページデータ内の所定の範囲ごとにエラー訂正可能とする。
【0049】
データDにおいて、複数のキーはソートされており、同じページデータ内には、類似のキーが配置される。なお、第1の実施形態において、類似のキーとは、複数のキーの間で先頭部分の文字が共通することを意味している。複数のキーをソートした場合に、類似のキーは近い順番に位置する。
【0050】
ルートノードN0は、複数の階層のうちの最上層のノードであり、親ノードを持たず、子ノードを持つ。
【0051】
リーフノードN7~N9は、複数の階層のうちの最下層のノードであり、子ノードを持たず、親ノードを持つ。
【0052】
第1の実施形態において、データDは、ルートノードN0とリーフノードN7~N9との間に、1階層以上のブランチノードN1~N6を含む。
【0053】
なお、ルートノードとリーフノードとの間のブランチノードは省略されてもよい。この場合、ルートノードの子ノードがリーフノードとなり、リーフノードの親ノードがルートノードとなる。
【0054】
ルートノードN0は、キーとページ番号とのペアを複数含む。ルートノードN0に含まれている各ページ番号は、ルートノードN0の子ノードであるブランチノードN1~N3のページ位置を示す位置情報である。
【0055】
ブランチノードN1~N6のそれぞれは、キーとページ番号とのペアを複数含む。ブランチノードN1~N6に含まれている各ページ番号は、子ノードである他のブランチノード又はリーフノードのページ位置を示す位置情報である。
【0056】
リーフノードN7~N9のそれぞれは、キーとバリューとのペアを複数含む。
【0057】
第1の実施形態において、ストレージシステム1の起動時には、ルートノードN0からブランチノードN1~N6までが検索情報11としてメモリ4に記憶される。プロセッサ3は、キーバリュー検索時に、検索キーと検索情報11とに基づいて、検索キーを含むリーフノードの位置情報を検索する。
【0058】
第1の実施形態において、木構造のデータDのどの部分を検索情報11としてメモリ4に記憶させるかは適宜変更可能であるが、リーフノードN7~N9は検索情報11に含まれないとする。例えば、ルートノードとブランチノードの一部とが、検索情報11としてメモリ4に記憶されてもよい。
【0059】
第1の実施形態において、キーを可変長とし、バリューを固定長としてもよい。第1の実施形態において、キーを例えば平均32バイトとし、バリューを例えば64ビットとしてもよい。
【0060】
図3は、第1の実施形態に係るストレージシステム1の起動時の処理の一例を示すフローチャートである。
【0061】
ステップS301において、プロセッサ3は、不揮発性メモリ10に記憶されているデータDのうちのルートノード及びブランチノードを含み、リーフノードを含まない検索情報11のリードリクエストを、データ転送バス5経由でストレージデバイスSD1へ送信する。
【0062】
ステップS302において、ストレージデバイスSD1におけるページリード回路13は、プロセッサ3からデータ転送バス5及びインタフェース回路6経由で、リードリクエストを受信する。
【0063】
ステップS303において、ページリード回路13は、リードリクエストに基づいて、不揮発性メモリ10から伝送路8経由でルートノード及びブランチノードを含む検索情報11をリードし、検索情報11をバッファメモリ9に記憶させる。ルートノード及びブランチノードのそれぞれは、例えばページ単位でリードされる。
【0064】
ステップS304において、エラー訂正回路15は、バッファメモリ9に記憶されている検索情報11に対するエラー訂正を実行する。
【0065】
ステップS305において、伸長回路16は、バッファメモリ9に記憶されている圧縮されている検索情報11を伸長する。
【0066】
ステップS306において、データ転送回路17は、バッファメモリ9に記憶されておりエラー訂正及び伸長された検索情報11を、インタフェース回路6及びデータ転送バス5経由でプロセッサ3の内部メモリ12へ転送する。
【0067】
ステップS307において、プロセッサ3は、ストレージデバイスSD1からデータ転送バス5経由で検索情報11を受信し、検索情報11を内部メモリ12に記憶させる。
【0068】
ステップS308において、プロセッサ3は、内部メモリ12に記憶された検索情報11を、メモリ4に記憶させる。
【0069】
図4は、第1の実施形態に係るストレージシステム1によって実行されるキーバリュー検索処理の一例を示すフローチャートである。
【0070】
ステップS401において、プロセッサ3は、クライアント100からインタフェース部2経由で、検索キーを含むリードリクエストを受信する。
【0071】
ステップS402において、プロセッサ3は、メモリ4に記憶されている検索情報11を参照し、検索情報11とリードリクエストに含まれている検索キーとに基づいて、検索キーに対応するバリューを含むリーフノードの位置情報を検索する。
【0072】
ステップS403において、プロセッサ3は、検索された位置情報と検索キーとを含むリードリクエストを、データ転送バス5経由でストレージデバイスSD1へ送信する。
【0073】
ステップS404において、ストレージデバイスSD1におけるページリード回路13は、プロセッサ3からデータ転送バス5及びインタフェース回路6経由で、リードリクエストを受信する。
【0074】
ステップS405において、ページリード回路13は、リードリクエストに基づいて、リードコマンドを伝送路8経由で不揮発性メモリ10へ送信し、不揮発性メモリ10から伝送路8経由で検索キーと当該検索キーに対応するバリューとを含むページデータ(すなわちリーフノード)P1をリードし、リードしたページデータP1をバッファメモリ9に記憶させる。
【0075】
ステップS406において、ページ内検索回路14は、バッファメモリ9に記憶されているページデータP1の一部である検索キーに対応するバリューを検索し、検索されたバリューをバッファメモリ9に記憶させる。
【0076】
ステップS407において、エラー訂正回路15は、バッファメモリ9に記憶されているバリュー又はバリューを含む部分データに対するエラー訂正を実行する。
【0077】
ステップS408において、伸長回路16は、バッファメモリ9に記憶されている圧縮されているバリュー又はバリューを含む部分データを伸長する。
【0078】
ステップS409において、データ転送回路17は、バッファメモリ9に記憶されておりエラー訂正及び伸長されたバリューを、インタフェース回路6及びデータ転送バス5経由でプロセッサ3の内部メモリ12へ転送する。
【0079】
ステップS410において、プロセッサ3は、ストレージデバイスSD1からデータ転送バス5経由でバリューを受信し、受信したバリューを内部メモリ12に記憶させる。
【0080】
ステップS411において、プロセッサ3は、内部メモリ12に記憶されているバリューをインタフェース部2経由でクライアント100へ送信する。
【0081】
図5は、第1の実施形態に係る不揮発性メモリ10の構成の一例を示すブロック図である。
【0082】
第1の実施形態において、不揮発性メモリ10はNAND型フラッシュメモリを備える半導体記憶装置とする。
【0083】
不揮発性メモリ10は、例えば、入出力回路26と、レジスタセット18と、ロジックコントローラ19と、シーケンサ20と、レディ/ビジー制御回路21と、電圧生成回路22と、メモリセルアレイ23と、ロウデコーダモジュール24と、センスアンプモジュール25とを含む。
【0084】
入出力回路26は、例えば8ビット幅の入出力信号I/O1~I/O8を、伝送路8を介してコントロール回路7との間で送受信する。入出力信号は、データDAT、ステータス情報STS、アドレス情報ADD、コマンドCMD等を含み得る。また、入出力回路26は、センスアンプモジュール25との間でデータDATを送受信する。
【0085】
レジスタセット18は、例えば、ステータスレジスタ18A、アドレスレジスタ18B、及びコマンドレジスタ18Cを含む。ステータスレジスタ18A、アドレスレジスタ18B、及びコマンドレジスタ18Cは、それぞれステータス情報STS、アドレス情報ADD、及びコマンドCMDを記憶する。
【0086】
ステータス情報STSは、例えばシーケンサ20の動作状態に基づいて更新される。また、ステータス情報STSは、コントロール回路7からの指示に基づいてステータスレジスタ18Aから入出力回路26に転送され、コントロール回路7に出力される。アドレス情報ADDは、入出力回路26からアドレスレジスタ18Bに転送され、例えばチップアドレス、ブロックアドレス、ページアドレス、カラムアドレス等を含み得る。コマンドCMDは、入出力回路26からコマンドレジスタ18Cに転送され、不揮発性メモリ10の各種動作に関する命令を含む。
【0087】
ロジックコントローラ19は、コントロール回路7から受信した制御信号に基づいて、入出力回路26及びシーケンサ20のそれぞれを制御する。このような制御信号としては、例えばチップイネーブル信号CEn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトイネーブル信号WEn、リードイネーブル信号REn、及びライトプロテクト信号WPnが使用される。
【0088】
チップイネーブル信号CEnは、不揮発性メモリ10をイネーブルにするための信号である。コマンドラッチイネーブル信号CLEは、受け取った入出力信号がコマンドCMDであることを入出力回路26に通知するための信号である。アドレスラッチイネーブル信号ALEは、受け取った入出力信号がアドレス情報ADDであることを入出力回路26に通知するための信号である。ライトイネーブル信号WEnは、入出力信号の入力を入出力回路26に命令するための信号である。リードイネーブル信号REnは、入出力信号の出力を入出力回路26に命令するための信号である。ライトプロテクト信号WPnは、電源のオンオフ時に不揮発性メモリ10を保護状態にするための信号である。
【0089】
シーケンサ20は、不揮発性メモリ10全体の動作を制御する。例えば、シーケンサ20は、コマンドレジスタ18Cに保持されたコマンドCMDと、アドレスレジスタ18Bに保持されたアドレス情報ADDとに基づいて、リード処理、ライト処理、イレーズ処理等を実行する。
【0090】
レディ/ビジー制御回路21は、シーケンサ20の動作状態に基づいて、レディ/ビジー信号RBnを生成する。レディ/ビジー信号RBnは、不揮発性メモリ10がレディ状態であるかビジー状態であるかを、伝送路8経由でコントロール回路7に通知するための信号である。第1の実施形態において“レディ状態”は、不揮発性メモリ10がコントロール回路7からの命令を受け付ける状態であることを示し、“ビジー状態”は、不揮発性メモリ10がコントロール回路7からの命令を受け付けない状態であることを示す。
【0091】
電圧生成回路22は、リード処理、ライト処理、イレーズ処理等で使用される電圧を生成する。そして、電圧生成回路22は、生成した電圧をメモリセルアレイ23、ロウデコーダモジュール24、及びセンスアンプモジュール25に供給する。
【0092】
メモリセルアレイ23は、複数のブロックBLK0~BLKn(nは1以上の整数)を含む。ブロックは、データを不揮発に記憶することが可能な複数のメモリセルトランジスタの集合であり、例えばデータの消去単位として使用される。また、メモリセルアレイ23には、複数のビット線BL0~BLm(mは1以上の整数)と、複数のワード線WLと、ソース線CELSRCと、ウェル線とが設けられる。例えば、ソース線CELSRCには、電圧生成回路22によって電圧が印加される。各メモリセルトランジスタは、1本のビット線BLと1本のワード線WLとに関連付けられている。
【0093】
ロウデコーダモジュール24は、ブロックアドレスに基づいて、各種処理を実行するブロックを選択する。そして、ロウデコーダモジュール24は、電圧生成回路22から供給された電圧を、選択したブロック内の各種配線に転送する。また、ロウデコーダモジュール24は、例えば複数のロウデコーダRD0~RDnを含んでいる。ロウデコーダRD0~RDnは、それぞれブロックBLK0~BLKnに関連付けられている。
【0094】
センスアンプモジュール25は、リード処理において、メモリセルアレイ23からデータをリードし、当該リードデータを入出力回路26に転送する。また、センスアンプモジュール25は、ライト処理において、入出力回路26から受け取ったデータに基づいて、ビット線BLに所望の電圧を印加する。例えば、センスアンプモジュール25は、複数のセンスアンプユニットSAU0~SAUmを含む。センスアンプユニットSAU0~SAUmは、それぞれビット線BL0~BLmに関連付けられている。
【0095】
センスアンプユニットSAU0~SAUmのそれぞれは、例えばセンスアンプ部SA及びラッチ回路SDL,ADL,BDL,XDLを含む。
【0096】
以下では、説明を簡略化するため、センスアンプユニットSAU0を用いて説明を行う。しかしながら、センスアンプユニットSAU1~SAUmについてもセンスアンプユニットSAU0と同様である。
【0097】
センスアンプユニットSAU0のセンスアンプ部SAは、例えばリード処理において、対応するビット線BL0の電圧に基づいて、リードデータが“0”であるか“1”であるかを判断する。言い換えると、センスアンプ部SAは、対応するビット線BL0にリードされたデータをセンスして、選択されたメモリセルの記憶するデータを判断する。ラッチ回路SDL,ADL,BDL,XDLのそれぞれは、リードデータ及びライトデータ等を一時的に記憶する。ラッチ回路XDLは、センスアンプユニットSAU0と入出力回路26との間のデータDATの送受信に使用され得る。
【0098】
以下で、ページデータP1内におけるキーとバリューとのペアの関連付け方式の例を説明する。
【0099】
第1の実施形態において、キーは文字列であるとする。ページデータP1内では、文字列が複数の文字に分解され、各文字がノードとして管理される。ページデータP1内で、バリューは、ノードに関係付けられる。
【0100】
図6は、第1の実施形態に係るページデータP1のデータ構造におけるノードnとノード番号iとの関係の表現例を示す図である。
【0101】
この
図6で示されるノードnは、Xという文字を持つ。Xという文字は、キーの一部を構成する。ノードnには、ノード番号iが付されている。第1の実施形態において、処理get_node_char(i)は、ノード番号iを指定してノードnが持つ文字Xを取得するための処理であるとする。ページ内検索回路14は、処理get_node_char(i)を実行した場合に、ノード番号iのノードnが持つ文字Xを取得する。
【0102】
図7は、第1の実施形態に係るページデータP1のデータ構造におけるノードnとバリューVとの関係の表現例を示す図である。
【0103】
この
図7で示されるノードnには、ノード番号iが付されている。ノード番号iのノードnは、バリューVと関係付けられている。第1の実施形態において、処理get_node_value(i)は、ノード番号iを指定してノードnに関係付けられているバリューVを取得するための処理であるとする。ページ内検索回路14は、処理get_node_value(i)を実行した場合に、ノード番号iのノードnに関連付けられているバリューVを取得する。
【0104】
図8は、第1の実施形態に係るページデータP1のデータ構造における親子の関係を持つノードnp,ncの表現例を示す図である。
図8において、横方向の矢印の元にありノード番号iが付されているノードnpが親ノードである。横方向の矢印の先にありノード番号jが付されているノードncが子ノードである。第1の実施形態において、処理get_child_node(i)は、指定されたノード番号iのノードnpに対する子ノードncのノード番号jを取得するための処理であるとする。ページ内検索回路14は、処理get_child_node(i)を実行した場合に、ノード番号iのノードnpに対する子ノードncのノード番号jを取得する。
【0105】
図9は、第1の実施形態に係るページデータP1のデータ構造における兄弟の関係を持つノードnb1,nb2の表現例を示す図である。
図9において、縦方向の矢印の元にありノード番号iが付されているノードnb1が兄ノードである。縦方向の矢印の先にありノード番号jが付されているノードnb2が弟ノードである。第1の実施形態において、処理get_next_node(i)は、指定されたノード番号iのノードnb1に対する弟ノードnb2のノード番号jを取得するための処理であるとする。ページ内検索回路14は、処理get_next_node(i)を実行した場合に、ノード番号iのノードnb1に対する弟ノードnb2のノード番号jを取得する。
【0106】
図10は、第1の実施形態に係るページデータP1の一例をグラフで表現したデータ構造図である。
図10は、上記
図6乃至
図9で説明したノードの関係を用いて表現されている。
【0107】
ページデータP1は、ページデータP1に含まれている複数のキーを分解して得られる複数の要素に基づいて木構造を形成し、複数の要素に対してページデータP1に含まれている複数のバリューを関係付けたデータ構造を持つ。上記のように、
図10では、複数のキーは文字列であり、この文字列が文字に分解されている例を示している。
【0108】
ノードn0~n6のそれぞれには、ノード番号0~6が付されている。
【0109】
ノード番号0のノードn0は、キーの一部分に相当するAという文字を持つ。
【0110】
ノード番号1のノードn1は、ノード番号0のノードn0の子ノードである。ノード番号1のノードn1は、キーの一部分であるAという文字を持つ。このノードn1は、バリューV0と関係付けられている。
【0111】
ノード番号2のノードn2は、ノード番号1のノードn1の子ノードである。ノード番号2のノードn2は、キーの一部分であるAという文字を持つ。このノードn2は、バリューV1と関係付けられている。
【0112】
ノード番号3のノードn3は、ノード番号2のノードn2の弟ノードである。ノード番号3のノードn3は、キーの一部分であるBという文字を持つ。このノードn2は、バリューV2と関係付けられている。
【0113】
ノード番号4のノードn4は、ノード番号1のノードn1の弟ノードである。ノード番号4のノードn4は、キーの一部分であるBという文字を持つ。
【0114】
ノード番号5のノードn5は、ノード番号4のノードn4の子ノードである。ノード番号5のノードn5は、キーの一部分であるBという文字を持つ。このノードn5は、バリューV3と関係付けられている。
【0115】
ノード番号6のノードn6は、ノード番号5のノードn5の弟ノードである。ノード番号6のノードn6は、キーの一部分であるCという文字を持つ。このノードn6は、バリューV4と関係付けられている。
【0116】
ページ内検索回路14は、検索キーに基づいて
図10のようなデータ構造を持つページデータP1を探索することにより、キーAAに対応するバリューV0を取得可能であり、キーAAAに対応するバリューV1を取得可能であり、キーAABに対応するバリューV2を取得可能であり、キーABBに対応するバリューV3を取得可能であり、キーABCに対応するバリューV4を取得可能である。
【0117】
第1の実施形態において、B+木構造を構成するページデータP1は、ソートされた複数のキーの一部を含む。同じページデータP1内に含まれる複数のキーは類似な内容の順で配列される。ページデータP1内に含まれる複数のキーを、バイト単位の2分木で表現し、複数のキーの共通する部分を共有させてシリアル化することにより、1つのキーを表現するために必要となるデータサイズを、例えば8バイト程度に圧縮可能である。この場合、バリューを8バイトとすると、キーとバリューとのペアは16バイト程度となり、4キロバイトのページデータP1は、およそ256個程度のキーとバリューとのペアを格納することができる。そして、例えば、木構造を持つページデータP1の64バイト単位にエラー訂正コードを付与することで、ページデータP1のうち必要な部分のみをエラー訂正することができる。
【0118】
図11は、第1の実施形態に係るページ内検索回路14の処理の一例を示すフローチャートである。
【0119】
この
図11において、処理get_1st_char()は、検索キーの最初の文字を取得するための処理である。
【0120】
処理get_next_char()は、検索キーの次の文字を取得するための処理である。
【0121】
処理get_node_char(pos)は、先で説明したように、ノード番号posのノードが持つ文字を取得するための処理である。
【0122】
処理get_next_node(pos)は、先で説明したように、ノード番号posのノードに対する弟ノードのノード番号を取得するための処理である。
【0123】
処理get_child_node(pos)は、先で説明したように、ノード番号posのノードに対する子ノードのノード番号を取得するための処理である。
【0124】
処理get_node_value(pos)は、先で説明したように、ノード番号posのノードに関連付けられているバリューを取得するための処理である。
【0125】
ステップS1101において、ページ内検索回路14は、変数posに初期値ゼロを設定し、処理get_1st_char()を実行して得られた検索キーの最初の文字を変数c0に設定する。
【0126】
ステップS1102において、ページ内検索回路14は、処理get_node_char(pos)を実行して得られた文字を変数c1に設定する。
【0127】
ステップS1103において、ページ内検索回路14は、変数c0と変数c1とが同じか否かを判断する。
【0128】
ステップS1103において変数c0と変数c1とが同じではないと判断された場合、ステップS1104において、ページ内検索回路14は、処理get_next_node(pos)を実行して得られた文字を変数posに設定する。その後、処理は、ステップS1102に移動する。
【0129】
ステップS1103において変数c0と変数c1とが同じと判断された場合、ステップS1105において、ページ内検索回路14は、変数c0が検索キーの終端か否かを判断する。
【0130】
ステップS1105において変数c0が終端ではないと判断された場合、ステップS1106において、ページ内検索回路14は、処理get_child_node(pos)を実行して得られた文字を変数posに設定し、処理get_next_char()を実行して得られた検索キーの次の文字を変数C0に設定する。その後処理は、ステップS1102に移動する。
【0131】
ステップS1105において変数c0が終端であると判断された場合、ステップS1107において、ページ内検索回路14は、処理get_node_value(pos)を実行して得られたバリューを、検索キーに対応するバリューとして取得する。
【0132】
なお、ページ内検索回路14は、一致検索を行うとしてもよく、昇順・逆順走査による読み出しを行うとしてもよい。
【0133】
以上説明した第1の実施形態に係るストレージシステム1においては、検索キーを含むリーフノードの位置情報の検索をプロセッサ3により実行し、リーフノード内における検索キーに対応するバリューの検索をコントロール回路7により実行する。このように、検索をプロセッサ3とコントロール回路7とで分散し、検索を2段階で行うことにより、不揮発性メモリ10に記憶されている大量のデータDの中から所望のバリューを高速に検索することができる。
【0134】
第1の実施形態に係るストレージシステム1は、インデックステーブルを用いるリレーショナルデータベースなどに適用可能である。リレーショナルデータベースでは、例えば64ビットなどのような小さいサイズのバリューが利用される場合がある。第1の実施形態では、このようにバリューのサイズが比較的小さい場合に、数十メガIOPS以上の高い検索性能を実現することができる。
【0135】
第1の実施形態においては、キーバリュー検索時に、ルートノードとブランチノードとを含みリーフノードを含まない検索情報11がメモリ4に記憶される。このように、リーフノードがメモリ4に記憶されないことにより、メモリ4の使用量を削減することができる。例えば、比較例のデータベースシステムとして、キーバリュー検索時に、木構造のデータDに含まれるバリューが不揮発性メモリ10に記憶され、木構造のデータDのうちバリューを除く他のデータがメモリ4に記憶されるデータベースシステムを考える。この比較例のデータベースシステムでは、第1の実施形態に係るストレージシステム1よりも、メモリ4に記憶される検索情報の木構造の階層が1階層多くなる。メモリ4に記憶される検索情報が第1の実施形態よりも1階層多い比較例のデータベースシステムでは、第1の実施形態に係るストレージシステム1よりも、メモリ4に記憶される検索情報のデータ量が例えば100倍程度に増える場合がある。このように、第1の実施形態に係るストレージシステム1は、メモリ4の利用量を比較例のデータベースシステムのおよそ1/100とすることが可能になる。
【0136】
第1の実施形態においては、プロセッサ3よりも不揮発性メモリ10に近い位置に備えられたコントロール回路7が、ページデータP1内の検索キーに対応するバリューを検索するページ内検索回路14を備える。コントロール回路7のページ内検索回路14がページデータP1内の検索キーに対応するバリューを検索することによって、コントロール回路7のデータ転送回路17は、ページデータP1全体ではなく、検索されたバリューを含む必要なデータのみをバッファメモリ9からインタフェース回路6及びデータ転送バス5経由でプロセッサ3の内部メモリ12へ転送可能である。このため、不要なデータがプロセッサ3とストレージデバイスSD1との間で転送されることを防止することができ、プロセッサ3とストレージデバイスSD1との間のデータ転送で必要となる帯域幅及びデータ転送量を削減することができ、IOPSを向上させることができる。第1の実施形態においては、データ転送バス5のデータ転送速度を、例えば、16ギガバイト/秒(4メガIOPS×4キロバイト)から32メガバイト/秒(4メガIOPS×8バイト)に下げても、1つのストレージデバイスSD1あたり4メガIOPS以上のデータ転送が可能になる。
【0137】
第1の実施形態においては、プロセッサ3ではなくコントロール回路7により、不揮発性メモリ10からリードされたページデータP1の中から検索キーに対応するバリューが検索される。このように特定の処理をプロセッサ3ではないコントロール回路7で実行することにより、プロセッサ3の処理負荷を軽減させることができ、例えばIOPSなどのようなストレージシステム1全体の性能を向上させることができる。また、コントロール回路7により、ページデータP1の一部分であるバリューに対してエラー訂正及び伸長が実行されるため、ページデータP1全体に対してエラー訂正及び伸長を実行する場合よりも、エラー訂正及び伸長の処理負荷を軽減させることができ、コントロール回路7の電力効率を向上させることができる。なお、第1の実施形態において、コントロール回路7は、検索結果であるバリューを含むページデータP1の一部に対して、エラー訂正及び伸長を実行してもよく、この場合でも処理負荷を軽減させることができ、コントロール回路7の電力効率を向上させることができる。
【0138】
第1の実施形態においては、例えば、ページデータP1内でのバリューの検索、検索されたバリュー又はバリューを含む部分データに対するエラー訂正及び伸長などの処理をプロセッサ3よりも消費電力が小さいコントロール回路7で実行するため、ストレージシステム1の電力効率を向上させることができる。
【0139】
第1の実施形態において、不揮発性メモリ10は、例えば、10メガIOPS以上であり、ページサイズは4キロバイト程度であるとする。この場合、不揮発性メモリ10からリードされたページデータP1がそのままコントロール回路7からインタフェース回路6及びデータ転送バス5経由でプロセッサ3へ転送されると、プロセッサ3内の内部バスとデータ転送バス5との間のデータ転送が圧迫される場合がある。しかしながら、第1の実施形態においては、ページデータP1の一部分であり検索キーに対応するバリューが検索され、当該バリューがコントロール回路7からインタフェース回路6及びデータ転送バス5経由でプロセッサ3へ転送されるため、プロセッサ3内の内部バスとデータ転送バス5との間のデータ転送が圧迫されることを防止することができる。
【0140】
第1の実施形態に係るストレージシステム1が複数のストレージデバイスSD1~SDkを備えている場合、複数のストレージデバイスSD1~SDkのそれぞれに備えられているコントロール回路7が並列に上記の処理を実行可能である。このため、複数のストレージデバイスSD1~SDkの数が多くなっても、プロセッサ3の負荷増加を抑制することができる。
【0141】
第1の実施形態においては、バッファメモリ9に記憶されている複数のバリューをまとめてバッファメモリ9から、インタフェース回路6及びデータ転送バス5経由でプロセッサ3の内部メモリ12へ転送可能である。これにより、ストレージデバイスSD1とプロセッサ3との間のデータ転送回数を削減することができ、ストレージデバイスSD1とプロセッサ3との間で所定のサイズのデータを効率的に転送させることができる。
【0142】
第1の実施形態においては、ページデータP1内の複数のキーを2分木で表現し、シリアル化することにより、1つのキーを表現するために必要なデータサイズを圧縮可能であり、ページデータP1内により多くのキーとバリューとのペアを格納させることができる。
【0143】
(第2の実施形態)
第2の実施形態は、上記第1の実施形態の変形例である。
【0144】
図12は、第2の実施形態に係るストレージシステム1Aの構成の一例を示すブロック図である。
【0145】
ストレージシステム1Aは、ストレージデバイスSDA1~SDAkを備えるが、その他の構成要素は、上記第1の実施形態で説明したストレージシステム1と同様である。第2の実施形態では、ストレージデバイスSDA1を主に説明し、他のストレージデバイスSDA2~SDAkに関する説明は省略する。
【0146】
ストレージデバイスSDA1は、インタフェース回路6、コントロール回路7A、第1のバッファメモリ9A、複数の不揮発性メモリ10A1~10Anを備える。
【0147】
上記第1の実施形態では、不揮発性メモリ10から伝送路8経由でコントローラ回路7へページデータP1が転送され、ページデータP1がバッファメモリ9に記憶されている。
【0148】
これに対して、第2の実施形態では、ページデータP1の一部分である部分ページデータPP1,PP2が、不揮発性メモリ10A1から伝送路8経由でコントローラ回路7へ転送され、部分ページデータPP1,PP2が第1のバッファメモリ9Aに記憶される。
【0149】
まず、コントロール回路7Aを説明する。
【0150】
コントロール回路7Aは、部分ページリード回路13Aと部分ページ内検索回路14Aとを含む。さらに、コントロール回路7Aは、上記第1の実施形態で説明したエラー訂正回路15、伸長回路16、データ転送回路17を備えるが、
図12では簡略化のため省略している。
【0151】
コントロール回路7Aは、例えば、FPGAでもよい。コントロール回路7Aにおける部分ページリード回路13Aと、部分ページ内検索回路14Aとのうちの少なくとも1つの機能は、例えばファームウェアなどのソフトウェアを例えばプロセッサとして動作するコントロール回路7Aにより実行することで実現してもよい。
【0152】
部分ページリード回路13Aと部分ページ内検索回路14Aとのうちの少なくとも一部は、コントロール回路7Aと異なる構成要素により実現されてもよい。
【0153】
部分ページリード回路13Aは、インタフェース回路6によって受信されたリードリクエストに基づいて、リードリクエストに対応するページデータP1のうちの所定の部分である部分ページデータPP1をリードするための初期部分リードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信する。
【0154】
部分ページデータPP1は、ページデータP1の先頭部分のデータとしてもよく、他の部分のデータとしてもよい。第2の実施形態において、部分ページデータPP1は、木構造の一部であり、ページデータP1のどの位置にどのキーが配置されているかを推測可能な情報を含む。
【0155】
そして、部分ページリード回路13Aは、初期部分リードコマンドに応じて不揮発性メモリ10A1によって得られた部分ページデータPP1を受信し、受信した部分ページデータPP1を第1のバッファメモリ9Aに記憶させる。
【0156】
なお、部分ページリード回路13Aは、初期部分リードコマンドに代えてページデータP1に対するリードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信してもよい。この場合、不揮発性メモリ10A1は、受信したリードコマンドにしたがってページデータP1における部分ページデータPP1を、伝送路8経由でコントロール回路7Aへ送信する。そして、部分ページリード回路13Aは、リードコマンドに応じて不揮発性メモリ10A1から伝送路8経由で部分ページデータPP1を受信し、受信した部分ページデータPP1を第1のバッファメモリ9Aに記憶させる。
【0157】
部分ページ内検索回路14Aは、第1のバッファメモリ9Aに記憶されている部分ページデータPP1の中に検索キーが含まれているか否かを判断する。
【0158】
部分ページ内検索回路14Aは、部分ページデータPP1の中に検索キーが含まれている場合に、検索キーに対応するバリューを検索する。
【0159】
部分ページ内検索回路14Aは、部分ページデータPP1の中に検索キーが含まれていない場合、部分ページデータPP1に基づいて、ページデータP1のうち検索キーが含まれていると推測される部分ページデータPP2を求める。
【0160】
部分ページリード回路13Aは、部分ページデータPP2をリードするための部分リードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信する。
【0161】
そして、部分ページリード回路13Aは、部分リードコマンドに応じて不揮発性メモリ10A1から伝送路8経由で部分ページデータPP2を受信し、受信した部分ページデータPP2を第1のバッファメモリ9Aに記憶させる。
【0162】
部分ページ内検索回路14Aは、第1のバッファメモリ9Aに記憶されている部分ページデータPP2の中に検索キーが含まれているか否かを判断する。
【0163】
部分ページ内検索回路14Aは、部分ページデータPP2の中に検索キーが含まれている場合に、検索キーに対応するバリューを検索する。
【0164】
部分ページリード回路13A及び部分ページ内検索回路14Aは、検索キーを含む部分ページデータを不揮発性メモリ10A1から伝送路8経由で受信するまで、上記と同様の、部分リードコマンドの送信、部分リードコマンドに対応する部分ページデータの受信、部分ページデータに検索キーが含まれているか否かの判断、を繰り返す。
【0165】
コントロール回路7Aに備えられており
図12では省略されているデータ転送回路17は、検索キーに対応するバリューを、インタフェース回路6及びデータ転送バス5経由でプロセッサ3へ送信する。
【0166】
次に、不揮発性メモリ10A1を説明する。
【0167】
不揮発性メモリ10A1は、入出力回路26、第2のバッファメモリ27、シーケンサ20A、メモリチップCPを備える。なお、
図12において、不揮発性メモリ10A1の他の構成要素は、説明を簡略化するために省略しているが、上記
図5で説明した不揮発性メモリ10と同様の構成要素を適宜備えるとしてもよい。不揮発性メモリ10A1は、複数のメモリチップCPを備えるとしてもよい。1つのメモリチップCPは、上記
図5で説明したメモリセルアレイ23を1以上含むとしてもよい。不揮発性メモリ10A1は、1チップにより形成されてもよい。不揮発性メモリ10A1に備えられる入出力回路26、第2のバッファメモリ27、シーケンサ20A、メモリチップCPは、同一の半導体基板上に形成されてもよい。
【0168】
第2のバッファメモリ27は、上記
図5で説明したレジスタセット18、ラッチ回路SDL,ADL,BDL,XDLとしてもよい。
【0169】
シーケンサ20Aは、上記第1の実施形態で説明したシーケンサ20の機能を実行可能であり、さらに、部分ページ処理回路29を備える。
【0170】
部分ページ処理回路29は、シーケンサ20Aと異なる構成要素により実現されてもよく、例えばロジックコントローラ19などの他の構成要素に組み込まれていてもよい。
【0171】
部分ページ処理回路29は、コントロール回路7Aから伝送路8及び入出力回路26経由で初期部分リードコマンド又はリードコマンドを受信する。
【0172】
部分ページ処理回路29は、受信した初期部分リードコマンド又はリードコマンドに応じて、メモリチップCPから初期部分リードコマンド又はリードコマンドに対応するページデータP1をリードし、ページデータP1を第2のバッファメモリ27に記憶させる。
【0173】
そして、部分ページ処理回路29は、ページデータP1に含まれている部分ページデータPP1を、入出力回路26及びデータ転送バス8経由でコントロール回路7Aへ送信する。
【0174】
また、部分ページ処理回路29は、検索キーが含まれていると推測される部分ページデータPP2に対応する部分リードコマンドを、コントロール回路7Aから伝送路8及び入出力回路26経由で受信する。
【0175】
部分ページ処理回路29は、第2のバッファメモリ27に記憶されているページデータP1のうち、受信した部分リードコマンドに対応する部分ページデータPP2を、入出力回路26及びデータ転送バス8経由でコントロール回路7Aへ送信する。
【0176】
図13は、第2の実施形態に係るコントローラ回路7Aと不揮発性メモリ10A1とにより実行される処理の一例を示すフローチャートである。
【0177】
ステップS1301において、部分ページリード回路13Aは、リードリクエストを、プロセッサ3からデータ転送バス5及びインタフェース回路6経由で受信する。
【0178】
ステップS1302において、部分ページリード回路13Aは、受信されたリードリクエストに基づいて、リードリクエストに対応するページデータP1のうちの部分ページデータPP1をリードするための初期部分リードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信する。
【0179】
ステップS1303において、部分ページ処理回路29は、コントロール回路7Aから伝送路8及び入出力回路26経由で初期部分リードコマンドを受信する。
【0180】
ステップS1304において、部分ページ処理回路29は、受信した初期部分リードコマンドに応じて、メモリチップCPから初期部分リードコマンドに対応するページデータP1をリードし、リードしたページデータP1を第2のバッファメモリ27に記憶させる。
【0181】
ステップS1305において、部分ページ処理回路29は、ページデータP1に含まれている部分ページデータPP1を、入出力回路26及び伝送路8経由でコントロール回路7Aへ送信する。
【0182】
ステップS1306において、部分ページリード回路13Aは、不揮発性メモリ10A1から伝送路8経由で部分ページデータPP1を受信し、第1のバッファメモリ9Aに記憶させる。
【0183】
ステップS1307において、部分ページ内検索回路14Aは、第1のバッファメモリ9Aに記憶されている部分ページデータPP1の中の検索キーを検索する。
【0184】
ステップS1308において、部分ページ内検索回路14Aは、部分ページデータPP1の中に検索キーが含まれているか否かを判断する。
【0185】
部分ページデータPP1の中に検索キーが含まれていない場合、ステップS1309において、部分ページ内検索回路14Aは、部分ページデータPP1に基づいて、ページデータP1のうち検索キーが含まれていると推測される部分ページデータPP2を求める。
【0186】
ステップS1310において、部分ページ内検索回路14Aは、部分ページデータPP2をリードするための部分リードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信する。
【0187】
ステップS1311において、部分ページ処理回路29は、部分ページデータPP2をリードするための部分リードコマンドを、コントロール回路7Aから伝送路8及び入出力回路26経由で受信する。
【0188】
ステップS1312において、部分ページ処理回路29は、第2のバッファメモリ27に記憶されているページデータP1のうち、部分リードコマンドに対応する部分ページデータPP2を、入出力回路26及び伝送路8経由でコントロール回路7Aへ送信する。その後、処理は、ステップS1306へ移動し、部分ページデータPP2に対してステップS1306からステップS1308の処理が実行される。
【0189】
上記ステップS1308において、部分ページデータPP1又はPP2の中に検索キーが含まれていると判断された場合、ステップS1313において、部分ページ内検索回路14Aは、当該検索キーに対応するバリューを検索する。
【0190】
ステップS1314において、データ転送回路17は、検索キーに対応するバリューを、インタフェース回路6及びデータ転送バス5経由でプロセッサ3へ送信する。
【0191】
図14は、第2の実施形態に係る部分ページリード回路13A及び部分ページ内検索回路14Aの処理の一例を示すフローチャートである。
【0192】
ステップS1401は部分ページ内検索回路13Aによって実行され、その処理内容は上記ステップS1101と同様である。
【0193】
ステップS1402において、部分ページリード回路13Aは、変数posに対応するノードを含む部分ページデータが不揮発性メモリ10A1から伝送路8及びコントロール回路7A経由で第1のバッファメモリ9Aへ転送済みか否か判断する。
【0194】
ステップS1402で転送済みと判断された場合、処理は、ステップS1404へ移動する。
【0195】
ステップS1402で転送済みではないと判断された場合、ステップS1403において、部分ページリード回路13Aは、変数posに対応するノードを含む部分ページデータの部分ページリードコマンドを、伝送路8経由で不揮発性メモリ10A1へ送信する。そして、部分ページリード回路13Aは、部分ページリードコマンドの応答として、変数posに対応するノードを含む部分ページデータを、不揮発性メモリ10A1から伝送路8経由で受信し、受信した部分ページデータを第1のバッファメモリ9Aに記憶させる。
【0196】
ステップS1404からステップS1409は部分ページ内検索回路13Aによって実行され、その処理内容は上記ステップS1102からステップS1107と同様である。
【0197】
以上説明した第2の実施形態においては、不揮発性メモリ10A1から伝送路8経由でコントロール回路7Aへ部分ページデータPP1,PP2が送信される。これにより、第2の実施形態においては、上記第1の実施形態と比較して、伝送路8を用いて転送されるデータ量を削減することができ、伝送路8で使用可能な帯域幅が限られている場合であってもより多くのデータに対する検索を実行可能である。また、第2の実施形態においては、伝送路8の負荷を下げることにより消費電力を削減することができる。
【0198】
第2の実施形態においては、コントロール回路7A及び伝送路8に対して接続可能な不揮発性メモリ10A1~10Amの台数を増加させることができ、ストレージデバイスSDA1の記憶容量を大きくすることができる。
【0199】
(第3の実施形態)
第3の実施形態においては、上記第1の実施形態に係るストレージシステム1に適用される性能と、その性能によって得られる効果の例を説明する。
【0200】
ストレージシステム1は、例えば、不揮発性メモリ10からページデータがリードされる単位時間あたり(例えば秒)のデータ量が、データ転送バス5からプロセッサ3へ転送可能な単位時間あたりのデータ量の10%以上であるとする。
【0201】
この場合において、ストレージシステム1は、ストレージデバイスSD1からデータ転送バス5へ転送される単位時間あたりのデータ量を、不揮発性メモリ10からページデータがリードされる単位時間あたりのデータ量の1/16以下に削減可能である。
【0202】
例えば、不揮発性メモリ10からページデータがリードされる単位時間あたりのデータ量が、データ転送バス5からプロセッサ3へ転送可能な単位時間あたりのデータ量の10%以上の場合、リードされた全ページデータを、ストレージデバイスSD1からデータ転送バス5経由でプロセッサ3に送信すると、データ転送バス5に対する負荷がストレージシステム1の性能に与える影響が大きくなる。例えば、データ転送バス5に対して10台以上のストレージデバイスSD1~SDkが使用されると、データ転送バス5からプロセッサ3へ転送可能なデータ量の100%が不揮発性メモリ10からリードされることになり、データ量を削減することが必要になる場合がある。
【0203】
これに対して、ストレージシステム1は、データ転送バス5の負荷を下げることができ、ストレージシステム1の性能が低下することを防ぐことができる。また、ストレージシステム1においては、データ転送バス5のデータ転送量が削減されることにより、消費電力を削減することができる。
【0204】
なお、上記の第1の実施形態に係るストレージシステム1に対する性能の説明は、第2の実施形態に係るストレージシステム1Aに対しても同様である。
【0205】
(第4の実施形態)
第4の実施形態においては、上記第2の実施形態に係るストレージシステム1Aに適用される性能と、その性能によって得られる効果の例を説明する。
【0206】
ストレージシステム1Aは、例えば、不揮発性メモリ10からページデータがリードされる単位時間あたりのデータ量が、データ転送バス5からプロセッサ3へ転送可能な単位時間あたりのデータ量の10%以上であるとする。
【0207】
この場合において、ストレージシステム1Aは、不揮発性メモリ10A1においてリードされるページデータのデータ量に対して不揮発性メモリ10A1から伝送路8へ送出されるデータのデータ量を1/4以下に削減可能である。
【0208】
このようなストレージシステム1Aにおいては、上記第3の実施形態で説明したストレージシステム1と同様に、データ転送バス5の負荷を削減することができる。
【0209】
さらに、ストレージシステム1Aにおいては、伝送路8で使用される帯域幅が限られている場合であっても、多くのデータに対する検索を実行することができる。
【0210】
加えて、ストレージシステム1Aにおいては、伝送路8の負荷も削減することができ、消費電力を削減することができる。
【0211】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0212】
1,1A…ストレージシステム、2…インタフェース部、3…プロセッサ、4…メモリ、5…データ転送バス、SD1~SDk,SDA1~SDAk…ストレージデバイス、6…インタフェース回路、7,7A…コントロール回路、8…伝送路、9…バッファメモリ、10,10A1~10Am…不揮発性メモリ、11…検索情報、12…内部メモリ、13…ページリード回路、14…ページ内検索回路、15…エラー訂正回路、16…伸長回路、17…データ転送回路、P1…ページデータ、PP1,PP2…部分ページデータ、9A…第1のバッファメモリ、13A…部分ページリード部、14A…部分ページ内検索回路、20A…シーケンサ、27…第2のバッファメモリ、29…部分ページ処理回路。