(58)【調査した分野】(Int.Cl.,DB名)
記憶領域が複数の並列動作要素で構成され、記録されるデータの位置管理をデータ管理単位で行い、前記データ管理単位の自然数倍のアクセス単位の大きさのアクセス領域が前記並列動作要素ごとに設けられてなるデータ記録領域を所定の数含むデータブロックを複数有する不揮発性の第1記憶部と、
ホスト装置と前記第1記憶部との間でやり取りされるデータ、または前記第1記憶部内で移動されるデータを一時的に記憶する第2記憶部と、
前記第1記憶部と前記第2記憶部との間のデータ転送を行う制御部と、
を備えるメモリシステムであって、
前記第2記憶部は、前記第1記憶部に記憶されるデータに関して、割り当てられるアドレスと、前記第1記憶部内での前記データブロックと前記データ管理単位とで規定されるデータ記録位置と、を対応付けたデータ記録位置管理情報を有し、
前記制御部は、
データを前記第1記憶部に書き込む前に、前記データが書き込まれるデータ記録位置とそのアドレスとを対応付けたログを、書き込み先の前記データ記録領域の前記データ管理単位ごとに生成したログ情報を生成するログ情報生成手段と、
前記データを前記第1記憶部に書き込む前に、書き込み先のデータブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるように、前記データの開始位置を決定するログ情報記録位置決定手段と、
前記第2記憶部の前記データと前記ログ情報とを前記開始位置から始まるように前記データ記録領域に書き込む書き込み処理と、前記第1記憶部から前記第2記憶部にデータを読み出す読み出し処理と、を行うデータ処理手段と、
コンパクション処理を行う際に、コンパクション対象となるデータブロック内の全ての前記データ記録領域の前記ログ情報と、前記データ記録位置管理情報と、を用いて、前記データブロック中の有効データの記録位置を取得するコンパクション対象データ判定手段と、
を備え、
前記データ処理手段は、コンパクション処理時に、前記コンパクション対象データ判定手段から取得した前記有効データの記録位置を用いて前記有効データを前記第2記憶部に読み出し、該有効データを前記ログ情報生成手段によって生成されたログ情報とともに、書き込み先のデータ記録領域に書き込むことを特徴とするメモリシステム。
前記データ処理手段は、コンパクション処理の際に、前記各並列動作要素から前記コンパクション対象となる前記データブロックの異なる前記データ記録領域の前記ログ情報を含む前記アクセス領域を読み出すことを特徴とする請求項1から4のいずれか1つに記載のメモリシステム。
前記コンパクション対象データ判定手段は、前記ログの前記データのアドレスに対応付けられた前記データ記録位置と、前記データ記録位置管理情報中の対応する前記データ記録位置と、が一致する場合に、前記データ記録位置に記録されているデータを有効データと判定し、前記データ記録位置を取得することを特徴とする請求項1から5のいずれか1つに記載のメモリシステム。
記憶領域が複数の並列動作要素で構成され、記録されるデータの位置管理をデータ管理単位で行い、前記データ管理単位の自然数倍のアクセス単位の大きさのアクセス領域が前記並列動作要素ごとに設けられてなるデータ記録領域を所定の数含むデータブロックを複数有する不揮発性の第1記憶部と、
ホスト装置と前記第1記憶部との間でやり取りされるデータ、または前記第1記憶部内で移動されるデータを一時的に記憶し、前記第1記憶部に記憶されるデータに関して、割り当てられるアドレスと、前記第1記憶部内での前記データブロックと前記データ管理単位とで規定されるデータ記録位置と、を対応付けたデータ記録位置管理情報を有する第2記憶部と、
前記第1記憶部と前記第2記憶部との間のデータ転送を行う制御部と、
を備えるメモリシステムの制御方法であって、
コンパクション対象となるデータブロックを構成する前記データ記録領域から、データが書き込まれるデータ記録位置とそのアドレスとを対応付けたログを前記データ記録領域の前記データ管理単位ごとに生成したログ情報を読み出すログ情報読み出し工程と、
前記ログ情報読み出し工程で読み出されるコンパクション対象となるデータブロック内の全ての前記データ記録領域の前記ログ情報と、前記データ記録位置管理情報と、を用いて、前記データブロック中の有効データの記録位置を取得するコンパクション対象データ判定工程と、
前記コンパクション対象データ判定工程で取得した前記有効データの記録位置を用いて前記有効データを前記第2記憶部に読み出す有効データ読み出し工程と、
読み出した前記有効データを書き込み先のデータ記録領域に書き込むコンパクション工程と、
を含むことを特徴とするメモリシステムの制御方法。
前記ログ情報読み出し工程では、前記各並列動作要素から読み出す前記アクセス領域は、前記コンパクション対象となる前記データブロックの異なる前記データ記録領域の前記ログ情報を含む前記アクセス領域を読み出すことを特徴とする請求項8から11のいずれか1つに記載のメモリシステムの制御方法。
前記コンパクション対象データ判定工程では、前記ログ情報の前記データのアドレスに対応付けられた前記データ記録位置と、前記データ記録位置管理情報中の対応する前記データ記録位置と、が一致する場合に、前記データ記録位置に記録されているデータを有効データと判定し、前記データ記録位置を取得することを特徴とする請求項7から12のいずれか1つに記載のメモリシステムの制御方法。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよびその制御方法を詳細に説明する。なお、本実施形態により本発明が限定されるものではない。
【0009】
図1は、この実施形態によるメモリシステムの構成を模式的に示すブロック図である。このメモリシステム10は、コンピュータシステムに用いられる外部記憶装置として不揮発性メモリを搭載したSSD(Solid State Drive)である。以下では、不揮発性メモリとしてNAND型フラッシュメモリを用いる場合を例に挙げる。
【0010】
メモリシステム10は、ホストインタフェース部11、第1記憶部であるNAND型フラッシュメモリ(以下、NANDメモリという)12−0〜12−15(なお、以下では、それぞれのNANDメモリ12−0〜12−15を特に区別する必要がない場合には、NANDメモリ12と表記する)、NANDコントローラ(チャネル制御部)13、第2記憶部であるRAM(Random Access Memory)14、および制御部15を備える。
【0011】
ホストインタフェース部11は、ATA(Advanced Technology Attachment)インタフェースなどのメモリ接続インタフェースであり、パーソナルコンピュータまたはCPU(Central Processing Unit)コアなどの図示しないホスト装置との間のインタフェースである。
【0012】
NANDメモリ12は、データを不揮発に記憶することができる記憶装置であり、ユーザデータやプログラム、メモリシステム10内でのデータの格納位置(記録位置)を管理する管理情報などの保存用の記憶部として使用される。具体的には、ホスト装置側によって指定されたデータを記憶したり、NANDメモリ12でのデータ記録位置を管理する管理情報やファームウェアプログラムなどの不揮発に保存したい重要なデータを記憶したりする。
【0013】
ここでは、8並列動作を行う8個の並列動作要素121−0〜121−7を有し、8個の並列動作要素121−0〜121−7は、8個のチャネル(ch0〜ch7)によってそれぞれ8個のNANDコントローラ13に接続されている。各並列動作要素121−0〜121−7は、バンクインタリーブが可能な複数のバンク(ここでは2つのバンクBank0,Bank1)によって構成されている。この例では、並列動作要素121−0は、NANDメモリ12−0,12−8によって構成され、並列動作要素121−1は、NANDメモリ12−1,12−9によって構成され、・・・、並列動作要素121−7は、NANDメモリ12−7,12−15によって構成されている。
【0014】
各NANDメモリ12−0〜12−15は、それぞれNANDメモリチップに対応している場合もあるが、同一チャネルに接続された隣接するバンクに所属するNANDメモリ12−0〜12−15、たとえばNANDメモリ12−0とNANDメモリ12−8とで1つのNANDメモリチップを構成している場合もある。また、上記では、チャネル数が8であり、チャネル毎のバンク数が2である場合を例示しているが、チャネル数とバンク数はこれに限定されるものではない。このように、各NANDメモリ12−0〜12−15は、複数のチャネルによる並列動作、複数のバンクによるバンクインタリーブ動作による並列動作が可能である。
【0015】
図2は、この実施形態におけるNANDメモリでのデータ管理単位を模式的に示す図である。NANDメモリ12を構成するチップ内部において、一括して書き込みおよび読み出しのアクセスが可能な単位が物理ページであり、複数の物理ページから構成され、独立して消去可能な最小単位のアクセス単位が物理ブロックである。また、上記したようにこの例では8並列動作を行うことが可能であるとともにバンクインタリーブによる並列動作も可能であるので、並列にほぼ一括して書き込み/読み出しが可能な16個の物理ページでデータ記録領域となる1論理ページを構成し、並列にほぼ一括して消去可能な16個の物理ブロックでデータブロックである1論理ブロックを構成している。
【0016】
また、1物理ページよりも小さい単位のデータ管理単位であるクラスタで、NANDメモリ12内でのデータが管理(記録)されるものとする。クラスタサイズは、ホスト装置からの最小アクセス単位であるセクタのサイズ以上であり、クラスタサイズの自然数倍が物理ページサイズとなるように定められる。具体的に、以下に説明する例では、1物理ページは4クラスタで構成され、1論理ページは64クラスタで構成されるものとする。なお、各チャネルで並列に一括してデータ書き込みを行うため、この実施形態では、データはクラスタ単位でチャネル(並列動作要素121−0〜121−7)をまたがる方向に格納されることになる。
【0017】
NANDコントローラ13は、NANDメモリ12とのインタフェース処理を行う。ここでは、詳細を省略するが、誤り訂正処理やNANDメモリ12とRAM14との間のアクセス制御などの処理を行う。
【0018】
RAM14は、ホスト装置とNANDメモリ12との間でのデータ転送用バッファとして機能するデータバッファ領域141と、NANDメモリ12内でのデータの記録位置を管理する管理情報を記憶する管理情報記憶領域142と、を有する。データバッファ領域141は、ホスト装置からの読み出し要求時にNANDメモリ12から読み出したデータを一時的に記憶する読み出しバッファ1411と、ホスト装置からの書き込み要求時にNANDメモリ12へ書き込むデータを一時的に記憶する書き込みバッファ1412と、コンパクション処理の際に、NANDメモリ12から読み出したデータを一時的に記憶するコンパクションバッファ1413と、を有する。
【0019】
なお、RAM14として、DRAM(Dynamic RAM)、SRAM(Static RAM)、FeRAM(Ferroelectric RAM)、MRAM(Magnetoresistive RAM)、PRAM(Phase change RAM)などを用いることができる。
【0020】
管理情報記憶領域142は、上記したようにNANDメモリ12内でのデータの記憶位置を管理する管理情報を記憶するが、管理情報として、データ記録位置管理テーブル1421と、論理アドレス−物理アドレス変換テーブル(以下、論物変換テーブルという)1422と、コンパクション対象ブロックリスト1423と、フリーブロックリスト1424と、を有する。
【0021】
図3は、管理情報の一例を模式的に示す図であり、(a)はデータ記録位置管理テーブルの一例を示す図であり、(b)は論物変換テーブルの一例を示す図であり、(c)はコンパクション対象ブロックリストの一例を示す図であり、(d)はフリーブロックリストの一例を示す図である。NANDメモリ12では、クラスタ単位でデータの記録位置を管理しており、データ記録位置管理テーブル1421は、
図3(a)に示されるように、クラスタ単位のデータに対する論理アドレス(以下、論理クラスタアドレスという)と、そのデータが記憶されているデータ記録位置と、を対応付ける管理情報である。論理クラスタアドレスは、NANDメモリ12内でデータに割り当てられるアドレスである。また、データ記録位置は、そのデータが格納される論理ブロックを示す論理ブロック番号と、その論理ブロック番号内でのデータが格納されるクラスタを示す論理クラスタ番号と、の組み合わせからなる。すなわち、データ記録位置は、論理ブロック番号と論理クラスタ番号の組み合わせによって一意に決定される。ここでは、データ記録位置は、「論理ブロック番号:論理クラスタ番号」によって表記されるものとする。なお、論理クラスタ番号は、1つの論理ブロックにおいて、最初の論理ページのクラスタから最後の論理ページのクラスタまで、
図2のように順に番号を振ったものである。
【0022】
論物変換テーブル1422は、
図3(b)に示されるように、論理ブロック番号と、その論理ブロック番号が割り当てられている物理ブロックを示す物理ブロック番号と、その論理ブロックの寿命に関する情報と、を有する。寿命に関する情報として、たとえば論理ブロックの消去回数などを例示することができる。
【0023】
コンパクション対象ブロックリスト1423は、コンパクションの候補となる有効データと無効データとを有する論理ブロックを示す情報であり、
図3(c)に示されるように、コンパクション対象となる論理ブロック番号と、論理ブロック番号に含まれる有効クラスタ数と、を有する。このコンパクション対象ブロックリスト1423は、たとえば有効クラスタ数が少ない順に並べられる。
【0024】
フリーブロックリスト1424は、論理ブロック単位で現在用途未割り当てのフリーブロックを管理するテーブルであり、
図3(d)に示されるように、有効クラスタがない論理ブロック番号によって構成される。ここで、論理ブロック番号は、消去回数が少ない順に並べられる。そして、フリーブロックの割り当ての要求があると、消去回数が最も少ない論理ブロック番号を有する論理ブロックが割り当てられる。
【0025】
この実施形態においては、NANDメモリ12へのデータの書き込みやNANDメモリ12内でのデータの消去などによって、データ記録位置に変更が生じた場合には、RAM14上の管理情報はその都度更新されるが、NANDメモリ12に格納されている管理情報に対する変更差分はログとして蓄積している。これによって、不意の電源断に対しても管理情報を復元可能としている。また、RAM14に格納されている管理情報は、たとえばメモリシステム10の電源がオフされる際などの所定のタイミングでNANDメモリ12へと格納される。
【0026】
制御部15は、ホスト装置とNANDメモリ12との間でのデータ転送制御処理や、NANDメモリ12内でのデータ管理処理などを行う。ここでは、コンパクション処理を行うのに必要な構成要素について示している。制御部15は、ログ情報記録位置決定部151と、ログ情報生成部152と、データ処理部153と、管理情報管理部154と、コンパクション対象データ判定部155と、ブロック管理部156と、を有する。
【0027】
ログ情報記録位置決定部151は、NANDメモリ12へデータを書き込む際のログ情報の書き込み位置を決定する。なお、この実施形態では、書き込み単位である1論理ページ内のクラスタ単位のログをまとめたログ情報を、その論理ページ内の最後の書き込み位置となるクラスタに記録する。このログ情報が記録されるクラスタの位置(以下、ログ情報記録位置という)を、所定の規則にしたがって1つの論理ブロック内で論理ページによって異ならせるようにしている。これは、後述するように、コンパクション対象データ判定部155によって、異なる論理ページのログ情報を一度に読み込めるようにするためである。この論理ページ毎にログ情報記録位置を異ならせる方法については後述する。
【0028】
ログ情報生成部152は、ログ情報記録位置決定部151によって決定されたログ情報の書き込み位置、すなわちデータの書き込み開始位置にしたがって、データをNANDメモリ12に書き込むとした場合の論理クラスタアドレスとデータ記録位置との対応関係をクラスタ単位で示すログを論理ページごとにまとめたログ情報を生成する。このログ情報は、データ記録位置管理テーブル1421の変更の内容を示すものでもある。
【0029】
図4は、データ記録位置管理テーブルとログ情報の一例を示す図であり、(a)はデータ書き込み前の様子を示しており、(b)はデータ書き込み後の様子を示している。
図4(a)に示されるように、論理クラスタアドレスが「2034」のデータが、データ記録位置(論理ブロック番号:論理クラスタ番号)「119:800」に書き込まれている状態にある。この情報は、データ記録位置管理テーブル1421にも反映されている。なお、ログ情報は、データ記録位置管理テーブル1421のエントリと同じく、論理クラスタアドレスとデータ記録位置(論理ブロック番号:論理クラスタ番号)とを含んでいる。
【0030】
その後、論理クラスタアドレス「2034」のデータの書き換えが発生し、新たなデータ記録位置「358:3」にデータが書き込まれると、
図4(b)に示されるように、論理クラスタアドレスが「2034」で、データ記録位置が「358:3」であるログが生成される。詳細は後述するが、古いログのデータ記録位置に記録されているデータは、最新のデータ記録位置管理テーブル1421にはないので、無効データとなる。
【0031】
データ処理部153は、書き込み処理や読み出し処理、コンパクション処理などのコマンドを生成し、生成したコマンドに基づいて、NANDメモリ12へのデータの書き込みやNANDメモリ12からのデータの読み出し、コンパクションなどの処理を行う。データ書き込みの際には、ログ情報記録位置決定部151で決定されたログ情報記録位置に基づいて、書き込みデータとその書き込みデータに対応するログ情報とを、決定された書き込み先の論理ブロックと論理ページに書き込む。
【0032】
また、データ処理部153は、コンパクション処理を行う際には、コンパクション対象となる論理ブロックをコンパクション対象ブロックリスト1423から決定し、この論理ブロックの各論理ページからログ情報を並列に読み出すように読み出し処理を行い、読み出したログ情報をコンパクション対象データ判定部155に渡す。また、コンパクション対象データ判定部155から取得したデータ記録位置からコンパクション対象データをコンパクションバッファ1413に読み出し、コンパクションバッファ1413中のデータとログ情報生成部152で生成されたログ情報とを、ログ情報記録位置決定部151で決定されたログ情報記録位置に基づいて、書き込み先の論理ブロックの論理ページに書き込む。
【0033】
管理情報管理部154は、NANDメモリ12へのデータの書き込みなどによって変化する管理情報が最新の情報となるように管理する。たとえば、NANDメモリ12へのデータの書き込みによって、データの論理クラスタアドレスに対応するデータ記録位置が変更となる場合に、データ記録位置管理テーブル1421を新たなデータ記録位置で更新したり、論理ブロックの消去を行った場合に、論物変換テーブル1422の消去回数を更新したりする。また、コンパクション処理によってコンパクション対象となる論理ブロックの有効クラスタの数が変化した場合に、コンパクション対象ブロックリスト1423の有効クラスタ数を更新したり、コンパクション処理によってコンパクション対象となる論理ブロックの有効クラスタ数が0になった場合に、その論理ブロックをフリーブロックリストに追加したりする。
【0034】
コンパクション対象データ判定部155はデータ処理部153から取得した論理ブロック番号に対応する論理ブロックの各論理ページのログ情報からコンパクション対象データとなる有効データ(有効クラスタ)のデータ記録位置を取得する。具体的には、ログ情報から1つのログを取得し、このログの論理クラスタアドレスに対応するデータ記録位置をデータ記録位置管理テーブル1421から取得し、両者を比較する。両者が一致する場合には、その論理クラスタアドレスに記憶されているデータは有効データであり、コンパクション対象のデータとなる。一方、両者が一致しない場合には、ログ中のデータ記録位置は古いデータであり、その論理クラスタアドレスに記憶されているデータは無効データであるので、コンパクション対象のデータとはならない。そして、コンパクション対象データの論理クラスタアドレスをデータ処理部153に渡す。
【0035】
ブロック管理部156は、NANDメモリ12内の書き込みを行うブロックを管理する。たとえば、コンパクション処理によって、有効データがなくなったコンパクション対象ブロックを開放し、フリーブロックにする。また、NANDメモリ12を構成するブロックが全体的に均等に使用されるように、書き込み処理やコンパクション処理の際の書き込み先ブロックを選定する機能も有する。
【0036】
ここで、ログ情報記録位置決定部151によるログ情報の記録位置の決定方法について説明する。はじめに、通常の書き込み方法によって、論理ページに書き込みを行う場合について説明を行った後、ログ情報記録位置をチャネル分散させた場合、さらにバンク分散させた場合について説明する。
【0037】
ログ情報は論理ページ内に書き込むデータがすべて揃って最後にでき上がるため、データの開始位置を決めるということはログ情報記録位置を決めることに相当する。データ開始位置をどの論理ページでも同じ位置とすると、ログ情報記録位置もどの論理ページでも同じ位置となる。通常、論理ページの先頭クラスタから並列動作要素をまたぐようにクラスタ単位でデータを書き込む(配列する)ので、最終クラスタにログ情報が記録されることになる。そのため、コンパクション対象データの判定処理の際には、最終クラスタに格納されているログ情報を読み出すために1論理ページずつ読み込むことになる。たとえば
図2のように、論理クラスタ番号が「63」に相当する位置のクラスタに、論理ブロックを構成する全ての論理ページのログ情報が書き込まれた場合には64ページ分の読み出し処理を繰り返すことになる。
【0038】
図5は、ログ情報記録位置をチャネル分散させる場合の一例を示す図である。
図1に示されるように、メモリシステム10は、8個の並列動作要素121−0〜121−7に接続される8個のチャネル有しており、8個の並列動作要素121−0〜121−7からそれぞれ1物理ページを独立に(並列して)読み出すことができる。そこで、
図5に示されるように、データの記録開始位置「s」を、論理ページ番号0ではチャネル0とし、論理ページ番号1ではチャネル1とし、論理ページ番号2ではチャネル2とし、・・・、論理ページ番号7ではチャネル7とする(すなわち、ログ情報の記録位置「e」を、論理ページ番号0ではチャネル7とし、論理ページ番号1ではチャネル0とし、論理ページ番号2ではチャネル1とし、・・・、論理ページ番号7ではチャネル6とする)というサイクルを繰り返すことにする。さらに一般化すると、チャネル数(並列動作要素数)がm(mは自然数)のメモリシステム10での論理ページ番号がn(nは0以上の整数)のデータ開始チャネル(並列動作要素)は、次式(1)のようにして決定される。
データ開始チャネル=n modulo m ・・・(1)
【0039】
つまり、
図1の構成の場合には、論理ページ番号が8i(iは0以上の整数)のときにチャネル7から並列動作要素121−7にログ情報が書き込まれ、論理ページ番号が8i+1のときにチャネル0から並列動作要素121−0にログ情報が書き込まれ、論理ページ番号が8i+2のときにチャネル1から並列動作要素121−1にログ情報が書き込まれ、・・・、論理ページ番号が8i+7のときにチャネル6から並列動作要素121−6にログ情報が書き込まれることになり、ログ情報が記録されるチャネルが周期的に変わることになる。
【0040】
なお、論理ページ0でのクラスタサイズで見た場合のデータの繋がり方は、論理クラスタ番号で0→1→2→・・・→7→8→9→・・・→63の順となる。また、論理ページ1でのクラスタサイズで見た場合のデータの繋がり方は、論理クラスタ番号で65→66→・・・→71→64→73→74→・・・→79→72→81→・・・→127→120の順となる。他の論理ページも書き込みの開始位置が異なるが、データの繋がり方は同様である。また、これらの場合では、バンクBank0の並列動作要素121−0〜121−7の書き込みを行った後、バンクBank1の並列動作要素121−0〜121−7の書き込みが行われる。なお、上記のデータの並び順は、説明をわかりやすくするために論理ページ0での番号を用いて行っている。実際には、(論理ページの番号)×64に上記の数字が付加されることになる。
【0041】
このように、書き込み対象データの書き込み開始位置(チャネル)を変えることによって、コンパクション対象データの判定処理の際に、それぞれのチャネル0〜7で異なる論理ページのログ情報を含む範囲のデータを読み出すことが可能になる。具体的には、チャネル7では論理ページ0を読み出し、チャネル0では論理ページ1を読み出し、チャネル1では論理ページ2を読み出し、・・・、チャネル6では論理ページ7を読み出すことで、8論理ページ分のログ情報を同時に読み出すことが可能になる。
【0042】
図6は、バンクインタリーブの仕組みを説明する図であり、(a)はNANDメモリの構成を模式的に示す図であり、(b)はバンクインタリーブを用いない場合のデータ読み出し時のタイムチャートの一例を示す図であり、(c)はバンクインタリーブを用いる場合のデータ読み出し時のタイムチャートの一例を示す図である。
【0043】
ここでは、
図6(a)に示されるように、バンクインタリーブの効果が視覚的に理解しやすいように、NANDメモリ12の並列動作要素121が4バンク(Bank0〜Bank3)で構成される場合を例に挙げている。各バンクBank0〜Bank3には、NANDメモリ12−a〜12−dと、NANDメモリ12−a〜12−dから読み出したデータを一時記憶するページレジスタ122−a〜122−dと、が設けられる。
【0044】
バンクインタリーブを使用しない場合は、
図6(b)に示されるように、読み出しコマンドを受けると、まず、読み出しコマンドで指定されるバンクBank0のNANDメモリ12−a内のアドレスからデータがページレジスタ122−aに読み出され、ページレジスタ122−aから実際のI/Oへとリードデータを転送する。ついで、読み出しコマンドで指定されるバンクBank1のNANDメモリ12−b内のアドレスからデータがページレジスタ122−bに読み出され、ページレジスタ122−bから実際のI/Oへとリードデータを転送する。その後、読み出しコマンドで指定されるバンクBank2のNANDメモリ12−c内のアドレスからデータがページレジスタ122−cに読み出され、ページレジスタ122−cから実際のI/Oへとリードデータを転送する。そして、読み出しコマンドで指定されるバンクBank3のNANDメモリ12−d内のアドレスからデータがページレジスタ122−dに読み出され、ページレジスタ122−dから実際のI/Oへとリードデータを転送する。このように、各バンクBank0〜3で、NANDメモリ12−a〜12−dからページレジスタ122−a〜122−dに読み出す処理と、ページレジスタ122−a〜122−dからI/Oへデータを転送する処理と、の2段階の処理が順に行われる。
【0045】
これに対して、バンクインタリーブを使用する場合は、
図6(c)に示されるように、あるバンクでのページレジスタ122からI/Oへデータを転送する処理を行っているときに、同時につぎのバンクでNANDメモリ12からページレジスタ122に読み出す処理を行うようにしている。たとえば、バンクBank0でページレジスタ122−aから実際のI/Oへとリードデータを転送する処理と同時に、読み出しコマンドで指定されるバンクBank1のNANDメモリ12−b内のアドレスからデータがページレジスタ122−bに読み出される。また、バンクBank1でページレジスタ122−bから実際のI/Oへとリードデータを転送する処理と同時に、読み出しコマンドで指定されるバンクBank2のNANDメモリ12−c内のアドレスからデータがページレジスタ122−cに読み出される。このように、異なるバンクでの2つの処理をオーバラップさせることで、同じチャネル(並列動作要素)内の複数バンクのデータを高速でリードすることが可能になる。なお、ここでは、データの読み出しの場合を例に挙げて説明したが、データの書き込みの場合も同様である。
【0046】
図7は、ログ情報記録位置をチャネル分散およびバンク分散させる場合の一例を示す図である。この例では、
図5の場合でさらにログ情報記録位置をバンク分散させる。具体的には、
図7に示されるように、データの記録開始位置「s」を、論理ページ番号0ではチャネル0のバンクBank0とし、論理ページ番号1ではチャネル1のバンクBank0とし、論理ページ番号2ではチャネル2のバンクBank0とし、・・・、論理ページ番号7ではチャネル7のバンクBank0とし、論理ページ番号8ではチャネル0のバンクBank1とし、論理ページ番号9ではチャネル1のバンクBank1とし、論理ページ番号10ではチャネル2のバンクBank1とし、・・・、論理ページ番号15ではチャネル7のバンクBank1とする(すなわち、ログ情報の記録位置「e」を、論理ページ番号0ではチャネル7のバンクBank1とし、論理ページ番号1ではチャネル0のバンクBank1とし、論理ページ番号2ではチャネル1のバンクBank1とし、・・・、論理ページ番号7ではチャネル6のバンクBank1とし、論理ページ番号8ではチャネル0のバンクBank0とし、論理ページ番号9ではチャネル1のバンクBank0とし、論理ページ番号10ではチャネル2のバンクBank0とし、・・・論理ページ番号15ではチャネル0のバンクBank1とする)というサイクルを繰り返すことにする。さらに一般化すると、チャネル数(並列動作要素数)がmでバンク数がs(sは自然数)のメモリシステム10での論理ページ番号がnのデータ開始チャネル(並列動作要素)とデータ開始バンクは、それぞれ次式(2)、(3)のようにして決定される。
データ開始チャネル=n modulo m ・・・(2)
データ開始バンク=n/m modulo s ・・・(3)
【0047】
ただし、(3)式中の「n/m」は、商を表している。すなわち、論理ページ番号nをチャネル数mで割ったときの商を表している。
【0048】
つまり、
図1の構成の場合には、論理ページ番号が16iのときにチャネル7のバンクBank1にログ情報が書き込まれ、論理ページ番号が16i+1のときにチャネル0のバンクBank1にログ情報が書き込まれ、論理ページ番号が16i+2のときにチャネル1のバンクBank1にログ情報が書き込まれ、・・・、論理ページ番号が16i+7のときにチャネル6のバンクBank1にログ情報が書き込まれ、論理ページ番号が16i+8のときにチャネル7のバンクBank0にログ情報が書き込まれ、論理ページ番号が16i+9のときにチャネル0のバンクBank0にログ情報が書き込まれ、論理ページ番号が16i+10のときにチャネル1のバンクBank0にログ情報が書き込まれ、・・・、論理ページ番号が16i+15のときにチャネル6のバンクBank0にログ情報が書き込まれる。つまり、ログ情報が記録されるチャネルが周期的に変わるとともに、ログ情報が記録されるバンクも周期的に変わることになる。
【0049】
このようにすることによって、コンパクション対象データの判定処理の際に、チャネル0〜7では、ログ情報が記録された異なる論理ページのバンクBank1のデータをI/Oに出力する間に、ログ情報が記録された異なる論理ページのバンクBank0のデータを読み出すようにすることで、
図5の場合に比して、ログ情報の読み出しをさらに速くすることが可能になる。
【0050】
つぎに、このメモリシステム10における書き込み処理、読み出し処理およびコンパクション処理について説明する。
【0051】
<書き込み処理>
図8は、書き込み処理の手順の一例を示すフローチャートである。ホスト装置からデータの書き込み要求を受けると、データ処理部153は、書き込み対象データを書き込むNANDメモリ12中の論理ブロックと、その論理ブロック内の書き込みを行う論理ページと、を決定する(ステップS11)。ついで、ログ情報記録位置決定部151は、決定された書き込みを行う論理ページ番号に基づいて、上記した(2)式と(3)式を用いて、書き込み対象データのデータ開始位置、すなわちデータ開始チャネルとデータ開始バンク、を決定する(ステップS12)。その結果、ログ情報記録位置も決まることになる。
【0052】
ついで、ログ情報生成部152は、ステップS12で決定されたデータ開始位置から書き込み対象データを書き込んだ場合のそのデータ記録位置と、書き込み対象データに割り当てられた論理クラスタアドレスとの関係を示すログ情報を生成する(ステップS13)。このログ情報は、論理ページ内の全てのクラスタデータに対するログを一纏めにしたものである。
【0053】
新たに書き込みが命じられたデータの場合には、ステップS12で決定されたデータ開始位置から書き込み対象データを書き込んだとした場合のデータ記録位置が、書き込み対象データに対して割り当てられた論理クラスタアドレスと対応付けられる。また、NANDメモリ12から読み出されたデータの書き換えの場合には、書き換えられた書き込み対象データの新たなデータ記録位置が、読み出されたデータの論理クラスタアドレスに対応付けられる。
【0054】
その後、データ処理部153は、書き込み対象データとそれに対応するログ情報とを決定されたデータ書き込み開始位置から書き込む書き込みコマンドを生成し、書き込み対象データとログ情報とをNANDメモリ12へと書き込む(ステップS14)。このとき、1つのデータが8個のチャネルを介して並列に並列動作要素121−0〜121−7に書き込まれる。また、管理情報管理部154は、書き込みによって変化したデータ記録位置でデータ記録位置管理テーブル1421を更新する(ステップS15)。以上によって、書き込み処理が終了する。
【0055】
<読み出し処理>
読み出し処理では、ホスト装置からデータの読み出し要求を受けると、データ処理部153は、データ記録位置管理テーブル1421から読み出し対象データの論理クラスタアドレスに対応するデータ記録位置を取得する。そして、データ処理部153は、取得したデータ記録位置からデータを読み出すように読み出しコマンドを生成し、NANDメモリ12からデータを読み出す。データは、
図2などに示されるように、並列動作要素121−0〜121−7にまたがってNANDメモリ12に書き込みが行われているので、8個の並列動作要素121−0〜121−7から同時にデータが読み出され、読み出しバッファ1411へと記憶される。そして、読み出しバッファ1411からホスト装置へとデータが渡される。以上によって、読み出し処理が終了する。
【0056】
<コンパクション処理>
図9は、コンパクション処理の手順の一例を示すフローチャートである。まず、コンパクション処理が開始されると、ブロック管理部156は、コンパクション対象ブロックリスト1423からコンパクション対象となる1つの論理ブロックを取得する(ステップS31)。一般的には、コンパクション対象となる論理ブロックとして、コンパクション対象ブロックリスト1423中の最も有効クラスタ数が少ない論理ブロックが選択される。
【0057】
ついで、データ処理部153は、選択した1つの論理ブロック内の各論理ページに記録されている全てのログ情報を読み出すコマンドを生成し、そのコマンドに基づいて、NANDメモリ12の選択した論理ブロックの複数の論理ページから並列にログ情報を読み出す(ステップS32)。書き込み処理で説明したように、データのNANDメモリ12への書き込み時に、ログ情報記録位置が論理ページ毎に異なる並列動作要素121−0〜121−7(チャネルch0〜ch7)となるようにしているので、8論理ページ分のログ情報記録位置を含むデータを同時に読み出す。たとえば、
図7の場合、チャネルch0〜ch6では、それぞれバンクBank1の論理ページ1〜7に書き込まれたログ情報を読み出し、チャネルch7では、バンクBank1の論理ページ0に書き込まれたログ情報を読み出し、これらの読み出したデータを読み出しバッファ1411に記憶する。また、バンクインタリーブによって、読み出したデータを読み出しバッファ1411に記憶する処理と同時に、つぎのデータをNANDメモリ12から読み出す処理を行う。ここでは、チャネルch0〜ch6では、それぞれバンクBank0の論理ページ9〜16に書き込まれたログ情報を読み出し、チャネルch7では、バンクBank0の論理ページ8に書き込まれたログ情報を読み出す。このような処理を繰り返し実行する。
【0058】
コンパクション対象データ判定部155は、読み出しバッファ1411に読み出されたデータ中のログ情報とデータ記録位置管理テーブル1421とを用いて、コンパクション対象データのデータ記録位置の取得処理を行う(ステップS33)。
【0059】
図10は、コンパクション対象データのデータ記録位置の取得処理の手順の一例を示すフローチャートであり、
図11は、コンパクション対象データの判定処理の一例を模式的に示す図である。コンパクション対象データ判定部155は、ログ情報中の1つのログを選択し(ステップS51)、その論理クラスタアドレスに対応するデータ記録位置(以下、第1データ記録位置とする)を取得する(ステップS52)。また、コンパクション対象データ判定部155は、データ記録位置管理テーブル1421から選択したログの論理クラスタアドレスに対応するデータ記録位置(以下、第2データ記録位置とする)を取得する(ステップS53)。そして、第1データ記録位置と第2データ記録位置とが一致するか判定する(ステップS54)。
【0060】
第1データ記録位置と第2データ記録位置とが一致しない場合(ステップS54でNoの場合)には、データ記録位置管理テーブル1421の内容が最新である(正しい)ので、ログ中の第1データ記録位置は過去のものであり、無効データであると判定する。つまり、取得した論理クラスタアドレスに格納されているデータは、コンパクション対象データではないと判定する(ステップS55)。そして、ステップS52で取得した第1データ記録位置を破棄する(ステップS56)。
【0061】
たとえば、
図11のログ情報200中のログ202では、論理クラスタアドレスは「187」であり、第1データ記録位置は「119:1」となっている。一方、データ記録位置管理テーブル1421では、論理クラスタアドレス「187」に対応する第2データ記録位置は「52:32」となっている。すなわち、第1データ記録位置と第2データ記録位置とは不整合であり、ログ202に格納されている第1データ記録位置は古い内容である。その結果、第1データ記録位置に記録されているデータは無効クラスタ(データ)である。
【0062】
一方、第1データ記録位置と第2データ記録位置とが一致する場合(ステップS54でYesの場合)には、ログ中の第1データ記録位置は最新のものであり、有効データであると判定する。つまり、取得した論理クラスタアドレスに格納されているデータは、コンパクション対象データであると判定する(ステップS57)。
【0063】
たとえば、
図11のログ情報200中のログ201では、論理クラスタアドレスは「2034」であり、第1データ記録位置は「119:0」となっている。また、データ記録位置管理テーブル1421では、論理クラスタアドレス「2034」に対応する第2データ記録位置は「119:0」となっている。すなわち、第1データ記録位置と第2データ記録位置とは整合しており、ログ202に格納されている第1データ記録位置は最新の内容である。その結果、第1データ記録位置に記録されているデータは有効クラスタ(データ)であり、コンパクション対象データである。ログ203についても同様であり、コンパクション対象データである。
【0064】
ステップS55またはステップS57の後、このような処理をログ情報中の全てのログについて行ったかを確認し(ステップS58)、全てのログについて行っていない場合(ステップS58でNoの場合)には、ステップS51へと戻り、上記した処理が繰り返し実行される。また、全てのログについて行った場合(ステップS58でYesの場合)には、コンパクション対象データの取得処理が終了し、
図9のフローチャートの処理に戻る。
【0065】
図9に戻って、データ処理部153は、コンパクション対象データを書き込む論理ブロックを決定する(ステップS34)。その後、データ処理部153は、コンパクション対象データ判定部155によって取得されたデータ記録位置のコンパクション対象データをコンパクションバッファ1413に読み出すコマンドを生成し、コマンドにしたがってコンパクション対象データをコンパクションバッファ1413に記憶する(ステップS35)。
【0066】
ついで、ログ情報記録位置決定部151は、コンパクションバッファ1413に記憶されたデータを、書き込み先の論理ブロックのある論理ページに書き込む際の書き込み開始位置を決定する(ステップS36)。ここでは、上記(2)式と(3)式とを用いて、データ開始チャネルとデータ開始バンクとを決定する。
【0067】
その後、ログ情報生成部152は、コンパクションバッファ1413に読み出されたデータを、ステップS36で決定された論理ページの書き込み開始位置から書き込む場合に変更されるデータ記録位置管理テーブル1421の内容をログとしてクラスタ単位で生成し、論理ページ単位でまとめたログ情報を生成する(ステップS37)。
【0068】
ついで、データ処理部153は、コンパクションバッファ1413に記憶されたデータと生成されたログ情報を、論理ページの書き込み開始位置から書き込むことを指示するコマンドを生成し、生成されたコマンドにしたがってコンパクションバッファ1413中のデータを論理ブロックに書き込む(ステップS38)。また、管理情報管理部154は、コンパクション対象データの書き込み先の論理ブロックへの書き込みによって生じたデータ記録位置の変更(ステップS37で生成されたログと同じ情報)をデータ記録位置管理テーブル1421に反映させる(ステップS39)。
【0069】
その後、管理情報管理部154は、コンパクション処理を行った結果によるコンパクション対象ブロック中の有効クラスタ数の変化をコンパクション対象ブロックリスト1423に反映させる(ステップS40)。具体的には、コンパクション処理によって、コンパクション対象ブロック中の有効クラスタ数が0になったかを判定する。有効クラスタ数が0でない場合には、コンパクション処理後の有効クラスタ数をコンパクション対象ブロックリスト1423に反映させる。一方、有効クラスタ数が0の場合には、ブロック管理部156は、有効クラスタのなくなった論理ブロックを開放してフリーブロックにし、また管理情報管理部154はフリーブロック化した論理ブロックをフリーブロックリスト1424に追加する。以上によって、コンパクション処理が終了する。
【0070】
なお、上記した説明では、論理ブロックにデータを書き込む際に、ログ情報の位置がチャネル分散されるとともにバンク分散される場合を示したが、チャネル分散のみされるようにしてもよい。
【0071】
本実施形態では、データを書き込む際にデータ書き込みにより変更となるデータの論理クラスタアドレスに対する新たなデータ記録位置をログとして、論理ページ内の各クラスタについてまとめたログ情報を論理ページ単位で記録し、そのログ情報の書き込み位置がチャネル分散するようにした。そして、このログ情報を用いてコンパクション処理を行う際の有効クラスタを検索するが、その際に、それぞれのチャネルでログ情報が記録された物理ページを同時に読み出すとともに、ログの内容とデータ記録位置管理テーブル1421との内容の一致/不一致で論理ブロック中の有効データを判定するようにした。これによって、論理ブロック内の各論理ページに設けられるログ情報をチャネル数分読み出すことができ、ログ情報の読み出しに要する時間を、1論理ページずつ読み出す場合に比して短縮することができるという効果を有する。さらに、ログ情報の書き込み位置をバンク分散させ、バンクインタリーブ機能を使用することで、さらにログ情報の読み出しに要する時間を短縮させることが可能になる。
【0072】
また、論理ブロック内の有効データの位置を示すのに、各論理ページにログ情報を記録したので、有効データの位置を示す有効データマップを管理情報に別途持たせる必要がなく、またその専用メモリ領域を設ける必要もない。そのため、装置のコストを下げることができるという効果を有する。さらに、ログ情報を効率的に配置することによって、コンパクション対象データ探索時のログ情報リードを高速化でき、コンパクション処理性能を損なうことなく有効データマップのための専用メモリを従来に比して削減することができるという効果も有する。
【0073】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。