以下、図面を参照して、実施形態を説明する。
(第1実施形態)
まず、図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されたストレージデバイスである。このメモリシステムは、例えば、NANDフラッシュ技術ベースのストレージデバイス3として実現されている。ストレージデバイス3は、ユニバーサル・フラッシュ・ストレージ(UFS)デバイスのような組み込みストレージデバイスとして実現されてもよいし、ソリッドステートドライブ(SSD)として実現されてもよい。
情報処理システム1は、ホスト(ホストデバイス)2と、ストレージデバイス3とを含む。ホスト2は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
ストレージデバイス3は、ホスト2として機能する情報処理装置の外部記憶装置として使用され得る。ストレージデバイス3が組み込みストレージデバイスとして実現されている場合には、ストレージデバイス3は、情報処理装置に内蔵される。ストレージデバイス3がSSDとして実現されている場合には、ストレージデバイス3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とストレージデバイス3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)、ユニバーサルシリアルバス(USB)、Mobile Industry Processor Interface(MIPI)、UniPro等を使用し得る。
ストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。NAND型フラッシュメモリ5は、限定されないが、複数のNAND型フラッシュメモリチップを含んでいてもよい。コントローラ4は、NAND型フラッシュメモリ5に電気的に接続され、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。
NAND型フラッシュメモリ5は、ユーザデータ6と、論理物理アドレス変換テーブル(logical−to−physical address translation table(L2Pテーブル))7のような管理情報とを格納する。論理物理アドレス変換テーブル7は、以下、単にアドレス変換テーブル7としても参照される。このアドレス変換テーブル7は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。論理アドレスは、ストレージデバイス3の論理空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。物理アドレスは、データが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す。アドレス変換テーブル7は、論理アドレスを、この論理アドレスに対応するデータが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレスに変換するために使用される。
NAND型フラッシュメモリ5は、メモリセルアレイを有する1以上のNAND型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。NAND型フラッシュメモリ5のメモリセルアレイは、図2に示されているように、複数のブロック(物理ブロック)B0〜Bj−1を含む。ブロックB0〜Bj−1は、消去動作の単位として機能する。
ブロックB0〜Bj−1は複数のページ(物理ページ)を含む。つまり、ブロックB0〜Bj−1の各々は、ページP0、P1、…Pk−1を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。NAND型フラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。
図1において、コントローラ4は、NAND型フラッシュメモリ5のデータ管理とNAND型フラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
データ管理には、(1)論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスと物理アドレスとの間のマッピングの管理は、アドレス変換テーブル7を用いて実行される。コントローラ4は、アドレス変換テーブル7を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、アドレス変換テーブル7を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
ブロック管理には、不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、ブロックそれぞれの消耗を均一化するための動作である。
ガベージコレクションは、データを書き込むことが可能なフリーブロックの個数を増やすための動作である。ガベージコレクションにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、アドレス変換テーブル7から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、アドレス変換テーブル7を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
ホスト2は、ストレージデバイス3に様々なコマンドを送出する。これらコマンドには、リードコマンド、ライトコマンド、アンマップコマンド、等が含まれる。リードコマンドは、ストレージデバイス3に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータに対応する論理アドレス(開始LBA)と、リードすべきデータの長さとを含む。
コントローラ4がホスト2からリードコマンドを受信した時、コントローラ4は、アドレス変換テーブル7を参照して、リードコマンド内の開始LBAに対応する物理アドレスを得る。コントローラ4は、この得られた物理アドレスに対応するNAND型フラッシュメモリ5の物理記憶位置からデータをリードし、リードしたデータをホスト2に返す。
ライトコマンドは、ストレージデバイス3に対してデータの書き込みを要求するコマンドである。ライトコマンドは、ライトデータ(つまり書き込むべきデータ)の論理アドレス(開始LBA)と、ライトデータの長さとを含む。コントローラ4は、ライトデータを、NAND型フラッシュメモリ5内の利用可能な物理記憶位置に書き込む。さらに、コントローラ4は、アドレス変換テーブル7を更新することによって、ライトデータが書き込まれた物理記憶位置に対応する物理アドレスを、このライトデータに対応する論理アドレスにマッピングする。
例えば、あるLBA(x)に対応するデータがNAND型フラッシュメモリ5内の物理アドレス(y)にライトされた場合には、コントローラ4は、アドレス変換テーブル7を更新するためにリード・モディファイド・ライトを実行してもよい。
このリード・モディファイド・ライトでは、コントローラ4は、まず、NAND型フラッシュメモリ5のアドレス変換テーブル7から、LBA(x)に対応する現在の物理アドレスを含むテーブルデータをリードしてもよい。このテーブルデータは、所定サイズを有するデータ集合であり、連続する論理アドレスに対応する複数の物理アドレスを含んでいてもよい。
コントローラ4は、このリードされたテーブルデータ内の一部を更新する。このテーブルデータの更新では、コントローラ4は、このテーブルデータの一部分、つまりLBA(x)に対応する現在の物理アドレスを、物理アドレス(y)に更新する。例えば、物理アドレスが32ビット(4バイト)のサイズで、テーブルデータが512バイトのサイズであるケースでは、コントローラ4は、サイズが512バイトのテーブルデータの内の4バイトだけを更新する。そして、コントローラ4は、更新されたテーブルデータをNAND型フラッシュメモリ5にライトしてアドレス変換テーブル7を更新する。
コントローラ4は、ホスト2のメインメモリ22の記憶領域の一部を、ストレージデバイス3用の記憶領域として使用することができる。例えば、コントローラ4は、メインメモリ22の記憶領域の一部を、コントローラ4によって使用されるデータ(ユーザデータまたは管理情報)の一部を格納するためのキャッシュとして使用してもよい。
ホスト2のメインメモリ22は、DRAMのようなランダムアクセスメモリである。メインメモリ22は、ホスト使用領域22Aと、デバイス使用領域22Bとを含む。ホスト使用領域22Aには、ホスト2によって実行されるべきオペレーティングシステム(OS)やユーザプログラムがロードされる。デバイス使用領域22Bは、ストレージデバイス3に専用の記憶領域として使用される。ここでは、デバイス使用領域22Bに格納(キャッシュ)されるデータの一例として、アドレス変換テーブル7を取り上げる。この場合、コントローラ4は、アドレス変換テーブル7の少なくとも一部を、アドレス変換テーブルキャッシュ31としてデバイス使用領域22Bに格納することができる。
デバイス使用領域22Bの容量は、通常、ストレージデバイス3に設けられるデバイス内蔵RAMよりも遙かに大きい。したがって、ホスト2のデバイス使用領域22Bを使用することにより、大容量のアドレス変換テーブルキャッシュ31を容易に実現することができる。デバイス使用領域22Bはこれらに限定されないが、例えば、ユニバーサル・フラッシュ・ストレージ(UFS)のユニファイドメモリ(UM)によって実現されてもよいし、NVMeのホストメモリバッファ(HMB)によって実現されてもよい。
通常、ストレージデバイス3が電源オンされた直後のような初期状態では、アドレス変換テーブルキャッシュ31は空である。論理物理アドレス変換に使用されたアドレス変換データ(テーブルデータ)だけがアドレス変換テーブルキャッシュ31にキャッシュされていく。この初期状態の時点で、コントローラ4は、論理物理アドレス変換に使用されることが予想される特定のアドレス変換データ(例えば、特定の論理アドレス範囲に対応するアドレス変換データ)をアドレス変換テーブル7からアドレス変換テーブルキャッシュ31に転送してもよい。これにより、特定のアドレス変換データを事前にアドレス変換テーブルキャッシュ31にキャッシュすることができる。
ホスト2によって指定された論理アドレスに対応する物理アドレス(少なくともこの物理アドレスを含むテーブルデータ)がアドレス変換テーブルキャッシュ31に存在する場合(キャッシュヒット)、コントローラ4は、NAND型フラッシュメモリ5のアドレス変換テーブル7をリードする代わりに、ホストメモリ(メインメモリ22のデバイス使用領域22B)内のアドレス変換テーブルキャッシュ31からこの物理アドレス(テーブルデータ)をリードする。これにより、ホスト2からリードコマンドが受信された時に、またはアドレス変換テーブル7を更新するリード・モディファイド・ライトのために、NAND型フラッシュメモリ5のアドレス変換テーブル7をリードする回数を減らすことができるので、ストレージデバイス3の性能を改善することができる。
次に、コントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、RAM13、バックエンド部14、および専用ハードウェア(HW)15等を含む。これらホストインタフェース11、CPU12、RAM13、バックエンド部14、および専用ハードウェア(HW)15は、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2からライトコマンド、リードコマンド、等の様々なコマンドを受信する回路として機能する。さらに、ホストインタフェース11は、デバイス使用領域22Bをライトアクセスするためのコマンド、デバイス使用領域22Bをリードアクセスするためのコマンド等を、ホスト2に送信することができる。
CPU12は、ホストインタフェース11、バックエンド部14、および専用ハードウェア(HW)15等の動作を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されている制御プログラム(ファームウェア:FW)を実行することによって様々な処理を行う。このCPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行する。CPU12の動作は、CPU12によって実行されるファームウェアによって制御される。上述のコマンド処理の一部または全部は、専用ハードウェア15によって実行してもよい。
RAM13は、ストレージデバイス3内に設けられたデバイス内蔵RAMである。RAM13は、コントローラ4に内蔵されたスタティックRAM(SRAM)であってもよい。RAM13は、CPU12の作業エリアとして使用され、ロードされた所定の制御プログラムや各種テーブル等を格納するために使用される。
ストレージデバイス3の性能を改善するための典型的なアプローチの一つには、大容量のデバイス内蔵RAMを設け、処理に必要な情報をこのデバイス内蔵RAM上に置くことである。しかし、このアプローチは、ストレージデバイス3(コントローラ4)のコストアップを招く要因となり得、またコントローラ4の小型化を阻害する要因にもなり得る。
第1実施形態では、コントローラ4はホスト2のデバイス使用領域22Bをコントローラ4の作業メモリ(ここでは、アドレス変換テーブルキャッシュ31)として利用するので、必要なデバイス内蔵RAMの容量を少なくすることができる。
第1実施形態では、RAM13は、アドレス変換テーブルキャッシュ31を管理するためのアドレス変換テーブルキャッシュタグ32として利用される。
アドレス変換テーブルキャッシュタグ32は、アドレス変換テーブルキャッシュ31のキャッシュヒット/ミスの判定等に必要なキャッシュ管理情報を格納する。
アドレス変換テーブルキャッシュタグ32は、デバイス使用領域22B上ではなく、コントローラ4内のRAM13上に存在する。したがって、コントローラ4は、デバイス使用領域22Bをアクセスすること無く、アドレス変換テーブルキャッシュ31のキャッシュヒット/ミスを即座に判定することができる。
通常、アドレス変換テーブル7のサイズは、非常に大きい。典型的には、アドレス変換テーブル7のサイズは、ストレージデバイス3の容量の1000分の1程度である。
例えば、ストレージデバイス3内のNAND型フラッシュメモリ5の容量が128Gバイトの場合には、必要なアドレス変換テーブル7のサイズは128Mバイト程度となる。したがって、アドレス変換テーブルキャッシュ31のヒット率を高めるためには、大容量のアドレス変換テーブルキャッシュ31が必要とされる。
デバイス使用領域22Bに大容量のアドレス変換テーブルキャッシュ31を置く場合においては、アドレス変換テーブルキャッシュ31用のタグメモリ(アドレス変換テーブルキャッシュタグ32)に必要とされる容量も増大される。
一般に、キャッシュラインサイズを拡大すれば、少ない容量のタグメモリ(アドレス変換テーブルキャッシュタグ32)でも大容量のキャッシュを管理することができる。
しかし、キャッシュラインサイズが拡大された場合には、キャッシュミスが発生した時に、NAND型フラッシュメモリ5からアドレス変換テーブルキャッシュ31のキャッシュラインにデータを転送するためのキャッシュ・ライン・フィル(キャッシュ・ライン・リフィルとも称される)に膨大な時間がかかってしまう。
第1実施形態では、コントローラ4は、拡大された各キャッシュラインを複数の小さな細分化単位(複数のサブライン)に分割し、且つ、データが転送済みであるか否かをサブライン単位で管理する。この構成は、キャッシュミスが発生した時に、アドレス変換テーブルキャッシュ31の一つのキャッシュライン全体をフィルするのではなく、この一つのキャッシュラインの一部(1サブライン)だけをフィルすることを可能にする。これにより、キャッシュミスが発生した時に必要となるキャッシュ・ライン・フィルのコスト(キャッシュミスペナルティー)を最小限に抑えることができる。アドレス変換テーブルキャッシュタグ32の各エントリーは、データが転送済みであるか否かをサブライン単位で管理するために、対応するキャッシュラインに含まれる複数のサブラインに対応する複数のビットマップフラグを含む。ビットマップフラグを含むアドレス変換テーブルキャッシュタグ32の構成の詳細については図3以降で後述する。
バックエンド部14は、符号化/復号化部141と、NANDインタフェース142とを含む。符号化/復号化部141は、例えば、エラー訂正コード(ECC)エンコーダおよびECCデコーダとして機能し得る。NAND型フラッシュメモリ5にデータをライトすべき時、符号化/復号化部141は、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、符号化/復号化部141は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
NANDインタフェース142は、NAND型フラッシュメモリ5を制御するように構成されたNANDコントローラとして機能する。
専用ハードウェア15は、アドレス変換テーブルキャッシュタグ32を制御するように構成されたキャッシュタグ制御ロジック151を含んでいてもよい。キャッシュタグ制御ロジック151は、キャッシュヒット/ミスを判定する動作、アドレス変換テーブルキャッシュタグ32に保持されるタグのようなキャッシュ制御情報を更新する動作等を実行する構成された回路を含んでいてもよい。
次に、ホスト2の構成について説明する。
ホスト2は、CPU(ホストCPU)21、メインメモリ22、ホストコントローラ23等を含む。これらCPU21、メインメモリ22、ホストコントローラ23は、バス20を介して相互接続される。
CPU21は、ホスト2内のコンポーネントを制御するプロセッサである。CPU21は、ストレージデバイス3または他のストレージデバイスからメインメモリ22にロードされる様々なプログラムを実行する。これらプログラムには、オペレーティングシステム、ファイルシステム、および各種アプリケーションプログラムが含まれる。
ホストコントローラ23は、ストレージデバイス3とインタフェースするように構成されたコントローラである。ファイルシステム、デバイスドライバといったホストソフトウェアの制御の下、ホストコントローラ23は、ライトコマンドおよびリードコマンド等をストレージデバイス3に送出する。また、ホストコントローラ23は、デバイス使用領域22Bへのデータのライトを要求するデバイス使用領域ライト要求、およびデバイス使用領域22Bからのデータのリードを要求するデバイス使用領域リード要求を、ストレージデバイス3から受信する。
図3は、ストレージデバイス3によって管理される、アドレス変換テーブルキャッシュ31とアドレス変換テーブルキャッシュタグ32との関係を示す。
アドレス変換テーブルキャッシュ31は、複数(m個)のエントリー、つまり複数のキャッシュラインL0〜Lm−1を含む。キャッシュラインL0〜Lm−1の各々は、複数のサブラインSL0〜SLn−1を含む。サブラインSL0〜SLn−1の各々は、所定サイズのテーブルデータを格納してもよい。この所定サイズのテーブルデータは、連続する複数の論理アドレスに対応する複数の物理アドレスを含んでいてもよい。
例えば、一つの物理アドレスのビット幅が32ビット(4バイト)で、一つのサブラインのサイズが512バイトである場合には、一つのサブライン当たりに128個の物理アドレスを含むテーブルデータが格納される。一般に、NAND型フラッシュメモリ5に対するアクセスは空間的局所性を有するので、複数のサブラインを有し、連続する複数の論理アドレスに対応する複数の物理アドレスを各々のサブラインが格納可能なキャッシュライン構成は、アドレス変換テーブルキャッシュ31のヒット率を高めることを可能にする。
キャッシュラインL0〜Lm−1の各々のサイズ(キャッシュラインサイズ)は、一つのサブラインのみを含むキャッシュラインのn倍である。n倍に拡大されたキャッシュラインを有するアドレス変換テーブルキャッシュ31のキャッシュ構成は、必要なキャッシュラインの数(m)を、1/nに削減することを可能にする。このことは、個々のキャッシュラインにアドレス変換テーブル7のどの領域の内容がキャッシュされているかを示すために必要なタグ(キャッシュタグ)の数を、1/nに削減できることを意味する。なお、このキャッシュ構成においては、複数のサブラインそれぞれに対応する複数のビットマップフラグを追加することが必要になるが、これらビットマップフラグを格納するために必要な容量はサブラインあたり1bitである。したがって、このキャッシュ構成は、各サブラインがタグを持つ構成よりも、容量が少なくて済む。
アドレス変換テーブル7とアドレス変換テーブルキャッシュ31との間のマッピングにおいては、アドレス変換テーブル7は、アドレス変換テーブルキャッシュ31のキャッシュラインサイズ(サブラインサイズ×n)と同じサイズを各々が有する複数のライン(複数の領域)に論理的に分割されてもよい。アドレス変換テーブル7内の複数の領域内のm個の領域の内容が、アドレス変換テーブルキャッシュ31にキャッシュされる。
アドレス変換テーブルキャッシュ31は、セットアソシアティブ・キャッシュ、フルアソシアティブ・キャッシュのいずれであってよい。以下では、限定されないが、アドレス変換テーブルキャッシュ31がフルアソシアティブ・キャッシュとして実現されている場合を主として説明する。
アドレス変換テーブルキャッシュタグ32は、アドレス変換テーブルキャッシュ31のキャッシュラインL0〜Lm−1に対応するm個のエントリーを含む。これらm個のエントリーにおいては、キャッシュラインL0〜Lm−1にアドレス変換テーブル7のどの領域の内容が格納されているかを示すm個のタグ32Aが格納されている。つまり、各タグは、対応するキャッシュラインにアドレス変換テーブル7のどのデータ(テーブルデータ)が格納されているかを示す。m個のタグ32Aの各々は、対応するキャッシュラインに格納されているデータ(テーブルデータ)に対応するアドレスを含む。
さらに、アドレス変換テーブルキャッシュタグ32の各エントリーは、対応するキャッシュラインに含まれる複数(n個)のサブラインSL0〜SLn−1にそれぞれ対応する複数のビットマップフラグ(nビット)32Bを含む。
各ビットマップフラグ32Bは、対応するサブラインにデータ(テーブルデータ)が転送済みであるか否か、つまり対応するサブラインが有効であるか否かを示す。複数のキャッシュラインの各々に対応する複数のビットマップフラグ32Bを格納するRAM13内の記憶領域は、ビットマップメモリとしても参照される。
通常のキャッシュ制御においては、キャッシュライン単位でキャッシュにデータを転送することが必要とされる。
第1実施形態では、アドレス変換テーブルキャッシュタグ32の各エントリーはタグと複数のビットマップフラグ32Bとを含むので、コントローラ4は、タグと複数のビットマップフラグ32Bとに基づいて、サブライン単位で、キャッシュヒット/ミスを判定することができる。したがって、キャッシュミスが発生した時には、コントローラ4は、変換されるべき論理アドレスに対応する物理アドレスを含むテーブルデータだけをキャッシュラインに転送するという部分的なキャッシュ・ライン・フィル動作(サブライン転送)を実行することができる。つまり、コントローラ4は、キャッシュライン単位ではなく、サブライン単位で、アドレス変換テーブルキャッシュ31にデータ(テーブルデータ)を転送する。
なお、一つのサブラインに一つの物理アドレスだけを格納する構成が適用されてもよい。
コントローラ4がホスト2からリードコマンドを受信した時、コントローラ4は、アドレス変換テーブルキャッシュタグ32内のタグとビットマップフラグとを参照することによって、以下のヒット/ミス判定処理を行う。
コントローラ4は、まず、アドレス変換テーブルキャッシュタグ32を参照して、ホスト2から受信されるリードコマンドによって指定された論理アドレス(例えばLBA)の上位ビット部を含むタグに関連付けられている目的のキャッシュラインがアドレス変換テーブルキャッシュ31に存在するか否かを判定する(キャッシュラインヒット/ミス判定)。ここで、目的のキャッシュラインとは、求める物理アドレスを含むテーブルデータの少なくとも一部が格納されているキャッシュラインを意味する。論理アドレスの上位ビット部を含むタグとは、論理アドレスの上位ビット部(タグフィールド)に一致するアドレスを含むタグを意味する。以下では、論理アドレスの上位ビット部を含むタグを、論理アドレスの上位ビット部(タグフィールド)に一致するタグと称する。
さらに、コントローラ4は、目的のキャッシュラインに対応する特定のビットマップフラグを参照して、この論理アドレスに対応する物理アドレスが格納されるべき特定のサブラインにデータ(テーブルデータ)が転送済みであるか否かを判定する(ビットマップヒット/ミス判定)。
ビットマップヒット/ミス判定は、キャッシュラインヒット/ミス判定によって目的のキャッシュラインがアドレス変換テーブルキャッシュ31に存在することが判定された場合にのみ実行されてもよいし、キャッシュライン判定と同時に実行されてもよい。
アドレス変換テーブルキャッシュ31がフルアソシアティプ・キャッシュであるならば、コントローラ4は、目的のキャッシュラインを、リードコマンドに含まれる論理アドレスのタグフィールドをアドレス変換テーブルキャッシュタグ32内の全てのタグ32Aと比較することによって探索する。論理アドレスのタグフィールドに一致するタグが探索されたならば、コントローラ4は、このタグに関連付けられたキャッシュラインを、目的のキャッシュラインとして決定する。
一方、アドレス変換テーブルキャッシュ31がセットアソシアティブ・キャッシュであるならば、コントローラ4は、リードコマンドに含まれる論理アドレスのタグフィールドを、この論理アドレスのインデックス(キャッシュラインインデックス)によって指定される幾つかのタグと比較する。この論理アドレスのタグフィールドがこれら幾つかのタグの内の一つのタグと一致したならば、コントローラ4は、この一つのタグに関連付けられたキャッシュラインを、目的のキャッシュラインとして決定する。
ビットマップヒット/ミス判定では、以下の処理が行われる。
いま、キャッシュラインL0が目的のキャッシュラインとして探索された場合を想定する。
この場合、コントローラ4は、この探索されたキャッシュラインL0内の特定のサブラインに関連付けられたビットマップフラグを参照して、この特定のサブラインにデータ(テーブルデータ)が転送済みであるか否かを判定する。キャッシュラインL0内の特定のサブラインとは、ホスト2から受信されるリードコマンドによって指定された論理アドレスに対応する物理アドレスが格納されるべきサブラインを意味する。このサブラインは、この論理アドレスの値によって特定することができる。
特定のサブラインに関連付けられたビットマップフラグが有効を示す値(例えば“1”)であるならば、コントローラ4は、この論理アドレスに対応する物理アドレスを含むテーブルデータがこのサブラインに転送済みであると判定することができる。一方、特定のサブラインに関連付けられたビットマップフラグが無効を示す値(例えば“0”)であるならば、コントローラ4は、この論理アドレスに対応する物理アドレスを含むテーブルデータがこのサブラインにまだ転送されていないと判定することができる。
例えば、キャッシュラインL0内の特定のサブラインがSL2である場合には、コントローラ4は、キャッシュラインL0のサブラインSL2に関連付けられたビットマップフラグを参照することによって、求める物理アドレスがキャッシュラインL0に存在するか否かを判定することができる。サブラインSL2に関連付けられたビットマップフラグが無効を示す値(例えば“0”)ならば、コントローラ4は、この論理アドレスに対応する物理アドレスを含む1サブライン分のテーブルデータだけを、アドレス変換テーブル7からキャッシュラインL0のサブラインSL2にのみ転送する。これにより、キャッシュラインL0の特定のサブラインSL2のみがテーブルデータでフィルされる。そして、コントローラ4は、サブラインSL2に関連付けられたビットマップフラグを、有効を示す値(例えば“1”)に更新する。
このようにして、キャッシュラインL0は、サブライン単位でリフィルされる。時間の経過に伴って、キャッシュラインL0の複数のサブラインがデータ(テーブルデータ)によって徐々に埋められて行く。
図4は、アドレス変換テーブルキャッシュタグ32の構成例を示す。
ここでは、アドレス変換テーブルキャッシュ31がフルアソシアティブ・キャッシュとして実現されている場合を想定する。アドレス変換テーブルキャッシュタグ32が64個のエントリーを含む場合、つまりアドレス変換テーブルキャッシュ31のキャッシュラインの数(m)が64である場合を想定する。
アドレス変換テーブルキャッシュタグ32の64個のエントリーは、アドレス変換テーブルキャッシュ31の64個のキャッシュラインにそれぞれ対応する。アドレス変換テーブルキャッシュタグ32の64個のエントリーの各々は、バリッドビット(VB)101と、タグ102と、複数のビットマップフラグを含むビットマップフラグフィールド103とを含んでいてもよい。
バリッドビット(VB)101は、対応するキャッシュラインが有効であるか否かを示す。キャッシュラインが有効であるとは、このキャッシュラインがアクティブ状態であること、つまりこのキャッシュラインの少なくとも一つのサブラインにデータ(テーブルデータ)が格納されていることを示す。
ホスト2によってストレージデバイス3をアクセスするために使用される論理アドレスは、3つのフィールド、つまりタグフィールド、サブラインインデックス、およびサブライン内インデックスに分割される。
サブライン内インデックスは、一つのサブラインに含まれる複数の物理アドレスの一つを特定する。つまり、サブライン内インデックスは、同じサブライン内に格納された複数の物理アドレスの一つを選択(指定)するために使用される。論理アドレスの下位ビット部がこのサブライン内インデックスとして使用される。サブライン内インデックスのビットの数(ビット幅)は、一つのサブラインに含まれる物理アドレスの数に応じて決定される。例えば、サブラインサイズが512バイトで、物理アドレスが32ビット幅である場合、各サブラインには、連続する128個の論理アドレスに対応する128個の物理アドレス(PA0〜PA127)が格納されるので、サブライン内インデックスのビットの数(ビット幅)は7ビットとなる。
サブラインインデックスは、一つのキャッシュラインに含まれるn個のサブラインの一つを特定する。つまり、サブラインインデックスは、同じキャッシュライン内に格納されたn個のサブラインの一つを選択(指定)するために使用される。例えば、キャッシュラインを、512個のサブラインを含むキャッシュラインサイズに拡大する場合には、サブラインインデックスのビットの数(ビット幅)は9ビットに設定される。この場合、各エントリーのビットマップフラグフィールド103は、512個のサブラインに対応する512個のビットマップフラグ(b0〜b511)を含む。論理アドレスの下位ビット部よりも上位側のビット部がサブラインインデックスとして使用される。
ビットマップフラグフィールド103を参照する場合においては、512個のビットマップフラグから、論理アドレスのサブラインインデックスによって特定される一つのビットマップフラグが選択される。
サブラインインデックスとサブライン内インデックスとを除いた残りの上位ビット部(16ビット)がタグフィールドとして使用される。この場合、アドレス変換テーブルキャッシュタグ32の各エントリーのタグ102には、論理アドレスの上位ビット部(16ビット)が格納される。
図5は、アドレス変換テーブルキャッシュ31がセットアソシアティブキャッシュである場合に対応するアドレス変換テーブルキャッシュタグ32の構成例を示す。
ここでは、一例として、アドレス変換テーブルキャッシュ31が2ウェイ・セットアソシアティブキャッシュである場合が想定されている。
アドレス変換テーブルキャッシュタグ32の64個のエントリーは、アドレス変換テーブルキャッシュ31の64個のキャッシュラインにそれぞれ対応する。64個のエントリーは、Index0〜31のway0/1(2way)に分割されている。ラインインデックスがIndexと一致する2本のwayの各々について、そのwayに対応するエントリのタグとタグフィールドとが比較され、これによってキャッシュラインヒット/ミスが判定される。
サブラインインデックスよりも上位側の5ビットが32個のインデックス(Index0〜31)を識別するためのラインインデックスとして使用されるので、タグフィールドは11ビットとなる。
図6は、図4または図5のアドレス変換テーブルキャッシュタグ32に対応するアドレス変換テーブルキャッシュ31の構成を示す。
アドレス変換テーブルキャッシュ31は、64個のキャッシュラインL0〜L63を含む。キャッシュラインL0〜L63の各々は、512個のサブラインSL0〜SL511を含む。アドレス変換テーブル7の各ライン(各領域)は、64個のキャッシュラインL0〜L63のいずれかに格納される。なお、アドレス変換テーブルキャッシュ31が2ウェイ・セットアソシアティブキャッシュである場合には、64本のキャッシュラインはIndex0〜31のway0/1(2way)に分割される。
図7は、データリード動作において、キャッシュヒットの場合にコントローラ4によって実行されるキャッシュ制御処理の処理シーケンスを示す。
ホストCPU21は、リードコマンドを、ホストコントローラ23を介してストレージデバイス3のコントローラ4に送出する(ステップS301、S302)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、アドレス変換テーブルキャッシュタグ32を参照し(ステップS303)、この参照結果に基づいて、アドレス変換テーブルキャッシュ31が、キャッシュヒット、キャッシュラインヒット(ビットマップミスとも云う)、キャッシュミスのいずれの状態であるかを判定する(ステップS304)。
キャッシュヒットとは、リードコマンド内の論理アドレスの上位ビット部に一致するタグに関連付けられているキャッシュラインが存在し、且つこの論理アドレスに対応する物理アドレスが格納されるべきサブラインにデータ(テーブルデータ)が転送済みである状態である。つまり、求める物理アドレスを含むアドレス変換テーブル7の領域がキャッシュラインにキャッシュされており、且つ求める物理アドレスが格納されるべきサブラインに、求める物理アドレスを含むテーブルデータが転送済みである状態がキャッシュヒットである。
キャッシュラインヒット(ビットマップミス)とは、リードコマンドの論理アドレスの上位ビット部に一致するタグに関連付けられているキャッシュラインが存在するものの、この論理アドレスに対応する物理アドレスが格納されるべきサブラインにデータ(テーブルデータ)がまだ転送されていない状態である。
キャッシュミスとは、リードコマンドの論理アドレスの上位ビット部に一致するタグに関連付けられているキャッシュラインがアドレス変換テーブルキャッシュ31に存在しない状態を意味する。
キャッシュヒットの場合、コントローラ4は、この論理アドレスに対応する物理アドレスを含む1サブライン分のテーブルデータを、ホストコントローラ23を介して、デバイス使用領域22B上のアドレス変換テーブルキャッシュ31からリードする(ステップS305,S306)。そして、コントローラ4は、アドレス変換テーブルキャッシュ31からリードされたテーブルデータから、この論理アドレスのサブライン内インデックスの値によって特定される物理アドレスを抽出する。コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS307、S308)。コントローラ4は、ユーザデータをホストコントローラ23を介してホストCPU21に送出する(ステップS309、S310)。
図8は、データリード動作において、キャッシュラインヒット(ビットマップミス)の場合にコントローラ4によって実行されるキャッシュ制御処理の処理シーケンスを示す。
ホストCPU21は、リードコマンドを、ホストコントローラ23を介してストレージデバイス3のコントローラ4に送出する(ステップS401、S402)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、アドレス変換テーブルキャッシュタグ32を参照し(ステップS403)、この参照結果に基づいて、アドレス変換テーブルキャッシュ31が、キャッシュヒット、キャッシュラインヒット(ビットマップミスとも云う)、キャッシュミスのいずれの状態であるかを判定する(ステップS404)。
キャッシュラインヒット(ビットマップミス)の場合、コントローラ4は、この論理アドレスに対応する物理アドレスを含む1サブライン分のテーブルデータをNAND型フラッシュメモリ5内のアドレス変換テーブル7からリードする(ステップS405、S406)。そして、コントローラ4は、このテーブルデータを、キャッシュラインヒットしたキャッシュライン内の特定のサブラインに転送する(ステップS407)。この特定のサブラインは、このサブラインのサブラインインデックスの値によって特定される。
コントローラ4は、キャッシュラインヒットしたキャッシュライン内の特定のサブラインに関連付けられたビットマップフラグを有効を示す値(例えば“1”)に更新する(ステップS408)。
コントローラ4は、アドレス変換テーブル7からリードされたテーブルデータから、この論理アドレスのサブライン内インデックスの値によって特定される物理アドレスを抽出する。コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS409、S410)。コントローラ4は、このユーザデータをホストコントローラ23を介してホストCPU21に送出する(ステップS411、S412)。
図9は、キャッシュラインヒット(ビットマップミス)時に実行されるサブライン転送動作およびビットマップフラグ更新動作を示す。
図9において、キャッシュラインにおいては、ハッチングされている部分はテーブルデータが転送済みのサブラインを表し、ハッチングされていない部分はテーブルデータがまだ転送されていないサブラインを表している。テーブルデータが転送済みのサブラインは、「転送済みサブライン」としても参照される。ビットマップフラグフィールド(b0−b511)においては、ハッチングされている部分は、有効を示す値(例えば“1”)に新たに更新されたビットマップフラグを表している。
図9では、リードコマンド内の論理アドレス(例えばLBA)に対応するアドレス変換テーブル7内の特定のラインがキャッシュラインL1にマッピングされており、且つキャッシュラインL1のサブラインSL0(ハッチングされている部分)のみが転送済みサブラインである場合が想定されている。コントローラ4は、アドレス変換テーブルキャッシュタグ32を参照して、リードコマンド内の論理アドレスのタグフィールドと一致するタグを見つけ、これによってキャッシュラインL1を、リードコマンドの論理アドレスに対応する特定のラインの一部を格納しているキャッシュラインとして特定する。リードコマンドの論理アドレスに対応する物理アドレスを含むテーブルデータが格納されるべきサブラインSL2には、テーブルデータは転送されていない。この場合、キャッシュラインL1のサブラインSL2に対応するビットマップフラグ(b2)は無効を示す値(例えば“0”)に設定されている。したがって、コントローラ4は、キャッシュラインL1のサブラインSL2に対応するビットマップフラグ(b2)を参照することによって、キャッシュラインヒット(ビットマップミス)であると判定することができる。
コントローラ4は、リードコマンドの論理アドレスに対応する物理アドレスを含む1サブライン分のテーブルデータをNAND型フラッシュメモリ5のアドレス変換テーブル7からリードして、このテーブルデータのみをキャッシュラインL1のサブラインSL2に転送する。そして、コントローラ4は、キャッシュラインL1のサブラインSL2に対応するビットマップフラグ(b2)を無効を示す値(例えば“0”)から有効を示す値(例えば“1”)に更新する。
図10は、データリード動作において、キャッシュミスの場合にコントローラ4によって実行されるキャッシュ制御処理の処理シーケンスを示す。
ホストCPU21は、リードコマンドを、ホストコントローラ23を介してストレージデバイス3のコントローラ4に送出する(ステップS501、S502)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、アドレス変換テーブルキャッシュタグ32を参照し(ステップS503)、この参照結果に基づいて、アドレス変換テーブルキャッシュ31が、キャッシュヒット、キャッシュラインヒット(ビットマップミスとも云う)、キャッシュミスのいずれの状態であるかを判定する(ステップS504)。
キャッシュミスの場合、コントローラ4は、この論理アドレスに対応する物理アドレスを含む1サブライン分のテーブルデータをNAND型フラッシュメモリ5のアドレス変換テーブル7からリードする(ステップS505、S506)。入れ替え対象となり得る全てのキャッシュライン(全ての入れ替え対象キャッシュライン候補)が使用中である場合、つまりどのテーブルデータも格納されていない未使用のキャッシュラインがこれら入れ替え対象キャッシュライン候補内に存在しない場合、コントローラ4は、これらキャッシュラインから入れ替え対象キャッシュラインを決定する。入れ替え対象キャッシュラインとは、リプレースすべきキャッシュライン、つまりアドレス変換テーブルキャッシュ31から追い出すべきキャッシュラインを意味する。もしアドレス変換テーブルキャッシュ31がフルアソシアティブ・キャッシュである場合には、アドレス変換テーブルキャッシュ31内の全てのキャッシュラインが入れ替え対象キャッシュライン候補となる。一方、アドレス変換テーブルキャッシュ31がnウェイ・セット・アソシアティブキャッシュ(n>1)である場合には、この論理アドレスによって定められるある特定のセットに対応するn個のウェイが入れ替え対象キャッシュライン候補となる。
コントローラ4は、入れ替え対象キャッシュラインに決定されたキャッシュラインをアドレス変換テーブルキャッシュ31から追い出す。つまり、コントローラ4は、入れ替え対象キャッシュラインに決定されたキャッシュラインに対応するアドレス変換テーブルキャッシュタグ32のエントリーを更新することによって、入れ替え対象キャッシュラインを無効化する(ステップS507)。この場合、入れ替え対象キャッシュライン内の全てのサブラインが無効化される。
コントローラ4は、アドレス変換テーブル7からリードされた1サブライン分のテーブルデータのみを、アドレス変換テーブルキャッシュ31内の入れ替え対象キャッシュラインの特定のサブラインに転送する(ステップS508)。
コントローラ4は、入れ替え対象キャッシュラインに対応するアドレス変換テーブルキャッシュタグ32のエントリーを更新することによって、この入れ替え対象キャッシュラインを有効化するための有効化処理を行う(ステップS509)。
コントローラ4は、アドレス変換テーブル7からリードされたテーブルデータから、この論理アドレスのサブライン内インデックスの値によって特定される物理アドレスを抽出する。コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS510、S511)。コントローラ4は、このユーザデータをホストコントローラ23を介してホストCPU21に送出する(ステップS512、S513)。
図11は、キャッシュミス時に実行されるキャッシュライン無効化動作、サブライン転送動作およびキャッシュライン有効化動作を示す。
図11において、キャッシュラインにおいては、ハッチングされている部分はデータ(テーブルデータ)が転送済みのサブラインを表し、ハッチングされていない部分はデータ(テーブルデータ)がまだ転送されていないサブラインを表している。アドレス変換テーブルキャッシュタグ32のエントリー(バリッドビットVB、タグ、ビットマップフィールド)においては、ハッチングされている部分は、新たに更新された部分を表している。
リードコマンド内の論理アドレスのタグフィールドと一致するタグがアドレス変換テーブルキャッシュタグ32に存在しない場合、コントローラ4は、キャッシュミスの発生を検出する。コントローラ4は、リプレースすべきキャッシュライン(入れ替え対象キャッシュライン)を決定する。ここでは、キャッシュラインL2が入れ替え対象キャッシュラインに決定された場合を想定する。
コントローラ4は、まず、キャッシュラインL2を無効化してもよい。この場合、コントローラ4は、キャッシュラインL2に対応するバリッドビットを無効を示す値(例えば“0”)に更新し、さらに、キャッシュラインL2に対応する全てのビットマップフラグを無効を示す値(例えば“0”)にクリアする。
コントローラ4は、リードコマンド内の論理アドレスに対応する1サブライン分のテーブルデータをアドレス変換テーブル7からリードして、このテーブルデータを、このテーブルデータが格納されるべきキャッシュラインL2の特定のサブライン(例えばサブラインSL511)に転送する。そして、コントローラ4は、キャッシュラインL2を有効化する。この場合、コントローラ4は、リードコマンド内の論理アドレスのタグフィールドの値を、キャッシュラインL2に対応するタグとしてアドレス変換テーブルキャッシュタグ32にライトする。さらに、コントローラ4は、キャッシュラインL2のサブラインSL511に関連付けられたビットマップフラグを有効を示す値(例えば“1”)に更新し、またキャッシュラインL2に対応するバリッドビットを有効を示す値(例えば“1”)に更新する。
なお、アドレス変換テーブルキャッシュ31は必ずしもホストメモリ上に存在しなくてもよく、アドレス変換テーブルキャッシュ31は、図12に示されているようにコントローラ4内のRAM(SRAM)13上にアドレス変換テーブルキャッシュタグ32と一緒に存在してもよいし、図13に示されているように、コントローラ4の外部に設けられたダイナミックRAM(DRAM)17上にアドレス変換テーブルキャッシュタグ32と一緒に存在してもよい。図13の構成においては、コントローラ4は、DRAM17を制御するように構成された回路であるDRAMインタフェース16を含む。
次に、第1実施形態における入れ替え対象キャッシュライン決定動作について説明する。
上述したように、キャッシュミスによってキャッシュラインの入れ替え(追い出し)が必要になった場合、コントローラ4は、アドレス変換テーブルキャッシュ31の入れ替え対象キャッシュラインを決定する。
入れ替え対象キャッシュラインを決定するための入れ替えポリシーとしては、最も最近使用されていないキャッシュラインを追い出すLRU(least recently used)ポリシーが知られている。
しかし、このLRUポリシーを使用すると、多数の転送済みサブラインが一度にまとめて無効化される場合がある。
例えば、図3に示されているように、キャッシュラインL0が多くの転送済みサブラインを含み、キャッシュラインL1、L2が一つの転送済みサブラインだけを含む場合を想定する。もしキャッシュラインL1、L2が比較的最近使用されたならば、キャッシュラインL0が最も最近使用されていないキャッシュラインとなり、多くの転送済みサブラインを含むこのキャッシュラインL0が入れ替え対象キャッシュラインに決定されてしまう。この場合、このキャッシュラインL0内の多数の転送済みサブラインの全てが無効化されて、このキャッシュラインL0から追い出されてしまう。この結果、キャッシュヒット率が低下し、ストレージデバイス3の性能が低下する場合がある。
このように、各キャッシュラインが複数のサブラインを含む構成においては、入れ替え対象キャッシュライン内の全ての転送済みサブラインがアドレス変換テーブルキャッシュ31から追い出されてしまう。そこで、第1実施形態においては、コントローラ4は、キャッシュミスによって一つのキャッシュラインを入れ替える場合、入れ替え対象となり得るキャッシュラインの中で、テーブルデータが転送済みのサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定する。換言すれば、コントローラ4は、テーブルデータが転送済みのサブラインの数が最も少ないキャッシュラインを無効化して、アドレス変換テーブルキャッシュ31から追い出す。そして、コントローラ4は、NAND型フラッシュメモリ5から1サブライン分のテーブルデータをリードし、リードされたテーブルデータを入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送する。
例えば、図3に示されているように、キャッシュラインL0が多くの転送済みサブラインを含み、キャッシュラインL1、L2が一つの転送済みサブラインのみを含む場合を想定する。この場合、コントローラ4は、キャッシュラインL1またはL2を入れ替え対象キャッシュラインに決定する。
この結果、転送済みサブラインの数が多いキャッシュラインL0をアドレス変換テーブルキャッシュ31に残すことができる。よって、キャッシュライン入れ替え後においても、アドレス変換テーブルキャッシュ31が多くの転送済みサブラインを保持しているという状態を維持することができるので、アドレス変換テーブルキャッシュ31のヒット率の向上を図ることができる。
図14のフローチャートは、入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS11)。ステップS11では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS11のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中から、転送済みサブラインの数が最も少ないキャッシュラインを探す(ステップS12)。
なお、アドレス変換テーブルキャッシュ31がフルアソシアティブ・キャッシュである場合には、アドレス変換テーブルキャッシュ31の全キャッシュラインが入れ替え対象キャッシュライン候補となる。このため、ステップS12では、コントローラ4は、アドレス変換テーブルキャッシュ31の全キャッシュラインの中から、転送済みサブラインの数が最も少ないキャッシュラインを探す。また、アドレス変換テーブルキャッシュタグ32の各エントリーは、ロックフラグをさらに有してもよい。この構成においては、ロックフラグに有効を示す値(例えば“1”)が設定されているエントリーに対応するキャッシュラインを、入れ替え対象から除外してもよい。
ステップS12では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、転送済みサブラインの数を比較することによって、転送済みサブラインの数が最も少ないキャッシュラインを特定する。
コントローラ4は、転送済みサブラインの数が最も少ないこのキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS13)。
転送済みサブラインの数を特定する方法としては、各キャッシュラインに対応する複数のビットマップフラグをリードする方法が使用されてもよい。
各ビットマップフラグは1サブラインに対応する。データが未転送のサブラインそれぞれに対応するビットマップフラグそれぞれは、無効を示す値(例えば“0”)に設定されている。コントローラ4は、あるサブラインにテーブルデータを転送したならば、このサブラインに対応するビットマップフラグを有効を示す値(例えば“1”)に設定する。キャッシュライン入れ替えの必要がある場合には、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの各々に対応する複数のビットマップフラグを参照し、入れ替え対象となり得る全てのキャッシュラインの中から、有効を示す値(例えば“1”)のビットマップフラグの数が最も少ないキャッシュラインを探し、有効を示す値(例えば“1”)のビットマップフラグの数が最も少ないキャッシュラインを入れ替え対象とする。有効を示す値(例えば“1”)のビットマップフラグの数が最も少ないキャッシュラインは、転送済みサブラインの数が最も少ないキャッシュラインである。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS11のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS14)。
図15のフローチャートは、各キャッシュラインに対応する複数のビットマップフラグを使用した入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS21)。ステップS21では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS21のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの各々に対応する複数のビットマップフラグを参照し、入れ替え対象となり得る全てのキャッシュラインの中から、有効を示す値(例えば“1”)のビットマップフラグの数が最も少ないキャッシュラインを探す(ステップS22)。ステップS22では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、“1”のビットマップフラグの数を比較することによって、“1”のビットマップフラグの数が最も少ないキャッシュラインを特定する。
コントローラ4は、有効を示す値(例えば“1”)のビットマップフラグの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS23)。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS21のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS24)。
図16のフローチャートは、キャッシュライン入れ替え動作の手順を示す。
コントローラ4は、入れ替え対象キャッシュラインに対応するバリッドビット(VB)を無効を示す値(例えば“0”)にして入れ替え対象キャッシュラインを無効化し、さらに、入れ替え対象キャッシュラインに対応する全てのビットマップフラグを無効を示す値(例えば“0”)にクリアして入れ替え対象キャッシュライン内の全てのサブラインを無効化する(ステップS31)。コントローラ4は、NAND型フラッシュメモリ5内のアドレス変換テーブル7から、求める物理アドレスを含む1サブライン分のテーブルデータをリードし、このリードした1サブライン分のテーブルデータを入れ替え対象キャッシュライン内の特定の一つのサブラインに転送する(ステップS32)。この特定の一つのサブラインは、キャッシュミスが起きる要因となったリードコマンドに含まれる論理アドレスによって定められる。
そして、コントローラ4は、入れ替え対象キャッシュラインに対応するタグの内容をリードコマンドに含まれる論理アドレス内のタグフィールドに更新する動作、入れ替え対象キャッシュライン内の特定のサブライン(テーブルデータが転送されたサブライン)に対応するビットマップフラグを有効を示す値(例えば“1”)に更新する動作、および入れ替え対象キャッシュラインに対応するバリッドビット(VB)を有効を示す値(例えば“1”)に更新する動作を実行する(ステップS33)。
図17のフローチャートは、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作の手順を示す。
コントローラ4は、NAND型フラッシュメモリ5内のアドレス変換テーブル7から、求める物理アドレスを含む1サブライン分のテーブルデータをリードし、このリードした1サブライン分のテーブルデータを未使用のキャッシュライン内の特定の一つのサブラインに転送する(ステップS32A)。この特定の一つのサブラインは、キャッシュミスが起きる要因となったリードコマンドに含まれる論理アドレスによって定められる。
そして、コントローラ4は、この未使用のキャッシュラインに対応するタグの内容をリードコマンドに含まれる論理アドレス内のタグフィールドに更新する動作、この未使用のキャッシュライン内の特定のサブライン(テーブルデータが転送されたサブライン)に対応するビットマップフラグを有効を示す値(例えば“1”)に更新する動作、およびこの未使用のキャッシュラインに対応するバリッドビット(VB)を有効を示す値(例えば“1”)に更新する動作を実行する(ステップS33A)。
図18は、ビットマップカウンタを含むアドレス変換テーブルキャッシュタグ32の構成例を示す。
図18のアドレス変換テーブルキャッシュタグ32の各エントリーは、タグ32A、複数のビットマップフラグ32Bに加え、ビットマップカウンタ32Cを保持する。
アドレス変換テーブルキャッシュタグ32の各エントリーのビットマップカウンタ32Cは、対応するnビットのビットマップフラグの中に含まれる、有効を示す値(例えば“1”)のビットマップフラグの数を示す。
ビットマップカウンタ32Cは、有効を示す値(例えば“1”)のビットマップフラグの数を完全に数えられる程度のビット数(log2[ビットマップフラグのビット数n])を有していることが望ましいが、それより小さな一定の閾値(上限値)で飽和するカウンタであっても構わない。
キャッシュライン入れ替えの必要がある場合には、コントローラ4は、入れ替え対象となり得る各キャッシュラインに対応するビットマップカウンタ32Cを参照し、入れ替え対象となり得るキャッシュラインから、ビットマップカウンタ32Cの値が最も小さいキャッシュラインを探し、ビットマップカウンタ32Cの値が最も小さいキャッシュラインを入れ替え対象キャッシュラインに決定する。ビットマップカウンタ32Cの値が最も小さいキャッシュラインは、転送済みサブラインの数が最も少ないキャッシュラインである。
これにより、入れ替え対象となり得る各キャッシュラインに対応する複数のビットマップフラグをリードするよりも、効率よく入れ替え対象キャッシュラインを決定することができる。
すなわち、各キャッシュラインに対応する複数のビットマップフラグを使用して入れ替え対象キャッシュラインを決定するケースにおいては、キャッシュライン入れ替えの度に、入れ替え対象となり得る全てのキャッシュラインの各々に対応するビットマップフラグ(キャッシュがフルアソシアティブ・キャッシュである場合は全てのキャッシュラインの各々に対応するビットマップフラグ)を検索する必要が生じる。1キャッシュラインに含まれるサブラインの数が多い場合は、入れ替え対象キャッシュラインを決めるためにリードしなければならないデータ量が増えるため、入れ替え対象キャッシュラインの決定までに時間がかかる場合がある。
各キャッシュラインに対応するビットマップカウンタ32Cを使用して入れ替え対象キャッシュラインを決定するケースにおいては、入れ替え対象キャッシュラインを決めるためにリードしなければならないデータ量を低減でき、入れ替え対象キャッシュラインの決定に要する時間を短くすることができる。
図19は、図18のアドレス変換テーブルキャッシュタグ32内の幾つかのビットマップカウンタ32Cの値の例を示す。
図19では、図示の簡単化のために、各キャッシュラインが8個のサブラインSL0〜SL7を含む場合が想定されている。
キャッシュラインL0においては、サブラインSL0、SL2、SL4、SL5が転送済みサブラインである。この場合、キャッシュラインL0のサブラインSL0、SL2、SL4、SL5に対応する4個のビットマップフラグ32Bが有効を示す値(例えば“1”)に設定され、キャッシュラインL0に対応するビットマップカウンタ32Cの値は4に設定される。
キャッシュラインL1においては、サブラインSL1、SL2、SL5、SL6、SL7が転送済みサブラインである。この場合、キャッシュラインL1のサブラインSL1、SL2、SL5、SL6、SL7に対応する5個のビットマップフラグ32Bが有効を示す値(例えば“1”)に設定され、キャッシュラインL1に対応するビットマップカウンタ32Cの値は5に設定される。
キャッシュラインL2においては、サブラインSL0、SL1、SL3、SL4、SL6、SL7が転送済みサブラインである。この場合、キャッシュラインL2のサブラインSL0、SL1、SL3、SL4、SL6、SL7に対応する6個のビットマップフラグ32Bが有効を示す値(例えば“1”)に設定され、キャッシュラインL2に対応するビットマップカウンタ32Cの値は6に設定される。
図20のフローチャートは、各キャッシュラインに対応するビットマップカウンタを使用した入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS41)。ステップS41では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS41のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインに対応するビットマップカウンタを参照し、入れ替え対象となり得る全てのキャッシュラインの中から、ビットマップカウンタの値が最小のキャッシュラインを探す(ステップS42)。ステップS42では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、ビットマップカウンタの値を比較することによって、ビットマップカウンタの値が最小のキャッシュラインを特定する。
コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS43)。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS41のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS44)。
図21のフローチャートは、アドレス変換テーブルキャッシュタグ32が各キャッシュラインに対応するビットマップカウンタを含む構成に適用されるサブライン転送動作の手順を示す
キャッシュラインヒット(ビットマップミス)またはキャッシュミスが起きた場合、コントローラ4は、NAND型フラッシュメモリ5のアドレス変換テーブル7からリードされた1サブライン分のデータ(テーブルデータ)をあるキャッシュライン内の特定のサブラインに転送する(ステップS51)。キャッシュラインヒット(ビットマップミス)が起きた場合には、このテーブルデータが転送されるキャッシュラインは、キャッシュラインヒットしたキャッシュラインである。キャッシュミスが起きた場合には、このテーブルデータが転送されるキャッシュラインは、入れ替え対象キャッシュラインである。
コントローラ4は、テーブルデータが転送されたキャッシュライン内の特定のサブラインに対応するビットマップフラグの値を無効を示す値(例えば“0”)から有効を示す値(例えば“1”)に更新する(ステップS52)。
そして、コントローラ4は、このキャッシュラインに対応するビットマップカウンタを1だけインクリメントする(ステップS53)。なお、何らかの理由(例えばキャッシュしていたテーブルデータの内容が変更され、その変更内容をアドレス変換テーブルキャッシュ31上のテーブルデータにも反映させた場合など)でサブライン転送を行ってもビットマップフラグを“0”→“1”に更新しなかった場合は、コントローラ4は、対応するビットマップカウンタを1だけインクリメントする動作を実行しなくてもよい。
図22のフローチャートは、アドレス変換テーブルキャッシュタグ32が各キャッシュラインに対応するビットマップカウンタを含む構成に適用されるキャッシュライン入れ替え動作の一連の手順を示す
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS61)。ステップS61では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS61のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインに対応するビットマップカウンタを参照し、入れ替え対象となり得る全てのキャッシュラインの中から、ビットマップカウンタの値が最小のキャッシュラインを探す(ステップS62)。ステップS62では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、ビットマップカウンタの値を比較することによって、ビットマップカウンタの値が最小のキャッシュラインを特定する。
コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを入れ替え対象キャッシュラインに決定する(ステップS63)。
コントローラ4は、(1)入れ替え対象キャッシュラインに対応するバリッドビット(VB)を無効を示す値(例えば“0”)にしてこの入れ替え対象キャッシュラインを無効化する動作と、(2)入れ替え対象キャッシュラインに対応する全てのビットマップフラグを無効を示す値(例えば“0”)にクリアして入れ替え対象キャッシュライン内の全てのサブラインを無効化する動作と、(3)入れ替え対象キャッシュラインに対応するビットマップカウンタの値を0にする動作を実行する(ステップS64)。
コントローラ4は、NAND型フラッシュメモリ5内のアドレス変換テーブル7から、求める物理アドレスを含む1サブライン分のテーブルデータをリードし、このリードした1サブライン分のテーブルデータを入れ替え対象キャッシュライン内の特定の一つのサブラインに転送する(ステップS65)。この特定の一つのサブラインは、キャッシュミスが起きる要因となったリードコマンドに含まれる論理アドレスによって定められる。
そして、コントローラ4は、(1)入れ替え対象キャッシュラインに対応するタグの内容をリードコマンドに含まれる論理アドレス内のタグフィールドに更新する動作と、(2)入れ替え対象キャッシュラインの転送済みサブラインに対応するビットマップフラグを有効を示す値(例えば“1”)に更新する動作と、(3)入れ替え対象キャッシュラインに対応するビットマップカウンタの値を1だけインクリメントする動作と、(4)入れ替え対象キャッシュラインに対応するバリッドビット(VB)を有効を示す値(例えば“1”)に更新する動作を実行する(ステップS66)。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS61のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS67)。
図23は、タイムスタンプ/ビットマップカウンタ用の共用記憶領域を含むアドレス変換テーブルキャッシュタグ32の構成例を示す。
アドレス変換テーブルキャッシュタグ32の各エントリーは、タグ32A、複数のビットマップフラグ32Bに加え、タイムスタンプ/ビットマップカウンタ用の共用記憶領域32Dを含む。
共用記憶領域32Dは、LRUポリシーによって入れ替え対象キャッシュラインを決定するために使用されるタイムスタンプまたは上述のビットマップカウンタを選択的に格納するために使用される。LRUポリシー用のタイムスタンプは、最近使用されたキャッシュラインほど大きな値(または小さな値)に設定されるように更新される。コントローラ4は、入れ替え対象キャッシュラインを決定するためのモード(リプレースモード)として、LRUモードとビットマップカウンタモードとを有する。LRUモードは、LRUポリシーによって入れ替え対象キャッシュラインを決定するリプレースモードである。LRUモードにおいては、コントローラ4は、タイムスタンプ用時計41と、各キャッシュラインに対応する共用記憶領域32Dとを使用して、各キャッシュラインに対応するタイムスタンプを管理する。一方、ビットマップカウンタモードは、ビットマップカウンタの値が最小のキャッシュラインを入れ替え対象キャッシュラインに決定するリプレースモードである。ビットマップカウンタモードにおいては、共用記憶領域32Dは、ビットマップカウンタとして使用される。
つまり、LRUモード(第1のリプレースモード)が使用される場合には、最近使用されたキャッシュラインほど大きな値(または小さな値)に設定されるように更新されるタイムスタンプが共用記憶領域32Dに格納される。一方、ビットマップカウンタモード(第2のリプレースモード)が使用される場合には、対応する複数のビットマップフラグの中に含まれる、有効を示す値のビットマップフラグの数を示すビットマップカウンタが共用記憶領域32Dに格納される。
アドレス変換テーブルキャッシュタグ32は、切り替えスイッチ42を含む。切り替えスイッチ42は、タイムスタンプまたはビットマップカウンタのどちらを各キャッシュラインに対応する共用記憶領域32Dに格納するかを切り替えるように構成されたスイッチ回路である。コントローラ4は、切り替えスイッチ42を制御することによって、LRUモードおよびビットマップカウンタモードを選択的に使用することができる。
LRUモードにおいては、切り替えスイッチ42は、タイムスタンプ用時計41を選択する。一方、ビットマップカウンタモードにおいては、切り替えスイッチ42は、各キャッシュラインに対応する複数のビットマップフラグ32Bを保持するビットマップメモリを選択する。
LRUモードにおいては、コントローラ4は、各キャッシュラインに対応する共用記憶領域32Dに保持されるタイムスタンプを、以下のケース1、ケース2、またはケース3のいずれかが起きた時に更新する。
ケース1:対応するタグ32Aの内容を更新した
ケース2:対応するキャッシュラインのキャッシュヒットが起きた
ケース3:対応するキャッシュラインに新たなサブラインを転送した
ケース1は、次の(1)、(2)を含む。
(1)キャッシュライン入れ替え動作によって入れ替え対象キャッシュラインに対応するタグに新たなタグが格納された場合
(2)無効なキャッシュラインに対応するタグに新たなタグが格納されて無効なキャッシュラインが有効化された場合(つまり、対応するバリッドビットが“0”から“1”に変更された場合)
ケース2に関しては、キャッシュヒットが起きた場合、つまり、リードコマンドの論理アドレスの上位ビット部に一致するタグに関連付けられているキャッシュラインが存在し、且つこの論理アドレスに対応する物理アドレスが格納されるべきサブラインにテーブルデータが転送済みである場合に、コントローラ4は、このキャッシュラインに対応するタイムスタンプを更新する。キャッシュラインヒット(ビットマップミス)が起きた場合、つまり、リードコマンドの論理アドレスの上位ビット部に一致するタグに関連付けられているキャッシュラインが存在するものの、この論理アドレスに対応する物理アドレスが格納されるべきサブラインにテーブルデータがまだ転送されていない場合には、コントローラ4は、このキャッシュラインに対応するタイムスタンプを更新してもよいし、更新しなくてもよい。
ケース3においては、コントローラ4は、タグ32Aの内容は更新せずに、新たに転送したサブラインに対応するビットマップフラグを無効を示す値から有効を示す値に変更し、さらにこのサブラインを含むキャッシュラインに対応するタイムスタンプを更新する。
ある共用記憶領域32Dに保持されているタイムスタンプを更新する動作においては、コントローラ4は、タイムスタンプ用時計41の現在の値をこの共用記憶領域32Dに格納し、そしてタイムスタンプ用時計41の現在の値が1だけ進むようにタイムスタンプ用時計41の現在の値を更新してもよい。あるいは、コントローラ4は、最初に、タイムスタンプ用時計41の現在の値が1だけ進むようにタイムスタンプ用時計41の現在の値を更新し、そしてタイムスタンプ用時計41のこの更新された値を共用記憶領域32Dに格納してもよい。
なお、タイムスタンプ用時計41として、イベントの発生の有無に関係なくカウント値を更新する時計(フリーランニングの時計)を使用する構成を適用することも可能である。この場合には、タイムスタンプを更新することが必要となるイベントが起きた時に、コントローラ4は、フリーランニングの時計の現在のカウント値をこの共用記憶領域32Dに格納すればよい。
この図23の構成においては、各キャッシュラインに対応する共用記憶領域32Dを切り替えスイッチ42によってタイムスタンプの格納用に使用する場合(LRUモード)には、最も旧いタイムスタンプに対応するキャッシュライン(つまり、最も最近使用されていないキャッシュライン)を入れ替え対象キャッシュラインとすることができる。一方、各キャッシュラインに対応する共用記憶領域32Dを切り替えスイッチ42によってビットマップカウンタの格納用に使用する場合(ビットマップカウンタモード)には、転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインとすることができる。
この場合、タイムスタンプの値は、その値が大きいほど新しい時間を示すように設定してもよい。これにより、LRUモードまたはビットマップカウンタモードのどちらが使用されるケースであっても、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中から、共用記憶領域32Dに格納されている値が最も小さいキャッシュラインを探すという動作を実行すればよい。各共用記憶領域32Dがタイムスタンプを保持している場合は、共用記憶領域32Dの値が最も小さいキャッシュラインは、最も旧いタイムスタンプに対応するキャッシュライン、つまり最も最近使用されていないキャッシュラインである。各共用記憶領域32Dがビットマップカウンタを保持している場合は、共用記憶領域32Dの値が最も小さいキャッシュラインは、転送済みサブラインの数が最も少ないキャッシュラインである。
図24のフローチャートは、タイムスタンプ更新動作の手順を示す。
LRUモードの期間中、コントローラ4は、「タグの内容を更新」、「キャッシュヒットが起きた」、または「新たなサブラインをキャッシュラインに転送」のいずれかのイベントが起きた時(ステップS71のYES、ステップS72のYES、またはステップS73のYES)に、対応する共用記憶領域32D内のタイムスタンプを更新する(ステップS74)。ステップS74では、コントローラ4は、タイムスタンプ用時計41の現在の値を共用記憶領域32D(LRUモードにおいてはタイムスタンプ記憶領域として使用されている)にコピーし、タイムスタンプ用時計41の現在の値を1だけ進めてもよい。
図25のフローチャートは、各キャッシュラインに対応する共用記憶領域32Dの値(タイムスタンプ/ビットマップカウンタ)を使用した入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS81)。ステップS81では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS81のYES)、コントローラ4は、現在のモードがLRUモードまたはビットマップカウンタモードのいずれであるかを判定する(ステップS82)。
現在のモードがビットマップカウンタモードであるならば、つまり各キャッシュラインに対応する共用記憶領域32Dがビットマップカウンタの格納用に使用されているならば、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインに対応するビットマップカウンタ(記憶領域32Dの値)を参照し、入れ替え対象となり得る全てのキャッシュラインの中から、ビットマップカウンタの値が最小のキャッシュラインを探す(ステップS83)。ステップS83では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、ビットマップカウンタの値を比較することによって、ビットマップカウンタの値が最小のキャッシュラインを特定する。
コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS84)。
一方、現在のモードがLRUモードであるならば、つまり各キャッシュラインに対応する共用記憶領域32Dがタイムスタンプの格納用に使用されているならば、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインに対応するタイムスタンプ(記憶領域32Dの値)を参照し、入れ替え対象となり得る全てのキャッシュラインの中から、最も旧いタイムスタンプに対応するキャッシュラインを探す(ステップS85)。ステップS85では、コントローラ4は、入れ替え対象となり得るキャッシュライン間で、タイムスタンプを比較することによって、最も旧いタイムスタンプに対応するキャッシュラインを特定する。
コントローラ4は、最も旧いタイムスタンプに対応するキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS86)。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS81のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS87)。
以上説明したように、第1実施形態によれば、キャッシュライン入れ替えを実行する際、転送済みサブラインの数が最も少ないキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することで、テーブルデータ(アドレス変換データ)がキャッシュされているサブラインの数が少ないキャッシュラインを優先してアドレス変換テーブルキャッシュ31から追い出すことができる。よって、転送済みサブラインの数が多いキャッシュラインの内容を破棄することなく、アドレス変換テーブルキャッシュ31内に維持することができる。この結果、キャッシュライン入れ替え後においても、アドレス変換テーブルキャッシュ31が転送済みサブラインを多く保持している状態を維持することができるので、アドレス変換テーブルキャッシュ31のヒット率の向上を図ることができる。
(第2実施形態)
以下、タイムスタンプと転送済みサブラインの数の双方を使用して入れ替え対象キャッシュラインを決定する動作を第2実施形態として説明する。
第2実施形態に係るストレージデバイス3のハードウェア構成は第1実施形態のストレージデバイス3と同様であり、第1実施形態と異なる点のみを中心に説明する。
図26に示されているように、第2実施形態においては、アドレス変換テーブルキャッシュタグ32の各エントリーは、タグ32A、複数のビットマップフラグ32Bに加え、タイムスタンプ32Eを含む。
複数のキャッシュラインそれぞれに対応する複数のタイムスタンプ32Eの値は、上述の共用記憶領域32Dに格納されるタイムスタンプと同様に、タイムスタンプ用時計41の値に基づいて更新される。すなわち、コントローラ4は、第1実施形態で説明したタイムスタンプ更新動作と同様の手順で、タイムスタンプを、以下のケース1、ケース2、またはケース3のいずれかが起きた時に更新する。
ケース1:対応するタグ32Aの内容を更新した
ケース2:対応するキャッシュラインのキャッシュヒットが起きた
ケース3:対応するキャッシュラインに新たなサブラインを転送した
第2実施形態では、各キャッシュラインに対応するタイムスタンプは、最近使用された一つ以上のキャッシュラインを入れ替え対象から除外するために使用される。コントローラ4は、入れ替え対象となり得る全てのキャッシュラインから最近使用されたキャッシュラインを除いた残りのキャッシュラインの中で、転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定する。
たとえ転送済みサブラインの数が少ないキャッシュラインであっても、タイムスタンプが新しいキャッシュライン(つまり、最近アクセスされたキャッシュライン)は、その後も比較的高い確率でアクセスされる可能性がある。第2実施形態では、最近使用されたキャッシュラインであると判定される1以上のキャッシュラインは入れ替え対象から除外される。したがって、たとえ転送済みサブラインの数が少ないキャッシュラインであっても、タイムスタンプが新しいキャッシュラインの内容は破棄されずに、アドレス変換テーブルキャッシュ31に維持される。したがって、ヒット率をより改善することが可能となる。
入れ替え対象から除外すべきキャッシュラインを判別する方法としては、対応するタイムスタンプとタイムスタンプ用時計41の現在の値(現在の最新のタイムスタンプ)との差分が閾値よりも小さいキャッシュラインを入れ替え対象から除外する方法を使用することができる。
タイムスタンプの値がタイムスタンプ用時計41の現在の値に近いキャッシュラインは、最近アクセスされたキャッシュラインあると判定される。図26では、キャッシュラインL0、L1、L2が入れ替え対象となり得るキャッシュライン(入れ替え対象キャッシュライン候補)であり、閾値が「2」に設定されている場合が想定されている。キャッシュラインL1に含まれる転送済みサブラインの数は入れ替え対象キャッシュライン候補の中で最も少ない。しかし、キャッシュラインL1に対応するタイムスタンプ(ここでは「7」)とタイムスタンプ用時計41の現在の値(ここでは「8」)との差分(ここでは「1」)は閾値(ここでは「2」)よりも小さい。したがって、コントローラ4は、キャッシュラインL1を入れ替え対象から除外し、残りのキャッシュラインL0、L2の中で、転送済みサブラインの数が最も少ないキャッシュライン(ここでは、キャッシュラインL2)を入れ替え対象キャッシュラインに決定する。この結果、たとえ最近アクセスされたキャッシュラインL1の転送済みサブラインの数が少なくても、このキャッシュラインL1の内容は破棄されずに、アドレス変換テーブルキャッシュ31に維持される。したがって、ヒット率をより改善することが可能となる。
図27のフローチャートは、各キャッシュラインに対応する複数のビットマップフラグと各キャッシュラインに対応するタイムスタンプとの双方を使用した入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS91)。ステップS91では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS91のYES)、コントローラ4は、タイムスタンプとタイムスタンプ用時計41の現在の値(最新のタイムスタンプ)との差分が閾値よりも小さいキャッシュラインを除く残りの入れ替え対象キャッシュライン候補の中から、転送済みサブラインの数が最も少ないキャッシュラインを探す(ステップS92)。ステップS92では、コントローラ4は、残りの各入れ替え対象キャッシュライン候補に対応するビットマップフラグを参照し、そして残りの入れ替え対象キャッシュライン候補間で、転送済みサブラインの数を比較することによって、残りの入れ替え対象キャッシュライン候補の中から、転送済みサブラインの数が最も少ないキャッシュラインを特定する。
コントローラ4は、残りの入れ替え対象キャッシュライン候補の中で転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS93)。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS91のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS94)。
図27の入れ替え対象キャッシュライン決定動作によれば、たとえ転送済みサブラインの数が少ないキャッシュラインであっても、そのキャッシュラインが最近アクセスされたキャッシュラインである場合には、そのキャッシュラインを入れ替え対象から除外することができる。よって、アクセスされる可能性が高いキャッシュラインの内容を破棄することなく、キャッシュライン入れ替え後においても、アドレス変換テーブルキャッシュ31が転送済みサブラインを多く保持している状態を維持することができる。
なお、図26のアドレス変換テーブルキャッシュタグ32の各エントリーに図18で説明したビットマップカウンタ32Cを追加してもよい。この場合、ステップS92では、コントローラ4は、タイムスタンプとタイムスタンプ用時計41の現在の値との差分が閾値よりも小さいキャッシュラインを除く残りの入れ替え対象キャッシュライン候補の中から、ビットマップカウンタの値が最小のキャッシュラインを特定すればよい。
図28のフローチャートは、各キャッシュラインに対応する複数のビットマップフラグと各キャッシュラインに対応するタイムスタンプとの双方を使用した入れ替え対象キャッシュライン決定動作の別の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS95)。ステップS95では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS95のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中から、転送済みサブラインの数が最も少ないキャッシュラインを探す(ステップS96)。ステップS96では、コントローラ4は、入れ替え対象となり得る各キャッシュラインに対応する複数のビットマップフラグを参照し、そして入れ替え対象となり得る全てのキャッシュライン間で転送済みサブラインの数を比較する。
コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインの数が2以上存在するか否か、つまり転送済みサブラインの数が最も少ないキャッシュラインが一つのみではなく、転送済みサブラインの数が最も少ないキャッシュラインが複数探されたか否かを判定する(ステップS97)。
転送済みサブラインの数が最も少ないキャッシュラインが一つだけ存在する場合には(ステップS97のNO)、コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS98)。
一方、転送済みサブラインの数が最も少ないキャッシュラインが2以上存在する場合には、つまり転送済みサブラインの数が最も少ないキャッシュラインが複数探された場合には(ステップS97のYES)、コントローラ4は、転送済みサブラインの数が最も少ないこれら2以上のキャッシュライン(転送済みサブラインの数が同数であるキャッシュライン)の中で、タイムスタンプが最も旧いキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS99)。
これにより、転送済みサブラインの数が最も少ないキャッシュラインの数が1つではなく、複数存在する場合には、タイムスタンプがより旧いキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することができる。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS95のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS100)。
なお、図26のアドレス変換テーブルキャッシュタグ32の各エントリーに図18で説明したビットマップカウンタ32Cを追加してもよい。この場合、ステップS96では、コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを特定すればよい。
(第3実施形態)
以下、ダーティーな転送済みサブラインの数を使用して入れ替え対象キャッシュラインを決定する動作を第3実施形態として説明する。
第3実施形態に係るストレージデバイス3のハードウェア構成は第1実施形態のストレージデバイス3と同様であり、第1実施形態と異なる点のみを中心に説明する。
第3実施形態ではダーティーなサブラインとは、NAND型フラッシュメモリ5のアドレス変換テーブル7にそのサブラインの内容が反映されていないサブラインを意味する。換言すれば、ダーティーなサブラインとは、NAND型フラッシュメモリ5のアドレス変換テーブル7に反映されていないデータ(テーブルデータ)を保持しているサブラインを意味する。例えば、ある転送済みサブラインのテーブルデータのみが更新され、アドレス変換テーブル7内の対応するテーブルデータがまだ更新されていない場合には、この転送済みサブラインはダーティーな転送済みサブラインである。
ダーティーなサブラインの数が多いキャッシュラインを入れ替え対象にしてしまうと、キャッシュライン入れ替えを行なう際にNAND型フラッシュメモリ5に書き込むことが必要なデータ量が増え、これによってキャッシュライン入れ替え動作に要する時間が長くなる場合がある。
第3実施形態では、コントローラ4は、NAND型フラッシュメモリ5に反映されていないデータが格納されているサブライン(ダーティーなサブライン)の数を考慮して、入れ替え対象キャッシュラインに決定することができる。
図29に示されているように、第3実施形態においては、アドレス変換テーブルキャッシュタグ32の各エントリーは、タグ32A、複数のビットマップフラグ32Bに加え、複数のダーティーフラグ32Fを含む。
各ダーティーフラグ32Fは、対応するサブラインに格納されているデータ(テーブルデータ)がNAND型フラッシュメモリ5に未反映のデータ(更新データ)であるか否か、つまり対応するサブライン内のデータがダーティーデータであるか否かを示す。コントローラ4が、NAND型フラッシュメモリ5に未反映のデータ(更新データ)をあるサブラインに転送した時、コントローラ4は、このサブラインに対応するダーティーフラグ32Fを例えば“0”から“1”に更新する。この場合、“1”のダーティーフラグ32Fは、対応するサブラインがダーティーなサブラインであることを示す。コントローラ4が、ダーティーなサブライン内のデータをNAND型フラッシュメモリ5に書き込んだ時、コントローラ4は、このサブラインに対応するダーティーフラグ32Fを例えば“1”から“0”に更新する。
図29のフローチャートは、各キャッシュラインに対応する複数のダーティーフラグを使用した入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS101)。ステップS101では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS101のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中から、転送済みサブラインの数が最も少ないキャッシュラインを探す(ステップS102)。ステップS102では、コントローラ4は、入れ替え対象となり得る各キャッシュラインに対応する複数のビットマップフラグを参照し、そして入れ替え対象となり得る全てのキャッシュライン間で転送済みサブラインの数を比較する。
コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインの数が2以上存在するか否か、つまり転送済みサブラインの数が最も少ないキャッシュラインが一つのみではなく、転送済みサブラインの数が最も少ないキャッシュラインが複数探されたか否かを判定する(ステップS103)。
転送済みサブラインの数が最も少ないキャッシュラインが一つだけ存在する場合には(ステップS103のNO)、コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS104)。
一方、転送済みサブラインの数が最も少ないキャッシュラインが2以上存在する場合には(ステップS103のYES)、コントローラ4は、転送済みサブラインの数が最も少ないこれら2以上のキャッシュラインの中で、ダーティーなサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS105)。
これにより、転送済みサブラインの数が最も少ないキャッシュラインの数が1つではなく、複数存在する場合には、ダーティーなサブラインの数がより少ないキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することができる。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS101のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS106)。
なお、別の実施形態では、コントローラ4は、ダーティーな転送済みサブラインの数のみを考慮して、入れ替え対象キャッシュラインを決定することもできる。この場合、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中で、ダーティーな転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定してもよい。
なお、図29のアドレス変換テーブルキャッシュタグ32の各エントリーに図18で説明したビットマップカウンタ32Cを追加してもよい。この場合、ステップS102では、コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを特定すればよい。また、図29のアドレス変換テーブルキャッシュタグ32の各エントリーに、“1”のダーティーフラグの数を示すダーティーフラグカウンタを追加してもよい。この場合、ステップS105では、コントローラ4は、ダーティーフラグカウンタの値が最小のキャッシュラインを特定すればよい。
図31のフローチャートは、アドレス変換テーブルキャッシュタグ32が各キャッシュラインに対応する複数のダーティーフラグを含む構成に適用されるキャッシュライン入れ替え動作の手順を示す。
コントローラ4は、まず、決定された入れ替え対象ラインに含まれ、且つダーティーフラグが有効の値(例えば“1”)のサブライン(ダーティーなサブライン)を特定する(ステップS111)。
コントローラ4は、ダーティーフラグが有効の値(例えば“1”)の各サブライン内のテーブルデータをNAND型フラッシュメモリ5のアドレス変換テーブル7に書き込む。すなわち、更新されている各テーブルデータをNAND型フラッシュメモリ5のアドレス変換テーブル7に書き戻し、更新されている各テーブルデータの内容をアドレス変換テーブル7に反映させる(ステップS112)。
コントローラ4は、(1)入れ替え対象キャッシュラインに対応するバリッドビット(VB)を無効を示す値(例えば“0”)にしてこの入れ替え対象キャッシュラインを無効化する動作と、(2)入れ替え対象キャッシュラインに対応する全てのビットマップフラグおよび全てのダーティーフラグを無効を示す値(例えば“0”)にクリアして入れ替え対象キャッシュライン内の全てのサブラインを無効化する動作を実行する(ステップS113)。
コントローラ4は、NAND型フラッシュメモリ5内のアドレス変換テーブル7から、求める物理アドレスを含む1サブライン分のテーブルデータをリードし、このリードした1サブライン分のテーブルデータを入れ替え対象キャッシュライン内の特定の一つのサブラインに転送する(ステップS114)。この特定の一つのサブラインは、キャッシュミスが起きる要因となったリードコマンドに含まれる論理アドレスによって定められる。
そして、コントローラ4は、(1)入れ替え対象キャッシュラインに対応するタグの内容をリードコマンドに含まれる論理アドレス内のタグフィールドに更新する動作と、(2)入れ替え対象キャッシュラインの転送済みサブラインに対応するビットマップフラグを有効を示す値(例えば“1”)に更新する動作と、(3)入れ替え対象キャッシュラインに対応するバリッドビット(VB)を有効を示す値(例えば“1”)に更新する動作を実行する(ステップS115)。
(第4実施形態)
以下、ビットマップフラグ、ダーティーフラグ、タイムスタンプを使用して入れ替え対象キャッシュラインを決定する動作を第4実施形態として説明する。
第4実施形態に係るストレージデバイス3のハードウェア構成は第1実施形態のストレージデバイス3と同様であり、第1実施形態と異なる点のみを中心に説明する。
図32に示されているように、第4実施形態においては、アドレス変換テーブルキャッシュタグ32の各エントリーは、タグ32A、複数のビットマップフラグ32Bに加え、タイムスタンプ32E、複数のダーティーフラグ32Fを含む。
図33のフローチャートは、第4実施形態に係る入れ替え対象キャッシュライン決定動作の手順を示す。
例えばキャッシュミスが発生した時、コントローラ4は、キャッシュライン入れ替えが必要であるか否かを判定する(ステップS121)。ステップS121では、コントローラ4は、入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するか否かを判定する。未使用のキャッシュラインが存在しないならば、コントローラ4は、キャッシュライン入れ替えが必要であると判定する。
キャッシュライン入れ替えが必要であるならば(ステップS121のYES)、コントローラ4は、入れ替え対象となり得る全てのキャッシュラインの中から、転送済みサブラインの数が最も少ないキャッシュラインを探す(ステップS122)。ステップS122では、コントローラ4は、入れ替え対象となり得る全てのキャッシュライン間で転送済みサブラインの数を比較する。
コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインの数が2以上存在するか否か、つまり転送済みサブラインの数が最も少ないキャッシュラインが一つのみではなく、転送済みサブラインの数が最も少ないキャッシュラインが2以上探されたか否かを判定する(ステップS123)。
転送済みサブラインの数が最も少ないキャッシュラインが一つだけ存在する場合には(ステップS123のNO)、コントローラ4は、転送済みサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS124)。
一方、転送済みサブラインの数が最も少ないキャッシュラインが2以上存在する場合には、つまり転送済みサブラインの数が最も少ないキャッシュラインが2以上探された場合には(ステップS123のYES)、コントローラ4は、転送済みサブラインの数が最も少ないこれら2以上のキャッシュラインの中で、ダーティーなサブラインの数が最も少ないキャッシュラインを探す(ステップS125)。ステップS125では、コントローラ4は、転送済みサブラインの数が最も少ないこれら2以上のキャッシュライン間でダーティーなサブラインの数を比較する。
コントローラ4は、ダーティーなサブラインの数が最も少ないキャッシュラインの数が2以上であるか否か、つまりダーティーなサブラインの数が最も少ないキャッシュラインが一つのみではなく、ダーティーなサブラインの数が最も少ないキャッシュラインが2以上探されたか否かを判定する(ステップS126)。
ダーティーなサブラインの数が最も少ないキャッシュラインが一つだけ存在する場合には(ステップS126のNO)、コントローラ4は、転送済みサブラインの数が最も少ない2以上のキャッシュラインの中で、ダーティーなサブラインの数が最も少ないキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS127)。
一方、ダーティーなサブラインの数が最も少ないキャッシュラインが2以上存在する場合には、つまりダーティーなサブラインの数が最も少ないキャッシュラインが2以上探された場合には(ステップS126のYES)、コントローラ4は、ダーティーなサブラインの数が最も少ないこれら2以上のキャッシュラインの中で、タイムスタンプが最も旧いキャッシュラインを入れ替え対象キャッシュラインに決定し、そして、NAND型フラッシュメモリ5からリードされた1サブライン分のデータ(テーブルデータ)を入れ替え対象キャッシュライン内の複数のサブラインのうちの一つのサブラインに転送するキャッシュライン入れ替え動作を実行する(ステップS128)。
これにより、転送済みサブラインの数が最も少ないキャッシュラインの数が1つではなく、複数存在する場合には、ダーティーなサブラインの数が最も少ないキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することができる。また、ダーティーなサブラインの数が最も少ないキャッシュラインの数が1つではなく、ダーティーなサブラインの数が最も少ないキャッシュラインが複数探された場合には、タイムスタンプがより旧いキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することができる。
入れ替え対象となり得るキャッシュライン(全ての入れ替え対象キャッシュライン候補)の中に未使用のキャッシュラインが存在するならば、コントローラ4は、キャッシュライン入れ替えが必要ではないと判定する。
キャッシュライン入れ替えが必要ではないならば(ステップS121のNO)、コントローラ4は、(キャッシュライン入れ替えを伴わない)キャッシュライン転送動作、つまり未使用のキャッシュライン内の複数のサブラインのうちの一つのサブラインにテーブルデータを転送する動作を実行する(ステップS129)。
なお、図32のアドレス変換テーブルキャッシュタグ32の各エントリーにビットマップカウンタ32Cおよびダーティーフラグカウンタを追加してもよい。この場合、ステップS122では、コントローラ4は、ビットマップカウンタの値が最小のキャッシュラインを特定すればよい。また、ステップS125では、コントローラ4は、ダーティーフラグカウンタの値が最小のキャッシュラインを特定すればよい。
(第5実施形態)
以下、ホストメモリ用のキャッシュを含むコントローラ4の構成を第5実施形態として説明する。
図34に示されているように、アドレス変換テーブルキャッシュ31はホストメモリ(メインメモリ22のデバイス使用領域22B)に置かれている。デバイス使用領域22Bは、アドレス変換テーブルキャッシュ31のみならず、コントローラ4によって使用される他のデータを格納するためにも利用される。他のデータは、例えば、NAND型フラッシュメモリ5に書き込まれたデータの消失復元用のパリティであってもよい。ホストメモリ(メインメモリ22のデバイス使用領域22B)においては、あるアドレス範囲(ここでは、アドレスAからアドレスBまでのアドレス範囲)に対応する記憶領域はアドレス変換テーブルキャッシュ31を格納するために使用され、別のアドレス範囲(ここでは、アドレスXからアドレスYまでのアドレス範囲)に対応する記憶領域は他のデータを格納するために使用される。
ストレージデバイス3においては、コントローラ4は、上述のホストインタフェース11、CPU12、RAM13、バックエンド部14に加え、ホストメモリ上のアドレス変換テーブルキャッシュ31に対するアクセスを高速化するために、ホストメモリ用のキャッシュ51を含んでいる。キャッシュ51は、バス10とホストインタフェース11との間に配置されている。キャッシュ51は、ホストメモリに書き込むべきデータ(テーブルデータ、パリティ、等)を自身のキャッシュ領域(SRAM51A)にキャッシュするように構成されている。キャッシュ51は、ライトバックタイプのキャッシュとして実現されていてもよい。この場合、このキャッシュ51内のキャッシュ領域に未使用のキャッシュラインが無くなった場合、キャッシュ51は、このキャッシュ領域内の入れ替え対象キャッシュラインに格納されているデータを破棄またはホストメモリに書き戻し、そしてホストメモリに書き込むべき新たなデータをこの入れ替え対象キャッシュラインに格納する。
コントローラ4は、さらに、幾つかのハードウェアアクセラレータ、例えば、ハードウェアアクセラレータ(HWA#1)52A、ハードウェアアクセラレータ(HWA#2)52B、を含んでいてもよい。ハードウェアアクセラレータ(HWA#1)52Aは、論理アドレスを物理アドレスに変換するアドレス解決動作を実行するための専用ハードウェアである。ハードウェアアクセラレータ(HWA#2)52Bは、上述のパリティをホストメモリにライトする動作およびホストメモリからパリティをリードする動作等を実行するための専用ハードウェアである。ハードウェアアクセラレータ(HWA#1)52Aおよびハードウェアアクセラレータ(HWA#2)52Bの各々は、メモリアクセスを実行可能なバスマスタとして実現されている。ハードウェアアクセラレータ(HWA#1)52Aは、ホストメモリ上のアドレス変換テーブルキャッシュ31にデータ(デーブルデータ)を格納するためのライト要求を発行することができ、またハードウェアアクセラレータ(HWA#2)52Bは、ホストメモリ上にパリティのような他のデータを格納するためのライト要求を発行することができる。
図35は、キャッシュ51の構成例を示す。
キャッシュ51は、キャッシュとして機能するSRAM51Aと、このSRAM51A(キャッシュ)を制御する回路であるキャッシュコントローラ51Bとを含む。SRAM51Aは、複数のキャッシュラインCL0、CL1、CL2、…を含むキャッシュ領域61Aと、複数のキャッシュラインに対応する複数のエントリーを含むキャッシュタグ領域61Bとを含む。キャッシュラインCL0、CL1、CL2、…の各々のサイズは、1サブラインのサイズと同じであってもよいし、1サブラインのサイズとは異なっていてもよい。
キャッシュタグ領域61Bの各エントリーは、バリッドビット(VB)と、タグと、ユーゼージ情報と、ダーティーフラグとを含んでいてもよい。各エントリーのユーゼージ情報は、キャッシュタグ領域61B内の入れ替え対象キャッシュラインを決定するために使用される。キャッシュタグ領域61B内の入れ替え対象キャッシュラインを決定するための入れ替えポリシーとしては、LRUが使用されてもよいし、別のポリシーが使用されてもよい。
例えば、キャッシュ51が5ウェイ・セットアソシアティブ・キャッシュとして実現されているケースにおいては、ある特定のセットに対応する5つのキャッシュライン(つまり、5つのウェイの5つのキャッシュライン)に対して異なる優先度のユーゼージ情報が与えられる。入れ替えポリシーがLRUであるならば、最も最近アクセスされたキャッシュラインにはそのキャッシュラインを最も置換され難くするための優先度を有するユーゼージ情報(最も置換され難い優先度のユーゼージ情報)が与えられる。
ダーティーフラグは、対応するキャッシュラインがダーティーなキャッシュラインであるか否かを示す。ダーティーなキャッシュラインとは、ホストメモリにそのキャッシュラインの内容が反映されていないキャッシュラインを意味する。換言すれば、ダーティーなキャッシュラインとは、ホストメモリに反映されていないデータが格納されているキャッシュラインを意味する。
図36のフローチャートは、ホスト2からのリード要求(リードコマンド)の受信時にCPU12またはハードウェアアクセラレータ(HWA#1)52Aによって実行されるリード処理の手順を示す。
CPU12またはハードウェアアクセラレータ(HWA#1)52Aがホスト2からリード要求(リードコマンド)を受信した時(ステップS131)、CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、アドレス変換テーブルキャッシュタグ32を参照して、ホストメモリ上のアドレス変換テーブルキャッシュ31のキャッシュヒット/ミスを判定する(ステップS132)。
リードコマンド内の論理アドレスに対応する物理アドレスを含むテーブルデータがホストメモリ上のアドレス変換テーブルキャッシュ31に存在するならば(キャッシュヒット)(ステップS133のYES)、CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、ホストメモリ上のアドレス変換テーブルキャッシュ31からテーブルデータをリードするためのリード要求を発行して、この論理アドレスに対応する物理アドレスを含むテーブルデータを得る(ステップS134)。発行されたリード要求はキャッシュ51に送られるので、もしこのテーブルデータがキャッシュ51内のキャッシュ領域61Aに存在するならば、図37のステップS143、S144を参照して詳細は後述するが、キャッシュ51のキャッシュコントローラ51Bは、キャッシュ領域61Aからこのテーブルデータをリードし、リードしたテーブルデータをCPU12またはハードウェアアクセラレータ(HWA#1)52Aに返す。もしこのテーブルデータがキャッシュ51内のキャッシュ領域61Aに存在しないならば、キャッシュコントローラ51Bは、図37のステップS143、S145〜S152を参照して詳細は後述するが、このリード要求をホストインタフェース11を介してホスト2に送出する。
CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、取得したテーブルデータに含まれる目的の物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスし、NAND型フラッシュメモリ5からユーザデータをリードする(ステップS135)。
リードコマンド内の論理アドレスに対応する物理アドレスを含むテーブルデータがホストメモリ上のアドレス変換テーブルキャッシュ31に存在しないならば(キャッシュミスまたはビットマップミス)(ステップS133のNO)、CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、NAND型フラッシュメモリ5のアドレス変換テーブル7からこのテーブルデータをリードする(ステップS136)。そして、CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、このリードしたテーブルデータをホストメモリ上のアドレス変換テーブルキャッシュ31に格納するためのライト要求を発行する(ステップS137)。そして、CPU12またはハードウェアアクセラレータ(HWA#1)52Aは、リードしたテーブルデータに含まれる目的の物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスし、NAND型フラッシュメモリ5からユーザデータをリードする(ステップS135)。なお、ここでは、ステップS137の処理を最初に実行し、次いでステップS135の処理を実行する、という処理順序を例示したが、ステップS135の処理を最初に実行し、次いでステップS137の処理を実行するという処理順序であってもよい。つまり、ホストメモリ上のアドレス変換テーブルキャッシュ31へのテーブルデータ転送と、NAND型フラッシュメモリ5からのユーザデータリードとは、どちらが先に実行されてもよい。図8、図10で説明したキャッシュ制御処理においても、ホストメモリ上のアドレス変換テーブルキャッシュ31へのテーブルデータ転送と、NAND型フラッシュメモリ5からのユーザデータリードとは、どちらが先に実行されてもよい。
図37のフローチャートは、ホストメモリ上のアドレス変換テーブルキャッシュ31からテーブルデータをリードするためのリード要求の受信時にキャッシュ51(キャッシュコントローラ51B)によって実行される動作の手順を示す。
キャッシュ51がホストメモリ上のアドレス変換テーブルキャッシュ31からテーブルデータをリードするためのリード要求をCPU12またはハードウェアアクセラレータ(HWA#1)52Aから受信した時(ステップS141のYES)、キャッシュ51のキャッシュコントローラ51Bは、自身のキャッシュタグ領域61Bを参照して、リード要求によって指定された1サブライン分のテーブルデータが自身のキャッシュ領域61Aに存在するか否かを判定する(ステップS142)。
このテーブルデータが自身のキャッシュ領域61Aに存在するならば(キャッシュヒット)(ステップS143のYES)、キャッシュコントローラ51Bは、キャッシュ領域61Aからこのテーブルデータをリードし、リードしたテーブルデータをCPU12またはハードウェアアクセラレータ(HWA#1)52Aに返す(ステップS144)。
この1サブライン分のテーブルデータが自身のキャッシュ領域61Aに存在しないならば(キャッシュミス)(ステップS143のNO)、キャッシュコントローラ51Bは、このリード要求をホストインタフェース11を介してホスト2に送出して、この1サブライン分のテーブルデータをホストメモリ上のアドレス変換テーブルキャッシュ31からリードする(ステップS145)。
キャッシュコントローラ51Bは、このテーブルデータを格納可能な空きキャッシュライン(このテーブルデータを格納可能な一つ以上の空きキャッシュライン)が自身のキャッシュ領域61Aに存在するか否かを判定する(ステップS146)。
このテーブルデータを格納可能な空きキャッシュライン(このテーブルデータを格納可能な一つ以上の空きキャッシュライン)が自身のキャッシュ領域61Aに存在しないならば(ステップS146のNO)、キャッシュコントローラ51Bは、キャッシュ領域61A内の入れ替え対象となり得る各キャッシュラインのユーゼージ情報(優先度)を参照して、キャッシュ領域61A内の入れ替え対象キャッシュラインを決定する(ステップS147)。
キャッシュコントローラ51Bは、入れ替え対象キャッシュラインに対応するダーティーフラグを参照して、入れ替え対象キャッシュラインがその内容がホストメモリに反映されていないダーティーなキャッシュラインであるか否かを判定する(ステップS148)。
入れ替え対象キャッシュラインがダーティーなキャッシュラインであるならば(ステップS148のYES)、キャッシュコントローラ51Bは、入れ替え対象キャッシュラインの内容(テーブルデータ、またはパリティ)をホストメモリに書き戻す(ステップS149)。
入れ替え対象キャッシュラインがダーティーなキャッシュラインではないならば(ステップS148のNO)、キャッシュコントローラ51Bは、入れ替え対象キャッシュラインの内容(テーブルデータ、またはパリティ)を破棄する(ステップS150)。
ステップS149の処理またはステップS150の処理を実行した後、キャッシュコントローラ51Bは、ホストメモリ上のアドレス変換テーブルキャッシュ31からリードされたテーブルデータを自身のキャッシュ領域61Aの入れ替え対象キャッシュラインに格納する(ステップS151)。そして、キャッシュコントローラ51Bは、このテーブルデータをCPU12またはハードウェアアクセラレータ(HWA#1)52Aに返す(ステップS152)。
テーブルデータを格納可能な空きキャッシュライン(このテーブルデータを格納可能な一つ以上の空きキャッシュライン)が自身のキャッシュ領域61Aに存在しているならば(ステップS146のYES)、キャッシュコントローラ51Bは、ステップS147〜S150の処理の実行をスキップする。
図38のフローチャートは、ホストメモリ上のアドレス変換テーブルキャッシュ31にテーブルデータを格納するためのライト要求の受信時にキャッシュ51(キャッシュコントローラ51B)によって実行される動作の手順を示す。
キャッシュ51のキャッシュコントローラ51Bがホストメモリ上のアドレス変換テーブルキャッシュ31に1サブライン分のテーブルデータを格納するためのライト要求をCPU12またはハードウェアアクセラレータ(HWA#1)52Aから受信した時(ステップS161のYES)、キャッシュコントローラ51Bは、このテーブルデータを格納可能な空きキャッシュライン(このテーブルデータを格納可能な一つ以上の空きキャッシュライン)が自身のキャッシュ領域61Aに存在するか否かを判定する(ステップS162)。
このテーブルデータを格納可能な空きキャッシュライン(このテーブルデータを格納可能な一つ以上の空きキャッシュライン)が自身のキャッシュ領域61Aに存在しないならば(ステップS162のNO)、キャッシュコントローラ51Bは、キャッシュ領域61A内の入れ替え対象となり得る各キャッシュラインのユーゼージ情報(優先度)を参照して、キャッシュ領域61A内の入れ替え対象キャッシュラインを決定する(ステップS163)。
キャッシュコントローラ51Bは、入れ替え対象キャッシュラインに対応するダーティーフラグを参照して、入れ替え対象キャッシュラインがその内容がホストメモリに反映されていないダーティーなキャッシュラインであるか否かを判定する(ステップS164)。
入れ替え対象キャッシュラインがダーティーなキャッシュラインであるならば(ステップS164のYES)、キャッシュコントローラ51Bは、入れ替え対象キャッシュラインの内容(テーブルデータ、またはパリティ)をホストメモリに書き戻す(ステップS165)。
入れ替え対象キャッシュラインがダーティーなキャッシュラインではないならば(ステップS164のNO)、キャッシュコントローラ51Bは、入れ替え対象キャッシュラインの内容(テーブルデータ、またはパリティ)を破棄する(ステップS166)。
ステップS165の処理またはステップS166の処理を実行した後、キャッシュコントローラ51Bは、CPU12またはハードウェアアクセラレータ(HWA#1)52Aから受信したテーブルデータを入れ替え対象キャッシュラインに格納する(ステップS167)。
図39のフローチャートは、NAND型フラッシュメモリ5に書き込まれたユーザデータの消失復元用のパリティをホストメモリに書き込む動作の手順を示す。
NAND型フラッシュメモリ5に書き込まれたユーザデータの消失復元用のパリティをホストメモリに書き込むことが必要な時(ステップS171のYES)、CPU12またはハードウェアアクセラレータ(HWA#2)52Bは、このパリティをホストメモリに格納するためのライト要求を発行する(ステップS172)。
このライト要求をCPU12またはハードウェアアクセラレータ(HWA#2)52Bから受信した時、キャッシュ51(キャッシュコントローラ51B)は、図38で説明した処理と同様の手順で、パリティを自身のキャッシュ領域61Aに格納する動作、入れ替え対象キャッシュラインの内容を破棄またはホストメモリに書き戻す動作、等を実行する。
また、ホストメモリからパリティをリードするためのリード要求をCPU12またはハードウェアアクセラレータ(HWA#2)52Bから受信した時、キャッシュ51(キャッシュコントローラ51B)は、図37で説明した処理と同様の手順で、自身のキャッシュ領域61Aまたはホストメモリからパリティをリードする動作、入れ替え対象キャッシュラインの内容を破棄またはホストメモリに書き戻す動作、等を実行する。
このように、キャッシュ51は、テーブルデータのみならず、パリティのような他のデータも自身のキャッシュ領域61Aにキャッシュするように構成されている。換言すれば、キャッシュ51は、ホストメモリ内のアドレス変換テーブルキャッシュ31に格納すべきデータ(テーブルデータ)と、ホストメモリに格納すべき他のデータ(例えばパリティ)とをキャッシュするように構成されている。
しかし、パリティはデータ消失のような障害が起こらない限り利用されないデータであるので、たとえパリティがキャッシュ51にキャッシュされても、このキャッシュされたパリティが利用されるケースは非常に少ない。また、通常、パリティのサイズは非常に大きい。したがって、CPU12またはハードウェアアクセラレータ(HWA#2)52がパリティをホストメモリに格納するためのライト要求を発行すると、キャッシュ31内の多くのキャッシュラインが、利用頻度の少ないこのパリティによって占有されてしまう。このことは、キャッシュ51におけるテーブルデータのヒット率を低下させる要因となる。
そこで、キャッシュ51のキャッシュコントローラ51Bは、アドレス変換テーブル7のデータ(テーブルデータ)が格納されている自身のキャッシュラインよりもパリティのような他のデータが格納されている自身のキャッシュラインを優先的に入れ替え対象とするように構成されている。この場合、キャッシュ51のキャッシュコントローラ51Bは、自身の一つのキャッシュラインに格納されるべきデータのライトアドレスがパリティのような他のデータが格納されるべきホストメモリ上の記憶領域のアドレス範囲(アドレスX〜アドレスY)に属する場合、この一つのキャッシュラインに対応するキャッシュタグ領域61Bのエントリーに、入れ替え(置換)されやすい値の優先度を格納する。例えば、当該他のデータに対応するアドレス範囲に書き込むべきデータをキャッシュ領域61Aのキャッシュラインに格納する時には、キャッシュコントローラ51Bは、このキャッシュラインを優先的に入れ替え対象とするための優先度(このキャッシュラインを置換され易くする優先度)をこのキャッシュラインに対応するキャッシュタグ領域61Bのエントリーに格納してもよい。これにより、パリティが格納されているキャッシュラインを優先的に入れ替え対象キャッシュラインに決定することが可能となる。この結果、ある新たなテーブルデータがキャッシュ51(キャッシュ領域61A)にキャッシュされるべき時には、既にテーブルデータを格納しているキャッシュラインそれぞれをキャッシュ51内に維持しつつ、パリティを格納しているキャッシュラインのみをキャッシュ51から優先して追い出すことが可能となる。
図40は、ホストメモリ上の優先置換領域へのライトデータに対して、対応するキャッシュラインを置換されやすくする優先度(ユーゼージ情報)を割り当てる動作を示す。
ホストメモリ上の優先置換領域とは、キャッシュ51から優先して追い出すべきデータに対応するホストメモリ上の記憶領域である。第5実施形態では、特定のアドレス範囲(アドレスXからアドレスYまでのアドレス範囲)を有する記憶領域、つまりパリティのような他のデータが格納される記憶領域がホストメモリ上の優先置換領域となる。
以下では、キャッシュ51が5ウェイ・セットアソシアティブ・キャッシュである場合を想定する。各セットの5つのウェイに対応する5つのキャッシュラインの各々には、0から4の値(優先度)のいずれかを示すユーゼージ情報が割り当てられる。ここでは、ユーゼージ情報の値(優先度)が小さいほど、最近アクセスされたキャッシュライン(つまり、置換されにくいキャッシュライン)である場合を想定する。
いま、あるセットの5つのウェイに対応する5つのキャッシュラインA,B,C,D,Eに対して、値0のユーゼージ情報、値2のユーゼージ情報、値3のユーゼージ情報、値4のユーゼージ情報、値1のユーゼージ情報が割り当てられている場合を想定する。優先置換領域へライトされるべきデータの格納先キャッシュライン(格納先ウェイ番号)がCであるならば、このデータがキャッシュラインCに格納されるとともに、このキャッシュラインCのユーゼージ情報の値は、キャッシュラインCを最も置換されやすくする最大値(ここでは4)に更新される。キャッシュラインCの元のユーゼージ情報の値(ここでは3)よりも大きい値のユーゼージ情報が割り当てられているキャッシュラインDについては、そのユーゼージ情報の値は、1つ新しい方に更新される。ここでは、キャッシュラインDのユーゼージ情報は、その元の値4から1を引くことによって得られる値3に更新される。キャッシュラインCの元のユーゼージ情報の値(ここでは3)よりも小さい値のユーゼージ情報が割り当てられているキャッシュラインA,B,Eについては、そのユーゼージ情報の値は更新されずに元の値に維持される。
図41に示されているように、優先置換領域へライトされるべきデータの格納先キャッシュライン(格納先ウェイ番号)がBであるならば、このデータがキャッシュラインBに格納されるとともに、このキャッシュラインBのユーゼージ情報の値は、キャッシュラインBを最も置換されやすくするための最大値(ここでは4)に更新される。キャッシュラインBの元のユーゼージ情報の値(ここでは2)よりも大きい値のユーゼージ情報が割り当てられているキャッシュラインC、Dについては、そのユーゼージ情報の値は、1つ新しい方にそれぞれ更新される。ここでは、キャッシュラインCのユーゼージ情報は、その元の値3から1を引くことによって得られる値2に更新される。キャッシュラインDのユーゼージ情報は、その元の値4から1を引くことによって得られる値3に更新される。キャッシュラインBの元のユーゼージ情報の値(ここでは2)よりも小さい値のユーゼージ情報が割り当てられているキャッシュラインA,Eについては、そのユーゼージ情報の値は更新されずに元の値に維持される。
図42は、優先置換領域以外のホストメモリ上の領域へのライトデータに対しては対応するキャッシュラインを置換され難くするユーゼージ情報を割り当てる動作を示す。
第5実施形態では、特定のアドレス範囲(アドレスAからアドレスBまでのアドレス範囲)を有する記憶領域、つまりアドレス変換テーブルキャッシュ31が格納される記憶領域がホストメモリ上の優先置換領域以外の領域となる。
図42に示されているように、優先置換領域以外の領域(アドレス変換テーブルキャッシュ31が格納される記憶領域)へライトされるべきデータ(テーブルデータ)の格納先キャッシュライン(格納先ウェイ番号)がCであるならば、このテーブルデータがキャッシュラインCに格納されるとともに、このキャッシュラインCのユーゼージ情報の値は、キャッシュラインCを最も置換され難くする値(ここでは0)に更新される。キャッシュラインCの元のユーゼージ情報の値(ここでは3)よりも小さい値のユーゼージ情報が割り当てられているキャッシュラインA、B、Eについては、そのユーゼージ情報の値は、1つ旧い方にそれぞれ更新される。ここでは、キャッシュラインAのユーゼージ情報は、その元の値0に1を加算することによって得られる値1に更新される。キャッシュラインBのユーゼージ情報は、その元の値2に1を加算することによって得られる値3に更新される。キャッシュラインEのユーゼージ情報は、その元の値1に1を加算することによって得られる値2に更新される。キャッシュラインCの元のユーゼージ情報の値(ここでは2)よりも大きい値のユーゼージ情報が割り当てられているキャッシュラインDについては、そのユーゼージ情報の値は更新されずに元の値に維持される。
キャッシュラインCがアドレス範囲(アドレスAからアドレスBまでのアドレス範囲)に属するリードアドレスを含むリード要求によってリードアクセスされた場合も、上記と同様のユーゼージ情報更新動作が実行される。
また、図43に示されているように、優先置換領域以外の領域(アドレス変換テーブルキャッシュ31が格納される記憶領域)へライトされるべきデータ(テーブルデータ)の格納先キャッシュライン(格納先ウェイ番号)がBであるならば、このテーブルデータがキャッシュラインBに格納されるとともに、このキャッシュラインBのユーゼージ情報の値は、キャッシュラインBを最も置換され難くする値(ここでは0)に更新される。キャッシュラインBの元のユーゼージ情報の値(ここでは2)よりも小さい値のユーゼージ情報が割り当てられているキャッシュラインA、Eについては、そのユーゼージ情報の値は、1つ旧い方にそれぞれ更新される。ここでは、キャッシュラインAのユーゼージ情報は、その元の値0に1を加算することによって得られる値1に更新される。キャッシュラインEのユーゼージ情報は、その元の値1に1を加算することによって得られる値2に更新される。キャッシュラインBの元のユーゼージ情報の値(ここでは2)よりも大きい値のユーゼージ情報が割り当てられているキャッシュラインC,Dについては、そのユーゼージ情報の値は更新されずに元の値に維持される。
キャッシュラインBがアドレス範囲(アドレスAからアドレスBまでのアドレス範囲)に属するリードアドレスを含むリード要求によってリードアクセスされた場合も、上記と同様のユーゼージ情報更新動作が実行される。
図44のフローチャートは、図35のキャッシュ51(キャッシュコントローラ51B)によって実行されるユーゼージ情報更新動作の手順を示す。
キャッシュ51のキャッシュコントローラ51BがCPU12またはハードウェアアクセラレータ(HWA#1)52Aからデータのライト要求を受信した時、キャッシュコントローラ51Bは、キャッシュ領域61A内の或るキャッシュラインに、このデータを書き込む(ステップS181)。キャッシュコントローラ51Bは、このライト要求によって指定されるライトアドレスが優先置換領域に対応する特定のアドレス範囲に属するか否かを判定する(ステップS182)。
このライトアドレスが特定のアドレス範囲に属するならば(ステップS182のYES)、キャッシュコントローラ51Bは、データが書き込まれたキャッシュラインに対応するユーゼージ情報を最も旧い値(最大値)に更新する(ステップS183)。
一方、このライトアドレスが特定のアドレス範囲に属さないならば(ステップS182のNO)、キャッシュコントローラ51Bは、データが書き込まれたキャッシュラインに対応するユーゼージ情報を最も新しい値(最小値)に更新する(ステップS184)。
ステップS183またはS184の後、キャッシュコントローラ51Bは、データが書き込まれたキャッシュラインが属するセット内の他のウェイ(他のキャッシュライン)にそれぞれ対応するユーゼージ情報を必要に応じて更新する(ステップS185)。
図45のフローチャートは、キャッシュ51(キャッシュコントローラ51B)によって実行されるユーゼージ情報更新動作の一連の手順の例を示す。
図45においても、キャッシュ51が5ウェイ・セットアソシアティブ・キャッシュである場合が想定されている。つまり、ウェイ数は5であり、ウェイ番号は0〜4であり、ユーゼージ情報は0(新)〜4(旧)である。また、図45において、valid(i)はウェイ番号i(キャッシュラインi)の有効フラグ(バリッドビットVB)を表し、usage(i)はウェイ番号i(キャッシュラインi)のユーゼージ情報の値(優先度)を表している。
CPU12またはハードウェアアクセラレータ52Aまたは52Bからのライト要求を受け取ると、キャッシュ51のキャッシュコントローラ51Bは、ライトすべきデータ(ライトデータ)に対応するアドレス(ライトアドレス)によって定まる特定のセットの5つのウェイから、ライトデータが格納されるべきキャッシュライン(つまり、格納先ウェイ番号(n))を決定する(ステップS191)。そして、キャッシュコントローラ51Bは、ライトアドレスが優先置換領域に対応する特定のアドレス範囲に属するか否かを判定する(ステップS192)。
ライトアドレスが優先置換領域に対応する特定のアドレス範囲に属さないならば、つまりライトデータがアドレス変換テーブルキャッシュに格納すべきデータ(テーブルデータ)であるならば(ステップS192のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iがウェイ数(=5)よりも小さいか否かを判定する(ステップS193)。現在のウェイ番号iがウェイ数よりも小さいならば(ステップS193のYES)、キャッシュコントローラ51Bは、現在のウェイ番号iを初期値0から1ずつインクリメントしながら、以下のステップS194〜S199の処理を繰り返し実行する。
まず、キャッシュコントローラ51Bは、現在のウェイ番号iが格納先ウェイ番号(n)に一致するか否かを判定する(ステップS194)。
現在のウェイ番号iが格納先ウェイ番号(n)に一致するならば(ステップS194のYES)、キャッシュコントローラ51Bは、格納先ウェイ番号(n)に対応するキャッシュラインのユーゼージ情報(usage(n))を最小値(ここでは0)に更新する(ステップS195)。
現在のウェイ番号iが格納先ウェイ番号(n)に一致しないならば(ステップS194のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのバリッドビットが“1”であるかどうか、つまり現在のウェイ番号iのキャッシュラインが有効であるか否かを判定する(ステップS196)。
現在のウェイ番号iに対応するキャッシュラインが有効でないならば(ステップS196のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iを1だけ増やし、ステップS193の処理に戻る。
現在のウェイ番号iに対応するキャッシュラインが有効であるならば(ステップS196のYES)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))がユーゼージ情報(usage(i))よりも小さく、且つこのユーゼージ情報(usage(i))が最大値(4)よりも小さい、という条件が満たされるか否かを判定する(ステップS197)。
この条件が満たされるならば(ステップS197のYES)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を1つ旧い方に更新する(ステップS198)。ステップS198では、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を、「usage(i)+1」に更新する。
一方、この条件が満たされないならば(ステップS197のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を更新せずに元の値に維持する(ステップS199)。
ステップS198またはステップS199の処理を実行した後、キャッシュコントローラ51Bは、現在のウェイ番号iを1だけ増やし、ステップS193の処理に戻る。
このようにして、ライトデータのライトアドレスが優先置換領域に対応するアドレス範囲に属さない場合には、このライトデータが格納されるキャッシュラインに対しては最も置換され難い値(=最小値)のユーゼージ情報が割り当てられる。
次に、ライトアドレスが優先置換領域に対応するアドレス範囲に属する場合に実行されるユーゼージ情報更新動作について説明する。
ライトアドレスが優先置換領域に対応するアドレス範囲に属するならば、つまりライトデータがアドレス変換テーブルキャッシュに格納すべきデータ(テーブルデータ)以外のデータ(例えばパリティ)であるならば(ステップS192のYES)、キャッシュ51は、現在のウェイ番号iがウェイ数よりも小さいか否かを判定する(ステップS200)。現在のウェイ番号iがウェイ数よりも小さいならば(ステップS200のYES)、キャッシュコントローラ51Bは、ウェイ番号iを初期値0から1ずつインクリメントしながら、以下のステップS201〜S206の処理を繰り返し実行する。
まず、キャッシュ51は、現在のウェイ番号iが格納先ウェイ番号(n)に一致するか否かを判定する(ステップS201)。
現在のウェイ番号iが格納先ウェイ番号(n)に一致するならば(ステップS201のYES)、キャッシュコントローラ51Bは、格納先ウェイ番号(n)に対応するキャッシュラインのユーゼージ情報(usage(n))を最大値(ここでは4)に更新する(ステップS202)。
現在のウェイ番号iが格納先ウェイ番号(n)に一致しないならば(ステップS201のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのバリッドビットが“1”であるかどうか、つまり現在のウェイ番号iのキャッシュラインが有効であるか否かを判定する(ステップS203)。
現在のウェイ番号iに対応するキャッシュラインが有効でないならば(ステップS203のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iを1だけ増やし、ステップS200の処理に戻る。
現在のウェイ番号iに対応するキャッシュラインが有効であるならば(ステップS203のYES)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))がユーゼージ情報(usage(i))よりも大きいという条件が満たされるか否かを判定する(ステップS197)。
この条件が満たされるならば(ステップS204のYES)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を1つ新しい方に更新する(ステップS205)。ステップS205では、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を、「usage(i)−1」に更新する。
一方、この条件が満たされないならば(ステップS204のNO)、キャッシュコントローラ51Bは、現在のウェイ番号iに対応するキャッシュラインのユーゼージ情報(usage(i))を更新せずに元の値に維持する(ステップS206)。
ステップS205またはステップS206の処理を実行した後、キャッシュコントローラ51Bは、現在のウェイ番号iを1だけ増やし、ステップS200の処理に戻る。
このようにして、ライトデータのライトアドレスが優先置換領域に対応するアドレス範囲に属する場合には、このライトデータが格納されるキャッシュラインに対して、最も置換され易い値(=最大値)のユーゼージ情報が割り当てられる。
なお、第5実施形態では、キャッシュコントローラ51Bは、指定されたアドレス範囲に対応する優先置換領域に書き込むべきデータをキャッシュ領域61Aのキャッシュラインに格納する時に、このキャッシュラインを最も置換され易くする値(このキャッシュラインを最も置換され易くする優先度)のユーゼージ情報をこのキャッシュラインに割り当てたが、このキャッシュラインに対してこのキャッシュラインを2番目に置換されやすくする値(=3)を割り当ててもよい。
また、キャッシュコントローラ51Bは、優先置換領域内のデータを保持するキャッシュラインがリードされる場合には、このキャッシュラインのユーゼージ情報の値(優先度)を更新しなくてもよい。一方、優先置換領域に属さないデータ(アドレス変換テーブルキャッシュ31のテーブルデータ)を保持するキャッシュラインがリードされる場合には、キャッシュコントローラ51Bは、このキャッシュラインのユーゼージ情報の値(優先度)を最も置換され易い値(=最大値)に更新してもよい。
また、キャッシュコントローラ51Bは、自身の一つのキャッシュラインに格納されるべき第1のデータ(ライトデータ)をハードウェアアクセラレータ(HWA#2)52Bから受信した場合、この一つのキャッシュラインに対応するキャッシュタグ領域61Bのエントリーに、入れ替え(置換)されやすい値の優先度を格納してもよい。この場合、キャッシュ51は、パリティをホストメモリに書き込むように構成されたハードウェアアクセラレータ(HWA#2)52Bからのライト要求に応じてデータをキャッシュ領域61Aのキャッシュラインに格納する時には、最も置換され易い値(最も置換され易い優先度)のユーゼージ情報をこのキャッシュラインに対応するキャッシュタグ領域61Bのエントリーに格納し、アドレス変換テーブル7のテーブルデータをホストメモリ(アドレス変換テーブルキャッシュ31)に書き込むように構成されたハードウェアアクセラレータ(HWA#1)52Aからのライト要求に応じてデータをキャッシュ領域61Aのキャッシュラインに格納する時には、最も置換され難い値(最も置換され難い優先度)のユーゼージ情報をこのキャッシュラインに対応するキャッシュタグ領域61Bのエントリーに格納してもよい。
また、第5実施形態においても、アドレス変換テーブルキャッシュ31内の入れ替え対象キャッシュラインを決定する際には、第1実施形態〜第4実施形態で説明した構成および処理手順を適用することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。