メモリシステム
【課題】不正な電源断やデータ破壊を簡便かつ確実に検出することが可能なメモリシステムを提供する。
【解決手段】実施形態のメモリシステムは、揮発性の第1の記憶部と、不揮発性の第2の記憶部と、データ管理部と、復元制御部と、を備える。前記データ管理部は、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報である差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させる。前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う。
【解決手段】実施形態のメモリシステムは、揮発性の第1の記憶部と、不揮発性の第2の記憶部と、データ管理部と、復元制御部と、を備える。前記データ管理部は、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報である差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させる。前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性半導体記憶装置であるNAND型フラッシュメモリの大容量化が進行し、このNAND型フラッシュメモリを搭載したメモリシステムとしてのSSD(Solid State Drive)が注目されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2010−157139号公報
【特許文献2】特開2009−217391号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の一つの実施形態は、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第1の記憶部と、ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第2の記憶部と、を備える。また、メモリシステムは、前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うデータ転送制御部を備える。また、メモリシステムは、データ管理部を備える。前記データ管理部は、前記第2の記憶部に記憶された管理テーブルをシステム起動時に前記第1の記憶部に転送する。また、前記データ管理部は、前記管理テーブルを更新すべき事象が発生した際、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第1の記憶部に記憶させる。また、前記データ管理部は、所定の条件が成立したときに前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させるとともに前記第1の記憶部に記憶された差分ログの内容を前記第1の記憶部に記憶されている前記管理テーブルに反映する。また、メモリシステムは、前記第2の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第2の記憶部に正常に記憶されているか、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第2の記憶部に記憶させた後に前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部を備える。そして、前記データ管理部は、前記差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させる。また、前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行う。
【図面の簡単な説明】
【0006】
【図1】図1は、SSDの構成例を示すブロック図である。
【図2】図2は、スナップショットとログの生成形態を概念的に示す図である。
【図3】図3は、差分ログの並列書き込みタイミングを説明するための図である。
【図4】図4は、差分ログを並列で書き込まず、連続処理で2回書き込む場合の書き込みタイミングを説明するための図である。
【図5】図5は、差分ログの並列書き込み位置を説明するための図である。
【図6】図6は、差分ログのNANDメモリからの読み出し処理を説明するための図である。
【図7】図7は、NANDメモリに保存された差分ログのデータ状態を説明するための図である。
【図8】図8は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。
【図9】図9は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【図10】図10は、不正電源断とデータ破壊の分類処理手順を示す図である。
【図11】図11は、差分ログの読み出し状態の分類例を示す図である。
【図12】図12は、2重化されたページの取り扱い例を説明するための図である。
【図13】図13は、ActiveログおよびStandbyログの書き込み手順を示す図である。
【図14】図14は、SSDを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図15】図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0008】
(実施形態)
図1は、SSDの構成例を示すブロック図である。NAND型フラッシュメモリ(以下、NANDメモリと略す)10を用いた半導体記憶装置の一例であるSSD(Solid State Drive)100は、メモリシステムなどに適用される。本実施形態のSSD100は、不揮発に保存したい重要なデータ(管理データ)を書き込む際に、信頼性を確保するために管理データ(後述する差分ログ23N)の多重化(例えば2重化)記憶を行なう。このとき、SSD100では、管理データを並列で書き込むことによって書き込み時間の短時間化を図る。また、SSD100は、管理データを書き込んだ後、管理データの最後のページを再度、書き込んでおくことにより、書き込み処理中の不正な電源断などを認識できるようにしておく。例えば、SSD100では、書き込まれたデータの一部または全部を読み出せなかった場合に、NANDメモリ10内のデータ記憶状態に基づいて、データ書き込み中の不正な電源断と、データ書き込み後のデータ破壊の何れが発生したかを判断する。そして、SSD100は、復元可能なデータのみを復元する。
【0009】
SSD100は、ATAインタフェース(ATA I/F)などのメモリ接続インタフェースであるホストI/F2を介してパーソナルコンピュータあるいはCPUコアなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。
【0010】
SSD100は、揮発性半導体メモリとしてのDRAM20と、データ管理などを行うコントローラ30と、データの記憶処理を制御するとともにデータを記憶するデータ記憶部12と、を備えている。
【0011】
データ記憶部12は、不揮発性半導体メモリとしてのNANDメモリ10と、NANDメモリ10を制御するNANDコントローラ11と、を有している。
【0012】
NANDメモリ10は、例えば、4並列動作を行う4つの並列動作要素10a〜10dを有し、4つの並列動作要素10a〜10dは、4つのチャネルなどによってNANDコントローラ11に接続されている。
【0013】
各並列動作要素10a〜10dは、バンクインターリーブが可能な複数のバンク(例えば4バンク)によって構成されており、各バンクは、複数のNANDメモリチップ(例えば2メモリチップ)によって構成されている。各メモリチップは、例えば、それぞれ複数の物理ブロックを含むプレーン0、プレーン1の2つの領域(District)に分割されている。プレーン0およびプレーン1は、互いに独立した周辺回路(例えば、ロウデコーダ、カラムデコーダ、ページバッファ、データキャッシュ等)を備えており、倍速モードを使用することで、同時に消去/書き込み/読み出しを行うことが可能である。
【0014】
このように、NANDメモリ10の各NANDメモリチップは、複数のチャネルによる並列動作、複数のバンクによるバンクインターリーブ動作、複数のプレーンを用いた倍速モードによる並列動作が可能である。なお、各メモリチップは、4つのプレーンに分割された構成であってもよいし、あるいは、全く分割されていなくてもよい。本実施形態では、並列アクセスできる2つのブロックに対して、データの並列書き込みを行う場合について説明する。
【0015】
DRAM20は、ホスト1とNANDメモリ10との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。DRAM20の作業領域用メモリに記憶されるものとしては、管理テーブル21、ユーザデータ22、差分ログ23Dがある。
【0016】
管理テーブル21は、NANDメモリ10に記憶されている管理テーブル21が起動時などに展開されたマスターテーブル(スナップショット)である。管理テーブル21は、ホスト1から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【0017】
また、差分ログ23Dは、管理テーブル21の変更差分である。ユーザデータ22の書き込みや、管理テーブル21へのデータの読み書きを行う際には、DRAM20上に管理テーブル21や差分ログ23Dが展開される。
【0018】
管理テーブル21の差分である差分ログ23Dは、ユーザデータ22の書き込みや保存先ブロックの変更などがあった場合にDRAM20上にいったん保存されるが、一定量たまったところで、差分ログ23NとしてNANDメモリ10に書き込まれる。これをログのコミットという。換言すると、SSD100は、SSD100が動作している間、ログのコミットとして、所定のタイミングで、差分ログ23Dを管理テーブル21に反映するとともに、差分ログ23NとしてNANDメモリ10に保存する。また、SSD100は、SSD100が動作している間、所定のタイミングで管理テーブル21をNANDメモリ10に保存する。
【0019】
具体的には、DRAM20上では、差分ログ23Dとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、コミットの処理タイミング毎に、差分ログ23Dが差分ログ23NとしてNANDメモリ10に書き込まれる。NANDメモリ10では、差分ログ23Nが順番に時系列で並ぶよう記憶される。そして、管理テーブル21(スナップショット)のNANDメモリ10への保存が終了すると、管理テーブル21を保存する前にNANDメモリ10に書き込まれた差分ログ23Nは、復元処理で不要になる。
【0020】
本実施形態では、例えば、最新の差分ログ23Nと、1つ前に記憶した差分ログ23Nと、をNANDメモリ10に記憶しておく。そして、最新の差分ログ23NをNANDメモリ10に記憶させたことが確定した時点で、1つ前に記憶した差分ログ23Nを記憶していた記憶領域を、新たなデータ記憶領域として開放する。
【0021】
なお、DRAM20の代わりに、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)などを使用してもよい。
【0022】
NANDコントローラ11は、ホスト1とNANDメモリ10との間でDRAM20を介してデータ転送制御を行う。また、NANDコントローラ11は、NANDメモリ10内でのデータの消去、書き込み、読み出し、読み出しエラー判定、消去済み判定などを行う。本実施形態のNANDコントローラ11は、NANDメモリ10のデータの並列書き込みを行なう機能を有している。
【0023】
データ管理部であるコントローラ30は、DRAM20内のデータをNANDメモリ10に記憶させる機能や、NANDメモリ10内のデータをDRAM20上に復元する機能を有する。コントローラ30は、NANDメモリ10に記憶された管理テーブル21をシステム起動時にDRAM20に転送する。また、コントローラ30は、管理テーブル21を更新すべき事象が発生した際、DRAM20に記憶されている管理テーブル21の更新前後の差分情報を差分ログ23DとしてDRAM20に記憶させる。また、コントローラ30は、所定の条件が成立したときにDRAM20に記憶された差分ログ23NをNANDメモリ10に順次追記記憶させるとともにDRAM20に記憶された差分ログ23Dの内容をDRAM20に記憶されている管理テーブル21に反映する。
【0024】
また、本実施形態のコントローラ30は、差分ログ23Nを並列書き込み処理によって多重化してNANDメモリ10に記憶させた後、DRAM20に記憶される差分ログ23Dのうち、NANDメモリ10に最後に記憶されたページを再度、並列書き込み処理によって多重化してNANDメモリ10に記憶させる。また、コントローラ30は、SSD100内の各構成要素を制御する。コントローラ30は、書き込み制御部31と、復元制御部32と、を備えている。
【0025】
書き込み制御部31は、管理テーブル21に基づいてデータの読み書き制御を行う。書き込み制御部31は、例えば、DRAM20内のデータをNANDメモリ10内に保存するための書き込み制御を行う。
【0026】
復元制御部32は、NANDメモリ10に書き込まれた差分ログ23Nのデータ状態に基づいて、(1)前回正常なシステム停止が行われたか、(2)不正な電源断が行われたか、(3)データ破壊が発生しているかの状態判断を行う。復元制御部32は、前回正常なシステム停止が行われた場合に、NANDメモリ10内の差分ログ23NをDRAM20上に復元する。また、復元制御部32は、不正な電源断が行われたと判断した場合またはデータ破壊が発生したと判断した場合に、NANDメモリ10内で復元可能なデータのみを復元させる。
【0027】
不揮発にデータを保持するためには、データをどこにどのように保存しているかといった内容を持つ管理テーブル21自体も不揮発に保存しておく必要がある。この管理テーブル21は、起動時に、不揮発性のNANDメモリ10から揮発性のDRAM10に展開され、展開された管理テーブル21はデータの書き込みによって更新される。記憶容量の大容量化とともに、管理テーブル21も大きくなるので、書き込みデータに変更が発生するたびに管理テーブル21全体をNANDメモリ10に保存していては、NANDメモリ10の書き込み効率、NANDメモリ10の寿命、保存に伴う処理時間といった影響が発生してしまう。
【0028】
そのため、管理テーブル21は、ある時点での管理テーブル21全体のスナップショットと、スナップショットを保存した時点からの変更差分ログ(差分ログ23N)という形式で保存しておく。そして、通常は変更差分としての差分ログ23NだけをNANDメモリ10に記憶していく。本実施形態では、NANDメモリ10の書き込み効率が向上するよう、差分ログ23Nを並列書き込みによってNANDメモリ10に2重化記憶させる。
【0029】
ところで、動作中に不意の電源断が行なわれた場合(不正な電源断が発生した場合)であっても、記憶したデータを保持(復元)することが望まれる。例えば、DRAM20上に展開された管理テーブル21(マスターテーブル)は、電源が切れても、電源が切れる以前の状態に復元する必要があり、このためマスターテーブルを不揮発性のNANDメモリ10に保存する仕組みが必要となる。スナップショットは、NANDメモリ10上の不揮発性の管理テーブル21の全体を指し、DRAM20に展開されたマスターテーブルをそのままNANDメモリ10に保存することを、スナップショットをとるとも表現する。
【0030】
また、記憶したデータを復元する際には、管理テーブル21の整合性を取るために、正常な電源断シーケンスが行なわれたか、不正な電源断が行なわれたかを判断する必要がある。また、管理テーブル21にデータ破壊がある場合、データを適切に読み書きできないだけでなく、SSD100またはSSD100を搭載するシステムに2次的な故障を誘引する可能性がある。このため、管理テーブル21にデータ破壊が有る状態でSSD100を動作させることは回避する。
【0031】
例えば、メモリなどは、データのWrite/Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。そこで、管理テーブル21においてデータ破壊が発生した場合は、データ破壊を検出して通常動作しないようにする。特に、差分ログ23Nは時系列で保存されるので、途中のデータが不正なデータである場合や、差分ログ23Nに抜けがあると整合性が取れなくなる。このため、本実施形態では、システム起動処理で管理テーブル21の復元を行なう際(電源オン後の初期化処理時)に、不正な電源断の発生およびデータ破壊を検出することによってSSD100の信頼性を高める。
【0032】
NANDメモリ10は、データを書き込むためにはその前に消去を必要とする。また、NANDメモリ10では、消去単位と書き込み単位が異なる。NANDメモリ10は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位であり、かつ書き込み順序が連続するよう規定されている。
【0033】
SSD100に搭載されているNANDコントローラ11は、バンク単位やチャネル単位で並列にデータの書き込み、または書き込みと読み出しを行なうことができるインタフェースを有している。NANDコントローラ11は、並列にアクセスできるブロックへの書き込みを並列で行なうことで書き込み時間を短縮する。本実施形態では、これらのNANDメモリ10のデバイス特性(並列書き込み)およびNANDコントローラ11の仕組みを利用して差分ログ23Nの書き込み状態(不正な電源断の発生など)を判定する。
【0034】
図2は、スナップショットとログの生成形態を概念的に示す図である。図2では、データ更新時に、スナップショットとログがどのように更新されるかを示している。コントローラ(データ管理部)30がデータ更新する際に、マスターテーブル(DRAM上の管理テーブル)に加えた変更内容をDRAM20上の差分ログ23Dに蓄積する。管理テーブルの種類によっては、マスターテーブルを直接更新し、更新内容を差分ログ23Dに蓄積したり、マスターテーブルには直接変更を加えず、変更領域を差分ログ23D上に確保して、その領域に更新内容を記憶したりする。データの読み書き処理の際には、マスターテーブルの他に蓄積された差分ログ23Dも参照する。
【0035】
コントローラ30は、データの更新が安定したら、ログのコミットを行う。コミット処理では、差分ログ23Dの内容を必要に応じてマスターテーブルに反映させ、さらに差分ログ23Dの内容を差分ログ23NとしてNANDメモリ10に保存して不揮発化する。これにより、前回のコミットまでのデータが保証される。
【0036】
スナップショットをNANDメモリ10に保存するのは、正常な電源断シーケンスの際、ログの保存領域が不足した場合などとする。差分ログ23NまたはスナップショットをNANDメモリ10に書き終わった時点で、管理テーブルの不揮発化が完了する。
【0037】
図3は、差分ログの並列書き込みタイミングを説明するための図である。SSD100では、差分ログ23Nを2重化して書き込む先のブロックを、並列書き込み可能なブロックから採用して同時に書き込みを行なう。
【0038】
例えば、SSD100は、差分ログ23Nとして、最後のページ以外の第1のデータ51Aと、最後のページ(末尾のページ)である最終ページ52Aと、最終ページ52Aと同じデータである最終ページ53Aと、をNANDメモリ10に書き込む。同様に、SSD100は、差分ログ23Nとして、最後のページ以外の第1のデータ51Bと、最後のページである最終ページ52Bと、最終ページ52Bと同じデータである最終ページ53Bと、をNANDメモリ10に書き込む。SSD100では、第1のデータ51Aと、最終ページ52Aと、を領域50Aに書き込み、第1のデータ51Bと、最終ページ52Bと、を領域50Bに書き込む。このとき、SSD100では、領域50Aへの書き込みと、領域50Bへの書き込みと、をページ単位で同時に行う。
【0039】
NANDメモリ10に対して単純に同時にデータを書くと、書き込み中に不正な電源断が発生した場合にどこまで書いた状態であったかの判断が難しくなり、読めないページについて劣化などによるデータ破壊との区別が困難となる。そのため、本実施形態では、書き込み予定データ(差分ログ23N)の最後のページにあたる最終ページを、タイミングをずらして2回書き込むことにより、冗長化のための2重化と不正電源断判定のための2重化を行う。
【0040】
具体的には、領域50A内に最終ページ52Aを書き込んだ後、最終ページ53Aを書き込む。また、領域50B内に最終ページ52Bを書き込んだ後、最終ページ53Bを書き込む。換言すると、最後のページ以外は並列に書き込み、最後のページについては時間差で最終ページ52Aおよび最終ページ53Aに合計2回書き込むとともに、時間差で最終ページ52Bおよび最終ページ53Bに合計2回書き込む。SSD100では、例えば、最終ページ53Aの書き込みと、最終ページ53Bの書き込みと、を同時に行う。これにより、差分ログ23Nのうち最終ページに対応するデータは、4重化されることとなる。このような書き込みは、書き込み制御部31によって行なわれる。
【0041】
なお、以下の説明では、説明の便宜上、第1のデータ51Aの直後に書き込まれる最終ページ52Aや第2のデータ51Bの直後に書き込まれる最終ページ52Bを、1回目の最終ページという場合がある。また、最終ページ52Aの後に書き込まれる最終ページ53Aや最終ページ52Bの後に書き込まれる最終ページ53Bを、2回目の最終ページという場合がある。
【0042】
領域50A,50Bへの第1のデータ51A,51Bおよび最終ページ52A,52Bの書き込み時間がt1であり、1回目の最終ページを書き込んでから2回目の最終ページを書き終わるまでの時間がt2である場合、差分ログ23Nの書き込みに要する時間はt1+t2となる。
【0043】
図4は、差分ログを並列で書き込まず、連続処理で2回書き込む場合の書き込みタイミングを説明するための図である。DRAM20上の差分ログ23DをNANDメモリ10へ並列で書き込まず、連続処理で2回書き込む場合、SSD100では、差分ログ23Dを領域50Aに書き込む。その後、SSD100は、もう1度差分ログ23Dを領域50Bに書き込む。このように、差分ログ23Dを2回に渡ってNANDメモリ10に書き込む場合、差分ログ23Dの書き込みに要する時間は2×t1となる。換言すると、ログ保存の2重化のために連続処理で差分ログ23Dを2回書き込む場合、データサイズあたりの書き込み時間の倍の時間がかかることとなる。
【0044】
t2は、t1よりも短い時間なので、差分ログ23Nを並列書き込みによってNANDメモリ10に書き込むことにより、差分ログ23Dを連続処理で2回書き込む場合よりも短時間で差分ログ23Nを保存することが可能となる。このように、SSD100は、差分ログ23Nの並列書き込みにより、書き込みデータサイズが大きい場合であっても短時間で差分ログ23Nを保存することが可能となる。
【0045】
図5は、差分ログの並列書き込み位置を説明するための図である。SSD100は、NANDメモリ10内で並列書き込み可能なバンク、チップ、チャネルなどの単位から並列書き込み可能なブロックを2つ選択し、各ブロックに差分ログ23Nを書き込む。図5では、並列書き込み可能なブロックとして、ブロック55Aとブロック55Bが選択された場合を示している。
【0046】
SSD100は、DRAM20上の差分ログ23Dをページ単位でブロック55A,55Bに保存する。ブロック55Aには、第1のデータ51A、1回目の最終ページ52A、2回目の最終ページ53Aの順番で、ページ単位でデータの書き込みが行われる。同様に、ブロック55Bには、第2のデータ51B、1回目の最終ページ52B、2回目の最終ページ53Bの順番で、ページ単位でデータの書き込みが行われる。なお、2回目の最終ページ53A,53Bよりも後のページは、未書き込み(Erase)のページ(未書き込みページ56)のままである。
【0047】
つぎに、コミット時における差分ログ23NのNANDメモリ10への書き込み手順について説明する。
(ステップ1)書き込み制御部31は、コミット対象となるDRAM20上の差分ログ23Dのサイズを求める。
(ステップ2)書き込み制御部31は、差分ログ23Dのログサイズから、NANDメモリ10へのデータの書き込みページ数Xとして、2回目の最終ページを除いた差分ログ23Nの書き込みページ数を求める。
(ステップ3)書き込み制御部31は、NANDメモリ10に保存する差分ログ23Nのヘッダ部に、書き込みページ数Xを格納して、ログデータとしての差分ログ23Nを作成する。
(ステップ4)書き込み制御部31は、書き込み先のNANDメモリ10のブロックであるNANDブロックを未確保であれば確保する。確保するNANDブロックは並列書き込み可能なブロックとする。
(ステップ5)書き込み制御部31は、書き込み先のNANDブロックに対し未書き込みであれば、確保したNANDブロックをブロック単位で消去する。
(ステップ6)書き込み制御部31は、書き込み先のNANDブロックの書き込み先ページを確認する。
(ステップ7)書き込み制御部31は、ページ(X−1)までは並列に差分ログ23Nのデータを書き込む。
(ステップ8)書き込み制御部31は、ページ(X−1)までの書き込みから時間をずらしてページXへのデータをNANDブロックに書き込む。
【0048】
つぎに、2重化されて保存された差分ログ23Nの読み出し処理について説明する。図6は、差分ログのNANDメモリからの読み出し処理を説明するための図である。差分ログ23Nのデータは、ページ単位でNANDメモリ10に追記されていく。例えば、1回目のコミットT1として、ブロック55Aに第1のデータ51Aとしてのページp0、ページp1、ページp2がこの順番で書き込まれ、その後、最終ページとしてのp3,p3’が書き込まれる。このとき、ブロック55Bには、第1のデータ51Bとしてのページp0、ページp1、ページp2がこの順番で書き込まれ、その後、最終ページとしてのp3,p3’が書き込まれる。
【0049】
この後、次のコミットタイミングになると、2回目のコミットT2として、ブロック55Aに第1のデータ51Aとしてのページp10、ページp11、ページp12がこの順番で書き込まれ、その後、最終ページとしてのp13,p13’が書き込まれる。このとき、ブロック55Bには、第1のデータ51Bとしてのページp10、ページp11、ページp12がこの順番で書き込まれ、その後、最終ページとしてのp13,p13’が書き込まれる。
【0050】
ログのコミットは、管理テーブル21の整合性の取れる区切りのよいタイミングで行なわれ、SSD100が起動中は随時、差分ログ23Nが追記されていくことになる。このため、図6のように連続して書かれたブロック55A,55Bでは、どこまでが一区切りのコミットデータなのかを判別する必要となる。一度に書き込む差分ログ23N(ログデータ)の量は、目的に応じて固定サイズ、固定ページでもよいが、一般的にはどのような動作を行なうかによって管理テーブル21の変更差分が変わるので、可変サイズになる。そのため、差分ログ23Nのフォーマットのヘッダ領域に、ログコミットサイズまたは書き込みページ数、あるいはその両方を保持するものとする。これにより、先頭ページを読み出してヘッダ部に格納されたデータサイズまたは書き込みページ数を読み出せば、該当のコミットログの書き込みページ数を認識することが可能となる。
【0051】
差分ログ23Nは、追記されていくので、システム起動時に差分ログ23Nを読み出す際には、1度の書き込み単位のサイズ毎に差分ログ23Nのデータを読み出していく。例えば、一度に書き込む差分ログ23Nの量が10ページ分である場合、差分ログ23Nの読み出しは、10ページ分のデータ毎に行われる。そして、差分ログ23Nを読み出す際には、1回目の最終ページの次のページである2回目の最終ページまで読み出す。これにより、書き込み処理中の不正電源断を認識できるようにする。
【0052】
つぎに、NANDメモリに保存された差分ログのデータ状態について説明する。図7は、NANDメモリ10に保存された差分ログ23Nのデータ状態を説明するための図である。
【0053】
SSD100では、システム起動時に、差分ログ23Nを順次、読み出して、差分ログ23Nの変更内容をマスターテーブルである管理テーブル21に順次反映していくことで、パワーサイクルをまたいだ継続動作を実現する。差分ログ23Nの読み出し単位は、ページ単位で行なわれ、読み出しエラーの発生状態などに基づいて書き込み時の状況が判断される。
【0054】
図7は、差分ログ23Nが正常に書かれた状態を示している。すなわち、差分ログ23Nが正常に書かれた場合、ブロック55A,55Bにそれぞれ、読み出し可能なページ(ページp0,p1,p2,p3,p3’)が保存される。そして、2回目の最終ページであるページp3’の次のページ以降は、消去済みのページであり、この消去済みのページを読み出そうとすると、読み出しエラー(Read Error)が発生する。
【0055】
NANDメモリ10では、決められたブロック単位で消去を行う必要があるので、最初のページの書き込み前にブロックが消去されている必要がある。また、ページp0から順番に書き込みを行なう必要があり、ページp0を書いた後にページ100から続きを書く、というような使い方ができない。そのため、図7に示すように、例えば、ページp0からページp3までの4ページ分のログデータを書き込んだ場合、タイミングをずらして書いた最終ページp3’を含めた5ページ分のデータが書かれていることになる。そして、最終ページp3’以降のデータ未書き込みのページは消去済みの状態となっている。消去済みのページかどうかは、通常の読み出しと異なる方法で読み出しを行うことによって判定できる。ここでは、その判定処理を消去済み判定と呼ぶ。SSD100では、NANDコントローラ11が消去済み判定の機能を有しているとする。消去済み判定の機能については、特開2009−217391号公報に開示されている。なお、SSD100は、各ブロックの最終書き込みページを別途管理する機能を有していてもよく、この場合消去済み判定の機能は不要となる。
【0056】
ここで、NANDメモリ10による差分ログ23Nの記憶が記憶異常である場合の、差分ログ23Nのデータ状態(記憶状態)について説明する。差分ログ23Nの記憶異常状態は、差分ログ23NをNANDメモリ10に記憶させる際に不正電源断発生した場合、または差分ログ23NをNANDメモリ10に記憶させた後にNANDメモリ10でデータ破壊が発生した場合に発生する。図8は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。また、図9は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【0057】
図8に示すように、差分ログ23N(ページp1)の書き込み中に不正電源断が発生した場合、不正電源断によりデータ書き込みが正常に行なえなかったページp1はエラーページPxとなる。この場合、書き込み失敗のエラーページPxの次のページは未書き込みのため消去済みページPyとなる。
【0058】
なお、エラーページとなるページが、先頭のページとなる場合や末尾のページとなる場合もある。この場合であっても、ページ単位で追記していくので、書き込み失敗のエラーページの次のページは未書き込みのため消去済みページになるという状況は同じである。
【0059】
また、図9に示すように、差分ログ23Nの書き込み時にはそのコミットの書込みが正常終了したにも関わらずNANDメモリ10のデータ破壊が発生した場合、書き込みの最後のページ位置までデータが書かれているが途中のどこかのページで読み出しエラーが発生することになる。この場合、エラーページPxの次のページはデータが書かれている状態である。もちろん、末尾のページを正常に書いたにも関わらず末尾のページでデータ破壊による異常が発生することもありえる。
【0060】
そのため、本実施形態では、末尾のページである最終ページを2回書くことにより、最後のコミットログを反映してよいのか、起動時にエラーとすべきなのかを判別する。換言すると、復元制御部32は、末尾のページを2重化することにより、不正電源断による読み出しエラーであるのか、データ破壊による読み出しエラーであるのかを判別する。なお、末尾の2重化のうちどちらか一方がデータ破壊により失われていても、もう一方が正しく書かれている場合には、正しく書かれているページまでのコミットログを反映することが可能である。
【0061】
図10は、不正電源断とデータ破壊の分類処理手順を示す図である。図10では、読み出し状態のパターン分類処理手順を示している。ここでは、1コミットあたりの読み出しの処理について示しており、このフローの終了状態は、差分ログ23NのDRAM20への反映である。
【0062】
NANDコントローラ11は、1コミットあたりの差分ログ23Nを読み出し、その差分ログ23Nの変更内容を管理テーブル21へ反映する処理を繰り返す。このとき、復元制御部32は、差分ログ23Nの保存されているNANDブロックのページ末尾が消去済みページであるか否かに基づいて、差分ログ23Nの終端を判断する。
【0063】
復元制御部32は、SSD100を起動する際に、Stage1の処理として、読み出し対象となるNANDブロックのページ位置を確認する。そして、復元制御部32は、NANDコントローラ11を介して、NANDメモリ10内から差分ログ23Nの第1ページを読み出す(1page Read)。
【0064】
読み出したページが、消去済みページ(Erase)である場合(S1)、差分ログ23Nがそれ以前のコミットで終端となっているか、または差分ログ23が保存されていない状態である。この場合、復元制御部32は、差分ログ23Nには続きがないと判断する。そして、復元制御部32は、差分ログ23Nは正常区切りされてDATE END(正常な電源断)になっていると判断し(S2)、差分ログ23Nの管理テーブル21への反映処理を終了する。
【0065】
また、読み出したページが、エラーページ(Error)である場合(S3)、復元制御部32は、コミットログヘッダからコミットページサイズEを取得することができず、読み出し継続不能となる(S4)。このため、読み出し処理を終了する。
【0066】
また、読み出したページが正常なデータ(Data)である場合(S5)、復元制御部32は、コミットログヘッダからコミットページサイズEを取得する。これにより、差分ログ23NのページEndが分かる(S6)。この後、SSD100では、Stage2の処理が行われる。
【0067】
復元制御部32は、Stage2の処理として、読み出し対象となるNANDブロックのページ位置を確認する。そして、復元制御部32は、NANDコントローラ11を介して、NANDメモリ10内から差分ログ23Nの第2ページを読み出す(1page Read)。
【0068】
読み出したページに、エラーの疑いがある場合、NANDコントローラ11は、読み出したページの消去済み判定を行う。これにより、エラーの疑いがあるページが消去済みページ(Erase)であるか、エラーページ(Error)であるかが判定される。
【0069】
読み出したページが、消去済みページ(Erase)である場合(S7)、復元制御部32は、読み出したページの箇所で不正電源断が発生したと判断する(S8−1)。また、復元制御部32は、読み出したページのページ数Rが、コミットページサイズEと一致するか否かを判定する。
【0070】
そして、現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)、復元制御部32は、末尾2重化のうちの1つ目(1回目の最終ページ)が書かれたところまでで不正電源断が発生したと判断し、反映処理に移行する。具体的には、復元制御部32は、NANDメモリ10内の差分ログ23Nのうち、最終ページまで読み出すことのできた差分ログ23Nを管理テーブル21に反映する(S8−2)。
【0071】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合、復元制御部32は、差分ログ23の途中までNANDメモリ10に書かれた状態で不正電源断が発生したと判断し、ログの終端であると判断する。
【0072】
また、読み出したページが、消去済みページ(Erase)でなければ、読み出したページは、エラーページ(Error)である。読み出したページが、エラーページ(Error)である場合(s9)、復元制御部32は、前回の読み出しページ(LAST_PAGE)が読み出し成功か否かを判定する。換言すると、前のページがエラーページであるか否かが判定される(S10)。
【0073】
前回の読み出しページ(LAST_PAGE)がエラーページでない場合(S10、No)、復元制御部32は、2ページ目以降の読み込みを行う。この場合、復元制御部32は、続きを読む処理として、Stage2の処理(第3ページ以降の読み出し処理)を最初から実行する。一方、前回の読み出しページ(LAST_PAGE)がエラーページである場合(S10、Yes)、2ページ連続でエラーページとなっているので、復元制御部32は、データ破壊が発生していると判断し(S11)、故障状態に移行する。
【0074】
また、読み出したページが正常なデータ(Data)である場合(s12)、復元制御部32は、前回の読み出しページ(LAST_PAGE)が読み出し成功か否かを判定する。前回の読み出しページが読み出し成功の場合(前のページ=データページの場合)(A)、復元制御部32は、現在読み出ししたページのページ数RがコミットページサイズEと一致するか否かを判定する(S13)。
【0075】
現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)(S13、Yes)、復元制御部32は、ページの読み出しが、コミットログの一区切りまで到達したと判断する。そして、復元制御部32は、読み出したデータを管理テーブル21に反映する処理へ移行する(S14)。
【0076】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合(読み出ししたページがページEndでない場合)(S13、No)、復元制御部32は、コミットログに続きがあると判断する。そして、復元制御部32は、続きを読む処理として、Stage2の処理を最初から実行する。
【0077】
また、読み出したページが正常なデータ(Data)であって(S12)、且つ前回の読み出しページが読み出し不成功の場合(前のページ=エラーページの場合)(B)、復元制御部32は、現在読み出ししたページのページ数RがコミットページサイズEと一致するか否かを判定する(S15)。
【0078】
現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)(S15、Yes)、復元制御部32は、末尾2重化分のもう一方のデータ(1回目の最終ページ)(時差2重化分)で管理テーブル21を復元可能なので(S16)、復元制御部32は、1回目の最終ページを用いて、反映処理へ移行する(S17)。換言すると、差分ログ23Nを用いて管理テーブル21を復元する際に、2回目の最終ページを、1つ前のページにコピーする(1回目の最終ページの位置に2回目の最終ページ書き込む)ことによって、管理テーブル21を復元する。
【0079】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合(読み出ししたページがページEndでない場合)(S15、No)、復元制御部32は、差分ログ23Nの途中でエラー(故障)が発生していると判断する(S18)。この場合、復元制御部32は、データ破壊が発生していると判断し、故障状態に移行する。故障状態となった場合、SSD100は、差分ログ23NをDRAM20上に復元させない。
【0080】
このように、本実施形態では、読み出しエラーとなった場合の不正電源断とNANDメモリ10のデータ破壊の判別を、エラーページの次のページを読み出してエラー判定および消去済み判定することにより実現する。
【0081】
上述した図10の処理によって、不正電源断が発生した場合の差分ログ23Nの読み出し状態と、データ破壊が発生した場合の差分ログ23Nの読み出し状態と、が種々分類される。そして、分類された差分ログ23Nの読み出し状態毎に、管理テーブル21の復元、故障状態への遷移などが行われる。
【0082】
図11は、差分ログの読み出し状態の分類例を示す図である。図11では、データの書き込まれたページを「データ」(written)で示し、データの読み出せないエラーページを「エラー」(Error)で示し、消去済みのページを「消去」(Erased)で示している。また、データの読み出しを行っていないページを「未読」で示している。
【0083】
図11の(a)〜(c)は、2回目の最終ページを除いた差分ログ23Nのページ数が、差分ログ23Nのヘッダ部に格納されている書き込みページ数Xよりも少ない場合の読み出し状態(データ状態)を示している。また、図11の(d)〜(j)は、2回目の最終ページを除いた差分ログ23Nのページ数が、書き込みページ数Xと同数である場合の読み出し状態を示している。また、図11の(k)〜(m)は、先頭のページp0を読み出せず、書き込みページ数Xを差分ログ23Nのヘッダ部から読み出せなかった場合の読み出し状態を示している。
【0084】
図11の(a)は、1回目の最終ページp3よりも前のページであるページp2が消去済みページであり、且つ1回目の最終ページp3が消去済みページである場合を示している。この場合、ページp2にデータが書き込まれる前(ページp1にデータが書き込まれた後)に、不正電源断が発生したと判断される。
【0085】
図11の(b)は、1回目の最終ページp3よりも前のページであるページp2がエラーページであり、且つ1回目の最終ページp3が消去済みページである場合を示している。この場合、ページp2へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図11の(a)、(b)の場合、消去済みページまたはエラーページの次のページが消去済みページ(未書き込み)であるので、不正電源断が発生したと判断される。
【0086】
図11の(c)は、ページp2がエラーページであり、且つ1回目の最終ページp3がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、ページp2と1回目の最終ページp3でデータ破壊が発生したと判断される。
【0087】
図11の(d)は、1回目の最終ページp3が消去済みページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、1回目の最終ページp3にデータが書き込まれる前(ページp2にデータが書き込まれた後)に、不正電源断が発生したと判断される。
【0088】
図11の(e)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、1回目の最終ページp3へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図11の(d)、(e)の場合、消去済みページまたはエラーページの次のページが消去済みページであるので、不正電源断が発生したと判断される。
【0089】
図11の(f)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、1回目の最終ページp3と2回目の最終ページp3’でデータ破壊が発生したと判断される。
【0090】
図11の(g)は、1回目の最終ページp3までは、正常なデータページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、2回目の最終ページp3’にデータが書き込まれる前(1回目の最終ページp3にデータが書き込まれた後)に、不正電源断が発生したと判断される。図11の(h)は、全てのページが正常なデータページである場合を示している。
【0091】
図11の(i)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’が正常なデータページである場合を示している。この場合、1回目の最終ページp3でデータ破壊が発生したと判断される。この場合であっても、2回目の最終ページp3’が正常なデータページであるので、差分ログ23Dに対応するログデータは、全てNANDメモリ10上に保存されていることになる。
【0092】
図11の(j)は、1回目の最終ページp3よりも前のページであるページp2がエラーページであり、且つ1回目の最終ページp3が正常なデータページである場合を示している。この場合、差分ログ23Nの途中ページ(最終ページ以外のページ)であるページp2でデータ破壊が発生したと判断される。
【0093】
図11の(k)は、先頭ページであるページp1,p2が消去済みページである場合を示している。この場合、ページp1にデータ書き込まれる前に、不正電源断が発生したと判断される。
【0094】
図11の(l)は、先頭ページであるページp1がエラーページであり、且つその次のページであるページp2が消去済みページである場合を示している。この場合、ページp1でデータ破壊が発生したと判断される。
【0095】
図11の(m)は、先頭ページであるページp1がエラーページであり、且つその次のページであるページp2がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、ページp1とページp2でデータ破壊が発生したと判断される。
【0096】
図11の(a),(b),(d),(e),(k),(l)の場合、読み出せないページがあるので、復元制御部32は、1つ前に保存しておいた差分ログ23Nを用いて管理テーブル21の復元を行う。
【0097】
また、図11の(c),(f),(j),(m)の場合、データ破壊が発生しているので、管理テーブル21の復元は行われない。また、図11の(g),(h),(i)の場合、復元制御部32は、図11の(g),(h),(i)に示した差分ログ23Nを用いて管理テーブル21の復元を行う。例えば、図11の(g)の場合、1回目の最終ページp3’を用いて管理テーブル21の復元が行われ、図11の(i)の場合、2回目の最終ページp3’を用いて管理テーブル21の復元が行われる。
【0098】
例えば、図11の(b)に示した差分ログ23Nの場合、図10に示した処理手順に従うと、Stage1の処理でページp0が読み出される。ページp0は、正常なデータ(Data)であるので(s5)、Stage2の処理を開始して、ページp1が読み出される。
【0099】
ページp1は、正常なデータ(Data)であり(s12)、且つ前のページp0が正常なデータ(Data)であり(A)、且つページp1はページEndではない(s13、No)。このため、Stage2の処理を再び開始して、ページp2が読み出される。
【0100】
ページp2は、エラーページ(Error)であり(s9)、且つ前のページp1がエラーページ(Error)ではない(s10、No)。このため、Stage2の処理を再び開始して、ページp3が読み出される。ページp3は、消去済みページ(Erase)であるので(s7)、不正電源断であると判定される(s8−1)。なお、ページp3は、ページEndではないので、復元は行われない。
【0101】
また、図11の(j)に示した差分ログ23Nの場合、図10に示した処理手順に従うと、Stage1の処理でページp0が読み出される。ページp0は、正常なデータ(Data)であるので(s5)、Stage2の処理を開始して、ページp1が読み出される。
【0102】
ページp1は、正常なデータ(Data)であり(s12)、且つ前のページp0が正常なデータ(Data)であり(A)、且つページp1はページEndではない(s13、No)。このため、Stage2の処理を再び開始して、ページp2が読み出される。
【0103】
ページp2は、エラーページ(Error)であり(s9)、且つ前のページp1がエラーページ(Error)ではない(s10、No)。このため、Stage2の処理を再び開始して、ページp3が読み出される。ページp3は正常なデータ(Data)であり(s12)、且つ前のページp2はエラーページ(Error)であり(B)、且つページp3はページEndではない(s15、No)。このため、データ破壊(故障)と判断される(s18)。
【0104】
なお、書き込みページ数Xを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断することができる場合は、書き込みページ数Xを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断してもよい。
【0105】
このように、差分ログ23Nのうち、連続する2ページの読み出し状態によって、不正電源断の発生かデータ破壊の発生かを区別して判断することができる。なお、本実施形態では、図5に示したように、差分ログ23Nを2つのブロック55A,55Bに並列書き込みして2重化している。このため、2重化された差分ログ23Nのうち、一方のデータを読み出せない場合であっても、他方のデータを読み出せる場合には、読み出せたデータを用いて管理テーブル21の復元を行う。
【0106】
図12は、2重化されたページの取り扱い例を説明するための図である。図12では、ch0(第1のブロック)に書き込まれた差分ログ23Nの読み出し状態(並列書き込みされた一方のページのデータ状態)と、ch1(第2のブロック)に書き込まれた差分ログ23Nの読み出し状態(並列書き込みされた他方のページのデータ状態)と、の組み合わせを示している。差分ログ23Nの読み出し状態は、データの書き込まれたデータページ(written)、データの読み出せないエラーページ(Error)、消去済みの消去ページ(Erased)の何れかである。
【0107】
例えば、ch0のページまたはch1のページの少なくとも一方がデータページ(Written)である場合、データページ(Written)であるとして取り扱う。また、ch0のページまたはch1のページの両方がデータページ(written)でない場合であって、かつch0のページまたはch1のページの少なくとも一方がエラーページ(Error)である場合、エラーページ(Error)であるとして取り扱う。そして、ch0のページまたはch1のページの両方がデータページ(Written)でない場合であって、かつch0のページまたはch1のページの両方がエラーページ(Error)でない場合、消去ページ(Erased)として取り扱う。換言すると、ch0のページおよびch1のページの両方が消去ページである場合に、消去ページとして取り扱う。このように、ch0のページまたはch1のページの少なくとも一方にデータがあれば、データがあるものとして取り扱う。
【0108】
なお、本実施形態では、ログコミット時に書き込まれた差分ログ23Nに基づいて、ログコミット時の不正電源断などを検出したが、差分ログ23N以外のログ情報を用いて不正電源断を検出してもよい。この場合、システム起動後最初の差分ログ23NがNANDメモリ10に記憶される前に、システムが動作中であることを示すActiveログをNANDメモリ10に記憶させる。その後、差分ログ23NをNANDメモリ10に記憶させる。さらに、正常なシステム停止時に、システムが停止することを示すStandbyログを差分ログ23Nに続いてNANDメモリ10に追記記憶させる。これにより、不正な電源断検出のためのログ記憶処理が実行される。そして、システム起動時、NANDメモリ10内のActiveログおよびStandbyログの記憶状態に基づき、前回正常なシステム停止が行われたか不正な電源断が行われたかを判断する。
【0109】
ここで、ActiveログおよびStandbyログの書き込み手順について説明する。図13は、ActiveログおよびStandbyログの書き込み手順を示す図である。図13の(a)では、正常な電源断が行われた場合の、次のシステム起動時のNANDログ(NANDメモリ10に保存されたログ)の状態を示しており、図13の(b)では、不正な電源断が発生した場合の次のシステム起動時のNANDログの状態を示している。
【0110】
図13の(a)に示すように、正常な電源断の場合は、NANDログとして、最初にActiveログが記憶され、つぎに差分ログが記憶され(差分ログは存在しない場合もある)、最後にStandbyログが記憶されている。このように、正常なシーケンスの場合は、Standby状態でのデータ更新はなくなる。また、正常な電源断は、ホストから停止要求を受けてから行われるため、Active状態での電源断もなくなる。復元制御部32は、電源オン後の初期化処理で、NANDメモリ10からNANDログを読み出し、その内容を前方から走査する。通常は、Activeログから始まり、差分ログ、Standbyログとなり、以降これらが繰り返され、最後はStandbyログで終わるはずである。復元制御部32は、最初にActiveログが記憶され、最後にStandbyログが記憶されている場合に正常な電源断が行われたと判断する。
【0111】
これに対し、図13の(b)に示すように、不正な電源断の場合は、Activeログのみが存在し、最後にStandbyログが記憶されていない。すなわち、Activeログを書くことによって、NANDメモリ10には書き込みを行ったが、ログのコミットが終了していない状態の不正な電源断を検出することができる。復元制御部32は、最後のログが、Standbyログでないこと(Activeログ、または差分ログ)を認識したら、不正な電源断があったと判定する。
【0112】
なお、本実施形態では、差分ログ23Nの多重化記憶として、差分ログ23Nを2重化記憶する場合について説明したが、差分ログ23Nを3重化以上で多重化して記憶してもよい。
【0113】
また、本実施形態では、2回目の最終ページが1回目の最終ページと同じデータである場合について説明したが、2回目の最終ページは、任意のデータページであってもよい。この場合も、復元制御部32は、2回目の最終ページに、所望のデータが書き込まれているか否かを判定する。そして、所望のデータが書き込まれていない場合には、2回目の最終ページがエラーページであるか、消去済みページであるかが判定され、この判定結果を用いて、不正な電源断やデータ破壊を検出する。
【0114】
また、本実施形態では、2回目の最終ページを並列書き込み処理によって多重化する場合について説明したが、2回目の最終ページは、並列書き込み以外の書き込みによって多重化してもよい。
【0115】
図14は、SSD100を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204と、を備えている。
【0116】
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(optical disk device)ユニット、カードスロット、及びSSD100等が収容されている。
【0117】
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0118】
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【0119】
図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
【0120】
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
【0121】
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
【0122】
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
【0123】
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
【0124】
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばDRAMから構成される。
【0125】
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
【0126】
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
【0127】
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
【0128】
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェース(I/F)を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0129】
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
【0130】
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0131】
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0132】
パーソナルコンピュータ1200は、SSD100に電源供給を行い、また、SSD100に停止要求(Standby要求)を発行する。仮にパーソナルコンピュータ1200からSSD100への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【0133】
このように実施形態によれば、差分ログ23Nを並列書き込み処理によって多重化して記憶しているので、短時間で差分ログ23Nを保存することが可能となる。また最終ページ52A,52Bと、この最終ページ52A,52Bと同じデータである最終ページ53A,53Bと、を、差分ログ23NとしてNANDメモリ10に書き込むので、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能となる。
【0134】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0135】
1…ホスト、10…NANDメモリ、10a〜10d…並列動作要素、11…NANDコントローラ、20…DRAM、21…管理テーブル、23D,23N…差分ログ、30…コントローラ、31…書き込み制御部、32…復元制御部、52A,52B,53A,53B…最終ページ、55A,55B…ブロック、100…SSD。
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性半導体記憶装置であるNAND型フラッシュメモリの大容量化が進行し、このNAND型フラッシュメモリを搭載したメモリシステムとしてのSSD(Solid State Drive)が注目されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2010−157139号公報
【特許文献2】特開2009−217391号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の一つの実施形態は、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第1の記憶部と、ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第2の記憶部と、を備える。また、メモリシステムは、前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うデータ転送制御部を備える。また、メモリシステムは、データ管理部を備える。前記データ管理部は、前記第2の記憶部に記憶された管理テーブルをシステム起動時に前記第1の記憶部に転送する。また、前記データ管理部は、前記管理テーブルを更新すべき事象が発生した際、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第1の記憶部に記憶させる。また、前記データ管理部は、所定の条件が成立したときに前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させるとともに前記第1の記憶部に記憶された差分ログの内容を前記第1の記憶部に記憶されている前記管理テーブルに反映する。また、メモリシステムは、前記第2の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第2の記憶部に正常に記憶されているか、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第2の記憶部に記憶させた後に前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部を備える。そして、前記データ管理部は、前記差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させる。また、前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行う。
【図面の簡単な説明】
【0006】
【図1】図1は、SSDの構成例を示すブロック図である。
【図2】図2は、スナップショットとログの生成形態を概念的に示す図である。
【図3】図3は、差分ログの並列書き込みタイミングを説明するための図である。
【図4】図4は、差分ログを並列で書き込まず、連続処理で2回書き込む場合の書き込みタイミングを説明するための図である。
【図5】図5は、差分ログの並列書き込み位置を説明するための図である。
【図6】図6は、差分ログのNANDメモリからの読み出し処理を説明するための図である。
【図7】図7は、NANDメモリに保存された差分ログのデータ状態を説明するための図である。
【図8】図8は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。
【図9】図9は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【図10】図10は、不正電源断とデータ破壊の分類処理手順を示す図である。
【図11】図11は、差分ログの読み出し状態の分類例を示す図である。
【図12】図12は、2重化されたページの取り扱い例を説明するための図である。
【図13】図13は、ActiveログおよびStandbyログの書き込み手順を示す図である。
【図14】図14は、SSDを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図15】図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0008】
(実施形態)
図1は、SSDの構成例を示すブロック図である。NAND型フラッシュメモリ(以下、NANDメモリと略す)10を用いた半導体記憶装置の一例であるSSD(Solid State Drive)100は、メモリシステムなどに適用される。本実施形態のSSD100は、不揮発に保存したい重要なデータ(管理データ)を書き込む際に、信頼性を確保するために管理データ(後述する差分ログ23N)の多重化(例えば2重化)記憶を行なう。このとき、SSD100では、管理データを並列で書き込むことによって書き込み時間の短時間化を図る。また、SSD100は、管理データを書き込んだ後、管理データの最後のページを再度、書き込んでおくことにより、書き込み処理中の不正な電源断などを認識できるようにしておく。例えば、SSD100では、書き込まれたデータの一部または全部を読み出せなかった場合に、NANDメモリ10内のデータ記憶状態に基づいて、データ書き込み中の不正な電源断と、データ書き込み後のデータ破壊の何れが発生したかを判断する。そして、SSD100は、復元可能なデータのみを復元する。
【0009】
SSD100は、ATAインタフェース(ATA I/F)などのメモリ接続インタフェースであるホストI/F2を介してパーソナルコンピュータあるいはCPUコアなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。
【0010】
SSD100は、揮発性半導体メモリとしてのDRAM20と、データ管理などを行うコントローラ30と、データの記憶処理を制御するとともにデータを記憶するデータ記憶部12と、を備えている。
【0011】
データ記憶部12は、不揮発性半導体メモリとしてのNANDメモリ10と、NANDメモリ10を制御するNANDコントローラ11と、を有している。
【0012】
NANDメモリ10は、例えば、4並列動作を行う4つの並列動作要素10a〜10dを有し、4つの並列動作要素10a〜10dは、4つのチャネルなどによってNANDコントローラ11に接続されている。
【0013】
各並列動作要素10a〜10dは、バンクインターリーブが可能な複数のバンク(例えば4バンク)によって構成されており、各バンクは、複数のNANDメモリチップ(例えば2メモリチップ)によって構成されている。各メモリチップは、例えば、それぞれ複数の物理ブロックを含むプレーン0、プレーン1の2つの領域(District)に分割されている。プレーン0およびプレーン1は、互いに独立した周辺回路(例えば、ロウデコーダ、カラムデコーダ、ページバッファ、データキャッシュ等)を備えており、倍速モードを使用することで、同時に消去/書き込み/読み出しを行うことが可能である。
【0014】
このように、NANDメモリ10の各NANDメモリチップは、複数のチャネルによる並列動作、複数のバンクによるバンクインターリーブ動作、複数のプレーンを用いた倍速モードによる並列動作が可能である。なお、各メモリチップは、4つのプレーンに分割された構成であってもよいし、あるいは、全く分割されていなくてもよい。本実施形態では、並列アクセスできる2つのブロックに対して、データの並列書き込みを行う場合について説明する。
【0015】
DRAM20は、ホスト1とNANDメモリ10との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。DRAM20の作業領域用メモリに記憶されるものとしては、管理テーブル21、ユーザデータ22、差分ログ23Dがある。
【0016】
管理テーブル21は、NANDメモリ10に記憶されている管理テーブル21が起動時などに展開されたマスターテーブル(スナップショット)である。管理テーブル21は、ホスト1から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【0017】
また、差分ログ23Dは、管理テーブル21の変更差分である。ユーザデータ22の書き込みや、管理テーブル21へのデータの読み書きを行う際には、DRAM20上に管理テーブル21や差分ログ23Dが展開される。
【0018】
管理テーブル21の差分である差分ログ23Dは、ユーザデータ22の書き込みや保存先ブロックの変更などがあった場合にDRAM20上にいったん保存されるが、一定量たまったところで、差分ログ23NとしてNANDメモリ10に書き込まれる。これをログのコミットという。換言すると、SSD100は、SSD100が動作している間、ログのコミットとして、所定のタイミングで、差分ログ23Dを管理テーブル21に反映するとともに、差分ログ23NとしてNANDメモリ10に保存する。また、SSD100は、SSD100が動作している間、所定のタイミングで管理テーブル21をNANDメモリ10に保存する。
【0019】
具体的には、DRAM20上では、差分ログ23Dとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、コミットの処理タイミング毎に、差分ログ23Dが差分ログ23NとしてNANDメモリ10に書き込まれる。NANDメモリ10では、差分ログ23Nが順番に時系列で並ぶよう記憶される。そして、管理テーブル21(スナップショット)のNANDメモリ10への保存が終了すると、管理テーブル21を保存する前にNANDメモリ10に書き込まれた差分ログ23Nは、復元処理で不要になる。
【0020】
本実施形態では、例えば、最新の差分ログ23Nと、1つ前に記憶した差分ログ23Nと、をNANDメモリ10に記憶しておく。そして、最新の差分ログ23NをNANDメモリ10に記憶させたことが確定した時点で、1つ前に記憶した差分ログ23Nを記憶していた記憶領域を、新たなデータ記憶領域として開放する。
【0021】
なお、DRAM20の代わりに、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)などを使用してもよい。
【0022】
NANDコントローラ11は、ホスト1とNANDメモリ10との間でDRAM20を介してデータ転送制御を行う。また、NANDコントローラ11は、NANDメモリ10内でのデータの消去、書き込み、読み出し、読み出しエラー判定、消去済み判定などを行う。本実施形態のNANDコントローラ11は、NANDメモリ10のデータの並列書き込みを行なう機能を有している。
【0023】
データ管理部であるコントローラ30は、DRAM20内のデータをNANDメモリ10に記憶させる機能や、NANDメモリ10内のデータをDRAM20上に復元する機能を有する。コントローラ30は、NANDメモリ10に記憶された管理テーブル21をシステム起動時にDRAM20に転送する。また、コントローラ30は、管理テーブル21を更新すべき事象が発生した際、DRAM20に記憶されている管理テーブル21の更新前後の差分情報を差分ログ23DとしてDRAM20に記憶させる。また、コントローラ30は、所定の条件が成立したときにDRAM20に記憶された差分ログ23NをNANDメモリ10に順次追記記憶させるとともにDRAM20に記憶された差分ログ23Dの内容をDRAM20に記憶されている管理テーブル21に反映する。
【0024】
また、本実施形態のコントローラ30は、差分ログ23Nを並列書き込み処理によって多重化してNANDメモリ10に記憶させた後、DRAM20に記憶される差分ログ23Dのうち、NANDメモリ10に最後に記憶されたページを再度、並列書き込み処理によって多重化してNANDメモリ10に記憶させる。また、コントローラ30は、SSD100内の各構成要素を制御する。コントローラ30は、書き込み制御部31と、復元制御部32と、を備えている。
【0025】
書き込み制御部31は、管理テーブル21に基づいてデータの読み書き制御を行う。書き込み制御部31は、例えば、DRAM20内のデータをNANDメモリ10内に保存するための書き込み制御を行う。
【0026】
復元制御部32は、NANDメモリ10に書き込まれた差分ログ23Nのデータ状態に基づいて、(1)前回正常なシステム停止が行われたか、(2)不正な電源断が行われたか、(3)データ破壊が発生しているかの状態判断を行う。復元制御部32は、前回正常なシステム停止が行われた場合に、NANDメモリ10内の差分ログ23NをDRAM20上に復元する。また、復元制御部32は、不正な電源断が行われたと判断した場合またはデータ破壊が発生したと判断した場合に、NANDメモリ10内で復元可能なデータのみを復元させる。
【0027】
不揮発にデータを保持するためには、データをどこにどのように保存しているかといった内容を持つ管理テーブル21自体も不揮発に保存しておく必要がある。この管理テーブル21は、起動時に、不揮発性のNANDメモリ10から揮発性のDRAM10に展開され、展開された管理テーブル21はデータの書き込みによって更新される。記憶容量の大容量化とともに、管理テーブル21も大きくなるので、書き込みデータに変更が発生するたびに管理テーブル21全体をNANDメモリ10に保存していては、NANDメモリ10の書き込み効率、NANDメモリ10の寿命、保存に伴う処理時間といった影響が発生してしまう。
【0028】
そのため、管理テーブル21は、ある時点での管理テーブル21全体のスナップショットと、スナップショットを保存した時点からの変更差分ログ(差分ログ23N)という形式で保存しておく。そして、通常は変更差分としての差分ログ23NだけをNANDメモリ10に記憶していく。本実施形態では、NANDメモリ10の書き込み効率が向上するよう、差分ログ23Nを並列書き込みによってNANDメモリ10に2重化記憶させる。
【0029】
ところで、動作中に不意の電源断が行なわれた場合(不正な電源断が発生した場合)であっても、記憶したデータを保持(復元)することが望まれる。例えば、DRAM20上に展開された管理テーブル21(マスターテーブル)は、電源が切れても、電源が切れる以前の状態に復元する必要があり、このためマスターテーブルを不揮発性のNANDメモリ10に保存する仕組みが必要となる。スナップショットは、NANDメモリ10上の不揮発性の管理テーブル21の全体を指し、DRAM20に展開されたマスターテーブルをそのままNANDメモリ10に保存することを、スナップショットをとるとも表現する。
【0030】
また、記憶したデータを復元する際には、管理テーブル21の整合性を取るために、正常な電源断シーケンスが行なわれたか、不正な電源断が行なわれたかを判断する必要がある。また、管理テーブル21にデータ破壊がある場合、データを適切に読み書きできないだけでなく、SSD100またはSSD100を搭載するシステムに2次的な故障を誘引する可能性がある。このため、管理テーブル21にデータ破壊が有る状態でSSD100を動作させることは回避する。
【0031】
例えば、メモリなどは、データのWrite/Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。そこで、管理テーブル21においてデータ破壊が発生した場合は、データ破壊を検出して通常動作しないようにする。特に、差分ログ23Nは時系列で保存されるので、途中のデータが不正なデータである場合や、差分ログ23Nに抜けがあると整合性が取れなくなる。このため、本実施形態では、システム起動処理で管理テーブル21の復元を行なう際(電源オン後の初期化処理時)に、不正な電源断の発生およびデータ破壊を検出することによってSSD100の信頼性を高める。
【0032】
NANDメモリ10は、データを書き込むためにはその前に消去を必要とする。また、NANDメモリ10では、消去単位と書き込み単位が異なる。NANDメモリ10は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位であり、かつ書き込み順序が連続するよう規定されている。
【0033】
SSD100に搭載されているNANDコントローラ11は、バンク単位やチャネル単位で並列にデータの書き込み、または書き込みと読み出しを行なうことができるインタフェースを有している。NANDコントローラ11は、並列にアクセスできるブロックへの書き込みを並列で行なうことで書き込み時間を短縮する。本実施形態では、これらのNANDメモリ10のデバイス特性(並列書き込み)およびNANDコントローラ11の仕組みを利用して差分ログ23Nの書き込み状態(不正な電源断の発生など)を判定する。
【0034】
図2は、スナップショットとログの生成形態を概念的に示す図である。図2では、データ更新時に、スナップショットとログがどのように更新されるかを示している。コントローラ(データ管理部)30がデータ更新する際に、マスターテーブル(DRAM上の管理テーブル)に加えた変更内容をDRAM20上の差分ログ23Dに蓄積する。管理テーブルの種類によっては、マスターテーブルを直接更新し、更新内容を差分ログ23Dに蓄積したり、マスターテーブルには直接変更を加えず、変更領域を差分ログ23D上に確保して、その領域に更新内容を記憶したりする。データの読み書き処理の際には、マスターテーブルの他に蓄積された差分ログ23Dも参照する。
【0035】
コントローラ30は、データの更新が安定したら、ログのコミットを行う。コミット処理では、差分ログ23Dの内容を必要に応じてマスターテーブルに反映させ、さらに差分ログ23Dの内容を差分ログ23NとしてNANDメモリ10に保存して不揮発化する。これにより、前回のコミットまでのデータが保証される。
【0036】
スナップショットをNANDメモリ10に保存するのは、正常な電源断シーケンスの際、ログの保存領域が不足した場合などとする。差分ログ23NまたはスナップショットをNANDメモリ10に書き終わった時点で、管理テーブルの不揮発化が完了する。
【0037】
図3は、差分ログの並列書き込みタイミングを説明するための図である。SSD100では、差分ログ23Nを2重化して書き込む先のブロックを、並列書き込み可能なブロックから採用して同時に書き込みを行なう。
【0038】
例えば、SSD100は、差分ログ23Nとして、最後のページ以外の第1のデータ51Aと、最後のページ(末尾のページ)である最終ページ52Aと、最終ページ52Aと同じデータである最終ページ53Aと、をNANDメモリ10に書き込む。同様に、SSD100は、差分ログ23Nとして、最後のページ以外の第1のデータ51Bと、最後のページである最終ページ52Bと、最終ページ52Bと同じデータである最終ページ53Bと、をNANDメモリ10に書き込む。SSD100では、第1のデータ51Aと、最終ページ52Aと、を領域50Aに書き込み、第1のデータ51Bと、最終ページ52Bと、を領域50Bに書き込む。このとき、SSD100では、領域50Aへの書き込みと、領域50Bへの書き込みと、をページ単位で同時に行う。
【0039】
NANDメモリ10に対して単純に同時にデータを書くと、書き込み中に不正な電源断が発生した場合にどこまで書いた状態であったかの判断が難しくなり、読めないページについて劣化などによるデータ破壊との区別が困難となる。そのため、本実施形態では、書き込み予定データ(差分ログ23N)の最後のページにあたる最終ページを、タイミングをずらして2回書き込むことにより、冗長化のための2重化と不正電源断判定のための2重化を行う。
【0040】
具体的には、領域50A内に最終ページ52Aを書き込んだ後、最終ページ53Aを書き込む。また、領域50B内に最終ページ52Bを書き込んだ後、最終ページ53Bを書き込む。換言すると、最後のページ以外は並列に書き込み、最後のページについては時間差で最終ページ52Aおよび最終ページ53Aに合計2回書き込むとともに、時間差で最終ページ52Bおよび最終ページ53Bに合計2回書き込む。SSD100では、例えば、最終ページ53Aの書き込みと、最終ページ53Bの書き込みと、を同時に行う。これにより、差分ログ23Nのうち最終ページに対応するデータは、4重化されることとなる。このような書き込みは、書き込み制御部31によって行なわれる。
【0041】
なお、以下の説明では、説明の便宜上、第1のデータ51Aの直後に書き込まれる最終ページ52Aや第2のデータ51Bの直後に書き込まれる最終ページ52Bを、1回目の最終ページという場合がある。また、最終ページ52Aの後に書き込まれる最終ページ53Aや最終ページ52Bの後に書き込まれる最終ページ53Bを、2回目の最終ページという場合がある。
【0042】
領域50A,50Bへの第1のデータ51A,51Bおよび最終ページ52A,52Bの書き込み時間がt1であり、1回目の最終ページを書き込んでから2回目の最終ページを書き終わるまでの時間がt2である場合、差分ログ23Nの書き込みに要する時間はt1+t2となる。
【0043】
図4は、差分ログを並列で書き込まず、連続処理で2回書き込む場合の書き込みタイミングを説明するための図である。DRAM20上の差分ログ23DをNANDメモリ10へ並列で書き込まず、連続処理で2回書き込む場合、SSD100では、差分ログ23Dを領域50Aに書き込む。その後、SSD100は、もう1度差分ログ23Dを領域50Bに書き込む。このように、差分ログ23Dを2回に渡ってNANDメモリ10に書き込む場合、差分ログ23Dの書き込みに要する時間は2×t1となる。換言すると、ログ保存の2重化のために連続処理で差分ログ23Dを2回書き込む場合、データサイズあたりの書き込み時間の倍の時間がかかることとなる。
【0044】
t2は、t1よりも短い時間なので、差分ログ23Nを並列書き込みによってNANDメモリ10に書き込むことにより、差分ログ23Dを連続処理で2回書き込む場合よりも短時間で差分ログ23Nを保存することが可能となる。このように、SSD100は、差分ログ23Nの並列書き込みにより、書き込みデータサイズが大きい場合であっても短時間で差分ログ23Nを保存することが可能となる。
【0045】
図5は、差分ログの並列書き込み位置を説明するための図である。SSD100は、NANDメモリ10内で並列書き込み可能なバンク、チップ、チャネルなどの単位から並列書き込み可能なブロックを2つ選択し、各ブロックに差分ログ23Nを書き込む。図5では、並列書き込み可能なブロックとして、ブロック55Aとブロック55Bが選択された場合を示している。
【0046】
SSD100は、DRAM20上の差分ログ23Dをページ単位でブロック55A,55Bに保存する。ブロック55Aには、第1のデータ51A、1回目の最終ページ52A、2回目の最終ページ53Aの順番で、ページ単位でデータの書き込みが行われる。同様に、ブロック55Bには、第2のデータ51B、1回目の最終ページ52B、2回目の最終ページ53Bの順番で、ページ単位でデータの書き込みが行われる。なお、2回目の最終ページ53A,53Bよりも後のページは、未書き込み(Erase)のページ(未書き込みページ56)のままである。
【0047】
つぎに、コミット時における差分ログ23NのNANDメモリ10への書き込み手順について説明する。
(ステップ1)書き込み制御部31は、コミット対象となるDRAM20上の差分ログ23Dのサイズを求める。
(ステップ2)書き込み制御部31は、差分ログ23Dのログサイズから、NANDメモリ10へのデータの書き込みページ数Xとして、2回目の最終ページを除いた差分ログ23Nの書き込みページ数を求める。
(ステップ3)書き込み制御部31は、NANDメモリ10に保存する差分ログ23Nのヘッダ部に、書き込みページ数Xを格納して、ログデータとしての差分ログ23Nを作成する。
(ステップ4)書き込み制御部31は、書き込み先のNANDメモリ10のブロックであるNANDブロックを未確保であれば確保する。確保するNANDブロックは並列書き込み可能なブロックとする。
(ステップ5)書き込み制御部31は、書き込み先のNANDブロックに対し未書き込みであれば、確保したNANDブロックをブロック単位で消去する。
(ステップ6)書き込み制御部31は、書き込み先のNANDブロックの書き込み先ページを確認する。
(ステップ7)書き込み制御部31は、ページ(X−1)までは並列に差分ログ23Nのデータを書き込む。
(ステップ8)書き込み制御部31は、ページ(X−1)までの書き込みから時間をずらしてページXへのデータをNANDブロックに書き込む。
【0048】
つぎに、2重化されて保存された差分ログ23Nの読み出し処理について説明する。図6は、差分ログのNANDメモリからの読み出し処理を説明するための図である。差分ログ23Nのデータは、ページ単位でNANDメモリ10に追記されていく。例えば、1回目のコミットT1として、ブロック55Aに第1のデータ51Aとしてのページp0、ページp1、ページp2がこの順番で書き込まれ、その後、最終ページとしてのp3,p3’が書き込まれる。このとき、ブロック55Bには、第1のデータ51Bとしてのページp0、ページp1、ページp2がこの順番で書き込まれ、その後、最終ページとしてのp3,p3’が書き込まれる。
【0049】
この後、次のコミットタイミングになると、2回目のコミットT2として、ブロック55Aに第1のデータ51Aとしてのページp10、ページp11、ページp12がこの順番で書き込まれ、その後、最終ページとしてのp13,p13’が書き込まれる。このとき、ブロック55Bには、第1のデータ51Bとしてのページp10、ページp11、ページp12がこの順番で書き込まれ、その後、最終ページとしてのp13,p13’が書き込まれる。
【0050】
ログのコミットは、管理テーブル21の整合性の取れる区切りのよいタイミングで行なわれ、SSD100が起動中は随時、差分ログ23Nが追記されていくことになる。このため、図6のように連続して書かれたブロック55A,55Bでは、どこまでが一区切りのコミットデータなのかを判別する必要となる。一度に書き込む差分ログ23N(ログデータ)の量は、目的に応じて固定サイズ、固定ページでもよいが、一般的にはどのような動作を行なうかによって管理テーブル21の変更差分が変わるので、可変サイズになる。そのため、差分ログ23Nのフォーマットのヘッダ領域に、ログコミットサイズまたは書き込みページ数、あるいはその両方を保持するものとする。これにより、先頭ページを読み出してヘッダ部に格納されたデータサイズまたは書き込みページ数を読み出せば、該当のコミットログの書き込みページ数を認識することが可能となる。
【0051】
差分ログ23Nは、追記されていくので、システム起動時に差分ログ23Nを読み出す際には、1度の書き込み単位のサイズ毎に差分ログ23Nのデータを読み出していく。例えば、一度に書き込む差分ログ23Nの量が10ページ分である場合、差分ログ23Nの読み出しは、10ページ分のデータ毎に行われる。そして、差分ログ23Nを読み出す際には、1回目の最終ページの次のページである2回目の最終ページまで読み出す。これにより、書き込み処理中の不正電源断を認識できるようにする。
【0052】
つぎに、NANDメモリに保存された差分ログのデータ状態について説明する。図7は、NANDメモリ10に保存された差分ログ23Nのデータ状態を説明するための図である。
【0053】
SSD100では、システム起動時に、差分ログ23Nを順次、読み出して、差分ログ23Nの変更内容をマスターテーブルである管理テーブル21に順次反映していくことで、パワーサイクルをまたいだ継続動作を実現する。差分ログ23Nの読み出し単位は、ページ単位で行なわれ、読み出しエラーの発生状態などに基づいて書き込み時の状況が判断される。
【0054】
図7は、差分ログ23Nが正常に書かれた状態を示している。すなわち、差分ログ23Nが正常に書かれた場合、ブロック55A,55Bにそれぞれ、読み出し可能なページ(ページp0,p1,p2,p3,p3’)が保存される。そして、2回目の最終ページであるページp3’の次のページ以降は、消去済みのページであり、この消去済みのページを読み出そうとすると、読み出しエラー(Read Error)が発生する。
【0055】
NANDメモリ10では、決められたブロック単位で消去を行う必要があるので、最初のページの書き込み前にブロックが消去されている必要がある。また、ページp0から順番に書き込みを行なう必要があり、ページp0を書いた後にページ100から続きを書く、というような使い方ができない。そのため、図7に示すように、例えば、ページp0からページp3までの4ページ分のログデータを書き込んだ場合、タイミングをずらして書いた最終ページp3’を含めた5ページ分のデータが書かれていることになる。そして、最終ページp3’以降のデータ未書き込みのページは消去済みの状態となっている。消去済みのページかどうかは、通常の読み出しと異なる方法で読み出しを行うことによって判定できる。ここでは、その判定処理を消去済み判定と呼ぶ。SSD100では、NANDコントローラ11が消去済み判定の機能を有しているとする。消去済み判定の機能については、特開2009−217391号公報に開示されている。なお、SSD100は、各ブロックの最終書き込みページを別途管理する機能を有していてもよく、この場合消去済み判定の機能は不要となる。
【0056】
ここで、NANDメモリ10による差分ログ23Nの記憶が記憶異常である場合の、差分ログ23Nのデータ状態(記憶状態)について説明する。差分ログ23Nの記憶異常状態は、差分ログ23NをNANDメモリ10に記憶させる際に不正電源断発生した場合、または差分ログ23NをNANDメモリ10に記憶させた後にNANDメモリ10でデータ破壊が発生した場合に発生する。図8は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。また、図9は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【0057】
図8に示すように、差分ログ23N(ページp1)の書き込み中に不正電源断が発生した場合、不正電源断によりデータ書き込みが正常に行なえなかったページp1はエラーページPxとなる。この場合、書き込み失敗のエラーページPxの次のページは未書き込みのため消去済みページPyとなる。
【0058】
なお、エラーページとなるページが、先頭のページとなる場合や末尾のページとなる場合もある。この場合であっても、ページ単位で追記していくので、書き込み失敗のエラーページの次のページは未書き込みのため消去済みページになるという状況は同じである。
【0059】
また、図9に示すように、差分ログ23Nの書き込み時にはそのコミットの書込みが正常終了したにも関わらずNANDメモリ10のデータ破壊が発生した場合、書き込みの最後のページ位置までデータが書かれているが途中のどこかのページで読み出しエラーが発生することになる。この場合、エラーページPxの次のページはデータが書かれている状態である。もちろん、末尾のページを正常に書いたにも関わらず末尾のページでデータ破壊による異常が発生することもありえる。
【0060】
そのため、本実施形態では、末尾のページである最終ページを2回書くことにより、最後のコミットログを反映してよいのか、起動時にエラーとすべきなのかを判別する。換言すると、復元制御部32は、末尾のページを2重化することにより、不正電源断による読み出しエラーであるのか、データ破壊による読み出しエラーであるのかを判別する。なお、末尾の2重化のうちどちらか一方がデータ破壊により失われていても、もう一方が正しく書かれている場合には、正しく書かれているページまでのコミットログを反映することが可能である。
【0061】
図10は、不正電源断とデータ破壊の分類処理手順を示す図である。図10では、読み出し状態のパターン分類処理手順を示している。ここでは、1コミットあたりの読み出しの処理について示しており、このフローの終了状態は、差分ログ23NのDRAM20への反映である。
【0062】
NANDコントローラ11は、1コミットあたりの差分ログ23Nを読み出し、その差分ログ23Nの変更内容を管理テーブル21へ反映する処理を繰り返す。このとき、復元制御部32は、差分ログ23Nの保存されているNANDブロックのページ末尾が消去済みページであるか否かに基づいて、差分ログ23Nの終端を判断する。
【0063】
復元制御部32は、SSD100を起動する際に、Stage1の処理として、読み出し対象となるNANDブロックのページ位置を確認する。そして、復元制御部32は、NANDコントローラ11を介して、NANDメモリ10内から差分ログ23Nの第1ページを読み出す(1page Read)。
【0064】
読み出したページが、消去済みページ(Erase)である場合(S1)、差分ログ23Nがそれ以前のコミットで終端となっているか、または差分ログ23が保存されていない状態である。この場合、復元制御部32は、差分ログ23Nには続きがないと判断する。そして、復元制御部32は、差分ログ23Nは正常区切りされてDATE END(正常な電源断)になっていると判断し(S2)、差分ログ23Nの管理テーブル21への反映処理を終了する。
【0065】
また、読み出したページが、エラーページ(Error)である場合(S3)、復元制御部32は、コミットログヘッダからコミットページサイズEを取得することができず、読み出し継続不能となる(S4)。このため、読み出し処理を終了する。
【0066】
また、読み出したページが正常なデータ(Data)である場合(S5)、復元制御部32は、コミットログヘッダからコミットページサイズEを取得する。これにより、差分ログ23NのページEndが分かる(S6)。この後、SSD100では、Stage2の処理が行われる。
【0067】
復元制御部32は、Stage2の処理として、読み出し対象となるNANDブロックのページ位置を確認する。そして、復元制御部32は、NANDコントローラ11を介して、NANDメモリ10内から差分ログ23Nの第2ページを読み出す(1page Read)。
【0068】
読み出したページに、エラーの疑いがある場合、NANDコントローラ11は、読み出したページの消去済み判定を行う。これにより、エラーの疑いがあるページが消去済みページ(Erase)であるか、エラーページ(Error)であるかが判定される。
【0069】
読み出したページが、消去済みページ(Erase)である場合(S7)、復元制御部32は、読み出したページの箇所で不正電源断が発生したと判断する(S8−1)。また、復元制御部32は、読み出したページのページ数Rが、コミットページサイズEと一致するか否かを判定する。
【0070】
そして、現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)、復元制御部32は、末尾2重化のうちの1つ目(1回目の最終ページ)が書かれたところまでで不正電源断が発生したと判断し、反映処理に移行する。具体的には、復元制御部32は、NANDメモリ10内の差分ログ23Nのうち、最終ページまで読み出すことのできた差分ログ23Nを管理テーブル21に反映する(S8−2)。
【0071】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合、復元制御部32は、差分ログ23の途中までNANDメモリ10に書かれた状態で不正電源断が発生したと判断し、ログの終端であると判断する。
【0072】
また、読み出したページが、消去済みページ(Erase)でなければ、読み出したページは、エラーページ(Error)である。読み出したページが、エラーページ(Error)である場合(s9)、復元制御部32は、前回の読み出しページ(LAST_PAGE)が読み出し成功か否かを判定する。換言すると、前のページがエラーページであるか否かが判定される(S10)。
【0073】
前回の読み出しページ(LAST_PAGE)がエラーページでない場合(S10、No)、復元制御部32は、2ページ目以降の読み込みを行う。この場合、復元制御部32は、続きを読む処理として、Stage2の処理(第3ページ以降の読み出し処理)を最初から実行する。一方、前回の読み出しページ(LAST_PAGE)がエラーページである場合(S10、Yes)、2ページ連続でエラーページとなっているので、復元制御部32は、データ破壊が発生していると判断し(S11)、故障状態に移行する。
【0074】
また、読み出したページが正常なデータ(Data)である場合(s12)、復元制御部32は、前回の読み出しページ(LAST_PAGE)が読み出し成功か否かを判定する。前回の読み出しページが読み出し成功の場合(前のページ=データページの場合)(A)、復元制御部32は、現在読み出ししたページのページ数RがコミットページサイズEと一致するか否かを判定する(S13)。
【0075】
現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)(S13、Yes)、復元制御部32は、ページの読み出しが、コミットログの一区切りまで到達したと判断する。そして、復元制御部32は、読み出したデータを管理テーブル21に反映する処理へ移行する(S14)。
【0076】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合(読み出ししたページがページEndでない場合)(S13、No)、復元制御部32は、コミットログに続きがあると判断する。そして、復元制御部32は、続きを読む処理として、Stage2の処理を最初から実行する。
【0077】
また、読み出したページが正常なデータ(Data)であって(S12)、且つ前回の読み出しページが読み出し不成功の場合(前のページ=エラーページの場合)(B)、復元制御部32は、現在読み出ししたページのページ数RがコミットページサイズEと一致するか否かを判定する(S15)。
【0078】
現在読み出ししたページ数RがコミットページサイズEと一致する場合(読み出ししたページがページEndである場合)(S15、Yes)、復元制御部32は、末尾2重化分のもう一方のデータ(1回目の最終ページ)(時差2重化分)で管理テーブル21を復元可能なので(S16)、復元制御部32は、1回目の最終ページを用いて、反映処理へ移行する(S17)。換言すると、差分ログ23Nを用いて管理テーブル21を復元する際に、2回目の最終ページを、1つ前のページにコピーする(1回目の最終ページの位置に2回目の最終ページ書き込む)ことによって、管理テーブル21を復元する。
【0079】
一方、現在読み出ししたページ数RがコミットページサイズEと一致しない場合(読み出ししたページがページEndでない場合)(S15、No)、復元制御部32は、差分ログ23Nの途中でエラー(故障)が発生していると判断する(S18)。この場合、復元制御部32は、データ破壊が発生していると判断し、故障状態に移行する。故障状態となった場合、SSD100は、差分ログ23NをDRAM20上に復元させない。
【0080】
このように、本実施形態では、読み出しエラーとなった場合の不正電源断とNANDメモリ10のデータ破壊の判別を、エラーページの次のページを読み出してエラー判定および消去済み判定することにより実現する。
【0081】
上述した図10の処理によって、不正電源断が発生した場合の差分ログ23Nの読み出し状態と、データ破壊が発生した場合の差分ログ23Nの読み出し状態と、が種々分類される。そして、分類された差分ログ23Nの読み出し状態毎に、管理テーブル21の復元、故障状態への遷移などが行われる。
【0082】
図11は、差分ログの読み出し状態の分類例を示す図である。図11では、データの書き込まれたページを「データ」(written)で示し、データの読み出せないエラーページを「エラー」(Error)で示し、消去済みのページを「消去」(Erased)で示している。また、データの読み出しを行っていないページを「未読」で示している。
【0083】
図11の(a)〜(c)は、2回目の最終ページを除いた差分ログ23Nのページ数が、差分ログ23Nのヘッダ部に格納されている書き込みページ数Xよりも少ない場合の読み出し状態(データ状態)を示している。また、図11の(d)〜(j)は、2回目の最終ページを除いた差分ログ23Nのページ数が、書き込みページ数Xと同数である場合の読み出し状態を示している。また、図11の(k)〜(m)は、先頭のページp0を読み出せず、書き込みページ数Xを差分ログ23Nのヘッダ部から読み出せなかった場合の読み出し状態を示している。
【0084】
図11の(a)は、1回目の最終ページp3よりも前のページであるページp2が消去済みページであり、且つ1回目の最終ページp3が消去済みページである場合を示している。この場合、ページp2にデータが書き込まれる前(ページp1にデータが書き込まれた後)に、不正電源断が発生したと判断される。
【0085】
図11の(b)は、1回目の最終ページp3よりも前のページであるページp2がエラーページであり、且つ1回目の最終ページp3が消去済みページである場合を示している。この場合、ページp2へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図11の(a)、(b)の場合、消去済みページまたはエラーページの次のページが消去済みページ(未書き込み)であるので、不正電源断が発生したと判断される。
【0086】
図11の(c)は、ページp2がエラーページであり、且つ1回目の最終ページp3がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、ページp2と1回目の最終ページp3でデータ破壊が発生したと判断される。
【0087】
図11の(d)は、1回目の最終ページp3が消去済みページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、1回目の最終ページp3にデータが書き込まれる前(ページp2にデータが書き込まれた後)に、不正電源断が発生したと判断される。
【0088】
図11の(e)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、1回目の最終ページp3へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図11の(d)、(e)の場合、消去済みページまたはエラーページの次のページが消去済みページであるので、不正電源断が発生したと判断される。
【0089】
図11の(f)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、1回目の最終ページp3と2回目の最終ページp3’でデータ破壊が発生したと判断される。
【0090】
図11の(g)は、1回目の最終ページp3までは、正常なデータページであり、且つ2回目の最終ページp3’が消去済みページである場合を示している。この場合、2回目の最終ページp3’にデータが書き込まれる前(1回目の最終ページp3にデータが書き込まれた後)に、不正電源断が発生したと判断される。図11の(h)は、全てのページが正常なデータページである場合を示している。
【0091】
図11の(i)は、1回目の最終ページp3がエラーページであり、且つ2回目の最終ページp3’が正常なデータページである場合を示している。この場合、1回目の最終ページp3でデータ破壊が発生したと判断される。この場合であっても、2回目の最終ページp3’が正常なデータページであるので、差分ログ23Dに対応するログデータは、全てNANDメモリ10上に保存されていることになる。
【0092】
図11の(j)は、1回目の最終ページp3よりも前のページであるページp2がエラーページであり、且つ1回目の最終ページp3が正常なデータページである場合を示している。この場合、差分ログ23Nの途中ページ(最終ページ以外のページ)であるページp2でデータ破壊が発生したと判断される。
【0093】
図11の(k)は、先頭ページであるページp1,p2が消去済みページである場合を示している。この場合、ページp1にデータ書き込まれる前に、不正電源断が発生したと判断される。
【0094】
図11の(l)は、先頭ページであるページp1がエラーページであり、且つその次のページであるページp2が消去済みページである場合を示している。この場合、ページp1でデータ破壊が発生したと判断される。
【0095】
図11の(m)は、先頭ページであるページp1がエラーページであり、且つその次のページであるページp2がエラーページである場合を示している。この場合、エラーページが2ページ連続しているので、ページp1とページp2でデータ破壊が発生したと判断される。
【0096】
図11の(a),(b),(d),(e),(k),(l)の場合、読み出せないページがあるので、復元制御部32は、1つ前に保存しておいた差分ログ23Nを用いて管理テーブル21の復元を行う。
【0097】
また、図11の(c),(f),(j),(m)の場合、データ破壊が発生しているので、管理テーブル21の復元は行われない。また、図11の(g),(h),(i)の場合、復元制御部32は、図11の(g),(h),(i)に示した差分ログ23Nを用いて管理テーブル21の復元を行う。例えば、図11の(g)の場合、1回目の最終ページp3’を用いて管理テーブル21の復元が行われ、図11の(i)の場合、2回目の最終ページp3’を用いて管理テーブル21の復元が行われる。
【0098】
例えば、図11の(b)に示した差分ログ23Nの場合、図10に示した処理手順に従うと、Stage1の処理でページp0が読み出される。ページp0は、正常なデータ(Data)であるので(s5)、Stage2の処理を開始して、ページp1が読み出される。
【0099】
ページp1は、正常なデータ(Data)であり(s12)、且つ前のページp0が正常なデータ(Data)であり(A)、且つページp1はページEndではない(s13、No)。このため、Stage2の処理を再び開始して、ページp2が読み出される。
【0100】
ページp2は、エラーページ(Error)であり(s9)、且つ前のページp1がエラーページ(Error)ではない(s10、No)。このため、Stage2の処理を再び開始して、ページp3が読み出される。ページp3は、消去済みページ(Erase)であるので(s7)、不正電源断であると判定される(s8−1)。なお、ページp3は、ページEndではないので、復元は行われない。
【0101】
また、図11の(j)に示した差分ログ23Nの場合、図10に示した処理手順に従うと、Stage1の処理でページp0が読み出される。ページp0は、正常なデータ(Data)であるので(s5)、Stage2の処理を開始して、ページp1が読み出される。
【0102】
ページp1は、正常なデータ(Data)であり(s12)、且つ前のページp0が正常なデータ(Data)であり(A)、且つページp1はページEndではない(s13、No)。このため、Stage2の処理を再び開始して、ページp2が読み出される。
【0103】
ページp2は、エラーページ(Error)であり(s9)、且つ前のページp1がエラーページ(Error)ではない(s10、No)。このため、Stage2の処理を再び開始して、ページp3が読み出される。ページp3は正常なデータ(Data)であり(s12)、且つ前のページp2はエラーページ(Error)であり(B)、且つページp3はページEndではない(s15、No)。このため、データ破壊(故障)と判断される(s18)。
【0104】
なお、書き込みページ数Xを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断することができる場合は、書き込みページ数Xを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断してもよい。
【0105】
このように、差分ログ23Nのうち、連続する2ページの読み出し状態によって、不正電源断の発生かデータ破壊の発生かを区別して判断することができる。なお、本実施形態では、図5に示したように、差分ログ23Nを2つのブロック55A,55Bに並列書き込みして2重化している。このため、2重化された差分ログ23Nのうち、一方のデータを読み出せない場合であっても、他方のデータを読み出せる場合には、読み出せたデータを用いて管理テーブル21の復元を行う。
【0106】
図12は、2重化されたページの取り扱い例を説明するための図である。図12では、ch0(第1のブロック)に書き込まれた差分ログ23Nの読み出し状態(並列書き込みされた一方のページのデータ状態)と、ch1(第2のブロック)に書き込まれた差分ログ23Nの読み出し状態(並列書き込みされた他方のページのデータ状態)と、の組み合わせを示している。差分ログ23Nの読み出し状態は、データの書き込まれたデータページ(written)、データの読み出せないエラーページ(Error)、消去済みの消去ページ(Erased)の何れかである。
【0107】
例えば、ch0のページまたはch1のページの少なくとも一方がデータページ(Written)である場合、データページ(Written)であるとして取り扱う。また、ch0のページまたはch1のページの両方がデータページ(written)でない場合であって、かつch0のページまたはch1のページの少なくとも一方がエラーページ(Error)である場合、エラーページ(Error)であるとして取り扱う。そして、ch0のページまたはch1のページの両方がデータページ(Written)でない場合であって、かつch0のページまたはch1のページの両方がエラーページ(Error)でない場合、消去ページ(Erased)として取り扱う。換言すると、ch0のページおよびch1のページの両方が消去ページである場合に、消去ページとして取り扱う。このように、ch0のページまたはch1のページの少なくとも一方にデータがあれば、データがあるものとして取り扱う。
【0108】
なお、本実施形態では、ログコミット時に書き込まれた差分ログ23Nに基づいて、ログコミット時の不正電源断などを検出したが、差分ログ23N以外のログ情報を用いて不正電源断を検出してもよい。この場合、システム起動後最初の差分ログ23NがNANDメモリ10に記憶される前に、システムが動作中であることを示すActiveログをNANDメモリ10に記憶させる。その後、差分ログ23NをNANDメモリ10に記憶させる。さらに、正常なシステム停止時に、システムが停止することを示すStandbyログを差分ログ23Nに続いてNANDメモリ10に追記記憶させる。これにより、不正な電源断検出のためのログ記憶処理が実行される。そして、システム起動時、NANDメモリ10内のActiveログおよびStandbyログの記憶状態に基づき、前回正常なシステム停止が行われたか不正な電源断が行われたかを判断する。
【0109】
ここで、ActiveログおよびStandbyログの書き込み手順について説明する。図13は、ActiveログおよびStandbyログの書き込み手順を示す図である。図13の(a)では、正常な電源断が行われた場合の、次のシステム起動時のNANDログ(NANDメモリ10に保存されたログ)の状態を示しており、図13の(b)では、不正な電源断が発生した場合の次のシステム起動時のNANDログの状態を示している。
【0110】
図13の(a)に示すように、正常な電源断の場合は、NANDログとして、最初にActiveログが記憶され、つぎに差分ログが記憶され(差分ログは存在しない場合もある)、最後にStandbyログが記憶されている。このように、正常なシーケンスの場合は、Standby状態でのデータ更新はなくなる。また、正常な電源断は、ホストから停止要求を受けてから行われるため、Active状態での電源断もなくなる。復元制御部32は、電源オン後の初期化処理で、NANDメモリ10からNANDログを読み出し、その内容を前方から走査する。通常は、Activeログから始まり、差分ログ、Standbyログとなり、以降これらが繰り返され、最後はStandbyログで終わるはずである。復元制御部32は、最初にActiveログが記憶され、最後にStandbyログが記憶されている場合に正常な電源断が行われたと判断する。
【0111】
これに対し、図13の(b)に示すように、不正な電源断の場合は、Activeログのみが存在し、最後にStandbyログが記憶されていない。すなわち、Activeログを書くことによって、NANDメモリ10には書き込みを行ったが、ログのコミットが終了していない状態の不正な電源断を検出することができる。復元制御部32は、最後のログが、Standbyログでないこと(Activeログ、または差分ログ)を認識したら、不正な電源断があったと判定する。
【0112】
なお、本実施形態では、差分ログ23Nの多重化記憶として、差分ログ23Nを2重化記憶する場合について説明したが、差分ログ23Nを3重化以上で多重化して記憶してもよい。
【0113】
また、本実施形態では、2回目の最終ページが1回目の最終ページと同じデータである場合について説明したが、2回目の最終ページは、任意のデータページであってもよい。この場合も、復元制御部32は、2回目の最終ページに、所望のデータが書き込まれているか否かを判定する。そして、所望のデータが書き込まれていない場合には、2回目の最終ページがエラーページであるか、消去済みページであるかが判定され、この判定結果を用いて、不正な電源断やデータ破壊を検出する。
【0114】
また、本実施形態では、2回目の最終ページを並列書き込み処理によって多重化する場合について説明したが、2回目の最終ページは、並列書き込み以外の書き込みによって多重化してもよい。
【0115】
図14は、SSD100を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204と、を備えている。
【0116】
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(optical disk device)ユニット、カードスロット、及びSSD100等が収容されている。
【0117】
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0118】
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【0119】
図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
【0120】
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
【0121】
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
【0122】
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
【0123】
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
【0124】
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばDRAMから構成される。
【0125】
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
【0126】
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
【0127】
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
【0128】
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェース(I/F)を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0129】
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
【0130】
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0131】
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0132】
パーソナルコンピュータ1200は、SSD100に電源供給を行い、また、SSD100に停止要求(Standby要求)を発行する。仮にパーソナルコンピュータ1200からSSD100への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【0133】
このように実施形態によれば、差分ログ23Nを並列書き込み処理によって多重化して記憶しているので、短時間で差分ログ23Nを保存することが可能となる。また最終ページ52A,52Bと、この最終ページ52A,52Bと同じデータである最終ページ53A,53Bと、を、差分ログ23NとしてNANDメモリ10に書き込むので、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能となる。
【0134】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0135】
1…ホスト、10…NANDメモリ、10a〜10d…並列動作要素、11…NANDコントローラ、20…DRAM、21…管理テーブル、23D,23N…差分ログ、30…コントローラ、31…書き込み制御部、32…復元制御部、52A,52B,53A,53B…最終ページ、55A,55B…ブロック、100…SSD。
【特許請求の範囲】
【請求項1】
揮発性の第1の記憶部と、
ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第2の記憶部と、
前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うデータ転送制御部と、
前記第2の記憶部に記憶された管理テーブルをシステム起動時に前記第1の記憶部に転送し、前記管理テーブルを更新すべき事象が発生した際、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第1の記憶部に記憶させ、所定の条件が成立したときに前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させるとともに前記第1の記憶部に記憶された差分ログの内容を前記第1の記憶部に記憶されている前記管理テーブルに反映するデータ管理部と、
前記第2の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第2の記憶部に正常に記憶されているか、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第2の記憶部に記憶させた後に前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部と、
を備え、
前記データ管理部は、
前記差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させ、
前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とするメモリシステム。
【請求項2】
前記データ管理部は、
書き込み単位毎に前記第2の記憶部に記憶される差分ログのうち最後に記憶された書き込み単位分のデータを、前記最終書き込み単位分データとして、前記第2の記憶部に記憶させることを特徴とする請求項1に記載のメモリシステム。
【請求項3】
前記復元制御部は、
前記差分ログおよび前記最終書き込み単位分データのうち、第1の書き込み単位内のデータおよび前記第1の書き込み単位に続く次の書き込み単位に書き込まれた第2の書き込み単位内のデータのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とする請求項1または2に記載のメモリシステム。
【請求項4】
前記復元制御部は、
前記第1の書き込み単位および前記第2の書き込み単位で記憶されている各データが、それぞれ消去済みデータ、エラーデータまたは正常なデータの何れであるかを判断することによって、前記状態判断を行うことを特徴とする請求項3に記載のメモリシステム。
【請求項5】
前記データ管理部は、
前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させる際に、前記差分ログを構成するデータの書き込み単位の数を、前記差分ログとともに前記第2の記憶部に記憶させ、
前記復元制御部は、
前記第2の記憶部で記憶されている前記書き込み単位の数と、前記差分ログのうち読み出しに成功した書き込み単位の数と、が一致しているか否かに基づいて、前記状態判断を行うことを特徴とする請求項1〜4のいずれか1つに記載のメモリシステム。
【請求項6】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が前記第2の記憶部に未書き込みである場合に、前記不正電源断が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項7】
前記データ管理部は、
前記最終書き込み単位分データが前記第2の記憶部に書き込まれていて、且つ前記差分ログのうちの何れかの書き込み単位がエラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項8】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が連続して2単位エラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項9】
前記書き込み単位は、ページであり、
前記差分ログは、複数のブロックに並列書き込みされることを特徴とする請求項1〜8のいずれか1つに記載のメモリシステム。
【請求項1】
揮発性の第1の記憶部と、
ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第2の記憶部と、
前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うデータ転送制御部と、
前記第2の記憶部に記憶された管理テーブルをシステム起動時に前記第1の記憶部に転送し、前記管理テーブルを更新すべき事象が発生した際、前記第1の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第1の記憶部に記憶させ、所定の条件が成立したときに前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させるとともに前記第1の記憶部に記憶された差分ログの内容を前記第1の記憶部に記憶されている前記管理テーブルに反映するデータ管理部と、
前記第2の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第2の記憶部に正常に記憶されているか、前記差分ログを前記第2の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第2の記憶部に記憶させた後に前記第2の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部と、
を備え、
前記データ管理部は、
前記差分ログを並列書き込み処理によって多重化して前記第2の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第2の記憶部に記憶させ、
前記復元制御部は、前記第2の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とするメモリシステム。
【請求項2】
前記データ管理部は、
書き込み単位毎に前記第2の記憶部に記憶される差分ログのうち最後に記憶された書き込み単位分のデータを、前記最終書き込み単位分データとして、前記第2の記憶部に記憶させることを特徴とする請求項1に記載のメモリシステム。
【請求項3】
前記復元制御部は、
前記差分ログおよび前記最終書き込み単位分データのうち、第1の書き込み単位内のデータおよび前記第1の書き込み単位に続く次の書き込み単位に書き込まれた第2の書き込み単位内のデータのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とする請求項1または2に記載のメモリシステム。
【請求項4】
前記復元制御部は、
前記第1の書き込み単位および前記第2の書き込み単位で記憶されている各データが、それぞれ消去済みデータ、エラーデータまたは正常なデータの何れであるかを判断することによって、前記状態判断を行うことを特徴とする請求項3に記載のメモリシステム。
【請求項5】
前記データ管理部は、
前記第1の記憶部に記憶された差分ログを前記第2の記憶部に順次追記記憶させる際に、前記差分ログを構成するデータの書き込み単位の数を、前記差分ログとともに前記第2の記憶部に記憶させ、
前記復元制御部は、
前記第2の記憶部で記憶されている前記書き込み単位の数と、前記差分ログのうち読み出しに成功した書き込み単位の数と、が一致しているか否かに基づいて、前記状態判断を行うことを特徴とする請求項1〜4のいずれか1つに記載のメモリシステム。
【請求項6】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が前記第2の記憶部に未書き込みである場合に、前記不正電源断が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項7】
前記データ管理部は、
前記最終書き込み単位分データが前記第2の記憶部に書き込まれていて、且つ前記差分ログのうちの何れかの書き込み単位がエラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項8】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が連続して2単位エラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項1〜5のいずれか1つに記載のメモリシステム。
【請求項9】
前記書き込み単位は、ページであり、
前記差分ログは、複数のブロックに並列書き込みされることを特徴とする請求項1〜8のいずれか1つに記載のメモリシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2012−128643(P2012−128643A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2010−279333(P2010−279333)
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]