(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024077215
(43)【公開日】2024-06-07
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20240531BHJP
G06F 12/02 20060101ALI20240531BHJP
【FI】
G06F12/00 560B
G06F12/02 570A
G06F12/00 597U
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022189156
(22)【出願日】2022-11-28
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】金子 晃之
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AB26
5B160CB01
(57)【要約】
【課題】細かい粒度のアクセスに対応可能なメモリシステムを実現する。
【解決手段】メモリシステムのメモリコントローラは、論理アドレスそれぞれと不揮発性メモリの物理アドレスそれぞれとの間の対応関係を、ホストによってアクセスされるデータの粒度である第1のサイズよりも大きい管理サイズの単位で管理する。メモリコントローラは、管理サイズを有する論理的に連続するデータがライトバッファに格納されているか否かを判定する。論理的に連続するデータの一部がライトバッファに格納されていない場合、メモリコントローラは、ライトバッファに格納されていない不足データに対応する論理アドレスを特定し、ホストのキャッシュにアクセスするための要求であって不足データに対応する論理アドレスを指定する要求を、ホストに送信する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
キャッシュを含むホストに接続可能なメモリシステムであって、
不揮発性メモリと、
ライトバッファと、
論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を、前記ホストによってアクセスされるデータの粒度である第1のサイズよりも大きい管理サイズの単位で管理するように構成されたメモリコントローラと、を具備し、
前記メモリコントローラは、
前記不揮発性メモリに書き込まれるべき前記第1のサイズを有するデータに対応する論理アドレスを指定するライト要求と、前記データと、を前記ホストから受信したことに応じ、前記受信したデータを前記ライトバッファに格納し、
前記不揮発性メモリに対する書き込み処理を実行する際、前記管理サイズを有する論理的に連続するデータが前記ライトバッファに格納されているか否かを判定し、
前記論理的に連続するデータの一部が前記ライトバッファに格納されていない場合、前記論理的に連続するデータの前記一部である不足データに対応する論理アドレスを特定し、
前記ホストの前記キャッシュにアクセスするための要求であって前記不足データに対応する前記論理アドレスを指定する要求を、前記ホストに送信し、
前記不足データを前記ホストから受信したことに応じ、前記受信した不足データを前記ライトバッファに格納し、
前記ライトバッファに格納された、前記受信した不足データを含む前記論理的に連続するデータを、前記不揮発性メモリに書き込むように構成されている、
メモリシステム。
【請求項2】
前記メモリコントローラは、
前記受信した不足データを含む前記論理的に連続するデータを、前記論理的に連続するデータに対応する第1の論理アドレス範囲の先頭の論理アドレスに割り当てられた第1の物理アドレスによって示される前記不揮発性メモリの記憶領域に書き込み、
前記第1の論理アドレス範囲の前記先頭の論理アドレスに前記第1の物理アドレスが関連付けられるように前記論理物理アドレス変換テーブルを更新するように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記ライトバッファは、前記管理サイズを有するデータをそれぞれが格納可能な複数のエントリを含み、
前記メモリコントローラは、
前記ライトバッファの空きエントリの個数が第1の閾値以下になったことに応じ、前記複数のエントリのうちの一つのエントリを、前記不揮発性メモリに書き込まれるべきデータが格納されている対象エントリとして選択し、
前記管理サイズを有する前記論理的に連続するデータが前記対象エントリに格納されているか否かを判定するように構成されている、
請求項1に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、
前記管理サイズに対する前記不足データの割合が第2の閾値以下であるか否かを判定し、
前記管理サイズに対する前記不足データの割合が前記第2の閾値以下である場合、前記キャッシュにアクセスするための前記要求を前記ホストに送信し、
前記管理サイズに対する前記不足データの割合が前記第2の閾値よりも大きい場合、前記不足データを前記不揮発性メモリから読み出すように構成されている
請求項1に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
一定時間内に前記メモリシステムと前記ホストとの間で転送されるデータの転送量の合計が第3の閾値以下であるか否かを判定し、
前記転送量の合計が前記第3の閾値以下である場合、前記キャッシュにアクセスするための前記要求を前記ホストに送信し、
前記転送量の合計が前記第3の閾値を上回っている場合、前記不足データを前記不揮発性メモリから読み出すように構成されている、
請求項1に記載のメモリシステム。
【請求項6】
前記ライトバッファは、前記管理サイズを有するデータをそれぞれが格納可能な複数のエントリを含み、
前記メモリコントローラは、
前記転送量の合計が前記第3の閾値を上回っている場合、
前記複数のエントリのうちの使用中のエントリの割合を示す前記ライトバッファの使用率が第4の閾値以下である否かを判定し、
前記ライトバッファの使用率が前記第4の閾値以下である間に前記転送量の合計が前記第4の閾値以下に低下した場合、前記キャッシュにアクセスするための前記要求を前記ホストに送信し、
前記ライトバッファの使用率が前記第4の閾値以下である間に前記転送量の合計が前記第4の閾値以下に低下しなかった場合、前記不足データを前記不揮発性メモリから読み出すように構成されている、
請求項5に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
前記メモリコントローラが保持している前記不揮発性メモリに対する要求の個数が第5の閾値以上であるか否か、および前記不揮発性メモリにおいて処理中の要求の個数が第6の閾値以上であるか否かを判定し、
前記メモリコントローラが保持している前記要求の個数が前記第5の閾値以上である、または前記不揮発性メモリにおいて処理中の前記要求の個数が前記第6の閾値以上である場合、前記キャッシュにアクセスするための前記要求を前記ホストに送信し、
前記メモリコントローラが保持している前記要求の個数が前記第5の閾値未満であり、且つ前記不揮発性メモリにおいて処理中の前記要求の個数が前記第6の閾値未満である場合、前記不足データを前記不揮発性メモリから読み出すように構成されている、
請求項1に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、
前記ホストから受信されるリード要求それぞれに基づいて前記不揮発性メモリから読み出されたデータの各々に対応する論理アドレスを、リード履歴テーブルを使用して管理し、
前記不足データに対応する論理アドレスが前記リード履歴テーブルに格納されているか否かを判定し、
前記不足データに対応する前記論理アドレスが前記リード履歴テーブルに格納されている場合、前記キャッシュにアクセスするための前記要求を前記ホストに送信し、
前記不足データに対応する前記論理アドレスが前記リード履歴テーブルに格納されていない場合、前記不足データを前記不揮発性メモリから読み出すように構成されている、
請求項1に記載のメモリシステム。
【請求項9】
請求項1に記載のメモリシステムと、
前記メモリシステムから読み出されたリードデータと前記メモリシステムに書き戻されるべきライトデータとをキャッシュするように構成されたキャッシュを含むホストと、を具備し、
前記キャッシュは、
前記第1のサイズを有するデータをそれぞれが格納可能な複数のキャッシュラインを含み、
前記ホストは、
前記メモリシステムにデータを書き込むためのライト要求を前記メモリシステムに送信し、
前記キャッシュにアクセスするための前記要求を前記メモリシステムから受信したことに応じ、
前記受信した要求によって指定された前記論理アドレスに対応する前記不足データが前記キャッシュに格納されているか否かを判定し、
前記不足データが前記キャッシュに格納されている場合、前記不足データを前記メモリシステムに転送するように構成されている、
情報処理システム。
【請求項10】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を、ホストによってアクセスされるデータの粒度である第1のサイズよりも大きい管理サイズの単位で管理することと、
前記不揮発性メモリに書き込まれるべき前記第1のサイズを有するデータに対応する論理アドレスを指定するライト要求と、前記データと、を前記ホストから受信したことに応じ、前記受信したデータを前記メモリシステムのライトバッファに格納することと、
前記不揮発性メモリに対する書き込み処理を実行する際、前記管理サイズを有する論理的に連続するデータが前記ライトバッファに格納されているか否かを判定することと、
前記論理的に連続するデータの一部が前記ライトバッファに格納されていない場合、前記論理的に連続するデータの前記一部である不足データに対応する論理アドレスを特定することと、
前記ホストのキャッシュにアクセスするための要求であって前記不足データに対応する前記論理アドレスを指定する要求を、前記ホストに送信することと、
前記不足データを前記ホストから受信したことに応じ、前記受信した不足データを前記ライトバッファに格納することと、
前記ライトバッファに格納された、前記受信した不足データを含む前記論理的に連続するデータを、前記不揮発性メモリに書き込むことと、を具備する、
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。メモリシステムにおいては、ホストがメモリシステムに対してアクセスする際に用いる論理アドレスそれぞれと不揮発性メモリの物理アドレスそれぞれとの間の対応関係は、所定の管理サイズの単位で管理される。
【0003】
ホストによるメモリシステムへのアクセスがメモリシステムにおける管理サイズよりも小さいサイズの単位で実行される場合には、管理サイズに満たないサイズを有するライトデータを含む管理サイズ分のデータを不揮発性メモリから読み出す動作と、読み出したデータとライトデータとを使用して管理サイズ分のライトデータを生成する動作と、生成したライトデータを不揮発性メモリに書き込む動作と、を含むリードモデファイライト動作を実行することが必要となる。
【0004】
しかしながら、このようなリードモデファイライト動作は、メモリシステムの性能を低下させる要因となる。
【0005】
このため、ホストによって実行される細かい粒度のアクセスに対応可能な新たな技術の実現が必要とされている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特許第5178857号公報
【特許文献2】特許第4773342号公報
【特許文献3】米国特許第8578127号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態が解決しようとする課題は、細かい粒度のアクセスに対応可能なメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、メモリシステムは、キャッシュを含むホストに接続可能である。メモリシステムは、不揮発性メモリと、ライトバッファと、メモリコントローラとを具備する。前記メモリコントローラは、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を、前記ホストによってアクセスされるデータの粒度である第1のサイズよりも大きい管理サイズの単位で管理するように構成されている。前記メモリコントローラは、前記不揮発性メモリに書き込まれるべき前記第1のサイズを有するデータに対応する論理アドレスを指定するライト要求と、前記データと、を前記ホストから受信したことに応じ、前記受信したデータを前記ライトバッファに格納する。前記メモリコントローラは、前記不揮発性メモリに対する書き込み処理を実行する際、前記管理サイズを有する論理的に連続するデータが前記ライトバッファに格納されているか否かを判定する。前記メモリコントローラは、前記論理的に連続するデータの一部が前記ライトバッファに格納されていない場合、前記論理的に連続するデータの前記一部である不足データに対応する論理アドレスを特定する。前記メモリコントローラは、前記ホストの前記キャッシュにアクセスするための要求であって前記不足データに対応する前記論理アドレスを指定する要求を、前記ホストに送信する。前記メモリコントローラは、前記不足データを前記ホストから受信したことに応じ、前記受信した不足データを前記ライトバッファに格納する。前記メモリコントローラは、前記ライトバッファに格納された、前記受信した不足データを含む前記論理的に連続するデータを、前記不揮発性メモリに書き込む。
【図面の簡単な説明】
【0009】
【
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】第1実施形態に係るメモリシステムに含まれるメモリコントローラおよび不揮発性メモリの各々の構成例を示すブロック図。
【
図3】第1実施形態に係るメモリシステムに含まれるNAND型フラッシュチップの構成例を示すブロック図。
【
図4】ホストのキャッシュの構成例を示すブロック図。
【
図5】キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の初期状態の例を示す図。
【
図6】第1実施形態に係るメモリシステムへのライト後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図7】第1実施形態に係るメモリシステムのNAND型フラッシュメモリへのプログラム後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図8】キャッシュ、ライトバッファ、ルックアップテーブル、NAND型フラッシュメモリの各々の初期状態の例を示す図。
【
図9】第1実施形態に係るメモリシステムへの部分ライト後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図10】第1実施形態に係るメモリシステムのNAND型フラッシュメモリからの不足データのリード後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図11】第1実施形態に係るメモリシステムのNAND型フラッシュメモリへのプログラム後における、キャッシュ、ライトバッファ、ルックアップテーブル、NAND型フラッシュメモリの各々の状態の例を示す図。
【
図12】キャッシュから第1実施形態に係るメモリシステムへの残存データのライト後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図13】第1実施形態に係るメモリシステムのNAND型フラッシュメモリからの不足データのリード後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図14】第1実施形態に係るメモリシステムのNAND型フラッシュメモリへの2回目のプログラム後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図15】第1実施形態に係るメモリシステムへの部分ライト後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図16】第1実施形態に係るメモリシステムにおいて実行されるキャッシュへの問い合わせと、追加ライト後における、キャッシュ、ライトバッファ、ルックアップテーブル、およびNAND型フラッシュメモリの各々の状態の例を示す図。
【
図17】キャッシュへの問い合わせを使用しない場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図。
【
図18】不足データがキャッシュに保持されていた場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図。
【
図19】不足データがキャッシュに保持されていなかった場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図。
【
図20】第1実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャート。
【
図21】第2実施形態に係るメモリシステムにおけるライトバッファの状態の例を示す図。
【
図22】第2実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャート。
【
図23】第3実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャート。
【
図24】第3実施形態に係るメモリシステムにおけるライトバッファの使用率の例を示す図。
【
図25】第3実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の別の例を示すフローチャート。
【
図26】第4実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャート。
【
図27】第5実施形態に係るメモリシステムに含まれるメモリコントローラおよび不揮発性メモリの各々の構成例を示すブロック図。
【
図28】第5実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
【0011】
(第1実施形態)
図1は、第1実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、メモリシステム3とを含む。ホスト2と、メモリシステム3とは、メモリバス4を介して接続可能である。メモリバス4を介したホスト2とメモリシステム3との間の相互接続は、例えば、Compute Express Link
TM(CXL
TM)規格に準拠して実行され得る。CXLは、ホストのcentral processing unit(CPU)と、デバイスとの間を相互接続するためのインタフェース規格である。CXL規格に準拠したインタフェースでは、PCI Express
TM(PCIe
TM)規格に準拠したバスが、メモリバス4として使用される。なお、メモリシステム3は、CXL規格に準拠したインタフェースに限らず、他の規格に準拠したインタフェースを介してホスト2に接続されてもよい。
【0012】
ホスト2は、情報処理装置である。ホスト2は、例えば、サーバコンピュータ、またはパーソナルコンピュータである。ホスト2は、メモリバス4を介してメモリシステム3にアクセスする。具体的には、ホスト2は、データを書き込むためのライト要求であるストアコマンドを、メモリバス4を通じてメモリシステム3に送信する。また、ホスト2は、データを読み出すためのリード要求であるロードコマンドを、メモリバス4を通じてメモリシステム3に送信する。ホスト2とメモリシステム3とがCXL規格に準拠したインタフェースを介して接続されるケースでは、ストアコマンドおよびロードコマンドは、CXL規格で規定されたCXL.memリクエストを用いてそれぞれ実現される。
【0013】
ホスト2は、一つ以上のCPUを含む。
図1では、ホスト2が2つのCPU、つまりCPU21-1、CPU21-2を含む場合が例として示されている。また、ホスト2は、キャッシュ22と、インターコネクト、ブリッジ、ルートコンプレックスのようなハードウェアインタフェース23と、主記憶装置(DRAM)24と、を含む。キャッシュ22は、DRAM24に格納されたデータの一部およびメモリシステム3に格納されたデータの一部を記憶するように構成されたハードウェアである。より詳しくは、キャッシュ22は、メモリシステム3から読み出されたリードデータと、DRAM24から読み出されたリードデータと、メモリシステム3に書き込まれるべきライトデータと、DRAM24に書き込まれるべきライトデータと、をキャッシュする、つまり、一時保存するよう構成され得る。キャッシュ22は、キャッシュ22を制御するキャッシュコントローラと、データを記憶するメモリと、を含み得る。キャッシュ22は、CPU21-1とCPU21-2とによって共有される。以降の説明では、キャッシュ22は、ホストキャッシュ22とも称される。ハードウェアインタフェース23は、DRAM24が接続されるポートと、メモリバス4を介してメモリシステム3が接続されるポートとを含む。DRAM24が接続されるポートは、例えば、DIMM(dual inline memory module)インタフェース回路によって実現される。メモリシステム3が接続されるポートは、例えば、CXLインタフェース回路によって実現される。
【0014】
CPU21-1およびCPU21-2の各々は、DRAM24にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、ホスト2に接続された図示しないストレージデバイスから、DRAM24にロードされてもよい。ホストソフトウェアは、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラムなどを含む。CPU21-1およびCPU21-2の各々は、仮想記憶機能を有している。CPU21-1およびCPU21-2の各々のメモリ管理ユニットは、アプリケーションプログラムによって使用される仮想アドレスを、物理アドレス(ホスト物理アドレス)に変換する。CPU21-1およびCPU21-2の各々は、ホスト物理アドレスを使用して、DRAM24およびメモリシステム3にアクセスし得る。DRAM24へのアクセスは、DRAM24に割り当てられたメモリアドレス空間を使用して実行される。DRAM24に割り当てられたメモリアドレス空間は、ホスト2のメモリアドレス空間の一部分である。また、メモリシステム3へのアクセスは、メモリシステム3に割り当てられたメモリアドレス空間を使用して実行される。メモリシステム3に割り当てられたメモリアドレス空間は、ホスト2のメモリアドレス空間の他の一部である。
【0015】
メモリシステム3は、不揮発性メモリを備えたメモリデバイスである。メモリシステム3は、メモリバス4を介して、ホスト2に接続可能である。メモリシステム3は、ホスト2のDRAM24と同じく、キャッシュ22を介して、CPU21-1およびCPU21-2の各々から小さな単位(例えば64B(byte))で直接的にリード/ライトアクセスされる。これにより、メモリシステム3は、いわゆるメモリ拡張(Memory Expansion)デバイスとして動作する。つまり、メモリシステム3は、4KiB等の大きな単位でNVMe/SATA等のストレージプロトコルを介してアクセスされるソリッドステートドライブ(SSD)とは異なるデバイスである。メモリシステム3は、例えば、CXL規格で規定されたタイプ3メモリデバイスとして実現され得る。なお、メモリシステム3とホスト2との間を接続するインタフェースは必ずしもCXLインタフェースである必要はなく、メモリシステム3は、例えば、DRAM24と同じく、DIMMインタフェースポートに接続されるメモリデバイスとして実現されてもよい。いずれのケースにおいても、メモリシステム3に格納されているデータは、DRAM24に格納されているデータと同様に、キャッシュ22にキャッシュされる。以下では、ホスト2によってアクセスされるデータの粒度は、アクセス粒度とも称される。また、以下では、メモリシステム3がCXLインタフェースを介してホスト2に接続される場合を、例として説明する。
【0016】
メモリシステム3は、メモリコントローラ31と、不揮発性メモリ32とを含む。
【0017】
メモリコントローラ31は、System-on-a-Chip(SoC)のような半導体回路である。メモリコントローラ31は、不揮発性メモリ32に対するデータの書き込みおよび読み出しを制御する。また、メモリコントローラ31は、メモリバス4を介して、ホスト2との通信を実行する。メモリコントローラ31は、64Bのような細かいアクセス粒度に対応可能に構成されている。
【0018】
不揮発性メモリ32は、不揮発性半導体メモリである。不揮発性メモリ32は、例えば、NAND型フラッシュメモリである。なお、不揮発性メモリ32は、PCM(Phase Change Memory)等によって実現されていてもよい。以下では、不揮発性メモリ32がNAND型フラッシュメモリによって実現されている場合を主として説明する。このため、以下では、不揮発性メモリ32をNANDフラッシュ32と称する。
【0019】
NANDフラッシュ32は、例えば、3次元構造のフラッシュメモリである。NANDフラッシュ32のメモリセルアレイは、複数のプレーンに分割されている。NANDフラッシュ32は、プレーン毎に複数のブロックを含む。複数のブロックの各々は、データ消去動作の単位である。複数のブロックの各々は、複数のページを含む。複数のページの各々は、同一ワード線に接続された複数のメモリセルを含む。複数のページの各々は、データプログラム動作およびデータ読み出し動作の単位である。データプログラム動作は、NANDフラッシュ32にデータを書き込むための動作である。NANDフラッシュ32にデータを書き込むことは、NANDフラッシュ32にデータをプログラムするとも称される。データ読み出し動作は、NANDフラッシュ32からデータを読み出す動作である。
【0020】
次に、メモリコントローラ31によって実行される機能について説明する。メモリコントローラ31は、NANDフラッシュ32に記憶されたデータの管理およびNANDフラッシュ32に含まれるブロックの管理を実行する。
【0021】
データの管理は、論理アドレスそれぞれとNANDフラッシュ32の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理を含む。メモリコントローラ31は、論理物理アドレス変換テーブル(L2Pテーブル)を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を所定の管理サイズの単位で管理する。L2Pテーブルは、ルックアップテーブル(LUT)とも称される。論理アドレスは、メモリシステム3にアクセスするためにホスト2(CPU21-1、21-2)によって使用されるアドレスである。ホスト2からメモリバス4に出力されるホスト物理アドレスが、論理アドレスとして使用される。物理アドレスは、NANDフラッシュ32に含まれる個々の記憶領域(以下、物理記憶領域と称する)を示すアドレスである。物理アドレスは、例えば、ブロックアドレスと、ページアドレスと、ページ内オフセットアドレスと、の組み合わせによって表される。あるいは、物理アドレスは、プレーン識別子と、ブロックアドレスと、ページアドレスと、ページ内オフセットアドレスと、の組み合わせによって、表される。なお、NANDフラッシュ32が複数のNANDフラッシュチップを含む構成である場合には、物理アドレスは、例えば、チャンネル番号と、バンク番号と、プレーン識別子と、ブロックアドレスと、ページアドレスと、ページ内オフセットアドレスと、の組み合わせによって表されてもよい。
【0022】
NANDフラッシュ32においては、ブロック内のページへのデータの書き込みは、このブロックの1プログラム/イレーズサイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の物理記憶領域に新たなデータを直接上書きすることはできない。このため、既に物理記憶領域に書き込まれているデータを更新する場合には、メモリコントローラ31は、そのブロック(または別のブロック)内の未書き込みページ(空きページ)に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、メモリコントローラ31は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶領域ではなく、別の物理記憶領域に書き込む。そして、メモリコントローラ31は、論理物理アドレス変換テーブルを更新して、この論理アドレスに、この別の物理記憶領域を示す物理アドレスを関連付ける。
【0023】
NANDフラッシュ32に含まれるブロックの管理は、不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)とを含む。
【0024】
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。メモリコントローラ31は、各ブロックの状態(フリーブロック、アクティブブロック、書き込み済みページ、空きページ、有効データの量、無効データの量、等)を管理する。GC動作においては、メモリコントローラ31は、有効データと無効データとが混在する幾つかのブロックをGCソースブロックとして選択する。GCソースブロックは、コピー元ブロックまたは移動元ブロックとも称される。メモリコントローラ31は、GCソースブロックに含まれる有効データをGCデスティネーションブロック(例えば、フリーブロック)にコピーする。GCデスティネーションブロックは、コピー先ブロックまたは移動先ブロックとも称される。ここで、有効データとは、論理アドレスに関連付けられているデータを意味する。論理アドレスに最新データとして関連付けられているデータは有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。GCソースブロックからGCデスティネーションブロックに有効データをコピーすると、メモリコントローラ31は、論理物理アドレス変換テーブルを更新して、コピーされた有効データの論理アドレスそれぞれにコピー先の物理アドレスをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックは、フリーブロックとして解放される。これによって、このブロックは、このブロックに対するデータ消去動作が実行された後にデータの書き込みに再利用することが可能となる。
【0025】
次に、メモリシステム3におけるメモリコントローラ31およびNANDフラッシュ32の各々の構成を説明する。
図2は、メモリコントローラ31およびNANDフラッシュ32の各々の構成例を示すブロック図である。
【0026】
メモリコントローラ31は、CXLインタフェース311、リードコントローラ312、ルックアップテーブル(LUT)313、ライトコントローラ314、GCコントローラ315、およびNANDフラッシュインタフェース316を含む。
【0027】
CXLインタフェース311は、ホスト2との通信を実行するホストインタフェース回路である。CXLインタフェース311は、CXL規格に準拠したリクエスト(リード要求、ライト要求、等)を、ホスト2から受信する。リード要求を使用したメモリシステム3へのリードアクセスは、例えば、64B単位で実行される。つまり、ホスト2によってリードアクセスされるデータの粒度は、64Bである。同様に、ライト要求を使用したメモリシステム3へのライトアクセスも、例えば、64B単位で実行される。つまり、ホスト2によってライトアクセスされるデータの粒度も、64Bである。
【0028】
リードコントローラ312は、NANDフラッシュ32からデータを読み出すための読み出し処理を実行する回路である。リードコントローラ312は、CXLインタフェース311を介してホスト2から受信されたリード要求それぞれに基づいて、読み出し処理を実行する。各リード要求は、読み出し対象データに対応する論理アドレスを指定するパラメータを含む。どのリード要求によって指定される読み出し対象データも同じサイズ(例えば64B)を有している。
【0029】
LUT313は、論理物理アドレス変換テーブルとして使用される。LUT313は、マッピング情報を保持する。マッピング情報は、メモリシステム3にアクセスするためにホスト2によって使用される論理アドレス(LA)それぞれとNANDフラッシュ32の物理アドレス(PA)それぞれとの間の対応関係を示す情報である。メモリコントローラ31は、LUT313を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を、管理サイズの単位で管理する。管理サイズは、LUT313を使用して実行される論理物理アドレス変換の単位である。管理サイズは、アクセス粒度(ここでは64B)よりも大きいサイズに設定されている。アクセス粒度よりも大きな管理サイズを使用する理由の一つは、LUT313のテーブルサイズを削減することである。
【0030】
例えば、メモリシステム3が1TBの容量を持つ場合を想定する。管理サイズが64Bである場合には、LUT313に必要なエントリの数は、1TB/64B=16Gから、16G個である。物理アドレスが4バイトによって表される場合、LUT313の各エントリのサイズは、4Bである。したがって、LUT313のテーブルサイズは、64GB(=16G×4B)である。
【0031】
一方、256Bの管理サイズを使用した場合には、1TB/256B=4Gから、LUT313に必要なエントリの数は、4G個である。物理アドレスが4バイトによって表される場合、LUT313の各エントリのサイズは、4Bである。したがって、LUT313のテーブルサイズは、16GB(=4GB×4B)である。このように、大きな管理サイズ(例えば256B)を使用することにより、LUT313のテーブルサイズを大幅に削減できる。以下では、管理サイズが256Bである場合を想定する。この場合、LUT313は、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を、256Bに対応する論理アドレス範囲毎に管理する。したがって、LUT313は、論理アドレス0、論理アドレス256、論理アドレス512、…のように256Bの刻みで連続する複数の論理アドレスにそれぞれ対応する複数のエントリを含む。以下では、論理アドレスはLAとも称され、物理アドレスはPAとも称される。
【0032】
図2では、LUT313に含まれる複数のエントリのうち、LA0×0001_0000に対応するエントリと、LA0×0001_0100に対応するエントリと、LA0×0001_0200に対応するエントリと、LA0×0001_0300に対応するエントリと、が例として示されている。ここで「0×」は、対応するアドレスが16進表記であることを表している。
【0033】
図2において、LA0×0001_0000に対応するエントリには、PA0×1234_5600が格納されている。このことは、連続した論理アドレスに対応する256Bのデータ、つまり、論理的に連続する256Bのデータが、PA0×1234_5600によって示される物理記憶領域に記憶されていることを表している。すなわち、256個のLAである0×0001_0000~0×0001_00FFに対応する256Bのデータが、PA0×1234_5600によって示される物理記憶領域に記憶されていることを表している。PA0×1234_5600によって示される物理記憶領域は、256Bのサイズを有する物理的に連続する記憶領域である。
【0034】
また、LA0×0001_0100に対応するエントリには、PA0×3333_0000が格納されている。このことは、論理的に連続する256Bのデータ、つまり256個のLAである0×0001_0100~0×0001_01FFに対応する256Bのデータが、PA0×3333_0000によって示される物理記憶領域に記憶されていることを表している。PA0×3333_0000によって示される物理記憶領域は、256Bのサイズを有する物理的に連続する記憶領域である。
【0035】
また、LA0×0001_0200に対応するエントリには、PA0×0022_2200が格納されている。このことは、論理的に連続する256Bのデータ、つまり256個のLAである0×0001_0200~0×0001_02FFに対応する256Bのデータが、PA0×0022_2200によって示される物理記憶領域に記憶されていることを表している。PA0×0022_2200によって示される物理記憶領域は、256Bのサイズを有する物理的に連続する記憶領域である。
【0036】
また、LA0×00010300に対応するエントリには、PA0×5555AA00が格納されている。このことは、論理的に連続する256Bのデータ、つまり256個のLAである0×0001_0300~0×0001_03FFに対応する256Bのデータが、PA0×5555AA00によって示される物理記憶領域に記憶されていることを表している。PA0×5555_AA00によって示される物理記憶領域は、256Bのサイズを有する物理的に連続する記憶領域である。
【0037】
なお、LUT313は、LAそれぞれとPAそれぞれとの間の対応関係を管理するテーブルに加え、このテーブルを参照および更新する制御回路を含んでいてもよい。
【0038】
ライトコントローラ314は、NANDフラッシュ32にデータを書き込むための書き込み処理を実行する回路である。ライトコントローラ314は、CXLインタフェース311を介して、ホスト2から受信されたライト要求それぞれに基づいて、書き込み処理を実行する。各ライト要求は、64Bのライトデータの書き込み先のLAを指定するパラメータと、64Bのライトデータと、を含む。
【0039】
GCコントローラ315は、ガベージコレクションを実行する回路である。GCコントローラ315は、例えば、フリーブロックの個数が閾値以下になったことに応じて、ガベージコレクションを開始する。GCコントローラ315は、空きページプール3151を含む。空きページプール3151は、NANDフラッシュ32に含まれるページのうち、空きページ(フリーページ)を管理するリストである。空きページは、新たなデータの書き込みに利用可能なページである。有効データを含まないブロックであるフリーブロックに含まれるページの各々は、空きページとして管理される。また、書き込み先ブロックとして使用中のブロックに含まれるページのうち、まだデータが書き込まれていないページも空きページとして管理される。
【0040】
NANDフラッシュインタフェース316は、NANDフラッシュ32を制御するメモリインタフェース回路である。NANDフラッシュインタフェース316は、リードコントローラ312の制御の下、NANDフラッシュ32からデータを読み出すためのリード要求(NANDリードコマンド)をNANDフラッシュ32に送信する。また、NANDフラッシュインタフェース316は、ライトコントローラ314の制御の下、NANDフラッシュ32にデータを書き込むためのプログラム要求(NANDプログラムコマンド)と、ライトデータと、をNANDフラッシュ32に送信する。NANDフラッシュ32に対するデータの読み出しおよび書き込みの単位は、原理的には、論理物理アドレス変換の管理サイズ以上であればよい。つまり、NANDフラッシュ32のページサイズは、論理物理アドレス変換の管理サイズと同じか、あるいはこの管理サイズの2以上の整数倍であればよい。
【0041】
ライトコントローラ314は、ライトバッファ3141と、ホストキャッシュ問い合わせ部3142とを含む。
【0042】
ライトバッファ3141は、NANDフラッシュ32に書き込まれるべきデータが一時的に格納される記憶領域である。ライトバッファ3141は、複数のエントリを有する。ライトバッファ3141の各エントリは、論理的に連続する256Bのデータを格納するために使用される。
【0043】
ホストキャッシュ問い合わせ部3142は、CXLインタフェース311を介して、ホスト2のホストキャッシュ22に対してデータ問い合わせを実行する。管理サイズ(256B)を有する論理的に連続するデータの一部がライトバッファ3141に格納されていない場合、ホストキャッシュ問い合わせ部3142は、ライトバッファ3141に格納されていない一部のデータである不足データに対応するLAを指定する要求(ホストキャッシュ問い合わせ要求、または単に問い合わせ要求とも云う)を、CXLインタフェース311を介してホスト2に送信する。このホストキャッシュ問い合わせ要求は、ホストキャッシュ22へアクセスするための要求である。
【0044】
例えば、NANDフラッシュ32に対するデータ書き込み処理を実行する際、ライトコントローラ314は、論理的に連続するデータの全てがライトバッファ3141に格納されているか否かを判定する。この論理的に連続するデータは、管理サイズ内の連続する複数のLAにそれぞれ対応する複数のデータの集合である。この論理的に連続するデータの総サイズは、管理サイズに等しい。したがって、管理サイズに等しいサイズを有する論理的に連続するデータは、管理サイズを有する論理的に連続するデータとも称する。この論理的に連続するデータの一部がライトバッファ3141に格納されていない場合、ライトコントローラ314は、この一部のデータである不足データに対応するLAを特定する。そして、ライトコントローラ314は、ホストキャッシュ問い合わせ部3142を使用して、問い合わせ要求をホスト2に送信する。この問い合わせ要求によって指定されたLAに対応する64Bのデータがホストキャッシュ22内のあるキャッシュラインに格納されている場合、ホスト2は、このキャッシュラインに格納されている64Bデータをメモリシステム3に転送する。
【0045】
このように、ホストキャッシュ問い合わせ部3142を使用して不足データの問い合わせ要求をホストに送信することによって、ライトコントローラ314は、不足データを、ホストキャッシュ22から取得することができる。したがって、ライトコントローラ314は、NANDフラッシュ32から不足データを読み出すための処理を行うことなく、管理サイズを有する論理的に連続するデータをNANDフラッシュ32に書き込むことができる。
【0046】
ここで、ホストキャッシュ問い合わせ処理の例について説明する。例えば、ライトコントローラ314が、ライトバッファ3141のあるエントリに格納されているデータをNANDフラッシュ32に書き込むことを決定した場合を想定する。この場合、このエントリに格納されているデータに対応するLA範囲が書き込み先のLA範囲として決定される。
【0047】
ライトコントローラ314は、書き込み先のLA範囲に属し且つ64Bの刻みで連続する4つのLAにそれぞれ対応する4つの64Bデータの全てがこのエントリに格納されているか否かを判定する。例えば、4つの64Bデータのうちの一つの64Bデータがこのエントリに格納されていない場合、ライトコントローラ314は、このエントリに格納されていないデータである64Bの不足データに対応するLAを特定する。そして、ライトコントローラ314は、ホストキャッシュ問い合わせ部3142を使用して、このエントリに格納されていない64Bの不足データに対応するLAを指定する問い合わせ要求をホスト2に送信する。この問い合わせ要求によって指定されたLAに対応する64Bのデータがホストキャッシュ22内のあるキャッシュラインに格納されている場合、ホスト2は、このキャッシュラインに格納されている64Bデータをメモリシステム3に転送する。
【0048】
不足データをホスト2から受信した場合、ライトコントローラ314は、受信した不足データをライトバッファ3141のこのエントリに格納する。そして、このエントリに、256Bのサイズを有する論理的に連続するデータの全てが揃うと、ライトコントローラ314は、この論理的に連続するデータを、書き込み先のLA範囲の先頭LAに割り当てられたPAによって示される物理記憶領域に、4つの64Bデータを含む論理的に連続する256Bのデータを書き込む。
【0049】
なお、4つの64Bデータのうちの2つの64Bデータがライトバッファ3141に格納されていない場合には、ホストキャッシュ問い合わせ部3142は、まず、ライトバッファ3141に格納されていない最初の64Bデータに対応する問い合わせ要求をホスト2に送信する。そして、最初の64Bデータがホスト2から転送されると、ホストキャッシュ問い合わせ部3142は、ライトバッファ3141格納されていない次の64Bデータに対応する問い合わせ要求をホスト2に送信する。このようにして、4つの64Bデータの全てがライトバッファ3141に揃うと、ライトコントローラ314は、書き込み先のLA範囲の先頭LAに割り当てられたPAによって示される物理記憶領域に、4つの64Bデータを含む論理的に連続する256Bのデータを書き込む。
【0050】
不足データがホストキャッシュ22に存在しない場合は、ライトコントローラ314は、不足データをNANDフラッシュ32から取得する。
【0051】
ホストキャッシュ問い合わせは、例えば、CXL規格で規定されるCXL.cacheプロトコルを用いて実行される。CXL.cacheプロトコルは、キャッシュ操作を実行するためのプロトコルである。CXL.cacheプロトコルは、アクセラレータのようなデバイス用のプロトコルである。メモリ拡張デバイスは、CXL.cacheプロトコルではなく、メモリアクセスのためのプロトコルであるCXL.memプロトコルを使用する。しかし、メモリシステム3は、ホストキャッシュ問い合わせを実行するために、CXL.memプロトコルとCXL.cacheプロトコルの双方を使用する。なお、ホストキャッシュ問い合わせは、CXL.cacheプロトコルに限らず、PCIeのような他のインタフース用のプロトコルを使用して実現してもよい。
【0052】
ホストキャッシュ問い合わせをCXL.cacheプロトコルを用いて実行するケースにおいては、問い合わせ要求は、例えば、CXL.cache CLFlush、またはCXL.cache RdCurrである。
【0053】
CXL.cache CLFlushは、CXL.cache CLFlushによって指定されたアドレス(LA)に対応する64Bのダーティデータをホストキャッシュ22からメモリシステム3に書き戻すことを要求するフラッシュ(flush)要求である。ダーティデータは、メモリシステム3にまだ反映されていない更新済みデータである。CXL.cache CLFlushによって指定されたLAに対応する64Bのダーティデータがホストキャッシュ22のあるキャッシュラインに格納されている場合、この64Bのダーティデータがキャッシュラインからメモリシステム3に転送される(書き戻し)。そして、この64Bのダーティデータが格納されていたホストキャッシュ22のキャッシュラインに対応するバリッドフラグは、無効を示す値に変更される。これにより、このキャッシュラインに格納されている64Bのデータは、無効化される。
【0054】
CXL.cache RdCurrは、CXL.cache RdCurrによって指定されたアドレス(LA)に対応する64Bのデータをホストキャッシュ22からリードするためのキャッシュリード要求である。CXL.cache RdCurrによって指定されたLAによって指定された64Bのデータがホストキャッシュ22のあるキャッシュラインに格納されている場合、たとえこの64Bのデータがクリーンデータであっても、この64Bのデータがキャッシュラインからメモリシステム3に転送される。クリーンデータは、メモリシステム3に既に反映されているデータである。この64Bのデータが格納されているホストキャッシュ22のキャッシュラインに対応するバリッドフラグは、有効を示す値に維持される。
【0055】
NANDフラッシュ32は、複数のNANDフラッシュチップ321-0、321-1、321-2、321-3、…を含む。NANDフラッシュ32は、例えば、12個のNANDフラッシュチップを含む。12個のNANDフラッシュチップそれぞれは、互いに独立して動作可能である。例えば、3個のNANDフラッシュチップ321-0は、チャンネルch0を介してNANDフラッシュインタフェース316に接続されている。3個のNANDフラッシュチップ321-1は、チャンネルch1を介してNANDフラッシュインタフェース316に接続されている。3個のNANDフラッシュチップ321-2は、チャンネルch2を介してNANDフラッシュインタフェース316に接続されている。また、3個のNANDフラッシュチップ321-3は、チャンネルch3を介してNANDフラッシュインタフェース316に接続されている。この場合、NANDフラッシュインタフェース316は、4本のチャンネルch0~ch3を介して、12個のNANDフラッシュチップを並列にアクセスすることができる。ここで、各チャンネルに接続されている3個のNANDフラッシュチップがそれぞれ異なるバンクに含まれている場合、NANDフラッシュインタフェース316は、バンクインタリーブによって、チャンネルごとに3個のNANDフラッシュチップを並列にアクセスしてもよい。これにより、NANDフラッシュインタフェース316は、最大で12個のNANDフラッシュチップにデータを並列に書き込むことができる(並列書き込み数=12)。
【0056】
次に、NANDフラッシュ32からデータを読み出すための読み出し処理を説明する。まず、CXLインタフェース311は、ホスト2からリード要求を受信する。受信したリード要求は、リード対象データに対応するLAを指定する。リード対象データのサイズは、64Bである。リード要求によって指定されるLAは、リード対象データに対応する連続する64個のLAのうちの先頭のLAである。
【0057】
リードコントローラ312は、受信されたリード要求によって指定されるLAに対応するPAをLUT313から取得する。この場合、リードコントローラ312は、受信されたリード要求によって指定されるLAに対応するPAをLUT313(LUT313内の制御回路)に問い合わせることによって、受信されたリード要求によって指定されるLAに対応するPAをLUT313から取得してもよい。
【0058】
リードコントローラ312は、取得したPAに基づいて、NANDフラッシュインタフェース316を介してNANDフラッシュ32からデータを読み出す。この場合、リードコントローラ312は、取得したPAを指定するNANDリードコマンドを、NANDフラッシュインタフェース316に発行する。NANDフラッシュインタフェース316は、発行されたNANDリードコマンドをNANDフラッシュ32に送信する。これにより、NANDフラッシュ32からデータが読み出される。NANDフラッシュ32からのデータの読み出しは、256Bまたはそれ以上のサイズの単位で実行される。
【0059】
リードコントローラ312は、NANDフラッシュ32から読み出されたデータから64Bのリード対象データを抽出し、抽出した64Bのリード対象データを、CXLインタフェース311を介して、ホスト2に送信する。
【0060】
次に、NANDフラッシュ32にデータを書き込むための書き込み処理を説明する。まず、CXLインタフェース311は、ホスト2からライト要求とライトデータとを受信する。受信したライト要求は、ライトデータに対応するLAを指定する。ライトデータのサイズは、64Bである。ライト要求によって指定されるLAは、ライトデータに対応する連続する64個のLAのうちの先頭のLAである。
【0061】
ライトコントローラ314は、受信されたライトデータをライトバッファ3141に格納する。ここで、ライトバッファ3141の一つのエントリには、論理的に連続する256Bのデータが格納され得る。つまり、ライトコントローラ314は、256BのあるLA範囲に属する4つの64Bデータがライトバッファ3141の同じエントリに格納されるように、受信されたライトデータを、ライトバッファ3141の複数のエントリのうちの一つのエントリに格納する。例えば、受信された64Bデータと同じ256BのLA範囲に属している別の64Bデータがライトバッファ3141のあるエントリに既に格納されている場合には、ライトコントローラ314は、受信した64Bデータを、このエントリに格納する。
【0062】
そして、例えば、ライトバッファ3141の空きエントリの個数が閾値以下になったことに応じ、ライトコントローラ314は、ライトバッファ3141の複数のエントリから、データが格納されているエントリを選択し、選択したエントリに格納されているデータをNANDフラッシュ32に書き込むことを決定する。
【0063】
ここでは、説明を簡単にするために、選択したエントリに256Bのデータの全てが格納されている場合を想定する。ライトコントローラ314は、データの書き込みに利用可能なNANDフラッシュ32内の物理記憶領域を決定する。次いで、ライトコントローラ314は、決定した物理記憶領域を示すPAが、選択したエントリに格納されている256Bのデータに対応するLA範囲のうちの先頭のLAに割り当てられるように、LUT313を更新する。この場合、ライトコントローラ314は、まず、データの書き込みに利用可能な物理記憶領域を確保するようにLUT313(LUT313内の制御回路)に対して確保要求を送信することによって、データの書き込みに利用可能な物理記憶領域を示すPAをLUT313から取得してもよい。また、LUT313(LUT313内の制御回路)は、物理記憶領域の確保要求に応じ、空きページプール3151によって管理されている空きページのリストに基づいて、物理記憶領域を確保してもよい。そして、ライトコントローラ314は、更新要求をLUT313に送信することによって、確保された物理記憶領域を示すPAが、選択したエントリに格納されている256Bのデータに対応するLA範囲のうちの先頭のLAに割り当てられるように、LUT313を更新してもよい。
【0064】
この後、ライトコントローラ314は、NANDフラッシュ32内の確保された物理記憶領域に、選択したエントリに格納されている256Bのデータを書き込む。この場合、ライトコントローラ314は、物理記憶領域を示すPAを指定するNANDプログラムコマンドをNANDフラッシュインタフェース316に発行する。NANDフラッシュインタフェース316は、発行されたNANDプログラムコマンドと、256Bのデータと、をNANDフラッシュ32に送信する。これにより、256Bのデータが、PAによって示される物理記憶領域に書き込まれる。
【0065】
なお、NANDフラッシュ32に対するデータの書き込みは、256Bまたはそれ以上のサイズの単位で実行される。たとえば、NANDフラッシュ32のページサイズが256Bである場合には、NANDフラッシュ32に対するデータの書き込みは、256Bのデータの単位で実行される。また、ページサイズが4KiBである場合には、NANDフラッシュ32に対するデータの書き込みは、4KiBのデータの単位で実行される。この場合、4KiBのデータの書き込みは、ライトバッファ3141の16個のエントリに、256B×16個のデータがそれぞれ揃った後に実行されてもよい。
【0066】
次に、NANDフラッシュチップの構成例について説明する。
図3は、第1実施形態に係るメモリシステムに含まれるNANDフラッシュチップの構成例を示すブロック図である。
【0067】
NANDフラッシュチップ321-0は、複数のプレーンを含むマルチプレーン構成を有している。NANDフラッシュチップ321-0のメモリセルアレイは、例えば16プレーン(プレーン#0~#15)に分割されていてもよい。プレーン#0~#15の各々は、複数のブロックBLK#0~BLK#(x-1)を含む。ブロックBLK#0~BLK#(x-1)の各々は、複数のページ(P#0~P#(y-1))を含む。ページは、物理ページとも称される。ページP#0~P#(y-1)の各々のサイズ(ページサイズ)は、例えば、256Bまたはそれ以上のサイズである。フラッシュダイ#0は、8個のプレーンにデータを同時に書き込むマルチプレーンモードで動作可能である。ここでは、NANDフラッシュチップ321-0の構成について説明したが、他のNANDフラッシュチップの各々も、NANDフラッシュチップ321-0と同じ構成を有している。
【0068】
次に、ホストキャッシュ22の構成例について説明する。
図4は、ホストのキャッシュの構成例を示すブロック図である。ホストキャッシュ22は、ダイレクトマップキャッシュ、セットアソシアティブキャッシュ、フルアソシアティブキャッシュのいずによって実現されていてもよい。
図4では、ホストキャッシュ22がダイレクトマップキャッシュとして実現されており、ホストキャッシュ22のキャッシュラインサイズが64Bであり、ホストキャッシュ22の容量が64KBである場合が示されている。
【0069】
ホストキャッシュ22は、1024本のキャッシュラインを含む。各キャッシュラインに格納されるデータ(Data)は、64Bのデータである。
図4では、図示の簡単のため、各キャッシュラインに格納されるDataとして、4Bデータが図示されている。また、キャッシュライン毎に、バリッドビット(V)、ダーティビット(D)、タグ(Tag)を含む。
【0070】
メモリシステム3にアクセスするために使用されるホスト2の論理アドレス空間が32ビットの論理アドレスで表される場合、32ビットの論理アドレスのうちの下位の6ビットが64Bデータのオフセットとして使用される。また、32ビットの論理アドレスのうちの中位の10ビットがインデックスとして使用される。また、32ビットの論理アドレスのうちの上位の16ビットがタグとして使用される。
【0071】
ホストキャッシュ22の1024本のキャッシュラインには、1対1の対応関係で1024個のインデックス0×000~0×3FFがそれぞれ対応付けられている。ある64Bデータが格納されるべきキャッシュラインは、この64Bデータに対応する論理アドレスの中位の10ビットの値によって一意に決定される。
【0072】
バリッドビットは、対応するキャッシュラインが有効であるか否かを示すビットである。バリッドビットが1である場合、バリッドビットは、このキャッシュラインが有効なデータを格納していることを示す。また、バリッドビットが0である場合、バリッドビットは、このキャッシュラインが有効なデータを格納していないことを示す。
【0073】
ダーティビットは、対応するキャッシュラインに格納されているデータがダーティデータであるか否かを示すビットである。ダーティデータは、メモリシステム3にまだ反映されていない更新済みデータである。そのため、ダーティデータがキャッシュラインから追い出される際には、このダーティデータをメモリシステム3に書き戻すことが必要とされる。ダーティデータではないデータは、クリーンデータと称される。ダーティビットが1である場合、ダーティビットは、このキャッシュラインに格納されているデータがダーティデータであることを示す。ダーティビットが0である場合、ダーティビットは、このキャッシュラインに格納されているデータがクリーンデータであることを示す。
【0074】
タグは、64Bの刻みで連続する論理アドレスのうちのどの論理アドレスに対応する64Bデータが対応するキャッシュラインに格納されているかを示す。タグとインデックスとの組み合わせによって、キャッシュラインに格納されている64Bデータに対応する論理アドレスを一意に識別することができる。
【0075】
図4において、4つのインデックス0×200~0×203が割り当てられた4つのキャッシュラインにそれぞれ対応する4つのタグは、同じ値を有している(0×1000)。したがって、これら4つのキャッシュラインには、論理的に連続する4つの64Bデータ(つまり論理的に連続する256Bデータ)が格納されている。この論理的に連続する256Bデータに対応する先頭のLAは、タグ(0×1000)によって表される上位16bitと、インデックス(0×200)によって表される中位10bitと、6bitのオフセットと、を含む32bitの2進数によって表される。タグ0×1000を10進数で表すと、1×16
3=1×2
12である。そのため、タグに対応する上位16bitを表す2進数のうちの13桁目のみが1であることを表す。そして、インデックス0×200を10進数で表すと、2×16
2=1×2
9である。そのため、インデックスに対応する中位10bitを表す2進数のうちの10桁目のみが1であることを表す。そのため、32桁の2進数によって表されるLAは、29桁目と、16桁目のみが1である2進数となる。この2進数を10進数で表すと、1×2
28+1×2
15=1×16
7+8×16
3となる。この10進数を16進数に変換すると、1×16
7+8×16
3=0×1000_8000となる。よって、この論理的に連続する256Bデータに対応する先頭のLAは、0×1000_8000である。つまり、LA0×1000_8000に対応するデータから論理的に連続する256Bデータは、0×10008000~0×100080FFのLA範囲に対応する。
【0076】
4つのインデックス0×200~0×203が割り当てられた4つのキャッシュラインの各々において、バリッドビットは1に設定され、ダーティビットも1に設定されている。このため、これら4つのキャッシュラインに格納された論理的に連続する256Bデータは、有効且つダーティなデータである。この状態で、例えば、インデックス0×200が割り当てられたキャッシュラインの競合が起きた際、このキャッシュラインに既に格納されている64Bデータを追い出すことが必要となる。追い出し対象の64Bデータは、LA0×1000_8000~0×1000_803Fに対応するデータである。この追い出し対象の64Bデータがダーティである場合、ホスト2は、LA0×1000_8000を指定するライト要求をメモリシステム3に発行することによって、この追い出し対象の64Bデータをメモリシステム3に書き戻す。なお、アプリケーション等からキャッシュフラッシュ要求が発行された場合も、キャッシュフラッシュ要求によって指定された64Bデータをメモリシステム3に書き戻す処理が実行される。
【0077】
次に、メモリシステム3における書き込み処理について説明する。まず、
図5、
図6、および
図7を参照して、論理的に連続する256Bのデータがライトバッファに揃っている場合の書き込み処理について説明する。
図5は、ホストキャッシュ、ライトバッファ、LUT、およびNANDフラッシュの各々の初期状態の例を示す図である。
【0078】
ホストキャッシュ22は、
図4で説明した構成と同様であり、複数のキャッシュラインのうちの4つのキャッシュラインに対応する構成だけが図示されている。
【0079】
ライトバッファ3141は、複数のエントリを有する。ライトバッファ3141の各エントリは、データと、セクタバリッドとを格納する。各エントリに格納されるデータは、例えば、論理的に連続する256Bのデータである。各エントリは、セクタ0(Sector0)、セクタ1(Sector1)、セクタ2(Sector2)、およびセクタ3(Sector3)を有する。例えば、セクタ0には、エントリに格納されるべき論理的に連続する256Bのデータのうちの先頭の64Bデータが格納される。セクタ1には、セクタ0に格納されるべき64Bデータに論理的に後続する64Bデータが格納される。セクタ2には、セクタ1に格納されるべき64Bデータに論理的に後続する64Bデータが格納される。セクタ3には、セクタ2に格納されるべき64Bデータに論理的に後続し、且つ256Bのデータのうちの末尾の64Bデータが格納される。
【0080】
セクタバリッドは、同じエントリに含まれる4つのセクタにそれぞれ対応する4つのビットを含むビットマップデータである。セクタバリッドの各ビットは、対応するセクタに格納されているデータが有効データであるか否かを示す。例えば、有効データを格納しているセクタに対応するビットは、「1」を示す。また、有効データを格納していないセクタに対応するビットは、「0」を示す。そのため、例えば、セクタ0およびセクタ1が有効データを格納しており、セクタ2およびセクタ3が有効データを格納していない場合、セクタバリッドは、「0b0011」となる。
【0081】
LUT313は、管理サイズ(ここでは、256B)毎に、LAそれぞれとPAそれぞれとの間の対応関係を管理する。
【0082】
NANDフラッシュ32は、PAによって示される物理記憶領域に、データを記憶する。一つのPAに対応する物理記憶領域は、256Bのデータを記憶することができる記憶領域である。
【0083】
図5は、メモリシステム3が実行する書き込み処理における初期状態の、ホストキャッシュ22、ライトバッファ3141、LUT313、およびNANDフラッシュ32を示す。
【0084】
初期状態では、LA0×1000_8000~0×1000_80FFに対応する論理的に連続する256Bのデータが、有効且つダーティなデータとしてホストキャッシュ22に格納されている。この256Bのデータは、NANDフラッシュ32のPA0×12340000から読み出された後に更新されたダーティデータである。
【0085】
この256Bデータは、4つの64Bデータ、つまり、LA0×1000_8000~0×1000_803Fに対応する64Bデータと、LA0×1000_8040~0×1000_807Fに対応する64Bデータと、LA0×1000_8080~0×1000_80BFに対応する64Bデータと、LA0×1000_80C0~0×1000_80FFに対応する64Bデータと、を含む。
【0086】
インデックス0×200に対応するキャッシュラインに格納されている64Bデータ(ここでは「0×111111111」として図示)は、4つの64Bデータのうちの1番目の64Bデータである。1番目の64Bデータは、LA0×1000_8000~0×1000_803Fに対応するデータである。
【0087】
インデックス0×201に対応するキャッシュラインに格納されている64Bデータ(ここでは「0×22222222」として図示)は、4つの64Bデータのうちの2番目の64Bデータである。2番目の64Bデータは、LA0×1000_8040~0×1000_807Fに対応するデータである。
【0088】
インデックス0×202に対応するキャッシュラインに格納されている64Bデータ(ここでは「0×33333333」として図示)は、4つの64Bデータのうちの3番目の64Bデータである。3番目の64Bデータは、LA0×1000_8080~0×1000_80BFに対応するデータである。
【0089】
インデックス0×203に対応するキャッシュラインに格納されている64Bデータ(ここでは「0×44444444」として図示)は、4つの64Bデータのうちの4番目の64Bデータである。4番目の64Bデータは、LA0×1000_80C0~0×1000_80FFに対応するデータである。
【0090】
初期状態のライトバッファ3141には、いずれのデータも記憶されていない。
【0091】
初期状態のLUT313において、LA0×1000_8000に対応するエントリには、PA0×12340000が格納されている。
【0092】
初期状態のNANDフラッシュ32において、PA0×12340000によって示される物理記憶領域には、LA0×1000_8000に対応する古い256Bのデータ(ここでは「0×88888888_77777777_66666666_55555555」として図示)が記憶されている。
【0093】
次に、LA0×1000_8000~0×1000_80FFに対応する256Bのデータがホストキャッシュ22の4つのキャッシュラインから追い出されて、メモリシステム3にライトされた場合を想定する。
図6は、第1実施形態に係るメモリシステムへのライト後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0094】
LA0×1000_8000~0×1000_80FFに対応する256Bのデータがホストキャッシュ22から追い出されて、メモリシステム3に書き込まれると、インデックス0×200~0×203に対応する4つのキャッシュラインの各々に対応するバリッドビットは、無効を示す「0」に変更される。バリッドビットが「0」に変更されると、対応するキャッシュラインは、無効化される。無効化されたキャッシュラインに対応するダーティビットの値は、もはや参照されない状態であるドントケアの状態となる。
【0095】
追い出された256Bのデータに含まれる4つの64Bデータ、つまり「0×11111111」、「0×22222222」、「0×33333333」、および「0×44444444」は、ライトバッファ3141の例えば1番目のエントリに格納される。ライトバッファ3141の1番目のエントリにおいて、1番目の64Bデータ「0×11111111」はセクタ0に格納され、2番目の64Bデータ「0×22222222」はセクタ1に格納され、3番目の64Bデータ「0×33333333」はセクタ2に格納され、4番目の64Bデータ「0×44444444」はセクタ3に格納される。そして、1番目のエントリに対応するセクタバリッドは、0b1111に設定される。
【0096】
なお、ここでは、インデックス0×200~0×203に対応する4つのキャッシュラインの各々に格納されている64Bデータを無効化する場合を例として説明したが、これらキャッシュラインの各々に64Bデータを有効データとして維持するケースにおいては、これらキャッシュラインの各々に対応するバリッドビットが「1」に維持された状態で、これらキャッシュラインの各々に対応するダーティビットが「0」に設定される。
【0097】
次に、メモリシステム3は、ライトバッファ3141に格納されているデータをNANDフラッシュ32に書き込む。
図7は、第1実施形態に係るメモリシステムのNANDフラッシュへのプログラム後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0098】
例えばライトバッファ3141の空きエントリの個数が閾値以下に低下した場合、メモリシステム3は、ライトバッファ3141の複数のエントリのうちの一つのエントリに格納されているデータを、NANDフラッシュ32に書き込むことを決定する。メモリコントローラ31は、ライトバッファ3141の複数のエントリのうちの一つのエントリを、NANDフラッシュ32に書き込まれるべきデータを格納しているプログラム動作(データ書き込み動作)の対象エントリとして選択する。ここでは、ライトバッファ3141の1番目のエントリがプログラム動作の対象エントリとして選択された場合を想定する。
【0099】
メモリコントローラ31は、ライトバッファ3141の1番目のエントリに格納されている256Bデータ(0×44444444、33333333、22222222、11111111)を、LA範囲(LA0×1000_8000~0×1000_80FF)に対応する以前の256Bデータ(0×88888888、77777777、66666666、55555555)が記憶されている物理記憶領域とは異なるNANDフラッシュ32内の別の物理記憶領域、例えばPA0×12340002によって示されるNANDフラッシュ32内の物理記憶領域に書き込む。PA0×12340002は、LA範囲(LA0×1000_8000~0×1000_80FF)のうちの先頭のLA0×1000_8000に割り当てられた新たな物理アドレスである。
【0100】
そして、メモリコントローラ31は、LA0×1000_8000にPA0×12340002が関連付けられるようにLUT313を更新する。この場合、メモリコントローラ31は、LA0×1000_8000に対応するLUT313のエントリを更新して、LA0×1000_8000に対応付けられたPAを、PA0×12340000からPA0×12340002に変更する。なお、LUT313を更新する動作が実行された後に、256BデータをNANDフラッシュ32に書き込む動作が実行されてもよい。
【0101】
256BデータがNANDフラッシュ32に書き込まれることによって、ライトバッファ3141の1番目のエントリは、空きエントリになる。
【0102】
ここでは、論理物理アドレス変換の管理サイズである256Bのデータが同時にホストキャッシュ22から追い出される理想的なシチュエーションについて説明した。しかし、管理サイズがアクセス粒度よりも大きい場合には、必ずしも管理サイズのデータが同時にホストキャッシュ22から追い出されることは保証されない。この場合、ライトバッファ3141には、論理的に連続する256Bデータのうちの一部のデータだけが格納される場合がある。
【0103】
次に、管理サイズのデータがライトバッファ3141に揃っていない場合における書き込み処理について説明する。ここでは、ホスト問い合わせを利用しない場合を想定する。
【0104】
まず、
図8は、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの初期状態の例を示す図であり、
図5で説明した状態と同じ状態である。
【0105】
次に、キャッシュライン競合によって、LA0×1000_8000~0×1000_80BFに対応する192Bのデータたけがホストキャッシュ22の3つのキャッシュラインから追い出されて、メモリシステム3にライト(部分ライト)された場合を想定する。
図9は、第1実施形態に係るメモリシステムへの部分ライト後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0106】
LA0×1000_8000~0×1000_80BFに対応する192Bのデータがホストキャッシュ22から追い出されて、メモリシステム3に書き込まれると、インデックス0×200~0×202に対応する3つのキャッシュラインの各々に対応するバリッドビットは、無効を示す「0」に設定される。インデックス0×203に対応するキャッシュラインに格納されているデータ、つまりLA0×1000_80C0~0×100080FFのデータは、有効且つダーティなデータとしてホストキャッシュ22上に残存する。
【0107】
192Bのデータに含まれる3つの64Bデータ、つまり「0×11111111」、「0×22222222」、および「0×33333333」は、ライトバッファ3141の例えば1番目のエントリに格納される。ライトバッファ3141の1番目のエントリにおいて、1番目の64Bデータ「0×11111111」はセクタ0に格納され、2番目の64Bデータ「0×22222222」はセクタ1に格納され、3番目の64Bデータ「0×33333333」はセクタ2に格納される。1番目のエントリのセクタ3は、空き状態に維持される。そして、1番目のエントリに対応するセクタバリッドは、0b0111に設定される。
【0108】
次に、メモリコントローラ31は、NANDフラッシュ32から不足データを読み出す。
図10は、第1実施形態に係るメモリシステムのNANDフラッシュからの不足データのリード後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0109】
ここで、メモリコントローラ31は、ライトバッファ3141の1番目のエントリを、プログラム動作の対象エントリとして選択する。
【0110】
そして、対象エントリ(1番目のエントリ)のセクタ3にデータが格納されていないことを確認すると、メモリコントローラ31は、セクタ3に格納されるべき64Bデータに対応するLAであるLA0×1000_80C0を、不足データに対応するLAとして特定する。メモリコントローラ31は、特定したLA0×1000_80C0に対応する不足データをNANDフラッシュ32から読み出し、対象エントリのセクタ3に格納する。この場合、メモリコントローラ31は、NANDフラッシュ32からLA0×1000_8000に対応する更新前の256Bデータ(「0×88888888」、「0×77777777」、「0×66666666」、「0×55555555」)を少なくとも読み出す。この読み出しは、LA0×1000_8000に対応するPA0×12340000に基づいて実行される。
【0111】
これにより、対象エントリのセクタ3には、更新前のデータである0×88888888が格納される。そして、セクタバリッドは、0b1111に設定される。
【0112】
次に、メモリコントローラ31は、NANDフラッシュ32にデータを書き込む。
図11は、第1実施形態に係るメモリシステムのNANDフラッシュへのプログラム後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0113】
ライトバッファ3141の対象エントリ(1番目のエントリ)に管理サイズのデータが揃うと、メモリコントローラ31は、ライトバッファ3141の1番目のエントリに格納されている256Bデータ(0×88888888、33333333、22222222、11111111)を、LA範囲(LA0×1000_8000~0×1000_80FF)に対応する以前の256Bデータ(0×88888888、77777777、66666666、55555555)が記憶されている物理記憶領域とは異なるNANDフラッシュ32内の別の物理記憶領域、例えばPA0×12340002によって示されるNANDフラッシュ32内の物理記憶領域に書き込む。PA0×12340002は、LA範囲(LA0×1000_8000~0×1000_80FF)のうちの先頭のLA0×1000_8000に割り当てられた新たな物理アドレスである。
【0114】
そして、メモリコントローラ31は、LA0×1000_8000に対応するLUT313のエントリを更新して、LA0×1000_8000に対応付けられたPAを、PA0×12340000からPA0×12340002に変更する。なお、LUT313を更新する動作が実行された後に、256BデータをNANDフラッシュ32に書き込む動作が実行されてもよい。
【0115】
256BデータがNANDフラッシュ32に書き込まれることによって、ライトバッファ3141の1番目のエントリは、空きエントリになる。そして、NANDフラッシュ32のPA0×12340002によって示される物理記憶領域には、更新後の192Bデータと更新前の64Bデータとが混在している256Bデータ(0×88888888_33333333_22222222_11111111)が記憶される。
【0116】
このとき、ホストキャッシュ22のインデックス0×203に対応するキャッシュラインには、更新後のデータである0×44444444(残存データとも称する)が格納されている。この残存データは、ホスト2の動作に応じて後に追い出され得る。
【0117】
そして、ホストキャッシュ22に格納されていた残存データが追い出されると、残存データは、メモリシステム3に書き込まれる。
図12は、キャッシュから第1実施形態に係るメモリシステムへの残存データのライト後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0118】
LA0×1000_80C0に対応する64Bの残存データがホストキャッシュ22から追い出されて、メモリシステム3に書き込まれると、インデックス0×203に対応するキャッシュラインに対応するバリッドビットは、無効を示す「0」に設定される。追い出された64Bデータ、つまり「0×44444444」は、ライトバッファ3141の一つのエントリ(例えば2番目のエントリ)のセクタ3に格納される。2番目のエントリの他のセクタには、有効なデータが格納されていないため、2番目のエントリのセクタバリッドは、0b1000に設定される。
【0119】
次に、メモリコントローラ31は、NANDフラッシュ32から不足データを読み出す。
図13は、第1実施形態に係るメモリシステムのNANDフラッシュからの不足データのリード後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0120】
ここでは、ライトバッファ3141の2番目のエントリがプログラム動作の対象エントリとして選択された場合を想定する。
【0121】
対象エントリ(2番目のエントリ)のセクタ0~セクタ2の各々にデータが格納されていないことを確認すると、メモリコントローラ31は、LA0×1000_8000、LA0×1000_8040、LA0×1000_8080を、3つの不足データにそれぞれ対応するLAとして特定する。メモリコントローラ31は、特定したLA0×1000_8000、LA0×1000_8040、LA0×1000_8080にそれぞれ対応する3つの64BデータをNANDフラッシュ32から読み出し、対象エントリのセクタ0、セクタ1、セクタ2にそれぞれに格納する。この場合、メモリコントローラ31は、NANDフラッシュ32からLA0×1000_8000に対応する256Bデータ(「0×88888888」、「0×33333333」、「0×22222222」、「0×11111111」)を少なくとも読み出す。これらデータは、1回目のプログラム動作でNANDフラッシュ32に書き込まれたデータである。これらデータの読み出しは、LA0×1000_8000に対応するPA0x12340002に基づいて実行される。
【0122】
これにより、対象エントリのセクタ0には、データ0×11111111が格納され、対象エントリのセクタ1には、データ0×22222222が格納され、対象エントリのセクタ2には、データ0×33333333が格納される。そして、対象エントリのセクタバリッドは、0b1111に設定される。
【0123】
次に、メモリコントローラ31は、NANDフラッシュ32にデータを書き込む。
図14は、第1実施形態に係るメモリシステムのNANDフラッシュへの2回目のプログラム後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0124】
ライトバッファ3141の対象エントリ(2番目のエントリ)に管理サイズのデータが揃うと、メモリコントローラ31は、ライトバッファ3141の2番目のエントリに格納されている256Bデータ(0×44444444、33333333、22222222、11111111)を、古い256Bデータ(0×88888888、33333333、22222222、11111111)が書き込まれた物理記憶領域とは異なるNANDフラッシュ32内の別の物理記憶領域、例えばPA0×12340003によって示されるNANDフラッシュ32内の物理記憶領域に書き込む。
【0125】
そして、メモリコントローラ31は、LA0×1000_8000に対応するLUT313のエントリを再び更新して、LA0×1000_8000に対応付けられたPAを、PA0×12340002からPA0×12340003に変更する。なお、LUT313を更新する動作が実行された後に、256BデータをNANDフラッシュ32に書き込む動作が実行されてもよい。
【0126】
このように、ホストキャッシュ22に格納されているデータが部分的に追い出されると、NANDフラッシュ32に対する不足データのリード動作が2回実行され、また、NANDフラッシュ32に対するプログラム動作が2回実行される。このオーバーヘッドは、メモリシステム3の性能を低下させることになる。例えば、リード回数が増加することは、NANDフラッシュ32のスループットを低下させる要因となり、プログラム回数が増えることは、NANDフラッシュ32のエンデュランスを低下させる要因となる。
【0127】
なお、ホストキャッシュ22からの追い出しを適切なタイミングでコントロールすることは以下の理由で現実的ではない。
【0128】
ホストキャッシュ22上でのデータの更新と、ホストキャッシュ22からのデータの追い出しとは、互いに異なるタイミングで実行される。なぜなら、ホストキャッシュ22上でのデータの更新は、ホスト2上で実行されるアプリケーションによるデータ書き換えによって起こり、一方、追い出しはキャッシュラインの競合時に起こるからである。キャッシュラインの競合は、データを更新したアプリケーションに起因するとは限らず、異なるアプリケーションに起因する場合もある。また、複数のCPUによってホストキャッシュ22が共有される場合は、異なるCPUによってそれぞれ実行された異なるアプリケーションによりキャッシュライン競合が発生する場合も多い。
【0129】
ホスト2上で実行されるアプリケーションが適切なタイミングでキャッシュフラッシュ命令を発行する(例えば256B書き込み毎にキャッシュフラッシュ命令を発行する)ことでホストキャッシュ22からの追い出しをコントロールする、という方法を使用することもできる。しかしながら、論理物理アドレス変換の単位であるLUT313の管理サイズはメモリ拡張デバイス毎に異なることも想定され、適切なタイミングでキャッシュフラッシュ命令を発行するように全てのアプリケーションを修正することは実際には困難である。
【0130】
したがって、メモリシステム3は、対象エントリに管理サイズのデータが格納されていない場合、ホストキャッシュ22に対して不足データを問い合わせる動作を実行することによってオーバーヘッドを低減する。
【0131】
次に、不足データの問い合わせを伴う書き込み処理について説明する。
図15は、第1実施形態に係るメモリシステムへの部分ライト後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0132】
図15に示されるホストキャッシュ22、ライトバッファ3141、LUT313、およびNANDフラッシュ32の各々の状態は、
図9で説明したホストキャッシュ22、ライトバッファ3141、LUT313、およびNANDフラッシュ32の各々の状態と同じである。
【0133】
次いで、メモリコントローラ31は、ホストキャッシュ22に対する問い合わせと、書き込み動作を実行する。
図16は、第1実施形態に係るメモリシステムにおいて実行されるキャッシュへの問い合わせと、追加ライト後における、キャッシュと、ライトバッファと、ルックアップテーブルと、NANDフラッシュとの状態の例を示す図である。
【0134】
まず、メモリコントローラ31は、NANDフラッシュ32に書き込まれるべきデータを格納している、プログラム動作の対象エントリとして、ライトバッファ3141の1番目のエントリを選択する。
【0135】
そして、対象エントリ(1番目のエントリ)のセクタ3に有効なデータが格納されていないことを確認すると、メモリコントローラ31は、セクタ3に格納されるべき不足データに対応するLA(ここではLA0×1000_80C0)を特定し、特定したLA0×1000_80C0をホストキャッシュ問い合わせ部3142に通知する(2a)。
【0136】
ホストキャッシュ問い合わせ部3142は、にLA0×1000_80C0を指定する要求である問い合わせ要求をホスト2に送信することで、ホストキャッシュ22からメモリシステム3に不足データを転送するように、ホスト2に要求する(2b)。この場合、ホストキャッシュ問い合わせ部3142は、例えば、0×1000_80C0を指定するCXL.cache CLFlushを、問い合わせ要求としてホスト2に送信する。問い合わせ要求を受信したホストキャッシュ22は、指定されたLA0×1000_80C0に対応するデータがホストキャッシュ22に格納されているか否かを判定する。
【0137】
指定されたLA0×1000_80C0に対応するデータがホストキャッシュ22に格納されている場合、ホスト2は、指定されたLA0×1000_80C0に対応するデータをホストキャッシュ22からメモリシステム3に転送する(2c)。LA0×1000_80C0に対応するデータは、インデックス0×203に対応するキャッシュラインに格納されている。このため、インデックス0×203に対応するキャッシュラインに格納されているデータがメモリシステム3に転送される。メモリコントローラ31は、ホストキャッシュ22から転送されたLA0×1000_80C0に対応するデータをライトバッファ3141の1番目のエントリのセクタ3に格納する。ホストキャッシュ22のインデックス0×203に対応するキャッシュラインのバリッドビットは、0に設定される。そして、ライトバッファ3141の1番目のエントリのセクタバリッドは、0b1111に設定される。
【0138】
これにより、ライトバッファ3141の1番目のエントリには、管理サイズのデータが揃う。次いで、メモリコントローラ31は、
図8で説明したNANDフラッシュ32へのプログラム動作と同じ動作を実行することができる。
【0139】
図16では、ホストキャッシュ問い合わせ部3142によって送信された問い合わせ要求がCXL.cache CLFlushである場合について図示されている。そのため、CXL.cache CLFlushによって指定されたLAに対応するデータがフラッシュ(flush)される。つまり、CXL.cache CLFlushによって指定されたLAに対応するデータは、メモリシステム3に書き戻されると共に、無効化される。したがって、CXL.cache CLFlushによって指定されたLAに対応するデータを保持していたインデックス0×203に対応するキャッシュラインに対応するバリッドビットは、0に設定される。
【0140】
次に、メモリコントローラ31がホストキャッシュ22への問い合わせを実行しない場合における書き込み処理の手順について説明する。
図17は、キャッシュへの問い合わせを使用しない場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図である。
【0141】
まず、ホスト2は、メモリコントローラ31に対して、0×1000_8000を指定するライト要求を送信する(ステップS101)。ここで送信されるライト要求は、例えば、CXL規格で規定されたCXL.mem MemWrである。CXL.mem MemWrは、CXL.mem MemWrよって指定されたアドレス(ここでは0×1000_8000)への64Bデータの書き込みを要求するライトアクセス要求である。ライト要求(CXL.mem MemWr)を受信したメモリコントローラ31は、ライト要求と共に受信した64Bデータをライトバッファ3141の複数のエントリのうちの一つのエントリに格納する。
【0142】
さらに、ホスト2は、メモリコントローラ31に対して、0×1000_8040を指定するライト要求(CXL.mem MemWr)を送信する(ステップS102)。0×1000_8040は、ステップS101で受信したCXL.mem MemWrが指定する0×1000_8000と同じ256BのLA範囲(0×1000_8000~0×1000_80FF)に属する。そのため、0×1000_8040を指定するCXL.mem MemWrを受信したメモリコントローラ31は、ステップS101で受信された64Bデータが格納されたライトバッファ3141のエントリと同じエントリに、ステップS102でCXL.mem MemWrと共に受信した64Bデータを格納する。
【0143】
またさらに、ホスト2は、メモリコントローラ31に対して、0×1000_8080を指定するライト要求(CXL.mem MemWr)を送信する(ステップS103)。0×1000_8080もまた、ステップS101で受信したCXL.mem MemWrが指定する0×1000_8000と同じ256BのLA範囲(0×1000_8000~0×1000_80FF)に属する。そのため、0×1000_8080を指定するCXL.mem MemWrを受信したメモリコントローラ31は、ステップS101で受信された64Bデータが格納されたライトバッファ3141のエントリと同じエントリに、ステップS103でCXL.mem MemWrと共に受信した64Bデータを格納する。
【0144】
次いで、メモリコントローラ31は、ライトバッファ3141のあるエントリに格納されているデータ(ここでは、0×1000_8000~0×1000_80FFに対応する256Bデータ)をNANDフラッシュ32へプログラムすることを決定する(ステップS104)。
【0145】
メモリコントローラ31は、不足データがあるか否かを判定する(ステップS105)。つまり、メモリコントローラ31は、0×1000_8000~0×1000_80FFに対応する全てのデータが、ライトバッファ3141に格納されているか否かを判定する。ここでは、0×1000_80C0に対応する64Bデータがライトバッファ3141に格納されていない。したがって、メモリコントローラ31は、0×1000_80C0を、不足データに対応するLAとして特定する。
【0146】
メモリコントローラ31は、不足データに対応するLAに割り当てられたPAに基づいて、NANDフラッシュ32から不足データを読み出す(ステップS106)。メモリコントローラ31は、読み出した不足データをライトバッファ3141に格納する。これにより、ステップS104でプログラムすることが決定された0×1000_8000~0×1000_80FFに対応する256Bデータの全てが、ライトバッファ3141上に揃う。
【0147】
メモリコントローラ31は、0×1000_8000~0×1000_80FFに対応する256BデータをNANDフラッシュ32に書き込む(ステップS107)。
【0148】
その後、ホスト2は、メモリコントローラ31に対して、0×1000_80C0を指定するライト要求(CXL.mem MemWr)を送信する(ステップS108)。ステップS108で送信されたライト要求は、0×1000_80C0を指定する。ライト要求を受信したメモリコントローラ31は、ライト要求と共に受信したデータをライトバッファ3141の複数のエントリのうちの一つのエントリに格納する。
【0149】
次いで、メモリコントローラ31は、ライトバッファ3141のあるエントリに格納されているデータ(ここでは、0×1000_8000~0×1000_80FFに対応する256Bデータ)をNANDフラッシュ32へプログラムすることを決定する(ステップS109)。
【0150】
メモリコントローラ31は、不足データがあるか否かを判定する(ステップS110)。つまり、メモリコントローラ31は、0×1000_8000~0×1000_80FFに対応する全てのデータが、ライトバッファ3141に格納されているか否かを判定する。ここでは、0×1000_8000~0×1000_80BFに対応する192Bデータがライトバッファ3141に格納されていない。したがって、メモリコントローラ31は、0×1000_8000~0×1000_80BFに対応する192Bデータが不足データであると判定する。
【0151】
メモリコントローラ31は、NANDフラッシュ32から不足データを読み出す(ステップS111)。メモリコントローラ31は、読み出した不足データをライトバッファ3141に格納する。これにより、ステップS109でプログラムすることが決定された0×1000_8000~0×1000_80FFに対応する256Bデータの全てがライトバッファ3141上に揃う。
【0152】
メモリコントローラ31は、0×1000_8000~0×1000_80FFに対応する256BデータをNANDフラッシュ32に書き込む(ステップS112)。
【0153】
次に、ホスト2への問い合わせを伴う書き込み処理について説明する。ここでは、不足データがホストキャッシュ22に保持されていた場合を想定する。
図18は、不足データがキャッシュに保持されていた場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図である。
【0154】
ホスト2およびメモリコントローラ31は、ステップS101~S105と同様の動作を実行する(ステップS201~S205)。ステップS205で、メモリコントローラ31は、不足データに対応するLA(ここでは、0×1000_80C0)を特定する。
【0155】
メモリコントローラ31は、ホストキャッシュ22にアクセスするための要求であって不足データに対応するLA(ここでは、0×1000_80C0)を指定する要求をホスト2に送信することによって、指定されたLAに対応するデータをホストキャッシュ22からメモリシステム3に転送するようにホスト2に要求する(ステップS206)。ここで送信される要求は、例えば、CXL.cache CLFlushである。
【0156】
要求を受信したことに応じて、ホスト2は、受信した要求によって指定された0×1000_80C0に対応するデータが、ホストキャッシュ22に格納されているか否かを判定する(ステップS207)。ここでは、指定された0×1000_80C0に対応するデータが、ホストキャッシュ22に格納されている場合について説明する。
【0157】
ホスト2は、0×1000_80C0に対応するデータを書き込むためのライト要求をメモリコントローラ31に送信する(ステップS208)。ここで送信されるライト要求は、例えば、CXL.mem MemWrである。このCXL.mem MemWrは、0×1000_80C0を指定する。ホスト2は、ライト要求(CXL.mem MemWr)と共に、不足データ(つまり0×1000_80C0に対応する64Bデータ)をメモリコントローラ31に送信する。
【0158】
そして、ホスト2は、ステップS206で受信した要求に対する処理の完了を示す応答である完了応答をメモリコントローラ31に送信する(ステップS209)。この完了応答は、例えば、CXL規格で規定されたCXL.mem MemRdFwdである。
【0159】
メモリコントローラ31は、ステップS204でプログラムすることが決定された256Bデータに不足データがあるか否かを判定する(ステップS210)。ステップS208でライト要求と共に受信したデータによって、ライトバッファ3141上に0×1000_8000~0×1000_80FFに対応する256Bデータの全てが揃っている。そのため、メモリコントローラ31は、不足データはないと判定する。
【0160】
そして、メモリコントローラ31は、ステップS204でプログラムすることが決定された256BデータをNANDフラッシュ32に書き込む(ステップS211)。ステップS211では、メモリコントローラ31は、0×1000_8000に割り当てられたPAによって示されるNANDフラッシュ32内の物理記憶領域に、0×1000_8000~0×1000_80FFに対応する256Bデータを書き込む。
【0161】
次に、不足データがホストキャッシュ22に格納されていない場合における書き込み処理について説明する。
図19は、不足データがキャッシュに保持されていなかった場合に、第1実施形態に係るメモリシステムにおいて実行される処理の手順を示すシーケンス図である。
【0162】
ホスト2およびメモリコントローラ31は、ステップS101~S105と同様の動作を実行する(ステップS301~S305)。ステップS305で、メモリコントローラ31は、不足データに対応するLA(ここでは、0×1000_80C0)を特定する。
【0163】
メモリコントローラ31は、ホストキャッシュ22にアクセスするための要求であって不足データに対応するLA(ここでは、0×1000_80C0)を指定する要求をホスト2に送信することによって、指定されたLAに対応するデータをホストキャッシュ22からメモリシステム3に転送するようにホスト2に要求する(ステップS306)。送信される要求は、例えば、CXL.cache CLFlushである。
【0164】
要求を受信したことに応じて、ホスト2は、受信した要求によって指定された0×1000_80C0に対応するデータが、ホストキャッシュ22に格納されているか否かを判定する(ステップS307)。ここでは、指定された0×1000_80C0に対応するデータが、ホストキャッシュ22に格納されていない場合について説明する。
【0165】
ホスト2は、ライト要求(CXL.mem MemWr)をメモリシステム3に送信せずに、ステップS306で受信した要求に対する処理の完了を示す応答である完了応答をメモリコントローラ31に送信する(ステップS308)。この完了応答は、例えば、CXL.mem MemRdFwdである。メモリコントローラ31は、不足データのLAを指定するライト要求(CXL.mem MemWr)を受信せずに、完了応答を受信したことによって、不足データがホストキャッシュ22に格納されていないことを認識する。
【0166】
メモリコントローラ31は、ステップS304でプログラムすることが決定された256Bデータに不足データがあるか否かを判定する(ステップS309)。メモリコントローラ31は、ステップS306で送信した要求が指定するLAに対応するデータをホスト2から受信していない。そのため、ライトバッファ3141上に0×1000_8000~0×1000_80FFに対応する256Bデータは揃っていないため、メモリコントローラ31は、不足データが有ると判定する。
【0167】
メモリコントローラ31は、NANDフラッシュ32から不足データを読み出す(ステップS310)。この場合、メモリコントローラ31は、0×1000_80C0に対応するデータをNANDフラッシュ32から読み出し、ライトバッファ3141に格納する。これにより、ステップS304で決定された256Bデータの全てが、ライトバッファ3141上に揃う。
【0168】
メモリコントローラ31は、ステップS304でプログラムすることが決定された256BデータをNANDフラッシュ32に書き込む(ステップS311)。ステップS311では、メモリコントローラ31は、0×1000_8000に割り当てられたPAによって示されるNANDフラッシュ32内の物理記憶領域に、0×1000_8000~0×1000_80FFに対応する256Bデータを書き込む。
【0169】
次に、書き込み処理の手順について説明する。
図20は、第1実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャートである。
【0170】
まず、メモリコントローラ31は、ライトバッファ3141の複数のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS401)。対象エントリの決定方法は、例えばライトバッファの空きエントリ数が特定の閾値を下回った場合に、最も書き込まれた時刻が古いものを選択する等の方法が考えられるが、特に限定は行わない。
【0171】
メモリコントローラ31は、ステップS401で決定された対象エントリに不足データがあるか否かを判定する(ステップS402)。
【0172】
対象エントリに不足データが無い場合(ステップS402でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS403)。
【0173】
対象エントリに不足データが有る場合(ステップS402でYes)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS404)。ここで、メモリコントローラ31は、不足データに対応するLAを指定する要求をホスト2に送信することによって、ホストキャッシュ22からメモリシステム3に不足データを転送するようにホスト2に要求する。
【0174】
メモリコントローラ31は、ホストキャッシュ22から不足データを受信したか否かを判定する(ステップS405)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、ホストキャッシュ22に格納されている不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データをホスト2から受信する前に、ホスト2から完了応答を受信する。
【0175】
ホストキャッシュ22から不足データを受信しなかった場合(ステップS405でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS406)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0176】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS403)。
【0177】
また、ホストキャッシュ22から不足データを受信した場合(ステップS405でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS407)。これにより、対象エントリに不足データはなくなる。
【0178】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS403)。
【0179】
以上説明したように、第1実施形態に係るメモリシステム3においては、書き込み処理の際に、不足データをホスト2に問い合わせる動作を実行する。不足データがホストキャッシュ22に格納されていた場合、メモリコントローラ31は、ホストキャッシュ22から転送される不足データを使用して、NANDフラッシュ32へのプログラム動作を実行する。これにより、メモリコントローラ31は、NANDフラッシュ32に対するリード動作を必要とせずに、不足データを取得することができる。これにより、メモリシステム3は、ホスト2からの細かい粒度のアクセスによって生じる、不足データに対処することができる。
【0180】
しかし、不足データをホストキャッシュ22が保持していない場合は、ホストキャッシュ22への問い合わせがオーバーヘッドとなり、ホスト2とメモリシステム3との間のインタフェースの帯域幅を無駄に消費してしまう場合があり得る。そのため、ホストキャッシュ22への問い合わせを効率良く実行することが好ましい。以下、ホストキャッシュ22への問い合わせを効率良く実行するための幾つかの構成の例を第2~第5実施形態として説明する。
【0181】
(第2実施形態)
第2実施形態に係るメモリシステム3のメモリコントローラ31は、書き込み処理の際に、不足データの割合を参照し、ホスト2に対する不足データの問い合わせを実行するか否かを判定する。
【0182】
次に、ホスト問い合わせの際に、プログラム対象データのうちの不足データの割合を参照する場合について説明する。
図21は、第2実施形態に係るメモリシステムにおけるライトバッファの状態の例を示す図である。
【0183】
第2実施形態に係るメモリシステム3のメモリコントローラ31は、書き込み処理に際して、ライトバッファ3141の対象エントリにおける不足率を参照する。不足率は、1つのエントリに格納されるデータに対する不足データの割合である。ここでは、ホスト2からメモリシステム3へのアクセスの粒度が64Bであり、1つのエントリに格納されるデータの総サイズが256Bであり、エントリ内の各セクタに格納されるデータのサイズが64Bである場合を想定する。
【0184】
ライトバッファ3141の1番目のエントリにおいて、セクタ0は有効なデータを格納しておらず、セクタ1はデータ0×33333333を格納しており、セクタ2はデータ0×22222222を格納しており、セクタ3はデータ0×11111111を格納している。1番目のエントリのセクタバリッドは、0b1110に設定されている。不足データは、セクタ0に格納されるべきデータである。そのため、不足データの総サイズは、64Bである。よって、1番目のエントリの不足率は、25%(=64B/256B)になる。
【0185】
また、ライトバッファ3141の2番目のエントリにおいて、セクタ0はデータ0×55555555を格納しており、セクタ1は有効なデータを格納しておらず、セクタ2はデータ0×44444444を格納しており、セクタ3は有効なデータを格納していない。2番目のエントリのセクタバリッドは、0b0101に設定されている。不足データは、セクタ1に格納されるべきデータと、セクタ3に格納されるべきデータである。そのため、不足データの総サイズは、128Bである。よって、2番目のエントリの不足率は、50%(=128B/256B)である。
【0186】
またさらに、ライトバッファ3141の3番目のエントリにおいて、セクタ0はデータ0×66666666を格納しており、セクタ1、セクタ2、およびセクタ3は有効なデータを格納していない。3番目のエントリのセクタバリッドは、0b0001に設定されている。不足データは、セクタ1、セクタ2、およびセクタ3に格納されるべきデータである。そのため、不足データの総サイズは、192Bである。よって、3番目のエントリの不足率は、75%(=192B/256B)である。
【0187】
ここで、ホスト問い合わせを伴う書き込み処理において、1番目のエントリが対象エントリとして選択された場合を想定する。メモリコントローラ31は、セクタ0に格納されるべきデータに対応するLAを指定する要求をホスト2に送信する。
【0188】
ホストキャッシュ22にセクタ0に格納されるべきデータが格納されている場合には、メモリコントローラ31は、セクタ0に格納されるべき不足データをホスト2から受信できる。メモリコントローラ31は、ホスト2から受信した不足データをセクタ0に格納する。そして、メモリコントローラ31は、1番目のエントリに格納されている256BデータをNANDフラッシュ32に書き込む。これにより、メモリコントローラ31は、NANDフラッシュ32からの不足データの読み出しを実行せずに、書き込み処理を完了することができる。
【0189】
一方、ホストキャッシュ22に不足データが格納されていない場合には、メモリコントローラ31は、ホスト2から不足データを受信することができない。そのため、メモリコントローラ31は、セクタ0に格納されるべきデータをNANDフラッシュ32から読み出す。そして、メモリコントローラ31は、読み出した不足データをセクタ0に格納する。メモリコントローラ31は、1番目のエントリに格納されているデータをNANDフラッシュ32に書き込む。
【0190】
また、ホスト問い合わせを伴う書き込み処理において、2番目のエントリが対象エントリとして選択された場合を想定する。ホスト2とメモリシステム3との間のアクセスの粒度は64Bであるため、メモリコントローラ31は、セクタ1に格納されるべきデータに対応するLAを指定する第1の要求と、セクタ3に格納されるべきデータに対応するLAを指定する第2の要求とをホスト2に送信する。
【0191】
セクタ1に格納されるべきデータと、セクタ3に格納されるべきデータの両方がホストキャッシュ22に格納されている場合には、メモリコントローラ31は、ホスト2から受信した不足データを、セクタ1およびセクタ3のそれぞれに格納する。そして、メモリコントローラ31は、2番目のエントリに格納されている256BデータをNANDフラッシュ32に書き込む。これにより、メモリコントローラ31は、NANDフラッシュ32からのデータの読み出しを実行せずに、書き込み処理を完了できる。
【0192】
一方、2番目のエントリのセクタ1に格納されるべきデータと、セクタ3に格納されるべきデータとのうちの少なくとも一方がホストキャッシュ22に格納されていない場合には、メモリコントローラ31は、ホスト問い合わせによって不足データをホスト2から受信することによって、2番目のエントリに格納されるべき256Bデータを揃えることができない。そのため、メモリコントローラ31は、ホストキャッシュ22に格納されていなかった不足データをNANDフラッシュ32から読み出し、2番目のエントリに格納する。このように、メモリコントローラ31は、不足データのうちの少なくとも一部がホストキャッシュ22上に格納されていない場合には、NANDフラッシュ32から不足データを読み出すことが必要となる。このとき、NANDフラッシュ32から不足データを読み出す際には、256Bまたはそれ以上のサイズの単位でデータがNANDフラッシュ32から読み出されるので、不足データの全てを同時にNANDフラッシュ32から読み出すことができる。そのため、不足データの一部がホストキャッシュ22上に格納されていなかった場合には、ホスト問い合わせを実行することによって、書き込み処理にかかる時間が延びることになる。
【0193】
またさらに、3番目のエントリが対象エントリとして選択された場合も同様に、不足データの全てがホストキャッシュ22に格納されている場合には、ホスト問い合わせを実行することによって、NANDフラッシュ32からの不足データの読み出しを実行せずに書き込み処理を完了することができる。一方、不足データのうちの少なくとも一部が、ライトバッファ3141に格納されていない場合には、NANDフラッシュ32から不足データを読み出すことが必要になる。
【0194】
このように、不足率が高い場合には、不足データが全てホストキャッシュ22に格納されている可能性が低くなる。そのため、たとえホスト問い合わせを実行しても、NANDフラッシュ32から不足データを読み出すことが必要とされる可能性が高くなる。また、メモリコントローラ31は、64Bデータごとにホスト2に対して要求を送信することから、不足率が高いほど、発行される要求の数が増加する。
【0195】
したがって、第2実施形態に係るメモリシステム3のメモリコントローラ31は、対象エントリの不足率が閾値(例えば、第2の閾値と称される)以下である場合にのみ、ホスト問い合わせを実行する。例えば、第2の閾値が25%に設定されている場合を想定する。
図21における1番目のエントリが対象エントリとして選択された場合には、メモリコントローラ31は、ホスト問い合わせを実行する。また、2番目あるいは3番目のエントリが選択された場合には、メモリコントローラ31は、ホスト問い合わせを実行しない。また、第2の閾値が50%に設定されているケースでは、
図21における1番目のエントリまたは2番目のエントリが対象エントリとして選択された場合には、メモリコントローラ31は、ホスト問い合わせを実行する。また、3番目のエントリが選択された場合には、メモリコントローラ31は、ホスト問い合わせを実行しない。
【0196】
このように、メモリコントローラ31は、管理サイズに対する不足データの割合が第2の閾値以下である場合、不足データに対応するLAを指定する要求(例えば、CXL.cache CLFlush、またはCXL.cache RdCurr)をホスト2に送信することによって、不足データをホストキャッシュ22からメモリシステム3に転送するようにホスト2に要求する。管理サイズに対する不足データの割合が第2の閾値よりも大きい場合、メモリコントローラ31は、ホスト問い合わせを実行せずに、不足データをNANDフラッシュ32から読み出す。
【0197】
次に、対象エントリの不足率を参照する書き込み処理について説明する。
図22は、第2実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャートである。
【0198】
まず、メモリコントローラ31は、ライトバッファ3141のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS501)。
【0199】
メモリコントローラ31は、ステップS501で決定された対象エントリに不足データがあるか否かを判定する(ステップS502)。
【0200】
対象エントリに不足データが無い場合(ステップS502でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS503)。
【0201】
対象エントリに不足データが有る場合(ステップS502でYes)、メモリコントローラ31は、対象エントリにおける不足データの割合が閾値以下であるか否かを判定する(ステップS504)。
【0202】
不足データの割合が閾値よりも大きい場合(ステップS504でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS505)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0203】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS503)。
【0204】
また、不足データの割合が閾値以下である場合(ステップS504でYes)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS506)。ここで、メモリコントローラ31は、不足データに対応するLAを指定する要求をホスト2に送信する。
【0205】
メモリコントローラ31は、ホストキャッシュ22から読み出された不足データを受信したか否かを判定する(ステップS507)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、ホストキャッシュ22に格納されている不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データをホスト2から受信する前に、ホスト2から完了応答を受信する。
【0206】
ホストキャッシュ22から不足データを受信しなかった場合(ステップS507でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS505)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0207】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS503)。
【0208】
また、ホストキャッシュ22から不足データを受信した場合(ステップS507でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS508)。これにより、対象エントリに不足データはなくなる。
【0209】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS503)。
【0210】
以上説明したように、第2実施形態に係るメモリシステム3のメモリコントローラ31は、書き込み処理の際に、対象エントリにおける不足データの割合が閾値以下であるか否かを判定する。メモリコントローラ31は、不足データの割合が閾値以下である場合に、不足データに対応するLAを指定する要求をホスト2に送信することによって、不足データをホストキャッシュ22からメモリシステム3に転送するようにホスト2に要求する。また、メモリコントローラ31は、不足データの割合が閾値以上である場合には、ホスト問い合わせを実行せずに、不足データをNANDフラッシュ32から読み出す。
【0211】
このように、メモリコントローラ31は、不足データの割合が低い場合にのみホスト問い合わせを実行することによって、ホスト2とメモリシステム3との間の帯域幅を無駄に消費することを避けることができる。
【0212】
(第3実施形態)
次に、第3実施形態に係るメモリシステム3について説明する。書き込み処理におけるホスト問い合わせに際して発行される要求は、ホスト2とメモリシステム3との間の帯域幅(以降、CXLインタフェース311の帯域幅と称する)を使用する。そのため、CXLインタフェース311の帯域幅の使用率が高いときに、ホスト問い合わせを実行すると、ホスト2からのリード/要求に基づくリード/ライト処理の性能低下を招き得る。
【0213】
そのため、第3実施形態に係るメモリシステム3においては、CXLインタフェース311の帯域幅の使用率を参照して、ホスト問い合わせを実行するか否かを判定する。
図23は、第3実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャートである。
【0214】
まず、メモリコントローラ31は、ライトバッファ3141のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS601)。
【0215】
メモリコントローラ31は、ステップS601で決定された対象エントリに不足データがあるか否かを判定する(ステップS602)。
【0216】
対象エントリに不足データが無い場合(ステップS602でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS603)。
【0217】
対象エントリに不足データが有る場合(ステップS602でYes)、メモリコントローラ31は、CXLインタフェース311の帯域幅に余裕があるか否かを判定する(ステップS604)。ここで、メモリコントローラ31は、一定時間の間にホスト2からアクセスされた回数を示すアクセス回数が閾値(例えば、第3の閾値と称される)以下であるか否かを判定する。アクセス回数が第3の閾値以下である場合は、メモリコントローラ31は、CXLインタフェース311の帯域幅に余裕があると認識する。アクセス回数は、一定時間の間に、ホスト2から受信されたリード要求の個数とライト要求の個数との総数(以下、リード/ライト要求の個数とも称する)によって表すことができる。つまり、各リード/ライト要求によって転送されるデータのサイズは固定サイズ(ここでは64B)であるため、アクセス回数、つまりリード/ライト要求の個数、のみによって、CXLインタフェース311の帯域幅の使用率を求めることができる。アクセス回数をカウントする手法はCXLインタフェースを用いる場合の一例であり、帯域幅の使用率の算出方法については手法を問わない。例えば、一定時間内にホスト2とメモリシステム3との間で転送されるデータの転送量の合計を閾値と比較することによって、CXLインタフェース311の帯域幅に余裕があるか否かを判定してもよい。
【0218】
CXLインタフェース311の帯域幅に余裕がない場合、つまりアクセス回数が第3の閾値を上回っている場合(ステップS604でNo)、メモリコントローラ31は、ホスト問い合わせを行わずに、不足データをNANDフラッシュ32から読み出す(ステップS605)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0219】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS603)。
【0220】
また、CXLインタフェース311の帯域幅に余裕がある場合、つまりアクセス回数が第3の閾値以下である場合(ステップS604でYes)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS606)。ここで、メモリコントローラ31は、不足データに対応するLAを指定する要求をホスト2に送信する。
【0221】
メモリコントローラ31は、ホストキャッシュ22から読み出された不足データを受信したか否かを判定する(ステップS607)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データを受信する前に、ホスト2から完了応答を受信する。
【0222】
ホストキャッシュ22から不足データを受信しなかった場合(ステップS607でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS605)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0223】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS603)。
【0224】
また、ホストキャッシュ22から不足データを受信した場合(ステップS607でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS608)。これにより、対象エントリに不足データはなくなる。
【0225】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS603)。
【0226】
ここで、CXLインタフェース311の帯域幅の使用率に加えて、ライトバッファ3141の使用率も参照する場合について説明する。
図24は、第3実施形態に係るメモリシステムにおけるライトバッファの使用率の例を示す図である。
図24では、説明を簡単にするために、ライトバッファ3141が有するエントリの個数が4つである場合が図示されている。ここで、ライトバッファ3141の使用率は、ライトバッファ3141に含まれる複数のエントリのうちの使用中のエントリの割合である。
【0227】
図24の(A)は、使用率が75%のライトバッファ3141を示す。
【0228】
1番目のエントリは、使用中のエントリである。1番目のエントリのセクタ0は、有効なデータを格納していない。1番目のエントリのセクタ1は、データ0×33333333を格納している。1番目のエントリのセクタ2は、データ0×22222222を格納している。1番目のエントリのセクタ3は、データ0×11111111を格納している。そのため、1番目のエントリのセクタバリッドは、0b1110に設定されている。
【0229】
2番目のエントリは、使用中のエントリである。2番目のエントリのセクタ0は、データ0×55555555を格納している。2番目のエントリのセクタ1は、有効なデータを格納していない。2番目のエントリのセクタ2は、データ0×44444444を格納している。2番目のエントリのセクタ3は、有効なデータを格納していない。そのため、2番目のエントリのセクタバリッドは、0b0101に設定されている。
【0230】
3番目のエントリは、使用中のエントリである。3番目のエントリのセクタ0は、データ0×66666666を格納している。3番目のエントリのセクタ1は、有効なデータを格納していない。3番目のエントリのセクタ2は、有効なデータを格納していない。3番目のエントリのセクタ3は、有効なデータを格納していない。そのため、3番目のエントリのセクタバリッドは、0b0001に設定されている。
【0231】
4番目のエントリは、空きエントリである。そのため、4番目のエントリのいずれのセクタも、有効なデータを格納していない。
【0232】
このように、
図24の(A)のライトバッファ3141は、4つのエントリのうちの3つのエントリが使用中であるため、使用率が75%である。
【0233】
図24の(B)は、使用率が25%のライトバッファ3141を示す。
【0234】
1番目のエントリは、空きエントリである。そのため、1番目のエントリのいずれのセクタも有効なデータを格納していない。
【0235】
2番目のエントリは、空きエントリである。そのため、2番目のエントリのいずれのセクタも有効なデータを格納していない。
【0236】
3番目のエントリは、使用中のエントリである。3番目のエントリのセクタ0は、データ0×66666666を格納している。3番目のエントリのセクタ1は、有効なデータを格納していない。3番目のエントリのセクタ2は、データ0×88888888を格納している。3番目のエントリのセクタ3は、有効なデータを格納していない。そのため、3番目のエントリのセクタバリッドは、0b0101に設定されている。
【0237】
4番目のエントリは、空きエントリである。そのため、4番目のエントリのいずれのセクタも有効なデータを格納していない。
【0238】
第3実施形態に係るメモリシステム3において、メモリコントローラ31は、CXLインタフェース311の帯域幅に余裕がない場合には、ホスト問い合わせを実行しないが、ライトバッファ3141の使用率が低い場合には、書き込み処理を実行するまでの時間に猶予がある。これは、後続のライト要求に対応する新たなデータを、ライトバッファ3141の空きエントリに格納することができるためである。
【0239】
例えば、メモリコントローラ31は、ライトバッファ3141の使用率が50%以下の場合に、ライトバッファ3141の空きエントリ量に余裕があると判定してもよい。
【0240】
次に、CXLインタフェース311の帯域と、ライトバッファ3141の使用率とを参照する場合の書き込み処理について説明する。
図25は、第3実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の別の例を示すフローチャートである。
【0241】
まず、メモリコントローラ31は、ライトバッファ3141のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS701)。
【0242】
メモリコントローラ31は、ステップS701で決定された対象エントリに不足データがあるか否かを判定する(ステップS702)。
【0243】
対象エントリに不足データが無い場合(ステップS702でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS703)。
【0244】
対象エントリに不足データが有る場合(ステップS702でYes)、メモリコントローラ31は、CXLインタフェース311の帯域幅に余裕があるか否かを判定する(ステップS704)。
【0245】
CXLインタフェース311の帯域に余裕がない場合(ステップS704でNo)、メモリコントローラ31は、ライトバッファ3141の空きエントリ量に余裕があるか否かを判定する(ステップS705)。ここで、メモリコントローラ31は、例えば、ライトバッファ3141の使用率が閾値(第4の閾値と称される)以下であるか否かを判定することによって、ライトバッファ3141の空きエントリ量に余裕があるか否かを判定する。ライトバッファ3141の使用率は、ライトバッファ3141のエントリの総数に対する空きエントリの個数の割合によって表される。
【0246】
ライトバッファ3141の空きエントリ量に余裕がある場合(ステップS705でYes)、メモリコントローラ31は、所定の時間待機した後、再度CXLインタフェース311の帯域幅に余裕があるか否かを判定する(ステップS704)。つまり、メモリコントローラ31は、ライトバッファ3141の空きエントリ量に余裕がある間は、CXLインタフェース311の帯域幅に余裕ができるまでプログラム動作を遅らせる。ライトバッファ3141の空きエントリ量に余裕がある間に、アクセス回数の低下によってCXLインタフェース311の帯域幅に余裕ができた場合には、メモリコントローラ31は、ホスト問い合わせを実行する。
【0247】
すなわち、ライトバッファ3141の空きエントリ量に余裕がない場合(ステップS705でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS706)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0248】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS703)。
【0249】
また、CXLインタフェース311の帯域幅に余裕がある場合(ステップS704でYes)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS707)。ここで、メモリコントローラ31は、不足データに対応するLAを指定する要求をホスト2に送信する。
【0250】
メモリコントローラ31は、ホストキャッシュ22から読み出された不足データを受信したか否かを判定する(ステップS708)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データを受信する前に、ホスト2から完了応答を受信する。
【0251】
ホストキャッシュ22から不足データを受信しない場合(ステップS708でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS706)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0252】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS703)。
【0253】
また、ホストキャッシュ22から不足データを受信した場合(ステップS708でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS709)。これにより、対象エントリに不足データはなくなる。
【0254】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS703)。
【0255】
以上説明したように、第3実施形態に係るメモリシステム3のメモリコントローラ31は、書き込み処理の際に、CXLインタフェース311の帯域幅に余裕があるか否かを判定する。メモリコントローラ31は、一定時間の間のアクセス回数が閾値以下である場合に、不足データに対応するLAを指定する要求をホスト2に送信することによって、不足データをホストキャッシュ22からメモリシステム3に転送するようにホスト2に要求する。また、メモリシステム31は、アクセス回数が閾値を上回っている場合には、ホスト問い合わせを実行しない。
【0256】
これにより、CXLインタフェース311の帯域幅における使用率が高い状態で、ホスト問い合わせが実行されることによって、ホスト2からのリード/ライト要求に基づくリード/ライト処理の性能低下を招くことを回避することができる。
【0257】
また、第3実施形態に係るメモリシステム3のメモリコントローラ31は、アクセス回数が閾値を上回っている場合に、ライトバッファ3141の空きエントリ量に余裕があるか否かを判定する。ライトバッファ3141の空きエントリ量に余裕がある間、つまりライトバッファ3141の使用率が閾値以下である場合には、一定時間待機する。その後、メモリコントローラ31は、再度CXLインタフェース311の帯域幅に余裕があるか否かを判定する。そして、ライトバッファ3141の空きエントリ量に余裕がある間に、アクセス回数の低下によってCXLインタフェース311の帯域幅に余裕ができた場合には、メモリコントローラ31は、ホスト問い合わせを実行する。
【0258】
このように、ライトバッファ3141の使用率に余裕がある間、メモリコントローラ31は、書き込み処理を遅らせることによって、CXLインタフェース311の帯域の使用率が下がることを待つことができる。
【0259】
(第4実施形態)
NANDフラッシュ32から不足データを読み出す場合、ホスト2からのリード/ライト要求に基づいてNANDフラッシュ32に対するデータの読み出しまたは書き込みを行う場合と同様に、メモリコントローラ31とNANDフラッシュ32との間の帯域幅(以下、NANDフラッシュインタフェース316の帯域幅と称する)と、NANDフラッシュ32(NANDフラッシュチップ321)内の処理リソースと、が使用される。以下では、メモリコントローラ31とNANDフラッシュ32との間の帯域幅は、NANDフラッシュインタフェース316の帯域幅と称する。NANDフラッシュチップ321内の処理リソースは、データ書き込み動作、データ読み出し動作およびデータ消去動作に必要なNANDフラッシュチップ321内のリソース、例えば、データバッファ、アドレスデコーダ、センスアンプ、シーケンサのような回路である。
【0260】
ホスト2からのリード/ライト要求に基づくNANDフラッシュ32に対するデータの読み出しまたは書き込みによってNANDフラッシュインタフェースの帯域幅またはNANDフラッシュチップ321内の処理リソースのいずれかに余裕がない状態で、不足データをNANDフラッシュ32から読み出す処理を実行すると、ホスト2からのリード/ライト要求に基づくリード/ライト処理の性能低下を引き起こし得る。一方、NANDフラッシュインタフェース316の帯域幅と、NANDフラッシュチップ321の処理リソースの双方に余裕がある状態でNANDフラッシュ32からの不足データの読み出しを実行しても、ホスト2からのリード/ライト要求に基づくリード/ライト処理の性能に影響を及ぼすことはない。
【0261】
これらのことから、第4実施形態に係るメモリシステム3では、不足データの読み出しに際して、NANDフラッシュインタフェースの帯域幅の余裕度と、NANDフラッシュチップ321の処理リソースの余裕度を参照する。余裕度は、例えば以下の値を用いて、判断できる。
NANDフラッシュチップ321へ発行待ちの要求の個数
NANDフラッシュチップ321へ発行済みの要求のうち、NANDフラッシュチップ321による処理が完了していない要求の個数
ここで、NANDフラッシュチップ321に対する要求は、プログラム要求(NANDプログラムコマンド)、リード要求(NANDリードコマンド)、等を含む。
【0262】
NANDフラッシュチップ321へ発行待ちの要求の個数、つまりNANDフラッシュインタフェース316に保持されているNANDフラッシュ32への要求の個数、が閾値以下である場合、NANDフラッシュインタフェース316の帯域幅に余裕があると判定できる。また、NANDフラッシュチップ321へ発行済みの要求のうち、NANDフラッシュチップ321による処理が完了していない要求の個数、つまりNANDフラッシュ32において処理中の要求の個数、が閾値以下である場合、NANDフラッシュチップ321の処理リソースに余裕があると判定できる。
【0263】
図26は、第4実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャートである。
【0264】
まず、メモリコントローラ31は、ライトバッファ3141のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS801)。
【0265】
メモリコントローラ31は、ステップS801で決定された対象エントリに不足データがあるか否かを判定する(ステップS802)。
【0266】
対象エントリに不足データが無い場合(ステップS802でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS803)。
【0267】
対象エントリに不足データが有る場合(ステップS802でYes)、メモリコントローラ31は、NANDフラッシュインタフェース316の帯域幅とNANDフラッシュチップ321の処理リソースとの双方に余裕があるか否かを判定する(ステップS804)。ここで、メモリコントローラ31は、NANDフラッシュインタフェース316が保持しているNANDフラッシュ32に対する要求(プログラム要求、リード要求)の個数が閾値(例えば、第5の閾値と称される)未満である場合、NANDフラッシュインタフェース316の帯域幅に余裕があると判定する。また、メモリコントローラ31は、NANDフラッシュ32において処理中の要求が閾値(例えば、第6の閾値と称される)未満である場合、NANDフラッシュチップ321の処理リソースに余裕があると判定する。NANDフラッシュインタフェース316の帯域幅またはNANDフラッシュチップ321の処理リソースのいずれかに余裕がない場合、メモリコントローラ31は、ステップS804でNoと判定する。また、NANDフラッシュインタフェース316の帯域幅、およびNANDフラッシュチップ321の処理リソースの双方に余裕がある場合、メモリコントローラ31は、ステップS804でYesと判定する。
【0268】
NANDフラッシュインタフェース316の帯域幅およびNANDフラッシュチップ321の処理リソースの双方に余裕がある場合(ステップS804でYes)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS805)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0269】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS803)。
【0270】
また、NANDフラッシュインタフェース316の帯域幅、またはNANDフラッシュチップ321の処理リソースのいずれかに余裕がない場合(ステップS804でNo)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS806)。ここで、メモリコントローラ31は、不足データに対応するLAを指定する要求をホスト2に送信する。
【0271】
メモリコントローラ31は、ホストキャッシュ22から読み出された不足データを受信したか否かを判定する(ステップS807)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データを受信する前に、ホスト2から完了応答を受信する。
【0272】
ホストキャッシュ22から不足データを受信しなかった場合(ステップS807でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS805)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0273】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS803)。
【0274】
また、ホストキャッシュ22から不足データを受信した場合(ステップS807でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS808)。これにより、対象エントリに不足データはなくなる。
【0275】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS803)。
【0276】
以上説明したように、第4実施形態に係るメモリシステム3のメモリコントローラ31は、書き込み処理の際に、NANDフラッシュインタフェース316の帯域幅とNANDフラッシュチップ321の処理リソースの双方に余裕があるか否かを参照する。メモリコントローラ31は、NANDフラッシュインタフェース316の帯域幅とNANDフラッシュチップ321の処理リソースの双方に余裕がある場合には、ホスト問い合わせを実行せずに、不足データをNANDフラッシュ32から読み出す。また、NANDフラッシュインタフェース316の帯域幅またはNANDフラッシュチップ321の処理リソースのいずれかに余裕がない場合には、メモリコントローラ31は、ホスト問い合わせを実行する。
【0277】
NANDフラッシュインタフェース316の帯域幅とNANDフラッシュチップ321の処理リソースの双方に余裕がある場合には、NANDフラッシュ32から不足データを読み出しても、メモリシステム3の処理性能に対して影響を及ぼさない。そのため、メモリコントローラ31は、メモリシステム3の状況に応じて、ホスト問い合わせを実行するか否かを判断することができる。
【0278】
(第5実施形態)
ホスト2において実行されるアプリケーションプログラムは、メモリシステム3上のデータを読み出し、読み出したデータに対する演算を実行し、演算が実行されたデータをメモリシステム3に書き戻す、という動作を行う場合が多い。つまり、ホストキャッシュ22上で書き替えられるデータは、メモリシステム3から事前にリードされている可能性が高い。
【0279】
このことから、第5実施形態に係るメモリシステム3のメモリコントローラ31は、リードされたデータに対応する論理アドレスを記憶する。そして、不足データに対応する論理アドレスが、メモリコントローラ31が記憶している論理アドレスと一致する場合に、ホスト問い合わせを実行する。
【0280】
まず、第5実施形態に係るメモリシステム3の構成について説明する。
図27は、第5実施形態に係るメモリシステムに含まれるメモリコントローラおよび不揮発性メモリの各々の構成例を示すブロック図である。ここでは、
図2を参照して説明した第1実施形態に係るメモリシステム3と異なる箇所に注目して説明する。
【0281】
リードコントローラ312は、リード履歴テーブル3121を含む。リード履歴テーブル3121は、ホスト2から受信されるリード要求それぞれに基づいてNANDフラッシュ32から読み出されたデータの各々に対応する論理アドレスを保持するテーブルである。リード履歴テーブル3121は、ホスト2からのリード要求それぞれに基づいてNANDフラッシュ32から最近読み出された所定の個数の論理アドレスを保持する。リード履歴テーブル3121が保持することができる論理アドレスの個数は、例えば、ホストキャッシュ22のサイズに基づいて決定され得る。ホストキャッシュ22の容量が128MBである場合には、ホストキャッシュ22の容量(128MB)をアクセス粒度(64B)で除した商である2M個(=128MB/64B)の論理アドレスを保持することで、ホストキャッシュ22が不足データを保持しているかどうかを高い確率で推定することができる。
【0282】
リードコントローラ312は、ホスト2から受信したリード要求それぞれに基づいてNANDフラッシュ32から読み出されたデータ(64Bデータ)の各々に対応するLAをリード履歴テーブル3121に格納する。また、ライトコントローラ314が不足データに対応する論理アドレス特定すると、ホストキャッシュ問い合わせ部3142は、不足データに対応する論理アドレスがリード履歴テーブル3121に格納されているか否かを判定する。リード履歴テーブルには例えばCounting Bloom Filter
などの手法が使用され得る。リード履歴テーブルに格納する際は、論理アドレスをハッシュ化して対応するメモリ位置に格納する。不足データに対応する論理アドレスをリード履歴テーブル3121から探索する際には、論理アドレスをハッシュ化して対応するメモリ位置を参照し、有効データであればヒットと判断する。ホストキャッシュへの問合せ判断の必要が生じる度に、前述のとおり2M個の論理アドレスと逐次比較していくのは計算量の観点から非現実的である。このためBloom Filterのような偽陽性を許容するが計算量を削減する手法が必要となる。Bloom Filterでは偽陽性が許容されているが、その場合でも、ホストキャッシュ22においてヒットミスが生じるのみである。つまり、ホスト問い合わせは、ホストキャッシュ22が不足データを保持していないケースを許容しているので、Bloom Filterの偽陽性による問題は生じない。
【0283】
次に、リード履歴テーブル3121を参照する書き込み処理について説明する。
図28は、第5実施形態に係るメモリシステムにおいて実行される書き込み処理の手順の例を示すフローチャートである。
【0284】
まず、メモリコントローラ31は、ライトバッファ3141のエントリのうち、NANDフラッシュ32にプログラムすべきデータを格納している対象エントリを決定する(ステップS901)。
【0285】
メモリコントローラ31は、ステップS901で決定された対象エントリに不足データがあるか否かを判定する(ステップS902)。
【0286】
対象エントリに不足データが無い場合(ステップS902でNo)、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS903)。
【0287】
対象エントリに不足データが有る場合(ステップS902でYes)、メモリコントローラ31は、不足データに対応する論理アドレスがリード履歴テーブル3121に格納されているか否かを判定する(ステップS904)。
【0288】
不足データに対応する論理アドレスがリード履歴テーブル3121に格納されていない場合(ステップS904でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS905)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0289】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS903)。
【0290】
また、不足データに対応する論理アドレスがリード履歴テーブル3121に格納されている場合(ステップS904でYes)、メモリコントローラ31は、不足データをホストキャッシュ22に要求する(ステップS906)。ここで、メモリコントローラ31は、不足データに対応する論理アドレスを指定する要求をホスト2に送信する。
【0291】
メモリコントローラ31は、ホストキャッシュ22から読み出された不足データを受信したか否かを判定する(ステップS907)。換言すれば、ホストキャッシュ22に不足データが格納されていた場合、メモリコントローラ31は、不足データをホスト2から受信することができる。また、ホストキャッシュ22に不足データが格納されていない場合、メモリコントローラ31は、不足データをホスト2から受信することができない。この場合、メモリコントローラ31は、不足データを受信する前に、ホスト2から完了応答を受信する。
【0292】
ホストキャッシュ22から不足データを受信しない場合(ステップS907でNo)、メモリコントローラ31は、不足データをNANDフラッシュ32から読み出す(ステップS805)。メモリコントローラ31は、読み出した不足データを対象エントリに格納する。これにより、対象エントリに不足データはなくなる。
【0293】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS903)。
【0294】
また、ホストキャッシュ22から不足データを受信した場合(ステップS907でYes)、メモリコントローラ31は、受信した不足データを対象エントリに格納する(ステップS908)。これにより、対象エントリに不足データはなくなる。
【0295】
そして、メモリコントローラ31は、対象エントリに格納されているデータをNANDフラッシュ32へプログラムする(ステップS903)。
【0296】
以上説明したように、第5実施形態に係るメモリシステム3のメモリコントローラ31は、ホスト2から受信されたリードコマンドによって指定された論理アドレスを、リード履歴テーブル3121を使用して記憶する。そして、メモリコントローラ31は、不足データに対応する論理アドレスがリード履歴テーブル3121に記憶されているか否かを判定する。不足データに対応する論理アドレスがリード履歴テーブル3121に記憶されている場合に、メモリコントローラ31は、ホスト問い合わせを実行する。
【0297】
これにより、メモリコントローラ31は、ホストキャッシュ22に不足データが格納されている可能性が高い場合に、ホスト問い合わせを実行することができる。また、メモリコントローラ31は、ホストキャッシュ22に不足データが格納されている可能性が低い場合に、ホスト問い合わせを実行することを避ける。メモリコントローラ31は、ホスト問い合わせによって不足データを取得することができずに、ホスト問い合わせが余計な動作となり、書き込み処理に要する時間が延びることを避けることができる。
【0298】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0299】
1…情報処理システム、2…ホスト、3…メモリシステム、4…メモリバス、21-1…CPU、21-2…CPU、22…キャッシュ、23…ハードウェアインタフェース、24…DRAM、31…メモリコントローラ、32…不揮発性メモリ、311…CXLインタフェース、312…リードコントローラ、313…ルックアップテーブル、314…ライトコントローラ、315…GCコントローラ、316…NANDフラッシュインタフェース、3141…ライトバッファ、3142…ホストキャッシュ問い合わせ部、3151…空きページプール。