説明

退避処理装置、退避処理方法および退避処理プログラム

【課題】キャッシュデータのバックアップ処理に要する処理時間を短縮する。
【解決手段】 記憶装置とのアクセス時に取得したデータを記憶するキャッシュメモリと、不揮発性メモリと、キャッシュメモリ内に記憶されているデータにおいて、退避の優先順位を決定するための情報を記憶する管理テーブルと、キャッシュメモリへのデータ記憶に際し、データの種別に応じて、退避の優先順位を決定するための情報を管理テーブルに記憶させる管理手段と、停電発生時に、管理テーブルに記憶されている退避の優先順位を決定するための情報に基づき、キャッシュメモリに記憶されているデータを不揮発性メモリに書き込む処理を実行する停電処理部とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、退避処理装置に関し、例えば、RAID装置の停電発生に伴う、バックアップ処理に要する処理時間を短縮する退避処理装置等に関する。
【背景技術】
【0002】
複数のHDD(Hard Disk Drive)を組み合わせ、高速・大容量・高信頼性に優れたディスクシステムを構築する技術としてRAID(Redundant Arrays of Independent(Inexpensive)Disks)が広く知られている。
【0003】
一般に、RAID装置は、その上位装置(例えば、ホストコンピュータ、以下、ホストとする)からのデータアクセスに要する処理時間を短縮するために、キャッシュメモリを用いたユーザデータのリード・ライトが行われている。
【0004】
このキャッシュメモリには、通常、DRAM(Dynamic Random Access Memory)・SRAM(Static Random Access Memory)といった半導体の記憶装置が利用されている。
【0005】
そして、RAID装置は、ホストからユーザデータのリード要求を受け付けた場合に、キャッシュメモリ(以下、単にキャッシュとする)からユーザデータを検索し、リード要求に対応するユーザデータを取得したら、取得したキャッシュデータをホストに通知する。
【0006】
一方、キャッシュからユーザデータを取得しなかった場合、ハードディスク装置(以下、単にディスクとする)に記憶されているユーザデータを取得し、キャッシュに書込みを行う。
【0007】
また、ユーザデータのライト要求を受け付けた場合には、キャッシュにユーザデータを記憶した時点で、ライト処理が完了した旨をホストへ通知する。その後、所定の条件を満たした時点で、キャッシュに記憶したユーザデータをディスクに記憶する。
【0008】
ところで、上述したキャッシュは、揮発性の半導体の記憶装置が利用されていることから、キャッシュへの電源供給がなくなれば、キャッシュのユーザデータが消去されてしまう。このため、停電発生時には、キャッシュ上の全データを不揮発性の記憶装置(例:NANDフラッシュ、コンパクトフラッシュ(登録商標)等)に退避させ、バックアップする必要がある。
【0009】
例えば、図14に示すように、停電発生時に、RAID装置20は、キャッシュ24に記憶されているキャッシュデータ24aを、リードデータおよびライトデータを区別することなく、NANDフラッシュ23に退避させる。
【0010】
また、停電が発生すると、RAID装置20への電力供給が、PSU(Power Supply
Unit)28からSCU(System Capacity Unit)27に切替えられ、RAID装置20は、SCU27に蓄えられている電力を使用して、上述した退避処理を行う。
【0011】
なお、停電発生時のライトバック(ライトデータのハードディスクへの書込み)処理を効率的に行うとともに、停電時の省電力化を図る技術(例えば、特許文献1参照)や、ディスクのアクセス情報に基づき、論理ディスク装置における物理ディスク装置への再配置を行う技術が知られている(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開平9−330277号公報
【特許文献2】特開2006−59374号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかしながら、上述した従来の技術では、全てのキャッシュデータをバックアップの対象としており、バックアップ処理に、必要以上の処理時間が掛かってしまう場合があった。
【0014】
例えば、図14に示したキャッシュ24に、膨大なキャッシュデータ24aが記憶されている状況で、RAID装置20に停電が発生した場合、バックアップ処理に、必要以上の処理時間が掛かってしまう場合があった。
【0015】
この場合、SCU27の電力供給時間内に、キャッシュデータ24aのNANDフラッシュ23への退避が完了せず、一部のキャッシュデータが消失してしまう場合がある。
【0016】
開示の技術は、上記に鑑みてなされたものであって、バックアップに要する処理時間を短縮する退避処理装置等を提供することを目的とする。
【課題を解決するための手段】
【0017】
本技術は、上記従来の課題に鑑み、前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、退避の優先順位を決定するための情報を管理テーブルに記憶させる管理手段と、停電発生時に、管理テーブルに記憶されている退避の優先順位を決定するための情報に基づき、キャッシュメモリに記憶されているデータを不揮発性メモリに書き込む処理を実行する停電処理部とを設けたものである。
【発明の効果】
【0018】
本願技術によれば、停電発生におけるキャッシュメモリのバックアップに要する処理時間を短縮し、バックアップ速度を向上させる事ができるという効果を奏する。
【図面の簡単な説明】
【0019】
【図1】本実施の形態に示すRAID装置の構成を示す機能ブロック図である。
【図2】本実施の形態のNANDフラッシュのデータ構造の一例を示す図である。
【図3】本実施の形態に示すキャッシュメモリのデータ構造の一例を示す図である。
【図4】本実施の形態に示すFPGAの構成を示す機能ブロック図である。
【図5】本実施の形態に示すバックアップ管理テーブルのデータ構造の一例を示す図である。
【図6】本実施の形態に示す不良ブロック管理テーブルのデータ構造の一例を示す図である。
【図7】本実施の形態に示すバックアップ完了フラグのデータ構造の一例を示す図である。
【図8】本実施の形態の退避処理装置において、通電時における処理を示すフローチャートである。
【図9】本実施の形態の退避処理装置において、停電時の処理を示すフローチャートである。
【図10】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図11】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図12】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図13】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図14】従来技術を説明するための図である。
【発明を実施するための形態】
【0020】
以下に、本願の開示する退避処理装置、退避処理方法およびストレージシステムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【0021】
次に、本実施の形態に示すRAID装置(Redundant Arrays of Independent(Inexpensive)Disks)について説明する。図1は、本実施の形態に示すRAID装置の構成を示す機能ブロック図である。
【0022】
図1において、RAID装置200は、複数の上位装置(例えば、ホストコンピュータA、B、C・・・以下、単にホストとする)からの要求に応じて、HDD(Hard Disk Drive)に記憶されている各種ユーザデータやプログラムデータの伝送を行う。また、RAID装置200は、停電発生時には、バックアップに必要とされるキャッシュデータをNAND型メモリに退避する処理を実行する。
【0023】
また、RAID装置200は、CM(Controller Module)201と、PSU(Power Supply Unit)202と、HDD(Hard Disk Drive)203a〜203zとを有する。
【0024】
CM201は、キャッシュメモリの管理や、ホストとのインターフェース制御や、各HDDの制御を行う制御部で、NANDフラッシュ201aと、キャッシュ201b、FPGA(Field Programmable Gate Array)201cと、RoC(RAID−on−Chip)201dと、SCU(Super Capacitor Unit)201eと、Exp(エキスパンダ)201fとを有する。
【0025】
NANDフラッシュ201aは、RAID装置200に停電が発生した場合に、キャッシュ201bに記憶されているキャッシュデータがバックアップされるNAND型メモリである。
【0026】
なお、NANDフラッシュ201aは、ブロック単位でアクセスされる構造を有し、シーケンシャルライトにて、キャッシュ201bのキャッシュデータが書込まれる。
【0027】
図2は、本実施の形態のNANDフラッシュ201aのデータ構造を示す図である。図2のNANDフラッシュ201aは、複数のブロックa01〜a20を有している。
【0028】
このブロックa01〜a20は、各々キャッシュデータを記憶するデータ領域であり、ブロックごとに、キャッシュデータが書込まれる。なお、本実施の形態のNANDフラッシュ201aの1ブロック当たりのデータ領域は、4Mbyteとする。
【0029】
そして、このブロックa01〜a20のうち、ブロックa01〜a018は、キャッシュ201bのキャッシュデータがバックアップされるデータ格納領域である。また、ブロックa19、a20は、Dirtyか否かを示す情報や、NANDフラッシュ201aが有する不良ブロックを示す情報などが記憶される不良ブロック管理テーブル213B格納領域である。この不良ブロック管理テーブル213B格納領域(ブロックa19.a20)は、RoC201dによって各種データが管理されている。
【0030】
次に、図1のキャッシュ201bについて説明する。キャッシュ201bは、ホストとHDD203a〜203zとの間で転送が行われるユーザデータを一時的に記憶するキャッシュメモリである。なお、上述してきたようにキャッシュ201bに記憶されているユーザデータをキャッシュデータとする。
【0031】
図3は、本実施の形態に示すキャッシュメモリのデータ構造の一例を示す図である。図3に示したキャッシュ201bは、キャッシュデータを一時的に記憶する複数のテーブルb01〜b10を有している。
【0032】
なお、図3に示した各テーブルb01〜b10は、4Mbyteのユーザデータを保存する容量を有している。また、このユーザデータは64kBのデータ長単位で、RoC201dに管理されるものとする。
【0033】
また、ユーザデータの一例としては、リードデータとライトデータが挙げられる。「リードデータ」は、HDD203a〜203zのいずれかに記憶されているユーザデータを読み出したデータを一時記憶したものである。
【0034】
ホストからRAID装置200にユーザデータのリード要求があった場合、CM201は、キャッシュ201b内の各テーブルb01〜b10から、リード要求に対応するユーザデータがキャッシュデータを取得できた場合は、取得したキャッシュデータをホストに出力する。
【0035】
一方、キャッシュ201bからキャッシュデータを取得できなかった場合、CM201は、HDD203a等から、リード要求に対応するユーザデータを取得し、取得したユーザデータをキャッシュ201bに複製する。このように、HDD203a等から、リード要求に対応するユーザデータを取得することを以下、「ステージング」とする。
【0036】
上記したように、リードデータは、HDD203a〜HDD203zから取得したデータであるので、キャッシュ201bから、キャッシュデータがなくなったとしても、HDD203a〜HDD203zからの再取得が可能なデータである。
【0037】
一方、「ライトデータ」は、ホストからRAID装置200へ書込み要求があったユーザデータがキャッシュメモリに一時的に記憶されたものであり、所定の条件を満たした後、各HDDに書込まれる。このため、ライトデータは、HDD203a〜203zのいずれにも書き込まれていないデータの可能性がある。
【0038】
次に、図1の説明に戻り、FPGA201cについて説明する。FPGA201cは、所定のプログラムによって制御される集積回路を示し、DMA(Direct Memory Access)エンジンを有する。
【0039】
このDMAエンジンとは、CPU(Central Processing Unit)を介さずに装置とRAM(Random Access Memory)間でデータ転送を行う方式を示し、本実施の形態では、停電時にキャッシュデータをNANDフラッシュ201aに退避・復元するために必要な機能を付加したDMAをFPGA201cに搭載している。
【0040】
なお、DMAエンジンの一例として、停電時に、キャッシュデータを退避するライトDMA(TRN)、退避データをキャッシュ201bに戻すリードDMA(RCV)、NANDフラッシュ201aのイレースやチェックを行うためのコマンド発行DMA(UCE)等が挙げられる。そして、このDMAは、RoC201dの命令によって、ハードウェア的にデータを転送する。
【0041】
このFPGA201cについて図を用いて説明する。図4は、本実施の形態に示すFPGAの構成を示す機能ブロック図である。FPGA201cは、停電発生時、キャッシュ201bの所定データをNANDフラッシュ201aに退避させる処理を実行する。また、FPGA201は、復電時、停電時にNANDフラッシュ201aへ退避させたデータをキャッシュ201bに戻す。
【0042】
そして、FPGA201cは、IF(Interface)制御部211と、アクセスコントローラ212と、アクセス管理テーブル213と、TRN214と、IF制御部215とを有する。
【0043】
IF制御部211は、図1に示したRoC201dとTRN214との各種データのやり取りや、このRoC201dと後述するアクセスコントローラ212との各種データのやり取りを制御するインターフェースである。
【0044】
アクセスコントローラ212は、IF制御部211を介して、アクセス管理テーブル213と、RoC201dとの各種データのやり取りを制御する制御部である。
【0045】
アクセス管理テーブル213は、バックアップ管理テーブル213aと、上述した不良ブロックを管理する不良ブロック管理テーブル213bとを有する。まず、バックアップ管理テーブル213aのデータ構造について説明する。
【0046】
図5は、バックアップ管理テーブル213aのデータ構造の一例を示す図である。このバックアップ管理テーブル213aは、図5に示されるように、キャッシュ201bの各テーブルb01〜b10の各々に対応する複数の3bitフラグc01〜c10を有する。
【0047】
この3bitフラグの各々のビットは、[2]ビットめ、[1]ビットめ、[0]ビットめの3ビットからなり、各々、停電時に、対応するテーブルに記憶されたデータに対し、どのような処理を行なうかを識別するためのフラグであり、本実施の形態における各ビットのフラグは、以下の意味を持つ。
【0048】
まず、3ビットフラグの[2]ビットめは、2重書込み(Dual)を行なうか否かを示すビットである。次に、[1]ビットめは、優先度を示すフラグで、フラグが立つもの(即ち1が記憶されているもの)が、立たないものの優先度が低い(Stay)ことを示す。更に、[0]ビットめは、バックアップをスキップするかを判断するフラグで、「1」が立っていれば、停電時、バックアップを行わなくともよいことを示している。
【0049】
このバックアップ管理テーブル213aは、RoC201dによって管理される。
【0050】
次に、図4に示した不良ブロック管理テーブル213bについて説明する。不良ブロック管理テーブル213bは、図2に示したNANDフラッシュ201aの劣化によるライト失敗(Program Fail)、消去失敗(Erace Fail)、リード不可(Load Fail)が発生する不良ブロックを管理するテーブルで、上述したInvalidTableに相当する。そして、RoC201dのファームウェアにて各データが管理される。
【0051】
具体的に図を用いて説明する。図6は、本実施の形態に示す不良ブロック管理テーブル213bのデータ構造の一例を示す図である。本実施の形態における不良ブロック管理テーブル213bは、NANDフラッシュの各ブロックa01〜a20に対応した、項目c01〜c20を有する。この項目は、各々「Dirty」「Invalid」を識別するフラグを有する。
【0052】
「Dirty」フラグは、バックアップ時に、ユーザデータの転送エラーが発生し、NANDフラッシュ201aへの書込みが正常に終了しなかったか否かを識別するフラグである。
【0053】
そして、図6に示すようにフラグ1が立っている場合は、Dirtyな状態を示し、フラグ0の場合は、正常にユーザデータの転送が終了した場合を示す。
【0054】
「Invalid」フラグは、各NANDフラッシュ201aのブロックが「不良ブロック」であることを識別するためのフラグである。このフラグに「1」が格納されている項目に対応するNANDフラッシュ201aのブロックは、バックアップに使用することができないことを示している。
【0055】
次に、図4の説明に戻り、TRN214について説明する。TRN214は、キャッシュ201bのユーザデータを退避するDMAを示し、メイン制御部214aと、リード部214bと、エラー制御部214cと、データバッファ部214d1と、CRC生成部214d2と、NANDライト制御部214eとを有する。
【0056】
メイン制御部214aは、不良ブロック管理テーブル213bに記憶されているInvalidフラグや、Dirtyフラグの更新を行う処理部である。
【0057】
このメイン制御部214aは、アドレス指定部214a1、Invalid判定部214a2、及び、Dirty更新部214a3を有する。
【0058】
アドレス指定部214a1は、不良ブロック管理テーブル213bのアドレス管理を行なう。また、Invalid判定部214a2は、不良ブロック管理テーブル213bに記憶されている各項目のInvalidフラグを元に対象となるNANDフラッシュ201aのブロックが不良か否かを判定する。更に、Dirty更新部214a3は、不良ブロック管理テーブル213bに記憶されている各項目のDirtyフラグを更新する。
【0059】
また、メイン制御部214aは、停電発生時に、キャッシュ201bのリード開始をリード部214bに要求する制御も行なう。
【0060】
次に、リード部214bは、停電発生時に、キャッシュ201bのデータの少なくとも一部を、NANDフラッシュ201aへ退避させる制御部である。
【0061】
このリード部214bは、フラグ判定部220と、キャッシュアドレス管理部221と、リード制御部222とを有する。
【0062】
フラグ判定部220は、図5に示すように、バックアップ完了テーブル220aを有する。このバックアップ完了テーブル220aは、図7に示されるように、[0][1][2]の3bitで形成されている。
【0063】
各々のビットは、それぞれ1回目のバックアップ各々のバックアップ処理が完了したかを示すフラグである。
【0064】
フラグ判定部220は、停電時、種類の異なる3回のデータ読み出しを、後述するリード制御部222に指示する。
【0065】
1回目のバックアップ処理は、バックアップ管理テーブル213a内の3bitフラグの[1]ビットめ(Stay)及び[0]ビットめ(skip)に「0」が格納されている3bitフラグに対応した、キャッシュ201bのブロックに記憶されているデータのバックアップ処理である。即ち、1回目のバックアップ処理は、優先順位が低くなく、スキップ対象ではないキャッシュ201bのブロックのデータを、NANDフラッシュ201aへ退避させる処理を行なうものである。
【0066】
また、2回目のバックアップ処理は、バックアップ管理テーブル213a内の3bitフラグの[1]ビットめ(Stay)に「1」が格納されている3bitフラグに対応した、キャッシュ201bのブロックに記憶されているデータのバックアップ処理である。即ち、2回目のバックアップ処理は、キャッシュ201bのブロックのデータを、NANDフラッシュ201aへ退避させる処理を行なうものである。
【0067】
更に、3回目のバックアップ処理は、バックアップ管理テーブル213a内の3bitフラグの[2]ビットめ(Dual)に「1」が格納されている3bitフラグに対応した、キャッシュ201bのブロックに記憶されているデータのバックアップ処理である。3回目のバックアップされるデータは、1回目のバックアップ処理にて既にNANDフラッシュ201aに退避されているデータであるので、2度書込みがなされることにとなる。
【0068】
キャッシュアドレス管理部221は、キャッシュデータのキャッシュ201bにおける位置を示すキャッシュアドレスを管理し、管理しているキャッシュアドレスをフラグ判定部220に出力する処理部である。
【0069】
リード制御部222は、フラグ判定部220が指示するキャッシュ201bの各テーブルのキャッシュデータの読み出しを行なう。読み出したデータは、エラー制御部214c、データバッファ制御部214d1へ出力する。
【0070】
エラー制御部214cは、転送エラーが発生した場合、転送エラーが発生したNANDブロックを識別するアドレスをメイン制御部214aに通知する。メイン制御部214aのDirty更新分214a3は、この通知を受信すると、不良ブロック管理テーブル213bのDirtyフラグの更新を要求する。
【0071】
データバッファ部214d1は、リード制御部222から入力されたキャッシュデータのデータを化け防止のために、XOR(排他的論理和)演算を行って、パリティデータを生成し、キャッシュデータにXORパリティを付加する。
【0072】
CRC生成部214d2は、CRC(Cyclical Redundancy Check)とAID(AreaID)からなる冗長ビットをユーザデータに付加して、付加したユーザデータを保持するためのバッファを有し、そのバッファに記憶されているユーザデータをNANDライト制御部214eに出力する。
【0073】
NANDライト制御部214eは、NANDフラッシュ201aの各ブロックが識別されるアドレスを有し、さらに、IF制御部215を介して、CRC生成部214d2から出力されたユーザデータをNANDフラッシュ201aに出力し、書込みを行う。
【0074】
さらに、NANDライト制御部214eは、キャッシュデータをNANDフラッシュ201aに書込む際に、転送エラーが発生し、書込みに失敗した場合、対応するブロックの識別データをエラー制御部214cに出力する。
【0075】
IF制御部215は、TRN214とNANDフラッシュ201aとの各種データのやり取りを制御するインターフェースである。
【0076】
図1に示したSCU(Super Capacitor Unit)201eについて補足する。SCU201eは、大容量コンデンサを示し、RAID装置200に停電が発生した際に、バッテリーフリーで、RoC201dに電力を供給する。なお、充電された電力を供給するため、PSU202とは異なり、供給する電力には、限りがあるものとする。
【0077】
SCU201eは、「電気二重層」(導体に絶縁体をはさみ、電圧をかけると電荷が蓄積する)を利用して物理的に電荷の蓄電を行っている。したがって、化学的に蓄電するバッテリーに比べて充電や、放電による劣化が少なく、電荷の移動速度で充電が行われる。
【0078】
EXP(エキスパンダ)201fは、RoC201dとHDD203a〜HDD203zとの間で送受信されるユーザデータを中継する処理部である。
【0079】
PSU(Power Supply Unit)202は、外部からRAID装置200へ電力を供給する為の装置で、外部からの電力供給がなくなる、即ち、停電が発生した場合、RAID装置200への電力の供給が停止してしまう。この停電時は、SCU201eが放電することにより、RAID装置200へ電力が供給される。
【0080】
HDD203a〜HDD203zは、RAIDグループを構成し、高速性や安全性のレベルに応じて、データが振り分けられており、ユーザデータの書込みやプログラムを記憶する記憶媒体(ディスク)等を有する。
【0081】
次に、本実施の形態のRAID装置の通電時の処理について図8を用いて説明する。
【0082】
まず、本実施の形態のRAID装置200のRoC201dは、図示しないホストからのリクエストを受信する(ステップS1001)と、リクエストの内容がリード要求か否かを判定する(S1002)。
【0083】
S1002にて、ホストから受信したリクエストがリード要求であった場合、RoC201dは、PSU202のリード要求に含まれるHDD203a〜203z内のアクセス位置を示すディスクアドレスを取得する。そしてRoC201dは、このディスクアドレスに対応するデータが、キャッシュ201b内の各テーブルb01〜b10に記憶されているか検索を行う(ステップS1003)。
【0084】
ここで、RoC201dは、ホストから要求されているデータを、キャッシュ201bのテーブルb01〜10のいずれかから取得できた場合(ステップS1004、Yes)、処理をステップS1008へ移行する。
【0085】
一方、キャッシュ201bからリードデータを取得しなかった場合(ステップS1004、No)、RoC201dは、キャッシュ201bにホストからのリクエストに含まれるディスクアドレスのデータを記憶する為のテーブルを確保する(ステップS1005)。具体的には、RoC201dは、キャッシュ201b内のテーブルb01〜b10に、リクエストに含まれるディスクアドレスのデータを記憶する容量分のデータを記憶するだけの空きテーブル(キャッシュデータが入っていないテーブル)が存在すれば、それを確保する。もし、空きテーブルが存在しなければ、RoC201dは、各テーブルb01〜b10に記憶されているキャッシュデータのうち、記憶した時間が長いデータを記憶したテーブルのデータを、開放して空きテーブルを作ることにより、テーブルの確保を行なう。また、テーブルの開放にあたり、開放するテーブルに対応するバックアップ管理テーブル213aの3bitフラグを全てのビットを「0」に更新する。
【0086】
そして、RoC201dは、FPGA201cに対し、該ステージングの対象となるテーブルを通知する(S1006)。この通知を受信したFPGA201cのメイン制御部214aは、キャッシュアドレス管理部221は、対象テーブルに対応したバックアップ管理テーブル213aの3bitフラグの[0]bitめ、即ち、skipフラグを「1」に更新する。
【0087】
その後、RoC201dは、ステージング処理を行なう(S1007)。
【0088】
このステージング処理は、具体的には、まず、RoC201dが、Exp201fを介して、HDD203a〜HDD203zからリード要求に含まれていたディスクアドレスのデータを取得する。そして、RoC201dは、キャッシュ201bの確保領域に、取得したデータをコピーすることにより実行される。
【0089】
そして、RoC201dは、取得したデータをホストへ送信し、ステップS1001の処理へ移行する。
【0090】
なお、RoC201dは、S1002の、リード要求の判定処理において、PSU202から受信したリクエストが、リード要求でなかった場合(S1002:NO)、このリクエストがライト要求かを判定する(S1009)。
【0091】
この処理で、Yes、即ち、ライト要求であると判定した場合(S1009:Yes)、RoC201dは、キャッシュ201bにライト要求に含まれるアドレスと同一アドレスのデータが格納されていないか確認する(S1010)。
【0092】
ここで、キャッシュデータがないと判定された場合(S1010:No)、RoC201dは、キャッシュ201bのキャッシュ領域の確保処理を行なう(S1011)。この処理は、前述したS1005の処理と同様であるので、説明を省略する。
【0093】
次に、RoC201dは、ライト要求が、構成情報などを含む特定領域への書込みかを確認する(S1012)。この確認において、特定領域への書込みであると判断した場合、RoC201dは、FPGA201cへ通知を行なう(S1013)。この通知を受信したFPGA201cのメイン制御部214aは、キャッシュアドレス管理部221に、バックアップ管理テーブル213aのキャッシュ確保領域となったテーブルに対応する3bitフラグの[2]ビットめ(Dual)のフラグを「1」に更新させる。
【0094】
そしてRoC201dは、キャッシュ確保領域となったキャッシュ201bのテーブルに対し、PSU202から、Write要求に続けて送られてくるデータを記憶する(S1014)。
【0095】
そして、RoC201dは、Exp201fを制御し、ホストからWrite要求に続けて送られてくるデータを、HDD203a〜203zのうち、Write要求に含まれるディスクアドレスに対して書込みを行なう(S1016)。
【0096】
なお、S1010の処理において、Write要求に含まれるディスクアドレスに含まれるデータが、既にキャッシュ201bに存在した場合、RoC201dは、キャッシュ201bに存在するデータを、ホストからWrite要求に続けて送られてくるデータに更新し(S1015)、S1016の処理に移行する。
【0097】
RoC201dは、S1016の処理が完了すると、S1001の処理へ移行する。
【0098】
更に、RoC201dは、S1009の処理において、受信したリクエストがライト要求でもないと判断した場合、受信したリクエストがコピー要求か否かを判定する(S1017)。
【0099】
ここで、RoC201dは、受信したリクエストがコピー要求でもないと判断した場合(S1017:No)、その他、リクエストに応じた処理を行い(S1023)、S1001の処理へ移行する。
【0100】
また、RoC201dは、受信したリクエストがコピー要求であると判断した場合(S1017:Yes)、コピー元となるデータが、キャッシュ201bのテーブルb01〜b10のいずれかに記憶されているか、確認する(S1018)。
【0101】
ここで、コピー元となるデータがキャッシュ201bのテーブルb01〜b10のいずれにも記憶されていない場合(S1018:No)、キャッシュ201bのキャッシュ領域を確保する処理を行なう(S1019)。この処理は、前述のS1005の同様の処理であるので、説明を省略する。
【0102】
そして、RoC201dは、コピー要求に基づきステージング処理を行ったことを、FPGA201cへ通知する(S1020)。この通知を受信したFPGA201cのメイン制御部214aは、キャッシュアドレス管理部221に、バックアップ管理テーブル213aのキャッシュ確保領域となったテーブルに対応する3bitフラグの[1]ビットめ(Stay)のフラグを「1」に更新させる。
【0103】
次にRoC201dは、Exp203を制御して、コピー要求で指定されているコピー元のHDDのデータを読み出し、領域確保したキャッシュ201bのテーブルに書き込む(S1021)。
【0104】
そしてRoC201dは、Exp203を制御して、キャッシュ201に書き込まれたコピー元データをコピー先のHDDへ書込むことによりコピー処理を行なう(S1022)。
【0105】
なお、RoC201dは、S1018の処理において、コピー元となるデータがキャッシュ201bのテーブルb01〜b10のいずれかに記憶されていると判定した場合は、S1019〜S1021のステージングに関する処理を行うこと無く、上記したS1022の処理へ移行する。
【0106】
RoC201dは、S1022の処理を完了すると、S1001の処理へと移行する。以上のように、RoC201d、及び、FPGA201cの処理により、バックアップテーブル213aの各3bitフラグc01〜c10は、以下のようなステータスとなる。
【0107】
まず、構成情報などが入っている様な重要な領域のキャッシュ201bのテーブルに対応するバックアップテーブル213aの[2]bit(Dual)めは「1」となる。即ち、このテーブルに記憶されているデータは、停電時のバックアップ時に、二重書き込みの対象となる。
【0108】
また、コピー命令に基づき、ステージングを行ったキャッシュ201bのテーブルに対応するバックアップテーブル213aの[1]bit(Stay)めが「1」となる。再度コピーをやり直す際に、キャッシュ201bにデータが存在している方が、コピー元のデータを保存しているHDDの負荷を軽くできる。よってコピー元のデータは、キャッシュ201bに保存されていることが好ましい。しかし、そもそもコピー命令の場合、コピー元データは、HDD203a〜203zのいずれかに存在しており、データが無くなってしまうことがないので、その他の領域のデータより優先度を低くする。
【0109】
更に、read命令に基づき、ステージングを行ったキャッシュ201bのテーブルに対応するバックアップ管理テーブル213aの[0]bit(Skip)めが「1」となる。read命令の対象データは、HDD203a〜203zのいずれかに存在しており、データが無くなってしまうことがない。加えて、Read命令は、Copy命令のように、復電直後に再度同じ命令が繰り返されることがなく、Read命令にて取得したデータがキャッシュ201bに無いことで、復電時に負荷増加してしまう可能性も少ない。
【0110】
よって、本実施の形態において、Read命令を取得した対象データは、バックアップの必要性が小さいとして、Skip、即ち、バックアップを行わないこととしている。
【0111】
なお、上記RoC201dの処理を行った結果、バックアップ管理テーブル213aの全ビットが「0」を示している3bitフラグは、Write命令に基づくデータをキャッシングしていることを示す。Write命令に基づくデータは、ホストから受信したデータであり、停電のタイミングによっては、HDD203a〜203zのいずれかに格納される前のデータも含まれている可能性がある。よって、停電時には、HDD203a〜203zより、優先度を高めてバックアップされる必要がある。
【0112】
よって、後述する停電時の処理において、このWrite命令は、二重バックアップ対象とされている構成情報などの特定情報と共にNANDフラッシュ201aへのバックアップが行われる。
【0113】
次に、これまで説明してきたキャッシュ201bと、バックアップ管理テーブル213aと、不良ブロック管理テーブル213bと、NANDフラッシュ201aを用いて、停電発生時に、RAID装置200で行われる処理について図9以降の図を用いて説明する。
【0114】
なお、本実施の形態において、停電が起きる直前の、キャッシュ201b、バックアップ管理テーブル213a、FPGAフラッシュ201a、不良ブロック管理テーブル213b、及びバックアップ完了フラグ220aの状態について、図10を用いて、補足説明する。
【0115】
なお、図10の状態は、あくまで一例であり、通電時は、キャッシュ201bに記憶されたデータの内容は、随時更新されており、停電直前に、必ず図10になるというわけではない。
【0116】
まず、上記処理によって、バックアップ管理テーブル213aの各3bitフラグc01〜c10は、対応するキャッシュ201bの各テーブルb01〜b10に記憶されたデータの種別に応じて、内容が決定している。
【0117】
本実施の形態の場合、図10に示すように、キャッシュ201bのテーブルb01に構成情報が記憶されているため、対応する3bitテーブルc01の[2]bitめ(Dual)には「1」が格納されている。
【0118】
また、Copy命令に基づき取得された、テーブルb04及びb10のデータに対応する3bitフラグc04,c10の「1」bitめのフラグ(Stay)には「1」が格納されている。
【0119】
更に、Read命令に基づき取得された、テーブルb02及びb08のデータに対応する3bitフラグc02,c08の「0」bitめのフラグ(Skip)には「1」が格納されている。
【0120】
また、FPGAフラッシュ201の不良管理テーブル213bの項目d05の[Invalid]フラグには「1」が格納されている。即ち、この項目d05に対応するFPGA201aのブロックa05は、不良ブロックであることを示している。
【0121】
以上の状態で、停電が検出した場合(図9:S2001)、CM201の各構成要素は、SCU201eからの電源供給により稼働し、以下の処理を行なう。
【0122】
まず、FPGA201cは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[1]bitめ(Stay)、[0]bitめ(Skip)が共に「1」ではないものに対応する、キャッシュ201bのデータをNANDフラッシュへ書き込む(S2002)。
具体的には、FPGA201cの各構成要素が、以下の処理を行なう。
【0123】
まず、メイン制御部214aは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[1]bitめ(Stay)、[0]bitめ(Skip)が共に「1」ではないものに対応する、キャッシュ201bのデータを読出させる。
【0124】
本実施の形態の場合、バックアップ管理テーブルc01,c03,c05,c06,c07,及びc09が該当するので、リード制御部222は、キャッシュ201bのテーブルb01、b03、b05、b06、b07、及びb09のデータを読み出す。
【0125】
リード制御部222で読み出されたデータは、CRC制御部214d2を経由することにより、CRCコードが付与される。そしてCRCコードが付与されたデータは、図11に示されるように、NANDライト制御部214eによって随時、NANDフラッシュ201aのInvalidフラグが立っている項目に対応しないブロック(図11では、ブロックa05以外)のブロックに書き込まれる。なお、この際、CRCコード付与と共に、読み出し元であるキャッシュ201bのテーブル名(b01など)を付与しても良い。このようにすれば、復電時、キャッシュの復元を行なう際に、FPGA201cは、この付与されたテーブル名を参照して、キャッシュ201bの各テーブルb01〜b10の各々に、停電時に格納されていたデータと同じデータを再格納させることが可能となる。
【0126】
この際、NANDライト制御部214eは、NANDフラッシュ201aのブロックに書き込みを行う度に、書き込んだデータに付随するCRCコードを使い、エラー検証を行なう。
【0127】
ここで、書き込んだデータにエラーがあると判定された場合、NANDライト制御部214eは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【0128】
即ち、図11に示されるように、キャッシュ201bのテーブルb09のデータをNANDフラッシュ201aのブロックa07に記憶させ、検証でエラーが検出された場合、NANDライト制御部214eは、次のブロックa08に再書き込みを行なう。
【0129】
なお、この再書き込みにあたり、NANDライト制御部214eは、メイン制御部214aへ、エラーがあったブロックを通知する。これをうけたメイン制御部214aのDirty更新分214a3の項目d05のDirtyフラグに対し、「1」を格納する。
【0130】
以上のような処理により、本実施の形態では、構成情報を含むテーブルb01、及び、Read命令、Copy命令によらないキャッシュデータを格納しているテーブルb03、b05〜b07,b09のデータが、NANDフラッシュ201aのブロックa01〜a04、a06,a08に記憶される。
【0131】
なおこの処理が完了すると、メイン制御部214aは、バックアップ完了テーブル220aの[0](1st)Bitめのフラグを「1」にする。
【0132】
次に、FPGA201cは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[1]bitめ(Stay)が「1」であるものに対応する、キャッシュ201bのデータをNANDフラッシュへ書き込む(S2003)。
【0133】
即ち、この処理は、[1]bitめ(Stay)、[0]bitめ(Skip)が共に「1」ではないものに対応する、キャッシュ201bのデータの書込みのあとに行われることになる。
【0134】
具体的には、FPGA201cの各構成要素が、以下の処理を行なう。
【0135】
まず、メイン制御部214aは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[1]bitめ(Stay)が「1」となっているものに対応する、キャッシュ201bのデータを読出させる。
【0136】
本実施の形態の場合、図12に示すように、バックアップ管理テーブルc04,c10が該当するので、リード制御部222は、キャッシュ201bのテーブルb04、b10のデータを読み出す。
【0137】
リード制御部222で読み出されたデータは、CRC制御部214d2を経由することにより、CRCコードを付与され、図12に示されるように、NANDライト制御部214eによって随時、NANDフラッシュ201aのInvalidフラグが立っている項目に対応しないブロックのブロックに書き込まれる。
【0138】
この際も、NANDライト制御部214eは、NANDフラッシュ201aのブロックに書き込みを行う度に、書き込んだデータに付随するCRCコードを使い、エラー検証を行なう。
【0139】
ここで、書き込んだデータにエラーがあると判定された場合、NANDライト制御部214eは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【0140】
以上のような処理により、本実施の形態では、Copy命令によって取得されたテーブルb04、b10のデータが、NANDフラッシュ201aのブロックa09〜a10に記憶される。
【0141】
なおこの処理が完了すると、メイン制御部214aは、バックアップ完了テーブル220aの[1](2nd)Bitめのフラグを「1」にする。
【0142】
更に、FPGA201cは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[2]bitめ(Dual)が「1」であるものに対応する、キャッシュ201bのデータをNANDフラッシュへ書き込む(S2004)。このデータは、S2002にて書き込んだものデータであるので、再度書込みを行なう処理である。
【0143】
具体的には、FPGA201cの各構成要素が、以下の処理を行なう。
【0144】
まず、メイン制御部214aは、リード制御部222に、バックアップ管理テーブル213aの3bitフラグc01〜c10のうち、[2]bitめ(Dual)が「1」となっているものに対応する、キャッシュ201bのデータを読出させる。
【0145】
本実施の形態の場合、図13に示すように、バックアップ管理テーブルc01が該当するので、リード制御部222は、キャッシュ201bのテーブルb01のデータを読み出す。
【0146】
リード制御部222で読み出されたデータは、CRC制御部214d2を経由することにより、CRCコードを付与され、図13に示されるように、NANDライト制御部214eによって随時、NANDフラッシュ201aのInvalidフラグが立っている項目に対応しないブロックのブロックに書き込まれる。
【0147】
この際も、NANDライト制御部214eは、NANDフラッシュ201aのブロックに書き込みを行う度に、書き込んだデータに付随するCRCコードを使い、エラー検証を行なう。
【0148】
ここで、書き込んだデータにエラーがあると判定された場合、NANDライト制御部214eは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【0149】
以上のような処理により、本実施の形態では、構成情報などが格納される特定アドレスのデータが格納されたテーブルb01のデータが、NANDフラッシュ201aのブロックa012に記憶される。
【0150】
なおこの処理が完了すると、メイン制御部214aは、バックアップ完了テーブル220aの[1](2nd)Bitめのフラグを「1」にし、バックアップ処理を完了する。
【0151】
なお、この処理では、Skipフラグに「1」が格納された3bitフラグc02,c08に対応するキャッシュb01のテーブルb02,b08に格納されたデータは、NANDフラッシュ201aへの格納は行われない。即ち、これらのデータのバックアップは行われない。
【0152】
以上のように、本実施の形態では、停電発生時にキャッシュデータをNANDフラッシュ201aへバックアップする際、3bitフラグに基づいて、キャッシュデータのバックアップの優先順位及びバックアップの可否の判定を行っている。
【0153】
このように構成することで、停電時、構成情報などの重要情報や、Writeデータ等のHDD203a〜203zのいずれにも記憶されない可能性があるデータを、先にNANDフラッシュ201aへ格納させることが可能となる。上記したようにSCU201eは、一時的にしか電力を供給できないため、先にバックアップを行なうほうが、データのバックアップの確実性が増すことになる。即ち、本実施の形態では、重要なデータほど優先的にバックアップされることとなる。
【0154】
更に、特に重要なデータに対しては、他のデータのバックアップのあと、二重書き込みを行なうことにより、より確実なバックアップを可能としている。なお、本実施の携帯において、二重書き込みは、Copy命令など、バックアップ優先度が低いデータの格納迄終わったあとに、2回目の書込みを行っている。これは、停電発生から早い時点で、かつ、一度はCRCによる書込みチェックを行った上でデータをNANDフラッシュ201aに格納させており、1回である程度確実に保存が出来ているため、2回目書き込みは、万が一、そのデータが消失した場合の保険として格納させるものであるていどの意味合いがあるためである。
【0155】
なお、本実施の形態では、FPGA201cの処理によりバックアップ処理を行っている。これは、FPGA201cの高速性と省電力性によるものである。しかしながら、SCU201eの電力容量に余裕があれば、Roc201dが所定プログラムを実行することによって上記してきたバックアップ処理を実現しても良い。
【符号の説明】
【0156】
200 RAID装置
201 CM
201a NANDフラッシュ
201b キャッシュ
201c FPGA
201d RoC
201e SCU
201f Exp
202 PSU
203a〜203z HDD
211、215 IF制御部
212 アクセスコントローラ
213 アクセス管理テーブル
213a バックアップ管理テーブル
213b 不良ブロック管理テーブル(BM)
214 TRN
214a メイン制御部
214b リード部
214c エラー制御部
214d1 データバッファ部
214d2 CRC生成部
214e NANDライト制御部
220a バックアップ完了フラグ

【特許請求の範囲】
【請求項1】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、
不揮発性メモリと、
前記キャッシュメモリ内に記憶されているデータにおいて、退避の優先順位を決定するための情報を記憶する管理テーブルと、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、退避の優先順位を決定するための情報を前記管理テーブルに記憶させる管理手段と、
停電発生時に、前記管理テーブルに記憶されている退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータを前記不揮発性メモリに書き込む処理を実行する停電処理部と
を有する退避処理装置。
【請求項2】
前記管理手段は、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くする
事を特徴とする請求項1に記載の退避処理装置。
【請求項3】
前記管理手段は、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からの読み出し命令に基づき記憶装置からのデータの読み出し処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、読み出し処理を実行した際に取得したデータの前記不揮発性メモリへの書込みを行わない
ことを特徴とする請求項2に記載の退避処理装置。
【請求項4】
前記管理手段は、退避の優先順位を決定するための情報として、少なくとも、前記上位装置から、前記記憶装置の特定の記憶アドレスへのアクセス命令に基づき、取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、前記記憶装置の特定の記憶アドレスへのアクセス命令に基づき取得したデータを前記不揮発性メモリへ複数回書込みを行なう
ことを特徴とする請求項1から3のいずれかに記載の退避処理装置。
【請求項5】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、不揮発性メモリと、前記キャッシュメモリ内に記憶されているデータにおいて、退避の優先順位を決定するための情報を記憶する管理テーブルとを有する処理装置が、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、退避の優先順位を決定するための情報を前記管理テーブルに記憶し、
停電発生時に、前記管理テーブルに記憶されている退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータを前記不揮発性メモリに書き込む処理を実行する
事を特徴とする退避処理方法。
【請求項6】
前記処理装置が更に、
退避の優先順位を決定するための情報を前記管理テーブルに記憶する際、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶し、
前記キャッシュメモリへのデータ記憶に際し、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くする
事を特徴とする請求項5に記載の退避処理方法。
【請求項7】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、不揮発性メモリと、前記キャッシュメモリ内に記憶されているデータにおいて、退避の優先順位を決定するための情報を記憶する管理テーブルとを有する処理装置に、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、退避の優先順位を決定するための情報を前記管理テーブルに記憶させ、
停電発生時に、前記管理テーブルに記憶されている退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータを前記不揮発性メモリに書き込む処理を実行させる
事を特徴とする退避処理プログラム。
【請求項8】
前記処理装置に更に、
退避の優先順位を決定するための情報を前記管理テーブルに記憶する際、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記キャッシュメモリへのデータ記憶に際し、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くさせる
事を特徴とする請求項7に記載の退避処理プログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2012−58840(P2012−58840A)
【公開日】平成24年3月22日(2012.3.22)
【国際特許分類】
【出願番号】特願2010−199000(P2010−199000)
【出願日】平成22年9月6日(2010.9.6)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】