(57)【特許請求の範囲】
【請求項１】
記憶装置へのデータの書き込みのコマンドの書き込みサイズおよび頻度の組ごとに、前記記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでの前記コマンドの数を示す性能情報を記憶する記憶部と、
前記記憶装置に対するデータの書き込みの前記コマンドを受信する受信部と、
前記受信部により所定時間内に受信された前記コマンドの書き込みサイズと受信頻度とを判定し、判定した書き込みサイズと受信頻度と前記性能情報とに基づいて、前記コマンドの受信数の上限値を決定し、前記受信部による前記コマンドの受信数が前記上限値に達すると、前記記憶装置によるリードモディファイライトによって前記キャッシュの空き容量が不足すると判定し、前記リードモディファイライトを自装置により実行すると決定する制御部と、
を有するストレージ制御装置。
【請求項２】
前記制御部は、前記コマンドを複数発行して前記記憶装置に送信し、書き込みサイズおよび書き込み頻度の組と発行数とに対する前記記憶装置の応答時間を計測することで前記性能情報を生成する、請求項１記載のストレージ制御装置。
【請求項３】
前記制御部は、前記上限値を、前記性能情報に登録された前記コマンドの数よりも小さい数とする、請求項１または２記載のストレージ制御装置。
【請求項４】
前記制御部は、前記リードモディファイライトの前記自装置での実行を開始した後、前記記憶装置に対する書き込みの前記コマンドを所定時間以上受信しない場合、前記リードモディファイライトの前記自装置による実行を停止する、請求項１乃至３の何れか１項に記載のストレージ制御装置。
【請求項５】
前記制御部は、受信した前記コマンドのうち、前記記憶装置におけるデータの書き込み単位に整合しない前記コマンドを選択し、選択した前記コマンドに基づいて前記キャッシュの使用状況を判定する、請求項１乃至４の何れか１項に記載のストレージ制御装置。
【請求項６】
コンピュータに、
記憶装置に対するデータの書き込みのコマンドを受信し、
所定時間内に受信された前記コマンドの書き込みサイズと受信頻度とを判定し、
前記記憶装置へのデータの書き込みの前記コマンドの書き込みサイズおよび頻度の組ごとに、前記記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでの前記コマンドの数を示す性能情報と、判定した書き込みサイズと受信頻度とに基づいて、前記コマンドの受信数の上限値を決定し、
前記コマンドの受信数が前記上限値に達すると、前記記憶装置によるリードモディファイライトによって前記キャッシュの空き容量が不足すると判定し、前記リードモディファイライトを前記コンピュータにより実行すると決定する、
処理を実行させる制御プログラム。
【請求項７】
コンピュータが、
記憶装置に対するデータの書き込みのコマンドを受信し、
所定時間内に受信された前記コマンドの書き込みサイズと受信頻度とを判定し、
前記記憶装置へのデータの書き込みの前記コマンドの書き込みサイズおよび頻度の組ごとに、前記記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでの前記コマンドの数を示す性能情報と、判定した書き込みサイズと受信頻度とに基づいて、前記コマンドの受信数の上限値を決定し、
前記コマンドの受信数が前記上限値に達すると、前記記憶装置によるリードモディファイライトによって前記キャッシュの空き容量が不足すると判定し、前記リードモディファイライトを前記コンピュータにより実行すると決定する、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置、制御プログラムおよび制御方法に関する。
【背景技術】
【０００２】
現在、データの保存にストレージ装置が利用されている。ストレージ装置は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記憶装置を複数搭載して大容量の記憶領域を利用可能とする。ストレージ装置は、記憶装置に対するデータの書き込みや読み出しのアクセス制御を行うストレージ制御装置に接続される。ストレージ装置は、ストレージ制御装置を内蔵することもある。
【０００３】
ところで、記憶装置が内部の記憶媒体に対して実行する書き込み操作は、所定単位（例えば、物理セクタ単位）毎に行われる。所定単位に満たないデータを書き込む場合、記憶装置は、リードモディファイライト（Read Modify Write）と呼ばれる処理を実行する。記憶装置は、リードモディファイライトの処理に利用されるキャッシュを有する。
【０００４】
例えば、物理セクタ内の一部にデータを書き込むとき次の手順となる。記憶装置は、該当の物理セクタ内の全情報を、記憶装置が備えるキャッシュに読み出す（Ｒｅａｄ）。記憶装置は、キャッシュに読み出した情報のうち更新対象部分を更新する（Ｍｏｄｉｆｙ）。記憶装置は、キャッシュ内の更新後の情報を同物理セクタに書き戻す（Ｗｒｉｔｅ）。
【０００５】
ここで、情報処理装置において、リードモディファイライト処理の実行主体をホスト制御部とした場合の処理速度と同実行主体をメディア制御部とした場合の処理速度とを計測し、処理速度の速い方をリードモディファイライト処理の実行主体とする提案がある。
【０００６】
また、ホストコンピュータからのＩ／Ｏ（Input / Output）要求情報から選択条件を検出し、選択条件に基づき複数のリードモディファイライト処理方式の中から最適な処理方式を選択・実行する提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−３３３９６号公報
【特許文献２】特開平６−７５７０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
記憶装置によるリードモディファイライト用のキャッシュの空き容量が不足すると、書き込み処理に対する記憶装置の応答時間が悪化するおそれがある。そこで、記憶装置の応答性能が悪化する前に、記憶装置により実行されるリードモディファイライトを、ストレージ制御装置により代行する仕組みが問題となる。
【０００９】
例えば、記憶装置内部のキャッシュの使用量を記憶装置から取得して監視し、キャッシュの空き容量不足により応答性能が悪化する兆候を得ることが考えられる。ところが、キャッシュ機構の実装方法はベンダによって異なる上、ブラックボックス化されていることが多く、キャッシュの使用量を外部から直接参照することは難しい。
【００１０】
１つの側面では、本発明は、適切なタイミングでリードモディファイライトを代行できるストレージ制御装置、制御プログラムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、ストレージ制御装置が提供される。ストレージ制御装置は、記憶部と受信部と制御部とを有する。記憶部は、記憶装置へのデータの書き込みのコマンドの書き込みサイズおよび頻度の組ごとに、記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでのコマンドの数を示す性能情報を記憶する。受信部は、記憶装置に対するデータの書き込みのコマンドを受信する。制御部は、受信部により所定時間内に受信されたコマンドの書き込みサイズと受信頻度とを判定し、判定した書き込みサイズと受信頻度と性能情報とに基づいて、コマンドの受信数の上限値を決定し、受信部によるコマンドの受信数が上限値に達すると、記憶装置によるリードモディファイライトによってキャッシュの空き容量が不足すると判定し、リードモディファイライトを自装置により実行すると決定する。
【００１２】
また、１つの態様では、制御プログラムが提供される。この制御プログラムは、コンピュータに、記憶装置に対するデータの書き込みのコマンドを受信し、所定時間内に受信されたコマンドの書き込みサイズと受信頻度とを判定し、記憶装置へのデータの書き込みのコマンドの書き込みサイズおよび頻度の組ごとに、記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでのコマンドの数を示す性能情報と、判定した書き込みサイズと受信頻度とに基づいて、コマンドの受信数の上限値を決定し、コマンドの受信数が上限値に達すると、記憶装置によるリードモディファイライトによってキャッシュの空き容量が不足すると判定し、リードモディファイライトを当該コンピュータにより実行すると決定する、処理を実行させる。
【００１３】
また、１つの態様では、制御方法が提供される。この制御方法では、コンピュータが、記憶装置に対するデータの書き込みのコマンドを受信し、所定時間内に受信されたコマンドの書き込みサイズと受信頻度とを判定し、記憶装置へのデータの書き込みのコマンドの書き込みサイズおよび頻度の組ごとに、記憶装置が備えるリードモディファイライト用のキャッシュが空き容量不足になるまでのコマンドの数を示す性能情報と、判定した書き込みサイズと受信頻度とに基づいて、コマンドの受信数の上限値を決定し、コマンドの受信数が上限値に達すると、記憶装置によるリードモディファイライトによってキャッシュの空き容量が不足すると判定し、リードモディファイライトを当該コンピュータにより実行すると決定する。
【発明の効果】
【００１４】
１つの側面では、適切なタイミングでリードモディファイライトを代行できる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態のストレージ制御装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】ストレージ装置のハードウェア例を示す図である。
【図４】管理装置のハードウェア例を示す図である。
【図５】ＨＤＤの例を示す図である。
【図６】書き込みの例を示す図である。
【図７】ＲＭＷの例を示す図である。
【図８】書き込みの応答時間とＩＯＰＳとの関係の例を示す図である。
【図９】ＣＭの機能例を示す図である。
【図１０】ＲＭＷ性能テーブルの例を示す図である。
【図１１】ＲＭＷ管理テーブルの例を示す図である。
【図１２】測定処理の例を示すフローチャートである。
【図１３】データ吐き出し時間の例を示す図である。
【図１４】ＲＭＷ切替処理（その１）の例を示すフローチャートである。
【図１５】ＲＭＷ切替処理（その２）の例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置を示す図である。ストレージ制御装置１は、記憶装置２および情報処理装置３に接続されている。記憶装置２は、例えばＨＤＤである。情報処理装置３は、例えばクライアントコンピュータやサーバコンピュータである。ストレージ制御装置１と情報処理装置３とは、所定のケーブル（例えば、ファイバチャネルケーブル）により直接接続されてもよいし、ＳＡＮ（Storage Area Network）やＬＡＮ（Local Area Network）などのネットワークを介して接続されてもよい。
【００１７】
ストレージ制御装置１は、記憶装置２に対するデータの書き込みや読み出しのコマンドを受信する。ストレージ制御装置１は、受信したコマンドに応じて、記憶装置２に対するデータの書き込みや読み出しを制御する。ストレージ制御装置１は、コントローラモジュールまたはコントローラと呼ばれることもある。
【００１８】
ストレージ制御装置１は、記憶装置２を含む複数の記憶装置を内蔵したストレージ装置と接続されてもよい。その場合も、ストレージ制御装置１は、ストレージ装置に内蔵された複数の記憶装置それぞれに対するデータの書き込みや読み出しを制御する。ストレージ制御装置１は、ストレージ装置に内蔵されてもよい。
【００１９】
記憶装置２は、記憶装置２内部の記憶媒体（例えば、ＨＤＤの磁気ディスク）にデータを書き込む際、リードモディファイライト処理を実行することがある。ここで、「リードモディファイライト」をＲＭＷ（Read Modify Write）と略記することがある。記憶装置２は、ＲＭＷに用いられるＲＭＷ用キャッシュ２ａ（例えば、記憶装置２内部の記憶媒体の一部領域など）およびＲＭＷを実行する制御部２ｂ（例えば、特定用途の電子回路など）を有する。制御部２ｂによるＲＭＷ用キャッシュ２ａの使用状況はブラックボックス化されており、ＲＭＷ用キャッシュ２ａの最大容量や使用量を外部から直接参照することはできない。
【００２０】
ストレージ制御装置１は、受信部１ａ、制御部１ｂおよび記憶部１ｃを有する。受信部１ａは、例えば通信用のインタフェースである。制御部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。制御部１ｂはプログラムを実行するプロセッサであってもよい。「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。記憶部１ｃは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置でもよい。
【００２１】
受信部１ａは、記憶装置２に対するデータの書き込みのコマンドや読み出しのコマンドを情報処理装置３から受信する。書き込みのコマンド（書き込みコマンドと称する）は、書き込み対象のデータや書き込み先のアドレスを示す情報を含む。書き込み対象のデータのサイズは、書き込みコマンドの書き込みサイズである。情報処理装置３がある期間に発行する書き込みコマンドには、特定の書き込みサイズ、頻度になるという傾向（アクセス傾向）がみられることが多い。例えば、情報処理装置３はデータ書き込みの際、そのときに情報処理装置３が実行しているソフトウェアの処理状況などに応じて、ある書き込みサイズの書き込みコマンドＷ１，Ｗ２，Ｗ３をある頻度で発行する。
【００２２】
制御部１ｂは、書き込みコマンドの書き込みサイズと受信頻度と受信数とに基づいて、記憶装置２のＲＭＷに用いられるキャッシュ（ＲＭＷ用キャッシュ２ａ）の使用状況を判定する。制御部１ｂは、判定結果に応じてＲＭＷを自装置（ストレージ制御装置１）により実行するか否かを決定する。
【００２３】
例えば、制御部１ｂは、情報処理装置３から受信される書き込みコマンドＷ１，Ｗ２，Ｗ３の受信状況により、ある書き込みサイズの書き込みコマンドが所定の頻度で発行されているというアクセス傾向を得る。制御部１ｂは、当該アクセス傾向における書き込みコマンドを所定回数受信すると、ＲＭＷ用キャッシュ２ａに格納されているデータが増えており、ＲＭＷ用キャッシュ２ａの空き容量が今後不足する可能性が高いと判定する。
【００２４】
制御部１ｂは、例えば書き込みのアクセス傾向（書き込みサイズおよび頻度）に対する記憶装置２の性能情報を予め作成し、記憶部１ｃに格納しておいてもよい。より具体的には、制御部１ｂは、運用開始前の準備段階において、テーブルＴ１を事前に作成し、記憶部１ｃに格納しておいてもよい。テーブルＴ１は、書き込みサイズと頻度と応答時間が悪化する（例えば、応答時間を所定の閾値よりも増大させる）までのコマンド発行の回数との対応関係を示す性能情報である。応答時間が悪化するまでのコマンド発行の回数を、記憶装置２の性能として取得する理由は、書き込みの際の応答時間が悪化する場合、ＲＭＷ用キャッシュ２ａの空き容量不足が要因である可能性が高いからである。
【００２５】
なお、記憶装置２では、ＲＭＷ用キャッシュ２ａの空き容量に比較的余裕がある場合、応答時間はほぼ一定か、あるいは、データの書き込みサイズおよび書き込み頻度の増加に対して、比較的緩やかに増大する。ＲＭＷ用キャッシュ２ａが空き容量不足に陥ると、空き容量に比較的余裕がある場合の応答時間の増分（書き込みサイズおよび書き込み頻度に対する応答時間の増分）よりも大きな増分で、応答時間が増大することもある。このため、制御部１ｂは、記憶装置２の書き込みの応答時間の増分の変化に基づいて、応答時間が悪化したことを検出してもよい。
【００２６】
テーブルＴ１には、例えば書き込みサイズｘ１，頻度ａ１，回数ｂ１という情報が登録されている。これは、書き込みサイズｘ１の書き込みコマンドを頻度ａ１で発行する場合、回数ｂ１だけ発行したときに記憶装置２の応答時間が悪化することを示す。テーブルＴ１には、同じ書き込みサイズｘ１に対して異なる頻度（例えば、頻度ａ２）に対する回数（例えば、ｂ２）が登録される。テーブルＴ１には、他の書き込みサイズ（例えば、書き込みサイズｘ２）に対しても、同様に頻度と回数との対応関係が登録される。
【００２７】
その場合、制御部１ｂは、テーブルＴ１を参照することで、運用時における情報処理装置３の書き込みのアクセス傾向（運用時のアクセス傾向）と書き込みコマンドの受信回数とに基づき、ＲＭＷ用キャッシュ２ａの使用状況を判定する。
【００２８】
具体的には、制御部１ｂは、運用時のアクセス傾向に応じた回数（記憶装置２の応答時間が悪化するまでのコマンド発行の回数）をテーブルＴ１から取得する。例えば、運用時のアクセス傾向が書き込みサイズｘ１，頻度ａ１であれば、制御部１ｂは、テーブルＴ１から回数ｂ１を取得する。そして、制御部１ｂは、例えば回数ｂ１に１よりも小さい所定割合（例えば、０．９など）を乗じた値を監視閾値として取得する。１よりも小さい所定割合を回数ｂ１に乗じる理由は、空き容量不足に陥る前のタイミングを計るためである。すなわち、回数ｂ１に達するとＲＭＷ用キャッシュ２ａが空き容量不足に陥っている可能性が高くなるので、制御部１ｂは回数ｂ１に達する前のタイミングを決定する。制御部１ｂは、情報処理装置３から受信する書き込みコマンドの受信回数が監視閾値に達した場合に、ＲＭＷ用キャッシュ２ａの空き容量が今後不足する可能性が高い（すなわち、記憶装置２の応答時間が悪化する可能性が高い）と判定する。
【００２９】
制御部１ｂは、ＲＭＷ用キャッシュ２ａの空き容量が今後不足する可能性が高いと判定した場合、ストレージ制御装置１によりＲＭＷを実行すると決定する。ストレージ制御装置１は、ＲＭＷの実行を開始する。制御部１ｂが、ストレージ制御装置１によるＲＭＷを実行してもよい。制御部１ｂは、記憶部１ｃの記憶領域をＲＭＷ用のキャッシュとして利用してもよい。記憶部１ｃには、ＲＭＷ用キャッシュ２ａよりも大きな記憶領域をＲＭＷ用のキャッシュとして確保できる。ストレージ制御装置１がＲＭＷの実行を開始すると、記憶装置２ではＲＭＷを実行しなくてよくなるため、ＲＭＷを実行する装置が、記憶装置２からストレージ制御装置１へ切り替わることになる。
【００３０】
ところで、通常時（ＲＭＷ用キャッシュ２ａが空き容量不足になっていないとき）は、ストレージ制御装置１よりも、記憶装置２によってＲＭＷを行う方が、書き込みの応答時間は小さくて済むことが多い。理由は次の通りである。ストレージ制御装置１でＲＭＷを実行する場合、ストレージ制御装置１は（１）記憶装置２からデータを読み出してストレージ制御装置１内のキャッシュに格納し、（２）同キャッシュ内のデータを更新し、（３）同キャッシュから記憶装置２にデータを書き戻す。このため、記憶装置２内だけでＲＭＷを行うよりも、ストレージ制御装置１と記憶装置２との間のデータ伝送などに伴うオーバヘッドが生じる。したがって、通常時は記憶装置２でＲＭＷを行う方が効率的である。
【００３１】
このとき、例えば、ストレージ制御装置１および記憶装置２におけるＲＭＷの処理速度を比較することで、処理速度の速い方の装置でＲＭＷを実行すると決定することも考えられる。しかし、記憶装置２によるＲＭＷの処理速度が、ストレージ制御装置１によるＲＭＷの処理速度を下回るとき、記憶装置２側で既にＲＭＷ用キャッシュ２ａが空き容量不足に陥っている可能性が高い。このように、ＲＭＷの処理速度の比較に応じてＲＭＷの実行主体を決定していたのでは遅く、ＲＭＷ用キャッシュ２ａのキャッシュ使用状況に追随した切替を行えない。記憶装置２の応答時間の悪化は、情報処理装置３の処理遅延の要因となる。例えば、記憶装置２のデータにアクセスするユーザの業務処理に悪影響を及ぼすおそれがある。
【００３２】
これに対し、ストレージ制御装置１は、書き込みコマンドの、あるアクセス傾向（書き込みサイズおよび受信頻度）における連続の受信数に基づいて、ＲＭＷ用キャッシュ２ａの使用状況を判定し、記憶装置２の代わりにＲＭＷを実行するか否かを決定する。これにより、ストレージ制御装置１は、ＲＭＷ用キャッシュ２ａが空き容量不足に陥るよりも前の適切なタイミングでＲＭＷを代行できる。
【００３３】
ストレージ制御装置１によるＲＭＷの実行を開始すると、記憶装置２はＲＭＷを実行しなくなる。よって、記憶装置２のＲＭＷ用キャッシュ２ａの空き容量不足の発生を抑えられる。その結果、記憶装置２の応答時間が悪化することを未然に防げる。ユーザの業務処理への悪影響も抑えられる。
【００３４】
なお、ストレージ制御装置１は、情報処理装置３による書き込みのアクセスが比較的低下してきた場合（例えば、一定時間以上書き込みがなかった場合）、ストレージ制御装置１によるＲＭＷの実行を停止し、記憶装置２によるＲＭＷの実行を再開させてもよい。ある程度書き込みコマンドが低減すれば、ＲＭＷ用キャッシュ２ａの空き容量に余裕ができ、空き容量不足になる可能性が低減するからである。また、前述のように、通常時は、記憶装置２でＲＭＷを実行する方が、ＲＭＷの処理効率を向上できるからである。こうして、記憶装置２に対するデータの書き込み性能を向上できる。
【００３５】
また、ストレージ制御装置１は、テーブルＴ１（性能情報）を記憶装置２のベンダや機種毎に予め作成し、ライブラリ化しておいてもよい。そうすれば、１度取得した性能情報を、同ベンダ、同機種の複数の記憶装置に対して流用できる。
【００３６】
更に、前述のように、ストレージ制御装置１は、記憶装置２を含む複数の記憶装置を内蔵したストレージ装置と接続されることもある。その場合、ストレージ制御装置１は、複数の記憶装置を用いてＲＡＩＤ（Redundant Array of Independent Disks）を組んでいてもよい。ＲＡＩＤを組む場合にも第１の実施の形態の方法により、ストレージ制御装置１は、記憶装置毎にＲＭＷを代行するか否かを決定する。そして、ストレージ制御装置１は、記憶装置毎にＲＭＷを代行する。
【００３７】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、ストレージ装置１００、管理装置２００およびサーバ３００を含む。ストレージ装置１００およびサーバ３００は、ＳＡＮ１０に接続されている。ストレージ装置１００、管理装置２００およびサーバ３００は、ネットワーク２０に接続されている。ネットワーク２０は、例えばＬＡＮである。
【００３８】
ストレージ装置１００は、複数のＨＤＤを内蔵し、サーバ３００の処理に用いられるデータを記憶する。ストレージ装置１００は、データの書き込みコマンドをサーバ３００から受信すると、内蔵のＨＤＤにデータを書き込む。ストレージ装置１００は、書き込み結果をサーバ３００に送信する。ストレージ装置１００は、データの読み出しコマンドをサーバ３００から受信すると、内蔵のＨＤＤからデータを読み出し、読み出したデータをサーバ３００に送信する。ストレージ装置１００は、ＨＤＤと併せてＳＳＤを内蔵してもよい。
【００３９】
管理装置２００は、ストレージ装置１００の運用管理を行うサーバコンピュータである。管理装置２００は、例えば、ネットワーク２０を介してストレージ装置１００に動作制御の設定を行う。管理装置２００は、ストレージ装置１００により実行されるプログラム（例えば、ファームウェアのプログラム）を、ネットワーク２０を介してストレージ装置１００に送信することもある。
【００４０】
サーバ３００は、ストレージ装置１００に格納されたデータにアクセスするサーバコンピュータである。サーバ３００は、業務用のアプリケーションのプログラムを実行し、業務処理サービスをユーザに提供する。
【００４１】
図３は、ストレージ装置のハードウェア例を示す図である。ストレージ装置１００は、コントローラモジュール（ＣＭ：Controller Module）１１０，１２０およびＤＥ（Drive Enclosure）１３０を有する。
【００４２】
ＣＭ１１０，１２０は、ＤＥ１３０が備えるＨＤＤの記憶領域の管理や記憶領域に対するデータアクセスを制御する。ＣＭ１１０，１２０はストレージ装置１００内で冗長化され、データへのアクセス性能や耐故障性の向上が図られている。ＣＭ１１０，１２０は、第１の実施の形態のストレージ制御装置１の一例である。
【００４３】
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、フラッシュメモリ１１３、ＣＡ（Channel Adaptor）１１４、ＮＡ（Network Adaptor）１１５およびＤＩ（Drive Interface）１１６を有する。各ユニットは、ＣＭ１１０のバスに接続されている。ＣＭ１２０もＣＭ１１０と同様のユニットを有する。
【００４４】
プロセッサ１１１は、ＣＭ１１０の情報処理を制御するプロセッサである。プロセッサ１１１は、マルチプロセッサであってもよい。プロセッサ１１１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１１１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４５】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置である。ＲＡＭ１１２は、プロセッサ１１１に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。
フラッシュメモリ１１３は、ＣＭ１１０の補助記憶装置である。フラッシュメモリ１１３は、不揮発性の半導体メモリである。フラッシュメモリ１１３は、ファームウェアのプログラムなどを記憶する。
【００４６】
ＣＡ１１４は、ＳＡＮ１０を介してサーバ３００と通信する通信インタフェースである。ＣＡ１１４の通信インタフェースの種別は、例えばファイバチャネルやＳＣＳＩ（Small Computer System Interface）などである。ＣＭ１１０は、複数個のＣＡを備えて、ＣＡを冗長構成としてもよい。
【００４７】
ＮＡ１１５は、ネットワーク２０を介して他のコンピュータと通信する通信インタフェースである。ＮＡ１１５の通信インタフェースの種別は、例えばＬＡＮ接続用のＮＩＣ（Network Interface Card）である。ＣＭ１１０は、複数個のＮＡを備えて、ＮＡを冗長構成としてもよい。
【００４８】
ＤＩ１１６は、ＤＥ１３０と通信する通信インタフェースである。ＤＩ１１６の通信インタフェースの種別は、例えばファイバチャネルやＳＣＳＩなどである。ＣＭ１１０は、複数個のＤＩを備えて、ＤＩを冗長構成としてもよい。
【００４９】
ＤＥ１３０は、ＨＤＤ１３１，１３２，１３３，１３４を含む複数のＨＤＤ（他のＨＤＤの図示を省略している）を収容する。例えば、ＣＭ１１０，１２０は、ＨＤＤ１３１，１３２，１３３，１３４を用いてＲＡＩＤと呼ばれる技術により、データへのアクセス性能や各ＨＤＤの耐障害性を向上した論理的な記憶領域を実現する。
【００５０】
図４は、管理装置のハードウェア例を示す図である。管理装置２００は、プロセッサ２０１、ＲＡＭ２０２、ＨＤＤ２０３、画像信号処理部２０４、入力信号処理部２０５、読み取り装置２０６および通信インタフェース２０７を有する。各ユニットは管理装置２００のバスに接続されている。
【００５１】
プロセッサ２０１は、管理装置２００の情報処理を制御する。プロセッサ２０１は、マルチプロセッサであってもよい。プロセッサ２０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ２０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５２】
ＲＡＭ２０２は、管理装置２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種データを記憶する。
【００５３】
ＨＤＤ２０３は、管理装置２００の補助記憶装置である。ＨＤＤ２０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ２０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。管理装置２００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００５４】
画像信号処理部２０４は、プロセッサ２０１からの命令に従って、管理装置２００に接続されたディスプレイ２１に画像を出力する。ディスプレイ２１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００５５】
入力信号処理部２０５は、管理装置２００に接続された入力デバイス２２から入力信号を取得し、プロセッサ２０１に出力する。入力デバイス２２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００５６】
読み取り装置２０６は、記録媒体２３に記録されたプログラムやデータを読み取る装置である。記録媒体２３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体２３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置２０６は、例えば、プロセッサ２０１からの命令に従って、記録媒体２３から読み取ったプログラムやデータをＲＡＭ２０２またはＨＤＤ２０３に格納する。プロセッサ２０１は、記録媒体２３から読み取ったプログラムやデータ（例えば、ストレージ装置１００のファームウェアのプログラムやデータ）をストレージ装置１００に送信することもできる。
【００５７】
通信インタフェース２０７は、ネットワーク２０を介して他の装置と通信を行う。通信インタフェース２０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００５８】
図５は、ＨＤＤの例を示す図である。図５（Ａ）は、ＨＤＤ１３１においてＲＭＷ（リードモディファイライト）を実行するハードウェアを例示している。ＨＤＤ１３１は、プロセッサ１３１ａおよびキャッシュ１３１ｂを有する。プロセッサ１３１ａは、ＨＤＤ１３１におけるＲＭＷを実行する。プロセッサ１３１ａは、ＲＭＷ用途のＡＳＩＣやＦＰＧＡなどでもよいし、ＲＭＷ用のプログラムを実行する汎用プロセッサでもよい。
【００５９】
キャッシュ１３１ｂは、プロセッサ１３１ａによるＲＭＷ処理に用いられる記憶領域である。キャッシュ１３１ｂは、ＨＤＤ１３１が備える磁気ディスク（単にディスクということがある）の記憶領域の一部分でもよいし、磁気ディスクとは別個に設けられた半導体メモリでもよい。ＲＭＷ用のプロセッサ１３１ａおよびキャッシュ１３１ｂの実装方法は、ベンダによって異なり、また、ブラックボックス化されている。このため、キャッシュ１３１ｂの最大容量や使用量などを外部から直接参照することはできない。
【００６０】
図５（Ｂ）は、ＨＤＤ１３１が備える磁気ディスクを例示している。ＨＤＤ１３１は、複数の磁気ディスクを備える。ディスクＤは複数の磁気ディスクのうちの１つである。ディスクＤ上の同心円の縁に形成される領域はトラックと呼ばれる。トラックＴｒは、ディスクＤ上における複数のトラックのうちの１つである。トラックＴｒ上を所定サイズ単位に物理的に区切った領域は、物理セクタと呼ばれる。物理セクタＳｃは、トラックＴｒ上における複数の物理セクタのうちの１つである。
【００６１】
以下の説明では、１つの物理セクタのサイズを、一例として４０９６バイト（Bytes）＝４キロバイト（ＫＢ：Kilo-Bytes）とする。ディスクＤ上に４ＫＢの物理セクタが配置された構造を４ＫＢのアライメント（Alignment）ということもある。ただし、１つの物理セクタのサイズは、８ＫＢ，１６ＫＢなど、他のサイズでもよい。この場合、ＨＤＤ１３１のディスクＤに対するデータ書き込みの操作は、４ＫＢの物理セクタ単位に行われる。すなわち、当該物理セクタがＨＤＤ１３１におけるデータの書き込み単位となる。
【００６２】
近年、ＨＤＤの大容量化および１度に処理されるデータ量の増大に伴い、物理セクタのサイズ（セクタサイズ）を、これまで用いられてきた５１２バイトから４ＫＢに増やしたＨＤＤ（例えば、ＨＤＤ１３１，１３２，１３３，１３４）が利用されている。一方で、サーバ３００で動作するＯＳなどのソフトウェアによっては、セクタサイズを５１２バイト（４ＫＢよりも小さいサイズ）としてデータ書き込みを行うものもある。このようなソフトウェアからの書き込みコマンドでは、５１２バイト×ｎ（ｎは１以上の整数）倍のサイズの書き込みが要求される。すると、ＨＤＤ１３１における物理セクタの４ＫＢアライメントと整合しない書き込みが生じ得る。
【００６３】
図６は、書き込みの例を示す図である。図６において、太い黒枠の矩形で囲われた部分は１つの物理セクタを示す。物理セクタは、８つ（＝４０９６バイト÷５１２バイト）の論理セクタを含む。図６では、物理セクタ内を８つに分割した矩形により論理セクタを表している。論理セクタは、ＬＢＡ（Logical Block Address）と呼ばれる番号により識別される。各論理セクタ上の番号は、各物理セクタの先頭を示すＬＢＡに対する相対アドレス（オフセット）を示す。相対アドレス“１”は、物理セクタの先頭に対応するＬＢＡである。相対アドレス“８”は、物理セクタの終端に対応するＬＢＡである。図６では、書き込みコマンドにより書き込み対象となる箇所（論理セクタ）を、論理セクタに該当する枠内にアスタリスク記号“＊”を付して表す。
【００６４】
書き込みサイズが４ＫＢの整数倍で、かつ、書き込み先の先頭ＬＢＡ（書き込みを開始するＬＢＡ）が物理セクタの先頭に対応する場合、当該書き込みは、物理セクタのアライメントと整合する。一方、書き込みサイズが４ＫＢの整数倍でない場合、または、書き込み先の先頭ＬＢＡが物理セクタの先頭に対応しない場合、当該書き込みは、物理セクタのアライメントと整合しない。
【００６５】
ここで、以下の説明では、物理セクタのアライメントと整合しない書き込みを、「アンアラインｗｒｉｔｅ」と称することがある。また、アンアラインｗｒｉｔｅを要求する書き込みコマンドを、「アンアラインｗｒｉｔｅコマンド」と称することがある。
【００６６】
例えば、図６（Ａ）の書き込みは、物理セクタのアライメントと整合している。書き込みサイズが４ＫＢの整数倍で、かつ、書き込み先の先頭ＬＢＡが物理セクタの先頭に対応するからである。
【００６７】
図６（Ｂ）の書き込みは、アンアラインｗｒｉｔｅである。書き込みサイズが４ＫＢの整数倍ではないからである。また、図６（Ｂ）の例では、書き込み先の先頭ＬＢＡが物理セクタの先頭に対応してもいない。
【００６８】
図６（Ｃ）の書き込みは、アンアラインｗｒｉｔｅである。書き込み先の先頭ＬＢＡが物理セクタの先頭に対応してはいるが、書き込みサイズが４ＫＢの整数倍ではないからである。
【００６９】
図６（Ｄ）の書き込みは、アンアラインｗｒｉｔｅである。書き込みサイズが４ＫＢの整数倍ではあるが、書き込み先の先頭ＬＢＡが物理セクタの先頭に対応していないからである。
【００７０】
ＨＤＤ１３１は、ＲＭＷを実行することで、アンアラインｗｒｉｔｅを４ＫＢアライメント単位の書き込み操作によりエミュレートする。
図７は、ＲＭＷの例を示す図である。図７は、物理セクタＳｃにおける相対アドレス６，７，８を対象としたアンアラインｗｒｉｔｅをＲＭＷにより実行する例を示している。
【００７１】
プロセッサ１３１ａは、物理セクタＳｃのうち、相対アドレス６，７，８に相当する論理セクタに対するアンアラインｗｒｉｔｅの要求を受け付ける（ステップＳ１）。プロセッサ１３１ａは、物理セクタＳｃ内の全論理セクタのデータをキャッシュ１３１ｂに読み出す（ＲＥＡＤ）（ステップＳ２）。
【００７２】
プロセッサ１３１ａは、キャッシュ１３１ｂに読み出したデータのうち、相対アドレス６，７，８に対応する部分を更新する（ＭＯＤＩＦＹ）（ステップＳ３）。プロセッサ１３１ａは、キャッシュ１３１ｂにおける全論理セクタのデータ（相対アドレス６，７，８の部分が更新されたデータ）を物理セクタＳｃに書き込む（ＷＲＩＴＥ）（ステップＳ４）。このように、プロセッサ１３１ａは、アンアラインｗｒｉｔｅを４ＫＢアライメント単位の書き込み操作により実行する。ＲＭＷは、ＨＤＤ１３１における書き込みのオーバヘッドとなり得る。
【００７３】
図８は、書き込みの応答時間とＩＯＰＳとの関係の例を示す図である。図８では、横軸をＨＤＤに対する書き込みコマンドのＩＯＰＳ（Input / Output Per Second）とし、縦軸を当該ＨＤＤの書き込みの応答時間としている。
【００７４】
系列Ｋ１は、第１の種類のＨＤＤによりＲＭＷを行う場合のＩＯＰＳと応答時間との関係を示す。ＨＤＤの種類は、ＨＤＤを製造するベンダやＨＤＤの機種によって識別される。系列Ｋ２は、第２の種類のＨＤＤによりＲＭＷを行う場合のＩＯＰＳと応答時間との関係を示す。系列Ｋ３は、ＨＤＤではなく、ＣＭ（例えば、ＣＭ１１０，１２０）によってＲＭＷを行う場合のＩＯＰＳと応答時間との関係を示す。系列Ｋ１，Ｋ２，Ｋ３は何れも、所定の書き込みサイズの書き込みコマンド（アンアラインｗｒｉｔｅ）を所定数発行した場合である。
【００７５】
系列Ｋ１，Ｋ２，Ｋ３によれば、通常（ＨＤＤによるＲＭＷの応答時間の方が、ＣＭによるＲＭＷの応答時間よりも短い期間）では、ＣＭによってＲＭＷを実行するよりも、ＨＤＤによってＲＭＷを実行する方が効率的である。ＣＭでＲＭＷを実行する場合、ＨＤＤのみでＲＭＷを行うよりも、ＣＭとＨＤＤとの間のデータ伝送のオーバヘッドが余計に生じるからである。しかし、ＨＤＤに対する書き込みの負荷がある程度まで達すると、ＨＤＤによる書き込みの応答時間は悪化する（応答時間が極度に増大する）。ＨＤＤにおいて、ＲＭＷ用のキャッシュの空き容量不足が発生するからである。このため、書き込みの負荷がある程度高い状態では、ＨＤＤによってＲＭＷを実行するよりも、ＣＭによってＲＭＷを実行した方が効率的となる。ＣＭでは、ＲＭＷ用のキャッシュとしてＨＤＤよりも大きな記憶領域を割り当て可能だからである。
【００７６】
そこで、ストレージ装置１００は、ＨＤＤ１３１，１３２，１３３，１３４のＲＭＷ用のキャッシュの空き容量が枯渇する前に、ＣＭ１１０，１２０によりＲＭＷを代行する機能を提供する。
【００７７】
図９は、ＣＭの機能例を示す図である。ＣＭ１１０は、記憶部１４０、コマンド受信部１５０、アクセス処理部１６０、測定部１７０およびＲＭＷ制御部１８０を有する。記憶部１４０は、ＲＡＭ１１２やフラッシュメモリ１１３に確保された記憶領域として実現される。コマンド受信部１５０、アクセス処理部１６０、測定部１７０およびＲＭＷ制御部１８０は、ＲＡＭ１１２に記憶されたプログラムをプロセッサ１１１が実行することで実現される。
【００７８】
記憶部１４０は、測定部１７０により測定されたＨＤＤの性能情報を記憶する。記憶部１４０は、何れのＨＤＤに対するＲＭＷを代行するかを管理するための管理情報を記憶する。
【００７９】
コマンド受信部１５０は、サーバ３００により発行されたデータの書き込みや読み出しのコマンドを受信する。ここで、データの書き込みコマンドには、書き込み対象のデータを示す情報および書き込みを開始する先頭ＬＢＡを示す情報が含まれる。書き込み対象のデータのサイズが当該書き込みコマンドによる書き込みサイズである。
【００８０】
アクセス処理部１６０は、コマンド受信部１５０が受信したコマンドに応じて、データの書き込みや読み出しをＤＥ１３０に指示する。例えば、アクセス処理部１６０は、サーバ３００により発行されたコマンドに含まれる書き込み対象または読み出し対象の論理的なアドレスを物理的なアドレスに変換する。物理的なアドレスは、各ＨＤＤに対応しており、アクセス処理部１６０は、何れのＨＤＤに対する書き込み／読み出しの要求であるかを当該アドレスに基づいて識別する。アクセス処理部１６０は、識別したＨＤＤに対する書き込みや読み出しをＤＥ１３０に指示する。アクセス処理部１６０は、書き込みの結果（書き込み成功／失敗など）をＤＥ１３０から取得し、サーバ３００に送信する。アクセス処理部１６０は、読み出されたデータをＤＥ１３０から取得し、サーバ３００に送信する。アクセス処理部１６０は、測定部１７０により生成された性能測定用の書き込みコマンドに応じて、データの書き込みをＤＥ１３０に指示することもある。
【００８１】
測定部１７０は、ＤＥ１３０に収容されたＨＤＤ１３１，１３２，１３３，１３４のベンダおよび機種別の性能情報を予め取得する。具体的には、測定部１７０は、システムの運用準備段階において、複数の種類のアンアラインｗｒｉｔｅコマンドをＨＤＤ１３１に対して発行することで、ＨＤＤ１３１の応答時間を測定する。測定部１７０は、書き込みサイズおよび発行頻度に対応付けて、ＨＤＤ１３１の応答時間が悪化するまでの発行回数を性能情報として記録する。測定部１７０は、性能情報を記憶部１４０に格納する。
【００８２】
また、測定部１７０は、システムの運用開始後は、コマンド受信部１５０により受信される複数の書き込みコマンドから書き込みのアクセス傾向を判定し、ＲＭＷ制御部１８０に通知する。更に、測定部１７０は、書き込みコマンドの受信数をＲＭＷ制御部１８０に通知する。
【００８３】
ＲＭＷ制御部１８０は、システムの運用時における、測定部１７０による書き込みコマンドの測定結果と、記憶部１４０に記憶された性能情報とに基づいて、ＲＭＷを代行するか否かを、ＨＤＤ毎に決定する。ＲＭＷ制御部１８０は、ＲＭＷを代行するＨＤＤを管理するための管理情報を生成して、記憶部１４０に格納する。ＲＭＷ制御部１８０は、管理情報に基づいて、ＨＤＤ毎のＲＭＷを代行する。
【００８４】
具体的には、アクセス処理部１６０が該当のＨＤＤから読み出した物理セクタの情報を記憶部１４０に確保されたキャッシュに格納し、図７で例示した処理と同様の処理を実行する。すなわち、図７において物理セクタの情報の読み出し先が、キャッシュ１３１ｂではなく、記憶部１４０内のキャッシュになる（ＲＥＡＤ）。ＲＭＷ制御部１８０は、同キャッシュの情報を更新後（ＭＯＤＩＦＹ）、アクセス処理部１６０を介して同キャッシュの更新後の情報を同物理セクタに書き込む（ＷＲＩＴＥ）。
【００８５】
ここで、ＣＭ１２０もＣＭ１１０と同様の機能を有する。例えば、ＣＭ１１０，１２０でアクセス対象とするＨＤＤを分担する。ＣＭ１１０，１２０は、自身が担当するＨＤＤに対して、ＲＭＷを代行するか否かの処理を行う。
【００８６】
図１０は、ＲＭＷ性能テーブルの例を示す図である。ＲＭＷ性能テーブル１４１は、ＨＤＤ１３１，１３２，１３３，１３４のベンダおよび機種に対する性能情報である。ＲＭＷ性能テーブル１４１は、記憶部１４０に格納される。ＲＭＷ性能テーブル１４１は、頻度および書き込みサイズ毎の性能測定結果の項目を含む。
【００８７】
頻度の項目には、書き込みコマンドの発行頻度が登録される。書き込みサイズ毎の性能測定結果の項目には、書き込みサイズ毎の性能測定結果が登録される。ここで、性能測定結果は、カウントおよび時間の項目を更に含む。カウントの項目には、応答時間が悪化するまでの書き込みコマンドの発行数が登録される。応答時間の悪化が観測されたタイミングでは、ＨＤＤ側のＲＭＷ用のキャッシュが空き容量不足に陥っている（空き容量が枯渇している）と考えることができる。時間の項目には、キャッシュの空き容量が枯渇し、新たな書き込みコマンドがなくなった後、キャッシュ内のデータのＲＭＷが全て完了するまでの時間（データ吐き出し時間と称する）が登録される。データ吐き出し時間は、ＣＭ１１０，１２０によるＲＭＷの実行を停止し、ＨＤＤによるＲＭＷを再開させる際に利用される情報である。
【００８８】
例えば、ＲＭＷ性能テーブル１４１には、頻度が“１０多重”、書き込みサイズ８ＫＢに対するカウントが“ｃ１１”、時間が“ｔ１１”、書き込みサイズ６４ＫＢに対するカウントが“ｃ１２”、時間が“ｔ１２”、書き込みサイズ１２８ＫＢに対するカウントが“Ｃ１３”、時間が“ｔ１３”、・・・という情報が登録される。
【００８９】
これは、所定周期（例えば、１００ｍｓ（ミリ秒））毎に１０個の書き込みコマンドを発行するという条件下でのＨＤＤ１３１の性能測定の結果を示す。具体的には、書き込みサイズが８ＫＢの場合、発行回数が“ｃ１１”に達した時にキャッシュ１３１ｂが空き容量不足になり、応答時間が悪化したことを示す。また、その後のデータ吐き出し時間が“ｔ１１”であったことを示す。書き込みサイズが６４ＫＢの場合、発行回数が“ｃ１２”に達した時にキャッシュ１３１ｂが空き容量不足になり、応答時間が悪化したことを示す。また、その後のデータ吐き出し時間が“ｔ１２”であったことを示す。書き込みサイズが１２８ＫＢの場合、発行回数が“ｃ１３”に達した時にキャッシュ１３１ｂが空き容量不足になり、応答時間が悪化したことを示す。また、その後のデータ吐き出し時間が“ｔ１３”であったことを示す。
【００９０】
同様に、例えば、ＲＭＷ性能テーブル１４１には、頻度が“１００ｍｓに１コマンド”、書き込みサイズ８ＫＢに対するカウントが“ｃ２１”、時間が“ｔ２１”、書き込みサイズ６４ＫＢに対するカウントが“ｃ２２”、時間が“ｔ２２”、書き込みサイズ１２８ＫＢに対するカウントが“ｃ２３”、時間が“ｔ２３”という情報が登録される。これは、１００ｍｓに１回のコマンドを発行するという条件下でのＨＤＤ１３１の性能測定の結果を示す。
【００９１】
このように、ＲＭＷ性能テーブル１４１には、ＨＤＤ１３１に様々な条件で負荷をかけたときのキャッシュ枯渇までの書き込みコマンド数が予め登録される。ＲＭＷ性能テーブル１４１は、ＣＭ１１０（またはＣＭ１２０）により、ＨＤＤのベンダおよび機種毎に予め作成され、記憶部１４０に格納される。例えば、ＨＤＤ１３１，１３２，１３３，１３４が同じベンダの同じ機種であれば、ＨＤＤ１３１を用いて作成したＲＭＷ性能テーブル１４１を、ＨＤＤ１３２，１３３，１３４に対しても利用できる。ＣＭ１２０もＲＭＷ性能テーブル１４１と同様の情報を記憶する。
【００９２】
図１１は、ＲＭＷ管理テーブルの例を示す図である。ＲＭＷ管理テーブル１４２は、ＣＭ１１０によりＲＭＷを代行するＨＤＤを管理するための管理情報である。ＲＭＷ管理テーブル１４２は、記憶部１４０に格納される。ＲＭＷ管理テーブル１４２は、ＲＡＩＤ  ＩＤ（IDentifier）、ＨＤＤ  ＩＤ、ＲＭＷ実行フラグおよびアクセス傾向の項目が含まれる。
【００９３】
ＲＡＩＤ  ＩＤの項目には、ＲＡＩＤグループを識別するための識別情報（ＲＡＩＤ  ＩＤ）が登録される。ＨＤＤ  ＩＤの項目には、ＨＤＤを識別するための識別情報（ＨＤＤ  ＩＤ）が登録される。ＲＭＷ実行フラグの項目には、該当のＨＤＤに対して、ＣＭ１１０がＲＭＷを実行するか否かを示すフラグ情報が登録される。ＣＭ１１０がＲＭＷを実行する場合、ＲＭＷ実行フラグは“ｔｒｕｅ”が登録される。ＣＭ１１０がＲＭＷを実行しない場合、ＲＭＷ実行フラグは“ｆａｌｓｅ”が登録される。アクセス傾向の項目には、ＣＭ１１０がＲＭＷを代行する際におけるＨＤＤに対する書き込みのアクセス傾向の情報が登録される。アクセス傾向の項目には、ＲＭＷ実行フラグが“ｔｒｕｅ”の場合にアクセス傾向の内容を示す情報が登録される。ＲＭＷ実行フラグが“ｆａｌｓｅ”の場合には、設定なし（図１１ではハイフン“−”を表記している）となる。
【００９４】
例えば、ＲＭＷ管理テーブル１４２には、ＲＡＩＤ  ＩＤが“Ｒ１”、ＨＤＤ  ＩＤが“Ｄ１”、ＲＭＷ実行フラグが“ｔｒｕｅ”、アクセス傾向が“１コマンド／１００ｍｓ，８ＫＢ”という情報が登録される。これは、ＲＡＩＤ  ＩＤ“Ｒ１”で示されるＲＡＩＤグループに属するＨＤＤ  ＩＤ“Ｄ１”のＨＤＤに対して、ＣＭ１１０がＲＭＷを実行する（すなわち、当該ＨＤＤではＲＭＷを実行しない）ことを示す。また、当該ＨＤＤに対する書き込みのアクセス傾向が、１００ｍｓに１コマンドの頻度であり、書き込みサイズが８ＫＢであることを示す。
【００９５】
また、例えば、ＲＭＷ管理テーブル１４２には、ＲＡＩＤ  ＩＤが“Ｒ２”、ＨＤＤ  ＩＤが“Ｄ４”、ＲＭＷ実行フラグが“ｆａｌｓｅ”、アクセス傾向が“−”（設定なし）という情報が登録される。これは、ＲＡＩＤ  ＩＤ“Ｒ２”で示されるＲＡＩＤグループに属するＨＤＤ  ＩＤ“Ｄ４”のＨＤＤに対して、ＣＭ１１０がＲＭＷを実行しない（すなわち、当該ＨＤＤによりＲＭＷを実行する）ことを示す。
【００９６】
上記の例では、ＨＤＤ  ＩＤ“Ｄ１”、“Ｄ２”、“Ｄ３”で識別される３つのＨＤＤが同一ＲＡＩＤグループに属している。例えば、当該ＲＡＩＤグループのＲＡＩＤレベルを、ＲＡＩＤ５とする。その場合、当該ＲＡＩＤグループに対して、データ書き込みが行われるとき、３つのＨＤＤに対してデータ書き込みが行われることになる（書き込みサイズは、データを分割格納する度合いに応じて計算できる。例えば、ストライプディスク２＋パリティディスク１なら書き込み対象データの半分のサイズが１台のＨＤＤ当たりの書き込みサイズとなる）。３つのＨＤＤのベンダおよび機種が同じである場合、ほぼ同じ条件下で各ＨＤＤのＲＭＷ用のキャッシュ容量不足が生じると考えられる。このため、同ＲＡＩＤグループに属する３つのＨＤＤに対して、ＣＭ１１０は、同じタイミングでＲＭＷの実行を開始することになる。
【００９７】
次に、ストレージ装置１００による処理手順を説明する。まず、システムの運用準備段階における、ＨＤＤの性能の測定処理の手順を説明する。その次に、システムの運用時におけるＲＭＷの切替処理の手順を説明する。
【００９８】
図１２は、測定処理の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
（Ｓ１１）測定部１７０は、以下に示すステップＳ１２〜Ｓ２５の処理を、書き込みサイズ毎に繰り返し実行する。測定を行う書き込みサイズは、記憶部１４０に予め登録される。例えば、システムの開発者や管理者などは、運用中に想定される書き込みサイズのリストの情報を作成し、記憶部１４０に予め登録する。測定部１７０は、書き込みサイズのリストから測定を行う書き込みサイズを１つずつ順番に選択し、選択した書き込みサイズ毎にステップＳ１２〜Ｓ２５の処理を実行する。
【００９９】
（Ｓ１２）測定部１７０は、以下に示すステップＳ１３〜Ｓ２４の処理を、書き込みコマンドの発行頻度毎に繰り返し実行する。測定を行う頻度は、記憶部１４０に予め登録される。例えば、システムの開発者や管理者などは、運用中に想定される書き込み頻度のリストの情報を作成し、記憶部１４０に予め登録する。測定部１７０は、発行頻度のリストから測定を行う発行頻度を１つずつ順番に選択し、選択した発行頻度毎にステップＳ１３〜Ｓ２４の処理を実行する。
【０１００】
（Ｓ１３）測定部１７０は、ＨＤＤ１３１に対するアンアラインｗｒｉｔｅコマンドを発行する。書き込みサイズは、ステップＳ１１で選択されているサイズである。発行頻度は、ステップＳ１２で選択されている頻度である。書き込み対象データとして、テスト用のデータを指定する。アンアラインｗｒｉｔｅコマンドは、アクセス処理部１６０を介して、ＤＥ１３０に送信される。測定部１７０は、現在の条件（書き込みサイズおよび発行頻度）で、ステップＳ１３によりアンアラインｗｒｉｔｅコマンドを発行開始したタイミングでタイマによる時間計測をスタートさせる。また、測定部１７０は、タイマのスタートとともにアンアラインｗｒｉｔｅコマンドの発行数のカウントも開始する。
【０１０１】
（Ｓ１４）測定部１７０は、アンアラインｗｒｉｔｅコマンド毎にＨＤＤ１３１の書き込み結果の応答を受信する。測定部１７０は、アンアラインｗｒｉｔｅコマンド毎に応答時間を計測する。応答時間は、例えばアンアラインｗｒｉｔｅコマンドを発行してから、当該アンアラインｗｒｉｔｅコマンドに対する応答がＨＤＤ１３１から返ってくるまでの時間である。測定部１７０は、応答時間の時系列を記憶部１４０に記録する。
【０１０２】
（Ｓ１５）測定部１７０は、応答時間が悪化したか否かを判定する。悪化した場合、測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を停止し、処理をステップＳ１６に進める。悪化していない場合、測定部１７０は、処理をステップＳ１３に進めて、アンアラインｗｒｉｔｅコマンドの発行を継続する。例えば、測定部１７０は、ＨＤＤ１３１の書き込みの応答時間が所定の閾値よりも大きい場合に応答時間が悪化したと判定し、応答時間が所定の閾値以下の場合に応答時間が悪化していないと判定する。あるいは、測定部１７０は、応答時間の増分の変化が所定割合（例えば、１５０％増や２００％増など）よりも大きい場合に応答時間が悪化したと判定し、応答時間の増分の変化が所定割合以下である場合に応答時間が悪化していないと判定してもよい。判定に用いる閾値または増分の変化の割合の情報は、記憶部１４０に予め登録される。
【０１０３】
（Ｓ１６）測定部１７０は、ステップＳ１３でスタートさせたタイマにより計測された時間ａ（経過時間ａ）を記憶部１４０に記録する。測定部１７０は、応答時間が悪化するまでのアンアラインｗｒｉｔｅコマンドの発行数を、ＲＭＷ性能テーブル１４１の現頻度および現書き込みサイズに対応するカウントの項目に登録する。測定部１７０は、タイマと書き込みサイズのカウントをリセットする。
【０１０４】
（Ｓ１７）測定部１７０は、時間Ｔが経過するまで待機する。時間Ｔの初期値は、記憶部１４０に予め登録される。時間Ｔの初期値は比較的短い時間（例えば、時間ａよりも短い時間）とする。時間Ｔを徐々に大きくしながら、データ吐き出し時間を決定できるようにするためである。
【０１０５】
（Ｓ１８）測定部１７０は、ＨＤＤ１３１に対するアンアラインｗｒｉｔｅコマンドを発行する。書き込みサイズおよび発行頻度は、ステップＳ１３と同じである。測定部１７０は、現在の条件（書き込みサイズおよび発行頻度）でステップＳ１８によりアンアラインｗｒｉｔｅコマンドを発行開始したタイミングでタイマによる時間計測をスタートさせる。
【０１０６】
（Ｓ１９）測定部１７０は、アンアラインｗｒｉｔｅコマンド毎にＨＤＤ１３１の書き込み結果の応答を受信する。測定部１７０は、アンアラインｗｒｉｔｅコマンド毎に応答時間を計測する。測定部１７０は、応答時間の時系列を記憶部１４０に記録する。
【０１０７】
（Ｓ２０）測定部１７０は、応答時間が悪化したか否かを判定する。判定方法は、ステップＳ１５と同様である。悪化した場合、測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を停止し、処理をステップＳ２１に進める。悪化していない場合、測定部１７０は、処理をステップＳ１８に進めてアンアラインｗｒｉｔｅコマンドの発行を継続する。
【０１０８】
（Ｓ２１）測定部１７０は、ステップＳ１８でスタートさせたタイマにより計測された時間ｂ（経過時間ｂ）を記憶部１４０に記録する。測定部１７０は、タイマをリセットする。
【０１０９】
（Ｓ２２）測定部１７０は、記録された経過時間ａおよび経過時間ｂについて、ａはｂ以下（ａ≦ｂ）であるか否かを判定する。ａがｂ以下である場合、処理をステップＳ２４に進める。ａがｂ以下でない（すなわち、ａがｂよりも大きい）場合、処理をステップＳ２３に進める。
【０１１０】
（Ｓ２３）測定部１７０は、時間Ｔに時間αを加算する。時間αを加算する理由は、ステップＳ１７における待機時間を増やすためである。時間αは記憶部１４０に予め登録される。時間αは、例えば時間Ｔの初期値の５％または１０％程度の時間としてもよい。そして、処理をステップＳ１３に進める。測定部１７０は、ステップＳ１３へ処理を進めた後、ステップＳ１５でＹｅｓの場合に、再度ステップＳ１６に進むことになる。この場合、測定部１７０は、ステップＳ１６をスキップして、ステップＳ１７を実行する。
【０１１１】
（Ｓ２４）測定部１７０は、データ吐き出し時間として時間Ｔを記録する。具体的には、測定部１７０は、ＲＭＷ性能テーブル１４１の現頻度および現書き込みサイズ（経過時間ａを登録したときのアクセス傾向）に対応する時間の項目に、時間Ｔを登録する。
【０１１２】
（Ｓ２５）測定部１７０は、全ての発行頻度について測定を終えると繰り返しを終了する。
（Ｓ２６）測定部１７０は、全ての書き込みサイズについて測定を終えると繰り返しを終了する。
【０１１３】
このようにして、測定部１７０は、ＲＭＷ性能テーブル１４１を作成する。なお、測定部１７０は、ステップＳ１３において、前回の条件で測定を行った後、今回の条件での測定を開始する前に、キャッシュ１３１ｂ内のデータが全て処理されるのに十分と考えられる時間だけ待機してから、今回の条件での測定を開始する。前回の条件での測定時におけるアンアラインｗｒｉｔｅコマンドのキャッシュ１３１ｂに対する影響を除去するためである。なお、今回の条件での測定を開始する際、測定部１７０は時間Ｔを初期値にリセットする。
【０１１４】
図１３は、データ吐き出し時間の例を示す図である。図１３（Ａ）（Ｂ）では時間とキャッシュデータ量（キャッシュ１３１ｂに格納されたデータ量）との関係を示している。何れも横軸は時間であり、縦軸はキャッシュデータ量である。図１３（Ａ）は、データ吐き出し時間を決定できない場合を例示している。図１３（Ｂ）は、データ吐き出し時間を決定できる場合を例示している。ここで、あるタイミングにおける時間Ｔの値をＴ０とする。
【０１１５】
図１３（Ａ）において、アンアラインｗｒｉｔｅコマンドの発行により、時間ａが経過した時点において、キャッシュ１３１ｂはキャッシュフルとなり、空き容量が不足する。すると、測定部１７０は、ＨＤＤ１３１の応答時間が悪化したことを検出し、経過時間ａを得る（ステップＳ１６に相当）。ただし、測定部１７０は、このタイミングにおいて現条件（アクセス傾向）での経過時間ａを取得済の場合、経過時間ａを改めて取得しなくてよい。
【０１１６】
その後、測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を停止し、時間Ｔ０だけ待機する（ステップＳ１７に相当）。待機している間、キャッシュ１３１ｂのデータは処理されて、キャッシュ１３１ｂのキャッシュデータ量が減る（空き容量が増える）。測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を再開する（ステップＳ１８に相当）。時間ｂ１が経過した時点において、キャッシュ１３１ｂはキャッシュフルとなりＨＤＤ１３１の応答時間が悪化するので、測定部１７０は経過時間ｂ１を得る（ステップＳ２１に相当）。この場合、ａ＞ｂ１である。よって、測定部１７０は、Ｔ＝Ｔ０＋αとする。
【０１１７】
図１３（Ｂ）において、アンアラインｗｒｉｔｅコマンドの発行により、時間ａが経過した時点において、キャッシュ１３１ｂはキャッシュフルとなり、空き容量が不足する。その後、測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を停止し、時間Ｔ０＋αだけ待機する（ステップＳ１７に相当）。待機している間、キャッシュ１３１ｂのデータは処理されて、キャッシュ１３１ｂのキャッシュデータ量が減る（空き容量が増える）。測定部１７０は、アンアラインｗｒｉｔｅコマンドの発行を再開する（ステップＳ１８に相当）。時間ｂ２が経過した時点において、キャッシュ１３１ｂはキャッシュフルとなりＨＤＤ１３１の応答時間が悪化するので、測定部１７０は経過時間ｂ２を得る（ステップＳ２１に相当）。この場合、ａ≦ｂ２である。よって、測定部１７０は、時間Ｔ＝Ｔ０＋αをデータ吐き出し時間と決定する。
【０１１８】
次に、システムの運用時におけるＲＭＷの切替処理の手順を説明する。まず、ＲＭＷを実行する装置を、ＨＤＤ１３１からＣＭ１１０に切り替える例を説明する。次に、ＲＭＷを実行する装置を、ＣＭ１１０からＨＤＤ１３１に切り替える例を説明する。ＣＭ１１０の手順を主に説明するが、ＣＭ１２０も同様の手順で、ＣＭ１２０が担当するＨＤＤに対するＲＭＷの切替処理を行う。また、ＨＤＤ１３１に対するＲＭＷの切替の処理を例示するが、ＣＭ１１０は他のＨＤＤに対しても同様にしてＲＭＷの切替を行う。
【０１１９】
図１４は、ＲＭＷ切替処理（その１）の例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。ステップＳ３１の前において、ＣＭ１１０はＨＤＤ１３１のＲＭＷを代行していない。
【０１２０】
（Ｓ３１）コマンド受信部１５０は、サーバ３００から書き込みコマンドを受信する。書き込みコマンドは、ＨＤＤ１３１（または、ＨＤＤ１３１が属するＲＡＩＤグループ）に対する書き込みコマンドである。測定部１７０は、受信した書き込みコマンドの現在のアクセス傾向（書き込みサイズおよび受信頻度）からアンアラインｗｒｉｔｅコマンドの上限値Ｍを決定する。例えば、測定部１７０は、サーバ３００から受信した書き込みコマンドの所定時間当たりの受信数から、当該コマンドの受信頻度（すなわち、サーバ３００による書き込みコマンドの発行頻度）を取得する。また、測定部１７０は、ディスクドライバによる書き込みコマンドの解析結果から、ＨＤＤ１３１に対する書き込みサイズを取得する。測定部１７０は、取得した受信頻度および書き込みサイズに対応するカウント値Ｃを、ＲＭＷ性能テーブル１４１から取得する。例えば、測定部１７０は、Ｍ＝β×Ｃ（０＜β＜１）とする。一例として、β＝０．９とすることが考えられる。
【０１２１】
（Ｓ３２）コマンド受信部１５０は、ＨＤＤ１３１（または、ＨＤＤ１３１が属するＲＡＩＤグループ）に対する書き込みコマンドをサーバ３００から受信する。なお、書き込みコマンドは、アクセス処理部１６０を介してＤＥ１３０に送られ、書き込みコマンドに応じてＤＥ１３０により各ＨＤＤへの書き込みが行われる。なお、測定部１７０は、書き込みの応答時間の時系列をＨＤＤ毎に記録する（後述のステップＳ３５の判定のため）。
【０１２２】
（Ｓ３３）測定部１７０は、受信した書き込みコマンドがアンアラインｗｒｉｔｅであるか否かを判定する。アンアラインｗｒｉｔｅである場合、処理をステップＳ３４に進める。アンアラインｗｒｉｔｅでない場合、処理をステップＳ３２に進める。アンアラインｗｒｉｔｅであるか否かの判定方法は、図６で例示した通りである。具体的には、書き込みサイズが４ＫＢの整数倍で、かつ、書き込み先の先頭ＬＢＡ（書き込みを開始するＬＢＡ）が物理セクタの先頭に対応する場合、当該書き込みは、アンアラインｗｒｉｔｅではない。一方、書き込みサイズが４ＫＢの整数倍でない場合、または、書き込み先の先頭ＬＢＡが物理セクタの先頭に対応しない場合、当該書き込みは、アンアラインｗｒｉｔｅである。
【０１２３】
（Ｓ３４）測定部１７０は、アンアラインｗｒｉｔｅコマンドのコマンド受信数をカウントアップする（コマンド受信数に１を加算する）。
（Ｓ３５）測定部１７０は、ＨＤＤ１３１の応答時間が悪化したか否かを判定する。判定方法は、ステップＳ１５と同様である。悪化した場合、処理をステップＳ３６に進める。悪化していない場合、処理をステップＳ３７に進める。
【０１２４】
（Ｓ３６）測定部１７０は、コマンド受信数のカウントをクリアする（カウントクリア）。そして、処理をステップＳ４１に進める。
（Ｓ３７）測定部１７０は、コマンド受信数が上限値Ｍよりも大きいか否かを判定する。コマンド受信数がＭよりも大きい場合、処理をステップＳ３８に進める。コマンド受信数がＭ以下の場合、処理をステップＳ３２に進める。
【０１２５】
（Ｓ３８）測定部１７０は、サーバ３００によるＨＤＤ１３１（または、ＨＤＤ１３１が属するＲＡＩＤグループ）に対する書き込みコマンドの現在のアクセス傾向（書き込みサイズおよび受信頻度）からアンアラインｗｒｉｔｅコマンドの上限値Ｎを決定する。Ｎの決定方法は、ステップＳ３１のＭの決定方法と同様である（βの値として同じ値を用いる）。
【０１２６】
（Ｓ３９）測定部１７０は、上限値ＭがＮ以上（Ｍ≧Ｎ）であるか否かを判定する。ＭがＮ以上である場合、処理をステップＳ４１に進める。ＭがＮ以上でない（すなわち、ＭがＮより小さい）場合、処理をステップＳ４０に進める。
【０１２７】
（Ｓ４０）測定部１７０は、上限値Ｍを、Ｎに置換する。そして、処理をステップＳ３２に進める。
（Ｓ４１）ＲＭＷ制御部１８０は、ＨＤＤ１３１によるＲＭＷから、ＣＭ１１０によるＲＭＷに切り替えると決定する。ＲＭＷ制御部１８０は、ＲＭＷ管理テーブル１４２において、ＨＤＤ１３１に対応するＲＭＷ実行フラグを“ｆａｌｓｅ”から“ｔｒｕｅ”に設定変更する。ＲＭＷ制御部１８０は、ＨＤＤ１３１についてステップＳ３８で判定した現在のアクセス傾向の情報を、ＲＭＷ管理テーブル１４２に登録する。ＲＭＷ制御部１８０は、ＨＤＤ１３１のアンアラインｗｒｉｔｅに対して、ＲＭＷを開始する。
【０１２８】
このようにして、ＣＭ１１０は、ＨＤＤ１３１によるＲＭＷを、ＣＭ１１０によるＲＭＷに切り替える。上限値Ｍは、前述のようにＲＭＷ性能テーブル１４１に登録されたカウント値に１よりも小さい値を乗じて得た値である。このため、ステップＳ３７の判定により、ＨＤＤ１３１におけるキャッシュ１３１ｂの空き容量不足が発生する前に、ＣＭ１１０によるＲＭＷに切り替えることができる。このとき、例えば、同じベンダの同じ機種の複数のＨＤＤでＲＡＩＤを組む場合、ＨＤＤ１３１と同じＲＡＩＤグループに属する他のＨＤＤも、ＨＤＤ１３１と同じタイミングで、ＣＭ１１０によるＲＭＷに切り替わることになる。
【０１２９】
なお、ステップＳ３３において、アンアラインｗｒｉｔｅコマンドであるか否かを判定する理由は、アンアラインｗｒｉｔｅ以外の書き込みコマンドも含めてコマンド受信数を計数してしまうと、キャッシュ１３１ｂの使用状況の判定を適切に行えないからである。ステップＳ３３において、計数対象のコマンドをアンアラインｗｒｉｔｅコマンドに絞り込むことにより、キャッシュ１３１ｂの使用状況の判定を適切に行える。
【０１３０】
また、ステップＳ３５で、応答時間が悪化した場合に直ちにＣＭによるＲＭＷに切り替える理由は、応答時間が悪化してしまった場合に迅速に対応し、応答時間を改善するためである。
【０１３１】
更に、ステップＳ３９の時点でアクセス傾向に対する上限値Ｎを取得し直す理由は、ステップＳ３１の時点でのアクセス傾向と、ステップＳ３９の時点でのアクセス傾向とが異なっている可能性があるからである。上限値ＭがＮよりも小さい場合は、ステップＳ３１の時点よりもステップＳ３９の時点の方が、ＨＤＤ１３１が低負荷になっていると考えられるので、上限値ＭをＮの値に置換して、計測を継続する。一方、上限値ＭがＮ以上である場合は、ステップＳ３１，Ｓ３９の両時点でのＨＤＤ１３１に対する書き込み負荷が同等か、あるいは、ステップＳ３９の時点の方が高負荷になっていると考えられるので、ＣＭ１１０によるＲＭＷに切り替える。こうして、なるべくＨＤＤ１３１によるＲＭＷを維持しながら、ＣＭ１１０でＲＭＷを代行するか否かを決定できる。
【０１３２】
図１５は、ＲＭＷ切替処理（その２）の例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。ステップＳ５１の前において、ＣＭ１１０はＨＤＤ１３１のＲＭＷを代行している。
【０１３３】
（Ｓ５１）測定部１７０は、ＨＤＤ１３１に対する（あるいは、ＨＤＤ１３１が属するＲＡＩＤグループに対する）Ｉ／Ｏがあるか否かを判定する。Ｉ／Ｏがある場合、処理をステップＳ５２に進める。Ｉ／Ｏがない場合、処理をステップＳ５３に進める。
【０１３４】
（Ｓ５２）測定部１７０は、監視タイマの計測時間をクリアする（０にする）。そして、処理をステップＳ５１に進める。監視タイマによる計測を開始済でない場合、ステップＳ５２をスキップして、処理をステップＳ５１に進める。
【０１３５】
（Ｓ５３）測定部１７０は、ＨＤＤ１３１に対し監視タイマによる計測を開始済であるか否かを判定する。開始済の場合、処理をステップＳ５５に進める。開始済でない場合、処理をステップＳ５４に進める。
【０１３６】
（Ｓ５４）測定部１７０は、監視タイマによる計測を開始する。測定部１７０は、ＨＤＤ毎に監視タイマを設ける。そして、処理をステップＳ５５に進める。
（Ｓ５５）測定部１７０は、ＲＭＷ管理テーブル１４２を参照して、ＨＤＤ１３１に対応するＲＭＷ切替時のアクセス傾向の情報を取得する。測定部１７０は、取得したアクセス傾向の情報に対応するデータ吐き出し時間をＲＭＷ性能テーブル１４１から取得する。例えば、ＨＤＤ１３１に対し、アクセス傾向“１コマンド／１００ｍｓ，８ＫＢ”という情報がＲＭＷ管理テーブル１４２に登録されている場合、ＲＭＷ性能テーブル１４１によればデータ吐き出し時間は“ｔ２１”である。測定部１７０は、監視タイマの計測時間が当該データ吐き出し時間よりも大きいか否かを判定する。大きい場合、処理をステップＳ５６に進める。小さい場合、処理をステップＳ５１に進める。
【０１３７】
（Ｓ５６）ＲＭＷ制御部１８０は、ＣＭ１１０によるＲＭＷから、ＨＤＤ１３１によるＲＭＷに切り替えると決定する。ＲＭＷ制御部１８０は、ＲＭＷ管理テーブル１４２において、ＨＤＤ１３１に対応するＲＭＷ実行フラグを“ｔｒｕｅ”から“ｆａｌｓｅ”に設定変更し、アクセス傾向の情報を削除する。そして、ＲＭＷ制御部１８０は、ＨＤＤ１３１に対するＲＭＷの実行を停止する。
【０１３８】
このようにして、ＣＭ１１０は、ＨＤＤ１３１に対するＩ／Ｏがなくなった状態が、データ吐き出し時間分経過したタイミングで、ＣＭ１１０によるＲＭＷの代行を停止する。ＨＤＤ１３１に対するＩ／Ｏがないまま、データ吐き出し時間が経過したのであれば、ＲＭＷのためにキャッシュ１３１ｂ内に格納されたデータは全て処理済となっており、キャッシュ１３１ｂの空き容量に十分な余裕ができたと考えられるからである。
【０１３９】
なお、例えば、同じベンダの同じ機種の複数のＨＤＤでＲＡＩＤを組む場合、ＨＤＤ１３１と同じＲＡＩＤグループに属する他のＨＤＤも、ＨＤＤ１３１と同じタイミングで、ＨＤＤによるＲＭＷに切り替わることになる。ＨＤＤ１３１にＩ／Ｏがなければ、同ＲＡＩＤグループに属する他のＨＤＤに対するＩ／Ｏもなくなるからである。
【０１４０】
また、測定部１７０は、図１５に示す処理において、ＨＤＤ１３１にＩ／Ｏがある場合に、ＲＭＷ管理テーブル１４２に登録されたアクセス傾向の情報に変更があれば、当該情報を最新の情報に更新してもよい。そして、ステップＳ５５において、測定部１７０は、最新のアクセス傾向に対応するデータ吐き出し時間をＲＭＷ性能テーブル１４１から取得して計測時間との判定を行ってもよい。
【０１４１】
以上のように、ＣＭ１１０は、書き込みコマンドの、あるアクセス傾向（書き込みサイズおよび受信頻度）における連続の受信数に基づいて、キャッシュ１３１ｂの使用状況を判定し、ＨＤＤ１３１の代わりにＲＭＷを実行するか否かを決定する。これにより、ＣＭ１１０は、キャッシュ１３１ｂが空き容量不足に陥るよりも前の適切なタイミングでＲＭＷを代行できる。なお、ＣＭ１１０は、あるアクセス傾向が連続して継続した期間（頻度×期間＝受信数）に基づいて、キャッシュ１３１ｂの使用状況を判定しているということもできる。また、キャッシュ１３１ｂに余裕ができた場合には、ＨＤＤ１３１によるＲＭＷを再開させることができる。これにより、ストレージ装置１００における書き込み性能の向上を図れる。また、ストレージ装置１００におけるデータへのアクセス性能の向上を図れる。
【０１４２】
ところで、第１の実施の形態の情報処理は、制御部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１１１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体２３に記録できる。
【０１４３】
例えば、プログラムを記録した記録媒体２３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。ストレージ装置１００またはＣＭ１１０は、プロセッサ１１１およびＲＡＭ１１２を有するコンピュータを含むと考えてよい。コンピュータは、例えば、記録媒体２３に記録されたプログラムまたは他のコンピュータ（例えば、管理装置２００）から受信したプログラムを、ＲＡＭ１１２やフラッシュメモリ１１３などの記憶装置に格納（インストール）してもよい。コンピュータは、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１４４】
以上の第１，第２の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  記憶装置に対するデータの書き込みのコマンドを受信する受信部と、
前記コマンドの書き込みサイズと受信頻度と受信数とに基づいて、前記記憶装置によるリードモディファイライトに用いられるキャッシュの使用状況を判定し、判定結果に応じて前記リードモディファイライトを自装置により実行するか否かを決定する制御部と、
を有するストレージ制御装置。
【０１４５】
（付記２）  前記制御部は、前記記憶装置への前記コマンドの書き込みサイズおよび頻度の組に対して前記記憶装置の応答時間を閾値よりも増大させる前記コマンドの数を示す情報と、前記コマンドの現状の書き込みサイズ、受信頻度および受信数とに基づいて前記キャッシュの使用状況を判定する、付記１記載のストレージ制御装置。
【０１４６】
（付記３）  前記制御部は、前記コマンドを複数発行して前記記憶装置に送信し、書き込みサイズおよび書き込み頻度の組と発行数とに対する前記記憶装置の応答時間を計測することで前記情報を生成する、付記２記載のストレージ制御装置。
【０１４７】
（付記４）  前記制御部は、前記記憶装置のベンダおよび機種毎に前記情報を生成する、付記３記載のストレージ制御装置。
（付記５）  前記制御部は、前記コマンドの受信数が、前記情報に登録された前記コマンドの数よりも小さい所定数に達すると前記キャッシュの空き容量が不足すると判定し、前記リードモディファイライトを前記自装置により実行すると決定する、付記２乃至４の何れか１つに記載のストレージ制御装置。
【０１４８】
（付記６）  前記制御部は、前記リードモディファイライトの前記自装置での実行を開始した後、前記記憶装置に対する書き込みのコマンドを所定時間以上受信しない場合、前記リードモディファイライトの前記自装置による実行を停止する、付記１乃至５の何れか１つに記載のストレージ制御装置。
【０１４９】
（付記７）  前記制御部は、書き込みのコマンドを複数発行して前記記憶装置に送信し、前記コマンドに対する前記記憶装置の応答時間を計測し、応答時間が閾値よりも増大するまでの経過時間に基づいて前記所定時間を決定する、付記６記載のストレージ制御装置。
【０１５０】
（付記８）  前記制御部は、受信した前記コマンドのうち、前記記憶装置におけるデータの書き込み単位に整合しない前記コマンドを選択し、選択した前記コマンドに基づいて前記キャッシュの使用状況を判定する、付記１乃至７の何れか１つに記載のストレージ制御装置。
【０１５１】
（付記９）  前記制御部は、複数の記憶装置それぞれに対し、前記リードモディファイライトを前記自装置により実行するか否かを決定する、付記１乃至８の何れか１つに記載のストレージ制御装置。
【０１５２】
（付記１０）  前記制御部は、ＲＡＩＤグループ毎に、前記ＲＡＩＤグループに属する前記複数の記憶装置に対する前記リードモディファイライトを前記自装置により実行するか否かを決定する、付記１乃至８の何れか１つに記載のストレージ制御装置。
【０１５３】
（付記１１）  コンピュータに、
記憶装置に対するデータの書き込みのコマンドを受信し、
前記コマンドの書き込みサイズと受信頻度と受信数とに基づいて、前記記憶装置によるリードモディファイライトに用いられるキャッシュの使用状況を判定し、
判定結果に応じて前記リードモディファイライトを前記コンピュータにより実行するか否かを決定する、
処理を実行させる制御プログラム。
【０１５４】
（付記１２）  コンピュータが、
記憶装置に対するデータの書き込みのコマンドを受信し、
前記コマンドの書き込みサイズと受信頻度と受信数とに基づいて、前記記憶装置によるリードモディファイライトに用いられるキャッシュの使用状況を判定し、
判定結果に応じて前記リードモディファイライトを前記コンピュータにより実行するか否かを決定する、
制御方法。
【符号の説明】
【０１５５】
１  ストレージ制御装置
１ａ  受信部
１ｂ  制御部
１ｃ  記憶部
２  記憶装置
２ａ  ＲＭＷ用キャッシュ
２ｂ  制御部
３  情報処理装置
Ｔ１  テーブル
Ｗ１，Ｗ２，Ｗ３  書き込みコマンド
【図１】
0006476969.tif 000002
【図２】
0006476969.tif 000003
【図３】
0006476969.tif 000004
【図４】
0006476969.tif 000005
【図５】
0006476969.tif 000006
【図６】
0006476969.tif 000007
【図７】
0006476969.tif 000008
【図８】
0006476969.tif 000009
【図９】
0006476969.tif 000010
【図１０】
0006476969.tif 000011
【図１１】
0006476969.tif 000012
【図１２】
0006476969.tif 000013
【図１３】
0006476969.tif 000014
【図１４】
0006476969.tif 000015
【図１５】
0006476969.tif 000016