以下、図面に基づいて、本発明の実施の形態を説明する。まず最初に、本発明の概念を説明し、その次に、具体的な実施例について説明する。本発明は、後述のように、論理アドレスに基づくアドレスデータが付加されているブロックデータを、その論理アドレスとは異なる場所で、記憶装置に記憶させる。そして、本発明では、論理アドレスと実際の格納先との対応関係を記憶し、管理する。
さらに、本発明では、記憶装置から読み出されるデータのアドレスと、記憶されている対応関係から得られる論理アドレスの期待値とが一致するか否かを検査することにより、記憶装置から読み出されたデータが所望のデータであるか否かを判定することができる。換言すれば、本発明では、記憶装置から読み出されるデータに実際に付加されているアドレスデータの値と、その読み出されるデータに付加されていると期待されるアドレスデータの値とが一致するか否かを検査する。
図1は、本発明の実施形態を模式的に示す説明図である。図1及び図1に関する以下の記載は、本発明の理解及び実施に必要な程度で、本発明の概要を示しており、本発明の範囲を図1に記載された範囲に限定するものではない。
図1(a)は、本発明に従う記憶制御装置を含むストレージシステムの全体構成を示している。このストレージシステムは、例えば、記憶制御装置1と、記憶装置2と、ホスト3とを備える。
記憶装置2は、例えば、SATAディスクのような、セクタ長が論理ブロックのサイズに固定された、ハードディスクデバイスとして構成される。なお、以下の説明では、記憶装置内の物理ブロックを、便宜上、論理ブロックと呼ぶ。
しかし、本発明は、SATAディスクに限らず、セクタ長が論理ブロックのサイズに固定された記憶装置であれば、例えば、フラッシュメモリデバイスのような他の種類の記憶装置も使用可能である。
ホスト3は、例えば、サーバコンピュータまたはメインフレームコンピュータのようなコンピュータ装置として構成される。ホスト3がホストコンピュータの場合、例えば、FICON(Fibre Connection:登録商標)、ESCON(Enterprise System Connection:登録商標)、ACONARC(Advanced Connection Architecture:登録商標)、FIBARC(Fibre Connection Architecture:登録商標)等の通信プロトコルに従って、データ通信が行われる。ホスト3がサーバコンピュータ等の場合、例えば、FCP(Fibre Channel Protocol)またはiSCSI(internet Small Computer System Interface)等の通信プロトコルに従って、データ通信が行われる。
記憶制御装置1は、ホスト3と記憶装置2との間に設けられており、ホスト3と記憶装置2との間のデータ転送を制御する。記憶制御装置1は、例えば、「第1通信制御部」としてのホスト通信制御部1Aと、「第2通信制御部」としてのデバイス通信制御部1Bと、「メモリ部」としてのキャッシュメモリ1Cと、「アドレスデータ付加部」としてのLA付加部1Dと、「検査部」としてのLA検査部5とを備えている。
ホスト通信制御部1Aは、ホスト3からコマンドやデータを受信し、コマンドの処理結果等をホスト3に送信するための回路である。ホスト通信制御部1Aは、後述の実施例に示すように、例えば、プロトコルチップ、DMA(Direct Memory Access)回路、マイクロプロセッサを備えることができる。
デバイス通信制御部1Bは、記憶装置2にデータを書き込んだり、記憶装置2からデータを読み出したりするための回路である。デバイス通信制御部1Bは、後述の実施例に示すように、例えば、プロトコルチップ、DMA回路、マイクロプロセッサ、パリティ生成回路を備えることができる。
キャッシュメモリ1Cは、ホスト3から受信したデータや、記憶装置2から読み出されたデータを一時的に記憶するためのメモリである。
LA付加部1Dは、512バイトの各論理ブロック毎に、8バイトの保証コードを付加する。保証コードには、少なくとも、その論理ブロックの論理アドレスから算出されるアドレスデータLAが含まれている。LA以外にLRCを含めることもできるが、本実施形態では、アドレスデータLAに着目して説明する。
バッファメモリ4は、「第2メモリ部」と呼ぶこともできる。バッファメモリ4は、キャッシュメモリ1Cとデバイス通信制御部1Bとの間に設けられている。キャッシュメモリ1Cと記憶装置2とは、バッファメモリ4を介してデータを送受する。
LA検査部5は、記憶装置2から読み出されるデータについて、そのデータに付加されているアドレスデータLAとそのデータの論理アドレス(正確には、そのデータの有するべき論理アドレス(論理アドレスの期待値))とが一致するか否かを判定するためのものである。換言すれば、LA検査部5は、読み出されるデータに実際に付加されているアドレスデータLAの値と、そのデータに付加されていると期待されているアドレスデータLAの値とが一致するか否かを判定する。
後述の実施例に示すように、LA付加部1Dとホスト通信制御部1Aとは一体化させることができる。同様に、デバイス通信制御部1Bとバッファメモリ4及びLA検査部5も一体化させることができる。
本実施形態では、ホストコンピュータ3及び記憶装置2は、512バイトの論理ブロック単位でデータを取り扱う。記憶制御装置1は、ホストコンピュータ3から受信した512バイトの論理ブロックに、8バイトのアドレスデータLAを付加する。これにより、520バイトのサイズを有する論理ブロックが生成される。LAが付加された520バイトのブロックを、本実施形態では、拡張論理ブロックと呼ぶ。512バイトの論理ブロックは「第1ブロック」に該当し、520バイトの拡張論理ブロックは「第2ブロック」に該当する。
図1(b)は、ブロックデータの取り扱い方法を示す。図1(b)の(1)は、キャッシュメモリ1Cに記憶される、拡張論理ブロック単位のデータを示す。キャッシュメモリ1Cに記憶される拡張論理ブロックのサイズ(520バイト)と、記憶装置2に記憶される論理ブロックのサイズ(512バイト)とは異なるため、通常の場合、拡張論理ブロックの境界と論理ブロックの境界とは一致しない。
しかし、複数の拡張論理ブロックからなるデータのサイズと複数の論理ブロックからなるデータのサイズとが、共に、論理ブロックのサイズと拡張論理ブロックのサイズとの最小公倍数の値(LCM)になった場合、データ両端は一致する。具体的には、64個の拡張論理ブロックからなるデータの両端と、65個の論理ブロックからなるデータの両端とは一致する。
そこで、本実施形態では、64個の拡張論理ブロックをひとかたまりのデータとして扱い、記憶装置2に入出力するようになっている。図1(b)には、#0−#63の合計64個のブロックが示されている。このように、拡張論理ブロックのサイズと論理ブロックのサイズとの最小公倍数に基づいて、記憶装置2との間でデータを入出力することにより、効率的にデータを読み書きすることができる。
図1(b)の(2)は、記憶装置2上に記憶されたデータを示す。上述の通り、記憶装置2は、512バイトの論理ブロック単位でデータを扱うため、ブロック数は65個となるはずである。しかし、ここでは説明の便宜上、複数の拡張論理ブロックからなるデータとして示す。
デバイス通信制御部1Bは、キャッシュメモリ1Cに記憶されている64個の拡張論理ブロックから構成されるデータ(図1(b)の(1))を、記憶装置2に書き込む場合を説明する。以下の説明では、64個の拡張論理ブロックからなるデータを、所定ブロック数のデータ等と呼ぶ。
デバイス通信制御部1Bは、所定ブロック数のデータを、分割位置PD1で前後に分割する。これにより、前半部分のデータFAと後半部分のデータBAとが得られる。分割位置PD1は、記憶装置2にデータを書き込む度に変化するように、乱数もしくは疑似乱数を用いて、または、所定の分割位置算出規則に基づいて、生成される。所定の分割位置算出規則としては、例えば、前回の分割位置に所定値を加算または減算して新たな分割位置を算出する方法等を挙げることができる。
分割位置PD1は、所定ブロック数のデータ毎に、それぞれ設定される。例えば、所定ブロック数のデータが3個連続して記憶装置2に書き込まれる場合、所定ブロック数のデータ毎にそれぞれ分割位置PD1が設定されて、前後に分割される。
また、分割位置PD1は、記憶装置2における所定ブロック数の記憶サイズ毎にそれぞれ設定される。例えば、ミラーリング(RAID1)の場合を例に挙げると、あるデータがユーザ領域に書き込まれると、そのデータは、正記憶装置と副記憶装置の両方に書き込まれる。この場合、正記憶装置に書き込まれるデータに設定される正の分割位置と、副記憶装置に書き込まれるデータに設定される副の分割位置とは、同一であってもよいし、または、異なってもよい。RAID5等の他のRAID構成の場合も同様に、各記憶装置2毎にそれぞれ別々に分割位置を設定可能である。
さらに、分割位置PD1は、所定ブロック数のデータの先頭(見方を変えれば、所定ブロック数のデータの末尾)に設定することもできる。この場合は、分割位置PD1の前後でデータを入れ替えたりせずに、元のままの順序で記憶装置2に書き込まれる。
このようにして、所定ブロック数のデータに分割位置PD1が設定される。分割位置PD1は、記憶制御装置1により記憶され、管理される。例えば、記憶制御装置1内のメモリまたは特定の記憶装置2等に、分割位置PD1は記憶される。
図1(b)の(2)に示すように、デバイス通信制御部1Bは、分割位置PD1の前に位置する前半部分FAと分割位置PD1の後に位置する後半部分BAとを入れ替えて、記憶装置2に転送し、記憶装置2に記憶させる。
従って、図示の例では、#5−#63までのデータFAは、#0−#4までのデータBAよりも前に配置されて、記憶装置2に書き込まれる。なお、上述の通り、64個の拡張論理ブロックからなるデータの両端と、65個の論理ブロックからなるデータの両端とは一致する。
記憶装置2からデータを読み出す場合、図1(b)の(3)に示すように、デバイス通信制御部1Bは、記憶されている分割位置PD1に基づいて、記憶装置2から前半部分のデータFAと後半部分のデータBAとを読み出し、その前後を入れ替えてキャッシュメモリ1Cに転送する。
LA検査部5は、各拡張論理ブロックのデータについて、その拡張論理ブロックに含まれるアドレスデータLAと、その拡張論理ブロックについて期待される論理アドレスとが一致するか否かを判定する。
例えば、記憶装置2の先頭に記憶されている#5の拡張論理ブロックについて説明すると、この拡張論理ブロックに付加されているアドレスデータは「#5」を示す。分割位置PD1は、拡張論理ブロック#4と拡張論理ブロック#5との間である。分割位置PD1の値を記憶しておけば、記憶装置2から読み出されるデータの論理アドレスの期待値を、分割位置PD1に基づいて算出できる。
例えば、先頭の拡張論理ブロックについて期待される論理アドレスの値は#5であり(#5=PD1)、その次の拡張論理ブロックは、1つ増加した値#6である(#6=#5+1=PD1+1)。以下同様に、元の後半部分BAの各拡張論理ブロックに期待される各論理アドレスを自動的に算出できる。後半部分BAの次に記憶されている前半部分FAについては、#0から分割位置PD1の手前までの値#4を、論理アドレスの期待値として算出する。
記憶装置2から読み出された拡張論理ブロックの有するアドレスデータLAが#5を示し、かつ、分割位置PD1に基づいて得られる論理アドレスの期待値が#5である場合、両方の値が一致するため、LA検査部5は、データが正しく読み出されたと判定することができる。以下同様に、各拡張論理ブロックについても、それぞれの論理アドレスの期待値とアドレスデータLAの値とを比較することにより、所望のデータが読み出されたことを速やかに確認することができる。
分割位置PD1に基づいて各拡張論理ブロックの論理アドレスの期待値を算出できるという技術的特徴を利用することにより、記憶制御装置1で管理される分割位置PD1が失われた場合でも、分割位置PD1を復元させることができる。この点については、後述の実施例で説明する。
図1(b)の(4)は、書き損じ障害の場合を示す。書き損じ障害とは、記憶装置2に転送されたデータが所定の格納先に書き込まれなかった場合を意味する。書き損じ障害には、例えば、データが記憶装置2のどこにも書き込まれることなく失われた場合、または、データが本来の格納先と異なる場所に書き込まれた場合がある。
図1(b)の(4)には、書き損じ障害のために、データが正しく書き込まれておらず、古いデータが残っている場合が示されている。その古いデータは、別の分割位置PD2で分割されており、先頭ブロックには#3の拡張論理ブロックが位置している。
デバイス通信制御部1Bは、#4と#5の間で分割されたものと信じて、記憶装置2からデータを読出し、その前後を入れ替えて元の順番に直す。LA検査部5は、読み出された拡張論理ブロックのアドレスデータLAの値と期待される論理アドレスの値とが一致するか否かを判定する。
図1(b)の(4)の場合、論理アドレスの期待値とLAの値とは一致しない。例えば、記憶装置2上の先頭に記憶されている拡張論理ブロックのデータに着目すると、そのLAの値は#3であるのに対し、その論理アドレスの期待値は#5であり、両方の値は一致しない。従って、LA検査部5は、エラー発生を検出する。以下同様に、古いデータの各拡張論理ブロックのそれぞれについて、その論理アドレスの期待値とアドレスデータLAの値は一致しない。
なお、エラーが検出された場合は、いわゆるコレクションリードを行うことにより、失われたデータを復元できる。例えば、RAID1の場合は、正記憶装置2でエラーが検出された場合、副記憶装置2から正しいデータを読み出せばよい。RAID5等のパリティを用いる方式の場合は、同一のストライプに属するパリティ及び他のデータを用いて論理演算を行うことにより、正しいデータを算出することができる。それらの正しいデータは、エラーの検出された記憶装置2の所定の場所に書き込まれて記憶される。
このように、本実施形態では、読み出し時に、エラーの有無を速やかに検出することができる。本実施形態では、書き込んだはずのデータを記憶装置2から直ちに読み出して検査する構成に比べて、処理時間を短縮でき、かつ、信頼性を向上できる。
本実施形態では、読み出し時に、書込み時で生じたエラーを比較的容易に検出することができるため、SATAディスクのような信頼性の劣る記憶装置2を用いた場合であっても、記憶制御装置1全体としての信頼性を低下させずに、応答性能を高めることができ、使い勝手が向上する。以下、本実施形態を詳細に説明する。
図2は、本実施例に係る記憶制御装置10を含む情報処理システムの全体構成を示す説明図である。この情報処理システムは、例えば、少なくとも一つの記憶制御装置10と、一つまたは複数のホスト20と、少なくとも一つの管理端末30とを含んで構成することができる。
先に図1で述べた実施形態との対応関係を説明する。記憶制御装置10は図1中の記憶制御装置1に、記憶装置210は図1中の記憶装置2に、ホスト20は図1中のホスト3に、チャネルアダプタ110は図1中のホスト通信制御部1Aに、ディスクアダプタ120は図1中のデバイス通信制御部1Bに、キャッシュメモリ130は図1中のキャッシュメモリ1Cに、対応する。
図3に示すLA付加部112Aは図1中のLA付加部1Dに、図3に示すLA検査部122Bは図1中のLA検査部5に、図3に示すバッファメモリ122Aは図1中のバッファメモリ4に、対応する。
先に、ホスト20及び管理端末30について説明し、次に記憶制御装置10について説明する。ホスト20は、例えば、パーソナルコンピュータ、エンジニアリングワークステーション、サーバコンピュータ、メインフレームコンピュータ等のようなコンピュータとして構成され、通信ネットワークCN1を介して記憶制御装置10に接続されている。通信ネットワークCN1は、例えば、FC−SAN(Fibre Channel-Storage Area Network)やIP−SAN(Internet Protocol_SAN)のような通信ネットワークとして構成することができる。
ホスト20は、512バイトの論理ブロック単位でデータを取り扱う。ホスト20は、記憶制御装置10にリードコマンドやライトコマンドを発行し、その処理結果を記憶制御装置10から受領する。
管理端末30は、記憶制御装置10内のサービスプロセッサ160と通信ネットワークCN3を介して接続される。通信ネットワークCN3は、例えば、LAN(Local Area Network)のような通信ネットワークとして構成される。管理端末30は、サービスプロセッサ(以下、SVP)160を介して、記憶制御装置10内の各種情報を収集する。管理端末30は、SVP160を介して、記憶制御装置10内の各種設定を指示することができる。
記憶制御装置10の構成を説明する。記憶制御装置10は、コントローラ100と、記憶装置搭載部200とに大別することができる。コントローラ100は、例えば、少なくとも一つ以上のチャネルアダプタ(以下、CHA)110と、少なくとも一つ以上のディスクアダプタ(以下、DKA)120と、少なくとも一つ以上のキャッシュメモリ130と、少なくとも一つ以上の共有メモリ140と、接続部(図中「SW」)150と、SVP160とを備えて構成される。なお、複数のコントローラ100を記憶制御装置10内のスイッチを介して連結する構成でもよい。例えば、複数のコントローラ100からクラスタを構成することもできる。
CHA110は、ホスト20との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。各CHA110は、少なくとも一つ以上の通信ポートを備えている。
DKA120は、各記憶装置210との間のデータ通信を制御するためのもので、CHA110と同様に、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。
各DKA120と各記憶装置210とは、例えば、ファイバチャネルプロトコルに従う通信経路CN2を介して接続されている。各DKA120と各記憶装置210とは、ブロック単位のデータ転送を行う。
コントローラ100が各記憶装置210にアクセスするための経路は、冗長化されている。いずれか一方のDKA120や通信経路CN2に障害が発生した場合でも、コントローラ100は、他方のDKA120や通信経路CN2を用いて、記憶装置210にアクセス可能である。同様に、ホスト20とコントローラ100との間の経路も冗長化することができる。CHA110及びDKA120の構成は、図3で後述する。
CHA110及びDKA120の動作を簡単に説明する。CHA110は、ホスト20から発行されたリードコマンドを受信すると、このリードコマンドを共有メモリ140に記憶させる。DKA120は、共有メモリ140を随時参照しており、未処理のリードコマンドを発見すると、記憶装置210からデータを読み出して、キャッシュメモリ130に記憶させる。CHA110は、キャッシュメモリ130に移されたデータを読み出し、ホスト20に送信する。
一方、CHA110は、ホスト20から発行されたライトコマンドを受信すると、このライトコマンドを共有メモリ140に記憶させる。また、CHA110は、受信したライトデータをキャッシュメモリ130に記憶させる。CHA110は、キャッシュメモリ130にライトデータを記憶させた後、ホスト20に書込み完了を報告する。DKA120は、共有メモリ140に記憶されたライトコマンドに従って、キャッシュメモリ130に記憶されたデータを読出し、所定の記憶装置210に記憶させる。
キャッシュメモリ130は、例えば、ホスト20から受信したユーザデータ等を記憶するものである。キャッシュメモリ130は、例えば、揮発性メモリまたは不揮発性メモリから構成される。共有メモリ140は、例えば、不揮発メモリから構成される。共有メモリ140には、後述する各種テーブルTや管理情報等が記憶される。共有メモリ140を、バッテリまたは電池でバックアップされた揮発性メモリから構成してもよい。
共有メモリ140及びキャッシュメモリ130は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。
接続部150は、各CHA110と、各DKA120と、キャッシュメモリ130及び共有メモリ140をそれぞれ接続させる。これにより、全てのCHA110,DKA120は、キャッシュメモリ130及び共有メモリ140にそれぞれアクセス可能である。接続部150は、例えばクロスバスイッチ等として構成することができる。
SVP160は、LAN等の内部ネットワークCN4を介して、各CHA110及び各DKA120とそれぞれ接続されている。また、SVP160は、通信ネットワークCN3を介して、管理端末30に接続される。SVP160は、記憶制御装置10内部の各種状態を収集し、管理端末30に提供する。なお、SVP160は、CHA110またはDKA120のいずれか一方にのみ接続されてもよい。SVP160は、共有メモリ140を介して、各種のステータス情報を収集可能だからである。
コントローラ100の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト20との間のデータ通信を行う機能と、記憶装置210との間のデータ通信を行う機能と、データを一時的に保存する機能と、各種テーブル類を書換可能に保存する機能とを、それぞれ設ける構成でもよい。
記憶装置搭載部200の構成について説明する。記憶装置搭載部200は、複数の記憶装置210を備えている。各記憶装置210は、例えば、ハードディスクデバイスとして構成される。ハードディスクデバイスに限らず、フラッシュメモリデバイス、光磁気記憶装置、ホログラフィックメモリデバイス等を用いることができる場合もある。
RAID構成等によっても相違するが、例えば、2個1組や4個1組等の所定数の記憶装置210によって、パリティグループ220が構成される。パリティグループ220は、パリティグループ220内の各記憶装置210がそれぞれ有する物理的記憶領域を仮想化したものである。なお、図中、便宜上、パリティグループをVDEVと表記する。
従って、パリティグループ220は、仮想化された物理的記憶装置である。パリティグループ220の有する物理的記憶領域には、論理デバイス230を一つまたは複数設定することができる。論理デバイス(LU:Logical Unit)230は、LUN(Logical Unit Number )に対応付けられて、ホスト20に提供される。
本実施例では、記憶装置210として、ハードディスクデバイスを例に挙げて説明するが、ハードディスクデバイス以外の記憶装置も使用可能である。また、理解に資するために、フローチャート中では、記憶装置を「ディスク」と表現する。
図3は、CHA110及びDKA120の構成を示すブロック図である。CHA110は、例えば、プロトコルチップ111と、DMA回路112と、マイクロプロセッサ113とを備えている。プロトコルチップ111は、ホスト20との通信を行うための回路である。マイクロプロセッサ113は、CHA110の全体動作を制御する。
DMA回路112は、プロトコルチップ111とキャッシュメモリ130との間のデータ転送をDMA(Direct Memory Access)方式で行うための回路である。DMA回路112は、LA付加部112Aを備える。LA付加部112Aは、ホスト20から受信した論理ブロックにアドレスデータLAを設定して拡張論理ブロックを生成する。さらに、LA付加部112Aは、キャッシュメモリ130から読み込まれた拡張論理ブロックからアドレスデータLAを除去して、論理ブロックに戻す。
DKA120は、CHA110と同様に、例えば、プロトコルチップ121と、DMA回路112とマイクロプロセッサ123を備える。さらに、DKA120は、パリティ生成回路124も備えている。
プロトコルチップ121は、各記憶装置210と通信するための回路である。マイクロプロセッサ123は、DKA120の全体動作を制御する。パリティ生成回路124は、キャッシュメモリ130に記憶されたデータに基づいて所定の論理演算を行うことにより、パリティデータを生成する回路である。
DMA回路122は、記憶装置210とキャッシュメモリ130との間のデータ転送を、DMA方式で行うための回路である。DMA回路122は、バッファメモリ(以下、バッファとも呼ぶ)122Aを備えており、このバッファメモリ122Aを介してDMA転送を実行する。即ち、キャッシュメモリ130と記憶装置210とは、バッファメモリ122Aを介してデータを送受する。
DMA回路122は、LA検査部122Bを備える。LA検査部122Bは、記憶装置210から読み出されるデータについて期待される論理アドレスの値と、そのデータに付加されているアドレスデータLAの値とを比較し、両方の値が一致する場合にのみ、記憶装置210から読み出されたデータをキャッシュメモリ130に転送させる。
図4は、キャッシュメモリ130の管理方法を模式的に示す説明図である。図4の上側に示すように、ホスト20から記憶制御装置10に向けて送信されるデータは、一つまたは複数のスロットに分割することができる。
ホスト20から受信したデータを所定のブロック数で分割したものを、スロット300と呼ぶ。各スロットは、所定数のブロック301から構成される。一つの論理ブロック301のサイズは、512バイトである。
キャッシュメモリ130は、複数のセグメント131から構成される。一つのセグメント131のサイズは、例えば、64KBである。ホスト20からのデータは、スロット単位で割り当てられるセグメント131に、記憶される。
スロット管理テーブルT10は、スロット300とセグメント131との対応関係等を管理する(以下、スロット管理テーブルT10をSLCBとも呼ぶ)。スロット管理テーブルT10は、例えば、スロット番号と、パリティグループ番号と、セグメントアドレスと、ダーティビットマップと、スロットステータスとを対応付けて管理する。
スロット番号とは、対象となるスロット300を特定するための識別情報である。パリティグループ番号とは、対象のスロット300に対応付けられるパリティグループ220を特定するための識別情報である。セグメントアドレスとは、その特定されたスロットに割り当てられるセグメントを識別するための情報である。即ち、セグメントアドレスとは、そのスロットのデータの格納先アドレスを示す。スロットにセグメントが割り当てられていない場合、セグメントアドレスの値には”0”が設定される。
ダーティビットマップとは、そのスロット300内の更新位置を特定するための更新位置管理情報である。スロットを構成する各論理ブロック毎にそれぞれ1ビットが割り当てられる。更新された論理ブロックには”1”が設定され、更新されない論理ブロックには”0”が設定される。従って、ダーティビットマップを参照することにより、そのスロットのどの論理ブロックが更新対象の論理ブロックであるかを知ることができる。
スロットステータスとは、そのスロットのステータスを示す情報である。ステータスとしては、ダーティ状態、クリーン状態、フリー状態を挙げることができる。ダーティ状態とは、ダーティビットマップに一つ以上”1”が設定されている状態を示す。即ち、ダーティ状態とは、更新対象の論理ブロックが含まれているスロットを示す。クリーン状態とは、スロット内の更新対象データが記憶装置210に書き込まれて、デステージ処理が完了した状態を示す。フリー状態とは、そのスロットに割り当てられたセグメントを解放して、他のスロットに割当て可能な状態を示す。
スロット管理テーブルT10を用いることにより、ホスト20から受信したデータがキャッシュメモリ130のどの領域に記憶されているか、更新データの有無、更新データの位置等を容易に管理できる。
図5は、デバイスID−パリティグループ対応関係管理テーブルT20と、パリティグループ管理テーブルT30とをそれぞれ示す説明図である。これら各テーブルT20,T30は、共有メモリ140に記憶される。CHA110,DKA120は、各テーブルT20,T30の少なくとも一部を、CHA110,DKA120内のメモリにコピーして使用することができる。
デバイスID−パリティグループ対応関係管理テーブルT20は、論理デバイス230とパリティグループ220との対応関係を管理するテーブルである。このテーブルT20は、デバイスID_C21と、パリティグループ番号C22とを対応付けて管理する。デバイスID_C21は、論理デバイス230を識別するための情報である。パリティグループ番号C22は、パリティグループ220を識別する情報である。
パリティグループ管理テーブルT30は、各パリティグループ220の構成を管理するテーブルである。パリティグループ管理テーブルT30は、例えば、パリティグループ番号C31と、スロットサイズC32と、RAIDレベルC33と、データドライブ数C34と、パリティサイクル内スロット数C34と、ディスクタイプC36とを対応付けて管理する。
パリティグループ番号C31とは、各パリティグループ220を識別するための情報である。スロットサイズC32とは、そのパリティグループ220に対応付けられるスロットを構成する論理ブロックの数を示す。RAIDレベルC33とは、RAID1〜RAID6のような、RAIDの種類を示す。データドライブ数C34とは、データを記憶する記憶装置の数を示す。
パリティサイクル内スロット数C34とは、一つのパリティサイクルに含まれるスロットの数を示す。ディスクタイプC36とは、そのパリティグループ220を構成する記憶装置210の種類を示す。
図6は、分割位置を管理するためのテーブルT40を示す説明図である。分割位置管理テーブルT40は、例えば、いずれか一つまたは複数の記憶装置210内のシステム領域に記憶させることができる。あるいは、管理テーブルT40を共有メモリ140またはキャッシュメモリ130に記憶させる構成でもよい。分割位置管理テーブルT40は、例えば、管理番号C41と、管理フラグC42と、分割位置管理欄C43とを対応付けて管理する。
管理番号C41とは、各記憶装置210における、所定ブロック数のサイズの領域(=520×64)を管理するための情報である。管理フラグC42は、その所定ブロック数のサイズの領域に設定される分割位置PDが有効か否かを示す情報である。分割位置PDが有効な場合、管理フラグには”0”が設定される。分割位置PDが無効な場合、管理フラグには”1”が設定される。例えば、停電等によって、管理テーブルT40の内容の全部または一部が消失等した可能性がある場合、管理フラグには”1”が設定される。
分割位置管理欄C43には、所定ブロック数のデータを分割するための分割位置PDが記憶される。分割位置PDは、乱数または所定の算出式等に基づいて、拡張論理ブロックの番号#0−#63の中からいずれか一つが選択される。なお、データの先頭(またはデータの末尾)に分割位置PDが設定された場合、そのデータは分割されない。
分割位置PDの選択範囲を広げる方が、書き損じ障害時の旧データと論理アドレスが偶然一致してしまう可能性を少なくできるため、好ましい。偶然一致する可能性をできるだけ少なくさせるという観点では、例えば、前回の分割位置PDに所定値を加減算する等の算出式を用いるのが好ましい。しかし、その場合は、前回の分割位置PDを管理テーブルT40から読み出す必要があるため、処理性能の低下を招くおそれがある。これに対し、乱数または疑似乱数を用いて分割位置PDを決定する場合、4096分の1の確率で、旧データのアドレスデータLAの値と正しいデータに期待される論理アドレスとが一致する可能性がある。しかし、その場合、管理テーブルT40から前回の分割位置PDを読み出す必要がないため、処理性能を高めることができる。本実施例では、いずれの方式も採用可能である。
図7は、スロット300と記憶装置210とのマッピング状態を模式的に示す説明図である。図7(a)はRAID5の場合を、図7(b)はRAID1の場合を示す。
図7(a)は、3個のデータディスク(#0,#1,#2)と1個のパリティディスク(#3)とから、3D+1PのRAID5を構成する場合を示す。データディスク(#0)にはスロット#0〜スロット#7が、データディスク(#1)にはスロット#8〜スロット#15が、データディスク(#2)にはスロット#16〜スロット#23が、右側のパリティディスク(#3)にはパリティ#0〜#7が、それぞれ配置される。即ち、各データディスクには、それぞれ連続する8個のスロットが配置される。
パリティが8スロット分(#0〜#7)のサイズを、パリティサイクルと呼ぶ。図示するパリティサイクルの次のパリティサイクルでは、ディスク(#3)の左隣のディスク(#2)にパリティが記憶される。さらに次のパリティサイクルでは、ディスク(#1)にパリティが記憶される。このように、パリティデータを記憶するディスクは、パリティサイクル毎に移動する。図7(a)からわかるように、一つのパリティサイクルに含まれるスロットの数(テーブルT30内のC35)は、データディスクの数に8を乗ずることにより求められる。
図7(b)は、RAID1の場合を示す。RAID1では、正ディスク及び副ディスクの両方に、それぞれ同一のデータが記憶される。RAID1の場合、パリティサイクルに含まれるスロットの数は、8となる。
上述の通り、スロット300と記憶装置210とのマッピング状態は、RAIDレベル(C33)及びデータドライブ数(C34)とから求めることができる。従って、ホスト20から受信したデータの格納先を、上記マッピング状態に基づいて算出できる。
図8は、論理ブロック及び拡張論理ブロックの関係を示す説明図である。図8(a)に示すように、論理ブロック301は、512バイトのサイズを有する。ホスト20及び記憶装置210は、論理ブロック301を最小管理単位として使用する。
図8(b)に示すように、CHA110は、ホスト20から受信したデータについて、各論理ブロック301毎に、それぞれ8バイトのアドレスデータ310を付加する。アドレスデータ310には、論理ブロック301の論理アドレスに基づいて算出される値が設定される。なお、アドレスデータの他にLRCを論理ブロック301に対応付けることもできるが、ここでは説明を割愛する。
512バイトの論理ブロック301に8バイトのアドレスデータLAを付加することにより、拡張論理ブロック320が生成される。拡張論理ブロック320は、キャッシュメモリ130に記憶される。CHA110からホスト20にデータを送信する場合、拡張論理ブロック320からアドレスデータ310が取り除かれ、論理ブロック301としてホスト20に送信される。
図8(c)に示すように、例えば、FCディスクやSASディスクのような、520バイト単位のフォーマットに設定可能な記憶装置210の場合、拡張論理ブロック320をそのまま記憶させることができる。
図9は、SATAディスクのように、セクタ長が512バイトに固定されるディスクに、拡張論理ブロック320のデータを記憶させる様子を模式的に示す説明図である。
図9(a)に示すように、ホスト20から受信したデータは、各論理ブロック301毎にアドレスデータ310が付加され、拡張論理ブロック320が形成される。拡張論理ブロックの形式に変換されたデータは、キャッシュメモリ130に記憶される。
図9(b)に示すように、SATAディスクのような記憶装置210は、512バイト単位でデータを読み書きする。従って、520バイトの拡張論理ブロック320を、そのまま記憶装置に書き込むことはできない。
そこで、論理ブロック301のサイズ(512バイト)と拡張論理ブロック320のサイズ(520バイト)との最小公倍数(33280バイト)を、記憶装置210へのデータ入出力サイズとする。64個の拡張論理ブロック320の合計サイズ(=64×520)は、65個の論理ブロック301の合計サイズ(65×512)に一致する。従って、64個の拡張論理ブロック320を一塊りとして、記憶装置210に書き込んだり、記憶装置210から読み出すことができる。本実施例では、その最小公倍数に基づくサイズを、所定ブロック数のデータサイズと呼ぶことは既に述べた通りである。
以上を前提として、最小公倍数単位でのデータアクセスを利用したリードモディファイライト処理を説明する。図9(c)に示すように、ホスト20から更新データの入った論理ブロック(NEW)を受信すると、図9(d)に示すように、CHA110は、更新データの論理ブロック301にアドレスデータ310を付加して、拡張論理ブロック320を生成する。以下、更新対象のブロックを更新ブロックと呼ぶ場合がある。
図9(e)に示すように、DKA120は、記憶装置210から旧データ(OLD)を読出して、キャッシュメモリ130に記憶させる。上述の通り、65個の論理ブロックからなるデータは、64個の拡張論理ブロックからなるデータに等しい。従って、DKA120は、記憶装置210から連続する65個の論理ブロック301を読み出すことにより、拡張論理ブロック64個分のデータを得ることができる。なお、データの読み出し時には、後述するように、アドレスデータの値と論理アドレスの期待値とを比較する検査が行われる。
図9(f)に示すように、キャッシュメモリ130上において、更新対象の拡張論理ブロック320に新データが配置される。その後、図9(g)に示すように、新データの格納された64個の拡張論理ブロック320は、65個の論理ブロック301として記憶装置210に書き込まれる。なお、データの書込み時には、後述するように、分割位置PDが改めて決定され、分割位置PDの前後のデータが入れ替えられて、記憶装置210に書き込まれる。
RAID1の場合、旧データの書き込まれている論理ブロック320は、新データが記憶されている論理ブロック320に単純に置き換えられる。RAID5等のようにパリティを使用する場合、旧データと新データ及び旧パリティから新パリティを生成する。新パリティは、データと同様に、64個の拡張論理ブロック単位で記憶装置210に書き込まれる。新パリティの書込み時にも、パリティデータは分割位置PDで分割されて、その前後が入れ替えられ、記憶装置210に書き込まれる。パリティ及び各データの分割位置PDは、それぞれ異ならせることができる。あるいは、パリティ及び各データの分割位置PDを同一とする構成としてもよい。
図10〜図22に基づいて、本実施例の動作を説明する。以下に示す各フローチャートは、処理の要部を示しており、実際のコンピュータプログラムと相違する場合がある。いわゆる当業者であれば、図示されたステップを入れ替えたり、変更したり、削除したり、あるいは、新規なステップを追加したりできるであろう。
図10は、ライトコマンドの処理を示すフローチャートである。この処理は、CHA110によって実行される。
CHA110は、ホスト20からライトコマンドを受信すると(S10)、書込み開始アドレスをパリティグループ番号とスロット番号の組合せに変換する(S11)。ライトコマンドは、論理デバイスID、書込み開始アドレス、書込みサイズを指定している。従って、CHA110は、指定されるデバイスIDに基づいて、デバイスID−パリティグループ対応関係管理テーブルT20を参照することにより、書込先のパリティグループ番号を特定する。さらに、CHA110は、特定されたパリティグループ番号に基づいて、パリティグループ管理テーブルT30を参照することにより、書込み先のスロット番号を検出することができる。
CHA110は、転送終了スロット番号を算出する(S12)。転送終了スロット番号とは、ライトデータの最後のスロット番号である。CHA110は、書込み開始アドレスに書込みサイズを加算した値を、スロットサイズで除算することにより、そのライトデータの最後のスロットの番号を求めることができる。
CHA110は、書込み対象のスロットに対応するSLCBが既に存在するか否かを判定する(S13)。即ち、CHA110は、書込み対象スロットに、キャッシュメモリ130のセグメント131が割り当てられているか否かを判定する(S13)。
書込み対象スロットにSLCBが未だ割り当てられていない場合(S13:NO)、CHA110は、その書込み対象スロットにSLCBを一つ割当てる(S14)。CHA110は、その割り当てたSLCBに、空いているセグメント131のアドレスを設定する(S15)。これにより、書込み対象スロットとセグメントとが対応付けられ、書込み対象スロットのデータをキャッシュメモリ130に記憶させるための準備が整う。
書込み対象スロットにSLCBが既に割り当てられている場合(S13:YES)、S14及びS15はスキップされ、S16に移る。
CHA110は、ライトデータの受信に先立って、書込み対象スロットのスロットステータスをダーティ状態に設定する(S16)。次に、CHA110は、ホスト20から受信したライトデータ(書込み対象スロットのデータ)を、書込み対象スロットに割り当てられているセグメントアドレスに転送する(S17)。これにより、ホスト20から受信したライトデータは、キャッシュメモリ130内の所定セグメントに記憶される。
なお、ホスト20から受信したライトデータをキャッシュメモリ130内の所定セグメントに転送して記憶させる際に、そのライトデータには各論理ブロック301毎にそれぞれアドレスデータ310が付加される(S17)。従って、キャッシュメモリ130には、拡張論理ブロック320の形式でライトデータが記憶される。
CHA110は、ライトデータによって更新された論理ブロック301について、ダーティビットマップをオン状態(”1”)に設定する(S18)。これにより、その書込み対象スロット内のどの論理ブロック301に、更新データが格納されているかを管理することができる。
CHA110は、本処理の対象とするスロットの番号が、S12で求めた転送終了スロット番号に一致するか否かを判定する(S19)。処理対象のスロット番号と転送終了スロット番号とが不一致の場合(S19:NO)、CHA110は、処理対象のスロット番号を一つ増加させて(S20)、S13に戻る。両方のスロット番号が一致すると(S19:YES)、本処理は終了する。
ホスト20が、連続する複数スロットによってライトデータを書き込む場合、即ち、ホスト20がシーケンシャルライトを行う場合、S13〜S19がスロット数に応じて繰り返し実行される。ホスト20が、一つのスロット内の一つ又は複数の論理ブロック301を更新しようとする場合、S13〜S19がそれぞれ一回だけ実行される。
図11に基づいて、デステージ処理を説明する。デステージ処理とは、キャッシュメモリ130上のデータを記憶装置210に書き込む処理である。デステージ処理は、DKA120によって実行される。
デステージ処理では、更新対象スロットの旧データを読み出し、ホスト20から受信した更新データと旧データとをマージし、このマージされたデータを記憶装置210に書き込む。なお、更新対象スロットの全ブロックが更新される場合、記憶装置210から旧データを読み出す必要はない。ここでは、スロット内の幾つかのブロックが更新される場合を例に挙げて説明する。
DKA120は、共有メモリ140内のSLCBにアクセスし、スロットステータスがダーティ状態に設定されているSLCBが存在するか否かを確認する。DKA120は、スロットステータスがダーティ状態に設定されたSLCBを検出すると(S30)、そのSLCBからスロット番号及びパリティグループ番号を取得する(S31)。
DKA120は、パリティグループ番号に基づいてパリティグループ管理テーブルT30を参照することにより、そのパリティグループのディスクタイプを取得する。DKA120は、そのディスクタイプがFCディスクまたはSASディスクであるか否かを判定する(S32)。
ディスクタイプがSASディスクまたはFCディスクのいずれでもない場合(S32:NO)、キャッシュメモリ130内の拡張論理ブロック320のサイズと記憶装置210内の論理ブロック301のサイズとは、一致しない。
そこで、DKA120は、記憶装置210から読み出される旧データの境界を、キャッシュメモリ130内の拡張論理ブロック320の境界に一致させるべく、バウンダリ補正処理を行う(S33)。バウンダリ補正処理の詳細は、図12で後述する。
DKA120は、バウンダリ補正処理の終了後に、正ディスク(正記憶装置)及び副ディスク(副記憶装置)の両方についてデステージ処理を行う(S34)。デステージ処理では、キャッシュメモリ130からバッファメモリ122Aを経由して記憶装置210にデータが書き込まれる。デステージ処理(S34)の詳細は、図14で後述する。
ところで、ディスクタイプがSASディスクまたはFCディスクのいずれか場合(S32:YES)、DKA120は、SASディスク用のデステージ処理またはFCディスク用のデステージ処理を実行する(S35)。図7で述べたように、SASディスク及びFCディスクは、セクタ長を520バイトに設定できる。
従って、キャッシュメモリ130内のデータ管理単位である拡張論理ブロック320のサイズと、FCディスク210のデータ入出力単位とは一致する。このため、FCディスクとキャッシュメモリ130との間では、バウンダリ補正処理を行うことなく、データを転送することができる。従って、FCディスク用のデステージ処理については、これ以上の説明を省略する。SASディスクの場合もFCディスクの場合と同様であるので、その説明を省略する。
図12は、図11中にS33で示すバウンダリ補正処理の詳細を示すフローチャートである。このバウンダリ補正処理では、記憶装置210からキャッシュメモリ130にデータを転送する際に、データの境界を補正する。
DKA120は、転送対象スロットのSLCBを参照し、そのSLCBに設定されているダーティビットマップの状態を確認する(S40)。DKA120は、バウンダリ補正の対象となるデータ(ダーティ状態のデータ)について、その転送開始位置及び転送サイズを、64個の拡張論理ブロックのデータサイズに一致させる(S41)。DKA120は、旧データを記憶装置210から読み出して(S42)、旧データと新データとをマージする(S43)。
図13は、データの両端を所定ブロック数のサイズに一致させて書き込む様子を示す説明図である。図13(a)に示す例では、ライトデータは、3個の所定ブロック数の領域にまたがって書き込まれる。以下の説明では、拡張論理ブロック64個分のデータをCHUNKと呼ぶ場合がある。
図13(b)に示すように、DKA120は、バウンダリを一致させるために、記憶装置210から旧データを読み出す。記憶装置210から旧データを読み出す範囲は、先頭CHUNKの先頭ブロックから3番目のCHUNKの最終ブロックまでの範囲である。また、旧データを読み出す場合には、後述のリード処理の例で示すように、各CHUNK毎に、分割位置PDに基づいたLA値の検査が行われる。そして、図13(c)に示すように、DKA120は、ライトデータと旧データとをマージさせて、拡張論理ブロック64個分のサイズの3倍のデータを生成し、記憶装置210に書き込む。
図14は、図11中にS34で示されるデステージ処理の詳細を示すフローチャートである。この処理は、正記憶装置及び副記憶装置のそれぞれについて実行される。本処理では、拡張論理ブロック64個分のデータ(1CHUNKのデータ)を複数書き込む場合を例に挙げて説明する。なお、後述の転送起動パラメータL1.L2等については、図15の説明図が適宜参照される。
DKA120は、処理対象のCHUNKとして、先頭のCHUNKを設定する(S50)。図15(a)に示すように、DKA120は、処理対象CHUNKを分割するための分割位置PDを決定し、その決定された分割位置PDを管理テーブルT40に登録する(S51)。分割位置PDよりも前側のデータを前半部分FAのデータと呼び、分割位置PDよりも後側のデータを後半部分BAのデータと呼ぶ。図15の例では、#0−#4の合計5個の拡張論理ブロック分のデータが前半部分FAのデータとなり、#5−#63の合計59個の拡張論理ブロック分のデータが後半部分BAのデータとなっている。
DKA120は、分割位置PDに基づいて、DMA回路122に渡すための転送起動パラメータL1,L2を設定する(S52)。転送起動パラメータとは、DMA回路がデータ転送を行うために必要なパラメータである。
一方の転送起動パラメータL1は、後半部分BAのデータをDMA回路122によって転送させるためのパラメータである。他方の転送起動パラメータL2は、前半部分FAのデータをDMA回路122により転送させるためのパラメータである。
本実施例では、前半部分FAのデータと後半部分BAのデータとを入れ替えて、後半部分BAのデータが前側に位置し、かつ、前半部分FAのデータが後側に位置するように、記憶装置210に書き込む。従って、DMA回路122に最初に入力される転送起動パラメータL1には、後半部分BAを転送するためのパラメータが設定される。DMA回路122に次に入力される転送起動パラメータL2には、前半部分FAのデータを転送するためのパラメータが設定される。
後半部分BAのデータを転送するための転送起動パラメータL1では、転送開始アドレスとして、処理対象CHUNKの先頭キャッシュアドレス(キャッシュメモリ130上のアドレス)SAに、分割位置PDと拡張論理ブロックのサイズ520バイトを乗算した値が加算される(転送開始アドレス=SA+520×PD)。また、転送起動パラメータL1では、転送サイズとして、1CHUNKの合計ブロック数(=64)から分割位置PDの値を差し引いた値に、520バイトを乗算した値が設定される(転送サイズ=(64−PD)×520)。
前半部分FAのデータを転送するための転送起動パラメータL2では、転送開始アドレスとして、処理対象CHUNKの先頭キャッシュアドレスSAが設定される(転送開始アドレス=SA)。また、転送起動パラメータL2では、転送サイズとして、分割位置PDに520バイトを乗算した値が設定される(転送サイズ=520×PD)。
図14に戻る。一つのCHUNKについて転送起動パラメータL1,L2を設定し終わると(S52)、DKA120は、処理対象CHUNKを一つ進める(S53)。DKA120は、記憶装置210に書き込むべき全てのCHUNKについて、転送起動パラメータL1,L2を設定したか否かを判定する(S54)。転送起動パラメータL1,L2が未だ設定されていないCHUNKが有る場合(S54:NO)、DKA120は、S51〜S53のステップを繰り返す。
DKA120は、全てのCHUNKについて転送起動パラメータL1,L2をそれぞれ設定すると(S54:YES)、記憶装置210にライトコマンドを発行する(S55)。DKA120は、書込み準備が完了した旨の通知を記憶装置210から受領すると(S56)、DMA回路122に各転送起動パラメータL1,L2を入力して、DMA転送を起動させる(S58)。
これにより、図15の下側に示すように、各CHUNKは、それぞれ前半部分FAのデータと後半部分BAのデータとが入れ替わって、記憶装置210に記憶される。上記の処理は副記憶装置についても同様に行われる。
図16は、正記憶装置と副記憶装置とで、同一CHUNKのデータの分割位置が異なる場合を示す。正記憶装置に記憶されるデータは、分割位置PD1で分割されて、前後の順番が入れ替えられる。副記憶装置に記憶されるデータは、別の分割位置PD2で分割されて、前後の順番が入れ替えられる。
図17は、リード処理を示すフローチャートである。CHA110は、ホスト20からリードコマンドを受領すると(S70)、DKA120にデータの読出しを指示する(S71)。この指示には、例えば、スロット番号と、パリティグループ番号と、読出し対象の先頭ブロック番号と、ブロック数とが含まれる。
DKA120は、CHA110からの指示を受領すると(S72)、パリティグループ番号に基づいて、RAIDレベル及びディスクタイプをパリティグループ管理テーブルT30から取得する(S73)。
DKA120は、ディスクタイプがSASディスクまたはFCディスクのいずれかであるか否かを判定し(S74)、SASディスクまたはFCディスクのいずれかであると判定した場合(S74:YES)、SASディスク用のリード処理またはFCディスク用のリード処理を実行する(S75)。
読出し先の記憶装置210がSASディスクまたはFCディスク以外のディスクの場合(S74:NO)、DKA120は、読出し先の記憶装置210を特定し(S76)、リードデータを格納するためのSLCB及びキャッシュセグメント131を用意する(S77)。DKA120は、記憶装置210からキャッシュメモリ130へのデータ転送を実行する(S78)。
図18は、図17中にS78として示される、記憶装置210からキャッシュメモリ130へのデータ転送を行う処理のフローチャートである。ここでは、複数のCHUNKのデータを読み出す場合を説明する。
DKA120は、処理対象CHUNKを先頭CHUNKに設定する(S90)。DKA120は、処理対象CHUNKに設定されている分割位置PDを分割位置管理テーブルT40から読み出す(S91)。
DKA120は、図14(b)で示した、バウンダリ補正を行うリード処理と同様に、リード開始ブロックと、リードされるブロック数(リードブロック数)とを、拡張論理ブロック64個分のバウンダリに一致させるように、それぞれ設定する(S92)。
リード範囲を拡張した後の読み出し開始ブロックは、例えば、次式で算出される。
拡張後リード開始ブロック=拡張前リード開始ブロック/64↓×64
(↓は小数点切り捨てを示す)
拡張されるリードブロック数は、次式で算出される。
拡張後リードブロック数)=↓(拡張前リード開始ブロック+拡張前リードブロック数+63)/64↓×64−拡張後リード開始ブロック
DKA120は、分割位置PDを管理テーブルT40から正常に読み出すことができたか否かを判定する(S93)。分割位置PDを管理テーブルT40から正常に読み出すことができなかった場合、または、分割位置PDの管理フラグが無効に設定されていた場合のいずれかの場合(S93:NO)、DKA120は、図21で後述する分割位置復元処理を実行する(S110)。
管理フラグが有効に設定されている分割位置PDを管理テーブルT40から正常に読み出すことができた場合(S93:YES)、DKA120は、その分割位置PDに基づいて、DMA回路122に入力するための転送起動パラメータL1a,L2aをそれぞれ設定する(S94)。
DKA120は、処理対象CHUNKを一つ進め(S95)、読み出すべき全てのCHUNKについて転送起動パラメータL1a,L2aを設定するまで(S96)、S91〜S95のステップを繰り返し実行する。読み出すべき全てのCHUNKについて転送起動パラメータL1a,L2aを設定し終えると(S96:YES)、DKA120は、読出し先の記憶装置210にリードコマンドを発行し(S97)、その記憶装置から準備完了通知を受領する(S98)。DKA120は、各転送起動パラメータL1a,L2aをDMA回路122に入力して、DMA転送を起動させる(S99)。
図19は、記憶装置210からキャッシュメモリ130にデータを転送する場合を示す説明図である。図14,図15で述べたように、記憶装置210には、前半部分FAのデータと後半部分BAのデータとが場所を入れ替えて記憶されている。DMA回路122に最初に入力される転送起動パラメータL1aには、前半部分FAのデータを読み出すためのパラメータが記憶される。次に入力される転送起動パラメータL2aには、後半部分BAのデータを読み出すためのパラメータが記憶される(S55)。
前半部分FAのデータを転送するための転送起動パラメータL1aでは、転送開始アドレスとして、処理対象CHUNKの先頭キャッシュアドレスSAに、分割位置PDと拡張論理ブロックのサイズ520バイトを乗算した値が加算される(転送開始アドレス=SA+520×PD)。また、転送起動パラメータL1では、転送サイズとして、1CHUNKの合計ブロック数から分割位置PDの値を差し引いた値に、520バイトを乗算した値が設定される(転送サイズ=(64−PD)×520)。
後半部分BAのデータを転送するための転送起動パラメータL2aでは、転送開始アドレスとして、処理対象CHUNKの先頭キャッシュアドレスSAが設定される(転送開始アドレス=SA)。また、転送起動パラメータL2aでは、転送サイズとして、分割位置PDに520バイトを乗算した値が設定される(転送サイズ=520×PD)。
これにより、図19に示すように、記憶装置210から正しい順番で読み出されたデータがキャッシュメモリ130に転送されて、元のデータを再現する。
図20は、各論理ブロックに付加されたアドレスデータLAと、分割位置PDに基づいて算出される論理アドレスの期待値とに基づいて、記憶装置210から読み出されたデータが正しいか否かを判定するための、LA検査処理を示す。この処理は、DKA120内のLA検査部122Bにより実行される。便宜上、動作の主体をDKA120として説明する。
DKA120は、分割位置PDに基づいて、記憶装置210から読み出される拡張論理ブロックの論理アドレスの期待値を算出する(S100)。なお、分割位置PDに基づいて算出するのは、先頭の拡張論理ブロックのみでよい。後続する他の拡張論理ブロックについては、先頭の論理アドレスを所定値ずつインクリメントさせることにより算出できるためである。
DKA120は、分割位置PDに基づいて、転送リスト毎に、記憶装置210から読み出される拡張論理ブロックの論理アドレスの期待値を算出する(S100)。なお、転送リスト毎に、先頭の拡張論理ブロックについてのみ、分割位置PDに基づいて論理アドレスの期待値を算出する。
図19に示す例では、転送リストL1の期待値は”5”であり、転送リストL2の期待値は”0”である。1つの転送リスト内の、後続する他の拡張論理ブロックについては、先頭の論理アドレスを所定値ずつインクリメントさせることにより、論理アドレスを算出することができる。
DKA120は、読み出された拡張論理ブロックの有するアドレスデータLAの値と、その拡張論理ブロックに設定されているべきアドレスデータの値とが一致するか否かを判定する(S101)。そして、両方の値が一致する場合(S101:YES)、DKA120は、記憶装置210から読み出されたデータを、キャッシュメモリ130に転送させる(S102)。
これに対し、読み出された拡張論理ブロックの有するアドレスデータLAの値が、その期待値と一致しない場合(S101:NO)、書き損じ障害等が生じた場合であると判定することができる。
そこで、RAID5等の場合、DKA120は、同一パリティグループに属する他の記憶装置210から、前記S90−S98に基づいて、同一ストライプに属する他のデータ及びパリティを読み出す(S103)。
DKA120は、読み出されたデータの論理アドレスの期待値を分割位置PDに基づいて決定し(S104)、論理アドレスの期待値とそのデータに付加されている実際のアドレスデータLAの値とが一致するか否かを判定する(S105)。
論理アドレスの期待値(換言すれば、アドレスデータLAの期待値)と実際のアドレスデータLAの値とが一致する場合(S105:YES)、DKA120は、データ及びパリティに基づいて所定の論理演算を行うことにより、S101でエラーの検出されたデータを復元させる。この復元されたデータを、本実施例では、コレクションリードされたデータと呼ぶ。
DKA120は、コレクションリードされたデータをキャッシュメモリ130に転送させる(S106)。さらに、DKA120は、コレクションリードされたデータを、S101でエラーの検出された記憶装置210の所定領域に記憶させる(S107)。所定位置とは、S101でエラーの検出された領域である。
一方、コレクションリードが失敗した場合(S105:NO)、つまり、同一ストライプに属する他のデータまたはパリティのいずれかの読み出しにエラーが検出された場合は、エラー処理を行う(S108)。このエラー処理では、例えば、回復不能なエラーが生じた旨を、管理端末30を介してユーザに通知する。なお、2つの異なるパリティを使用するRAID6の場合は、2つまでのリードエラーに対応可能である。
図21は、図18中にS110で示される、分割位置復元処理を示すフローチャートである。本処理では、分割位置PDを管理テーブルT40から正常に読み出すことができなかった場合に、以下に述べるように、その分割位置PDの値を調査して復元する。
DKA120は、分割位置PDの値に”0”を設定し、分割位置PDが0であるとの仮定の下で、記憶装置210から拡張論理ブロックのデータを読み出す(S120)。DKA120は、読み出された拡張論理ブロックの有するアドレスデータLAの値と、分割位置”0”から予測される期待値とが一致するか否かを判定する。両方の値が一致しないエラーを、便宜上、LAエラーと呼ぶことにする。
DKA120は、LAエラーが発生したか否かを判定する(S121)。LAエラーが発生しなかった場合(S121:NO)、たまたま偶然に、分割位置PDの値が”0”であった場合である。そこで、DKA120は、その検出された分割位置の値”0”を管理テーブルT40に記憶させる(S126)。
確率的には、S121ではNOと判定される可能性の方が高い。LAエラーが検出された場合(S121:YES)、DKA120は、先頭の拡張論理ブロックでLAエラーが検出されたか否かを判定する(S122)。
もしも、先頭ブロック以外のブロックでLAエラーが検出された場合(S122:NO)、そのCHUNKのデータは損傷している場合なので、エラー処理を行う(S127)。そのエラー処理では、上述のように、コレクションリードを行ってデータを復元し、復元されたデータを元の記憶装置210の元の領域に書き込む。
先頭ブロックでLAエラーが検出された場合(S122:YES)、DKA120は、エラーの検出された先頭ブロックに実際に含まれているアドレスデータLAの値に基づいて、分割位置PDを算出する(S123)。つまり、分割位置PDは、先頭ブロックのアドレスデータLAの値に等しいとされる。
DKA120は、S123で新たに算出された分割位置PDに基づいて、記憶装置210から別の拡張論理ブロックを読み出し(S124)、LAエラーが検出されたか否かを判定する(S125)。新たに算出された分割位置PDに従ってデータを読み出しても、LAエラーが生じる場合は(S125:YES)、そのCHUNKのデータが本当に壊れている場合である。そこで、上述のエラー処理を実行する(S127)。
LAエラーが検出されなかった場合(S125:NO)、S123で新たに算出された分割位置PDが正しい場合である。そこで、DKA120は、その新たに算出された分割位置PDを管理テーブルT40に格納させる(S126)。
図22は、メモリ障害等が生じた場合に分割位置PDを復元するための処理を示すフローチャートである。ここでは、分割位置管理テーブルT40は、例えば、キャッシュメモリ130に記憶されているものとする。
キャッシュメモリ130は、図示せぬバッテリ等でバックアップされているため、停電等により、記憶制御装置10への通電が停止した場合でも、所定時間は記憶内容を保持できる。しかし、例えば、停電時間がバックアップ可能時間を上回ったような場合には、分割位置管理テーブルT40の全部または一部が失われてしまい、次回の起動時に、正常にデータを読み出すことができない可能性がある。あるいは、分割位置PDは管理テーブルT40に記憶されているが、その値を信用できない場合もある。
そこで、DKA120は、例えば、停電等のような管理テーブルT40の信頼性に影響を与える所定の異常が検出された場合(S140:YES)、その所定の異常が発生した旨を、共有メモリ140または記憶装置210のような不揮発性の記憶領域に記憶させて、処理を終了する(S141)。
障害が解消した後の起動時において、DKA120は、分割位置管理テーブルT40内の全ての管理フラグを無効に設定する(S151)。DKA120は、管理フラグが無効に設定された各分割位置PDを、図21に示す分割位置復元処理により復元させ(S152)、復元された分割位置PDの管理フラグを有効に設定する(S153)。
DKA120は、全ての管理フラグが有効に設定されるまで(S154)、S152,S153のステップを繰り返し実行する。
このように構成される本実施例によれば、読み出し時に、エラーの有無を速やかに検出でき、書き込んだばかりのデータを記憶装置210から読み出して検査する構成に比べて、処理時間を短縮でき、かつ、信頼性を向上できる。
本実施例では、読み出し時に、書込み時で生じたエラーを比較的容易に検出することができるため、SATAディスクのような信頼性の劣る記憶装置210を用いた場合であっても、記憶制御装置10全体としての信頼性を低下させずに、応答性能を高めることができ、使い勝手が向上する。
本実施例では、分割位置PDを管理するためのテーブルT40から分割位置PDを正常に読み出すことができない場合等に、先頭ブロックのアドレスデータLAの値に基づいて、その分割位置PDを復元させることができる。従って、停電等の障害が生じた場合にも対応することができ、信頼性が向上する。分割位置管理テーブルT40を複数の記憶領域に保存する構成も考えられるが、その場合は、メモリ資源が消費される。これに対し、本実施例では、管理テーブルT40の冗長記憶を行わずに、分割位置をアドレスデータに基づいて自動的に復旧させることができ、使い勝手が向上する。
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
1:記憶制御装置、1A:ホスト通信制御部、1B:デバイス通信制御部、1C:キャッシュメモリ、1D:アドレスデータ付加部、2:記憶装置、3:ホストコンピュータ、4:バッファメモリ、5:アドレスデータ検査部、10:記憶制御装置、20:ホストコンピュータ、30:管理端末、100:コントローラ、110:チャネルアダプタ、111:プロトコルチップ、112:DMA回路、112A:アドレスデータ付加部、113:マイクロプロセッサ、120:ディスクアダプタ、121:プロトコルチップ、122:DMA回路、122A:バッファメモリ、122B:アドレスデータ検査部、123:マイクロプロセッサ、124:パリティ生成回路、130:キャッシュメモリ、131:キャッシュセグメント、140:共有メモリ、150:接続部、160:サービスプロセッサ、200:記憶装置搭載部、210:記憶装置、220:パリティグループ、230:論理デバイス、300:スロット、301:論理ブロック、310:アドレスデータ、320:拡張論理ブロック。