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

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

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

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
  • 特開-メモリシステム 図10
  • 特開-メモリシステム 図11
  • 特開-メモリシステム 図12
  • 特開-メモリシステム 図13
  • 特開-メモリシステム 図14
  • 特開-メモリシステム 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043974
(43)【公開日】2024-04-02
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20240326BHJP
   G06F 12/02 20060101ALI20240326BHJP
【FI】
G06F12/00 560A
G06F12/00 597U
G06F12/02 570A
【審査請求】未請求
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2022149248
(22)【出願日】2022-09-20
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】片桐 徹
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AB26
5B160CB01
(57)【要約】
【課題】ホストのメモリを効率的に利用できるメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信する。前記コントローラは、前記第1のリードコマンドによって指定されるデータポインタに基づき、前記ホストのメモリの前記第1のデータバッファへのリードアクセスを実行する。
【選択図】図4
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信し、
前記第1のリードコマンドによって指定される前記データポインタに基づき、前記ホストのメモリの前記第1のデータバッファへのリードアクセスを実行する、
メモリシステム。
【請求項2】
前記コントローラは、前記第1のデータバッファから前記第1のデータとは異なる第2のデータを読み出す、
請求項1に記載のメモリシステム。
【請求項3】
前記第2のデータは、前記メモリシステムの管理に使用される管理データである、
請求項2に記載のメモリシステム。
【請求項4】
前記第2のデータは、論理アドレスと前記不揮発性メモリの物理アドレスとの間の対応関係を示すアドレス変換情報である、
請求項2に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1のリードコマンドを受信およびデコードし、
前記第1のデータを前記不揮発性メモリから読み出し、
前記不揮発性メモリから読み出された前記第1のデータを前記第1のデータバッファに転送し、
前記第1のリードコマンドが受信およびデコードされてから、前記第1のデータバッファへの前記第1のデータの転送が開始されるまでの期間に、前記第1のデータバッファへの前記リードアクセスを実行するようにさらに構成されている、
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第1のリードコマンドを受信およびデコードし、
前記第1のデータを前記不揮発性メモリから読み出し、
前記第1のリードコマンドが受信およびデコードされてから、前記第1のデータバッファへの前記第1のデータの転送が開始されるまでの期間に、第2の論理アドレスを指定し、且つ前記第1のリードコマンドに後続する第2のリードコマンドを前記ホストから受信したことに応じ、
前記第2の論理アドレスと前記不揮発性メモリの物理アドレスとの対応関係を示す第2のアドレス変換情報が前記第1のデータバッファに格納されているか否かを判定し、
前記第2のアドレス変換情報が前記第1のデータバッファに格納されている場合、前記第1のデータバッファへのリードアクセスを実行して、前記第2のアドレス変換情報を前記第1のデータバッファから読み出すようにさらに構成されている、
請求項1に記載のメモリシステム。
【請求項7】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信し、
前記第1のリードコマンドによって指定される前記データポインタに基づき、前記メモリシステムの管理に使用される管理データを前記ホストのメモリの前記第1のデータバッファに書き込み、
前記第1のデータを前記不揮発性メモリから読み出し、
前記不揮発性メモリから読み出された前記第1のデータを前記第1のデータバッファに書き込むように構成されている、
メモリシステム。
【請求項8】
前記管理データは、論理アドレスと前記不揮発性メモリの物理アドレスとの間の対応関係を示すアドレス変換情報である、
請求項7に記載のメモリシステム。
【請求項9】
前記コントローラは、
前記不揮発性メモリに格納されている第2のデータに対応する第2の論理アドレスを指定し、且つ前記第2のデータが転送されるべき前記ホストの前記メモリの第2のデータバッファを示すデータポインタを指定する第2のリードコマンドを前記ホストから受信したことに応じ、
前記第2のリードコマンドによって指定される前記第2の論理アドレスに対応する第2のアドレス変換情報を、前記メモリシステムの揮発性メモリ、および前記ホストの前記メモリに記憶されている複数のアドレス変換情報から、探索し、
前記第2のアドレス変換情報が前記第1のデータバッファまたは前記第2のデータバッファに格納されている場合、前記第1のデータバッファまたは前記第2のデータバッファから前記第2のアドレス変換情報を読み出すようにさらに構成されている、
請求項8に記載のメモリシステム。
【請求項10】
前記コントローラは、
前記揮発性メモリおよび前記ホストの前記メモリに、前記第2のアドレス変換情報が格納されておらず、且つ前記揮発性メモリに新たなアドレス変換情報の格納に利用可能な記憶位置が無い場合、
前記揮発性メモリに格納されている複数のアドレス変換情報から、追い出し対象のアドレス変換情報を選択し、
前記選択されたアドレス変換情報を、前記第1のデータバッファまたは前記第2のデータバッファに書き込むようにさらに構成されている、
請求項9に記載のメモリシステム。
【請求項11】
前記コントローラは、
前記揮発性メモリに格納されている前記複数のアドレス変換情報のうちの、前記不揮発性メモリに書き戻す必要がないアドレス変換情報から、追い出し対象のアドレス変換情報を選択するようにさらに構成されている、
請求項10に記載のメモリシステム。
【請求項12】
前記コントローラは、
前記第1のデータを前記第1のデータバッファに書き込むことで、前記第1のデータバッファに格納されている前記管理データを前記第1のデータに置き換えるように構成されている、
請求項7に記載のメモリシステム。
【請求項13】
前記コントローラは、
前記第1のデータを前記第1のデータバッファに書き込むときに、前記第1のデータバッファに記憶されている前記管理データを読み出し、
前記読み出した管理データを、第2のリードコマンドが指定する前記ホストの前記メモリの第2のデータバッファに書き込み、
前記第1のデータバッファに前記第1のデータを書き込むようにさらに構成されている、
請求項7に記載のメモリシステム。
【請求項14】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信し、
前記第1のリードコマンドによって指定される前記データポインタに基づき、論理アドレスと前記不揮発性メモリの物理アドレスとの間の対応関係を示すアドレス変換情報を前記第1のデータバッファに書き込み、
前記第1のデータを前記不揮発性メモリから読み出し、
前記不揮発性メモリから読み出された前記第1のデータを前記第1のデータバッファに書き込むように構成されている、
メモリシステム。
【請求項15】
前記コントローラは、
前記不揮発性メモリに格納されている第2のデータに対応する第2の論理アドレスを指定し、且つ前記第2のデータが転送されるべき前記ホストのメモリの第2のデータバッファを示すポインタを指定する第2のリードコマンドを前記ホストから受信したことに応じ、
前記第2のリードコマンドが指定する前記第2の論理アドレスに対応する第2のアドレス変換情報を、前記メモリシステムの揮発性メモリ、および前記ホストの前記メモリに記憶されている複数のアドレス変換情報から、探索し、
前記第2のアドレス変換情報が前記第1のデータバッファまたは前記第2のデータバッファに格納されている場合、
前記第1のデータバッファまたは前記第2のデータバッファから前記第2のアドレス変換情報を読み出すようにさらに構成されている、
請求項14に記載のメモリシステム。
【請求項16】
前記コントローラは、
前記揮発性メモリおよび前記ホストの前記メモリに、前記第2のアドレス変換情報が格納されておらず、且つ前記揮発性メモリに新たなアドレス変換情報の格納に利用可能な記憶位置が無い場合、
前記揮発性メモリに格納されている複数のアドレス変換情報から、追い出し対象のアドレス変換情報を選択し、
前記選択されたアドレス変換情報を、前記第1のデータバッファまたは前記第2のデータバッファに書き込むようにさらに構成されている、
請求項15に記載のメモリシステム。
【請求項17】
前記コントローラは、
前記揮発性メモリに格納されている前記複数のアドレス変換情報のうちの、前記不揮発性メモリに書き戻す必要がないアドレス変換情報から、追い出し対象のアドレス変換情報を選択するようにさらに構成されている、
請求項16に記載のメモリシステム。
【請求項18】
前記コントローラは、
前記第1のデータを前記第1のデータバッファに書き込むことで、前記第1のデータバッファに格納されている前記アドレス変換情報を置き換える、ように構成されている、
請求項14に記載のメモリシステム。
【請求項19】
前記コントローラは、
前記第1のデータを前記第1のデータバッファに書き込むときに、前記第1のデータバッファに記憶されている前記アドレス変換情報を読み出し、
前記読み出したアドレス変換情報を、第2リードコマンドが指定する前記ホストの前記メモリの第2のデータバッファに書き込み、
前記第1のデータバッファに前記第1のデータを書き込むようにさらに構成されている、
請求項14に記載のメモリシステム。
【請求項20】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信し、
前記第1のリードコマンドによって指定される前記データポインタに基づき、前記ホストのメモリの前記第1のデータバッファへの書き込みのアクセスを2回以上実行する、
メモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDは、不揮発性メモリよりもデータの書き込みおよびデータの読み出しの速度が速い揮発性メモリを含み得る。SSDのコントローラは、不揮発性メモリから読み出したデータを一時的に揮発性メモリに記憶させる。これにより、コントローラは、不揮発性メモリから再度データを読み出すよりも速く、揮発性メモリからデータを読み出すことができる。そのため、より大きな容量の揮発性メモリをもつことは、余分なレイテンシの発生を抑えることになる。
【0004】
しかし、SSDの揮発性メモリの容量の増加は、SSDのコスト、およびサイズに影響する。
【0005】
したがって、SSDにおいては、ホストのメモリを効率的に利用可能な技術が必要とされている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許出願公開第2021/0294738号明細書
【特許文献2】米国特許出願公開第2020/0293676号明細書
【特許文献3】米国特許出願公開第2016/0188208号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態が解決しようとする課題は、ホストのメモリを効率的に利用できるメモリシステムを提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリに格納されている第1のデータに対応する第1の論理アドレスを指定し、且つ前記第1のデータが転送されるべき前記ホストのメモリの第1のデータバッファを示すデータポインタを指定する第1のリードコマンドを前記ホストから受信する。前記コントローラは、前記第1のリードコマンドによって指定されるデータポインタに基づき、前記ホストのメモリの前記第1のデータバッファへのリードアクセスを実行する。
【図面の簡単な説明】
【0009】
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】実施形態に係るメモリシステムのNAND型フラッシュメモリの構成例を示すブロック図。
図3】実施形態に係るメモリシステムにおいて使用されるLUTキャッシュの構成例を示す図。
図4】実施形態に係るメモリシステムにおいて実行される、リードコマンドの処理中におけるホストのメモリ内のデータバッファの利用例を示す図。
図5】実施形態に係るメモリシステムにおいて実行される、リードコマンドの処理と、ホストのメモリ内のデータバッファの利用可能期間との関係を示す図。
図6】実施形態に係るメモリシステムにおいて実行されるリードコマンドの処理を示す図。
図7】実施形態に係るメモリシステムにおいて実行される、アドレス変換情報の書き込み処理および読み出し処理の例を示す図。
図8】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の書き込み処理を示す図。
図9】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の読み出し処理を示す図。
図10】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の上書きおよびコピー処理を示す図。
図11】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の上書き処理を示す図。
図12】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報のコピー処理を示す図。
図13】実施形態に係るメモリシステムにおいて実行されるリードコマンドの処理の手順を示すフローチャート。
図14】実施形態に係るメモリシステムにおいて実行されるキャッシュリフィル処理の手順を示すフローチャート。
図15】実施形態に係るメモリシステムにおいて実行される、データ転送の処理の手順を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
以下では、実施形態に係るメモリシステムがSSDとして実現されている場合を想定する。図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト2と、SSD3とを含む。ホスト2と、SSD3とは、バス7を介して接続可能である。
【0011】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、または携帯端末である。ホスト2は、SSD3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に送信する。また、ホスト2は、データを無効化するためのコマンドである無効化コマンドをSSD3に送信する。無効化コマンドの一例は、アンマップコマンドやトリムコマンドである。
【0012】
ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21、およびメモリ22は、内部バス20を介して相互接続される。
【0013】
SSD3は、ホスト2に接続可能なストレージデバイスである。SSD3は、不揮発性メモリを含む。SSD3は、不揮発性メモリにデータを書き込む。そして、SSD3は、不揮発性メモリからデータを読み出す。
【0014】
SSD3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とSSD3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0015】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格のインタフェースでは、少なくとも1つのサブミッションキュー(SQ)と、この少なくとも1つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む対のキューを用いて、ホスト2とSSD3との間の通信が行われる。この対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。ホスト2からSSD3へのコマンドの発行において、サブミッションキュー(SQ)が使用される。また、SSD3からホスト2への完了応答の送信において、コンプリーションキュー(CQ)が使用される。ホスト2とSSD3との間におけるコマンド、データ、完了応答の転送は、バス7を介して実行される。
【0016】
次に、ホスト2の構成について説明する。
【0017】
プロセッサ21は、例えばcentral processing unit(CPU)である。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム(OS)、アプリケーションプログラム等を含む。また、プロセッサ21は、バス7を介してSSD3との通信を実行する。
【0018】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、SQ/CQペアを格納するために使用される。
【0019】
SQ/CQペアは、ホスト2とSSD3との間の通信において、使用される。SQ/CQペアは、サブミッションキュー(SQ)221と、コンプリーションキュー(CQ)222とを含む。
【0020】
SQ221は、SSD3にコマンドを発行するために使用されるキューである。SQ221は、それぞれがコマンドを格納可能な複数のスロットを含む。
【0021】
CQ222は、コマンドの完了を示す完了応答をSSD3から受信するために使用されるキューである。完了応答は、完了したコマンドのステータス(成功または失敗、等)を示す情報を含む。完了応答は、コマンド完了、またはコマンド完了通知とも称される。CQ222は、完了応答をそれぞれが格納可能な複数のスロットを含む。
【0022】
また、メモリ22の記憶領域の一部は、リードコマンド用データバッファ223-1、223-2、…として使用される。一つのリードコマンド用データバッファ223は、一つのリードコマンドに対応付けられている。リードコマンド用データバッファ223は、対応するリードコマンドによって読み出しが要求されたリード対象データが転送されるべき記憶領域である。あるリードコマンドをSSD3に発行する際、プロセッサ21は、メモリ22にリードコマンド用データバッファ223-1を確保し、そしてリードコマンドをサブミッションキュー(SQ)221に格納する。確保されたリードコマンド用データバッファ223-1のサイズは、SQ221に格納されたリードコマンドによって指定されるリード対象データのサイズに基づいて決定される。リードコマンドは、リード対象データに対応する論理アドレスと、リード対象データのサイズと、リードコマンド用データバッファ223-1を示すデータポインタとを指定する。データポインタは、リードコマンド用データバッファ223-1として確保されたメモリ22における記憶領域を示すメモリアドレスである。また、別のリードコマンドをSSD3に発行する際、プロセッサ21は、メモリ22にリードコマンド用データバッファ223-2を確保し、そしてこの別のリードコマンドをサブミッションキュー(SQ)221に格納する。確保されたリードコマンド用データバッファ223-2のサイズは、この別のリードコマンドによって指定されるリード対象データのサイズに基づいて決定される。この別のリードコマンドは、リード対象データに対応する論理アドレスと、リード対象データのサイズと、リードコマンド用データバッファ223-2を示すデータポインタとを指定する。
【0023】
また、プロセッサ21は、SSD3に書き込まれるべきデータをメモリ22上の記憶領域に格納して、ライトコマンドをサブミッションキュー(SQ)221に格納する。ライトコマンドは、メモリ22に格納されたデータが書き込まれるべき論理アドレスと、データが格納されているメモリ22内の記憶領域を示すデータポインタと、データのサイズとを指定する情報を含む。
【0024】
次に、SSD3の内部構成について説明する。SSD3は、コントローラ4と、NAND型フラッシュメモリ5とを含む。以降では、NAND型フラッシュメモリ5をNANDメモリ5と称する。また、SSD3は、ランダムアクセスメモリ、例えば、ダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0025】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような制御回路である。コントローラ4は、NANDメモリ5に電気的に接続されている。コントローラ4は、NANDメモリ5にデータを書き込むデータ書き込み動作と、NANDメモリ5からデータを読み出すデータ読み出し動作とを実行する。また、コントローラ4は、バス7を介して、ホスト2との通信を実行する。コントローラ4とNANDメモリ5とを接続する物理インタフェースとしては、例えば、Toggle NANDフラッシュインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせにより実現され得る。
【0026】
NANDメモリ5は、不揮発性メモリである。NANDメモリ5は、マトリクス状に配置された複数のメモリセルを含む。NANDメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
【0027】
DRAM6は、揮発性メモリである。DRAM6の記憶領域の一部は、データを一時的に記憶するための記憶領域として使用される。また、DRAM6は、管理データを記憶していてもよい。管理データは、SSD3の管理に使用されるデータである。
【0028】
次に、コントローラ4の内部構成を説明する。コントローラ4は、ホストインタフェース(ホストI/F)41と、CPU42と、直接メモリアクセスコントローラ(DMAC)43と、スタティックRAM(SRAM)44と、NANDインタフェース(NAND I/F)45と、ECCエンコード/デコード部46と、DRAMインタフェース(DRAM I/F)47とを含む。これらホストインタフェース41と、CPU42と、DMAC43と、SRAM44と、NANDインタフェース45と、ECCエンコード/デコード部46と、DRAMインタフェース47とは、バス40を介して相互接続される。
【0029】
ホストインタフェース41は、通信インタフェース回路である。ホストインタフェース41は、ホスト2との通信を実行する。ホストインタフェース41は、例えば、PCIeコントローラである。
【0030】
ホストインタフェース41は、アービトレーション機構を含む。このアービトレーション機構は、ホスト2の複数のサブミッションキューから、コマンドがフェッチされるべきサブミッションキューを選択する機構である。アービトレーション機構は、例えば、ラウンドロビンアービトレーション機構、または重み付きラウンドロビンアービトレーション機構である。
【0031】
CPU42は、プロセッサである。CPU42は、ホストインタフェース41、DMAC43、SRAM44、NANDインタフェース45、ECCエンコード/デコード部46、およびDRAMインタフェース47を制御する。CPU42は、NANDメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM44にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされてもよい。
【0032】
CPU42は、例えば、フラッシュトランスレーション層(FTL)として、NANDメモリ5に記憶されたデータの管理およびNANDメモリ5に含まれるブロックの管理を実行する。NANDメモリ5に記憶されたデータの管理は、例えば、論理アドレスそれぞれとNANDメモリ5の物理アドレスそれぞれとの間の対応関係を示す情報であるマッピング情報の管理を含む。論理アドレスは、NANDメモリ5をアクセスするためにホスト2によって使用されるアドレスである。論理アドレスは、例えば、LBA(logical block address)である。NANDメモリ5の物理アドレスは、NANDメモリ5に含まれる物理的な記憶位置を示すアドレスである。CPU42は、LUTキャッシュ61を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。また、NANDメモリ5に含まれるブロックの管理は、NANDメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクションとを含む。
【0033】
DMAC43は、ダイレクトメモリアクセス(DMA)を実行する回路である。DMAC43は、ホスト2のメモリ22とSRAM44またはDRAM6との間のデータ転送を実行する。コントローラ4からホスト2のメモリ22にデータを転送する際、DMAC43は、メモリライト要求をホスト2に送信して、データをメモリ22に書き込む。メモリライト要求は、このデータが転送されるべきメモリ22における記憶位置を示すメモリアドレスを含む。ホスト2のメモリ22からコントローラ4にデータを転送する際、DMAC43は、メモリリード要求をホスト2に送信して、データをメモリ22から読み出す。メモリリード要求は、このデータが格納されているメモリ22における記憶位置を示すメモリアドレスを含む。
【0034】
SRAM44は、揮発性メモリである。SRAM44も、DRAM6と同様に、データを一時的に記憶するための記憶領域として使用される。
【0035】
NANDインタフェース45は、NANDメモリ5を制御する回路である。NANDメモリ5が複数のNAND型フラッシュメモリダイから構成されている場合、NANDインタフェース45は、複数のチャンネルを介してこれら複数のNAND型フラッシュメモリダイそれぞれと接続されていてもよい。
【0036】
ECCエンコード/デコード部46は、データのエンコードと、データのデコードとを実行する回路である。ECCエンコード/デコード部46は、NANDメモリ5にデータを書き込む際に、エンコード処理を実行する。エンコード処理において、ECCエンコード/デコード部46は、書き込むべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。ECCエンコード/デコード部46は、NANDメモリ5からデータがリードされた際に、デコード処理を実行する。デコード処理において、ECCエンコード/デコード部46は、NANDメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正処理を行う。
【0037】
DRAMインタフェース47は、DRAM6を制御する回路である。DRAMインタフェース47は、DRAM6にデータを格納し、またDRAM6に格納されているデータを読み出す。
【0038】
次に、NANDメモリ5に記憶されているデータについて説明する。NANDメモリ5は、ユーザデータ51と、ルックアップテーブル(Look Up Table:LUT)52とを記憶する。
【0039】
ユーザデータ51は、ホスト2から受信されたライトコマンドに基づいて、NANDメモリ5に書き込まれたデータである。NANDメモリ5に記憶されているユーザデータは、有効データと、無効データとに大別される。有効データは、論理アドレスに関連付けられている物理アドレスによって示される、NANDメモリ5における記憶位置に格納されているデータである。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、論理アドレスに関連付けられていない物理アドレスによって示される、NANDメモリ5における記憶位置に格納されているデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
【0040】
LUT52は、論理アドレスそれぞれとNANDメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報を格納する。LUT52は、論理物理アドレス変換テーブル(logical-to-physical translation table:L2Pテーブル)とも称される。LUT52は、論理アドレスを対応する物理アドレスに変換するためのアドレス変換情報を格納する。また、LUT52において参照されている物理アドレスによって示される記憶位置に格納されているデータは、有効データである。LUT52において参照されていない物理アドレスによって示される記憶位置に格納されているデータは、無効データである。
【0041】
次に、DRAM6の内部構成例について説明する。DRAM6の記憶領域の一部は、LUTキャッシュ61として利用される。また、DRAM6の記憶領域の他の一部は、内部バッファ62として利用される。
【0042】
LUTキャッシュ61は、NANDメモリ5のLUT52に格納されているアドレス変換情報の一部を一時的に格納する記憶領域である。LUTキャッシュ61は、DRAM6ではなく、コントローラ4のSRAM44に格納されていてもよい。LUTキャッシュ61は、一つ以上のアドレス変換情報をそれぞれが格納することができる複数のエントリを有する。複数のエントリの各々に格納されるアドレス変換情報は、例えば、連続する複数の論理アドレスにそれぞれに対応する複数の物理アドレスを含む。また、LUTキャッシュ61は、LUTキャッシュ61に格納されているアドレス変換情報毎に、ダーティフラグを保持する。ダーティフラグは、対応するアドレス変換情報がLUT52に書き戻す必要がある情報であるか否かを示すフラグである。LUT52に書き戻す必要があるアドレス変換情報は、LUTキャッシュ61に格納されている間に更新され、且つNANDメモリ5のLUT52に未反映のアドレス変換情報である。以降では、LUT52への書き戻しが必要なアドレス変換情報を、ダーティなアドレス変換情報と称する。
【0043】
内部バッファ62は、ユーザデータが一時的に格納される記憶領域である。内部バッファ62は、ホスト2から受信されたライトコマンドに関連付けられたデータを一時的に格納する。内部バッファ62は、ホスト2から受信されたリードコマンドに基づいて、NANDメモリ5から読み出されたデータを一時的に格納する。
【0044】
次に、CPU42の機能構成例について説明する。CPU42は、コマンドフェッチ部421、コマンド処理部422、およびLUTキャッシュ管理部423を含む。コマンドフェッチ部421、コマンド処理部422、およびLUTキャッシュ管理部423の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。例えば、コマンドフェッチ部421は、ホストインタフェース41によって実現されてもよい。
【0045】
コマンドフェッチ部421は、ホストインタフェース41を介して、ホスト2のサブミッションキュー(SQ)221から一つまたは複数のI/Oコマンドをフェッチする。これにより、コントローラ4は、ホスト2から一つまたは複数のI/Oコマンドを受信し得る。
【0046】
コマンド処理部422は、フェッチされたI/Oコマンドを解釈(デコード)し、I/Oコマンドに対応するコマンド処理を実行する。I/Oコマンドに対応するコマンド処理は、例えば、NANDメモリ5にデータを書き込む処理またはNANDメモリ5からデータを読み出す処理である。具体的には、コマンド処理部422は、I/Oコマンドに対応するデータ書き込み動作またはデータ読み出し動作の実行を、NANDメモリ5に指示する。NANDメモリ5に対するデータ書き込み動作またはデータ読み出し動作の指示は、NANDインタフェース45を介してNANDメモリ5に送信される。
【0047】
例えば、ホスト2から受信されたI/Oコマンドがリードコマンドである場合、コマンド処理部422は、リードコマンドによって指定される論理アドレス(リード対象データに対応する論理アドレス)を物理アドレスに変換するためのアドレス変換処理を実行する。コマンド処理部422は、この論理アドレスに対応するアドレス変換情報を、LUTキャッシュ管理部423を通じてLUTキャッシュ61から取得する。コマンド処理部422は、取得したアドレス変換情報を使用して、アドレス変換処理を実行する。コマンド処理部422は、取得した物理アドレスによって示されるNANDメモリ5における記憶位置に記憶されているリード対象データを、NANDメモリ5から読み出すコマンド処理を実行する。NANDメモリ5から読み出されたリード対象データは、内部バッファ62に一時的に格納される。そして、コマンド処理部422は、内部バッファ62に格納されたリード対象データを、リードコマンド用データバッファ223に転送する。リードコマンドによって指定されるデータポインタは、リードコマンド用データバッファ223を示す。リード対象データをリードコマンド用データバッファ223に転送する処理では、コマンド処理部422は、ホスト2にメモリライト要求を送信することによって、リード対象データをリードコマンド用データバッファ223に書き込む。
【0048】
そして、コマンド処理部422は、リードコマンドの完了を示す完了応答を、ホストインタフェース41を介してホスト2に送信する。この場合、コマンド処理部422は、このリードコマンドがフェッチされたサブミッションキュー(SQ)221に関連付けられたコンプリーションキュー(CQ)222に、完了応答を格納する。
【0049】
LUTキャッシュ管理部423は、LUTキャッシュ61に格納されているアドレス変換情報を管理する。LUTキャッシュ管理部423は、アドレス変換処理において、アドレス変換処理の対象の論理アドレスに対応するアドレス変換情報を探索する。アドレス変換情報を探索する処理では、LUTキャッシュ管理部423は、まず、対象の論理アドレスに対応するアドレス変換情報がLUTキャッシュ61に格納されているか否かを判定する。
【0050】
アドレス変換処理の対象の論理アドレスに対応するアドレス変換情報がLUTキャッシュ61に格納されている場合(キャッシュヒット)、LUTキャッシュ管理部423は、LUTキャッシュ61からアドレス変換情報を読み出し、読み出したアドレス変換情報をコマンド処理部422に転送する。
【0051】
アドレス変換処理の対象の論理アドレスに対応するアドレス変換情報がLUTキャッシュ61に格納されていない場合(キャッシュミス)、LUTキャッシュ管理部423は、キャッシュリフィル処理を実行する。キャッシュリフィル処理は、NANDメモリ5のLUT52からアドレス変換情報を読み出す処理と、読み出したアドレス変換情報をLUTキャッシュ61の空きのエントリに格納する処理とを含む。空きのエントリは、新たなアドレス変換情報の格納に利用可能なエントリである。
【0052】
LUTキャッシュ61に空きのエントリがある場合、LUTキャッシュ管理部423は、NANDメモリ5から読み出したアドレス変換情報を空きのエントリに格納する。LUTキャッシュ61に空きのエントリが無い場合、LUTキャッシュ管理部423は、LUTキャッシュ61に格納されているアドレス変換情報から、追い出し対象のアドレス変換情報を選択する。LUTキャッシュ管理部423は、例えば、LRU(Least Recently Used)アルゴリズムを使用することによって、最近最も使用されていないアドレス変換情報を追い出し対象のアドレス変換情報に選択する。追い出し対象のアドレス変換情報は、置換対象のアドレス変換情報とも称される。LUTキャッシュ管理部423は、NANDメモリ5から読み出したアドレス変換情報を、選択された追い出し対象のアドレス変換情報が格納されていたLUTキャッシュ61のエントリに格納する。これにより、このエントリのアドレス変換情報は、NANDメモリ5から読み出したアドレス変換情報に置換される。
【0053】
選択された追い出し対象のアドレス変換情報がダーティなアドレス変換情報である場合には、LUTキャッシュ管理部423は、最初に、書き戻し処理を実行する。書き戻し処理は、ダーティなアドレス変換情報をNANDメモリ5のLUT52に書き戻すことによって、ダーティなアドレス変換情報の内容をNANDメモリ5のLUT52に反映する処理である。そして、LUTキャッシュ管理部423は、NANDメモリ5から読み出したアドレス変換情報を、選択された追い出し対象のアドレス変換情報が格納されていたLUTキャッシュ61のエントリに格納する。これにより、このエントリのアドレス変換情報は、NANDメモリ5から読み出したアドレス変換情報に置換される。
【0054】
LUTキャッシュ61のキャッシュヒット率を高めるためには、大容量のLUTキャッシュ61が必要となる。しかしながら、大容量のLUTキャッシュ61を実現するためには、大容量のDRAMをDRAM6としてSSD3に設けることが必要となる。このことは、SSD3のコストアップを招く要因となる。
【0055】
そこで、本実施形態では、コントローラ4は、リード対象データが転送されるべき記憶領域としてホスト2のメモリ22に確保されているリードコマンド用データバッファを、コントローラ4用のメモリリソースとして活用する。リードコマンド用データバッファは、本来、リード対象データをメモリ22に書き込む(転送する)ために使用される記憶領域である。本実施形態では、コントローラ4は、ホスト2から受信したリードコマンドによって指定されるデータポインタに基づき、ホスト2のメモリ22のリードコマンド用データバッファ(例えば、リードコマンド用データバッファ223-1、223-2、等)へのリードアクセスを実行して、リードコマンド用データバッファから情報を読み出すように構成されている。これにより、リードコマンド用データバッファがコントローラ4用のメモリリソースとして活用され得る。
【0056】
リードコマンド用データバッファから読み出される情報は、リードコマンドの受信後にコントローラ4によってリードコマンド用データバッファに書き込まれた情報である。また、この情報は、リード対象データ以外のデータである。
【0057】
具体的には、リードコマンド用データバッファは、様々な管理データのキャッシュ領域として利用可能である。様々な管理データは、例えばアドレス変換情報である。
【0058】
コントローラ4は、リード対象データをリードコマンド用データバッファに書き込む前に、このリードコマンド用データバッファへのリードアクセスを実行する。
【0059】
リードコマンド用データバッファはコントローラ4によって使用される様々な情報を一時的にキャッシュする記憶領域として利用可能であるが、以下では、リードコマンド用データバッファを、アドレス変換情報を保持するためのキャッシュとして利用するケースを例として説明する。
【0060】
リードコマンド用データバッファにアドレス変換情報をキャッシュする処理は、例えば、追い出し対象のアドレス変換情報をリードコマンド用データバッファに書き込むことによって実行される。
【0061】
この場合、LUTキャッシュ管理部423は、ダーティでないアドレス変換情報から、追い出し対象のアドレス変換情報を選択し得る。LUTキャッシュ管理部423は、例えば、ダーティでないアドレス変換情報のうち、最近最も使用されていないアドレス変換情報を追い出し対象のアドレス変換情報に選択する。
【0062】
そして、LUTキャッシュ管理部423は、処理中のリードコマンドが存在するか否かを判定する。処理中のリードコマンドとは、例えば、そのリードコマンドに対するデコードが完了しているものの、リード対象データがまだメモリ22に転送されていないリードコマンドである。処理中のリードコマンドが存在する場合、LUTキャッシュ管理部423は、処理中のリードコマンドに対応するリードコマンド用データバッファ223に、追い出し対象のアドレス変換情報を書き込む。処理中のリードコマンドに対応するリードコマンド用データバッファ223は、処理中のリードコマンドによって指定されるリード対象データが転送されるべきメモリ22の記憶領域である。二つ以上のリードコマンドが処理中である場合、LUTキャッシュ管理部423は、処理中の二つ以上のリードコマンドのうちのいずれかに対応するリードコマンド用データバッファ223を、追い出し対象のアドレス変換情報が書き込まれるべき記憶領域に決定する。処理中のリードコマンドが無い場合、LUTキャッシュ管理部423は、追い出し対象のアドレス変換情報を破棄する。
【0063】
例えば、処理中のリードコマンドに後続する新たなリードコマンドに対応するアドレス変換情報がリードコマンド用データバッファ223に格納されている場合、LUTキャッシュ管理部423は、このアドレス変換情報を、リードコマンド用データバッファ223から読み出す。このことで、LUTキャッシュ管理部423は、新たなリードコマンドに対応するアドレス変換情報をNANDメモリ5から読み出す必要がない。このように、リードコマンド用データバッファ223をLUTキャッシュ61の一部として利用することにより、キャッシュヒット率を高めることが可能となる。よって、リードコマンドのコマンド処理の性能を改善することができる。
【0064】
また、リードコマンド用データバッファ223に書き込まれるアドレス変換情報を、ダーティではないアドレス変換情報に限定することにより、リードコマンド用データバッファ223にリード対象データを転送する際に、リードコマンド用データバッファ223からNANDメモリ5にアドレス変換情報を書き戻す処理を行う必要がなくなる。
【0065】
次に、NANDメモリ5の構成例について説明する。図2は、実施形態に係るメモリシステムのNAND型フラッシュメモリの構成例を示すブロック図である。
【0066】
NANDメモリ5のメモリセルアレイ50は、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。複数のページの各々は、例えば、同一ワード線に接続された複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0067】
次に、LUTキャッシュ61について説明する。図3は、実施形態に係るメモリシステムにおいて使用されるLUTキャッシュの構成例を示す図である。
【0068】
LUTキャッシュ61は、LUTキャッシュ本体611と、LUTキャッシュ管理テーブル612とを含む。LUTキャッシュ本体611は、アドレス変換情報をそれぞれが格納可能な複数のエントリ(複数のキャッシュライン)を含む。LUTキャッシュ管理テーブル612は、LUTキャッシュ本体611またはリードコマンド用データバッファに格納されているアドレス変換情報の管理に必要な管理情報を格納するテーブルである。LUTキャッシュ管理テーブル612は、LUTキャッシュ本体611に含まれるエントリの数よりも多い複数のエントリを含む。LUTキャッシュ管理テーブル612のエントリの各々に格納されている管理情報は、一つのアドレス変換情報に対応する。LUTキャッシュ管理テーブル612のエントリの各々に格納されている管理情報は、例えば、タグと、ダーティフラグと、ポインタとを含む。
【0069】
タグは、対応するアドレス変換情報がどの論理アドレスに対応するかを示す情報である。一つのアドレス変換情報が連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含む場合、このアドレス変換情報に対応するタグは、これら複数の論理アドレスのうちの先頭の論理アドレスを示してもよい。
【0070】
ダーティフラグは、対応するアドレス変換情報がダーティなアドレス変換情報であるか否かを示すフラグである。一つのアドレス変換情報が連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含むケースにおいて、いずれか一つの論理アドレスに対応する物理アドレスが更新されており、且つ更新された物理アドレスがNANDメモリ5のLUT52に未反映である場合には、このアドレス変換情報はダーティなアドレス変換情報として扱われる。対応するアドレス変換情報がダーティなアドレス変換情報である場合、ダーティフラグは、例えば、1を示す値に設定される。また、対応するアドレス変換情報がダーティなアドレス変換情報でない場合、ダーティフラグは、例えば、0を示す値に設定される。
【0071】
ポインタは、対応するアドレス変換情報が格納されている記憶位置を示す情報である。アドレス変換情報がLUTキャッシュ本体611のエントリに格納されている場合、ポインタは、このアドレス変換情報が格納されているDRAM6(またはSRAM44)上の記憶位置を示すメモリアドレスである。また、アドレス変換情報がリードコマンド用データバッファ223に格納されている場合、ポインタは、このアドレス変換情報が格納されているホスト2のメモリ22上の記憶位置を示すメモリアドレスである。
【0072】
図3において、LUTキャッシュ管理テーブル612の一つ目のエントリは、LBA10からLBA19までの論理アドレスに対応するアドレス変換情報を管理する情報を格納している。一つ目のエントリのダーティフラグは、0を示す値に設定されている。そのため、一つ目のエントリに対応するアドレス変換情報は、ダーティなアドレス変換情報ではない。一つ目のエントリのポインタ#10は、対応するアドレス変換情報が格納されているDRAM6(またはSRAM44)上の記憶位置を示すメモリアドレスである。
【0073】
LUTキャッシュ管理テーブル612の二つ目のエントリは、LBA20からLBA29までの論理アドレスに対応するアドレス変換情報を管理する情報を格納している。二つ目のエントリのダーティフラグは、1を示す値に設定されている。そのため、二つ目のエントリに対応するアドレス変換情報は、ダーティなアドレス変換情報である。二つ目のエントリのポインタ#20は、対応するアドレス変換情報が格納されているDRAM6(またはSRAM44)上の記憶位置を示すメモリアドレスである。
【0074】
LUTキャッシュ管理テーブル612の三つ目のエントリは、LBA30からLBA39までの論理アドレスに対応するアドレス変換情報を管理する情報を格納している。三つ目のエントリのダーティフラグは、0を示す値に設定されている。そのため、三つ目のエントリに対応するアドレス変換情報は、ダーティなアドレス変換情報ではない。三つ目のエントリのポインタ#30は、対応するアドレス変換情報が格納されているホスト2のメモリ22上の記憶位置を示すメモリアドレスである。例えば、対応するアドレス変換情報が、リードコマンド用データバッファ223-1が割り当てられているメモリ22上の記憶領域における先頭の記憶位置に格納されている場合、ポインタ#30は、この先頭の記憶位置のメモリアドレスである。
【0075】
LUTキャッシュ管理テーブル612の最後のエントリは、LBA0からLBA9までの論理アドレスに対応するアドレス変換情報を管理する情報を格納している。最後のエントリのダーティフラグは、0を示す値に設定されている。そのため、最後のエントリに対応するアドレス変換情報は、ダーティなアドレス変換情報ではない。最後のエントリのポインタ#0は、対応するアドレス変換情報が格納されている、ホスト2のメモリ22上の記憶位置を示すメモリアドレスである。例えば、対応するアドレス変換情報が、リードコマンド用データバッファ223-1が割り当てられているメモリ22上の記憶領域における先頭の3番目の記憶位置に格納されている場合、ポインタ#0は、この3番目の記憶位置のメモリアドレスである。
【0076】
ポインタ#30、およびポインタ#0は、ホスト2のメモリ22上の記憶位置を示すメモリアドレスである。ホスト2のメモリ22の記憶容量はDRAM6およびSRAM44の記憶容量よりも大きいので、ポインタ#30およびポインタ#0のサイズは、ポインタ#10および#20のサイズと比べて大きくなる。
【0077】
図4から図12を参照して実施形態に係るリードコマンドの処理について説明する。これらの図において略同一の処理を含むステップについては同一のステップ番号を付す。同様の処理を含むステップ同士を特に区別する場合、同一のステップ番号の末尾に、互いに異なる文字又は数字を付加する場合がある。図4は、実施形態に係るメモリシステムにおいて実行される、リードコマンドの処理中におけるホストのメモリ内のデータバッファの利用例を示す図である。
【0078】
まず、ホスト2が発行するリードコマンドを処理する手順の概要について説明する。サブミッションキュー(SQ)221に格納されている2つのコマンドCMD R0およびCMD R1は、リードコマンドである。
【0079】
(ステップ1)コントローラ4は、メモリ22のサブミッションキュー(SQ)221からリードコマンドCMD R0をフェッチする。コントローラ4は、フェッチしたリードコマンドCMD R0をデコードする。
【0080】
(ステップ2)コントローラ4は、リードコマンドCMD R0が指定する論理アドレスを物理アドレスに変換する論物アドレス変換処理を実行する。
【0081】
(ステップ3)コントローラ4は、ステップ2の論物アドレス変換で取得した物理アドレスが示すNANDメモリ5の記憶位置から、リードコマンドCMD R0によって指定されたリード対象データを読み出す。
【0082】
(ステップ4)コントローラ4は、ステップ3でNANDメモリ5から読み出されたリード対象データを、メモリ22のCMD R0用データバッファに転送する。CMD R0用データバッファは、リードコマンドCMD R0が指定するデータポインタによって示されるメモリ22のリードコマンド用データバッファである。
【0083】
また、リードコマンドCMD R1も、リードコマンドCMD R0と同様に処理される。
【0084】
このように、ステップ4でリード対象データが転送されるまでの間、各リードコマンド用データバッファは、いずれのデータも格納されていない記憶領域である。そのため、コントローラ4は、SSD3の管理データを各リードコマンド用データバッファに書き込む(転送する)ことができる。また、コントローラ4は、各リードコマンド用データバッファからSSD3の管理データを読み出す。SSD3の管理データは、例えば、LUTキャッシュ61から追い出されたアドレス変換情報である。つまり、コントローラ4は、リードコマンド用データバッファに、データ書き込みのアクセスを複数回行う。
【0085】
次に、管理データを格納するためにリードコマンド用データバッファを利用することができる期間について説明する。図5は、実施形態に係るメモリシステムにおいて実行される、リードコマンドの処理と、ホストのメモリ内のデータバッファの利用可能期間との関係を示す図である。
【0086】
コントローラ4は、ステップ1において、リードコマンドをフェッチした後、リードコマンドのデコードを実行する。コントローラ4は、リードコマンドをデコードすることによって、リードコマンド用データバッファ223に対応する記憶領域を示すデータポインタを取得する。コントローラ4は、取得したデータポインタを使用して、ホスト2のメモリ22におけるリードコマンド用データバッファ223にアクセスすることができる。すなわち、コントローラ4は、リードコマンドのデコードが完了すれば、このリードコマンドに対応するリードコマンド用データバッファ223を利用することができる。言い換えれば、コントローラ4は、リードコマンドのデコードが完了するまで、このリードコマンドに対応するリードコマンド用データバッファ223を利用することができない。
【0087】
次いで、コントローラ4は、ステップ2および3で、論物アドレス変換とリード対象データの読み出しを実行する。リード対象データが読み出されるまでの間、コントローラ4は、リードコマンド用データバッファ223にはリード対象データを転送することはできず、且つコントローラ4はリードコマンド用データバッファ223に対応する記憶領域を把握している。そのため、コントローラ4は、リードコマンド用データバッファ223を利用することができる。
【0088】
次いで、リード対象データの読み出しが完了したことに応じて、コントローラ4は、ステップ4のリード対象データの転送を開始する。そのため、コントローラ4は、ホスト2のメモリ22上のリードコマンド用データバッファ223を、管理データを格納するために利用することができなくなる。
【0089】
つまり、コントローラ4は、ステップ2および3の処理が行われているリードコマンドに対応するリードコマンド用データバッファ223を、リード対象データ以外のデータを転送するために利用することができる。また、コントローラ4は、ステップ2および3の処理が行われているリードコマンドに対応するリードコマンド用データバッファ223から、リード対象データ以外のデータを読み出すことができる。ステップ2および3の処理が行われているリードコマンドは、処理中のリードコマンドである。
【0090】
次に、連続するリードコマンドの処理について説明する。図6は、実施形態に係るメモリシステムにおいて実行されるリードコマンドの処理を示す図である。ここで、ホスト2は、メモリ22にCMD R0用データバッファを確保して、リードコマンド(CMD R0)をサブミッションキュー(SQ)221に格納する。ホスト2は、メモリ22にCMD R1用データバッファを確保して、リードコマンド(CMD R1)をサブミッションキュー(SQ)221に格納する。
【0091】
(ステップ1-1)まず、コントローラ4は、サブミッションキュー(SQ)221からリードコマンドCMD R0をフェッチする。
【0092】
(ステップ1-2)コントローラ4は、ステップ1-1でフェッチしたリードコマンドCMD R0をデコードする。リードコマンドCMD R0をデコードすることによって、コントローラ4は、リードコマンドCMD R0が指定する論理アドレスと、リード対象データのサイズと、CMD R0用データバッファ223に対応する記憶領域を示すデータポインタとを取得する。
【0093】
(ステップ2)コントローラ4は、ステップ1-2で取得した論理アドレスに対する論物アドレス変換を実行する。論物アドレス変換において、コントローラ4は、ステップ1-2で取得した論理アドレスに対応するアドレス変換情報を取得するために、LUTキャッシュ管理テーブル612(図3参照)を参照する。取得すべきアドレス変換情報がLUTキャッシュ本体611(図3参照)に格納されている場合、コントローラ4は、LUTキャッシュ本体611からアドレス変換情報を読み出す。コントローラ4は、読み出したアドレス変換情報を使用して論物アドレス変換を実行する。
【0094】
また、取得すべきアドレス変換情報がLUTキャッシュ本体611に格納されていない場合、コントローラ4は、NANDメモリ5のLUT52からアドレス変換情報を読み出す。コントローラ4は、読み出したアドレス変換情報を使用して論物アドレス変換を実行する。コントローラ4は、論物アドレス変換によって、リードコマンドCMD R0が指定する論理アドレスに対応する物理アドレスを取得する。そして、コントローラ4は、LUTキャッシュ61に新たなアドレス変換情報を格納可能な記憶位置がある場合、LUT52から読み出したアドレス変換情報をLUTキャッシュ本体611に格納する。
【0095】
LUTキャッシュ本体611に新たなアドレス変換情報を格納可能な記憶位置がない場合、コントローラ4は、LUTキャッシュ本体611に格納されているアドレス変換情報から追い出し対象のアドレス変換情報を決定する。コントローラ4は、追い出し対象のアドレス変換情報の代わりに、LUT52から読み出したアドレス変換情報をLUTキャッシュ本体611に格納する。
【0096】
(ステップ3)コントローラ4は、ステップ2で取得した物理アドレスが示すNANDメモリ5の記憶位置からリード対象データを読み出す。コントローラ4は、読み出したリード対象データをDRAM6の内部バッファ62に一時的に格納する。
【0097】
(ステップ4)コントローラ4は、ステップ3で内部バッファ62に一時的に格納されたリード対象データを、メモリ22のCMD R0用データバッファに転送する。
【0098】
これにより、リードコマンドCMD R0の処理が完了する。また、コントローラ4は、リードコマンドCMD R1に対する処理も同様に実行する。コントローラ4は、リードコマンドCMD R1に対するコマンドフェッチを、リードコマンドCMD R0に対する処理が完了する前に開始し得る。
【0099】
次に、リードコマンド用データバッファ223へのアドレス変換情報の書き込み(転送)、およびリードコマンド用データバッファ223からのアドレス変換情報の読み出しについて説明する。図7は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の書き込み処理および読み出し処理の例について示す図である。
【0100】
ここで、SSD3のコントローラ4において、リードコマンドCMD R0およびリードコマンドCMD R1が処理中である場合を想定する。
【0101】
コントローラ4は、リード対象以外のデータをホスト2から受信したリードコマンドCMD R0に対応するCMD R0用データバッファに書き込む。リード対象データ以外のデータは、例えば、LUTキャッシュ本体611に格納されているアドレス変換情報またはSSD3の管理に使用される管理データである。リードコマンドCMD R0の処理が進み、NANDメモリ5からリードコマンドCMD R0に対応するリード対象データを読み出したことに応じて、コントローラ4は、リード対象データをCMD R0用データバッファに書き込む。
【0102】
また、例えば、コントローラ4は、ホスト2から受信したリードコマンドCMD R1に対応するCMD R1用データバッファから、リード対象データ以外のデータを読み出す。
【0103】
コントローラ4は、追い出し対象のアドレス変換情報として決定されたアドレス変換情報を、LUTキャッシュ本体611からCMD R0用データバッファに書き込む(転送する)。
【0104】
コントローラ4は、論物アドレス変換において、CMD R1用データバッファに格納されているアドレス変換情報がヒットした際に、メモリ22に格納されているアドレス変換情報をCMD R1用データバッファから読み出す。
【0105】
次に、リードコマンドCMD R1の処理において、アドレス変換情報をLUTキャッシュ61から追い出し、リードデータ用のデータバッファに書き込む場合について説明する。図8は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の書き込み処理について示す図である。図8において、リードコマンドCMD R0に対するデコードが完了した後、リードコマンドCMD R0が指定するリード対象データの読み出しが未だ完了していない場合を想定する。
【0106】
コントローラ4は、リードコマンドCMD R0に後続するリードコマンドCMD R1をフェッチし、リードコマンドCMD R1をデコードする。
【0107】
(ステップ2)コントローラ4は、リードコマンドCMD R1が指定する論理アドレスに対する論物アドレス変換を実行する。コントローラ4は、リードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報がLUTキャッシュ管理テーブル612に格納されているか否かを判定する。リードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報がLUTキャッシュ管理テーブル612に格納されていない場合(キャッシュミス)、コントローラ4は、LUTキャッシュ本体611が新たなアドレス変換情報を格納するために利用可能な記憶位置を有するか否かを判定する。LUTキャッシュ本体611が新たなアドレス変換情報を格納するために利用可能な記憶位置を持たない場合、コントローラ4は、LUTキャッシュ本体611に格納されているアドレス変換情報から、追い出し対象のアドレス変換情報を選択する。コントローラ4は、LUTキャッシュ本体611に格納されているダーティでないアドレス変換情報から、追い出し対象のアドレス変換情報を選択する。そして、コントローラ4は、処理中のリードコマンドが指定するデータポインタが示すメモリ22上の記憶領域に、アドレス変換情報を格納するために利用可能な記憶位置が存在するか否かを判定する。ここで、処理中のリードコマンドは、リードコマンドCMD R0およびリードコマンドCMD R1である。つまり、コントローラ4は、CMD R0用データバッファおよびCMD R1用データバッファに、追い出し対象のアドレス変換情報を格納可能な記憶位置が存在するか否かを判定する。
【0108】
(ステップ2-a)CMD R0用データバッファおよびCMD R1用データバッファに、追い出し対象のアドレス変換情報を格納可能な記憶位置が存在する場合、コントローラ4は、メモリ22に追い出し対象のアドレス変換情報を書き込む(転送する)。ここでは、コントローラ4は、CMD R0用データバッファに追い出し対象のアドレス変換情報を書き込む(転送する)。そして、コントローラ4は、LUTキャッシュ管理テーブル612における追い出し対象のアドレス変換情報に対応するポインタを、CMD R0用データバッファを示す情報に更新する。
【0109】
次に、リードコマンドCMD R1の処理において、CMD R0用データバッファに格納されているアドレス変換情報を対象にキャッシュヒットが発生する場合について説明する。図9は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の読み出し処理について示す図である。図9において、リードコマンドCMD R0に対するデコードが完了したとき、リードコマンドCMD R0が指定するリード対象データの読み出しが未だ完了しておらず、且つリードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報がCMD R0用データバッファに格納されている場合を想定する。
【0110】
コントローラ4は、リードコマンドCMD R0に後続するリードコマンドCMD R1をフェッチし、リードコマンドCMD R1をデコードする。
【0111】
(ステップ2)コントローラ4は、リードコマンドCMD R1が指定する論理アドレスに対する論物アドレス変換を実行する。コントローラ4は、リードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報がLUTキャッシュ管理テーブル612に格納されているか否かを判定する。リードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報がLUTキャッシュ管理テーブル612に管理されている場合、コントローラ4は、リードコマンドCMD R1が指定する論理アドレスに対応するアドレス変換情報が格納されている記憶位置を示すポインタを取得する。CMD R1が指定する論理アドレスに対応するアドレス変換情報がCMD R0用データバッファに格納されている場合、コントローラ4は、CMD R0用データバッファ内の記憶位置を示すポインタを取得する。
【0112】
(ステップ2-b)コントローラ4は、ステップ2で取得したポインタを使用して、メモリ22のリードコマンド用データバッファからアドレス変換情報を読み出す。コントローラ4は、CMD R0用データバッファに格納されているアドレス変換情報を読み出す。
【0113】
コントローラ4は、ステップ2-bで読み出されたアドレス変換情報を使用して、リードコマンドCMD R1が指定する論理アドレスを物理アドレスに変換する。
【0114】
次に、リードコマンド用データバッファ223に対するリード対象データの転送について説明する。図10は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の上書きおよびコピー処理について示す図である。ここで、メモリ22のリードコマンドCMD R0用データバッファにアドレス変換情報が格納されている場合を想定する。
【0115】
コントローラ4は、リードコマンドCMD R0が指定するリード対象データをNANDメモリ5から読み出す動作が完了した際に、以下で説明する第1の方法あるいは第2の方法に基づいたデータ転送処理を実行する。
【0116】
まず、コントローラ4が第1の方法に基づいたデータ転送処理を実行する場合について説明する。第1の方法では、リードコマンドCMD R0が指定するリード対象データをNANDメモリ5から読み出す動作が完了すると、コントローラ4は、リード対象データをCMD R0用データバッファに転送する処理を開始する。これにより、CMD R0用データバッファに格納されているアドレス変換情報は、リード対象データによって上書きされる。言い換えれば、コントローラ4は、CMD R0用データバッファに格納されているアドレス変換情報を、リード対象データに置き換える。
【0117】
次に、コントローラ4が第2の方法に基づいたデータ転送処理を実行する場合について説明する。第2の方法では、リードコマンドCMD R0が指定するリード対象データをNANDメモリ5から読み出す動作が完了すると、コントローラ4は、CMD R1用データバッファに新たなアドレス変換情報を格納可能な記憶位置が存在するか否かを判定する。ここで、リードコマンドCMD R1は、処理中のリードコマンドである。CMD R1用データバッファに新たなアドレス変換情報を格納可能な記憶位置が存在する場合、コントローラ4は、CMD R0用データバッファに格納されているアドレス変換情報を読み出す。そして、コントローラ4は、読み出したアドレス変換情報をCMD R1用データバッファに書き込む事によって、CMD R0用データバッファに格納されていたアドレス変換情報をコピーする。その後、コントローラ4は、リードコマンドCMD R0が指定するリード対象データをCMD R0に転送する。
【0118】
次に、第1の方法に基づいて、リードコマンドCMD R0が指定するリード対象データをメモリ22に転送する処理について説明する。図11は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の上書き処理について示す図である。
【0119】
(ステップ4)コントローラ4は、内部バッファ62にリードコマンドCMD R0が指定するリード対象データが格納されたことに応じて、CMD R0用データバッファにリード対象データを転送する。これにより、CMD R0用データバッファにアドレス変換情報が格納されていた場合、アドレス変換情報はリード対象データに置き換えられる。つまり、CMD R0用データバッファに格納されているアドレス変換情報は、リード対象データで上書きされる。そして、コントローラ4は、LUTキャッシュ管理テーブル612における、上書きされたアドレス変換情報に関する管理情報を破棄する。
【0120】
これにより、CMD R0用データバッファに格納されていたアドレス変換情報は、消去される。追い出し対象のアドレス変換情報がダーティでないアドレス変換情報から選択されるため、コントローラ4は、CMD R0用データバッファに格納されているアドレス変換情報に対する書き戻し処理を実行する必要はない。
【0121】
次に、第2の方法に基づいて、リードコマンドCMD R0が指定するリード対象データをメモリ22に転送する処理の詳細について説明する。図12は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報のコピー処理について示す図である。ここで、メモリ22のCMD R0用データバッファにアドレス変換情報が格納されており、且つCMD R1用データバッファに新たなアドレス変換情報を格納可能な記憶位置が存在する場合を想定する。
【0122】
(ステップ3)リードコマンドCMD R0が指定する論理アドレスに対する論物アドレス変換が完了したことに応じて、コントローラ4は、リードコマンドCMD R0が指定するリード対象データをNANDメモリ5から読み出す。コントローラ4は、読み出したリード対象データをDRAM6の内部バッファ62に格納する。
【0123】
(ステップ4-a)ステップ3でリードコマンドCMD R0が指定するリード対象データを内部バッファ62に格納したことに応じて、コントローラ4は、メモリ22のCMD R0用データバッファに格納されているアドレス変換情報を読み出す。コントローラ4は、読み出したアドレス変換情報をCMD R1用データバッファに書き込む(転送する)。つまり、コントローラ4は、リードコマンドCMD R0に格納されているアドレス変換情報をCMD R1用データバッファにコピーする。そして、コントローラ4は、LUTキャッシュ管理テーブル612に格納されているアドレス変換情報の管理情報を更新する。
【0124】
これにより、CMD R0用データバッファに格納されていたアドレス変換情報は、CMD R0が指定するリード対象データがCMD R0用データバッファに転送されることによって、上書きされず、引き続き、キャッシュされたアドレス変換情報として利用される。
【0125】
リードコマンドCMD R0が指定するリード対象データをメモリ22に転送する処理を、第1の方法と第2の方法のどちらで行うかは、任意の判断基準によって決定されてよい。例えば、リードコマンド用データバッファにアドレス変換情報を書き込む処理を簡易的に実装する場合は第1の方法を選択する。例えば、リードコマンド用データバッファを、アドレス変換情報の一時的な記憶領域として長く利用したい場合は、第2の方法を選択する。
【0126】
次に、リードコマンドの処理の手順について説明する。図13は、実施形態に係るメモリシステムにおいて実行されるリードコマンドの処理の手順を示すフローチャートである。
【0127】
コントローラ4は、SSD3がリードコマンドを受信したか否かを判定する(ステップS101)。
【0128】
リードコマンドを受信していない場合(S101でNo)、コントローラ4は、リードコマンドを受信するまで待機する。
【0129】
リードコマンドを受信すると(S101でYes)、コントローラ4は、受信したリードコマンドをデコードし、デコードしたリードコマンドから論理アドレスを取得する(ステップS102)。論理アドレスは、リード対象データに対応する論理アドレスである。
【0130】
コントローラ4は、S102で取得した論理アドレスに対応するアドレス変換情報がLUTキャッシュ61に格納されているか否かを判定する(ステップS103)。
【0131】
アドレス変換情報がLUTキャッシュ61に格納されている場合(S103でYes)、コントローラ4は、LUTキャッシュ61からアドレス変換情報を取得する(ステップS104)。
【0132】
コントローラ4は、S104で取得したアドレス変換情報を使用して、物理アドレスを取得する(ステップS105)。
【0133】
コントローラ4は、S105で取得した物理アドレスが示すNANDメモリ5の記憶位置からリード対象データを読み出す(ステップS106)。コントローラ4は、読み出したリード対象データを内部バッファ62に格納する。
【0134】
コントローラ4は、S106で読み出したリード対象データをメモリ22のリードコマンド用データバッファ223に転送するデータ転送を実行する(ステップS107)。データ転送の詳細については、図15を参照して後述する。
【0135】
コントローラ4は、リードコマンドの完了応答をホスト2に送信する(ステップS108)。
【0136】
アドレス変換情報がLUTキャッシュ61に格納されていない場合(S103でNo)、コントローラ4は、S102で取得した論理アドレスに対応するアドレス変換情報がメモリ22のリードコマンド用データバッファ223に格納されているか否かを判定する(ステップS109)。コントローラ4は、例えば、LUTキャッシュ61のLUTキャッシュ管理テーブル612を参照する。
【0137】
アドレス変換情報がメモリ22のリードコマンド用データバッファ223に格納されている場合(S109でYes)、コントローラ4は、メモリ22のリードコマンド用データバッファ223からアドレス変換情報を読み出す(ステップS110)。
【0138】
コントローラ4は、S110で取得したアドレス変換情報を取得して、S105~S108の処理を実行する。
【0139】
アドレス変換情報がメモリ22のリードコマンド用データバッファ223に格納されていない場合(S109でNo)、コントローラ4は、キャッシュリフィル処理を実行する(ステップS111)。キャッシュリフィル処理の詳細については、図14を参照して後述する。S111のキャッシュリフィル処理によって、コントローラ4は、NANDメモリ5からアドレス変換情報を取得する。
【0140】
コントローラ4は、S111で取得したアドレス変換情報を取得して、S105~S108の処理を実行する。
【0141】
次に、S111におけるキャッシュリフィル処理について説明する。図14は、実施形態に係るメモリシステムにおいて実行されるキャッシュリフィル処理を示すフローチャートである。
【0142】
まず、コントローラ4は、キャッシュミスが発生したか否かを判定する(ステップS201)。
【0143】
キャッシュミスが発生していない場合(S201でNo)、コントローラ4は、キャッシュリフィル処理を終了する。
【0144】
キャッシュミスが発生した場合(S201でYes)、コントローラ4は、LUTキャッシュ61(より詳しくは、LUTキャッシュ本体611)に空きエントリがあるか否かを判定する(ステップS202)。空きエントリは、新たなアドレス変換情報を格納することができる記憶位置である。
【0145】
LUTキャッシュ61に空きエントリがある場合(S202でYes)、コントローラ4は、NANDメモリ5からアドレス変換情報を読み出す(ステップS203)。
【0146】
コントローラ4は、S203で読み出されたアドレス変換情報をLUTキャッシュ61の空きエントリに格納する(ステップS204)。
【0147】
LUTキャッシュ61に空きエントリが無い場合(S202でNo)、コントローラ4は、LUTキャッシュ61に格納されているダーティでないアドレス変換情報に対応するLUTキャッシュエントリのうち、追い出し対象のLUTキャッシュエントリを選択する(ステップS205)。追い出し対象のLUTキャッシュエントリに対応するアドレス変換情報は、追い出し対象のアドレス変換情報とも称される。
【0148】
コントローラ4は、処理中のリードコマンドに対応するリードコマンド用データバッファ223に、新たなアドレス変換情報を格納可能な空き記憶位置があるか否かを判定する(ステップS206)。
【0149】
リードコマンド用データバッファ223に空き記憶位置がある場合(S206でYes)、コントローラ4は、S205で選択された追い出し対象のアドレス変換情報をメモリ22のリードコマンド用データバッファ223に書き込む(転送する)(ステップS207)。
【0150】
そして、コントローラ4は、S203およびS204の処理を実行する。このとき、コントローラ4は、S208で追い出し対象として選択されたLUTキャッシュエントリに、S203で読み出したアドレス変換情報を格納する。
【0151】
リードコマンド用データバッファ223に空き記憶位置が無い場合(S206でNo)、コントローラ4は、S205で選択された追い出し対象のアドレス変換情報をLUTキャッシュエントリから破棄する(S208)。
【0152】
そして、コントローラ4は、S203およびS204の処理を実行する。このとき、コントローラ4は、S205で追い出し対象のLUTキャッシュエントリとして選択されたLUTキャッシュエントリに、S203で読み出したアドレス変換情報を格納する。
【0153】
次に、データ転送の処理について説明する。図15は、実施形態に係るメモリシステムにおいて実行される、データ転送の処理の手順を示すフローチャートである。
【0154】
まず、コントローラ4は、リードデータが転送されるべき記憶領域である、リードコマンド用データバッファ223にアドレス変換情報が記憶されているか否かを判定する(ステップS301)。
【0155】
リードコマンド用データバッファ223にアドレス変換情報が記憶されていない場合(S301でNo)、コントローラ4は、リードコマンド用データバッファ223にリードデータを書き込む(ステップS303)。リードコマンド用データバッファ223にアドレス変換情報が記憶されている場合(S301でYes)、コントローラ4は、第1の方法あるいは第2の方法のいずれの方法に基づいて、データ転送処理を実行するかを判定する(ステップS302)。
【0156】
コントローラ4が第1の方法に基づいてデータ転送処理を実行する場合(S302で第1の方法)、コントローラ4は、メモリ22のリードコマンド用データバッファ223にリード対象データを書き込む(S303)。これにより、コントローラ4は、リードコマンド用データバッファ223に格納されているアドレス変換情報を上書きする。
【0157】
コントローラ4が第2の方法に基づいてデータ転送処理を実行する場合(S302で第2の方法)、コントローラ4は、他のリードコマンド用データバッファ223に空き記憶位置があるか否かを判定する(ステップS304)。空き記憶位置は、新たなアドレス変換情報を格納可能な記憶位置である。
【0158】
他のリードコマンド用データバッファ223に空き記憶位置が無い場合(S304でNo)、コントローラ4は、メモリ22のリードコマンド用データバッファ223にリード対象データを書き込む(S303)。これにより、コントローラ4は、リードコマンド用データバッファ223に格納されているアドレス変換情報を上書きする。
【0159】
他のリードコマンド用データバッファ223に空き記憶位置がある場合(S304でYes)、コントローラ4は、メモリ22のリードコマンド用データバッファ223からアドレス変換情報を読み出す(ステップS305)。
【0160】
コントローラ4は、S305で読み出したアドレス変換情報を他のリードコマンド用データバッファに書き込む(転送する)(ステップS306)。これにより、リードコマンド用バッファに格納されていたアドレス変換情報は、コピーされる。
【0161】
コントローラ4は、読み出したリード対象データをリードコマンド用データバッファ223に書き込む(S303)。
【0162】
このように、コントローラ4は、S207、およびS303の処理を実行する。つまり、コントローラ4は、SSD3がリードコマンドを受信したことに応じて、受信したリードコマンドが指定するデータポインタが示すメモリ22のリードコマンド用データバッファ223に対して、2回以上のデータ書き込みのアクセスを実行し得る。また、一つのリードコマンドに対応するリードコマンド用データバッファ223のサイズは、リード対象データのサイズに相当する。一般に、リード対象データのサイズは、一つのアドレス変換情報のサイズよりも大きい。この場合、一つのリードコマンド用データバッファ223に複数のアドレス変換情報が格納されるように、コントローラ4は、リードコマンド用データバッファ223に対して追い出し対象のアドレス変換情報を転送するデータ書き込みのアクセスを2回以上実行し得る。
【0163】
以上説明したように、本実施形態によれば、コントローラ4は、処理中のリードコマンドに対応するリードコマンド用データバッファ223を利用することができる。コントローラ4は、リードコマンド用データバッファ223へのリードアクセスを実行して、リード対象データと異なるデータを読み出す。リード対象データと異なるデータは、例えば、アドレス変換処理の対象のアドレス変換情報である。
【0164】
また、コントローラ4は、SSD3の管理に使用される管理データをリードコマンド用データバッファ223に書き込み、NANDメモリ5からリード対象データを読み出し、NANDメモリ5から読み出されたリード対象データをリードコマンド用データバッファ223に書き込む。管理データは、例えば、アドレス変換情報である。
【0165】
このように、コントローラ4は、リードコマンドのデコードが完了してからリード対象データがリードコマンド用データバッファ223に転送されるまでの間、リードコマンド用データバッファ223を一時的に利用する。コントローラ4は、リード対象データが転送されるまで利用されない記憶領域であるリードコマンド用データバッファ223を、効率的に利用することができる。
【0166】
これにより、SSD3の揮発性メモリ(DRAM6およびSRAM44)のサイズを増やさずに、コントローラ4が利用できる揮発性メモリのサイズを増やすことができる。コントローラ4は、NANDメモリ5からデータを読み出すことに必要とされる時間よりも短い時間で、ホスト2のメモリ22からデータを読み出すことができる。このように、コントローラ4は、リードコマンド用データバッファ223を利用することで、余分なレイテンシの発生を抑えることができる。
【0167】
このとき、コントローラ4は、NANDメモリ5のLUT52からアドレス変換情報を読み出す代わりに、メモリ22のリードコマンド用データバッファ223からアドレス変換情報を読み出すことができる。このように、コントローラ4は、リードコマンド用データバッファ223をLUTキャッシュとして利用することができる。
【0168】
SSD3が、ホスト2のメモリ22を利用する技術として、NVMe規格で規定されたホストメモリバッファがある。ホストメモリバッファは、ホスト2によってSSD3に専用の記憶領域としてSSD3に割り当てられるメモリ22の一部である。しかし、SSD3に割り当てられるホストメモリバッファのサイズは、ホスト2によって決定されるため、SSD3が要求するサイズを満たすことが保証されない。また、ホストメモリバッファとしてSSD3に割り当てられた記憶領域は、SSD3によって排他的に使用され、ホスト2が使用することはできない。このため、ホストメモリバッファをSSD3に割り当てた場合、ホスト2が利用可能なメモリサイズは減少される。リードコマンド用データバッファは、SSD3専用の記憶領域として確保されるホストメモリバッファとは異なり、SSD3専用の記憶領域として利用されない。そのため、本実施形態では、ホスト2が使用することができるメモリ22の記憶領域のサイズに影響を与えずに、メモリ22の記憶領域をLUTキャッシュ等として利用することができる。
【0169】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0170】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、40…バス、41…ホストインタフェース、42…CPU、43…DMAC、44…SRAM、45…NANDインタフェース、46…ECCエンコード/デコード部、47…DRAMインタフェース、51…ユーザデータ、52…LUT、61…LUTキャッシュ、62…内部バッファ、221…サブミッションキュー、222…コンプリーションキュー、223…リードコマンド用データバッファ、421…コマンドフェッチ部、422…コマンド処理部、423…LUTキャッシュ管理部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15