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

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

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

<>
  • 特開-データ処理装置 図1
  • 特開-データ処理装置 図2
  • 特開-データ処理装置 図3
  • 特開-データ処理装置 図4
  • 特開-データ処理装置 図5
  • 特開-データ処理装置 図6
  • 特開-データ処理装置 図7
  • 特開-データ処理装置 図8
  • 特開-データ処理装置 図9
  • 特開-データ処理装置 図10
  • 特開-データ処理装置 図11
  • 特開-データ処理装置 図12
  • 特開-データ処理装置 図13
  • 特開-データ処理装置 図14
  • 特開-データ処理装置 図15
  • 特開-データ処理装置 図16
  • 特開-データ処理装置 図17
  • 特開-データ処理装置 図18
  • 特開-データ処理装置 図19
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022140245
(43)【公開日】2022-09-26
(54)【発明の名称】データ処理装置
(51)【国際特許分類】
   G06F 12/06 20060101AFI20220915BHJP
   G06F 12/00 20060101ALI20220915BHJP
【FI】
G06F12/06 550A
G06F12/00 597U
G06F12/06 515H
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2021150443
(22)【出願日】2021-09-15
(31)【優先権主張番号】P 2021040173
(32)【優先日】2021-03-12
(33)【優先権主張国・地域又は機関】JP
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】100108855
【弁理士】
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100103034
【弁理士】
【氏名又は名称】野河 信久
(74)【代理人】
【識別番号】100075672
【弁理士】
【氏名又は名称】峰 隆司
(74)【代理人】
【識別番号】100153051
【弁理士】
【氏名又は名称】河野 直樹
(74)【代理人】
【識別番号】100162570
【弁理士】
【氏名又は名称】金子 早苗
(72)【発明者】
【氏名】鈴木 智哉
(72)【発明者】
【氏名】檜田 和浩
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CA17
5B160MM01
(57)【要約】
【課題】処理能力を向上する。
【解決手段】実施形態によれば、データ処理装置は、第1不揮発性メモリ40を含む第1メモリシステム20_1と、第2不揮発性メモリ40を含む第2メモリシステム20_2と、第1及び第2メモリシステムを制御するホストデバイス10とを含む。第1メモリシステムは、ホストデバイスから受信した第1リクエストRQT1に基づいて第1不揮発性メモリに第1データDAT1の読み出し動作を実行させる第1回路303と、第1データに基づいて第2メモリシステムに対応する第1アクセス情報を算出可能な第2回路306と、第1アクセス情報に基づいて第2メモリシステムに第2データDAT2の読み出し動作を実行させる第2リクエストRQT2を生成する第3回路307とを更に含む。
【選択図】図3
【特許請求の範囲】
【請求項1】
第1不揮発性メモリを含む第1メモリシステムと、
第2不揮発性メモリを含む第2メモリシステムと、
前記第1及び第2メモリシステムを制御するホストデバイスと
を備え、前記第1メモリシステムは、
前記ホストデバイスから受信した第1リクエストに基づいて前記第1不揮発性メモリに第1データの読み出し動作を実行させる第1回路と、
前記第1データに基づいて前記第2メモリシステムに対応する第1アクセス情報を算出可能な第2回路と、
前記第1アクセス情報に基づいて前記第2メモリシステムに第2データの読み出し動作を実行させる第2リクエストを生成する第3回路と
を更に含む、データ処理装置。
【請求項2】
前記第2メモリシステムは、前記第2データを、前記第1メモリシステムを介さずに前記ホストデバイスに送信する、
請求項1に記載のデータ処理装置。
【請求項3】
前記第1リクエストは、前記ホストデバイスの第1アドレスを含み、
前記第2回路は、前記第1アドレスに基づいて、前記ホストデバイスの出力先アドレスとして第2アドレスを計算し、
前記第2リクエストは、前記第2アドレスを含む、
請求項2に記載のデータ処理装置。
【請求項4】
前記ホストデバイスは、メモリを含み、
前記メモリは前記第1メモリシステム及び前記第2メモリシステムから受信したコンプリーション情報をそれぞれ格納する第1コンプリーションキュー及び第2コンプリーションキューを含み、
前記第2メモリシステムは、前記第2リクエストに対応した第1コンプリーション情報を生成した後、前記第2コンプリーションキューに前記第1コンプリーション情報を送信する、
請求項2に記載のデータ処理装置。
【請求項5】
前記ホストデバイスは、メモリを含み、
前記メモリは、前記第1リクエストを格納するサブミッションエントリーと、前記サブミッションエントリーに対応するコンプリーションエントリーとを含み、
前記第2メモリシステムは、前記第2リクエストに対応した第1コンプリーション情報を生成した後、前記コンプリーションエントリーに前記第1コンプリーション情報を送信する、
請求項2に記載のデータ処理装置。
【請求項6】
前記第2メモリシステムは、前記第2リクエストに対応した第1コンプリーション情報を生成した後、前記第1メモリシステムに前記第1コンプリーション情報を送信し、
前記第1メモリシステムは、前記第1コンプリーション情報に基づいて、前記第1リクエストに対応した第2コンプリーション情報を生成した後、前記ホストデバイスに前記第2コンプリーション情報を送信する、
請求項2に記載のデータ処理装置。
【請求項7】
第3不揮発性メモリを含む第3メモリシステムを更に備え、
前記第1メモリシステムの前記第2回路は、前記第1データに基づいて前記第1アクセス情報と前記第3メモリシステムに対応する第2アクセス情報とを算出可能であり、
前記第1メモリシステムの前記第3回路は、前記第1アクセス情報に基づく前記第2リクエストと、前記第2アクセス情報に基づいて前記第3メモリシステムに第3データの読み出し動作を実行させる第3リクエストとを生成可能であり、
前記第2メモリシステムは、前記第2リクエストに対応した第1コンプリーション情報を生成した後、前記第1メモリシステムに前記第1コンプリーション情報を送信し、
前記第3メモリシステムは、前記第3リクエストに対応した第2コンプリーション情報を生成した後、前記第1メモリシステムに前記第2コンプリーション情報を送信し、
前記第1メモリシステムは、前記第1コンプリーション情報及び前記第2コンプリーション情報に基づいて、前記第1リクエストに対応した第3コンプリーション情報を生成した後、前記ホストデバイスに前記第3コンプリーション情報を送信する、
請求項2に記載のデータ処理装置。
【請求項8】
前記第1アクセス情報は、前記第2不揮発性メモリのアドレスを含む、
請求項2に記載のデータ処理装置。
【請求項9】
前記第2回路は、前記第1データ及び前記第1リクエストの少なくとも1つに基づいて、前記第2メモリシステムで実行する前記第2データの前記読み出し動作を決定し、及び前記第2データのデータサイズを算出する、
請求項1乃至8のいずれか一項に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、データ処理装置に関する。
【背景技術】
【0002】
複数のメモリシステムを有するデータ処理装置が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2018/0357018号明細書
【特許文献2】特開2018-41162号公報
【特許文献3】米国特許出願公開第2019/0278486号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
データ処理装置の処理能力を向上する。
【課題を解決するための手段】
【0005】
実施形態に係るデータ処理装置は、第1不揮発性メモリを含む第1メモリシステムと、第2不揮発性メモリを含む第2メモリシステムと、第1及び第2メモリシステムを制御するホストデバイスとを含む。第1メモリシステムは、ホストデバイスから受信した第1リクエストに基づいて第1不揮発性メモリに第1データの読み出し動作を実行させる第1回路と、第1データに基づいて第2メモリシステムに対応する第1アクセス情報を算出可能な第2回路と、第1アクセス情報に基づいて第2メモリシステムに第2データの読み出し動作を実行させる第2リクエストを生成する第3回路とを更に含む。
【図面の簡単な説明】
【0006】
図1図1は、第1実施形態に係るデータ処理装置のブロック図である。
図2図2は、第1実施形態に係るデータ処理装置における一段読み出し動作の一例を示す図である。
図3図3は、第1実施形態に係るデータ処理装置における多段読み出し動作の一例を示す図である。
図4図4は、第1実施形態に係るデータ処理装置における読み出し動作のフローチャートである。
図5図5は、第1実施形態に係るデータ処理装置における読み出し動作のフローチャートである。
図6図6は、第1実施形態に係るデータ処理装置における多段読み出し動作時のデータのフローチャートである
図7図7は、第2実施形態の第1例に係るデータ処理装置におけるリクエスト及びコンプリーション情報の流れを示す図である。
図8図8は、第2実施形態の第2例に係るデータ処理装置におけるリクエスト及びコンプリーション情報の流れを示す図である。
図9図9は、第2実施形態の第3例に係るデータ処理装置におけるリクエスト及びコンプリーション情報の流れを示す図である。
図10図10は、第3実施形態に係るデータ処理装置における読み出し動作のフローチャートである。
図11図11は、第3実施形態に係るデータ処理装置における読み出し動作のフローチャートである。
図12図12は、第4実施形態の第1例に係るデータ処理装置におけるKVSに対応する多段読み出し動作の一例を示す図である。
図13図13は、第4実施形態の第1例に係るデータ処理装置におけるKVSに対応するゲット動作の一例を示す図である。
図14図14は、第4実施形態の第2例に係るデータ処理装置におけるKVSに対応する多段読み出し動作の一例を示す図である。
図15図15は、第4実施形態の第2例に係るデータ処理装置におけるKVSに対応するゲット動作の一例を示す図である。
図16図16は、第4実施形態の第3例に係るデータ処理装置におけるKVSに対応する多段読み出し動作の一例を示す図である。
図17図17は、第4実施形態の第3例に係るデータ処理装置におけるKVSに対応するレンジ動作の一例を示す図である。
図18図18は、第4実施形態の第4例に係るデータ処理装置におけるKVSに対応する多段読み出し動作の一例を示す図である。
図19図19は、第4実施形態の第4例に係るデータ処理装置におけるKVSに対応するレンジ動作の一例を示す図である。
【発明を実施するための形態】
【0007】
以下に、実施形態について図面を参照して説明する。図面は模式的なものである。なお、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付す。参照符号を構成する文字の後の数字は、同じ文字を含んだ参照符号によって参照され、且つ同様の構成を有する要素同士を区別するために用いられている。同じ文字を含んだ参照符号で示される要素を相互に区別する必要がない場合、これらの要素は同じ文字のみを含んだ参照符号により参照される。
【0008】
各機能ブロックは、ハードウェア、コンピュータソフトウェア、のいずれかまたは両者の組み合わせとして実現することができる。このため、各ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実行されるか、またはソフトウェアとして実行されるかは、具体的な実施態様またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、種々の方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。
【0009】
1.第1実施形態
1.1 構成
まず、図1を参照して、データ処理装置1の構成を説明する。図1は、データ処理装置1の全体構成の一例を示すブロック図である。
【0010】
図1に示すように、データ処理装置1は、ホストデバイス10及び複数のメモリシステム20を含む。以下、複数のメモリシステム20のいずれか1つを限定する場合、第1メモリシステム20_1、第2メモリシステム20_2等と表記する。なお、本実施形態のデータ処理装置1は、2つ以上のメモリシステム20を含んでいればよい。また、複数のメモリシステム20は、同じ構成でもよいし、異なっていてもよい。本実施形態では、説明を簡略化するため、複数のメモリシステム20が同じ構成である場合について説明する。
【0011】
ホストデバイス10は、複数のメモリシステム20にアクセスする情報処理装置(コンピューティングデバイス)である。
【0012】
ホストデバイス10は、ホストCPU(Central Processing Unit)11及びメインメモリ12を含む。ホストCPU11及びメインメモリ12は、例えば内部バスにより互いに接続されている。
【0013】
ホストCPU11は、データ処理装置1の全体を制御する。より具体的には、例えば、ホストCPU11は、メモリシステム20におけるデータの書き込み動作及び読み出し動作、すなわちメモリシステム20へのデータの入出力を制御する。
【0014】
メインメモリ12は、ホストCPU11が、OS(Operating System)及びアプリケーションプログラム等を実行する際の作業領域として使用され得る。メインメモリ12は、サブミッションキューSQ及びコンプリーションキューCQを含む。
【0015】
サブミッションキューSQは、ホストCPU11がメモリシステム20に動作を要求(命令)する際に用いられる命令キューである。サブミッションキューSQには、ホストCPU11が発行したメモリシステム20へのデータの入出力動作の要求(以下、「リクエスト」と表記する)が格納される。サブミッションキューSQは、例えば複数のリクエストにそれぞれ対応する複数のエントリーを有する。例えば、メインメモリ12内には、複数のメモリシステム20に対応した複数のサブミッションキューSQが設けられる。
【0016】
コンプリーションキューCQは、ホストCPU11に、メモリシステム20が終了させたリクエストに関するステータス(以下、「コンプリーション情報」と表記する)を通知する際に用いられる応答キューである。コンプリーションキューCQは、例えば複数のリクエストにそれぞれ対応する複数のエントリーを有する。例えば、メインメモリ12内には、複数のメモリシステム20に対応した複数のコンプリーションキューCQが設けられる。
【0017】
例えば、メモリシステム20に読み出し動作を実行させる場合、まず、ホストCPU11は、読み出し動作のリクエストを生成する。そして、ホストCPU11は、動作を実行させるメモリシステム20に対応するサブミッションキューSQに、生成したリクエストを格納する。読み出し動作時のリクエストには、例えば、読み出し動作を指示するコマンド(以下、「リードコマンド」と表記する)、リクエスト(コマンド)を識別するためのリクエストID、アクセス先アドレス、及び出力先アドレス等にそれぞれ対応する複数のフィールドが含まれる。リクエストIDは、ホストCPU11が発行する複数のリクエストを区別する際に用いられ、例えば、サブミッションキューSQのエントリーの番号と対応していてもよい。アクセス先アドレスは、例えば、いずれか1つのメモリシステム20を指定するドライブ番号及び指定されたメモリシステム20内の不揮発性メモリ40のアドレス(例えば、論理ブロックアドレス)を含む。なお、アクセス先アドレスは、ドライブ番号を含んでいなくてもよい。出力先アドレスは、例えば、読み出されたデータを格納するメインメモリ12のアドレスである。メモリシステム20は、サブミッションキューSQからリクエストを取得し、読み出し動作を実行する。また、メモリシステム20は、読み出し動作実行後、コンプリーション情報を生成し、生成したコンプリーション情報をコンプリーションキューCQに格納する。ホストCPU11は、コンプリーションキューCQ内のコンプリーション情報を確認して、リクエストを終了させる。
【0018】
なお、本実施形態では、メインメモリ12がホストデバイス10内に設けられている場合について説明するが、これに限定されない。例えば、メインメモリ12は、単体のストレージデバイスとして、ホストバスに接続されていてもよい。更に、本実施形態ではメインメモリ12としてDRAM(Dynamic Random Access Memory)を用いる場合について説明するが、メインメモリ12は、DRAMに限定されない。例えば、SRAM(Static Random Access Memory)、MRAM(Magneto-resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、PRAM(Phase change Random Access Memory)、またはReRAM(Resistive Random Access Memory)等の他の記憶媒体が用いられてもよい。
【0019】
メモリシステム20は、例えば、不揮発性メモリを備えたSSD(Solid State Drive)である。メモリシステム20は、ホストバスを介してホストデバイス10に接続される。なお、メモリシステム20は、無線通信を介してホストデバイス10に接続されてもよい。
【0020】
ホストデバイス10と各メモリシステム20とを相互接続するための接続規格としては、SCSI(Small Computer System Interface)、SAS(Serial Attached SCSI)、ATA(Advanced Technology Attachment)、SATA(Serial ATA)、PCIe(Peripheral Component Interconnect Express)(登録商標)、Ethernet(登録商標)、Fibre channel等が使用され得る。本実施形態では、ホストデバイス10とメモリシステム20とを相互接続するための接続規格としてPCIeを適用し、通信プロトコルとしてNVMe(Non Volatile Memory Express)(登録商標)を適用する場合について説明する。
【0021】
メモリシステム20は、メモリコントローラ30及び不揮発性メモリ40を含む。
【0022】
メモリコントローラ30は、ホストデバイス10からリクエストを取得(受信)し、取得したリクエストに基づいて不揮発性メモリ40を制御する。具体的には、メモリコントローラ30は、リクエストに書き込み動作を指示するコマンド及び書き込みデータが含まれている場合、データを不揮発性メモリ40に書き込む。また、メモリコントローラ30は、リクエストにリードコマンドが含まれている場合、データを不揮発性メモリ40から読み出してホストデバイス10に送信する。
【0023】
また、メモリコントローラ30は、例えば、リクエストに基づいて読み出したデータから別のメモリシステム20のアクセス先アドレスを算出し、該当するメモリシステム20へのリクエストを生成する。
【0024】
メモリコントローラ30は、ホストインターフェース回路(I/F)301、コマンドパーサ302、読み出し実行回路303、メモリインターフェース回路(I/F)304、コンプリーション生成回路305、演算回路306、外部要求生成回路307、及びRAM(Random Access Memory)308を含む。ホストインターフェース回路(I/F)301、コマンドパーサ302、読み出し実行回路303、メモリインターフェース回路(I/F)304、コンプリーション生成回路305、演算回路306、外部要求生成回路307、及びRAM(Random Access Memory)308は、例えば、メモリバスを介して互いに接続されている。なお、メモリコントローラ30は、例えば、SoC(system on chip)であってもよい。メモリコントローラ30の各機能は専用回路で実現されてもよいし、プロセッサがファームウェアを実行することにより実現されてもよい。本実施形態では、メモリコントローラ30内に専用回路が設けられている場合について説明する。
【0025】
ホストインターフェース回路301は、ホストバスを介してホストデバイス10及び他のメモリシステム20と接続され、ホストデバイス10及び他のメモリシステム20との通信を司る。ホストインターフェース回路301は、図示せぬドアベルレジスタを含み得る。ドアベルレジスタは、ホストデバイス10及び他のメモリシステム20のサブミッションキューSQに対応したレジスタである。例えば、ドアベルレジスタに、ホストデバイス10から有効データが格納されると、ホストインターフェース回路301は、ホストデバイス10のサブミッションキューSQからリクエストを取得する。また、ホストインターフェース回路301は、不揮発性メモリ40から読み出したデータ及びコンプリーション生成回路305が生成したコンプリーション情報等をホストデバイス10に送信する。ホストインターフェース回路301は、メインメモリ12にデータ及びコンプリーション情報を格納したことを通知するため、ホストCPU11に割り込み情報を送信し得る。ホストCPU11は、例えば割り込み情報を受信すると、メモリシステム20のコンプリーションキューCQ内のコンプリーション情報を確認する。そして、ホストCPUは、コンプリーション情報に基づいて、対応するデータを使用する。
【0026】
コマンドパーサ302は、メモリシステム20が取得したリクエストに含まれるコマンドを解析する。コマンドパーサ302は、例えば解析したコマンドがリードコマンドである場合、読み出し実行回路303に、解析した結果を送信する。
【0027】
読み出し実行回路303は、例えばリクエストに含まれるコマンドがリードコマンドである場合、リクエストに含まれるアクセス先アドレスに基づいて、不揮発性メモリ40に、対応するデータの読み出し動作を命令する。
【0028】
メモリインターフェース回路304は、メモリコントローラ30と不揮発性メモリ40との間の通信を司る。より具体的には、メモリインターフェース回路304は、例えば、読み出し実行回路303からの命令を不揮発性メモリ40が認識可能な形態(制御信号)として送信する。メモリコントローラ30は、メモリインターフェース回路304を介して、不揮発性メモリ40とデータの送受信を行う。不揮発性メモリ40がNAND型フラッシュメモリである場合、メモリインターフェース回路304は、NANDフラッシュインターフェース回路である。
【0029】
コンプリーション生成回路305は、リクエストが終了した際に、コンプリーション情報を生成する。コンプリーション情報には、リクエストに対応する動作が正常に終了したか否か、あるいはどのリクエスト(コマンド及びリクエストID)に対応しているかといった情報が含まれる。なお、本実施形態のコンプリーション生成回路305は、同じメモリシステム20内の外部要求生成回路307が他のメモリシステム20へのリクエストを生成する場合、すなわち、ホストデバイス10が生成したリクエストに対応する動作が終了していない場合、コンプリーション情報を生成しない。
【0030】
演算回路306は、不揮発性メモリ40から読み出したデータを演算して、次のアクセスに対応するアクセス情報を算出する。例えば、アクセス情報は、アクセス先アドレス(ドライブ番号及び不揮発性メモリ40のアドレス)を含む。以下、アクセス情報としてアクセス先アドレスについて説明する。なお、アクセス先アドレスは、対応するメモリシステム20内の不揮発性メモリ40であってもよいし、他のメモリシステム20内の不揮発性メモリ40であってもよい。更には、メモリシステム20は、演算回路306による演算の結果、アクセス不要と判断する場合もある。なお、演算回路306は、ホストデバイス10から受信した出力先アドレスに基づいて異なる出力先アドレスを算出してもよい。
【0031】
例えば、アクセス情報(アクセス先アドレス)は、読み出しデータにそのまま書き込まれて(含まれて)いてもよし、対応するメモリシステム20における複数回の読み出し動作により読み出された複数のデータを演算した結果であってもよい。なお、複数回の読み出しデータを演算した結果に基づいて、再度対応するメモリシステム20のデータを読み出し、演算回路306は、その結果を用いて再度演算を行ってアクセス情報(アクセス先アドレス)を算出してもよい。また、アクセス情報(アクセス先アドレス)は、読み出したデータに、例えばリクエストから得られたオフセット値を加算して算出されてもよい。更に、アクセス情報(アクセス先アドレス)は、B-treeインデックスを探索した結果のノードに書き込まれていてもよい。より具体的には、不揮発性メモリ40内に、例えばツリー構造のデータが格納されているとする。この場合、まず、メモリコントローラ30は、このツリーを辿るための最初のデータを読み出す。なお、この最初のデータを読み出すために複数回の読み出し動作が実行されてもよい。演算回路306は、最初のデータを演算する。最初のデータの演算結果に基づいて、ツリーの次のデータが読み出される。メモリコントローラ30は、次のデータが対応するメモリシステム20内の不揮発性メモリ40にある場合は、読み出し動作を実行し、次のデータが他のメモリシステム20内の不揮発性メモリ40にある場合は、リクエストを生成する。そして、目的のデータに達するまで、次のデータの探索動作が繰り返される。B-treeインデックスの適用例としては、例えばKVS(Key-Value-Store)が想定される。この場合、ホストデバイス10が生成したリクエストには、Keyが含まれている。メモリシステム20は、そのKeyと一致するエントリーを、他も含めたメモリシステム20側から見つけ出して、そのエントリーに対応するValue(データ)をホストデバイス10に送信する。メモリシステム20が他のメモリシステム20にKeyと一致するエントリーを探索させる場合、アクセス情報には、Keyが含まれる。
【0032】
ドライブ番号は、読み出したデータにそのまま書き込まれていてもよい。また、ドライブ番号は、例えば各メモリシステム20の不揮発性メモリ40に、全メモリシステム20を識別可能な論理ブロックアドレスが割り振られている場合、当該論理ブロックアドレスから算出されてもよい。
【0033】
演算回路306は、対応するメモリシステム20からホストデバイス10にデータを送信する場合、または、他のメモリシステム20に読み出し動作をリクエストする場合、データサイズを算出してもよい。例えば、データサイズは、読み出したデータ及びリクエストの少なくとも1つを用いて算出され得る。更に、演算回路306は、他のメモリシステム20に実行させるリクエストの動作内容、すなわちコマンドを、読み出したデータ及びリクエストの少なくとも1つを用いて算出(決定)してもよい。
【0034】
外部要求生成回路307は、演算回路306による演算の結果、他のメモリシステム20へのアクセスが必要な場合、他のメモリシステム20へのリクエストを生成する。この場合のリクエストには、例えば、演算結果に基づくリードコマンド及び他のメモリシステム20のアクセス先アドレス、並びにホストデバイス10から取得したリクエストに付与されていたリクエストID及び出力先アドレス等が含まれる。外部要求生成回路307は、生成したリクエストをRAM308内のサブミッションキューSQに格納する。
【0035】
RAM308は、メモリシステム20内の外部要求生成回路307が生成したリクエストを格納するためのサブミッションキューSQを含む。RAM308は、例えば、DRAM、SRAM、MRAM、FeRAM、PRAM、またはReRAMであってもよい。なお、RAM308は、メモリコントローラ30の内部に設けられていてもよいし、メモリシステム20内において、メモリコントローラ30の外部に設けられていてもよいし、ホストバスに直接接続するように設けられていてもよい。
【0036】
例えば、メモリシステム20は、読み出し結果に基づいて他のメモリシステム20に読み出し動作を実行させる場合、生成したリクエストをRAM308のサブミッションキューSQに格納する。他のメモリシステム20は、リクエストを生成したメモリシステム20内のRAM308のサブミッションキューSQからリクエストを取得し、読み出し動作を実行する。
【0037】
不揮発性メモリ40は、例えば、複数のNAND型フラッシュメモリチップ(単にメモリチップとも記載する)41を含む。例えば、NAND型フラッシュメモリでは、一般に、ページと呼ばれるデータ単位で、書き込み動作及び読み出し動作が行われ、ブロックと呼ばれるデータ単位で消去動作が行われる。
【0038】
1.2 読み出し動作
次に、読み出し動作について説明する。本実施形態の読み出し動作は、一段読み出し動作及び多段読み出し動作を含む。
【0039】
一段読み出し動作は、ホストデバイス10が1つのメモリシステム20からデータを読み出す動作である。多段読み出し動作は、2つ以上のメモリシステム20を用いてデータを読み出す動作であり、メモリシステム20から読み出したデータによって他のメモリシステム20のアクセス先アドレスが決定される。
【0040】
1.2.1 一段読み出し動作
まず、図2を参照して、一段読み出し動作におけるデータ等の流れについて説明する。図2は、一段読み出し動作の一例を示す図である。
【0041】
図2に示すように、ホストデバイス10は、例えば、第1メモリシステム20_1からデータを読み出す場合、第1メモリシステム20_1に第1リクエストRQT1を送信する。すなわち、第1メモリシステム20_1は、メインメモリ12のサブミッションキューSQから第1リクエストRQT1を取得する。このとき、第1リクエストRQT1には、一段読み出し動作に対応するリードコマンドRD1、リクエストID、第1メモリシステム20_1に対応するアクセス先アドレスAAD1、及び出力先アドレスOADが含まれる。
【0042】
第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1に基づいて、不揮発性メモリ40に読み出し命令を送信し、不揮発性メモリ40のアクセス先アドレスAAD1に対応するページからデータDAT1を読み出す。メモリコントローラ30は、第1リクエストRQT1にリードコマンドRD1が含まれる場合、データDAT1の演算を行わずに、コンプリーション情報CPを生成する。メモリコントローラ30は、コンプリーション情報CPを生成した後、データDAT1とコンプリーション情報CPとをホストデバイス10のメインメモリ12に送信する。データDAT1は、メインメモリ12の出力先アドレスOADに格納される。コンプリーション情報CPは、メインメモリ12のコンプリーションキューCQに格納される。
【0043】
1.2.2 多段読み出し動作
次に、図3を参照して、多段読み出し動作におけるデータ等の流れについて説明する。図3は、多段読み出し動作の一例を示す図である。なお、図3の例は、説明を簡略化するために2段の読み出し動作を示しているが、3段以上の多段読み出し動作であってもよい。
【0044】
図3に示すように、ホストデバイス10は、第1メモリシステム20_1のデータDAT1を用いて第2メモリシステム20_2からデータDAT2を読み出す場合、まず第1メモリシステム20_1に第1リクエストRQT1を送信する。すなわち、第1メモリシステム20_1は、メインメモリ12のサブミッションキューSQから第1リクエストRQT1を取得する。このとき、第1リクエストRQT1には、多段読み出し動作に対応するリードコマンドSP_RD1、リクエストID、第1メモリシステム20_1に対応するアクセス先アドレスAAD1、及び出力先アドレスOADが含まれる。
【0045】
第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1に基づいて、不揮発性メモリ40に読み出し命令を送信し、不揮発性メモリ40のアクセス先アドレスAAD1に対応するページからデータDAT1を読み出す。メモリコントローラ30は、読み出したデータDAT1を用いて、第2メモリシステム20_2のアクセス先アドレスAAD2を算出する。そして、メモリコントローラ30は、第2メモリシステム20_2に読み出し動作を実行させるため、第2リクエストRQT2を生成する。このとき、第2リクエストRQT2には、多段読み出し動作に対応するリードコマンドSP_RD2、リクエストID、第2メモリシステム20_2に対応するアクセス先アドレスAAD2、及び出力先アドレスOADが含まれる。ここで、リクエストID及び出力先アドレスOADは、第1リクエストRQT1と同じである。なお、第2リクエストRQT2の出力先アドレスOADは、第1リクエストRQT1に含まれる出力先アドレスOADに基づいて、演算回路306または外部要求生成回路307により算出されてもよい。メモリコントローラ30は、RAM308内のサブミッションキューSQに、生成した第2リクエストRQT2を格納する。なお、メモリコントローラ30は、多段読み出し動作に対応するリードコマンドSP_RD2を発行する代わりに、一段読み出し動作に対応するリードコマンドRD2を発行してもよい。この場合、第2メモリシステム20_2は、リードコマンドRD2に基づいて一段読み出し動作を実行し、第2メモリシステム20_2内の演算回路306による演算処理を省略できる。
【0046】
第2メモリシステム20_2は、第1メモリシステム20_1のRAM308(サブミッションキューSQ)から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、第2リクエストRQT2に基づいて、不揮発性メモリ40に読み出し命令を送信し、不揮発性メモリ40のアクセス先アドレスAAD2に対応するページからデータDAT2を読み出す。図3の例では、第2メモリシステム20_2のメモリコントローラ30は、例えば、データDAT2を演算した結果、他のメモリシステム20へのリクエストRQTの生成は不要と判断し、コンプリーション情報CPを生成する。第2メモリシステム20_2のメモリコントローラ30は、コンプリーション情報CPを生成した後、読み出したデータDAT2とコンプリーション情報CPとをホストデバイス10に送信する。データDAT2は、メインメモリ12の出力先アドレスOADに格納される。コンプリーション情報CPは、メインメモリ12のコンプリーションキューCQに格納される。従って、多段読み出し動作の場合、ホストデバイス10がリクエストを送信したメモリシステム20と、ホストデバイス10がコンプリーション情報CPを受信したメモリシステム20とが異なる。
【0047】
なお、第2メモリシステム20_2のメモリコントローラ30は、データDAT2を演算して、他のメモリシステム20に更にリクエストを実行させるか否かを選択してもよい。すなわち、第2メモリシステム20_2は、3段目の多段読み出し動作の有無を判断する。他のメモリシステム20にリクエストを実行させる場合、第2メモリシステム20_2のメモリコントローラ30は、第1メモリシステム20_1のメモリコントローラ30と同様に、コンプリーション情報CPを生成せずにリクエスト(第3リクエスト)を生成する。第3リクエストには、第2リクエストRQT2と同様に、リクエストID及び出力先アドレスOADが含まれる。3段目以降の多段読み出し動作も同様の処理を繰り返す。
【0048】
図2及び図3の例では、一段読み出し動作と多段読み出し動作とリードコマンドが異なる場合について説明したが、これに限定されない。例えば、第1リクエストRQT1に含まれるリードコマンドは、一段読み出し動作と多段用出し動作とで同じであってもよい。この場合、第1メモリシステム20_1は、読み出したデータDAT1を演算した結果から、一段読み出し動作または多段読み出し動作を選択してもよい。
【0049】
1.2.3 読み出し動作の流れ
次に、図4及び図5を参照して、読み出し動作の流れの一例について説明する。図4及び図5は、読み出し動作のフローチャートである。なお、図4及び図5の例では、一段読み出し動作と多段読み出し動作とでリードコマンドが異なる。更に、多段読み出し動作の場合、説明を簡略化するため、2段の読み出し動作を示している。より具体的には、ホストデバイス10は、第1メモリシステム20_1のデータDAT1を用いて第2メモリシステム20_2のデータDAT2を読み出す場合を示している。
【0050】
図4に示すように、まず、ホストデバイス10のホストCPU11は、第1リクエストRQT1を生成し、メインメモリ12のサブミッションキューSQに、第1リクエストRQT1を格納する(ステップS1)。
【0051】
ホストCPU11は、サブミッションキューSQに第1リクエストRQT1を格納したことを第1メモリシステム20_1のドアベルレジスタに通知する(ステップS2)。すなわち、ホストCPU11は、第1メモリシステム20_1のドアベルレジスタに有効データを送信する。
【0052】
第1メモリシステム20_1のホストインターフェース回路301は、ドアベルレジスタにホストデバイス10から受信した有効データが格納されると、ホストデバイス10のメインメモリ12のサブミッションキューSQから第1リクエストRQT1を取得する(ステップS3)。
【0053】
第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1のリードコマンド(リードコマンドRD1またはリードコマンドSP_RD1コマンド)及びアクセス先アドレスAAD1に基づいて、不揮発性メモリ40からデータDAT1を読み出す(ステップS4)。より具体的には、コマンドパーサ302は、第1リクエストRQT1のコマンドを解析する。読み出し実行回路303は、コマンドの解析結果に基づいて、不揮発性メモリ40にデータの読み出しを命令する。
【0054】
第1リクエストRQT1に含まれているコマンドが、リードコマンドRD1である場合、すなわち、リードコマンドSP_RD1ではない場合(ステップS5_No)、一段読み出し動作が選択されているため、演算回路306は、データDAT1を用いた演算を実行しない。コンプリーション生成回路305は、コンプリーション情報CPを生成する(ステップS6)。第1メモリシステム20_1は、ホストデバイス10のメインメモリ12にデータDAT1とコンプリーション情報CPとを送信する(ステップS7)。メインメモリ12の出力先アドレスOADにデータDAT1が格納され、メインメモリ12のコンプリーションキューCQにコンプリーション情報CPが格納される。
【0055】
他方で、第1リクエストRQT1に含まれているコマンドが、リードコマンドSP_RD1である場合(ステップS5_Yes)、読み出し実行回路303により多段読み出し動作が選択されている。演算回路306は、データDAT1を用いて次のアクセス先アドレスAAD2の演算を実行する(ステップS8)。
【0056】
第1リクエストRQT1または演算回路306がデータDAT1を演算した結果に基づいてホストデバイス10にデータDAT1を送信する場合(ステップS9_Yes)、第1メモリシステム20_1は、ホストデバイス10のメインメモリ12に、データDAT1の少なくとも一部を送信する(ステップS10)。例えば、ホストデバイス10が読み出したいデータが、第1メモリシステム20_1と第2メモリシステム20_2とに分割されて格納されている場合、例えば演算回路306により算出されたデータサイズのデータDAT1がメインメモリ12に送信される。
【0057】
ホストデバイス10にデータDAT1を送信しない場合(ステップS9_No)、またはステップS10実行後、外部要求生成回路307は、第2リクエストRQT2を生成する(ステップS11)。生成された第2リクエストRQT2は、第1メモリシステム20_1のRAM308のサブミッションキューSQに格納される(ステップS12)。なお、本実施形態では、第1メモリシステム20_1のRAM308に第2リクエストRQT2を格納する場合について説明するが、これに限定されない。例えば、次のアクセス先のメモリシステム20、すなわち第2メモリシステム20_2のRAM308のサブミッションキューSQに第2リクエストRQT2が格納されてもよいし、ホストデバイス10のメインメモリ12のサブミッションキューSQに第2リクエストRQT2が格納されてもよい。
【0058】
図5に示すように、第1メモリシステム20_1は、サブミッションキューSQに第2リクエストRQT2を格納したことを第2メモリシステム20_2のドアベルレジスタに通知する(ステップS13)。すなわち、第1メモリシステム20_1は、第2メモリシステム20_2のドアベルレジスタに有効データを送信する。
【0059】
第2メモリシステム20_2のホストインターフェース回路301は、ドアベルレジスタに第1メモリシステム20_1から受信した有効データが格納されると、第1メモリシステム20_1のRAM308のサブミッションキューSQから第2リクエストRQT2を取得する(ステップS14)。
【0060】
第2メモリシステム20_2のメモリコントローラ30は、第2リクエストRQT2のリードコマンドSP_RD2及びアクセス先アドレスAAD2に基づいて、不揮発性メモリ40からデータDAT2を読み出す(ステップS15)。より具体的には、コマンドパーサ302は、第2リクエストRQT2のコマンドを解析する。読み出し実行回路303は、コマンドの解析結果に基づいて、不揮発性メモリ40にデータDAT2の読み出し動作を命令する。
【0061】
次に、第2メモリシステム20_2のコンプリーション生成回路305は、コンプリーション情報CPを生成する(ステップS16)。
【0062】
第2メモリシステム20_2は、リクエストID及び出力先アドレスOADに基づいてホストデバイス10のメインメモリ12にデータDAT2とコンプリーション情報CPを送信する(ステップS17)。メインメモリ12の出力先アドレスOADにデータDAT2が格納され、メインメモリ12のコンプリーションキューCQにコンプリーション情報CPが格納される。
【0063】
ステップS7またはステップS17終了後、すなわち、一段読み出し動作または多段読み出し動作において、メインメモリ12のコンプリーションキューCQにコンプリーション情報CPが格納された後、コンプリーション情報CPを作成したメモリシステム20は、ホストデバイス10に割り込み情報を通知する(ステップS18)。
【0064】
ホストCPU11は、割り込み情報に基づいて、コンプリーション情報CPを確認する。そして、ホストCPU11は、コンプリーション情報CPに基づいてデータ(DAT1及びDAT2の少なくとも1つ)を使用して、第1リクエストRQT1を終了させる(ステップS19)。
【0065】
なお、本実施形態では、メモリシステム20がホストデバイス10に割り込み情報を通知する場合について説明したが、これに限定されない。ホストCPU11は、コンプリーションキューCQを定期的に監視しているため、割り込み情報の通知がなくても、第1リクエストRQT1の終了を確認し得る。
【0066】
1.2.4 多段読み出し動作におけるコマンド及びデータの流れ
次に、図6を参照して、多段読み出し動作におけるコマンド及びデータの流れについて説明する。図6は、多段読み出し動作におけるコマンド及びデータ等の流れの一例を示す図である。なお、図6における括弧内のステップ番号は、図4及び図5のフローチャートに対応している。
【0067】
図6に示すように、ホストCPU11は、多段読み出し動作を指示するリードコマンドSP_RD1を発行し、メインメモリ12のサブミッションキューSQにリードコマンドSP_RD1(第1リクエストRQT1)を格納する(ステップS1)。そして、ホストCPU11は、第1メモリシステム20_1のドアベルレジスタに、リードコマンドSP_RD1を格納したことを通知する(ステップS2)。
【0068】
第1メモリシステム20_1は、ドアベルレジスタに通知を受けると、メインメモリ12のサブミッションキューSQからリードコマンドSP_RD1(第1リクエストRQT1)を取得する(ステップS3)。第1メモリシステム20_1は、リードコマンドSP_RD1に基づいて内部の不揮発性メモリ40からデータDAT1を読み出す(ステップS4)。第1メモリシステム20_1は、データDAT1を用いて次のアクセス先アドレスAAD2を算出する(ステップS8)。第1メモリシステム20_1は、第1リクエストRQT1に基づいてデータDAT1をメインメモリ12に送信することもある(ステップS10)。第1メモリシステム20_1は、次のアクセス先アドレスAAD2に基づいて、リードコマンドSP_RD2(第2リクエストRQT2)を生成する(ステップS11)。第1メモリシステム20_1は、第1メモリシステム20_1のRAM308のサブミッションキューSQに、リードコマンドSP_RD2(第2リクエストRQT2)を格納する(ステップS12)。そして、第1メモリシステム20_1は、第2メモリシステム20_2のドアベルレジスタに、リードコマンドSP_RD2を格納したことを通知する(ステップS13)。
【0069】
第2メモリシステム20_2は、ドアベルレジスタに通知を受けると、第1メモリシステム20_1のRAM308(サブミッションキューSQ)からリードコマンドSP_RD2(第2リクエストRQT2)を取得する(ステップS14)。第2メモリシステム20_2は、リードコマンドSP_RD2に基づいて内部の不揮発性メモリ40からデータDAT2を読み出す(ステップS15)。次に、第2メモリシステム20_2は、コンプリーション情報CPを生成する(ステップS16)。そして、第2メモリシステム20_2は、データDAT2及びコンプリーション情報CPをメインメモリ12に送信する(ステップS17)。コンプリーション情報CPは、メインメモリ12のコンプリーションキューCQに格納される。第2メモリシステム20_2は、ホストCPU11に、割り込み情報を通知する(ステップS18)。
【0070】
1.3 本実施形態に係る効果
本実施形態に係る構成であれば、処理能力を向上できるデータ処理装置を提供できる。本効果につき、詳述する。
【0071】
例えば、複数のメモリシステムを有するデータ処理装置では、データDAT2を読み出す際に、第1メモリシステムに格納されているデータDAT1を用いてアクセス先アドレスAAD2を算出し、当該アクセス先アドレスAAD2に対応する第2メモリシステムからデータDAT2を読み出す場合がある。このような場合、ホストデバイスのホストCPUは、第1メモリシステムへの第1リクエストRQT1の生成、第1メモリシステムから受信したデータDAT1を用いたアクセス先アドレスAAD2の算出、及び第2メモリシステムへの第2リクエストRQT2の生成を実行する。このため、ホストデバイスとメモリシステムとを接続するホストバスは、第1リクエストRQT1、第1データDAT1、第2リクエストRQT2、並びに第2データDAT2及びコンプリーション情報CPの送受信に利用される。
【0072】
これに対し、本実施形態に係る構成であれば、データ処理装置1のメモリシステム20は、演算回路306、外部要求生成回路307、及びRAM308(サブミッションキューSQ)を備える。例えば、第1メモリシステム20_1は、内部に有する不揮発性メモリ40から読み出したデータDAT1を用いて、第2メモリシステム20_2のアクセス先アドレスAAD2を算出し、第2メモリシステム20_2への第2リクエストRQT2を生成できる。そして、第1メモリシステム20_1は、生成した第2リクエストRQT2を内部のサブミッションキューSQに格納できる。すなわち、メモリシステム20がホストデバイス10を介さずに、他のメモリシステム20に動作の実行をリクエストできる。これにより、ホストCPU11は、データDAT1を用いたアクセス先アドレスAAD2の算出及び第2リクエストRQT2の生成をメモリシステム20にオフロードできる。従って、ホストCPUから見たレイテンシを削減でき、ホストCPU11のリソースの使用を削減できる。
【0073】
また、第1メモリシステム20_1は、第2リクエストRQT2に、ホストデバイス10が発行したリクエストID及び出力先アドレスOADを含めることができる。このため、第2メモリシステム20_2は、第1メモリシステム20_1を介さずに、ホストデバイス10に、データDAT2及びコンプリーション情報CPを直接送信できる。従って、ホストデバイス10とメモリシステム20との間で送受信されるリクエスト及びデータを削減できるため、ホストCPU11とメモリシステム20とを接続するホストバスにおけるデータ送信の帯域幅が削減できる。よって、データ処理装置1の処理能力を向上できる。
【0074】
2.第2実施形態
次に、第2実施形態について説明する。第2実施形態では、多段読み出し動作におけるコンプリーション情報CPの送信方法について3つの例を示す。以下、第1実施形態と異なる点を中心に説明する。
【0075】
2.1 第1例
まず、第1例について説明する。第1例では、メインメモリ12がメモリシステム20の各々に対応する複数のコンプリーションキューCQを有している。そして、ホストデバイス10が発行した第1リクエストRQT1に対して、複数のメモリシステム20のいずれか1つが対応するコンプリーションキューCQにコンプリーション情報CPを格納する場合について説明する。図7は、ホストデバイス10とメモリシステム20との間のリクエストRQT及びコンプリーション情報CPの流れの一例を示す図である。図7の例では、データ処理装置1は、n個(nは3以上の整数)のメモリシステム20を含む。以下、それぞれを第1メモリシステム20_1、第2メモリシステム20_2、…、第nメモリシステム20_nと表記する。また、第1メモリシステム20_1~第nメモリシステム20_nに対応するサブミッションキューをSQ1~SQnと表記し、コンプリーションキューをCQ1~CQnとそれぞれ表記する。
【0076】
図7に示すように、本例のホストデバイス10のメインメモリ12は、第1メモリシステム20_1に対応するサブミッションキューSQ1、第1メモリシステム20_1~第nメモリシステム20_nに対応するコンプリーションキューCQ1~CQnを含む。また、第1メモリシステム20_1のRAM308は、他の第2メモリシステム20_2~第nメモリシステム20_nに対応するサブミッションキューSQ2~SQnを含む。
【0077】
ホストCPU11は、第1リクエストRQT1を生成し、生成した第1リクエストRQT1をサブミッションキューSQ1に格納する。そして、ホストCPU11は、第1メモリシステム20_1のドアベルレジスタに通知する。
【0078】
第1メモリシステム20_1は、メインメモリ12のサブミッションキューSQ1から第1リクエストRQT1を取得すると、データDAT1の読み出し動作を実行し、アクセス先アドレスAAD2の演算を行う。例えば、演算の結果、第2リクエストRQT2の生成は不要と判断された場合、第1メモリシステム20_1は、コンプリーション情報CPを生成した後、メインメモリ12に、データDAT1及びコンプリーション情報CPを送信する。このとき、メインメモリ12のコンプリーションキューCQ1にコンプリーション情報CPが格納される。
【0079】
また、演算の結果、第1メモリシステム20_1が第2リクエストRQT2を生成する場合、第1メモリシステム20_1は、算出したアクセス先アドレスAAD2に基づいて、サブミッションキューSQ2~SQnのいずれか1つに第2リクエストRQT2を格納し、対応するメモリシステム20のドアベルレジスタに通知する。通知を受けたメモリシステム20は、第1メモリシステム20_1のRAM308の対応するサブミッションキューSQから第2リクエストRQT2を取得すると、データDAT2の読み出し動作を実行する。例えば、第2メモリシステム20_2のドアベルレジスタが通知を受けた場合、第2メモリシステム20_2は、RAM308のサブミッションキューSQ2から第2リクエストRQT2を取得し、データDAT2の読み出し動作を実行する。
【0080】
第2リクエストRQT2に対応して読み出し動作を実行したメモリシステム20は、コンプリーション情報CPを生成した後、メインメモリ12に、データDAT2及びコンプリーション情報CPを送信する。このとき、メインメモリ12の対応するコンプリーションキューCQにコンプリーション情報CPが格納される。例えば、第2メモリシステム20_2の場合、コンプリーションキューCQ2にコンプリーション情報CPが格納される。また、例えば、第nメモリシステム20_nの場合、コンプリーションキューCQnにコンプリーション情報CPが格納される。
【0081】
なお、本例では、第2リクエストRQT2を生成した第1メモリシステム20_1のRAM308のサブミッションキューSQ2~SQnのいずれに第2リクエストRQT2を格納する場合について説明したが、これに限定されない。例えば、第2リクエストRQT2の送信先のメモリシステム20のサブミッションキューSQに第2リクエストRQT2を格納してもよいし、メインメモリ12のサブミッションキューSQに第2リクエストRQT2を格納してもよい。
【0082】
2.2 第2例
次に、第2例について説明する。第2例では、メインメモリ12内にリクエスト毎に対応するサブミッションエントリーSEとコンプリーションエントリーCEとの組が設けられている。コンプリーション情報CPを生成したメモリシステム20は、リクエストが格納されているサブミッションエントリーSEに対応するコンプリーションエントリーCEにコンプリーション情報CPを格納する。図8は、ホストデバイス10とメモリシステム20との間のリクエストRQT及びコンプリーション情報CPの流れの一例を示す図である。以下、第1例と異なる点を中心に説明する。
【0083】
図8に示すように、本例のホストデバイス10のメインメモリ12には、サブミッションキューSQ及びコンプリーションキューCQの代わりに、1つのSC(Submission and Completion)キューSCQが設けられている。SCキューSCQは、リクエスト及びコンプリーション情報CPが格納されるキューである。SCキューSCQ内には、リクエスト毎に対応するサブミッションエントリーSEとコンプリーションエントリーCEとの組が設けられている。サブミッションエントリーSEは、1つのリクエストが格納されるエントリーである。コンプリーションエントリーCEは、1つのコンプリーション情報CPが格納されるエントリーである。図8の例では、m個(mは3以上の整数)のサブミッションエントリーSEとコンプリーションエントリーCEとの組が設けられている。以下、m個のサブミッションエントリーをSE1~SEmとそれぞれ表記し、m個のコンプリーションエントリーをCE1~CEmとそれぞれ表記する。そして、例えば、サブミッションエントリーSE1とコンプリーションエントリーCE1とが1つの組とされる。なお、図8の例では、サブミッションエントリーSE1とコンプリーションエントリーCE1とを並べて表記しているが、メインメモリ12のメモリ空間におけるサブミッションエントリーSE1とコンプリーションエントリーCE1の格納位置(メモリ領域)は、離れていてもよい。更には、サブミッションエントリーSE1とコンプリーションエントリーCE1とが、異なるメモリデバイスに設けられていてもよい。
【0084】
ホストCPU11は、第1リクエストRQT1を生成し、生成した第1リクエストRQT1を例えばサブミッションエントリーSE1に格納する。ホストCPU11は、第1メモリシステム20_1のドアベルレジスタに、サブミッションエントリーSE1に第1リクエストRQT1が格納されていることを通知する。
【0085】
第1メモリシステム20_1は、メインメモリ12のサブミッションエントリーSE1から第1リクエストRQT1を取得すると、データDAT1の読み出し動作を実行し、アクセス先アドレスAAD2を算出する。例えば、演算の結果、第2リクエストRQT2の生成は不要と判断された場合、第1メモリシステム20_1は、コンプリーション情報CPを生成した後、メインメモリ12に、データDAT1及びコンプリーション情報CPを送信する。このとき、サブミッションエントリーSE1に対応するコンプリーションエントリーCE1にコンプリーション情報CPが格納される。
【0086】
また、演算の結果、第1メモリシステム20_1が第2リクエストRQT2を生成する場合、第1例と同様に、第1メモリシステム20_1は、サブミッションキューSQ2~SQnのいずれか1つに第2リクエストRQT2を格納し、対応するメモリシステム20のドアベルレジスタに通知する。通知を受けたメモリシステム20は、第1メモリシステム20_1のRAM308の対応するサブミッションキューSQから第2リクエストRQT2を取得すると、読み出し動作を実行する。そして、第1例と同様に、第2リクエストRQT2に対応してデータDAT2の読み出し動作を実行したメモリシステム20は、コンプリーション情報CPを生成した後、メインメモリ12に、データDAT2及びコンプリーション情報CPを送信する。このとき、コンプリーションエントリーCE1にコンプリーション情報CPが格納される。従って、本例では、コンプリーション情報CPを生成したメモリシステム20によらず、コンプリーション情報CPは、第1リクエストRQT1が格納されたサブミッションエントリーSE1に対応するコンプリーションエントリーCE1に格納される。
【0087】
2.3 第3例
次に、第3例について説明する。第3例では、第1メモリシステム20_1が、1つまたは複数のメモリシステム20にリクエストRQTを送信する場合ついて説明する。この場合、メインメモリ12のサブミッションキューSQから第1リクエストRQT1を取得した第1メモリシステム20_1が、メインメモリ12のコンプリーションキューCQ1にコンプリーション情報CPを送信する。図9は、ホストデバイス10とメモリシステム20との間のリクエストRQT及びコンプリーション情報CPの流れの一例を示す図である。以下、第1例及び第2例と異なる点を中心に説明する。
【0088】
図9に示すように、本例のホストデバイス10のメインメモリ12は、第1メモリシステム20_1に対応するサブミッションキューSQ1及びコンプリーションキューCQ1を含む。また、第1メモリシステム20_1のRAM308は、他の第2メモリシステム20_2~第nメモリシステム20_nに対応するサブミッションキューSQ2~SQn及びコンプリーションキューCQ2~CQnを含む。
【0089】
ホストCPU11は、第1リクエストRQT1を生成し、生成した第1リクエストRQT1をサブミッションキューSQ1に格納する。そして、ホストCPU11は、第1メモリシステム20_1のドアベルレジスタに通知する。
【0090】
第1メモリシステム20_1は、メインメモリ12のサブミッションキューSQ1から第1リクエストRQT1を取得すると、データDAT1の読み出し動作を実行し、アクセス先アドレスAADを算出する。例えば、演算の結果、他のメモリシステム20での読み出し動作は不要と判断された場合、第1メモリシステム20_1は、コンプリーション情報CPを生成した後、メインメモリ12に、データDAT1及びコンプリーション情報CPを送信する。このとき、メインメモリ12のコンプリーションキューCQ1にコンプリーション情報CPが格納される。
【0091】
また、演算の結果、他のメモリシステム20に読み出し動作を実行させる場合、第1メモリシステム20_1は、読み出し動作を実行させるメモリシステム20に対応したリクエストRQTを生成する。第2メモリシステム20_2~第nメモリシステム20_nに対応するリクエストを、第2リクエストRQT2~第nリクエストRQTnとする。例えば、第1メモリシステム20_1が第2リクエストRQT2と第nリクエストRQTnとを生成した場合、第2リクエストRQT2はサブミッションキューSQ2に格納され、第nリクエストはサブミッションキューSQnに格納される。そして、第1メモリシステム20_1は、第2メモリシステム20_2及び第nメモリシステム20_nのドアベルレジスタに通知する。なお、第1メモリシステム20_1が生成するリクエストRQTの個数は、1個以上であればよい。
【0092】
通知を受けたメモリシステム20は、第1メモリシステム20_1のRAM308の対応するサブミッションキューSQからリクエストRQTを取得すると、読み出し動作を実行する。例えば、第2メモリシステム20_2及び第nメモリシステム20_nのドアベルレジスタが通知を受けた場合、第2メモリシステム20_2は、RAM308のサブミッションキューSQ2から第2リクエストRQT2を取得し、データDAT2の読み出し動作を実行する。また、第nメモリシステム20_nは、RAM308のサブミッションキューSQnから第nリクエストRQTnを取得し、データDATnの読み出し動作を実行する。
【0093】
第1メモリシステム20_1が生成したリクエストRQTに基づいて読み出し動作を実行したメモリシステム20は、メインメモリ12にデータDATを直接送信する。また、当該メモリシステム20は、コンプリーション情報CPを生成した後、第1メモリシステム20_1にコンプリーション情報CPを送信する。例えば、第2メモリシステム20_2及び第nメモリシステム20_nが読み出し動作を実行した場合、データDAT2及びDATnは、メインメモリ12に送信される。第2メモリシステム20_2が生成したコンプリーション情報CP及び第nメモリシステム20_nが生成したコンプリーション情報CPは、第1メモリシステム20_1に送信される。このとき、RAM308のコンプリーションキューCQ2及びCQnにコンプリーション情報CPがそれぞれ格納される。
【0094】
第1メモリシステム20_1は、生成したリクエストRQTに対応するコンプリーション情報CPがRAM308のコンプリーションキューCQに格納されると、第1リクエストRQT1に対応するコンプリーション情報CPを生成する。そして、第1メモリシステム20_1は、メインメモリ12のコンプリーションキューCQ1に、生成したコンプリーション情報CPを送信する。従って、本例では、データDATを読み出したメモリシステム20によらず、第1リクエストRQT1を取得した第1メモリシステム20_1が、メインメモリ12のコンプリーションキューCQ1にコンプリーション情報CPを送信する。但し、各メモリシステム20は、メインメモリ12に、読み出したデータDATを直接送信する。
【0095】
本例では、第1メモリシステム20_1は、複数のメモリシステム20を選択して各々にリクエストRQTを実行させてよい。すなわち、第1メモリシステム20_1は、複数のメモリシステム20にリクエストRQTを送信してもよい。第1メモリシステム20_1は、リクエストを実行させた複数のメモリシステム20の各々のコンプリーション情報CPを取得した後、第1リクエストRQT1に対応するコンプリーション情報CPを生成し、メインメモリ12のコンプリーションキューCQ1に生成したコンプリーション情報CPを格納する。
【0096】
なお、リクエストRQTは、次のアクセス先のメモリシステム20のRAM308のサブミッションキューSQに格納されてもよい。例えば、第2リクエストRQT2は、第2メモリシステム20_2のRAM308のサブミッションキューSQに格納され得る。第nリクエストRQTnは、第nメモリシステム20_nのRAM308のサブミッションキューSQに格納され得る。
【0097】
2.4 本実施形態に係る効果
本実施形態に係る構成は、第1実施形態に適用できる。
【0098】
本実施形態の第1例及び第2例に係る構成であれば、リクエストを完了させたメモリシステム20がホストデバイス10にコンプリーション情報CPを直接送信するため、ホストデバイス10にコンプリーション情報CPを送信するレイテンシを高速化でき、ホストバスにおけるデータ送信の帯域幅を削減できる。更に、ホストデバイス10からリクエストRQT1を受信したメモリシステム20_1は、他のメモリシステム20にリクエストRQT2を送信した時点で、処理が終了するため、メモリシステム20_1における処理を簡略化できる。
【0099】
本実施形態の第2例に係る構成であれば、サブミッションエントリーSEに対応するコンプリーションエントリーCEにコンプリーション情報CPが格納される。このため、ホストCPU11は、コンプリーションキューCQの処理を軽減できる。
【0100】
本実施形態の第3例に係る構成であれば、リクエストを受信したメモリシステム20がホストデバイス10にコンプリーション情報CPを送信する。このため、ホストCPU11は、一段読み出し動作の場合と同様に、コンプリーションキューCQを処理することができる。また、メモリシステム20_1は、複数のサブミッションキューSQとコンプリーションキューCQとを含むため、複数のリクエストRQTを複数のメモリシステム20に対して発行して、各リクエストRQTに対応するコンプリーション情報CPの受信を待つことができる。
【0101】
3.第3実施形態
次に、第3実施形態について説明する。第3実施形態では、リードコマンドにより一段読み出し動作と多段読み出し動作とを区別していない場合について説明する。以下、第1実施形態と異なる点を中心に説明する。
【0102】
3.1 読み出し動作の流れ
図10及び図11を参照して、読み出し動作の流れの一例について説明する。図10及び図11は、読み出し動作のフローチャートである。なお、図10及び図11の例は、第1メモリシステム20_1のデータDAT1を用いて第2メモリシステム20_2のデータDAT2を読み出す場合を示している。
【0103】
図10及び図11に示すように、ステップS1~S4の動作は、第1実施形態と同様である。なお、本実施形態の第1リクエストRQT1に含まれるリードコマンドは、一段読み出し動作と多段読み出し動作とで共通である。
【0104】
データDAT1の読み出し後、第1メモリシステム20_1の演算回路306は、データDAT1を用いて次のアクセス先アドレスAAD2の演算を実行する(ステップS20)。
【0105】
演算の結果、外部要求がない場合(ステップS21_No)、すなわち一段読み出し動作の場合、ステップS6移行の動作(ステップS6、S7、S18、及びS19)は、第1実施形態と同様である。
【0106】
演算の結果、外部要求がある場合(ステップS21_Yes)、すなわち多段読み出し動作の場合、ステップS9移行の動作(ステップS9~S19)は、第1実施形態と同様である。
【0107】
3.2 本実施形態に係る効果
本実施形態に係る構成であれば、第1実施形態と同様の効果が得られる。
【0108】
なお、第3実施形態に第2実施形態を適用してもよい。
【0109】
4.第4実施形態
次に、第4実施形態について説明する。第4実施形態では、KVS(Key-Value-Store)に対応した多段読み出し動作について、4つの例を説明する。以下、第1実施形態と異なる点を中心に説明する。
【0110】
4.1 第1例
まず、第1例について説明する。第1例では、キー(Key)に基づいて多段読み出し動作を実行する場合について説明する。例えば、B-treeインデックスが複数のメモリシステム20に分割して記憶されている場合、キーに対応した値(Value)を取得するために多段読み出し動作が実行される。以下、キーで指定されたエントリーから値(Value)を取得する動作をゲット動作と表記する。
【0111】
4.1.1 多段読み出し動作
まず、図12を参照して、本例の多段読み出し動作について説明する。図12は、KVSに対応した多段読み出し動作の一例を示す図である。
【0112】
図12に示すように、まず、ホストデバイス10は、第1メモリシステム20_1に第1リクエストRQT1を送信する。すなわち、第1メモリシステム20_1は、メインメモリ12のサブミッションキューSQから第1リクエストRQT1を取得する。第1リクエストRQT1には、ゲット動作を指示するコマンドGT及びキーが含まれる。図12のKY(145)は、キーKYが整数型の145である場合を示している。なお、キーKYは整数型に限定されない。また、第1リクエストRQT1には、第1メモリシステム20_1において、最初にアクセスするルートノードの情報が含まれていてもよい。ルートノードの情報とは、最初にデータを読み出すページのアドレスであってもよいし、どのツリー(すなわち、ルートノード)を使うか指定するためのフィールドであってもよい。
【0113】
第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1に基づいて、不揮発性メモリ40に読み出し命令を送信し、不揮発性メモリ40からデータDAT1を読み出す。演算回路306は、読み出したデータDAT1とキーKY(145)とを比較して、情報を読み出す次のページを決定する。このとき、B-treeインデックスのツリー構造に対応して、ツリーを探索するために複数回の読み出し動作が実行され得る。より具体的には、例えば、第1メモリシステム20_1内において、ツリー構造のノードを探索する場合、1つのノードの情報(データ)を読み出した結果に基づいて、次のノードの情報が読み出される。従って、第1メモリシステム20_1の不揮発性メモリ40内に次のノードの情報が記憶されている場合、次のノードの情報の読み出し動作が繰り返される。
【0114】
メモリコントローラ30は、例えば、第2メモリシステム20_2に次のノードの情報があることが分かった場合、第2メモリシステム20_2にてゲット動作を継続するため、第2リクエストRQT2を生成する。第2リクエストRQT2には、コマンドGT及びキーKY(145)が含まれる。キーKY(145)は、アクセス情報である。また、第2リクエストRQT2には、アクセス情報として次のページの情報が含まれていてもよい。次のページの情報とは、次にデータを読み出すページのアドレスであってもよいし、B-treeインデックスにおける次のノードの情報であってもよいし、次のノードを示すポインタの情報であってもよい。なお、コマンドGT及びキーKY(145)は、第1リクエストRQT1と同じであってもよい。
【0115】
第2メモリシステム20_2は、第1メモリシステム20_1のRAM308(サブミッションキューSQ)から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、第2リクエストRQT2に基づいて、不揮発性メモリ40のキーKY(145)に対応するエントリー、すなわちページからValueとしてデータDAT2を読み出す。このとき、B-treeインデックスのツリー構造に対応して、ツリーを探索するために複数回の読み出し動作が実行され得る。より具体的には、例えば、第2メモリシステム20_2内において、ツリー構造のノードを探索する場合、1つのノードの情報を読み出した結果に基づいて、次のノードの情報が読み出される。例えば、Valueを取得するまで読み出し動作が繰り返される。
【0116】
データDAT2(Value)を取得すると、第2メモリシステム20_2のメモリコントローラ30は、コンプリーション情報CPを生成する。そして、第2メモリシステム20_2のメモリコントローラ30は、データDAT2とコンプリーション情報CPとをホストデバイス10に送信する。なお、メモリコントローラ30は、例えば、他のメモリシステム20に次のノードの情報があることが分かった場合、次のリクエストRQTを生成し得る。
【0117】
4.1.2 ゲット動作の具体例
次に、ゲット動作の具体例について説明する。図13は、B-treeインデックスにおけるゲット動作の一例を示す図である。図13の例は、3階層のツリー構造において、第1階層のノードが第1メモリシステム20_1に記憶されており、第2階層及び第3階層のノードが第2メモリシステム20_2に記憶されている場合を示している。なお、ツリー構造はこれに限定されない。
【0118】
図13に示すように、まず、第1メモリシステム20_1は、ホストデバイス10から第1リクエストRQT1を取得する。第1リクエストRQT1には、コマンドGT及びキーKY(145)が含まれる。次に、第1メモリシステム20_1のメモリコントローラ30は、不揮発性メモリ40のノードND1に対応するページから、ノードND1の情報としてデータDAT1を読み出す。第1階層のノードND1はルートノードである。なお、ノードND1の情報を読み出すページは、第1リクエストRQT1により指定されてもよいし、第1メモリシステム20_1の不揮発性メモリ40内において予め設定されておいてもよい。演算回路306は、データDAT1(ノードND1の情報)とキーKY(145)とを比較して、ポインタPT1、すなわち、第2階層のノードを選択する。換言すれば、演算回路306は、情報を読み出す次のページを決定する。より具体的には、例えば、ノードND1は、2つのキーKY(128及び250)の情報を有している。キーKY(145)は、キーKY(128)より大きく、キーKY(250)より小さい値であるため、演算回路306は、ポインタPT1を選択する。すなわち、演算回路306は、ポインタPT1に対応する第2階層のノードND2を決定する。
【0119】
例えば、ノードND1の情報には、ノードND2の情報の記憶場所(本例では、第2メモリシステム20_2)についての情報が含まれ得る。例えば、ポインタPT1に、ND2がどのメモリシステム内にあるか直接書かれていてもよい。演算回路306は、ポインタPT1を読むことで、ノードND2がメモリシステム20_2内にあると判断できる。なお、ノードND1として読み出したデータに対して演算回路306内で何らかの演算をした結果、ノードND2がどのメモリシステム内にあるか判断してもよい。
【0120】
また、ノードND1に対応する第1メモリシステム20_1は、事前にツリーの階層についての情報を有していれば、ノードND2の階層から、ノードND2がメモリシステム20_2にあると判断してもよい。図13の例では、第1メモリシステム20_1は、第1階層のノードは、第1メモリシステム20_1の不揮発性メモリ40に記憶されており、第2階層以降のノードは、第2メモリシステム20_2の不揮発性メモリに記憶されている、という情報を有していてもよい。第1メモリシステム20_1の演算回路306は、ツリーの階層についての情報に基づいて、例えば、第2階層のノードND2の情報が第2メモリシステム20_2の不揮発性メモリ40に記憶されていると判断し得る。
【0121】
演算回路306は、ノードND1の情報に基づいて、アクセス情報を算出する。また、外部要求生成回路307は、第2メモリシステム20_2においてキーKY(145)のゲット動作を継続させるため、第2リクエストRQT2を生成する。第2リクエストRQT2には、例えば、アクセス情報として、キーKY(145)及び次のページの情報(ノードND2またはポインタPT1の情報)と、が含まれる。
【0122】
第2メモリシステム20_2は、第1メモリシステム20_1から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、不揮発性メモリ40からノードND2の情報を読み出す。演算回路306は、ノードND2の情報とキーKY(145)とを比較して、ポインタPT2、すなわち、第3階層のノードND3を選択する。換言すれば、演算回路306は、情報を読み出す次のページを決定する。より具体的には、ノードND2は、2つのキーKY(155及び200)を有している。キーKY(145)は、キーKY(155)よりも小さいため、演算回路306は、ポインタPT2を選択する。すなわち、メモリコントローラ30は、ポインタPT2に対応する第3階層のノードND3を選択する。
【0123】
例えば、ノードND2の情報には、ノードND3の情報の記憶場所(本例では、第2メモリシステム20_2)についての情報が含まれ得る。例えば、ポインタPT2に、ND3がどのメモリシステム内にあるか直接書かれていてもよい。演算回路306は、ポインタPT2を読むことで、ノードND3がメモリシステム20_2内にあると判断できる。なお、ノードND2として読み出したデータに対して演算回路306内で何らかの演算をした結果、ノードND3がどのメモリシステム内にあるか判断してもよい。ノードND3の情報は、第2メモリシステム20_2内に記憶されている。このため、演算回路306は、不揮発性メモリ40からのノードND3の情報の読み出しを要求する。本例では、第3階層のノードは、リーフノードである。ノードND3は、3つのキーKY(128、140、及び145)を有している。ノードND3が有するキーKYの情報がキーKY(145)と一致しているため、メモリコントローラ30は、不揮発性メモリ40内のキーKY(145)に対応するエントリーからValueとしてデータDAT2を読み出す。メモリコントローラ30は、データDAT2及びコンプリーション情報CPをホストデバイス10に送信する。なお、例えば、ノードND3がキーKY(145)と一致していなかった場合、メモリコントローラ30は、Valueが見つからなかった旨をホストデバイス10に報告する。
【0124】
本例では、3階層のツリー構造について説明したが、4階層以上のツリー構造である場合、読み出したデータ(ノードの情報)とキーKYとを比較して、情報を読み出す次のージ(次の階層のノード)を決定する動作を繰り返す。なお、リーフノード以外のツリーの途中のノードにもValueデータが含まれている場合において、ツリーの途中の階層でキーKYが一致した場合、キーKYに対応するエントリーからデータ(Value)が読み出されてもよい。
【0125】
4.2 第2例
次に、第2例について説明する。第2例では、第2リクエストRQT2に小ツリーインデックスの情報が含まれている場合について説明する。例えば、ツリー構造において、下位階層は、複数の小ツリー構造の集合体と見なすことができる。本例では、第2メモリシステム20_2に記憶されている複数の小ツリー構造を、小ツリーインデックスTIと定義する。以下、第4実施形態の第1例と異なる点を中心に説明する。
【0126】
4.2.1 多段読み出し動作
図14を参照して、本例の多段読み出し動作について説明する。図14は、KVSに対応する多段読み出し動作の一例を示す図である。
【0127】
図14に示すように、第4実施形態の第1例と同様に、ホストデバイス10は、第1メモリシステム20_1に第1リクエストRQT1を送信する。第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1に基づいて、不揮発性メモリ40からデータDAT1を読み出す。演算回路306は、読み出したデータDAT1とキーKYとを比較して、小ツリーインデックスTIを決定する。このとき、B-treeインデックスのツリー構造に対応して、ツリーを探索するために複数回の読み出し動作が実行され得る。メモリコントローラ30は、例えば、第2メモリシステム20_2の不揮発性メモリ40に次のノードの情報があることが分かった場合、第2メモリシステム20_2にてゲット動作を継続させるため、第2リクエストRQT2を生成する。本例の第2リクエストRQT2には、コマンドGT、キーKY(145)、及び小ツリーインデックスTIが含まれる。小ツリーインデックスTIは、アクセス情報である。図14のTI(1)は、小ツリーインデックスTIの番号が1である場合を示している。
【0128】
第2メモリシステム20_2における動作は、第4実施形態の第1例と同様である。
【0129】
4.2.2 ゲット動作の具体例
次に、ゲット動作の具体例について説明する。図15は、B-treeインデックスにおけるゲット動作の一例を示す図である。図15の例は、3階層のツリー構造において、第1階層のノードが第1メモリシステム20_1に記憶されており、第2階層及び第3階層のノードが第2メモリシステム20_2に記憶されている場合を示している。なお、ツリー構造はこれに限定されない。
【0130】
図15に示すように、本例では、第2メモリシステム20_2において、第2階層のノードND4及びこれに対応する第3階層を小ツリーインデックスTI(0)と定義し、第2階層のノードND2及びこれに対応する第3階層を小ツリーインデックスTI(1)と定義し、第2階層のノードND5及びこれに対応する第3階層を小ツリーインデックスTI(2)と定義する。
【0131】
まず、第1メモリシステム20_1は、ホストデバイス10から第1リクエストRQT1を取得する。第1リクエストRQT1には、コマンドGT及びキーKY(145)が含まれる。次に、第1メモリシステム20_1のメモリコントローラ30は、不揮発性メモリ40からノードND1の情報としてデータDAT1を読み出す。演算回路306は、データDAT1(ノードND1の情報)とキーKY(145)とを比較して、ポインタPT1、すなわち、メモリシステム20_2の小ツリーインデックスTI(1)を選択する。換言すれば、演算回路306は情報を読み出す次のページを決定する。なお、ポインタPT1が、メモリシステム20_2の小ツリーインデックスTI(1)という情報を直接保存していてもよいし、ノードND1のデータを演算回路306で演算した結果、メモリシステム20_2の小ツリーインデックスTI(1)と決定しても良い。小ツリーインデックスTI(1)は、第2メモリシステム20_2の不揮発性メモリ40内に記憶されている。このため、演算回路306は、ノードND1の情報に基づいて、アクセス情報を算出する。また、外部要求生成回路307は、第2リクエストRQT2を生成する。第2リクエストRQT2には、例えば、アクセス情報として、キーKY(145)及び小ツリーインデックスTI(1)が含まれる。
【0132】
第2メモリシステム20_2は、第1メモリシステム20_1から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、不揮発性メモリ40から小ツリーインデックスTI(1)のノードND2の情報を読み出す。演算回路306は、第4実施形態の第1例と同様に、ノードND2の情報とキーKY(145)とを比較して、ポインタPT2、すなわち、第3階層のノードND3を選択する。そして、ノードND3が有するキーKYの情報がキーKY(145)と一致している場合、メモリコントローラ30は、不揮発性メモリ40内のキーKY(145)に対応するエントリーからValueとしてデータDAT2を読み出す。メモリコントローラ30は、データDAT2及びコンプリーション情報CPをホストデバイス10に送信する。
【0133】
4.3 第3例
次に、第3例について説明する。第3例では、キーの範囲を指定する場合について説明する。以下、第4実施形態の第1例及び第2例と異なる点を中心に説明する。
【0134】
4.3.1 多段読み出し動作
図16を参照して、本例の多段読み出し動作について説明する。図16は、KVSに対応する多段読み出し動作の一例を示す図である。以下、指定された範囲のキーに対応する複数のエントリーからデータ(Value)を取得する動作をレンジ動作と表記する。
【0135】
図16に示すように、まず、ホストデバイス10は、第1メモリシステム20_1に第1リクエストRQT1を送信する。第1リクエストRQT1には、レンジ動作を指示するコマンドRGと、範囲指定の開始キーKY_S及び終了キーKY_Eと、が含まれる。図16のKY_S(130)は、開始キーKY_Sにより指定されたキーKYが130である場合を示している。KY_E(279)は、終了キーKY_Eにより指定されたキーKYが279である場合を示している。
【0136】
第1メモリシステム20_1のメモリコントローラ30は、第4実施形態の第2例と同様の手順で、開始キー(130)に対応する開始小ツリーインデックスTI_Sと、終了キー(279)に対応する終了小ツリーインデックスTI_Eを決定する。なお、メモリコントローラ30は、終了小ツリーインデックスTI_Eを決定しなくてもよい。メモリコントローラ30は、次のノードが第2メモリシステム20_2にあることがわかった場合、第2メモリシステム20_2にてレンジ動作を継続するため、第2リクエストRQT2を生成する。本例の第2リクエストRQT2には、コマンドRG、開始キーKY_S(130)、開始小ツリーインデックスTI_S(1)、終了キーKY_E(279)、及び終了小ツリーインデックスTI_E(2)が含まれる。なお、第2リクエストRQT2に終了小ツリーインデックスTI_E(2)が含まれていなくてもよい。開始キーKY_S(130)、開始小ツリーインデックスTI_S(1)、終了キーKY_E(279)、及び終了小ツリーインデックスTI_E(2)は、アクセス情報である。図16のTI_S(1)は、開始小ツリーインデックスTI_Sの番号が1である場合を示している。TI_E(2)は、終了小ツリーインデックスTI_Eの番号が2である場合を示している。
【0137】
第2メモリシステム20_2のメモリコントローラ30は、第2リクエストRQT2に基づいて、開始小ツリーインデックスTI_S(1)から終了小ツリーインデックスTI_E(2)までの範囲の小ツリーインデックスTIに含まれるリーフノードのうち、開始キーKY_S(130)から終了キーKY_E(279)の範囲にある複数のキーKYに対応する複数のエントリーからValueとしてデータDAT2を読み出す。このとき、不揮発性メモリ40において、複数回の読み出し動作が実行され得る。Value(データDAT2)を取得すると、第2メモリシステム20_2のメモリコントローラ30は、コンプリーション情報CPを生成する。そして、第2メモリシステム20_2のメモリコントローラ30は、データDAT2とコンプリーション情報CPとをホストデバイス10に送信する。
【0138】
4.3.2 レンジ動作の具体例
次に、レンジ動作の具体例について説明する。図17は、B-treeインデックスにおけるレンジ動作の一例を示す図である。図17の例は、3階層のツリー構造において、第1階層のノードが第1メモリシステム20_1に記憶されており、第2階層及び第3階層のノードが第2メモリシステム20_2に記憶されている場合を示している。なお、ツリー構造はこれに限定されない。
【0139】
図17に示すように、本例では、第4実施形態の第2例と同様に、第2メモリシステム20_2において、第2階層のノードND4及びこれに対応する第3階層を小ツリーインデックスTI(0)と定義し、第2階層のノードND2及びこれに対応する第3階層を小ツリーインデックスTI(1)と定義し、第2階層のノードND5及びこれに対応する第3階層を小ツリーインデックスTI(2)と定義する。
【0140】
まず、第1メモリシステム20_1は、ホストデバイス10から第1リクエストRQT1を取得する。第1リクエストRQT1には、コマンドRG、開始キーKY_S(130)、及び終了キーKY_E(279)が含まれる。次に、第1メモリシステム20_1のメモリコントローラ30は、不揮発性メモリ40からノードND1の情報としてデータDAT1を読み出す。演算回路306は、データDAT1(ノードND1の情報)と開始キーKY_S(130)とを比較して、ポインタPT1、すなわち、開始小ツリーインデックスTI_S(1)を選択する。また、演算回路306は、データDAT1(ノードND1の情報)と終了キーKY_E(279)とを比較して、ポインタPT3、すなわち、終了小ツリーインデックスTI_E(2)を選択する。次のノードが第2メモリシステム20_2にあることがわかった場合、外部要求生成回路307は、第2リクエストRQT2を生成する。第2リクエストRQT2には、例えば、アクセス情報として、開始キーKY_S(130)、開始小ツリーインデックスTI_S(1)、終了キーKY_E(279)、及び終了小ツリーインデックスTI_E(2)が含まれる。
【0141】
第2メモリシステム20_2は、第1メモリシステム20_1から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、不揮発性メモリ40から開始小ツリーインデックスTI_S(1)のノードND2の情報を読み出す。演算回路306は、ノードND2の情報と開始キーKY_S(130)とを比較して、ポインタPT2、すなわち、第3階層のノードND3を選択する。
【0142】
次に、演算回路306は、開始小ツリーインデックスTI_S(1)及び終了小ツリーインデックスTI_E(2)において、第3階層(リーフノード)に含まれるキーKYのうち、開始キーKY_S(130)から終了キーKY_E(279)までの範囲のキーKYを選択する。
【0143】
より具体的には、まず、メモリコントローラ30は、不揮発性メモリ40からノードND3の情報を読み出す。演算回路306は、ノードND3が有するキーKYの情報のうち、開始キーKY_S(130)以上であり且つ終了キーKY_E(279)未満であるキーを選択する。本例では、演算回路306は、ノードND3のキーKY(140)を選択する。更に、演算回路306は、ノードND3のキーKY(145)を選択する。そして、演算回路306は、ノードND3の最大のキーKY(145)が、終了キーKY_E(279)未満であるため、ポインタPT4を選択する。メモリコントローラ30は、不揮発性メモリ40内のキーKY(140)及びキーKY(145)に対応するエントリーからデータを読み出す。
【0144】
次に、メモリコントローラ30は、ポインタPT4が示すノードのND6の情報を読み出す。演算回路306は、終了キーKY_E(279)未満であるノードND6のキーKY(155)及びキーKY(168)を選択する。そして、演算回路306は、ノードND6の最大のキーKY(168)が終了キーKY_E(279)未満であるため、ポインタPT5を選択する。メモリコントローラ30は、不揮発性メモリ40内のキーKY(155)及びキーKY(168)に対応するエントリーからデータを読み出す。
【0145】
次に、メモリコントローラ30は、ポインタPT5が示すノードのND7の情報を読み出す。演算回路306は、終了キーKY_E(279)未満であるノードND7のキーKY(200)及びキーKY(226)を選択する。そして、演算回路306は、ノードND7の最大のキーKY(226)が終了キーKY_E(279)未満であるため、ポインタPT6を選択する。メモリコントローラ30は、不揮発性メモリ40内のキーKY(200)及びキーKY(226)に対応するエントリーからデータを読み出す。
【0146】
次に、メモリコントローラ30は、ポインタPT6が示すノードのND8の情報を読み出す。演算回路306は、終了キーKY_E(279)未満であるノードND8のキーKY(250)及びキーKY(264)を選択する。そして、演算回路306は、ノードND8の最大のキーKY(264)が終了キーKY_E(279)未満であるため、ポインタPT7を選択する。メモリコントローラ30は、不揮発性メモリ40内のキーKY(250)及びキーKY(264)に対応するエントリーからデータを読み出す。
【0147】
次に、メモリコントローラ30は、ポインタPT7が示すノードのND9の情報を読み出す。演算回路306は、終了キーKY_E(279)未満であるノードND9のキーKY(269)及びキーKY(270)を選択する。そして、演算回路306は、ノードND9の最大のキーKY(270)が終了キーKY_E(279)未満であるため、ポインタPT8を選択する。メモリコントローラ30は、不揮発性メモリ40内のキーKY(269)及びキーKY(270)に対応するエントリーからデータを読み出す。
【0148】
次に、メモリコントローラ30は、ポインタPT8が示すノードのND10の情報を読み出す。演算回路306は、ノードND10の最小の番号のキーKY(290)が終了キーKY_E(279)よりも大きいため、キーKYの選択を終了する。この結果、Valueに対応するデータDAT2には、キーKY(140)、キーKY(145)、キーKY(155)、キーKY(168)、キーKY(200)、キーKY(226)、キーKY(250)、キーKY(264)、キーKY(269)、及びキーKY(270)にそれぞれ対応するデータが含まれる。メモリコントローラ30は、データDAT2及びコンプリーション情報CPをホストデバイス10に送信する。
【0149】
4.4 第4例
次に、第4例について説明する。第4例では、第1メモリシステム20_1の不揮発性メモリ40に、ツリー構造の全体が記憶され、第2メモリシステム20_2の不揮発性メモリ40に、リーフノードに対応するデータが記憶されている場合について説明する。以下、第4実施形態の第1~第3例と異なる点を中心に説明する。
【0150】
4.4.1 多段読み出し動作
図18を参照して、本例の多段読み出し動作について説明する。図18は、KVSに対応する多段読み出し動作の一例を示す図である。
【0151】
図18に示すように、第4実施形態の第1例と同様に、ホストデバイス10は、第1メモリシステム20_1に第1リクエストRQT1を送信する。第1メモリシステム20_1のメモリコントローラ30は、第1リクエストRQT1に基づいて、不揮発性メモリ40からデータDAT1を読み出す。演算回路306は、読み出したデータDAT1とキーKYとを比較して、第2メモリシステム20_2のアクセス先アドレスAAD2を算出する。このとき、B-treeインデックスのツリー構造に対応して、ツリーを探索するために複数回の読み出し動作が実行され得る。換言すれば、メモリコントローラ30は、ルートノードからキーKYまでの探索動作を第1メモリシステム20_1内で、繰り返し実行する。メモリコントローラ30は、例えば、キーKY(145)に対応するデータが第2メモリシステム20_2の不揮発性メモリ40内にあることが分かった場合、第2メモリシステム20_2にてValueを取得するため、第2リクエストRQT2を生成する。本例の第2リクエストRQT2には、アクセス情報として、キーKY(145)に対応するアクセス先アドレスAAD2が含まれる。なお、例えば、キーKY(145)が見つからなかった場合、メモリコントローラ30は、第2リクエストRQT2を生成せずに、Valueが見つからなかった旨をホストデバイス10に報告する。
【0152】
第2メモリシステム20_2は、第1メモリシステム20_1から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、不揮発性メモリ40から、Valueとして、アクセス先アドレスAAD2に対応するデータDAT2を読み出す。メモリコントローラ30は、データDAT2及びコンプリーション情報CPをホストデバイス10に送信する。
【0153】
4.4.2 ゲット動作の具体例
次に、ゲット動作の具体例について説明する。図19は、B-treeインデックスにおけるゲット動作の一例を示す図である。図19の例は、3階層のツリー構造において、第1~第3階層のノードが第1メモリシステム20_1に記憶されており、第3階層のノードに対応するデータが第2メモリシステム20_2に記憶されている場合を示している。なお、ツリー構造はこれに限定されない。
【0154】
図19に示すように、本例では、第4実施形態の第1例で説明した第3階層のキーKY(145)までの探索動作が、第1メモリシステム20_1内で実行される。キーKY(145)に対するデータは、第2メモリシステム20_2の不揮発性メモリ40内に記憶されている。このことは、ノードND3を読み出してキーKY(145)に対応するエントリデータを読むと、演算回路306が判断できる。もしくは、事前に第1メモリシステム20_1に、「リーフノードに対応するデータは第2メモリシステム20_2にある」という情報が与えられている。これにより、演算回路306は、データが、第2メモリシステム20_2内にあると判断できる。このため、演算回路306は、キーKY(145)に対応するアクセス先アドレスAAD2を算出する。外部要求生成回路307は、第2メモリシステム20_2においてValueを取得するため、第2リクエストRQT2を生成する。
【0155】
第2メモリシステム20_2は、第1メモリシステム20_1から第2リクエストRQT2を取得する。第2メモリシステム20_2のメモリコントローラ30は、不揮発性メモリ40内のアクセス先アドレスAAD2から、キーKY(145)のValueとしてデータDAT2を読み出す。メモリコントローラ30は、データDAT2及びコンプリーション情報CPをホストデバイス10に送信する。上記に示したB-treeインデックスに限らず、ツリー構造やリスト構造等のデータ構造を扱う際に、読み出したデータ内のポインタを辿って次の読み出し先が決まるような動作において、同様にして複数のメモリシステムにまたがった読み出しをする際に本発明が適用される。
【0156】
5.変形例等
上記実施形態に係るデータ処理装置は、第1不揮発性メモリ(40)を含む第1メモリシステム(20_1)と、第2不揮発性メモリ(40)を含む第2メモリシステム(20_2)と、第1及び第2メモリシステムを制御するホストデバイス(10)とを含む。第1メモリシステムは、ホストデバイスから受信した第1リクエスト(RQT1)に基づいて第1不揮発性メモリに第1データ(DAT1)の読み出し動作を実行させる第1回路(303)と、第1データに基づいて第2メモリシステムに対応する第1アクセス情報(AAD2)を算出可能な第2回路(306)と、第1アクセス情報に基づいて第2メモリシステムに第2データ(DAT2)の読み出し動作を実行させる第2リクエスト(RQT2)を生成する第3回路(307)とを更に含む。
【0157】
上記実施形態を適用することにより、処理能力を向上できるデータ処理装置を提供できる。
【0158】
なお、実施形態は上記説明した形態に限定されるものではなく、種々の変形が可能である。
【0159】
以上、本発明の実施形態を説明したが、本発明は上記実施形態に限定されるものではなく、その趣旨を逸脱しない範囲内において種々変形して実施することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示された構成要件を適宜組み合わせることによって種々の発明が抽出される。例えば、開示された構成要件からいくつかの構成要件が削除されても、所定の効果が得られるものであれば、発明として抽出され得る。
【符号の説明】
【0160】
1…データ処理装置、10…ホストデバイス、11…ホストCPU、12…メインメモリ、20…メモリシステム、30…メモリコントローラ、40…不揮発性メモリ、41…メモリチップ、301…ホストインターフェース回路、302…コマンドパーサ、303…読み出し実行回路、304…メモリインターフェース回路、305…コンプリーション生成回路、306…演算回路、307…外部要求生成回路、308…RAM、CE1~CEm…コンプリーションエントリー、CQ1~CQn…コンプリーションキュー、SE1~SEm…サブミッションエントリー、SQ1~SQn…サブミッションキュー
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19