(57)【特許請求の範囲】
【請求項１】
記憶装置と、前記記憶装置に記憶されたデータをキャッシュするキャッシュ領域として記憶領域の一部が使用される記憶部を備えた制御装置とを有し、
前記制御装置は、
前記キャッシュ領域に存在する第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記キャッシュ領域に存在する第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
書き込みエラーが発生していないときには、前記第１の記憶領域に前記第２のデータを書き込むことで前記第１のデータを前記第２のデータで更新した第１の更新データを生成する第１の結合処理を実行した場合の第１の書き込み量と、前記第２の記憶領域に前記第１のデータにおける更新部分以外の差分を書き込んで前記第２のデータに前記差分を付加することで前記第１のデータを更新した第２の更新データを生成する第２の結合処理を実行した場合の第２の書き込み量とを比較し、比較結果に基づいて前記第１の結合処理または前記第２の結合処理のいずれかを選択して実行し、
前記第１の結合処理を実行した場合は、前記第１の更新データをキャッシュデータとして前記第１の記憶領域に残すとともに、前記第２の記憶領域の前記第２のデータを無効化し、
前記第２の結合処理を実行した場合は、前記第２の更新データをキャッシュデータとして前記第２の記憶領域に残すとともに、前記第１の記憶領域の前記第１のデータを無効化する、
ことを特徴とするストレージ装置。
【請求項２】
前記制御装置は、前記第２の記憶領域に対する前記第２のデータの書き込みにおいて書き込みエラーが発生していないときには、前記第２の結合処理を実行することを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記制御装置は、前記第２の記憶領域に対する前記第２のデータの書き込みにおいて書き込みエラーが発生していないときには、前記第１の結合処理を実行することを特徴とする請求項１記載のストレージ装置。
【請求項４】
前記記憶装置に記憶されたデータをキャッシュする他のキャッシュ領域として記憶領域の一部が使用される他の記憶部を備えた他の制御装置をさらに有し、
前記他の制御装置は、前記他のキャッシュ領域に存在する第３の記憶領域に前記第１のデータが記憶され、前記制御装置において前記第１のデータの少なくとも一部が前記第２のデータの少なくとも一部によって更新される際に、前記第２のデータを前記制御装置から受信して前記他のキャッシュ領域に存在する第４の記憶領域に書き込むとともに書き込みエラーの有無を判定し、書き込みエラーが発生していないときには、前記第１のデータと前記第２のデータとを結合することで前記第１のデータを更新した第３の更新データを生成し、
前記制御装置は、前記第２の記憶領域に対する前記第２のデータの書き込みにおいて書き込みエラーが発生したとき、前記他の制御装置における前記第３の記憶領域に対する前記第２のデータの書き込みにおいて書き込みエラーが発生していない場合には、前記第３の更新データを前記他の制御装置から取得して前記キャッシュ領域に書き込む、
ことを特徴とする請求項１乃至３のいずれか１項に記載のストレージ装置。
【請求項５】
記憶装置に記憶されたデータをキャッシュするキャッシュ領域として記憶領域の一部が使用される記憶部と、
前記キャッシュ領域に存在する第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記キャッシュ領域に存在する第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
書き込みエラーが発生していないときには、前記第１の記憶領域に前記第２のデータを書き込むことで前記第１のデータを前記第２のデータで更新した第１の更新データを生成する第１の結合処理を実行した場合の第１の書き込み量と、前記第２の記憶領域に前記第１のデータにおける更新部分以外の差分を書き込んで前記第２のデータに前記差分を付加することで前記第１のデータを更新した第２の更新データを生成する第２の結合処理を実行した場合の第２の書き込み量とを比較し、比較結果に基づいて前記第１の結合処理または前記第２の結合処理のいずれかを選択して実行し、
前記第１の結合処理を実行した場合は、前記第１の更新データをキャッシュデータとして前記第１の記憶領域に残すとともに、前記第２の記憶領域の前記第２のデータを無効化し、
前記第２の結合処理を実行した場合は、前記第２の更新データをキャッシュデータとして前記第２の記憶領域に残すとともに、前記第１の記憶領域の前記第１のデータを無効化する、制御部と、
を有することを特徴とする制御装置。
【請求項６】
記憶装置に記憶されたデータをキャッシュするキャッシュ領域として記憶領域の一部が使用される記憶部を備えた制御装置が、
前記キャッシュ領域に存在する第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記キャッシュ領域に存在する第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
書き込みエラーが発生していないときには、前記第１の記憶領域に前記第２のデータを書き込むことで前記第１のデータを前記第２のデータで更新した第１の更新データを生成する第１の結合処理を実行した場合の第１の書き込み量と、前記第２の記憶領域に前記第１のデータにおける更新部分以外の差分を書き込んで前記第２のデータに前記差分を付加することで前記第１のデータを更新した第２の更新データを生成する第２の結合処理を実行した場合の第２の書き込み量とを比較し、比較結果に基づいて前記第１の結合処理または前記第２の結合処理のいずれかを選択して実行し、
前記第１の結合処理を実行した場合は、前記第１の更新データをキャッシュデータとして前記第１の記憶領域に残すとともに、前記第２の記憶領域の前記第２のデータを無効化し、
前記第２の結合処理を実行した場合は、前記第２の更新データをキャッシュデータとして前記第２の記憶領域に残すとともに、前記第１の記憶領域の前記第１のデータを無効化する、
ことを特徴とするストレージ装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、ストレージ装置、制御装置およびストレージ装置制御方法に関する。
【背景技術】
【０００２】
情報技術の進歩および普及に伴い、磁気ディスク、光ディスク、半導体メモリ等の記憶媒体を利用し、記憶媒体にデータの読み書きが可能なストレージ装置が広く利用されている。ストレージ装置を用いることで、大量のデータの書き込み、読み出しおよび更新ならびに大量のデータの管理が容易になる。
【０００３】
ストレージ装置におけるデータの書き込みに関して、以下の技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２０３９８号公報
【特許文献２】特開２００１−３１８７６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、ストレージ装置におけるデータの一部または全部について上書きによる更新が行われる場合に、更新するデータに不整合が発生していた等の原因により、エラーが発生していたものとする。この場合、上書きされたデータにも更新するデータのエラーが反映されてしまう場合があるという問題点があった。
【０００６】
本件はこのような点に鑑みてなされたものであり、データの更新時に、データがエラーを有するデータで更新されることを抑止可能なストレージ装置、制御装置およびストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために以下のようなストレージ装置が提供される。このストレージ装置は、第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、第２のデータを第１の記憶領域とは異なる第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、書き込みエラーが発生していないときには、第１のデータと第２のデータとを結合する制御部を有する。
【０００８】
また、上記目的を達成するために以下のようなストレージ装置制御方法が提供される。このストレージ装置制御方法は、第１のデータに記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、第２のデータを第１の記憶領域とは異なる第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定する。書き込みエラーが発生していないときには、第１のデータと第２のデータとを結合する。
【発明の効果】
【０００９】
開示のストレージ装置、制御装置およびストレージ装置制御方法によれば、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態のストレージ装置を示す図である。
【図２】第２の実施の形態のストレージ装置のハードウェア構成を示す図である。
【図３】第２の実施の形態のストレージ装置の機能を示すブロック図である。
【図４】第２の実施の形態のキャッシュ領域を示す図である。
【図５】第２の実施の形態の制御レジスタを示す図である。
【図６】第２の実施の形態のキャッシュ管理テーブルを示す図である。
【図７】比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。
【図８】第２の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。
【図９】第２の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。
【図１０】第２の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。
【図１１】第２の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図１２】第２の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。
【図１３】第２の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。
【図１４】第２の実施の形態の更新判定処理を示すフローチャートである。
【図１５】第２の実施の形態の書き込みエラー検出処理を示すフローチャートである。
【図１６】第２の実施の形態のデータ結合処理を示すフローチャートである。
【図１７】第２の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、実施の形態を、図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ装置を示す図である。本実施の形態のストレージ装置１は、制御部１１、記憶領域１２ａ（第１の記憶領域）、記憶領域１２ｂ（第２の記憶領域）を有する。
【００１２】
制御部１１は、記憶領域１２ａに記憶されているデータ２ａ（第１のデータ）の少なくとも一部をデータ２ｂ（第２のデータ）の少なくとも一部によって更新する場合、データ２ｂを記憶領域１２ａとは異なる記憶領域１２ｂに書き込む。ここで、データ２ａとデータ２ｂとは、例えば、同一の更新対象のデータを更新するデータであるとともにデータ２ａによる更新の後にデータ２ｂによる更新が行われ、かつ、更新対象のデータにおけるデータ２ａが更新する部分と、データ２ｂが更新する部分との少なくとも一部が重複してもよい。すなわち、更新対象のデータに対してデータ２ａによる更新が行われた場合、データ２ａによって更新された部分の少なくとも一部について、データ２ｂによってさらに更新される関係であってもよい。データ２ａは、データ２ｂとの重複する部分である更新部分２ａ１と、更新部分２ａ１以外の差分２ａ２とを有するものとする。図１では、一例として、データ２ａにおいて、更新部分２ａ１がデータ２ｂで更新されるものとする。また、制御部１１は、書き込みエラーの発生の有無を判定する。制御部１１は、判定の結果、書き込みエラーが発生していないときには、データ２ａとデータ２ｂとを結合する。これにより、制御部１１は、データ２ｂでデータ２ａを更新する際、直接データ２ａに上書きせず、一旦記憶領域１２ｂに書き込み、エラーが発生しなければデータ２ａと結合することで、データ２ｃを生成する。従って、データ２ｂの記憶領域１２ｂへの書き込みの際にエラーが発生しても、データ２ａをエラーデータであるデータ２ｂで上書きしてしまうことが抑止できる。
【００１３】
また、制御部１１は、書き込みエラーが発生していないときには、記憶領域１２ａにデータ２ｂを書き込む結合処理１（第１の結合処理）を実行して、データ２ａとデータ２ｂとを結合してもよい。結合処理１は、データ２ａの更新部分２ａ１をデータ２ｂで上書きによって更新することで結合し、データ２ｃを生成する処理である。
【００１４】
また、制御部１１は、書き込みエラーが発生していないときには、記憶領域１２ｂにデータ２ａにおける更新部分以外の差分を書き込む結合処理２を実行して、データ２ａとデータ２ｂとを結合してもよい。結合処理２は、データ２ｂに、データ２ａにおける更新部分２ａ１以外の差分２ａ２を付加し、データ２ｃを生成する処理である。
【００１５】
また、制御部１１は、書き込みエラーが発生していないときには、結合処理１を実行した場合の書き込み量（第１の書き込み量）と、結合処理２を実行した場合の書き込み量（第２の書き込み量）とを比較してもよい。この場合、制御部１１は、比較結果に基づいて、結合処理１または結合処理２のいずれかを選択し、選択した処理を実行することができる。制御部１１は、比較結果に基づいて、結合処理１または結合処理２のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【００１６】
記憶領域１２ａは、データ２ａを記憶している。記憶領域１２ｂは、空き領域である。制御部１１によってデータ２ｂが記憶領域１２ｂに書き込まれる際、制御部１１によりエラーの発生の有無が判定される。データ２ｂが記憶領域１２ｂに書き込まれる際にエラーが発生しなければ、データ２ａとデータ２ｂとが結合される。また、データ２ｂが記憶領域１２ｂに書き込まれる際にエラーが発生しても、データ２ｂは、データ２ａが記憶されている記憶領域１２ａには書き込まれず、記憶領域１２ｂに書き込まれている。このため、データ２ａはエラーデータであるデータ２ｂによって更新されずに保持される。
【００１７】
以上のように、第１の実施の形態では、制御部１１が、記憶領域１２ａに記憶されているデータ２ａをデータ２ｂによって更新する場合、データ２ｂを記憶領域１２ａとは異なる記憶領域１２ｂに書き込み、書き込みエラーの発生の有無を判定する。そして、制御部１１は、判定の結果、書き込みエラーが発生していないときには、データ２ａとデータ２ｂとを結合する。これにより、データの更新時に、データがエラーを有するデータで更新されることを抑止することが可能となる。
【００１８】
［第２の実施の形態］
次に、図１に示したストレージ装置１の、エラーデータによるデータの更新を抑止する機能を、ＲＡＩＤ(Redundant Arrays of Inexpensive Disks)を構成する記憶デバイス群を有するストレージ装置１００に適用した実施の形態を、第２の実施の形態として説明する。
【００１９】
図２は、第２の実施の形態のストレージ装置のハードウェア構成を示す図である。ストレージ装置１００は、装置全体の制御を行うＣＭ（Controller Module）１１０ａ，１１０ｂ、記憶デバイス１２０ａ，１２０ｂ，１２０ｃ，１２０ｄを有する。
【００２０】
ストレージ装置１００は、後述するハードディスクドライブ等の複数の記憶デバイスに対するデータの入出力を行う。ストレージ装置１００は、ＲＡＩＤ０〜６等のＲＡＩＤ機能を有し、複数の記憶デバイスをまとめてＲＡＩＤを構成することにより、各ＲＡＩＤをそれぞれ１台の記憶デバイスとして管理する。
【００２１】
ホストコンピュータ３００は、業務処理を実行するコンピュータであり、ファイバチャネル（Fibre Channel）で構成されたＳＡＮ（Storage Area Network）を介してストレージ装置１００とデータ通信可能に接続されている。ホストコンピュータ３００は、業務処理に使用するデータについて、ストレージ装置１００への保存およびストレージ装置１００からの読み出しを行う。
【００２２】
ＣＭ１１０ａは、ＣＰＵ（Central Processing Unit）１１１ａ、メモリ１１２ａ、デバイスインタフェース（ＤＩ：Device Interface）１１３ｃ，１１３ｄ、ＤＭＡ（Direct Memory Access）１１４ａ、チャネルアダプタ１１５ｃ，１１５ｄを有する。
【００２３】
ＣＰＵ１１１ａは、ＯＳ（Operating System：オペレーティングシステム）等に従って処理を実行し、各種制御を行う。また、ＣＰＵ１１１ａは、メモリ１１２ａ、チャネルアダプタ１１５ｃ，１１５ｄ、記憶デバイス１２０ａ，１２０ｂ，１２０ｃ，１２０ｄ等の資源管理を行う。
【００２４】
メモリ１１２ａは、ＣＰＵ１１１ａがストレージ装置１００を制御するために必要な制御データを記憶する。また、メモリ１１２ａは、ホストコンピュータ３００から送信され、記憶デバイス１２０ａ〜１２０ｄに記憶される書き込みデータおよびホストコンピュータ３００から送信された読み出し要求に応じて記憶デバイス１２０ａ〜１２０ｄから読み出され、ホストコンピュータ３００に送信される読み出しデータを一時的に記憶する。
【００２５】
デバイスインタフェース１１３ｃ，１１３ｄは、記憶デバイス１２０ａ〜１２０ｄとの接続制御を行う。
ＤＭＡ１１４ａは、ファームウェアによる制御に基づき、バス１５０を介してＣＭ１１０ｂとの間で直接データ転送を行う。ＤＭＡ１１４ａ，１１４ｂは、バス１５０によって接続されている。このバス１５０を介して、ＤＭＡ１１４ａおよびＤＭＡ１１４ｂの間でデータが転送される。
【００２６】
チャネルアダプタ１１５ｃ，１１５ｄは、ホストコンピュータ３００とＣＭ１１０ａとの接続制御を行う。例えば、チャネルアダプタ１１５ｃは、ホストコンピュータ３００からの要求を受け付けて、ＣＭ１１０ａとの接続制御を行う。ＣＭ１１０ａ，１１０ｂは、それぞれ複数個（図ではそれぞれ２個）のチャネルアダプタを有する。
【００２７】
なお、チャネルアダプタ１１５ｃ，１１５ｄとホストコンピュータ３００との間の通信は、ファイバチャネルで構成されたＳＡＮによって接続されているが、ファイバチャネル以外の接続方式によって接続されていてもよい。また、チャネルアダプタ１１５ｃ，１１５ｄとホストコンピュータ３００との間の通信は、専用線やＶＰＮ（Virtual Private Network）を用いて、ストレージ装置１００をホストコンピュータ３００から遠隔地に設置するように構成してもよい。
【００２８】
また、ＣＭ１１０ａ，１１０ｂは、制御装置として機能し、ストレージ装置１００に対し着脱可能である。ここで、ＣＭ１１０ｂは、ＣＰＵ１１１ｂ、メモリ１１２ｂ、デバイスインタフェース１１３ｅ，１１３ｆ、ＤＭＡ１１４ｂ、チャネルアダプタ１１５ｅ，１１５ｆを有し、ＣＭ１１０ａと同一の構成であるため、説明を省略する。
【００２９】
記憶デバイス１２０ａ〜１２０ｄは、ＲＡＩＤを構成可能なハードディスクドライブであり、ホストコンピュータ３００から送信されたユーザデータを記憶する。なお、ユーザデータは１個のハードディスクドライブに記憶されている必要はなく、複数のハードディスクドライブに渡って記憶されていてもよい。また、１個のハードディスクドライブに複数のユーザデータが記憶されていてもよい。また、記憶デバイス１２０ａ〜１２０ｄは、例えば、ＳＳＤ（Solid State Drive）等の不揮発性半導体メモリやハードディスクドライブ以外の磁気記憶装置、光ディスク、その他のデータの記憶が可能な記憶媒体を使用することができる。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、磁気テープ等がある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷ等がある。
【００３０】
なお、図２において、ＣＭ１１０ａ，１１０ｂは、それぞれ２個図示し、デバイスインタフェース１１３ｃ〜１１３ｆおよびチャネルアダプタ１１５ｃ〜１１５ｆは、ＣＭ１１０ａ，１１０ｂそれぞれに対してそれぞれ２個ずつ図示しているが、これらの数はそれぞれ任意である。
【００３１】
また、図２において、ストレージ装置１００に対して１つのホストコンピュータ３００が接続されているが、ストレージ装置１００に対して複数のホストコンピュータが接続されていてもよい。
【００３２】
また、ストレージ装置１００に対してＣＭ１１０ａおよびＣＭ１１０ｂの制御を受ける、制御部および記憶デバイスを有する増設用装置（図示省略）を接続してもよい。
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。
【００３３】
図３は、第２の実施の形態のストレージ装置の機能を示すブロック図である。第２の実施の形態のストレージ装置１００は、ＣＭ１１０ａ，ＣＭ１１０ｂ、記憶デバイス１２０ａ〜１２０ｄを有する。ＣＭ１１０ａは、メモリ１１２ａ、チャネルアダプタ１１５ｃ、制御部１１６ａを有する。メモリ１１２ａは、バッファ領域１１２ａ１、キャッシュ領域１１２ａ２、実行用領域１１２ａ３を有する。制御部１１６ａは、制御レジスタ１１６ａ１を有する。ＣＭ１１０ａは、ＣＭ１１０ｂとの間でデータを転送可能である。
【００３４】
ＣＭ１１０ｂは、制御部１１６ｂを有する。制御部１１６ｂは、第２の制御部として機能する。なお、以下ではＣＭ１１０ａについて説明するが、ＣＭ１１０ｂは、ＣＭ１１０ａと同一の構成であって同一の機能を有するため、説明を省略する。
【００３５】
ＣＭ１１０ａは、ホストコンピュータ３００等の上位装置との間の送受信等に基づくデータの記憶デバイス１２０ａ〜１２０ｄへの読み書きの制御等、ストレージ装置１００を制御する。ＣＭ１１０ａは、制御装置として機能する。
【００３６】
メモリ１１２ａは、ＣＭ１１０ａによって記憶デバイス１２０ａ〜１２０ｄに読み書きされるデータや、制御部１１６ａによる制御に使用される制御データ等を記憶する。
バッファ領域１１２ａ１は、ホストコンピュータ３００から送信されたデータやホストコンピュータ３００に送信されるデータを一時的に記憶する。
【００３７】
キャッシュ領域１１２ａ２は、ホストコンピュータ３００から送信され、記憶デバイス１２０ａ〜１２０ｄに書き込まれる書き込みデータを、記憶デバイス１２０ａ〜１２０ｄへの書き込みが完了するまでの間、一時的に記憶する。また、キャッシュ領域１１２ａ２は、記憶デバイス１２０ａ〜１２０ｄから読み出され、ホストコンピュータ３００に送信される読み出しデータを一時的に記憶する。ここでは、キャッシュ領域１１２ａ２のある記憶領域には、先の書き込みデータ（第１のデータ）が記憶されているものとする。また、ホストコンピュータ３００から、先の書き込みデータを更新する後の書き込みデータ（第２のデータ）が送信されたものとする。ここで、先の書き込みデータと後の書き込みデータとは、例えば、同一のデータを更新するデータであるとともに先の書き込みデータによる更新の後に、後の書き込みデータによる更新が行われるものとする。また、先の書き込みデータおよび後の書き込みデータの更新対象のデータにおける、先の書き込みデータが更新する部分と、後の書き込みデータが更新する部分との少なくとも一部が重複しているものとする。すなわち、更新対象のデータに対して後の書き込みデータによる更新が行われた場合、先の書き込みデータによって更新された部分の少なくとも一部について、後の書き込みデータの少なくとも一部によってさらに更新される関係であるものとする。キャッシュ領域１１２ａ２は、キャッシュ部として機能する。
【００３８】
ここで、キャッシュ領域１１２ａ２に書き込みデータが記憶される際、制御部１１６ａは、図６において後述するキャッシュ管理テーブルに記憶されているキャッシュ管理情報を参照して、重複部分を有する先の書き込みデータの存在の有無を判定する。具体的には、制御部１１６ａは、キャッシュ領域１１２ａ２の各記憶領域のキャッシュ管理情報を参照し、キャッシュ管理情報のフラグを確認してキャッシュ領域１１２ａ２の各記憶領域について書き込みデータのキャッシュデータが記憶されているか否かを判定する。制御部１１６ａは、フラグに基づいて書き込みデータのキャッシュデータが記憶されていると判定した記憶領域について、キャッシュ管理情報のディスク番号および先頭ＬＢＡにより、キャッシュ領域１１２ａ２に記憶されている書き込みデータの中で、キャッシュ領域１１２ａ２に書き込まれる書き込みデータと更新対象のデータが同一である書き込みデータの有無を判定する。制御部１１６ａは、ディスク番号および先頭ＬＢＡに基づいてキャッシュ領域１１２ａ２に書き込まれる書き込みデータと更新対象が同一である書き込みデータがあった場合、更新対象が同一である書き込みデータが記憶されているキャッシュ領域１１２ａ２の記憶領域に対応するキャッシュ管理情報の使用ＬＢＡビットマップにより、キャッシュ領域１１２ａ２に書き込まれる書き込みデータが更新対象のデータを更新する部分の少なくとも一部と、上記更新対象のデータが同一である書き込みデータが更新対象のデータを更新する部分の少なくとも一部とが重複するか否かを判定する。制御部１１６ａは、判定の結果、キャッシュ領域１１２ａ２に書き込まれる書き込みデータが更新する部分の少なくとも一部と、更新対象が同一である書き込みデータが更新する部分の少なくとも一部とが重複する場合には、キャッシュ領域１１２ａ２に書き込まれる書き込みデータを後の書き込みデータとし、後の書き込みデータと更新対象が同一である書き込みデータを先の書き込みデータとする。
【００３９】
次に、制御部１１６ａは、キャッシュ領域１１２ａ２の先の書き込みデータの少なくとも一部を後の書き込みデータの少なくとも一部によって更新する場合、キャッシュ領域１１２ａ２において、後の書き込みデータを先の書き込みデータとは異なる記憶領域に書き込む。制御部１１６ａは、後の書き込みデータをキャッシュ領域１１２ａ２に書き込む際、先の書き込みデータが記憶されているキャッシュ領域１１２ａ２の記憶領域とは異なる記憶領域であって、かつ、空いている記憶領域に書き込む。具体的には、制御部１１６ａは、キャッシュ管理テーブルを参照して、キャッシュ領域１１２ａ２の記憶領域について空き領域であるか否かを判定し、空き領域と判定された記憶領域を選択して後の書き込みデータを記憶させる。すなわち、制御部１１６ａは、キャッシュ領域１１２ａ２の記憶領域について、キャッシュ管理テーブルを参照してフラグを取得し、フラグが無効（データが書き込まれていない）であるか否かを判定する。制御部１１６ａは、判定の結果、記憶領域のフラグが無効である場合、上記記憶領域を後の書き込みデータを記憶させる記憶領域に選択する。一方、制御部１１６ａは、判定の結果、記憶領域のフラグが有効（データが書き込まれている）である場合、先の書き込みデータが記憶されている記憶領域以外の記憶領域のうちの次の記憶領域について判定を行う。次に、制御部１１６ａは、選択した記憶領域に後の書き込みデータを記憶させる。
【００４０】
実行用領域１１２ａ３は、図６において後述するキャッシュ管理テーブル等のＣＭ１１０ａやストレージ装置１００等の制御に使用する制御データを記憶する。実行用領域１１２ａ３は、管理情報記憶部として機能する。
【００４１】
チャネルアダプタ１１５ｃは、ホストコンピュータ３００から送信され、キャッシュ領域１１２ａ２に書き込まれるデータにチェックコードを付加して、バッファ領域１１２ａ１に書き込む。チャネルアダプタ１１５ｃは、付加部として機能する。
【００４２】
制御部１１６ａは、ＣＭ１１０ａ内におけるデータのバッファ領域１１２ａ１、キャッシュ領域１１２ａ２への転送や、ＣＭ１１０ｂとの間のデータ転送を制御する。この際、ストレージ装置１００では、パケット単位に分割してデータ転送が行われる。また、制御部１１６ａは、後の書き込みデータのキャッシュ領域１１２ａ２への書き込み時に、書き込みエラーの発生の有無を判定する。制御部１１６ａは、判定の結果、書き込みエラーが発生していないときには、先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。制御部１１６ａは、結合データにより、記憶デバイス１２０ａ〜１２０ｄに記憶されている先の書き込みデータおよび後の書き込みデータと対応する更新の対象のデータを更新する。
【００４３】
これにより、制御部１１６ａは、後の書き込みデータで先の書き込みデータを更新する際、直接先の書き込みデータに上書きせず、先の書き込みデータとは異なる記憶領域に書き込み、エラーが発生しなければ先の書き込みデータと結合する。従って、後の書き込みデータのキャッシュ領域１１２ａ２の記憶領域への書き込みの際にエラーが発生しても、先の書き込みデータをエラーデータである後の書き込みデータで上書きしてしまうことが抑止できる。制御部１１６ａは、ＣＰＵ１１１ａおよびＤＭＡ１１４ａによって実現できる。
【００４４】
また、制御部１１６ａは、書き込みエラーが発生していないときには、先の書き込みデータの記憶領域に後の書き込みデータを書き込む結合処理１（第１の結合処理）を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理１は、先の書き込みデータを後の書き込みデータで更新して結合する処理である。
【００４５】
また、制御部１１６ａは、書き込みエラーが発生していないときには、後の書き込みデータの記憶領域に先の書き込みデータにおける更新部分以外の差分を書き込む結合処理２を実行して、先の書き込みデータと後の書き込みデータとを結合してもよい。結合処理２は、後の書き込みデータに、先の書き込みデータにおける更新部分以外の差分を付加する処理である。
【００４６】
また、制御部１１６ａは、書き込みエラーが発生していないときには、結合処理１を実行した場合の結合量１（第１の書き込み量）と、結合処理２を実行した場合の結合量２（第２の書き込み量）とを比較してもよい。この場合、制御部１１６ａは、比較結果に基づいて、結合処理１または結合処理２のいずれかを選択し、選択した処理を実行することができる。制御部１１６ａは、比較結果に基づいて、結合処理１または結合処理２のうちの書き込み量が少ない方を選択し、選択した処理を実行してもよい。
【００４７】
また、制御部１１６ａは、バッファ領域１１２ａ１に記憶されている書き込みデータを読み出し、その後、キャッシュ領域１１２ａ２に後の書き込みデータを書き込む際に、チャネルアダプタ１１５ｃで付加されたチェックコードに基づいてエラーの発生の有無を判定する。ここで、ホストコンピュータ３００から送信された後の書き込みデータは、制御部１１６ａの制御に基づき、チャネルアダプタ１１５ｃでチェックコードが付加された後にバッファ領域１１２ａ１に書き込まれる。その後、後の書き込みデータは、制御部１１６ａにより、キャッシュ領域１１２ａ２に書き込まれる際に、チェックコードに基づいてエラーの発生の有無を判定される。これにより、制御部１１６ａ（ＤＭＡ１１４ａ）が書き込みデータをバッファ領域１１２ａ１からキャッシュ領域１１２ａ２に転送する際に、書き込みデータのエラーの発生の有無を判定することができる。なお、これに限らず、制御部１１６ａは、バッファ領域１１２ａ１に書き込んだ書き込みデータについてチェックコードにより書き込みデータのエラーの発生の有無を判定してもよい。
【００４８】
ここで、キャッシュ領域１１２ａ２に書き込まれている書き込みデータは、既に制御部１１６ａにより、エラーが発生していないと判定されている。これに従い、制御部１１６ａによってエラーの発生の有無が判定されていない、バッファ領域１１２ａ１の書き込みデータは、キャッシュ領域１１２ａ２の書き込みデータよりもエラーが生じている可能性が高く、信頼性が低いと考えられる。従って、キャッシュ領域１１２ａ２に先の書き込みデータが書き込まれているとともに、バッファ領域１１２ａ１に後の書き込みデータが記憶されている場合、先の書き込みデータは後の書き込みデータよりも信頼性が高いと考えられる。
【００４９】
このため、制御部１１６ａは、キャッシュ領域１１２ａ２の先の書き込みデータと後の書き込みデータとを結合する際に、キャッシュ領域１１２ａ２において、先の書き込みデータとは異なる記憶領域に後の書き込みデータを書き込む。制御部１１６ａは、後の書き込みデータの書き込み時にエラーの発生の有無を判定する。制御部１１６ａは、後の書き込みデータの書き込み時にエラーの発生がなければ、結合処理１または結合処理２によって先の書き込みデータおよび後の書き込みデータを結合する。また、後の書き込みデータのキャッシュ領域１１２ａ２への書き込み時にエラーが発生した場合にも、先の書き込みデータは後の書き込みデータが書き込まれた記憶領域とは異なる記憶領域に保持されている。これにより、後の書き込みデータの書き込み時にエラーが発生しても、先の書き込みデータに対するエラーデータによる更新を抑止できる。また、先の書き込みデータのホストコンピュータ３００への再送要求等をしなくてもよいため、処理の増加を抑制できる。
【００５０】
記憶デバイス１２０ａ〜１２０ｄは、ＲＡＩＤを構成するハードディスクドライブ等の記憶デバイスであり、ホストコンピュータ３００から送信されたデータやホストコンピュータ３００に送信するデータを記憶する。記憶デバイス１２０ａ〜１２０ｄは、記憶部として機能する。
【００５１】
また、制御部１１６ａは、制御部１１６ｂに対してホストコンピュータ３００から送信された書き込みデータを送信する。制御部１１６ｂは、先の書き込みデータおよび後の書き込みデータを受信すると、制御部１１６ａと同様、送信された先の書き込みデータと後の書き込みデータとを結合して、結合データを生成する。
【００５２】
また、制御部１１６ａは、後の書き込みデータで書き込みエラーが発生したときには、先の書き込みデータと後の書き込みデータとを結合せずに、後の書き込みデータを削除し、ホストコンピュータ３００に対してエラーの発生を通知する。また、制御部１１６ａは、書き込みエラーが発生したときには、制御部１１６ｂで結合された結合データを取得してもよい。
【００５３】
制御レジスタ１１６ａ１は、ＤＭＡ１１４ａが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。制御レジスタは、ＤＭＡ１１４ａに設けてもよい。
【００５４】
なお、第２の実施の形態のストレージ装置１００は、ＲＡＩＤを構成する記憶デバイス群を有するが、これに限らず、１つの記憶デバイスや、ＲＡＩＤを構成しない複数の記憶デバイス群を有してもよい。また、ストレージ装置１００は、パーソナルコンピュータ（personal computer）や携帯情報端末等の記憶デバイスを有する情報処理装置であってもよい。
【００５５】
また、ストレージ装置１００は、キャッシュ領域１１２ａ２において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを空き領域に書き込む。しかし、ストレージ装置１００は、これに限らず、バッファ領域１１２ａ１、記憶デバイス１２０ａ〜１２０ｄ、その他のメモリや記憶媒体において、先の書き込みデータが記憶されている場合に後の書き込みデータが書き込まれるときに、後の書き込みデータを、メモリや記憶媒体の等の空き領域に書き込んでもよい。
【００５６】
また、チェックコードは、書き込みデータに対してチャネルアダプタ１１５ｃによって付加されるが、これに限らず、ホストコンピュータ３００等の外部装置や制御部１１６ａ等の他の内部構成要素によって付加されてもよい。
【００５７】
図４は、第２の実施の形態のキャッシュ領域を示す図である。図４に、第２の実施の形態のストレージ装置が有するメモリ１１２ａに設定されているキャッシュ領域１１２ａ２を示す。
【００５８】
キャッシュ領域１１２ａ２は、ホストコンピュータ３００から送信され記憶デバイス１２０ａ〜１２０ｄに記憶される書き込みデータや記憶デバイス１２０ａ〜１２０ｄから読み出されホストコンピュータ３００に送信される読み出しデータを一時的に記憶する。キャッシュ領域１１２ａ２は、第２の実施の形態では、一例として２ＧＢｙｔｅの記憶容量を有するものとするが、必ずしもこれに限られず、任意のサイズの記憶容量を有することができる。キャッシュ領域１１２ａ２は、所定の管理単位の記憶容量（例えば、６４ＫＢｙｔｅ）毎の記憶領域１１２ａ２１，１１２ａ２２，１１２ａ２３，・・・に区分して管理されている。キャッシュ領域１１２ａ２は、区分された記憶領域毎に書き込みデータおよび読み出しデータの一時記憶に使用される。
【００５９】
キャッシュ領域１１２ａ２の記憶領域（例えば、記憶領域１１２ａ２１）は、所定の記憶容量（例えば、５１２Ｂｙｔｅ）毎のＬＢＡ（Logical Block Address）に分割されている。記憶領域１１２ａ２１には、昇順にＬＢＡのアドレスが設定されており、ＬＢＡ毎に書き込み処理や読み出し処理が行われる。
【００６０】
図５は、第２の実施の形態の制御レジスタを示す図である。図５に、第２の実施の形態のストレージ装置が有する制御部１１６ａに設定される制御レジスタ１１６ａ１を示す。
制御レジスタは、ＤＭＡ１１４ａが書き込みデータや読み出しデータの制御に使用する制御データを記憶するレジスタである。図５に示す制御レジスタには、“モード”、“ＤＭＡサイズ”、“ＤＭＡ転送先アドレス”、“マージ先頭アドレス”、“マージ最終アドレス”、“書き込みキャッシュ先頭アドレスＡ”、“書き込みキャッシュ先頭アドレスＢ”、“書き込みキャッシュサイズ”が、各書き込みデータに対応して設定される。
【００６１】
モードは、ＤＭＡ１１４ａの制御モードを示す。モードは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。モードには、一例として、“ＲＥＡＤ”、“ＷＲＩＴＥ”、“ＷＲＩＴＥ  ＆  ＭＥＲＧＥ”を設定可能にしてもよい。
【００６２】
ＲＥＡＤモードの場合、制御部１１６ａは、ＣＭ１１０ｂから転送されたデータを受信する。ＷＲＩＴＥモードの場合、制御部１１６ａは、ＣＭ１１０ａからＣＭ１１０ｂにデータを転送する。ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードの場合、制御部１１６ａは、ＷＲＩＴＥモードによりＣＭ１１０ａからＣＭ１１０ｂに後の書き込みデータを転送した後、後の書き込みデータと、ＣＭ１１０ａのキャッシュ領域１１２ａ２の異なる記憶領域に記憶されている先の書き込みデータとの結合を行う。また、ＣＭ１１０ａから転送された後の書き込みデータを受信した後、受信した後の書き込みデータと、ＣＭ１１０ｂの図示しないキャッシュ領域の異なる記憶領域に記憶されている前もってＣＭ１１０ａから転送された先の書き込みデータとの結合を行う。新たな書き込みデータについて、キャッシュ領域１１２ａ２に更新対象のデータの少なくとも一部が重複する書き込みデータが存在する場合、ＣＰＵ１１１ａは、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードを設定する。
【００６３】
ＤＭＡサイズは、ＤＭＡ１１４ａによる読み出しまたは書き込みの際のＤＭＡサイズ（Ｂｙｔｅ数）を示す。ＤＭＡサイズは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６４】
ＤＭＡ転送先アドレスは、ＤＭＡ１１４ａによる読み出しまたは書き込みの際の転送先のメモリのアドレスを示す。ＤＭＡ転送先アドレスは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６５】
マージ先頭アドレスは、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードにおける書き込みデータの結合時に使用される。マージ先頭アドレスは、後の書き込みデータに対して更新対象のデータの少なくとも一部が重複する先の書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域１１２ａ２の記憶領域における先頭アドレスを示す。マージ先頭アドレスは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６６】
マージ最終アドレスは、マージ先頭アドレスと同様、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードにおける書き込みデータの結合時に使用される。マージ最終アドレスは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後の書き込みデータとの結合の対象であり、先に存在する先の書き込みデータが記憶されている、キャッシュ領域１１２ａ２の記憶領域における最終アドレスを示す。マージ最終アドレスは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６７】
書き込みキャッシュ先頭アドレスＡは、マージ先頭アドレスと同様、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスＡは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、先に存在する先の書き込みデータが記憶されているキャッシュ領域１１２ａ２の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスＡは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６８】
書き込みキャッシュ先頭アドレスＢは、マージ先頭アドレスと同様、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードにおける書き込みデータの結合時に使用される。書き込みキャッシュ先頭アドレスＢは、書き込みデータに対して更新対象の領域の少なくとも一部が重複する書き込みデータが存在する場合、後から書き込まれる後の書き込みデータが記憶されているキャッシュ領域１１２ａ２の記憶領域の先頭アドレスを示す。書き込みキャッシュ先頭アドレスＢは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００６９】
書き込みキャッシュサイズは、マージ先頭アドレスと同様、ＷＲＩＴＥ  ＆  ＭＥＲＧＥモードにおける書き込みデータの結合時に使用される。書き込みキャッシュサイズは、キャッシュ領域１１２ａ２が有する各記憶領域の１つあたりの記憶容量を示す。書き込みキャッシュサイズは、ＤＭＡ１１４ａによる書き込みデータの処理に先立ってＣＰＵ１１１ａが設定する。
【００７０】
なお、図５に示した制御レジスタ１１６ａ１は一例であり、制御レジスタには任意の項目を設定することができる。
図６は、第２の実施の形態のキャッシュ管理テーブルを示す図である。図６に示すキャッシュ管理テーブル１１２ａ３１は、第２の実施の形態のストレージ装置１００が有するメモリ１１２ａの実行用領域１１２ａ３に設定される。キャッシュ管理テーブル１１２ａ３１は、ストレージ装置１００のキャッシュ領域１１２ａ２が有する各記憶領域の書き込みデータを管理するテーブルである。
【００７１】
キャッシュ管理テーブル１１２ａ３１には、項目として“先頭アドレス”、“フラグ”、“ディスク番号”、“先頭ＬＢＡ”、“使用ＬＢＡビットマップ（bitmap）”が設けられている。キャッシュ管理テーブル１１２ａ３１には、上記項目に設定された値が、キャッシュ領域１１２ａ２が有するそれぞれの記憶領域のキャッシュ管理情報として互いに関連付けられる。
【００７２】
先頭アドレスは、キャッシュ管理情報で管理されるキャッシュ領域１１２ａ２の記憶領域を示すアドレスである。キャッシュ管理情報は、キャッシュ領域１１２ａ２の記憶領域に対して１対１で設定される。
【００７３】
フラグは、記憶領域に記憶されている書き込みデータまたは読み出しデータが有効であるか無効であるかを示す。例えば、記憶領域のデータが無効であれば、“０”が設定され、有効であれば、“１”が設定される。なお、フラグは、記憶領域に記憶されているデータが書き込みデータであるか読み出しデータであるかを示してもよい。この場合、例えば、記憶領域のデータが無効であれば、“０”が設定され、記憶領域のデータが有効であるとともに書き込みデータであれば、“１”が設定され、記憶領域のデータが有効であるとともに読み出しデータであれば、“２”が設定されてもよい。
【００７４】
ディスク番号は、記憶領域に記憶されている書き込みデータまたは読み出しデータを記憶している記憶デバイス１２０ａ〜１２０ｄを示す。
先頭ＬＢＡは、記憶領域に記憶されている書き込みデータまたは読み出しデータに対応するデータが記憶されている、記憶デバイス１２０ａ〜１２０ｄにおける管理単位分の記憶領域の先頭アドレスを示す。
【００７５】
使用ＬＢＡビットマップは、記憶領域に記憶されている書き込みデータまたは読み出しデータにおける有効な部分を示す。第２の実施の形態では、データのアクセス単位は５１２Ｂｙｔｅとする。このため、使用ＬＢＡビットマップは、５１２Ｂｙｔｅの実際のデータにつき１ｂｉｔのビットマップ情報としてもよい。
【００７６】
なお、図６に示したキャッシュ管理テーブル１１２ａ３１は一例であり、キャッシュ管理テーブルには任意の項目を設定することができる。
図７は、比較例のストレージ装置の書き込み処理におけるエラーの検出を示す図である。図７（Ａ）は、比較例のストレージ装置において先の書き込みデータ６４０がパケット単位に分割されて書き込まれている記憶領域５１２ａ２４に、後の書き込みデータ６５０が上書きされる場合を示す。図７（Ｂ）は、その後、比較例のストレージ装置において記憶領域５１２ａ２４に、後の書き込みデータ６５０がパケット単位で書き込まれている際に、エラーを有するパケット６５４が検出された場合を示す。図７（Ａ）、図７（Ｂ）では、比較例のストレージ装置が書き込み処理を行い、エラーが発生した場合について説明する。比較例のストレージ装置は、所定の管理単位（例えば、６４ＫＢｙｔｅ）の記憶領域５１２ａ２４を有する。
【００７７】
図７（Ａ）に示すように、比較例のストレージ装置において、バッファ領域からキャッシュ領域の記憶領域５１２ａ２４に先の書き込みデータ６４０が書き込まれているものとする。この場合において、後の書き込みデータ６５０が記憶領域５１２ａ２４に対して書き込まれることにより、データ６４０の一部（図７（Ａ）の更新部分）の上書きが行われるものとする。ここで、データ６５０は、パケット６５１，６５２，６５３，６５４，６５５，６５６に所定のサイズで区分され、パケット単位で転送、書き込みおよび読み出しが行われる。ここで、パケット６５４は、エラーデータであるものとする。
【００７８】
図７（Ｂ）に示すように、その後、比較例のストレージ装置において、データ６５０のパケット６５１，６５２，６５３，６５４，６５５，６５６が順次記憶領域５１２ａ２４に書き込まれる。これにより、データ６４０の一部が更新される。更新後のデータをデータ６４０ｂとする。ここで、上記のように、パケット６５４がエラーデータであるため、比較例のストレージ装置において、ＤＭＡがパケット６５４の記憶領域５１２ａ２４への書き込み時にエラーを検出し、データ６５０の転送および書き込みを中止する。しかし、比較例のストレージ装置がパケット６５４のエラーを検出した時点では、既にパケット６５１〜６５３が記憶領域５１２ａ２４に書き込まれている。また、エラーを有するデータ（例えば、パケット６５４）で更新された部分を特定し、特定した部分を再取得して訂正するのが困難である場合や、エラーが一部（パケット６５４）に生じているデータ６５０全体の信頼性を低く評価する場合には、データ６４０ｂにおけるデータ６５０によって更新された部分や、更新される予定であった部分全体をエラーデータとして扱う場合がある。
【００７９】
これに対し、第２の実施の形態のストレージ装置１００は、予め先の書き込みデータと異なる領域に後の書き込みデータを書き込んでエラーの有無を検出し、エラーが発生していない場合に先の書き込みデータと後の書き込みデータとを結合するので、先の書き込みデータがエラーデータとなることを抑止できる。
【００８０】
図８は、第２の実施の形態の後の書き込みデータに先の書き込みデータの差分を付加して結合する際の動作を示す図である。図８（Ａ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２５に先の書き込みデータ３１０が書き込まれる際の動作を示す。図８（Ｂ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２６に後の書き込みデータ３２０が書き込まれるとともに、結合量が比較される際の動作を示す。図８（Ｃ）は、第２の実施の形態のストレージ装置１００において、結合量の比較の結果に基づいて、後の書き込みデータ３２０に先の書き込みデータの差分である差分データ３１１，３１３が付加されて結合される際の動作を示す。記憶領域１１２ａ２５，１１２ａ２６は、ともに所定の記憶容量（例えば、６４ＫＢｙｔｅ）毎に区分された管理単位であるものとする。
【００８１】
図８（Ａ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された先の書き込みデータである書き込みデータ３１０が受信され、記憶領域１１２ａ２５に対して書き込まれたものとする。この場合、ストレージ装置１００は、書き込みデータ３１０の書き込みに基づいて、記憶領域１１２ａ２５のキャッシュ管理情報を設定する。この時点では、記憶領域１１２ａ２６は、空き領域であるものとする。ここで、キャッシュ領域１１２ａ２の各記憶領域が空き領域であるか否かは、各記憶領域に対応するキャッシュ管理情報のフラグにより示される。制御部１１６ａは、例えば、キャッシュ領域１１２ａ２の各記憶領域のキャッシュ管理情報のフラグに基づいて、記憶領域が空き領域であるか否かを判定し、判定結果に基づいて、記憶領域１１２ａ２５等の空き領域にデータを書き込むことができる。
【００８２】
次に、図８（Ｂ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された後の書き込みデータである書き込みデータ３２０が記憶領域１１２ａ２６に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置１００は、書き込みデータ３２０の書き込みに基づいて、記憶領域１１２ａ２６のキャッシュ管理情報を設定する。また、ストレージ装置１００は、結合処理１を実行した場合の書き込み量である結合量１を算出する。ここで、結合処理１は、書き込みデータ３１０が記憶されている記憶領域１１２ａ２５に、書き込みデータ３２０を上書きして書き込む処理となる。これにより、結合量１は、書き込みデータ３２０のデータサイズを示す、データサイズ３２０ａとなる。また、ストレージ装置１００は、結合処理２を実行した場合の書き込み量である結合量２を算出する。ここで、結合処理２は、書き込みデータ３２０が記憶されている記憶領域１１２ａ２６に、書き込みデータ３２０によって書き込みデータ３１０を上書きした場合の更新部分以外の差分データ３１１，３１３を書き込む処理となる。これにより、結合量２は、書き込みデータ３１０の差分データ３１１，３１３のそれぞれのデータサイズを示す、データサイズ３１１ａ，３１３ａの合計値となる。次に、ストレージ装置１００は、結合量１および結合量２を比較し、比較結果に基づいて結合処理１または結合処理２を実行する。ここでは、結合量１よりも結合量２の方が小さいものとする。
【００８３】
次に、図８（Ｃ）に示すように、結合量の比較の結果に基づき、結合量２が小さいので、ストレージ装置１００は、結合処理２を実行する。すなわち、ストレージ装置１００は、書き込みデータ３２０が記憶されている記憶領域１１２ａ２６に差分データ３１１，３１３を付加して結合することにより、結合データ３２０ｂを生成する。また、ストレージ装置１００は、記憶領域１１２ａ２６の更新に伴い、書き込みデータ３１０の書き込みに基づくキャッシュ管理情報を無効にするとともに、書き込みデータ３２０の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ３１０は、記憶領域１１２ａ２５から削除される。また、キャッシュ領域１１２ａ２に記憶されているデータの記憶デバイス１２０ａ〜１２０ｄへの書き込み処理の際に、記憶領域１１２ａ２６の結合データ３２０ｂが記憶デバイス１２０ａ〜１２０ｄの更新の対象データに上書きされる。
【００８４】
図９は、第２の実施の形態の後の書き込みデータによって先の書き込みデータに上書きして結合する際の動作を示す図である。図９（Ａ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２５に先の書き込みデータ３３０が書き込まれる際の動作を示す。図９（Ｂ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２６に後の書き込みデータ３４０が書き込まれるとともに、結合量が比較される際の動作を示す。図９（Ｃ）は、第２の実施の形態のストレージ装置１００において、結合量の比較の結果に基づいて、先の書き込みデータ３３０が後の書き込みデータ３４０によって上書きによって結合される際の動作を示す。
【００８５】
図９（Ａ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された先の書き込みデータである書き込みデータ３３０が受信され、記憶領域１１２ａ２５に対して書き込まれたものとする。この場合、ストレージ装置１００は、書き込みデータ３３０の書き込みに基づいて、記憶領域１１２ａ２５のキャッシュ管理情報を設定する。この時点では、記憶領域１１２ａ２６は、空き領域であるものとする。
【００８６】
次に、図９（Ｂ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された後の書き込みデータである書き込みデータ３４０が記憶領域１１２ａ２６に対してエラーが発生せず、正常に書き込まれたものとする。この場合、ストレージ装置１００は、書き込みデータ３４０の書き込みに基づいて、記憶領域１１２ａ２６のキャッシュ管理情報を設定する。また、ストレージ装置１００は、結合量１および結合量２を算出する。図９（Ｂ）では、結合量１は、書き込みデータ３４０のデータサイズ３４０ａとなる。また、結合量２は、差分データ３３１，３３３のそれぞれのデータサイズ３３１ａ，３３３ａの合計値となる。次に、ストレージ装置１００は、結合量１および結合量２を比較し、比較結果に基づいて結合処理１または結合処理２を実行する。ここでは、結合量２よりも結合量１の方が小さいものとする。
【００８７】
次に、図９（Ｃ）に示すように、結合量の比較の結果に基づき、結合処理１が小さいので、ストレージ装置１００は、結合処理１を実行する。すなわち、ストレージ装置１００は、書き込みデータ３３０が記憶されている記憶領域１１２ａ２５に書き込みデータ３４０が上書きして結合することにより、結合データ３３０ｂを生成する。また、ストレージ装置１００は、記憶領域１１２ａ２５の更新に伴い、書き込みデータ３４０の書き込みに基づくキャッシュ管理情報を無効にする。また、ストレージ装置１００は、記憶領域１１２ａ２５の更新に伴い、結合データ３３０ｂの有効な範囲のアドレスに応じて、適宜書き込みデータ３３０の書き込みに基づくキャッシュ管理情報を修正する。これにより、書き込みデータ３４０は、記憶領域１１２ａ２６から削除される。また、キャッシュ領域１１２ａ２に記憶されているデータの記憶デバイス１２０ａ〜１２０ｄへの書き込み処理により、記憶領域１１２ａ２５の結合データ３３０ｂが記憶デバイス１２０ａ〜１２０ｄの更新対象のデータに上書きされる。
【００８８】
このように第２の実施の形態のストレージ装置１００では、図８および図９に示すように、先の書き込みデータおよび後の書き込みデータに応じて、結合処理１、結合処理２のうち書き込みデータ量が少ない処理が実行される。これにより、結合処理によるストレージ装置１００の負荷を抑制可能である。また、結合による書き込みデータ量を削減することに基づき、書き込み処理による転送時のエラーの発生を抑制できる。
【００８９】
図１０は、第２の実施の形態の後の書き込みデータの書き込み時にエラーが発生した際の動作を示す図である。図１０（Ａ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２５に先の書き込みデータ３５０が書き込まれる際の動作を示す。図１０（Ｂ）は、第２の実施の形態のストレージ装置１００において、キャッシュ領域１１２ａ２の記憶領域１１２ａ２６に後の書き込みデータ３６０が書き込まれた場合に、書き込みエラーが検出された際の動作を示す。図１０（Ｃ）は、第２の実施の形態のストレージ装置１００において、エラーが検出された書き込みデータ３６０が記憶領域１１２ａ２６から削除される際の動作を示す。
【００９０】
図１０（Ａ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された先の書き込みデータである書き込みデータ３５０が受信され、記憶領域１１２ａ２５に対して書き込まれたものとする。この場合、ストレージ装置１００は、書き込みデータ３５０の書き込みに基づいて、記憶領域１１２ａ２５のキャッシュ管理情報を設定する。この時点では、記憶領域１１２ａ２６は、空き領域であるものとする。
【００９１】
次に、図１０（Ｂ）に示すように、ストレージ装置１００において、ホストコンピュータ３００から送信された後の書き込みデータである書き込みデータ３６０が記憶領域１１２ａ２６に対して書き込まれた際に、書き込みエラーが発生したものとする。この場合、ストレージ装置１００は、記憶領域１１２ａ２６に書き込まれた書き込みデータ３６０の全体をエラーデータとして扱う。また、ストレージ装置１００は、エラーデータである書き込みデータ３６０の書き込みに対して記憶領域１１２ａ２６のキャッシュ管理情報を設定しない。
【００９２】
次に、図１０（Ｃ）に示すように、記憶領域１１２ａ２６に書き込まれた書き込みデータ３６０がエラーデータであったので、ストレージ装置１００は、データの結合を実行しない。また、書き込みデータ３６０は、記憶領域１１２ａ２６のキャッシュ管理情報が無効であるため、記憶デバイス１２０ａ〜１２０ｄの更新対象のデータに上書きされない。また、ストレージ装置１００は、書き込みデータ３６０のエラーの発生に基づき、記憶領域１１２ａ２５の書き込みデータ３５０を保持しながらホストコンピュータ３００に対して書き込みデータ３６０の書き込みエラー発生を通知する。書き込みデータ３６０の書き込みエラー発生の通知を受信したホストコンピュータ３００は、書き込みデータ３６０の再送を行ってもよい。書き込みデータ３５０の更新対象のデータへの上書きまでに書き込みデータ３６０の再送があり、再送された書き込みデータ３６０の書き込み時にエラーが発生しなければ、書き込みデータ３５０，３６０の結合が実行される。これに従い、キャッシュ領域１１２ａ２に記憶されているデータの記憶デバイス１２０ａ〜１２０ｄへの書き込み処理により、結合データで更新対象のデータが更新される。再送がなければ、キャッシュ領域１１２ａ２に記憶されているデータの記憶デバイス１２０ａ〜１２０ｄへの書き込み処理により、記憶領域１１２ａ２５の書き込みデータ３５０によって記憶デバイス１２０ａ〜１２０ｄの更新対象のデータが更新される。
【００９３】
このように第２の実施の形態では、図１０に示すように、後の書き込みデータの記憶領域１１２ａ２６への書き込み時にエラーが発生したものとする。この場合には、ストレージ装置１００において書き込みデータ３５０，３６０の結合が行われず、書き込みデータ３５０がエラーデータである書き込みデータ３６０で上書きされずに保持される。これにより、ストレージ装置１００は、例えばホストコンピュータ３００に対して書き込みデータ３６０の再送を要求する。次にストレージ装置１００は、書き込みデータ３６０単独で記憶デバイス１２０ａ〜１２０ｄの更新対象データの更新を行う。または、ストレージ装置１００は、書き込みデータ３５０，３６０を結合し、結合データで記憶デバイス１２０ａ〜１２０ｄの更新対象データの更新を行ってもよい。
【００９４】
これにより、書き込みデータ３５０の再送の要求を行わなくてもよいため、ストレージ装置１００やホストコンピュータ３００の処理の負荷を抑制できる。
図１１は、第２の実施の形態のホストコンピュータから送信された先の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第２の実施の形態のストレージ装置１００は、図１１に示すように、ホストコンピュータ３００と接続されているとともに、ＣＭ１１０ａ，１１０ｂ、記憶デバイス１２０ａ〜１２０ｄを有する。ＣＭ１１０ａは、ＣＰＵ１１１ａ、メモリ１１２ａ、デバイスインタフェース１１３ｃ、ＤＭＡ１１４ａ、チャネルアダプタ１１５ｃを有する。ＣＭ１１０ｂは、ＣＰＵ１１１ｂ、メモリ１１２ｂ、デバイスインタフェース１１３ｅ、ＤＭＡ１１４ｂ、チャネルアダプタ１１５ｅを有する。メモリ１１２ａは、バッファ領域１１２ａ１、キャッシュ領域１１２ａ２を有する。メモリ１１２ｂは、バッファ領域１１２ｂ１、キャッシュ領域１１２ｂ２を有する。ＤＭＡ１１４ａ，１１４ｂは、互いに接続されており、両者の間でデータ転送が可能である。
【００９５】
図１１に示すように、ストレージ装置１００は、ホストコンピュータ３００から記憶デバイス１２０ａ〜１２０ｄに記憶されているデータを更新する書き込みデータ４１０を受信したものとする。この場合、ストレージ装置１００は、チャネルアダプタ１１５ｃにおいて受信した書き込みデータ４１０に対してパケット毎にエラー検出に使用するチェックコードを付加し、チェックコードを付加した書き込みデータ４１０をバッファ領域１１２ａ１に書き込む。ストレージ装置１００は、ＤＭＡ１１４ａによってバッファ領域１１２ａ１に記憶されている書き込みデータ４１０を読み出す。ストレージ装置１００は、ＤＭＡ１１４ａによって、読み出した書き込みデータ４１０についてチャネルアダプタ１１５ｃで付加したチェックコードを用いてパケット毎にエラーの検出の有無を判定する。ストレージ装置１００は、ＤＭＡ１１４ａによって、エラーが検出されなければ、パケット毎に書き込みデータ４１０をキャッシュ領域１１２ａ２に書き込むともに、ＤＭＡ１１４ｂを介してＣＭ１１０ｂに転送する。ストレージ装置１００は、書き込みデータ４１０のキャッシュ領域１１２ａ２への書き込みおよびＣＭ１１０ｂへの転送の完了後、ホストコンピュータ３００に対して書き込みデータ４１０の書き込みを応答する。ＣＭ１１０ｂに転送された書き込みデータ４１０は、ＤＭＡ１１４ｂによりキャッシュ領域１１２ｂ２に書き込まれる。これにより、書き込みデータ４１０が、ＣＭ１１０ａ，１１０ｂにおいて２重化される。
【００９６】
図１２は、第２の実施の形態のホストコンピュータから送信された後の書き込みデータをキャッシュ領域に書き込む際の動作を示す図である。第２の実施の形態のストレージ装置１００は、図１１と同様、図１２に示すように、ホストコンピュータ３００と接続されているとともに、ＣＭ１１０ａ，１１０ｂ、記憶デバイス１２０ａ〜１２０ｄを有する。ＣＭ１１０ａは、ＣＰＵ１１１ａ、メモリ１１２ａ、デバイスインタフェース１１３ｃ、ＤＭＡ１１４ａ、チャネルアダプタ１１５ｃを有する。ＣＭ１１０ｂは、ＣＰＵ１１１ｂ、メモリ１１２ｂ、デバイスインタフェース１１３ｅ、ＤＭＡ１１４ｂ、チャネルアダプタ１１５ｅを有する。メモリ１１２ａは、バッファ領域１１２ａ１、キャッシュ領域１１２ａ２を有する。メモリ１１２ｂは、バッファ領域１１２ｂ１、キャッシュ領域１１２ｂ２を有する。
【００９７】
図１２に示すように、ストレージ装置１００は、図１１に示した状態で、ホストコンピュータ３００から記憶デバイス１２０ａ〜１２０ｄに記憶されているデータを更新する書き込みデータ４２０を受信したものとする。ここで、書き込みデータ４２０は、データ４１０が更新する対象のデータと同一のデータを更新するものとする。また、書き込みデータ４２０が更新する対象のデータを更新する部分の一部または全部と、書き込みデータ４１０が更新する対象のデータを更新する一部または全部とが重複するものとする。すなわち、書き込みデータ４２０を後の書き込みデータとした場合、書き込みデータ４１０は、先の書き込みデータの関係に該当する。この場合、ストレージ装置１００は、チャネルアダプタ１１５ｃにおいて受信した書き込みデータ４２０に対してパケット毎にチェックコードを付加し、チェックコードを付加した書き込みデータ４２０をバッファ領域１１２ａ１に書き込む。ストレージ装置１００は、ＤＭＡ１１４ａによってバッファ領域１１２ａ１に記憶されている書き込みデータ４２０を読み出す。ストレージ装置１００は、ＤＭＡ１１４ａによって、読み出した書き込みデータ４２０についてチェックコードを用いてエラーの検出の有無を判定する。ストレージ装置１００は、ＤＭＡ１１４ａによって、エラーが検出されなければ、パケット毎に書き込みデータ４２０をキャッシュ領域１１２ａ２に書き込むとともに、ＤＭＡ１１４ｂを介してＣＭ１１０ｂに転送する。このとき、ストレージ装置１００は、ＤＭＡ１１４ａによって、キャッシュ領域１１２ａ２における、書き込みデータ４１０が記憶されている記憶領域と異なるとともに、空いている記憶領域に書き込みデータ４２０を書き込む。ＣＭ１１０ｂに転送された書き込みデータ４２０は、ＤＭＡ１１４ｂによりキャッシュ領域１１２ｂ２に書き込まれる。これにより、書き込みデータ４２０が、ＣＭ１１０ａ，１１０ｂにおいて２重化される。
【００９８】
図１３は、第２の実施の形態の先の書き込みデータと後の書き込みデータとを結合した結合データを記憶デバイスに書き込む際の動作を示す図である。第２の実施の形態のストレージ装置１００は、図１１と同様、図１３に示すように、ホストコンピュータ３００と接続されているとともに、ＣＭ１１０ａ，１１０ｂ、記憶デバイス１２０ａ〜１２０ｄを有する。ＣＭ１１０ａは、ＣＰＵ１１１ａ、メモリ１１２ａ、デバイスインタフェース１１３ｃ、ＤＭＡ１１４ａ、チャネルアダプタ１１５ｃを有する。ＣＭ１１０ｂは、ＣＰＵ１１１ｂ、メモリ１１２ｂ、デバイスインタフェース１１３ｅ、ＤＭＡ１１４ｂ、チャネルアダプタ１１５ｅを有する。メモリ１１２ａは、バッファ領域１１２ａ１、キャッシュ領域１１２ａ２を有する。メモリ１１２ｂは、バッファ領域１１２ｂ１、キャッシュ領域１１２ｂ２を有する。
【００９９】
図１３に示すように、ストレージ装置１００は、図１２に示した状態で、ＤＭＡ１１４ａによって、キャッシュ領域１１２ａ２の書き込みデータ４１０，４２０の結合を実行し、結合データ４３０を生成したものとする。このときストレージ装置１００は、結合処理１または結合処理２によって書き込みデータ４１０の一部である差分データ４１１および書き込みデータ４２０を有する結合データ４３０を生成する。ストレージ装置１００は、書き込みデータ４２０のＣＭ１１０ｂへの転送および書き込みデータ４１０，４２０の結合の完了後、ホストコンピュータ３００に対して書き込みデータ４２０の書き込みを応答する。また、このときＣＭ１１０ｂにおいても、ＤＭＡ１１４ｂにより、キャッシュ領域１１２ｂ２の書き込みデータ４１０，４２０の結合が実行され、結合データ４３０が生成される。これにより、結合データ４３０が、ＣＭ１１０ａ，１１０ｂにおいて２重化される。また、ストレージ装置１００は、所定の契機に基づいて、ＣＰＵ１１１ａおよびデバイスインタフェース１１３ｃによって、キャッシュ領域１１２ａ２に記憶されている結合データ４３０を用いて、記憶デバイス１２０ａ〜１２０ｄの更新対象のデータを更新する。これにより、差分データ４１１による更新（書き込みデータ４１０の更新）および書き込みデータ４２０による更新が、記憶デバイス１２０ａ〜１２０ｄの更新対象のデータに反映される。所定の契機は、例えば、キャッシュ領域１１２ａ２の記憶量が所定の閾値や所定の比率を超えた場合、キャッシュ領域１１２ａ２の記憶量が所定の閾値や比率を超えた後、さらに所定の時間が経過した場合等、任意の条件で設定することができる。また、ストレージ装置１００内の処理に余裕が生じた場合等であってもよい。
【０１００】
図１４は、第２の実施の形態の更新判定処理を示すフローチャートである。第２の実施の形態のストレージ装置１００は、ＣＭ１１０ａが記憶デバイス１２０ａ〜１２０ｄに記憶される書き込みデータをホストコンピュータ３００から受信したものとする。この場合、受信した書き込みデータを一時的にバッファ領域１１２ａ１に書き込み、同一のデータを更新するデータが既にキャッシュ領域１１２ａ２に書き込まれているか否かを判定する更新判定処理を実行する。以下では、図１４に示す更新判定処理をフローチャートのステップ番号に沿って説明する。
【０１０１】
［ステップＳ１１］制御部１１６ａは、ホストコンピュータ３００から送信された書き込みデータを受信すると、受信した書き込みデータをバッファ領域１１２ａ１に書き込む。
【０１０２】
［ステップＳ１２］制御部１１６ａは、実行用領域１１２ａ３に記憶されているキャッシュ管理テーブル１１２ａ３１を参照して、更新対象のデータが少なくとも一部重複する書き込みデータがキャッシュ領域１１２ａ２に存在するか否かを判定する。重複する書き込みデータがキャッシュ領域１１２ａ２に存在すれば（ステップＳ１２  ＹＥＳ）、処理はステップＳ１３に進められる。一方、重複する書き込みデータがキャッシュ領域１１２ａ２に存在しなければ（ステップＳ１２  ＮＯ）、処理はステップＳ１４に進められる。
【０１０３】
［ステップＳ１３］制御部１１６ａは、ステップＳ１１でバッファ領域１１２ａ１に書き込んだ書き込みデータをキャッシュ領域１１２ａ２の空き領域に書き込んでエラーの有無を判定する書き込みエラー検出処理を実行する。書き込みエラー検出処理については、詳しくは図１５において後述する。その後、処理は終了する。
【０１０４】
［ステップＳ１４］制御部１１６ａは、ステップＳ１１でバッファ領域１１２ａ１に書き込んだ書き込みデータを、キャッシュ領域１１２ａ２の空き領域に書き込む。このとき、制御部１１６ａは、書き込みデータについて制御レジスタを設定する。キャッシュ領域１１２ａ２の空き領域に書き込まれたデータは、記憶デバイス１２０ａ〜１２０ｄに記憶されている対象データの更新に使用される。その後、処理は終了する。
【０１０５】
図１５は、第２の実施の形態の書き込みエラー検出処理を示すフローチャートである。第２の実施の形態のストレージ装置１００は、更新判定処理において同一対象を更新するデータがキャッシュ領域１１２ａ２に存在する場合、ＣＭ１１０ａのキャッシュ領域１１２ａ２の空き領域に書き込みデータを書き込む書き込みエラー検出処理を実行する。以下では、図１５に示す書き込みエラー検出処理をフローチャートのステップ番号に沿って説明する。
【０１０６】
［ステップＳ２１］制御部１１６ａは、ＣＭ１１０ａのキャッシュ領域１１２ａ２の空き領域に書き込みデータを書き込む。また、制御部１１６ａは、ＣＭ１１０ｂに書き込みデータを転送する。ＣＭ１１０ｂは、転送された書き込みデータを図示しないキャッシュ領域の空き領域に書き込む。ＣＭ１１０ｂに転送された書き込みデータは、ＣＭ１１０ａの書き込みデータと同様に処理される。
【０１０７】
［ステップＳ２２］制御部１１６ａは、ステップＳ２１における書き込みデータのキャッシュ領域１１２ａ２への書き込みにおいて、エラーが発生したか否かを判定する。エラーが発生していれば（ステップＳ２２  ＹＥＳ）、処理はステップＳ２４に進められる。一方、エラーが発生していなければ（ステップＳ２２  ＮＯ）、処理はステップＳ２３に進められる。
【０１０８】
［ステップＳ２３］制御部１１６ａは、ステップＳ１２で検出されたキャッシュ領域１１２ａ２に存在する同一対象を更新するデータと、ステップＳ２１でキャッシュ領域１１２ａ２に書き込んだ書き込みデータとを結合するデータ結合処理を実行する。データ結合処理については、詳しくは図１６において後述する。その後、処理は更新判定処理に復帰する。
【０１０９】
［ステップＳ２４］制御部１１６ａは、ステップＳ２１の書き込みにより発生したエラーに対する処理を行う。ここでは、制御部１１６ａは、エラーが発生した書き込みデータを物理的に消去または論理的に無効にして記憶領域を開放してもよい。また、制御部１１６ａは、ホストコンピュータ３００に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ３００は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。また、書き込みエラーが発生した場合、制御部１１６ａは、ＣＭ１１０ｂにおいて対応する書き込みにエラーが発生せず、結合が行われた場合には、結合データをＣＭ１１０ｂから取得してもよい。この場合、制御部１１６ａは、取得したデータで記憶デバイス１２０ａ〜１２０ｄの更新対象のデータを更新してもよい。その後、処理は更新判定処理に復帰する。
【０１１０】
図１６は、第２の実施の形態のデータ結合処理を示すフローチャートである。第２の実施の形態のストレージ装置１００は、書き込みエラー検出処理においてエラーが発生しなかった場合、データの書き込み量を比較し、書き込み量が少ない結合処理で先の書き込みデータおよび後の書き込みデータを結合するデータ結合処理を実行する。以下では、図１６に示すデータ結合処理をフローチャートのステップ番号に沿って説明する。
【０１１１】
［ステップＳ３１］制御部１１６ａは、書き込みデータについて制御レジスタを設定する。このとき、キャッシュ領域１１２ａ２に書き込まれる後の書き込みデータについて制御レジスタが設定される。なお、先の書き込みデータについては、更新判定処理のステップＳ１４において制御レジスタが設定されているものとする。
【０１１２】
［ステップＳ３２］制御部１１６ａは、結合量１および結合量２を算出する。結合量１は、後の書き込みデータを先の書き込みデータの記憶領域に書き込む結合処理１の実行時の書き込み量である。結合量２は、先の書き込みデータの差分を後の書き込みデータに付加する結合処理２の実行時の書き込み量である。
【０１１３】
ここで、結合量１および結合量２の算出方法について説明する。
結合量１は、キャッシュ領域１１２ａ２の先の書き込みデータが書き込まれている記憶領域に、後の書き込みデータが書き込んだ場合（結合処理１）の書き込み量である。このため、結合量１は、後の書き込みデータのサイズと等しいので、後の書き込みデータの書き込み時の制御レジスタ１１６ａ１のＤＭＡサイズで示すことができる。また、結合量１は、キャッシュ領域１１２ａ２の記憶領域に記憶されている書き込みデータのサイズから取得してもよい。
【０１１４】
結合量２は、キャッシュ領域１１２ａ２の後の書き込みデータが書き込まれている記憶領域に、先の書き込みデータにおける後の書き込みデータで更新されない差分を付加して書き込んだ場合（結合処理２）の書き込み量である。このため、結合量２は、先の書き込みデータの差分のデータ量である。結合量２は、例えば、以下に示す式（１）によって算出することができる。
【０１１５】
結合量２＝結合量２Ａ＋２Ｂ                                          …  （１）
ここで、結合量２Ａは、後の書き込みデータの制御レジスタ１１６ａ１の値および以下に示す式（２）〜（６）を用いて算出される。
【０１１６】
結合量２Ａ１＝マージ先頭アドレス−書き込みキャッシュ先頭アドレスＡ  …  （２）
結合量２Ａ２＝ＤＭＡ転送先アドレス−書き込みキャッシュ先頭アドレスＢ…  （３）
以下の式（４）が成立する場合、結合量２Ａは、後述する式（５）で算出されるものとする。また、式（４）が成立しない場合、結合量２Ａは、後述する式（６）で定義されるものとする。
【０１１７】
結合量２Ａ１＜結合量２Ａ２                                          …  （４）
結合量２Ａ＝結合量２Ａ２−結合量２Ａ１                              …  （５）
結合量２Ａ＝０                                                      …  （６）
また、結合量２Ｂは、後の書き込みデータの制御レジスタ１１６ａ１の値および以下に示す式（７）〜（１１）を用いて算出される。
【０１１８】
結合量２Ｂ１＝（書き込みキャッシュ先頭アドレスＡ＋書き込みキャッシュサイズ）−（マージ最終アドレス）                                                …  （７）
結合量２Ｂ２＝（書き込みキャッシュ先頭アドレスＢ＋書き込みキャッシュサイズ）−（ＤＭＡ転送先アドレス＋ＤＭＡサイズ）                                …  （８）
ここで、以下の式（９）が成立する場合、結合量２Ｂは、後述する式（１０）で算出されるものとする。また、式（９）が成立しない場合、結合量２Ｂは、後述する式（１１）で定義されるものとする。
【０１１９】
結合量２Ｂ１＜結合量２Ｂ２                                          …  （９）
結合量２Ｂ＝（マージ最終アドレス−書き込みキャッシュ先頭アドレスＡ）−（ＤＭＡ転送先アドレス＋ＤＭＡサイズ）−書き込みキャッシュ先頭アドレスＢ（＝結合量２Ｂ２−結合量２Ｂ１）                                                    …  （１０）
結合量２Ｂ＝０                                                    …  （１１）
［ステップＳ３３］制御部１１６ａは、ステップＳ３２の算出結果に基づき、結合量１および結合量２の大小を比較する。結合量２が結合量１以上であれば（ステップＳ３３  ＹＥＳ）、処理はステップＳ３４に進められる。一方、結合量２が結合量１未満であれば（ステップＳ３３  ＮＯ）、処理はステップＳ３５に進められる。
【０１２０】
［ステップＳ３４］制御部１１６ａは、後の書き込みデータで先の書き込みデータを上書きする結合処理１を実行する。その後、処理は書き込みエラー検出処理に復帰する。
［ステップＳ３５］制御部１１６ａは、先の書き込みデータの差分を後の書き込みデータに付加する結合処理２を実行する。その後、処理は書き込みエラー検出処理に復帰する。
【０１２１】
以上のような第２の実施の形態のストレージ装置１００は、先の書き込みデータの更新時に、先の書き込みデータがエラーを有する後の書き込みデータで更新されることを抑止することができる。
【０１２２】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理１により、先の書き込みデータに後の書き込みデータを上書きすることができる。これにより、後の書き込みデータのサイズが先の書き込みデータの差分のサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置１００の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【０１２３】
また、先の書き込みデータおよび後の書き込みデータを結合する際に、結合処理２により、後の書き込みデータに先の書き込みデータの差分を付加することができる。これにより、先の書き込みデータの差分のサイズが後の書き込みデータのサイズよりも小さい場合には、結合量を抑制することができる。従って、ストレージ装置１００の負荷を抑制でき、結合によるエラーの発生の確率を抑制することができる。
【０１２４】
また、結合量１および結合量２を算出し、比較結果に基づいて結合処理１および結合処理２のうちの書き込み量が少ない方を選択して実行する。これにより、結合処理１および結合処理２のうち、書き込み量が少ない処理を実行できるので、ストレージ装置１００の負荷や書き込み処理によるエラー発生の確率の増加を抑制できる。
【０１２５】
また、チャネルアダプタ１１５ｃによりキャッシュ領域１１２ａ２に書き込まれる書き込みデータに予めチェックコードを付加し、制御部１１６ａがチェックコードに基づいてエラーの発生の有無を判定する。これにより、制御部１１６ａは、キャッシュ領域１１２ａ２への書き込みの際の間のエラーの発生の有無を判定できる。
【０１２６】
また、先の書き込みデータおよび後の書き込みデータの結合データによって記憶デバイス１２０ａ〜１２０ｄの更新対象データを更新するので、記憶デバイス１２０ａ〜１２０ｄへの書き込み回数を削減でき、ストレージ装置１００の負荷の増加を抑制できる。
【０１２７】
また、ＣＭ１１０ｂにおいてもＣＭ１１０ａにおいて同様の処理等による結合を行うことで、結合されるデータ２重化によりＣＭ１１０ａにおいてエラーの発生時等に対処可能になる。
【０１２８】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、結合せずに後の書き込みデータを削除するので、先の書き込みデータを保持でき、先の書き込みデータを再送しなくてもよいので、ストレージ装置１００の負荷の増加を抑制できる。
【０１２９】
また、後の書き込みデータの書き込み時に書き込みエラーが発生した場合には、エラーの発生をホストコンピュータ３００に通知するので、ホストコンピュータ３００から後の書き込みデータが再送される。これにより、ストレージ装置１００やホストコンピュータ３００の処理の遅延を抑制することができる。
［第２の実施の形態の変形例］
次に、第２の実施の形態の変形例を説明する。第２の実施の形態との差異を中心に説明し、同様の事項については説明を省略する。第２の実施の形態の変形例のストレージ装置は、書き込みエラー検出処理においてエラーが発生したと判定された場合、他のＣＭでエラーが発生していなければ、当該ＣＭから結合したデータを取得する点で、第２の実施の形態と異なる。
【０１３０】
図１７は、第２の実施の形態の変形例におけるエラー発生処理を示すフローチャートである。第２の実施の形態の変形例では、ストレージ装置１００は、書き込みエラー検出処理においてエラーが発生したと判定された場合に、他のＣＭでエラーが発生していなければ、当該ＣＭから結合したデータを取得するエラー発生処理を実行する。以下では、図１７に示すエラー発生処理をフローチャートのステップ番号に沿って説明する。
【０１３１】
［ステップＳ４１］制御部１１６ａは、ＣＭ１１０ｂにおいてキャッシュ領域１１２ａ２の空き領域に書き込みデータを書き込む際におけるエラーの発生の有無を取得する。
［ステップＳ４２］制御部１１６ａは、ステップＳ４１において取得した取得結果に基づいて、ＣＭ１１０ｂにおける書き込みでエラーが発生したか否かを判定する。エラーが発生していれば（ステップＳ４２  ＹＥＳ）、処理はステップＳ４４に進められる。一方、エラーが発生せず、ＣＭ１１０ｂでデータの結合が行われていれば（ステップＳ４２  ＮＯ）、処理はステップＳ４３に進められる。
【０１３２】
［ステップＳ４３］制御部１１６ａは、ＣＭ１１０ｂから結合データを取得し、取得したデータをキャッシュ領域１１２ａ２に書き込む。書き込まれたデータは、ＣＭ１１０ａに接続されている記憶デバイス１２０ａ〜１２０ｄに記憶されている更新対象のデータの更新に使用される。その後、処理は終了する。
【０１３３】
［ステップＳ４４］制御部１１６ａは、書き込みエラー検出処理で検出され、かつ、ＣＭ１１０ｂで書き込まれたデータのエラーに対する処理を行う。ここでは、制御部１１６ａは、前述した書き込みデータを削除または論理的に無効にして記憶領域を開放してもよい。また、制御部１１６ａは、ホストコンピュータ３００に対して書き込みデータのエラーを通知してもよい。ホストコンピュータ３００は、エラーの通知に基づいて、書き込みデータおよび書き込み指示を再送してもよい。その後、処理は更新判定処理に復帰する。
【０１３４】
以上のような第２の実施の形態の変形例のストレージ装置１００は、第２の実施の形態と同様の効果に加えて、ＣＭ１１０ａで後の書き込みデータの書き込みでエラーが発生した場合にも、ＣＭ１１０ｂで結合された結合データを取得できる。これにより、ＣＭ１１０ａで後の書き込みデータの書き込みでエラーが発生した場合に、ＣＭ１１０ｂでエラーが発生していなければ、ＣＭ１１０ｂによる結合データで記憶デバイス１２０ａ〜１２０ｄのデータを更新できる。
【０１３５】
以上、開示のストレージ装置、制御装置およびストレージ装置制御方法を、図示の実施の形態に基づいて説明したが、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、開示の技術に他の任意の構成物や工程が付加されてもよい。また、開示の技術は前述した実施の形態のうちの任意の２以上の構成を組み合わせたものであってもよい。
【０１３６】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、開示の技術は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【０１３７】
以上の第１の実施の形態、第２の実施の形態および第２の実施の形態の変形例に関し、さらに以下の付記を開示する。
（付記１)  第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記第１の記憶領域とは異なる第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第１のデータと前記第２のデータとを結合する制御部を有することを特徴とするストレージ装置。
【０１３８】
（付記２)  前記制御部は、前記書き込みエラーが発生していないときには、前記第２のデータに、前記第１のデータにおける更新部分以外の差分を付加して結合することを特徴とする付記１記載のストレージ装置。
【０１３９】
（付記３)  前記制御部は、前記書き込みエラーが発生していないときには、前記第１のデータを前記第２のデータで更新して結合することを特徴とする付記１記載のストレージ装置。
【０１４０】
（付記４)  前記制御部は、前記書き込みエラーが発生していないときには、前記第１の記憶領域に前記第２のデータを書き込む第１の結合処理を実行した場合の第１の書き込み量と、前記第２の記憶領域に前記第１のデータにおける更新部分以外の差分を書き込む第２の結合処理を実行した場合の第２の書き込み量とを比較し、比較結果に基づいて、前記第１の結合処理または前記第２の結合処理のいずれかを選択し、前記選択した処理を実行することを特徴とする付記１記載のストレージ装置。
【０１４１】
（付記５)  前記第２の記憶領域に書き込まれる前記第２のデータにチェックコードを付加する付加部を有し、
前記制御部は、前記第２の記憶領域に前記第２のデータを書き込む際に前記付加されたチェックコードに基づいて前記書き込みエラーの発生の有無を判定することを特徴とする付記１記載のストレージ装置。
【０１４２】
（付記６)  記憶部を有し、
前記第１のデータは、対応するデータの少なくとも一部である第１の部分を更新するデータであり、
前記第２のデータは、前記対応するデータの少なくとも一部である第２の部分を更新するデータであり、
前記制御部は、結合したデータにより、前記記憶部に記憶されている前記第１のデータおよび前記第２のデータと対応する前記データを更新することを特徴とする付記１記載のストレージ装置。
【０１４３】
（付記７)  第１の制御部と、
前記第１の制御部との間でデータ転送可能な第２の制御部と、
を有し、
前記第１の制御部は、前記第２の制御部に対して前記第１のデータと前記第２のデータとを送信し、
前記第２の制御部は、前記送信された前記第１のデータと前記第２のデータとを結合する、
ことを特徴とする付記１記載のストレージ装置。
【０１４４】
（付記８)  前記制御部は、前記書き込みエラーが発生したときには、前記第１のデータと前記第２のデータとを結合せずに前記第２のデータを削除することを特徴とする付記１記載のストレージ装置。
【０１４５】
（付記９)  前記制御部は、前記書き込みエラーが発生したときには、前記書き込みエラーの発生を通知することを特徴とする付記１記載のストレージ装置。
（付記１０)  前記第１の制御部は、前記書き込みエラーが発生したときには、前記第２の制御部で結合されたデータを取得することを特徴とする付記７記載のストレージ装置。
【０１４６】
（付記１１)  前記制御部は、前記比較結果に基づいて、前記第１の結合処理または前記第２の結合処理のうちの書き込み量が少ない方を選択し、前記選択した処理を実行することを特徴とする付記４記載のストレージ装置。
【０１４７】
（付記１２）  前記対応するデータは、前記第１のデータによる更新の後に前記第２のデータによる更新が行われ、かつ、前記第１の部分と、前記第２の部分との少なくとも一部が重複することを特徴とする付記６記載のストレージ装置。
【０１４８】
（付記１３）前記第１の記憶領域と前記第２の記憶領域とを含む複数の記憶領域を有するキャッシュ部と、
前記キャッシュ部が有する記憶領域が空き領域であるか否かを示す管理情報を記憶する管理情報記憶部と、
を有し、
前記制御部は、前記キャッシュ部の記憶領域が空き領域であるか否かを判定し、判定結果に基づいて前記第２の記憶領域を選択することを特徴とする付記１記載のストレージ装置。
【０１４９】
（付記１４)  第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記第１の記憶領域とは異なる第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、前記書き込みエラーが発生していないときには、前記第１のデータと前記第２のデータとを結合し、前記結合したデータにより、記憶部に記憶されている前記第１のデータおよび前記第２のデータと対応するデータを更新する制御部を有することを特徴とする制御装置。
【０１５０】
（付記１５)  第１の記憶領域に記憶されている第１のデータの少なくとも一部を第２のデータの少なくとも一部によって更新する場合、前記第２のデータを前記第１の記憶領域とは異なる第２の記憶領域に書き込むとともに書き込みエラーの発生の有無を判定し、
前記書き込みエラーが発生していないときには、前記第１のデータと前記第２のデータとを結合する、
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【０１５１】
１  ストレージ装置
１１  制御部
１２ａ，１２ｂ  記憶領域
２ａ，２ｂ，２ｃ  データ
２ａ１  更新部分
２ａ２  差分
【図１】
0005760556.tif 000002
【図２】
0005760556.tif 000003
【図３】
0005760556.tif 000004
【図４】
0005760556.tif 000005
【図５】
0005760556.tif 000006
【図６】
0005760556.tif 000007
【図７】
0005760556.tif 000008
【図８】
0005760556.tif 000009
【図９】
0005760556.tif 000010
【図１０】
0005760556.tif 000011
【図１１】
0005760556.tif 000012
【図１２】
0005760556.tif 000013
【図１３】
0005760556.tif 000014
【図１４】
0005760556.tif 000015
【図１５】
0005760556.tif 000016
【図１６】
0005760556.tif 000017
【図１７】
0005760556.tif 000018