(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024125708
(43)【公開日】2024-09-19
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/06 20060101AFI20240911BHJP
G06F 12/00 20060101ALI20240911BHJP
【FI】
G06F12/06 550A
G06F12/00 597U
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023033708
(22)【出願日】2023-03-06
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】渡邊 幸之介
(72)【発明者】
【氏名】米澤 真司
(72)【発明者】
【氏名】鋤柄 鋭二
(72)【発明者】
【氏名】原 充賢
(72)【発明者】
【氏名】森 悠
(72)【発明者】
【氏名】山崎 創
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA14
5B160CD04
5B160CD16
(57)【要約】
【課題】 処理の効率を向上できるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、複数の不揮発性メモリチップと、コントローラとを具備する。コントローラは、複数の不揮発性メモリチップのそれぞれがビジー状態であるか否かを管理する。コントローラは、ホストによって発行された1つ以上の要求が少なくとも1つのキューに格納されている場合、1つ以上の要求から、複数の不揮発性メモリチップの内のビジー状態でない第1不揮発性メモリチップに対する第1要求を特定し、特定された第1要求に応じた処理を実行する。
【選択図】
図7
【特許請求の範囲】
【請求項1】
複数の不揮発性メモリチップと、
前記複数の不揮発性メモリチップのそれぞれがビジー状態であるか否かを管理し、
ホストによって発行された1つ以上の要求が少なくとも1つのキューに格納されている場合、
前記1つ以上の要求から、前記複数の不揮発性メモリチップの内のビジー状態でない第1不揮発性メモリチップに対する第1要求を特定し、
前記特定された第1要求に応じた処理を実行するように構成されるコントローラとを具備する、
メモリシステム。
【請求項2】
前記コントローラは、
前記キューから前記第1要求をフェッチし、
前記複数の不揮発性メモリチップの内の第2不揮発性メモリチップがビジー状態であることに応じ、前記第2不揮発性メモリチップに対する第2要求を前記キューからフェッチしないように構成される、
請求項1に記載のメモリシステム。
【請求項3】
前記1つ以上の要求のそれぞれは、対応する処理が行われる対象である前記複数の不揮発性メモリチップのいずれかを指定し、
前記コントローラは、前記ホストから前記1つ以上の要求に応じて、前記1つ以上の要求のそれぞれで指定される前記複数の不揮発性メモリチップのいずれかに対し、前記1つ以上の要求に応じた処理を実行するように構成される、
請求項2に記載のメモリシステム。
【請求項4】
前記1つ以上の要求は、前記キューへの格納順に並んだ第2要求と前記第1要求とを含み、
前記コントローラは、前記第2要求が、前記複数の不揮発性メモリチップの内のビジー状態である第2不揮発性メモリチップに対する要求であることに応じ、
前記キューから前記第2要求をフェッチせず、
前記キューから前記第1要求をフェッチし、
前記フェッチされた第1要求に応じた処理を実行するように構成される、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記フェッチされた第1要求と、前記フェッチされていない第2要求とを示す情報を管理するように構成される、
請求項4に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記情報を用いて、前記第1要求が除外された前記1つ以上の要求から、前記複数の不揮発性メモリチップの内のビジー状態でない第3不揮発性メモリチップに対する第3要求を特定し、
前記第3要求に応じた処理を実行するように構成される、
請求項5に記載のメモリシステム。
【請求項7】
前記少なくとも1つのキューは、第1キューと第2キューとを含み、
前記1つ以上の要求は、前記第1キューに格納されている前記第1要求と、前記第2キューに格納されている第2要求とを含み、
前記コントローラは、
前記第1キューから前記第1要求をフェッチし、
前記フェッチされた第1要求に応じた処理を実行し、
前記第2要求が、前記複数の不揮発性メモリチップの内のビジー状態である第2不揮発性メモリチップに対する要求であることに応じ、前記第2キューから前記第2要求をフェッチしないように構成される、
請求項1に記載のメモリシステム。
【請求項8】
前記コントローラは、
前記キューから、前記複数の不揮発性メモリチップの内のビジー状態である第2不揮発性メモリチップに対する第2要求をフェッチし、
前記フェッチされた第2要求に応じた処理の実行を、前記第2不揮発性メモリチップがビジー状態でなくなるまで待機するように構成される、
請求項1に記載のメモリシステム。
【請求項9】
前記コントローラは、さらに、
前記キューから前記第1要求をフェッチし、
前記フェッチされた第1要求に応じた処理を実行するように構成される、
請求項8に記載のメモリシステム。
【請求項10】
前記1つ以上の要求は、前記キューへの格納順に並んだ第2要求と前記第1要求とを含み、
前記コントローラは、前記第2要求が、前記複数の不揮発性メモリチップの内のビジー状態である第2不揮発性メモリチップに対する要求であることに応じ、
前記キューから前記第2要求をフェッチし、
前記フェッチされた第2要求に応じた処理の実行を、前記第2不揮発性メモリチップがビジー状態でなくなるまで待機し、
前記キューから前記第1要求をフェッチし、
前記フェッチされた第1要求に応じた処理を実行するように構成される、
請求項1に記載のメモリシステム。
【請求項11】
前記ビジー状態である不揮発性メモリチップは、データが書き込まれている状態の不揮発性メモリチップである、
請求項1乃至請求項10のいずれか一項に記載のメモリシステム。
【請求項12】
ランダムアクセスメモリをさらに具備し、
前記ビジー状態である不揮発性メモリチップは、データが書き込まれている状態であり、且つ次に書き込まれるべきデータが前記ランダムアクセスメモリに格納済みである不揮発性メモリチップである、
請求項1乃至請求項10のいずれか一項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【0003】
不揮発性メモリは、例えば、1つ以上の不揮発性メモリチップ(不揮発性メモリダイ)で構成される。メモリシステムは、ホストから受け付けた要求に応じて、不揮発性メモリチップに対する処理を行う。
【0004】
より具体的には、ホストには、例えば、サブミッションキュー(SQ)が設けられる。サブミッションキューは、メモリシステムにおいて実行されるべき1つ以上の要求を記憶可能である。
【0005】
メモリシステムは、サブミッションキューから要求を取得することにより、ホストからの要求を受け付ける。そして、メモリシステムは、受け付けた要求に応じた処理を行う。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許第10642500号明細書
【特許文献2】米国特許出願公開第2022/0206871号明細書
【特許文献3】米国特許出願公開第2022/0197563号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
ホストは、各要求の対象となる不揮発性メモリチップを指定することがある。
【0008】
この場合に、メモリシステムが、単一の不揮発性メモリチップを指定している多数の要求をホストから取得したならば、対応する処理を直ちに開始できない要求のために、メモリシステムのリソースが浪費されることになる。そして、メモリシステムでは、リソースが不足することによって処理の効率(スループット)が低下する可能性がある。
【0009】
実施形態の一つは、処理の効率を向上できるメモリシステムを提供する。
【課題を解決するための手段】
【0010】
実施形態によれば、メモリシステムは、複数の不揮発性メモリチップと、コントローラとを具備する。コントローラは、複数の不揮発性メモリチップのそれぞれがビジー状態であるか否かを管理する。コントローラは、ホストによって発行された1つ以上の要求が少なくとも1つのキューに格納されている場合、1つ以上の要求から、複数の不揮発性メモリチップの内のビジー状態でない第1不揮発性メモリチップに対する第1要求を特定し、特定された第1要求に応じた処理を実行する。
【図面の簡単な説明】
【0011】
【
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】比較例に係るメモリシステムにおいて、ホストからの書き込み要求によってリソースが不足する例を示す図。
【
図3】第1実施形態に係るメモリシステムにおいて用いられるメモリチップ管理テーブルの構成例を示す図。
【
図4】第1実施形態に係るメモリシステムにおいて用いられるコマンド管理テーブルの構成例を示す図。
【
図5】第1実施形態に係るメモリシステムにおいて、ライトバッファに格納されているユーザデータの例を示す図。
【
図6】第1実施形態に係るメモリシステムにおけるコマンド実行動作およびビジー状態管理動作の例を示す図。
【
図7】第1実施形態に係るメモリシステムにおいて、フェッチ制御動作によりサブミッションキューからフェッチされるコマンドの例を示す図。
【
図8】第1実施形態に係るメモリシステムにおいて用いられるSQビットマップの例を示す図。
【
図9】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第1の例を示す図。
【
図10】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第2の例を示す図。
【
図11】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第3の例を示す図。
【
図12】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第4の例を示す図。
【
図13】第1実施形態に係るメモリシステムにおいて、ライトコマンドが追加されたコマンド管理テーブルの例を示す図。
【
図14】第1実施形態に係るメモリシステムにおいて実行される第1フェッチ制御処理の手順の例を示すフローチャート。
【
図15】第1実施形態に係るメモリシステムにおいて、フェッチ制御動作によりサブミッションキューからフェッチされるコマンドの別の例を示す図。
【
図16】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第5の例を示す図。
【
図17】第1実施形態に係るメモリシステムにおけるフェッチ制御動作の第6の例を示す図。
【
図18】第1実施形態に係るメモリシステムにおいて、ライトコマンドが追加されたコマンド管理テーブルの別の例を示す図。
【
図19】第1実施形態に係るメモリシステムにおいて実行される第2フェッチ制御処理の手順の例を示すフローチャート。
【
図20】第2実施形態に係るメモリシステムにおいて、フェッチ制御動作によりサブミッションキューからフェッチされるコマンドの例を示す図。
【
図21】第2実施形態に係るメモリシステムにおけるフェッチ制御動作の例を示す図。
【
図22】第2実施形態に係るメモリシステムにおいて、ライトコマンドが追加されたコマンド管理テーブルの例を示す図。
【
図23】第2実施形態に係るメモリシステムにおけるコマンド実行動作およびビジー状態管理動作の例を示す図。
【
図24】第2実施形態に係るメモリシステムにおいて実行される第3フェッチ制御処理の手順の例を示すフローチャート。
【
図25】第2実施形態に係るメモリシステムにおいて実行されるコマンド実行制御処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0012】
以下、実施の形態について図面を参照して説明する。
【0013】
(第1実施形態)
まず
図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。情報処理システム1は、ホストデバイス2とメモリシステム3とを含む。
【0014】
ホストデバイス2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。以下では、ホストデバイス2を、ホスト2とも称する。
【0015】
メモリシステム3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成されたストレージデバイスである。不揮発性メモリは、例えば、NAND型フラッシュメモリである。メモリシステム3はストレージデバイス、または、半導体ストレージデバイスとも称される。メモリシステム3は、例えば、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)として実現される。
【0016】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
【0017】
ホスト2とメモリシステム3とを接続するためのインタフェースは、PCI ExpressTM(PCIeTM)、EthernetTM、Fibre channel、NVM ExpressTM(NVMeTM)等の規格に準拠する。
【0018】
ホスト2は、例えば、CPU21と、ランダムアクセスメモリ(RAM)22とを備える。CPU21とRAM22とは、例えば、バス20を介して接続される。
【0019】
CPU21は、例えば、少なくとも1つのプロセッサである。CPU21は、ホスト2内の様々なコンポーネントの動作を制御する。
【0020】
RAM22は揮発性メモリである。RAM22は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、またはスタティックランダムアクセスメモリ(SRAM)として実現される。RAM22の記憶領域は、例えば、データバッファ221、および1つ以上のサブミッションキュー222として割り当てられる。
【0021】
データバッファ221は、ホスト2(より詳しくは、CPU21)がメモリシステム3に対して発行する要求と共にメモリシステム3へ送信されるべきデータを一時的に記憶する。例えば、書き込み要求が発行される場合、データバッファ221には、書き込み要求に応じてメモリシステム3の不揮発性メモリに書き込まれるべきデータが一時的に格納される。要求は、例えば、コマンドである。以下では、要求を、コマンドとも称する。
【0022】
1つ以上のサブミッションキュー222のそれぞれは、ホスト2がメモリシステム3に対して発行するコマンドを格納するためのキューである。つまり、ホスト2は、サブミッションキュー222を介してコマンドをメモリシステム3に送信する。各サブミッションキュー222は、メモリシステム3に対して発行するコマンドをホスト2がそれぞれに書き込む複数のスロットを含む。ホスト2がコマンドを書き込むべきサブミッションキュー222内の位置(すなわちスロット)は、SQテイルポインタ(SQ tail pointer)で示される。メモリシステム3がフェッチすべきコマンドのサブミッションキュー222内の先頭位置は、SQヘッドポインタ(SQ head pointer)で示される。
【0023】
ホスト2は、サブミッションキュー222内のSQテイルポインタが示す位置に、コマンドを書き込む(すなわち、コマンドを発行する)。そして、ホスト2は、SQテイルポインタに1を加算する。なお、SQテイルポインタに1を加算した値が、サブミッションキュー222のスロット数(すなわちキューサイズ)に達する場合、ホスト2はSQテイルポインタに0を設定する。そして、ホスト2は、更新されたSQテイルポインタの値をメモリシステム3のSQテイル・ドアベル・レジスタに書き込む。
【0024】
図1に示す例では、サブミッションキュー222に3個のコマンドが格納されている。サブミッションキュー222に格納されているコマンドの数は、SQヘッドポインタとSQテイルポインタとの差に相当する。
【0025】
メモリシステム3は、例えば、不揮発性メモリ4、DRAM5、およびコントローラ6、を備える。
【0026】
不揮発性メモリ4は、1つ以上の不揮発性メモリチップ41を含む。1つ以上の不揮発性メモリチップ41は、例えば、N個の不揮発性メモリチップ41-1、……、および41-Nである。Nは1以上の整数である。以下では、不揮発性メモリ4がN個の不揮発性メモリチップ41-1、……、および41-Nを含む場合について、主に例示する。N個の不揮発性メモリチップ41-1、……、および41-Nの内の特定しない1つを指して、不揮発性メモリチップ41とも称する。また、N個の不揮発性メモリチップ41-1、……、および41-Nの内のk番目の不揮発性メモリチップを、第k不揮発性メモリチップ41-kと表記する。
【0027】
不揮発性メモリチップ41は、メモリセルアレイ31とページバッファ32を含む。
【0028】
メモリセルアレイ31は、マトリクス状に配置された複数のメモリセルをそれぞれが含む複数のブロックを含む。1つのブロックは、データ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。複数のブロックのそれぞれは、複数のページを含む。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0029】
ページバッファ32は、例えばSRAMで構成される。ページバッファ32には、コントローラ6と不揮発性メモリチップ41との間で転送されるデータが一時的に格納される。
【0030】
データ書き込み動作の際、コントローラ6から受信したデータは、ページバッファ32に一時的に格納された後、メモリセルアレイ31にプログラムされる。以下では、コントローラ6から受信したデータをページバッファ32に一時的に格納する動作をデータイン動作と称する。また、ページバッファ32に一時的に格納されたデータをメモリセルアレイ31にプログラムする動作をプログラム動作と称する。
【0031】
各ブロックに対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするためのデータ消去動作と、このブロックのページそれぞれにデータを書き込むプログラム動作とを含む。
【0032】
DRAM5は揮発性のメモリである。DRAM5には、例えば、ファームウェア(FW)の格納領域、メモリチップ管理テーブル51およびコマンド管理テーブル52の格納領域、並びにデータを一時的に記憶するバッファ領域が設けられる。バッファ領域は、例えば、不揮発性メモリ4に書き込まれるべきユーザデータを一時的に記憶するライトバッファ53である。
【0033】
FWは、コントローラ6の動作を制御するためのプログラムである。FWは、例えば、不揮発性メモリ4からDRAM5にロードされる。
【0034】
メモリチップ管理テーブル51は、N個の不揮発性メモリチップ41のそれぞれの動作状態を管理するためのテーブルである。メモリチップ管理テーブル51の具体的な構成例については、
図3を参照して後述する。
【0035】
コマンド管理テーブル52は、ホスト2のサブミッションキュー222からフェッチされたコマンドを管理するためのテーブルである。コマンド管理テーブル52の具体的な構成例については、
図4を参照して後述する。
【0036】
コントローラ6は、System-on-a-chip(SoC)のような回路によって実現され得る。コントローラ6は、不揮発性メモリ4を制御するように構成される。コントローラ6内の各部の機能は、コントローラ6内の専用ハードウェアによって実現されてもよいし、FWを実行するプロセッサによって実現されてもよい。
【0037】
コントローラ6は、不揮発性メモリ4のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれと不揮発性メモリ4の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のデータ読み出し/データ書き込み動作とブロック単位のデータ消去動作との差異を隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
【0038】
論理アドレスは、メモリシステム3の記憶領域をアドレス指定するために、ホスト2によって使用される。論理アドレスは、例えば論理ブロックアドレス(LBA)である。
【0039】
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、例えば、論理物理アドレス変換テーブルを用いて実行される。コントローラ6は、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータが書き込まれた不揮発性メモリ4内の物理記憶位置を示す。コントローラ6は、論理物理アドレス変換テーブルを用いて、不揮発性メモリ4の記憶領域を論理的に分割した複数の記憶領域を管理する。これら複数の記憶領域は、複数の論理アドレスにそれぞれ対応する。つまり、これら複数の記憶領域のそれぞれは、1つの論理アドレスで特定される。論理物理アドレス変換テーブルは、メモリシステム3の起動時に不揮発性メモリ4からDRAM5にロードされてもよい。
【0040】
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ6は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ6は、この論理アドレスをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、以前のデータを無効化する。論理物理アドレス変換テーブルから参照されているデータ(すなわち論理アドレスと紐付けられているデータ)は有効データと称される。また、どの論理アドレスとも紐付けられていないデータは無効データと称される。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
【0041】
コントローラ6は、例えば、DRAMインタフェース(DRAM I/F)11と、メモリコントローラ12とを含む。これらDRAM I/F11およびメモリコントローラ12は、例えば、バス10を介して接続されている。コントローラ6は、SRAM13をさらに含んでいてもよい。その場合、SRAM13の記憶領域が、メモリチップ管理テーブル51の格納領域、コマンド管理テーブル52の格納領域、およびライトバッファ53の少なくともいずれかとして割り当てられてもよい。
【0042】
DRAM I/F11は、DRAM5へのアクセスを制御するように構成されたDRAM制御回路として機能する。
【0043】
メモリコントローラ12は、不揮発性メモリ4に対する各種の処理を制御するように構成される。メモリコントローラ12は、フロントエンド部121とバックエンド部122とを備える。
【0044】
フロントエンド部121は、ホスト2とメモリシステム3との間の通信を制御する。通信により、例えば、ホスト2からメモリシステム3へコマンドおよびデータが送信される。
【0045】
具体的には、フロントエンド部121はフェッチ制御動作を行う。フェッチ制御動作は、ホスト2のサブミッションキュー222からフェッチされるべきコマンドを特定し、特定されたコマンドをフェッチする動作である。フェッチされるコマンドは、例えば、入出力(I/O)コマンド、および各種制御コマンドである。I/Oコマンドには、ライトコマンド、およびリードコマンドが含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)、およびフォーマットコマンドが含まれ得る。
【0046】
なお、コマンドは、対象とする不揮発性メモリチップ41を指定し得る。具体的には、コマンドは、例えば、対象とする不揮発性メモリチップ41に付与された識別情報(チップID)を含む。あるいは、コマンドは、対象とするスーパーブロックに付与された識別情報を含んでいてもよい。スーパーブロックは、1つ以上の不揮発性メモリチップ41に含まれる複数の物理ブロックで構成される。したがって、コマンドは、対象とするスーパーブロックに付与された識別情報を含むことにより、間接的に不揮発性メモリチップ41を指定し得る。
【0047】
フロントエンド部121は、フェッチ制御動作において、例えば、サブミッションキュー222内の各コマンドが指定している不揮発性メモリチップ41の状態に基づいて、フェッチされるべきコマンドを特定する。フロントエンド部121は、特定されたコマンドをフェッチする。そして、フロントエンド部121は、フェッチされたコマンドを管理する。フェッチされたコマンドの管理には、例えば、コマンド管理テーブル52が用いられる。フェッチ制御動作の具体的な例については、
図7から
図13を参照して後述する。
【0048】
また、フロントエンド部121は、記憶領域61を備える。記憶領域61は、レジスタのような、データを一時的に保存するための記憶領域である。記憶領域61は、例えば、SQヘッドポインタ611の格納領域、SQテイル・ドアベル・レジスタ、およびSQビットマップ613の格納領域として割り当てられる。SQテイル・ドアベル・レジスタには、ホスト2によって管理されるSQテイルポインタの値が書き込まれる。以下では、記憶領域61内のSQテイル・ドアベル・レジスタに格納されている値を、SQテイルポインタ612と称する。
【0049】
SQビットマップ613は、SQヘッドポインタ611で示されるスロットから、SQテイルポインタ612で示されるスロットの1つ前のスロットまでの各スロットに格納されているコマンドのフェッチ状態を示すビット列データである。SQビットマップ613は、例えば、対応するサブミッションキュー222のスロット数に相当する数のビットを含む。フェッチ状態は、コマンドが既にフェッチされた状態(フェッチ済)と、コマンドがまだフェッチされていない状態(未フェッチ)のいずれかである。SQビットマップ613の具体的な構成例については、
図8を参照して後述する。
【0050】
ホスト2に複数のサブミッションキュー222が設けられている場合、記憶領域61には、SQヘッドポインタ611、SQテイルポインタ612、およびSQビットマップ613のセットが複数格納される。記憶領域61に格納されるSQヘッドポインタ611、SQテイルポインタ612、およびSQビットマップ613の複数のセットのそれぞれは、ホスト2内の複数のサブミッションキュー222のいずれか1つに関連付けられる。SQヘッドポインタ611、SQテイルポインタ612、およびSQビットマップ613のセットは、SRAM13のような揮発性メモリに格納されてもよい。
【0051】
フロントエンド部121は、SQヘッドポインタ611とSQテイルポインタ612とを用いて、対応するサブミッションキュー222に格納されているコマンドの数を管理する。具体的には、フロントエンド部121は、SQヘッドポインタ611とSQテイルポインタ612の差に基づいて、対応するサブミッションキュー222に格納されているコマンドの数を算出する。また、フロントエンド部121は、各サブミッションキュー222から既にフェッチされたコマンドとまだフェッチされていないコマンドとを、例えば、SQビットマップ613を用いて管理する。
【0052】
バックエンド部122は、コントローラ6と不揮発性メモリ4とを電気的に接続する。バックエンド部122は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0053】
バックエンド部122は、不揮発性メモリ4を制御するように構成されたメモリ制御回路として機能する。バックエンド部122は、複数のチャネルを介して、複数の不揮発性メモリチップ41にそれぞれ接続されていてもよい。複数の不揮発性メモリチップ41が並列に駆動されることにより、コントローラ6と不揮発性メモリ4との間のアクセスの帯域幅が広げられる。
【0054】
また、フロントエンド部121とバックエンド部122は、コマンド実行動作とビジー状態管理動作とを行う。
【0055】
コマンド実行動作は、フェッチ済みのコマンドに応じた処理を実行するための動作である。具体的には、例えば、フェッチ済みのコマンドがライトコマンドである場合、コマンド実行動作は、データ転送動作とデータ書き込み動作とを含む。データ転送動作は、フロントエンド部121が、フェッチ済みのライトコマンドに応じて不揮発性メモリ4に書き込まれるべきユーザデータを、ホスト2のデータバッファ221からメモリシステム3のライトバッファ53へ転送する動作である。データ書き込み動作は、バックエンド部122が、フェッチ済みのライトコマンドに基づき、ユーザデータを不揮発性メモリ4に書き込む動作である。データ書き込み動作は、データイン動作とプログラム動作とを含む。
【0056】
ビジー状態管理動作は、N個の不揮発性メモリチップ41のそれぞれのビジー状態を管理するための動作である。ビジー状態は、不揮発性メモリチップ41においてプログラム動作が行われている状態である。あるいは、ビジー状態は、不揮発性メモリチップ41においてプログラム動作が行われており、且つ次のプログラム動作で書き込まれるべきユーザデータがライトバッファ53に既に格納されている状態であってもよい。なお、ビジー状態でない状態を、アイドル状態とも称する。
【0057】
ビジー状態管理動作において、バックエンド部122は、各不揮発性メモリチップ41
がビジー状態であるか否かを判定し、ビジー状態に関する情報をフロントエンド部121に通知する。ビジー状態に関する情報は、例えば、各不揮発性メモリチップ41におけるビジー状態の開始と終了のいずれかを示す情報を含む。フロントエンド部121は、バックエンド部122による通知に基づき、各不揮発性メモリチップ41の現在の状態を示すようにメモリチップ管理テーブル51を更新する。これにより、フロントエンド部121およびバックエンド部122は、各不揮発性メモリチップ41のビジー状態を管理する。
【0058】
コマンド実行動作およびビジー状態管理動作の具体的な例については、
図6を参照して後述する。
【0059】
ここで、サブミッションキュー222からのコマンドのフェッチと、メモリシステム3のリソースとの関係について説明する。メモリシステム3のリソースは、サブミッションキュー222からコマンドがフェッチされたことに応じて消費される。リソースが不足した場合、ホスト2からのコマンドに応じたメモリシステム3の処理効率(スループット)が低下する可能性がある。
【0060】
図2は、ホスト2のサブミッションキュー222からライトコマンドがフェッチされたことによって、比較例に係るメモリシステム3Aのリソースが不足する例を示す。ホスト2は、ライトコマンドに応じてユーザデータが書き込まれる不揮発性メモリチップを指定することがある。この場合、ホスト2による不揮発性メモリチップの指定方法によっては、メモリシステム3Aにおける処理効率が低下する可能性がある。
【0061】
具体的には、ホスト2のサブミッションキュー222からライトコマンドがフェッチされた場合、フェッチされたライトコマンドに応じてメモリシステム3Aのリソースが消費される。消費されるリソースは、例えば、フェッチされたライトコマンドを管理するためのリソース(例えば、コマンド管理テーブル)、フェッチされたライトコマンドに応じて不揮発性メモリチップに書き込まれるべきユーザデータが転送されるホスト2とメモリシステム3Aとの間のバス帯域、および転送されたユーザデータを一時的に記憶するためのリソース(例えば、ライトバッファ)である。リソースの不足により、メモリシステム3Aにおける処理効率は低下する可能性がある。例えば、コマンド管理テーブルの空き領域が不足した場合、メモリシステム3Aは、サブミッションキュー222から新たなライトコマンドをフェッチできなくなる。また例えば、ホスト2とメモリシステム3Aとの間のバス帯域が不足した場合、あるいはライトバッファの空き領域が不足した場合、メモリシステム3Aは、フェッチされたライトコマンドに対応するユーザデータをホスト2からメモリシステム3Aへ転送できなくなる。
【0062】
図2に示す例では、ホスト2において4つのジョブJ0、J1、J2、およびJ3が実行されている。ジョブJ0、J1、J2、およびJ3のそれぞれは、例えば、ホスト2上で実行されているアプリケーションプログラムによる処理である。ここでは、ジョブJ0、J1、J2、およびJ3の全てで、複数の不揮発性メモリチップの各々を指定する多数のライトコマンドが特定の順序で発行されることを想定する。
【0063】
具体的には、まず、ジョブJ0、J1、J2、およびJ3のそれぞれでは、第1不揮発性メモリチップを指定する多数のライトコマンドが発行される。メモリシステム3Aでは、発行されたライトコマンドがフェッチされ、リソースが消費される。そして、第1不揮発性メモリチップに対して、コマンド実行動作が完了していない多数のライトコマンド(すなわち不揮発化待ちのライトコマンド)の待ち行列C1が形成される。なお、図示された各ライトコマンドに付されたハッチングは、そのコマンドが、同一のハッチングが付されたジョブで発行されたことを表している。
【0064】
次に、ジョブJ0、J1、J2、およびJ3のそれぞれでは、第2不揮発性メモリチップを指定する多数のライトコマンドが発行される。メモリシステム3Aでは、発行されたライトコマンドがフェッチされ、リソースが消費される。そして、第2不揮発性メモリチップに対して、多数のライトコマンドの待ち行列C2が形成される。
【0065】
次いで、ジョブJ0、J1、J2、およびJ3のそれぞれでは、第3不揮発性メモリチップを指定する多数のライトコマンドが発行される。メモリシステム3Aでは、発行されたライトコマンドがフェッチされ、リソースが消費される。そして、第3不揮発性メモリチップに対して、多数のライトコマンドの待ち行列C3が構成される。
【0066】
さらに、ジョブJ0、J1、J2、およびJ3のそれぞれでは、第4不揮発性メモリチップを指定する多数のライトコマンドが発行される。メモリシステム3Aでは、発行されたライトコマンド全てがフェッチされる前に、リソース(例えば、コマンド管理テーブルの空き領域、またはライトバッファの空き領域)が枯渇する。そのため、メモリシステム3Aは、例えば、第5不揮発性メモリチップ以降の不揮発性メモリチップに対するライトコマンドをフェッチできなくなる。
【0067】
また、メモリシステム3Aでは、フェッチ済みのライトコマンドに応じて、不揮発性メモリチップに書き込まれるべきユーザデータがホスト2から転送される。しかしながら、単一の不揮発性メモリチップに対して多数のライトコマンドが発行され、フェッチされた場合、直ちにプログラムされないユーザデータがホスト2から転送され、ライトバッファに格納される可能性がある。これは、直ちにプログラムされないユーザデータのために、ホスト2とメモリシステム3Aとの間のバス帯域と、ライトバッファの記憶領域とが浪費されることを意味する。これにより、例えば、別の不揮発性メモリチップがデータイン動作およびプログラム動作を直ちに開始可能であるにも関わらず、対応するユーザデータのホスト2からの転送が、その直ちにプログラムされないユーザデータの転送よりも後回しになるという状況を招き得る。
【0068】
したがって、
図2に示すケースでは、リソースの不足によってメモリシステム3Aにおける処理効率が低下する可能性がある。また、例えば、ジョブJ0、J1、J2、およびJ3のそれぞれで発行されるコマンドが、複数の不揮発性メモリチップのいずれかをランダムに指定する場合にも、リソースが解放されるタイミングがランダムになり、リソースを有効に利用できず、処理効率が低下する可能性がある。しかしながら、リソースが不足しないようにメモリシステム3Aに設けられるリソースを増やした場合、メモリシステム3Aのコストが増大する。また、リソースの不足を緩和するためにホスト2が不揮発性メモリチップを指定する方法に制約を設けた場合、ベンダまたは機種に応じて指定方法を変更する必要が生じ、ソフトウェアの共通化ができなくなる。
【0069】
メモリシステム3Aにおけるリソースの不足による処理効率の低下は、例えば、各サブミッションキュー222に格納されているコマンドを先頭から順にフェッチして、フェッチされたコマンドに応じた処理を開始することによって起きる。
【0070】
そのため本実施形態では、コントローラ6は、サブミッションキュー222に格納されている1つ以上のコマンドから、ビジー状態でない不揮発性メモリチップ41を指定しているコマンドを特定し、特定されたコマンドに応じた処理を実行するように構成される。これにより、ビジー状態である不揮発性メモリチップ41に対するコマンドによって、メモリシステム3のリソースが浪費されることを回避できる。したがって、メモリシステム3における処理効率を向上できる。
【0071】
ここで、
図3から
図5を参照して、メモリシステム3において用いられるメモリチップ管理テーブル51、コマンド管理テーブル52、およびライトバッファ53について具体的に説明する。
【0072】
図3は、メモリチップ管理テーブル51の構成例を示す。メモリチップ管理テーブル51は、例えば、N個のエントリを含む。N個のエントリは、N個の不揮発性メモリチップ41にそれぞれ対応する。N個のエントリのそれぞれは、チップIDフィールドと、状態フィールドとを含む。
【0073】
チップIDフィールドは、対応する不揮発性メモリチップ41のチップIDを示す。チップIDは、N個の不揮発性メモリチップ41の内、対応する1つの不揮発性メモリチップ41を一意に特定可能な情報である。
【0074】
状態フィールドは、対応する不揮発性メモリチップ41の状態を示す。より詳しくは、状態フィールドは、対応する不揮発性メモリチップ41がビジー状態であるか否かを示す。状態フィールドには、例えば、ビジー状態を表す“ビジー”と、アイドル状態を表す“アイドル”のいずれか一方が設定される。
【0075】
図3に示す例では、チップIDが1である第1不揮発性メモリチップ41-1が、ビジー状態であることが示されている。チップIDが2である第2不揮発性メモリチップ41-2が、アイドル状態であることが示されている。チップIDが3である第3不揮発性メモリチップ41-3が、アイドル状態であることが示されている。また、チップIDがNである第N不揮発性メモリチップ41-Nが、ビジー状態であることが示されている。
【0076】
図4は、コマンド管理テーブル52の構成例を示す。コマンド管理テーブル52は、1つ以上のエントリを含む。1つ以上のエントリは、例えば、フェッチ済みであり、且つ対応する処理が完了していない1つ以上のコマンドにそれぞれ対応する。1つ以上のエントリのそれぞれは、例えば、コマンド情報フィールドを含む。
【0077】
コマンド情報フィールドは、対応するコマンドに関する情報を示す。コマンドに関する情報は、例えば、コマンドの識別情報(タグ)、コマンドの種類(ここでは、ライトコマンド)、指定された不揮発性メモリチップ41の識別情報(チップID)、指定された論理アドレス範囲、書き込まれるべきユーザデータが格納されているホスト2内の記憶位置を示す情報を含む。コマンドに関する情報は、サブミッションキュー222からフェッチされたコマンドそのものの情報を含んでいてもよい。
【0078】
図4に示す例では、チップIDが1である第1不揮発性メモリチップ41-1をそれぞれが指定したライトコマンドcmdAとライトコマンドcmdBと、が管理されている。つまり、ライトコマンドcmdAとライトコマンドcmdBとは、フェッチ済みであり、且つ対応する処理が完了していないコマンドである。
【0079】
コマンド管理テーブル52には、例えば、サブミッションキュー222からコマンドがフェッチされたことに応じて、そのコマンドに対応するエントリが追加される。また、例えば、コマンドに対応する処理が完了したことに応じて(例えば、コマンドに対応する完了応答(コンプリーション)がホスト2の図示しないコンプリーションキューに格納されたことに応じて)、そのコマンドに対応するエントリがコマンド管理テーブル52から削除される。なお、以下では、コマンドに対応するエントリをコマンド管理テーブル52に追加することを、単に、コマンドをコマンド管理テーブル52に追加するとも称する。
【0080】
図5は、ライトバッファ53に格納されているユーザデータの例を示す。ここでは、
図4に示した状態のコマンド管理テーブル52に基づくコマンド実行動作により、ユーザデータ53Aとユーザデータ53Bとが格納されている場合を例示する。
【0081】
ユーザデータ53Aは、ライトコマンドcmdAに応じて第1不揮発性メモリチップ41-1に書き込まれるべきユーザデータである。ユーザデータ53Bは、ライトコマンドcmdBに応じて第1不揮発性メモリチップ41-1に書き込まれるべきユーザデータである。
【0082】
図3のメモリチップ管理テーブル51、
図4のコマンド管理テーブル52、および
図5のライトバッファ53、のそれぞれの状態は、ビジー状態である第1不揮発性メモリチップ41-1に対応する。より詳しくは、第1不揮発性メモリチップ41-1が、ライトコマンドcmdAに応じてユーザデータ53Aを書き込むプログラム動作が行われているビジー状態であり、且つ次のライトコマンドcmdBに応じて書き込まれるべきユーザデータ53Bが既にライトバッファ53に格納されていることが表されている。
【0083】
次いで、
図6から
図13を参照して、フロントエンド部121およびバックエンド部122の動作について説明する。以下では、説明を分かりやすくするために、サブミッションキュー222に格納されるコマンドが全てライトコマンドである場合を例示する。なお、サブミッションキュー222には、他の種類のコマンドが格納されてもよい。
【0084】
図6は、フロントエンド部121およびバックエンド部122によって行われるコマンド実行動作とビジー状態管理動作の例を示す。前述したように、コマンド実行動作は、フェッチ済みのコマンドに応じた処理を実行する動作である。ビジー状態管理動作は、不揮発性メモリチップ41のビジー状態を管理する動作である。
【0085】
まず、コマンド実行動作について説明する。
【0086】
ここでは、コマンド管理テーブル52において、対応するコマンド実行動作がまだ開始されていないライトコマンドcmdAが管理されている場合を想定する。ライトコマンドcmdAに応じて不揮発性メモリ4に書き込まれるべきユーザデータは、ユーザデータ53Aである。また、ライトコマンドcmdAは、ユーザデータ53Aの書き込み先として第1不揮発性メモリチップ41-1を指定している。
【0087】
フロントエンド部121は、コマンド管理テーブル52を参照して、ライトコマンドcmdAのコマンド情報(以下、第1コマンド情報と称する)を取得する(
図6中の(1))。第1コマンド情報は、例えば、ユーザデータ53Aが格納されているホスト2内の記憶位置を示す情報、およびユーザデータ53Aの書き込み先として指定された第1不揮発性メモリチップ41-1のチップIDを含んでいる。
【0088】
フロントエンド部121は、取得された第1コマンド情報に基づいて、ホスト2のデータバッファ221からメモリシステム3のライトバッファ53へユーザデータ53Aを転送する(
図6中の(2))。具体的には、フロントエンド部121は、第1コマンド情報に基づいてデータバッファ221から読み出されたユーザデータ53Aを、ホスト2から受信する。そして、フロントエンド部121は、受信したユーザデータ53Aをライトバッファ53に格納する。フロントエンド部121は、ユーザデータ53Aのライトバッファ53への格納が完了したことを、バックエンド部122に通知してもよい。
【0089】
次いで、バックエンド部122は、コマンド管理テーブル52を参照して、第1コマンド情報を取得する(
図6中の(3))。バックエンド部122は、取得された第1コマンド情報に基づいて、ライトバッファ53に格納されているユーザデータ53Aを、第1不揮発性メモリチップ41-1内のページバッファ32に転送するデータイン動作を行う(
図6中の(4))。そして、バックエンド部122は、ページバッファ32に格納されているユーザデータ53Aを、第1不揮発性メモリチップ41-1内のメモリセルアレイ31に書き込む(プログラムする)ことを、第1不揮発性メモリチップ41-1に指示する(
図6中の(5))。この指示に応じて、第1不揮発性メモリチップ41-1では、ユーザデータ53Aをメモリセルアレイ31に書き込むプログラム動作が行われる(
図6中の(6))。
【0090】
バックエンド部122は、他の不揮発性メモリチップ41-2、41-3、……、および41-Nのそれぞれに対しても同様に、コマンド管理テーブル52において管理されているコマンドに応じた処理を行うことができる。
【0091】
このように、フロントエンド部121およびバックエンド部122は、コマンド管理テーブル52を用いて、フェッチ済みのコマンドに応じた処理を実行できる。
【0092】
次いで、ビジー状態管理動作について説明する。
【0093】
バックエンド部122は、N個の不揮発性メモリチップ41-1、41-2、41-3、……、および41-Nのそれぞれの状態を管理する。具体的には、バックエンド部122は、N個の不揮発性メモリチップ41-1、41-2、41-3、……、および41-Nのそれぞれがプログラム動作中であるかどうかを判定する。さらに、バックエンド部122は、コマンド管理テーブル52と、ライトバッファ53に格納されているユーザデータとに基づいて、N個の不揮発性メモリチップ41-1、41-2、41-3、……、および41-Nのそれぞれに対して次に実行されるライトコマンドに対応するユーザデータが、ライトバッファ53に既に格納されているかを判定してもよい。
【0094】
バックエンド部122は、ある不揮発性メモリチップ41がアイドル状態からビジー状態に遷移したことに応じて、その不揮発性メモリチップ41のビジー状態の開始を、フロントエンド部121に通知する(
図6中の(7))。バックエンド部122は、ある不揮発性メモリチップ41に対してプログラム動作が開始されたことに応じて、その不揮発性メモリチップ41がビジー状態に遷移したと判断する。あるいは、バックエンド部122は、ある不揮発性メモリチップ41に対してプログラム動作が開始され、且つその不揮発性メモリチップ41に対して次に実行されるライトコマンドに対応するユーザデータがライトバッファ53に格納されている場合、その不揮発性メモリチップ41がビジー状態に遷移したと判断してもよい。また、バックエンド部122は、ある不揮発性メモリチップ41に対するプログラム動作中に、その不揮発性メモリチップ41に対して次に実行されるライトコマンドに対応するユーザデータがライトバッファ53に格納されたことに応じ、その不揮発性メモリチップ41がビジー状態に遷移したと判断してもよい。
【0095】
フロントエンド部121は、不揮発性メモリチップ41のビジー状態の開始がバックエンド部122から通知されたことに応じて、メモリチップ管理テーブル51を更新する(
図6中の(8))。具体的には、フロントエンド部121は、その不揮発性メモリチップ41がビジー状態であることを示すように、メモリチップ管理テーブル51を更新する。
【0096】
また、バックエンド部122は、ある不揮発性メモリチップ41がビジー状態からアイドル状態に遷移したことに応じて、その不揮発性メモリチップ41のビジー状態の終了を、フロントエンド部121に通知する(
図6中の(9))。バックエンド部122は、ある不揮発性メモリチップ41においてプログラム動作が終了したことに応じて、その不揮発性メモリチップ41がアイドル状態に遷移したと判断する。あるいは、バックエンド部122は、ある不揮発性メモリチップ41に対して次に実行されるライトコマンドに対応するユーザデータが、ライトバッファ53に格納されていない場合、その不揮発性メモリチップ41がアイドル状態に遷移したと判断してもよい。
【0097】
フロントエンド部121は、不揮発性メモリチップ41のビジー状態の終了がバックエンド部122から通知されたことに応じて、メモリチップ管理テーブル51を更新する(
図6中の(10))。具体的には、フロントエンド部121は、その不揮発性メモリチップ41がアイドル状態であることを示すように、メモリチップ管理テーブル51を更新する。
【0098】
なお、バックエンド部122が、不揮発性メモリチップ41のビジー状態の開始と、不揮発性メモリチップ41のビジー状態の終了とに応じて、メモリチップ管理テーブル51を更新してもよい。その場合、フロントエンド部121は、バックエンド部122によって更新されたメモリチップ管理テーブル51を参照することにより、不揮発性メモリチップ41がビジー状態であるか否かを判断できる。
【0099】
このように、フロントエンド部121およびバックエンド部122は、メモリチップ管理テーブル51を用いて、各不揮発性メモリチップ41がビジー状態であるか否かを管理できる。
【0100】
次いで、
図7から
図13を参照して、フロントエンド部121によって行われるフェッチ制御動作について説明する。以下では、ホスト2に、4つのサブミッションキュー222が設けられ、各サブミッションキュー222のスロット数が5である場合を例示する。4つのサブミッションキュー222は、第1サブミッションキュー222-1、第2サブミッションキュー222-2、第3サブミッションキュー222-3、および第4サブミッションキュー222-4である。
【0101】
図7は、フェッチ制御動作により、サブミッションキュー222-1、222-2、222-3、および222-4からフェッチされるコマンドの例を示す。
【0102】
第1サブミッションキュー222-1は、5つのスロット711、712、713、714、および715を含む。スロット711は、第1サブミッションキュー222-1に対応するSQヘッドポインタ611によって特定される先頭のスロットである。つまり、スロット711には、第1サブミッションキュー222-1の先頭のコマンドが格納される。
【0103】
5つのスロット711、712、713、714、および715には、5つのライトコマンドがそれぞれ格納されている。スロット711、712、713、714、および715の順序は、5つのライトコマンドの第1サブミッションキュー222-1への格納順に対応する。これら5つのライトコマンドは、フロントエンド部121によってまだフェッチされていないコマンドである。
【0104】
スロット711、およびスロット712のそれぞれに格納されているライトコマンドは、ビジー状態である不揮発性メモリチップ41を指定している。スロット713、スロット714、およびスロット715のそれぞれに格納されているライトコマンドは、アイドル状態である不揮発性メモリチップ41を指定している。スロット711に格納されているライトコマンドを、ライトコマンドcmdCと称する。スロット712に格納されているライトコマンドを、ライトコマンドcmdDと称する。スロット713に格納されているライトコマンドを、ライトコマンドcmdEと称する。スロット714に格納されているライトコマンドを、ライトコマンドcmdFと称する。
【0105】
第2サブミッションキュー222-2は、5つのスロット721、722、723、724、および725を含む。スロット721は、第2サブミッションキュー222-2に対応するSQヘッドポインタ611によって特定される先頭のスロットである。つまり、スロット721には、第2サブミッションキュー222-2の先頭のコマンドが格納される。
【0106】
4つのスロット721、722、723、および724には、4つのライトコマンドがそれぞれ格納されている。4つのスロット721、722、723、および724の順序は、4つのライトコマンドの第2サブミッションキュー222-2への格納順に対応する。4つのライトコマンドは、フロントエンド部121によってまだフェッチされていないコマンドである。また、4つのライトコマンドはいずれも、アイドル状態である不揮発性メモリチップ41を指定している。スロット721に格納されているライトコマンドを、ライトコマンドcmdGと称する。なお、空白で示されたスロット725は、コマンドが格納されていないスロットである。
【0107】
第3サブミッションキュー222-3は、5つのスロット731、732、733、734、および735を含む。スロット731は、第3サブミッションキュー222-3に対応するSQヘッドポインタ611によって特定される先頭のスロットである。つまり、スロット731には、第3サブミッションキュー222-3の先頭のコマンドが格納される。
【0108】
スロット731、732、および733には、3つのライトコマンドがそれぞれ格納されている。スロット731、732、および733の順序は、3つのライトコマンドの第3サブミッションキュー222-3への格納順に対応する。これら3つのライトコマンドは、フロントエンド部121によってまだフェッチされていないコマンドである。
【0109】
スロット731に格納されているライトコマンドは、ビジー状態である不揮発性メモリチップ41を指定している。スロット732とスロット733のそれぞれに格納されているライトコマンドは、アイドル状態である不揮発性メモリチップ41を指定している。スロット731に格納されているライトコマンドを、ライトコマンドcmdHと称する。スロット732に格納されているライトコマンドを、ライトコマンドcmdIと称する。なお、空白で示されたスロット734および735は、コマンドが格納されていないスロットである。
【0110】
第4サブミッションキュー222-4は、5つのスロット741、742、743、744、および745を含む。スロット741は、第4サブミッションキュー222-4に対応するSQヘッドポインタ611によって特定される先頭のスロットである。つまり、スロット741には、第4サブミッションキュー222-4の先頭のコマンドが格納される。
【0111】
スロット741、742、743、および744には、4つのライトコマンドがそれぞれ格納されている。スロット741、742、743、および744の順序は、4つのライトコマンドの第4サブミッションキュー222-4への格納順に対応する。4つのライトコマンドは、フロントエンド部121によってまだフェッチされていないコマンドである。また、4つのライトコマンドはいずれも、ビジー状態である不揮発性メモリチップ41を指定している。スロット741に格納されているライトコマンドを、ライトコマンドcmdJと称する。なお、空白で示されたスロット745は、コマンドが格納されていないスロットである。
【0112】
フロントエンド部121は、調停(arbitration)により、4つのサブミッションキュー222-1、222-2、222-3、および222-4から、コマンドがフェッチされるべき1つのサブミッションキュー222を選択する。調停のメカニズムとしては、例えば、NVMe規格で規定された、ラウンドロビン、または重み付きラウンドロビンが用いられる。フロントエンド部121は、選択されたサブミッションキュー222から、アイドル状態である不揮発性メモリチップ41を指定しているライトコマンドをフェッチし、ビジー状態である不揮発性メモリチップ41を指定しているライトコマンドをフェッチしないように構成される。
【0113】
具体的には、フロントエンド部121は、調停により第1サブミッションキュー222-1が選択された場合、スロット711のライトコマンドcmdCと、スロット712のライトコマンドcmdDとをフェッチせずに、スロット713のライトコマンドcmdEをフェッチする。フロントエンド部121は、調停により第2サブミッションキュー222-2が選択された場合、スロット721のライトコマンドcmdGをフェッチする。フロントエンド部121は、調停により第3サブミッションキュー222-3が選択された場合、スロット731のライトコマンドcmdHをフェッチせずに、スロット732のライトコマンドcmdIをフェッチする。フロントエンド部121は、調停により第4サブミッションキュー222-4が選択された場合、第4サブミッションキュー222-4からいずれのライトコマンドもフェッチしない。
【0114】
なお、フロントエンド部121は、各サブミッションキュー222から既にフェッチされたライトコマンドとまだフェッチされていないライトコマンドとを、例えば、SQビットマップ613を用いて管理する。
【0115】
図8は、SQビットマップ613の例を示す。SQビットマップ613は、例えば、対応するサブミッションキュー222のSQヘッドポインタ611で示されるスロットから、SQテイルポインタ612で示されるスロットの1つ前のスロットまでの各スロットに格納されているライトコマンドのフェッチ状態を示すビット列データである。SQヘッドポインタ611で示されるスロットを、先頭のスロットとも称する。SQテイルポインタ612で示されるスロットの1つ前のスロットを、末尾のスロットとも称する。SQビットマップ613の各ビットは、例えば、先頭から順に、先頭のスロットから末尾のスロットまでのスロットのそれぞれに格納されているライトコマンドに対応する。ここでは、一例として、あるライトコマンドに対応するSQビットマップ613のビットが、そのライトコマンドが未フェッチである場合、0に設定され、そのライトコマンドがフェッチ済みである場合、1に設定されるものとする。
【0116】
図8(a)に示すSQビットマップ613-1は、対応するサブミッションキュー222に格納されている全てのライトコマンドが未フェッチであることを示している。SQビットマップ613-1において、先頭のビットb1は、先頭のスロットに格納されているライトコマンドに対応する。先頭のビットb1には、0が設定されている。つまり、先頭のビットb1は、先頭のスロットに格納されているライトコマンドが未フェッチであることを示している。
【0117】
後続するビットb2、b3、b4、およびb5のそれぞれにも、0が設定されている。したがって、SQビットマップ613-1は、対応するサブミッションキュー222に格納されている全てのライトコマンドが未フェッチであることを示している。
【0118】
この後、例えば、サブミッションキュー222に格納されている3番目のライトコマンドがフェッチされた場合、SQビットマップ613-1は、
図8(b)に示すSQビットマップ613-2に更新される。
【0119】
SQビットマップ613-2では、3番目のビットb3に設定されている値が、0から1に変更されている。つまり、3番目のビットb3は、3番目のスロットに格納されているライトコマンドがフェッチ済みであることを示している。
【0120】
他のビットb1、b2、b4、およびb5については、0が設定されたままである。したがって、SQビットマップ613-2は、サブミッションキュー222に格納されている3番目のライトコマンドがフェッチ済みであり、他のライトコマンドが未フェッチであることを示している。
【0121】
さらに、例えば、サブミッションキュー222に格納されている先頭のライトコマンドがフェッチされた場合、SQビットマップ613-2は、
図8(c)に示すSQビットマップ613-3に更新される。具体的には、先頭のライトコマンドがフェッチされたことに応じて、サブミッションキュー222のSQヘッドポインタ611が更新される。更新されたSQヘッドポインタ611は、新たな先頭のスロットとして、元の2番目のスロット(すなわち、2番目のビットb2に対応するスロット)を特定する。そのため、SQビットマップ613-3は、例えば、元のSQビットマップ613-2から先頭のビットb1が除外された、2番目のビットb2以降のビット列になる。つまり、SQビットマップ613-3は、元のSQビットマップ613-2における2番目のビットb2以降のビット列が、先頭の方向へ1ビットシフトされたビット列になる。
【0122】
したがって、SQビットマップ613-3は、サブミッションキュー222に格納されている2番目のライトコマンドがフェッチ済みであり、他のライトコマンドが未フェッチであることを示している。
【0123】
このようなSQビットマップ613を用いることにより、フロントエンド部121は、各サブミッションキュー222においてフェッチ済みのライトコマンドと未フェッチのライトコマンドとをトレース可能である。
【0124】
なお、フロントエンド部121は、サブミッションキュー222の先頭のスロットに対応するSQビットマップ613のビット位置を示すポインタを管理してもよい。そして、サブミッションキュー222に格納されている先頭のライトコマンドがフェッチされた場合、フロントエンド部121は、SQビットマップ613のビット列をシフトさせる代わりに、このポインタを更新することにより、サブミッションキュー222の新たな先頭のスロットに対応するSQビットマップ613のビット位置を特定してもよい。
【0125】
図9から
図12を参照して、フェッチ制御動作の例を具体的に説明する。4つのサブミッションキュー222-1、222-2、222-3、および222-4に格納されているライトコマンドは、
図7を参照して前述した通りである。なお、以下の説明では、
図3に示したメモリチップ管理テーブル51の通り、第1不揮発性メモリチップ41-1および第N不揮発性メモリチップ41-Nがビジー状態であり、第2不揮発性メモリチップ41-2および第3不揮発性メモリチップ41-3がアイドル状態であることを想定する。また、
図9から
図12に示すフェッチ制御動作中に各不揮発性メモリチップ41の状態は変化しないものとする。
【0126】
図9は、フェッチ制御動作の例を示す。ここでは、調停により、フェッチ対象のサブミッションキュー222として第1サブミッションキュー222-1が選択されている。
【0127】
フロントエンド部121は、第1サブミッションキュー222-1に対応するSQヘッドポインタ611およびSQテイルポインタ612を参照して、第1サブミッションキュー222-1にコマンドが格納されていると判定する(
図9中の(1)および(2))。具体的には、フロントエンド部121は、SQヘッドポインタ611とSQテイルポインタ612とに差があることに基づいて、第1サブミッションキュー222-1にコマンドが格納されていると判定する。
【0128】
次いで、フロントエンド部121は、第1サブミッションキュー222-1に対応するSQビットマップ613を参照する(
図9中の(3))。参照されたSQビットマップ613は、例えば、全てのライトコマンドが未フェッチであることを示す
図8(a)のSQビットマップ613-1に相当する。フロントエンド部121は、SQヘッドポインタ611とSQビットマップ613とに基づいて、第1サブミッションキュー222-1の先頭から順に、まだフェッチされていないライトコマンドを読み出す。したがって、フロントエンド部121は、まず、第1サブミッションキュー222-1の先頭のスロット711からライトコマンドcmdCを読み出す(
図9中の(4))。そして、フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdCで指定された不揮発性メモリチップ41(例えば、第1不揮発性メモリチップ41-1)がビジー状態であると判定する(
図9中の(5))。そのため、フロントエンド部121は、ライトコマンドcmdCをフェッチしない。具体的には、フロントエンド部121は、例えば、読み出されたライトコマンドcmdCのデータを破棄し、SQヘッドポインタ611およびSQビットマップ613を更新しない。
【0129】
図10は、
図9に後続するフェッチ制御動作の例を示す。
【0130】
フロントエンド部121は、第1サブミッションキュー222-1の2番目のスロット712からライトコマンドcmdDを読み出す(
図10中の(1))。そして、フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdDで指定された不揮発性メモリチップ41(例えば、第1不揮発性メモリチップ41-1)がビジー状態であると判定する(
図10中の(2))。そのため、フロントエンド部121は、ライトコマンドcmdDをフェッチしない。具体的には、フロントエンド部121は、例えば、読み出されたライトコマンドcmdDのデータを破棄し、SQヘッドポインタ611およびSQビットマップ613を更新しない。
【0131】
【0132】
フロントエンド部121は、第1サブミッションキュー222-1の3番目のスロット713からライトコマンドcmdEを読み出す(
図11中の(1))。フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdEで指定された不揮発性メモリチップ41(例えば、第2不揮発性メモリチップ41-2)がアイドル状態であると判定する(
図11中の(2))。そのため、フロントエンド部121は、読み出されたライトコマンドcmdEをフェッチする。具体的には、フロントエンド部121は、読み出されたライトコマンドcmdEを、コマンド管理テーブル52に追加する(
図11中の(3))。そして、フロントエンド部121は、スロット713のライトコマンドcmdEがフェッチ済みであることを示すように、SQビットマップ613を更新する(
図11中の(4))。更新されたSQビットマップ613は、例えば、3番目のライトコマンドがフェッチ済みであることを示す
図8(b)のSQビットマップ613-2に相当する。なお、フロントエンド部121は、スロット713が第1サブミッションキュー222-1の先頭のスロットではないので、SQヘッドポインタ611を更新しない。このように、本実施形態では、サブミッションキュー222からコマンドが読み出されただけでなく、読み出されたコマンドがコマンド管理テーブル52に追加されたことが、サブミッションキュー222からコマンドがフェッチされたことに相当する。
【0133】
図12は、
図11に後続するフェッチ制御動作の例を示す。第1サブミッションキュー222-1のスロット713からライトコマンドcmdEがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第2サブミッションキュー222-2が選択されている。
【0134】
フロントエンド部121は、第2サブミッションキュー222-2に対応するSQヘッドポインタ611およびSQテイルポインタ612を参照して、第2サブミッションキュー222-2にコマンドが格納されていると判定する(
図12中の(1)および(2))。
【0135】
次いで、フロントエンド部121は、第2サブミッションキュー222-2に対応するSQビットマップ613を参照する(
図12中の(3))。参照されたSQビットマップ613は、例えば、全てのライトコマンドが未フェッチであることを示す
図8(a)のSQビットマップ613-1に相当する。フロントエンド部121は、SQヘッドポインタ611とSQビットマップ613とに基づいて、第2サブミッションキュー222-2の先頭から順に、まだフェッチされていないライトコマンドを読み出す。したがって、フロントエンド部121は、まず、第2サブミッションキュー222-2の先頭のスロット721からライトコマンドcmdGを読み出す(
図12中の(4))。
【0136】
フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdGで指定された不揮発性メモリチップ41(例えば、第3不揮発性メモリチップ41-3)がアイドル状態であると判定する(
図12中の(5))。そのため、フロントエンド部121は、読み出されたライトコマンドcmdGをフェッチする。具体的には、フロントエンド部121は、読み出されたライトコマンドcmdGを、コマンド管理テーブル52に追加する(
図12中の(6))。フロントエンド部121は、スロット721が第2サブミッションキュー222-2の先頭のスロットであるので、対応するSQヘッドポインタ611を更新する(
図12中の(7))。そして、フロントエンド部121は、スロット721より後のスロット722、723、および724に格納されているライトコマンドのフェッチ状態を示すように、対応するSQビットマップ613を更新する(
図12中の(8))。
【0137】
以降の
図12に関する説明では、フェッチされるライトコマンド、およびフェッチされないライトコマンドについて主に説明し、メモリチップ管理テーブル51、コマンド管理テーブル52、SQヘッドポインタ611、SQテイルポインタ612、およびSQビットマップ613の参照と更新に関する説明は省略している。メモリチップ管理テーブル51、コマンド管理テーブル52、SQヘッドポインタ611、SQテイルポインタ612、およびSQビットマップの参照と更新に関する動作は、前述した第1サブミッションキュー222-1および第2サブミッションキュー222-2からライトコマンドがフェッチされる際の動作と同様である。
【0138】
第2サブミッションキュー222-2からスロット721のライトコマンドcmdGがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第3サブミッションキュー222-3が選択される。フロントエンド部121は、第3サブミッションキュー222-3において、スロット731のライトコマンドcmdHをフェッチせずに、スロット732のライトコマンドcmdIをフェッチする(
図12中の(9)および(10))。
【0139】
さらに、第3サブミッションキュー222-3からスロット732のライトコマンドcmdIがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第4サブミッションキュー222-4が選択される。第4サブミッションキュー222-4のスロット741、742、743、および744にそれぞれ格納されている4つのライトコマンドはいずれも、ビジー状態である不揮発性メモリチップ41を指定している。そのため、フロントエンド部121は、第4サブミッションキュー222-4から、いずれのライトコマンドもフェッチしない。つまり、第4サブミッションキュー222-4からのコマンドのフェッチはスキップされる。
【0140】
そして、次の調停により、例えば、新たなフェッチ対象のサブミッションキュー222として、第1サブミッションキュー222-1が選択される。この場合、フロントエンド部121は、第1サブミッションキュー222-1に対応するSQビットマップ613に基づいて、既にフェッチされたスロット713のライトコマンドcmdEが除外された1つ以上のライトコマンドから、ビジー状態でない不揮発性メモリチップ41を指定しているライトコマンドを特定する。したがって、フロントエンド部121は、スロット711、712、714、および715にそれぞれ格納されている4つのライトコマンドから、スロット711のライトコマンドcmdCと、スロット712のライトコマンドcmdDとをフェッチせずに、スロット714のライトコマンドcmdFをフェッチする(
図12中の(11)および(12))。
【0141】
図13は、ライトコマンド(より詳しくは、ライトコマンドに対応するエントリ)が追加されたコマンド管理テーブル52の例を示す。ここでは、
図4に示したコマンド管理テーブル52の状態が、
図9から
図12を参照して前述したフェッチ制御動作によって更新された例を示す。
【0142】
図13に示すコマンド管理テーブル52には、ライトコマンドcmdE、ライトコマンドcmdG、ライトコマンドcmdI、およびライトコマンドcmdFが追加されている。ライトコマンドcmdE、およびライトコマンドcmdIはいずれも、アイドル状態である第2不揮発性メモリチップ41-2を指定している。ライトコマンドcmdG、およびライトコマンドcmdFはいずれも、アイドル状態である第3不揮発性メモリチップ41-3を指定している。
【0143】
このように、フェッチ制御動作によって、アイドル状態である不揮発性メモリチップ41に対するライトコマンドがコマンド管理テーブル52に追加される。換言すると、ビジー状態である不揮発性メモリチップ41に対するライトコマンドはコマンド管理テーブル52に追加されない。
【0144】
したがって、フロントエンド部121によるフェッチ制御動作によって、サブミッションキュー222から、アイドル状態である不揮発性メモリチップ41に対するライトコマンドのみをフェッチできる。これにより、対象の不揮発性メモリチップ41がビジー状態であり、対応する処理を直ちに開始できないライトコマンドのために、メモリシステム3のリソースが浪費されることを回避できる。そのため、ライトコマンドで指定される不揮発性メモリチップ41をホスト2がどのように選択したとしても、メモリシステム3のリソースの浪費を抑制し、少ないリソースで高いスループットを実現できる。
【0145】
なお、ライトコマンドに対する応答のレイテンシを重視する用途では、フロントエンド部121は、前述したフェッチ制御動作をオフにすればよい。つまり、フロントエンド部121は、対象の不揮発性メモリチップ41がビジー状態であるかどうかに関わらず、サブミッションキュー222に格納されているライトコマンドを順にフェッチすればよい。メモリシステム3は、フェッチ制御動作をオフにすることで、レイテンシを重視する用途にも容易に対応できる。
【0146】
図14は、フロントエンド部121によって実行される第1フェッチ制御処理の手順の例を示すフローチャートである。第1フェッチ制御処理は、ホスト2のサブミッションキュー222から、アイドル状態の不揮発性メモリチップ41に対するコマンドをフェッチするための処理である。フロントエンド部121は、例えば、ホスト2の1つ以上のサブミッションキュー222間の調停が行われるべきタイミングに、第1フェッチ制御処理を実行する。ここでは、1つ以上のサブミッションキュー222のそれぞれに、1つ以上のコマンドが格納されているものとする。
【0147】
まず、フロントエンド部121は、調停により、1つ以上のサブミッションキュー222から1つのサブミッションキュー222を選択する(ステップS101)。選択されたサブミッションキュー222を、対象サブミッションキュー222と称する。
【0148】
次に、フロントエンド部121は、変数iに1を設定する(ステップS102)。変数iは、対象サブミッションキュー222において、SQヘッドポインタ611で示されるスロット(先頭のスロット)から、SQテイルポインタ612で示されるスロットの1つ前のスロット(末尾のスロット)までに格納されている1つ以上のコマンドの内の1つを特定するために用いられる。変数iは、対象サブミッションキュー222に格納されているコマンドの順序を示す。コマンドの順序は、先頭のスロットに格納されているコマンドを先頭とし、末尾のスロットに格納されているコマンドを末尾とする、対象サブミッションキュー222における格納順である。以下では、対象サブミッションキュー222に格納されているコマンドの数を、Mとする。この場合、変数iは、1からMまでのいずれかの整数に設定される。
【0149】
フロントエンド部121は、対象サブミッションキュー222に対応するSQビットマップ613を用いて、対象サブミッションキュー222のi番目のコマンドがフェッチ済みであるか否かを判定する(ステップS103)。
【0150】
対象サブミッションキュー222のi番目のコマンドが未フェッチである場合(ステップS103でno)、フロントエンド部121は、対象サブミッションキュー222からi番目のコマンドを読み出す(ステップS104)。フロントエンド部121は、メモリチップ管理テーブル51を用いて、読み出されたi番目のコマンドで指定された不揮発性メモリチップ41がビジー状態であるか否かを判定する(ステップS105)。
【0151】
i番目のコマンドで指定された不揮発性メモリチップ41がビジー状態でない場合(ステップS105でno)、フロントエンド部121は、i番目のコマンドに対応するエントリをコマンド管理テーブル52に追加する(ステップS106)。これは、i番目のコマンドが対象サブミッションキュー222からフェッチされたことに相当する。そして、フロントエンド部121は、変数iが1であるか否かを判定する(ステップS107)。つまり、フロントエンド部121は、i番目のコマンドが対象サブミッションキュー222の先頭のコマンドであるか否かを判定する。
【0152】
変数iが1である場合(ステップS107でyes)、フロントエンド部121は、対象サブミッションキュー222のSQヘッドポインタ611を更新する(ステップS108)。具体的には、フロントエンド部121は、対象サブミッションキュー222のSQヘッドポインタ611に1を加算する。なお、SQヘッドポインタ611に1を加算した値が、対象サブミッションキュー222のスロット数に達する場合、フロントエンド部121は、SQヘッドポインタ611に0を設定する。そして、フロントエンド部121は、(i+1)番目以降のコマンドのフェッチ状態を示すように、対象サブミッションキュー222のSQビットマップ613を更新し(ステップS109)、第1フェッチ制御処理を終了する。
【0153】
変数iが1でない場合(ステップS107でno)、フロントエンド部121は、i番目のコマンドに対応するビットが、i番目のコマンドがフェッチ済みであることを示すように、対象サブミッションキュー222のSQビットマップ613を更新し(ステップS110)、第1フェッチ制御処理を終了する。
【0154】
また、i番目のコマンドで指定された不揮発性メモリチップ41がビジー状態である場合(ステップS105でyes)、フロントエンド部121は、i番目のコマンドに対応するエントリをコマンド管理テーブル52に格納しない。これは、i番目のコマンドが対象サブミッションキュー222からフェッチされなかったことに相当する。そして、フロントエンド部121は、変数iが、対象サブミッションキュー222に格納されているコマンドの数Mと等しいか否かを判定する(ステップS111)。
【0155】
変数iが、対象サブミッションキュー222に格納されているコマンドの数Mよりも小さい場合(ステップS111でno)、フロントエンド部121は、変数iに1を加算する(ステップS112)。そして、フロントエンド部121による処理は、ステップS103に戻る。つまり、フロントエンド部121は、対象サブミッションキュー222における次のコマンドをフェッチするか否かを決定するための処理に進む。
【0156】
変数iが、対象サブミッションキュー222に格納されているコマンドの数Mと等しい場合(ステップS111でyes)、フロントエンド部121は第1フェッチ制御処理を終了する。これは、対象サブミッションキュー222に格納されているいずれの未フェッチのコマンドも、指定している不揮発性メモリチップ41がビジー状態であるために、フェッチされなかったことを意味する。
【0157】
また、i番目のコマンドがフェッチ済みである場合(ステップS103でyes)、フロントエンド部121による処理はステップS111に進む。ステップS111以降の手順は前述した通りである。
【0158】
以上の第1フェッチ制御処理により、フロントエンド部121は、対象サブミッションキュー222から、ビジー状態でない不揮発性メモリチップ41に対するコマンドをフェッチし、ビジー状態である不揮発性メモリチップ41に対するコマンドをフェッチしない。メモリシステム3では、コマンドがフェッチされたことに応じてリソースが消費される。そのため、ビジー状態でない不揮発性メモリチップ41に対するコマンドのみをフェッチすることによって、対象の不揮発性メモリチップ41がビジー状態であり、対応する処理が直ちに開始されないコマンドのために、メモリシステム3のリソースが浪費されることを回避できる。したがって、メモリシステム3では処理のスループットを向上できる。
【0159】
(変形例)
図15から
図17を参照して、フェッチ制御動作の変形例を説明する。
【0160】
図15は、フェッチ制御動作により、サブミッションキュー222-1、222-2、222-3、および222-4からフェッチされるコマンドの別の例を示す。サブミッションキュー222-1、222-2、222-3、および222-4のそれぞれに格納されているライトコマンドは、
図7を参照して前述した通りである。
【0161】
調停により、4つのサブミッションキュー222-1、222-2、222-3、および222-4から、コマンドがフェッチされるべき1つのサブミッションキュー222が選択される。変形例のフロントエンド部121は、選択されたサブミッションキュー222の先頭のライトコマンドが、アイドル状態である不揮発性メモリチップ41を指定している場合、そのライトコマンドをフェッチするように構成される。また、フロントエンド部121は、選択されたサブミッションキュー222の先頭のライトコマンドが、ビジー状態である不揮発性メモリチップ41を指定している場合、そのライトコマンドをフェッチしないように構成される。つまり、変形例のフロントエンド部121は、選択されたサブミッションキュー222において、先頭のライトコマンドをフェッチするか否かを判定し、後続するライトコマンドをフェッチするか否かの判定は行わない。
【0162】
具体的には、フロントエンド部121は、調停により第1サブミッションキュー222-1が選択された場合、第1サブミッションキュー222-1からいずれのライトコマンドもフェッチしない。これは、先頭のスロット711に格納されているライトコマンドcmdCが、ビジー状態である不揮発性メモリチップ41(例えば、第1不揮発性メモリチップ41-1)を指定しているためである。
【0163】
フロントエンド部121は、調停により第2サブミッションキュー222-2が選択された場合、先頭のスロット721に格納されているライトコマンドcmdGをフェッチする。これは、ライトコマンドcmdGが、アイドル状態である不揮発性メモリチップ41(例えば、第3不揮発性メモリチップ41-3)を指定しているためである。
【0164】
フロントエンド部121は、調停により第3サブミッションキュー222-3が選択された場合、第3サブミッションキュー222-3からいずれのライトコマンドもフェッチしない。これは、先頭のスロット731に格納されているライトコマンドcmdHが、ビジー状態である不揮発性メモリチップ41(例えば、第N不揮発性メモリチップ41-N)を指定しているためである。
【0165】
フロントエンド部121は、調停により第4サブミッションキュー222-4が選択された場合、第4サブミッションキュー222-4からいずれのライトコマンドもフェッチしない。これは、先頭のスロット741に格納されているライトコマンドcmdJが、ビジー状態である不揮発性メモリチップ41(例えば、第1不揮発性メモリチップ41-1)を指定しているためである。
【0166】
図16および
図17を参照して、フェッチ制御動作の変形例を具体的に説明する。
【0167】
図16は、フェッチ制御動作の例を示す。ここでは、調停により、フェッチ対象のサブミッションキュー222として第1サブミッションキュー222-1が選択されている。
【0168】
フロントエンド部121は、第1サブミッションキュー222-1に対応するSQヘッドポインタ611およびSQテイルポインタ612を参照して、第1サブミッションキュー222-1にコマンドが格納されていると判定する(
図16中の(1)および(2))。
【0169】
次いで、フロントエンド部121は、SQヘッドポインタ611に基づいて、第1サブミッションキュー222-1の先頭のスロット711からライトコマンドcmdCを読み出す(
図16中の(3))。そして、フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdCで指定された不揮発性メモリチップ41がビジー状態であると判定する(
図16中の(4))。そのため、フロントエンド部121は、ライトコマンドcmdCをフェッチしない。具体的には、フロントエンド部121は、例えば、読み出されたライトコマンドcmdCのデータを破棄し、SQヘッドポインタ611を更新しない。そして、フロントエンド部121は、第1サブミッションキュー222-1からのライトコマンドのフェッチをスキップする。
【0170】
図17は、
図16に後続するフェッチ制御動作の例を示す。第1サブミッションキュー222-1からのライトコマンドのフェッチがスキップされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第2サブミッションキュー222-2が選択されている。
【0171】
フロントエンド部121は、第2サブミッションキュー222-2に対応するSQヘッドポインタ611およびSQテイルポインタ612を参照して、第2サブミッションキュー222-2にコマンドが格納されていると判定する(
図17中の(1)および(2))。次いで、フロントエンド部121は、SQヘッドポインタ611に基づいて、第2サブミッションキュー222-2の先頭のスロット721からライトコマンドcmdGを読み出す(
図17中の(3))。
【0172】
フロントエンド部121は、メモリチップ管理テーブル51を参照して、読み出されたライトコマンドcmdGで指定された不揮発性メモリチップ41(例えば第3不揮発性メモリチップ41-3)がアイドル状態であると判定する(
図17中の(4))。そのため、フロントエンド部121は、ライトコマンドcmdGをフェッチする。具体的には、フロントエンド部121は、読み出されたライトコマンドcmdGを、コマンド管理テーブル52に追加する(
図17中の(5))。そして、フロントエンド部121は、対応するSQヘッドポインタ611を更新する(
図17中の(6))。
【0173】
第2サブミッションキュー222-2からスロット721のライトコマンドcmdGがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第3サブミッションキュー222-3が選択される。フロントエンド部121は、第1サブミッションキュー222-1の場合と同様に、第3サブミッションキュー222-3の先頭のスロット731に格納されているライトコマンドcmdHをフェッチしない。そして、フロントエンド部121は、第3サブミッションキュー222-3からのライトコマンドのフェッチをスキップする。
【0174】
さらに、第3サブミッションキュー222-3からのライトコマンドのフェッチがスキップされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第4サブミッションキュー222-4が選択される。フロントエンド部121は、第1サブミッションキュー222-1の場合と同様に、第4サブミッションキュー222-4の先頭のスロット741に格納されているライトコマンドcmdJをフェッチしない。フロントエンド部121は、第4サブミッションキュー222-4からのライトコマンドのフェッチをスキップする。そして、次の調停により、例えば、新たなフェッチ対象のサブミッションキュー222として、第1サブミッションキュー222-1が選択される。
【0175】
図18は、ライトコマンドが追加されたコマンド管理テーブル52の別の例を示す。ここでは、
図4に示した状態のコマンド管理テーブル52が、
図16および
図17を参照して前述したフェッチ制御動作によって更新された例を示す。
【0176】
図18に示すコマンド管理テーブル52には、ライトコマンドcmdGが追加されている。ライトコマンドcmdGは、第2サブミッションキュー222-2の先頭のスロット721から読み出されたライトコマンドである。また、ライトコマンドcmdGは、アイドル状態である第3不揮発性メモリチップ41-3を指定したライトコマンドである。
【0177】
このように、コマンド管理テーブル52には、フェッチ制御動作によって、サブミッションキュー222の先頭のスロットに格納され、且つアイドル状態である不揮発性メモリチップ41を指定しているライトコマンドが追加される。コマンド管理テーブル52には、ビジー状態である不揮発性メモリチップ41を指定しているライトコマンドは追加されない。
【0178】
図19は、フロントエンド部121によって実行される第2フェッチ制御処理の手順の例を示すフローチャートである。第2フェッチ制御処理は、ホスト2のサブミッションキュー222から、アイドル状態の不揮発性メモリチップ41に対するコマンドをフェッチするための処理である。フロントエンド部121は、例えば、ホスト2内の1つ以上のサブミッションキュー222間の調停が行われるべきタイミングに、第2フェッチ制御処理を実行する。ここでは、1つ以上のサブミッションキュー222のそれぞれに、1つ以上のコマンドが格納されているものとする。
【0179】
まず、フロントエンド部121は、調停により、1つ以上のサブミッションキュー222から1つのサブミッションキュー222(対象サブミッションキュー222)を選択する(ステップS21)。フロントエンド部121は、対象サブミッションキュー222から先頭のコマンドを読み出す(ステップS22)。つまり、フロントエンド部121は、SQヘッドポインタ611で示される対象サブミッションキュー222内のスロットから、コマンドを読み出す。そして、フロントエンド部121は、メモリチップ管理テーブル51を用いて、読み出されたコマンドで指定された不揮発性メモリチップ41がビジー状態であるか否かを判定する(ステップS23)。
【0180】
コマンドで指定された不揮発性メモリチップ41がビジー状態でない場合(ステップS23でno)、フロントエンド部121は、コマンドに対応するエントリをコマンド管理テーブル52に追加する(ステップS24)。これは、対象サブミッションキュー222から先頭のコマンドがフェッチされたことに相当する。そして、フロントエンド部121は、対象サブミッションキュー222のSQヘッドポインタ611を更新し(ステップS25)、第2フェッチ制御処理を終了する。
【0181】
コマンドで指定された不揮発性メモリチップ41がビジー状態である場合(ステップS23でyes)、フロントエンド部121は、コマンドに対応するエントリをコマンド管理テーブル52に追加せずに、第2フェッチ制御処理を終了する。これは、対象サブミッションキュー222から先頭のコマンドがフェッチされなかったことに相当する。
【0182】
以上の第2フェッチ制御処理により、フロントエンド部121は、対象サブミッションキュー222から、ビジー状態でない不揮発性メモリチップ41に対するコマンドをフェッチし、ビジー状態である不揮発性メモリチップ41に対するコマンドをフェッチしない。メモリシステム3では、コマンドがフェッチされたことに応じてリソースが消費される。そのため、ビジー状態でない不揮発性メモリチップ41に対するコマンドのみをフェッチすることによって、対象の不揮発性メモリチップ41がビジー状態であり、対応する処理を直ちに開始できないコマンドのために、メモリシステム3のリソースが浪費されることを回避できる。したがって、メモリシステム3では処理のスループットを向上できる。
【0183】
なお、フロントエンド部121は、ホスト2内のサブミッションキュー222のいずれからも先頭のコマンドがフェッチされなかった場合、
図14を参照して前述した第1フェッチ制御処理を実行してもよい。つまり、いずれのサブミッションキュー222においても、先頭のコマンドがビジー状態である不揮発性メモリチップ41を指定している場合、フロントエンド部121は、ビジー状態でない不揮発性メモリチップ41を指定した後続のコマンドを、対象サブミッションキュー222からフェッチするようにしてもよい。
【0184】
(第2実施形態)
第1実施形態では、メモリシステム3のフロントエンド部121が、サブミッションキュー222から、アイドル状態である不揮発性メモリチップ41を指定しているコマンドをフェッチし、ビジー状態である不揮発性メモリチップ41を指定しているコマンドをフェッチしないように構成される。これに対して、第2実施形態では、メモリシステム3のバックエンド部122が、サブミッションキュー222からフェッチされたコマンドの内、アイドル状態である不揮発性メモリチップ41を指定しているコマンドに応じた処理を開始し、ビジー状態である不揮発性メモリチップ41を指定しているコマンドに応じた処理を開始しないように構成される。
【0185】
第2実施形態に係るメモリシステム3の構成は第1実施形態のメモリシステム3と同様である。第2実施形態と第1実施形態とでは、フロントエンド部121およびバックエンド部122による動作が異なる。以下、第1実施形態と異なる点を主に説明する。
【0186】
まず、フロントエンド部121によるフェッチ制御動作について説明する。
【0187】
図20は、フェッチ制御動作により、サブミッションキュー222-1、222-2、222-3、および222-4からフェッチされるコマンドの例を示す。サブミッションキュー222-1、222-2、222-3、および222-4のそれぞれに格納されているライトコマンドは、
図7を参照して前述した通りである。
【0188】
フロントエンド部121は、調停により、4つのサブミッションキュー222-1、222-2、222-3、および222-4から、コマンドがフェッチされるべき1つのサブミッションキュー222を選択する。フロントエンド部121は、選択されたサブミッションキュー222に格納されているライトコマンドが、ビジー状態の不揮発性メモリチップ41を指定しているか、それともアイドル状態の不揮発性メモリチップ41を指定しているかを考慮することなく、サブミッションキュー222の先頭から順にライトコマンドをフェッチするように構成される。
【0189】
具体的には、例えば、フロントエンド部121は、調停により第1サブミッションキュー222-1が選択された場合、先頭のスロット711からライトコマンドcmdCをフェッチする。フロントエンド部121は、調停により第2サブミッションキュー222-2が選択された場合、先頭のスロット721からライトコマンドcmdGをフェッチする。フロントエンド部121は、調停により第3サブミッションキュー222-3が選択された場合、先頭のスロット731からライトコマンドcmdHをフェッチする。フロントエンド部121は、調停により第4サブミッションキュー222-4が選択された場合、先頭のスロット741からライトコマンドcmdJをフェッチする。
【0190】
図21は、フェッチ制御動作の具体的な例を示す。ここでは、調停により、フェッチ対象のサブミッションキュー222として第1サブミッションキュー222-1が選択されている。
【0191】
フロントエンド部121は、第1サブミッションキュー222-1に対応するSQヘッドポインタ611およびSQテイルポインタ612を参照して、第1サブミッションキュー222-1にコマンドが格納されていると判定する(
図21中の(1)および(2))。
【0192】
次いで、フロントエンド部121は、SQヘッドポインタ611に基づいて、第1サブミッションキュー222-1の先頭のスロット711からライトコマンドcmdCを読み出す(
図21中の(3))。フロントエンド部121は、読み出されたライトコマンドcmdCを、コマンド管理テーブル52に追加する(
図21中の(4))。そして、フロントエンド部121は、対応するSQヘッドポインタ611を更新する(
図21中の(5))。
【0193】
このように、フロントエンド部121は、第1サブミッションキュー222-1から先頭のスロット711のライトコマンドcmdCをフェッチする。
【0194】
第1サブミッションキュー222-1からライトコマンドcmdCがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第2サブミッションキュー222-2が選択される。フロントエンド部121は、第1サブミッションキュー222-1の場合と同様の動作により、第2サブミッションキュー222-2の先頭のスロット721からライトコマンドcmdGをフェッチする。
【0195】
第2サブミッションキュー222-2からライトコマンドcmdGがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第3サブミッションキュー222-3が選択される。フロントエンド部121は、第1サブミッションキュー222-1の場合と同様の動作により、第3サブミッションキュー222-3の先頭のスロット731からライトコマンドcmdHをフェッチする。
【0196】
第3サブミッションキュー222-3からライトコマンドcmdHがフェッチされた後、調停により、新たなフェッチ対象のサブミッションキュー222として第4サブミッションキュー222-4が選択される。フロントエンド部121は、第1サブミッションキュー222-1の場合と同様の動作により、第4サブミッションキュー222-4の先頭のスロット741からライトコマンドcmdJをフェッチする。そして、次の調停により、例えば、新たなフェッチ対象のサブミッションキュー222として、第1サブミッションキュー222-1が選択される。
【0197】
図22は、ライトコマンドが追加されたコマンド管理テーブル52の例を示す。ここでは、
図4に示したコマンド管理テーブル52の状態が、
図21を参照して前述したフェッチ制御動作によって更新された例を示す。
【0198】
図22に示すコマンド管理テーブル52には、ライトコマンドcmdC、ライトコマンドcmdG、ライトコマンドcmdH、およびライトコマンドcmdJが追加されている。ライトコマンドcmdC、およびライトコマンドcmdJは、ビジー状態である第1不揮発性メモリチップ41-1を指定したライトコマンドである。ライトコマンドcmdGは、アイドル状態である第3不揮発性メモリチップ41-3を指定したライトコマンドである。ライトコマンドcmdHは、ビジー状態である第N不揮発性メモリチップ41-Nを指定したライトコマンドである。
【0199】
このように、フェッチ制御動作によって、コマンド管理テーブル52にライトコマンドが追加される。追加されるライトコマンドは、調停により選択されたサブミッションキュー222の先頭のコマンドである。したがって、コマンドが指定している不揮発性メモリチップ41がビジー状態とアイドル状態のいずれであるかに関わらず、調停により選択されたサブミッションキュー222から先頭のコマンドがフェッチされ、コマンド管理テーブル52に追加される。
【0200】
次いで、フロントエンド部121およびバックエンド部122によるコマンド実行動作とビジー状態管理動作について説明する。
【0201】
図23は、フロントエンド部121およびバックエンド部122によって行われるコマンド実行動作とビジー状態管理動作の例を示す。
【0202】
コマンド実行動作について説明する。
【0203】
ここでは、コマンド管理テーブル52において、ライトコマンドcmdCとライトコマンドcmdGが管理されている場合を想定する。ライトコマンドcmdCおよびライトコマンドcmdGは、対応する処理がまだ開始されていないライトコマンドである。ライトコマンドcmdCに応じて不揮発性メモリ4に書き込まれるべきユーザデータを、ユーザデータ53Cとする。ライトコマンドcmdGに応じて不揮発性メモリ4に書き込まれるべきユーザデータを、ユーザデータ53Gとする。また、ライトコマンドcmdCは、ユーザデータ53Cの書き込み先として、ビジー状態である第1不揮発性メモリチップ41-1を指定している。ライトコマンドcmdGは、ユーザデータ53Gの書き込み先として、アイドル状態である第3不揮発性メモリチップ41-3を指定している。以下では、ライトコマンドcmdCに応じた処理の実行と、ライトコマンドcmdGに応じた処理の実行とについて、それぞれ説明する。
【0204】
(ライトコマンドcmdCに応じた処理の実行)
フロントエンド部121は、コマンド管理テーブル52を参照して、ライトコマンドcmdCのコマンド情報(以下、第2コマンド情報と称する)を取得する(
図23中の(1))。第2コマンド情報は、例えば、ユーザデータ53Cが格納されているホスト2内の記憶位置を示す情報、およびユーザデータ53Cの書き込み先として指定された第1不揮発性メモリチップ41-1のチップIDを含んでいる。
【0205】
フロントエンド部121は、メモリチップ管理テーブル51を参照して、取得された第2コマンド情報で示された第1不揮発性メモリチップ41-1がビジー状態であると判定する(
図23中の(2))。そのため、フロントエンド部121は、ライトコマンドcmdCに応じた処理を開始しない。より詳しくは、フロントエンド部121は、ライトコマンドcmdCに対応するユーザデータ53Cのホスト2からメモリシステム3へ転送を開始しない。つまり、フロントエンド部121とバックエンド部122とは、ライトコマンドcmdCに応じた処理の実行を、第1不揮発性メモリチップ41-1がビジー状態でなくなるまで待機する。
【0206】
これにより、ビジー状態である第1不揮発性メモリチップ41-1に対するライトコマンドcmdCによって、すなわち、データ書き込み動作が直ちに開始されないライトコマンドcmdCによって、メモリシステム3のリソースが浪費されることを抑制できる。
【0207】
(ライトコマンドcmdGに応じた処理の実行)
フロントエンド部121は、コマンド管理テーブル52を参照して、ライトコマンドcmdGのコマンド情報(以下、第3コマンド情報と称する)を取得する(
図23中の(1))。第3コマンド情報は、例えば、ユーザデータ53Gが格納されているホスト2内の記憶位置を示す情報、およびユーザデータ53Gの書き込み先として指定された第3不揮発性メモリチップ41-3のチップIDを含んでいる。
【0208】
フロントエンド部121は、メモリチップ管理テーブル51を参照して、取得された第3コマンド情報で示された第3不揮発性メモリチップ41-3がアイドル状態であると判定する(
図23中の(2))。この場合、フロントエンド部121は、ライトコマンドcmdGに応じた処理を開始する。具体的には、フロントエンド部121は、第3コマンド情報に基づいて、ホスト2のデータバッファ221からメモリシステム3のライトバッファ53へユーザデータ53Gを転送する(
図23中の(3))。フロントエンド部121は、ユーザデータ53Gのライトバッファ53への格納が完了したことを、バックエンド部122に通知してもよい。
【0209】
次いで、バックエンド部122は、コマンド管理テーブル52を参照して、第3コマンド情報を取得する(
図23中の(4))。バックエンド部122は、取得された第3コマンド情報に基づいて、ライトバッファ53に記憶されているユーザデータ53Gを、第3不揮発性メモリチップ41-3内のページバッファ32に転送するデータイン動作を行う(
図23中の(5))。そして、バックエンド部122は、ページバッファ32に格納されているユーザデータ53Gを、第3不揮発性メモリチップ41-3内のメモリセルアレイ31に書き込むことを、第3不揮発性メモリチップ41-3に指示する(
図23中の(6))。この指示に応じて、第3不揮発性メモリチップ41-3では、ユーザデータ53Gをメモリセルアレイ31に書き込むプログラム動作が行われる(
図23中の(7))。
【0210】
これにより、フロントエンド部121とバックエンド部122は、アイドル状態である第3不揮発性メモリチップ41-3に対するライトコマンドcmdGに応じた処理を実行できる。
【0211】
フロントエンド部121とバックエンド部122は、コマンド管理テーブル52において管理されている他のライトコマンドについても同様に、指定している不揮発性メモリチップ41がビジー状態とアイドル状態のいずれであるかに応じて、ライトコマンドに応じた処理の実行を制御できる。フロントエンド部121とバックエンド部122は、ビジー状態である不揮発性メモリチップ41に対するライトコマンドに応じた処理を開始しないので、データ書き込み動作が直ちに開始されないライトコマンドによって、メモリシステム3のリソースが浪費されることを抑制できる。したがって、メモリシステム3では処理のスループットを向上できる。
【0212】
なお、
図23中の(8)、(9)、(10)、および(11)として示したビジー状態管理動作については、
図6中の(7)、(8)、(9)、および(10)として示したビジー状態管理動作と同様である。
【0213】
図24は、フロントエンド部121によって実行される第3フェッチ制御処理の手順の例を示すフローチャートである。第3フェッチ制御処理は、ホスト2のサブミッションキュー222からコマンドをフェッチするための処理である。フロントエンド部121は、例えば、ホスト2の1つ以上のサブミッションキュー222間の調停が行われるべきタイミングに、第3フェッチ制御処理を実行する。ここでは、1つ以上のサブミッションキュー222のそれぞれに、1つ以上のコマンドが格納されているものとする。
【0214】
まず、フロントエンド部121は、調停により、1つ以上のサブミッションキュー222から1つのサブミッションキュー222(対象サブミッションキュー222)を選択する(ステップS31)。フロントエンド部121は、対象サブミッションキュー222から先頭のコマンドをフェッチする(ステップS32)。つまり、フロントエンド部121は、SQヘッドポインタ611で示される対象サブミッションキュー222内のスロットから、コマンドをフェッチする。フロントエンド部121は、フェッチされたコマンドに対応するエントリをコマンド管理テーブル52に追加する(ステップS33)。そして、フロントエンド部121は、対象サブミッションキュー222のSQヘッドポインタ611を更新し(ステップS34)、第3フェッチ制御処理を終了する。
【0215】
以上の第3フェッチ制御処理により、フロントエンド部121は、対象サブミッションキュー222から先頭のコマンドをフェッチする。
【0216】
図25は、バックエンド部122によって実行されるコマンド実行制御処理の手順の例を示すフローチャートである。コマンド実行制御処理は、コマンド管理テーブル52で管理され、対応する処理がまだ開始されていないコマンド(すなわち、未処理のコマンド)の実行を制御する処理である。バックエンド部122は、コマンド管理テーブル52に少なくとも1つのエントリが含まれている場合に、コマンド実行制御処理を実行する。
【0217】
まず、バックエンド部122は、コマンド管理テーブル52から未処理のコマンドを選択する(ステップS41)。選択された未処理のコマンドを、対象コマンドと称する。バックエンド部122は、対象コマンドで指定された不揮発性メモリチップ41がビジー状態であるか否かを判定する(ステップS42)。
【0218】
対象コマンドで指定された不揮発性メモリチップ41がビジー状態でない場合(ステップS42でno)、バックエンド部122は、対象コマンドに応じた処理を開始する(ステップS43)。対象コマンドに応じた処理は、例えば、ライトコマンドである対象コマンドに応じて不揮発性メモリチップ41に書き込まれるべきユーザデータを、ホスト2のデータバッファ221からメモリシステム3のライトバッファ53へ転送する処理、および転送されたユーザデータを不揮発性メモリチップ41に書き込む処理を含む。
【0219】
一方、対象コマンドで指定された不揮発性メモリチップ41がビジー状態である場合(ステップS42でyes)、バックエンド部122は、対象コマンドに応じた処理を開始しない。
【0220】
そして、バックエンド部122は、コマンド管理テーブル52に別の未処理のコマンドがあるか否かを判定する(ステップS44)。
【0221】
コマンド管理テーブル52に別の未処理のコマンドがある場合(ステップS44でyes)、バックエンド部122による処理はステップS41に戻る。つまり、バックエンド部122は、その別の未処理のコマンドに応じた処理の実行を制御する。
【0222】
コマンド管理テーブル52に未処理のコマンドがない場合(ステップS44でno)、バックエンド部122はコマンド実行制御処理を終了する。
【0223】
以上のコマンド実行制御処理により、バックエンド部122は、コマンド管理テーブル52で管理されているフェッチ済みのコマンドが、ビジー状態でない不揮発性メモリチップ41に対する未処理のコマンドである場合、そのコマンドに応じた処理を開始する。一方、コマンド管理テーブル52で管理されているフェッチ済みのコマンドが、ビジー状態である不揮発性メモリチップ41に対する未処理のコマンドである場合、バックエンド部122は、そのコマンドに応じた処理を開始しない。これにより、対象の不揮発性メモリチップ41がビジー状態であることにより、対応する処理を直ちに開始できないコマンドのために、メモリシステム3のリソースが浪費されることを抑制できる。したがって、メモリシステム3では処理の効率を向上できる。
【0224】
以上説明したように、第1および第2実施形態によれば、処理の効率を向上できる。フロントエンド部121は、複数の不揮発性メモリチップ41のそれぞれがビジー状態であるか否かを管理する。フロントエンド部121およびバックエンド部122は、ホスト2によって発行された1つ以上の要求(例えば、コマンド)が少なくとも1つのサブミッションキュー222に格納されている場合、1つ以上の要求から、複数の不揮発性メモリチップ41の内のビジー状態でない第1不揮発性メモリチップ41-1に対する第1要求を特定し、特定された第1要求に応じた処理を実行する。
【0225】
これにより、対象の不揮発性メモリチップ41がビジー状態であり、対応する処理を直ちに開始できない要求のために、メモリシステム3のリソースが浪費されることを回避できる。したがって、要求において指定される不揮発性メモリチップ41をホスト2がどのように選択したとしても、メモリシステム3のリソースの浪費を抑制し、少ないリソースで高い処理効率を実現できる。
【0226】
第1および第2実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0227】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0228】
1…情報処理システム、2…ホスト、3…メモリシステム、4…不揮発性メモリ、5…DRAM、6…コントローラ、10…バス、11…DRAM I/F、12…メモリコントローラ、13…SRAM、121…フロントエンド部、122…バックエンド部、20…バス、21…CPU、22…RAM、221…データバッファ、222…サブミッションキュー、31…メモリセルアレイ、32…ページバッファ、41…不揮発性メモリチップ、51…メモリチップ管理テーブル、52…コマンド管理テーブル、53…ライトバッファ、61…記憶領域、611…SQヘッドポインタ、612…SQテイルポインタ、613…SQビットマップ。