JPWO2014061161A1 - 記録再生装置、誤り訂正方法および制御装置 - Google Patents

記録再生装置、誤り訂正方法および制御装置 Download PDF

Info

Publication number
JPWO2014061161A1
JPWO2014061161A1 JP2014541900A JP2014541900A JPWO2014061161A1 JP WO2014061161 A1 JPWO2014061161 A1 JP WO2014061161A1 JP 2014541900 A JP2014541900 A JP 2014541900A JP 2014541900 A JP2014541900 A JP 2014541900A JP WO2014061161 A1 JPWO2014061161 A1 JP WO2014061161A1
Authority
JP
Japan
Prior art keywords
error
data
ecc
error correction
stripe
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014541900A
Other languages
English (en)
Other versions
JP6052294B2 (ja
Inventor
陽子 河野
陽子 河野
光正 羽根田
光正 羽根田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2014061161A1 publication Critical patent/JPWO2014061161A1/ja
Application granted granted Critical
Publication of JP6052294B2 publication Critical patent/JP6052294B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

ストレージ装置(1)は、書き込みデータにECCを付加してストライプを生成し、所定数のストライプにパリティを付加した冗長グループを生成してNANDフラッシュ(11)に書き込む。ストレージ装置(1)は、NANDフラッシュから読み出された同一の冗長グループに属するストライプに誤りがあれば、誤りがあるストライプの訂正を行なうパリティ訂正制御部(173a)と、NANDフラッシュからそれぞれ読み出された同一の冗長グループに属する各ストライプとパリティをECCの生成単位ごとに組分けて、複数の分割ストライプと分割パリティを含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプに誤りがあるか否かを分割パリティにより検出し、誤りがある分割ストライプの訂正を行なうECCグループ訂正制御部(173b)とを備えることにより、NANDフラッシュ(11)のデータの修復率を向上できる。

Description

本発明は、記録再生装置などに関する。
NAND型のフラッシュメモリ(以降、「NANDフラッシュ」という)は、アクセス性能、容量およびコストのバランスのとれた不揮発性記憶媒体として近年多く用いられている。一方では、NANDフラッシュは、エラーレートが他の不揮発性記憶媒体と比較して高く、信頼性を阻害する要因となっている。
このため、NANDフラッシュを制御するコントローラが、NANDフラッシュに書き込むデータにECC(Error Correcting Code)を付加し、データの読み出し時に、ECCによるエラー訂正を行っている。
また、読み出しデータに対して、複数の誤り訂正符号を用いて誤り訂正するECC回路の技術が知られている(例えば、特許文献1参照)。例えば、ECC回路は、読み出しデータに対して、第1誤り訂正符号(ハミング符号)を用いて第1誤り訂正する。そして、ECC回路は、この第1誤り訂正結果を、第2誤り訂正符号(BHC符号)を用いてさらに第2誤り訂正する。さらに、ECC回路は、第2誤り訂正結果を、第3誤り訂正符号(RS符号)を用いて第3誤り訂正する。
さらに、エラーレートが高くなっていることの対策として、例えば、NANDフラッシュを制御するコントローラが、RAID(Redundant Array of Inexpensive Disks)5の構成を利用したデータをNANDフラッシュに書き込む。ここで、RAID5の構成とは、データが複数に分割された結果得られる複数のストライプデータにパリティが付加された構成である。そして、コントローラは、データの読み出し時に、パリティによるエラー訂正を行う。
特開2009−211209号公報 特開平9−218754号公報
しかしながら、従来のNANDフラッシュに対するエラーレートの対策では、NANDフラッシュのデータの修復率を向上できないという問題がある。
例えば、近年、NANDフラッシュでは、微細化や多値化が進むとともに、ビットが壊れやすくなる等の信頼性が低下している。これに伴って、ECCでのエラー訂正が困難になってきている。また、データがRAID5の構成である場合であっても、複数のストライプデータにエラーが発生すると、パリティでのエラー訂正ができない。したがって、従来のNANDフラッシュに対するエラーレートの対策以外で、NANDフラッシュのデータの修復率を向上する策が求められている。
なお、上記課題は、NANDフラッシュに限らず、他の記憶媒体であっても、同様に生じる課題である。
1つの側面では、本発明は、記憶媒体のデータの修復率を向上することを目的とする。
本願の開示する記録再生装置は、1つの態様において、複数のデータ記憶部と、書き込みデータに第1の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第2の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第2の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第2の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第1の誤り検出訂正部と、前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第2の誤り訂正符号を前記第1の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第2の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第2の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第2の誤り検出訂正部とを備える。
本願の開示する装置の1つの態様によれば、記憶媒体のデータの修復率を向上できる。
図1は、実施例1に係るストレージ装置のハードウェア構成を示す図である。 図2Aは、NANDフラッシュの構成の一例を示す図である。 図2Bは、NANDフラッシュに記憶されるデータのデータ構造を示す図である。 図3は、実施例1に係る読み出しデータのグループ化を説明する図である。 図4は、実施例1に係るデータ訂正の具体例を説明する図である。 図5は、データの書き込み処理のフローチャートを示す図である。 図6は、データの訂正処理のフローチャートを示す図である。 図7は、実施例2に係るストレージ装置のハードウェア構成を示す図である。 図8は、実施例2に係るデータ訂正の具体例を説明する図(1)である。 図9は、実施例2に係るデータ訂正の具体例を説明する図(2)である。 図10は、データの訂正処理のフローチャートを示す図である。
以下に、本願の開示する記録再生装置、誤り訂正方法および制御装置の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。以下では、ストレージ装置に本発明を適用した場合について説明する。
[実施例1に係るストレージ装置の構成]
図1は、実施例1に係るストレージ装置のハードウェア構成を示す図である。図1に示すように、ストレージ装置1は、サーバ9と接続する。ストレージ装置1は、NANDフラッシュメモリ(以降、「NANDフラッシュ」という)11、電源供給ユニット12、停電時給電ユニット13およびキャッシュメモリ14を有する。さらに、ストレージ装置1は、CPU15、メモリコントローラ16およびNANDコントローラ17を有する。また、NANDコントローラ17とNANDフラッシュ11とが協働することで、例えば、記録再生装置として動作する。ストレージ装置1内に有するこれらのデバイスは、コントローラモジュール(CM:Controller Module)内に備えるとしても良い。また、ストレージ装置1は、サーバ9と接続する。ストレージ装置1は、サーバ9からの命令に基づいてNANDフラッシュメモリ11へデータを書き込んだり、読み出したりする。
NANDフラッシュ11は、不揮発性の半導体記憶装置である。NANDフラッシュ11は、サーバ9からユーザデータやプログラムを記憶する。すなわち、NANDフラッシュ11は、サーバ9からのデータ保存先の記憶媒体(ストレージ)として用いられる。
NANDフラッシュ11は、ユーザデータを分割して得られる複数のストライプデータをそれぞれ記憶するとともに、所定数のストライプデータに付加されるパリティを記憶する。すなわち、NANDフラッシュ11には、ユーザデータが、RAID5構成で記憶される。なお、図1では、NANDフラッシュ11が、2個搭載されているものとしたが、3個以上搭載されているものとしても良い。
ここで、NANDフラッシュ11の構成について、図2Aを参照して説明する。図2Aは、NANDフラッシュの構成の一例を示す図である。図2Aに示すように、1個のNANDフラッシュ11は、4個のセルを備える。1個のセルには、ユーザデータの複数のストライプデータのうち1個のストライプデータが記憶される。例えば、後述するNANDコントローラ17がユーザデータを書き込む場合、NANDフラッシュ11のそれぞれのセルに対応する書き込み部に、書き込み対象のストライプデータのライトコマンドを発行する。ライトコマンドを受け取った書き込み部は、ライトコマンドに対応するストライプデータをセルに書き込む。一方、NANDコントローラ17がユーザデータを読み出す場合、NANDフラッシュ11のそれぞれのセルに対応する読み出し部に、読み出し対象のストライプデータのリードコマンドを発行する。リードコマンドを受け取った読み出し部は、リードコマンドに対応するストライプデータをセルから読み出し、読み出したストライプデータをNANDコントローラ17に引き渡す。このようなNANDフラッシュ11は、複数のセルに記憶されるそれぞれのストライプデータによってRAID5構成を実現する。
なお、1個のNANDフラッシュ11は4個のセルを備えるので、1個のNANDフラッシュ11に、異なるRAIDのそれぞれのストライプデータが記憶されるようにしても良い。例えば、1個目のNANDフラッシュ11に、1番目のRAIDのストライプデータ0、2番目のRAIDのストライプデータ0、3番目のRAIDストライプデータ0および4番目のRAIDストライプデータ0が記憶される。2個目のNANDフラッシュ11に、1番目のRAIDのストライプデータ1、2番目のRAIDのストライプデータ1、3番目のRAIDストライプデータ1および4番目のRAIDストライプデータ1が記憶される。このように記憶されることで、1つのNANDフラッシュ11が故障した場合でも、故障したNANDフラッシュ11のデータの復元が他のNANDフラッシュ11のデータを用いて可能となる。
ここで、NANDフラッシュ11に記憶されるユーザデータのデータ構造について、図2Bを参照して説明する。図2Bは、NANDフラッシュに記憶されるユーザデータのデータ構造を示す図である。図2Bに示すように、NANDフラッシュに記憶されるユーザデータは、複数のストライプデータと、複数のストライプデータに対応付けられるパリティとを有する。ここでは、7個のストライプデータとパリティとによってRAID5が構成されている。各ストライプデータおよびパリティは、それぞれNANDフラッシュ11への書き込み単位である4キロバイト(KB)のデータである。そして、各ストライプデータには、ユーザデータd1とCRC(Cyclic Redundancy Check)d2とECC(Error Correcting Code)d3とが含まれる。CRCd2は、ユーザデータd1の誤りを検出する誤り検出符号であり、ECCd3は、ユーザデータd1の誤りを訂正する誤り訂正符号である。例えば、ストライプデータ0〜3が、それぞれ図2Aのセル0〜3に記憶され、ストライプデータ4〜6およびパリティが、それぞれ図2Aのセル4〜7に記憶される。なお、CRCd2は、後述するCRC生成部171aによって生成され、ECCd3は、後述するECC生成部172aによって生成され、パリティは、後述するパリティ生成部171bによって生成される。
図1に戻って、電源供給ユニット12は、通常時、ストレージ装置1に電力を供給する。なお、ここでいう通常時とは、ストレージ装置1に電源が投入された後、停電が発生せずに運転している状態を指す。停電時供給ユニット13は、停電発生時にNANDフラッシュ11、キャッシュメモリ14、CPU15、メモリコントローラ16およびNANDコントローラ17へ電力を供給する。停電時供給ユニット13は、内部にコンデンサを備え、通常時に、電源供給ユニット12からの電力をコンデンサに蓄電する。停電時供給ユニット13は、停電時に、コンデンサに蓄電された電力を供給する。
キャッシュメモリ14は、例えば、DIMM(Dual Inline Memory Module)やDDR SDRAM(Double Date Rate Synchronous DRAM)などの揮発性メモリである。キャッシュメモリ14は、サーバ9からの書き込み命令に応じてNANDフラッシュ11に書き込むユーザデータを一時的に記憶する。また、キャッシュメモリ14は、サーバ9からの読み出し命令に応じてNANDフラッシュ11から読み出したユーザデータを一時的に記憶する。
CPU(Central Processing Unit)15は、ストレージ装置1の全体を制御する。例えば、CPU15は、サーバとのインタフェース制御を実行する。メモリコントローラ16は、サーバ9からの命令に応じて、キャッシュメモリ14へのデータの入出力制御を行う。なお、CPU15およびメモリコントローラ16は、独立した構成であるとして説明したが、併合した構成であるメモリコントローラ内蔵のCPUであっても良い。
メモリコントローラ16は、CPU15を介さずにキャッシュメモリ14とNANDフラッシュ11との間のデータ転送を制御する。NANDコントローラ17は、NANDフラッシュ11へのデータの入出力制御を行う。さらに、NANDコントローラ17は、ライトDMA(Direct Memory Access)171、コントローラ172およびリードDMA173を有する。ライトDMA171は、キャッシュメモリ14からNANDフラッシュ11への書き込みデータの転送を制御する。リードDMA173は、NANDフラッシュ11からキャッシュメモリ14への読み出しデータの転送を制御する。コントローラ172は、書き込みデータおよび読み出しデータを制御する。
ライトDMA171は、CRC生成部171aおよびパリティ生成部171bを有する。
CRC生成部171aは、NANDフラッシュ11にデータを書き込む際、データをRAID5で構成するために複数分割し、分割した分割データ毎に、誤り検出に用いられるCRCを生成する。そして、CRC生成部171aは、生成したCRCを、対応する分割データに付加する。かかる分割データは、ストライプデータに対応する。以降、分割データをストライプデータというものとする。
パリティ生成部171bは、所定数のストライプデータに対応付けて、RAID5で用いられるパリティを生成する。かかるパリティは、誤り訂正符号として用いられる。そして、パリティ生成部171bは、生成したパリティを1つのストライプデータとして所定数のストライプデータとともに書き込みデータとする。これにより、書き込みデータは、例えば、所定数のストライプデータとこれらに対応付けられたパリティとにより、NANDフラッシュ11への書き込み単位である4KBの並びとなる。なお、所定数は、例えば7個であるが、6個であっても、8個であっても良く、RAID5を構成することができる数であれば良い。また、パリティ生成部171bは、制御部の一例である。
コントローラ172は、ECC生成部172aおよびECC訂正制御部172bを有する。
ECC生成部172aは、書き込みデータの各ストライプデータをECCの生成単位ずつ、ECCを生成する。ECCの生成単位とは、ECCチェックを実行するためにECCを生成する単位のことである。かかるECCの生成単位は、NANDフラッシュ11の仕様によって定められたECCの訂正能力に依存するものであり、一例として224バイトである。そして、この場合のECCは16バイトである。そして、ECC生成部172aは、生成したECCとともに書き込みデータをNANDフラッシュ11に書き込む。なお、ECC生成部172aは、制御部の一例である。
ECC訂正制御部172bは、ECC生成部172aによって書き込まれたデータを読み出すと、読み出した読み出しデータのECCチェックを行う。そして、ECC訂正制御部172bは、ECCチェックの結果、誤りが検出されなければ、読み出しデータをそのままリードDMA173へ出力する。一方、ECC訂正制御部172bは、ECCチェックの結果、誤りが検出され且つ誤りが訂正可能なエラーである場合、ECCによって誤りを訂正し、訂正後の読み出しデータをリードDMA173へ出力する。なお、書き込まれたデータを読み出すタイミングは、例えば、サーバからの読み出し命令が発行された時である。
また、ECC訂正制御部172bは、ECCチェックの結果、誤りが検出され且つ誤りが訂正不可能なエラーである場合、誤りが検出されたECCの生成単位の位置をリードDMA173へ出力する。このとき、ECC訂正制御部172bは、読み出しデータをそのままリードDMA173へ出力する。なお、ECC訂正制御部172bは、位置出力部の一例である。
リードDMA173は、パリティ訂正制御部173aおよびECCグループ訂正制御部173bを有する。
パリティ訂正制御部173aは、ECC訂正制御部172bから出力された読み出しデータのCRCチェックを行う。そして、パリティ訂正制御部173aは、CRCチェックの結果、誤りが検出されなければ、誤りが検出されなかった読み出しデータをメモリコントローラ16へ出力する。
また、パリティ訂正制御部173aは、CRCチェックの結果、誤りが検出されると、RAIDのパリティによって誤りが訂正可能であるか否かを判定する。そして、パリティ訂正制御部173aは、RAIDのパリティによって誤りが訂正可能であると判定した場合、誤りが検出されたストライプデータを、パリティを用いて訂正する。すなわち、パリティ訂正制御部173aは、CRCチェックによって誤りが検出されたストライプデータが1個のみである場合、当該ストライプデータを他のストライプデータとパリティとを用いて訂正する。そして、パリティ訂正制御部173aは、誤りが検出されたストライプデータを訂正すると、訂正されたストライプデータを含む読み出しデータをメモリコントローラ16へ出力する。なお、パリティ訂正制御部173aでは、CRCチェックによって誤りが検出されたストライプデータが2個以上ある場合、エラーした位置が特定できないため、パリティを用いて誤りを訂正できない。また、パリティ訂正制御部173aは、第1の誤り検出訂正部の一例である。
ECCグループ訂正制御部173bは、読み出しデータの中の2個以上のストライプデータで誤りが検出された場合、読み出したデータの各ストライプデータから1つずつ得られるECCの生成単位をグループ化する。ECCの生成単位によってグループ化するのは、ECCの生成単位で誤りが検出される位置を特定できるからである。すなわち、ECC訂正制御部172bが、誤りが検出されたECCの生成単位の位置を出力するので、ECCグループ訂正制御部173bが、出力された位置を用いてグループ内の誤り位置を特定できるのである。なお、ECCの生成単位で作成されるグループを「ECCグループ」というものとする。
また、ECCグループ訂正制御部173bは、ECCグループ毎の単位でECCグループに含まれるパリティを用いて誤りの訂正を制御する。例えば、ECCグループ訂正制御部173bは、ECC訂正制御部172bによって出力された、誤りが検出されたECCの生成単位の位置を取得する。そして、ECCグループ訂正制御部173bは、取得したECCの生成単位の位置を含むECCグループを検出する。そして、ECCグループ訂正制御部173bは、検出したECCグループの単位で、当該ECCグループに含まれるパリティによって誤りが訂正可能であるか否かを判定する。そして、ECCグループ訂正制御部173bは、当該ECCグループに含まれるパリティによって誤りが訂正可能であると判定した場合、パリティを用いて、誤りが検出されたECCの生成単位を訂正する。すなわち、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置がECCグループ内で1個のみである場合、当該位置の生成単位を、同じグループ内のパリティを用いて訂正する。
また、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位を訂正すると、訂正された生成単位を含む読み出しデータをメモリコントローラ16へ出力する。なお、グループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置がECCグループ内で2個以上である場合、同じECCグループ内のパリティを用いて誤りを訂正できない。また、ECCグループ訂正制御部173bは、第2の誤り検出訂正部の一例である。
[読み出しデータのグループ化]
ここで、ECCグループ訂正制御部173bによって作成される読み出しデータのグループ化について、図3を参照して説明する。図3は、実施例1に係る読み出しデータのグループ化を説明する図である。図3に示すように、読み出しデータは、ストライプデータ0〜6およびパリティを有するRAID5の構成である。各ストライプデータおよびパリティは、ECCの生成単位である224バイトずつに表される。そして、ECCは、ECCの生成単位毎に生成される。一例として、ストライプデータ0は、ECCの生成単位である224バイト毎に表され、ここではデータ0−0、データ0−1、・・・データ0−17と表される。そして、各ECCは、データ0−0〜データ0−17毎に生成される。同様に、パリティも、ECCの生成単位である224バイト毎に表され、ここではパリティ−0、パリティ−1、・・・パリティ−17と表される。そして、各ECCは、パリティ−0〜パリティ−17毎に生成される。ECCは、それぞれ16バイトである。
そして、ECCグループ訂正制御部173bは、読み出しデータの各ストライプデータおよびパリティから1つずつ得られるECCの生成単位をグループ化する。ここでは、ECCグループ訂正制御部173bは、ストライプデータ0のデータ0−0、ストライプデータ1のデータ1−0、ストライプデータ2のデータ2−0、・・・、パリティのパリティ−0をECCグループ0とする。ECCグループ訂正制御部173bは、ストライプデータ0のデータ0−1、ストライプデータ1のデータ1−1、ストライプデータ2のデータ2−1、・・・、パリティのパリティ−1をECCグループ1とする。
[データ訂正の具体例]
このようにグループ化された読み出しデータについて、データの訂正の具体例を、図4を参照して説明する。図4は、実施例1に係るデータ訂正の具体例を説明する図である。図4の上図に示すように、読み出しデータのうちCRCチェックによって誤りが検出されたストライプデータが、ストライプデータ1、ストライプデータ3、ストライプデータ5と2個以上あるとする。したがって、パリティ訂正制御部173aでは、RAIDのパリティそのものを用いて誤りを訂正できない。
図4の下図に示すように、ECCグループ訂正制御部173bは、ECCグループ毎の単位でECCグループに含まれるパリティを用いて誤りの訂正を制御する。ここでは、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置を、ストライプデータ1のデータ1−0の位置として取得する。そして、ECCグループ訂正制御部173bは、取得したデータ1−0の位置を含むECCグループ0を検出する。そして、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置がECCグループ0内でデータ1−0の1個のみであるので、データ1−0を、ECCグループ0内の他のデータおよびパリティ−0を用いて訂正する。
次に、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置を、ストライプデータ3のデータ3−2の位置として取得する。そして、ECCグループ訂正制御部173bは、取得したデータ3−2の位置を含むECCグループ2を検出する。そして、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置がECCグループ2内でデータ3−2の1個のみであるので、データ3−2を、ECCグループ2内の他のデータおよびパリティ−2を用いて訂正する。
次に、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置を、ストライプデータ5のデータ5−1の位置として取得する。そして、ECCグループ訂正制御部173bは、取得したデータ5−1の位置を含むECCグループ1を検出する。そして、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置がECCグループ1内でデータ5−1の1個のみであるので、データ5−1を、ECCグループ1内の他のデータおよびパリティ−1を用いて訂正する。
このようにして、読み出しデータのうち誤りが検出されたストライプデータが2個以上あっても、ECCグループ訂正制御部173bは、誤りのあるECCの生成単位の位置が同じECCグループでなければ、読み出しデータの誤りを訂正することができる。ここで、読み出しデータの誤りを訂正する他の方法として、RAIDのストライプのサイズを小さくすることでRAIDの単位を増やし、RAIDのパリティによって読み出しデータの誤りを訂正する方法も考えられる。しかしながら、RAIDのストライプのサイズを小さくしてしまうと、CRCやパリティの冗長ビット数が増加することになり、書き込み時の性能が落ちてしまう。そこで、RAIDのストライプのサイズを変えないで、ECCグループを利用して誤りを訂正することで、書き込み時の性能を落とさないで、NANDフラッシュ11の信頼性を向上することができる。
[データの書き込み処理およびデータの訂正処理のフローチャート]
次に、実施例1に係るデータの訂正処理について、図5および図6を参照して説明する。ここでは、一例として、サーバ9からデータの書き込み命令が発行された場合に、書き込み命令に応じてキャッシュメモリ14のデータを書き込む書き込み処理について説明する。また、サーバ9からデータの読み出し命令が発行された場合に、読み出し命令に応じてNANDフラッシュ11から読み出したデータを訂正する処理について説明する。図5は、データの書き込み処理のフローチャートを示す図である。図6は、データの訂正処理のフローチャートを示す図である。
図5に示すように、サーバ9から書き込み命令を受け取ったCPU15は、ライトDMA171を起動する(ステップS11)。そして、CPU15は、サーバ9からの書き込み命令に応じてキャッシュメモリ14からユーザデータを読み出す(ステップS12)。
そして、ライトDMA171は、読み出されたユーザデータについて、RAID5用のパリティを生成するとともに、CRCを生成する(ステップS13)。例えば、ライトDMA171のCRC生成部171aは、RAID5で構成するためにユーザデータを複数のストライプデータに分割し、分割したストライプデータ毎にCRCを生成する。そして、ライトDMA171のパリティ生成部171bは、所定数のストライプデータに対応付けて、RAID5で用いられるパリティを生成する。そして、パリティ生成部171bは、生成したパリティを1つのストライプデータとして所定数のストライプデータとともに書き込みデータとする。
続いて、コントローラ172は、書き込みデータについて、ECCを生成する(ステップS14)。例えば、コントローラ172のECC生成部172aは、書き込みデータの各ストライプデータをECCの生成単位ずつ、ECCを生成する。
そして、コントローラ172は、NANDフラッシュ11へデータを書き込む。ここでいうデータは、具体的にはユーザデータとパリティとCRCとECCである(ステップS15)。すなわち、コントローラ172のECC生成部172aは、生成したECCとともに書き込みデータをNANDフラッシュ11へ書き込む。
これにより、サーバ9からの書き込み命令に応じてキャッシュメモリ14に保持されていたユーザデータは、NANDフラッシュ11に書き込まれる。
図6に示すように、サーバ9から読み出し命令を受け取ったCPU15は、リードDMA173を起動する(ステップS21)。そして、CPU15は、NANDフラッシュ11からデータを読み出す(ステップS22)。
そして、コントローラ172のECC訂正制御部172bは、読み出したデータについて、ECCチェックを行い(ステップS23)、ECCによって訂正可能なエラー(ECCコレクタブルエラー)であるか否かを判定する(ステップS24)。ECCコレクタブルエラーであると判定した場合(ステップS24;Yes)、ECC訂正制御部172bは、ECCによってデータを訂正する(ステップS25)。そして、ECC訂正制御部172bは、CRCチェックをすべく、ステップS28に移行する。これは、ECCによってデータを訂正しても、CRCによって誤りが検出される場合があるからである。
一方、ECCコレクタブルエラーでないと判定した場合(ステップS24;No)、コントローラ172のECC訂正制御部172bは、ECCによって訂正不可能なエラー(ECCアンコレクタブルエラー)であるか否かを判定する(ステップS26)。ECCアンコレクタブルエラーであると判定した場合(ステップS26;Yes)、コントローラ172のECC訂正制御部172bは、エラー(誤り)があったECCの生成単位の位置をリードDMA173へ通知する(ステップS27)。そして、ECC訂正制御部172bは、CRCチェックをすべく、ステップS28に移行する。
一方、ECCアンコレクタブルエラーでないと判定した場合(ステップS26;No)、すなわちECCによってデータにエラーがないと判定された場合、ECC訂正制御部172bは、CRCチェックをすべく、ステップS28に移行する。これは、ECCによってデータにエラーがないと判定された場合であっても、CRCによって誤りが検出される場合があるからである。
続いて、リードDMA173は、読み出しデータまたは訂正された読み出しデータについて、CRCチェックを行い(ステップS28)、RAIDのパリティによって訂正可能なエラー(RAIDコレクタブルエラー)であるか否かを判定する(ステップS29)。
RAIDコレクタブルエラーであると判定した場合(ステップS29;Yes)、リードDMA173のパリティ訂正制御部173aは、1ページ(ストライプ)単位でデータを訂正する(ステップS30)。すなわち、パリティ訂正制御部173aは、CRCチェックによってエラーが検出されたストライプデータが1個のみである場合、当該ストライプデータを他のストライプデータとパリティとを用いて訂正する。パリティ訂正制御部173aは、訂正した読み出しデータをメモリコントローラ16へ出力する。そして、パリティ訂正制御部173aは、ステップS35に移行する。
一方、RAIDコレクタブルエラーでないと判定した場合(ステップS29;No)、パリティ訂正制御部173aは、RAIDのパリティによって訂正不可能なエラー(RAIDアンコレクタブルエラー)であるか否かを判定する(ステップS31)。すなわち、パリティ訂正制御部173aは、CRCチェックによってエラーが検出されたストライプデータが2個以上あるか否かを判定する。
RAIDアンコレクタブルエラーでないと判定した場合(ステップS31;No)、パリティ訂正制御部173aは、エラーが検出されないので、読み出しデータをメモリコントローラ16へ出力する。そして、パリティ訂正制御部173aは、ステップS35へ移行する。
一方、RAIDアンコレクタブルエラーであると判定した場合(ステップS31;Yes)、パリティ訂正制御部173aは、エラーが検出されたストライプデータが2個以上あるので、エラーした位置が特定できず、パリティを用いてエラーを訂正できないと判断する。
そして、リードDMA173のECCグループ訂正制御部173bは、ECCグループによって訂正可能なエラー(ECCグループコレクタブルエラー)であるか否かを判定する(ステップS32)。例えば、ECCグループ訂正制御部173bは、ECC訂正制御部172bによって通知された、エラーしたECCの生成単位の位置を取得する。そして、ECCグループ訂正制御部173bは、取得したECCの生成単位の位置を含むECCグループを検出する。そして、ECCグループ訂正制御部173bは、検出したECCグループの単位で、当該ECCグループに含まれるパリティによってエラーが訂正可能であるか否かを判定する。すなわち、ECCグループ訂正制御部173bは、ECCグループ単位でエラーがあるECCの生成単位が2個以上あるか否かを判定する。
ECCグループコレクタブルエラーであると判定した場合(ステップS32;Yes)、ECCグループ訂正制御部173bは、ECCの生成単位でデータを訂正する(ステップS33)。例えば、ECCグループ訂正制御部173bは、ECCグループに含まれるパリティを用いて、エラーが検出されたECCの生成単位を訂正する。すなわち、ECCグループ訂正制御部173bは、エラーが検出されたECCの生成単位の位置がECCグループ内で1個のみである場合、当該位置の生成単位を、同じグループ内のパリティを用いて訂正する。そして、ECCグループ訂正制御部173bは、訂正された読み出しデータをメモリコントローラ16へ出力する。そして、ECCグループ訂正制御部173bは、ステップS35に移行する。
一方、ECCグループコレクタブルエラーでないと判定した場合(ステップS32;No)、ECCグループ訂正制御部173bは、ECCグループによって訂正不可能なエラーであると判断する。すなわち、ECCグループ訂正制御部173bは、エラーが検出されたECCの生成単位の位置がECCグループ内で2個以上あるので、同じECCグループ内のパリティを用いてエラーを訂正できないと判断する。この結果、読み出し失敗として、処理が終了する。
ステップS35では、メモリコントローラ16は、キャッシュメモリ14へユーザデータを書き込む(ステップS35)。すなわち、メモリコントローラ16は、リードDMA173から出力された読み出しデータをキャッシュメモリ14へ書き込み、その後、読み出しデータをサーバ9に出力する。この結果、読み出し完了として、処理が終了する。
これにより、NANDフラッシュ11に書き込まれたユーザデータは、読み出し処理でエラーとなってもキャッシュメモリ14に正しく書き込まれる。そして、メモリコントローラ16は、正しいユーザデータをサーバ9に伝達することができる。
[実施例1の効果]
上記実施例1によれば、ライトDMA171は、NANDフラッシュ11にデータを書き込む際、データを複数に分割したストライプ毎にCRCを生成し付加するとともに、連続した所定数のストライプに対応付けてパリティを生成する。そして、ECC生成部172aは、生成されたパリティを1つのストライプとして付加した書き込みデータの各ストライプをECCの生成単位ずつECCを生成し、生成したECCとともに書き込みデータをNANDフラッシュ11に書き込む。そして、ECCグループ訂正制御部173bは、書き込まれたデータを読み出す際、読み出したデータの中の複数のストライプで誤りが検出された場合、読み出したデータの各ストライプから1つずつ得られるECCの生成単位をグループ化する。そして、ECCグループ訂正制御部173bは、グループ毎の単位でパリティを用いて誤りの訂正を制御する。かかる構成によれば、NANDフラッシュ11から読み出したデータの複数のストライプに誤りが検出された場合であっても、ECCグループ訂正制御部173bは、読み出したデータの各ストライプから得られるECCグループ毎の単位で誤りの訂正を制御する。このため、ECCグループ訂正制御部173bは、NANDフラッシュ11のデータの修復率を向上できる。
また、上記実施例1によれば、ECC訂正制御部172bは、読み出したデータを、ECCを用いてチェックした結果、読み出したデータが訂正不可能な場合、ECCで示されるいずれの生成単位の位置で誤りが検出されたかを出力する。そして、ECCグループ訂正制御部173bは、出力された誤り位置を含むグループでパリティを用いて誤り訂正を制御する。かかる構成によれば、ECCグループ訂正制御部173bは、誤りが検出された位置を含むグループ単位を検出でき、検出したグループ単位で誤りの訂正を制御できるので、NANDフラッシュ11のデータの修復率を向上できる。
ところで、実施例1では、ストレージ装置1では、NANDフラッシュ11、キャッシュメモリ14、CPU15およびメモリコントローラ16が2重化されていない場合について説明した。しかしながら、ストレージ装置1では、これに限定されず、NANDフラッシュ11、キャッシュメモリ14、CPU15およびメモリコントローラ16が2重化されている場合であっても良い。これにより、ストレージ装置1は、2重化されたそれぞれの読み出しデータを突き合わせることで、NANDフラッシュ11の信頼性をさらに向上することができる。
そこで、実施例2では、NANDフラッシュ11、キャッシュメモリ14、CPU15およびメモリコントローラ16が2重化されている場合のストレージ装置2について説明する。
[実施例2に係るストレージ装置の構成]
図7は、実施例2に係るストレージ装置のハードウェア構成を示す図である。なお、図1に示すストレージ装置1と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、ストレージ装置2では、CM1AとCM1Bとが2重化されている点である。そして、各CMは、NANDフラッシュ11、電源供給ユニット12、停電時給電ユニット13およびキャッシュメモリ14、CPU15、メモリコントローラ16およびNANDコントローラ17を有する。また、実施例1と実施例2とが異なるところは、CM1A内のNANDコントローラ17に他CM通信部201とリードデータ用バッファ202と他CM間訂正制御部203を追加した点にある。また、実施例1と実施例2とが異なるところは、CM1B内のNANDコントローラ17に他CM通信部301とリードデータ用バッファ302と他CM間訂正制御部303を追加した点にある。
他CM通信部201は、2重化された他のCMと通信する。例えば、他CM通信部201は、自CMで誤りが検出されたECCの生成単位の位置をCM1Bへ送信する。また、他CM通信部201は、CM1Bで誤りが検出されたECCの生成単位の位置を受信する。さらに、他CM通信部201は、CM1BへECCの生成単位のデータをリクエストし、リクエストに応じてデータを受信する。
リードデータ用バッファ202には、NANDフラッシュ11から読み出された読み出しデータが格納される。例えば、リードデータ用バッファ202には、誤りが検出されたECCの生成単位を含むECCグループが格納される。かかるリードデータ用バッファ202を用いて、後述する他CM間訂正制御部203が、他CM通信部201と協働して誤りが検出されたECCの生成単位を訂正する。
ECCグループ訂正制御部173bは、実施例1で説明したとおりであるので簡略して説明する。例えば、ECCグループ訂正制御部173bは、誤りが検出されたECCの生成単位の位置を含むECCグループを検出し、検出したECCグループに含まれるパリティを用いて誤りの訂正を制御する。このとき、ECCグループ訂正制御部173bは、誤りが訂正可能、すなわち誤りが検出されたECCの生成単位の位置がECCグループ内で1個のみである場合、当該位置の生成単位を、同じグループに含まれるパリティを用いて訂正する。なお、ECCグループ訂正制御部173bは、誤りが訂正不可能、すなわち誤りが検出されたECCの生成単位の位置がECCグループ内で2個以上である場合、ECCグループに含まれるパリティを用いて誤りを訂正できない。
他CM間訂正制御部203は、誤りが検出されたECCの生成単位の位置がECCグループ内で2個以上ある場合、2重化された他のCM1B内のNANDフラッシュ11に記憶されたデータを利用して、誤りが検出されたECCの生成単位を訂正する。例えば、他CM間訂正制御部203は、他CM通信部201によるCM1Bとの通信を用いて、同じ読み出しデータのECCグループについて、CM1Bで誤りがあったECCの生成単位の位置を取得する。そして、他CM間訂正制御部203は、取得した誤りのあったECCの生成単位の位置を用いて、CM1Bにおいて、ECCによる訂正不可能な誤りを検出したか否かを判定する。そして、他CM間訂正制御部203は、CM1Bにおいて、ECCによる訂正不可能な誤りを検出しなかったと判定した場合、誤りがないので、他CM通信部201によるCM1Bとの通信を用いてCM1BのECCグループの全データを取得する。そして、他CM間訂正制御部203は、CM1Bから取得されたECCグループの全データを、リードデータ用バッファ202に格納されたECCグループのデータに上書きする。
また、他CM間訂正制御部203は、CM1Bにおいて、ECCによって訂正不可能な誤りを検出したと判定した場合、自CMとCM1Bとの同じECCグループで、それぞれ誤りがあったECCの生成単位の位置をチェックする。そして、他CM間訂正制御部203は、誤りがあったECCの生成単位の位置が全く重複しないか、または1箇所だけ重複する場合、他CM通信部201によるCM1Bとの通信を用いて、訂正に必要なECCの生成単位を取得する。そして、他CM間訂正制御部203は、CM1Bから取得された訂正に必要なECCの生成単位を、リードデータ用バッファ202に格納されたECCグループの対応する位置に上書きする。さらに、他CM間訂正制御部203は、上書きされたECCの生成単位および同じECCグループ内のパリティを含むECCの生成単位を用いて誤りを訂正する。なお、他CM間訂正制御部203は、複製部の一例である。
他CM通信部301は、2重化された他のCMと通信する。例えば、他CM通信部301は、他のCM1Aからリクエストを受信し、リクエストに応じたデータを送信する。ここでいうリクエストとは、一例として、該当するECCの生成単位のデータの送信要求であったり、誤りがあったECCの生成単位の位置の送信要求であったりする。
リードデータ用バッファ302には、NANDフラッシュ11から読み出された読み出しデータが格納される。リードデータ用バッファ302は、リードデータ用バッファ202と同様であるので、説明を省略する。
他CM間訂正制御部303は、誤りが検出されたECCの生成単位の位置がECCグループ内で2個以上ある場合、2重化された他のCM1A内のNANDフラッシュ11に記憶されたデータを利用して、誤りが検出されたECCの生成単位を訂正する。他CM訂正制御部303は、他CM訂正制御部203の処理と同様であるので、説明を省略する。
[データ訂正の具体例]
次に、実施例2に係るデータの訂正の具体例を、図8および図9を参照して説明する。図8および図9は、実施例2に係るデータ訂正の具体例を説明する図である。
図8に示すように、CM1AにおけるECCグループ0で誤りが訂正不可能であるとする。すなわち、ECCグループ0で誤りが検出されたECCの生成単位の位置が、データ0−0とデータ2−0と2個以上あるとする。一方、2重化された他のCM1BにおけるECCグループ0で誤りを検出しなかったとする。
すると、CM1Aの他CM間訂正制御部203は、CM1Bにおいて、CM1Aで誤りが検出されたECCグループ0と同一のECCグループに誤りがないので、CM1BのECCグループ0の全データを取得する。そして、他CM間訂正制御部203は、CM1Bから取得されたECCグループ0の全データを、リードデータ用バッファ202に格納されたECCグループ0のデータに上書きする。これにより、他CM間訂正制御部203は、他のCM1BのECCグループ0の誤りのないデータを利用することで、CM1Aで誤りが訂正不可能であったECCグループ0を訂正することができる。
また、CM1BにおけるECCグループ1で誤りが訂正不可能であるとする。すなわち、ECCグループ1で誤りが検出されたECCの生成単位の位置が、データ2−1とデータ4−1と2個以上あるとする。一方、2重化された他のCM1AにおけるECCグループ1で誤りを検出しなかったとする。
すると、CM1Bの他CM間訂正制御部303は、CM1Aにおいて、CM1Bで誤りが検出されたECCグループ1と同一のECCグループに誤りがないので、CM1AのECCグループ1の全データを取得する。そして、他CM間訂正制御部303は、CM1Aから取得されたECCグループ1の全データを、リードデータ用バッファ302に格納されたECCグループ1のデータに上書きする。これにより、他CM間訂正制御部303は、他のCM1AのECCグループ1の誤りのないデータを利用することで、CM1Bで誤りが訂正不可能であったECCグループ1を訂正することができる。
図9に示すように、CM1AにおけるECCグループ0で誤りが訂正不可能であるとする。すなわち、ECCグループ0で誤りが検出されたECCの生成単位の位置が、データ0−0とデータ2−0と2個以上あるとする。他方、CM1BにおけるECCグループ0で誤りが訂正不可能であるとする。すなわち、ECCグループ0で誤りが検出されたECCの生成単位の位置が、データ2−0とデータ3−0と2個以上あるとする。
すると、CM1Aの他CM間訂正制御部203は、誤りがあったECCの生成単位の位置が全く重複しないか、または1箇所だけ重複するかをチェックする。ここでは、他CM間訂正制御部203は、データ2−0が重複するが、データ0−0とデータ3−0とが重複しないので、1箇所だけ重複すると判断する。そこで、他CM間訂正制御部203は、CM1Bから、訂正に必要なデータ0−0を取得し、取得したデータ0−0をリードデータ用バッファ202に格納されたECCグループ0のデータ0−0の位置に上書きする。そして、他CM間訂正制御部203は、ECCグループ0内のパリティ−0を含むECCの生成単位のデータを用いてデータ2−0を訂正する。これにより、他CM間訂正制御部203は、他のCM1BのECCグループ0の誤りのないデータを利用することで、CM1Aで誤りが訂正不可能であったECCグループ0を訂正することができる。
また、CM1Bの他CM間訂正制御部303は、CM1Aから、訂正に必要なデータ3−0を取得し、取得したデータ3−0をリードデータ用バッファ302に格納されたECCグループ0のデータ3−0の位置に上書きする。そして、他CM間訂正制御部303は、ECCグループ0内のパリティ−0を含むECCの生成単位のデータを用いてデータ2−0を訂正する。これにより、他CM間訂正制御部303は、他のCM1AのECCグループ0の誤りのないデータを利用することで、CM1Bで誤りが訂正不可能であったECCグループ0を訂正することができる。
[データの訂正処理のフローチャート]
次に、実施例2に係るデータの訂正処理について、図10を参照して説明する。ここでは、一例として、サーバ9からデータの読み出し命令が発行された場合に、読み出し命令に応じてNANDフラッシュ11から読み出したデータを訂正する処理について説明する。加えて、図10では、図6におけるデータの訂正処理のフローチャートのうちエラー(誤り)があったECCグループがECCグループコレクタブルエラーでない場合(ステップS32;No)の訂正処理について説明する。なお、ECCグループコレクタブルエラーとは、ECCグループで訂正可能なエラーであることをいう。
まず、図6では、リードDMA173のECCグループ訂正制御部173bは、エラー(誤り)があったECCグループについて、ECCグループコレクタブルエラーであるか否かを判定する(ステップS32)。すなわち、ECCグループ訂正制御部173bは、ECCグループ単位で誤りのあるECCの生成単位が2個以上あるか否かを判定する。ECCグループコレクタブルエラーであると判定した場合(ステップS32;Yes)、ECCグループ訂正制御部173bは、エラーがあったECCグループについて、ECCの生成単位でデータを訂正する(ステップS33)。
一方、ECCグループコレクタブルエラーでないと判定した場合(ステップS32;No)、ECCグループ訂正制御部173bは、エラーがあったECCグループについて、ECCグループアンコレクタブルエラーであるか否かを判定する(ステップS41)。なお、ECCグループアンコレクタブルエラーとは、ECCグループで訂正不可能なエラーであることをいう。ECCグループアンコレクタブルエラーであると判定した場合(ステップS41;Yes)、リードDMA173の他CM間訂正制御部203は、他CMにおけるエラーしたECCの生成単位の位置をチェックする(ステップS42)。
続いて、他CM間訂正制御部203は、チェックの結果、エラーがあったECCグループと同一のECCグループについて、他CM1BでECCアンコレクタブルエラーを検出しているか否かを判定する(ステップS43)。なお、ECCアンコレクタブルエラーとは、エラーがあったECCグループについてECCにより訂正不可能なエラーであることをいう。他CM1BでECCアンコレクタブルエラーを検出していると判定した場合(ステップS43;Yes)、他CM間訂正制御部203は、ステップS46に移行する。
一方、他CM1BでECCアンコレクタブルエラーを検出していないと判定した場合(ステップS43;No)、他CM通信部201は、他CM1BのECCグループの全データをリクエストする(ステップS44)。
そして、他CM間訂正制御部203は、メモリコントローラ16を介して、自CMのキャッシュメモリ14に他CM1BのECCグループのデータを書き込む(ステップS45)。例えば、他CM間訂正制御部203は、リクエストに応じて得られた他CM1BのECCグループの全データを取得する。そして、他CM間訂正制御部203は、取得したECCグループの全データを、リードデータ用バッファ202に格納されたECCグループのデータに上書きする。そして、他CM間訂正制御部203は、リードデータ用バッファ202に上書きされたECCグループのデータを、メモリコントローラ16を介して、キャッシュメモリ14に書き込み、その後、読み出しデータをサーバ9に出力する。この結果、読み出し処理完了として、処理が終了する。
ステップS46では、リードDMA173の他CM間訂正制御部203は、自CMと他CM1BとでエラーがあったECCの生成単位の位置をチェックする(ステップS46)。そして、他CM間訂正制御部203は、チェックの結果、エラーがあったECCの生成単位の位置が訂正可能なエラーの位置であるか否かを判定する(ステップS47)。すなわち、他CM間訂正制御部203は、自CMおよび他CM1BのそれぞれエラーがあったECCの生成単位の位置が全く重複しないか、または1箇所だけ重複するか否かを判定する。
エラーがあったECCの生成単位の位置が訂正可能なエラーの位置でないと判定した場合(ステップS47;No)、他CM間訂正制御部203は、エラーがあったECCグループについてエラーを訂正できないと判断する。この結果、読み出し失敗として、処理が終了する。
一方、エラーがあったECCの生成単位の位置が訂正可能なエラーの位置であると判定した場合(ステップS47;Yes)、他CM通信部201は、訂正に必要なデータであるECCの生成単位を他CM1Bへリクエストする(ステップS48)。そして、リードDMA173の他CM間訂正制御部203は、他CM1Bのデータを使用して、エラーがあったECCグループのデータをECCの生成単位で訂正する(ステップS49)。例えば、他CM間訂正制御部203は、リクエストに応じて得られた他CM1Bの訂正に必要なECCの生成単位を取得する。そして、他CM間訂正制御部203は、取得したECCの生成単位を、リードデータ用バッファ202に格納されたECCグループの対応する位置に上書きする。そして、他CM間訂正制御部203は、上書きされたECCの生成単位およびECCグループ内のパリティを含むECCの生成単位を用いてエラーがあったECCの生成単位を訂正する。
そして、他CM間訂正制御部203は、メモリコントローラ16を介して、訂正したECCグループのデータを自CMのキャッシュメモリ14に書き込み(ステップS50)、その後、読み出しデータをサーバ9に出力する。この結果、読み出し処理完了として、処理が終了する。
これにより、NANDフラッシュ11に書き込まれたユーザデータは、読み出し処理でエラーとなってもキャッシュメモリ14に正しく書き込まれる。そして、メモリコントローラ16は、正しいユーザデータをサーバ9に伝達することができる。

[実施例2の効果]
上記実施例2によれば、他CM間訂正制御部203は、誤りがあったECCの生成単位の位置がECCグループ内で複数ある場合、自CMと2重化されたCM1BのNANDフラッシュ11に記憶されたデータを利用して、誤り位置のECCの生成単位を訂正する。すなわち、他CM間訂正制御部203は、CM1Bにおいて、誤り位置と同じ位置のECCの生成単位に誤りがなければ、誤りがないECCの生成単位を自CMの誤りがあった位置に上書きすることにより、誤り位置のECCの生成単位を訂正する。かかる構成によれば、他CM間訂正制御部203は、自CMと2重化されたCM1Bの誤りがないECCの生成単位を利用して、誤りがあったECCの生成単位の誤りの訂正を制御できるので、さらにNANDフラッシュ11のデータの修復率を向上できる。
[その他]
なお、実施例1、2のストレージ装置1、2は、NANDフラッシュ11を、サーバ9からのデータ保存先の記憶媒体として用いるとして説明した。しかしながら、ストレージ装置1、2は、NANDフラッシュ11を、停電が発生した場合のバックアップ先の記憶媒体として用いるとしても良い。かかる場合、ストレージ装置1、2は、サーバ9からのデータ保存先の記憶媒体としてHDD(Hard Disk Drive)を搭載するようにすれば良い。例えば、ストレージ装置1、2は、メモリコントローラ17にRAIDコントローラを接続し、RAIDコントローラ配下にHDDを搭載する。かかる構成では、キャッシュメモリ14は、通常時、サーバ9からの書き込み命令に応じてHDDに書き込むユーザデータを一時的に記憶する。また、キャッシュメモリ14は、通常時、サーバ9からの読み出し命令に応じてHDDから読み出したユーザデータを一時的に記憶する。そして、停電時、メモリコントローラ16は、キャッシュメモリ14に一時的に記憶されたユーザデータのNANDフラッシュ11へのバックアップ処理を実行する。そして、復電時、メモリコントローラ16は、リードDMA173から出力された読み出しデータをキャッシュメモリ14へ書き戻す。かかる構成であっても、キャッシュメモリ14に一時的に記憶されていたユーザデータは、停電時にNANDフラッシュ11に退避することができる。そして、停電時にNANDフラッシュ11に退避されたユーザデータは、復電時にキャッシュメモリ14に正しく書き戻されることができる。
また、図示したストレージ装置1、2の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ストレージ装置1、2の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、CRC生成部171aとパリティ生成部171bとを誤り符号生成部として1個の部に統合しても良い。ECCグループ訂正制御部173bと他CM間訂正制御部203とをECCグループ訂正制御部として1個の部に統合しても良い。一方、パリティ訂正制御部173aをCRCチェック部とパリティ訂正制御部とに分散しても良い。
1、2 ストレージ装置
1A、1B CM
11 NANDフラッシュ
12 電源供給ユニット
13 停電時給電ユニット
14 キャッシュメモリ
15 CPU
16 メモリコントローラ
17 NANDコントローラ
171 ライトDMA
171a CRC生成部
171b パリティ生成部
172 コントローラ
172a ECC生成部
172b ECC訂正制御部
173 リードDMA
173a パリティ訂正制御部
173b ECCグループ訂正制御部
201、301 他CM通信部
202、302 リードデータ用バッファ
203、303 他CM間訂正制御部

Claims (5)

  1. 複数のデータ記憶部と、
    書き込みデータに第1の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第2の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第2の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第2の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第1の誤り検出訂正部と、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第2の誤り訂正符号を前記第1の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第2の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第2の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第2の誤り検出訂正部と、
    を備えることを特徴とする記録再生装置。
  2. 前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するデータに誤りがあるか否かを第1の誤り訂正符号により検出し、誤りがあるデータの訂正を行えない場合、第1の誤り訂正符号の生成単位のいずれの位置で誤りが検出されたかを出力する誤り位置出力部を備え、
    前記第2の誤り検出訂正部は、前記誤り位置出力部によって出力された誤り位置を含む誤り訂正グループで誤りがある分割ストライプデータの訂正を行う
    ことを特徴とする請求項1に記載の記録再生装置。
  3. 前記誤り訂正グループに複数の誤り位置がある場合、自装置と冗長化された装置内の複数のデータ記憶部に記憶されたデータのうち前記誤り訂正グループに対応するグループに属する、自装置の誤り位置と同じ位置の分割ストライプデータに誤りがなければ、誤りがない分割ストライプデータを受け取り、受け取った分割ストライプデータを自装置の該当する誤り位置に複製する複製部を
    さらに備えることを特徴とする請求項2に記載の記録再生装置。
  4. 書き込みデータに第1の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第2の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第2の誤り訂正符号を複数のデータ記憶部にそれぞれ対応付けて書き込む制御が行われる記録再生装置のデータ誤り訂正装置が、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第2の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行ない、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第2の誤り訂正符号を前記第1の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第2の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第2の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう
    各処理を実行することを特徴とする誤り訂正方法。
  5. 複数のデータ記憶部へのデータの書き込みおよび前記複数のデータ記憶部からのデータの読み出しを制御する制御装置において、
    書き込みデータに第1の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第2の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第2の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第2の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第1の誤り検出訂正部と、
    前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第2の誤り訂正符号を前記第1の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第2の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第2の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第2の誤り検出訂正部と、
    を備えることを特徴とする制御装置。
JP2014541900A 2012-10-19 2012-10-19 記録再生装置、誤り訂正方法および制御装置 Expired - Fee Related JP6052294B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/077160 WO2014061161A1 (ja) 2012-10-19 2012-10-19 記録再生装置、誤り訂正方法および制御装置

Publications (2)

Publication Number Publication Date
JPWO2014061161A1 true JPWO2014061161A1 (ja) 2016-09-05
JP6052294B2 JP6052294B2 (ja) 2016-12-27

Family

ID=50487749

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014541900A Expired - Fee Related JP6052294B2 (ja) 2012-10-19 2012-10-19 記録再生装置、誤り訂正方法および制御装置

Country Status (5)

Country Link
US (1) US20150200685A1 (ja)
JP (1) JP6052294B2 (ja)
KR (1) KR20150058315A (ja)
CN (1) CN104756092A (ja)
WO (1) WO2014061161A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180060084A (ko) 2016-11-28 2018-06-07 삼성전자주식회사 반도체 메모리 장치의 스크러빙 컨트롤러, 반도체 메모리 장치 및 반도체 메모리 장치의 동작 방법
US10908988B2 (en) * 2017-04-03 2021-02-02 Hitachi, Ltd. Storage apparatus
WO2019049224A1 (ja) * 2017-09-06 2019-03-14 株式会社日立製作所 分散ストレージシステム及び分散記憶制御方法
JP2022141093A (ja) * 2021-03-15 2022-09-29 株式会社東芝 磁気ディスク装置及びリード/ライト処理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006505035A (ja) * 2002-11-01 2006-02-09 インターナショナル・ビジネス・マシーンズ・コーポレーション ディスク・アレイ内に多重従属故障または任意の二重ディスク故障があっても使用することができる方法および手段
JP2011048742A (ja) * 2009-08-28 2011-03-10 Nec Computertechno Ltd ミラーリング制御装置、ミラーリング制御回路、ミラーリング制御方法およびそのプログラム
JP2011134307A (ja) * 2009-11-25 2011-07-07 Panasonic Corp 半導体記録装置及び半導体記録装置の制御方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3958220A (en) * 1975-05-30 1976-05-18 International Business Machines Corporation Enhanced error correction
US4849975A (en) * 1987-11-10 1989-07-18 International Business Machines Corporation Error correction method and apparatus
US5247523A (en) * 1989-07-12 1993-09-21 Hitachi, Ltd. Code error correction apparatus
US6101615A (en) * 1998-04-08 2000-08-08 International Business Machines Corporation Method and apparatus for improving sequential writes to RAID-6 devices
US6351838B1 (en) * 1999-03-12 2002-02-26 Aurora Communications, Inc Multidimensional parity protection system
US6434719B1 (en) * 1999-05-07 2002-08-13 Cirrus Logic Inc. Error correction using reliability values for data matrix
JP2001297038A (ja) * 2000-04-11 2001-10-26 Toshiba Corp データ記憶装置および記録媒体並びに記録媒体制御方法
US6675318B1 (en) * 2000-07-25 2004-01-06 Sun Microsystems, Inc. Two-dimensional storage array with prompt parity in one dimension and delayed parity in a second dimension
US6848022B2 (en) * 2002-10-02 2005-01-25 Adaptec, Inc. Disk array fault tolerant method and system using two-dimensional parity
KR20040066638A (ko) * 2003-01-20 2004-07-27 삼성전자주식회사 외부 저장 서브 시스템에서의 패리티 저장 방법 및에러블록 복구 방법
JP2005004290A (ja) * 2003-06-10 2005-01-06 Hitachi Ltd メモリ障害処理方式
US7134066B2 (en) * 2003-10-20 2006-11-07 International Business Machines Corporation Generalized parity stripe data storage array
US7788526B2 (en) * 2007-01-10 2010-08-31 International Business Machines Corporation Providing enhanced tolerance of data loss in a disk array system
US8041990B2 (en) * 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system
JP5166074B2 (ja) * 2008-02-29 2013-03-21 株式会社東芝 半導体記憶装置、その制御方法、および誤り訂正システム
CN101908376B (zh) * 2009-06-04 2014-05-21 威刚科技(苏州)有限公司 非挥发性存储装置及其控制方法
CN102034537A (zh) * 2009-09-25 2011-04-27 慧荣科技股份有限公司 数据存取装置及数据存取方法
CN102236585B (zh) * 2010-04-20 2015-06-03 慧荣科技股份有限公司 提升错误更正能力的方法以及相关的记忆装置及其控制器
US9176812B1 (en) * 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US9021336B1 (en) * 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006505035A (ja) * 2002-11-01 2006-02-09 インターナショナル・ビジネス・マシーンズ・コーポレーション ディスク・アレイ内に多重従属故障または任意の二重ディスク故障があっても使用することができる方法および手段
JP2011048742A (ja) * 2009-08-28 2011-03-10 Nec Computertechno Ltd ミラーリング制御装置、ミラーリング制御回路、ミラーリング制御方法およびそのプログラム
JP2011134307A (ja) * 2009-11-25 2011-07-07 Panasonic Corp 半導体記録装置及び半導体記録装置の制御方法

Also Published As

Publication number Publication date
KR20150058315A (ko) 2015-05-28
US20150200685A1 (en) 2015-07-16
WO2014061161A1 (ja) 2014-04-24
CN104756092A (zh) 2015-07-01
JP6052294B2 (ja) 2016-12-27

Similar Documents

Publication Publication Date Title
JP6882115B2 (ja) Ddr sdramインタフェイスのためのdram支援エラー訂正方法
US10191676B2 (en) Scalable storage protection
US7062704B2 (en) Storage array employing scrubbing operations using multiple levels of checksums
US7984325B2 (en) Storage control device, data recovery device, and storage system
US7017107B2 (en) Storage array employing scrubbing operations at the disk-controller level
US5379417A (en) System and method for ensuring write data integrity in a redundant array data storage system
US20090327803A1 (en) Storage control device and storage control method
EP2715550B1 (en) Apparatus and methods for providing data integrity
US8448047B2 (en) Storage device, storage control device, data transfer intergrated circuit, and storage control method
US9772900B2 (en) Tiered ECC single-chip and double-chip Chipkill scheme
US10606696B2 (en) Internally-generated data storage in spare memory locations
US20120324156A1 (en) Method and system of organizing a heterogeneous memory architecture
US9570197B2 (en) Information processing device, computer-readable recording medium, and method
KR20140013095A (ko) 데이터 무결성을 제공하기 위한 방법 및 장치
JP2009129070A (ja) フラッシュメモリ記憶装置の制御方法、その方法を用いたフラッシュメモリ記憶装置及びストレージシステム
US9063869B2 (en) Method and system for storing and rebuilding data
US11170869B1 (en) Dual data protection in storage devices
US20130179750A1 (en) Semiconductor storage device and method of controlling the same
US20090055681A1 (en) Intra-disk coding scheme for data-storage systems
JP6052294B2 (ja) 記録再生装置、誤り訂正方法および制御装置
US11030040B2 (en) Memory device detecting an error in write data during a write operation, memory system including the same, and operating method of memory system
JP2008217395A (ja) ディスクアレイ装置
JP2021521524A (ja) 共通の高ランダム・ビット・エラーおよび低ランダム・ビット・エラー修正ロジック
JP3676793B2 (ja) ディスクアレイ装置
JP3699473B2 (ja) ディスクアレイ装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161006

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161101

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161114

R150 Certificate of patent or registration of utility model

Ref document number: 6052294

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees