JP2021022324A - 記憶制御装置および記憶制御プログラム - Google Patents
記憶制御装置および記憶制御プログラム Download PDFInfo
- Publication number
- JP2021022324A JP2021022324A JP2019140134A JP2019140134A JP2021022324A JP 2021022324 A JP2021022324 A JP 2021022324A JP 2019140134 A JP2019140134 A JP 2019140134A JP 2019140134 A JP2019140134 A JP 2019140134A JP 2021022324 A JP2021022324 A JP 2021022324A
- Authority
- JP
- Japan
- Prior art keywords
- data
- data string
- error correction
- compressed
- string
- 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.)
- Pending
Links
- 238000012937 correction Methods 0.000 claims abstract description 73
- 238000000034 method Methods 0.000 claims abstract description 72
- 238000012545 processing Methods 0.000 claims abstract description 69
- 238000013144 data compression Methods 0.000 claims abstract description 66
- 230000006837 decompression Effects 0.000 claims description 51
- 230000015654 memory Effects 0.000 claims description 38
- 238000007726 management method Methods 0.000 claims 2
- 238000001514 detection method Methods 0.000 claims 1
- 238000007906 compression Methods 0.000 description 74
- 239000000872 buffer Substances 0.000 description 58
- 230000006835 compression Effects 0.000 description 58
- 238000010586 diagram Methods 0.000 description 18
- 238000004193 electrokinetic chromatography Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Landscapes
- Detection And Correction Of Errors (AREA)
Abstract
【課題】エラー訂正処理に要する処理負荷を低減する。【解決手段】データ圧縮部1aは、書き込みデータ列3から、書き込みデータ列3に含まれるデータ列3aとデータパターンが同じデータ列3bを検出した場合、データ列3bを圧縮した圧縮データ4と、データ列3aに基づくエラー訂正符号4aとを生成し、データ列3aと、エラー訂正符号4aが付加された圧縮データ4とを記憶装置2に書き込む。データ伸張部1bは、データ列3aと、エラー訂正符号4aが付加された圧縮データ4とを記憶装置2から読み出し、圧縮データ4に基づき、読み出したデータ列3aのエラー訂正処理をエラー訂正符号4aを用いて実行し、エラー訂正処理されたデータ列3aを用いてデータ列3bを伸張する。【選択図】図1
Description
本発明は、記憶制御装置および記憶制御プログラムに関する。
転送されるデータのエラーを検出する技術が一般的に知られている。例えば、パリティビットやCRC(Cyclic Redundancy Check)などのチェック符号を用いることで、データにエラーがあるか否かを検出できる。また、エラー訂正符号を用いた場合には、データにエラーがあるときに訂正処理が実行される。
また、訂正処理に関する次のような技術が提案されている。例えば、連続した同じデータを圧縮して記録媒体に記録し、データに付与されているエラーチェック訂正情報によってエラー訂正を行ったデータを記録媒体から読み出す。
また、データにロスレス圧縮を施してフラッシュメモリに格納し、ホストが取得しようとするデータにロスレス圧縮が施されたものに相当するデータをフラッシュメモリより読み出し伸張してホストへ出力する技術が提案されている。
近年、記憶装置の容量増加に伴って、書き込んだデータにエラーが発生することが多くなっている。特に、NAND型フラッシュメモリはエラーの発生頻度が比較的高いことが知られているが、NAND型フラッシュメモリでも記憶容量の拡張が進んでおり、それに伴ってエラーの発生回数が増大している。このようにエラーの発生数が多い場合には、読み出し時においてエラー訂正符号に基づくエラー訂正処理が実行される回数も増えるため、処理負荷が増大するという問題がある。
1つの側面では、本発明は、エラー訂正処理に要する処理負荷を低減した記憶制御装置および記憶制御プログラムを提供することを目的とする。
1つの案では、次のようなデータ圧縮部およびデータ伸張部を有する記憶制御装置が提供される。この記憶制御装置において、データ圧縮部は、記憶装置に対するデータ書き込み時において、書き込みが要求された書き込みデータ列から、書き込みデータ列に含まれる部分データ列とデータパターンが同じ同一データ列を検出した場合、同一データ列を圧縮した圧縮データと、部分データ列に基づくエラー訂正符号とを生成し、部分データ列と、エラー訂正符号が付加された圧縮データとを記憶装置に書き込む。また、データ伸張部は、記憶装置からのデータ読み出し時において、部分データ列と、エラー訂正符号が付加された圧縮データとを記憶装置から読み出し、圧縮データに基づき、読み出した部分データ列のエラー訂正処理をエラー訂正符号を用いて実行し、エラー訂正処理された部分データ列を用いて同一データ列を伸張する。
また、1つの案では、コンピュータに上記記憶制御装置と同様の処理を実行させる記憶制御プログラムが提供される。
1側面によれば、エラー訂正処理に要する処理負荷を低減できる。
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の記憶制御装置を示す図である。記憶制御装置1は、記憶装置2に対するデータの読み書きを制御する装置である。記憶装置2は、例えば、フラッシュメモリ等の不揮発性メモリである。なお、記憶装置2は、例えば、記憶制御装置1の内部に搭載されていてもよい。あるいは、記憶制御装置1と記憶装置2とが同一装置の内部に搭載されていてもよい。
[第1の実施の形態]
図1は、第1の実施の形態の記憶制御装置を示す図である。記憶制御装置1は、記憶装置2に対するデータの読み書きを制御する装置である。記憶装置2は、例えば、フラッシュメモリ等の不揮発性メモリである。なお、記憶装置2は、例えば、記憶制御装置1の内部に搭載されていてもよい。あるいは、記憶制御装置1と記憶装置2とが同一装置の内部に搭載されていてもよい。
記憶制御装置1は、データ圧縮部1aとデータ伸張部1bを有する。データ圧縮部1aおよびデータ伸張部1bは、例えば、それぞれ個別の、あるいは同一の電子回路として実装される。また、データ圧縮部1aとデータ伸張部1bの処理は、記憶制御装置1が備えるプロセッサが所定のプログラムを実行することで実現されてもよい。
データ圧縮部1aは、書き込みが要求された書き込みデータ列3を記憶装置2に書き込む際に、データパターンが同じデータ列についてデータの圧縮処理を行う。例えば、書き込みデータ列3には、データ列3a(部分データ列)と、このデータ列3aとデータパターンが同じデータ列3b(同一データ列)とが含まれるとする。
データ列3aは、データ圧縮部1aの処理により、そのまま記憶装置2に書き込まれる(ステップS1a)。このとき、データ列3aに基づくエラー訂正符号(ECC:Error Correction Code)4aは生成されない。
また、データ圧縮部1aは、書き込みデータ列3からデータ列3bを検出すると、データ列3bを圧縮した圧縮データ4と、データ列3bとデータパターンが同じデータ列3aに基づくエラー訂正符号4aとを生成する(ステップS1b)。圧縮データ4は、データ列3aに基づいてデータ列3bを伸張可能なデータを含む。例えば、圧縮データ4は、データ列3aとデータ列3bとの間の位置関係を示す情報を含む。データ圧縮部1aは、圧縮データ4にエラー訂正符号4aを付加し、エラー訂正符号4aが付加された圧縮データ4を記憶装置2に書き込む。
データ伸張部1bは、記憶装置2に書き込まれたデータを読み出す際に、データの伸張処理を行う。例えば、データ伸張部1bは、データ列3aを記憶装置2から読み出す(ステップS2a)。また、データ伸張部1bは、エラー訂正符号4aが付加された圧縮データ4を記憶装置2から読み出す。このとき、データ伸張部1bは、圧縮データ4に基づいて次のような処理を行う。
データ伸張部1bは、記憶装置2から読み出されたデータ列3aのエラー訂正処理を、エラー訂正符号4aを用いて実行する(ステップS2b)。このエラー訂正処理では、所定ビット数以下のエラーが検出された場合、そのエラーが訂正される。データ伸張部1bは、エラー訂正処理されたデータ列3aを用いて、データ列3bを伸張する(ステップS2c)。例えば、データ伸張部1bは、圧縮データ4に基づき、エラー訂正処理されたデータ列3aをコピーすることで、伸張されたデータ列3bを生成する。データ列3bは、エラー訂正処理されたデータ列3aを用いて伸張されるので、データ列3aにエラーが発生している場合であっても、データ列3aと同様にエラーが訂正された状態になる。
このように、記憶制御装置1は、データパターンが同じデータ列3a、3bについて、その両方にエラー訂正符号を付加して記憶装置2に書き込むのではなく、一方のデータ列3bの圧縮データ4にエラー訂正符号を付加して記憶装置2に書き込む。これにより、記憶制御装置1は、データ列3aを読み出したときにはデータ列3aのエラー訂正処理を実行せず、圧縮データ4をエラー訂正符号4aとともに読み出したときに、そのエラー訂正符号4aを用いてデータ列3aのエラー訂正処理を実行する。
このように、データパターンが同じデータ列3a、3bについて、1回しかエラー訂正処理が実行されない。したがって、エラー訂正処理の実行回数が削減され、エラー訂正処理に要する処理負荷を低減できる。
[第2の実施の形態]
次に、上記の記憶装置2の一例としてNAND型フラッシュメモリを備えるストレージシステムについて説明する。
次に、上記の記憶装置2の一例としてNAND型フラッシュメモリを備えるストレージシステムについて説明する。
図2は、第2の実施の形態のストレージシステムの構成例を示す図である。図2に示すストレージシステムは、ストレージ装置100およびホスト装置400を含む。ストレージ装置100とホスト装置400とは、例えば、ファイバチャネル(FC:Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して接続される。
ストレージ装置100は、CE(Controller Enclosure)200およびDE(Device Enclosure)300を有する。CE200は、CM(Controller Module)210を有する。DE300は、複数の記憶装置を搭載する。DE300は、記憶装置としてHDD(Hard Disk Drive)を備えたディスクアレイ装置である。なお、DE300に搭載される記憶装置は、SSD(Solid State Drive)などの他の種類の記憶装置であってもよい。CM210は、ホスト装置400からの要求に応じて、DE300に搭載されたHDDに対するアクセスを制御する。
次に、CMのハードウェアについて、説明する。
図3は、CMのハードウェア例を示す図である。CM210は、CPU(Central Processing Unit)211、RAM212、メモリコントローラ213、NANDフラッシュ214、PCIe(Peripheral Components Interconnect Express)スイッチ215、CA(Channel Adapter)216、DI(Device Interface)217、およびNANDコントローラ220を有する。
図3は、CMのハードウェア例を示す図である。CM210は、CPU(Central Processing Unit)211、RAM212、メモリコントローラ213、NANDフラッシュ214、PCIe(Peripheral Components Interconnect Express)スイッチ215、CA(Channel Adapter)216、DI(Device Interface)217、およびNANDコントローラ220を有する。
CPU211は、CM210の情報処理を制御する。CPU211は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。
RAM212は、CM210の主記憶装置である。RAM212は、CPU211に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM212は、CPU211による処理に用いる各種データを記憶する。
RAM212は、CM210の主記憶装置である。RAM212は、CPU211に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM212は、CPU211による処理に用いる各種データを記憶する。
メモリコントローラ213は、CPU211またはNANDコントローラ220の指示により、RAM212に格納されている各種データの読み出し、または、RAM212に対する各種データの書き込みを行う。
NANDフラッシュ214は、NAND型のフラッシュメモリである。NANDフラッシュ214は、例えば、ストレージ装置100が停電により停止したときに、RAM212に格納されているデータをバックアップする。また、NANDフラッシュ214は、CM210の補助記憶装置として使用されてもよい。
PCIeスイッチ215は、CPU211とCA216およびDI217との間で、データを送受信する。CA216は、ホスト装置400と通信するためのインタフェースである。DI217は、DE300と通信するためのインタフェースである。
NANDコントローラ220は、DMAC(Direct Memory Access Controller)221およびRAM222を有する。DMAC221は、RAM212に格納されたデータをNANDフラッシュ214に書き込む書き込み動作や、NANDフラッシュ214に格納されたデータを読み出してRAM212に書き込む読み出し動作を実行する。DMAC221は、このような書き込み動作や読み出し動作を、CPU211からの指示に応じてDMAにより実行する。RAM222は、このような書き込み動作や読み出し動作の実行時において、書き込み対象のデータや読み出し対象のデータなどを一時的に記憶する。
なお、NANDフラッシュ214は、図1に示した記憶装置2の一例である。また、NANDコントローラ220のDMAC221は、図1に示したデータ圧縮部1aおよびデータ伸張部1bの一例である。
次に、NANDコントローラが有する機能について、説明する。
図4は、NANDコントローラの機能例を示す図である。NANDコントローラ220内のDMAC221は、インタフェース部221a、データ圧縮部221b、データ伸張部221cおよびメモリアクセス部221dを有する。また、NANDコントローラ220内のRAM222は、バッファ222a、222bおよびLUT(Look Up Table)記憶部222cを有する。
図4は、NANDコントローラの機能例を示す図である。NANDコントローラ220内のDMAC221は、インタフェース部221a、データ圧縮部221b、データ伸張部221cおよびメモリアクセス部221dを有する。また、NANDコントローラ220内のRAM222は、バッファ222a、222bおよびLUT(Look Up Table)記憶部222cを有する。
インタフェース部221aは、CPU211またはメモリコントローラ213と通信するための通信インタフェースである。データ圧縮部221bは、NANDフラッシュ214に対して書き込みが要求されたデータを圧縮する。データ伸張部221cは、NANDフラッシュ214から読み出したデータを伸張する。また、データ伸張部221cは、NANDフラッシュ214から読み出したデータに対してエラーチェックを行い、所定ビット数以下のエラーが検出された場合にはエラー訂正を行う。
メモリアクセス部221dは、NANDフラッシュ214に対するアクセス制御を行う。例えば、メモリアクセス部221dは、NANDフラッシュ214に対して、ページ単位でデータの書き込み処理を行い、またNANDフラッシュ214からデータを読み出す場合は、ページ単位でデータの読み出し処理を行う。
なお、DMAC221は、例えば、プロセッサとメモリを備えていてもよい。この場合、インタフェース部221a、データ圧縮部221b、データ伸張部221c、メモリアクセス部221dの少なくとも1つの処理は、プロセッサがメモリ内の所定のプログラムを実行することで実現されてもよい。
バッファ222aは、NANDフラッシュ214への書き込み処理時において、圧縮処理前の書き込みデータを一時的に記憶する。また、バッファ222aは、NANDフラッシュ214からの読み出し処理時において、伸張処理後の読み出しデータを一時的に記憶する。
バッファ222bは、NANDフラッシュ214への書き込み処理時において、圧縮処理後の書き込みデータを一時的に記憶する。また、バッファ222bは、NANDフラッシュ214からの読み出し処理時において、伸張処理前の読み出しデータを一時的に記憶する。
LUT記憶部222cは、NANDフラッシュ214への書き込み処理時において、圧縮処理のために使用される圧縮用LUTを記憶する。また、LUT記憶部222cは、NANDフラッシュ214からの読み出し処理時において、伸張処理のために使用される伸張用LUTを記憶する。
ところで、本実施の形態において、NANDコントローラ220は、書き込み対象のデータを圧縮してNANDフラッシュ214に書き込む。データの圧縮では、データパターンが同じデータ列についてはそのうち1つだけがNANDフラッシュ214に書き込まれ、他のデータ列については圧縮データに変換されてNANDフラッシュ214に書き込まれる。これにより、同じデータパターンを有するデータ列が何度もNANDフラッシュ214に書き込まれないようになり、その結果として書き込み回数が低減され、NANDフラッシュ214を長寿命化できる。
また、NAND型フラッシュメモリは、書き込み時におけるビットエラーの発生頻度が比較的高い。このため、NAND型フラッシュメモリの記憶容量が大きくなるほど、読み出し時においてエラーが検出され、その訂正が実行される回数が多くなってしまう。その結果、エラー訂正に要する処理負荷が大きくなり、読み出し速度を低下させてしまう。
そこで、NANDコントローラ220は、圧縮データに圧縮元データのECCを含めて記録し、圧縮元データ自体にはECCを付加しないようにすることで、読み出し時にECCを用いたエラーチェックの実行回数を削減する。さらに、NANDコントローラ220は、同じデータパターンに対応する圧縮データのうち、初出の圧縮データにのみECCを含める。これにより、読み出し時には同じデータパターンのデータ列について1回だけエラーチェックが実行されるようにし、エラーチェックの実行回数を削減する。このようにしてエラーチェックの実行回数を削減することで、エラーが検出され、その訂正が実行される回数も削減して、エラー訂正に要する処理負荷を軽減する。
次に、図5〜図9を用いて、NANDフラッシュ214に対する書き込み処理について説明する。
図5は、圧縮用LUTの一例を示す図である。圧縮用LUT222c1は、データパターン、アドレス、圧縮フラグの各項目を有する。
図5は、圧縮用LUTの一例を示す図である。圧縮用LUT222c1は、データパターン、アドレス、圧縮フラグの各項目を有する。
本実施の形態において、NANDコントローラ220は、一定サイズのデータブロック単位でデータ圧縮を行う。データパターンの項目には、データブロックがとり得るすべてのデータパターンが、値の小さい順に、書き込み処理の開始時に予め登録される。なお、図5では説明を簡単にするために、データブロックのサイズが4ビットの場合について例示しているが、実際には、データブロックは例えば2バイトのサイズを有する。
アドレスの項目には、書き込み対象のデータ群の中に存在する、該当データパターンのデータブロックのうち、初出のデータブロックのアドレスが登録される。圧縮フラグの項目には、書き込み対象のデータ群の中に存在する、該当データパターンのデータブロックが圧縮されたか否かを示すフラグ情報が登録される。本実施の形態では、該当するデータブロックが未圧縮の場合、圧縮フラグは0に設定され、該当するデータブロックが圧縮されている場合、圧縮フラグは1に設定される。
図6は、圧縮処理例を示す第1の図である。DMAC221のインタフェース部221aは、RAM212から転送される、NANDフラッシュ214に対する書き込み対象のデータブロックを、バッファ222aに格納する。本実施の形態では例として、データ圧縮部221bは、バッファ222aに蓄積された一定数のデータブロックを単位として圧縮処理を実行する。例えば、バッファ222aに書き込み対象のデータブロックが一定数蓄積されたことを契機として、これらのデータブロックに対する圧縮処理が実行される。以下、このような圧縮処理の単位となる一定数(N個)のデータブロックを「未圧縮データ群」と記載する。
図6のバッファ222aの領域に記載した「アドレス」は、未圧縮データ群g1におけるデータブロックの位置(先頭からのオフセット)を示す。このように、以下の説明では「アドレス」を未圧縮データ群g1における位置を示す値として用いるが、「アドレス」は書き込み対象となるデータブロックを識別できればこの例に限らない。例えば、RAM212上の一定サイズの連続領域を単位として圧縮処理が実行される場合、「アドレス」はRAM212上のアドレスを示してもよい。また、例えば、NANDフラッシュ214がRAM212のバックアップ用途で使用される場合、圧縮処理はRAM212上のバックアップ対象領域を対象として一度に実行されてもよい。この場合も、「アドレス」はRAM212上のアドレスを示してもよい。
データ圧縮部221bは、バッファ222a内の未圧縮データ群g1のデータブロックを先頭から順に選択していきながら、データブロックを圧縮するか否かを判定する。そして、データ圧縮部221bは、非圧縮のデータブロック、またはデータブロックを圧縮した圧縮データを、バッファ222bに格納する。なお、図示しないが、バッファ222bは、データ領域とECC領域とに分割されており、データブロックまたは圧縮データはデータ領域に格納される。
図6において、データ圧縮部221bは例えば、アドレス11、12、13のデータブロックd11、d12、d13について、圧縮用LUT222c1を参照しながら順に圧縮するか否かを判定する。図6の例では、圧縮用LUT222c1には、データブロックd11、d12、d13の各データパターンに対してアドレスが登録されていなかったとする。この場合、データ圧縮部221bは、データブロックd11、d12、d13を順にバッファ222bのデータ領域に格納する。すなわち、データブロックd11、d12、d13は非圧縮で書き込まれる。これとともに、データ圧縮部221bは、圧縮用LUT222c1におけるデータブロックd11、d12、d13のデータパターンに対して、それぞれアドレス11、12、13を登録する。
図7は、圧縮処理例を示す第2の図である。図7では、図6に示した処理の後、アドレス25のデータブロックd25が圧縮処理の対象になったとする。このとき、圧縮用LUT222c1においては、データブロックd25のデータパターン0011に対してアドレス11が登録されている(図6参照)。このため、データ圧縮部221bは、アドレス25のデータブロックd25はアドレス11のデータブロックd11と同一であり、圧縮すべきデータであると判定する。
この場合、データ圧縮部221bは次に、アドレス25を先頭とする連続する複数のデータブロックのデータパターンが、アドレス11を先頭とする連続する複数のデータブロックのデータパターンと一致するかを判定する。図7の例では、アドレス25〜27のデータブロックd25〜d27のデータパターンが、アドレス11〜13のデータブロックd11〜d13のデータパターンと一致したとする。この場合、データ圧縮部221bは、データパターンが一致したアドレス25〜27のデータブロックd25〜d27の範囲について1つの圧縮データdc1を生成し、バッファ222bのデータ領域に格納する。
図7に示すように、圧縮データdc1は、距離、サイズ、ECCを含む。距離は、アドレス11〜13のデータ範囲と、そのデータ範囲とデータパターンが一致したアドレス25〜27のデータ一致範囲との間がどれだけ離れているかを示す。具体的には、距離は、データ一致範囲の先頭のデータブロックd25のアドレス25から、データ範囲の先頭のデータブロックd11のアドレス11を減算した差分値として求められる。
また、サイズは、データパターンが一致したデータ範囲のサイズを示す。ECCは、そのデータ範囲に含まれるデータブロックd11〜d13(または一致範囲に含まれるデータブロックd25〜d27)に基づいて算出されるエラーチェックおよび訂正用の符号である。
このような圧縮データdc1の生成により、データブロックd25〜d27は距離およびサイズの情報に変換されるので、NANDフラッシュ214に書き込まれるデータ量が削減される。また、データブロックd11〜d13については、対応するECCが算出されない。その代わり、データブロックd11〜d13に対応するECCは、それらと同じデータパターンのデータブロックd25〜d27が初めて現れたときに、データブロックd25〜d27とで共通のECCとして算出される。そして、そのECCはデータブロックd25〜d27に対応する圧縮データdc1に記録される。これにより、同じデータパターンのデータブロックについてはECCが重複しないようにNANDフラッシュに書き込まれるので、ECCの書き込みデータ量も削減される。さらに、同じデータパターンのデータブロックについてはECCが重複しないように生成されるので、圧縮処理におけるECCの算出負荷も低減される。
データ圧縮部221bは、圧縮データdc1をバッファ222bに格納するとともに、圧縮用LUT222c1におけるデータブロックd11〜d13のデータパターンにそれぞれ対応する圧縮フラグを、1に更新する。これにより、データブロックd11、d12、d13のデータパターン0011、1010、1110については圧縮済みかつECCを算出済みであることが記録される。
この図7の例のように、書き込み処理では、あるデータ範囲と同じデータパターンを有するデータ一致範囲が出現したとき、データ一致範囲のデータ圧縮が行われるとともに、元のデータ範囲のデータに対応するECCが生成される。このような処理により、同じデータパターンのデータブロックまたはデータブロック群の間で重複してECCが生成されないようにし、ECCの生成処理効率を向上させる。
ただし、次の図8の例のように、元のデータ範囲と同じデータパターンを有するデータ一致範囲が複数回出現した場合には、データ一致範囲の圧縮処理とともにその都度ECCを生成すると、同一のECCが複数生成されて処理が無駄になる。そこで、データ圧縮部221bは、初出のデータ一致範囲の圧縮処理時にのみECCを生成するようにする。
図8は、圧縮処理例を示す第3の図である。図8では、図7に示した処理の後、アドレス51のデータブロックd51が圧縮処理の対象になったとする。このとき、圧縮用LUT222c1においては、データブロックd51のデータパターン0011に対してアドレス11が登録されている(図6参照)。このため、データ圧縮部221bは、アドレス51のデータブロックd51はアドレス11のデータブロックd11と同一であり、圧縮すべきデータであると判定する。
この場合、データ圧縮部221bは次に、アドレス51を先頭とする連続する複数のデータブロックのデータパターンが、アドレス11を先頭とする連続する複数のデータブロックのデータパターンと一致するかを判定する。図8の例では、アドレス51〜53のデータブロックd51〜d53のデータパターンが、アドレス11〜13のデータブロックd11〜d13のデータパターンと一致したとする。この場合、データ圧縮部221bは、データパターンが一致したアドレス51〜53のデータブロックd51〜d53の範囲について1つの圧縮データdc2を生成し、バッファ222bのデータ領域に格納する。
ここで、図7に示した処理により、圧縮用LUT222c1におけるデータブロックd11〜d13のデータパターンにそれぞれ対応する圧縮フラグは、すべて1となっている。このため、データ圧縮部221bは、データブロックd11〜d13に対応するECCはすでに算出・記録済みであるので、そのECCを算出する必要はないと判定する。この場合、データ圧縮部221bは、圧縮データdcに距離とサイズのみ含め、ECCを含めない。なお、距離は、データ一致範囲の先頭のデータブロックd51のアドレス51から、元のデータ範囲の先頭のデータブロックd11のアドレス11を減算した差分値として求められる。サイズは図7の圧縮データdc1と同様に、データパターンが一致したデータ範囲のサイズを示す。
このように元のデータ範囲と同じデータパターンのデータ一致範囲が2回以上出現した場合には、2回目以降のデータ一致範囲に対応する圧縮データにはECCが記録されない。これにより、同じデータパターンのデータブロックについてはECCが重複しないようにNANDフラッシュに書き込まれるので、ECCの書き込みデータ量も削減される。また、同じデータパターンのデータブロックについてはECCが重複しないように生成されるので、圧縮処理におけるECCの算出負荷も低減される。さらに、後述するように、伸張処理時におけるECCを用いたエラーチェック処理の実行回数も低減され、その処理負荷が軽減される。
図9は、圧縮済みデータ群の構成例を示す図である。図9は、1つの未圧縮データ群g1に対応する圧縮済みデータ群g2を示している。未圧縮データ群g1に対する圧縮処理によって圧縮済みデータ群g2が生成され、メモリアクセス部221dに対して圧縮済みデータ群g2のNANDフラッシュ214に対する書き込みが要求される。この圧縮済みデータ群g2は、開始ヘッダ、データ部、ECC部および終了ヘッダを有する。
データ部は、データブロックまたは圧縮データを含む。データ部に含まれるデータは、圧縮処理によってバッファ222bのデータ領域に格納されるデータブロックまたは圧縮データである。一方、ECC部は、ECCデータを含む。各ECCデータはアドレスとECCを含む。
データ圧縮部221bは、未圧縮データ群g1内の各データブロックについて圧縮するか否かを判定し、必要な圧縮データをすべて生成した後、ECCが生成されていないデータブロックを判定する。この判定では、圧縮用LUT222c1の圧縮フラグが0のデータパターンを有するデータブロックが抽出される。データ圧縮部221bは、抽出されたデータブロックそれぞれについてのECCを算出し、算出したECCとデータブロックのアドレスとを含むECCデータをバッファ222bのECC領域に格納する。
さらに、データ圧縮部221bは、生成された圧縮データそれぞれについてのECCを算出する。データ圧縮部221bは、算出したECCと、圧縮データの算出元となったデータブロック(データ一致範囲の先頭データブロック)のアドレスとを含むECCデータを、バッファ222bのECC領域に格納する。
圧縮済みデータ群g2のECC部は、このようにしてバッファ222bに格納されたECCデータを含んでいる。例えば図9において、ECCデータe1は、データブロックd15のアドレスと、データブロックd15に基づいて算出されたECCとを含む。このようなECCデータe1がNANDフラッシュ214に記録されることで、圧縮されなかったデータブロックd15をNANDフラッシュ214から読み出したときにデータブロックd15のエラーチェックを実行できるようになる。したがって、圧縮されなかったデータブロックの読み出し時の信頼性を高めることができる。
また、ECCデータe2は、圧縮データdc1に対応するものであるとする。この場合、ECCデータe1のECCは、圧縮データdc1に基づいて算出された値である。また、ECCデータe1のアドレスは、圧縮データdc1の元データであるデータブロックd25〜d27のうち、先頭のデータブロックd25のアドレスを示す。このようなECCデータe2がNANDフラッシュ214に記録されることで、圧縮データdc1をNANDフラッシュ214から読み出したときに圧縮データdc1のエラーチェックを実行できるようになる。したがって、読み出し時における圧縮データdc1自体の信頼性を高めることができる。
開始ヘッダは、圧縮済みデータ群g2の開始位置を示すヘッダであり、終了ヘッダは、圧縮済みデータ群g2の終了位置を示すヘッダである。データ圧縮部221bは、未圧縮データ群g1の圧縮処理が完了すると、バッファ222aのデータ領域に格納されたデータ部のデータと、ECC領域に格納されたECC部のデータとに、開始ヘッダおよび終了ヘッダを付加する。データ圧縮部221bは、このようにして生成した圧縮済みデータ群g2についてのNANDフラッシュ214への書き込みを、メモリアクセス部221dに要求する。
次に、図10〜図13を用いて、NANDフラッシュ214からの読み出し処理について説明する。
図10は、伸張用LUTの一例を示す図である。伸張用LUT222c2は、データパターン、アドレス、伸張データサイズの各項目を有する。
図10は、伸張用LUTの一例を示す図である。伸張用LUT222c2は、データパターン、アドレス、伸張データサイズの各項目を有する。
圧縮用LUT222c1と同様に、伸張用LUT222c2のデータパターンの項目には、データブロックがとり得るすべてのデータパターンが、値の小さい順に読み出し処理の開始時に予め登録される。初期状態では、アドレスおよび伸張データサイズの項目はすべてNULLとなっている。アドレスの項目には、該当するデータパターンのデータブロックを用いた伸張処理に伴ってそのデータブロックのエラーチェックが行われた場合に、そのデータブロックのアドレスが登録される。伸張データサイズの項目には、該当するデータパターンのデータブロックを起点としてどのデータブロックまでエラーチェック済みかを示すサイズが登録される。ここでは例として、伸張データサイズはデータブロック数として登録されるものとする。
図11は、伸張処理例を示す第1の図である。DMAC221のメモリアクセス部221dは、NANDフラッシュ214から読み出したデータをバッファ222bに格納する。データ伸張部221cは、バッファ222bに、1つの未圧縮データ群g1に対応する圧縮済みデータ群g2がバッファ222bに蓄積されると、その圧縮済みデータ群g2に対する伸張処理を開始する。なお、図11では説明を簡単にするために、バッファ222bに格納された圧縮済みデータ群g2のうちデータ部のみを示している。
データ伸張部221cは、バッファ222b内の圧縮済みデータ群g2のデータ部からデータブロックまたは圧縮データを先頭から順に選択していく。データブロックを選択した場合、データ伸張部221cは、データブロックをバッファ222aに格納する。一方、圧縮データを選択した場合、データ伸張部221cは、圧縮データを伸張し、伸張されたデータブロックをバッファ222aに格納する。これにより、バッファ222aには、圧縮済みデータ群g2に対応する未圧縮データ群g1のデータブロックが、先頭アドレスから順に蓄積されていく。
図11の例では、データ伸張部221cは、バッファ222bからデータブロックd11、d12、d13を読み出し、それぞれアドレス11、12、13のデータブロックとしてバッファ222aに格納する。
図12は、伸張処理例を示す第2の図である。図12では、図11に示した処理の後、データ伸張部221cは、圧縮済みデータ群g2のデータ部から圧縮データdc1を選択したとする。データ伸張部221cは、圧縮データdc1に対応するECCデータを用いて圧縮データdc1のエラーチェックを行った後、圧縮データdc1に基づいて、圧縮元となったデータ範囲を特定する。
図12の例では、圧縮データdc1の距離とサイズから、圧縮元のデータ範囲はアドレス11〜13のデータブロックd11〜d13の範囲と特定される。すると、データ伸張部221cは、伸張用LUT222c2を参照し、データブロックd11のデータパターンに対してアドレスが登録されているかを判定する。図12では当該アドレスが登録されていなかったとする。この場合、データブロックd11のエラーチェックが未実行であり、エラーチェックが必要と判定される。
データ伸張部221cは、圧縮データdc1に含まれるECCを用いてデータブロックd11〜d13のエラーチェックを行う。エラーが検出されなかった場合、データ伸張部221cは、データブロックd11、d12、d13をそれぞれアドレス25、26、27のデータブロックd25、d26、d27としてバッファ222aにコピーする。また、エラーが検出された場合、データ伸張部221cは、データブロックd11〜d13のエラー訂正を行う。エラー訂正できた場合、データ伸張部221cは、エラー訂正後のデータブロックd11、d12、d13をそれぞれアドレス25、26、27のデータブロックd25、d26、d27としてバッファ222aにコピーする。また、データ伸張部221cは、伸張用LUT222c2におけるデータブロックd11、d12、d13のデータパターンに対して、それぞれアドレス11、12、13を登録する。
前述のように、データブロックd11〜d13の書き込み時には、データブロックd11〜d13のECCは生成されない。そして、データブロックd11〜d13とデータパターンが一致するデータブロックd25〜d27が現れたときに、データブロックd25〜d27に対応する圧縮データdc1にデータブロックd11〜d13のECCが登録される。このように、圧縮処理に付随してECCの生成を行うようにしたことで、読み出し時におけるECCを用いたエラーチェックの処理回数を低減でき、その処理負荷を軽減できる。
すなわち、互いにデータパターンが同じデータブロックd11〜d13およびデータブロックd25〜d27については、データブロックd25〜d27の伸張時にのみエラーチェックが行われる。これにより、同じデータパターンのデータブロックまたはデータブロック群の間で重複してエラーチェックが行われないようになる。その結果、読み出し時におけるエラーチェックの処理回数を削減できる。エラーチェックの処理回数が削減されることで、エラーチェックによってビットエラーが検出され、その訂正処理が実行される回数も削減される。したがって、エラーの訂正処理負荷を軽減できる。
図13は、伸張処理例を示す第3の図である。図13では、図12に示した処理の後、データ伸張部221cは、圧縮済みデータ群g2のデータ部から圧縮データdc2を選択したとする。データ伸張部221cは、圧縮データdc2に対応するECCデータを用いてエラーチェックを行った後、圧縮データdc2に基づいて、圧縮元となったデータ範囲を特定する。
図13の例では、圧縮データdc2の距離とサイズから、圧縮元のデータ範囲はアドレス11〜13のデータブロックd11〜d13の範囲と特定される。また、圧縮データdc2にはECCが含まれておらず、さらに、伸張用LUT222c2においては、データブロックd11、d12、d13の各データパターンに対してアドレス11、12、13がすでに登録されている。このことから、圧縮データdc2から伸張されるデータは、すでにエラーチェックを実行済みの状態でバッファ222aに格納されている。このため、データ伸張部221cは、データブロックd11、d12、d13を、エラーチェックを行うことなく、それぞれアドレス51、52、53のデータブロックd51、d52、d53としてバッファ222aにコピーする。
このように、圧縮元のデータ範囲とデータパターンが一致するデータ一致範囲が2箇所以上存在する場合には、初出のデータ一致範囲についての伸張処理時にのみエラーチェックが実行される。これにより、同じデータパターンのデータブロックまたはデータブロック群の間では、エラーチェックが1回だけ行われるようになる。その結果、読み出し時におけるエラーチェックの処理回数を削減でき、その処理負荷を軽減できる。エラーチェックの処理回数が削減されることで、エラーチェックによってビットエラーが検出され、その訂正処理が実行される回数も削減される。したがって、エラーの訂正処理負荷を軽減できる。処理負荷の軽減により、NANDフラッシュ214からのデータ読み出しの信頼性を維持しつつ、データ読み出し速度を向上させることができる。
次に、NANDフラッシュ214に対する書き込み処理について、フローチャートを用いて説明する。図14、図15は、書き込み処理の例を示すフローチャートである。
(S11)インタフェース部221aの処理により、書き込みが要求された一定数のデータブロック(未圧縮データ群)がバッファ222aに蓄積される。すると、データ圧縮部221bは、圧縮用LUT222c1を生成してLUT記憶部222cに登録する。圧縮用LUT222c1には、全データパターンが登録され、アドレスおよび圧縮フラグの項目にはすべてNULLが設定される。また、データ圧縮部221bは、アドレスについての変数nを1に初期化する。
(S11)インタフェース部221aの処理により、書き込みが要求された一定数のデータブロック(未圧縮データ群)がバッファ222aに蓄積される。すると、データ圧縮部221bは、圧縮用LUT222c1を生成してLUT記憶部222cに登録する。圧縮用LUT222c1には、全データパターンが登録され、アドレスおよび圧縮フラグの項目にはすべてNULLが設定される。また、データ圧縮部221bは、アドレスについての変数nを1に初期化する。
(S12)データ圧縮部221bは、バッファ222a内の未圧縮データ群におけるアドレスnのデータブロックを選択する。
(S13)データ圧縮部221bは、圧縮用LUT222c1を参照し、ステップS12で選択したデータブロックのデータパターンに対してアドレスが登録されているか否かを判定する。アドレスが圧縮用LUT222c1に登録されている場合は、ステップS20へ処理が進み、登録されていない場合はステップS14へ処理が進む。
(S13)データ圧縮部221bは、圧縮用LUT222c1を参照し、ステップS12で選択したデータブロックのデータパターンに対してアドレスが登録されているか否かを判定する。アドレスが圧縮用LUT222c1に登録されている場合は、ステップS20へ処理が進み、登録されていない場合はステップS14へ処理が進む。
(S14)データ圧縮部221bは、圧縮用LUT222c1に対し、ステップS12で選択したデータブロックのデータパターンに対応するアドレスとして、アドレスnを登録する。また、データ圧縮部221bは、当該データパターンに対応する圧縮フラグを0に設定する。
(S15)データ圧縮部221bは、ステップS12で選択したアドレスnのデータブロックをバッファ222aから読み出して、バッファ222b(出力側バッファ)のデータ領域に格納する。
(S16)データ圧縮部221bは、変数nに1を加算する。そして、処理をステップS17に進める。
(S17)データ圧縮部221bは、未圧縮データ群に含まれる全データブロックのアドレスを選択したか否かを判定する。変数nが所定値(未圧縮データ群に含まれるデータブロックの個数N)に達した場合、全アドレスを選択したと判定される。全データブロックのアドレスを選択した場合はステップS18へ処理が進み、選択していない場合はステップS12へ処理が戻る。
(S17)データ圧縮部221bは、未圧縮データ群に含まれる全データブロックのアドレスを選択したか否かを判定する。変数nが所定値(未圧縮データ群に含まれるデータブロックの個数N)に達した場合、全アドレスを選択したと判定される。全データブロックのアドレスを選択した場合はステップS18へ処理が進み、選択していない場合はステップS12へ処理が戻る。
(S18)データ圧縮部221bは、圧縮用LUT222c1を参照して、圧縮フラグが0のデータブロックを抽出する。該当データブロックが抽出された場合、データ圧縮部221bは、各データブロックについてのECCを算出する。データ圧縮部221bは、算出されたECCと算出元のデータブロックのアドレスとを含む、各データブロックについてのECCデータを生成し、バッファ222b(出力側バッファ)のECC部に格納する。
(S19)データ圧縮部221bは、バッファ222bのデータ部およびECC部のデータに開始ヘッダおよび終了ヘッダを付加して圧縮済みデータ群を生成する。データ圧縮部221bは、生成した圧縮済みデータ群をNANDフラッシュ214に書き込むようにメモリアクセス部221dに指示する。メモリアクセス部221dは、書き込みが指示されたデータをバッファ222bから読み出し、ページ単位でNANDフラッシュ214に書き込む。
以下、図15を用いて説明を続ける。
(S20)データ圧縮部221bは、圧縮用LUT222c1から、ステップS12で選択したデータブロックのデータパターンに対応付けられているアドレス(アドレスrとする)を読み出す。データ圧縮部221bは、アドレスnを先頭とする連続する複数のデータブロックのデータパターンが、アドレスrを先頭とする連続するデータブロックのデータパターンと一致するかを判定する。ここでは、mブロック分の範囲が一致したとする(ただし、mは1以上の整数)。すなわち、アドレスrを先頭とするm個のデータブロック(データ範囲)のデータパターンが、アドレスnを先頭とするm個のデータブロック(データ一致範囲)と一致したとする。
(S20)データ圧縮部221bは、圧縮用LUT222c1から、ステップS12で選択したデータブロックのデータパターンに対応付けられているアドレス(アドレスrとする)を読み出す。データ圧縮部221bは、アドレスnを先頭とする連続する複数のデータブロックのデータパターンが、アドレスrを先頭とする連続するデータブロックのデータパターンと一致するかを判定する。ここでは、mブロック分の範囲が一致したとする(ただし、mは1以上の整数)。すなわち、アドレスrを先頭とするm個のデータブロック(データ範囲)のデータパターンが、アドレスnを先頭とするm個のデータブロック(データ一致範囲)と一致したとする。
(S21)データ圧縮部221bは、圧縮用LUT222c1を参照し、データ範囲またはデータ一致範囲に含まれるすべてのデータブロックのデータパターンについて、圧縮フラグが1かを判定する。圧縮フラグが0のデータパターンが1つでもある場合、そのデータパターンに対応する既出データブロックが圧縮対象となっておらず、ECCが未算出と判定される。この場合、ECCの算出が必要となるので、処理がステップS22に進められる。一方、圧縮フラグが0のデータパターンがない場合、そのデータパターンに対応する既出データブロックはすべて圧縮対象となっており、ECCが算出済みと判定される。この場合、ステップS22、S23の処理はスキップされ、処理がステップS24に進められる。
未圧縮データ群から同じデータ範囲とデータパターンが一致するデータ一致範囲が2回目以上検出された場合、ステップS21でYesと判定される。この場合、初出のデータ一致範囲についての圧縮処理により、ステップS20で検出されたデータ範囲内の全データパターンについて、ECCが算出済みである。このため、データ圧縮部221bは、ステップS22のECCの算出をスキップする。これにより、初出のデータ一致範囲についてのみ、圧縮データにECCが設定されるようになる。
(S22)データ圧縮部221bは、ステップS20で検出されたデータ範囲またはデータ一致範囲の全データブロックに基づいて、ECCを算出する。
(S23)データ圧縮部221bは、圧縮用LUT222c1において、データ範囲またはデータ一致範囲に含まれるすべてのデータブロックのデータパターンに対応する圧縮フラグを1に設定する。
(S23)データ圧縮部221bは、圧縮用LUT222c1において、データ範囲またはデータ一致範囲に含まれるすべてのデータブロックのデータパターンに対応する圧縮フラグを1に設定する。
(S24)データ圧縮部221bは、データ一致範囲に対応する圧縮データを生成し、バッファ222b(出力側バッファ)のデータ領域に格納する。このとき、圧縮データには、距離として(n−r)が登録され、サイズとしてmが設定される。また、ステップS22、S23が実行された場合、圧縮データにはステップS22で算出されたECCが設定される。
(S25)データ圧縮部221bは、生成した圧縮データに対応するECCを算出し、この圧縮データに対応するECCデータを生成して、バッファ222b(出力側バッファ)のECC領域に格納する。ECCデータには、算出されたECCとアドレスnとが設定される。
(S26)データ圧縮部221bは、変数nにmを加算して、変数nを更新する。この後、処理はステップS17に進められる。
次に、NANDフラッシュ214からの読み出し処理について、フローチャートを用いて説明する。図16、図17は、読み出し処理の例を示すフローチャートである。
次に、NANDフラッシュ214からの読み出し処理について、フローチャートを用いて説明する。図16、図17は、読み出し処理の例を示すフローチャートである。
(S31)メモリアクセス部221dの処理により、圧縮済みデータ群に対応するデータがNANDフラッシュ214から読み出され、バッファ222bに格納される。すると、データ伸張部221cは、伸張用LUT222c2を生成してLUT記憶部222cに登録する。伸張用LUT222c2には、全データパターンが登録され、アドレスおよび伸張データサイズの項目にはすべてNULLが設定される。また、データ伸張部221cは、アドレスについての変数nを1に初期化する。
(S32)データ伸張部221cは、圧縮済みデータ群のデータ部の先頭側からデータブロックまたは圧縮データを選択する。
(S33)データ伸張部221cは、データブロックを選択した場合はステップS34へ処理を進め、圧縮データを選択した場合はステップS39へ処理を進める。
(S33)データ伸張部221cは、データブロックを選択した場合はステップS34へ処理を進め、圧縮データを選択した場合はステップS39へ処理を進める。
(S34)データ伸張部221cは、選択したデータブロックをバッファ222a(出力側バッファ)に格納する。
(S35)データ伸張部221cは、変数nに1を加算する。
(S35)データ伸張部221cは、変数nに1を加算する。
(S36)データ伸張部221cは、圧縮済みデータ群のデータ部の全データ(データブロックおよび圧縮データ)を選択したか否かを判定する。全データを選択した場合はステップS37へ処理が進む。一方、未選択のデータがある場合はステップS32へ処理が戻り、次のデータブロックまたは圧縮データが選択される。
(S37)データ伸張部221cは、圧縮済みデータ群のECC部のECCデータを用いて、バッファ222aに格納された対応する各データブロック(ECCデータ内のアドレスに対応するデータブロック)のエラーチェックを行う。これにより、バッファ222a内のデータブロックのうちエラーチェックを未実施のデータブロックについてビットエラーの有無がチェックされる。データ伸張部221cは、エラーチェックにより所定ビット数以下のエラーが検出された場合には、エラー訂正を行い、元のデータブロックを訂正後のデータブロックにより更新する。なお、データ伸張部221cは、所定ビット数を超えるエラーが検出された場合、ビットエラーが発生したことを出力する。
(S38)バッファ222aには圧縮済みデータ群に対応する未圧縮データ群、すなわち伸張された読み出しデータが復元されている。インタフェース部221aは、伸張された読み出しデータをバッファ222aからRAM212へ転送する。
以下、図17を用いて説明を続ける。
(S39)データ伸張部221cは、圧縮済みデータ群のECC部から、ステップS32で選択した圧縮データに対応するECCデータ(アドレスnを含むECCデータ)を取得する。データ伸張部221cは、取得したECCデータに含まれるECCを用いて、選択した圧縮データのエラーチェックを行う。データ伸張部221cは、エラーチェックにより所定ビット数以下のエラーが検出された場合には、エラー訂正を行い、訂正後の圧縮データを用いて処理を継続する。なお、データ伸張部221cは、所定ビット数を超えるエラーが検出された場合、ビットエラーが発生したことを出力する。
(S39)データ伸張部221cは、圧縮済みデータ群のECC部から、ステップS32で選択した圧縮データに対応するECCデータ(アドレスnを含むECCデータ)を取得する。データ伸張部221cは、取得したECCデータに含まれるECCを用いて、選択した圧縮データのエラーチェックを行う。データ伸張部221cは、エラーチェックにより所定ビット数以下のエラーが検出された場合には、エラー訂正を行い、訂正後の圧縮データを用いて処理を継続する。なお、データ伸張部221cは、所定ビット数を超えるエラーが検出された場合、ビットエラーが発生したことを出力する。
(S40)データ伸張部221cは、選択した圧縮データに含まれる距離とサイズを基に、圧縮元のデータ範囲(伸張に用いるデータブロックの範囲)を特定する。
(S41)データ伸張部221cは、選択した圧縮データにECCが含まれているか否かを判定する。ECCが含まれている場合はステップS42へ処理が進み、ECCが含まれていない場合はステップS46へ処理が進む。
(S41)データ伸張部221cは、選択した圧縮データにECCが含まれているか否かを判定する。ECCが含まれている場合はステップS42へ処理が進み、ECCが含まれていない場合はステップS46へ処理が進む。
(S42)データ伸張部221cは、伸張用LUT222c2を参照し、ステップS40で特定したデータ範囲における先頭データブロックのデータパターンに、アドレスが登録されているかを判定する。アドレスが登録されている場合、処理はステップS43に進められる。一方、アドレスが登録されていない場合は、当該データブロックのエラーチェックは未実行であり、処理はステップS44に進められる。
(S43)データ伸張部221cは、伸張用LUT222c2から、特定したデータ範囲における先頭データブロックのデータパターンに対応付けられた伸張データサイズを読み出す。データ伸張部221cは、選択した圧縮データに含まれるサイズが、伸張用LUT222c2から読み出した伸張データサイズ以下かを判定する。
圧縮データに含まれるサイズが伸張データサイズより大きい場合、圧縮元のデータ範囲にはエラーチェックを未実行のデータブロックが含まれ得る。この場合、処理はステップS44に進められる。一方、圧縮データに含まれるサイズが伸張データサイズ以下の場合、圧縮元のデータ範囲に含まれる全データブロックはエラーチェックを実行済みである。この場合、エラーチェックの実行は不要であり、処理はステップS46に進められる。
(S44)データ伸張部221cは、圧縮データに含まれるECCを用いて、バッファ222bに格納されている、圧縮元のデータ範囲内のデータブロックについてエラーチェックを行う。データ伸張部221cは、エラーチェックにより所定ビット数以下のエラーが検出された場合には、エラー訂正を行い、元のデータを訂正後のデータにより更新する。なお、データ伸張部221cは、所定ビット数を超えるエラーが検出された場合、ビットエラーが発生したことを出力する。
(S45)データ伸張部221cは、伸張用LUT222c2において、ステップS43でエラーチェックが行われたデータブロックのデータパターンに対応する伸張データサイズを、次のように更新する。データ伸張部221cは、各データブロックについて、そのデータブロックから、エラーチェックが行われたデータ範囲の末尾のデータブロックまでのデータブロック数を、伸張データサイズとして設定する。
例えば、図12の例においてデータブロックd11〜d13のエラーチェックが行われた場合、次のように伸張データサイズが設定される。データ伸張部221cは、伸張用LUT222c2におけるデータブロックd11のデータパターンに対して、データブロック数「3」を設定する。また、データ伸張部221cは、伸張用LUT222c2におけるデータブロックd12のデータパターンに対して、伸張データサイズとしてデータブロック数「2」を設定する。また、データ伸張部221cは、伸張用LUT222c2におけるデータブロックd13のデータパターンに対して、伸張データサイズとしてデータブロック数「1」を設定する。
(S46)データ伸張部221cは、バッファ222a(出力側バッファ)内の圧縮データに対応するデータ(上記のデータ範囲のデータ)を、アドレスnを先頭とするデータ一致範囲の伸張データとしてバッファ222aにコピーする。これにより、アドレスnを先頭とし、圧縮データに設定されたサイズを有する伸張データが復元される。コピー元のデータはすでにエラーチェックを実行済みのデータであるので、復元された伸張データに対してエラーチェックを行う必要はない。
(S47)データ伸張部221cは、変数nに、伸張データに含まれるデータブロックの数を加算して、変数nを更新する。この後、処理はステップS36に進められる。
以上の図16、図17に示した手順により、NANDフラッシュ214から読み出された圧縮済みデータ群に対応する未圧縮データ群に含まれるすべてのデータブロックが、エラーチェック済みの状態で伸張・復元される。このような処理の過程では、同じデータパターンを有するデータブロックまたはデータブロック群については1回だけエラーチェックが実行される。これにより、エラーチェックおよびエラー訂正の実行回数を削減でき、その処理負荷を低減できる。
以上の図16、図17に示した手順により、NANDフラッシュ214から読み出された圧縮済みデータ群に対応する未圧縮データ群に含まれるすべてのデータブロックが、エラーチェック済みの状態で伸張・復元される。このような処理の過程では、同じデータパターンを有するデータブロックまたはデータブロック群については1回だけエラーチェックが実行される。これにより、エラーチェックおよびエラー訂正の実行回数を削減でき、その処理負荷を低減できる。
なお、上記の各実施の形態に示した装置(記憶制御装置1およびNANDコントローラ220)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
1 記憶制御装置
1a データ圧縮部
1b データ伸張部
2 記憶装置
3 書き込みデータ列
3a、3b データ列
4 圧縮データ
4a エラー訂正符号
S1a、S1b、S2a〜S2c ステップ
1a データ圧縮部
1b データ伸張部
2 記憶装置
3 書き込みデータ列
3a、3b データ列
4 圧縮データ
4a エラー訂正符号
S1a、S1b、S2a〜S2c ステップ
Claims (6)
- 記憶装置に対するデータ書き込み時において、書き込みが要求された書き込みデータ列から、前記書き込みデータ列に含まれる部分データ列とデータパターンが同じ同一データ列を検出した場合、前記同一データ列を圧縮した圧縮データと、前記部分データ列に基づくエラー訂正符号とを生成し、前記部分データ列と、前記エラー訂正符号が付加された前記圧縮データとを前記記憶装置に書き込むデータ圧縮部と、
前記記憶装置からのデータ読み出し時において、前記部分データ列と、前記エラー訂正符号が付加された前記圧縮データとを前記記憶装置から読み出し、前記圧縮データに基づき、読み出した前記部分データ列のエラー訂正処理を前記エラー訂正符号を用いて実行し、エラー訂正処理された前記部分データ列を用いて前記同一データ列を伸張するデータ伸張部と、
を有する記憶制御装置。 - 前記データ圧縮部は、前記書き込みデータ列の複数箇所から前記同一データ列が検出された場合、前記同一データ列のうち初出の第1データ列を圧縮した第1圧縮データと、前記同一データ列のうち再出の第2データ列を圧縮した第2圧縮データとを生成し、前記エラー訂正符号が付加された前記第1圧縮データと、前記エラー訂正符号が付加されていない前記第2圧縮データとを前記記憶装置に書き込み、
前記データ伸張部は、前記部分データ列と、前記エラー訂正符号が付加された前記第1圧縮データと、前記第2圧縮データとを前記記憶装置から読み出し、前記第1圧縮データに基づき、読み出した前記部分データ列のエラー訂正処理を前記エラー訂正符号を用いて実行し、エラー訂正処理された前記部分データ列を用いて前記第1データ列を伸張し、前記第2圧縮データに基づき、エラー訂正処理された前記部分データ列を用いて前記第2データ列を伸張する、
請求項1記載の記憶制御装置。 - 前記データ圧縮部は、
前記書き込みデータ列からの前記第1データ列の検出に伴って前記第2圧縮データと前記エラー訂正符号とを生成したとき、前記エラー訂正符号が生成済みであることを示す識別情報を、前記第1データ列のデータパターンに対応付けて管理情報に登録し、
前記書き込みデータ列から前記第2データ列を検出したとき、前記管理情報において前記第2データ列のデータパターンに対応付けられた前記識別情報に基づいて、前記第2圧縮データに対する前記エラー訂正符号の付加が不要であることを判定する、
請求項2記載の記憶制御装置。 - 前記圧縮データは、前記部分データ列と前記同一データとの間の位置関係を示す情報を含み、
前記データ伸張部は、前記圧縮データに含まれる前記位置関係を示す情報に基づいて前記部分データ列を特定する、
請求項1乃至3のいずれか1項に記載の記憶制御装置。 - 前記データ伸張部は、エラー訂正処理された前記部分データ列をコピーしたコピーデータを、前記同一データ列を伸張した伸張データとして出力する、
請求項4記載の記憶制御装置。 - コンピュータに、
記憶装置に対する書き込みが要求された書き込みデータ列から、前記書き込みデータ列に含まれる部分データ列とデータパターンが同じ同一データ列を検出した場合、前記同一データ列を圧縮した圧縮データと、前記部分データ列に基づくエラー訂正符号とを生成し、前記部分データ列と、前記エラー訂正符号が付加された前記圧縮データとを前記記憶装置に書き込むデータ書き込み処理と、
前記部分データ列と、前記エラー訂正符号が付加された前記圧縮データとを前記記憶装置から読み出し、前記圧縮データに基づき、読み出した前記部分データ列のエラー訂正処理を前記エラー訂正符号を用いて実行し、エラー訂正処理された前記部分データ列を用いて前記同一データ列を伸張するデータ読み出し処理と、
を実行させる記憶制御プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019140134A JP2021022324A (ja) | 2019-07-30 | 2019-07-30 | 記憶制御装置および記憶制御プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019140134A JP2021022324A (ja) | 2019-07-30 | 2019-07-30 | 記憶制御装置および記憶制御プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021022324A true JP2021022324A (ja) | 2021-02-18 |
Family
ID=74574858
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019140134A Pending JP2021022324A (ja) | 2019-07-30 | 2019-07-30 | 記憶制御装置および記憶制御プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2021022324A (ja) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009080696A (ja) * | 2007-09-26 | 2009-04-16 | Hitachi Ltd | ストレージサブシステム及びその制御方法 |
JP2013532853A (ja) * | 2010-10-26 | 2013-08-19 | 株式会社日立製作所 | ストレージ装置及びデータ制御方法 |
JP2017045177A (ja) * | 2015-08-25 | 2017-03-02 | 株式会社東芝 | ストレージシステム、ホスト計算機、ストレージコントローラ及びデータ重複検出方法 |
JP2017142683A (ja) * | 2016-02-10 | 2017-08-17 | 東芝メモリ株式会社 | ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム |
JP2018181171A (ja) * | 2017-04-20 | 2018-11-15 | 富士通株式会社 | ストレージ制御装置、及びストレージ制御プログラム |
-
2019
- 2019-07-30 JP JP2019140134A patent/JP2021022324A/ja active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009080696A (ja) * | 2007-09-26 | 2009-04-16 | Hitachi Ltd | ストレージサブシステム及びその制御方法 |
JP2013532853A (ja) * | 2010-10-26 | 2013-08-19 | 株式会社日立製作所 | ストレージ装置及びデータ制御方法 |
JP2017045177A (ja) * | 2015-08-25 | 2017-03-02 | 株式会社東芝 | ストレージシステム、ホスト計算機、ストレージコントローラ及びデータ重複検出方法 |
JP2017142683A (ja) * | 2016-02-10 | 2017-08-17 | 東芝メモリ株式会社 | ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム |
JP2018181171A (ja) * | 2017-04-20 | 2018-11-15 | 富士通株式会社 | ストレージ制御装置、及びストレージ制御プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4901968B2 (ja) | 半導体記憶装置 | |
US8799562B2 (en) | Storage apparatus and data control method for generating and storing format data and guarantee codes | |
US7984325B2 (en) | Storage control device, data recovery device, and storage system | |
US8799745B2 (en) | Storage control apparatus and error correction method | |
JP5347657B2 (ja) | データ記憶プログラム、方法、及び情報処理装置 | |
US20160246537A1 (en) | Deduplication of parity data in ssd based raid systems | |
WO2015128955A1 (ja) | 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法 | |
US7702954B2 (en) | Data storage apparatus having error recovery capability | |
US20050229033A1 (en) | Disk array controller and information processing apparatus | |
JP2008204041A (ja) | ストレージ装置及びデータ配置制御方法 | |
JP2011165063A (ja) | 半導体記憶装置 | |
KR20120115012A (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US10503620B1 (en) | Parity log with delta bitmap | |
JP6666540B2 (ja) | ストレージ制御装置、及びプログラム | |
JP2006139478A (ja) | ディスクアレイシステム | |
US20100293418A1 (en) | Memory device, data transfer control device, data transfer method, and computer program product | |
US7627725B2 (en) | Stored data processing apparatus, storage apparatus, and stored data processing program | |
US20150347224A1 (en) | Storage control apparatus and method therefor | |
US10574270B1 (en) | Sector management in drives having multiple modulation coding | |
US10664346B2 (en) | Parity log with by-pass | |
US8418029B2 (en) | Storage control device and storage control method | |
US20080091971A1 (en) | Stored data processing apparatus, storage apparatus, and stored data processing program | |
JP2001142650A (ja) | アレイディスク制御方法及び装置 | |
JP2021022324A (ja) | 記憶制御装置および記憶制御プログラム | |
US10014983B2 (en) | System, receiving device, and method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220407 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20230322 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230411 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20231017 |