説明

メモリシステムおよびコントローラ

【課題】リード処理性能を可及的に向上させること。
【解決手段】NANDメモリ1と、RAM3と、RAM3を使用してホスト装置200とNANDメモリ1との間のデータ転送を実行するコントローラ2と、を備え、コントローラ2は、ホスト装置200から送信されてくるライトコマンド毎のデータをRAM3が備えるライトキャッシュ32にキャッシュし、所定のタイミングで、ライトキャッシュ32にキャッシュされているライトコマンド毎のデータを夫々先頭部分を残してNANDメモリ1へ転送する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリシステムおよびコントローラに関する。
【背景技術】
【0002】
不揮発性メモリであるNAND型フラッシュメモリ(以下、単にNANDメモリ)は、ハードディスクに比べ、高速、軽量などの利点を有している。また、NANDメモリは、NOR型フラッシュメモリを含む他のフラッシュメモリに比べて大容量化・高集積化を行いやすい。これらの特徴を有するNANDメモリを搭載したSSD(Solid State Drive)は、磁気ディスク装置に替わる大容量の外部記憶装置として注目されている。
【0003】
磁気ディスク装置をNANDメモリを搭載したSSDに置き換える際の問題点の一つとして、NANDメモリが読み書き(特に書き込み)アクセスに耐えられる回数(アクセス制限回数)が少ないことが挙げられる。この問題に対応できる1つの解として、NANDメモリへ書き込む前にDRAMなどの高速リード/ライトが可能なメモリ(RAM)を経由させることが挙げられる。具体的には、SSDは、ホスト装置から送信されてきた小容量データをRAMに貯めておき、大容量データをして扱えるようになった際に、RAMに貯めてあったデータをブロック単位などの大きな単位でNANDメモリへ書き込む(例えば特許文献1参照)。
【0004】
一般的に、ホスト装置からのリードコマンドに対するレスポンスの速度や、リード処理完了までにかかる時間は、SSDのリード処理に関する性能指標として重視される。上記したホスト装置からのデータを一時的に記憶するRAMを有するSSDにおいても、ホスト装置からのリードコマンドに対するレスポンスの速度およびリードにかかる速度を向上させる技術の開発が要望されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2008−33788号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、リード処理性能を可及的に向上させたメモリシステムおよびコントローラを提供することを目的とする。
【課題を解決するための手段】
【0007】
本願発明の一態様によれば、不揮発性の第1メモリと、第2メモリと、前記第2メモリを使用してホスト装置と前記第1メモリとの間のデータ転送を実行するコントローラと、を備え、前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第2メモリにキャッシュし、所定のタイミングで、前記第2メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第1メモリへ転送する第1転送を実行する、ことを特徴とするメモリシステムが提供される。
【0008】
また、本願発明の一態様によれば、不揮発性の第1メモリと、第2メモリと、を備えるメモリシステムに搭載され、前記第2メモリを使用してホスト装置と前記第1メモリとの間のデータ転送を実行するコントローラであって、前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第2メモリにキャッシュし、所定のタイミングで、前記第2メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第1メモリへ転送する第1転送を実行する、ことを特徴とするコントローラが提供される。
【発明の効果】
【0009】
本発明によれば、リード処理性能を可及的に向上させることができるという効果を奏する。
【図面の簡単な説明】
【0010】
【図1】図1は、第1の実施の形態のSSDのハードウェア構成を示す図である。
【図2】図2は、ホスト装置からデータが書き込まれる際の動作を説明する図である。
【図3】図3は、ホスト装置からデータが読み出される際の動作を説明する図である。
【図4】図4は、ホスト装置へのデータ転送にかかる時間を説明する図である。
【図5】図5は、第1の実施の形態のSSDの機能構成を説明する図である。
【図6】図6は、LBAアドレスとタグ情報テーブルおよびライン情報との関係を説明する図である。
【図7】図7は、コマンド管理テーブルを説明する図である。
【図8】図8は、ライト処理における第1の実施の形態のSSDの動作を説明するフローチャートである。
【図9】図9は、リード処理における第1の実施の形態のSSDの動作を説明するフローチャートである。
【図10】図10は、第2の実施の形態のSSDの機能構成を説明する図である。
【図11】図11は、ライン情報を説明する図である。
【図12】図12は、ライト処理における第2の実施の形態のSSDの動作を説明するフローチャートである。
【図13】図13は、第3の実施の形態のSSDの機能構成を説明する図である。
【図14】図14は、ライト処理における第3の実施の形態のSSDの動作を説明するフローチャートである。
【図15】図15は、先頭サイズ決定処理を説明するフローチャートである。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、本発明の実施の形態にかかるメモリシステムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【0012】
(第1の実施の形態)
図1は、メモリシステムのハードウェア構成を説明する図である。本第1の実施の形態においては、メモリシステムの一例として、ハードディスクドライブ(HDD)と同じ接続インタフェース規格(ATA規格)を持つ、不揮発性半導体メモリであるNAND型フラッシュメモリ(以下、NANDメモリ)を備えるSSDを取り上げて説明する。なお、第1の実施の形態の適用範囲はSSDのみに限定されない。
【0013】
図1において、SSD100とホスト装置200との間はATA規格の通信インタフェースで接続されている。SSD100は、ホスト装置200から、ユーザデータを書き込むためのライトコマンド、ユーザデータを読み出すためのリードコマンドを受信する。リード/ライトコマンドは、ユーザデータの書き込みアドレスとしての先頭のLBA(Logical Block Addressing)アドレスと該ユーザデータのサイズとを含んでいる。1つのリード/ライトコマンドにより読み出し/書き込み要求されるユーザデータは例えば1つのファイルであり、セクタのサイズ(例えば、512Byte)の自然数倍のサイズを有する。
【0014】
SSD100は、不揮発性半導体メモリチップであるNANDメモリチップを備える、ホスト装置200からリード/ライトされるユーザデータ(以下、データ)が格納される第1メモリとしてのNANDメモリ1と、ホスト装置200とNANDメモリ1との間のデータ転送を制御するコントローラ2と、ホスト装置200からのデータ(ライトデータ)が一時蓄積される第2メモリとしてのRAM(Random Access Memory)3と、を備えている。
【0015】
コントローラ2は、NANDメモリ1とRAM3を制御してホスト装置200とNANDメモリ1との間のデータ転送を行う。このデータ転送を行うための構成として、コントローラ2は以下の構成要素をさらに有する。すなわち、コントローラ2は、ROM(Read Only Memory)4と、MPU5と、インタフェース(I/F)制御回路6と、RAM制御回路7と、NAND制御回路8と、を備えている。
【0016】
I/F制御回路6は、ATAインタフェースを介してホスト装置200との間でユーザデータを送受信する。RAM制御回路7は、RAM3との間でユーザデータを送受信する。NAND制御回路8は、NANDメモリ1との間でユーザデータを送受信する。
【0017】
ROM4には、NANDメモリ1に記憶されている管理プログラム(ファームウェア)をブートするブート用プログラムが格納されている。MPU5は前記ファームウェアをブートしてRAM3上に展開し、RAM3上に展開したファームウェアに基づいてコントローラ2全体を制御する。
【0018】
RAM3は、ホスト装置200とNANDメモリ1間でのデータ転送用のキャッシュおよび作業領域用メモリなどとして機能する。RAM3には、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、ReRAM(Resistance Random Access Memory)などを採用することができる。RAM3の作業領域には、前記したファームウェアが展開され、また、キャッシュを管理するための各種情報(後述する)が格納される。
【0019】
本発明の第1の実施の形態では、RAM3に実現されるキャッシュを活用してリード処理性能を向上させる。図2〜図4を参照して、本発明の第1の実施の形態の特徴を概要的に説明する。図2は、ホスト装置200からデータが書き込まれる際の動作を説明する図であり、図3は、ホスト装置200からデータが読み出される際の動作を説明する図である。
【0020】
図2に示すように、RAM3は、ホスト装置200から書き込み要求されたデータがキャッシュされるライトキャッシュ32と、NANDメモリ1から読み出されたデータがキャッシュされるリードキャッシュ31と、を備えている。ライトキャッシュ32は、1つのライトコマンド(ライトコマンドA)によるライトデータであるデータAをキャッシュしている。データAは、NANDメモリ1の書き込み/読み出しアクセスの際の単位サイズとなるページ単位のデータA1〜A3により構成されている。同様に、ライトキャッシュ32は、夫々ページ単位のデータから構成されるライトコマンドB〜Hにかかるライトコマンド単位のデータB〜Hを夫々キャッシュしている。そして、新たなデータIを書き込むライトコマンドIをホスト装置200から受信した場合において、ライトキャッシュ32にキャッシュされているデータの量が所定のしきい値を超えているとき、SSD100は、キャッシュされているライトコマンド毎のライトデータを先頭の数ページ分(ここでは2ページ分)のデータを残してNANDメモリ1へ退避させる(第1転送)。例えば、データAは、データA1およびデータA2を残し、データA3のみがNANDメモリ1へ退避されている。
【0021】
ホスト装置200は、ユーザデータの読み出しを実行する際、ライトコマンド単位のデータを部分的に読み出し要求するケースよりも、ライトコマンド発行時と同一のLBAアドレスおよびデータサイズをリードコマンドで指定することによって、ライトコマンド単位のデータを1つのリードコマンドで読み出し要求するケースが多い。図3に示すように、データAを読み出すリードコマンドAをホスト装置200から受信したとき、SSD100は、ライトキャッシュ32にキャッシュされていたデータAの先頭2ページ分のデータA1、A2をホスト装置200へ転送開始するとともに、残るデータA3をNANDメモリ1から読み出して、読み出したA3をリードキャッシュ31にキャッシュさせる。そして、SSD100は、データA1、A2をホスト装置200へ転送した後、リードキャッシュ31にキャッシュしたデータA3を転送する。
【0022】
図4は、ホスト装置200へのデータAの転送にかかる時間を、ライトデータが先頭部分と残りの部分との区別なくNANDメモリ1へ退避される場合(以下、比較例という)と比較して説明する図である。なお、NANDメモリ1の読み出しレイテンシをt_R、NANDメモリ1からRAM3への1ページ分の転送時間をt_NR、ホスト装置200とRAM3との間の1ページ分の転送時間をt_HRとしている。
【0023】
比較例では、図4(a)に示すように、リードコマンドAを受信したとき、NANDメモリ1に格納されているデータA1〜A3が順次読み出されてライトキャッシュ32に格納され、個々のデータA1〜A3は、ライトキャッシュ32に格納完了次第、順次ホスト装置200へ転送開始される。したがって、ホスト装置200は、リードコマンドAを発行してから、t_R+t_NRが経過した後にレスポンスが得られ、t_R+3×t_NR+t_HRが経過した後にデータAのリード処理が完了する。これに対して、本第1の実施の形態の例では、図4(b)に示すように、リードコマンドAを発行するとSSD100はライトキャッシュ32からのデータA1の転送を開始するので、ホスト装置200は、リードコマンドAの発行後、直ちにレスポンスが得られる。そして、リードコマンドAを発行してからt_R+t_NR+t_HRが経過した後にデータAのリード処理が完了する。つまり、第1の実施の形態によると、比較例にかかる技術に比して、レスポンスの速度が向上し、リード処理が完了するまでの時間が短縮される。
【0024】
このように、第1の実施の形態は、リード処理性能を向上させるために、ライトコマンド毎のデータの先頭部分をライトキャッシュに極力残すようにしたことが主たる特徴となっている。図5は、上述の特徴を実現するためのSSD100の機能構成を説明する図である。図示するように、MPU5は、ライトコマンドに対応して、ライトデータのライトキャッシュ32への格納、ライトキャッシュ32からNANDメモリ1へのデータの退避(転送)を実行するライト処理と、リードコマンドに対応して、該リードコマンドにかかるデータをライトキャッシュ32または/およびNANDメモリ1からホスト装置200へ転送するリード処理と、の制御を実行するリード/ライト処理部51を備えている。
【0025】
RAM3は、キャッシュ31、32を備えているほか、ライトキャッシュ32を管理するための情報として、タグ情報テーブル33、キャッシュライン毎のライン情報34、LRU(Least Recently Used)管理テーブル35、コマンド管理テーブル36が格納される。なお、これらの情報は、RAM3以外の記憶部に格納されるようにしてもよい。例えば、コントローラ2の中または外にメモリを設け、該メモリに格納するようにしてもよい。
【0026】
図6は、LBAアドレスとタグ情報テーブル33およびライン情報34との関係を説明する図である。図示するように、ライトキャッシュ32では、各キャッシュラインに格納されているデータを特定するために、LBAアドレスのうちのキャッシュラインのサイズ(ライン単位サイズ)分のオフセットを除いたライン単位アドレスが使用される。すなわち、ライトキャッシュ32は、LBAアドレスに基づいてキャッシュラインの管理がなされる。具体的には、タグ情報テーブル33は、ライン単位アドレスのLSBの数ビット(上位桁アドレス)をインデックス(Index)とし、インデックス毎に複数(nウェイ)のタグ(Tag)を有する。各タグには、ライン単位アドレス331と、該ライン単位アドレスに対応するライン情報へのポインタ332が記憶されている。リード/ライト処理部51は、対象のデータのライン単位アドレスと、該ライン単位アドレスの下位桁アドレスをインデックスとする各タグに記憶されているライン単位アドレス331とを比較することによって対象のデータのキャッシュヒット/キャッシュミスを判定することができる。なお、ライン単位サイズは任意であるが、ここではページサイズに等しいとして説明する。また、タグ情報テーブル33は、インデックス毎に複数のタグを有するセットアソシアティブ方式が採用されているものとして説明するが、夫々1つのタグしか有さないダイレクトマップ方式が採用されるようにしてもよい。
【0027】
各キャッシュラインに格納されているデータ(ライン単位データ)に対応するライン情報34は、対応するライン単位データに含まれるセクタ毎のデータの夫々が有効であるか無効であるかを示すセクタビットマップ341と、該ライン単位データのライトキャッシュ32内における格納先アドレスであるライトキャッシュ内アドレス342と、を含んでいる。リード/ライト処理部51は、キャッシュヒットした場合、ライトキャッシュ内アドレス342を参照することによってライトキャッシュ32内における対象のライン単位データの格納位置を認識することができる。
【0028】
タグ情報テーブル33では、管理されるインデックス毎の最大タグ数(ウェイ数)が決められている。リード/ライト処理部51は、格納先のインデックスのウェイが空いていないとき(キャッシュラインが空いていないとき)、同インデックスのキャッシュラインのうちの1つに格納されているデータをNANDメモリ1へ追い出して、キャッシュラインの空きを作る(第2転送)。LRU管理テーブル35は、最後にアクセスされた時間が最も古いタグほど追い出し優先順位が高くなるようにインデックス毎に各タグの追い出し優先順位を管理するテーブルであって、リード/ライト処理部51は、LRU管理テーブル35に基づいて、最も古いキャッシュラインを追い出し対象として選択する。
【0029】
図7は、コマンド管理テーブル36を説明する図である。図示するように、コマンド管理テーブル36は、ホスト装置200からライトされたデータの先頭LBAとデータサイズ(セクタ数)とをライトコマンド毎に管理するテーブルである。リード/ライト処理部51は、コマンド管理テーブル36を参照することによって、リードコマンド単位のデータ毎に先頭部分を認識(識別)することができる。また、リード/ライト処理部51は、キャッシュライン毎のキャッシュデータが属するリードコマンドを認識することができる。
【0030】
次に、上述のように構成されるSSD100における動作を、図8および図9を参照して説明する。
【0031】
図8は、ライト処理におけるSSD100の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード/ライト処理部51は、受信したライトコマンドをコマンド管理テーブル36に追加する(ステップS1)。そして、リード/ライト処理部51は、ライトキャッシュ32は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する(ステップS2)。
【0032】
ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていた場合(ステップS2、Yes)、リード/ライト処理部51は、コマンド管理テーブル36を参照して、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをNANDメモリ1へ退避させ、退避させたライン単位データに対応するタグ情報テーブル33上のタグおよびライン情報34を消去する(ステップS3)。ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていなかった場合(ステップS2、No)、ステップS3の動作はスキップされる。
【0033】
続いて、リード/ライト処理部51は、ライトコマンドのLBAアドレスおよびデータサイズから、ライトキャッシュ32の格納先を検索するために、ライン単位データ毎の先頭LBAアドレスを算出し(ステップS4)、算出した先頭LBAアドレスのうちの1つを選択する(ステップS5)。なお、ライン単位データ毎の先頭LBAアドレスは、ライトコマンドが含む先頭LBAアドレスから該先頭LBAアドレスにライトコマンドが含むデータサイズ分を加算したアドレス値に至るまでライン単位サイズ刻みでアドレス値を分割することによって算出することができる。ステップS5の後、リード/ライト処理部51は、選択した先頭LBAアドレスに対応するキャッシュラインが空いているか否かを判定する(ステップS6)。リード/ライト処理部51は、選択した先頭LBAアドレスを用いてタグ情報テーブル33を検索し、キャッシュミスした場合、該キャッシュラインが空いており、キャッシュヒットした場合、該キャッシュラインが空いていないと判定する。
【0034】
キャッシュラインが空いていなかった場合(ステップS6、No)、リード/ライト処理部51は、LRU管理テーブル35を参照して追い出し対象のキャッシュラインを決定し、該キャッシュラインに格納されていたデータおよび該データと同一のライトコマンドに属するデータをNANDメモリ1へ退避させるとともに、退避させたデータに対応するタグおよびライン情報34を削除し、退避させたデータが属するライトコマンドをコマンド管理テーブル36から削除する(ステップS7)。リード/ライト処理部51は、コマンド管理テーブル36を参照することによって、追い出し対象のキャッシュラインに格納されていたデータと同一のライトコマンドに属するデータを求めることができる。
【0035】
ステップS7の後、リード/ライト処理部51は、データの追い出しにより空いたキャッシュラインにライトデータのうちの選択した先頭LBAアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報34を追加する(ステップS8)。そして、リード/ライト処理部51は、算出した先頭LBAアドレスを全て選択済みであるか否かを判定し(ステップS9)、選択済みで無い場合(ステップS9、No)、ステップS5に移行して未選択の先頭LBAアドレスを1つ選択する。
【0036】
ステップS6において、選択した先頭LBAアドレスに対応するキャッシュラインが空いていた場合(ステップS6、Yes)、リード/ライト処理部51は、該ラインにライトデータのうちの選択した先頭LBAアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報34を追加する(ステップS10)。そして、ステップS9へ移行する。
【0037】
ステップS9において、算出した先頭LBAアドレスを全て選択済みであった場合(ステップS9、Yes)、リード/ライト処理部51は、書き込んだライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにLRU管理テーブル35を更新し(ステップS11)、ライト処理がリターンとなる。
【0038】
図9は、リード処理におけるSSD100の動作を説明するフローチャートである。なお、ここでは、ライトコマンド単位のデータがリードコマンドによって読み出し要求された場合について説明する。
【0039】
図9に示すように、リードコマンドを受信してリード処理がスタートすると、リード/ライト処理部51は、リードコマンドから、ライン単位データ毎の先頭LBAアドレスを算出する(ステップS21)。そして、リード/ライト処理部51は、算出した先頭LBAアドレス毎にタグ情報テーブル33を検索して、算出した先頭LBAアドレスのライン単位データのうち、ライトキャッシュ32にキャッシュされていないデータがあるか否かを判定する(ステップS22)。ライトキャッシュ32にキャッシュされていないデータがなかった場合(ステップS22、No)、リード/ライト処理部51は、ライトキャッシュ32から、算出した先頭LBAアドレスのライン単位データを逐次読み出して、読み出したライン単位データを逐次ホスト装置200へ転送する(ステップS23)。そして、リード/ライト処理部51は、読み出したライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにLRU管理テーブル35を更新し(ステップS24)、リード処理がリターンとなる。
【0040】
ステップS22において、ライトキャッシュ32にキャッシュされていないデータがあった場合(ステップS22、Yes)、リード/ライト処理部51は、ライトキャッシュ32にキャッシュされていないライン単位データをNANDメモリ1からリードキャッシュ31へ転送開始する(ステップS25)。そして、リード/ライト処理部51は、算出した先頭LBAアドレス毎にタグ情報テーブル33を検索して、算出した先頭LBAアドレスのライン単位データのうち、ライトキャッシュ32にキャッシュされているデータ(すなわちリードコマンドにより読み出し要求されたデータの先頭部分)があるか否かを判定する(ステップS26)。ライトキャッシュ32にキャッシュされているデータがあった場合(ステップS26、Yes)、リード/ライト処理部51は、ライトキャッシュ32にキャッシュされているデータを逐次読み出してホスト装置200へ転送する(ステップS27)。そして、リード/ライト処理部51は、読み出したライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにLRU管理テーブル35を更新する(ステップS28)。そして、キャッシュされていたデータの転送完了後、リード/ライト処理部51は、リードキャッシュ31に転送されたデータを逐次読み出してホスト装置200へ転送し(ステップS29)、リード処理がリターンとなる。ステップS26において、ライトキャッシュ32にキャッシュされているデータが無かった場合(ステップS26、No)、ステップS27およびステップS28はスキップされる。
【0041】
なお、LRU管理テーブル35を省略し、タグ情報テーブル33およびコマンド管理テーブル36を参照して、最もサイズが大きいコマンド単位のデータを求め、該求めたコマンド単位のデータを追い出すようにしてもよい。例えば、3ページ分のサイズを有するライトコマンド単位のデータAをNANDメモリ1から読み出す場合、レスポンスが得られるまでの経過時間は、t_R+t_NR、リード処理が完了するまでの経過時間は、t_R+3t_NR+t_HRとなる。また、5ページ分のサイズを有するライトコマンド単位のデータBをNANDメモリ1から読み出す場合、レスポンスが得られるまでの経過時間はデータAの場合と同等で、リード処理が完了するまでの経過時間は、t_R+5t_NR+t_HRとなる。つまり、データのサイズが大きいほど、リード処理完了にかかる時間に対するレスポンスの遅さの影響が相対的に小さくなる。したがって、コマンド単位のデータのサイズが大きいデータを優先してNANDメモリ1へ退避させることによって、単にLRUルールに基づいてデータを退避させる場合に比べてさらにリード処理性能を向上させることができるようになる。
【0042】
また、LRU管理テーブル35の代わりに、書き込み効率の高いデータを格納するキャッシュラインほど優先順位が高くなるようにインデックス毎に各タグの追い出し優先順位を管理するテーブルを備え、リード/ライト処理部51は、該テーブルに基づいて、書き込み効率が最も高いデータを格納するキャッシュラインを追い出し対象として選択するようにしてもよい。
【0043】
また、コマンド単位でデータを追い出すものとして説明したが、ライン単位でデータを追い出すようにしてもよい。なお、コマンド単位でデータを追い出す場合、ライン単位でデータを追い出す場合に比してライトキャッシュ32にキャッシュされているデータ量を減らすことができ、ひいてはステップS3の退避処理およびステップS7の追い出し処理の頻度を低減することができる。
【0044】
また、ライトキャッシュ32に残す先頭部分のサイズの設定は任意であるが、先頭部分のサイズの設定値が大きすぎるとライトキャッシュ32にキャッシュされるデータ量が多くなり、ステップS3における退避処理およびステップS7における追い出し処理の頻度が上昇し、ライト処理性能が低下する。したがって、残す先頭部分のサイズをむやみに大きくすることはせず、NANDメモリ1から読み出された最初のデータがホスト装置200へ転送されるまでにかかる時間t_R+t_NRをほぼ隠蔽できる程度のサイズとするとよい。
【0045】
また、SSD100は、ライトキャッシュ32にキャッシュされているデータ量が所定のしきい値を超えたときステップS3の退避処理を実行するとして説明したが、該退避処理のタイミングはどのようなタイミングで行われるようにしても構わない。例えば定期的に行われるようにしても構わない。
【0046】
また、RAM3としてFeRAMのような不揮発性メモリを採用する場合、各タグにライン単位データの有効/無効を示すフラグを付し、ライン単位データの退避および追い出しを実行した際に該フラグを無効とすることによって該ライン単位データが消去されたこととして扱うようにしてもよい。
【0047】
以上説明したように、本発明の第1の実施の形態によれば、ホスト装置200から送信されてくるライトコマンド毎のデータをRAM3が備えるライトキャッシュ32にキャッシュし、所定のタイミングで、ライトキャッシュ32にキャッシュされているライトコマンド毎のデータを夫々先頭部分を残してNANDメモリ1へ転送するようにしたので、ホスト装置200からのリードコマンドを受信したときにライトキャッシュ32にキャッシュされている先頭部分を直ちにホスト装置200へ転送することができるので、リードコマンドに対するレスポンスが速くなるとともにリード処理が完了するまでにかかる時間が短縮される。すなわち、リード処理性能を可及的に向上させることができる。
【0048】
(第2の実施の形態)
第2の実施の形態では、リード処理時においてライトキャッシュのヒット率を向上させるために、ライトキャッシュからNANDメモリへキャッシュデータを退避させたとき、ライトキャッシュに退避済みのデータのコピーを残しておくようにしたことが特徴となっている。
【0049】
第2の実施の形態のSSD300のハードウェア構成は、第1の実施の形態と同等であるので、説明を省略する。図10は、第2の実施の形態のSSD300の機能構成を説明する図である。なお、ここでは、第1の実施の形態と同等の構成要素については同一の符号を付し、詳細な説明は省略する。
【0050】
図10に示すように、MPU5は、SSD300のリード処理およびライト処理の制御を実行するリード/ライト処理部52を備えている。また、RAM3には、キャッシュ31、32を備えているほか、タグ情報テーブル33、ライン情報37、LRU管理テーブル35、コマンド管理テーブル36が格納される。
【0051】
図11は、ライン情報37を説明する図である。図示するように、ライン情報37は、セクタビットマップ341と、ライトキャッシュ内アドレス342と、NAND格納フラグ371と、を備えている。NAND格納フラグ371は、対応するライン単位データがNANDメモリ1にコピー済みであるか否かを判定するために用いられる。
【0052】
図12は、ライト処理におけるSSD300の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード/ライト処理部52は、受信したライトコマンドをコマンド管理テーブル36に追加する(ステップS31)。そして、リード/ライト処理部52は、ライトキャッシュ32は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する(ステップS32)。
【0053】
ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていた場合(ステップS32、Yes)、リード/ライト処理部52は、コマンド管理テーブル36を参照して、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをNANDメモリ1へコピーし(言い換えると、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをNANDメモリ1へ転送するとともに、転送済みのデータのコピーを元のキャッシュラインに残し)、コピーしたキャッシュデータに対応するNAND格納フラグ371を立てる(ステップS33)。ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていなかった場合(ステップS32、No)、ステップS33の動作はスキップされる。
【0054】
続いて、リード/ライト処理部52は、ライトコマンドのLBAアドレスおよびデータサイズから、ライトキャッシュ32の格納先を検索するために、ライン単位データ毎の先頭LBAアドレスを算出し(ステップS34)、算出した先頭LBAアドレスのうちの1つを選択する(ステップS35)。そして、リード/ライト処理部52は、タグ情報テーブル33に基づいて、選択した先頭LBAアドレスに対応するキャッシュラインが空いているか否かを判定する(ステップS36)。
【0055】
キャッシュラインが空いていなかった場合(ステップS36、No)、リード/ライト処理部52は、LRU管理テーブル35を参照して追い出し対象のキャッシュラインを決定する(ステップS37)。そして、リード/ライト処理部52は、追い出し対象のキャッシュラインに格納されているデータおよび該データと同一のライトコマンドに属するデータのうち、NAND格納フラグ371が立っているデータを削除し、削除したデータに対応するタグおよびライン情報37を削除し、削除したデータが属するライトコマンドをコマンド管理テーブル36から削除する(ステップS38)。さらに、リード/ライト処理部52は、追い出し対象のキャッシュラインに格納されているデータおよび該データと同一のライトコマンドに属するデータのうち、NAND格納フラグ371が立っているデータをNANDメモリ1に退避させ、退避させたデータに対応するタグおよびライン情報37を削除し、退避させたデータが属するライトコマンドをコマンド管理テーブル36から削除する(ステップS39)。
【0056】
そして、リード/ライト処理部52は、データの追い出しにより空いたキャッシュラインにライトデータのうちの選択した先頭LBAアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグ及びライン情報37を追加する(ステップS40)。そして、リード/ライト処理部52は、算出した先頭LBAアドレスを全て選択済みであるか否かを判定し(ステップS41)、選択済みで無い場合(ステップS41、No)、ステップS35に移行して未選択の先頭LBAアドレスを1つ選択する。
【0057】
ステップS36において、選択した先頭LBAアドレスに対応するキャッシュラインが空いていた場合(ステップS36、Yes)、リード/ライト処理部52は、該ラインにライトデータのうちの選択した先頭LBAアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報37を追加する(ステップS42)。そして、ステップS41へ移行する。
【0058】
ステップS41において、算出した先頭LBAアドレスを全て選択済みであった場合(ステップS41、Yes)、リード/ライト処理部52は、書き込んだライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにLRU管理テーブル35を更新し(ステップS43)、ライト処理がリターンとなる。
【0059】
このように、第2の実施の形態によれば、NANDメモリ1に転送済みのライトコマンド毎のデータのコピーを該データがキャッシュされていたキャッシュラインに残し、該キャッシュラインが新たなライトコマンド毎のデータのキャッシュ先となったとき、該キャッシュラインにキャッシュされていたライトコマンド毎のデータを削除する、ように構成したので、第1の実施の形態に比してキャッシュされているデータの量が増え、結果としてリード処理時におけるライトキャッシュ32のヒット率を向上させることができる。
【0060】
(第3の実施の形態)
前述のように、ライトコマンド単位のデータのサイズが大きい場合、サイズが小さいデータよりも優先してNANDメモリ1へ退避させると、サイズに応じた優先順位を設けない場合に比べてリード処理性能が向上する。そこで、第3の実施の形態では、ライトキャッシュに残す先頭部分のサイズをライトコマンド単位のデータのサイズに応じて変化させるようにした。
【0061】
図13は、第3の実施の形態のSSD400の機能構成を説明する図である。図示するようにMPU5は、SSD400のリード処理およびライト処理の制御を実行するリード/ライト処理部53を備えている。また、RAM3には、キャッシュ31、32を備えているほか、タグ情報テーブル33、ライン情報34、LRU管理テーブル35、コマンド管理テーブル36が格納される。
【0062】
図14は、ライト処理におけるSSD400の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード/ライト処理部53は、受信したライトコマンドをコマンド管理テーブル36に追加する(ステップS51)。そして、リード/ライト処理部53は、ライトキャッシュ32は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する(ステップS52)。
【0063】
ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていた場合(ステップS52、Yes)、リード/ライト処理部53は、ライトキャッシュ32に残す先頭部分のサイズを決定する先頭サイズ決定処理を実行する(ステップS53)。
【0064】
図15は、先頭サイズ決定処理の一例を説明するフローチャートである。図示するように、リード/ライト処理部53は、コマンド管理テーブル36を参照し、ライトコマンド毎のデータを1つ選択する(ステップS71)。そして、リード/ライト処理部53は、選択したデータのデータサイズは4ページ分のサイズ以上であるか否かを判定する(ステップS72)。選択したデータのサイズが4ページに満たなかった場合(ステップS72、No)、リード/ライト処理部53は、該データの先頭サイズを3ページ分のサイズとする(ステップS73)。また、選択したデータのサイズが4ページ分以上のサイズであった場合(ステップS72、Yes)、該データの先頭サイズを2ページ分のサイズとする(ステップS74)。そして、リード/ライト処理部53は、データを全て選択したか否かを判定し(ステップS75)、未選択のデータがあった場合(ステップS75、No)、ステップS71へ移行して未選択のデータを1つ選択する。データを全て選択済みであった場合(ステップS75、Yes)、先頭サイズ決定処理がリターンとなる。
【0065】
なお、ここではデータのサイズが4ページ分のサイズであるか否かに基づいて先頭部分のサイズを決定しているが、先頭部分のサイズの決定のための場合分けに使用するしきい値は4以外であっても構わない。また、2つ以上のしきい値を用いて3つ以上に場合分けし、場合分けされた夫々の場合について異なるサイズを決定するようにしても構わない。また、先頭部分のサイズを2ページ分または3ページ分のサイズに決定するようにしたが、先頭部分のサイズはこれらのサイズに限定しない。
【0066】
このように、小さいサイズのライトデータほどライトキャッシュ32に残す先頭部分のサイズを大きくする。
【0067】
図14へ戻り、リード/ライト処理部53は、先頭サイズ決定処理の後、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをNANDメモリ3へ退避させ、退避させたライン単位データに対応するタグ情報テーブル33上のタグおよびライン情報34を消去する(ステップS54)。そして、SSD400は、ステップS55〜ステップS62において、第1の実施の形態におけるステップS4〜ステップS11と同等の動作を実行し、ライト処理がリターンとなる。
【0068】
なお、以上の説明においては、ライトキャッシュ32が所定のしきい値以上の量のデータをキャッシュしていると判定された場合に先頭サイズ決定処理が実行されるとしたが、先頭サイズ決定処理の実行タイミングは該判定の後のタイミングだけに限定しない。
【0069】
このように、小さいサイズのライトデータほどライトキャッシュ32に残す先頭部分のサイズを大きくするように構成したので、ライトコマンド単位のデータのサイズが大きい場合、サイズが小さいデータよりも優先してNANDメモリ1へ退避させることができるので、リード処理性能を向上させることができる。
【符号の説明】
【0070】
1 NANDメモリ、2 コントローラ、3 RAM、4 ROM、5 MPU、6 I/F制御回路、7 RAM制御回路、8 NAND制御回路、31 リードキャッシュ、32 ライトキャッシュ、33 タグ情報テーブル、34 ライン情報、35 LRU管理テーブル、36 コマンド管理テーブル、37 ライン情報、51〜53 リード/ライト処理部、100、300、400 SSD、200 ホスト装置、331 ライン単位アドレス、332 ライン情報へのポインタ、341 セクタビットマップ、342 ライトキャッシュ内アドレス、371 NAND格納フラグ。

【特許請求の範囲】
【請求項1】
不揮発性の第1メモリと、
第2メモリと、
前記第2メモリを使用してホスト装置と前記第1メモリとの間のデータ転送を実行するコントローラと、
を備え、
前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第2メモリにキャッシュし、所定のタイミングで、前記第2メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第1メモリへ転送する第1転送を実行する、
ことを特徴とするメモリシステム。
【請求項2】
前記所定のタイミングは、前記第2メモリにキャッシュされているデータ量が所定のしきい値を超えたタイミングである、ことを特徴とする請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、前記ライトコマンドに含まれる書き込みアドレスに基づいてキャッシュラインの管理を実行する、
ことを特徴とする請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、前記第1転送を実行する際、ライトコマンド毎のデータのサイズが小さいデータほど前記第2メモリに残す先頭部分のサイズが大きくなるように前記第2メモリにキャッシュされているライトコマンド毎のデータ毎に前記第2メモリに残す先頭部分のサイズを決定する、
ことを特徴とする請求項1に記載のメモリシステム。
【請求項5】
不揮発性の第1メモリと、第2メモリと、を備えるメモリシステムに搭載され、前記第2メモリを使用してホスト装置と前記第1メモリとの間のデータ転送を実行するコントローラであって、
前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第2メモリにキャッシュし、所定のタイミングで、前記第2メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第1メモリへ転送する第1転送を実行する、
ことを特徴とするコントローラ。
【請求項6】
前記ライトコマンドに含まれる書き込みアドレスに基づいてキャッシュラインの管理を実行する、ことを特徴とする請求項5に記載のコントローラ。
【請求項7】
前記第1転送を実行する際、ライトコマンド毎のデータのサイズが小さいデータほど前記第2メモリに残す先頭部分のサイズが大きくなるように前記第2メモリにキャッシュされているライトコマンド毎のデータ毎に前記第2メモリに残す先頭部分のサイズを決定する、
ことを特徴とする請求項5に記載のコントローラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2011−198133(P2011−198133A)
【公開日】平成23年10月6日(2011.10.6)
【国際特許分類】
【出願番号】特願2010−65122(P2010−65122)
【出願日】平成22年3月19日(2010.3.19)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】