(57)【要約】      （修正有）【課題】キャッシュ制御のオーバヘッドを削減することができるメモリ装置を提供する。【解決手段】メモリ装置は、キャッシュメモリ１２内のキャッシュデータ領域１２１を仮想的にＭ（Ｍは２以上の整数）世代分拡張した拡張アドレス空間を定義し、拡張アドレス空間を巡回するポインタが示す位置を最新としてキャッシュデータ領域の物理的なサイズに相当する範囲を拡張アドレス空間内における有効領域とする。また、Ｎ（Ｎは２以上の整数）分割したリージョンデータ毎にデータをキャッシュデータ領域に格納し、かつ、リージョンデータと一対に設けられるＮ個のエントリを有し、Ｍ個の世代の中のいずれかの世代を示す世代番号とキャッシュデータ領域上の位置に対応するアドレスとで構成される拡張アドレス空間上の位置を示す拡張アドレスと、リージョンデータのサイズとを保持する拡張アドレステーブル１００Ａを用いて、リージョンデータの格納位置を管理する。【選択図】図３
2020144534.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１メモリと、
第２メモリと、
前記第１メモリおよび前記第２メモリを制御するコントローラと、
を具備し、
前記コントローラは、前記第１メモリから読み出され、かつ、前記第１メモリへ書き込まれる第１データの一部を前記第２メモリに一時的に格納するキャッシュ制御部を具備し、
前記キャッシュ制御部は、
前記第１データの一部を格納するために前記第２メモリ上に確保されるキャッシュデータ領域を仮想的にＭ（Ｍは２以上の整数）世代分拡張した拡張アドレス空間を定義し、前記拡張アドレス空間を巡回するポインタが示す位置を最新として、前記キャッシュデータ領域の物理的なサイズに相当する範囲を前記拡張アドレス空間内における有効領域とし、
前記第１データをＮ（Ｎは２以上の整数）分割したリージョンデータ毎に前記第１データを前記キャッシュデータ領域に格納し、かつ、前記リージョンデータと一対に設けられるＮ個のエントリを有し、前記Ｍ世代の中のいずれかの世代を示す世代番号と前記キャッシュデータ領域上の位置に対応するアドレスとで構成される前記拡張アドレス空間上の位置を示す拡張アドレスと、前記リージョンデータのサイズとを保持する拡張アドレステーブルを用いて、前記リージョンデータの格納位置を管理し、
前記ポインタが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納し、前記拡張アドレス空間の位置を示す拡張アドレスと前記リージョンデータのサイズとを前記拡張アドレステーブルの前記リージョンデータに対応するエントリに格納し、前記リージョンデータのサイズ分だけ前記ポインタを進めるリージョンデータ追加処理を実行し、
前記拡張アドレステーブルの対応するエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが前記拡張アドレス空間内における有効領域を示している場合、参照対象のリージョンデータは前記キャッシュデータ領域に存在すると判定し、そのエントリが無効状態である場合、または、そのエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが前記拡張アドレス空間内における無効領域を示している場合、参照対象のリージョンデータは前記キャッシュデータ領域には存在しないと判定する参照処理を実行し、
前記ポインタが所定量進むごとに前記拡張アドレステーブルのＮ個のエントリの中から所定数のエントリが巡回的に選択されて実行される処理であって、各エントリに格納される拡張アドレスが前記拡張アドレス空間内における無効領域を示していないかを判定し、無効領域を示しているエントリを無効状態に設定するクリーンナップ処理を実行する、
メモリ装置。
【請求項２】
前記第１データは、前記第１メモリの論理アドレス空間と物理アドレス空間とを対応づけるアドレス変換テーブルである、
請求項１に記載のメモリ装置。
【請求項３】
前記キャッシュ制御部は、
格納されている拡張アドレスが前記拡張アドレス空間内における有効領域を示しているエントリに対応するリージョンデータが更新された場合、更新前に当該エントリに格納されていた拡張アドレスとサイズとを、前記Ｎよりも小さい数のエントリを有するフラグメントテーブルの空きエントリに格納し、
前記キャッシュデータ領域に格納しようとしているリージョンデータのサイズ以上のサイズが格納されている前記フラグメントテーブルのエントリが存在する場合、そのエントリに格納される拡張アドレスが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納し、前記拡張アドレス空間の位置を示す拡張アドレスと前記リージョンデータのサイズとを前記拡張アドレステーブルの前記リージョンデータに対応するエントリに格納する、
請求項１または２に記載のメモリ装置。
【請求項４】
前記キャッシュ制御部は、前記フラグメントテーブルのエントリに格納される拡張アドレスが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納した場合、そのエントリに格納される拡張アドレスを前記リージョンデータのサイズ分だけ加算した値に変更し、かつ、そのエントリに格納されるサイズを前記リージョンデータのサイズ分だけ減算した値に変更する請求項３に記載のメモリ装置。
【請求項５】
前記キャッシュ制御部は、前記ポインタの移動によって前記拡張アドレス空間内における無効領域を示すこととなった拡張アドレスが格納されている前記フラグメントテーブルのエントリが存在する場合、そのエントリを削除する請求項３または４に記載のメモリ装置。
【請求項６】
前記リージョンデータは、可変長データである請求項１から５のいずれか１項に記載のメモリ装置。
【請求項７】
前記リージョンデータは、圧縮されて前記キャッシュデータ領域に格納される請求項１から５のいずれか１項に記載のメモリ装置。
【請求項８】
不揮発性の第１メモリと、第２メモリとを具備するメモリ装置におけるキャッシュ制御方法であって、
前記第１メモリから読み出され、かつ、前記第１メモリへ書き込まれる第１データの一部を一時的に格納するために前記第２メモリ上に確保されるキャッシュデータ領域を仮想的にＭ（Ｍは２以上の整数）世代分拡張した拡張アドレス空間を定義し、前記拡張アドレス空間を巡回するポインタが示す位置を最新として前記キャッシュデータ領域の物理的なサイズに相当する範囲を前記拡張アドレス空間内における有効領域とすることと、
前記第１データをＮ（Ｎは２以上の整数）分割したリージョンデータ毎に前記第１データを前記キャッシュデータ領域に格納し、かつ、前記リージョンデータと一対に設けられるＮ個のエントリを有し、前記Ｍ世代の中のいずれかの世代を示す世代番号と前記キャッシュデータ領域上の位置に対応するアドレスとで構成される前記拡張アドレス空間上の位置を示す拡張アドレスと、前記リージョンデータのサイズとを保持する拡張アドレステーブルを用いて、前記リージョンデータの格納位置を管理することと、
前記ポインタが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納し、前記拡張アドレス空間の位置を示す拡張アドレスと前記リージョンデータのサイズとを前記拡張アドレステーブルの前記リージョンデータに対応するエントリに格納し、前記リージョンデータのサイズ分だけ前記ポインタを進めるリージョンデータ追加処理を実行することと、
前記拡張アドレステーブルの対応するエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが前記拡張アドレス空間内における有効領域を示している場合、参照対象のリージョンデータは前記キャッシュデータ領域に存在すると判定し、そのエントリが無効状態である場合、または、そのエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが前記拡張アドレス空間内における無効領域を示している場合、参照対象のリージョンデータは前記キャッシュデータ領域には存在しないと判定する参照処理を実行することと、
前記ポインタが所定量進むごとに前記拡張アドレステーブルのＮ個のエントリの中から所定数のエントリが巡回的に選択されて実行される処理であって、各エントリに格納される拡張アドレスが前記拡張アドレス空間内における無効領域を示していないかを判定し、無効領域を示しているエントリを無効状態に設定するクリーンナップ処理を実行することと、
を具備するキャッシュ制御方法。
【請求項９】
格納されている拡張アドレスが前記拡張アドレス空間内における有効領域を示しているエントリに対応するリージョンデータが更新された場合、更新前に当該エントリに格納されていた拡張アドレスとサイズとを、前記Ｎよりも小さい数のエントリを有するフラグメントテーブルの空きエントリに格納することと、
前記キャッシュデータ領域に格納しようとしているリージョンデータのサイズ以上のサイズが格納されている前記フラグメントテーブルのエントリが存在する場合、そのエントリに格納される拡張アドレスが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納し、前記拡張アドレス空間の位置を示す拡張アドレスと前記リージョンデータのサイズとを前記拡張アドレステーブルの前記リージョンデータに対応するエントリに格納することと、
をさらに具備する請求項８に記載のキャッシュ制御方法。
【請求項１０】
前記フラグメントテーブルのエントリに格納される拡張アドレスが示す前記拡張アドレス空間の位置に対応する前記キャッシュデータ領域上の位置に前記リージョンデータを格納した場合、そのエントリに格納される拡張アドレスを前記リージョンデータのサイズ分だけ加算した値に変更し、かつ、そのエントリに格納されるサイズを前記リージョンデータのサイズ分だけ減算した値に変更することをさらに具備する請求項９に記載のキャッシュ制御方法。
【請求項１１】
前記ポインタの移動によって前記拡張アドレス空間内における無効領域を示すこととなった拡張アドレスが格納されている前記フラグメントテーブルのエントリが存在する場合、そのエントリを削除することをさらに具備する請求項９または１０に記載のキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリ装置およびキャッシュ制御方法に関する。
【背景技術】
【０００２】
たとえばＳＳＤ（Solid State Drive）などのメモリ装置では、たとえばＮＡＮＤフラッシュメモリから読み出され、かつ、ＮＡＮＤフラッシュメモリへ書き込まれるデータの一部を、たとえばＤＲＡＭに一時的に格納するといったキャッシングを行っている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００４／０１２８４７０号明細書
【特許文献２】特開２０１８−０１８３６３号公報
【特許文献３】米国特許出願公開第２０１２／０２１５９７０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
キャッシュ用のデータ領域のサイズを抑えるための手法が種々考えられている。一方で、キャッシュ制御のオーバヘッドは、メモリ装置のレイテンシを悪化させる。
本発明が解決しようとする課題は、キャッシュ制御のオーバヘッドを削減することができるメモリ装置およびキャッシュ制御方法を提供することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、メモリ装置は、不揮発性の第１メモリと、第２メモリと、第１メモリおよび第２メモリを制御するコントローラとを具備する。コントローラは、第１メモリから読み出され、かつ、第１メモリへ書き込まれる第１データの一部を第２メモリに一時的に格納するキャッシュ制御部を具備する。キャッシュ制御部は、第１データの一部を格納するために第２メモリ上に確保されるキャッシュデータ領域を仮想的にＭ（Ｍは２以上の整数）世代分拡張した拡張アドレス空間を定義し、拡張アドレス空間を巡回するポインタが示す位置を最新としてキャッシュデータ領域の物理的なサイズに相当する範囲を拡張アドレス空間内における有効領域とする。キャッシュ制御部は、第１データをＮ（Ｎは２以上の整数）分割したリージョンデータ毎に第１データをキャッシュデータ領域に格納し、かつ、リージョンデータと一対に設けられるＮ個のエントリを有し、Ｍ世代の中のいずれかの世代を示す世代番号とキャッシュデータ領域上の位置に対応するアドレスとで構成される拡張アドレス空間上の位置を示す拡張アドレスと、リージョンデータのサイズとを保持する拡張アドレステーブルを用いて、リージョンデータの格納位置を管理する。キャッシュ制御部は、ポインタが示す拡張アドレス空間の位置に対応するキャッシュデータ領域上の位置にリージョンデータを格納し、拡張アドレス空間の位置を示す拡張アドレスとリージョンデータのサイズとを拡張アドレステーブルのリージョンデータに対応するエントリに格納し、リージョンデータのサイズ分だけポインタを進めるリージョンデータ追加処理を実行する。キャッシュ制御部は、拡張アドレステーブルの対応するエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが拡張アドレス空間内における有効領域を示している場合、参照対象のリージョンデータはキャッシュデータ領域に存在すると判定し、そのエントリが無効状態である場合、または、そのエントリが有効状態であり、かつ、そのエントリに格納される拡張アドレスが無効領域を示している場合、参照対象のリージョンデータはキャッシュデータ領域には存在しないと判定する参照処理を実行する。キャッシュ制御部は、ポインタが所定量進むごとに拡張アドレステーブルのＮ個のエントリの中から所定数のエントリが巡回的に選択されて実行される処理であって、各エントリに格納される拡張アドレスが拡張アドレス空間内における無効領域を示していないかを判定し、無効領域を示しているエントリを無効状態に設定するクリーンナップ処理を実行する。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態のメモリ装置の一構成例および一接続例を示す図。
【図２】論物（論理アドレス−物理アドレス）変換テーブルと、論物変換テーブルによる論理アドレス空間と物理アドレス空間との対応づけとを示す概念図。
【図３】第１実施形態のメモリ装置において論物変換テーブルのキャッシングのためにキャッシュメモリ上で管理されるデータの構造を示す図。
【図４】第１実施形態のメモリ装置における拡張アドレスの概念および当該拡張アドレスを用いたキャッシュ制御を説明するための図。
【図５】第１実施形態のメモリ装置におけるリージョンデータ追加処理の流れを示すフローチャート。
【図６】第１実施形態のメモリ装置における参照処理の流れを示すフローチャート。
【図７】第１実施形態のメモリ装置におけるクリーンナップ処理を説明するための図。
【図８】第１実施形態のメモリ装置におけるクリーンナップ処理の流れを示すフローチャート。
【図９】第２実施形態のメモリ装置が解決する、第１実施形態のメモリ装置１に残存する課題を説明するための図。
【図１０】第２実施形態のメモリ装置におけるリージョンデータ追加処理の流れを示すフローチャート。
【発明を実施するための形態】
【０００７】
（第１実施形態）
まず、第１実施形態について説明する。
図１は、本実施形態のメモリ装置１の一構成例および一接続例を示す図である。
メモリ装置１は、たとえばＰＣＩｅ（登録商標）などのインタフェースを介してホスト２と接続される。メモリ装置１は、ホスト２からコマンドを受信し、そのコマンドに対応する処理を実行して、その処理結果をホスト２へ送信する。メモリ装置１が受信するコマンドには、データの書き込みを要求するライトコマンドと、データの読み出しを要求するリードコマンドとが少なくとも存在する。
【０００８】
メモリ装置１は、たとえばＳｏＣ（System on a Chip）などとして構成されるコントローラ１１と、たとえばＤＲＡＭなどであるキャッシュメモリ１２と、たとえばＮＡＮＤ型フラッシュメモリなどであるストレージ１３とを有する。コントローラ１１は、キャッシュメモリ１２をデータの一時的な格納領域として利用しながらストレージ１３へのデータの書き込み処理およびストレージ１３からのデータの読み出し処理を実行する。コントローラ１１は、論物（論理アドレス−物理アドレス）変換テーブルキャッシュ制御部１１１を有する。論物変換テーブルキャッシュ制御部１１１は、たとえばコントローラ１１に内蔵されるプロセッサがたとえばコントローラ１１に内蔵されるメモリに格納されるプログラムを実行することによって実現されるものであってもよい。あるいは、論物変換テーブルキャッシュ制御部１１１は、電気回路として実現されてもよい。つまり、論物変換テーブルキャッシュ制御部１１１は、ソフトウェアによっても実現し得るし、ハードウェアによっても実現し得る。論物変換テーブルキャッシュ制御部１１１については後述する。
【０００９】
メモリ装置１に対してライトコマンドやリードコマンドを発行するホスト２は、ストレージ１３の領域上の位置を、ストレージ１３の領域が仮想的にマッピングされる仮想領域上の位置を表す論理アドレスで指定する。コントローラ１１は、ホスト２が指定する論理アドレスと、論理アドレスに対応するデータがストレージ１３の領域上で保存される位置を表す物理アドレスとを管理する。論理アドレスで表される領域は論理アドレス空間などと称され、一方、物理アドレスで表される領域は物理アドレス空間などと称される。コントローラ１１の制御の下、論理アドレス空間と物理アドレス空間とが対応づけられることによって、ホスト２は、たとえばライトコマンドによってメモリ装置１に対してデータの書き込みを要求する場合、メモリ装置１がそのデータをストレージ１３の領域上のどの位置に書き込むかを意識する必要がない。同様に、たとえばリードコマンドによってメモリ装置１に対してデータの読み出しを要求する場合においても、ホスト２は、このデータがストレージ１３の領域上のどの位置に保存されているかを意識する必要がない。つまり、ホスト２は、たとえばメモリ装置１によって提供される記憶領域がどのように構成されているか等を意識する必要がない。
【００１０】
コントローラ１１は、論理アドレス空間と物理アドレス空間とを対応づけるために、より具体的には、論理アドレスと物理アドレスとの２つのアドレスを管理するために、論理アドレスを物理アドレスへ変換し、また、物理アドレスを論理アドレスへ変換するための論物変換テーブルを作成する。図２は、論物変換テーブル１００と、論物変換テーブル１００による論理アドレス空間１１０と物理アドレス空間１２０との対応づけとを示す概念図である。図２に示すように、論物変換テーブル１００は、論理アドレスと物理アドレスとの対応関係を保持する。図２の例でいうと、ストレージ１３の領域は４ＫByte単位に分割されて各々アドレスが割り当てられ、論理アドレス空間１１０側から物理アドレス空間１２０側へ引かれる矢印は、その矢印の始端の位置の論理アドレスと終端の位置の物理アドレスとが対応づけられていることを示し、論物変換テーブル１００には、これら２つのアドレスの対応づけが保持される。コントローラ１１は、この論物変換テーブル１００を用いて、論理アドレス−物理アドレス間の変換を行う。
【００１１】
コントローラ１１は、論物変換テーブル１００をストレージ１３に格納する。また、コントローラ１１は、論物変換テーブル１００の一部をたとえばキャッシュメモリ１２に一時的に格納するキャッシングを実施する。論物変換テーブル１００のキャッシングに用いる領域は、キャッシュメモリ１２に限らず、たとえばコントローラ１１に内蔵されるメモリなどであってもよい。以下、論物変換テーブル１００のキャッシングに用いる領域を、単に、キャッシュと称することがある。論物変換テーブルキャッシュ制御部１１１は、この論物変換テーブル１００のキャッシングを制御するモジュールである。なお、ここでは、キャッシュ上の論物変換テーブル１００の内容とストレージ１３上の論物変換テーブル１００の内容とは一致していることを想定する。キャッシュされている論物変換テーブル１００の一部の内容が変更される場合、ストレージ１３上の論物変換テーブル１００が更新されて、更新後の当該論物変換テーブル１００の一部が改めてキャッシュ上に格納される。
【００１２】
論物変換テーブル１００は、ストレージ１３の大容量化に比例してテーブルサイズが大きくなる傾向がある。ストレージ１３の大容量化に伴い、論物変換テーブル１００のテーブルサイズが大きくなり、論物変換テーブル１００をキャッシングするためのキャッシュメモリ１２のサイズが大きくなると、メモリ装置１の消費電力や価格が上がってしまうという問題が生じる。この問題を解決する方法として、たとえば論物変換テーブル１００を細かく分割したリージョン単位でキャッシュメモリ１２にキャッシュする方式が考えられる。さらに、キャッシュを圧縮して管理する方法も考えられる。しかし、圧縮によってリージョンデータは可変長になるので、一般に使われる固定長キャッシュ制御とは異なる制御が必要になる。さらに、メモリ装置１には短い応答時間が求められるので、キャッシュ制御のオーバヘッドは常に少ないことが望ましい。
【００１３】
そこで、論物変換テーブルキャッシュ制御部１１１は、キャッシュ制御のオーバヘッドを削減する仕組みを備えたものであり、以下、この点について詳述する。
なお、ここでは、論物変換テーブル１００のキャッシングを一例としてキャッシュ制御の説明を行うが、ここで説明するキャッシュ制御の手法は、論物変換テーブルに限定されず、様々なデータのキャッシングに適用することが可能である。このキャッシュ制御の手法は、特に、可変長データのキャッシングに好適である。
【００１４】
図３は、論物変換テーブルキャッシュ制御部１１１が論物変換テーブル１００のキャッシングのためにキャッシュメモリ１２上で管理するデータの構造を示す図である。なお、図３に示すデータの構成は、論物変換テーブルキャッシュ制御部１１１が、論物変換テーブル１００をＮ個のリージョンデータに分割してキャッシュ管理することを想定した場合の例である。各リージョンデータは、論理アドレスと物理アドレスとの対応関係をＭ個分ずつ含んでいる。つまり、論物変換テーブル１００は、Ｎ×Ｍ個の論理アドレスと、Ｎ×Ｍ個の物理アドレスとの対応関係を保持している。
【００１５】
図３に示すように、論物変換テーブルキャッシュ制御部１１１は、拡張アドレステーブル１００Ａと、キャッシュデータ領域１２１とを、キャッシュメモリ１２上で管理する。
キャッシュデータ領域１２１には、論物変換テーブル１００がＮ個に分割された各リージョンデータが、キャッシュに追加された順に書き込まれる。リージョンデータが書き込まれたキャッシュデータ領域１２１上の位置は、拡張アドレステーブル１００Ａによって管理される。
【００１６】
拡張アドレステーブル１００Ａは、リージョン数、つまりリージョンデータの数と同数のＮ個のエントリで構成され、各エントリは、対応するリージョンデータの拡張アドレスとサイズの情報を持つ。なお、リージョンデータは可変長であっても良い。
図４は、本実施形態のメモリ装置１における拡張アドレスの概念および当該拡張アドレスを用いたキャッシュ制御を説明するための図である。
【００１７】
拡張アドレスは、キャッシュメモリ１２の領域（キャッシュデータ領域１２１）上の位置に対応するアドレスと、その上位ビット側に連接した世代番号とで構成される。図４において符号１３０で示される拡張アドレス空間の１世代分のサイズが、物理的にキャッシュメモリ１２に割り当てられたキャッシュデータ領域１２１のサイズになる。つまり、拡張アドレス空間１３０は、キャッシュデータ領域１２１のアドレスについて世代番号を拡張した仮想的なキャッシュデータ領域である。
【００１８】
本実施形態のメモリ装置１におけるキャッシュ制御では、拡張アドレス空間１３０を巡回するライトポインタを使って、リージョンデータの書き込み位置を制御する。拡張アドレス空間１３０上におけるライトポインタの巡回についてより詳しく説明すると、ライトポインタは、ある世代においてキャッシュデータ領域１２１の先頭アドレスから最終アドレス方向へと移動し、最終アドレスに到達したら、次の世代（世代番号：＋１）の先頭アドレスへ移動する。また、ライトポインタは、最終の世代（世代番号＝ｍａｘ）の最終アドレスに到達したら、先頭の世代（世代番号＝０）の先頭アドレスへ移動する。
【００１９】
また、本実施形態のメモリ装置１におけるキャッシュ制御では、この拡張アドレス空間１３０の全領域のうち、図４に示すように、ライトポインタが指す位置を最新として、キャッシュデータ領域１２１の物理的なサイズに相当する範囲が有効領域になるものとする（符号ａ１で示されるハッチングの施された、世代番号＝４の後半部分と、世代番号＝５の前半部分）。
【００２０】
次に、論物変換テーブルキャッシュ制御部１１１によって実行される、本実施形態のメモリ装置１における（１）リージョンデータ追加処理、（２）参照処理および（３）クリーンナップ処理について説明する。
（１）リージョンデータ追加処理
まず、図４と併せて図５を参照して、リージョンデータ追加処理について説明する。
【００２１】
論物変換テーブルキャッシュ制御部１１１は、キャッシュデータ領域１２１に追加するリージョンデータのサイズ分だけ、ライトポインタを加算する（ステップＡ１）。リージョンデータを圧縮してキャッシュに追加する場合は、あらかじめリージョンデータを圧縮して、圧縮後のリージョンデータのサイズをライトポインタに加算する。リージョンデータを圧縮してキャッシュに追加する場合、仮に、圧縮前のリージョンデータが固定長の場合であっても、キャッシュ上のリージョンデータは可変長となる。
【００２２】
次に、論物変換テーブルキャッシュ制御部１１１は、ステップＡ１での加算前にライトポインタが指していた位置にリージョンデータをライトする（ステップＡ２）。次に、論物変換テーブルキャッシュ制御部１１１は、拡張アドレステーブル１００Ａの該当エントリに、ライトしたリージョンデータの拡張アドレス（加算前のライトポインタの値）とサイズを格納する（ステップＡ３）。
【００２３】
このリージョンデータ追加処理では、ライトポインタを動かすので、拡張アドレス空間１３０上の有効領域ａ１がスライドする。そのため、有効領域ａ１がスライドする前に追加されたリージョンのうち、どれかが無効領域に入る可能性がある。
（２）参照処理
次に、図４と併せて図６を参照して、参照処理について説明する。
【００２４】
論物変換テーブルキャッシュ制御部１１１は、拡張アドレステーブル１００Ａから該当のエントリを読み出す（ステップＢ１）。読み出したエントリが指す位置が無効領域の場合（ステップＢ２：ＹＥＳ）、論物変換テーブルキャッシュ制御部１１１は、この参照処理はmiss（キャッシュには指定したリージョンデータがない）と判定する。なお、ステップＢ２の処理は必須ではないが、実施することで、missの判定を早く確定させることができる。
【００２５】
読み出したエントリが指す位置が有効領域ａ１の場合（ステップＢ２：ＮＯ）、論物変換テーブルキャッシュ制御部１１１は、エントリが指す位置からリージョンデータをリードする（ステップＢ３）。リードした後、論物変換テーブルキャッシュ制御部１１１は、エントリが指す位置（拡張アドレス）が無効領域に入っているかどうかを再度判定する（ステップＢ４）。無効領域に入っている場合（ステップＢ４：ＹＥＳ）、論物変換テーブルキャッシュ制御部１１１は、missと判定し、一方、有効領域ａ１の場合（ステップＢ４：ＮＯ）、hit（キャッシュに指定したリージョンデータがある）と判定する。
【００２６】
ステップＢ３の後にステップＢ４の判定処理を行う理由は、参照処理とリージョンデータ追加処理とを並列実行する場合に一貫性を維持するためである。つまり、リージョンデータを読み出している間に、ライトポインタが進んで有効領域ａ１がスライドする可能性があるので、リードした後でも有効領域ａ１に含まれている場合に限りhitと判定することで一貫性を保つ。論物変換テーブルキャッシュ制御部１１１は、参照処理とリージョンデータ追加処理とを並列実行しない場合は、ステップＢ３の後にステップＢ４を実行しなくても良い。
【００２７】
（３）クリーンナップ処理
次に、図７および図８を参照して、クリーンナップ処理について説明する。
図７に示すように、ライトポインタが進むと、拡張アドレステーブル１００Ａ内に無効領域を指すエントリが増える。ライトポインタがさらに進んで拡張アドレス空間１３０を１周すると、無効領域だった領域がまた有効領域ａ１になる。ここで、無効領域を指していたエントリがそのままの状態だったとすると、このエントリは、別のリージョンデータで上書きされた領域（符号ｂ１で示されるハッチングの施された領域）を指した状態にも関わらず、参照処理でhitと判定されてしまう。この状況を防ぐには、無効領域を指すようになったエントリが、ライトポインタが拡張アドレス空間１３０を１周するまでの間に無効化されれば良い。具体的には、ライトポインタが所定量進む度に、拡張アドレステーブル１００Ａの１エントリ（または所定のエントリ数）を順番にチェックする。この処理がクリーンナップ処理である。
【００２８】
図８は、ライトポインタが所定量進む度に拡張アドレステーブル１００Ａの１エントリを順番にチェックする場合におけるクリーンナップ処理の流れを示している。
論物変換テーブルキャッシュ制御部１１１は、クリーンナップ処理のために、クリーンナップカウンタを持つ。論物変換テーブルキャッシュ制御部１１１は、拡張アドレステーブル１００Ａからクリーンナップカウンタが指すエントリをリードし（ステップＣ１）、リードしたエントリの内容をチェックする（ステップＣ２）。
【００２９】
エントリが指す拡張アドレスが無効領域に含まれる場合（ステップＣ２：ＹＥＳ）、論物変換テーブルキャッシュ制御部１１１は、そのエントリに、無効状態を表す値をライトする（ステップＣ３）。エントリに無効状態を設定するには、たとえばサイズをゼロにしてもよいし、存在しないアドレスにしてもよいし、別途フラグを設けてもよい。ステップＣ２の判定結果がＮｏの場合、または、ステップＣ３の処理が終了したら、論物変換テーブルキャッシュ制御部１１１は、クリーンナップカウンタを１進める（ステップＣ４）。
【００３０】
クリーンナップ処理は、ライトポインタが拡張アドレス空間１３０を１周する間に拡張アドレステーブル１００Ａを１周する必要があるので、ライトポインタが、
（データ領域の物理サイズ）×（世代数−１）／（リージョン数）
だけ進むたびに少なくとも１エントリ処理する必要がある。世代番号が１ビット（２世代）の場合は、頻繁にクリーンナップ処理を実行する必要があり、拡張アドレステーブル１００Ａを格納するキャッシュメモリ１２のバンド幅が大きくなる。世代番号を増やしてたとえば１０ビット（１０２４世代）にすることで、クリーンナップ処理に必要なバンド幅を、１ビットの場合と比べて１／５１２程度に減らすことができる。
【００３１】
クリーンナップ処理は、ライトポインタが拡張アドレス空間１３０を１周する間に拡張アドレステーブル１００Ａを１周する必要があるので、ライトポインタが、
（データ領域の物理サイズ）×（世代数−１）／（リージョン数）
だけ進むたびに少なくとも１エントリ処理する必要がある。世代番号が１ビット（２世代）の場合は、頻繁にクリーンナップ処理を実行する必要があり、拡張アドレステーブル１００Ａを格納するキャッシュメモリ１２のバンド幅が大きくなる。世代番号を増やしてたとえば１０ビット（１０２４世代）にすることで、クリーンナップ処理に必要なバンド幅を、１ビットの場合と比べて１／５１２程度に減らすことができる。世代番号のビット数は任意であるものの、世代番号のビット数を増加させると、拡張アドレステーブル１００Ａのサイズが大きくなり、メモリ装置１のキャッシュメモリ１２に配置できるキャッシュデータ領域１２１のサイズが拡張アドレステーブル１００Ａのサイズに対して小さくなるため、キャッシュヒット率が低下する可能性がある。そのため、世代番号のビット数の上限は、キャッシュヒット率低下による性能低下とクリーンナップが減ることによる性能向上との関係に基づいて決定されてもよい。
【００３２】
本実施形態のメモリ装置１においては、リージョンデータ追加処理と参照処理のどちらも、拡張アドレステーブル１００Ａとキャッシュデータ領域１２１を１回ずつアクセスすることで実現可能であり、また、追加のクリーンナップ処理については世代番号を調節することで、キャッシュ制御のためのオーバヘッドを大幅に削減できる。
【００３３】
このように、本実施形態のメモリ装置１は、キャッシュ制御のオーバヘッドを削減することができる。
（第２実施形態）
次に、第２実施形態について説明する。第１実施形態と同様、本実施形態においても、コントローラ１１、キャッシュメモリ１２およびストレージ１３を有するメモリ装置１を想定する。ここでは、第１実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明を省略する。
【００３４】
図９は、第１実施形態のメモリ装置１に残存する課題であって、本実施形態のメモリ装置１が解決する課題を説明するための図である。
図９には、第１実施形態のメモリ装置１において、拡張アドレス空間１３０の有効領域ａ１にリージョンデータが存在する、つまり、キャッシュにリージョンデータが存在するリージョン番号について、新たにリージョンデータ追加処理を実行した時の状況が示されている。新しいリージョンデータはライトポインタが指す位置（領域ｃ１）に書き込まれるが、古いリージョンデータは有効領域ａ１内の無駄な領域（領域ｃ２）として残ってしまう。この場合、実質的にキャッシュの有効領域ａ１が減った状態になるため、キャッシュヒット率が低下する問題がある。
【００３５】
そこで、本実施形態のメモリ装置１においては、この課題を解決するため、発生した無駄領域の情報をテーブルに記録して、古いリージョンデータが書き込まれている領域を再利用する。常にすべての再利用情報を管理しようとすると、テーブルサイズが大きくなるので、エントリ数を固定（たとえば４、８）にしたテーブルで管理する。ここでは、この新たなテーブルをフラグメントテーブル１００Ｂと称することにする。フラグメントテーブル１００Ｂの構造は拡張アドレステーブル１００Ａと同じだが、エントリ数は固定の大きくない値（たとえば４エントリ、８エントリ）である。論物変換テーブルキャッシュ制御部１１１は、このフラグメントテーブル１００Ｂを、拡張アドレステーブル１００Ａと同様、キャッシュメモリ１２に格納してもよいが、コントローラ１１に内蔵されるメモリに格納することで、制御オーバヘッドを小さく抑えることができる。拡張アドレステーブル１００Ａと異なり、フラグメントテーブル１００Ｂはテーブルサイズが小さいため、コントローラ１１に内蔵されるメモリに格納することが可能である。
【００３６】
図１０は、フラグメントテーブル１００Ｂを追加する本実施形態のメモリ装置１におけるリージョンデータ追加処理の流れを示す図である。
論物変換テーブルキャッシュ制御部１１１は、追加するリージョンデータのサイズ以上のエントリがフラグメントテーブル１００Ｂにあるかをチェックする（ステップＤ１）。条件に合うエントリがない場合（ステップＤ１：ＮＯ）、論物変換テーブルキャッシュ制御部１１１は、ライトポインタを更新する（ステップＤ２）。このステップＤ２の処理は、第１実施形態で示した図５のステップＡ１の処理と同じである。ライトポインタの更新に伴って有効領域ａ１がスライドしたので、論物変換テーブルキャッシュ制御部１１１は、フラグメントテーブル１００Ｂに記録されているエントリのうち、無効領域に入ったエントリを全て削除する（ステップＤ３）。
【００３７】
そして、論物変換テーブルキャッシュ制御部１１１は、リージョンデータをライトする（ステップＤ４）。このステップＤ６の処理は、第１実施形態で示した図５のステップＡ２の処理と同じである。
一方、ステップＤ１で条件に合うエントリが見つかった場合（ステップＤ１：ＹＥＳ）、論物変換テーブルキャッシュ制御部１１１は、それらの中からエントリを１個選択する（ステップＤ５）。論物変換テーブルキャッシュ制御部１１１は、そのエントリが指す位置にリージョンデータをライトし（ステップＤ６）、フラグメントテーブル１００Ｂのエントリを更新する（ステップＤ７）。たとえば、エントリの拡張アドレスを、リージョンデータのサイズ分だけ足した値に変更し、かつ、エントリのサイズを、リージョンデータのサイズ分だけ引いた値にする。
【００３８】
そして、ステップＤ４の処理またはステップＤ７の処理が終了したら、論物変換テーブルキャッシュ制御部１１１は、ライトしたリージョンデータの拡張アドレスとサイズを、拡張アドレステーブル１００Ａに格納する（ステップＤ８）。このステップＤ８の処理は、第１実施形態で示した図５のステップＡ３の処理と同じである。
【００３９】
続いて、論物変換テーブルキャッシュ制御部１１１は、拡張アドレステーブル１００Ａの処理対象エントリに記録されている拡張アドレス（古いリージョンデータの場所）が有効領域ａ１に含まれているかを調べ（ステップＤ９）、含まれている場合（ステップＤ９：ＹＥＳ）、フラグメントテーブル１００Ｂにその拡張アドレスのサイズ情報を記録する（ステップＤ１０）。
【００４０】
以上の制御によって、キャッシュのデータ領域に無駄な領域が発生する問題を軽減することができる。また、フラグメントテーブル１００Ｂのサイズを抑えることで、キャッシュメモリ１２へのアクセス等のオーバヘッドの増加を抑えることができる。
つまり、本実施形態のメモリ装置１は、キャッシュ制御のオーバヘッドを削減することができることに加えて、キャッシュヒット率の低下を抑えることができる。
【００４１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４２】
１…メモリ装置、２…ホスト、１１…コントローラ、１２…キャッシュメモリ、１３…ストレージ、１００…論物変換テーブル、１００Ａ…拡張アドレステーブル、１００Ｂ…フラグメントテーブル、１１０…論理アドレス空間、１１１…論物変換テーブルキャッシュ制御部、１２０…物理アドレス空間、１２１…キャッシュデータ領域、１３０…拡張アドレス空間。
【図１】
2020144534.tif 000003
【図２】
2020144534.tif 000004
【図３】
2020144534.tif 000005
【図４】
2020144534.tif 000006
【図５】
2020144534.tif 000007
【図６】
2020144534.tif 000008
【図７】
2020144534.tif 000009
【図８】
2020144534.tif 000010
【図９】
2020144534.tif 000011
【図１０】
2020144534.tif 000012