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

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

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

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
  • 特開-メモリシステム 図10
  • 特開-メモリシステム 図11
  • 特開-メモリシステム 図12
  • 特開-メモリシステム 図13
  • 特開-メモリシステム 図14
  • 特開-メモリシステム 図15
  • 特開-メモリシステム 図16
  • 特開-メモリシステム 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024030903
(43)【公開日】2024-03-07
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/06 20060101AFI20240229BHJP
   G06F 12/00 20060101ALI20240229BHJP
【FI】
G06F12/06 550A
G06F12/00 571B
G06F12/00 597U
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022134129
(22)【出願日】2022-08-25
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】渡邊 幸之介
(72)【発明者】
【氏名】山崎 創
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CD04
5B160CD13
(57)【要約】
【課題】リード処理とライト処理の各々の性能の低下を軽減できるメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、ホストによって発行された複数の入出力コマンドをリードコマンドのグループとライトコマンドのグループとに分けて、リードコマンドのグループおよびライトコマンドのグループを、第1のキューおよび第2のキューを使用してそれぞれ管理する。コントローラは、リードコマンドのグループとライトコマンドのグループとのうちの一方のコマンドのグループを連続的に処理する。コントローラは、一方のコマンドのグループの処理の開始から第1の時間が経過したことに応じて、処理対象のコマンドのグループを、一方のコマンドのグループから、他方のコマンドのグループに切り替える。
【選択図】図4
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
第1のキューと、
第2のキューと、
前記不揮発性メモリに電気的に接続され、入出力コマンドそれぞれを処理することによって、前記不揮発性メモリからデータを読み出すためのリード処理と、前記不揮発性メモリにデータを書き込むためのライト処理とを実行するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストによって発行された複数の入出力コマンドをリードコマンドのグループとライトコマンドのグループとに分けて、前記リードコマンドのグループを前記第1のキューを使用して管理し、前記ライトコマンドのグループを前記第2のキューを使用して管理し、
前記リードコマンドのグループと前記ライトコマンドのグループとのうちの一方のコマンドのグループを処理対象のコマンドのグループとして選択し、
前記一方のコマンドのグループを連続的に処理し、
前記一方のコマンドのグループの処理の開始から第1の時間が経過したことに応じて、前記処理対象のコマンドのグループを、前記一方のコマンドのグループから、前記リードコマンドのグループと前記ライトコマンドのグループとのうちの他方のコマンドのグループに切り替えるように構成される、
メモリシステム。
【請求項2】
前記コントローラは、
前記他方のコマンドのグループを連続的に処理し、
前記他方のコマンドのグループの処理の開始から第2の時間が経過したことに応じて、前記処理対象のコマンドのグループを、前記他方のコマンドのグループから、前記一方のコマンドのグループに切り替えるようにさらに構成される、
請求項1に記載のメモリシステム。
【請求項3】
前記第2の時間は、前記第1の時間と等しい、
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、
スループット重視モードを有効にするためのコマンドを前記ホストから受信したことに応じて、前記複数の入出力コマンドを処理するための処理モードを、前記複数の入出力コマンドに対する処理が前記複数の入出力コマンドが受信された順序と同じ順序で開始される第1のモードから、前記スループット重視モードに変更し、
前記処理モードが前記スループット重視モードに変更された場合、前記複数の入出力コマンドを前記リードコマンドのグループと前記ライトコマンドのグループとに分ける動作と、前記一方のコマンドのグループを連続的に処理する動作と、前記一方のコマンドのグループの処理の開始から前記第1の時間が経過したことに応じて、前記処理対象のコマンドのグループを前記他方のコマンドのグループに切り替える動作と、を実行するようにさらに構成される、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1の時間と前記第2の時間との間の比率を指定する第1の情報を前記ホストから受信したことに応じ、
前記第1の情報によって指定される前記比率と、前記リードコマンドのグループを連続的に処理する第1の最小時間と、前記ライトコマンドのグループを連続的に処理する第2の最小時間とに基づいて、前記第1の時間と前記第2の時間とをそれぞれ決定するように構成される、
請求項2に記載のメモリシステム。
【請求項6】
前記コントローラは、
第1のライトコマンドと、前記第1のライトコマンドが前記ホストから受信された時点よりも後に前記ホストから受信された第2のリードコマンドとの間に、前記第1のライトコマンドの処理の後に前記第2のリードコマンドが処理されることが必要である、という依存関係がある場合、
前記処理対象のコマンドのグループを切り替えるための制御コマンドを、前記第1のキューにおいて、前記第2のリードコマンドの前に挿入し、
前記処理対象のコマンドのグループが前記リードコマンドのグループであり、且つ、前記第1のキューから取り出されたコマンドが前記制御コマンドである場合、前記処理対象のコマンドのグループを、前記ライトコマンドのグループに切り替えるようにさらに構成される、
請求項1に記載のメモリシステム。
【請求項7】
前記複数の入出力コマンドの各々は、前記ホストのメモリ上の複数のサブミッションキューのうちのいずれかのサブミッションキューの複数のスロットの一つに格納されており、
前記コントローラは、
前記複数の入出力コマンドを前記複数のサブミッションキューに維持した状態で前記複数の入出力コマンドの内容を参照することによって、前記複数の入出力コマンドの各々がリードコマンドまたはライトコマンドのいずれであるかを判定し、
前記リードコマンドが格納されているサブミッションキューのスロットを示すポインタを前記第1のキューに格納し、
前記ライトコマンドが格納されているサブミッションキューのスロットを示すポインタを前記第2のキューに格納するように構成される、
請求項1に記載のメモリシステム。
【請求項8】
入出力コマンドそれぞれを処理することによって、不揮発性メモリからデータを読み出すためのリード処理と、前記不揮発性メモリにデータを書き込むためのライト処理とを実行するための制御方法であって、
ホストによって発行された複数の入出力コマンドをリードコマンドのグループとライトコマンドのグループとに分けて管理することと、
前記リードコマンドのグループと前記ライトコマンドのグループとのうちの一方のコマンドのグループを処理対象のコマンドのグループとして選択することと、
前記一方のコマンドのグループを連続的に処理することと、
前記一方のコマンドのグループの処理の開始から第1の時間が経過したことに応じて、前記処理対象のコマンドのグループを、前記一方のコマンドのグループから、前記リードコマンドのグループと前記ライトコマンドのグループとのうちの他方のコマンドのグループに切り替えることと、を具備する、
制御方法。
【請求項9】
前記他方のコマンドのグループを連続的に処理することと、
前記他方のコマンドのグループの処理の開始から第2の時間が経過したことに応じて、前記処理対象のコマンドのグループを、前記他方のコマンドのグループから、前記一方のコマンドのグループに切り替えることと、をさらに具備する、
請求項8に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
メモリシステムのコントローラは、ホストから受信した入出力(I/O)コマンドそれぞれを処理することによって、不揮発性メモリからデータを読み出すためのリード処理と、不揮発性メモリにデータを書き込むためのライト処理とを実行する。リードコマンドとライトコマンドとが混在されたI/Oコマンド群がホストによって発行されると、リード処理とライト処理とが頻繁に切り替えられる。
【0004】
コントローラにおいては、バッファ、バス、central processing unit(CPU)のようなコントローラ内のリソースが、リード処理とライト処理とによって共有される場合がある。このような場合、リード処理とライト処理との切り替えに伴うコントローラ内の処理のオーバーヘッドが大きくなる。オーバーヘッドは、例えば、リソースをリード処理またはライト処理に割り当てるための調停処理、あるいは、CPUのコンテクスト切り替えに起因する。また、不揮発性メモリにおいては、データの読み出しを優先させるために、実行中のライト処理(プログラム動作)を中断するサスペンド動作が実行される回数が増加する。
【0005】
この結果、リード処理とライト処理の各々の性能は、リード処理とライト処理の各々が単独で実行された場合の性能の半分未満の性能に低下される場合がある。あるいは、リード処理とライト処理のうちの一方の処理の性能だけが極端に低下する場合もある。
【0006】
したがって、メモリシステムにおいては、リードコマンドとライトコマンドとが混在されたI/Oコマンド群がホストによって発行された場合であっても、リード処理とライト処理の各々の性能の低下を軽減可能な技術が必要とされている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】米国特許出願公開第2019/0035445号明細書
【特許文献2】米国特許第10,430,088号明細書
【特許文献3】米国特許出願公開第2013/0212319号明細書
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の一実施形態が解決しようとする課題は、リード処理とライト処理の各々の性能の低下を軽減できるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0009】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、第1のキューと、第2のキューと、前記不揮発性メモリに電気的に接続され、入出力コマンドそれぞれを処理することによって、前記不揮発性メモリからデータを読み出すためのリード処理と、前記不揮発性メモリにデータを書き込むためのライト処理とを実行するように構成されたコントローラとを具備する。前記コントローラは、前記ホストによって発行された複数の入出力コマンドをリードコマンドのグループとライトコマンドのグループとに分けて、前記リードコマンドのグループを前記第1のキューを使用して管理し、前記ライトコマンドのグループを前記第2のキューを使用して管理する。前記コントローラは、前記リードコマンドのグループと前記ライトコマンドのグループとのうちの一方のコマンドのグループを処理対象のコマンドのグループとして選択する。前記コントローラは、前記一方のコマンドのグループを連続的に処理する。前記コントローラは、前記一方のコマンドのグループの処理の開始から第1の時間が経過したことに応じて、前記処理対象のコマンドのグループを、前記一方のコマンドのグループから、前記リードコマンドのグループと前記ライトコマンドのグループとのうちの他方のコマンドのグループに切り替える。
【図面の簡単な説明】
【0010】
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】実施形態に係るメモリシステムの不揮発性メモリに含まれる複数のメモリダイの各々の構成例を示すブロック図。
図3】実施形態に係るメモリシステムのレイテンシ重視スケジューラにおいて実行される処理を示す図。
図4】実施形態に係るメモリシステムのスループット重視スケジューラにおいて実行される処理の例を示す図。
図5】実施形態に係るメモリシステムのスループット重視スケジューラにおいて実行される強制切り替えコマンド挿入処理の例を示す図。
図6】実施形態に係るメモリシステムのスループット重視スケジューラにおいて実行される処理の別の例を示す図。
図7】実施形態に係るメモリシステムに発行されるスループット重視モード有効化/無効化コマンドの例を示す図。
図8】実施形態に係るメモリシステムにおいて実行されるスループット重視モード有効化/無効化処理の手順を示すシーケンス図。
図9】実施形態に係るメモリシステムに発行されるスループット重視モード有効化/無効化コマンドの別の例を示す図。
図10】実施形態に係るメモリシステムにおいて実行されるスループット重視モード有効化/無効化処理の手順の別の例を示すシーケンス図。
図11】スループット重視モードが有効である場合に実施形態に係るメモリシステムにおいて実行される一連の処理の手順の例を示すフローチャート。
図12】実施形態に係るメモリシステムにおいて実行されるリード/ライトコマンド分離処理の手順の例を示すフローチャート。
図13】実施形態に係るメモリシステムにおいて実行されるリード/ライトコマンド分離処理の手順の別の例を示すフローチャート。
図14】実施形態に係るメモリシステムにおいて実行される切り替え時間設定処理の手順の例を示すフローチャート。
図15】実施形態に係るメモリシステムにおいて実行される強制切り替えコマンド挿入処理の手順の例を示すフローチャート。
図16】実施形態に係るメモリシステムにおいて実行される強制切り替え処理の手順の例を示すフローチャート。
図17】スループット重視モードが有効である場合に実施形態に係るメモリシステムにおいて実行される一連の処理の手順の別の例を示すフローチャート。
【発明を実施するための形態】
【0011】
以下、図面を参照して、実施形態を説明する。
以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)として実現されている場合を想定する。図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2と、SSD3とは、バス7を介して接続可能である。
【0012】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、または携帯端末である。ホスト2は、SSD3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に送信する。
【0013】
ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21およびメモリ22は、内部バス20を介して相互接続される。
【0014】
SSD3は、ホスト2に接続可能なストレージデバイスである。SSD3は、不揮発性メモリを含む。SSD3は、不揮発性メモリにデータを書き込む。また、SSD3は、不揮発性メモリからデータを読み出す。
【0015】
SSD3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とSSD3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、全二重(full duplex)伝送路である。全二重伝送路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0016】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格のインタフェースでは、少なくとも1つのサブミッションキュー(SQ)と、この少なくとも1つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む対のキューを用いて、ホスト2とSSD3との間の通信が行われる。この対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。図1においては、4つのサブミッションキューSQ#1~SQ#4と、一つのコンプリーションキューCQ#1が、I/Oコマンドそれぞれの発行と、I/Oコマンドそれぞれに対する応答の受信とに使用される場合が、例として、示されている。
【0017】
サブミッションキューSQ#1~SQ#4の各々は、SSD3にI/Oコマンドを発行するために使用されるキューである。サブミッションキューSQ#1~SQ#4の各々は、複数のスロットを含む。複数のスロットの各々は、一つのI/Oコマンドを格納可能である。ホスト2は、サブミッションキューSQ#1~SQ#4をホスト2のメモリ22に作成する。また、ホスト2は、サブミッションキュークリエイトコマンドをSSD3に発行する。SQ#1~SQ#4の各々が作成されたメモリ22内の記憶位置を示すアドレス、SQ#1~SQ#4の各々のサイズ、SQ#1~SQ#4に関連付けられたコンプリーションキューCQ#1の識別子、等は、サブミッションキュークリエイトコマンドによってSSD3に通知される。
【0018】
コンプリーションキューCQ#1は、I/Oコマンドの完了を示す完了応答をSSD3から受信するために使用されるキューである。完了応答は、完了したコマンドの処理の成功または失敗を示すステータスを示す情報を含む。完了応答は、コマンド完了、またはコマンド完了通知とも称される。コンプリーションキューCQ#1は、複数のスロットを含む。複数のスロットの各々は、一つの完了応答を格納可能である。ホスト2は、コンプリーションキューCQ#1をホスト2のメモリ22に作成する。また、ホスト2は、コンプリーションキュークリエイトコマンドをSSD3に発行する。コンプリーションキューCQ#1が作成されたメモリ22内の記憶位置を示すアドレス、およびこのコンプリーションキューCQ#1のサイズ、等は、コンプリーションキュークリエイトコマンドによってSSD3に通知される。
【0019】
次に、ホスト2の構成について説明する。
【0020】
プロセッサ21は、例えばCPUである。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0021】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、SQ/CQペアを格納するために使用される。また、メモリ22の記憶領域の他の一部は、データバッファとして使用される。データバッファには、SSD3に書き込まれるべきライトデータまたはSSD3から転送されたリードデータが格納される。
【0022】
ホスト2とSSD3との間の通信においては、SQ/CQペアを使用して、ホスト2からSSD3へのI/Oコマンドの発行、およびSSD3からホスト2への完了応答の送信が行われる。ホスト2とSSD3との間におけるI/Oコマンド、データ、完了応答の転送は、バス7を介して実行される。
【0023】
また、ホスト2とSSD3との間の通信においては、管理コマンド用の別のSQ/CQペア(図示せず)を使用して、ホスト2からSSD3への管理コマンドの発行、およびSSD3からホスト2への完了応答の送信が行われる。ホスト2とSSD3との間における管理コマンド、完了応答の転送も、バス7を介して実行される。管理コマンドは、SSD3を管理するためのコマンドである。管理コマンドは、コンプリーションキュークリエイトコマンド、サブミッションキュークリエイトコマンドの他、セット・フィーチャコマンド、等を含む。セット・フィーチャコマンドは、例えば、SSD3の有する複数の機能のうちの任意の機能を有効化または無効化するために使用されるコマンドである。
【0024】
次に、SSD3の内部構成について説明する。SSD3は、コントローラ4と、不揮発性メモリ5とを含む。不揮発性メモリ5の一例は、例えば、NAND型フラッシュメモリである。以下では、不揮発性メモリ5が、NAND型フラッシュメモリとして実現されている場合を想定する。以下では、不揮発性メモリ5をNAND型フラッシュメモリ5と称する。また、SSD3は、ランダムアクセスメモリ、例えば、ダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0025】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような制御回路である。コントローラ4は、NAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、ホスト2から受信されるI/Oコマンドそれぞれを処理することによって、NAND型フラッシュメモリ5からデータを読み出すためのリード処理と、NAND型フラッシュメモリ5にデータを書き込むためのライト処理とを実行する。コントローラ4とNAND型フラッシュメモリ5とを接続する物理インタフェースとしては、例えば、Toggle NANDフラッシュインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせにより実現され得る。
【0026】
NAND型フラッシュメモリ5は、不揮発性メモリである。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。NAND型フラッシュメモリ5は、例えば、複数のメモリダイを含む。メモリダイは、メモリチップとも称される。複数のメモリダイの各々は、NAND型フラッシュメモリダイとして実現される。以下では、メモリダイをNANDダイと称する。図1においては、NAND型フラッシュメモリ5が、32個のNANDダイ#0~#31を含む場合が例として示されている。
【0027】
DRAM6は、揮発性メモリである。DRAM6は、例えば、リード/ライトバッファ61として用いられる記憶領域と、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)62を記憶する記憶領域とを含む。リード/ライトバッファ61は、NAND型フラッシュメモリ5から読み出されたリードデータと、ホスト2から取得されたライトデータとを一時的に記憶する記憶領域である。L2Pテーブル62は、マッピング情報を格納するテーブルである。マッピング情報は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを示す情報である。論理アドレスは、SSD3をアクセスするためにホスト2によって使用されるアドレスである。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。物理アドレスは、NAND型フラッシュメモリ5内の記憶位置を示すアドレスである。
【0028】
次に、コントローラ4の内部構成を説明する。コントローラ4は、例えば、ホストインタフェース(ホストI/F)41と、スタティックRAM(SRAM)42と、CPU43と、誤り訂正回路44と、NANDインタフェース(NAND I/F)45と、DRAMインタフェース(DRAM I/F)46とを含む。これらホストインタフェース41と、SRAM42と、CPU43と、誤り訂正回路44と、NANDインタフェース45と、DRAMインタフェース46とは、内部バス40を介して相互接続される。
【0029】
コントローラ4の構成要素のうち、ホスト2との通信を制御する構成要素は、フロントエンド(FE)と称される。フロントエンド(FE)は、ホストインタフェース41を含む。
【0030】
また、コントローラ4の構成要素のうち、NAND型フラッシュメモリ5との通信を制御する構成要素は、バックエンド(BE)と称される。バックエンド(BE)は、誤り訂正回路44と、NANDインタフェース45とを含む。
【0031】
ホストインタフェース41は、ホスト2との通信を実行する通信インタフェース回路である。ホストインタフェース41は、アービトレーション機構を含む。このアービトレーション機構は、ホスト2のサブミッションキューSQ#1~SQ#4から、I/Oコマンドがフェッチされるべきサブミッションキューを選択する機構である。アービトレーション機構は、例えば、ラウンドロビンアービトレーション機構、または重み付きラウンドロビンアービトレーション機構である。
【0032】
ホストインタフェース41は、サブミッションキューSQ#1~SQ#4の各々について、サブミッションキューテールポインタ(SQTP)とサブミッションキューヘッドポインタ(SQHP)とを管理する。SQHPとSQTPとは、リングバッファであるサブミッションキューの状態を管理するために使用される。SQTPは、サブミッションキュー内の次のフリースロット(次のフリーSQスロット)を示す。ホスト2は、SQTPによって示される次のフリーSQスロットに新たなI/Oコマンドを格納する。SQTPは、ホストインタフェース41内のサブミッションキューテールドアベルレジスタに格納されている。ホスト2は、あるサブミッションキューSQに新たなI/Oコマンドを格納すると、このサブミッションキューSQに対応するサブミッションキューテールドアベルレジスタにSQTPの新たな値を書き込む。ホスト2は、これによって、サブミッションキューに新たなコマンドが格納されたことをSSD3に通知する。SQHPは、まだフェッチされていないI/Oコマンドのうちの最初のI/Oコマンドが格納されている、サブミッションキューSQ内のスロットを示す。コントローラ4は、SQHPの値に基づいて、サブミッションキューSQから一つ以上の新たなI/Oコマンドをフェッチすることができる。サブミッションキューSQから一つ以上のI/Oコマンドをフェッチすると、コントローラ4は、フェッチしたI/Oコマンドの数だけSQHPの値が増えるように、SQHPを更新する。
【0033】
SRAM42は、揮発性メモリである。SRAM42の記憶領域は、例えば、CPU43の作業領域として使用される。SRAM42は、例えば、内部サブミッションキューSQ#1を記憶する記憶領域と、内部サブミッションキューSQ#2を記憶する記憶領域とを含む。
【0034】
内部サブミッションキューSQ#1は、ホスト2によって発行される複数のI/Oコマンドのうちのリードコマンドのグループを格納するために使用される内部キューである。内部サブミッションキューSQ#1は、それぞれがリードコマンドを格納可能な複数のスロットを含む。内部サブミッションキューSQ#1の複数のスロットの各々は、例えば、リードコマンド自体を格納する。あるいは、内部サブミッションキューSQ#1の複数のスロットの各々は、リードコマンド自体を格納する代わりに、リードコマンドが格納されているホスト2のサブミッションキューSQのスロットを示す情報であるポインタのみを格納してもよい。ポインタは、例えば、サブミッションキューSQの識別子と、サブミッションキューSQ内のスロットの識別子とによって表される。内部サブミッションキューSQ#1の各スロットがポインタを保持する構成は、各スロットがリードコマンドを保持する構成に比し、内部サブミッションキューSQ#1用のSRAM42のメモリ容量を削減することを可能にする。
【0035】
内部サブミッションキューSQ#2は、ホスト2によって発行される複数のI/Oコマンドのうちのライトコマンドのグループを格納するために使用される内部キューである。内部サブミッションキューSQ#2は、それぞれがライトコマンドを格納可能な複数のスロットを含む。内部サブミッションキューSQ#2の複数のスロットの各々は、例えば、ライトコマンド自体を格納する。あるいは、内部サブミッションキューSQ#2の複数のスロットの各々は、ライトコマンド自体を格納する代わりに、ライトコマンドが格納されているホスト2のサブミッションキューSQのスロットを示す情報であるポインタのみを格納してもよい。
【0036】
CPU43は、プロセッサである。CPU43は、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM42にロードする。そしてCPU43は、このファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされてもよい。
【0037】
CPU42は、例えば、フラッシュトランスレーション層(FTL)として、NAND型フラッシュメモリ5に記憶されたデータの管理と、NAND型フラッシュメモリ5に含まれるブロックの管理とを行う。NAND型フラッシュメモリ5に記憶されたデータの管理は、例えば、マッピング情報の管理を含む。CPU42は、L2Pテーブル62使用して、マッピング情報を管理する。また、NAND型フラッシュメモリ5に含まれるブロックの管理は、NAND型フラッシュメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクションとを含む。
【0038】
誤り訂正回路44は、NAND型フラッシュメモリ5にデータが書き込まれる際に、エンコード処理を実行する。エンコード処理において、誤り訂正回路44は、NAND型フラッシュメモリ5に書き込まれるべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた際に、誤り訂正回路44は、デコード処理を実行する。デコード処理において、誤り訂正回路44は、NAND型フラッシュメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正を実行する。
【0039】
NANDインタフェース45は、NAND型フラッシュメモリ5を制御する回路である。NANDインタフェース45は、NAND型フラッシュメモリ5に含まれる複数のNANDダイに電気的に接続される。
【0040】
個々のNANDダイは、独立して動作可能である。このため、NANDダイは、並列動作可能な単位として機能する。NANDインタフェース45は、例えば、NANDコントローラ451-0、451-1、…、451-15を含む。NANDコントローラ451-0、451-1、…、451-15は、チャンネルch.0、ch.1、…、ch.15にそれぞれ接続される。NANDコントローラ451-0、451-1、…、451-15の各々は、対応するチャンネルを介して、1つまたは複数のNANDダイに接続される。図1においては、チャンネルch.0、ch.1、…、ch.15の各々に2つのNANDダイが接続されている場合が例示されている。この場合、NANDコントローラ451-0は、チャンネルch.0を介して、NANDダイ#0および#16に接続される。NANDコントローラ451-1は、チャンネルch.1を介して、NANDダイ#1および#17に接続される。そして、NANDコントローラ451-15は、チャンネルch.15を介して、NANDダイ#15および#31に接続される。NANDダイ#0、#1、…、#15は、コントローラ4によってバンクBNK0として扱われる。同様に、NANDダイ#16、#17、…、#31は、コントローラ4によってバンクBNK1として扱われる。バンクは、インターリーブ動作によって、複数のNANDダイを並列動作させる単位である。
【0041】
図1に示されるNAND型フラッシュメモリ5の構成においては、コントローラ4は、16チャンネルと、バンクインタリーブ動作とによって、NANDダイ#0~#31を並列にアクセスすることができる。このため、コントローラ4は、最大で32個のNANDダイにデータを並列に書き込むことができる(並列書き込み数=32)。なお、NANDダイ#0~#31の各々は、複数のプレーンを有するマルチプレーン構成を有していてもよい。例えば、NANDダイ#0~#31の各々が2プレーンを含む場合、コントローラ4は、最大で64個のプレーンにデータを並列に書き込むことができる(並列書き込み数=64)。
【0042】
DRAMインタフェース46は、DRAM6を制御する回路である。DRAMインタフェース46は、DRAM6にデータを格納する。また、DRAMインタフェース46は、DRAM6に格納されているデータを読み出す。
【0043】
次に、CPU43の機能構成を説明する。CPU43は、FTLとして機能する構成要素に加え、スループット重視(oriented)スケジューラ431、レイテンシ重視スケジューラ432、コマンド処理部433、スループット重視モード有効化/無効化部434、切り替え時間設定部435、および内部SQ強制切り替え部436を含む。スループット重視スケジューラ431、レイテンシ重視スケジューラ432、コマンド処理部433、スループット重視モード有効化/無効化部434、切り替え時間設定部435、および内部SQ強制切り替え部436の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。例えば、スループット重視スケジューラ431、およびレイテンシ重視スケジューラ432は、ホストインタフェース41によって実現されてもよい。また、コマンド処理部433の一部、例えば、コマンドを解釈する機能も、ホストインタフェース41によって実現されてもよい。
【0044】
コマンド処理部433は、リードコマンドそれぞれを処理することによって、リード処理を実行する。リード処理は、例えば、L2Pテーブル62を参照することによって、リードコマンドによって指定された論理アドレスを物理アドレスに変換する処理と、物理アドレスによって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理と、読み出されたデータをホスト2のメモリ22に転送する処理とを含む。
【0045】
コマンド処理部433は、ライトコマンドそれぞれを処理することによって、ライト処理を実行する。ライト処理は、例えば、ライトコマンドに関連付けられたライトデータをホスト2のメモリ22から取得する処理と、NAND型フラッシュメモリ5内の記憶位置にライトデータを書き込む処理と、L2Pテーブル62を更新して、ライトコマンドによって指定された論理アドレスに、ライトデータが書き込まれた記憶位置を示す物理アドレスをマッピングする処理とを含む。
【0046】
スループット重視スケジューラ431は、ホスト2によって発行されるI/Oコマンドを処理するための処理モードがスループット重視モードである場合に動作するスケジューラである。スループット重視モードは、I/Oコマンドに対する応答時間(レイテンシ)よりも、スループットが優先されるコマンド処理モードである。スループットは、単位時間当たりに転送されるデータ量(例えばバイト(B)/秒(sec))である。リード処理のスループットは、単位時間当たりにホスト2に転送されるリードデータの量を示す。リードデータは、NAND型フラッシュメモリ5から読み出されるユーザデータである。ライト処理のスループットは、単位時間当たりにNAND型フラッシュメモリ5に書き込まれるライトデータの量を示す。ライトデータは、ホスト2から受信されるユーザデータである。スループットは、帯域幅とも称される。
【0047】
スループット重視スケジューラ431は、ホスト2によって発行される複数のI/Oコマンドをリードコマンドのグループとライトコマンドのグループとに分ける。スループット重視スケジューラ431は、リードコマンドのグループおよびライトコマンドのグループを、内部サブミッションキューSQ#1および内部サブミッションキューSQ#2を使用してそれぞれ管理する。
【0048】
具体的には、スループット重視スケジューラ431は、ホスト2のメモリ22上のサブミッションキューSQ#1~SQ#4の各々から一つ以上のI/Oコマンドをフェッチすることで、複数のI/Oコマンドをホスト2から受信する。スループット重視スケジューラ431は、サブミッションキューSQ#1~SQ#4の各々から一つ以上のI/Oコマンドをフェッチすると、サブミッションキューSQ#1~SQ#4の各々に対応するサブミッションキューヘッドポインタ(SQHP)を更新する。そして、スループット重視スケジューラ431は、受信した複数のI/Oコマンドの各々がリードコマンドまたはライトコマンドのいずれであるかを判定する。判定の結果に基づき、スループット重視スケジューラ431は、受信した複数のI/Oコマンドのうちのリードコマンドのみを内部サブミッションキューSQ#1に格納し、受信した複数のI/Oコマンドのうちのライトコマンドのみを内部サブミッションキューSQ#2に格納する。
【0049】
なお、内部サブミッションキューSQ#1およびSQ#2に、コマンド自体ではなくホスト2のサブミッションキューSQへのポインタが格納される場合には、スループット重視スケジューラ431は以下の処理を実行してもよい。
【0050】
すなわち、スループット重視スケジューラ431は、複数のI/OコマンドをサブミッションキューSQ#1~SQ#4に維持した状態で複数のI/Oコマンドの内容を参照する。例えば、スループット重視スケジューラ431は、サブミッションキューSQ#1~SQ#4の各々に対応するサブミッションキューヘッドポインタ(SQHP)を更新せずに、サブミッションキューSQ#1~SQ#4の各々のスロットをリードアクセスする。スループット重視スケジューラ431は、これにより、複数のI/OコマンドをサブミッションキューSQ#1~SQ#4に維持した状態で複数のI/Oコマンドの内容を参照することができる。スループット重視スケジューラ431は、複数のリードコマンドの各々が格納されているサブミッションキューSQ#1~SQ#4内のスロットを示すポインタを、内部サブミッションキューSQ#1に格納する。同様に、スループット重視スケジューラ431は、複数のライトコマンドの各々が格納されているサブミッションキューSQ#1~SQ#4内のスロットを示すポインタを、内部サブミッションキューSQ#2に格納する。
【0051】
スループット重視モードにおいては、内部サブミッションキューSQ#1で管理されているリードコマンドのグループは、コマンド処理部433によって連続的に処理される。リードコマンドのグループの処理が開始されてから第1の時間が経過すると、処理対象の内部サブミッションキューは、内部サブミッションキューSQ#2に切り替えられる。そして、内部サブミッションキューSQ#2で管理されているライトコマンドのグループが、コマンド処理部433によって連続的に処理される。ライトコマンドのグループの処理が開始されてから第2の時間が経過すると、処理対象の内部サブミッションキューは、内部サブミッションキューSQ#1に再び切り替えられる。
【0052】
なお、第1の時間または第2の時間が経過する前に、処理対象のコマンドのグループに対応する内部サブミッションキューが空(エンプティ)になる場合もある。この場合も、コマンド処理部433は、処理対象のコマンドのグループ(例えば、リードコマンドのグループ)を、他方のコマンドのグループ(例えば、ライトコマンドのグループ)に切り替える。
【0053】
この結果、リードコマンドのグループのみを集中的に処理する時間帯およびライトコマンドのグループのみを集中的に処理する時間帯を作り出すことができる。換言すれば、リード処理だけが連続して実行される時間帯およびライト処理だけが連続して実行される時間帯を作り出すことができる。この結果、リード処理とライト処理とが短い時間間隔で頻繁に切り替えられる場合に比し、リード処理とライト処理との間の切り替えに起因するオーバーヘッドを低減できる。よって、複数のリードコマンドと複数のライトコマンドとが混在されたI/Oコマンド群がホスト2によって発行された場合であっても、リード処理のスループットおよびライト処理のスループットを改善することができる。
【0054】
リード処理とライト処理との間の切り替えが頻繁に発生するケースにおいては、例えば、CPU43のコンテクスト切り替えに伴うオーバーヘッドが大きくなる。コンテクスト切り替えに伴うオーバーヘッドは、例えば、CPU43の内部キャッシュにロードされるプログラムの入れ替えによって生じる。リードコマンドに対するコマンド処理が実行されている間は、SRAM42(またはDRAM6)からCPU43の内部キャッシュにロードされたリード処理を制御するためのプログラムがCPU43によって実行される。処理対象のI/Oコマンドがライトコマンドに切り替えられると、内部キャッシュのプログラムが追い出され、代わりに、ライト処理を制御するためのプログラムがSRAM42(またはDRAM6)から内部キャッシュにロードされる。そして、内部キャッシュにロードされたプログラムが実行される。処理対象のI/Oコマンドがリードコマンドに再び切り替えられると、内部キャッシュのプログラムが追い出され、リード処理を制御するためのプログラムが内部キャッシュに再びロードされる。
【0055】
また、リード処理とライト処理との間の切り替えが頻繁に発生するケースにおいては、ライト処理においてNANDダイが実行中のプログラム動作を中断するためのサスペンド指示、および、中断されたプログラム動作を再開するためのレジューム指示を、コントローラ4がNANDダイに送信する回数も増える。この結果、NAND型フラッシュメモリ5におけるプログラム動作のサスペンド/レジュームに起因するオーバーヘッドも大きくなる。
【0056】
なお、第1の時間と第2の時間は互いに等しくてもよいし、異なっていてもよい。例えば、第1の時間と第2の時間が等しい場合、リード処理のスループットおよびライト処理のスループットを、リード処理のみが単独で実行された場合のスループットおよびライト処理のみが単独で実行された場合のスループットのそれぞれ半分程度に維持できる。
【0057】
ここで、SSD3のコントローラ4が以下の性能を有している場合を想定する。
【0058】
リード処理のみが単独で実行された場合のリード処理のスループット=6000[MB/sec]
ライト処理のみが単独で実行された場合のライト処理のスループット=2500[MB/sec]
リード処理とライト処理との間の切り替えが頻繁に発生するケースにおいては、リード処理のスループットは、リード処理のみが単独で実行された場合のリード処理のスループット(6000[MB/sec])の半分未満、例えば、2000[MB/sec]に低下される場合がある。同様に、ライト処理のスループットも、ライト処理のみが単独で実行された場合のライト処理のスループット2500[MB/sec]の半分未満、例えば、1000[MB/sec]に低下される場合がある。
【0059】
あるいは、リード処理およびライト処理のうちの一方の処理のスループットの低下は少ないが、リード処理およびライト処理のうちの他方の処理のスループットが大きく低下される場合もある。例えば、リード処理のスループットが6000[MB/sec]から5000[MB/sec]に低下され、ライト処理のスループットが2500[MB/sec]から500[MB/sec]に低下されてしまう場合もある。
【0060】
スループット重視スケジューラ431が動作している場合は、リード処理のみが単独で実行される時間帯およびライト処理のみが単独で実行される時間帯を作り出すことができる。したがって、リード処理とライト処理との間の切り替えに起因するオーバーヘッドを削減できる。第1の時間と第2の時間が等しいケースにおいては、リード処理のスループットおよびライト処理のスループットを、例えば、3000[MB/sec]および1250[MB/sec]に維持することができる。ここで、3000[MB/sec]は、リード処理のみが単独で実行された場合のリード処理のスループットの半分のスループットに等しい。また、1250[MB/sec]は、ライト処理のみが単独で実行された場合のライト処理のスループットの半分のスループットに等しい。
【0061】
第1の時間と第2の時間との比率は、ホスト2からの指示に応じて、任意の比率に設定可能である。例えば、リード処理よりもライト処理を優先して実行したいケースにおいては、ホスト2は、比率を1:3に設定するようにSSD3に要求してもよい。比率「1」に対応する時間そのものは、コントローラ4によって決定される。すなわち、ホスト2は、時間そのものを指定するのではなく、比率のみを指定する。同じ種類のコマンドのみを連続的に処理する最小時間の最適値は、SSD3側でのみ判断可能であるためである。以下では、第1の時間がリード処理を集中処理する時間であり、第2の時間がライト処理を集中処理する時間である場合を想定する。第1の時間と第2の時間には、それぞれ独立した最小時間の最適値が存在し得る。第1の時間についての最小時間の最適値は、リードコマンドのグループのみを連続的に処理する最小時間(リード最小最適時間)である。第2の時間についての最小時間の最適値は、ライトコマンドのグループのみを連続的に処理する最小時間(ライト最小最適時間)である。リード最小最適時間は、例えば、NAND型フラッシュメモリ5のデータ読み出し速度およびSSD3の内部構成に依存する。また、ライト最小最適時間は、例えば、NAND型フラッシュメモリ5のデータ書き込み速度およびSSD3の内部構成に依存する。したがって、リード最小最適時間およびライト最小最適時間は、SSD3側でのみ判断可能である。
【0062】
例えば、ホスト2によって指定された第1の時間と第2の時間との比率が1:3である場合、コントローラ4は、比率1に相当する第1の時間がリード最小最適時間以上となり、比率3に相当する第2の時間がライト最小最適時間以上となる、という条件が満たされるように、第1の時間と第2の時間とをそれぞれ決定する。仮にリード最小最適時間が5msecで、ライト最小最適時間が20msecだったとすると、ホスト2から1:3が指定されたら、コントローラ4は、第1の時間を例えば10msecに設定し、第2の時間を例えば30msecに設定してもよい。これにより、第1の時間と第2の時間との比率をホスト2により指定された比率1:3に設定でき、且つ、第1の時間がリード最小最適時間以上であり、第2の時間がライト最小最適時間以上である、という条件を満たすことができる。一方で、もし、第1の時間が5msecに設定され、第2の時間が15msecに設定されたならば、第2の時間がライト最小最適時間を下回ってしまう。第2の時間がライト最小最適時間を下回った場合、ライト処理のスループットを改善する効果が期待できなくなる。
【0063】
このように、コントローラ4は、ホスト2によって指定される第1の時間と第2の時間との間の比率と、リード最小最適時間と、ライト最小最適時間とに基づいて、第1の時間と第2の時間とをそれぞれ決定する。リード最小最適時間は、以下では、第1の最小時間とも称される。また、ライト最小最適時間は、以下では、第2の最小時間とも称される。
【0064】
レイテンシ重視スケジューラ432は、スループット重視モードが有効でない場合に動作するスケジューラである。スループット重視モードが有効でない場合、ホスト2によって発行されるI/Oコマンドを処理するための処理モードは、レイテンシ重視モードに設定される。レイテンシ重視モードは、I/Oコマンドに対するスループットよりも、レイテンシが優先されるコマンド処理モードである。
【0065】
レイテンシ重視モードにおいては、コマンド処理部433は、ホスト2から受信された複数のI/Oコマンドの処理を、これらI/Oコマンドが受信された順序と同じ順序で開始する。なお、I/Oコマンドそれぞれの処理が一旦開始された後は、コマンド処理部433は、必要に応じて、これらI/Oコマンドそれぞれの処理の順序を入れ替えてもよい。例えば、ライト処理の後にリード処理が開始された場合、コマンド処理部433は、リードデータをホスト2のメモリ22に転送する処理を行った後、ライトデータをNAND型フラッシュメモリ5内の記憶位置に書き込む処理を行ってもよい。
【0066】
スループット重視モード有効化/無効化部434は、スループット重視モードを有効にするためのコマンドをホスト2から受信したことに応じて、ホスト2によって発行される複数のI/Oコマンドを処理するための処理モードを、レイテンシ重視モードから、スループット重視モードに変更する。スループット重視モード有効化/無効化部434は、スループット重視モードを無効にするためのコマンドをホスト2から受信したことに応じて、ホスト2によって発行される複数のI/Oコマンドを処理するための処理モードを、スループット重視モードから、レイテンシ重視モードに戻す。
【0067】
スループット重視モードが有効である場合には、各I/Oコマンドのレイテンシは、レイテンシ重視モードにおける各I/Oコマンドのレイテンシよりも大きくなる。したがって、スループット重視モードは、レイテンシを気にしないアプリケーション(以下、スループット重視アプリケーションと称する)によって発行されるI/Oコマンド群の処理に好適である。スループット重視アプリケーションは、多くの量のデータの書き込みと、多くの量のデータの読み出しとをSSD3に要求するアプリケーションである。ホスト2がパーソナルコンピュータである場合には、スループット重視アプリケーションは、例えば、録画と再生とを同時に実行するアプリケーションである。また、ホスト2がデータセンタのサーバコンピュータである場合には、スループット重視アプリケーションは、例えば、データのバックアップとリストアとを同時に実行するアプリケーションである。ホスト2は、スループット重視アプリケーションを実行する際に、スループット重視モードを有効にするためのコマンドをSSD3に送信してもよい。また、スループット重視アプリケーションが終了した場合、ホスト2は、スループット重視モードを無効にするためのコマンドをSSD3に送信してもよい。
【0068】
切り替え時間設定部435は、第1の時間と第2の時間との間の比率M:Nを指定する情報をホスト2から受信したことに応じ、指定された比率M:Nと、第1の最小時間T1と、第2の最小時間T2とに基づいて、第1の時間と第2の時間とをそれぞれ設定する。この場合、切り替え時間設定部435は、第1の時間と第2の時間との比率がM:Nである、という条件が満たされ、且つ、第1の時間がT1以上であり、第2の時間がT2以上である、という条件が満たされるように、第1の時間および第2の時間をそれぞれ決定する。ここで、M、Nの各々は、例えば、1以上の整数である。
【0069】
内部SQ強制切り替え部436(以下、単に強制切り替え部と称する)は、ホスト2から受信されたあるライトコマンドと、このライトコマンドがホスト2から受信された時点よりも後にホスト2から受信されたリードコマンドとの間に依存関係がある場合、処理対象のコマンドのグループ(処理対象内部SQ)を切り替えるための制御コマンドを、内部サブミッションキューSQ#1において、このリードコマンドの前に挿入する。依存関係は、例えば、あるライトコマンドの処理の後にリードコマンドが処理されることが必要である、という関係である。この制御コマンドは、処理対象内部SQの切り替えをコマンド処理部433に指示するためのコマンドである。以下では、この制御コマンドは、強制切り替えコマンドと称される。
【0070】
強制切り替え部436は、ライトコマンドによって指定される論理アドレスの範囲と、このライトコマンドよりも後にホスト2から受信されたリードコマンドによって指定される論理アドレスの範囲とをチェックする。このライトコマンドによって指定される論理アドレスの範囲の少なくとも一部に、このリードコマンドによって指定される論理アドレスの範囲が重複している場合、強制切り替え部436は、ライトコマンドの処理の後にリードコマンドが処理されることが必要である、という依存関係をこれらのコマンドが有すると判定する。この場合、強制切り替え部436は、強制切り替えコマンドを、内部サブミッションキューSQ#1において、このリードコマンドの前に挿入する。
【0071】
コマンド処理部433は、処理対象のコマンドのグループがリードコマンドのグループ(内部サブミッションキューSQ#1)であり、且つ、内部サブミッションキューSQ#1から取り出されたコマンドが強制切り替えコマンドである場合、処理対象のコマンドのグループを、ライトコマンドのグループ(内部サブミッションキューSQ#2)に切り替える。そして、コマンド処理部433は、例えば、内部サブミッションキューSQ#2が空になるまで、内部サブミッションキューSQ#2のライトコマンドを連続的に処理して、これらライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む。
【0072】
このように、ライトコマンドの処理の後に実行されることが必要なリードコマンドの前に強制切り替えコマンドを挿入することにより、このリードコマンドが処理される前に、このライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込むことができる。
【0073】
したがって、コマンド処理部433は、例えば、内部サブミッションキューSQ#2に格納されたライトコマンドに基づくライト処理を実行する際に、ライトコマンドに関連付けられたライトデータをホスト2のメモリ22からリード/ライトバッファ61に転送する処理の完了に応じ、ライトコマンドの完了を示す完了応答をホスト2に送信する処理を実行してもよい。なお、強制切り替え部436は、スループット重視スケジューラ431の一部として実現し得る。
【0074】
次に、NANDダイの構成を説明する。図2は、NAND型フラッシュメモリ5に含まれる複数のNANDダイの各々の構成例を示すブロック図である。
【0075】
NANDダイ#nは、NANDダイ#0~#31のうちの任意のNANDダイである。NANDダイ#nは、メモリセルアレイ51を含む。メモリセルアレイ51は、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0076】
次に、レイテンシ重視スケジューラ432の処理を説明する。図3は、レイテンシ重視スケジューラ432において実行される処理を示す図である。
【0077】
レイテンシ重視スケジューラ432は、例えばラウンドロビンアービトレーションを使用して、ホスト2のサブミッションキューSQ#1~SQ#4の各々から一つ以上のI/Oコマンドをフェッチする。ここでは、サブミッションキューSQ#1~SQ#4の各々から一つずつI/Oコマンドがフェッチされる場合が、例として示されている。レイテンシ重視スケジューラ432は、4つのサブミッションキューSQ#1~SQ#4のそれぞれのスロットS1から4つのI/Oコマンド(ここでは、リードコマンドR1、リードコマンドR2、ライトコマンドW1、ライトコマンドW2)をフェッチする。これら4つのI/Oコマンドは、コマンド処理部433に送られる。次いで、レイテンシ重視スケジューラ432は、4つのサブミッションキューSQ#1~SQ#4のそれぞれのスロットS2から4つのI/Oコマンド(ここでは、リードコマンドR3、ライトコマンドW3、リードコマンドR4、リードコマンドR5)をフェッチする。これら4つのI/Oコマンドは、コマンド処理部433に送られる。コマンド処理部433は、レイテンシ重視スケジューラ432から受け取ったI/Oコマンドそれぞれを順次処理する。このため、コントローラ4においては、リードコマンドR1およびR2に基づくリード処理、ライトコマンドW1およびW2に基づくライト処理、リードコマンドR3に基づくリード処理、ライトコマンドW3に基づくライト処理、…、が実行される。よって、リード処理とライト処理とが比較的頻繁に切り替えられる。
【0078】
次に、スループット重視スケジューラ431の処理を説明する。図4は、スループット重視スケジューラ431において実行される処理の例を示す図である。ここでは、リードコマンド自体が内部サブミッションキューSQ#1に格納され、ライトコマンド自体が内部サブミッションキューSQ#2に格納される場合を、例として説明する。
【0079】
スループット重視スケジューラ431は、4つのサブミッションキューSQ#1~SQ#4のそれぞれのスロットS1から4つのI/Oコマンド(ここでは、リードコマンドR1、リードコマンドR2、ライトコマンドW1、ライトコマンドW2)をフェッチする。次いで、スループット重視スケジューラ431は、4つのサブミッションキューSQ#1~SQ#4のそれぞれのスロットS2から4つのI/Oコマンド(ここでは、リードコマンドR3、ライトコマンドW3、リードコマンドR4、リードコマンドR5)をフェッチする。スループット重視スケジューラ431は、フェッチしたI/Oコマンドのうちのリードコマンドのグループを内部サブミッションキューSQ#1に格納し、フェッチしたI/Oコマンドのうちのライトコマンドのグループを内部サブミッションキューSQ#2に格納する。図4では、リードコマンドR1~R4が内部サブミッションキューSQ#1のスロットS1~S4に格納され、ライトコマンドW1~W3が内部サブミッションキューSQ#2のスロットS1~S3に格納された場合が例として示されている。
【0080】
コマンド処理部433は、リードコマンドのグループとライトコマンドのグループとのうちの一方のコマンドのグループのみを集中処理し、一方のコマンドのグループの処理の開始から、ある時間(第1の時間または第2の時間)が経過した場合、処理対象のコマンドのグループを他方のコマンドのグループに切り替える。したがって、まず、例えば、内部サブミッションキューSQ#1に格納されているリードコマンドR1~R4が連続的に処理される。リードコマンドR1~R4の処理の開始から第1の時間が経過すると、処理対象の内部サブミッションキューが、内部サブミッションキューSQ#1から、内部サブミッションキューSQ#2に切り替えられる。そして、内部サブミッションキューSQ#2に格納されているライトコマンドW1~W3が連続的に処理される。
【0081】
次に、強制切り替えコマンドを挿入する処理を説明する。図5は、スループット重視スケジューラ431において実行される強制切り替えコマンド挿入処理の例を示す図である。ここでは、ライトコマンドW2の処理の後にリードコマンドR4が処理される必要がある場合、つまり、ライトコマンドW2とリードコマンドR4が「R4 after W2」の依存関係を有している場合を想定する。
【0082】
この場合、スループット重視スケジューラ431は、強制切り替えコマンドSWが内部サブミッションキューSQ#1においてリードコマンドR4の前に挿入されるように、強制切り替えコマンドSWを内部サブミッションキューSQ#1のスロットS4に格納し、且つ、リードコマンドR4を内部サブミッションキューSQ#1のスロットS5に格納する。これにより、リードコマンドR4の前に強制切り替えコマンドSWが内部サブミッションキューSQ#1からフェッチされる。
【0083】
内部サブミッションキューSQ#1からフェッチされたコマンドが強制切り替えコマンドSWである場合、コマンド処理部433は、処理対象の内部サブミッションキューを内部サブミッションキューSQ#1から、内部サブミッションキューSQ#2に切り替える。この結果、リードコマンドR4が処理される前に、ライトコマンドW1~W3を処理することが可能となる。
【0084】
次に、スループット重視スケジューラ431の処理の別の例を説明する。図6は、スループット重視スケジューラ431において実行される処理の別の例を示す図である。ここでは、リードコマンドが格納されているホスト2のサブミッションキューのスロットを示すポインタのみが内部サブミッションキューSQ#1に格納され、ライトコマンドが格納されているホスト2のサブミッションキューのスロットを示すポインタのみが内部サブミッションキューSQ#2に格納される場合を、例として説明する。
【0085】
ポインタは、例えば、ホスト2のサブミッションキューSQの識別子と、サブミッションキューSQ内のスロットの識別子との組、つまり、(#m,Sn)よって表される。#mは、ホスト2のサブミッションキューSQ#1~SQ#4のうちの一つを示す。Snは、スロットS1~S5のうちの一つを示す。
【0086】
スループット重視スケジューラ431は、サブミッションキューSQ#1のスロットS1を示すポインタP(#1,S1)、サブミッションキューSQ#2のスロットS1を示すポインタP(#2,S1)、サブミッションキューSQ#1のスロットS2を示すポインタP(#1,S2)、およびサブミッションキューSQ#3のスロットS2を示すポインタP(#2,S2)を、内部サブミッションキューSQ#1のスロットS1~S4にそれぞれ格納する。
【0087】
また、スループット重視スケジューラ431は、サブミッションキューSQ#3のスロットS1を示すポインタP(#3,S1)、サブミッションキューSQ#4のスロットS1を示すポインタP(#4,S1)、およびサブミッションキューSQ#2のスロットS2を示すポインタP(#2,S2)を、内部サブミッションキューSQ#2のスロットS1~S3にそれぞれ格納する。
【0088】
スループット重視スケジューラ431は、内部サブミッションキューSQ#1に格納されているポインタそれぞれに基づいて、リードコマンドのグループだけをホスト2のサブミッションキューSQ#1~SQ#4からフェッチする。そして、スループット重視スケジューラ431は、フェッチしたリードコマンドR1、R2、R3、…、を、コマンド処理部433に送出する。コマンド処理部433は、リードコマンドR1、R2、R3、…、を連続的に処理する。あるいは、コマンド処理部433が、内部サブミッションキューSQ#1に格納されているポインタに基づいて、リードコマンドのグループだけをホスト2のサブミッションキューSQ#1~SQ#4からフェッチする処理と、フェッチしたリードコマンドのグループのコマンド処理との双方を実行してもよい。
【0089】
第1の時間が経過すると、スループット重視スケジューラ431は、内部サブミッションキューSQ#2に格納されているポインタそれぞれに基づいて、ライトコマンドのグループだけをホスト2のサブミッションキューSQ#1~SQ#4からフェッチする。そして、スループット重視スケジューラ431は、フェッチしたライトコマンドW1、W2、W3、…、を、コマンド処理部433に送出する。コマンド処理部433は、ライトコマンドW1、W2、W3、…、を連続的に処理する。あるいは、コマンド処理部433が、内部サブミッションキューSQ#2に格納されているポインタに基づいて、ライトコマンドのグループだけをホスト2のサブミッションキューSQ#1~SQ#4からフェッチする処理と、フェッチしたライトコマンドのグループのコマンド処理との双方を実行してもよい。
【0090】
なお、内部サブミッションキューSQ#1のスロットから取り出された情報が強制切り替えコマンドであった場合、スループット重視スケジューラ431またはコマンド処理部433は、処理対象の内部サブミッションキューを、内部サブミッションキューSQ#1から、内部サブミッションキューSQ#2に切り替える。
【0091】
次に、スループット重視モード有効化/無効化コマンドを説明する。図7は、SSD3に発行されるスループット重視モード有効化/無効化コマンドの例を示す図である。
【0092】
ホスト2によってSSD3に発行されるスループット重視モード有効化/無効化コマンドは、例えば、セット・フィーチャコマンドとして実現され得る。スループット重視モード有効化/無効化コマンドは、有効/無効パラメータを含む。有効/無効パラメータは、スループット重視モードの有効または無効を指定するパラメータである。
【0093】
有効/無効パラメータがスループット重視モードの有効を示す値に設定されている場合、コントローラ4は、スループット重視モードを有効にする。
【0094】
一方、有効/無効パラメータがスループット重視モードの無効を示す値に設定されている場合、コントローラ4は、スループット重視モードを無効にする。すなわち、コントローラ4は、レイテンシ重視モードを有効にする。
【0095】
次に、スループット重視モード有効化/無効化処理を説明する。図8は、SSD3において実行されるスループット重視モード有効化/無効化処理の手順を示すシーケンス図である。
【0096】
スループット重視アプリケーションを実行する際、ホスト2は、スループット重視モードを有効にするためのスループット重視モード有効化/無効化コマンドをSSD3に発行する(ステップS1)。
【0097】
スループット重視モードを有効にするためのスループット重視モード有効化/無効化コマンドをホスト2から受信すると、コントローラ4は、スループット重視モード(スループット重視スケジューラ431)を有効にする(ステップS11)。コントローラ4は、リードコマンドのグループを集中処理する第1の時間とライトコマンドのグループを集中処理する第2の時間とを決定する(ステップS12)。この場合、第1の時間が第1の最小時間以上であり、第2の時間が第2の最小時間以上である、という条件が満たされるように、第1の時間と第2の時間とが設定される。この条件が満たされているならば、第1の時間と第2の時間とは同じ時間でもよい。そして、コントローラ4は、スループット重視モード有効化/無効化コマンドの処理の完了を示す完了応答をホスト2に送信する(ステップS13)。
【0098】
スループット重視アプリケーションが終了した後、ホスト2は、スループット重視モードを無効にするためのスループット重視モード有効化/無効化コマンドをSSD3に発行する(ステップS2)。
【0099】
スループット重視モードを無効にするためのスループット重視モード有効化/無効化コマンドをホスト2から受信すると、コントローラ4は、スループット重視モード(スループット重視スケジューラ431)を無効にする(ステップS21)。そして、コントローラ4は、スループット重視モード有効化/無効化コマンドの処理の完了を示す完了応答をホスト2に送信する(ステップS22)。
【0100】
図9は、SSD3に発行されるスループット重視モード有効化/無効化コマンドの別の例を示す図である。
【0101】
図9に示されるスループット重視モード有効化/無効化コマンドは、有効/無効パラメータに加え、M:Nパラメータを含む。M:Nパラメータは、リード処理が実行される時間とライト処理が実行される時間との間の比率M:Nを指定するパラメータである。
【0102】
図10は、SSD3において実行されるスループット重視モード有効化/無効化処理の手順の別の例を示すシーケンス図である。
【0103】
スループット重視アプリケーションを実行する際、ホスト2は、M:Nパラメータを指定し、且つ、スループット重視モードを有効にするためのスループット重視モード有効化/無効化コマンドをSSD3に発行する(ステップS3)。
【0104】
スループット重視モード有効化/無効化コマンドをホスト2から受信すると、コントローラ4は、スループット重視モード(スループット重視スケジューラ431)を有効にする(ステップS31)。コントローラ4は、リードコマンドのグループを集中処理する第1の時間とライトコマンドのグループを集中処理する第2の時間とを決定する(ステップS32)。この場合、第1の時間と第2の時間との比率がM:Nである、という条件が満たされ、且つ、第1の時間が第1の最小時間以上であり、第2の時間が第2の最小時間以上である、という条件が満たされるように、第1の時間と第2の時間とがそれぞれ決定される。そして、コントローラ4は、スループット重視モード有効化/無効化コマンドの処理の完了を示す完了応答をホスト2に送信する(ステップS33)。
【0105】
スループット重視アプリケーションが終了した後、ホスト2は、スループット重視モードを無効にするためのスループット重視モード有効化/無効化コマンドをSSD3に発行する(ステップS4)。
【0106】
スループット重視モードを無効にするためのスループット重視モード有効化/無効化コマンドをホスト2から受信すると、コントローラ4は、スループット重視モード(スループット重視スケジューラ431)を無効にする(ステップS41)。そして、コントローラ4は、スループット重視モード有効化/無効化コマンドの処理の完了を示す完了応答をホスト2に送信する(ステップS42)。
【0107】
次に、SSD3において実行される一連の処理を説明する。図11は、スループット重視モードが有効である場合にSSD3において実行される一連の処理の手順の例を示すフローチャートである。以下では、リードコマンドのグループとライトコマンドのグループとのうちのリードコマンドのグループが最初に処理される場合を例として説明する。ただし、リードコマンドのグループとライトコマンドのグループのうちのいずれのグループが最初に処理されてもよい。
【0108】
スループット重視モードが有効である場合、コントローラ4は、ホスト2によって発行される複数のI/Oコマンドを、リードコマンドのグループとライトコマンドのグループとに分ける。そして、コントローラ4は、リードコマンドのグループおよびライトコマンドのグループを、内部サブミッションキューSQ#1およびSQ#2を使用して管理する(ステップS51)。
【0109】
コントローラ4は、内部サブミッションキューSQ#1で管理されているリードコマンドのグループを、処理対象のコマンドのグループとして選択する(ステップS52)。
【0110】
コントローラ4は、内部サブミッションキューSQ#1で管理されているリードコマンドのグループを連続的に処理する(ステップS53)。
【0111】
コントローラ4は、リードコマンドのグループの処理の開始から第1の時間が経過した、または内部サブミッションキューSQ#1が空である、という切り替え条件が満たされたか否かを判定する(ステップS54)。
【0112】
処理切り替え条件が満たされていない場合(ステップS54でNo)、コントローラ4は、リードコマンドのグループの処理を継続する(ステップS53)。
【0113】
切り替え条件が満たされた場合(ステップS54でYes)、コントローラ4は、処理対象のコマンドのグループを、ライトコマンドのグループに切り替える(ステップS55)。
【0114】
コントローラ4は、内部サブミッションキューSQ#2で管理されているライトコマンドのグループを連続的に処理する(ステップS56)。
【0115】
コントローラ4は、ライトコマンドのグループの処理の開始から第2の時間が経過、または内部サブミッションキューSQ#2が空、という処理切り替え条件が満たされたか否かを判定する(ステップS57)。
【0116】
処理切り替え条件が満たされていない場合(ステップS57でNo)、コントローラ4は、ライトコマンドのグループの処理を継続する(ステップS56)。
【0117】
処理切り替え条件が満たされた場合(ステップS57でYes)、コントローラ4は、処理対象のコマンドのグループを、リードコマンドのグループに切り替える(ステップS58)。そして、コントローラ4は、ステップS53の処理を実行する。
【0118】
次に、複数のI/Oコマンドをリードコマンドのグループとライトコマンドのグループとに分ける処理(リード/ライトコマンド分離処理)を説明する。図12は、SSD3において実行されるリード/ライトコマンド分離処理の手順の例を示すフローチャートである。
【0119】
コントローラ4は、ホスト2のサブミッションキューSQ#1~SQ#4の各々から一つ以上のI/Oコマンドをフェッチすることで、複数のI/Oコマンドをホスト2から受信する(ステップS61)。
【0120】
コントローラ4は、受信した複数のI/Oコマンドの各々がリードコマンドまたはライトコマンドのいずれであるかを判定する(ステップS62)。
【0121】
リードコマンドであると判定されたI/Oコマンドが存在する場合(ステップS62における「リードコマンド」)、コントローラ4は、リードコマンドであると判定されたI/Oコマンドの各々を内部サブミッションキューSQ#1に格納する(ステップS63)。
【0122】
ライトコマンドであると判定されたI/Oコマンドが存在する場合(ステップS62における「ライトコマンド」)、コントローラ4は、ライトコマンドであると判定されたI/Oコマンドの各々を内部サブミッションキューSQ#2に格納する(ステップS64)。
【0123】
このようにして、コントローラ4は、リードコマンドのグループのみを内部サブミッションキューSQ#1に格納し、ライトコマンドのグループのみを内部サブミッションキューSQ#2に格納する。
【0124】
図13は、SSD3において実行されるリード/ライトコマンド分離処理の手順の別の例を示すフローチャートである。
【0125】
コントローラ4は、複数のI/OコマンドをサブミッションキューSQ#1~SQ#4に維持した状態で複数のI/Oコマンドの内容を参照する(ステップS71)。この場合、コントローラ4は、サブミッションキューSQ#1~SQ#4の各々に対応するサブミッションキューヘッドポインタ(SQHP)を更新せずに、サブミッションキューSQ#1~SQ#4の各々のスロットをリードアクセスすることで、各I/Oコマンドの内容を参照する。
【0126】
そして、コントローラ4は、参照したI/Oコマンドの各々がリードコマンドまたはライトコマンドのいずれであるかを判定する(ステップS72)。
【0127】
リードコマンドであると判定されたI/Oコマンドが存在する場合(ステップS72における「リードコマンド」)、コントローラ4は、リードコマンドの各々が格納されているサブミッションキューSQのスロットを示すポインタを内部サブミッションキューSQ#1に格納する(ステップS73)。
【0128】
ライトコマンドであると判定されたI/Oコマンドが存在する場合(ステップS72における「ライトコマンド」)、コントローラ4は、ライトコマンドの各々が格納されているサブミッションキューSQのスロットを示すポインタを内部サブミッションキューSQ#2に格納する(ステップS74)。
【0129】
次に、ホスト2からの指定に基づいて、リード処理とライト処理とに配分する時間を設定する処理を説明する。図14は、SSD3において実行される切り替え時間設定処理の手順の例を示すフローチャートである。
【0130】
コントローラ4は、比率M:Nを指定する情報をホスト2から受信したか否かを判定する(ステップS81)。ホスト2から受信されたスループット重視モード有効化/無効化コマンドがM:Nパラメータを含む場合、コントローラ4は、比率M:Nを指定する情報をホスト2から受信したと判定する。
【0131】
比率M:Nを指定する情報をホスト2から受信した場合(ステップS81でYes)、コントローラ4は、リードコマンドのグループを処理する第1の時間とライトコマンドのグループを処理する第2の時間を、指定された比率M:Nに基づいて、それぞれ決定する(ステップS82)。
【0132】
比率M:Nを指定する情報をホスト2から受信しなかった(ステップS81でNo)、コントローラ4は、ステップS82の処理を実行しない。この場合、第1の時間と第2の時間の各々はデフォルト値に設定される。第1の時間と第2の時間の各々のデフォルト値は、第1の時間が第1の最小時間以上となり、第2の時間が第2の最小時間以上となる、という条件が満たされるように決定されている。この条件が満たされているならば、第1の時間と第2の時間とは同じ時間でもよい。
【0133】
次に、強制切り替えコマンドを挿入する処理を説明する、図15は、SSD3において実行される強制切り替えコマンド挿入処理の手順の例を示すフローチャートである。
【0134】
コントローラ4は、あるライトコマンドとこのライトコマンドに後続するリードコマンドとの間に「R after W」という依存関係があるか否かを判定する(ステップS91)。ここで、ライトコマンドに後続するリードコマンドは、このライトコマンドがホスト2から受信された時点よりも後にホスト2から受信されたリードコマンドである。すなわち、コントローラ4は、あるライトコマンドがホスト2から受信された時点よりも後にホスト2から受信されたリードコマンドが、当該ライトコマンドが処理された後に処理される必要があるか否かを判定する。
【0135】
ライトコマンドとこのライトコマンドがホスト2から受信された時点よりも後にホスト2から受信されたリードコマンドとの間に「R after W」という依存関係がある場合(ステップS91でYes)、コントローラ4は、強制切り替えコマンドSWを、内部サブミッションキューSQ#1において、このリードコマンドの前に挿入する(ステップS92)。
【0136】
ライトコマンドとこのライトコマンドがホスト2から受信された時点よりも後にホスト2から受信されたリードコマンドとの間に「R after W」という依存関係がない場合(ステップS91でNo)、コントローラ4は、ステップS92の処理を実行しない。
【0137】
次に、強制切り替えコマンドSWに基づいて、処理対象のコマンドのグループを切り替える処理(強制切り替え処理)を説明する。図16は、SSD3において実行される強制切り替え処理の手順の例を示すフローチャートである。
【0138】
コントローラ4は、内部サブミッションキューSQ#1からコマンドを取り出す(ステップS101)。
【0139】
コントローラ4は、取り出したコマンドが強制切り替えコマンドSWであるか否かを判定する(ステップS102)。
【0140】
取り出したコマンドが強制切り替えコマンドSWではない場合(ステップS102でNo)、コントローラ4は、取り出したコマンド(つまりリードコマンド)を処理する(ステップS103)。
【0141】
コントローラ4は、リードコマンドのグループの処理の開始から第1の時間が経過した、または内部サブミッションキューSQ#1が空である、という切り替え条件が満たされたか否かを判定する(ステップS104)。
【0142】
切り替え条件が満たされていない場合(ステップS104でNo)、コントローラ4は、ステップS101の処理に進み、内部サブミッションキューSQ#1から次のコマンドを取り出す。
【0143】
取り出したコマンドが強制切り替えコマンドSWである場合(ステップS102でYes)、コントローラ4は、処理対象のコマンドのグループを、ライトコマンドのグループに切り替える(ステップS105)。
【0144】
コントローラ4は、内部サブミッションキューSQ#2からコマンドを取り出す(ステップS106)。
【0145】
コントローラ4は、取り出したコマンド(つまりライトコマンド)を処理する(ステップS107)。
【0146】
コントローラ4は、処理対象のコマンドのグループをリードコマンドのグループに再び切り替えるための切り替え条件が満たされているか否かを判定する(ステップS108)。強制切り替えコマンドSWによって処理対象のコマンドのグループがライトコマンドのグループに切り替えられた場合には、この切り替え条件としては、例えば、内部サブミッションキューSQ#2が空である、という条件を使用し得る。
【0147】
切り替え条件が満たされない場合(ステップS108でNo)、コントローラ4は、ステップS106の処理に進み、内部サブミッションキューSQ#2から次のライトコマンドを取り出す。
【0148】
切り替え条件が満たされた場合(ステップS108のYes)、コントローラ4は、処理対象のコマンドのグループを、リードコマンドのグループに再び切り替える(ステップS109)。そして、コントローラ4は、ステップS101の処理に進み、内部サブミッションキューSQ#1から次のコマンドを取り出す。
【0149】
次に、ステップS104の切り替え条件が満たされた場合について説明する。
【0150】
ステップS104の切り替え条件が満たされた場合(ステップS104でYes)、コントローラ4は、ステップS105~S107の処理を実行する。そして、コントローラ4は、処理対象のコマンドのグループをリードコマンドのグループに再び切り替えるための切り替え条件が満たされているか否かを判定する(ステップS108)。ステップS104の切り替え条件が満たされることによって処理対象のコマンドのグループがライトコマンドのグループに切り替えられた場合には、ライトコマンドのグループの処理の開始から第2の時間が経過した、または内部サブミッションキューSQ#2が空である、という条件が、ステップS108の切り替え条件として使用され得る。
【0151】
次に、SSD3において実行される一連の処理の別の例を説明する。図17は、スループット重視モードが有効である場合にSSD3において実行される一連の処理の手順の別の例を示すフローチャートである。
【0152】
図17のフローチャートにおいては、図11のフローチャートのステップS51~S58の処理に加え、ステップS111~S112の処理が追加されている。
【0153】
リードコマンドのグループの処理の開始から第1の時間が経過した、または内部サブミッションキューSQ#1が空である、という切り替え条件が満たされていない場合(ステップS54でNo)、コントローラ4は、リードコマンドのグループの処理においてホスト2に転送されたリードデータの量が第1の閾値に達したか否かを判定する(ステップS111)。第1の閾値は、第1の時間内にホスト2に転送することが必要なリードデータの量に相当する。
【0154】
ホスト2に転送されたリードデータの量が第1の閾値未満である場合(ステップS111でNo)、コントローラ4は、リードコマンドのグループの処理を継続する(ステップS53)。
【0155】
ホスト2に転送されたリードデータの量が第1の閾値に達した場合(ステップS111でYes)、コントローラ4は、処理対象のコマンドのグループを、ライトコマンドのグループに切り替える(ステップS55)。
【0156】
したがって、たとえリードコマンドのグループの処理の開始から第1の時間が経過していない場合であっても、ホスト2に転送されたリードデータの量が第1の閾値に達した場合には、コントローラ4は、処理対象のコマンドのグループを、ライトコマンドのグループに切り替えことができる。
【0157】
また、ライトコマンドのグループの処理の開始から第2の時間が経過した、または内部サブミッションキューSQ#2が空である、という切り替え条件が満たされていない場合(ステップS57でNo)、コントローラ4は、ライトコマンドのグループの処理においてNAND型フラッシュメモリ5に書き込まれたライトデータの量が第2の閾値に達したか否かを判定する(ステップS112)。第2の閾値は、第2の時間内にNAND型フラッシュメモリ5に書き込むことが必要なライトデータの量に相当する。
【0158】
NAND型フラッシュメモリ5に書き込まれたライトデータの量が第2の閾値未満である場合(ステップS112でNo)、コントローラ4は、ライトコマンドのグループの処理を継続する(ステップS56)。
【0159】
NAND型フラッシュメモリ5に書き込まれたライトデータの量が第2の閾値に達した場合(ステップS112でYes)、コントローラ4は、処理対象のコマンドのグループを、リードコマンドのグループに再び切り替える(ステップS58)。
【0160】
したがって、たとえライトコマンドのグループの処理の開始から第2の時間が経過していない場合であっても、NAND型フラッシュメモリ5に書き込まれたライトデータの量が第2の閾値に達した場合には、処理対象のコマンドのグループを、リードコマンドのグループに切り替えことができる。
【0161】
以上説明したように、本実施形態によれば、リード処理だけが連続して実行される時間帯およびライト処理だけが連続して実行される時間帯を作り出すことができる。この結果、リード処理とライト処理とが短時間に頻繁に切り替えられる場合に比し、リード処理とライト処理との間の切り替えに起因するオーバーヘッドを低減できる。よって、複数のリードコマンドと複数のライトコマンドとが混在されたI/Oコマンド群がホスト2によって発行された場合であっても、リード処理のスループットおよびライト処理のスループットを改善することができる。
【0162】
また、SSD3は、普段はレイテンシ重視スケジューラ432を使用して、レイテンシ重視モードでコマンド処理を実行する。そして、SSD3は、ホスト2からの指示でスループット重視モードに切り替わる。したがって、ホスト2は、レイテンシを気にしないスループット重視アプリケーションを実行する際にのみ、SSD3のスループット重視モードを有効にすることができる。
【0163】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0164】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、40…内部バス、41…ホストインタフェース、42…SRAM、43…CPU、44…誤り訂正回路、45…NANDインタフェース、46…DRAMインタフェース、61…リード/ライトバッファ、62…L2Pテーブル、431…スループット重視スケジューラ、432…レイテンシ重視スケジューラ、433…コマンド処理部、434…スループット重視モード有効化/無効化部、435…切り替え時間設定部、436…内部SQ強制切り替え部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17