ストレージ装置、制御装置およびストレージ装置制御方法
【課題】データの更新時に、データがエラーを有するデータで更新されることを抑止する。
【解決手段】制御部11は、記憶領域12aに記憶されているデータ2aの少なくとも一部をデータ2bの少なくとも一部によって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込む。また、制御部11は、書き込みエラーの発生の有無を判定する。制御部11は、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。
【解決手段】制御部11は、記憶領域12aに記憶されているデータ2aの少なくとも一部をデータ2bの少なくとも一部によって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込む。また、制御部11は、書き込みエラーの発生の有無を判定する。制御部11は、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。
【発明の詳細な説明】
【技術分野】
【0001】
本件は、ストレージ装置、制御装置およびストレージ装置制御方法に関する。
【背景技術】
【0002】
情報技術の進歩および普及に伴い、磁気ディスク、光ディスク、半導体メモリ等の記憶媒体を利用し、記憶媒体にデータの読み書きが可能なストレージ装置が広く利用されている。ストレージ装置を用いることで、大量のデータの書き込み、読み出しおよび更新ならびに大量のデータの管理が容易になる。
【0003】
ストレージ装置におけるデータの書き込みに関して、以下の技術が知られている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000−20398号公報
【特許文献2】特開2001−318766号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ここで、ストレージ装置におけるデータの一部または全部について上書きによる更新が行われる場合に、更新するデータに不整合が発生していた等の原因により、エラーが発生していたものとする。この場合、上書きされたデータにも更新するデータのエラーが反映されてしまう場合があるという問題点があった。
【0006】
本件はこのような点に鑑みてなされたものであり、データの更新時に、データがエラーを有するデータで更新されることを抑止可能なストレージ装置、制御装置およびストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために以下のようなストレージ装置が提供される。このストレージ装置は、第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、第2のデータを第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、書き込みエラーが発生していないときには、第1のデータと第2のデータとを結合する制御部を有する。
【0008】
また、上記目的を達成するために以下のようなストレージ装置制御方法が提供される。このストレージ装置制御方法は、第1のデータに記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、第2のデータを第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定する。書き込みエラーが発生していないときには、第1のデータと第2のデータとを結合する。
【発明の効果】
【0009】
開示のストレージ装置、制御装置およびストレージ装置制御方法によれば、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【図面の簡単な説明】
【0010】
【図1】第1の実施の形態のストレージ装置を示す図である。
【図2】第2の実施の形態のストレージ装置のハードウェア構成を示す図である。
【図3】第2の実施の形態のストレージ装置の機能を示すブロック図である。
【図4】第2の実施の形態のキャッシュ領域を示す図である。
【図5】第2の実施の形態の制御レジスタを示す図である。
【図6】第2の実施の形態のキャッシュ管理テーブルを示す図である。
【図7】比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。
【図8】第2の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。
【図9】第2の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。
【図10】第2の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。
【図11】第2の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図12】第2の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図13】第2の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。
【図14】第2の実施の形態の更新判定処理を示すフローチャートである。
【図15】第2の実施の形態の書き込みエラー検出処理を示すフローチャートである。
【図16】第2の実施の形態のデータ結合処理を示すフローチャートである。
【図17】第2の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、実施の形態を、図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のストレージ装置を示す図である。本実施の形態のストレージ装置1は、制御部11、記憶領域12a(第1の記憶領域)、記憶領域12b(第2の記憶領域)を有する。
【0012】
制御部11は、記憶領域12aに記憶されているデータ2a(第1のデータ)の少なくとも一部をデータ2b(第2のデータ)の少なくとも一部によって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込む。ここで、データ2aとデータ2bとは、例えば、同一の更新対象のデータを更新するデータであるとともにデータ2aによる更新の後にデータ2bによる更新が行われ、かつ、更新対象のデータにおけるデータ2aが更新する部分と、データ2bが更新する部分との少なくとも一部が重複してもよい。すなわち、更新対象のデータに対してデータ2aによる更新が行われた場合、データ2aによって更新された部分の少なくとも一部について、データ2bによってさらに更新される関係であってもよい。データ2aは、データ2bとの重複する部分である更新部分2a1と、更新部分2a1以外の差分2a2とを有するものとする。図1では、一例として、データ2aにおいて、更新部分2a1がデータ2bで更新されるものとする。また、制御部11は、書き込みエラーの発生の有無を判定する。制御部11は、判定の結果、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。これにより、制御部11は、データ2bでデータ2aを更新する際、直接データ2aに上書きせず、一旦記憶領域12bに書き込み、エラーが発生しなければデータ2aと結合することで、データ2cを生成する。従って、データ2bの記憶領域12bへの書き込みの際にエラーが発生しても、データ2aをエラーデータであるデータ2bで上書きしてしまうことが抑止できる。
【0013】
また、制御部11は、書き込みエラーが発生していないときには、記憶領域12aにデータ2bを書き込む結合処理1(第1の結合処理)を実行して、データ2aとデータ2bとを結合してもよい。結合処理1は、データ2aの更新部分2a1をデータ2bで上書きによって更新することで結合し、データ2cを生成する処理である。
【0014】
また、制御部11は、書き込みエラーが発生していないときには、記憶領域12bにデータ2aにおける更新部分以外の差分を書き込む結合処理2を実行して、データ2aとデータ2bとを結合してもよい。結合処理2は、データ2bに、データ2aにおける更新部分2a1以外の差分2a2を付加し、データ2cを生成する処理である。
【0015】
また、制御部11は、書き込みエラーが発生していないときには、結合処理1を実行した場合の書き込み量(第1の書き込み量)と、結合処理2を実行した場合の書き込み量(第2の書き込み量)とを比較してもよい。この場合、制御部11は、比較結果に基づいて、結合処理1または結合処理2のいずれかを選択し、選択した処理を実行することができる。制御部11は、比較結果に基づいて、結合処理1または結合処理2のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【0016】
記憶領域12aは、データ2aを記憶している。記憶領域12bは、空き領域である。制御部11によってデータ2aが記憶領域12bに書き込まれる際、制御部11によりエラーの発生の有無が判定される。データ2aが記憶領域12bに書き込まれる際にエラーが発生しなければ、データ2aとデータ2bとが結合される。また、データ2aが記憶領域12bに書き込まれる際にエラーが発生しても、データ2bは、データ2aが記憶されている記憶領域12aには書き込まれず、記憶領域12bに書き込まれている。このため、データ2aはエラーデータであるデータ2bによって更新されずに保持される。
【0017】
以上のように、第1の実施の形態では、制御部11が、記憶領域12aに記憶されているデータ2aをデータ2bによって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込み、書き込みエラーの発生の有無を判定する。そして、制御部11は、判定の結果、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。これにより、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【0018】
[第2の実施の形態]
次に、図1に示したストレージ装置1の、エラーデータによるデータの更新を抑止する機能を、RAID(Redundant Arrays of Inexpensive Disks)を構成する記憶デバイス群を有するストレージ装置100に適用した実施の形態を、第2の実施の形態として説明する。
【0019】
図2は、第2の実施の形態のストレージ装置のハードウェア構成を示す図である。ストレージ装置100は、装置全体の制御を行うCM(Controller Module)110a,110b、記憶デバイス120a,120b,120c,120dを有する。
【0020】
ストレージ装置100は、後述するハードディスクドライブ等の複数の記憶デバイスに対するデータの入出力を行う。ストレージ装置100は、RAID0〜6等のRAID機能を有し、複数の記憶デバイスをまとめてRAIDを構成することにより、各RAIDをそれぞれ1台の記憶デバイスとして管理する。
【0021】
ホストコンピュータ300は、業務処理を実行するコンピュータであり、ファイバチャネル(Fibre Channel)で構成されたSAN(Storage Area Network)を介してストレージ装置100とデータ通信可能に接続されている。ホストコンピュータ300は、業務処理に使用するデータについて、ストレージ装置100への保存およびストレージ装置100からの読み出しを行う。
【0022】
CM110aは、CPU(Central Processing Unit)111a、メモリ112a、デバイスインタフェース(DI:Device Interface)113c,113d、DMA(Direct Memory Access)114a、チャネルアダプタ115c,115dを有する。
【0023】
CPU111aは、OS(Operating System:オペレーティングシステム)等に従って処理を実行し、各種制御を行う。また、CPU111aは、メモリ112a、チャネルアダプタ115c,115d、記憶デバイス120a,120b,120c,120d等の資源管理を行う。
【0024】
メモリ112aは、CPU111aがストレージ装置100を制御するために必要な制御データを記憶する。また、メモリ112aは、ホストコンピュータ300から送信され、記憶デバイス120a〜120dに記憶される書き込みデータおよびホストコンピュータ300から送信された読み出し要求に応じて記憶デバイス120a〜120dから読み出され、ホストコンピュータ300に送信される読み出しデータを一時的に記憶する。
【0025】
デバイスインタフェース113c,113dは、記憶デバイス120a〜120dとの接続制御を行う。
DMA114aは、ファームウェアによる制御に基づき、バス150を介してCM110bとの間で直接データ転送を行う。DMA114a,114bは、バス150によって接続されている。このバス150を介して、DMA114aおよびDMA114bの間でデータが転送される。
【0026】
チャネルアダプタ115c,115dは、ホストコンピュータ300とCM110a,110bとの接続制御を行う。例えば、チャネルアダプタ115cは、ホストコンピュータ300からの要求を受け付けて、CM110aとの接続制御を行う。CM110a,110bは、それぞれ複数個(図ではそれぞれ2個)のチャネルアダプタ115c,115dを有する。
【0027】
なお、チャネルアダプタ115c,115dとホストコンピュータ300との間の通信は、ファイバチャネルで構成されたSANによって接続されているが、ファイバチャネル以外の接続方式によって接続されていてもよい。また、チャネルアダプタ115c,115dとホストコンピュータ300との間の通信は、専用線やVPN(Virtual Private Network)を用いて、ストレージ装置100をホストコンピュータ300から遠隔地に設置するように構成してもよい。
【0028】
また、CM110a,110bは、制御装置として機能し、ストレージ装置100に対し着脱可能である。ここで、CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e,113f、DMA114b、チャネルアダプタ115e,115fを有し、CM110aと同一の構成であるため、説明を省略する。
【0029】
記憶デバイス120a〜120dは、RAIDを構成可能なハードディスクドライブであり、ホストコンピュータ300から送信されたユーザデータを記憶する。なお、ユーザデータは1個のハードディスクに記憶されている必要はなく、複数のハードディスクに渡って記憶されていてもよい。また、1個のハードディスクに複数のユーザデータが記憶されていてもよい。また、記憶デバイス120a〜120dは、例えば、SSD(Solid State Drive)等の不揮発性半導体メモリやハードディスクドライブ以外の磁気記憶装置、光ディスク、その他のデータの記憶が可能な記憶媒体を使用することができる。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープ等がある。光ディスクには、DVD、DVD−RAM、CD−ROM/RW等がある。
【0030】
なお、図2において、CM110a,110bは、それぞれ2個図示し、デバイスインタフェース113c〜113fおよびチャネルアダプタ115c〜115fは、CM110a,110bそれぞれに対してそれぞれ2個ずつ図示しているが、これらの数はそれぞれ任意である。
【0031】
また、図2において、ストレージ装置100に対して1つのホストコンピュータ300が接続されているが、ストレージ装置100に対して複数のホストコンピュータが接続されていてもよい。
【0032】
また、ストレージ装置100に対してCM110a,110bに従属して制御を受ける、制御部および記憶デバイスを有する増設用装置(図示省略)を接続してもよい。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。
【0033】
図3は、第2の実施の形態のストレージ装置の機能を示すブロック図である。第2の実施の形態のストレージ装置100は、CM110a,CM110b、記憶デバイス120a〜120dを有する。CM110aは、メモリ112a、チャネルアダプタ115c、制御部116aを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2、実行用領域112a3を有する。制御部116aは、制御レジスタ116a1を有する。CM110aは、CM110bとの間でデータを転送可能である。
【0034】
CM110bは、制御部116bを有する。制御部116bは、第2の制御部として機能する。なお、以下ではCM110aについて説明するが、CM110bは、CM110aと同一の構成であって同一の機能を有するため、説明を省略する。
【0035】
CM110aは、ホストコンピュータ300等の上位装置との間の送受信等に基づくデータの記憶デバイス120a〜120dへの読み書きの制御等、ストレージ装置100を制御する。CM110aは、制御装置として機能する。
【0036】
メモリ112aは、CM110aで記憶デバイス120a〜120dに読み書きされるデータや、制御部116aによる制御に使用される制御データ等を記憶する。
バッファ領域112a1は、ホストコンピュータ300から送信されたデータやホストコンピュータ300に送信されるデータを一時的に記憶する。
【0037】
キャッシュ領域112a2は、ホストコンピュータ300から送信され、記憶デバイス120a〜120dに書き込まれる書き込みデータを、記憶デバイス120a〜120dへの書き込みが完了するまでの間、一時的に記憶する。また、キャッシュ領域112a2は、記憶デバイス120a〜120dから読み出され、ホストコンピュータ300に送信される読み出しデータを一時的に記憶する。ここでは、キャッシュ領域112a2のある記憶領域には、先の書き込みデータ(第1のデータ)が記憶されているものとする。また、ホストコンピュータ300から、先の書き込みデータを更新する後の書き込みデータ(第2のデータ)が送信されたものとする。ここで、先の書き込みデータと後の書き込みデータとは、例えば、同一のデータを更新するデータであるとともに先の書き込みデータによる更新の後に、後の書き込みデータによる更新が行われるものとする。また、先の書き込みデータおよび後の書き込みデータの更新対象のデータにおける、先の書き込みデータが更新する部分と、後の書き込みデータが更新する部分との少なくとも一部が重複しているものとする。すなわち、更新対象のデータに対して後の書き込みデータによる更新が行われた場合、先の書き込みデータによって更新された部分の少なくとも一部について、後の書き込みデータの少なくとも一部によってさらに更新される関係であるものとする。キャッシュ領域112a2は、キャッシュ部として機能する。
【0038】
ここで、キャッシュ領域112a2に書き込みデータが記憶される際、制御部116aは、図6において後述するキャッシュ管理テーブルに記憶されているキャッシュ管理情報を参照して、重複部分を有する先の書き込みデータの存在の有無を判定する。具体的には、制御部116aは、キャッシュ領域112a2の各記憶領域のキャッシュ管理情報を参照し、キャッシュ管理情報のフラグを確認してキャッシュ領域112a2の各記憶領域について書き込みデータのキャッシュデータが記憶されているか否かを判定する。制御部116aは、フラグに基づいて書き込みデータのキャッシュデータが記憶されていると判定した記憶領域について、キャッシュ管理情報のディスク番号および先頭LBAにより、キャッシュ領域112a2に記憶されている書き込みデータにおける、キャッシュ領域112a2に書き込まれる書き込みデータと更新対象のデータが同一である書き込みデータの有無を判定する。制御部116aは、ディスク番号および先頭LBAに基づいてキャッシュ領域112a2に書き込まれる書き込みデータと更新対象が同一である書き込みデータがあった場合、更新対象が同一である書き込みデータが記憶されているキャッシュ領域112a2の記憶領域に対応するキャッシュ管理情報の使用LBAビットマップにより、キャッシュ領域112a2に書き込まれる書き込みデータが更新対象のデータを更新する部分の少なくとも一部と、上記更新対象のデータが同一である書き込みデータが更新対象のデータを更新する部分の少なくとも一部とが重複するか否かを判定する。制御部116aは、判定の結果、キャッシュ領域112a2に書き込まれる書き込みデータが更新する部分の少なくとも一部と、更新対象が同一である書き込みデータが更新する部分の少なくとも一部とが重複する場合には、キャッシュ領域112a2に書き込まれる書き込みデータを後の書き込みデータとし、後の書き込みデータと更新対象が同一である書き込みデータを先の書き込みデータとする。
【0039】
次に、制御部116aは、キャッシュ領域112a2の先の書き込みデータの少なくとも一部を後の書き込みデータの少なくとも一部によって更新する場合、キャッシュ領域112a2において、後の書き込みデータを先の書き込みデータとは異なる記憶領域に書き込む。制御部116aは、後の書き込みデータをキャッシュ領域112a2に書き込む際、先の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域とは異なる記憶領域であって、かつ、空いている記憶領域に書き込む。具体的には、制御部116aは、キャッシュ管理テーブルを参照して、キャッシュ領域112a2の記憶領域について空き領域であるか否かを判定し、空き領域と判定された記憶領域を選択して後の書き込みデータを記憶させる。すなわち、制御部116aは、キャッシュ領域112a2の記憶領域について、キャッシュ管理テーブルを参照してフラグを取得し、フラグが無効(データが書き込まれていない)であるか否かを判定する。制御部116aは、判定の結果、記憶領域のフラグが無効である場合、上記記憶領域を後の書き込みデータを記憶させる記憶領域に選択する。一方、制御部116aは、判定の結果、記憶領域のフラグが有効(データが書き込まれている)である場合、先の書き込みデータが記憶されている記憶領域以外の記憶領域のうちの次の記憶領域について判定を行う。次に、制御部116aは、選択した記憶領域に後の書き込みデータを記憶させる。
【0040】
実行用領域112a3は、図6において後述するキャッシュ管理テーブル等のCM110aやストレージ装置100等の制御に使用する制御データを記憶する。実行用領域112a3は、管理情報記憶部として機能する。
【0041】
チャネルアダプタ115cは、ホストコンピュータ300から送信され、キャッシュ領域112a2に書き込まれるデータにチェックコードを付加して、バッファ領域112a1に書き込む。チャネルアダプタ115cは、付加部として機能する。
【0042】
制御部116aは、CM110a内におけるデータのバッファ領域112a1、キャッシュ領域112a2への転送や、CM110bとの間のデータ転送を制御する。この際、ストレージ装置100では、パケット単位に分割してデータ転送が行われる。また、制御部116aは、後の書き込みデータのキャッシュ領域112a2への書き込み時に、書き込みエラーの発生の有無を判定する。制御部116aは、判定の結果、書き込みエラーが発生していないときには、先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。制御部116aは、結合データにより、記憶デバイス120a〜120dに記憶されている先の書き込みデータおよび後の書き込みデータと対応する更新の対象のデータを更新する。
【0043】
これにより、制御部116aは、後の書き込みデータで先の書き込みデータを更新する際、直接先の書き込みデータに上書きせず、先の書き込みデータとは異なる記憶領域に書き込み、エラーが発生しなければ先の書き込みデータと結合する。従って、後の書き込みデータのキャッシュ領域112a2の記憶領域への書き込みの際にエラーが発生しても、先の書き込みデータをエラーデータである後の書き込みデータで上書きしてしまうことが抑止できる。制御部116aは、CPU111aおよびDMA114aによって実現できる。
【0044】
また、制御部116aは、書き込みエラーが発生していないときには、先の書き込みデータの記憶領域に後の書き込みデータを書き込む結合処理1(第1の結合処理)を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理1は、先の書き込みデータを後の書き込みデータで更新して結合する処理である。
【0045】
また、制御部116aは、書き込みエラーが発生していないときには、後の書き込みデータの記憶領域に先の書き込みデータにおける更新部分以外の差分を書き込む結合処理2を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理2は、後の書き込みデータに、先の書き込みデータにおける更新部分以外の差分を付加する処理である。
【0046】
また、制御部116aは、書き込みエラーが発生していないときには、結合処理1を実行した場合の結合量1(第1の書き込み量)と、結合処理2を実行した場合の結合量2(第2の書き込み量)とを比較してもよい。この場合、制御部116aは、比較結果に基づいて、結合処理1または結合処理2のいずれかを選択し、選択した処理を実行することができる。制御部116aは、比較結果に基づいて、結合処理1または結合処理2のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【0047】
また、制御部116aは、バッファ領域112a1に記憶されている書き込みデータを読み出し、その後、キャッシュ領域112a2に後の書き込みデータを書き込む際に、チャネルアダプタ115cで付加されたチェックコードに基づいてエラーの発生の有無を判定する。ここで、ホストコンピュータ300から送信された後の書き込みデータは、制御部116aの制御に基づき、チャネルアダプタ115cでチェックコードが付加された後にバッファ領域112a1に書き込まれる。その後、後の書き込みデータは、制御部116aにより、キャッシュ領域112a2に書き込まれる際に、チェックコードに基づいてエラーの発生の有無を判定される。これにより、制御部116a(DMA114a)が書き込みデータをバッファ領域112a1からキャッシュ領域112a2に転送する際に、書き込みデータのエラーの発生の有無を判定することができる。なお、これに限らず、制御部116aは、バッファ領域112a1に書き込んだ書き込みデータについてチェックコードにより書き込みデータのエラーの発生の有無を判定してもよい。
【0048】
ここで、キャッシュ領域112a2に書き込まれている書き込みデータは、既に制御部116aにより、エラーが発生していないと判定されている。これに従い、制御部116aによってエラーの発生の有無が判定されていない、バッファ領域112a1の書き込みデータは、比較的、キャッシュ領域112a2の書き込みデータよりもエラーが生じている可能性が高く、信頼性が低いと考えられる。従って、キャッシュ領域112a2に先の書き込みデータが書き込まれているとともに、バッファ領域112a1に後の書き込みデータが記憶されている場合、先の書き込みデータは後の書き込みデータよりも信頼性が高いと考えられる。
【0049】
このため、制御部116aは、キャッシュ領域112a2の先の書き込みデータと後の書き込みデータとを結合する際に、キャッシュ領域112a2において、先の書き込みデータとは異なる記憶領域に後の書き込みデータを書き込む。制御部116aは、後の書き込みデータの書き込み時にエラーの発生の有無を判定する。制御部116aは、後の書き込みデータの書き込み時にエラーの発生がなければ、結合処理1または結合処理2によって先の書き込みデータおよび後の書き込みデータを結合する。また、制御部116aは、後の書き込みデータのキャッシュ領域112a2への書き込み時にエラーが発生した場合にも、先の書き込みデータは後の書き込みデータが書き込まれた記憶領域とは異なる記憶領域に保持されている。これにより、後の書き込みデータの書き込み時にエラーが発生しても、先の書き込みデータに対するエラーデータによる更新を抑止できる。また、先の書き込みデータのホストコンピュータ300への再送要求等をしなくてもよいため、処理の増加を抑制できる。
【0050】
記憶デバイス120a〜120dは、RAIDを構成するハードディスクドライブ等の記憶デバイスであり、ホストコンピュータ300から送信されたデータやホストコンピュータ300に送信するデータを記憶する。記憶デバイス120a〜120dは、記憶部として機能する。
【0051】
また、制御部116aは、制御部116bに対してホストコンピュータ300から送信された書き込みデータを送信する。制御部116bは、先の書き込みデータおよび後の書き込みデータを受信すると、制御部116aと同様、送信された先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。
【0052】
また、制御部116aは、後の書き込みデータで書き込みエラーが発生したときには、先の書き込みデータと後の書き込みデータとを結合せずに、後の書き込みデータを削除し、ホストコンピュータ300に対してエラーの発生を通知する。また、制御部116aは、書き込みエラーが発生したときには、制御部116aで結合された結合データを取得してもよい。
【0053】
制御レジスタ116a1は、DMA114aが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。制御レジスタは、DMA114aに設けてもよい。
【0054】
なお、第2の実施の形態のストレージ装置100は、RAIDを構成する記憶デバイス群を有するが、これに限らず、1つの記憶デバイスや、RAIDを構成しない複数の記憶デバイス群を有してもよい。また、ストレージ装置100は、パーソナルコンピュータ(personal computer)や携帯情報端末等の記憶デバイスを有する情報処理装置であってもよい。
【0055】
また、ストレージ装置100は、キャッシュ領域112a2において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを空き領域に書き込む。しかし、ストレージ装置100は、これに限らず、バッファ領域112a1、記憶デバイス120a〜120d、その他のメモリや記憶媒体において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを、メモリや記憶媒体の等の空き領域に書き込んでもよい。
【0056】
また、チェックコードは、書き込みデータに対してチャネルアダプタ115cによって付加されるが、これに限らず、ホストコンピュータ300等の外部装置や制御部116a等の他の内部構成によって付加されてもよい。
【0057】
図4は、第2の実施の形態のキャッシュ領域を示す図である。図4に、第2の実施の形態のストレージ装置が有するメモリ112aに設定されているキャッシュ領域112a2を示す。
【0058】
キャッシュ領域112a2は、ホストコンピュータ300から送信され記憶デバイス120a〜120dに記憶される書き込みデータや記憶デバイス120a〜120dから読み出されホストコンピュータ300に送信される読み出しデータを一時的に記憶する。キャッシュ領域112a2は、第2の実施の形態では、一例として2GByteの記憶容量を有するものとするが、必ずしもこれに限られず、任意のサイズの記憶容量を有することができる。キャッシュ領域112a2は、所定の管理単位の記憶容量(例えば、64KByte)毎の記憶領域112a21,112a22,112a23,・・・に区分して管理されている。キャッシュ領域112a2は、区分された記憶領域毎に書き込みデータおよび読み出しデータの一時記憶に使用される。
【0059】
キャッシュ領域112a2の記憶領域(例えば、記憶領域112a21)は、所定の記憶容量(例えば、512Byte)毎のLBA(Logical Block Addressing)に分割されている。記憶領域112a21には、昇順にLBAのアドレスが設定されており、LBA毎に書き込み処理や読み出し処理が行われる。
【0060】
図5は、第2の実施の形態の制御レジスタを示す図である。図5に、第2の実施の形態のストレージ装置が有する制御部116aに設定される制御レジスタ116a1を示す。
制御レジスタは、DMA114aが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。図5に示す制御レジスタには、“モード”、“DMAサイズ”、“DMA転送先アドレス”、“マージ先頭アドレス”、“マージ最終アドレス”、“書き込みキャッシュ先頭アドレスA”、“書き込みキャッシュ先頭アドレスB”、“書き込みキャッシュサイズ”が、各書き込みデータに対応して設定される。
【0061】
モードは、DMA114aの制御モードを示す。モードは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。モードには、一例として、“READ”、“WRITE”、“WRITE & MERGE”を設定可能にしてもよい。
【0062】
READモードの場合、制御部116aは、CM110bから転送されたデータを受信する。WRITEモードの場合、制御部116aは、CM110aからCM110bにデータを転送する。WRITE & MERGEモードの場合、制御部116aは、WRITEモードによりCM110aからCM110bに後の書き込みデータを転送した後、後の書き込みデータと、CM110aのキャッシュ領域112a2の異なる記憶領域に記憶されている先の書き込みデータとの結合を行う。また、CM110aから転送された後の書き込みデータを受信した後、受信した後の書き込みデータCM110bと、CM110bの図示しないキャッシュ領域の異なる記憶領域に記憶されている前もってCM110aから転送された先の書き込みデータとの結合を行う。新たな書き込みデータについて、キャッシュ領域112a2に更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、CPU111は、WRITE & MERGEモードを設定する。
【0063】
DMAサイズは、DMA114aによる読み出しまたは書き込みの際のDMAサイズ(Byte数)を示す。DMAサイズは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0064】
DMA転送先アドレスは、DMA114aによる読み出しまたは書き込みの際の転送先のメモリのアドレスを示す。DMA転送先アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0065】
マージ先頭アドレスは、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。マージ先頭アドレスは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域112a2の記憶領域における先頭アドレスを示す。マージ先頭アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0066】
マージ最終アドレスは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。マージ最終アドレスは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域112a2の記憶領域における最終アドレスを示す。マージ最終アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0067】
書き込みキャッシュ先頭アドレスAは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスAは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、先に存在する先の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスAは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0068】
書き込みキャッシュ先頭アドレスBは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスBは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後から書き込まれる後の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスBは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0069】
書き込みキャッシュサイズは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュサイズは、キャッシュ領域112a2が有する各記憶領域の1つあたりの記憶容量を示す。書き込みキャッシュサイズは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0070】
なお、図5に示した制御レジスタ116a1は一例であり、制御レジスタには任意の項目を設定することができる。
図6は、第2の実施の形態のキャッシュ管理テーブルを示す図である。図6に示すキャッシュ管理テーブル112a31は、第2の実施の形態のストレージ装置100が有するメモリ112aの実行用領域112a3に設定される。キャッシュ管理テーブル112a31は、ストレージ装置100のキャッシュ領域112a2が有する各記憶領域の書き込みデータを管理するテーブルである。
【0071】
キャッシュ管理テーブル112a31には、項目として“先頭アドレス”、“フラグ”、“ディスク番号”、“先頭LBA”、“使用LBAビットマップ(bitmap)”が設けられている。キャッシュ管理テーブル112a31には、上記項目に設定された値が、キャッシュ領域112a2が有するそれぞれの記憶領域のキャッシュ管理情報として互いに関連付けられる。
【0072】
先頭アドレスは、キャッシュ管理情報で管理されるキャッシュ領域112a2の記憶領域を示すアドレスである。キャッシュ管理情報は、キャッシュ領域112a2の記憶領域に対して1対1で設定される。
【0073】
フラグは、記憶領域に記憶されている書き込みデータまたは読み出しデータが有効であるか無効であるかを示す。例えば、記憶領域のデータが無効であれば、“0”が設定され、有効であれば、“1”が設定される。なお、フラグは、書き込みデータであるか読み出しデータであるかを示してもよい。この場合、例えば、記憶領域のデータが無効であれば、“0”が設定され、記憶領域のデータが有効であるとともに書き込みデータであれば、“1”が設定され、記憶領域のデータが有効であるとともに書き込みデータであれば、“2”が設定されてもよい。
【0074】
ディスク番号は、記憶領域に記憶されている書き込みデータまたは読み出しデータを記憶している記憶デバイス120a〜120dを示す。
先頭LBAは、記憶領域に記憶されている書き込みデータまたは読み出しデータに対応するデータが記憶されている記憶デバイス120a〜120dのLBAの先頭アドレスを示す。
【0075】
使用LBAビットマップは、記憶デバイス120a〜120dに記憶されている対応するデータに対して、記憶領域に記憶されている書き込みデータまたは読み出しデータにおける有効な部分を示す。第2の実施の形態では、データのアクセス単位は512Byteとする。このため、使用LBAビットマップは、512Byteの実際のデータにつき1bitのビットマップ情報としてもよい。
【0076】
なお、図6に示したキャッシュ管理テーブル112a31は一例であり、キャッシュ管理テーブルには任意の項目を設定することができる。
図7は、比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。図7(A)は、比較例のストレージ装置において先の書き込みデータ640がパケット単位に分割されて書き込まれている記憶領域512a24に、後の書き込みデータ650が上書きされる場合を示す。図7(B)は、その後、比較例のストレージ装置において記憶領域512a24に、後の書き込みデータ650がパケット単位で書き込まれている際に、エラーを有するパケット654が検出された場合を示す。図7(A)、図7(B)では、比較例のストレージ装置が書き込み処理を行い、エラーが発生した場合について説明する。比較例のストレージ装置は、所定の管理単位(例えば、64KByte)の記憶領域512a24を有する。
【0077】
図7(A)に示すように、比較例のストレージ装置において、バッファからキャッシュ領域の記憶領域512a24に先の書き込みデータ640が書き込まれているものとする。この場合において、後の書き込みデータ650が記憶領域512a24に対して書き込まれることにより、データ640の一部(図7(A)の更新部分)を上書きする更新が行われるものとする。ここで、データ650は、パケット651,652,653,654,655,656に所定のサイズで区分され、パケット単位で転送、書き込みおよび読み出しが行われる。ここで、パケット654は、エラーデータであるものとする。
【0078】
図7(B)に示すように、その後、比較例のストレージ装置において、データ650のパケット651,652,653,654,655,656が順次記憶領域512a24に書き込まれる。これにより、データ640の一部が更新される。更新後のデータをデータ640bとする。ここで、上記のように、パケット654がエラーデータであるため、比較例のストレージ装置において、DMAがパケット654の記憶領域512a24への書き込み時にエラーを検出し、データ650の転送および書き込みを中止する。しかし、比較例のストレージ装置がパケット654のエラーを検出した時点では、既にパケット651〜653が記憶領域512a24に書き込まれている。また、エラーを有するデータ(例えば、パケット654)で更新された部分を特定し、特定した部分を再取得して訂正するのが困難である場合や、エラーが一部(パケット654で更新された部分)に生じているデータ650全体の信頼性を低く評価する場合には、データ640bにおけるデータ650によって更新された部分や、更新される予定であった部分全体をエラーデータとして扱う場合がある。
【0079】
これに対し、第2の実施の形態のストレージ装置100は、予め先の書き込みデータと異なる領域に後の書き込みデータを書き込んでエラーの有無を検出し、エラーが発生していない場合に先の書き込みデータと後の書き込みデータとを結合するので、先の書き込みデータがエラーデータとなることを抑止できる。
【0080】
図8は、第2の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。図8(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ310が書き込まれる際の動作を示す。図8(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ320が書き込まれるとともに、結合量が比較される際の動作を示す。図8(C)は、第2の実施の形態のストレージ装置100において、結合量の比較の結果に基づいて、後の書き込みデータ320に先の書き込みデータの差分である差分データ311,313が付加されて結合される際の動作を示す。記憶領域112a25,112a26は、ともに所定の記憶容量(例えば、64KByte)毎に区分された管理単位であるものとする。
【0081】
図8(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ310が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ310の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。ここで、キャッシュ領域112a2の各記憶領域が空き領域であるか否かは、各記憶領域に対応するキャッシュ管理情報のフラグにより示される。制御部116aは、例えば、キャッシュ領域112a2の各記憶領域のキャッシュ管理情報のフラグに基づいて、記憶領域が空き領域であるか否かを判定し、判定結果に基づいて、記憶領域112a25等の空き領域にデータを書き込むことができる。
【0082】
次に、図8(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ320が記憶領域112a26に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ320の書き込みに基づいて、記憶領域112a26のキャッシュ管理情報を設定する。また、ストレージ装置100は、結合処理1を実行した場合の書き込み量である結合量1を算出する。ここで、結合処理1は、書き込みデータ310が記憶されている記憶領域112a25に、書き込みデータ320を上書きして書き込む処理となる。これにより、結合量1は、書き込みデータ320のデータサイズを示す、データサイズ320aとなる。また、ストレージ装置100は、結合処理2を実行した場合の書き込み量である結合量2を算出する。ここで、結合処理2は、書き込みデータ320が記憶されている記憶領域112a26に、書き込みデータ320によって書き込みデータ310を上書きした場合の更新部分以外の差分データ311,313を書き込む処理となる。これにより、結合量2は、書き込みデータ310の差分データ311,313のそれぞれのデータサイズを示す、データサイズ311a,313aの合計値となる。次に、ストレージ装置100は、結合量1および結合量2を比較し、比較結果に基づいて結合処理1または結合処理2を実行する。ここでは、結合量1よりも結合量2の方が小さいものとする。
【0083】
次に、図8(C)に示すように、結合量の比較の結果に基づき、結合処理2が小さいので、ストレージ装置100は、結合処理2を実行する。すなわち、ストレージ装置100は、書き込みデータ312が記憶されている記憶領域112a26に差分データ311,313を付加して結合することにより、結合データ320bを生成する。また、ストレージ装置100は、記憶領域112a26の更新に伴い、書き込みデータ310の書き込みに基づくキャッシュ管理情報を無効にするとともに、書き込みデータ320の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ310は、記憶領域112a25から削除される。また、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理の際に、記憶領域112a26の結合データ320bが記憶デバイス120a〜120dの更新の対象データに上書きされる。
【0084】
図9は、第2の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。図9(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ330が書き込まれる際の動作を示す。図9(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ330が書き込まれるとともに、結合量が比較される際の動作を示す。図9(C)は、第2の実施の形態のストレージ装置100において、結合量の比較の結果に基づいて、先の書き込みデータ330が後の書き込みデータ340によって上書きによって結合される際の動作を示す。
【0085】
図9(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ330が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ330の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。
【0086】
次に、図9(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ340が記憶領域112a26に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ340の書き込みに基づいて、記憶領域112a26のキャッシュ管理情報を設定する。また、ストレージ装置100は、結合量1および結合量2を算出する。図9(B)では、結合量1は、書き込みデータ340のデータサイズ340aとなる。また、結合量2は、差分データ331,333のそれぞれのデータサイズ331a,333aの合計値となる。次に、ストレージ装置100は、結合量1および結合量2を比較し、比較結果に基づいて結合処理1または結合処理2を実行する。ここでは、結合量2よりも結合量1の方が小さいものとする。
【0087】
次に、図9(C)に示すように、結合量の比較の結果に基づき、結合処理1が小さいので、ストレージ装置100は、結合処理1を実行する。すなわち、ストレージ装置100は、書き込みデータ330が記憶されている記憶領域112a25に書き込みデータ340が上書きして結合することにより、結合データ330bを生成する。また、ストレージ装置100は、記憶領域112a25の更新に伴い、書き込みデータ340の書き込みに基づくキャッシュ管理情報を無効にする。また、ストレージ装置100は、記憶領域112a25の更新に伴い、結合データ330bの有効な範囲のアドレスに応じて、適宜書き込みデータ330の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ340は、記憶領域112a26から削除される。また、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、記憶領域112a25の結合データ330bが記憶デバイス120a〜120dの更新対象のデータに上書きされる。
【0088】
このように第2の実施の形態のストレージ装置100では、図8および図9に示すように、先の書き込みデータおよび後の書き込みデータに応じて、結合処理1、結合処理2のうち書き込みデータ量が少ない処理が実行される。これにより、結合処理によるストレージ装置100の負荷を抑制可能である。また、結合による書き込みデータ量を削減することに基づき、書き込み処理による転送時のエラーの発生を抑制できる。
【0089】
図10は、第2の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。図10(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ350が書き込まれる際の動作を示す。図10(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ360が書き込まれた場合に、書き込みエラーが検出された際の動作を示す。図10(C)は、第2の実施の形態のストレージ装置100において、エラーが検出された書き込みデータ360が記憶領域112a26から削除される際の動作を示す。
【0090】
図10(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ350が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ350の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。
【0091】
次に、図10(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ360が記憶領域112a26に対して書き込まれた際に、書き込みエラーが発生したものとする。この場合、ストレージ装置100は、記憶領域112a26に書き込まれた書き込みデータ360の全体をエラーデータとして扱う。また、ストレージ装置100は、エラーデータである書き込みデータ360の書き込みに対して記憶領域112a26のキャッシュ管理情報を設定しない。
【0092】
次に、図10(C)に示すように、記憶領域112a26に書き込まれた書き込みデータ360がエラーデータであったので、ストレージ装置100は、データの結合を実行しない。また、書き込みデータ360は、記憶領域112a26のキャッシュ管理情報が無効であるため、記憶デバイス120a〜120dの更新対象のデータに上書きされない。また、ストレージ装置100は、書き込みデータ360のエラーの発生に基づき、記憶領域112a25の書き込みデータ350を保持しながらホストコンピュータ300に対して書き込みデータ360の書き込みエラー発生を通知する。書き込みデータ360の書き込みエラー発生の通知を受信したホストコンピュータ300は、書き込みデータ360の再送を行ってもよい。書き込みデータ350の更新対象のデータへの上書きまでに書き込みデータ360の再送があり、再送された書き込みデータ360の書き込みにエラーが発生しなければ、書き込みデータ350,360の結合が実行される。これに従い、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、結合データで更新対象のデータが更新される。再送がなければ、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、記憶領域112a25の書き込みデータ350によって記憶デバイス120a〜120dの更新対象のデータが更新される。
【0093】
このように第2の実施の形態では、図10に示すように、後の書き込みデータの記憶領域112a26への書き込み時にエラーが発生したものとする。この場合には、ストレージ装置100において書き込みデータ350,360の結合が行われず、書き込みデータ350がエラーデータである書き込みデータ360で上書きされずに保持される。これにより、ストレージ装置100は、例えばホストコンピュータ300に対して書き込みデータ360の再送を要求する。次にストレージ装置100は、書き込みデータ360単独で記憶デバイス120a〜120dの更新データの更新を行う。または、ストレージ装置100は、書き込みデータ350,360を再度結合し、結合データで記憶デバイス120a〜120dの更新データの更新を行ってもよい。
【0094】
これにより、書き込みデータ350の再送の要求を行わなくてもよいため、ストレージ装置100やホストコンピュータ300の処理の負荷を抑制できる。
図11は、第2の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。DMA114a,114bは、互いに接続されており、両者の間でデータ転送が可能である。
【0095】
図11に示すように、ストレージ装置100は、ホストコンピュータ300から記憶デバイス120a〜120dに記憶されているデータを更新する書き込みデータ410を受信したものとする。この場合、ストレージ装置100は、チャネルアダプタ115cにおいて受信した書き込みデータ410に対してパケット毎にエラー検出に使用するチェックコードを付加し、チェックコードを付加した書き込みデータ410をバッファ領域112a1に書き込む。ストレージ装置100は、DMA114aによってバッファ領域112a1に記憶されている書き込みデータ410を読み出す。ストレージ装置100は、DMA114aによって、読み出した書き込みデータ410についてチャネルアダプタ115cで付加したチェックコードを用いてパケット毎にエラーの検出の有無を判定する。ストレージ装置100は、DMA114aによって、エラーが検出されなければ、パケット毎に書き込みデータ410をキャッシュ領域112a2に書き込むともに、DMA114bを介してCM110bに転送する。ストレージ装置100は、書き込みデータ410のキャッシュ領域112a2への書き込みおよびCM110bへの転送の完了後、ホストコンピュータ300に対して書き込みデータ410の書き込みを応答する。CM110bに転送された書き込みデータ410は、DMA114bによりキャッシュ領域112b2に書き込まれる。これにより、書き込みデータ410が、CM110a,110bにおいて2重化される。
【0096】
図12は、第2の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11と同様、図12に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。
【0097】
図12に示すように、ストレージ装置100は、図11に示した状態の後、ホストコンピュータ300から記憶デバイス120a〜120dに記憶されているデータを更新する書き込みデータ420を受信したものとする。ここで、書き込みデータ420は、データ410が更新する対象のデータと同一のデータを更新するものとする。また、書き込みデータ420が更新する対象のデータを更新する部分の一部または全部と、書き込みデータ410が更新する対象のデータを更新する一部または全部とが重複するものとする。すなわち、書き込みデータ420を後の書き込みデータとした場合、書き込みデータ410は、先の書き込みデータの関係に該当する。この場合、ストレージ装置100は、チャネルアダプタ115cにおいて受信した書き込みデータ420に対してパケット毎にチェックコードを付加し、チェックコードを付加した書き込みデータ420をバッファ領域112a1に書き込む。ストレージ装置100は、DMA114aによってバッファ領域112a1に記憶されている書き込みデータ420を読み出す。ストレージ装置100は、DMA114aによって、読み出した書き込みデータ420についてチェックコードを用いてエラーの検出の有無を判定する。ストレージ装置100は、DMA114aによって、エラーが検出されなければ、パケット毎に書き込みデータ420をキャッシュ領域112a2に書き込むとともに、DMA114bを介してCM110bに転送する。このとき、ストレージ装置100は、DMA114aによって、キャッシュ領域112a2における、書き込みデータ410が記憶されている記憶領域と異なるとともに、空いている記憶領域に書き込みデータ420を書き込む。CM110bに転送された書き込みデータ420は、DMA114bによりキャッシュ領域112b2に書き込まれる。これにより、書き込みデータ420が、CM110a,110bにおいて2重化される。
【0098】
図13は、第2の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11と同様、図13に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。
【0099】
図13に示すように、ストレージ装置100は、図12に示した状態の後、DMA114aによって、キャッシュ領域112a2の書き込みデータ410,420の結合を実行し、結合データ430を生成したものとする。このときストレージ装置100は、結合処理1または結合処理2によって書き込みデータ410の一部である差分データ411および書き込みデータ420を有する結合データ430を生成する。ストレージ装置100は、書き込みデータ420のCM110bへの転送および書き込みデータ410,420の結合の完了後、ホストコンピュータ300に対して書き込みデータ420の書き込みを応答する。また、このときCM110bにおいても、DMA114bにより、キャッシュ領域112b2の書き込みデータ410,420の結合が実行され、結合データ430が生成される。これにより、結合データ430が、CM110a,110bにおいて2重化される。また、ストレージ装置100は、所定の契機に基づいて、CPU111aおよびデバイスインタフェース113cによって、キャッシュ領域112a2に記憶されている結合データ430を用いて、記憶デバイス120a〜120dの更新対象のデータを更新する。これにより、差分データ411の更新(書き込みデータ410の更新)および書き込みデータ420の更新が、記憶デバイス120a〜120dの更新対象のデータに反映される。所定の契機は、例えば、キャッシュ領域112a2の記憶量が所定の閾値や所定の比率を超えた場合、キャッシュ領域112a2の記憶量が所定の閾値や比率を超えた後、さらに所定の時間が経過した場合等、任意の条件で設定することができる。また、ストレージ装置100内の処理に余裕が生じた場合等であってもよい。
【0100】
図14は、第2の実施の形態の更新判定処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、CM110aが記憶デバイス120a〜120dに記憶される書き込みデータをホストコンピュータ300から受信したものとする。この場合、受信した書き込みデータを一時的にバッファ領域112a1に書き込み、同一のデータを更新するデータが既にキャッシュ領域112a2に書き込まれているか否かを判定する更新判定処理を実行する。以下では、図14に示す更新判定処理をフローチャートのステップ番号に沿って説明する。
【0101】
[ステップS11]制御部116aは、ホストコンピュータ300から送信された書き込みデータを受信すると、受信した書き込みデータをバッファ領域112a1に書き込む。
【0102】
[ステップS12]制御部116aは、実行用領域112a3に記憶されているキャッシュ管理テーブル112a31を参照して、更新対象の領域が少なくとも一部重複する書き込みデータがキャッシュ領域112a2に存在するか否かを判定する。重複する書き込みデータがキャッシュ領域112a2に存在すれば(ステップS12 YES)、処理はステップS13に進められる。一方、重複する書き込みデータがキャッシュ領域112a2に存在しなければ(ステップS12 NO)、処理はステップS14に進められる。
【0103】
[ステップS13]制御部116aは、ステップS11でバッファ領域112a1に書き込んだ書き込みデータをキャッシュ領域112a2の空き領域に書き込んでエラーの有無を判定する書き込みエラー検出処理を実行する。書き込みエラー検出処理については、詳しくは図15において後述する。その後、処理は終了する。
【0104】
[ステップS14]制御部116aは、ステップS11でバッファ領域112a1に書き込んだ書き込みデータを、キャッシュ領域112a2の空き領域に書き込む。このとき、制御部116aは、書き込みデータについて制御レジスタを設定する。キャッシュ領域112a2の空き領域に書き込まれたデータは、記憶デバイス120a〜120dに記憶されている対象データの更新に使用される。その後、処理は終了する。
【0105】
図15は、第2の実施の形態の書き込みエラー検出処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、更新判定処理において同一対象を更新するデータがキャッシュ領域112a2に存在する場合、CM110aのキャッシュ領域112a2の空き領域に書き込みデータを書き込む書き込みエラー検出処理を実行する。以下では、図15に示す書き込みエラー検出処理をフローチャートのステップ番号に沿って説明する。
【0106】
[ステップS21]制御部116aは、CM110aのキャッシュ領域112a2の空き領域に書き込みデータを書き込む。また、制御部116aは、CM110bに書き込みデータを転送する。CM110bは、転送された書き込みデータを図示しないキャッシュ領域の空き領域に書き込む。CM110bに転送された書き込みデータは、CM110aの書き込みデータと同様に処理される。
【0107】
[ステップS22]制御部116aは、ステップS21における書き込みデータのキャッシュ領域112a2への書き込みにおいて、エラーが発生したか否かを判定する。エラーが発生していれば(ステップS22 YES)、処理はステップS24に進められる。一方、エラーが発生していなければ(ステップS22 NO)、処理はステップS23に進められる。
【0108】
[ステップS23]制御部116aは、ステップS21でキャッシュ領域112a2に存在する同一対象を更新するデータと、ステップS21でキャッシュ領域112a2に書き込んだ書き込みデータとを結合するデータ結合処理を実行する。データ結合処理については、詳しくは図16において後述する。その後、処理は更新判定処理に復帰する。
【0109】
[ステップS24]制御部116aは、ステップS21の書き込みにより発生したエラーに対する処理を行う。ここでは、制御部116aは、エラーが発生した書き込みデータを物理的に消去または論理的に無効にして記憶領域を開放してもよい。また、制御部116aは、ホストコンピュータ300に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ300は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。また、書き込みエラーが発生した場合、制御部116aは、CM110bにおいて対応する書き込みにエラーが発生せず、結合が行われた場合には、結合データをCM110bから取得してもよい。この場合、制御部116aは、取得したデータで記憶デバイス120a〜120dの更新対象のデータを更新してもよい。その後、処理は更新判定処理に復帰する。
【0110】
図16は、第2の実施の形態のデータ結合処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、書き込みエラー判定処理においてエラーが発生しなかった場合、データの書き込み量を比較し、書き込み量が少ない結合処理で先の書き込みデータおよび後の書き込みデータを結合するデータ結合処理を実行する。以下では、図16に示すデータ結合処理をフローチャートのステップ番号に沿って説明する。
【0111】
[ステップS31]制御部116aは、書き込みデータについて制御レジスタを設定する。このとき、キャッシュ領域112a2に書き込まれる後の書き込みデータについて制御レジスタが設定される。なお、先の書き込みデータについては、更新判定処理のステップS14において制御レジスタが設定されているものとする。
【0112】
[ステップS32]制御部116aは、結合量1および結合量2を算出する。結合量1は、後の書き込みデータを先の書き込みデータの記憶領域に書き込む結合処理1の実行時の書き込み量である。結合量2は、先の書き込みデータの差分を後の書き込みデータに付加する結合処理2の実行時の書き込み量である。
【0113】
ここで、結合量1および結合量2の算出方法について説明する。
結合量1は、キャッシュ領域112a2の先の書き込みデータが書き込まれている記憶領域に、後の書き込みデータが上書きにより書き込んだ場合(結合処理1)の書き込み量である。このため、結合量1は、後の書き込みデータのサイズと等しいので、後の書き込みデータの書き込み時の制御レジスタ116a1のDMAサイズで示すことができる。また、結合量1は、キャッシュ領域112a2の記憶領域に記憶されている書き込みデータのサイズから取得してもよい。
【0114】
結合量2は、結合処理2に基づき、キャッシュ領域112a2の後の書き込みデータが書き込まれている記憶領域に、先の書き込みデータにおける後の書き込みデータで更新されない差分を付加して書き込んだ場合(結合処理2)の書き込み量である。このため、結合量2は、先の書き込みデータの差分のデータ量である。結合量2は、例えば、以下に示す式(1)によって算出することができる。
【0115】
結合量2=結合量2A+2B … (1)
ここで、結合量2Aは、後の書き込みデータの制御レジスタ116a1の値および以下に示す式(2)〜(6)を用いて算出される。
【0116】
結合量2A1=マージ先頭アドレス−書き込みキャッシュ先頭アドレスA … (2)
結合量2A2=DMA転送先アドレス−書き込みキャッシュ先頭アドレスB… (3)
以下の式(4)が成立する場合、結合量2Aは、後述する式(5)で算出されるものとする。また、式(4)が成立しない場合、結合量2Aは、後述する式(6)で定義されるものとする。
【0117】
結合量2A1<結合量2A2 … (4)
結合量2A=結合量2A2−結合量2A1 … (5)
結合量2A=0 … (6)
また、結合量2Bは、後の書き込みデータの制御レジスタ116a1の値および以下に示す式(7)〜(11)を用いて算出される。
【0118】
結合量2B1=(書き込みキャッシュ先頭アドレスA+書き込みキャッシュサイズ)−(マージ最終アドレス) … (7)
結合量2B2=(書き込みキャッシュ先頭アドレスB+書き込みキャッシュサイズ)−(DMA転送先アドレス+DMAサイズ) … (8)
ここで、以下の式(9)が成立する場合、結合量2Bは、後述する式(10)で算出されるものとする。また、式(9)が成立しない場合、結合量2Bは、後述する式(11)で定義されるものとする。
【0119】
結合量2B1<結合量2B2 … (9)
結合量2B=(マージ最終アドレス−書き込みキャッシュ先頭アドレスA)−(DMA転送先アドレス+DMAサイズ)−書き込みキャッシュ先頭アドレスB(=結合量2B2−結合量2B1) … (10)
結合量2B=0 … (11)
[ステップS33]制御部116aは、ステップS32の算出結果に基づき、結合量1および結合量2の大小を比較する。結合量2が結合量1以上であれば(ステップS33 YES)、処理はステップS34に進められる。一方、結合量2が結合量1未満であれば(ステップS33 NO)、処理はステップS35に進められる。
【0120】
[ステップS34]制御部116aは、後の書き込みデータで先の書き込みデータを上書きする結合処理1を実行する。その後、処理は書き込みエラー検出処理に復帰する。
[ステップS35]制御部116aは、ステップS31でバッファ領域112a1に書き込んだ書き込みデータを、キャッシュ領域112a2の空き領域に書き込む。キャッシュ領域112a2の空き領域に書き込まれたデータは、記憶デバイス120a〜120dに記憶されている対象データの更新に使用される。その後、処理は書き込みエラー検出処理に復帰する。
【0121】
以上のような第2の実施の形態のストレージ装置100は、先の書き込みデータの更新時に、先の書き込みデータがエラーを有する後の書き込みデータで更新されることを抑止することができる。
【0122】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理1により、先の書き込みデータに後の書き込みデータを上書きして更新することができる。これにより、後の書き込みデータのサイズが先の書き込みデータの差分のサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置100の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【0123】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理2により、後の書き込みデータに先の書き込みデータの差分を付加することができる。これにより、先の書き込みデータの差分のサイズが後の書き込みデータのサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置100の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【0124】
また、結合量1および結合量2を算出し、比較結果に基づいて結合処理1および結合処理2のうちの書き込み量が少ない方を選択して実行する。これにより、結合処理1および結合処理2のうち、書き込み量が少ない処理を実行できるので、ストレージ装置100の負荷や書き込み処理によるエラー発生の確率の増加を抑制できる。
【0125】
また、チャネルアダプタ115cによりキャッシュ領域112a2に書き込まれる書き込みデータに予めチェックコードを付加し、制御部116aがチェックコードに基づいてエラーの発生の有無を判定する。これにより、チャネルアダプタ115cから制御部116aによるキャッシュ領域112a2への書き込みの際の間のエラーの発生の有無を判定できる。
【0126】
また、先の書き込みデータおよび後の書き込みデータの結合データによって記憶デバイス120a〜120dを更新するので、記憶デバイス120a〜120dへの書き込み回数を削減でき、ストレージ装置100の負荷の増加を抑制できる。
【0127】
また、CM110bにおいてもCM110aにおいて同様の処理等による結合を行うことで、結合されるデータ2重化によりCM110aにおいてエラーの発生時等に対処可能になる。
【0128】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、結合せずに後の書き込みデータを削除するので、先の書き込みデータを保持でき、先の書き込みデータを再送しなくてもよいので、ストレージ装置100の負荷の増加を抑制できる。
【0129】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、エラーの発生をホストコンピュータ300に通知するので、ホストコンピュータ300から後の書き込みデータが再送される。これにより、ストレージ装置100やホストコンピュータ300の処理の遅延を抑制することができる。
[第2の実施の形態の変形例]
次に、第2の実施の形態の変形例を説明する。第2の実施の形態との差異を中心に説明し、同様の事項については説明を省略する。第2の実施の形態のストレージ装置は、書き込みエラー検出処理においてエラーが発生したと判定された場合、他のCMでエラーが発生していなければ、当該CMから結合したデータを取得する点で、第2の実施の形態と異なる。
【0130】
図17は、第2の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。第2の実施の形態の変形例では、ストレージ装置100は、書き込みエラー検出処理においてエラーが発生したと判定された場合に、他のCMでエラーが発生していなければ、当該CMから結合したデータを取得するエラー発生処理を実行する。以下では、図17に示すエラー発生処理をフローチャートのステップ番号に沿って説明する。
【0131】
[ステップS41]制御部116aは、CM110bにおいてキャッシュ領域112a2の空き領域に書き込みデータを書き込む際におけるエラーの発生の有無を取得する。
[ステップS42]制御部116aは、ステップS41において取得した取得結果に基づいて、CM110bにおける書き込みでエラーが発生したか否かを判定する。エラーが発生していれば(ステップS42 YES)、処理はステップS44に進められる。一方、エラーが発生せず、CM110bでデータの結合が行われていれば(ステップS42 NO)、処理はステップS43に進められる。
【0132】
[ステップS43]制御部116aは、CM110bから取得し、取得したデータをキャッシュ領域112a2に書き込む。書き込まれたデータは、CM110aに接続されている記憶デバイス120a〜120dに記憶されている更新対象のデータの更新に使用される。その後、処理は終了する。
【0133】
[ステップS44]制御部116aは、書き込みエラー検出処理で検出され、かつ、CM110bで書き込まれたデータのエラーに対する処理を行う。ここでは、制御部116aは、前述した書き込みデータを削除または論理的に無効にして記憶領域を開放してもよい。また、制御部116aは、ホストコンピュータ300に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ300は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。その後、処理は更新判定処理に復帰する。
【0134】
以上のような第2の実施の形態の変形例のストレージ装置100は、第2の実施の形態と同様の効果に加えて、CM110aで後の書き込みデータの書き込みでエラーが発生した場合にも、CM110bで結合された結合データを取得できる。これにより、CM110aで後の書き込みデータの書き込みでエラーが発生した場合に、CM110bでエラーが発生していなければ、CM110bによる結合データで記憶デバイス120a〜120dのデータを更新できる。
【0135】
以上、開示のストレージ装置、制御装置およびストレージ装置制御方法を、図示の実施の形態に基づいて説明したが、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、開示の技術に他の任意の構成物や工程が付加されてもよい。また、開示の技術は前述した実施の形態のうちの任意の2以上の構成を組み合わせたものであってもよい。
【0136】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、開示の技術は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【0137】
以上の第1の実施の形態、第2の実施の形態および第2の実施の形態の変形例に関し、さらに以下の付記を開示する。
(付記1) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する制御部を有することを特徴とするストレージ装置。
【0138】
(付記2) 前記制御部は、前記書き込みエラーが発生していないときには、前記第2のデータに、前記第1のデータにおける更新部分以外の差分を付加して結合することを特徴とする付記1記載のストレージ装置。
【0139】
(付記3) 前記制御部は、前記書き込みエラーが発生していないときには、前記第1のデータを前記第2のデータで更新して結合することを特徴とする付記1記載のストレージ装置。
【0140】
(付記4) 前記制御部は、前記書き込みエラーが発生していないときには、前記第1の記憶領域に前記第2のデータを書き込む第1の結合処理を実行した場合の第1の書き込み量と、前記第2の記憶領域に前記第1のデータにおける更新部分以外の差分を書き込む第2の結合処理を実行した場合の第2の書き込み量とを比較し、比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のいずれかを選択し、前記選択した処理を実行することを特徴とする付記1記載のストレージ装置。
【0141】
(付記5) 前記第2の記憶領域に書き込まれるデータにチェックコードを付加する付加部を有し、
前記制御部は、前記第2の記憶領域に前記第2のデータを書き込む際に前記付加されたチェックコードに基づいてエラーの発生の有無を判定することを特徴とする付記1記載のストレージ装置。
【0142】
(付記6) 記憶部を有し、
前記第1のデータは、対応するデータの少なくとも一部である第1の部分を更新するデータであり、
前記第2のデータは、前記対応するデータの少なくとも一部である第2の部分を更新するデータであり、
前記制御部は、前記結合したデータにより、前記記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新することを特徴とする付記1記載のストレージ装置。
【0143】
(付記7) 第1の制御部と、
前記第1の制御部との間で転送可能な第2の制御部と、
を有し、
前記第1の制御部は、前記第2の制御部に対して前記第1のデータと前記第2のデータとを送信し、
前記第2の制御部は、前記送信された前記第1のデータと前記第2のデータとを結合する、
ことを特徴とする付記1記載のストレージ装置。
【0144】
(付記8) 前記制御部は、前記書き込みエラーが発生したときには、前記第1のデータと前記第2のデータとを結合せずに前記第2のデータを削除することを特徴とする付記1記載のストレージ装置。
【0145】
(付記9) 前記制御部は、前記書き込みエラーが発生したときには、前記エラーの発生を通知することを特徴とする付記1記載のストレージ装置。
(付記10) 前記第1の制御部は、前記書き込みエラーが発生したときには、前記第2の制御部で結合されたデータを取得することを特徴とする付記6記載のストレージ装置。
【0146】
(付記11) 前記制御部は、前記比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のうちの書き込み量が少ない方を選択し、前記選択した処理を実行することを特徴とする付記4記載のストレージ装置。
【0147】
(付記12) 前記対応するデータは、前記第1のデータによる更新の後に前記第2のデータによる更新が行われ、かつ、前記第1の部分と、前記第2の部分との少なくとも一部が重複することを特徴とする付記6記載のストレージ装置。
【0148】
(付記13)前記第1の記憶領域と前記第2の記憶領域とを含む複数の記憶領域を有するキャッシュ部と、
前記キャッシュ部が有する記憶領域が空き領域であるか否かを示す管理情報を記憶する管理情報記憶部と、
を有し、
前記制御部は、前記管理情報に基づき、前記キャッシュ部の記憶領域が空き領域であるか否かを判定し、判定結果に基づいて前記第2の記憶領域を選択することを特徴とする付記1記載のストレージ装置。
【0149】
(付記14) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合し、前記結合したデータにより、記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新する制御部を有することを特徴とする制御装置。
【0150】
(付記15) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する、
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【0151】
1 ストレージ装置
11 制御部
12a,12b 記憶領域
2a,2b,2c データ
2a1 更新部分
2a2 差分
【技術分野】
【0001】
本件は、ストレージ装置、制御装置およびストレージ装置制御方法に関する。
【背景技術】
【0002】
情報技術の進歩および普及に伴い、磁気ディスク、光ディスク、半導体メモリ等の記憶媒体を利用し、記憶媒体にデータの読み書きが可能なストレージ装置が広く利用されている。ストレージ装置を用いることで、大量のデータの書き込み、読み出しおよび更新ならびに大量のデータの管理が容易になる。
【0003】
ストレージ装置におけるデータの書き込みに関して、以下の技術が知られている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000−20398号公報
【特許文献2】特開2001−318766号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ここで、ストレージ装置におけるデータの一部または全部について上書きによる更新が行われる場合に、更新するデータに不整合が発生していた等の原因により、エラーが発生していたものとする。この場合、上書きされたデータにも更新するデータのエラーが反映されてしまう場合があるという問題点があった。
【0006】
本件はこのような点に鑑みてなされたものであり、データの更新時に、データがエラーを有するデータで更新されることを抑止可能なストレージ装置、制御装置およびストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために以下のようなストレージ装置が提供される。このストレージ装置は、第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、第2のデータを第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、書き込みエラーが発生していないときには、第1のデータと第2のデータとを結合する制御部を有する。
【0008】
また、上記目的を達成するために以下のようなストレージ装置制御方法が提供される。このストレージ装置制御方法は、第1のデータに記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、第2のデータを第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定する。書き込みエラーが発生していないときには、第1のデータと第2のデータとを結合する。
【発明の効果】
【0009】
開示のストレージ装置、制御装置およびストレージ装置制御方法によれば、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【図面の簡単な説明】
【0010】
【図1】第1の実施の形態のストレージ装置を示す図である。
【図2】第2の実施の形態のストレージ装置のハードウェア構成を示す図である。
【図3】第2の実施の形態のストレージ装置の機能を示すブロック図である。
【図4】第2の実施の形態のキャッシュ領域を示す図である。
【図5】第2の実施の形態の制御レジスタを示す図である。
【図6】第2の実施の形態のキャッシュ管理テーブルを示す図である。
【図7】比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。
【図8】第2の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。
【図9】第2の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。
【図10】第2の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。
【図11】第2の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図12】第2の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図13】第2の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。
【図14】第2の実施の形態の更新判定処理を示すフローチャートである。
【図15】第2の実施の形態の書き込みエラー検出処理を示すフローチャートである。
【図16】第2の実施の形態のデータ結合処理を示すフローチャートである。
【図17】第2の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、実施の形態を、図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のストレージ装置を示す図である。本実施の形態のストレージ装置1は、制御部11、記憶領域12a(第1の記憶領域)、記憶領域12b(第2の記憶領域)を有する。
【0012】
制御部11は、記憶領域12aに記憶されているデータ2a(第1のデータ)の少なくとも一部をデータ2b(第2のデータ)の少なくとも一部によって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込む。ここで、データ2aとデータ2bとは、例えば、同一の更新対象のデータを更新するデータであるとともにデータ2aによる更新の後にデータ2bによる更新が行われ、かつ、更新対象のデータにおけるデータ2aが更新する部分と、データ2bが更新する部分との少なくとも一部が重複してもよい。すなわち、更新対象のデータに対してデータ2aによる更新が行われた場合、データ2aによって更新された部分の少なくとも一部について、データ2bによってさらに更新される関係であってもよい。データ2aは、データ2bとの重複する部分である更新部分2a1と、更新部分2a1以外の差分2a2とを有するものとする。図1では、一例として、データ2aにおいて、更新部分2a1がデータ2bで更新されるものとする。また、制御部11は、書き込みエラーの発生の有無を判定する。制御部11は、判定の結果、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。これにより、制御部11は、データ2bでデータ2aを更新する際、直接データ2aに上書きせず、一旦記憶領域12bに書き込み、エラーが発生しなければデータ2aと結合することで、データ2cを生成する。従って、データ2bの記憶領域12bへの書き込みの際にエラーが発生しても、データ2aをエラーデータであるデータ2bで上書きしてしまうことが抑止できる。
【0013】
また、制御部11は、書き込みエラーが発生していないときには、記憶領域12aにデータ2bを書き込む結合処理1(第1の結合処理)を実行して、データ2aとデータ2bとを結合してもよい。結合処理1は、データ2aの更新部分2a1をデータ2bで上書きによって更新することで結合し、データ2cを生成する処理である。
【0014】
また、制御部11は、書き込みエラーが発生していないときには、記憶領域12bにデータ2aにおける更新部分以外の差分を書き込む結合処理2を実行して、データ2aとデータ2bとを結合してもよい。結合処理2は、データ2bに、データ2aにおける更新部分2a1以外の差分2a2を付加し、データ2cを生成する処理である。
【0015】
また、制御部11は、書き込みエラーが発生していないときには、結合処理1を実行した場合の書き込み量(第1の書き込み量)と、結合処理2を実行した場合の書き込み量(第2の書き込み量)とを比較してもよい。この場合、制御部11は、比較結果に基づいて、結合処理1または結合処理2のいずれかを選択し、選択した処理を実行することができる。制御部11は、比較結果に基づいて、結合処理1または結合処理2のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【0016】
記憶領域12aは、データ2aを記憶している。記憶領域12bは、空き領域である。制御部11によってデータ2aが記憶領域12bに書き込まれる際、制御部11によりエラーの発生の有無が判定される。データ2aが記憶領域12bに書き込まれる際にエラーが発生しなければ、データ2aとデータ2bとが結合される。また、データ2aが記憶領域12bに書き込まれる際にエラーが発生しても、データ2bは、データ2aが記憶されている記憶領域12aには書き込まれず、記憶領域12bに書き込まれている。このため、データ2aはエラーデータであるデータ2bによって更新されずに保持される。
【0017】
以上のように、第1の実施の形態では、制御部11が、記憶領域12aに記憶されているデータ2aをデータ2bによって更新する場合、データ2bを記憶領域12aとは異なる記憶領域12bに書き込み、書き込みエラーの発生の有無を判定する。そして、制御部11は、判定の結果、書き込みエラーが発生していないときには、データ2aとデータ2bとを結合する。これにより、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【0018】
[第2の実施の形態]
次に、図1に示したストレージ装置1の、エラーデータによるデータの更新を抑止する機能を、RAID(Redundant Arrays of Inexpensive Disks)を構成する記憶デバイス群を有するストレージ装置100に適用した実施の形態を、第2の実施の形態として説明する。
【0019】
図2は、第2の実施の形態のストレージ装置のハードウェア構成を示す図である。ストレージ装置100は、装置全体の制御を行うCM(Controller Module)110a,110b、記憶デバイス120a,120b,120c,120dを有する。
【0020】
ストレージ装置100は、後述するハードディスクドライブ等の複数の記憶デバイスに対するデータの入出力を行う。ストレージ装置100は、RAID0〜6等のRAID機能を有し、複数の記憶デバイスをまとめてRAIDを構成することにより、各RAIDをそれぞれ1台の記憶デバイスとして管理する。
【0021】
ホストコンピュータ300は、業務処理を実行するコンピュータであり、ファイバチャネル(Fibre Channel)で構成されたSAN(Storage Area Network)を介してストレージ装置100とデータ通信可能に接続されている。ホストコンピュータ300は、業務処理に使用するデータについて、ストレージ装置100への保存およびストレージ装置100からの読み出しを行う。
【0022】
CM110aは、CPU(Central Processing Unit)111a、メモリ112a、デバイスインタフェース(DI:Device Interface)113c,113d、DMA(Direct Memory Access)114a、チャネルアダプタ115c,115dを有する。
【0023】
CPU111aは、OS(Operating System:オペレーティングシステム)等に従って処理を実行し、各種制御を行う。また、CPU111aは、メモリ112a、チャネルアダプタ115c,115d、記憶デバイス120a,120b,120c,120d等の資源管理を行う。
【0024】
メモリ112aは、CPU111aがストレージ装置100を制御するために必要な制御データを記憶する。また、メモリ112aは、ホストコンピュータ300から送信され、記憶デバイス120a〜120dに記憶される書き込みデータおよびホストコンピュータ300から送信された読み出し要求に応じて記憶デバイス120a〜120dから読み出され、ホストコンピュータ300に送信される読み出しデータを一時的に記憶する。
【0025】
デバイスインタフェース113c,113dは、記憶デバイス120a〜120dとの接続制御を行う。
DMA114aは、ファームウェアによる制御に基づき、バス150を介してCM110bとの間で直接データ転送を行う。DMA114a,114bは、バス150によって接続されている。このバス150を介して、DMA114aおよびDMA114bの間でデータが転送される。
【0026】
チャネルアダプタ115c,115dは、ホストコンピュータ300とCM110a,110bとの接続制御を行う。例えば、チャネルアダプタ115cは、ホストコンピュータ300からの要求を受け付けて、CM110aとの接続制御を行う。CM110a,110bは、それぞれ複数個(図ではそれぞれ2個)のチャネルアダプタ115c,115dを有する。
【0027】
なお、チャネルアダプタ115c,115dとホストコンピュータ300との間の通信は、ファイバチャネルで構成されたSANによって接続されているが、ファイバチャネル以外の接続方式によって接続されていてもよい。また、チャネルアダプタ115c,115dとホストコンピュータ300との間の通信は、専用線やVPN(Virtual Private Network)を用いて、ストレージ装置100をホストコンピュータ300から遠隔地に設置するように構成してもよい。
【0028】
また、CM110a,110bは、制御装置として機能し、ストレージ装置100に対し着脱可能である。ここで、CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e,113f、DMA114b、チャネルアダプタ115e,115fを有し、CM110aと同一の構成であるため、説明を省略する。
【0029】
記憶デバイス120a〜120dは、RAIDを構成可能なハードディスクドライブであり、ホストコンピュータ300から送信されたユーザデータを記憶する。なお、ユーザデータは1個のハードディスクに記憶されている必要はなく、複数のハードディスクに渡って記憶されていてもよい。また、1個のハードディスクに複数のユーザデータが記憶されていてもよい。また、記憶デバイス120a〜120dは、例えば、SSD(Solid State Drive)等の不揮発性半導体メモリやハードディスクドライブ以外の磁気記憶装置、光ディスク、その他のデータの記憶が可能な記憶媒体を使用することができる。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープ等がある。光ディスクには、DVD、DVD−RAM、CD−ROM/RW等がある。
【0030】
なお、図2において、CM110a,110bは、それぞれ2個図示し、デバイスインタフェース113c〜113fおよびチャネルアダプタ115c〜115fは、CM110a,110bそれぞれに対してそれぞれ2個ずつ図示しているが、これらの数はそれぞれ任意である。
【0031】
また、図2において、ストレージ装置100に対して1つのホストコンピュータ300が接続されているが、ストレージ装置100に対して複数のホストコンピュータが接続されていてもよい。
【0032】
また、ストレージ装置100に対してCM110a,110bに従属して制御を受ける、制御部および記憶デバイスを有する増設用装置(図示省略)を接続してもよい。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。
【0033】
図3は、第2の実施の形態のストレージ装置の機能を示すブロック図である。第2の実施の形態のストレージ装置100は、CM110a,CM110b、記憶デバイス120a〜120dを有する。CM110aは、メモリ112a、チャネルアダプタ115c、制御部116aを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2、実行用領域112a3を有する。制御部116aは、制御レジスタ116a1を有する。CM110aは、CM110bとの間でデータを転送可能である。
【0034】
CM110bは、制御部116bを有する。制御部116bは、第2の制御部として機能する。なお、以下ではCM110aについて説明するが、CM110bは、CM110aと同一の構成であって同一の機能を有するため、説明を省略する。
【0035】
CM110aは、ホストコンピュータ300等の上位装置との間の送受信等に基づくデータの記憶デバイス120a〜120dへの読み書きの制御等、ストレージ装置100を制御する。CM110aは、制御装置として機能する。
【0036】
メモリ112aは、CM110aで記憶デバイス120a〜120dに読み書きされるデータや、制御部116aによる制御に使用される制御データ等を記憶する。
バッファ領域112a1は、ホストコンピュータ300から送信されたデータやホストコンピュータ300に送信されるデータを一時的に記憶する。
【0037】
キャッシュ領域112a2は、ホストコンピュータ300から送信され、記憶デバイス120a〜120dに書き込まれる書き込みデータを、記憶デバイス120a〜120dへの書き込みが完了するまでの間、一時的に記憶する。また、キャッシュ領域112a2は、記憶デバイス120a〜120dから読み出され、ホストコンピュータ300に送信される読み出しデータを一時的に記憶する。ここでは、キャッシュ領域112a2のある記憶領域には、先の書き込みデータ(第1のデータ)が記憶されているものとする。また、ホストコンピュータ300から、先の書き込みデータを更新する後の書き込みデータ(第2のデータ)が送信されたものとする。ここで、先の書き込みデータと後の書き込みデータとは、例えば、同一のデータを更新するデータであるとともに先の書き込みデータによる更新の後に、後の書き込みデータによる更新が行われるものとする。また、先の書き込みデータおよび後の書き込みデータの更新対象のデータにおける、先の書き込みデータが更新する部分と、後の書き込みデータが更新する部分との少なくとも一部が重複しているものとする。すなわち、更新対象のデータに対して後の書き込みデータによる更新が行われた場合、先の書き込みデータによって更新された部分の少なくとも一部について、後の書き込みデータの少なくとも一部によってさらに更新される関係であるものとする。キャッシュ領域112a2は、キャッシュ部として機能する。
【0038】
ここで、キャッシュ領域112a2に書き込みデータが記憶される際、制御部116aは、図6において後述するキャッシュ管理テーブルに記憶されているキャッシュ管理情報を参照して、重複部分を有する先の書き込みデータの存在の有無を判定する。具体的には、制御部116aは、キャッシュ領域112a2の各記憶領域のキャッシュ管理情報を参照し、キャッシュ管理情報のフラグを確認してキャッシュ領域112a2の各記憶領域について書き込みデータのキャッシュデータが記憶されているか否かを判定する。制御部116aは、フラグに基づいて書き込みデータのキャッシュデータが記憶されていると判定した記憶領域について、キャッシュ管理情報のディスク番号および先頭LBAにより、キャッシュ領域112a2に記憶されている書き込みデータにおける、キャッシュ領域112a2に書き込まれる書き込みデータと更新対象のデータが同一である書き込みデータの有無を判定する。制御部116aは、ディスク番号および先頭LBAに基づいてキャッシュ領域112a2に書き込まれる書き込みデータと更新対象が同一である書き込みデータがあった場合、更新対象が同一である書き込みデータが記憶されているキャッシュ領域112a2の記憶領域に対応するキャッシュ管理情報の使用LBAビットマップにより、キャッシュ領域112a2に書き込まれる書き込みデータが更新対象のデータを更新する部分の少なくとも一部と、上記更新対象のデータが同一である書き込みデータが更新対象のデータを更新する部分の少なくとも一部とが重複するか否かを判定する。制御部116aは、判定の結果、キャッシュ領域112a2に書き込まれる書き込みデータが更新する部分の少なくとも一部と、更新対象が同一である書き込みデータが更新する部分の少なくとも一部とが重複する場合には、キャッシュ領域112a2に書き込まれる書き込みデータを後の書き込みデータとし、後の書き込みデータと更新対象が同一である書き込みデータを先の書き込みデータとする。
【0039】
次に、制御部116aは、キャッシュ領域112a2の先の書き込みデータの少なくとも一部を後の書き込みデータの少なくとも一部によって更新する場合、キャッシュ領域112a2において、後の書き込みデータを先の書き込みデータとは異なる記憶領域に書き込む。制御部116aは、後の書き込みデータをキャッシュ領域112a2に書き込む際、先の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域とは異なる記憶領域であって、かつ、空いている記憶領域に書き込む。具体的には、制御部116aは、キャッシュ管理テーブルを参照して、キャッシュ領域112a2の記憶領域について空き領域であるか否かを判定し、空き領域と判定された記憶領域を選択して後の書き込みデータを記憶させる。すなわち、制御部116aは、キャッシュ領域112a2の記憶領域について、キャッシュ管理テーブルを参照してフラグを取得し、フラグが無効(データが書き込まれていない)であるか否かを判定する。制御部116aは、判定の結果、記憶領域のフラグが無効である場合、上記記憶領域を後の書き込みデータを記憶させる記憶領域に選択する。一方、制御部116aは、判定の結果、記憶領域のフラグが有効(データが書き込まれている)である場合、先の書き込みデータが記憶されている記憶領域以外の記憶領域のうちの次の記憶領域について判定を行う。次に、制御部116aは、選択した記憶領域に後の書き込みデータを記憶させる。
【0040】
実行用領域112a3は、図6において後述するキャッシュ管理テーブル等のCM110aやストレージ装置100等の制御に使用する制御データを記憶する。実行用領域112a3は、管理情報記憶部として機能する。
【0041】
チャネルアダプタ115cは、ホストコンピュータ300から送信され、キャッシュ領域112a2に書き込まれるデータにチェックコードを付加して、バッファ領域112a1に書き込む。チャネルアダプタ115cは、付加部として機能する。
【0042】
制御部116aは、CM110a内におけるデータのバッファ領域112a1、キャッシュ領域112a2への転送や、CM110bとの間のデータ転送を制御する。この際、ストレージ装置100では、パケット単位に分割してデータ転送が行われる。また、制御部116aは、後の書き込みデータのキャッシュ領域112a2への書き込み時に、書き込みエラーの発生の有無を判定する。制御部116aは、判定の結果、書き込みエラーが発生していないときには、先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。制御部116aは、結合データにより、記憶デバイス120a〜120dに記憶されている先の書き込みデータおよび後の書き込みデータと対応する更新の対象のデータを更新する。
【0043】
これにより、制御部116aは、後の書き込みデータで先の書き込みデータを更新する際、直接先の書き込みデータに上書きせず、先の書き込みデータとは異なる記憶領域に書き込み、エラーが発生しなければ先の書き込みデータと結合する。従って、後の書き込みデータのキャッシュ領域112a2の記憶領域への書き込みの際にエラーが発生しても、先の書き込みデータをエラーデータである後の書き込みデータで上書きしてしまうことが抑止できる。制御部116aは、CPU111aおよびDMA114aによって実現できる。
【0044】
また、制御部116aは、書き込みエラーが発生していないときには、先の書き込みデータの記憶領域に後の書き込みデータを書き込む結合処理1(第1の結合処理)を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理1は、先の書き込みデータを後の書き込みデータで更新して結合する処理である。
【0045】
また、制御部116aは、書き込みエラーが発生していないときには、後の書き込みデータの記憶領域に先の書き込みデータにおける更新部分以外の差分を書き込む結合処理2を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理2は、後の書き込みデータに、先の書き込みデータにおける更新部分以外の差分を付加する処理である。
【0046】
また、制御部116aは、書き込みエラーが発生していないときには、結合処理1を実行した場合の結合量1(第1の書き込み量)と、結合処理2を実行した場合の結合量2(第2の書き込み量)とを比較してもよい。この場合、制御部116aは、比較結果に基づいて、結合処理1または結合処理2のいずれかを選択し、選択した処理を実行することができる。制御部116aは、比較結果に基づいて、結合処理1または結合処理2のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【0047】
また、制御部116aは、バッファ領域112a1に記憶されている書き込みデータを読み出し、その後、キャッシュ領域112a2に後の書き込みデータを書き込む際に、チャネルアダプタ115cで付加されたチェックコードに基づいてエラーの発生の有無を判定する。ここで、ホストコンピュータ300から送信された後の書き込みデータは、制御部116aの制御に基づき、チャネルアダプタ115cでチェックコードが付加された後にバッファ領域112a1に書き込まれる。その後、後の書き込みデータは、制御部116aにより、キャッシュ領域112a2に書き込まれる際に、チェックコードに基づいてエラーの発生の有無を判定される。これにより、制御部116a(DMA114a)が書き込みデータをバッファ領域112a1からキャッシュ領域112a2に転送する際に、書き込みデータのエラーの発生の有無を判定することができる。なお、これに限らず、制御部116aは、バッファ領域112a1に書き込んだ書き込みデータについてチェックコードにより書き込みデータのエラーの発生の有無を判定してもよい。
【0048】
ここで、キャッシュ領域112a2に書き込まれている書き込みデータは、既に制御部116aにより、エラーが発生していないと判定されている。これに従い、制御部116aによってエラーの発生の有無が判定されていない、バッファ領域112a1の書き込みデータは、比較的、キャッシュ領域112a2の書き込みデータよりもエラーが生じている可能性が高く、信頼性が低いと考えられる。従って、キャッシュ領域112a2に先の書き込みデータが書き込まれているとともに、バッファ領域112a1に後の書き込みデータが記憶されている場合、先の書き込みデータは後の書き込みデータよりも信頼性が高いと考えられる。
【0049】
このため、制御部116aは、キャッシュ領域112a2の先の書き込みデータと後の書き込みデータとを結合する際に、キャッシュ領域112a2において、先の書き込みデータとは異なる記憶領域に後の書き込みデータを書き込む。制御部116aは、後の書き込みデータの書き込み時にエラーの発生の有無を判定する。制御部116aは、後の書き込みデータの書き込み時にエラーの発生がなければ、結合処理1または結合処理2によって先の書き込みデータおよび後の書き込みデータを結合する。また、制御部116aは、後の書き込みデータのキャッシュ領域112a2への書き込み時にエラーが発生した場合にも、先の書き込みデータは後の書き込みデータが書き込まれた記憶領域とは異なる記憶領域に保持されている。これにより、後の書き込みデータの書き込み時にエラーが発生しても、先の書き込みデータに対するエラーデータによる更新を抑止できる。また、先の書き込みデータのホストコンピュータ300への再送要求等をしなくてもよいため、処理の増加を抑制できる。
【0050】
記憶デバイス120a〜120dは、RAIDを構成するハードディスクドライブ等の記憶デバイスであり、ホストコンピュータ300から送信されたデータやホストコンピュータ300に送信するデータを記憶する。記憶デバイス120a〜120dは、記憶部として機能する。
【0051】
また、制御部116aは、制御部116bに対してホストコンピュータ300から送信された書き込みデータを送信する。制御部116bは、先の書き込みデータおよび後の書き込みデータを受信すると、制御部116aと同様、送信された先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。
【0052】
また、制御部116aは、後の書き込みデータで書き込みエラーが発生したときには、先の書き込みデータと後の書き込みデータとを結合せずに、後の書き込みデータを削除し、ホストコンピュータ300に対してエラーの発生を通知する。また、制御部116aは、書き込みエラーが発生したときには、制御部116aで結合された結合データを取得してもよい。
【0053】
制御レジスタ116a1は、DMA114aが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。制御レジスタは、DMA114aに設けてもよい。
【0054】
なお、第2の実施の形態のストレージ装置100は、RAIDを構成する記憶デバイス群を有するが、これに限らず、1つの記憶デバイスや、RAIDを構成しない複数の記憶デバイス群を有してもよい。また、ストレージ装置100は、パーソナルコンピュータ(personal computer)や携帯情報端末等の記憶デバイスを有する情報処理装置であってもよい。
【0055】
また、ストレージ装置100は、キャッシュ領域112a2において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを空き領域に書き込む。しかし、ストレージ装置100は、これに限らず、バッファ領域112a1、記憶デバイス120a〜120d、その他のメモリや記憶媒体において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを、メモリや記憶媒体の等の空き領域に書き込んでもよい。
【0056】
また、チェックコードは、書き込みデータに対してチャネルアダプタ115cによって付加されるが、これに限らず、ホストコンピュータ300等の外部装置や制御部116a等の他の内部構成によって付加されてもよい。
【0057】
図4は、第2の実施の形態のキャッシュ領域を示す図である。図4に、第2の実施の形態のストレージ装置が有するメモリ112aに設定されているキャッシュ領域112a2を示す。
【0058】
キャッシュ領域112a2は、ホストコンピュータ300から送信され記憶デバイス120a〜120dに記憶される書き込みデータや記憶デバイス120a〜120dから読み出されホストコンピュータ300に送信される読み出しデータを一時的に記憶する。キャッシュ領域112a2は、第2の実施の形態では、一例として2GByteの記憶容量を有するものとするが、必ずしもこれに限られず、任意のサイズの記憶容量を有することができる。キャッシュ領域112a2は、所定の管理単位の記憶容量(例えば、64KByte)毎の記憶領域112a21,112a22,112a23,・・・に区分して管理されている。キャッシュ領域112a2は、区分された記憶領域毎に書き込みデータおよび読み出しデータの一時記憶に使用される。
【0059】
キャッシュ領域112a2の記憶領域(例えば、記憶領域112a21)は、所定の記憶容量(例えば、512Byte)毎のLBA(Logical Block Addressing)に分割されている。記憶領域112a21には、昇順にLBAのアドレスが設定されており、LBA毎に書き込み処理や読み出し処理が行われる。
【0060】
図5は、第2の実施の形態の制御レジスタを示す図である。図5に、第2の実施の形態のストレージ装置が有する制御部116aに設定される制御レジスタ116a1を示す。
制御レジスタは、DMA114aが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。図5に示す制御レジスタには、“モード”、“DMAサイズ”、“DMA転送先アドレス”、“マージ先頭アドレス”、“マージ最終アドレス”、“書き込みキャッシュ先頭アドレスA”、“書き込みキャッシュ先頭アドレスB”、“書き込みキャッシュサイズ”が、各書き込みデータに対応して設定される。
【0061】
モードは、DMA114aの制御モードを示す。モードは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。モードには、一例として、“READ”、“WRITE”、“WRITE & MERGE”を設定可能にしてもよい。
【0062】
READモードの場合、制御部116aは、CM110bから転送されたデータを受信する。WRITEモードの場合、制御部116aは、CM110aからCM110bにデータを転送する。WRITE & MERGEモードの場合、制御部116aは、WRITEモードによりCM110aからCM110bに後の書き込みデータを転送した後、後の書き込みデータと、CM110aのキャッシュ領域112a2の異なる記憶領域に記憶されている先の書き込みデータとの結合を行う。また、CM110aから転送された後の書き込みデータを受信した後、受信した後の書き込みデータCM110bと、CM110bの図示しないキャッシュ領域の異なる記憶領域に記憶されている前もってCM110aから転送された先の書き込みデータとの結合を行う。新たな書き込みデータについて、キャッシュ領域112a2に更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、CPU111は、WRITE & MERGEモードを設定する。
【0063】
DMAサイズは、DMA114aによる読み出しまたは書き込みの際のDMAサイズ(Byte数)を示す。DMAサイズは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0064】
DMA転送先アドレスは、DMA114aによる読み出しまたは書き込みの際の転送先のメモリのアドレスを示す。DMA転送先アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0065】
マージ先頭アドレスは、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。マージ先頭アドレスは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域112a2の記憶領域における先頭アドレスを示す。マージ先頭アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0066】
マージ最終アドレスは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。マージ最終アドレスは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域112a2の記憶領域における最終アドレスを示す。マージ最終アドレスは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0067】
書き込みキャッシュ先頭アドレスAは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスAは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、先に存在する先の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスAは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0068】
書き込みキャッシュ先頭アドレスBは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスBは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後から書き込まれる後の書き込みデータが記憶されているキャッシュ領域112a2の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスBは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0069】
書き込みキャッシュサイズは、マージ先頭アドレスと同様、WRITE & MERGEモードにおける書き込みデータの結合時に使用される。書き込みキャッシュサイズは、キャッシュ領域112a2が有する各記憶領域の1つあたりの記憶容量を示す。書き込みキャッシュサイズは、DMA114aによる書き込みデータの処理に先立ってCPU111aが設定する。
【0070】
なお、図5に示した制御レジスタ116a1は一例であり、制御レジスタには任意の項目を設定することができる。
図6は、第2の実施の形態のキャッシュ管理テーブルを示す図である。図6に示すキャッシュ管理テーブル112a31は、第2の実施の形態のストレージ装置100が有するメモリ112aの実行用領域112a3に設定される。キャッシュ管理テーブル112a31は、ストレージ装置100のキャッシュ領域112a2が有する各記憶領域の書き込みデータを管理するテーブルである。
【0071】
キャッシュ管理テーブル112a31には、項目として“先頭アドレス”、“フラグ”、“ディスク番号”、“先頭LBA”、“使用LBAビットマップ(bitmap)”が設けられている。キャッシュ管理テーブル112a31には、上記項目に設定された値が、キャッシュ領域112a2が有するそれぞれの記憶領域のキャッシュ管理情報として互いに関連付けられる。
【0072】
先頭アドレスは、キャッシュ管理情報で管理されるキャッシュ領域112a2の記憶領域を示すアドレスである。キャッシュ管理情報は、キャッシュ領域112a2の記憶領域に対して1対1で設定される。
【0073】
フラグは、記憶領域に記憶されている書き込みデータまたは読み出しデータが有効であるか無効であるかを示す。例えば、記憶領域のデータが無効であれば、“0”が設定され、有効であれば、“1”が設定される。なお、フラグは、書き込みデータであるか読み出しデータであるかを示してもよい。この場合、例えば、記憶領域のデータが無効であれば、“0”が設定され、記憶領域のデータが有効であるとともに書き込みデータであれば、“1”が設定され、記憶領域のデータが有効であるとともに書き込みデータであれば、“2”が設定されてもよい。
【0074】
ディスク番号は、記憶領域に記憶されている書き込みデータまたは読み出しデータを記憶している記憶デバイス120a〜120dを示す。
先頭LBAは、記憶領域に記憶されている書き込みデータまたは読み出しデータに対応するデータが記憶されている記憶デバイス120a〜120dのLBAの先頭アドレスを示す。
【0075】
使用LBAビットマップは、記憶デバイス120a〜120dに記憶されている対応するデータに対して、記憶領域に記憶されている書き込みデータまたは読み出しデータにおける有効な部分を示す。第2の実施の形態では、データのアクセス単位は512Byteとする。このため、使用LBAビットマップは、512Byteの実際のデータにつき1bitのビットマップ情報としてもよい。
【0076】
なお、図6に示したキャッシュ管理テーブル112a31は一例であり、キャッシュ管理テーブルには任意の項目を設定することができる。
図7は、比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。図7(A)は、比較例のストレージ装置において先の書き込みデータ640がパケット単位に分割されて書き込まれている記憶領域512a24に、後の書き込みデータ650が上書きされる場合を示す。図7(B)は、その後、比較例のストレージ装置において記憶領域512a24に、後の書き込みデータ650がパケット単位で書き込まれている際に、エラーを有するパケット654が検出された場合を示す。図7(A)、図7(B)では、比較例のストレージ装置が書き込み処理を行い、エラーが発生した場合について説明する。比較例のストレージ装置は、所定の管理単位(例えば、64KByte)の記憶領域512a24を有する。
【0077】
図7(A)に示すように、比較例のストレージ装置において、バッファからキャッシュ領域の記憶領域512a24に先の書き込みデータ640が書き込まれているものとする。この場合において、後の書き込みデータ650が記憶領域512a24に対して書き込まれることにより、データ640の一部(図7(A)の更新部分)を上書きする更新が行われるものとする。ここで、データ650は、パケット651,652,653,654,655,656に所定のサイズで区分され、パケット単位で転送、書き込みおよび読み出しが行われる。ここで、パケット654は、エラーデータであるものとする。
【0078】
図7(B)に示すように、その後、比較例のストレージ装置において、データ650のパケット651,652,653,654,655,656が順次記憶領域512a24に書き込まれる。これにより、データ640の一部が更新される。更新後のデータをデータ640bとする。ここで、上記のように、パケット654がエラーデータであるため、比較例のストレージ装置において、DMAがパケット654の記憶領域512a24への書き込み時にエラーを検出し、データ650の転送および書き込みを中止する。しかし、比較例のストレージ装置がパケット654のエラーを検出した時点では、既にパケット651〜653が記憶領域512a24に書き込まれている。また、エラーを有するデータ(例えば、パケット654)で更新された部分を特定し、特定した部分を再取得して訂正するのが困難である場合や、エラーが一部(パケット654で更新された部分)に生じているデータ650全体の信頼性を低く評価する場合には、データ640bにおけるデータ650によって更新された部分や、更新される予定であった部分全体をエラーデータとして扱う場合がある。
【0079】
これに対し、第2の実施の形態のストレージ装置100は、予め先の書き込みデータと異なる領域に後の書き込みデータを書き込んでエラーの有無を検出し、エラーが発生していない場合に先の書き込みデータと後の書き込みデータとを結合するので、先の書き込みデータがエラーデータとなることを抑止できる。
【0080】
図8は、第2の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。図8(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ310が書き込まれる際の動作を示す。図8(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ320が書き込まれるとともに、結合量が比較される際の動作を示す。図8(C)は、第2の実施の形態のストレージ装置100において、結合量の比較の結果に基づいて、後の書き込みデータ320に先の書き込みデータの差分である差分データ311,313が付加されて結合される際の動作を示す。記憶領域112a25,112a26は、ともに所定の記憶容量(例えば、64KByte)毎に区分された管理単位であるものとする。
【0081】
図8(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ310が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ310の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。ここで、キャッシュ領域112a2の各記憶領域が空き領域であるか否かは、各記憶領域に対応するキャッシュ管理情報のフラグにより示される。制御部116aは、例えば、キャッシュ領域112a2の各記憶領域のキャッシュ管理情報のフラグに基づいて、記憶領域が空き領域であるか否かを判定し、判定結果に基づいて、記憶領域112a25等の空き領域にデータを書き込むことができる。
【0082】
次に、図8(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ320が記憶領域112a26に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ320の書き込みに基づいて、記憶領域112a26のキャッシュ管理情報を設定する。また、ストレージ装置100は、結合処理1を実行した場合の書き込み量である結合量1を算出する。ここで、結合処理1は、書き込みデータ310が記憶されている記憶領域112a25に、書き込みデータ320を上書きして書き込む処理となる。これにより、結合量1は、書き込みデータ320のデータサイズを示す、データサイズ320aとなる。また、ストレージ装置100は、結合処理2を実行した場合の書き込み量である結合量2を算出する。ここで、結合処理2は、書き込みデータ320が記憶されている記憶領域112a26に、書き込みデータ320によって書き込みデータ310を上書きした場合の更新部分以外の差分データ311,313を書き込む処理となる。これにより、結合量2は、書き込みデータ310の差分データ311,313のそれぞれのデータサイズを示す、データサイズ311a,313aの合計値となる。次に、ストレージ装置100は、結合量1および結合量2を比較し、比較結果に基づいて結合処理1または結合処理2を実行する。ここでは、結合量1よりも結合量2の方が小さいものとする。
【0083】
次に、図8(C)に示すように、結合量の比較の結果に基づき、結合処理2が小さいので、ストレージ装置100は、結合処理2を実行する。すなわち、ストレージ装置100は、書き込みデータ312が記憶されている記憶領域112a26に差分データ311,313を付加して結合することにより、結合データ320bを生成する。また、ストレージ装置100は、記憶領域112a26の更新に伴い、書き込みデータ310の書き込みに基づくキャッシュ管理情報を無効にするとともに、書き込みデータ320の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ310は、記憶領域112a25から削除される。また、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理の際に、記憶領域112a26の結合データ320bが記憶デバイス120a〜120dの更新の対象データに上書きされる。
【0084】
図9は、第2の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。図9(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ330が書き込まれる際の動作を示す。図9(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ330が書き込まれるとともに、結合量が比較される際の動作を示す。図9(C)は、第2の実施の形態のストレージ装置100において、結合量の比較の結果に基づいて、先の書き込みデータ330が後の書き込みデータ340によって上書きによって結合される際の動作を示す。
【0085】
図9(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ330が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ330の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。
【0086】
次に、図9(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ340が記憶領域112a26に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ340の書き込みに基づいて、記憶領域112a26のキャッシュ管理情報を設定する。また、ストレージ装置100は、結合量1および結合量2を算出する。図9(B)では、結合量1は、書き込みデータ340のデータサイズ340aとなる。また、結合量2は、差分データ331,333のそれぞれのデータサイズ331a,333aの合計値となる。次に、ストレージ装置100は、結合量1および結合量2を比較し、比較結果に基づいて結合処理1または結合処理2を実行する。ここでは、結合量2よりも結合量1の方が小さいものとする。
【0087】
次に、図9(C)に示すように、結合量の比較の結果に基づき、結合処理1が小さいので、ストレージ装置100は、結合処理1を実行する。すなわち、ストレージ装置100は、書き込みデータ330が記憶されている記憶領域112a25に書き込みデータ340が上書きして結合することにより、結合データ330bを生成する。また、ストレージ装置100は、記憶領域112a25の更新に伴い、書き込みデータ340の書き込みに基づくキャッシュ管理情報を無効にする。また、ストレージ装置100は、記憶領域112a25の更新に伴い、結合データ330bの有効な範囲のアドレスに応じて、適宜書き込みデータ330の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ340は、記憶領域112a26から削除される。また、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、記憶領域112a25の結合データ330bが記憶デバイス120a〜120dの更新対象のデータに上書きされる。
【0088】
このように第2の実施の形態のストレージ装置100では、図8および図9に示すように、先の書き込みデータおよび後の書き込みデータに応じて、結合処理1、結合処理2のうち書き込みデータ量が少ない処理が実行される。これにより、結合処理によるストレージ装置100の負荷を抑制可能である。また、結合による書き込みデータ量を削減することに基づき、書き込み処理による転送時のエラーの発生を抑制できる。
【0089】
図10は、第2の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。図10(A)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a25に先の書き込みデータ350が書き込まれる際の動作を示す。図10(B)は、第2の実施の形態のストレージ装置100において、キャッシュ領域112a2の記憶領域112a26に後の書き込みデータ360が書き込まれた場合に、書き込みエラーが検出された際の動作を示す。図10(C)は、第2の実施の形態のストレージ装置100において、エラーが検出された書き込みデータ360が記憶領域112a26から削除される際の動作を示す。
【0090】
図10(A)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された先の書き込みデータである書き込みデータ350が受信され、記憶領域112a25に対して書き込まれたものとする。この場合、ストレージ装置100は、書き込みデータ350の書き込みに基づいて、記憶領域112a25のキャッシュ管理情報を設定する。この時点では、記憶領域112a26は、空き領域であるものとする。
【0091】
次に、図10(B)に示すように、ストレージ装置100において、ホストコンピュータ300から送信された後の書き込みデータである書き込みデータ360が記憶領域112a26に対して書き込まれた際に、書き込みエラーが発生したものとする。この場合、ストレージ装置100は、記憶領域112a26に書き込まれた書き込みデータ360の全体をエラーデータとして扱う。また、ストレージ装置100は、エラーデータである書き込みデータ360の書き込みに対して記憶領域112a26のキャッシュ管理情報を設定しない。
【0092】
次に、図10(C)に示すように、記憶領域112a26に書き込まれた書き込みデータ360がエラーデータであったので、ストレージ装置100は、データの結合を実行しない。また、書き込みデータ360は、記憶領域112a26のキャッシュ管理情報が無効であるため、記憶デバイス120a〜120dの更新対象のデータに上書きされない。また、ストレージ装置100は、書き込みデータ360のエラーの発生に基づき、記憶領域112a25の書き込みデータ350を保持しながらホストコンピュータ300に対して書き込みデータ360の書き込みエラー発生を通知する。書き込みデータ360の書き込みエラー発生の通知を受信したホストコンピュータ300は、書き込みデータ360の再送を行ってもよい。書き込みデータ350の更新対象のデータへの上書きまでに書き込みデータ360の再送があり、再送された書き込みデータ360の書き込みにエラーが発生しなければ、書き込みデータ350,360の結合が実行される。これに従い、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、結合データで更新対象のデータが更新される。再送がなければ、キャッシュ領域112a2に記憶されているデータの記憶デバイス120a〜120dへの書き込み処理により、記憶領域112a25の書き込みデータ350によって記憶デバイス120a〜120dの更新対象のデータが更新される。
【0093】
このように第2の実施の形態では、図10に示すように、後の書き込みデータの記憶領域112a26への書き込み時にエラーが発生したものとする。この場合には、ストレージ装置100において書き込みデータ350,360の結合が行われず、書き込みデータ350がエラーデータである書き込みデータ360で上書きされずに保持される。これにより、ストレージ装置100は、例えばホストコンピュータ300に対して書き込みデータ360の再送を要求する。次にストレージ装置100は、書き込みデータ360単独で記憶デバイス120a〜120dの更新データの更新を行う。または、ストレージ装置100は、書き込みデータ350,360を再度結合し、結合データで記憶デバイス120a〜120dの更新データの更新を行ってもよい。
【0094】
これにより、書き込みデータ350の再送の要求を行わなくてもよいため、ストレージ装置100やホストコンピュータ300の処理の負荷を抑制できる。
図11は、第2の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。DMA114a,114bは、互いに接続されており、両者の間でデータ転送が可能である。
【0095】
図11に示すように、ストレージ装置100は、ホストコンピュータ300から記憶デバイス120a〜120dに記憶されているデータを更新する書き込みデータ410を受信したものとする。この場合、ストレージ装置100は、チャネルアダプタ115cにおいて受信した書き込みデータ410に対してパケット毎にエラー検出に使用するチェックコードを付加し、チェックコードを付加した書き込みデータ410をバッファ領域112a1に書き込む。ストレージ装置100は、DMA114aによってバッファ領域112a1に記憶されている書き込みデータ410を読み出す。ストレージ装置100は、DMA114aによって、読み出した書き込みデータ410についてチャネルアダプタ115cで付加したチェックコードを用いてパケット毎にエラーの検出の有無を判定する。ストレージ装置100は、DMA114aによって、エラーが検出されなければ、パケット毎に書き込みデータ410をキャッシュ領域112a2に書き込むともに、DMA114bを介してCM110bに転送する。ストレージ装置100は、書き込みデータ410のキャッシュ領域112a2への書き込みおよびCM110bへの転送の完了後、ホストコンピュータ300に対して書き込みデータ410の書き込みを応答する。CM110bに転送された書き込みデータ410は、DMA114bによりキャッシュ領域112b2に書き込まれる。これにより、書き込みデータ410が、CM110a,110bにおいて2重化される。
【0096】
図12は、第2の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11と同様、図12に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。
【0097】
図12に示すように、ストレージ装置100は、図11に示した状態の後、ホストコンピュータ300から記憶デバイス120a〜120dに記憶されているデータを更新する書き込みデータ420を受信したものとする。ここで、書き込みデータ420は、データ410が更新する対象のデータと同一のデータを更新するものとする。また、書き込みデータ420が更新する対象のデータを更新する部分の一部または全部と、書き込みデータ410が更新する対象のデータを更新する一部または全部とが重複するものとする。すなわち、書き込みデータ420を後の書き込みデータとした場合、書き込みデータ410は、先の書き込みデータの関係に該当する。この場合、ストレージ装置100は、チャネルアダプタ115cにおいて受信した書き込みデータ420に対してパケット毎にチェックコードを付加し、チェックコードを付加した書き込みデータ420をバッファ領域112a1に書き込む。ストレージ装置100は、DMA114aによってバッファ領域112a1に記憶されている書き込みデータ420を読み出す。ストレージ装置100は、DMA114aによって、読み出した書き込みデータ420についてチェックコードを用いてエラーの検出の有無を判定する。ストレージ装置100は、DMA114aによって、エラーが検出されなければ、パケット毎に書き込みデータ420をキャッシュ領域112a2に書き込むとともに、DMA114bを介してCM110bに転送する。このとき、ストレージ装置100は、DMA114aによって、キャッシュ領域112a2における、書き込みデータ410が記憶されている記憶領域と異なるとともに、空いている記憶領域に書き込みデータ420を書き込む。CM110bに転送された書き込みデータ420は、DMA114bによりキャッシュ領域112b2に書き込まれる。これにより、書き込みデータ420が、CM110a,110bにおいて2重化される。
【0098】
図13は、第2の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。第2の実施の形態のストレージ装置100は、図11と同様、図13に示すように、ホストコンピュータ300と接続されているとともに、CM110a,110b、記憶デバイス120a〜120dを有する。CM110aは、CPU111a、メモリ112a、デバイスインタフェース113c、DMA114a、チャネルアダプタ115cを有する。CM110bは、CPU111b、メモリ112b、デバイスインタフェース113e、DMA114b、チャネルアダプタ115eを有する。メモリ112aは、バッファ領域112a1、キャッシュ領域112a2を有する。メモリ112bは、バッファ領域112b1、キャッシュ領域112b2を有する。
【0099】
図13に示すように、ストレージ装置100は、図12に示した状態の後、DMA114aによって、キャッシュ領域112a2の書き込みデータ410,420の結合を実行し、結合データ430を生成したものとする。このときストレージ装置100は、結合処理1または結合処理2によって書き込みデータ410の一部である差分データ411および書き込みデータ420を有する結合データ430を生成する。ストレージ装置100は、書き込みデータ420のCM110bへの転送および書き込みデータ410,420の結合の完了後、ホストコンピュータ300に対して書き込みデータ420の書き込みを応答する。また、このときCM110bにおいても、DMA114bにより、キャッシュ領域112b2の書き込みデータ410,420の結合が実行され、結合データ430が生成される。これにより、結合データ430が、CM110a,110bにおいて2重化される。また、ストレージ装置100は、所定の契機に基づいて、CPU111aおよびデバイスインタフェース113cによって、キャッシュ領域112a2に記憶されている結合データ430を用いて、記憶デバイス120a〜120dの更新対象のデータを更新する。これにより、差分データ411の更新(書き込みデータ410の更新)および書き込みデータ420の更新が、記憶デバイス120a〜120dの更新対象のデータに反映される。所定の契機は、例えば、キャッシュ領域112a2の記憶量が所定の閾値や所定の比率を超えた場合、キャッシュ領域112a2の記憶量が所定の閾値や比率を超えた後、さらに所定の時間が経過した場合等、任意の条件で設定することができる。また、ストレージ装置100内の処理に余裕が生じた場合等であってもよい。
【0100】
図14は、第2の実施の形態の更新判定処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、CM110aが記憶デバイス120a〜120dに記憶される書き込みデータをホストコンピュータ300から受信したものとする。この場合、受信した書き込みデータを一時的にバッファ領域112a1に書き込み、同一のデータを更新するデータが既にキャッシュ領域112a2に書き込まれているか否かを判定する更新判定処理を実行する。以下では、図14に示す更新判定処理をフローチャートのステップ番号に沿って説明する。
【0101】
[ステップS11]制御部116aは、ホストコンピュータ300から送信された書き込みデータを受信すると、受信した書き込みデータをバッファ領域112a1に書き込む。
【0102】
[ステップS12]制御部116aは、実行用領域112a3に記憶されているキャッシュ管理テーブル112a31を参照して、更新対象の領域が少なくとも一部重複する書き込みデータがキャッシュ領域112a2に存在するか否かを判定する。重複する書き込みデータがキャッシュ領域112a2に存在すれば(ステップS12 YES)、処理はステップS13に進められる。一方、重複する書き込みデータがキャッシュ領域112a2に存在しなければ(ステップS12 NO)、処理はステップS14に進められる。
【0103】
[ステップS13]制御部116aは、ステップS11でバッファ領域112a1に書き込んだ書き込みデータをキャッシュ領域112a2の空き領域に書き込んでエラーの有無を判定する書き込みエラー検出処理を実行する。書き込みエラー検出処理については、詳しくは図15において後述する。その後、処理は終了する。
【0104】
[ステップS14]制御部116aは、ステップS11でバッファ領域112a1に書き込んだ書き込みデータを、キャッシュ領域112a2の空き領域に書き込む。このとき、制御部116aは、書き込みデータについて制御レジスタを設定する。キャッシュ領域112a2の空き領域に書き込まれたデータは、記憶デバイス120a〜120dに記憶されている対象データの更新に使用される。その後、処理は終了する。
【0105】
図15は、第2の実施の形態の書き込みエラー検出処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、更新判定処理において同一対象を更新するデータがキャッシュ領域112a2に存在する場合、CM110aのキャッシュ領域112a2の空き領域に書き込みデータを書き込む書き込みエラー検出処理を実行する。以下では、図15に示す書き込みエラー検出処理をフローチャートのステップ番号に沿って説明する。
【0106】
[ステップS21]制御部116aは、CM110aのキャッシュ領域112a2の空き領域に書き込みデータを書き込む。また、制御部116aは、CM110bに書き込みデータを転送する。CM110bは、転送された書き込みデータを図示しないキャッシュ領域の空き領域に書き込む。CM110bに転送された書き込みデータは、CM110aの書き込みデータと同様に処理される。
【0107】
[ステップS22]制御部116aは、ステップS21における書き込みデータのキャッシュ領域112a2への書き込みにおいて、エラーが発生したか否かを判定する。エラーが発生していれば(ステップS22 YES)、処理はステップS24に進められる。一方、エラーが発生していなければ(ステップS22 NO)、処理はステップS23に進められる。
【0108】
[ステップS23]制御部116aは、ステップS21でキャッシュ領域112a2に存在する同一対象を更新するデータと、ステップS21でキャッシュ領域112a2に書き込んだ書き込みデータとを結合するデータ結合処理を実行する。データ結合処理については、詳しくは図16において後述する。その後、処理は更新判定処理に復帰する。
【0109】
[ステップS24]制御部116aは、ステップS21の書き込みにより発生したエラーに対する処理を行う。ここでは、制御部116aは、エラーが発生した書き込みデータを物理的に消去または論理的に無効にして記憶領域を開放してもよい。また、制御部116aは、ホストコンピュータ300に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ300は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。また、書き込みエラーが発生した場合、制御部116aは、CM110bにおいて対応する書き込みにエラーが発生せず、結合が行われた場合には、結合データをCM110bから取得してもよい。この場合、制御部116aは、取得したデータで記憶デバイス120a〜120dの更新対象のデータを更新してもよい。その後、処理は更新判定処理に復帰する。
【0110】
図16は、第2の実施の形態のデータ結合処理を示すフローチャートである。第2の実施の形態のストレージ装置100は、書き込みエラー判定処理においてエラーが発生しなかった場合、データの書き込み量を比較し、書き込み量が少ない結合処理で先の書き込みデータおよび後の書き込みデータを結合するデータ結合処理を実行する。以下では、図16に示すデータ結合処理をフローチャートのステップ番号に沿って説明する。
【0111】
[ステップS31]制御部116aは、書き込みデータについて制御レジスタを設定する。このとき、キャッシュ領域112a2に書き込まれる後の書き込みデータについて制御レジスタが設定される。なお、先の書き込みデータについては、更新判定処理のステップS14において制御レジスタが設定されているものとする。
【0112】
[ステップS32]制御部116aは、結合量1および結合量2を算出する。結合量1は、後の書き込みデータを先の書き込みデータの記憶領域に書き込む結合処理1の実行時の書き込み量である。結合量2は、先の書き込みデータの差分を後の書き込みデータに付加する結合処理2の実行時の書き込み量である。
【0113】
ここで、結合量1および結合量2の算出方法について説明する。
結合量1は、キャッシュ領域112a2の先の書き込みデータが書き込まれている記憶領域に、後の書き込みデータが上書きにより書き込んだ場合(結合処理1)の書き込み量である。このため、結合量1は、後の書き込みデータのサイズと等しいので、後の書き込みデータの書き込み時の制御レジスタ116a1のDMAサイズで示すことができる。また、結合量1は、キャッシュ領域112a2の記憶領域に記憶されている書き込みデータのサイズから取得してもよい。
【0114】
結合量2は、結合処理2に基づき、キャッシュ領域112a2の後の書き込みデータが書き込まれている記憶領域に、先の書き込みデータにおける後の書き込みデータで更新されない差分を付加して書き込んだ場合(結合処理2)の書き込み量である。このため、結合量2は、先の書き込みデータの差分のデータ量である。結合量2は、例えば、以下に示す式(1)によって算出することができる。
【0115】
結合量2=結合量2A+2B … (1)
ここで、結合量2Aは、後の書き込みデータの制御レジスタ116a1の値および以下に示す式(2)〜(6)を用いて算出される。
【0116】
結合量2A1=マージ先頭アドレス−書き込みキャッシュ先頭アドレスA … (2)
結合量2A2=DMA転送先アドレス−書き込みキャッシュ先頭アドレスB… (3)
以下の式(4)が成立する場合、結合量2Aは、後述する式(5)で算出されるものとする。また、式(4)が成立しない場合、結合量2Aは、後述する式(6)で定義されるものとする。
【0117】
結合量2A1<結合量2A2 … (4)
結合量2A=結合量2A2−結合量2A1 … (5)
結合量2A=0 … (6)
また、結合量2Bは、後の書き込みデータの制御レジスタ116a1の値および以下に示す式(7)〜(11)を用いて算出される。
【0118】
結合量2B1=(書き込みキャッシュ先頭アドレスA+書き込みキャッシュサイズ)−(マージ最終アドレス) … (7)
結合量2B2=(書き込みキャッシュ先頭アドレスB+書き込みキャッシュサイズ)−(DMA転送先アドレス+DMAサイズ) … (8)
ここで、以下の式(9)が成立する場合、結合量2Bは、後述する式(10)で算出されるものとする。また、式(9)が成立しない場合、結合量2Bは、後述する式(11)で定義されるものとする。
【0119】
結合量2B1<結合量2B2 … (9)
結合量2B=(マージ最終アドレス−書き込みキャッシュ先頭アドレスA)−(DMA転送先アドレス+DMAサイズ)−書き込みキャッシュ先頭アドレスB(=結合量2B2−結合量2B1) … (10)
結合量2B=0 … (11)
[ステップS33]制御部116aは、ステップS32の算出結果に基づき、結合量1および結合量2の大小を比較する。結合量2が結合量1以上であれば(ステップS33 YES)、処理はステップS34に進められる。一方、結合量2が結合量1未満であれば(ステップS33 NO)、処理はステップS35に進められる。
【0120】
[ステップS34]制御部116aは、後の書き込みデータで先の書き込みデータを上書きする結合処理1を実行する。その後、処理は書き込みエラー検出処理に復帰する。
[ステップS35]制御部116aは、ステップS31でバッファ領域112a1に書き込んだ書き込みデータを、キャッシュ領域112a2の空き領域に書き込む。キャッシュ領域112a2の空き領域に書き込まれたデータは、記憶デバイス120a〜120dに記憶されている対象データの更新に使用される。その後、処理は書き込みエラー検出処理に復帰する。
【0121】
以上のような第2の実施の形態のストレージ装置100は、先の書き込みデータの更新時に、先の書き込みデータがエラーを有する後の書き込みデータで更新されることを抑止することができる。
【0122】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理1により、先の書き込みデータに後の書き込みデータを上書きして更新することができる。これにより、後の書き込みデータのサイズが先の書き込みデータの差分のサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置100の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【0123】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理2により、後の書き込みデータに先の書き込みデータの差分を付加することができる。これにより、先の書き込みデータの差分のサイズが後の書き込みデータのサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置100の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【0124】
また、結合量1および結合量2を算出し、比較結果に基づいて結合処理1および結合処理2のうちの書き込み量が少ない方を選択して実行する。これにより、結合処理1および結合処理2のうち、書き込み量が少ない処理を実行できるので、ストレージ装置100の負荷や書き込み処理によるエラー発生の確率の増加を抑制できる。
【0125】
また、チャネルアダプタ115cによりキャッシュ領域112a2に書き込まれる書き込みデータに予めチェックコードを付加し、制御部116aがチェックコードに基づいてエラーの発生の有無を判定する。これにより、チャネルアダプタ115cから制御部116aによるキャッシュ領域112a2への書き込みの際の間のエラーの発生の有無を判定できる。
【0126】
また、先の書き込みデータおよび後の書き込みデータの結合データによって記憶デバイス120a〜120dを更新するので、記憶デバイス120a〜120dへの書き込み回数を削減でき、ストレージ装置100の負荷の増加を抑制できる。
【0127】
また、CM110bにおいてもCM110aにおいて同様の処理等による結合を行うことで、結合されるデータ2重化によりCM110aにおいてエラーの発生時等に対処可能になる。
【0128】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、結合せずに後の書き込みデータを削除するので、先の書き込みデータを保持でき、先の書き込みデータを再送しなくてもよいので、ストレージ装置100の負荷の増加を抑制できる。
【0129】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、エラーの発生をホストコンピュータ300に通知するので、ホストコンピュータ300から後の書き込みデータが再送される。これにより、ストレージ装置100やホストコンピュータ300の処理の遅延を抑制することができる。
[第2の実施の形態の変形例]
次に、第2の実施の形態の変形例を説明する。第2の実施の形態との差異を中心に説明し、同様の事項については説明を省略する。第2の実施の形態のストレージ装置は、書き込みエラー検出処理においてエラーが発生したと判定された場合、他のCMでエラーが発生していなければ、当該CMから結合したデータを取得する点で、第2の実施の形態と異なる。
【0130】
図17は、第2の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。第2の実施の形態の変形例では、ストレージ装置100は、書き込みエラー検出処理においてエラーが発生したと判定された場合に、他のCMでエラーが発生していなければ、当該CMから結合したデータを取得するエラー発生処理を実行する。以下では、図17に示すエラー発生処理をフローチャートのステップ番号に沿って説明する。
【0131】
[ステップS41]制御部116aは、CM110bにおいてキャッシュ領域112a2の空き領域に書き込みデータを書き込む際におけるエラーの発生の有無を取得する。
[ステップS42]制御部116aは、ステップS41において取得した取得結果に基づいて、CM110bにおける書き込みでエラーが発生したか否かを判定する。エラーが発生していれば(ステップS42 YES)、処理はステップS44に進められる。一方、エラーが発生せず、CM110bでデータの結合が行われていれば(ステップS42 NO)、処理はステップS43に進められる。
【0132】
[ステップS43]制御部116aは、CM110bから取得し、取得したデータをキャッシュ領域112a2に書き込む。書き込まれたデータは、CM110aに接続されている記憶デバイス120a〜120dに記憶されている更新対象のデータの更新に使用される。その後、処理は終了する。
【0133】
[ステップS44]制御部116aは、書き込みエラー検出処理で検出され、かつ、CM110bで書き込まれたデータのエラーに対する処理を行う。ここでは、制御部116aは、前述した書き込みデータを削除または論理的に無効にして記憶領域を開放してもよい。また、制御部116aは、ホストコンピュータ300に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ300は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。その後、処理は更新判定処理に復帰する。
【0134】
以上のような第2の実施の形態の変形例のストレージ装置100は、第2の実施の形態と同様の効果に加えて、CM110aで後の書き込みデータの書き込みでエラーが発生した場合にも、CM110bで結合された結合データを取得できる。これにより、CM110aで後の書き込みデータの書き込みでエラーが発生した場合に、CM110bでエラーが発生していなければ、CM110bによる結合データで記憶デバイス120a〜120dのデータを更新できる。
【0135】
以上、開示のストレージ装置、制御装置およびストレージ装置制御方法を、図示の実施の形態に基づいて説明したが、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、開示の技術に他の任意の構成物や工程が付加されてもよい。また、開示の技術は前述した実施の形態のうちの任意の2以上の構成を組み合わせたものであってもよい。
【0136】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、開示の技術は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【0137】
以上の第1の実施の形態、第2の実施の形態および第2の実施の形態の変形例に関し、さらに以下の付記を開示する。
(付記1) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する制御部を有することを特徴とするストレージ装置。
【0138】
(付記2) 前記制御部は、前記書き込みエラーが発生していないときには、前記第2のデータに、前記第1のデータにおける更新部分以外の差分を付加して結合することを特徴とする付記1記載のストレージ装置。
【0139】
(付記3) 前記制御部は、前記書き込みエラーが発生していないときには、前記第1のデータを前記第2のデータで更新して結合することを特徴とする付記1記載のストレージ装置。
【0140】
(付記4) 前記制御部は、前記書き込みエラーが発生していないときには、前記第1の記憶領域に前記第2のデータを書き込む第1の結合処理を実行した場合の第1の書き込み量と、前記第2の記憶領域に前記第1のデータにおける更新部分以外の差分を書き込む第2の結合処理を実行した場合の第2の書き込み量とを比較し、比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のいずれかを選択し、前記選択した処理を実行することを特徴とする付記1記載のストレージ装置。
【0141】
(付記5) 前記第2の記憶領域に書き込まれるデータにチェックコードを付加する付加部を有し、
前記制御部は、前記第2の記憶領域に前記第2のデータを書き込む際に前記付加されたチェックコードに基づいてエラーの発生の有無を判定することを特徴とする付記1記載のストレージ装置。
【0142】
(付記6) 記憶部を有し、
前記第1のデータは、対応するデータの少なくとも一部である第1の部分を更新するデータであり、
前記第2のデータは、前記対応するデータの少なくとも一部である第2の部分を更新するデータであり、
前記制御部は、前記結合したデータにより、前記記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新することを特徴とする付記1記載のストレージ装置。
【0143】
(付記7) 第1の制御部と、
前記第1の制御部との間で転送可能な第2の制御部と、
を有し、
前記第1の制御部は、前記第2の制御部に対して前記第1のデータと前記第2のデータとを送信し、
前記第2の制御部は、前記送信された前記第1のデータと前記第2のデータとを結合する、
ことを特徴とする付記1記載のストレージ装置。
【0144】
(付記8) 前記制御部は、前記書き込みエラーが発生したときには、前記第1のデータと前記第2のデータとを結合せずに前記第2のデータを削除することを特徴とする付記1記載のストレージ装置。
【0145】
(付記9) 前記制御部は、前記書き込みエラーが発生したときには、前記エラーの発生を通知することを特徴とする付記1記載のストレージ装置。
(付記10) 前記第1の制御部は、前記書き込みエラーが発生したときには、前記第2の制御部で結合されたデータを取得することを特徴とする付記6記載のストレージ装置。
【0146】
(付記11) 前記制御部は、前記比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のうちの書き込み量が少ない方を選択し、前記選択した処理を実行することを特徴とする付記4記載のストレージ装置。
【0147】
(付記12) 前記対応するデータは、前記第1のデータによる更新の後に前記第2のデータによる更新が行われ、かつ、前記第1の部分と、前記第2の部分との少なくとも一部が重複することを特徴とする付記6記載のストレージ装置。
【0148】
(付記13)前記第1の記憶領域と前記第2の記憶領域とを含む複数の記憶領域を有するキャッシュ部と、
前記キャッシュ部が有する記憶領域が空き領域であるか否かを示す管理情報を記憶する管理情報記憶部と、
を有し、
前記制御部は、前記管理情報に基づき、前記キャッシュ部の記憶領域が空き領域であるか否かを判定し、判定結果に基づいて前記第2の記憶領域を選択することを特徴とする付記1記載のストレージ装置。
【0149】
(付記14) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合し、前記結合したデータにより、記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新する制御部を有することを特徴とする制御装置。
【0150】
(付記15) 第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する、
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【0151】
1 ストレージ装置
11 制御部
12a,12b 記憶領域
2a,2b,2c データ
2a1 更新部分
2a2 差分
【特許請求の範囲】
【請求項1】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する制御部を有することを特徴とするストレージ装置。
【請求項2】
前記制御部は、前記書き込みエラーが発生していないときには、前記第2のデータに、前記第1のデータにおける更新部分以外の差分を付加して結合することを特徴とする請求項1記載のストレージ装置。
【請求項3】
前記制御部は、前記書き込みエラーが発生していないときには、前記第1のデータを前記第2のデータで更新して結合することを特徴とする請求項1記載のストレージ装置。
【請求項4】
前記制御部は、前記書き込みエラーが発生していないときには、前記第1の記憶領域に前記第2のデータを書き込む第1の結合処理を実行した場合の第1の書き込み量と、前記第2の記憶領域に前記第1のデータにおける更新部分以外の差分を書き込む第2の結合処理を実行した場合の第2の書き込み量とを比較し、比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のいずれかを選択し、前記選択した処理を実行することを特徴とする請求項1記載のストレージ装置。
【請求項5】
前記第2の記憶領域に書き込まれるデータにチェックコードを付加する付加部を有し、
前記制御部は、前記第2の記憶領域に前記第2のデータを書き込む際に前記付加されたチェックコードに基づいてエラーの発生の有無を判定することを特徴とする請求項1記載のストレージ装置。
【請求項6】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合し、前記結合したデータにより、記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新する制御部を有することを特徴とする制御装置。
【請求項7】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する、
ことを特徴とするストレージ装置制御方法。
【請求項1】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する制御部を有することを特徴とするストレージ装置。
【請求項2】
前記制御部は、前記書き込みエラーが発生していないときには、前記第2のデータに、前記第1のデータにおける更新部分以外の差分を付加して結合することを特徴とする請求項1記載のストレージ装置。
【請求項3】
前記制御部は、前記書き込みエラーが発生していないときには、前記第1のデータを前記第2のデータで更新して結合することを特徴とする請求項1記載のストレージ装置。
【請求項4】
前記制御部は、前記書き込みエラーが発生していないときには、前記第1の記憶領域に前記第2のデータを書き込む第1の結合処理を実行した場合の第1の書き込み量と、前記第2の記憶領域に前記第1のデータにおける更新部分以外の差分を書き込む第2の結合処理を実行した場合の第2の書き込み量とを比較し、比較結果に基づいて、前記第1の結合処理または前記第2の結合処理のいずれかを選択し、前記選択した処理を実行することを特徴とする請求項1記載のストレージ装置。
【請求項5】
前記第2の記憶領域に書き込まれるデータにチェックコードを付加する付加部を有し、
前記制御部は、前記第2の記憶領域に前記第2のデータを書き込む際に前記付加されたチェックコードに基づいてエラーの発生の有無を判定することを特徴とする請求項1記載のストレージ装置。
【請求項6】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合し、前記結合したデータにより、記憶部に記憶されている前記第1のデータおよび前記第2のデータと対応するデータを更新する制御部を有することを特徴とする制御装置。
【請求項7】
第1の記憶領域に記憶されている第1のデータの少なくとも一部を第2のデータの少なくとも一部によって更新する場合、前記第2のデータを前記第1の記憶領域とは異なる第2の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
前記書き込みエラーが発生していないときには、前記第1のデータと前記第2のデータとを結合する、
ことを特徴とするストレージ装置制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2012−198704(P2012−198704A)
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願番号】特願2011−61716(P2011−61716)
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]