説明

ストレージシステム及びデータ保証方法

【課題】ウェアレベリング処理を実行するフラッシュメモリ等の記憶デバイスを用いたストレージシステムで、高い信頼性と利便性を備えてデータを読み書きする。
【解決手段】ホスト4は、フラッシュメモリデバイス2にデータを読み書きする。512バイトの論理ブロック毎に、第1保護コードBCが論理ブロックの末尾に付加される。各論理ブロックの先頭には第2保護コードFCが付加される。第1保護コードBC及び第2保護コードFCは、論理アドレスを特定可能なデータを含むように構成される。フラッシュメモリデバイス2からデータを読み出す場合、第1保護コードBCから得られる論理アドレスと、第2保護コードから得られる論理アドレスとが比較される。両方の論理アドレスが一致する場合、正しいデータが読み出されたものと判定される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム及びデータ保証方法に関する。
【背景技術】
【0002】
ストレージシステムは、例えば、ストレージ装置と、ストレージ装置を制御するためのストレージコントローラとを備えている。ストレージ装置としては、ハードディスクドライブが使用されることが多い。企業等で長期間管理すべきデータは日々増大する。従って、ストレージ装置に搭載されるハードディスクドライブの数も増加する一方である。ハードディスクドライブは、半導体メモリのような記憶デバイスに比べて、外径寸法や重量が大きくなり、かつ、消費電力も多い。
【0003】
そこで、近年では、ハードディスクドライブに代えて、フラッシュメモリデバイスが注目されている。フラッシュメモリデバイスは、ハードディスクドライブよりも低消費電力であり、かつ、データの読出し速度も速い。さらに、フラッシュメモリデバイスは、機械的な可動部が無いため、ハードディスクドライブよりも小型に形成でき、故障も発生しにくい。
【0004】
フラッシュメモリデバイスにデータを書き込む場合、ブロックに記憶されているデータを一括消去し、データの消去されたブロックにデータを記憶させる。しかし、ブロック内のデータを消去するために必要な消去時間は、データを書き込む時間よりも長いため、書込み性能が低下する。また、ブロックを消去可能な回数には上限があり、上限値を超えて消去されたブロックは、信頼性が低下し、使用できなくなる。
【0005】
そこで、フラッシュメモリデバイスでは、受信データの論理アドレスをフラッシュメモリ内の物理アドレスに変換して管理し、空いているブロックに受信データを書込む。これにより、ブロック内のデータを消去せずに受信データを書き込むことができ、書込み時の応答性能を高めることができる。また、論理アドレスと物理アドレスとの対応付けを管理することにより、特定のブロックが集中して使用される(消去される)のを防止し、フラッシュメモリ内の各ブロックが均一に使用されるように制御でき、フラッシュメモリデバイスの寿命を延ばすことができる。
【0006】
上述のアドレス変換処理は、例えば、ウェアレベリング処理と呼ばれ、フラッシュメモリデバイス内で実行される。もしも、論理アドレスと物理アドレスとの対応関係を誤って管理した場合、所望のデータを読み出すことができず、ストレージシステムの信頼性が低下する。このため、書込先のページのアドレス情報を特定可能な保護コードを生成し、書込み対象データと保護コードとを合わせてフラッシュメモリに書き込むようにした従来技術が知られている(特許文献1)。その従来技術によれば、フラッシュメモリから読み出されるデータに付加されている保護コードから特定されるアドレス情報と、読出し対象データの論理アドレスとを比較することにより、フラッシュメモリから読み出されたデータが正しいか否かを判定することができる。
【特許文献1】特開2008−9635号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
従来技術は、ページ単位で保護コードを設定するため、ページ単位でしか読み書きすることができない。つまり、従来技術は、論理ブロックの単位でデータを読み書きすることができないため、使い勝手が悪い。さらに、従来技術は、小さなサイズのデータを読み書きする場合の応答性能が低下する。
【0008】
本発明は上述の問題点に鑑みてなされたもので、その目的は、ウェアレベリング処理が実行されるストレージ装置を用いて、高い信頼性と便利性を備えてデータを読み書きできるようにしたストレージシステム及びデータ保証方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【0009】
上記課題を解決すべく、本発明の一つの観点に従うストレージシステムは、受信したデータを記憶するストレージ装置と、そのストレージ装置を制御するストレージコントローラとを備えるストレージシステムであって、ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、ストレージ装置内に記憶されるデータのうち少なくともストレージ装置内の複数ページに跨って記憶されるデータについて、そのデータの前後両側に、そのデータの論理アドレスを特定するためのアドレスデータをそれぞれ予め対応付ける、アドレスデータ設定制御部と、複数ページに跨って記憶されているデータを読み出す場合に、データの前後両側にそれぞれ対応付けられているアドレスデータに基づいて、複数ページに跨って記憶されているデータが正しいか否かを判定する判定部と、を備える。
【0010】
第2観点では、第1観点において、ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、ストレージコントローラ内でデータを管理するために使用される第2論理ブロックのサイズとは異なっており、アドレスデータ設定制御部は、各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータを当該第1論理ブロックの前後両側のうち一方の側に設定することにより、第1論理ブロックを第2論理ブロックに変換するための第1設定部を備えている。
【0011】
第3観点では、第2観点において、各ページは、第1論理ブロックのサイズのn(n>2)倍のサイズに設定されており、アドレスデータ設定制御部は、各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第2アドレスデータを、当該第1論理ブロックの前後両側のうち他方の側に設定する第2設定部をさらに備えており、判定部は、第1アドレスデータと第2アドレスデータとが一致する場合に、複数ページに跨って記憶されている第2論理ブロックのデータが正しく読み出されたと判定し、第1アドレスデータと第2アドレスデータとが不一致の場合に、複数ページに跨って記憶されている第2論理ブロックのデータが誤って読み出されたと判定する。
【0012】
第4観点では、第2観点において、各ページは、第1論理ブロックのサイズと同一に設定されており、アドレスデータ設定制御部は、各ページのうち第1アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第1アドレスデータを第2アドレスデータとして所定ページの先頭にコピーさせる第2設定部をさらに備えており、判定部は、第1アドレスデータと第2アドレスデータとが一致する場合に、複数ページに跨って記憶されている第2論理ブロックのデータが正しく読み出されたと判定し、第1アドレスデータと第2アドレスデータとが不一致の場合に、複数ページに跨って記憶されている第2論理ブロックのデータが誤って読み出されたと判定する。
【0013】
第5観点では、第2観点において、各ページは、第1論理ブロックのサイズのn(n>2)倍のサイズに設定されており、判定部は、複数ページに跨って記憶されている第2論理ブロックのデータを読み出す場合に、第2論理ブロックのデータが有する第1アドレスデータと、第2論理ブロックのデータの直前に位置する第2論理ブロックのデータが有する他の第1アドレスデータとを比較することにより、複数ページに跨って記憶されている第2論理ブロックのデータが正しく読み出されたか否かを判定する。
【0014】
第6観点では、第5観点において、判定部は、複数ページに跨って記憶されている第2論理ブロックのデータに含まれている第1アドレスデータの値と、他の第1アドレスデータの値とが連続している場合に、第2論理ブロックのデータが正しく読み出されたと判定する。
【0015】
第7観点では、第2観点において、第1設定部は、第1アドレスデータに加えて、第1論理ブロックのデータを検査するための検査用データを設定する。
【0016】
第8観点では、第1観点において、ストレージ装置は、フラッシュメモリデバイスを備えて構成される。
【0017】
第9観点では、第1観点において、アドレスデータ設定制御部は、ストレージコントローラ内に設けられている。
【0018】
第10観点では、第1観点において、アドレスデータ設定制御部は、ストレージコントローラ及びストレージ装置の両方に分散して設けられている。
【0019】
第11観点では、第4観点において、第2設定部及び判定部は、ストレージ装置内に設けられている。
【0020】
第12観点では、第5観点において、判定部は、ストレージ装置内に設けられる。
【0021】
第13観点では、第1観点において、ストレージ装置は、コントローラと、そのコントローラにより制御される記憶チップとを備えており、コントローラは、ホストコンピュータから受信したデータの論理アドレスと、記憶チップのページアドレス及びポインタとの対応関係を管理している。
【0022】
第14観点では、第1観点において、ストレージ装置は、フラッシュメモリデバイスとして構成されており、ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、ストレージコントローラ内でデータを管理するために使用される第2論理ブロックのサイズとは異なっており、アドレスデータ設定制御部は、(1)各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータ及び当該第1論理ブロックのデータを検査するための検査用データを当該第1論理ブロックの前後両側のうち一方の側に設定することにより、第1論理ブロックを第2論理ブロックに変換するための第1設定部と、(2)各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第2アドレスデータを、当該第1論理ブロックの前後両側のうち他方の側に設定する第2設定部とを備えており、第2設定部は、(2A)第1論理ブロックの論理アドレスを第2アドレスデータとして、第1論理ブロックの他方の側に設定させるか、あるいは、(2B)各ページのうち第1アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第1アドレスデータを第2アドレスデータとして所定ページの先頭にコピーさせるか、あるいは、(2C)複数ページに跨って記憶されている第2論理ブロックの直前に位置する他の第2論理ブロックに設定されている第1アドレスデータに所定値を加えたアドレスデータを第2アドレスデータとして使用させるようになっている。
【0023】
本発明の他の側面に係るデータ保証方法は、ストレージ装置から読み出されるデータが正しいデータであることを保証するためのデータ保証方法において、ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、ストレージ装置に入力されるデータを管理するための第2論理ブロックのサイズとは異なっており、ストレージ装置への書込みが要求された場合には、各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータを、当該第1論理ブロックの後側に設定することにより、第1論理ブロックを第2論理ブロックに変換するステップと、複数ページに跨って記憶されている第2論理ブロックのデータを読み出す場合に、第2論理ブロックのデータが有する第1アドレスデータと、第2論理ブロックのデータの直前に位置する第2論理ブロックのデータが有する他の第1アドレスデータとを比較することにより、複数ページに跨って記憶されている第2論理ブロックのデータが正しく読み出されたか否かを判定するステップと、をそれぞれ実行する。
【0024】
本発明の構成要素は、その全部または一部をコンピュータプログラムとして構成できる場合がある。このコンピュータプログラムは、記録媒体に固定して譲渡等することができるほかに、インターネット等の通信ネットワークを介して伝送することもできる。また、本発明の観点は、明示されている組合せ以外にも適宜組み合わせて可能であり、そのような組合せも本発明の範囲に含まれる。
【発明を実施するための最良の形態】
【0025】
以下、図面に基づき、本発明の実施の形態を説明する。図1は、本実施形態の全体概念を示す説明図である。より詳細な構成例は、後述の実施例で明らかにされる。図1に示す本実施形態のストレージシステムは、例えば、「アドレスデータ設定制御部」としての保護コード設定制御部1と、「ストレージ装置」としてのフラッシュメモリデバイス2と、「判定部」としてのデータ保証部3とを備える。
【0026】
保護コード設定制御部1は、ホストコンピュータ(以下、ホスト)4から受信したデータについて、論理ブロック毎に所定の保護コードを設定するものである。保護コード設定制御部1は、少なくとも第1保護コード設定部1Aを備える、保護コード設定制御部1は、場合によっては、第2保護コード設定部1Bを備えることもできる。後述の実施例では、複数の保護コード設定部1A,1Bを備える場合と、第1保護コード設定部1Aのみを備える場合とを、それぞれ説明する。
【0027】
第1保護コード設定部1Aは、ホストから受信した論理ブロックBLK毎に、第1保護コードBCを設定する。論理ブロックBLKのサイズは、512バイトである。ホスト4及びフラッシュメモリデバイス2は、それぞれ512バイトの論理ブロックBLKによって、データを管理する。第1保護コードBCは、例えば、アドレス情報(LA)と水平冗長検査(LRC::Longitudinal Redundancy check)とを備える。アドレス情報(LA)は、論理ブロックに記憶されるデータの論理アドレスから算出される情報である。LRCは、論理ブロックに記憶されるデータのエラーを検出するための情報である。
【0028】
第1保護コードのサイズは、例えば、8バイトである。第1保護コードBCは、論理ブロックBLKの後側に付加される。これにより、512バイトの論理ブロックBLKは、520バイトの拡張論理ブロックELKとなる。論理ブロックBLKは「第1論理ブロック」に該当し、拡張論理ブロックELKは「第2論理ブロック」に該当する。
【0029】
第2保護コード設定部1Bは、拡張論理ブロックELKの前側に、8バイトの第2保護コードFCを付加する。これにより、拡張論理ブロックELKは、528バイトの第2拡張論理ブロックSELKとなる。つまり、512バイトの論理ブロックBLKの前後に8バイトずつの保護コードFC,BCを付加することにより、528バイトの第2拡張論理ブロックSELKが生成される。
【0030】
フラッシュメモリデバイス2は、例えば、NAND型フラッシュメモリまたはNOR型フラッシュメモリとして構成される。フラッシュメモリデバイス2は、例えば、ページe10,e11,e12,e13を備えている。ページサイズは、512バイト、または、512バイトのn倍のサイズに設定される。一方、フラッシュメモリデバイス2に書き込まれるデータのサイズは、520バイト(ELKの場合)または528バイト(SELKの場合)のいずれかである。従って、同一ブロックのデータが、それぞれ別々のページに記憶される可能性がある。
【0031】
なお、図1では、説明の便宜上、同一のフラッシュメモリデバイス2に、それぞれサイズの異なる複数の拡張論理ブロックELK,SELKのデータが同時に記憶されるかのように示している。しかし、実際には、一つのフラッシュメモリデバイス2には、拡張論理ブロックELKまたは第2拡張論理ブロックSELKのいずれか一方のデータのみが記憶される。
【0032】
図1中の左側に示す第2拡張論理ブロックSELKの場合、前半部分のデータ及び第2保護コードFCはページe10に記憶され、後半部分のデータ及び第1保護コードBCは他のページe11に記憶される。ページe10とe11とは連続している。前半部分のデータと後半部分のデータとは、ページ境界PBで隣接する複数のページe10,e11に跨って記憶される。図1中の右側に示す拡張論理ブロックELKの場合、前半部分のデータはページe12に記憶され、後半部分のデータはページe12に隣接する別のページe13に記憶される。この場合も、前半部分のデータと後半部分のデータとは、ページ境界PBで隣接する複数のページe12,e13に跨って記憶される。
【0033】
フラッシュメモリデバイス2は、ウェアレベリング2Aを適宜実行する。ウェアレベリングとは、フラッシュメモリチップの消去回数(書込み回数)を均一化させるための処理である。ウェアレベリング2Aは、消去回数を均一化すべく、フラッシュメモリ内のあるページに書き込まれたデータを別のページに退避させる。
【0034】
従って、例えば、ページe11のデータが他のページe110(不図示)に退避されたり、ページe12のデータが別のページe120(不図示)に退避される。フラッシュメモリデバイス2のコントローラ(図4のフラッシュメモリコントローラ210参照)は、データの論理アドレスと、そのデータが実際に格納されている物理アドレスとの対応関係を管理する。従って、フラッシュメモリデバイス2は、指定された論理アドレスのデータを、所定のページから読み出して転送することができる。
【0035】
データ保証部は、フラッシュメモリデバイス2から正しくデータが読み出されたか否かを判断する。第2拡張論理ブロックSELKの場合、データ保証部3は、第1保護コードBCから抽出される論理アドレスと第2保護コードFCから得られる論理アドレスとを比較し、両方の論理アドレスが一致するか否かを判定する。両方の論理アドレスが一致する場合、データ保証部3は、正しいデータが読み出されたと判定する。つまり、フラッシュメモリデバイス2から読み出されたデータは、データ保証部3によって、正しいデータであると保証される。正しいデータであると保証されたデータは、保護コード除去部1Cにより保護コードBC,FCがそれぞれ取り除かれて、ホスト4に送信される。
【0036】
拡張論理ブロックELKの場合、データ保証部3は、リード対象データDnに設定されている第1保護コードBC(Dn)と、リード対象データDnの直前のデータDn−1に設定されている第1保護コードBC(Dn−1)とを比較する。
【0037】
図1中では省略されているが、ページe12とe13とに跨って記憶されているデータをリード対象データDnとすると、そのデータDnの直前には、別のデータDn−1が記憶されている。データDnとデータDn−1とは、論理アドレスが連続している。そこで、データ保証部3は、リード対象データDnの第1保護コードBC(Dn)から抽出される論理アドレスと、リード対象データDnの直前に位置するデータDn−1に設定されている第1保護コードBC(Dn−1)から抽出される論理アドレスとが、連続しているか否かを判定する。両方の論理アドレスが連続している場合、つまり、BC(Dn−1)の論理アドレスよりもBC(Dn)の論理アドレスの方が1つだけ大きい場合、データ保証部3は、フラッシュメモリから正しいデータが読み出されたと判定する。
【0038】
フラッシュメモリデバイス2内でのアドレス管理にエラーが生じた場合、上述の方法でデータ保証部3は、そのエラーを検出することができる。なお、データ保証部3は、第1保護コードBCに含まれるLRCを利用して、データのビット化けを検出できる。
【0039】
本実施形態では、フラッシュメモリから読み出される論理ブロックBLKのデータについて、その論理ブロックBLKの前後にそれぞれ位置する保護コードに基づいて、そのデータが正しいか否かを判定することができる。従って、本実施例では、ウェアレベリングが実行されるフラッシュメモリデバイス2を用いた場合でも、正しいデータのみを転送することができ、信頼性を高めることができる。
【0040】
本実施形態では、フラッシュメモリデバイス2に書き込まれるデータについて、論理ブロックBLK毎に保護コードを付加する。従って、論理ブロックBLK単位でデータを読み書きすることができ、使い勝手が向上する。以下、本実施形態を詳細に説明する。
【実施例1】
【0041】
図2は、本実施例によるストレージシステムの全体構成を示す説明図である。このストレージシステムは、例えば、少なくとも一つのストレージコントローラ10と、少なくとも一つの記憶デバイス搭載部20と、少なくとも一つの保守端末30と、少なくとも一つのホスト40とを備えている。
【0042】
ホスト40は図1中のホスト4に、フラッシュメモリデバイス(以下、SSD)21は図1中のフラッシュメモリデバイス2にそれぞれ対応する。第1保護コード設定部1A及び第2保護コード設定部1Bは、ストレージコントローラ10によって実現される。
【0043】
ホスト40とストレージコントローラ10とは通信経路CN10を介して相互通信可能に接続されており、ストレージコントローラ10と記憶デバイス搭載部20とは通信経路CN20を介して相互通信可能に接続されている。各通信経路CN10,CN20は、例えば、IP(Internet Protocol)を利用するIP_SANや、FCP(Fibre Channel Protocol)を利用するFC_SANのように構成される。
【0044】
保守端末30は、例えば、LAN(Local Area Network)のような通信ネットワークCN30を介して、ストレージコントローラ10内の各CHA11及び各DKA12にそれぞれ接続されている。保守端末30は、ストレージコントローラ10内の各種状態に関する情報を収集して、端末画面に表示させることができる。また、保守端末30は、ストレージコントローラ10に各種指示を与えて、設定変更等を行うことができる。
【0045】
ホスト40は、例えば、サーバコンピュータやワークステーション、メインフレームコンピュータのように構成される。ホスト40は、ストレージコントローラ10を介して、記憶デバイス搭載部20に記憶されたデータを利用する。
【0046】
ストレージコントローラ10は、ホスト40と記憶デバイス搭載部20に搭載されている各記憶デバイス21,22,23との間のデータ授受を制御する。ストレージコントローラ10は、例えば、複数のチャネルアダプタ11と、複数のディスクアダプタ12と、複数のキャッシュメモリ13と、複数の相互接続用スイッチ14とを備えている。以下、チャネルアダプタをCHA、ディスクアダプタをDKAと呼ぶ。ストレージコントローラ10は、各回路11,12,13,14をそれぞれ複数ずつ備えることにより、冗長性を確保し、信頼性を高めている。
【0047】
CHA11は、ホスト40とのデータ通信を制御する電子回路である。DKA12は、記憶デバイス21,22,23とのデータ通信を制御する電子回路である。キャッシュメモリ13は、CHA11とDKA12との間でデータを受け渡すために使用される。また、キャッシュメモリ13には、例えば、どのような記憶デバイスがどこに搭載されているかを示す情報、どの論理ボリュームがどのホスト40に使用されているかを示す情報、その他の管理用情報や制御情報が記憶されている。
【0048】
相互接続用スイッチ(図中、SW)14は、各CHA11と各DKA12と各キャッシュメモリ13とをそれぞれ相互に接続するための装置である。例えば、ライトコマンドを処理する場合、CHA11は、ホスト40から受信したライトデータを、スイッチ14を介して、キャッシュメモリ13に転送する。DKA12は、スイッチ14を介して、キャッシュメモリ13からライトデータを読込み、記憶デバイス21〜23のいずれかに書き込む。逆に、リードコマンドを処理する場合、DKA12は、記憶デバイス21〜23のいずれかから読み出したデータを、スイッチ14を介して、キャッシュメモリ13に転送する。CHA11は、スイッチ14を介して、キャッシュメモリ13からデータを読出し、ホスト40に送信する。
【0049】
例えば、第1保護コードは、CHA11によって論理ブロックBLKの後側に付加され、第2保護コードはDKA12によって論理ブロックBLKの前側に付加される。なお、各保護コードBC,FCを生成して論理ブロックBLKに付加するための専用回路を、ストレージコントローラ10内に設ける構成でもよい。
【0050】
記憶デバイス搭載部20は、複数種類の記憶デバイス21,22,23をそれぞれ複数ずつ備えることができる。例えば、第1記憶デバイス21は、SSDである。第2記憶デバイス22は、SAS(Serial Attached SCSI)ディスクである。第3記憶デバイス23は、ATA(AT Attachment)ディスクである。本発明は、ウェアレベリングの行われる記憶デバイス21に関するものであるため、以下、SSD21に着目して説明する。記憶デバイス搭載部20は、SSD21のみを搭載する構成でもよい。なお、書換可能であり、かつ、ウェアレベリングが実行される記憶デバイスであれば、SSD以外の他の記憶デバイスを用いる場合にも本発明を適用することができる。
【0051】
図2に示すように、複数のSSD21をグループ化してRAIDグループ25を構成することができる。RAIDグループ25の記憶領域を用いて、一つまたは複数の論理ボリュームを生成することができる。その論理ボリュームは、CHA11の有する通信ポート等に対応付けられて、ホスト40に提供される。ホスト40は、論理ボリュームに対して、論理アドレスを指定してデータの読み書きを要求する。
【0052】
図3は、SSD21内で実行されるウェアレベリングの様子を示す説明図である。ウェアレベリングは、例えば、アイドル時等を利用して実行される。図3(1)には、SSD21内で使用されるアドレス管理テーブルT10の構成例が示されている。この管理テーブルT10は、論理ボリューム内の論理アドレスと、その論理アドレスのデータが実際に記憶されている物理アドレスとを対応付けて管理する。管理テーブルT10は、図4に示すフラッシュメモリコントローラ210が備えている。
【0053】
管理テーブルT10は、例えば、論理アドレスを管理する欄C10と、その論理アドレスのデータのうち先頭データの位置を管理する欄C11と、その論理アドレスのデータのうち末尾データの位置を管理する欄C12とを備える。先頭データの位置を管理する欄C11は、先頭データを含むページのアドレスを特定する欄C11Aと、そのページ内の場所を指し示すポインタを特定する欄C11Bとを備える。同様に、論理アドレスの末尾データの位置を管理する欄C12も、末尾データを含むページのアドレスを特定する欄C12Aと、そのページ内の場所を指し示すポインタを特定する欄C12Bとを備える。
【0054】
図3(2)に示すように、論理アドレスLBA10のデータは、SSD21のチップ211内において、ページe10の先頭ポインタps10から同一ページe10の末尾ポインタpe10までの領域に記憶されている。チップ211は、512バイトのブロックを複数備えている。各ページは、図3に示す例では、それぞれ4個ずつのブロックから構成されている。従って、図示の例では、ページサイズは、2048バイトである。
【0055】
図3(3)に示すように、フラッシュメモリコントローラ210は、消去回数(書込み回数)を均一化させるために、LBA10のデータを最初の記憶場所から別の記憶場所に移動させる。図3に示す例では、LBA10のデータは、ページe3からページe8に移される。この物理的記憶場所の変更は、管理テーブルT10に記録される。
【0056】
図4は、ホスト40からSSD21までの経路上において使用されるブロックの構成を模式的に示す説明図である。ホスト40とCHA11とは、512バイトの論理ブロックBLKを用いてデータを送受信する。ライトデータは、一つまたは複数の論理ブロックBLKに格納されて、ホスト40からCHA11に送信される。
【0057】
CHA11は、受信したライトデータをキャッシュメモリ13に転送する。ライトデータをキャッシュメモリ13に格納する際に、各論理ブロックBLKの末尾には、第1保護コードBCがそれぞれ付加される。キャッシュメモリ13上で各論理ブロックBLKに第1保護コードBCを付加する構成でもよいし、CHA11とキャッシュメモリ13との間に、第1保護コードBCを論理ブロックBLKに付加するための専用回路を設ける構成でもよい。
【0058】
第1保護コードBCには、複数の情報が含まれている。一つは、論理ブロックBLKの論理アドレスに基づいて生成されるアドレスデータ(LA)である。他の一つは、論理ブロックBLKのデータにエラーが生じているか否かを検査するための検査用データ(LRC)である。第1保護コードBCのサイズは、例えば8バイトである。512バイトの論理ブロックBLKに8バイトの第1保護コードBCが付加されることにより、520バイトの拡張論理ブロックELKが生成される。
【0059】
DKA12は、キャッシュメモリ13から拡張論理ブロックELKのデータを受信すると、各拡張論理ブロックELKの先頭に第2保護コードFCをそれぞれ付加する。第2保護コードFCは、8バイトの論理アドレスから構成される。即ち、拡張論理ブロックELKに含まれる論理ブロックBLKの論理アドレスが、第2保護コードFCの内容として使用される。520バイトの拡張論理ブロックELKに8バイトの第2保護コードFCが付加されることにより、528バイトの第2拡張論理ブロックSELKが生成される。つまり、第2拡張論理ブロックSELKは、512バイトの論理ブロックBLKの前後に、8バイトずつの保護コードFC,BCをそれぞれ付加することで生成される。
【0060】
SSD21は、フラッシュメモリコントローラ210と、フラッシュメモリコントローラ210により制御されるフラッシュメモリチップ211とを備える。データは、フラッシュメモリチップ211に記憶される。フラッシュメモリチップ211は、複数のページを備えている。各ページは、それぞれ1つ以上のブロックから構成される。ブロックサイズは512バイトである。
【0061】
フラッシュメモリコントローラ210は、一つまたは複数の第2拡張論理ブロックSELKから構成されるデータを、DKA12から受信する。フラッシュメモリコントローラ210は、第2拡張論理ブロックSELKをフラッシュメモリチップ211のページに記憶させる。このように、ホスト40から受信されたライトデータは、論理ブロックBLK毎に保護コードBC,FCがそれぞれ付加されて、フラッシュメモリチップ211の1つ以上のページに書き込まれる。
【0062】
ホスト40がリードコマンドを発行すると、CHA11は、そのリードコマンドを受信し、DKA12に通知する。DKA12は、論理アドレスを指定して、フラッシュメモリコントローラ210にデータの読出しを要求する。フラッシュメモリコントローラ210は、管理テーブルT10を用いて、DKA12から要求されたデータをフラッシュメモリチップ211内のページから読み出す。
【0063】
DKA12は、保護コードBC,FCの付加されたデータを受信すると、第1保護コードBCから抽出される論理アドレスと第2保護コードFCの示す論理アドレスとが一致するか否かを判定する。両方の論理アドレスが一致する場合、DKA12は、データから第2保護コードFCを取り除いて、キャッシュメモリ13に転送する。CHA11は、キャッシュメモリ13からデータを読込み、そのデータから第1保護コードBCを除去して、ホスト40に送信する。あるいは、DKA12は、データから各保護コードBC,FCをそれぞれ取り除いて、キャッシュメモリ13に転送することもできる。
【0064】
図5は、各ブロックBLK,ELK,SELKの構成を示す説明図である。上述の通り、ホスト40は、512バイトの論理ブロックBLK単位で、ライトデータをストレージコントローラ10に送信する(図5(a))。
【0065】
図5(b)に示すように、ストレージコントローラ10は、512バイトの論理ブロックBLKの末尾に、8バイトの第1保護コードBCを付加する。第1保護コードBCは、その論理ブロックBLKの論理アドレスに基づいて生成されるアドレス情報と、その論理ブロックBLKのデータから算出される検査用データとが含まれている。論理ブロックBLKに第1保護コードBCが付加されることによって、520バイトの拡張論理ブロックELKが生成される。
【0066】
図5(c)に示すように、DKA12は、520バイトの拡張論理ブロックELKの先頭に、8バイトの第2保護コードFCを付加する。これにより、528バイトの第2拡張論理ブロックSELKが生成される。第2保護コードFCは、拡張論理ブロックELKに含まれる論理ブロックBLKの論理アドレスから構成される。
【0067】
図6を参照してライトコマンドの処理方法を説明する。なお、フローチャート中では、便宜上、保護コードをコードと、論理ブロックをブロックと、キャッシュメモリをキャッシュと、フラッシュメモリをFMと、それぞれ略記する。
【0068】
ホスト40がライトコマンドを発行すると(S10)、ストレージコントローラ10は、ホスト40から受信したライトデータについて、各論理ブロックBLK毎に、それぞれ第1保護コードBCを付加し、拡張論理ブロックELKに変換する(S11)。
【0069】
ストレージコントローラ10は、拡張論理ブロックELK単位のデータに変換されたライトデータを、キャッシュメモリ13に格納し(S12)、書込み完了をホスト40に通知する(S13)。ホスト40は、その通知を受領することにより、ライト処理の完了を確認する(S14)。
【0070】
キャッシュメモリ13にライトデータを格納した時点で、ライトコマンドの処理完了をホスト40に報告することにより、ホスト40から見た場合のライト性能を向上させることができる。このような方法を非同期処理と呼ぶ。これに対し、ライトデータをSSD21に実際に書き込んだ時点で、ホスト40にライト処理完了を通知する方法を同期処理と呼ぶ。いずれの方法を採用してもよい。
【0071】
ストレージコントローラ10は、適当なタイミングを見計らって、デステージ処理を実行する。デステージ処理とは、キャッシュメモリ13のみ格納されているデータを、記憶デバイス(本実施例ではSSD21である)に書き込む処理である。デステージされたデータは、SSD21によってバックアップされているので、キャッシュメモリ13から消去しても構わない。
【0072】
デステージ処理が開始されると、DKA12は、キャッシュメモリ13からライトデータを読み出す(S15)。ライトデータは、一つ以上の拡張論理ブロックELKから構成される。DKA12は、拡張論理ブロックELKの先頭に第2保護コードFCを付加して、第2拡張論理ブロックSELKのライトデータに変換する(S16,S17)。ライトデータ中の各拡張論理ブロックELKに第2保護コードFCをそれぞれ付加した場合(S17:YES)、DKA12は、リトライカウンタRCをリセットし(S18)、FM(つまりSSD21)にライトデータを書き込む(S19)。
【0073】
FMコントローラ210は、DKA12からライトデータを受信すると(S20)、FMチップ211のページにライトデータを書込み、管理テーブルT10を更新させる(S22)。FMコントローラ210は、DKA12に書込み完了を報告する。さらに、FMコントローラ210は、図3でも述べたように、例えば、アイドル時等の所定のタイミングを見計らって、ウェアレベリングを実行する(S30)。
【0074】
DKA12は、全ライトデータの書込みが完了したか否かを判定する(S23)。即ち、DKA12は、デステージ処理が完了したか否かを判定する(S23)。ライトデータを全てSSD21に書き込んだ場合(S23:YES)、本処理は完了する。
【0075】
FM(SSD21)への書込みが失敗した場合(S23:NO)、DKA12は、リトライカウンタRCを1つ増加させ(S24)、所定の閾値ThRCを超えたか否かを判定する(S25)。リトライカウンタRCの値が所定の閾値ThRCを超えるまで(S25:NO)、DKA12はFMへのライトデータ書込みに挑戦する(S19)。リトライカウンタRCの値が所定の閾値ThRCを上回ると(S25:YES)、DKA12は、所定のエラー訂正処理を実行する(S26)。エラー訂正処理では、例えば、SSD21へアクセスするための経路を主経路から交代経路(副経路)に切り替える等の処理が行われる。
【0076】
図7は、ストレージコントローラ10がSSD21にデータを書き込む様子を示す説明図である。上述の通り、ストレージコントローラ10は、論理ブロックBLKの前後に保護コードFC,BCをそれぞれ付加して、528バイトの第2拡張論理ブロックSELKを生成する。
【0077】
FMコントローラ210は、DKA12からSELK単位のライトデータを受信すると、そのライトデータをFMチップ211内のページに書き込む。FMコントローラ210は、ライトデータの論理アドレスとFMチップ211内の物理アドレスとの対応関係を、管理テーブルT10に登録する。
【0078】
図7に示す例では、データD0を含む論理ブロックSELKは、ページe0のポインタps0からポインタpe0までの範囲に記憶される。第2拡張論理ブロックSELKは528バイトなので、ページ内の2つのブロックが使用される。
【0079】
同様に、データD1を含む論理ブロックSELKは、ページe0のポインタps1からページe1のポインタpe1までの範囲に記憶される。なお、ページe0とページe1とは隣接している。また、各ブロックSELKは連続して書き込まれているため、ポインタpe0とポインタpe1とは、同一場所を指し示している。データD2を含む論理ブロックSELKは、ページe1のポインタps2からページe1のポインタpe2までの範囲に記憶される。
【0080】
図8は、リードコマンドの処理方法を説明する。ホスト40がリードコマンドを発行すると(S40)、ストレージコントローラ10のCHA11は、要求されたデータ(リードデータ)がキャッシュメモリ13上に存在するか否かを判定する(S41)。要求されたデータがキャッシュメモリ13に記憶されている場合(S41:YES)、CHA11は、そのデータをキャッシュメモリ13から読み出してホスト40に送信する(S42)。ホスト40は、CHA11からデータを受信する(S43)。
【0081】
ホスト40から要求されたデータがキャッシュメモリ13上に存在しない場合(S41:NO)、ストレージコントローラ10は、SSD21からデータを読み出す。まず、DKA12は、リトライカウンタRCをリセットし(S44)、ホスト40の要求するデータをSSD21から読み出す(S45)。
【0082】
FMコントローラ210は、DKA12からの指示に従って、FMチップ211内のページからデータを読み出す(S46)。FMコントローラ210は、DKA12から指示された論理アドレスに基づいて管理テーブルT10を参照することにより、要求された論理アドレスのデータがFMチップ211のどのページのどこに記憶されているかを確認する。そして、FMコントローラ210は、FMチップ211から読み出したデータを、DKA12に送信する(S47)。
【0083】
DKA12は、SSD21からのデータの読出しが全て完了したか否かを判定する(S49)。完了していない場合(S49:NO)、つまり、SSD21からのデータ読出しに失敗した場合(S49:NO)、DKA12は、リトライカウンタRCの値を1つ増加させる(S50)。DKA12は、リトライカウンタRCの値が所定の閾値ThRCを超えるまで(S51:NO)、SSD21からのデータ読出しを試みる(S45)。リトライカウンタRCの値が所定の閾値ThRCを超えた場合(S51:YES)、DKA12は、例えば、交代経路への切替等のエラー訂正処理を実行する(S52)。
【0084】
SSD21からのデータ読出しに成功すると(S51:YES)、DKA12は、読み出したデータ中の各第2拡張論理ブロックSELKについて、第1保護コードBCと第2保護コードFCとをそれぞれ抽出する(S53)。DKA12は、第1保護コードBCに含まれるアドレス情報から論理アドレスを検出する(S54)。
【0085】
DKA12は、第1保護コードBCから得られる論理アドレス(図中、BCアドレスと表記)と、第2保護コードFCから得られる論理アドレス(図中、FCアドレスと表記)とが一致するか否かを判定する(S55)。
【0086】
両方の論理アドレスが一致する場合(S55:YES)、DKA12は、第1保護コードBCに含まれる検査用データ(LRC)に基づいて、データにエラーが生じているか否かを判定する(S56)。データにエラーが生じていない場合(S56:YES)、DKA12は、SSD21から読み出したデータに含まれる第2保護コードFCを除去し(S58)、キャッシュメモリ13に転送する(S59)。CHA11は、第1保護コードBCが除去されたデータを、ホスト40に送信する(S60)。
【0087】
一方、第1保護コードBCから得られる論理アドレスと第2保護コードFCから得られる論理アドレスとが不一致の場合もある(S55:NO)。例えば、SSD21内で実行されるウェアレベリングにより、論理アドレスと物理アドレスとの対応関係が正しく管理されなくなった場合等である。
【0088】
両方の論理アドレスが不一致の場合(S55:NO)、DKA12は、所定のエラー訂正処理を実行する(S57)。例えば、読出し対象の論理ボリュームがRAID1やRAID5等のような冗長性を備えている場合、DKA12は、コレクションコピー等を行うことにより、ホスト40から要求されたデータを復元する(S57)。
【0089】
第1保護コードBCに含まれる検査用データによって、論理ブロック内のビットエラーが検出された場合(S56:NO)、DKA12は、検査用データに基づいてビットエラーを修復する(S57)。検査用データだけではエラーを訂正できない場合、コレクションコピー等が行われる。
【0090】
図9,図10に基づいてリード処理の様子を説明する。図9は、SSD21から正常にデータを読み出すことができた場合を、図10は、SSD21から誤ったデータが読み出された場合を、それぞれ示す説明図である。
【0091】
データD1は、その前半部分D1aがページe0に記憶され、その後半部分D1bがページe1に記憶されているものとする。同一のページに記憶されているデータは、SSD21内で一緒に取り扱われる。しかし、データD1のように、複数のページe0,e1に跨って記憶された場合、SSD21内のアドレス管理エラーによって、誤ったデータが読み出される可能性がある。
【0092】
そこで、本実施例では、論理ブロックBLKの末尾に論理アドレスを特定可能な第1保護コードBCを付加すると共に、論理ブロックBLKの先頭にも論理アドレスを特定可能な第2保護コードFCを付加する。
【0093】
これにより、DKA12は、第1保護コードBCから得られる論理アドレスと第2保護コードFCから得られる保護コードとが一致する場合に、正しいデータがSSD21から読み出されたと判断することができる。
【0094】
なお、第1保護コードBCから得られる論理アドレスと第2保護コードFCから得られる論理アドレスとを比較する処理は、全ての論理ブロックについて実行することもできるし、あるいは、複数のページに跨って記憶された論理ブロックについてのみ実行することもできる。複数ページに跨って記憶された論理ブロックであることを、DKA12が知ることのできる場合は、可能である。
【0095】
図9,図10では、複数ページに跨る論理ブロックについてのみ各保護コードBC,FCの比較を行うかのように示している。他の論理ブロックについては、第1保護コードBC内の検査用データに基づく検査のみを行うかのように示している。しかし、それは説明のための例示であって、各論理ブロックのそれぞれについて、各保護コードBC,FCの比較と検査用データの検査とを行うことができる。
【0096】
図10に示すように、SSD21内で論理アドレスと物理アドレスとの対応関係の管理にエラーが生じる場合が考えられる。例えば、管理テーブルT10では、ページe1のデータがページe2に移されたことになっているが、実際にはそうなっておらず、ページe1のデータは相変わらずページe1に記憶されている場合が考えられる。
【0097】
この場合において、DKA12が論理アドレスLBA1のデータをFMコントローラ210に要求すると、FMコントローラ210は、ページe0に記憶されているデータD1aと、ページe2に記憶されているデータとを読み出して、DKA12に転送する。しかし、論理アドレスLBA1の後半部分D1bは、ページe2に存在せず、ページe0に存在する。従って、DKA12に転送されたデータのうち、ページe2から読み出されたデータ(D1bに対応するデータ)は誤っている。DKA12は、各保護コードFC,BCからそれぞれ得られる論理アドレスを比較することにより、期待通りのデータが読み出されたか否かを判定できる。
【0098】
このように構成される本実施例では、論理ブロックの前後に、論理アドレスを特定可能な保護コードFC,BCを付加する。従って、本実施例では、各保護コードから得られる論理アドレスを比較することにより、正しいデータが読み出されたか否かを容易に判定することができ、信頼性を高めることができる。
【0099】
本実施例では、各論理ブロックにそれぞれ保護コードFC,BCを付加するため、論理ブロック単位でデータを読み出す場合でも、その論理ブロックの論理アドレスが正しいか否かを判別できる。従って、論理ブロック単位でデータを読み書きすることができ、使い勝手が向上する。
【実施例2】
【0100】
図11〜図14に基づいて第2実施例を説明する。本実施例を含む以下の各実施例は、上述した第1実施例の変形例に相当する。従って、本実施例では、第1実施例との相違を中心に説明する。本実施例では、ページサイズが論理ブロックBLKのサイズと同一の512バイトに設定されている場合の方法を説明する。なお、本実施例のフローチャートは、実施例3と共に後述する。
【0101】
図11は、ストレージコントローラ10で使用されるデータ構成とSSD21で使用されるデータ構成との関係を示す説明図である。図11の下側に示すように、本実施例では、一つページは一つのブロックから構成されており、512バイトのページサイズを有している。
【0102】
SSD21に入力されるブロックサイズは520バイトであり、SSD21内のページサイズは512バイトである。従って、拡張論理ブロックELK64個分のデータ(=520×64=33280)は、65ページ分のデータ(=512×65=33280)に等しい。つまり、拡張論理ブロックELK64個毎に、拡張論理ブロックELK間のブロック境界とページ間のページ境界とが一致する。換言すれば、512バイトと520バイトの最小公倍数に対応して、拡張論理ブロックELKの境界とページ境界とが一致する。拡張論理ブロック境界とページ境界が一致する境界を、本実施例では共通境界CBと呼ぶ。本実施例では、共通境界CBの直前に位置する論理ブロックの保護コードBCを、共通境界CBの直後に位置する論理ブロックの先頭に付加する。
【0103】
図12は、共通境界CB直前の論理ブロックの末尾に付加されている第1保護コードBCをコピーして、共通境界CB直後の論理ブロックの先頭に付加する様子を示す説明図である。
【0104】
図12(a)に示すように、512バイトと520バイトの最小公倍数に対応して、拡張論理ブロックの境界とページ境界とは、共通境界CBで一致する。図12(b)に示すように、共通境界CBの直後に位置する512バイトのデータD1は、一つのページ内に収容される。つまり、共通境界CBの直後のページには、データのみが記憶されており、そのデータの正否を判断するためのデータは記憶されていない。従って、SSD21内部でアドレス管理エラーが発生した場合に、D1のデータが読み出されても、そのデータD1が正しいか否かを判定することができない。
【0105】
そこで、本実施例では、図12(c)に示すように、共通境界CBの直前に記憶されている第1保護コードBCを、共通境界CBの直後のページの先頭にコピーさせる。換言すれば、共通境界CBの直後に記憶される論理ブロックについてのみ、その先頭に前の論理ブロックの第1保護コードBCを付加する。このコピー処理は、FMコントローラ210により実行される。
【0106】
このコピー処理により、図13の下側に示すように、共通境界CBの直後のページe2には、前の論理ブロックD0の第1保護コードBC(D0)とデータD1の前半部分D1aとが記憶される。更にその次のページe3には、データD1の後半部分D1bと第1保護コードBCと別のデータD2とがそれぞれ記憶される。
【0107】
DKA12がデータD1の読出しをSSD21に指示した場合、FMコントローラ210は、ページe2から、前の論理ブロックD0の第1保護コードBC(D0)とデータD1aとを読み出し、さらに、ページe3から、データD1b及び第1保護コードBC(D1)を読み出す。FMコントローラ210は、論理ブロックの先頭に付加された第1保護コードBC(D0)から得られる論理アドレスと、論理ブロックの末尾に付加された第1保護コードBC(D1)から得られる論理アドレスとを比較する。
【0108】
即ち、FMコントローラ210は、各保護コードBC(D0),BC(D1)から得られる論理アドレスが正常に連続しているか否かを判定する。データD0とデータD1とは連続したデータのため、データD1が正常に読み出された場合、保護コードBC(D0)の論理アドレスと保護コードBC(D1)の論理アドレスとは連続している。両方の論理アドレスが連続している場合、FMコントローラ210は、FMチップ211から正しいデータを読み出せたと判断し、DKA12にデータを転送する。
【0109】
図14は、SSD21内でアドレス管理エラーが発生した場合を示す。図14の例では、管理テーブルT10では、ページe2のデータがページe5に移動されたことになっているが、実際にはページe2のデータは移動していない。
【0110】
FMコントローラ210は、ページe5とページe3とから、それぞれデータを読出し、論理アドレスが連続しているか否かを検査する。この場合、ページe5にデータD1aは移動していないため、第1保護コードBC(D1)に連続する論理アドレスを、ページe5のデータから得られない。従って、FMコントローラ210は、読出しに失敗したと判定し、DKA12にエラーを通知する。
【0111】
このように構成される本実施例も第1実施例と同様の効果を奏する。さらに、本実施例では、ページサイズと論理ブロックBLKのサイズとを同一とし、共通境界CB直後に位置する論理ブロックの先頭に、前の論理ブロックの第1保護コードBCを付加する。従って、本実施例では、8バイトの第2保護コードFCが不要であり、かつ、特定の論理ブロックについてのみ複数の第1保護コードBCを付加するため、第1実施例に比べて、FMチップ211の記憶領域を有効に利用できる。また、本実施例では、FMコントローラ210がデータの信頼性を検証するため、DKA12の負担を増大させることなく、ストレージシステムの信頼性及び使い勝手を向上できる。
【実施例3】
【0112】
図15〜図20に基づいて第3実施例を説明する。本実施例では、各ページが複数ブロック分のサイズを有しており、かつ、読出し対象データの直前のデータに付加されている第1保護コードBCを利用して、読出し対象データの正否を判定する。
【0113】
図15は、ライトデータをSSD21に格納する様子を示す説明図である。本実施例でも、前記各実施例と同様に、各論理ブロックBLKの末尾に第1保護コードBCをそれぞれ付加する。本実施例では、第1保護コードBCの付加されたデータをそのままFMチップ211に記憶させる。
【0114】
図16は、SSD21からデータを正常に読み出す場合を示す説明図である。例えば、DKA12がデータD1の読出しを指示すると、FMコントローラ210は、ページe0からデータD1の前半部分D1aと、データD1の直前のデータD0に付加されている第1保護コードBC(D0)とをそれぞれ読み出す。さらに、FMコントローラ210は、ページe1からデータD1の後半部分D1bと、データD1に付加された第1保護コードBC(D1)とをそれぞれ読み出す。
【0115】
FMコントローラ210は、読出し対象データD1に付加されている第1保護コードBC(D1)から得られる論理アドレスと、読出し対象データD1の直前に位置するデータD0に付加されている第1保護データBC(D0)から得られる論理アドレスとを比較し、両方の論理アドレスが正常に連続しているか否かを判定する。ここで、正常に連続するとは、前の論理アドレスよりも後ろの論理アドレスの方が所定数だけ増加していることを意味する。
【0116】
図17は、SSD21内でアドレス管理エラーが発生した場合を示す。例えば、管理テーブルT10では、ページe0のデータがページe7に移動されたことになっているが、実際にはデータは移動していないとする。
【0117】
DKA12からデータD1の読出しを指示されると、FMコントローラ210は、ページe7とページe1とからそれぞれデータを読み出す。しかし、実際にはデータは移動していないため、ページe7から読み出されるデータには、データD1の前半部分D1aのデータも、データD0の第1保護コードBC(D0)もいずれも含まれていない。従って、FMコントローラ210は、比較対象の論理アドレスが正しく連続していないと判定し、DKA12にエラーを通知する。
【0118】
次に、図18〜図20に基づいて、本実施例及び第2実施例に係るフローチャートを説明する。即ち、第2実施例と第3実施例とは同時に実施することができる。図18は、初期設定処理を示すフローチャートである。
【0119】
ストレージコントローラ10のDKA12は、リトライカウンタRCをリセットし(S70)、FMコントローラ210に起動を要求する(S71)。FMコントローラ210は、起動要求を受信すると起動処理を開始する(S72)。FMコントローラ210は、起動処理を終了すると、DKA12に通知する(S73)。DKA12は、FMコントローラ210が正常に起動したか否かを判定する(S74)。
【0120】
FMコントローラ210が正常に起動した場合(S74:YES)、DKA12は、FMコントローラ210にアドレス演算用のパラメータを転送する(S75)。FMコントローラ210は、DKA12から受信したアドレス演算用のパラメータを、FMコントローラ内部のメモリまたはFMチップ211に記憶させる(S76)。アドレス演算用のパラメータとは、第1保護コードBCに含まれるアドレス情報(LA)から、論理アドレスを算出するために使用されるパラメータである。
【0121】
FMコントローラ210が正常に起動しない場合(S74:NO)、DKA12は、リトライカウンタRCの値を1つ増加させ(S77)、リトライカウンタRCの値が所定の閾値ThRCを超えたか否かを判定する(S78)。カウンタRCの値が閾値ThRCを超えるまで(S78:NO)、DKA12はFMコントローラに起動を要求する(S71)。カウンタRCの値が閾値ThRCを超えた場合(S78:YES)、DKA12は、エラー訂正処理を行う(S79)。DKA12は、例えば、SSD21から読み出せなかったデータを、コレクションコピー等によって復元する。
【0122】
図19はライトコマンドを処理するフローチャートである。FMコントローラ210は、DKA12からデータの書込みを指示されると、ページサイズが512バイトよりも大きいか否かを判定する(S90)。つまり、FMコントローラ210は、ページサイズが512バイトに設定されているか(第2実施例)、それとも512バイトの複数倍に設定されているか(第3実施例)を判別する(S90)。
【0123】
ページサイズが512バイトよりも大きい場合(S90:YES)、FMコントローラ210は、DKA12から受信したデータを、そのままFMチップ211内のページに書き込む(S91)。
【0124】
ページサイズが512バイト以下の場合(S90:NO)、FMコントローラ210は、ページ境界とブロック境界とが一致するか否かを判定する(S92)。つまり、FMコントローラ210は、論理ブロックの末尾がページ境界に一致するか否かを判定する。
【0125】
ページ境界とブロック境界とが一致する場合(S92:YES)、FMコントローラ210は、その拡張論理ブロックに付加されている第1保護コードBCを抽出し(S93)、次の拡張論理ブロックの先頭に付加する(S94)。即ち、FMコントローラ210は、共通境界CBの直後のページの先頭に、前のページの末尾に記憶されている第1保護コードBCをコピーする(S94)。
【0126】
そして、FMコントローラ210は、共通境界CBの直前に位置するページに、データと第1保護コードBCとを書き込む(S95)。一方、対象の拡張論理ブロックELKの末尾がページ境界に一致しない場合(S92:NO)、FMコントローラ210は、S95に移行し、対象の拡張論理ブロックELKのデータをページに書き込む(S95)。
【0127】
最後に、FMコントローラ210は、書込み処理が完了したか否かを判定し(S96)、書込み処理が完了するまで(S96:NO)、S90〜S95のステップを繰り返して実行する。
【0128】
図20は、リードコマンドを処理するフローチャートである。FMコントローラ210は、DKA12からデータの読出しを要求されると、読出し対象のデータを有する論理ブロックが複数ページに跨っているか否かを判定する(S100)。
【0129】
読出し対象の論理ブロックが複数ページに跨っていない場合(S100:NO)、FMコントローラ210は、読出し対象の論理ブロックのデータをFMチップ211から読み出す(S101)。
【0130】
読出し対象の論理ブロックが複数ページに跨っている場合(S100:YES)、FMコントローラ210は、その読出し対象の論理ブロックが跨っている各ページを読み出す(S102)。FMコントローラ210は、読出し対象の論理ブロックに付加されている第1保護コードBCを抽出し、その第1保護コードBCに基づいて、読出し対象の論理ブロックの論理アドレスAnを算出する(S103)。さらに、FMコントローラ210は、読出し対象の論理ブロックの直前に位置する論理ブロックに付加されている第1保護コードBCを検出し、その論理アドレスAn−1を算出する(S104)。
【0131】
続いて、FMコントローラ210は、読出し対象の論理ブロックの論理アドレスAnと、直前の論理ブロックの論理アドレスAn−1とが、正常に連続しているか否かを判定する(S105)。両方の論理アドレスAn,An−1が正常に連続していない場合(S105:NO)、FMコントローラ210は、DKA12にエラーを通知する(S106)。このエラー通知を受けて、DKA12は、例えば、コレクションコピー等を実行し、所望のデータを取得する。
【0132】
FMコントローラ210は、DKA12から要求されたデータの読出しが全て完了したか否かを判定する(S107)。要求された全データがFMチップ211から読み出されるまで(S107:NO)、S100以下のステップが適宜繰り返される。DKA12から要求された全データがFMチップ211から読み出されると(S107:YES)、FMコントローラ210は、その読み出されたデータをDKA12に転送し(S108)、リード処理を終了する。
【0133】
このように構成される本実施例も第1実施例と同様の効果を奏する。さらに、本実施例では、読出し対象の論理ブロックに付加されている第1保護コードBCと、読出し対象の論理ブロックの直前に位置する論理ブロックに付加されている第1保護コードBCとを比較することにより、読出し対象の論理ブロックを正しく読み出すことができたか否かを判定する。従って、本実施例では、第2保護コードFCを論理ブロックに付加したり(第1実施例)、共通境界CB直前の第1保護コードBCを共通境界CB直後のページにコピーしたり(第2実施例)する必要がない。これにより、本実施例では、比較的簡素な構成で、SSD21のアドレス管理エラーに対応することができ、使い勝手や信頼性を高めることができる。
【0134】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【0135】
【図1】本発明の実施形態の概念を示す説明図である。
【図2】ストレージシステムの全体構成を示す説明図である。
【図3】ウェアレベリングの概要を模式的に示す説明図である。
【図4】ホストからストレージコントローラを介してフラッシュメモリデバイスに至る、データの流れと論理ブロックの構成を示す説明図である。
【図5】論理ブロックの前後に保護コードが設定される様子を示す説明図である。
【図6】ライト処理のフローチャートである。
【図7】ライト処理の概要を示す説明図である。
【図8】リード処理のフローチャートである。
【図9】リード処理が正常に行われる場合の概要を示す説明図である。
【図10】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図11】第2実施例に係るストレージシステムで実行される、データ書込み時の処理を示す説明図である。
【図12】ページ境界とブロック境界とが一致した場合に、対象ページ内の保護コードを次のページの先頭にコピーする様子を示す説明図である。
【図13】リード処理が正しく行われた場合の概要を示す説明図である。
【図14】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図15】第3実施例に係るストレージシステムで実行される、データ書込み時の処理を示す説明図である。
【図16】リード処理が正しく行われた場合の概要を示す説明図である。
【図17】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図18】FMコントローラを初期設定するための処理を示すフローチャートである。
【図19】FMチップにデータを書き込む処理を示すフローチャートである。
【図20】FMチップからデータを読み出す処理を示すフローチャートである。
【符号の説明】
【0136】
1:保護コード設定制御部、1A:第1保護コード設定部、1B:第2保護コード設定部、1C:保護コード除去部、2:フラッシュメモリデバイス、2A:ウェアレベリング、3:データ保証部、4:ホストコンピュータ、10:ストレージコントローラ、11:チャネルアダプタ、12:ディスクアダプタ、13:キャッシュメモリ、14:相互接続用スイッチ、20:記憶デバイス搭載部、21:フラッシュメモリデバイス、22,23:ハードディスクドライブ、25:RAIDグループ、30:保守端末、40:ホストコンピュータ、210:フラッシュメモリコントローラ、211:フラッシュメモリチップ、BC:第1保護コード、FC:第2保護コード、BLK:論理ブロック、ELK:拡張論理ブロック、SELK:第2拡張論理ブロック、T10:管理テーブル

【特許請求の範囲】
【請求項1】
受信したデータを記憶するストレージ装置と、そのストレージ装置を制御するストレージコントローラとを備えるストレージシステムであって、
前記ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、
前記ストレージ装置内に記憶されるデータのうち少なくとも前記ストレージ装置内の複数ページに跨って記憶されるデータについて、そのデータの前後両側に、そのデータの論理アドレスを特定するためのアドレスデータをそれぞれ予め対応付ける、アドレスデータ設定制御部と、
前記複数ページに跨って記憶されている前記データを読み出す場合に、前記データの前後両側にそれぞれ対応付けられている前記アドレスデータに基づいて、前記複数ページに跨って記憶されている前記データが正しいか否かを判定する判定部と、
を備えるストレージシステム。
【請求項2】
前記ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、前記ストレージコントローラ内でデータを管理するために使用される第2論理ブロックのサイズとは異なっており、
前記アドレスデータ設定制御部は、前記各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータを当該第1論理ブロックの前後両側のうち一方の側に設定することにより、前記第1論理ブロックを前記第2論理ブロックに変換するための第1設定部を備えている、請求項1に記載のストレージシステム。
【請求項3】
前記各ページは、前記第1論理ブロックのサイズのn(n>2)倍のサイズに設定されており、
前記アドレスデータ設定制御部は、前記各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第2アドレスデータを、当該第1論理ブロックの前後両側のうち他方の側に設定する第2設定部をさらに備えており、
前記判定部は、前記第1アドレスデータと前記第2アドレスデータとが一致する場合に、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが正しく読み出されたと判定し、前記第1アドレスデータと前記第2アドレスデータとが不一致の場合に、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが誤って読み出されたと判定する、請求項2に記載のストレージシステム。
【請求項4】
前記各ページは、前記第1論理ブロックのサイズと同一に設定されており、
前記アドレスデータ設定制御部は、前記各ページのうち前記第1アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第1アドレスデータを第2アドレスデータとして前記所定ページの先頭にコピーさせる第2設定部をさらに備えており、
前記判定部は、前記第1アドレスデータと前記第2アドレスデータとが一致する場合に、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが正しく読み出されたと判定し、前記第1アドレスデータと前記第2アドレスデータとが不一致の場合に、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが誤って読み出されたと判定する、請求項2に記載のストレージシステム。
【請求項5】
前記各ページは、前記第1論理ブロックのサイズのn(n>2)倍のサイズに設定されており、
前記判定部は、前記複数ページに跨って記憶されている前記第2論理ブロックのデータを読み出す場合に、前記第2論理ブロックのデータが有する前記第1アドレスデータと、前記第2論理ブロックのデータの直前に位置する第2論理ブロックのデータが有する他の第1アドレスデータとを比較することにより、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが正しく読み出されたか否かを判定する、請求項2に記載のストレージシステム。
【請求項6】
前記判定部は、前記複数ページに跨って記憶されている前記第2論理ブロックのデータに含まれている前記第1アドレスデータの値と、前記他の第1アドレスデータの値とが連続している場合に、前記第2論理ブロックのデータが正しく読み出されたと判定する、請求項5に記載のストレージシステム。
【請求項7】
前記第1設定部は、前記第1アドレスデータに加えて、前記第1論理ブロックのデータを検査するための検査用データを設定する、請求項2に記載のストレージシステム。
【請求項8】
前記ストレージ装置は、フラッシュメモリデバイスを備えて構成される、請求項1に記載のストレージシステム。
【請求項9】
前記アドレスデータ設定制御部は、前記ストレージコントローラ内に設けられている請求項1に記載のストレージシステム。
【請求項10】
前記アドレスデータ設定制御部は、前記ストレージコントローラ及び前記ストレージ装置の両方に分散して設けられている請求項1に記載のストレージシステム。
【請求項11】
前記第2設定部及び前記判定部は、前記ストレージ装置内に設けられている請求項4に記載のストレージシステム。
【請求項12】
前記判定部は、前記ストレージ装置内に設けられている請求項5または請求項6に記載のストレージシステム。
【請求項13】
前記ストレージ装置は、コントローラと、そのコントローラにより制御される記憶チップとを備えており、前記コントローラは、前記ホストコンピュータから受信したデータの論理アドレスと、前記記憶チップのページアドレス及びポインタとの対応関係を管理している、請求項1に記載のストレージシステム。
【請求項14】
前記ストレージ装置は、フラッシュメモリデバイスとして構成されており、
前記ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、前記ストレージコントローラ内でデータを管理するために使用される第2論理ブロックのサイズとは異なっており、
前記アドレスデータ設定制御部は、(1)前記各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータ及び当該第1論理ブロックのデータを検査するための検査用データを当該第1論理ブロックの前後両側のうち一方の側に設定することにより、前記第1論理ブロックを前記第2論理ブロックに変換するための第1設定部と、(2)前記各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第2アドレスデータを、当該第1論理ブロックの前後両側のうち他方の側に設定する第2設定部とを備えており、
前記第2設定部は、(2A)前記第1論理ブロックの論理アドレスを前記第2アドレスデータとして、前記第1論理ブロックの前記他方の側に設定させるか、あるいは、(2B)前記各ページのうち前記第1アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第1アドレスデータを前記第2アドレスデータとして前記所定ページの先頭にコピーさせるか、あるいは、(2C)前記複数ページに跨って記憶されている前記第2論理ブロックの直前に位置する他の第2論理ブロックに設定されている第1アドレスデータに所定値を加えたアドレスデータを前記第2アドレスデータとして使用させる、請求項1に記載のストレージシステム。
【請求項15】
ストレージ装置から読み出されるデータが正しいデータであることを保証するためのデータ保証方法において、
前記ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、
前記ストレージ装置内でデータを管理するために使用される第1論理ブロックのサイズと、前記ストレージ装置に入力されるデータを管理するための第2論理ブロックのサイズとは異なっており、
前記ストレージ装置への書込みが要求された場合には、前記各第1論理ブロックに記憶されるデータのそれぞれについて、当該第1論理ブロックの論理アドレスを特定するための第1アドレスデータを、当該第1論理ブロックの後側に設定することにより、前記第1論理ブロックを前記第2論理ブロックに変換するステップと、
前記複数ページに跨って記憶されている前記第2論理ブロックのデータを読み出す場合に、前記第2論理ブロックのデータが有する前記第1アドレスデータと、前記第2論理ブロックのデータの直前に位置する第2論理ブロックのデータが有する他の第1アドレスデータとを比較することにより、前記複数ページに跨って記憶されている前記第2論理ブロックのデータが正しく読み出されたか否かを判定するステップと、
をそれぞれ実行するデータ保証方法。

【図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

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2010−55210(P2010−55210A)
【公開日】平成22年3月11日(2010.3.11)
【国際特許分類】
【出願番号】特願2008−217217(P2008−217217)
【出願日】平成20年8月26日(2008.8.26)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】