(57)【特許請求の範囲】
【請求項１】
ユーザデータを内部で転送するストレージシステムであって、
第一の転送エンジンと、第二の転送エンジンと、第一の記憶デバイスと、第二の記憶デバイスと、プロセッサと、前記プロセッサと異なるデバイスである転送シーケンサと、を含み、
前記プロセッサは、ユーザデータの転送手順を示す転送シーケンス情報を作成し、
前記転送シーケンス情報は、前記ユーザデータの各転送を特定する転送先及び転送元の識別情報、前記転送先、前記転送元での前記ユーザデータの格納アドレス情報、及び転送エンジンの識別情報を含む転送パラメータと、前記ユーザデータの転送の順序を示す情報と、を含み、
前記転送シーケンサは内蔵プロセッサを含み、前記内蔵プロセッサの動作周波数は、前記プロセッサの動作周波数よりも低く、
前記転送シーケンサは、前記プロセッサが作成した前記転送シーケンス情報を受信し、当該転送シーケンス情報に従って、前記第一及び第二の転送エンジンを制御し、
前記第一の転送エンジンは、前記転送シーケンサの指示に従って、受信したユーザデータを前記第一の記憶デバイスに転送し、
前記第一の記憶デバイスは、前記転送されたユーザデータを格納し、
前記第二の転送エンジンは、前記転送シーケンサの指示に従って、前記第一の記憶デバイスの前記ユーザデータを、前記第二の記憶デバイスに転送し、
前記第二の記憶デバイスは、前記転送されたユーザデータを格納する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記プロセッサは、前記転送シーケンス情報に従った転送の開始前に、前記第一及び第二の記憶デバイスの記憶領域を確保し、
前記転送シーケンス情報に従った転送が終了した後に、前記確保した記憶領域を解放する、ストレージシステム。
【請求項３】
請求項１又は２に記載のストレージシステムであって、
第二の転送シーケンサ、第三の転送エンジン及び第三のデータ記憶デバイスをさらに含み、
前記転送シーケンサ並びに前記第一及び第二の転送エンジンは、第一の基板上に配置されており、
前記第二の転送シーケンサ及び前記第三の転送エンジンは、第二の基板上に配置されており、
前記第一及び第二の基板は内部ネットワークを介して接続し、
前記プロセッサは、前記ユーザデータの転送のために、第二の転送シーケンス情報を生成し、
前記第二の転送シーケンサは、前記第二の転送シーケンス情報を受信し、当該第二の転送シーケンス情報に従って前記第三の転送エンジンを制御する、ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記転送シーケンサは、前記転送シーケンス情報に従ったユーザデータ転送の正常終了後に、前記転送シーケンス情報に従って前記第二の転送シーケンサを起動し、
起動された前記第二の転送シーケンサの指示に従って、前記第三の転送エンジンは、前記第二の記憶デバイスの前記ユーザデータを、前記第三の記憶デバイスに転送し、
前記第三の記憶デバイスは、前記転送されたユーザデータを格納する、ストレージシステム。
【請求項５】
請求項１〜４のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、予め設定されている基準に従って、前記ユーザデータの内部転送において前記転送シーケンサを使用するか否かを判定する、ストレージシステム。
【請求項６】
請求項１〜５のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、前記ユーザデータの格納位置が複数の記憶デバイスに分かれる内部転送において、前記転送シーケンサの不使用を決定する、ストレージシステム。
【請求項７】
請求項１〜６のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、前記ユーザデータの格納領域が不連続の領域で構成されている内部転送において、前記転送シーケンサの不使用を決定する、ストレージシステム。
【請求項８】
請求項１〜７のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、内部転送する前記ユーザデータのデータ長と、前記第一の記憶デバイス及び第二の記憶デバイスの少なくとも一方における空き容量とを比較して、前記転送シーケンサを使用するいか否かを決定する、ストレージシステム。
【請求項９】
請求項１〜８のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、複数処理のアクセスが存在する前記ユーザデータの内部転送において、前記転送シーケンサの不使用を決定する、ストレージシステム。
【請求項１０】
請求項１〜９のいずれか一項に記載のストレージシステムであって、
前記プロセッサは、当該プロセッサの負荷及び／又は前記転送シーケンサの負荷に基づいて、前記転送シーケンサの使用の有無を決定する、ストレージシステム。
【請求項１１】
請求項１〜１０のいずれか一項に記載のストレージシステムであって、
前記転送シーケンサは、前記第一及び第二の転送エンジンのそれぞれに、前記転送先及び転送元での前記ユーザデータの格納アドレス情報及び前記ユーザデータのデータ長を通知し、
前記転送シーケンサは、前記第一及び第二の転送エンジンのそれぞれからの、転送の正常終了／非正常終了を示すステータスを受信し、
前記転送シーケンサは、受信したステータスが正常終了を示す場合に、次のデータ転送を起動する、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関し、特に、ストレージシステム内でのデータ転送制御に関する。
【背景技術】
【０００２】
複数の磁気ディスクドライブ又はフラッシュメモリドライブから構成されるディスクアレイでサブシステムを構成し、データをディスクアレイに格納する、いわゆるストレージシステムが知られている。
【０００３】
例えば、米国特許出願公開２００７／２０１４３４号明細書（特許文献1）に示されるように、ストレージシステムは、ホストコンピュータと接続するためのホストインタフェース、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、それらドライブと通信するためのディスクインタフェース、アクセスを高速化するためにデータを一時的に格納するためのキャッシュメモリ、そして、ホストコンピュータからのアクセス要求を受けてデータ転送制御を行うプロセッサを含んで構成される。
【０００４】
大規模なストレージシステムは、例えば、合計で約２０００台のディスクドライブ、約２００ポートのホストコンピュータ向け外部インタフェース、約１ＴＢのキャッシュメモリ容量を持つ。
【０００５】
このような大規模ストレージシステムは、例えば、“IBM System Storage DS8700 Architecture and Implementation, IBM Corporation, August 2010“（非特許文献１）に開示されるシステムのように、ディスクドライブからホストコンピュータへのデータ転送において、バッファメモリを用いる場合がある。
例えば、大規模ストレージシステムは、ディスクドライブから読み込んだユーザデータをホストコンピュータへ転送するまでの間に、キャッシュメモリに加え、ディスクインタフェースやホストインタフェースのバッファにデータを格納する。これにより、ディスクインタフェース、ホストインタフェース等の回路の動作を互いに独立させることができ、システム全体のスループットを向上させることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開２００７／２０１４３４号明細書
【非特許文献】
【０００７】
【非特許文献１】IBM System Storage DS8700 Architecture and Implementation, IBM Corporation, August 2010
【発明の概要】
【発明が解決しようとする課題】
【０００８】
このようなストレージシステムは、ホストコンピュータからの要求に対し、内部でユーザデータの複数回の転送を行う必要がある。ストレージシステム内のプロセッサは、ホストコンピュータからのコマンド（リードコマンド又はライドコマンド）に応じて、これら複数回のデータ転送を制御する。このため、ホストコンピュータからのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求（リードコマンド又はライドコマンド）に対して、システム内のデータ転送のためにプロセッサが複数回介在することになり、プロセッサの負荷が大きくなる。
【課題を解決するための手段】
【０００９】
本発明の一態様は、ユーザデータを内部で転送するストレージシステムであって、第一の転送エンジンと、第二の転送エンジンと、第一の記憶デバイスと、第二の記憶デバイスと、プロセッサと、上記プロセッサと異なるデバイスである転送シーケンサと、を含む。上記プロセッサは、ユーザデータの転送手順を示す転送シーケンス情報を作成する。上記転送シーケンサは、上記プロセッサが作成した上記転送シーケンス情報を受信し、当該転送シーケンス情報に従って、上記第一及び第二の転送エンジンを制御する。上記第一の転送エンジンは、上記転送シーケンサの指示に従って、受信したユーザデータを上記第一の記憶デバイスに転送する。上記第一の記憶デバイスは、上記転送されたユーザデータを格納する。上記第二の転送エンジンは、上記転送シーケンサの指示に従って、上記第一の記憶デバイスの上記ユーザデータを、上記第二の記憶デバイスに転送する。上記第二の記憶デバイスは、上記転送されたユーザデータを格納する。
【発明の効果】
【００１０】
本発明の一態様は、ホストコンピュータから受けたＩ／Ｏ要求に対して必要なプロセッサの介在回数を低減することができる。このため、Ｉ／Ｏ処理に必要なプロセッサ処理時間を削減することができる。特に、大規模なストレージにおいてＩ／Ｏ処理の効率化し、ストレージシステムの性能を向上する効果が大きい。上記以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１１】
【図１】第一の実施形態のストレージシステムを含むコンピュータシステムの一例を示すブロック図である。
【図２】第一の実施形態において、リード要求を受けたストレージコントローラがドライブからホストコンピュータにデータを転送する際の、ストレージコントローラ内のデータ転送手順、及び、転送シーケンサ及びプロセッサの役割分担の一例を示す。
【図３】第一の実施形態のストレージシステムにおいて、ストレージコントローラで行うデータ転送の一例を示すシーケンス図である。
【図４】第一の実施形態において、プロセッサが転送シーケンサに送信する転送シーケンスの一例を示す。
【図５】第一の実施形態において、転送シーケンサがプロセッサに送信する転送シーケンス実行結果の一例を示す。
【図６】第一の実施形態において、転送シーケンサが転送エンジンに送信する転送コマンドの一例を示す。
【図７】第一の実施形態において、転送エンジンが転送コマンドの処理を終了する際に出力する転送ステータスの一例を示す。
【図８】第一の実施形態において、ホストコンピュータからコマンドを受領した際の、プロセッサの処理内容の一例を示すフローチャートである。
【図９】第一の実施形態において、転送シーケンサの構成の一例を示す。
【図１０】第一の実施形態において、シーケンス追跡テーブルの一例を示す。
【図１１】第一の実施形態において、転送シーケンサが行う処理の一例を示すフローチャートである。
【図１２】第二の実施形態において、Ｉ／Ｏ要求に対してプロセッサが行うＩ／Ｏ処理の一例を示すフローチャートである。
【図１３】第二の実施形態において、転送シーケンサを使ったリードヒット処理又は転送シーケンサを使わないリードヒット処理における転送エンジンが行うデータ転送処理の内容を示す。
【図１４】第二の実施形態において、転送シーケンサを用いたリードヒット処理の一例を示すフローチャートである。
【図１５】第二の実施形態において、転送シーケンサを用いないリードヒット処理の一例を示すフローチャートである。
【図１６】第二の実施形態において、転送シーケンサを使ったリードミス処理又は転送シーケンサを使わないリードミス処理における、転送エンジンが行うデータ転送処理の内容を示す。
【図１７】第二の実施形態において、転送シーケンサを用いたリードミス処理の一例を示すフローチャートである。
【図１８】第二の実施形態において、転送シーケンサを用いないリードミス処理の一例を示すフローチャートである。
【図１９】第二の実施形態において、転送シーケンサを使ったフロントエンドライト処理又は転送シーケンサを使わないフロントエンドライト処理における、転送エンジンが行うデータ転送処理の内容を示す。
【図２０】第二の実施形態において、転送シーケンサを用いたフロントエンドライト処理の一例を示すフローチャートである。
【図２１】第二の実施形態において、転送シーケンサを用いないフロントエンドライト処理の一例を示すフローチャートである。
【図２２】第二の実施形態において、ホストコンピュータから書き込まれ、キャッシュメモリに存在しているデータをドライブに書き込むデステージ処理の一例を示すフローチャートである。
【図２３】第二の実施形態において、転送シーケンサを使ったＲＡＩＤ１デステージ処理又は転送シーケンサを使わないＲＡＩＤ１デステージ処理における、転送エンジンが行うデータ転送処理の内容を示す。
【図２４】第二の実施形態において、転送シーケンサを使ったＲＡＩＤ１デステージ処理の一例を示すフローチャートである。
【図２５】第二の実施形態において、転送シーケンサを使わないＲＡＩＤ１デステージ処理の一例を示すフローチャートである。
【図２６】第二の実施形態において、転送シーケンサを使ったＲＡＩＤ５デステージ処理又は転送シーケンサを使わないＲＡＩＤ５デステージ処理における、転送エンジンが行うデータ転送処理の内容を示す。
【図２７】第二の実施形態において、転送シーケンサを用いたＲＡＩＤ５デステージ処理の一例を示すフローチャートである。
【図２８】第二の実施形態において、転送シーケンサを使わないＲＡＩＤ５デステージ処理の一例を示すフローチャートである。
【図２９】第二の実施形態において、データのステージを行うための転送シーケンスを生成するステージシーケンス生成処理の一例を示すフローチャートである。
【図３０】第二の実施形態において、データのデステージを行うための転送シーケンスを生成するデステージシーケンス生成処理の一例を示すフローチャートである。
【図３１】第二の実施形態において、転送シーケンサを用いないデステージ処理で用いられる、データのキャッシュメモリへのステージ処理の一例を示すフローチャートである。
【図３２】第二の実施形態において、転送シーケンサを用いないデステージ処理で用いられる、データのドライブへのデステージ処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
本発明は、ストレージシステムにおいて性能を向上させるための技術に関する。以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【００１３】
第一の実施形態
本実施形態は、従来のストレージシステムにおいてプロセッサが実施していた各データ内部転送の起動／終了の確認を自動化し、性能を向上させる方法の一実施形態である。以下、図面を用いて本実施形態の詳細について説明する。
【００１４】
図１は、本実施形態のストレージシステム１及びデータ処理及び演算を行うホストコンピュータ１２を含む、コンピュータシステムの一例を示す。ストレージシステム１は、ストレージコントローラ１１、そしてデータを記憶するドライブ１４を収容する筐体１３を有する。コンピュータシステムは、複数のホストコンピュータ１２を含むことができる。ストレージシステム１は、複数のドライブ筐体１３を含むことができる。
【００１５】
ドライブ筐体１３は、複数のドライブ１４を収容している。ドライブ１４は、典型的には、不揮発性の磁気ディスクを有するハードディスクドライブ（ＨＤＤ）又は不揮発半導体メモリ（例えばフラッシュメモリ）を搭載したＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）である。ドライブ１４は、ホストコンピュータ１２から送られたデータ（ユーザデータ）を格納する。複数のドライブ１４がＲＡＩＤ演算によるデータの冗長化を行うことで、１つのドライブ１４に障害が発生した場合のデータ消失を防ぐことができる。
【００１６】
ストレージコントローラ１１は、ホストコンピュータ１２と接続するためのフロントエンド基板２、ドライブ筐体１３（ドライブ１４）と接続するためのバックエンド基板３、キャッシュメモリ４２を搭載するキャッシュメモリ基板４１、内部処理を行うプロセッサ４４を搭載するプロセッサ基板４３、及びそれらを接続する内部ネットワーク４６を有する。図１に示すように、ストレージコントローラ１１は、典型的には、複数のフロントエンド基板２及び複数のバックエンド基板３を有する。
【００１７】
各フロントエンド基板２は、ホストコンピュータ１２との接続を行うためのホストインタフェースＬＳＩ２１、ストレージコントローラ１１内のデータ転送を行うためのデータ転送ＬＳＩ２２、及びホストコンピュータ１２とストレージコントローラ１１内部のデータ転送とを中継する（ユーザデータを一時的に記憶する）フロントエンドバッファ２５を有する。
【００１８】
データ転送ＬＳＩ２２は、フロントエンドバッファ２５とキャッシュメモリ４２との間のデータ転送を行うフロントエンドＤＭＡ２３、及びデータ転送の順序制御を行う転送シーケンサ２４を有する。ホストインタフェースＬＳＩ２１は、ホストコンピュータ１２とストレージコントローラ１１の通信に用いられるＦｉｂｒｅ  Ｃｈａｎｎｅｌ（ＦＣ）、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（ＦＣｏＥ）、ｉＳＣＳＩ等のプロトコルをストレージコントローラ１１内部で用いられるプロトコル、例えばＰＣＩ−Ｅｘｐｒｅｓｓに変換する機能を有する。
【００１９】
各バックエンド基板３は、ドライブ筐体１３との接続を行うためのドライブインタフェースＬＳＩ３１、ストレージコントローラ１１内のデータ転送を行うためのデータ転送ＬＳＩ３２、及びドライブ筐体１３とストレージコントローラ１１内部のデータ転送とを中継する（ユーザデータを一時的に記憶する）バックエンドバッファ３５を有する。
【００２０】
データ転送ＬＳＩ３２は、バックエンドバッファ３５とキャッシュメモリ４２との間のデータ転送を行うバックエンドＤＭＡ３３、データ転送の順序制御を行う転送シーケンサ３４、及びＲＡＩＤ５、ＲＡＩＤ６等のデータ冗長化におけるパリティ計算を行うパリティ生成器３６を有する。
【００２１】
ここで、ドライブインタフェースＬＳＩ３１は、ドライブ１４とストレージコントローラ１１との間の通信に用いられるＦｉｂｒｅ  Ｃｈａｎｎｅｌ（ＦＣ）、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）等のプロトコルをストレージコントローラ１１内部で用いられるプロトコル、例えばＰＣＩ−Ｅｘｐｒｅｓｓに変換する機能を有する。
【００２２】
キャッシュメモリ基板４１は、ホストコンピュータ１２から読み書きされるユーザデータを一時的に記憶するキャッシュメモリ４２を有する。プロセッサ基板４３は、ストレージコントローラ１１の制御を行うプロセッサ４４、及びプロセッサ４４が扱うデータやプログラムを格納するためのメモリ４５を有する。プロセッサ４４が扱うデータやプログラムは、ストレージコントローラ１１内の不揮発性メモリ（不図示）又はドライブ１４からロードされる。
【００２３】
以降では、データ転送を行うホストインタフェースＬＳＩ２１、フロントエンドＤＭＡ２３、バックエンドＤＭＡ３３、ドライブインタフェースＬＳＩ３１を総称してデータ転送エンジンと呼ぶ。また、フロントエンドバッファ２５、バックエンドバッファ３５、及びキャッシュメモリ４２を総称してデータ転送中継メモリ又は中継メモリと呼ぶ。キャッシュメモリ４２とバッファ２５、３５は、典型的には、半導体メモリのＲＡMであり、電源不供給時に記憶データが消える揮発性メモリデバイスである。
【００２４】
中継メモリは、ストレージシステムにおける最終的なデータの格納領域（本例においてドライブ１４内の記憶領域）とホストコンピュータ１２との間のユーザデータの転送において、ユーザデータを一時的に記憶する。データ転送エンジンは、中継メモリ間、中継メモリとホストコンピュータ１２（内の記憶領域）との間、若しくは中継メモリとドライブ１４との間においてデータを転送する。
【００２５】
図１は示していないが、ストレージコントローラ１１は、他のストレージシステムとの接続のための外部インタフェース基板を含むことができる。外部インタフェース基板は、例えば、外部インタフェースＬＳＩ、バッファそしてデータ転送ＬＳＩを含む。ストレージコントローラ１１は、外部インタフェース基板を介して、他のストレージシステムとの間でコマンド及びユーザデータを送受信する。外部インタフェース基板は、他のストレージシステムのバックエンド基板３、キャッシュメモリ基板４１及びフロンエンド基板２のいずれかと接続し、データを転送することができる。
【００２６】
図２は、ホストコンピュータ１２からのリード要求（Ｉ／Ｏ要求の一つ）を受け、ストレージコントローラ１１がドライブ１４からホストコンピュータ１２にデータを転送する際の、ストレージコントローラ１１内のデータ転送手順、及び、転送シーケンサ２４／３４、プロセッサ４４の役割分担の一例を示している。転送シーケンサ２４／３４は、転送シーケンサ２４又は３４の一方を示す。
【００２７】
図２において、転送シーケンサ２４、転送シーケンサ３４及びプロセッサ４４を示す矩形内の長円は、それぞれの回路が実行する処理を示している。図２に示すように、転送シーケンサ２４及び３４は同様の処理を行う。本実施形態において、プロセッサ４４とは別に転送シーケンサ２４、３４が与えられている。プロセッサ４４とは別のデバイスである転送シーケンサ２４、３４は、プロセッサ４４が特定の処理を実行している間に、それとは異なる処理を実行することができる。転送シーケンサ２４、３４は、プロセッサ４４から独立した別の回路であるが、同一のパッケージ又は同一チップ内に実装されていてもよい。
【００２８】
ドライブ１４に格納されているデータは、ドライブインタフェースＬＳＩ３１によって、バックエンドバッファ３５に読み込まれる。その後、バックエンドＤＭＡ３３は、そのデータをバックエンドバッファ３５からキャッシュメモリ４２に転送する。その後、フロントエンドＤＭＡ２３は、当該データをキャッシュメモリ４２からフロントエンドバッファ２５に転送し、最後に、ホストインタフェースＬＳＩ２１は、フロントエンドバッファ２５からホストコンピュータ１２に当該データを転送する。
【００２９】
プロセッサ４４は、ホストコンピュータ１２から送信されたデータ転送要求を解析する処理５１、データが格納されている場所（論理アドレス）を特定すると共に、一連の処理に必要なデータ転送エンジン及びデータ転送中継メモリを特定する転送パス決定処理５２、データ転送中継メモリ（内の領域）を必要に応じて確保するメモリ確保処理５３を行う。
【００３０】
プロセッサ４４は、さらに、転送元アドレス、転送先アドレス及び転送手順等を記述する転送シーケンスを作成する処理５４、転送シーケンサへ転送シーケンスを送信する転送シーケンス送信処理５５、転送シーケンスの実行結果を転送シーケンサから受信する転送シーケンス実行結果受信処理５６、及び、データ転送中継メモリ（内の領域）を必要に応じて解放するメモリ解放処理５７を行う。以下において、メモリ（バッファ及びドライブを含む）の確保及び解放は、そのメモリにおける記憶領域の確保及び解放である。
【００３１】
プロセッサ４４はプログラムに従って動作することでこれらの処理を実行し、これらの処理を実行する処理部（例えば転送要求解析処理部、転送パス決定処理部、メモリ確保処理部）として動作する。ストレージコントローラ１１は、これら処理部を含むコントローラである。
【００３２】
転送シーケンサ２４／３４は、一連のデータ転送の順序制御を行う。具体的には、直前のデータ転送が成功したかどうかを判定する処理６１、データ転送コマンドをデータ転送エンジンに送信する処理６２、データ転送エンジンから送られるデータ転送ステータスを受信する処理６３、及び、ある転送が終了した際に次の転送コマンドを探す次処理６４を行う。
【００３３】
転送シーケンサ２４／３４は、プログラム（命令コード）に従って動作するプロセッサで構成しても、ハードウェア論理回路で構成してもよい。一部の機能（処理）をプロセッサ（プログラム）により実装し、他の機能（処理）をハードウェア論理回路で実装してもよい。バグフィックスや設計変更のため、プログラムに従って動作するプロセッサにより転送シーケンサの機能（処理）を実現することが好ましい。
【００３４】
プロセッサ４４は計算を中心とした演算処理を得意としているが、コマンド送信及び受信処理といった、ストレージコントローラ１１内の他の回路（ハードウェアデバイス）との通信処理は、処理内容の割にプロセッサ４４の処理時間を消費する。また、プロセッサ４４は、他の回路からの通信を受けて次の処理を行う際、関連するデータを読み書きできるようにするコンテキストスイッチ動作を必要とする。
【００３５】
具体的には、プロセッサ４４は、それまで行っていた処理で使っていたスタック領域やローカル変数などのデータを待避し、他の回路との通信で受領したデータの処理に必要なデータをスタック領域やローカル変数に回復する。このため、一連の転送シーケンスの内容を予め転送シーケンサ２４、３４に送信し、転送シーケンサ２４、３４が転送シーケンスに記載された内容に従って各転送を（転送エンジンを使用して）行うことで、プロセッサ４４が各転送の監視、及び上記コンテキストスイッチを行う回数を削減することができる。
【００３６】
このため、一連の転送に要するプロセッサ４４の処理時間を大幅に削減することができる。一方、転送シーケンサ２４、３４の処理は予め指示された転送手順によってデータ転送をデータ転送エンジン２１、２３、３１、３３に指示し、転送結果を監視するのみであるので、複雑な処理を必要としない。
【００３７】
従って、転送シーケンサ２４、３４自体の処理能力は低くても問題とならない。好ましくは、転送シーケンサ２４、３４の内蔵プロセッサの動作周波数は、メインプロセッサ４４の動作周波数よりも低く、これによりコストを低減することができる。また、転送シーケンサ２４、３４が使用するメモリの容量は、プロセッサ４４が使用するメモリ４５の容量よりも小さくてよく、それによりコストを低減することができる。
【００３８】
図３は、本発明が適用されるストレージシステム１における、ストレージコントローラ１１が行うデータ転送の一例を示すシーケンス図である。本処理は、データ転送が必要となった際に行われる。データ転送が必要となるのは、例えばホストコンピュータ１２からデータ転送要求を受領した場合、キャッシュメモリ４２の容量不足を解消するためドライブ１４に書き込まれていないデータをドライブ１４に書き込む必要が生じた場合、若しくはドライブ１４の障害や障害からの復旧によりデータの冗長性を回復する必要が生じた場合などである。
【００３９】
本処理では、まず、プロセッサ４４が、ユーザデータの転送パスを決定する（５２）。具体的には、ユーザデータの一連の転送に用いる、データ転送シーケンサ、データ転送エンジン、データ転送中継メモリを決定する。例えば、ホストコンピュータ１２からライトコマンドを受信した際には、ライトコマンドが指定するユーザデータ（ライトデータ）の転送に用いる、ホストインタフェースＬＳＩ２１、フロントエンドＤＭＡ２３、及びデータの格納先キャッシュメモリ４２を決定する。
【００４０】
次に、プロセッサ４４は、データ転送に必要なメモリ資源を確保する（５３）。例えば、ホストコンピュータ１２からライトコマンドを受信した場合であれば、ホストコンピュータ１２に接続されているフロントエンド基板２上のフロントエンドバッファ２３及びキャッシュメモリ４２を確保する。
【００４１】
プロセッサ４４は、次に転送シーケンスを作成する（５４）。具体的には、転送シーケンスを構成する転送コマンド及びそのコマンドを処理するデータ転送エンジン、及びデータ転送コマンドの実行順序を記述したデータを作成する。プロセッサ４４は、転送シーケンサ２４、３４のそれぞれのデータ転送ための転送シーケンスを作成する。そして、作成したデータ転送シーケンスを、転送シーケンサ２４、３４のそれぞれに送信する（５５）。このように、転送シーケンスは、転送方法を規定する情報を含む。
【００４２】
転送シーケンスを受領した転送シーケンサ２４／３４は、転送シーケンス内から最初に実行すべき転送コマンド及びコマンドの送信先転送エンジンを抽出する。そして、転送シーケンサ２４／３４は、転送エンジンに対して転送コマンドを送信することで、データ転送実行を指示する（６２）。
【００４３】
転送シーケンサ２４／３４からデータ転送実行指示を受けたデータ転送エンジンは、指示された内容に従って、転送中継メモリ間、ホストコンピュータ１２と転送中継メモリとの間若しくはドライブ１４と転送中継メモリとの間のデータ転送を実行する。そして、データ転送が完了した場合、若しくは何らかのエラーによりデータ転送が失敗した場合、転送エンジンは、転送ステータスを転送シーケンサ２４／３４に送信する。
【００４４】
転送ステータスを受け取った（６３）転送シーケンサ２４／３４は、転送ステータスの内容を確認し、転送が成功したか失敗したかを判定する（６１）。そして、転送が成功していた場合、転送シーケンサ２４／３４は、予め受け取っている転送シーケンスから次の転送コマンド及びコマンドの送信先転送エンジンを求め（６４）、その転送エンジンに対し転送コマンドを送信する。
【００４５】
転送シーケンサ２４／３４（及び転送エンジン）は以上を繰り返し、該当するシーケンスが定義するデータ転送を全て行う。転送シーケンサ２４／３４は、正常終了後は、転送シーケンスに記載されている終了時の処理に応じて、メッセージを他の転送シーケンサ２４／３４、またはプロセッサ４４に送信する。
【００４６】
図３では、一方の転送シーケンサ２４／３４は、受信した転送シーケンスの処理完了後、他方の転送シーケンサ２４／３４に転送起動メッセージを送信する。転送起動メッセージを受領した転送シーケンサ２４／３４は、上述のように、予め受け取った転送シーケンスに従って転送を行う。転送シーケンサ２４／３４は、以上の工程を、予めプロセッサ４４が指示した全ての転送シーケンスが終了するまで繰り返す。
【００４７】
全ての転送シーケンスの処理が終了した場合、最後の転送シーケンスを実行した転送シーケンサ２４／３４が、プロセッサ４４に対して転送結果を送信する。そして、転送結果を受け取った（５６）プロセッサ４４は、確保したメモリ資源を解放する（５７）。
【００４８】
以上により、プロセッサ４４は、ユーザデータの転送途中での転送終了ステータスの確認や次の転送コマンドの送信を行う必要がなくなる。これにより、プロセッサ４４の処理量（データ転送における負荷）を減らすことができ、ストレージシステム１の処理能力を向上させることができる。
【００４９】
上述のように、好ましい構成において、プロセッサ４４は、一連のデータ転送の開始位置（初期位置）から最終位置までの一連のデータ転送の全てを規定する１又は複数のデータ転送シーケンス（データ）を作成し、それらを転送シーケンサ２４／３４に送信する。このように、必要とされるデータ転送における全ての転送工程を規定する１又は複数のデータ転送シーケンスを作成することで、転送開始から転送完了までのプロセッサ４４の関与をより小さくすることができる。
【００５０】
プロセッサ４４は、上述のように、好ましい構成において、開始位置（初期位置）からのデータ転送の開始前に、必要な全てのメモリ資源を確保し、作成した全てのデータ転送シーケンスに従った処理が完了した後に（ユーザデータが最終位置（最終記憶領域）に格納された後に）、確保したメモリ資源を解放する。これにより、データ転送完了までのプロセッサ４４の関与をより小さくすることができる。
【００５１】
設計によっては、プロセッサ４４は、各転送シーケンスの終了のステータスを受信し、その後、その次の転送シーケンスの実行を指示してもよい。さらに、プロセッサ４４は、各転送シーケンスの終了において、対応する確保したメモリ資源を解放してもよい。
【００５２】
図４は、プロセッサ４４が転送シーケンサ２４／３４に送信する転送シーケンス７１の一例を示している。シーケンスＩＤ７１０は、該当転送シーケンサ２４／３４が扱う複数のシーケンスを識別するための情報であり、プロセッサ４４が転送シーケンス７１を生成する際、他の転送シーケンス７１と重複しない値を設定する。
【００５３】
転送ＩＤ７１１は、転送シーケンス７１内の転送コマンドを識別するための情報である。転送エンジン７１２は、該当転送コマンドの送信先転送エンジンを示す情報である。この例において、１つ目のコマンドはドライブインタフェースＬＳＩ＃１（＃Ｎは同一種類の各デバイスの番号を示す）に、２つ目のコマンドはバックエンドＤＭＡ＃１に送信することを示している。転送コマンドの内容７３については、図６で詳述する。
【００５４】
シーケンス終了時処理内容７１４は、該当転送シーケンス７１が完了した際に行う処理内容を示す。このフィールド７１４が他シーケンスの起動を示す場合、該当転送シーケンサ２４／３４は、別の転送シーケンサに対し、転送シーケンス起動のメッセージを送信する。一方、このフィールドがプロセッサ４４へのメッセージ送信を示す場合、該当転送シーケンサ２４／３４は、プロセッサ４４に対し転送シーケンス実行結果を送信する。図４の例において、フィールド７１４は、転送シーケンス起動のメッセージ送信を示している。
【００５５】
送信先７１５は、メッセージの送信先を示す情報である。本例では、フロントエンドボード＃３の転送シーケンサ２４である。図４の例のように、シーケンス終了時処理内容７１４が他シーケンス起動を示す場合、当フィールドは、送信先転送シーケンサ２４／３４の識別子を示す。シーケンス終了時処理内容７１４がプロセッサ４４への転送シーケンス実行結果送信を示す場合、当フィールドは送信先プロセッサ４４の識別子を示す。シーケンスＩＤ７１６は、シーケンス終了時処理内容７１４が他シーケンス起動を示す場合に、次に起動するシーケンスの識別子を示す。
【００５６】
図４の転送シーケンス７１は一例であって、転送シーケンスは、どのようなデータ構造を有していてもよい。この点は、ストレージシステム１が使用する他の情報、例えば、後述の転送シーケンス結果７２やシーケンス追跡テーブル２４２等、に対しても同様である。例えば、本実施形態及び他の実施形態において、テーブル、リスト、データベース又はキューから適切に選択されたデータ構造体が、情報を格納することができる。
【００５７】
図５は、転送シーケンサ２４／３４がプロセッサ４４に送信する転送シーケンス実行結果７２の一例を示している。転送シーケンスＩＤ７２１は、転送シーケンス実行結果７２が、どの転送シーケンスに対応するかを示す情報である。転送コマンド実行結果７２２は、対応する転送シーケンスに含まれる各転送の成功／失敗を示す情報である。
【００５８】
エラー転送ステータスは、転送シーケンスに含まれる転送コマンドのいずれかが失敗した場合に、転送失敗した転送エンジン及びエラー種別を示す情報である。エラー転送ステータスにおけるエラー転送エンジン７２３は、転送エラーが発生した転送エンジンの識別子を示す。本例において、ホストインタフェース＃３を示す。そして、エラー転送ステータスにおけるエラーＩＤ７２４は、転送エラーが発生した転送エンジンが出力した、エラー種別を示す識別子である。
【００５９】
図６は、転送シーケンサ２４／３４が転送エンジンに送信する転送コマンド７３の一例を示している。エクスチェンジＩＤ７３１は、転送エンジン内で複数の転送コマンド７３を識別するための識別子である。転送元デバイス７３２は、該当転送コマンドが指示するデータ転送の転送元デバイスを示す情報である。
【００６０】
この例は、転送元がドライブインタフェース＃１のバッファであることを示している。転送元アドレス７３３は、転送されるべきデータが転送元デバイスの中のどの場所（領域）に格納されているかを示す論理アドレスである。同様に、転送先デバイス７３４、転送先アドレス７３５は、それぞれ、転送されるデータの転送先デバイス、転送先デバイス内での格納場所を示す情報である。転送長７３６は、該当転送コマンドで転送すべきデータの長さを示す情報である。
【００６１】
図７は、転送エンジンが転送コマンドの処理を終了する際に出力する転送ステータス７４の一例を示している。エクスチェンジＩＤ７４１は、該当転送ステータス７４が、どの転送コマンド７３に対応するかを示す情報である。転送結果７４２は、対応する転送コマンド７３の成功／失敗を示す情報である。そして、エラーＩＤ７４３は、転送が失敗していた場合に失敗の要因を示す識別子である。
【００６２】
図８は、ホストコンピュータ１２からコマンド（典型的にリードコマンド又はライトコマンド）を受領した際の、プロセッサ４４の処理の一例を示したフローチャートである。プロセッサ４４は、ホストコンピュータ１２からコマンドを受領すると、まず転送パスを決定する（Ｓ８１１１）。具体的には、プロセッサ４４は、転送元デバイス及び転送先デバイス、中継メモリ、そして利用する転送エンジンを決定する。そして、プロセッサ４４は、予め定められている基準に従って、転送シーケンサ２４／３４を使うか否かを判定する（Ｓ８１１２）。
【００６３】
例えば、プロセッサ４４に余力がある場合及び／又は転送シーケンサ２４／３４の稼働率が高く余力が無い場合、プロセッサ４４は、転送シーケンサ２４／３４を使わないと判定する。具体的には、プロセッサ４４は、プロセッサ４４及び／又は転送シーケンサ２４／３４の稼働率を参照して、転送シーケンサ２４／３４を使うか否かを決定する。
【００６４】
例えば、プロセッサ４４の稼働率が所定の閾値より小さい場合及び／又は転送シーケンサ２４／３４の稼働率が所定の閾値より大きい場合、転送シーケンサの能力不足により、性能向上効果が期待できない場合がある。そのため、プロセッサ４４は、転送シーケンサ２４／３４を使わないと判定する。２つの閾値の値は典型的には異なる。データ転送が転送シーケンサ２４、３４の双方の担当転送エンジンを含む場合、プロセッサ４４はその一方又は双方の使用の有無を決定する。
【００６５】
このほか、好ましい構成において、プロセッサ４４は、ホストコンピュータ１２からのＩ／Ｏコマンド（リードコマンド又はライトコマンド）を解析し、コマンドの対象ユーザデータ（リードデータ又はライトデータ）の格納位置に応じて、転送シーケンサ２４／３４の使用／不使用の判定を行う。
【００６６】
具体的には、対象ユーザデータの格納場所が異なる記憶デバイスである場合、全データを転送するためには、記憶デバイス毎に転送コマンドを作成し、これらを組み合わせなければならない場合がある。このような複雑なケースを全てサポートすると、転送シーケンサの構成が複雑になり、メモリも多く必要とする。これを避けるため、プロセッサ４４は、転送シーケンサ２４／３４を使用しないと決定する。１つの記憶デバイスは１つのアドレス空間で定義され、転送エンジンは、１つのアドレス空間において、１つの記憶デバイスが提供する記憶領域にアクセスする。異なる記憶デバイスは、異なるアドレス空間を提供する。一般にこのようなケースは少ないため、転送シーケンサ２４／３４を使わないことによる性能への影響は小さい。
【００６７】
例えば、ホストコンピュータ１２からのリードコマンドに対応する転送元（対象データの格納位置）が複数のキャッシュメモリ４２やドライブ１４に跨る場合、若しくは、ホストコンピュータ１２からのライトコマンドに対応する転送先（対象データの格納位置）が複数のキャッシュメモリ４２に跨る場合、プロセッサ４４は、転送シーケンサ２４／３４を使用しないと決定する。理由は複数の記憶デバイスにデータが跨る前述の場合と同様である。
【００６８】
さらに好ましくは、ユーザデータの転送元又は転送先が連続領域（論理アドレスが連続している領域）ではない（不連続領域である）場合、プロセッサ４４は、転送シーケンサ２４／３４を使用しないと決定する。理由は複数の記憶デバイスにデータが跨る前述の場合と同様である。このほか、転送長が大きく、中継メモリ上に連続した領域を確保できない場合、プロセッサ４４は、転送シーケンサ２４／３４を使用しないと決定することが好ましい。こちらも、理由は複数の記憶デバイスにデータが跨る前述の場合と同様である。
【００６９】
好ましい構成において、プロセッサ４４は、バッファ空き容量と転送データ長との関係に基づいて、転送シーケンサ２４／３４の使用／不使用を判定してもよい。プロセッサ４４は、フロントエンドバッファ２５やバックエンドバッファ３５の空き容量が転送長に対して十分では無い場合、例えば、それらの差が所定の閾値未満である場合に、転送シーケンサ２４／３４を使用しないと決定する。転送シーケンサを用いる場合バッファを長時間占有するため、このようにバッファを長時間確保することによる影響が大きい場合は、転送シーケンサを使わないようにすることで、バッファを有効活用することができる。この他、同一データへのアクセスが他に発生することが予想される場合、プロセッサ４４は、転送シーケンサ２４／３４を使わないと判定することが好ましい。一般にデータ転送を行う際、データの不整合を防ぐため、他のデータアクセスが発生しないよう排他を行う。このとき、転送シーケンサを用いると、長時間該当データへのアクセスを排他することになるため、他の処理を長時間待たせることになる。転送シーケンサを用いないようにすることで、排他する時間を細かく分割でき、他処理への影響を小さくすることができる。
【００７０】
これらの場合は、メモリ（ドライブの記憶媒体を含む）間の単純なデータ転送と異なる処理を必要とする。例えば、異なるキャッシュメモリデバイスへのデータの格納は、ホストコンピュータ１２から受信したユーザデータを複数の部分に分け、それぞれ異なるキャッシュメモリに格納することを必要とする。転送シーケンサ２４／３４の構成（処理）をシンプルなものとして設計容易とするため、プロセッサ４４が、これらの例外的処理を実行することが好ましい。
【００７１】
プロセッサ４４は、上記複数の判定基準のうちの予め設定されている１つ又は複数を参照し、転送シーケンサ２４／３４の使用の有無を判定することができる。複数の判定基準を使用する場合、典型的には、プロセッサ４４は、任意の１つの条件が不使用条件を満たす場合、転送シーケンサ２４／３４を使用することなくデータを転送する。プロセッサ４４は、転送シーケンサ２４／３４の使用／不使用判定を個別に行うことができる。又は、一方の転送シーケンサ２４／３４が不使用である場合、他方の転送シーケンサ２４／３４も不使用と判定してもよい。
【００７２】
転送シーケンサを使う場合、プロセッサ４４は、まず、転送パス上の全て中継メモリを確保する。つまり、プロセッサ４４は、転送パス上のフロントエンドバッファ２５、バックエンドバッファ３５、キャッシュメモリ４２等の中継メモリを確保する（Ｓ８１１３）。
【００７３】
次に、プロセッサ４４は、転送コマンド及び転送シーケンスを作成する（Ｓ８１１４）。具体的には、プロセッサ４４は、Ｓ８１１３で確保したメモリ領域が転送元／転送先になるように、Ｓ８１１１で決定した転送エンジンを用いる転送コマンドを作成する。そして、作成した転送コマンドを元に転送シーケンスを作成する。
【００７４】
次に、プロセッサ４４は、作成した転送シーケンスを転送シーケンサ２４及び／又は転送シーケンサ３４に送信し、転送開始位置の転送シーケンサに転送実行を指示する（Ｓ８１１５）。そして、プロセッサ４４は、最終転送位置の転送シーケンサからの応答を待ち（Ｓ８１１６）、最後にＳ８１１３で確保したバッファを解放して（Ｓ８１１７）処理を終了する。
【００７５】
一方、プロセッサ４４は、Ｓ８１１２で転送シーケンサ２４及び転送シーケンサ３４を用いないと判定した場合、転送シーケンサを使わずに各段階のデータ転送を一つずつ行う。具体的には、プロセッサ４４は、まず次のデータ転送に必要なメモリを確保する（Ｓ８１１８）。そして、次の転送に必要な転送コマンドを作成する（Ｓ８１１９）。
【００７６】
次に、プロセッサ４４は、作成した転送コマンドを転送エンジンに送信する（Ｓ８１２０）。転送エンジンからの転送ステータス送信を待つ（Ｓ８１２１）。転送ステータスが到着すると、プロセッサ４４は、転送の成功を確認し（Ｓ８１２２）、この転送に使われたバッファを解放する（Ｓ８１２３）。プロセッサ４４は、必要なデータ転送が全て行われたかどうかを判定し（Ｓ８１２４）、まだ残っている場合には（Ｓ８１２４：Ｎ）、プロセッサ４４はＳ８１１８に戻る。全て行われている場合には（Ｓ８１２４：Ｙ）、プロセッサ４４は処理を終了する。
【００７７】
図９は、転送シーケンサ２４の構成の一例である。転送シーケンサ２４は、図２に記載された処理を行うための内蔵プロセッサ２４１、実行中の転送シーケンスの進行状況を格納するシーケンス追跡テーブル２４２、転送シーケンスの内容を格納するシーケンステーブル２４３を有する。転送シーケンサ２４の機能の少なくとも一部は、内蔵プロセッサ２４１と異なる論理回路で実装してもよい。
【００７８】
転送シーケンサ２４は、例えば内蔵メモリを備え、そのメモリ内に内蔵プロセッサ２４１の実行するプログラム並びにシーケンス追跡テーブル２４２及びシーケンステーブル２４３を含むデータを格納する。転送シーケンサ２４は、バッファ２５を使用してもよい。これらデータ（プログラムを含む）は、ストレージコントローラ１１内の不揮発性メモリ（不図示）又はドライブ１４の不揮発性記憶領域からロードされる。尚、バックエンド基板３に搭載されている転送シーケンサ３４も、同様の構成及び機能を有する。
【００７９】
図１０は、シーケンス追跡テーブル２４２の一例である。シーケンス追跡テーブル２４２は、複数の転送シーケンスを識別するためのシーケンスＩＤ２４２１に対し、どの段階まで転送が進んだかを示す転送フェーズ２４２２を記憶するフィールドを有する。
【００８０】
図１１は、転送シーケンサ２４／３４が行う処理の一例を示したフローチャートである。転送シーケンサ２４／３４はこの処理を繰り返し行うことで、プロセッサ４４の代わりにデータ転送の順序制御を行う。
【００８１】
図１１のフローチャートに示すように、まず、転送シーケンサ２４／３４は、プロセッサ４４からの転送シーケンスを登録する。具体的には、まず、転送シーケンサ２４／３４は、転送シーケンスがプロセッサ４４から送信されたかどうかを確認する（Ｓ８２１１）。新しく転送シーケンスが到着していた場合（Ｓ８２１２：Ｙ）、転送シーケンサ２４／３４は、到着した転送シーケンスを転送シーケンステーブル２４３に追加する（Ｓ８２１３）。
【００８２】
転送シーケンサ２４／３４は、追加された転送シーケンスのうち、先頭の転送コマンドを転送シーケンスで指定された転送エンジンに送信する（Ｓ８２１４）。一方、Ｓ８２１２で転送シーケンスが到着していなかった場合、転送シーケンサ２４／３４は、そのままＳ８２１５に進む。次に、転送シーケンサ２４／３４は、ＤＭＡ２３／３３やインタフェースＬＳＩ２１／３１といった転送エンジンの制御を行う。
【００８３】
具体的には、まず、転送シーケンサ２４／３４は、転送エンジンからの転送ステータスが到着したかどうかを確認する（Ｓ８２１５）。ステータスが到着していない場合（Ｓ８２１６：Ｎ）、転送シーケンサ２４／３４は、処理を終了する。
【００８４】
ステータスが到着している場合には（Ｓ８２１６：Ｙ）、転送シーケンサ２４／３４は、ステータスの内容を解析し、該当する転送が成功したのか失敗したのかを確認する（Ｓ８２１７）。転送に成功していた場合は（Ｓ８２１８：Ｙ）、転送シーケンサ２４／３４は、シーケンス追跡テーブル２４２を基に、次に実行すべき転送コマンドを転送シーケンステーブル２４３から検索する（Ｓ８２１９）。
【００８５】
次のコマンドが存在する、即ち終了したデータ転送がシーケンスの最後でない場合（Ｓ８２２０：Ｎ）、転送シーケンサ２４／３４は、次のコマンドを転送シーケンスで指定された転送エンジンに送信する（Ｓ８２２１）。そして、転送シーケンス追跡テーブル２４２の実行中転送コマンドを、今回実行したコマンドに更新し（Ｓ８２２２）、処理を終了する。
【００８６】
一方、Ｓ８２２０において、今回完了したコマンドが最後のコマンドである場合（Ｓ８２２０：Ｙ）、転送シーケンサ２４／３４は、転送シーケンスに記載されたシーケンス終了時処理内容７１４を調べる（Ｓ８２２３）。Ｓ８２２３において、その処理内容が他シーケンス起動の場合、転送シーケンサ２４／３４は、指定された転送シーケンサに対してシーケンス起動メッセージを送信し（Ｓ８２２４）、処理を終了する。
【００８７】
一方、Ｓ８２２３において、シーケンス終了時処理内容７１４が、他シーケンス起動ではなく、プロセッサへのメッセージ（結果）の送信を示す場合、転送シーケンサ２４／３４は、転送シーケンス実行結果をプロセッサ４４に対し送信し（Ｓ８２２５）、処理を終了する。一方、Ｓ８２１８で、転送失敗が判明した場合も、転送シーケンサ２４／３４は、シーケンスの実行結果をプロセッサ４４に送信し、処理を終了する。
【００８８】
以上のように、転送シーケンサ２４／３４を設けることで、プロセッサ４４が転送シーケンサ２４／３４に予め転送シーケンスを送信し、転送シーケンサ２４／３４がプロセッサ４４からの指示に従って一連のデータ転送処理を行えるようになる。この結果、一連のデータ転送を行う際、データ転送毎（転送エンジンによる転送毎）にプロセッサ４４が介在する必要がなくなるため、プロセッサ４４の処理量が減少する。この結果、プロセッサ４４の他の処理能力が向上し、ストレージシステム１の性能向上を実現できる。
【００８９】
本実施形態において、転送シーケンサ２４、３４は異なる基板２、３上に実装されている。転送シーケンサ２４、３４は、それぞれの基板２、３において、その基板上に実装されている転送エンジンを制御する。
【００９０】
つまり、フロントエンド基板２上の転送シーケンサ２４は、フロントエンドＤＭＡ２３及びホストインタフェースＬＳＩ２１を制御する。一方、バックエンド基板３上の転送シーケンサ３４は、バックエンドＤＭＡ３３及びドライブインタフェースＬＳＩ３１を制御する。このように、転送シーケンサ２４／３４が、同一基板上の転送エンジンのみを制御することで、エラー箇所の特定を容易に行うことができる。設計によっては、転送シーケンサは、異なる基板上の転送エンジンを制御してもよい。
【００９１】
第二の実施形態
第二の実施形態は、ストレージコントローラ１１がホストコンピュータ１２からＩ／Ｏ要求（リードコマンド又はライトコマンド）を受け取った場合に、転送シーケンサ２４／３４を適宜活用してＩ／Ｏ要求を処理する例を示す。図１２は、ホストコンピュータ１２からストレージコントローラ１１がＩ／Ｏ要求を受け取った場合にプロセッサ４４が行うＩ／Ｏ処理のフローチャートの一例である。
【００９２】
プロセッサ４４は、ホストコンピュータ１２からＩ／Ｏ要求を受け取ると、まず、コマンドの種別を解析する（Ｓ８３１１）。コマンドの種別がリードコマンドの場合（Ｓ８３１１：ＲＥＡＤ）、プロセッサ４４は、要求されたデータがキャッシュメモリ４２上に存在するかを調べる（Ｓ８３１２）。
【００９３】
具体的には、プロセッサ４４は、キャッシュメモリ４２にどのデータが格納されているかを管理するキャッシュディレクトリを検索し、ホストコンピュータ１２から要求されたボリューム番号及びアドレスのデータが、キャッシュメモリ４２上に存在するか否かを調べる。
【００９４】
データがキャッシュメモリ４２上に存在する場合（Ｓ８３１２：Ｙ）、プロセッサ４４は、転送シーケンサ２４を用いるかどうかを判定する（Ｓ８３１３）。転送シーケンサ２４を用いる基準は、上述のように、要求されたデータがキャッシュメモリ４２上の連続領域に格納されているか、フロントエンドバッファ２５に十分な空きが存在するか、他に同一データにアクセスする処理が存在しないか等の一部又は全てを使用できる。
【００９５】
転送シーケンサ２４を使う場合（Ｓ８３１３：Ｙ）、プロセッサ４４は、転送シーケンサ２４を使ったリードヒット処理８４を行う。一方、転送シーケンサ２４を使わない場合（Ｓ８３１３：Ｎ）、プロセッサ４４は、転送シーケンサ２４を使わないリードヒット処理８５を行う。
【００９６】
一方、Ｓ８３１２において、キャッシュメモリ４２上に要求されたデータが存在しない場合（Ｓ８３１２：Ｎ）、プロセッサ４４は、転送シーケンサ２４及び３４を使うかどうかを判定する（Ｓ８３１６）。転送シーケンサ２４、３４を用いる基準は、ユーザデータがドライブ１４の連続領域に格納されているか、フロントエンドバッファ２５及びバックエンドバッファ３５に十分な空きが存在するか、他に同一データにアクセスする処理が存在しないか等の一部又は全てを使用できる。
【００９７】
転送シーケンサ２４及び３４を用いる場合（Ｓ８３１６：Ｙ）、プロセッサ４４は、転送シーケンサ２４及び３４を用いたリードミス処理８６を行う。一方、転送シーケンサ２４及び３４を用いないと決定した場合（Ｓ８３１６：Ｎ）、プロセッサ４４は、転送シーケンサ２４及び３４を用いないリードミス処理８７を実施する。
【００９８】
一方、Ｓ８３１１において、ホストコマンドの種別がライトコマンドの場合（Ｓ８３１３：ＷＲＩＴＥ）、プロセッサ４４は、転送シーケンサ２４を使うかどうかを判定する（Ｓ８３１９）。ここで、転送シーケンサ２４を用いる基準は、フロントエンドバッファ２５に十分な空きが存在するか、他に同一データにアクセスする処理が存在しないか、転送先キャッシュメモリ４２のアドレスが連続しているか等である。
【００９９】
転送シーケンサ２４を用いる場合（Ｓ８３１９：Ｙ）、プロセッサ４４は、転送シーケンサ２４を用いたフロントエンドライト処理８８を行う。一方、Ｓ８３１９において、転送シーケンサ２４を用いないと決定した場合（Ｓ８３１９：Ｎ）、プロセッサ４４は、転送シーケンサ２４を用いないフロントエンドライト処理８９を行う。
【０１００】
図１３は、転送シーケンサ２４を使ったリードヒット処理８４、或いは転送シーケンサ２４を使わないリードヒット処理８５における、転送エンジン（ホストインタフェースＬＳＩ２１、ＤＭＡ２３）が行うデータ転送処理の内容を示している。
【０１０１】
リードヒット処理８４／８５は、まず、フロントエンドＤＭＡ（ＦＥ  ＤＭＡ）２３による、キャッシュメモリ４２からフロントエンドバッファ（ＦＥ  ＢＵＦ．）２５へのデータ転送を行う。具体的には、フロントエンドＤＭＡ２３が、キャッシュメモリ４２に対し、リード要求を発行する。フロントエンドＤＭＡ２３は、キャッシュメモリ４２から応答されたデータを受け取り、それをフロントエンドバッファ２５に書き込む。
【０１０２】
次に、ホストインタフェースＬＳＩ２１が、フロントエンドバッファ２５からホストコンピュータ１２へデータを転送する。具体的には、ホストインタフェースＬＳＩ２１がフロントエンドバッファ２５に対しリード要求を発行する。そして、ホストインタフェースＬＳＩ２１は、フロントエンドバッファ２５から応答されたデータを受け取り、ホストコンピュータ１２に返送する。
【０１０３】
図１４は、転送シーケンサ２４を用いたリードヒット処理８４の一例を示している。図８のＳ８１１３〜Ｓ８１１７が、本処理に対応する。本処理は、まず、フロントエンドバッファ２５を確保する（Ｓ８４１）。これが、図８のＳ８１１３に対応する。
【０１０４】
次に、プロセッサ４４は、要求されたデータが格納されているキャッシュメモリ４２からＳ８４１で確保したフロントエンドバッファ２５へデータ転送を行うフロントエンドＤＭＡ２３のコマンドを作成する（Ｓ８４２）。
【０１０５】
そして、次に、プロセッサ４４は、フロントエンドバッファ２５からホストコンピュータ１２にデータを返送するためのホストインタフェースＬＳＩ２１の転送コマンドを作成する（Ｓ８４３）。そして、プロセッサ４４は、これらの転送コマンドを基に、フロントエンドＤＭＡ２３、ホストインタフェースＬＳＩ２１を順に動作させる転送シーケンスを作成する（Ｓ８４４）。
【０１０６】
次に、プロセッサ４４は、作成した転送シーケンスをフロントエンド転送シーケンサ２４に送信する（Ｓ８４５）。そして、プロセッサ４４は、フロントエンド転送シーケンサ２４からの応答を待つ（Ｓ８４６）。プロセッサ４４は、フロントエンド転送シーケンサ２４からの応答を受け取ると、転送シーケンスの成功を確認し（Ｓ８４７）、フロントエンドバッファ２５を解放し（Ｓ８４８）、処理を終了する。
【０１０７】
図１５は、転送シーケンサ２４を用いないリードヒット処理８５の一例を示したものである。図８のＳ８１１８〜Ｓ８１２４が、本処理に対応する。本処理では、プロセッサ４４は、まず、フロントエンドバッファ２５を確保する（Ｓ８５０）。プロセッサ４４は、要求されたデータが格納されているキャッシュメモリ４２からＳ８５０で確保したフロントエンドバッファ２５へデータ転送を行うフロントエンドＤＭＡ２３のコマンドを作成する（Ｓ８５１）。
【０１０８】
次に、プロセッサ４４は、作成した転送コマンドを、フロントエンドＤＭＡ２３に送信する（Ｓ８５２）。そして、プロセッサ４４は、フロントエンドＤＭＡ２３からの転送ステータス送信を待つ（Ｓ８５３）。プロセッサ４４は、転送ステータスを受領すると、ステータスの内容を確認し、転送が成功したことを確認する（Ｓ８５４）。
【０１０９】
次に、プロセッサ４４は、フロントエンドバッファ２５からホストコンピュータ１２にデータを転送するホストインタフェースＬＳＩ２１の転送コマンドを作成する（Ｓ８５５）。そして、プロセッサ４４は、作成したコマンドをホストインタフェースＬＳＩ２１に送信する（Ｓ８５６）。
【０１１０】
プロセッサ４４は、ホストインタフェースＬＳＩ２１からの転送ステータス送信を待つ（Ｓ８５７）。プロセッサ４４は、転送ステータスを受領すると、ステータスの内容を確認し、転送が成功したことを確認する（Ｓ８５８）。プロセッサ４４は、確保したフロントエンドバッファ２５を解放し（Ｓ８５９）、処理を終了する。
【０１１１】
図１６は、転送シーケンサ２４及び３４を使ったリードミス処理８６、或いは転送シーケンサ２４及び３４を使わないリードミス処理８７における、転送エンジン（ドライブインタフェースＬＳＩ３１、バックエンドＤＭＡ（ＢＥ  ＤＭＡ）３３、フロントエンドＤＭＡ２３、ホストインタフェースＬＳＩ２１）が行うデータ転送処理の内容を示したものである。
【０１１２】
リードミス処理８６／８７では、まず、ドライブインタフェースＬＳＩ３１が、ドライブ１４からバックエンドバッファ（ＢＥ  ＢＵＦ．）３５へデータを転送する。具体的には、ドライブインタフェースＬＳＩ３１は、ドライブ１４に対し、リードコマンドを発行する。ドライブインタフェースＬＳＩ３１は、ドライブ１４から応答されたデータを受け取り、バックエンドバッファ３５に書き込む。
【０１１３】
次に、バックエンドＤＭＡ３３が、バックエンドバッファ３５からキャッシュメモリ４２へのデータを転送する。具体的には、バックエンドＤＭＡ３３がバックエンドバッファ３５に対しリード要求を発行する。そして、バックエンドＤＭＡ３３は、バックエンドバッファ３５から応答されたデータを受け取り、キャッシュメモリ４２に書き込む。
【０１１４】
次に、フロントエンドＤＭＡ２３が、キャッシュメモリ４２からフロントエンドバッファ２５へのデータを転送する。具体的には、フロントエンドＤＭＡ２３がキャッシュメモリ４２に対しリード要求を発行する。そして、フロントエンドＤＭＡ２３は、キャッシュメモリ４２から応答されたデータを受け取り、フロントエンドバッファ２５に書き込む。
【０１１５】
最後に、フロントエンドバッファ２５からホストコンピュータ１２へのデータが転送される。具体的には、ホストインタフェースＬＳＩ２１がフロントエンドバッファ２５に対しリード要求を発行する。そして、ホストインタフェースＬＳＩ２１は、フロントエンドバッファ２５から応答されたデータを受け取り、ホストコンピュータ１２に返送する。
【０１１６】
図１７は、転送シーケンサ２４及び３４を用いたリードミス処理８６の一例を示したものである。図８のＳ８１１３〜Ｓ８１１７が、本処理に対応する。本処理では、まず、プロセッサ４４は、一連の転送に必要な中継メモリの確保を行う。具体的には、プロセッサ４４は、リードコマンドによって指定されているユーザデータを読み出すドライブ１４に接続されているバックエンド基板３を特定し、その上のバックエンドバッファ３５を確保する（Ｓ８６１１）。
【０１１７】
次に、プロセッサ４４は、キャッシュメモリ４２のうち空いている領域の中から、今回要求されたデータを格納する領域を確保する（Ｓ８６１２）。次に、同様にして、プロセッサ４４は、フロントエンドバッファ２５を確保する（Ｓ８６１３）。以上により、一連の転送に必要な中継メモリの確保が完了する。
【０１１８】
次に、プロセッサ４４は、転送に必要な転送コマンド及び転送シーケンスを作成する。具体的には、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてドライブ１４からバックエンドバッファ３５に転送する転送コマンドを作成する（Ｓ８６１４）。次に、プロセッサ４４は、バックエンドＤＭＡ３３を用いてバックエンドバッファ３５からキャッシュメモリ４２にデータを転送する転送コマンドを作成する（Ｓ８６１５）。
【０１１９】
次に、プロセッサ４４は、フロントエンドＤＭＡ２３を用いてキャッシュメモリ４２からフロントエンドバッファ２５にデータを転送する転送コマンドを作成する（Ｓ８６１６）。そして、プロセッサ４４は、ホストインタフェースＬＳＩ２１を用いてフロントエンドバッファ２５のデータをホストコンピュータ１２に転送する転送コマンドを作成する（Ｓ８６１７）。
【０１２０】
次に、プロセッサ４４は、作成したドライブインタフェースＬＳＩ３１の転送コマンド、バックエンドＤＭＡ３３の転送コマンドを用い、この順序でデータ転送を行う転送シーケンスを作成する（Ｓ８６１８）。この時、プロセッサ４４は、転送シーケンス終了時の処理を、フロントエンド転送シーケンサ２４の転送シーケンス起動に設定する。
【０１２１】
次に、プロセッサ４４は、作成したフロントエンドＤＭＡ３３の転送コマンド、ホストインタフェースＬＳＩ２１の転送コマンドを基に、この順序でデータ転送を行う転送シーケンスを作成する（Ｓ８６１９）。以上により、転送コマンド及び転送シーケンスの作成が完了する。
【０１２２】
そして、プロセッサ４４は、フロントエンド転送シーケンサ２４に対し、Ｓ８６１９で作成した転送シーケンスを送信する（Ｓ８６２０）。次に、プロセッサ４４は、バックエンド転送シーケンサ３４に対し、Ｓ８６１８で作成した転送シーケンスを送信する（Ｓ８６２１）。そして、プロセッサ４４は、バックエンド転送シーケンサ３４に対し、転送シーケンスの実行を指示する（Ｓ８６２２）。
【０１２３】
プロセッサ４４は、フロントエンド転送シーケンサ２４からの転送結果の応答を待つ（Ｓ８６２３）。転送結果が到着すると、プロセッサ４４は、転送結果の内容を解析し、転送シーケンスの処理の成功を確認する（Ｓ８６２４）。そして、プロセッサ４４は、先ほど確保したフロントエンドバッファ２５を解放し（Ｓ８６２５）、次に同様にしてバックエンドバッファ３５を解放し（Ｓ８６２６）、処理を終了する。
【０１２４】
図１８は、転送シーケンサ２４及び３４を用いないリードミス処理８７の一例を示す。図８のＳ８１１８〜Ｓ８１２４が、本処理に対応する。本処理は、まず、ドライブ１４からバックエンドバッファ３５へデータを転送する。具体的には、まず、プロセッサ４４は、バックエンドバッファ３５を確保する（Ｓ８７１１）。次に、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてドライブ１４からバックエンドバッファ３５にデータを転送する転送コマンドを作成する（Ｓ８７１２）。
【０１２５】
次に、プロセッサ４４は、作成したコマンドをドライブインタフェースＬＳＩ３１に送信する（Ｓ８７１３）。そして、プロセッサ４４は、ドライブインタフェースＬＳＩ３１からの実行結果ステータスが送信されるのを待つ（Ｓ８７１４）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ８７１５）。
【０１２６】
次に、プロセッサ４４は、バックエンドバッファ３５からキャッシュメモリ４２へのデータ転送を行う。具体的には、まず、プロセッサ４４は、キャッシュメモリ４２を確保する（Ｓ８７１６）。次に、プロセッサ４４は、バックエンドＤＭＡ３３を用いてバックエンドバッファ３５からキャッシュメモリ４２にデータを転送する転送コマンドを作成する（Ｓ８７１７）。
【０１２７】
次に、プロセッサ４４は、作成したコマンドをバックエンドＤＭＡ３３に送信する（Ｓ８７１８）。そして、プロセッサ４４は、バックエンドＤＭＡ３３からの実行ステータスが送信されるのを待つ（Ｓ８７１９）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ８７２０）。そして、プロセッサ４４は、バックエンドバッファ３５を解放する（Ｓ８７２１）。
【０１２８】
次に、プロセッサ４４は、キャッシュメモリ４２からフロントエンドバッファ２５へのデータ転送を行う。具体的には、まず、プロセッサ４４は、フロントエンドバッファ２５を確保する（Ｓ８７２２）。次に、プロセッサ４４は、フロントエンドＤＭＡ２３を用いてキャッシュメモリ４２からフロントエンドバッファ２５にデータを転送する転送コマンドを作成する（Ｓ８７２３）。
【０１２９】
次に、プロセッサ４４は、作成したコマンドをフロントエンドＤＭＡ２３に送信する（Ｓ８７２４）。そして、プロセッサ４４は、フロントエンドＤＭＡ２３からの実行結果ステータスが送信されるのを待つ（Ｓ８７２５）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ８７２６）。
【０１３０】
最後に、プロセッサ４４は、フロントエンドバッファ２５からホストコンピュータ１２へのデータ転送を行う。具体的には、まず、プロセッサ４４は、ホストインタフェースＬＳＩ２１を用いてフロントエンドバッファ２５からホストコンピュータ１２にデータを転送する転送コマンドを作成する（Ｓ８７２７）。
【０１３１】
プロセッサ４４は、作成したコマンドをホストインタフェースＬＳＩ２１に送信する（Ｓ８７２８）。そして、プロセッサ４４は、ホストインタフェースＬＳＩ２１からの実行結果ステータスが送信されるのを待つ（Ｓ８７２９）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ８７３０）。最後に、プロセッサ４４は、フロントエンドバッファ２５を解放し（Ｓ８７３１）、処理を終了する。
【０１３２】
図１９は、転送シーケンサ２４を使ったフロントエンドライト処理８８、或いは転送シーケンサ２４を使わないフロントエンドライト処理８９における、転送エンジン（ホストインタフェースＬＳＩ２１、フロントエンドＤＭＡ２３）が行うデータ転送処理の内容を示している。
【０１３３】
フロントエンドライト処理８８／８９は、まず、ホストインタフェースＬＳＩ２１による、ホストコンピュータ１２からフロントエンドバッファ２５へのデータ転送を行う。具体的には、ホストインタフェースＬＳＩ２１は、ホストコンピュータ１２から送られたユーザデータを受け取る。ホストインタフェースＬＳＩ２１は、そのデータを、フロントエンドバッファ２５の予め転送コマンドで指定された場所に書き込む。
【０１３４】
次に、フロントエンドＤＭＡ２３が、フロントエンドバッファ２５からキャッシュメモリ４２へデータを転送する。具体的には、フロントエンドＤＭＡ２３は、フロントエンドバッファ２５に対し、リード要求を発行する。
【０１３５】
フロントエンドＤＭＡ２３は、フロントエンドバッファ２５から応答されたデータを受け取り、キャッシュメモリ４２へ書き込む。この時、ホストコンピュータ１２から送られたデータ又は電源やキャッシュメモリ基板４１の障害などにより、データが読めないことがある。このため、書き込みの際には、２つのキャッシュメモリ４２のそれぞれに同一のデータを書き込むことで、片方に障害が発生し読み取りが不可能になった場合でも、データの消失を防ぐことが好ましい。
【０１３６】
図２０は、転送シーケンサ２４を用いたフロントエンドライト処理８８の一例を示している。図８のＳ８１１３〜Ｓ８１１７が、本処理に対応する。本処理では、プロセッサ４４は、まず、一連の転送に必要な中継メモリを確保する。
【０１３７】
具体的には、まず、プロセッサ４４は、フロントエンドバッファ２５を確保する（Ｓ８８１）。次に、プロセッサ４４は、ホストコンピュータ１２からのライトデータを格納するキャッシュメモリ４２が既に確保されているかどうかを調べ、もし確保されていない場合には、キャッシュメモリ４２を確保する（Ｓ８８２）。以上により、転送中継メモリの確保が完了する。
【０１３８】
次にプロセッサ４４は、転送コマンド及び転送シーケンスの作成を行う。具体的には、まず、プロセッサ４４は、ホストインタフェースＬＳＩ２１によってホストコンピュータ１２からフロントエンドバッファ２５へのデータ転送を行う転送コマンドを作成する（Ｓ８８３）。
【０１３９】
次に、プロセッサ４４は、フロントエンドＤＭＡ２３によりフロントエンドバッファ２５から２つのキャッシュメモリ４２のそれぞれへデータを転送する転送コマンドを作成する（Ｓ８８４）。プロセッサ４４は、作成した転送コマンドを基に、ホストインタフェースＬＳＩ２１による転送及びフロントエンドＤＭＡ２３による転送を順番に行う転送シーケンスを作成する（Ｓ８８５）。以上により、転送コマンド及び転送シーケンスの作成が完了する。
【０１４０】
次に、プロセッサ４４は、作成した転送シーケンスを、フロントエンド転送シーケンサ２４に送信し、転送シーケンスの実行を指示する（Ｓ８８６）。そして、プロセッサ４４は、転送シーケンサ２４からの応答を待つ（Ｓ８８７）。プロセッサ４４は、応答を受け取ると、転送シーケンスの実行の成功を確認し（Ｓ８８８）、フロントエンドバッファ２５を解放する（Ｓ８８９）。そして、プロセッサ４４は処理を終了する。
【０１４１】
図２１は、転送シーケンサを用いないフロントエンドライト処理８９の一例を示したものである。図８のＳ８１１８〜Ｓ８１２４が、本処理に対応する。本処理では、プロセッサ４４は、まず、ホストコンピュータ１２からフロントエンドバッファ２５へのデータ転送を行う。
【０１４２】
具体的には、まず、プロセッサ４４は、フロントエンドバッファ２５を確保する（Ｓ８９０）。次に、プロセッサ４４は、ホストインタフェースＬＳＩ２１を用いてホストコンピュータ１２からフロントエンドバッファ２５へのデータ転送を行う転送コマンドを作成する（Ｓ８９１）。プロセッサ４４は、作成したコマンドをホストインタフェースＬＳＩ２１に転送する（Ｓ８９２）。
【０１４３】
プロセッサ４４は、ホストインタフェースＬＳＩ２１からの実行結果ステータスが送信されるのを待つ（Ｓ８９３）。プロセッサ４４は、ステータスを受け取ると内容を解析し、転送の成功を確認する（Ｓ８９４）。以上により、ホストコンピュータ１２からフロントエンドバッファ２５へのデータ転送が完了する。
【０１４４】
次に、プロセッサ４４は、フロントエンドバッファ２５からキャッシュメモリ４２へのデータ転送を行う。具体的には、プロセッサ４４は、まず、フロントエンドＤＭＡ２３を用いてフロントエンドバッファ２５からキャッシュメモリ４２へデータ転送を行う転送コマンドを作成する（Ｓ８９５）。そして、プロセッサ４４は、作成したコマンドをフロントエンドＤＭＡ２３に送信する（Ｓ８９６）。
【０１４５】
プロセッサ４４は、フロントエンドＤＭＡ２３からの実行結果ステータスが送信されるのを待つ（Ｓ８９７）。プロセッサ４４は、ステータスを受け取ると内容を解析し、転送の成功を確認する（Ｓ８９８）。最後に、プロセッサ４４は、確保したフロントエンドバッファ２５を解放し（Ｓ８９９）、処理を終了する。
【０１４６】
図２２は、ホストコンピュータ１２から書き込まれ、キャッシュメモリ４２に存在しているユーザデータをドライブ１４に書き込むデステージ処理９０の一例である。この処理は、ホストコンピュータ１２から書き込まれたユーザデータがキャッシュメモリ４２に存在し、かつ、キャッシュメモリ４２の空き容量が足りなくなった場合、或いはストレージシステム１の処理能力に余裕がある場合に実行される。
【０１４７】
本処理では、プロセッサ４４は、書き込み先のドライブ１４のＲＡＩＤレベルを調べる（Ｓ９０１）。そして、そのＲＡＩＤレベルがＲＡＩＤ１の場合（Ｓ９０１：ＲＡＩＤ１）、プロセッサ４４は、転送シーケンサ３４を用いるかどうかを判定する（Ｓ９０２）。
【０１４８】
プロセッサ４４は、転送シーケンサ３４を用いる基準として、デステージ対象となるデータがキャッシュメモリ４２上の連続領域に格納されていること、データの格納先が複数のドライブ１４に跨っていないこと、ドライブ１４の格納先領域が連続していること、バックエンドバッファ３５に十分な空きが存在すること、他に同一データにアクセスする処理が存在しないこと、書き込み先ドライブ１４が属するＲＡＩＤグループの他のドライブ１４に、障害が発生していないこと等の一部又は全てを参照する。
【０１４９】
転送シーケンサ３４を使う場合（Ｓ９０２：Ｙ）、プロセッサ４４は、転送シーケンサ３４を使ったＲＡＩＤ１デステージ処理９１を行う。一方、転送シーケンサ３４を使わない場合（Ｓ９０２：Ｎ）、プロセッサ４４は、転送シーケンサ３４を使わないＲＡＩＤ１デステージ処理９２を行う。Ｓ９０１において、書き込み先ドライブ１４のＲＡＩＤレベルがＲＡＩＤ５の場合（Ｓ９０１：ＲＡＩＤ５）、プロセッサ４４は、転送シーケンサ３４を用いるかどうかを判定する（Ｓ９０５）。
【０１５０】
プロセッサ４４は、転送シーケンサ３４を用いる基準として、デステージ対象となるデータがキャッシュメモリ４２上の連続領域に格納されていること、データの格納先が複数のドライブ１４に跨っていないこと、ドライブ１４の格納先領域が連続していること、バックエンドバッファ３５に十分な空きが存在すること、他に同一データにアクセスする処理が存在しないこと、書き込み先ドライブ１４が属するＲＡＩＤグループの他のドライブに障害が発生していないこと等の一部又は全てを参照する。
【０１５１】
転送シーケンサ３４を使う場合（Ｓ９０５：Ｙ）、プロセッサ４４は、転送シーケンサ３４を使ったＲＡＩＤ５デステージ処理９３を行う。一方、転送シーケンサ３４を使わない場合（Ｓ９０５：Ｎ）、プロセッサ４４は、転送シーケンサ３４を使わないＲＡＩＤ５デステージ処理９４を行う。
【０１５２】
図２３は、転送シーケンサ３４を使ったＲＡＩＤ１デステージ処理９１、或いは転送シーケンサ３４を使わないＲＡＩＤ１デステージ処理９２における、転送エンジンが行うデータ転送処理の内容を示している。
【０１５３】
ＲＡＩＤ１デステージ処理９１／９２は、キャッシュメモリ４２上のデータを、２台のドライブ１４（ＤＲＩＶＥ１、ＤＲＩＶＥ２）のそれぞれに書き込む。通常の構成において、ドライブ１（１４）、ドライブ２（１４）は別のバックエンド基板３、別のドライブインタフェースＬＳＩ３１に接続されているため、転送に用いるバックエンドＤＭＡ３３、バックエンドバッファ３５も別のものである。
【０１５４】
まず、第一のバックエンドＤＭＡ（ＢＥ１ＤＭＡ）３３は、キャッシュメモリ４２から第一のバックエンドバッファ（ＢＥ１ＢＵＦ．）３５へデータを転送する。この時、第一バックエンドＤＭＡ３３は、キャッシュメモリ４２に対してリード要求を発行し、応答として受け取ったデータを第一バックエンドバッファ３５に書き込む。
【０１５５】
次に、第一のドライブインタフェースＬＳＩ（ＤＲＩＶＥＩ／Ｆ１ＬＳＩ）３１は、第一バックエンドバッファ３５から第一ドライブ（ＤＲＩＶＥ１）１４へデータを転送する。同様に、第一のドライブインタフェースＬＳＩ３１が第一バックエンドバッファ３５に対してリード要求を発行してデータを受け取り、第一のドライブ１４に対してライトコマンドを発行して受け取ったデータを書き込む。以上により、１台目のドライブ１４への書き込みが終了する。
【０１５６】
次に同様にして、ＲＡＩＤ１デステージ処理９１／９２は、２台目のドライブ（ＤＲＩＶＥ２）１４への書き込みを行う。第二のバックエンドＤＭＡ（ＢＥ２ＤＭＡ）３３、第二のバックエンドバッファ（ＢＥ２ＢＵＦ．）３５、第二のドライブインタフェースＬＳＩ（ＤＲＩＶＥＩ／Ｆ２ＬＳＩ）３１が、第二のドライブ１４へのデータ書き込みのため、上記処理と同様の処理を行う。
【０１５７】
図２４は、転送シーケンサを使ったＲＡＩＤ１デステージ処理９１の一例を示している。図８のＳ８１１３〜Ｓ８１１７が、本処理に対応する。本処理では、プロセッサ４４は、まず、一連の転送に必要な中継メモリを確保する。具体的には、まず、プロセッサ４４は、第一のドライブ１４に書き込むための第一のバックエンドバッファ３５を確保する（Ｓ９１１１）。次に、プロセッサ４４は、同様にして、第二のバックエンドバッファ３５を確保する（Ｓ９１１２）。以上により転送中継メモリの確保が完了する。
【０１５８】
次に、プロセッサ４４は、転送コマンド及び転送シーケンスを作成する。具体的には、まず、プロセッサ４４は、キャッシュメモリ４１から第一のドライブ１４へデステージを行う第一の転送シーケンスを作成する（Ｓ９１１３）。次に、プロセッサ４４は、第二のドライブ１４へデステージを行う第二のシーケンスを作成する（Ｓ９１１４）。これらの処理の詳細については図３０で述べる。次に、プロセッサ４４は、Ｓ９１１３で第一の転送シーケンスの終了時処理を、第二の転送シーケンス起動に設定する（Ｓ９１１５）。以上で、転送シーケンスの作成が完了する。
【０１５９】
次に、プロセッサ４４は、第一のドライブ１４が接続されている第一のバックエンド基板３上の第一のバックエンド転送シーケンサ３４に対し、Ｓ９１１３で作成した第一の転送シーケンスを送信する（Ｓ９１１６）。次に、プロセッサ４４は、同様にして、第二のドライブ１４が接続されている第二のバックエンド基板３上の第二のバックエンド転送シーケンサ３４に対し、Ｓ９１１４で作成した第二の転送シーケンスを送信する（Ｓ９１１７）。
【０１６０】
そして、プロセッサ４４は、Ｓ９１１６で送信した転送シーケンサ３４に対し、転送シーケンスの起動を指示する（Ｓ９１１８）。そして、プロセッサ４４は、第二の転送シーケンスの終了したことを示すステータスが転送シーケンサ３４から送信されるのを待つ（Ｓ９１１９）。プロセッサ４４は、転送ステータスを受け取ると、転送シーケンスの実行が成功したことを確認し（Ｓ９１２０）、第一のバックエンドバッファ３５の解放を行い（Ｓ９１２１）、次に第二のバックエンドバッファ３５を解放する（Ｓ９１２２）。そして、プロセッサ４４は処理を終了する。
【０１６１】
図２５は、転送シーケンサ３４を使わないＲＡＩＤ１デステージ処理９１の一例を示している。図８のＳ８１１８〜Ｓ８１２４が本処理に対応する。本処理では、まず、プロセッサ４４は、第一のドライブ１４にデータをデステージするため、第一のドライブ１４に接続された第一のバックエンド基板３上の第一のバックエンドバッファ３５を確保する（Ｓ９２１）。そして、プロセッサ４４は、キャッシュメモリ４２から第一のドライブ１４へのデステージを行う（Ｓ９２２）。本処理の詳細については図３１で述べる。そして、プロセッサ４４は、第一のバックエンドバッファ３５を解放する（Ｓ９２３）。
【０１６２】
次に、同様に、プロセッサ４４は、第二のドライブ１４にデータをデステージするため、第二のドライブ１４に接続された第二バックエンド基板３上の第二のバックエンドバッファ３５を確保する（Ｓ９２４）。そして、プロセッサ４４は、キャッシュメモリ４２から第二のドライブ１４へのデステージを行う（Ｓ９２５）。そして、プロセッサ４４は、第二のバックエンドバッファ３５を解放し（Ｓ９２６）、処理を終了する。
【０１６３】
図２６は、転送シーケンサを使ったＲＡＩＤ５デステージ処理９３、或いは転送シーケンサ３４を使わないＲＡＩＤ５デステージ処理９４における、転送エンジンが行うデータ転送処理の内容を示したものである。
【０１６４】
ＲＡＩＤ５デステージ処理９３／９４は、ＲＡＩＤ５のグループを構成するドライブ１４のうち、データを格納するドライブ１４（以下、データドライブ）、パリティを格納するドライブ１４（以下、パリティドライブ）の２台のドライブ１４に更新されたデータを書き込む。図２６において、データドライブはＤＲＩＶＥ（Ｄ．）で表され、パリティドライブはＤＲＩＶＥ（Ｐ．）で表されている。
【０１６５】
本処理は、まず、データドライブ１４から更新前のデータ（以下、旧データ）をキャッシュメモリ４２上に読み込む。具体的には、データドライブ（ＤＲＩＶＥ（Ｄ．））１４に接続されている第一のドライブインタフェースＬＳＩ（Ｄ．Ｉ／Ｆ１ＬＳＩ）３１が、同一基板上の第一のバックエンドバッファ（ＢＥ１ＢＵＦ．）３５へ旧データを読み込む。具体的には、第一のドライブインタフェースＬＳＩ３１は、データドライブ１４に対し旧データを読み込むリードコマンドを発行し、受け取ったデータを第一のバックエンドバッファ３５に書き込む。
【０１６６】
次に、第一のバックエンドバッファ３５と同じバックエンド基板３上に存在する第一のバックエンドＤＭＡ（ＢＥ１ＤＭＡ）３３が、第一のバックエンドバッファ３５上の旧データをキャッシュメモリ４２に転送する。具体的には、バックエンドＤＭＡ３３は、第一のバックエンドバッファ３５に対し、リード要求を発行し、受け取った旧データをキャッシュメモリ４２に書き込む。
【０１６７】
次に、同様にして、ＲＡＩＤ５デステージ処理９３／９４は、パリティドライブ（ＤＲＩＶＥ（Ｐ．））１４に格納されている更新前のパリティ（以下、旧パリティ）を、キャッシュメモリ４２上に読み込む。手順は、第二バックエンド基板３上の、第二のドライブインタフェースＬＳＩ（Ｄ．Ｉ／Ｆ２ＬＳＩ）３１、第二のバックエンドバッファ（ＢＥ２ＢＵＦ．）３５、第二のバックエンドＤＭＡ（ＢＥ２ＤＭＡ）３３を用いることを除いて、上記ユーザデータの読み込みと同様である。
【０１６８】
次に、ＲＡＩＤ５デステージ処理９３／９４は、キャッシュメモリ４２上に元々存在するホストから書き込まれたデータ（以下、新データ）、及び読み込んだ旧データ、旧パリティから、更新後のパリティ（以下、新パリティ）を生成する。具体的には、パリティ生成器（ＰＡＲＩＴＹ  ＧＥＮ．）３６が、旧データ、旧パリティ、新データを読み込むリードコマンドをキャッシュメモリ４２に対して発行する。パリティ生成器３６は、受け取った３つのデータのＸＯＲを計算して新パリティを生成し、それをキャッシュメモリ４２に書き込む。
【０１６９】
この後、ＲＡＩＤ５デステージ処理９３／９４は、新データをキャッシュメモリ４２からデータドライブ１４に書き込む。具体的には、まず、第一のバックエンドＤＭＡ３３がキャッシュメモリ４２に対してリード要求を発行し、受け取った新データを第一のバックエンドバッファ３５に書き込む。次に、第一のドライブインタフェースＬＳＩ３１が第一のバックエンドバッファ３５にリード要求を発行し、受け取った新データをデータドライブ１４に書き込むライトコマンドを発行する。
【０１７０】
最後に、ＲＡＩＤ５デステージ処理９３／９４は、旧パリティをキャッシュメモリ４２からパリティドライブ１４に書き込む。手順は、第二のバックエンドＤＭＡ３３、第二のバックエンドバッファ３５、第二のドライブインタフェースＬＳＩ３１を用いることを除けば新データの書き込みと同様である。
【０１７１】
図２７は、転送シーケンサ３４を用いたＲＡＩＤ５デステージ処理９３の一例を示している。図８のＳ８１１３〜Ｓ８１１７が、本処理に対応する。本処理では、プロセッサ４４は、まず転送中継メモリを確保する。具体的には、プロセッサ４４は、旧データをデータドライブ１４から読み込むため第一のバッファ領域を第一のバックエンドバッファ（ＢＥ１ＢＵＦ．）３５において確保する（Ｓ９３１１）。次に、プロセッサ４４は、旧パリティをパリティドライブ１４から読み込むため第二のバッファ領域を、第二のバックエンドバッファ（ＢＥ２ＢＵＦ．）３５において確保する（Ｓ９３１２）。
【０１７２】
同様にして、プロセッサ４４は、新データをキャッシュメモリ４２からデータドライブ１４に書き込む（デステージ）ための第三のバッファ領域を、第一のバックエンドバッファ３５において確保する（Ｓ９３１３）。プロセッサ４４は、新パリティをキャッシュメモリ４２からパリティドライブ１４に書き込むための第四のバッファ領域を、第二のバックエンドバッファ３５において確保する（Ｓ９３１４）。以上により、転送中継メモリの確保が完了する。
【０１７３】
次に、プロセッサ４４は、転送コマンド及び転送シーケンスを作成する。具体的には、まず、プロセッサ４４は、旧データをデータドライブ１４からキャッシュメモリ４２にステージする第一の転送シーケンスを作成する（Ｓ９３１５）。次に、プロセッサ４４は、旧パリティをパリティドライブ１４からキャッシュメモリ４２にステージする第二の転送シーケンスを作成する（Ｓ９３１６）。
【０１７４】
次に、プロセッサ４４は、パリティ生成器３６を用いて旧データ、旧パリティ、新データから新パリティを生成する第三の転送シーケンスを作成する（Ｓ９３１７）。本シーケンスは、パリティ生成器３６に対し送信するパリティ生成に対応するデータ転送コマンドのみで構成される。次に、プロセッサ４４は、新データをキャッシュメモリ４２からデータドライブ１４にデステージする第四の転送シーケンスを作成する（Ｓ９３１８）。プロセッサ４４は、新パリティをキャッシュメモリ４２からデータドライブ１４にデステージする第五の転送シーケンスを作成する（Ｓ９３１９）。
【０１７５】
プロセッサ４４は、第一の転送シーケンスの終了時処理を第二の転送シーケンス起動に（Ｓ９３２０）、第二の転送シーケンスの終了時処理を第三の転送シーケンス起動に（Ｓ９３２１）、第三の転送シーケンスの終了時処理を第四の転送シーケンス起動に（Ｓ９３２２）、第四の転送シーケンスの終了時処理を第五の転送シーケンス起動に（Ｓ９３２３）、それぞれ設定する。以上により、転送シーケンスの作成が完了する。尚、ステージ、デステージを行う転送シーケンス作成処理の詳細は、図２９、図３０を参照して後述する。
【０１７６】
プロセッサ４４は、生成した各転送シーケンスを対応するバックエンド転送シーケンサ３４に送信する(Ｓ９３２４)。具体的には、第一、第四の転送シーケンスは、データドライブ１４が接続されている第一のバックエンド基板３上の第一の転送シーケンサ３４に、第二、第五の転送シーケンスは、パリティドライブ１４が接続されている第二のバックエンド基板３上の第二の転送シーケンサ３４に送信される。
【０１７７】
第三の転送シーケンスは、今回のパリティ生成で用いるパリティ生成器３６が存在するバックエンド基板３上の転送シーケンサ３４に送信される。尚、パリティ生成器３６及びパリティ生成器３６を動作させる転送シーケンサは、キャッシュメモリ基板４１上など、別の場所にあっても良い。
【０１７８】
次に、プロセッサ４４は、第一の転送シーケンスの起動を、第一のバックエンド転送シーケンサ３４に対し指示する（Ｓ９３２５）。プロセッサ４４は、第五の転送シーケンスの完了を知らせるステータスが到着するのを待つ（Ｓ９３２６）。プロセッサ４４は、ステータスを受け取ると、転送の成功を確認し（Ｓ９３２７）、確保した第一から第四のバッファ領域を解放する（Ｓ９３２８）。そして、プロセッサ４４は処理を終了する。
【０１７９】
図２８は、転送シーケンサを使わないＲＡＩＤ５デステージ処理９４の一例を示している。図８のＳ８１１８〜Ｓ８１２４が本処理に対応する。本処理では、まず、プロセッサ４４は、旧データをデータドライブ１４からキャッシュメモリ４２にステージするための第一のバッファ領域を、データドライブ１４が接続されている第一のバックエンド基板３上の第一のバックエンドバッファ３５に確保する（Ｓ９４１１）。
【０１８０】
次に、プロセッサ４４は、旧データをデータドライブ１４からキャッシュメモリ４２にステージする（Ｓ９４１２）。そして、プロセッサ４４は、確保した第一のバッファ領域を解放する（Ｓ９４１３）。
【０１８１】
次に、プロセッサ４４は、旧パリティをパリティドライブ１４からキャッシュメモリ４２にステージするための第二のバッファ領域を、パリティドライブ１４が接続されている第二のバックエンド基板３上の第二のバックエンドバッファ３５に確保する（Ｓ９４１４）。プロセッサ４４は、旧パリティをパリティドライブ１４からキャッシュメモリ４２にステージする（Ｓ９４１５）。プロセッサ４４は、確保した第二のバッファ領域を解放する（Ｓ９４１６）。
【０１８２】
次に、プロセッサ４４は、パリティ生成器３６を用い、キャッシュメモリ４２上の旧データ、旧パリティ、新データから、新パリティを生成する（Ｓ９４１７）。具体的には、プロセッサ４４は、旧データ、旧パリティ、新データの３つを読み込んだ後に新パリティを生成し書き込むことを指示する転送コマンドを作成し、パリティ生成器３６へ送信する。
【０１８３】
次に、プロセッサ４４は、新データをキャッシュメモリ４２からデータドライブ１４にデステージするための第三のバッファ領域を、データドライブ１４が接続されている第一のバックエンド基板３上の第一のバックエンドバッファ３５に確保する（Ｓ９４１８）。プロセッサ４４は、新データをキャッシュメモリ４２からデータドライブ１４にデステージする（Ｓ９４１９）。プロセッサ４４は、確保した第三のバッファ領域を解放する（Ｓ９４２０）。
【０１８４】
次に、プロセッサ４４は、新パリティをキャッシュメモリ４２からパリティドライブ１４にデステージするための第四のバッファ領域を、パリティドライブ１４が接続されている第二のバックエンド基板３上の第二のバックエンドバッファ３５に確保する（Ｓ９４２１）。プロセッサ４４は、新パリティをキャッシュメモリ４２からパリティドライブ１４にデステージする（Ｓ９４２２）。プロセッサ４４は、確保した第四のバッファ領域を解放する（Ｓ９４２３）。そして、プロセッサ４４は処理を終了する。ここで、ステージ処理、デステージ処理の詳細は、図３１、図３２で述べる。
【０１８５】
図２９は、データのステージを行うための転送シーケンスを生成するステージシーケンス生成処理９５の一例である。本処理では、まず、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてドライブ１４からバックエンドバッファ３５にデータ転送を行う転送コマンドを作成する（Ｓ９５１）。
【０１８６】
次に、プロセッサ４４は、バックエンドＤＭＡ３３を用いてバックエンドバッファ３５からキャッシュメモリ４２にデータを転送する転送コマンドを作成する（Ｓ９５２）。さらに、プロセッサ４４は、この２つの転送コマンドを順に行う転送シーケンスを作成し（Ｓ９５３）、処理を終了する。
【０１８７】
図３０は、データのデステージを行うための転送シーケンスを生成するデステージシーケンス生成処理９６の一例である。本処理では、まず、プロセッサ４４は、バックエンドＤＭＡ３３を用いてキャッシュメモリ４２からバックエンドバッファ３５にデータを転送する転送コマンドを生成する（Ｓ９６１）。
【０１８８】
次に、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてバックエンドバッファ３５からドライブ１４にデータ転送を行う転送コマンドを生成する（Ｓ９６２）。プロセッサ４４は、この２つの転送コマンドを順に行う転送シーケンスを作成し（Ｓ９６３）、処理を終了する。
【０１８９】
図３１は、転送シーケンサ３４を用いないデステージ処理で用いられる、データのキャッシュメモリ４２へのステージ処理９７の一例である。本処理では、まず、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてドライブ１４からバックエンドバッファ３５にデータ転送を行う転送コマンドを作成する（Ｓ９７１）。
【０１９０】
次に、プロセッサ４４は、作成したコマンドをドライブインタフェースＬＳＩ３１に送信し、転送実施を指示する（Ｓ９７２）。プロセッサ４４は、ドライブインタフェースＬＳＩ３１からの転送が終了したことを示すステータスの送信を待つ（Ｓ９７３）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ９７４）。
【０１９１】
次に、プロセッサ４４は、バックエンドＤＭＡ３３を用いてバックエンドバッファ３５からキャッシュメモリ４２にデータ転送を行う転送コマンドを作成する（Ｓ９７５）。プロセッサ４４は、作成したコマンドをバックエンドＤＭＡ３３に送信し、転送実施を指示する（Ｓ９７６）。
【０１９２】
プロセッサ４４は、バックエンドＤＭＡ３３からの転送が終了したことを示すステータスの送信を待つ（Ｓ９７７）。ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ９７８）。そして、プロセッサ４４は、処理を終了する。
【０１９３】
図３２は、転送シーケンサ３４を用いない、ドライブ１４へのデータのデステージ処理９８の一例である。本処理では、まず、プロセッサ４４は、バックエンドＤＭＡ３３を用いてキャッシュメモリ４２からバックエンドバッファ３５にデータ転送を行う転送コマンドを作成する（Ｓ９８１）。
【０１９４】
プロセッサ４４は、作成したコマンドをバックエンドＤＭＡ３３に送信し、転送実施を指示する（Ｓ９８２）。プロセッサ４４は、転送が終了したことを示すバックエンドＤＭＡ３３からのステータス送信を待つ（Ｓ９８３）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ９８４）。
【０１９５】
次に、プロセッサ４４は、ドライブインタフェースＬＳＩ３１を用いてバックエンドバッファ３５からドライブ１４にデータ転送を行う転送コマンドを作成する（Ｓ９８５）。プロセッサ４４は、作成したコマンドをドライブインタフェースＬＳＩ３１に送信し、転送実施を指示する（Ｓ９８６）。プロセッサ４４は、転送が終了したことを示すドライブインタフェースＬＳＩ３１からのステータス送信を待つ（Ｓ９８７）。プロセッサ４４は、ステータスを受け取ると、内容を解析し、転送の成功を確認する（Ｓ９８８）。そして、プロセッサ４４は、処理を終了する。
【０１９６】
転送シーケンサ２４／３４を用いる場合、転送を起動してから一連の転送が終わることを確認するまでの間、プロセッサ４４が介在する必要が無い。このため、プロセッサ４４の処理量が減少し、ストレージシステム１の処理能力が向上する。一方、転送シーケンサ２４／３４を用いない場合、バッファ（領域）を必要な時間だけ確保し解放するので、必要なバッファ領域の量を抑えることができる。
【０１９７】
このため、プロセッサ４４の処理能力に余力が有るとき、バッファ量に余裕が無いとき等は、転送シーケンサ２４／３４を用いない方が良い場合がある。また、転送すべきデータが連続した領域に無い場合など、一段階の転送に複数の転送コマンドが必要となる場合も、転送シーケンサを用いない方が、転送シーケンサ２４／３４の構造を単純化できるので好ましい。また、同一データへのアクセスが集中している場合も、転送シーケンサ２４／３４を用いずにプロセッサ４４が転送を行う方が、長時間、データへのアクセス排他をする必要が無くなるため、効率が良い。
【０１９８】
以上の構成により、ストレージシステムにおけるデータ転送において、プロセッサの処理量を減らすことができる。その結果、ストレージシステムの性能を向上させることができる。本実施形態において必要となる転送シーケンサはハードウェア通信を行うだけのシンプルなものであり、追加で必要となる資源（回路規模及びメモリ量）は小さい。
【０１９９】
以上、本発明の実施形態を説明したが、本発明が上記の実施形態に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、ある実施形態の構成に他の実施形態の構成を加えることも可能である。各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０２００】
本発明は、ドライブ又はキャッシュメモリを有していないストレージシステムに適用することができる。ドライブを有していないストレージシステムは、上記実施形態におけるキャッシュメモリに相当する記憶デバイスが、ユーザデータの最終的な記憶領域を提供する。典型的には、そのようなストレージシステムは、複数の電源装置を有し、ユーザデータを複数の記憶デバイスのそれぞれに格納することで、データ消失の蓋然性を低下させる。
【図１】
0005658827.tif 000002
【図２】
0005658827.tif 000003
【図３】
0005658827.tif 000004
【図４】
0005658827.tif 000005
【図５】
0005658827.tif 000006
【図６】
0005658827.tif 000007
【図７】
0005658827.tif 000008
【図８】
0005658827.tif 000009
【図９】
0005658827.tif 000010
【図１０】
0005658827.tif 000011
【図１１】
0005658827.tif 000012
【図１２】
0005658827.tif 000013
【図１３】
0005658827.tif 000014
【図１４】
0005658827.tif 000015
【図１５】
0005658827.tif 000016
【図１６】
0005658827.tif 000017
【図１７】
0005658827.tif 000018
【図１８】
0005658827.tif 000019
【図１９】
0005658827.tif 000020
【図２０】
0005658827.tif 000021
【図２１】
0005658827.tif 000022
【図２２】
0005658827.tif 000023
【図２３】
0005658827.tif 000024
【図２４】
0005658827.tif 000025
【図２５】
0005658827.tif 000026
【図２６】
0005658827.tif 000027
【図２７】
0005658827.tif 000028
【図２８】
0005658827.tif 000029
【図２９】
0005658827.tif 000030
【図３０】
0005658827.tif 000031
【図３１】
0005658827.tif 000032
【図３２】
0005658827.tif 000033