以下に、本発明にかかるストレージ装置、ストレージ制御装置、データ転送集積回路、および、ストレージ制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
まず、実施例1に係るストレージ装置の概略構成について説明する。図1は、実施例1に係るストレージ装置1の概略構成を示す図である。同図に示したストレージ装置1は、高信頼性を確保するために二重化構成が採られており、各構成要素が2系統ずつ(同図中、参照符号に付加したA、Bによって区別する)備えられている。それぞれの系統の構成要素は互いに同等の機能を有するため、以下では一方の系統についてのみ構成要素の説明をする。
同図に示すように、ストレージ装置1は、ストレージ装置1を制御する各部や、ストレージ装置1と上位装置であるホストコンピュータとの間の通信を担う通信モジュールなどを主に搭載するCE(Controller Enclosure:コントローラ エンクロージャ)10と、ハードディスク装置を主に搭載するDE(Device Enclosure:デバイス エンクロージャ)20とに、筐体が分けられている。
CE10は、図示しないチャネルアダプタ経由でファイバチャネルを介してホストコンピュータと接続され、エクスパンダ120Aおよび120B経由でDE20と接続されている。DE20は、ハードディスク装置(以下、「HDD:Hard Disk Drive」と略記する)21を有し、エクスパンダ220Aおよび220Bを直接、もしくは、ルータ(Router)を経由するなどして、他のDEと複数個接続することが可能である。
また、CE10は、ストレージ装置1を制御するためのCM(Controller Module:コントローラ モジュール)100Aおよび100Bと、CM100Aおよび100Bに接続される複数のハードディスク装置11とを有する。
HDD11は、CM100Aによってデータが冗長に読み書きされる記憶装置である。なお、CM100Aに接続される記憶装置は、ハードディスク装置に限られず、熱磁気ディスク装置や光磁気ディスク装置、または、半導体不揮発メモリを用いた半導体ディスクのような他の記憶装置であってもよい。
CM100Aは、ストレージ装置1を制御するストレージ制御装置であり、インタフェース(以下、「I/F」と略記する)部110Aと、エクスパンダ120Aと、キャッシュメモリ130Aと、フラッシュメモリ141Aおよび142Aと、データ転送DMA(Direct Memory Access)150Aと、RAID−on−Chip(以下、「RoC」と略記する)160Aとを有する。
I/F部110Aは、LAN(Local Area Network)などのネットワークへ接続するためのインタフェースである。エクスパンダ120Aは、RoC160AとHDD11との間で送受信されるデータを中継する中継装置である。
キャッシュメモリ130Aは、ホストコンピュータとHDD11との間で転送が行われるデータを一時的に記憶するメモリである。フラッシュメモリ141Aおよび142Aは、不揮発性メモリであり、例えば、NAND型のフラッシュメモリである。実施例1に係るストレージ装置1では、フラッシュメモリ141Aおよび142Aに、OneNAND(ワンナンド)型のフラッシュメモリを用いることとする。
ここで、OneNAND型のフラッシュメモリ141Aおよび142Aの構成およびデータフォーマットについて説明する。なお、フラッシュメモリ141Aおよび142Aの構成およびデータフォーマットは同一であるため、ここでは、フラッシュメモリ141Aの構成およびデータフォーマットについてのみ説明する。
図2−1は、フラッシュメモリ141Aの構成およびデータフォーマットを示す図である。なお、フラッシュメモリ141Aの記憶容量は、2[GB(ギガバイト)]であるとする。同図に示すように、フラッシュメモリ141Aは、4つのメモリバンク#00〜メモリバンク#03を有する。メモリバンク#00〜メモリバンク#03は、メモリの集合体であり、それぞれがダイ#0およびダイ#1を有する。
ダイ#0およびダイ#1は、数ミリ角のフラッシュメモリであり、それぞれがBlock#0〜Block#2047を有する。また、Block#0〜#2047は、それぞれがpage(ページ)#0〜page#63を有する。pageが、フラッシュメモリ141への最小アクセス単位となる。
pageの構成およびデータフォーマットについて説明する。図2−2は、図2−1に示したpageの構成およびデータフォーマットを示す図である。同図に示すように、pageは、メイン領域と、スペア領域とを有する。
メイン領域は、ユーザデータが記憶される2[KB(キロバイト)]の記憶領域であり、4個のセクタ#0〜セクタ#3を有する。スペア領域は、主にデータを管理するためのシステムデータ等が記憶される64[byte(バイト)]の記憶領域であり、4個のスペア#0〜#3を有する。
スペア領域を構成する1つのスペア(例えば、スペア#0)は、同図に示すように、システム領域と、ECC(Error Correcting Code:誤り訂正符号)領域と、リザーブ領域と、ユーザ領域とを有する。
システム領域は、不良セクタ情報等の各種情報が記憶される記憶領域である。ECC領域は、フラッシュメモリ141Aによって生成されるECCが記憶される領域である。フラッシュメモリ141Aは、このECCを用いてエラーチェックを行い、エラーを検出した場合に、ECCチェックエラーが発生した旨を通知する。リザーブ領域は、予備領域である。ユーザ領域は、フラッシュメモリ141Aにデータを記憶させるシステムによってデータ管理上必要となるデータが記憶される記憶領域である。
図1の説明に戻って、データ転送DMA150Aは、キャッシュメモリ130Aと、フラッシュメモリ141Aおよび142Aとの間におけるデータ送受信をDMAにより行うDMA回路である。このデータ転送DMA150Aは、例えば、FPGA(Field Programmable Gate Array)によって実現される。
RoC160Aは、CM100Aを全体制御する制御装置であり、ホストコンピュータとのインタフェースを制御したり、キャッシュメモリ130Aの管理を行ったりする。また、RoC160Aは、ホストコンピュータからデータのライト命令を受け付けた場合に、かかるデータをキャッシュメモリ130Aに記憶する。そして、RoC160Aは、キャッシュメモリ130Aにデータを記憶した時点で、ライト処理が完了した旨をホストコンピュータへ通知する。その後、所定の条件を満たした時点で、キャッシュメモリ130Aに記憶したデータをHDD11に書き込みする。
また、RoC160Aは、ストレージ装置1が異常終了した場合に、データ転送DMA150Aに対して、キャッシュメモリ130Aに記憶されているデータをフラッシュメモリ141Aおよび142Aに退避させる処理(以下、「データ退避処理」という)を行うように指示する。また、RoC160Aは、異常終了後のストレージ装置1が起動した場合に、データ転送DMA150Aに対して、フラッシュメモリ141Aおよび142Aに退避したデータをキャッシュメモリ130Aに復旧させる処理(以下、「データ復旧処理」という)を行うように指示する。
次に、図3−1〜図3−3を用いて、実施例1に係るストレージ装置1によるデータ退避処理およびデータ復旧処理の概要について説明する。図3−1は、実施例1に係るストレージ装置1によるデータ退避処理の概要を説明するための図である。なお、以下では、図1中に付加した参照符号のAおよびBを付与せずに説明する。すなわち、例えば、図3−1に示したキャッシュメモリ130は、図1に示したキャッシュメモリ130Aまたは130Bに対応する。
図3−1に示すように、キャッシュメモリ130には、53[KB]のデータD1が記憶されているものとする。この状態で、ストレージ装置1が異常終了したため、RoC160が、データ転送DMA150に対して、データD1を退避するように指示したとする。かかる指示を受け付けたデータ転送DMA150は、キャッシュメモリ130からデータD1を読み出す。なお、以下では、ストレージ装置1が異常終了した時に、データ転送DMA150によって退避されるキャッシュメモリ130上のデータを「退避対象データ」と呼ぶこととする。
そして、データ転送DMA150は、データD1を、28[KB]ごとに区切る。具体的には、同図に示すように、データ転送DMA150は、データD1を、28[KB]のデータD10と、25[KB]のデータD20とに区切る。なお、データ転送DMA150が退避対象データ(上記例ではデータD1)を分割するサイズ(上記例では、28[KB])は、予めシステムで決められており、以下では、このサイズを「バウンダリサイズ」と呼び、バウンダリサイズによって区切られた退避対象データの1つのデータを「バウンダリデータ」と呼ぶこととする。実施例1に係るストレージ装置1では、バウンダリサイズが28[KB]に決定されていることとする。
そして、データ転送DMA150は、データD10を、2[KB]ごとに区切る。具体的には、同図に示すように、データ転送DMA150は、データD10を、14個のデータD101〜D114に区切る。なお、データ転送DMA150がバウンダリデータ(上記例では、データD10およびD20)を分割するサイズ(上記例では、2[KB])は、予めシステムで決められており、実施例1に係るストレージ装置1では、このサイズが、2[KB]に決定されていることとする。以下では、2[KB]ごとに区切られたバウンダリデータの1つのデータ(データD101等)を、「退避対象単位データ」と呼ぶこととし、退避対象単位データを識別するための番号を「退避対象単位データ番号」と呼ぶこととする。本明細書では、退避対象単位データに付した参照符号の数字部分を退避対象単位データ番号とする。例えば、データD101の退避対象単位データ番号は、「101」である。
そして、データ転送DMA150は、退避対象単位データ番号が奇数である7個のデータD101、D103、・・、D113の排他的論理和(以下、「XOR」という)演算を行ってパリティデータP115を生成する。また、データ転送DMA150は、退避対象単位データ番号が偶数である7個のデータD102、D104、・・、D114のXOR演算を行ってパリティデータP116を生成する。
このパリティデータP115およびP116のサイズは、データD101〜D114のサイズと同様の2[KB]となる。すなわち、バウンダリサイズ28[KB]に区切られたデータD10のサイズと、かかるデータD10から生成されたパリティデータP115およびP116のサイズの合計は、32[KB]となる。なお、以下では、パリティデータも「退避対象単位データ」と呼ぶこととする。
その後、データ転送DMA150は、データD101〜D114ごとに、CRC(Cyclic Redundancy Check)を生成する。同様に、データ転送DMA150は、パリティデータP115およびP116ごとに、CRCを生成する。そして、データ転送DMA150は、生成したCRCを、データD101〜D114と、パリティデータP115およびP116とに付与する。
また、データ転送DMA150は、データD101〜D114と、パリティデータP115およびP116とを識別するための識別番号(以下、「AID:Area Identification」という)をデータD101〜D114と、パリティデータP115およびP116とに付与する。このAIDについては、後に詳述する。
そして、データ転送DMA150は、CRCおよびAIDが付与されたデータD101〜D114と、CRCおよびAIDが付与されたパリティデータP115およびP116とをフラッシュメモリ141に書き込む。すなわち、データ転送DMA150は、16個の退避対象単位データ(14個のデータD101〜D114と、2個のパリティデータP115およびP116)を、フラッシュメモリ141に書き込む。
このとき、データ転送DMA150は、フラッシュメモリ141が有する4個のメモリバンク#00〜メモリバンク#03に対して、退避対象単位データを4個ずつ書き込む。また、このとき、データ転送DMA150は、メモリバンク#00〜メモリバンク#03が有する2個のダイ#0およびダイ#1に対して、退避対象単位データを2個ずつ書き込む。また、このとき、データ転送DMA150は、ダイ#0およびダイ#1が有する所定の2個のBlockに対して、退避対象単位データ番号が奇数である退避対象単位データと、退避対象単位データ番号が偶数である退避対象単位データとを1個ずつ書き込む。
以下では、データ転送DMA150が、16個の退避対象単位データを書き込むフラッシュメモリ141上の領域を「小エリア」と呼ぶこととする。この「小エリア」は、例えば、図2−1に示した小エリアSA1に該当する。
ここで、データ転送DMA150のデータ書込処理について、データD101〜D114と、パリティデータP115およびP116とを、図2−1に示した小エリアAS1に書き込む場合を例に挙げて説明する。なお、以下では、「メモリバンク#Pのダイ#QのBlock#Rが有するpage#S」を示す場合に、「メモリバンク#P/ダイ#Q/Block#R/page#S」と記載することとする。
かかる場合、データ転送DMA150は、例えば、データD101を、小エリアSA1内のメモリバンク#00/ダイ#0/Block#2/page#1のメイン領域に書き込む。そして、データ転送DMA150は、データD102を、メモリバンク#00/ダイ#0/Block#3/page#1のメイン領域に書き込み、データD103を、メモリバンク#00/ダイ#1/Block#2/page#1のメイン領域に書き込む。このようにして、データ転送DMA150は、データD104〜D113を書き込んでいき、データD114を、メモリバンク#03/ダイ#0/Block#3/page#1に書き込み、パリティデータP115を、メモリバンク#03/ダイ#1/Block#2/page#1に書き込み、パリティデータP116を、メモリバンク#03/ダイ#1/Block#3/page#1に書き込む。
そして、データ転送DMA150は、各退避対象単位データに付与したCRCをpageのスペア領域内のユーザ領域に書き込む。上記例のように、データD101を、メモリバンク#00/ダイ#0/Block#2/page#1のメイン領域に書き込んだ場合、データ転送DMA150は、データD101のCRCを、メモリバンク#00/ダイ#0/Block#2/page#1のスペア#0のユーザ領域に書き込む。同様に、データ転送DMA150は、データD102〜D114と、パリティデータP115およびP116のCRCについても、pageのユーザ領域に書き込む。
また、データ転送DMA150は、各退避対象単位データに付与したAIDをpageのスペア領域内のユーザ領域に書き込む。上記例のように、データD101のCRCを、メモリバンク#00/ダイ#0/Block#2/page#1のスペア#0のユーザ領域に書き込んだ場合、データ転送DMA150は、データD101のAIDを、メモリバンク#00/ダイ#0/Block#2/page#1のスペア#1のユーザ領域に書き込む。同様に、データ転送DMA150は、データD102〜D114と、パリティデータP115およびP116のAIDについても、pageのユーザ領域に書き込む。
このようにして、データ転送DMA150は、16個の退避対象単位データを、小エリアに書き込む。以下では、小エリア内の1つのpageに記憶されている全てのデータ(退避対象単位データやCRCやAID等)を「ストライプ」と呼ぶこととし、小エリア内でストライプを識別するための番号を「ストライプ番号」と呼ぶこととする。本明細書では、退避対象単位データに付した参照符号の数字下2桁部分をストライプ番号とする。例えば、データD101を記憶するpageに記憶されているストライプのストライプ番号は「1」であり、パリティデータP115を記憶するpageに記憶されているストライプのストライプ番号は「15」である。以下では、ストライプ番号「N」のストライプを、単に、ストライプS「N」と呼ぶこととする。
なお、図3−1に示したフラッシュメモリ141内の「D101」や「P115」等を記載した矩形は、pageのメイン領域を示し、かかるメイン領域の後に斜線を付して示した矩形は、pageのスペア領域を示す。すなわち、同図では、例えば、「D101」を記載したメイン領域と、かかるメイン領域の後に示したスペア領域との組合せがストライプS1であることを示す。
同様にして、データ転送DMA150は、データD20をフラッシュメモリ142に書き込む。具体的には、データ転送DMA150は、データD20を2[KB]ごとに区切る。このとき、データ転送DMA150は、データD20のサイズが25[KB]であり、バウンダリサイズの28[KB]に満たないので、データD20のサイズが28[KB]になるように、3[KB]の所定の値を加える。以下では、この所定の値を「バウンダリ調整値」と呼ぶこととする。バウンダリデータのサイズがバウンダリサイズに満たない場合に、バウンダリ調整値を加える理由は、パリティデータを生成できるようにするためである。
そして、データ転送DMA150は、バウンダリ調整値を加えたデータD20を2[KB]ごとに区切る。具体的には、同図に示すように、データ転送DMA150は、3[KB]のバウンダリ調整値を加えたデータD20を、14個のデータD201〜D214に区切る。
その後の処理は、上述したデータD10をフラッシュメモリ141に書き込む処理と同様であり、データ転送DMA150は、パリティデータP215およびP216を生成して、データD201等のCRCを生成して、データD201〜D214と、パリティデータP215およびP216と、CRCと、AIDとをフラッシュメモリ142に書き込む。
このようにして、データ転送DMA150は、キャッシュメモリ130に記憶されているデータD1のうち、データD10をフラッシュメモリ141に書き込み、データD20をフラッシュメモリ142に書き込む。
なお、データ転送DMA150は、複数の小エリアに対して、データを並行して書き込むことが可能である。実施例1に係るストレージ装置1では、データ転送DMA150が、最大で64個の小エリアに対して同時にデータを書き込むこととする。以下では、この64個の小エリアを「エリア」と呼ぶこととする。この「エリア」は、例えば、図2−1に示したエリアA1に該当する。上述したAIDは、1個のエリア内に含まれるストライプを識別するための識別番号である。このAIDは、RoC160によって算出され、データ転送DMA150は、RoC160からAIDを受け付ける。
次に、実施例1に係るストレージ装置1によるデータ復旧処理の概要について説明する。図3−2および図3−3は、実施例1に係るストレージ装置1によるデータ復旧処理の概要を説明するための図である。図3−2および図3−3に示したフラッシュメモリ141には、図3−1に示したデータ転送DMA150によって退避されたデータが記憶されているものとする。
まず、図3−2を用いて、図3−1に示したデータD10をキャッシュメモリ130に復旧させる処理について説明する。ここでは、図3−2に示したフラッシュメモリ141に記憶されているデータD103の一部が、フラッシュメモリ141のセル劣化等の原因により破損しているものとする。そして、フラッシュメモリ141は、データD103の読出要求を受け付けると、かかる読出要求に対する応答ができなくなるものとする。
かかる状態で、ストレージ装置1が異常終了後に起動した場合、データ転送DMA150は、フラッシュメモリ141から、小エリア単位でストライプを読み出す。具体的には、データ転送DMA150は、フラッシュメモリ141から、ストライプS1〜S16を読み出す。
そして、データ転送DMA150は、ストライプS3を読み出している途中で、フラッシュメモリ141から読出応答を受け付けなくなる。所定の時間が経過してもストライプS3を読み出せない場合、データ転送DMA150は、ストライプS3に対してタイムアウトが発生したことを検出する。
そして、データ転送DMA150は、タイムアウトが発生したストライプS3の読出処理を中止して、ストライプS3に、読み出しできなかったサイズ分の所定の値(以下、この所定の値を「付加データ」という)を設定する。例えば、1[KB]分のストライプS3を読み出した時点で、フラッシュメモリ141から読み出し応答を受け付けなくなった場合、データ転送DMA150は、読み出し済みの1[KB]のデータに1[KB]の付加データを加えた2[KB]のデータをストライプS3とする。その後、データ転送DMA150は、データの読出処理を再開して、フラッシュメモリ141から、ストライプS4〜S16を読み出す。
また、データ転送DMA150は、ストライプS1〜16を読み出しながら、CRC検査、AID検査およびXOR演算を行う。具体的には、データ転送DMA150は、読み出したストライプS1〜16内のCRCを用いて、ストライプS1〜16に誤りデータが存在するか否かを検査する。また、データ転送DMA150は、ストライプS1〜16内のAIDを用いて、ストライプS1〜16がすべて揃っているか否かを検査する。また、データ転送DMA150は、ストライプ番号が奇数であるストライプS1、S3、・・、S15のXOR演算を行い、訂正データT11を生成するとともに、ストライプ番号が偶数であるストライプS2、S4、・・、S16のXOR演算を行い、訂正データT12を生成する。
図3−2に示した例では、データ転送DMA150は、付加データが設定されているストライプS3のCRC検査において、誤りデータが存在することを検出する。なお、ストライプS3に含まれるAIDを読み出す前に、タイムアウトが発生した場合には、AIDには付加データが設定されているため、データ転送DMA150は、ストライプS3のAID検査において、データD103が欠如していると検出する可能性もある。ここでは、データ転送DMA150は、ストライプS3に対してのみデータ誤りを検出し、ストライプS1、S2、S4〜S16に対しては、CRC検査およびAID検査においてエラーを検出しなかったものとする。
すべてのストライプS1〜16を読み出した後、データ転送DMA150は、CRC検査およびAID検査においてエラーが検出されなかったストライプS1およびS2に含まれるデータD101およびD102をキャッシュメモリ130に書き込む。そして、データ転送DMA150は、エラーが検出されたストライプS3については、ストライプ番号が奇数であるストライプS1、S5、S7、・・、S15および訂正データT11を用いて、データD103の誤りデータを訂正して、訂正済みのデータD103をキャッシュメモリ130に書き込む。そして、データ転送DMA150は、エラーが検出されなかったストライプS4〜S14に含まれるデータD104〜D114をキャッシュメモリ130に書き込む。なお、ストライプS15およびS16はパリティデータであるため、データ転送DMA150は、ストライプS15およびS16に含まれるパリティデータP115およびP116をキャッシュメモリ130に書き込まない。このようにして、データ転送DMA150は、データD10をキャッシュメモリ130に復旧する。
続いて、図3−3を用いて、図3−1に示したデータD20をキャッシュメモリ130に復旧させる処理について説明する。同図に示すように、データ転送DMA150は、データD10の復旧処理が終了した後、フラッシュメモリ142から、ストライプS1〜S16を読み出しながら、CRC検査、AID検査およびXOR演算を行い、訂正データT21およびT22を生成する。ここでは、データ転送DMA150は、フラッシュメモリ142からストライプS1〜S16の読出処理中に、タイムアウトが発生しなかったものとする。また、データ転送DMA150は、ストライプS1〜S16のCRC検査およびAID検査においてエラーを検出しなかったものとする。
すべてのストライプS1〜16を読み出した後、データ転送DMA150は、ストライプS1〜S12に含まれるデータD201〜D212をキャッシュメモリ130に書き込む。そして、データ転送DMA150は、ストライプS13に含まれるデータD213から1[KB]のバウンダリ調整値を除去したデータD213をキャッシュメモリ130に書き込む。なお、ストライプS14に含まれるデータD214は、すべてバウンダリ調整値であるため、データ転送DMA150は、データD214をキャッシュメモリ130に書き込まない。
以上のように、実施例1に係るストレージ装置1は、データ退避処理時に、退避対象データのパリティデータを生成して、CRCやAIDを付与した退避対象データおよびパリティデータをフラッシュメモリ141または142に書き込み、データ復旧処理において、フラッシュメモリ141または142から所定の時間内にデータ読出処理が完了しない場合に、データ読出処理を中止して付加データを設定し、パリティデータを用いて誤りデータを訂正したデータをキャッシュメモリ130に書き込むので、フラッシュメモリ141または142からデータの読出応答がなされない場合であっても、フラッシュメモリ141または142に退避させたデータを、キャッシュメモリ130に復旧させることができる。
また、実施例1に係るストレージ装置1は、退避対象単位データ番号が奇数である退避対象単位データを用いてパリティデータを生成するとともに、退避対象単位データ番号が偶数である退避対象単位データを用いてパリティデータを生成し、小エリア内の1つのダイには、退避対象単位データ番号が奇数である退避対象単位データと、退避対象単位データ番号が偶数である退避対象単位データとを書き込むように構成したので、1個のダイが故障した場合であっても、かかる故障したダイに記憶されていたデータを訂正することができる。すなわち、1個のダイが故障した場合であっても、フラッシュメモリ141または142に退避させたデータを、キャッシュメモリ130に復旧させることができる。
次に、実施例1に係るストレージ装置1が有するCM100の構成について説明する。図4は、実施例1に係るストレージ装置1が有するCM100の構成を示す図である。なお、同図では、データ退避処理およびデータ復旧処理に関連する構成のみを図示している。
同図に示すように、CM100は、電力供給部12と接続されており、キャッシュメモリ130と、フラッシュメモリ141および142と、データ転送DMA150と、RoC160とを有する。
電力供給部12は、ストレージ装置1が異常終了した場合に、CM100に対して電力供給を行う装置であり、例えば、大容量のコンデンサやバッテリー等である。なお、同図では、CM100が外部に備えられた電力供給部12によって電力供給される例を示しているが、CM100は、電力供給部12を有してもよい。
キャッシュメモリ130は、上述したように、ホストコンピュータとHDD11との間で転送が行われるデータを一時的に記憶するメモリである。フラッシュメモリ141および142は、不揮発性メモリであり、ストレージ装置1の異常終了時にデータ転送DMA150によって、キャッシュメモリ130に記憶されているデータが退避される。
データ転送DMA150は、RoC160に指示に従って、キャッシュメモリ130と、フラッシュメモリ141および142との間におけるデータ送受信を行うDMA回路である。具体的には、データ転送DMA150は、ストレージ装置1が異常終了した場合に、キャッシュメモリ130に記憶されているデータを、フラッシュメモリ141および142に退避させるデータ退避処理を行う。また、データ転送DMA150は、ストレージ装置1が異常終了後に電源投入された場合に、フラッシュメモリ141および142に退避したデータをキャッシュメモリ130に復旧するデータ復旧処理を行う。なお、データ転送DMA150の構成、データ転送DMA150によるデータ退避処理およびデータ復旧処理については、後に詳述する。
RoC160は、CM100を全体制御する制御装置であり、退避データ領域算出部161と、退避指示部162と、復旧指示部163とを有する。退避データ領域算出部161は、ストレージ装置1が異常終了した場合に、データ転送DMA150にデータ退避処理を行うように指示する際に必要となる各種情報を算出する処理部である。
具体的には、退避データ領域算出部161は、退避対象データのサイズや、退避対象データのキャッシュメモリ130における記憶位置(アドレス)に基づいて、データ転送DMA150が退避するデータのサイズや、データ転送DMA150が退避するデータの記憶位置や、バウンダリ調整値のサイズ等を算出する。
退避指示部162は、データ転送DMA150に対して、データ退避処理を行うように指示する処理部である。具体的には、退避指示部162は、ストレージ装置1が異常終了した場合に、データ退避処理を行うように指示する命令(以下、「データ退避ディスクリプタ」という)を生成して、データ転送DMA150に送信する。
このデータ退避ディスクリプタには、退避データ領域算出部161によって算出された各種情報が含まれる。具体的には、データ退避ディスクリプタには、退避対象データのキャッシュメモリ130における先頭の記憶位置(先頭アドレス)や、退避対象データのサイズや、バウンダリ調整値のサイズや、AID等が含まれる。
復旧指示部163は、データ転送DMA150に対して、データ復旧処理を行うように指示する処理部である。具体的には、復旧指示部163は、ストレージ装置1が異常終了後に電源投入された場合に、データ復旧処理を行うように指示する命令(以下、「データ復旧ディスクリプタ」という)を生成して、データ転送DMA150に送信する。このデータ復旧ディスクリプタには、除去するバウンダリ調整値のサイズ等が含まれる。
また、復旧指示部163は、データ転送DMA150によるデータ復旧処理が完了した場合に、フラッシュメモリ141および142に記憶されているデータを消去する命令(以下、「イレースディスクリプタ」という)を生成して、データ転送DMA150に送信する。
次に、データ転送DMA150の構成について説明する。図5は、図4に示したデータ転送DMA150の構成を示す図である。同図に示すように、データ転送DMA150は、PCI(Peripheral Component Interconnect)バスI/F510と、メモリI/F521および522と、ディスクリプタ保持レジスタ530と、ライトDMA541および542と、リードDMA550と、イレースDMA561および562とを有する。
PCIバスI/F510は、データ転送DMA150とキャッシュメモリ130との間のデータ送受信を行うインタフェースである。メモリI/F521は、データ転送DMA150とフラッシュメモリ141との間のデータ送受信を行うインタフェースであり、メモリI/F522は、データ転送DMA150とフラッシュメモリ142との間のデータ送受信を行うインタフェースである。
ディスクリプタ保持レジスタ530は、RoC160から受信した各種ディスクリプタを記憶するレジスタである。具体的には、ディスクリプタ保持レジスタ530は、データ退避ディスクリプタや、データ復旧ディスクリプタや、イレースディスクリプタ等を記憶する。
ライトDMA541および542は、データ退避処理を行うDMA回路である。具体的には、ライトDMA541は、ディスクリプタ保持レジスタ530からデータ退避ディスクリプタを受け取った場合に、PCIバスI/F510を介してキャッシュメモリ130に記憶されているデータを取得する。そして、ライトDMA541は、取得したデータを、メモリI/F521を介してフラッシュメモリ141に書き込む。同様に、ライトDMA542は、ディスクリプタ保持レジスタ530からデータ退避ディスクリプタを受け取った場合に、キャッシュメモリ130に記憶されているデータを取得し、取得したデータを、フラッシュメモリ142に書き込む。
ライトDMA541および542は、キャッシュメモリ130からフラッシュメモリ141または142にデータを転送する処理を並行して行う。図3−1に示した例において、例えば、ライトDMA541がデータD10をフラッシュメモリ141へ書き込む処理を行い、ライトDMA542がデータD20をフラッシュメモリ142へ書き込む処理を行う。そして、このライトDMA541および542によるデータ退避処理が並行して行われる。
このように、ストレージ装置1は、2系統のフラッシュメモリ141および142と、2系統のライトDMA541および542とを有して、ライトDMA541および542に対してデータ退避処理を並行して行わせる。これにより、ストレージ装置1は、データ退避処理を効率よく行うことが可能となり、電力供給部12から電力供給される短い時間内にデータ退避処理を完了させることを実現している。
リードDMA550は、データ復旧処理を行うDMA回路である。具体的には、リードDMA550は、ディスクリプタ保持レジスタ530から、データ復旧ディスクリプタを受け取った場合に、フラッシュメモリ141に記憶されているデータを取得し、取得したデータを、キャッシュメモリ130に記憶させる。同様に、リードDMA550は、データ復旧ディスクリプタを受け取った場合に、フラッシュメモリ142に記憶されているデータを取得し、取得したデータを、キャッシュメモリ130に記憶させる。
実施例1に係るストレージ装置1が、データ退避処理を2系統のライトDMA541および542に行わせるのに対して、データ復旧処理を1系統のリードDMA550に行わせる理由について説明する。これは、データ退避処理には、電力供給部12から電力供給される短い時間内に完了させなければならないという制約があるのに対して、データ復旧処理には、このような制約がないためである。
ただし、データ転送DMA150が有するライトDMAやリードDMAの数は、図5に示した例に限られない。例えば、データ転送DMA150は、例えば、3個のライトDMAを有してもよいし、10個のリードDMAを有してもよい。
イレースDMA561は、ディスクリプタ保持レジスタ530からイレースディスクリプタを受け取った場合に、フラッシュメモリ141に記憶されているデータを消去するDMA回路である。同様に、イレースDMA562は、ディスクリプタ保持レジスタ530からイレースディスクリプタを受け取った場合に、フラッシュメモリ142に記憶されているデータを消去するDMA回路である。
次に、ライトDMA541および542の構成について説明する。図6は、図5に示したライトDMA541および542の構成を示す図である。なお、ライトDMA541および542の構成は同一であるため、ここでは、ライトDMA541の構成についてのみ説明する。
同図に示すように、ライトDMA541は、データ読出部541aと、バウンダリ調整部541bと、パリティ生成部541cと、退避データバッファ541dと、パリティバッファ541eと、データ書込部541fとを有する。
データ読出部541aは、キャッシュメモリ130から所定のサイズのデータを読み出す処理部である。具体的には、データ読出部541aは、データ退避ディスクリプタに含まれている退避対象データの先頭アドレスから、退避対象データのサイズ分のデータを読み出す。
バウンダリ調整部541bは、データ読出部541aによって読み出された退避対象データにバウンダリ調整値を加える処理部である。具体的には、バウンダリ調整部541bは、退避対象データに、データ退避ディスクリプタに含まれているバウンダリ調整値のサイズ分のバウンダリ調整値を加える。
パリティ生成部541cは、データ読出部541aによって読み出された退避対象データを用いて、パリティデータを生成する処理部である。具体的には、パリティ生成部541cは、退避対象データを、バウンダリサイズ28[KB]ごとのバウンダリデータに区切って、さらに、バウンダリデータを、予めシステムで決められているサイズである2[KB]ごとに区切る。
そして、パリティ生成部541cは、退避対象単位データ番号が奇数である7個の退避対象単位データを用いてパリティデータを生成するとともに、退避対象単位データ番号が偶数である7個の退避対象単位データを用いてパリティデータを生成する。そして、データ読出部541aによって読み出された退避対象データを、退避データバッファ541dに記憶させるとともに、生成したパリティデータをパリティバッファ541eに記憶させる。
退避データバッファ541dは、データを一次記憶する記憶装置であり、上述したように、パリティ生成部541cによって退避対象データが記憶される。パリティバッファ541eは、データを一次記憶する記憶装置であり、上述したように、パリティ生成部541cによってパリティデータが記憶される。
データ書込部541fは、退避データバッファ541dおよびパリティバッファ541eから、退避対象単位データおよびパリティデータを読み出してフラッシュメモリ141に書き込む処理部であり、CRC付与部541gとAID付与部541hとを有する。
CRC付与部541gは、退避データバッファ541dから読み出した退避対象単位データごとにCRCを生成するとともに、パリティバッファ541eから読み出したパリティデータごとにCRCを生成する。そして、CRC付与部541gは、生成したCRCを、退避対象単位データおよびパリティデータに付与する。
AID付与部541hは、退避データバッファ541dから読み出した退避対象単位データに、AIDを付与するとともに、パリティバッファ541eから読み出したパリティデータに、AIDを付与する。なお、AID付与部541hは、データ退避ディスクリプタからAIDを取得する。
データ書込部541fは、このようにしてCRCおよびAIDが付与された退避対象単位データおよびパリティデータを、フラッシュメモリ141に書き込む。
次に、リードDMA550の構成について説明する。図7は、図5に示したリードDMA550の構成を示す図である。同図に示すように、リードDMA550は、セレクタ550aと、データ読出部550bと、タイムアウト検出部550cと、エラー検出部550dと、復旧データバッファ550eと、XOR演算部550fと、CRC検査部550gと、AID検査部550hと、訂正データバッファ550iと、ログ保持レジスタ550jと、セレクタ550kと、バウンダリ調整部550lと、データ書込部550mとを有する。
セレクタ550aは、複数の入力信号の中から1つの入力信号のみを選択して出力するセレクタ回路であり、フラッシュメモリ141に記憶されているストライプをデータ読出部550bに出力したり、付加データをデータ読出部550bに出力したりする。セレクタ550aが、ストライプまたは付加データのいずれを出力するかは、後に説明する。
データ読出部550bは、セレクタ550aを介して、フラッシュメモリ141から、小エリアのストライプを読み出して、読み出したストライプを復旧データバッファ550eに記憶させる。このとき、データ読出部550bは、データ読出処理を開始した時刻をタイムアウト検出部550cに通知する。
タイムアウト検出部550cは、データ読出部550bから受け付けたデータ読出処理の開始時刻に基づいて、データ読出部550bによるデータ読出処理が所定の時間内に完了するか否かを監視する処理部である。
具体的には、タイムアウト検出部550cは、データ読出部550bによるデータ読出処理が、データ読出処理の開始時刻から所定の時間を経過しても完了しない場合に、データ読出部550bが読取処理中のストライプに対してタイムアウトが発生したことを検出する。そして、タイムアウト検出部550cは、タイムアウトを検出したストライプのストライプ番号を含むタイムアウト検出通知をセレクタ550aに対して行う。
ここで、タイムアウト検出通知を受け付けたセレクタ550aの処理について説明する。タイムアウト検出通知を受け付けたセレクタ550aは、タイムアウト検出通知に含まれるストライプ番号が示すストライプの読出処理を中止して、かかるストライプの読み出しできなかったサイズ分の付加データをデータ読出部550bに出力する。その後、セレクタ550aは、次のストライプの読出処理を再開する。
エラー検出部550dは、フラッシュメモリ141からECCチェックエラーが発生した旨の通知を受け付けた場合に、ECCエラー通知をセレクタ550aに対して行う処理部である。
ここで、ECCエラー通知を受け付けたセレクタ550aの処理について説明する。ECCエラー通知を受け付けたセレクタ550aは、読出処理中のストライプの読出処理を中止して、かかるストライプの読み出しできなかったサイズ分の付加データをデータ読出部550bに出力する。その後、セレクタ550aは、次のストライプの読出処理を再開する。
復旧データバッファ550eは、データを一次記憶する記憶装置であり、上述したように、データ読出部550bによって、ストライプまたは付加データが設定されているストライプが記憶される。
XOR演算部550fは、データ読出部550bによって読み出されたストライプを用いて訂正データを生成する処理部である。具体的には、XOR演算部550fは、ストライプ番号が奇数である7個のストライプを用いて訂正データを生成するとともに、ストライプ番号が偶数である7個のストライプを用いて訂正データを生成する。そして、XOR演算部550fは、生成した訂正データを訂正データバッファ550iに記憶させる。
CRC検査部550gは、データ読出部550bによって読み出されたストライプに誤りデータが存在するか否かを検査する処理部である。具体的には、CRC検査部550gは、データ読出部550bによって読み出されたストライプ内のCRCを用いて、誤りデータが存在するか否かを、ストライプごとに検査する。そして、誤りデータが存在する場合、すなわち、エラーを検出した場合、CRC検査部550gは、エラーを検出したストライプのストライプ番号をログ保持レジスタ550jに記憶させる。
AID検査部550hは、データ読出部550bによって読み出されたストライプがすべて揃っているか否かを検査する処理部である。具体的には、AID検査部550hは、データ読出部550bによって読み出されたストライプ内のAIDを用いて、小エリア内のストライプがすべて揃っているか否かを検査する。そして、ストライプがすべて揃っていないことを検出した場合、すなわち、エラーを検出した場合、AID検査部550hは、欠如しているストライプのストライプ番号をログ保持レジスタ550jに記憶させる。
訂正データバッファ550iは、データを一次記憶する記憶装置であり、上述したように、XOR演算部550fによって、訂正データが記憶される。ログ保持レジスタ550jは、データを一次記憶する記憶装置であり、上述したように、CRC検査部550gまたはAID検査部550hによって、エラーが検出されたストライプのストライプ番号が記憶される。
セレクタ550kは、セレクタ回路であり、復旧データバッファ550eと、訂正データバッファ550iと、ログ保持レジスタ550jとに記憶されている各種データに基づいて、復旧データバッファ550eに記憶されているストライプを、データ書込部550mに出力したり、誤りデータを訂正したストライプをデータ書込部550mに出力したりする。
具体的には、セレクタ550kは、ログ保持レジスタ550jにストライプ番号が記憶されていないストライプについては、復旧データバッファ550eに記憶されているストライプを、データ書込部550mに出力する。また、セレクタ550kは、ログ保持レジスタ550jにストライプ番号が記憶されているストライプ(以下、「エラー検出ストライプ」という)については、復旧データバッファ550eおよび訂正データバッファ550iに記憶されている各種データを用いて、かかるエラー発生ストライプの誤りデータを訂正してデータ書込部550mに出力する。
バウンダリ調整部550lは、セレクタ550kから受け付けた小エリア単位のストライプからバウンダリ調整値を除去する処理部である。具体的には、バウンダリ調整部550lは、小エリア単位のストライプから、データ復旧ディスクリプタに含まれるバウンダリ調整値のサイズ分のバウンダリ調整値を除去する。
データ書込部550mは、バウンダリ調整部550lによってバウンダリ調整値が除去された小エリア単位のストライプに含まれる退避対象単位データをキャッシュメモリ130に書き込む処理部である。なお、データ書込部550mは、パリティデータについてはキャッシュメモリ130に書き込まない。
次に、実施例1に係るストレージ装置1によるデータ退避処理について説明する。図8は、実施例1に係るストレージ装置1によるデータ退避処理の流れを示すシーケンス図である。
同図に示すように、RoC160の退避データ領域算出部161は、ストレージ装置1が異常終了したことを検出した場合(ステップS101)、データ退避ディスクリプタを生成するために必要となる各種情報を算出する。
そして、退避指示部162は、退避データ領域算出部161によって算出された各種情報に基づいて、ライトDMA541にデータ退避処理を行わせるためのデータ退避ディスクリプタを生成して、ディスクリプタ保持レジスタ530に記憶させる(ステップS102)。
例えば、図3−1に示した例のように、キャッシュメモリ130にデータD1が記憶されている場合、退避指示部162は、ライトDMA541にデータ退避処理をさせるためのデータ退避ディスクリプタとして、データD10の先頭アドレスと、データD10のサイズ28[KB]と、バウンダリ調整値のサイズ0[KB]と、AID等を含むデータ退避ディスクリプタを生成する。
同様に、退避指示部162は、ライトDMA542にデータ退避処理をさせるためのデータ退避ディスクリプタを生成して、ディスクリプタ保持レジスタ530に記憶させる(ステップS103)。
上述例の場合、退避指示部162は、ライトDMA542にデータ退避処理をさせるためのデータ退避ディスクリプタとして、データD20の先頭アドレスと、データD20のサイズ25[KB]と、バウンダリ調整値のサイズ3[KB]と、AID等を含むデータ退避ディスクリプタを生成する。
その後、退避指示部162は、ライトDMA541を起動させるとともに(ステップS104)、ライトDMA542を起動させて(ステップS105)、ライトDMA541およびライトDMA542に対して、データ退避処理を並行して行わせる。
退避指示部162によって起動されたライトDMA541は、データ退避処理を行い(ステップS106)、データ退避処理が完了した場合に、データ退避処理が完了した旨をRoC160に対して通知する(ステップS107)。同様に、ライトDMA542は、データ退避処理を行い(ステップS108)、データ退避処理が完了した場合に、データ退避処理が完了した旨をRoC160に対して通知する(ステップS109)。ライトDMA541および542によるデータ退避処理は、並行して行われる。
なお、上述したデータ退避処理の流れでは、ストレージ装置1が異常終了した後に、退避指示部162がデータ退避ディスクリプタを生成する例を説明したが、退避指示部162は、ストレージ装置1が異常終了する前に、データ退避ディスクリプタを生成してもよい。例えば、ストレージ装置1の起動中に、退避対象データのサイズ等を予め取得しておけば、ストレージ装置1の異常終了前にデータ退避ディスクリプタを生成することができる。
次に、ライトDMA541および542によるデータ退避処理について説明する。図9は、ライトDMA541および542によるデータ退避処理手順を示すフローチャートである。なお、ライトDMA541および542によるデータ退避処理手順は同一であるため、ここでは、ライトDMA541によるデータ退避処理手順についてのみ説明する。
同図に示すように、RoC160によって起動されたライトDMA541は、ディスクリプタ保持レジスタ530からデータ退避ディスクリプタを読み出す(ステップS201)。そして、ライトDMA541のデータ読出部541aは、キャッシュメモリ130から、所定のサイズのデータを読み出す(ステップS202)。このとき、データ読出部541aは、データ退避ディスクリプタに含まれている退避対象データの先頭アドレスから、退避対象データのサイズ分のデータを読み出す。
続いて、バウンダリ調整部541bは、データ読出部541aによって読み出された退避対象データに、データ退避ディスクリプタに含まれているバウンダリ調整値のサイズ分のバウンダリ調整値を加える(ステップS203)。
続いて、パリティ生成部541cは、退避対象データを、バウンダリサイズごとのバウンダリデータに区切って、さらに、バウンダリデータを、予めシステムで決められているサイズである2[KB]ごとに区切る。そして、パリティ生成部541cは、退避対象単位データ番号が奇数である7個の退避対象単位データを用いてパリティデータを生成するとともに、退避対象単位データ番号が偶数である7個の退避対象単位データを用いてパリティデータを生成する(ステップS204)。
続いて、CRC付与部541gは、退避対象単位データごとにCRCを生成するとともに、パリティデータごとにCRCを生成して、生成したCRCを、退避対象単位データおよびパリティデータに付与する(ステップS205)。続いて、AID付与部541hは、退避対象単位データおよびパリティデータに、AIDを付与する(ステップS206)。そして、データ書込部541fは、CRCおよびAIDが付与された退避対象単位データおよびパリティデータを、フラッシュメモリ141に書き込む(ステップS207)。
次に、実施例1に係るストレージ装置1によるデータ復旧処理について説明する。図10は、実施例1に係るストレージ装置1によるデータ復旧処理の流れを示すシーケンス図である。
同図に示すように、RoC160の復旧指示部163は、異常終了後にストレージ装置1が起動したことを検出した場合(ステップS301)、リードDMA550に対して、フラッシュメモリ141に記憶されているデータをキャッシュメモリ130へ復旧する旨のデータ復旧ディスクリプタを生成して、ディスクリプタ保持レジスタ530に記憶させる(ステップS302)。その後、復旧指示部163は、リードDMA550を起動させる(ステップS303)。
復旧指示部163によって起動されたリードDMA550は、フラッシュメモリ141に記憶されているデータをキャッシュメモリ130へ復旧させるデータ復旧処理を行う(ステップS304)。かかるデータ復旧処理が完了した場合に、リードDMA550は、データ復旧処理が完了した旨をRoC160に対して通知する(ステップS305)。
続いて、復旧指示部163は、リードDMA550に対して、フラッシュメモリ142に記憶されているデータをキャッシュメモリ130へ復旧する旨のデータ復旧ディスクリプタを生成して、ディスクリプタ保持レジスタ530に記憶させる(ステップS306)。その後、復旧指示部163は、リードDMA550を起動させる(ステップS307)。
復旧指示部163によって起動されたリードDMA550は、フラッシュメモリ142に記憶されているデータをキャッシュメモリ130へ復旧させるデータ復旧処理を行う(ステップS308)。かかるデータ復旧処理が完了した場合に、リードDMA550は、データ復旧処理が完了した旨をRoC160に対して通知する(ステップS309)。
続いて、RoC160は、キャッシュメモリ130に復旧されたデータを、HDD11に記憶させるリストア処理(フラッシュバック)を行う(ステップS310)。これにより、HDD11に書き込みされていないキャッシュメモリ130上のデータはなくなる。
続いて、復旧指示部163は、イレースディスクリプタを生成して、データ転送DMA150に記憶させる(ステップS311)。そして、復旧指示部163は、イレースDMA561および562を起動させて(ステップS312)、イレースDMA561および562に対して、フラッシュメモリ141および142に記憶されているデータを消去させる。
復旧指示部163によって起動されたイレースDMA561および562は、ディスクリプタ保持レジスタ530から、イレースディスクリプタを読み出して(ステップS313)、イレース処理を行う(ステップS314)。かかるイレース処理が完了した場合に、イレースDMA561および562は、イレース処理が完了した旨をRoC160に対して通知する(ステップS315)。そして、イレース処理が完了した旨の通知を受け付けたRoC160は、ストレージ装置1を起動させる(ステップS316)。
次に、リードDMA550によるデータ復旧処理について説明する。図11は、リードDMA550によるデータ復旧処理手順を示すフローチャートである。同図に示すように、RoC160によって起動されたリードDMA550は、ディスクリプタ保持レジスタ530からデータ復旧ディスクリプタを読み出す(ステップS401)。
そして、リードDMA550のデータ読出部550bは、セレクタ550aを介して、フラッシュメモリ141から、小エリアのストライプを読み出す(ステップS402)。このデータ読出部550bによるデータ読出処理が所定の時間内に完了しない場合(ステップS403否定)、タイムアウト検出部550cは、データ読出部550bによって読取処理されているストライプに対して、タイムアウトが発生したことを検出する。そして、タイムアウト検出部550cは、タイムアウト検出通知をセレクタ550aに対して行う。
タイムアウト検出通知を受け付けたセレクタ550aは、タイムアウト検出通知に含まれるストライプ番号が示すストライプの読出処理を中止して、かかるストライプの読み出しできなかったサイズ分の付加データをデータ読出部550bに出力する(ステップS404)。このようにして、データ読出部550bは、フラッシュメモリ141から小エリアのストライプを読み出す。
続いて、XOR演算部550fは、データ読出部550bによって読み出されたストライプを用いて訂正データを生成する(ステップS405)。続いて、CRC検査部550gは、データ読出部550bによって読み出されたストライプに誤りデータが存在するか否かを検査し、AID検査部550hは、データ読出部550bによって読み出されたストライプがすべて揃っているか否かを検査する(ステップS406)。
CRC検査部550g、または、AID検査部によってエラーが検出された場合(ステップS407肯定)、セレクタ550kは、データ読出部550bによって読み出されたストライプ、および、XOR演算部550fによって生成された訂正データに基づいて、エラーが検出されたストライプの誤りデータを訂正する(ステップS408)。
続いて、バウンダリ調整部550lは、データ読出部550bによって読み出された小エリアのストライプから、データ復旧ディスクリプタに含まれるバウンダリ調整値のサイズ分のバウンダリ調整値を除去する(ステップS409)。
そして、データ書込部550mは、バウンダリ調整部550lによってバウンダリ調整値が除去された小エリアのストライプに含まれる退避対象単位データを、キャッシュメモリ130に書き込む(ステップS410)。なお、このとき、データ書込部550mは、パリティデータについてはキャッシュメモリ130に書き込まない。
リードDMA550は、フラッシュメモリ141に記憶されている全てのデータを読み出していない場合(ステップS411否定)、フラッシュメモリ141から全てのデータを読み出すまで、上述した処理手順(ステップS401〜S410)を繰り返し行う。
上述してきたように、実施例1に係るストレージ装置1は、データ退避処理時に、退避対象データのパリティデータを生成して、CRCやAIDを付与した退避対象データおよびパリティデータをフラッシュメモリ141または142に書き込み、データ復旧処理において、フラッシュメモリ141または142から所定の時間内にデータ読出処理が完了しない場合に、データ読出処理を中止して付加データを設定し、パリティデータを用いて誤りデータを訂正したデータをキャッシュメモリ130に書き込むように構成したので、フラッシュメモリ141または142からデータの読出応答がなされない場合であっても、フラッシュメモリ141または142に退避させたデータを、キャッシュメモリ130に復旧させることができる。
なお、上記実施例1では、データ退避処理時に、ライトDMA541および542が、7個の退避対象単位データに対して、1個のパリティデータを生成する例を示したが、退避対象単位データの数と、パリティデータの数の比率はこれに限らない。例えば、ライトDMA541および542は、2個退避対象単位データに対して、1個のパリティデータを生成してもよいし、10個退避対象単位データに対して、1個のパリティデータを生成してもよい。
また、上記実施例1では、ライトDMA541および542が、退避対象単位データ番号が奇数である退避対象単位データを用いてパリティデータを生成するとともに、退避対象単位データ番号が偶数である退避対象単位データを用いてパリティデータを生成する例を示したが、ライトDMA541および542は、退避対象単位データ番号に関わらず、所定の数の退避対象単位データを用いてパリティデータを構成してもよい。
ところで、上記実施例1では、データサイズがバウンダリサイズに満たないバウンダリデータに、バウンダリ調整値を加える処理であるバウンダリ処理を行う例を示したが、バウンダリ処理を行わないようにしてもよい。そこで、実施例2では、キャッシュメモリ130から読み出したデータをバウンダリサイズごとに区切れない場合であっても、バウンダリ処理を行わない例について説明する。
まず、実施例2に係るストレージ装置2によるデータ退避処理の概要を説明する。なお、実施例2に係るストレージ装置2の概略構成は、図1に示したストレージ装置1の概略構成と同様であるため、その説明を省略する。
図12−1は、実施例2に係るストレージ装置2によるデータ退避処理の概要を説明するための図である。同図に示すように、キャッシュメモリ130には、210[KB]のデータD3が記憶されているものとする。この状態で、ストレージ装置2が異常終了した場合、データD3は、バウンダリサイズ28[KB]ごとにデータD31〜D38に区切られる。
ここで、実施例2に係るストレージ装置2のRoC(RoC260とする)は、ライトDMA541に対して、キャッシュメモリ130に記憶されているデータD3のうち、データD4(データD31〜D34)について、データ退避処理を行うように指示する。
さらに、RoC260は、ライトDMA542に対して、キャッシュメモリ130に記憶されているデータD3のうち、データD5(データD34−2と、データD35〜D38)について、データ退避処理を行うように指示する。
つまり、RoC260は、ライトDMA541に対して、データD3のキャッシュメモリ130における先頭の記憶位置である先頭アドレスから4個分のバウンダリデータ(同図に示したデータD31、D32、D33、D34)について、データ退避処理を行うように指示する。また、RoC260は、ライトDMA542に対して、データD3のキャッシュメモリ130における最後の記憶位置である最終アドレスから、先頭アドレス方向に4個分のバウンダリデータ(同図に示したデータD54、D53、D52、D51)について、データ退避処理を行うように指示する。
このような指示を受け付けたライトDMA541は、データD4を、バウンダリサイズ28[KB]ごとにデータD31〜D34に区切ることができる。また、ライトDMA542は、データD5を、バウンダリサイズ28[KB]ごとにデータD51〜D54に区切ることができる。すなわち、実施例2に係るストレージ装置2は、バウンダリ処理を行うことなく、データ退避処理を行うことができる。
次に、実施例2に係るストレージ装置2によるデータ復旧処理の概要について説明する。図12−2は、実施例2に係るストレージ装置2によるデータ復旧処理の概要を説明するための図である。図12−2に示したフラッシュメモリ141および142には、図12−1に示したライトDMA541およびライトDMA542によって退避されたデータが記憶されているものとする。
ストレージ装置2が異常終了後に起動した場合、リードDMA550は、フラッシュメモリ141からデータD31を読み出しながら各種検査(CRC検査等)を行った後、キャッシュメモリ130に書き込む。また、リードDMA550は、同様の処理を、データD32〜D34についても行い、キャッシュメモリ130にデータD4を復旧させる。
その後、リードDMA550は、フラッシュメモリ142からデータD51を読み出しながら各種検査(CRC検査等)を行った後、キャッシュメモリ130に書き込む。このとき、キャッシュメモリ130には、フラッシュメモリ141から読み出したデータD34−2が書き込み済みであるので、リードDMA550は、データD51を書き込む場合、データD34−2の部分については上書きすることとなる。
そして、リードDMA550は、フラッシュメモリ142からデータD52〜D54を順に読み出して、キャッシュメモリ130にデータD5を復旧させる。リードDMA550が、フラッシュメモリ141および142に記憶されているデータをすべてキャッシュメモリ130に書き込むと、キャッシュメモリ130にデータD3を復旧することができる。
このように、実施例2に係るストレージ装置2は、2系統のライトDMA541および542のうち、一方のライトDMA541に対して、退避対象データのキャッシュメモリ130における先頭の記憶位置である先頭アドレスから所定の数のバウンダリデータについて、データ退避処理を行わせるとともに、他方のライトDMA542に対して、退避対象データのキャッシュメモリ130における最後の記憶位置である最終アドレスから、先頭アドレス方向に所定の数のバウンダリデータについて、データ退避処理を行わせるので、DMA541および542が、フラッシュメモリ141または142に退避するデータを、バウンダリデータで割り切れることができ、その結果、バウンダリ処理を行うことなく、データ退避処理を行うことができる。
次に、実施例2に係るストレージ装置2が有するCM200の構成について説明する。図13は、実施例2に係るストレージ装置2が有するCM200の構成を示す図である。ここでは、図4に示した構成部位と同様の機能を有する部位には同一符号を付すこととして、その詳細な説明を省略する。
同図に示した退避データ領域算出部261は、ストレージ装置2が異常終了した場合に、キャッシュメモリ130に記憶されている退避対象データのサイズ等に基づいて、まず、ライトDMA541が退避するデータの開始アドレスBA1およびサイズDS1を算出し、次に、ライトDMA542が退避するデータの開始アドレスBA2およびサイズDS2を算出する。
以下に、図12−1に示した例を用いつつ、退避データ領域算出部261による退避データ領域算出処理について、より具体的に説明する。まず、退避データ領域算出部261は、ストレージ装置2が異常終了した場合に、退避対象データのキャッシュメモリ130における記憶位置を示す先頭アドレスおよび最終アドレスを取得する。そして、退避データ領域算出部261は、取得した先頭アドレスを、ライトDMA541が退避するデータの開始アドレスBA1に決定する。
続いて、退避データ領域算出部261は、退避対象データのサイズを2で除算したサイズ「X]を求める。図12−1に示した例では、退避対象データのサイズが210[KB]であるので、退避データ領域算出部261は、サイズXとして、210[KB]を2で除算した105[KB]を求める。
続いて、退避データ領域算出部261は、式(1)「28[KB] × N > サイズX[KB]」を満たす整数Nの最小値に28[KB]を乗算した値を、ライトDMA541が退避するデータのサイズDS1に決定する。上記例では、サイズXが105[KB]であり、式(1)を満たすNの最小値は「4」となるので、退避データ領域算出部261は、4に28[KB]を乗算した値である112[KB]を、ライトDMA541が退避するデータのサイズDS1に決定する。
続いて、退避データ領域算出部261は、退避対象データの先頭アドレスに、ライトDMA541が退避するデータサイズDS1を加算した値「Y」を求める。このYは、ライトDMA541が退避するデータの最終アドレスに該当する。そして、退避データ領域算出部261は、退避対象データの最終アドレスからYを減算した値「Z」を求める。このZは、退避対象データのサイズから、ライトDMA541が退避するデータのサイズDS1を減算したサイズに該当する。
すなわち、上記例では、退避対象データのサイズが210[KB]であり、サイズDS1が112「KB」であるので、退避データ領域算出部261は、サイズZとして、210[KB]から112[KB]を減算した98[KB]を求める。
続いて、退避データ領域算出部261は、式(2)「28[KB]×N > サイズZ[KB]」を満たす整数Nの最小値に28[KB]を乗算した値を、ライトDMA542が退避するデータのサイズDS2に決定する。上記例では、サイズZが98[KB]であり、式(2)を満たすNの最小値は「4」となるので、退避データ領域算出部261は、4に28[KB]を乗算した値である112[KB]を、ライトDMA542が退避するデータのサイズDS2に決定する。
続いて、退避データ領域算出部261は、退避対象データの最終アドレスから、ライトDMA542が退避するデータのサイズDS2を減算した値を、ライトDMA542が退避するデータの先頭アドレスBA2に決定する。
このようにして、退避データ領域算出部261は、ライトDMA541が退避するデータの開始アドレスBA1およびサイズDS1と、ライトDMA542が退避するデータの開始アドレスBA2およびサイズDS2を算出する。
図13に示した退避指示部262は、データ退避ディスクリプタを生成して、データ転送DMA150に送信することで、ライトDMA541および542に対して、データ退避処理を行うように指示する。
具体的には、退避指示部262は、上述した開始アドレスBA1およびサイズDS1を含むデータ退避ディスクリプタを生成して、かかるデータ退避ディスクリプタに基づいてデータ退避処理を行うようにライトDMA541に対して指示をする。また、退避指示部262は、上述した開始アドレスBA2およびサイズDS2を含むデータ退避ディスクリプタを生成して、かかるデータ退避ディスクリプタに基づいてデータ退避処理を行うようにライトDMA542に対して指示をする。なお、退避指示部262が生成するデータ退避ディスクリプタには、バウンダリ調整値のサイズを含まない。
次に、図13に示した退避データ領域算出部261による退避データ領域算出処理について説明する。図14は、図13に示した退避データ領域算出部261による退避データ領域算出処理手順を示すフローチャートである。
図14に示すように、退避データ領域算出部261は、退避対象データのキャッシュメモリ130における記憶位置を示す先頭アドレスおよび最終アドレスを取得する(ステップS501)。
そして、退避データ領域算出部261は、取得した先頭アドレスを、ライトDMA541が退避するデータの開始アドレスに決定する(ステップS502)。続いて、退避データ領域算出部261は、退避対象データのサイズを2で除算したサイズXを求める(ステップS503)。
続いて、退避データ領域算出部261は、式(1)「28[KB] × N > サイズX[KB]」を満たす整数Nの最小値を求める(ステップS504)。以下では、ここで求めた最小値Nを「第一の基準値」と呼ぶこととする。そして、退避データ領域算出部261は、第一の基準値に28[KB]を乗算した値を、ライトDMA541が退避するデータのサイズに決定する(ステップS505)。
続いて、退避データ領域算出部261は、退避対象データのサイズから、ライトDMA541が退避するデータのサイズを減算したサイズZを求める(ステップS506)。続いて、退避データ領域算出部261は、式(2)「28[KB] × N > サイズZ[KB]」を満たす整数Nの最小値を求める(ステップS507)。以下では、ここで求めた最小値Nを「第二の基準値」と呼ぶこととする。そして、退避データ領域算出部261は、第二の基準値に28[KB]を乗算した値を、ライトDMA542が退避するデータのサイズに決定する(ステップS508)。
続いて、退避データ領域算出部261は、退避対象データの最終アドレスから、ライトDMA542が退避するデータのサイズを減算した値を求め(ステップS509)、求めた値を、ライトDMA542が退避するデータの先頭アドレスに決定する(ステップS510)。
上述してきたように、実施例2に係るストレージ装置2は、退避データ領域算出部261が、ライトDMA541および542が退避するデータの開始アドレスおよびサイズを求めるように構成したので、DMA541および542は、フラッシュメモリ141または142に退避するデータを、バウンダリデータで割り切れることができ、その結果、フラッシュメモリ141または142からデータの読出応答がなされない場合であっても、バウンダリ処理を行うことなく、フラッシュメモリ141または142に退避させたデータを、キャッシュメモリ130に復旧させることができる。
また、実施例2に係るストレージ装置2では、バウンダリ処理を行う必要がないので、退避データ領域算出部261がバウンダリ調整値のサイズを算出する必要がなくなる。その結果、退避データ領域算出部261にかかる処理負荷を軽減することができ、データ退避処理の高速化を図ることができる。すなわち、異常終了時に、電力供給部12から電力供給される短い時間内に、大容量のデータについて、データ退避処理を行うことができる。
また、実施例2に係るストレージ装置2では、バウンダリ処理を行う必要がないので、ライトDMA541および542と、リードDMA550から、バウンダリ処理を行うための回路を削除することができ、ライトDMA541および542と、リードDMA550の規模を小さくすることができる。例えば、実施例2に係るストレージ装置2では、図6に示したライトDMA541からバウンダリ調整部541bを削除することができ、図7に示したリードDMA550からバウンダリ調整部550lを削除することができる。その結果、ライトDMA541および542と、リードDMA550にかかるコストを軽減することができる。
なお、上記実施例2では、ストレージ装置2が2系統のライトDMA541および542を有することを前提として、退避データ領域算出部261が、ライトDMA541および542が退避するデータの開始アドレスおよびサイズを算出する例を示したが、3系統以上のライトDMAを有するストレージ装置においても、バウンダリ処理を行わないように、退避データ領域算出部261が、各ライトDMAが退避するデータの開始アドレスおよびサイズを算出してもよい。例えば、ストレージ装置が4個のライトDMAを有する場合、退避データ領域算出部261は、4個目のライトDMAに対して、退避対象データの最終アドレスから、先頭アドレス方向に所定の数のバウンダリデータについて、データ退避処理を行わせるように、4個目のライトDMAが退避するデータの開始アドレスおよびサイズを算出する。
また、上記実施例1および2では、バウンダリサイズを28[KB]とし、バウンダリデータを区切るサイズを2[KB]とし、エリア内のpageの数を1024個とし、小エリア内のpageの数を16個とする例を示したが、これらの規定値は、上記例に限られない。例えば、バウンダリサイズを56[KB]とし、バウンダリデータを区切るサイズを4[KB]とし、エリア内のpageの数を2048個とし、小エリア内のpageの数を32個としてもよい。
また、上記実施例1および2では、異常終了時にデータを退避する記憶領域として、OneNAND型のフラッシュメモリを用いる例を示したが、異常終了時にデータを退避する記憶領域は、OneNAND型のフラッシュメモリ以外の不揮発性メモリであってもよい。
また、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散、統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散、統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPU(Central Processing Unit)および当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。