(57)【要約】【課題】本発明のストレージシステムは、シーケンシャルなデータ配置が期待されるデータへのシーケンシャルアクセスに対する応答性能を改善する。【解決手段】記憶部２には、ストリーミング配信されるデータが格納されている。ホスト３は、記憶部２から読み出したデータを、各ユーザマシン４に送信する。プリフェッチ部１Ｃは、ホスト３により読み出されるデータを、先回りして記憶部２から読出し、キャッシュメモリ１Ｂに記憶させる。断片化検出部１Ｄは、キャッシュヒット率に応じて、データ配置の断片化の程度を検出する。断片化の度合が大きくなるほど、プリフェッチ量算出部１Ｅは、より少ないプリフェッチ量を算出する。プリフェッチ動作制御部１Ｆは、データ配置の断片化の度合が大きい場合、プリフェッチ動作を停止させ、断片化の度合が低下した場合、プリフェッチ動作を再開させる。【選択図】図１
2007249457.tif 000002
【特許請求の範囲】
【請求項１】
シーケンシャルな読出しが期待されるデータを記憶する書換可能な記憶デバイスを少なくとも１つ以上備えた記憶装置と、
前記記憶装置から読み出される前記データを記憶するためのキャッシュメモリと、
上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、前記記憶装置に記憶された前記データを予め読み出して前記キャッシュメモリに記憶させるプリフェッチ部と、
前記記憶装置に記憶されている前記データの配置の連続性を判定するための連続性判定部と、
前記連続性判定部による判定結果と前記上位装置からのリードアクセスの状況とに基づいて、プリフェッチ量を算出するプリフェッチ量算出部と、
前記プリフェッチ量算出部により算出された前記プリフェッチ量を前記プリフェッチ部に設定し、かつ、前記連続性判定部による判定結果に基づいて前記プリフェッチ部の動作を制御するためのプリフェッチ動作制御部と、
を備えたストレージシステム。
【請求項２】
前記連続性判定部は、前記リードアクセスのキャッシュヒット率に基づいて、前記記憶部に記憶されている前記データの配置の連続性を数値化して出力する請求項１に記載のストレージシステム。
【請求項３】
前記プリフェッチ動作制御部は、前記連続性判定部による前記判定結果が予め設定された所定値以下の場合に、前記プリフェッチ部によるプリフェッチ動作を停止させる請求項１に記載のストレージシステム。
【請求項４】
前記プリフェッチ動作制御部は、前記連続性判定部による前記判定結果が予め設定された他の所定値以上の場合に、前記プリフェッチ部によるプリフェッチ動作を作動させる請求項１に記載のストレージシステム。
【請求項５】
前記プリフェッチ動作制御部は、前記連続性判定部による前記判定結果が予め設定された所定値以下の場合に、前記プリフェッチ部によるプリフェッチ動作を停止させ、前記判定結果が予め設定された他の所定値以上の場合に、前記プリフェッチ動作を再開させる請求項１に記載のストレージシステム。
【請求項６】
前記連続性判定部は、前記リードアクセスのキャッシュヒット率に基づいて、前記記憶部に記憶されている前記データの配置の連続性を数値化して出力するものであり、かつ、前記プリフェッチ動作が停止されている場合は、前記プリフェッチ動作の停止期間における前記キャッシュヒット率を予測することにより、前記プリフェッチ動作の停止期間における前記データの配置の連続性を判定する請求項３または請求項５のいずれかに記載のストレージシステム。
【請求項７】
前記プリフェッチ量算出部は、前記プリフェッチ部によるプリフェッチ動作の一周期内に前記上位装置から読出しを要求される最大データ量に基づいて、前記プリフェッチ量を算出する請求項１に記載のストレージシステム。
【請求項８】
前記プリフェッチ量算出部は、前記プリフェッチ部によるプリフェッチ動作の一周期内に前記上位装置から読出しを要求される最大データ量を最大プリフェッチ量とし、この最大プリフェッチ量に、数値化される前記連続性判定部による判定結果を乗算することにより、前記プリフェッチ量を算出する請求項１に記載のストレージシステム。
【請求項９】
前記プリフェッチ動作制御部は、前記プリフェッチ部によるプリフェッチ動作を停止させる場合、警報を出力させる請求項１に記載のストレージシステム。
【請求項１０】
前記プリフェッチ動作制御部は、前記プリフェッチ部によるプリフェッチ動作を停止させる場合に警報を出力し、前記記憶装置に記憶されている前記データを連続的に配置させるための再配置処理を起動させる請求項１に記載のストレージシステム。
【請求項１１】
前記プリフェッチ部と、前記連続性判定部と、前記プリフェッチ量算出部及び前記プリフェッチ動作制御部は、前記記憶デバイスに設けられる論理ボリューム毎にそれぞれ動作する請求項１に記載のストレージシステム。
【請求項１２】
前記プリフェッチ動作制御部は、前記プリフェッチ量算出部により算出される前記プリフェッチ量を前記プリフェッチ部に設定することによりプリフェッチ動作を行わせる第１モードと、予め設定された初期値に基づいて前記プリフェッチ部にプリフェッチ動作を行わせる第２モードとを備えている請求項１に記載のストレージシステム。
【請求項１３】
前記プリフェッチ動作制御部は、前記プリフェッチ量算出部及び前記連続性判定部が作動可能となるまでの間は、前記第２モードで前記プリフェッチ部を作動させ、前記プリフェッチ量算出部及び前記連続性判定部が作動可能になった場合に、前記第２モードから前記第１モードに移行させる請求項１２に記載のストレージシステム。
【請求項１４】
上位装置からのシーケンシャルなリードアクセスに応じて、データを前記上位装置に送信するストレージシステムを制御するための制御方法であって、
上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、記憶装置に記憶されているデータを所定周期で予め読み出して、キャッシュメモリに記憶させるプリフェッチ動作を実行するプリフェッチステップと、
前記上位装置からのリードアクセスのキャッシュヒット率に基づいて、前記記憶装置に記憶されている前記データの配置の連続性を判定する連続性判定ステップと、
前記連続性判定ステップによる判定結果と、前記所定周期内における前記リードアクセスで要求される最大データ量とに基づいて、前記プリフェッチ動作で使用されるプリフェッチ量を算出するプリフェッチ量算出ステップと、
前記連続性判定ステップによる判定結果に基づいて、前記プリフェッチ動作を作動または停止させるプリフェッチ動作制御ステップと、
を実行させるストレージシステムの制御方法。
【請求項１５】
シーケンシャルな読出しが期待されるデータを記憶する書換可能な記憶デバイスを少なくとも１つ以上備えた記憶装置と、この記憶装置にシーケンシャルなリードアクセスを発行する上位装置とにそれぞれ接続される記憶制御装置であって、
前記記憶装置から読み出される前記データを記憶するためのキャッシュメモリと、
上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、前記記憶装置に記憶された前記データを予め読み出して前記キャッシュメモリに記憶させるプリフェッチ部と、
前記記憶装置に記憶されている前記データの配置の連続性を判定するための連続性判定部と、
前記連続性判定部による判定結果と前記上位装置からのリードアクセスの状況とに基づいて、プリフェッチ量を算出するプリフェッチ量算出部と、
前記プリフェッチ量算出部により算出された前記プリフェッチ量を前記プリフェッチ部に設定し、かつ、前記連続性判定部による判定結果に基づいて前記プリフェッチ部の動作を制御するためのプリフェッチ動作制御部と、
を備えた記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステムの制御方法に関する。
【背景技術】
【０００２】
近年では、例えば、映画、ドラマ、ニュース、教育番組等のような映像や音声等のコンテンツデータを、ネットワークを介して、ユーザに直接的に配信する技術が普及し始めている。ここで、コンテンツデータをユーザに供給する方法は、ダウンロード方式とストリーミング方式とに大別される。
【０００３】
ダウンロード方式の場合は、コンテンツデータの全体がユーザのコンピュータに記憶された後で、そのコンテンツデータの視聴が可能となる。このため、コンテンツの再生開始までに時間がかかり、使い勝手が低い。これに対し、ストリーミング方式の場合は、コンテンツデータの一部がユーザのコンピュータに受信された時点で、そのコンテンツデータを視聴することができる。
【０００４】
このため、現在では、ストリーミング方式によるコンテンツデータの配信（以下、ストリーミング配信）が広く普及しつつある。一方、コンテンツデータの画質等も年々向上しているため、コンテンツデータのサイズ及びビットレートも増大する傾向にある。従って、ストリーミング配信では、データサイズの大きなコンテンツデータを、より滑らかに配信することが求められる。
【０００５】
ところで、ストリーミング配信されるコンテンツデータは、ストレージシステムによって管理される。ストリーミング配信の高速性が求められるに従って、ストレージシステムの応答性能にも高速化が要求される。ストリーミング配信では、予め決定されたビットレートに従ってコンテンツデータを配信する必要があるため、ストレージシステムには、データの転送性能（スループット）の向上だけではなく、応答性能（レイテンシ）の向上も求められる。このような要求を解決するための従来技術も提案されている（特許文献１，特許文献２）。
【特許文献１】特開２００３−３４５５１９号公報
【特許文献２】特開平８−１３７７５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１では、ストライピングを使用した構成のディスクアレイ装置において、シーケンシャルリードの要求に対するプリフェッチ処理を、積極的に複数のドライブで実施することにより、キャッシュヒット率の向上を図っている。
【０００７】
しかし、この第１の従来技術は、データが記録媒体にシーケンシャルに配置されていることを前提条件としており、データが記録媒体にシーケンシャルに配置されていない場合について考察されていない。
【０００８】
一般的に、ファイルシステムがデータの追加や削除を繰り返すたびに、記録媒体に記憶されているデータは、断片化していく。データの断片化が進めば進むほど、プリフェッチによるデータの先読みが無駄となり、応答性能が低下していく。データの断片化の度合が進むと、プリフェッチを行った場合の応答性能の方が、プリフェッチを行わずに直接記録媒体からデータを読み出した場合の応答性能よりも低下する。従って、第１の従来技術は、データが記録媒体に予めシーケンシャルに配置されており、かつ、そのシーケンシャルな配置が崩れないという保証がある場合にのみ成立する。即ち、第１の従来技術は、ごく限られた用途でのみ効果を発揮し、使い勝手が低い。
【０００９】
また、特許文献２に記載の第２の従来技術では、ホストコンピュータからのファイルアクセス要求がシーケンシャルアクセスであるか否かを判断する。そして、シーケンシャルアクセスの場合は、アクセスの連続性に基づいてプリフェッチ量を算出し、プリフェッチを行うようになっている。
【００１０】
しかし、第２の従来技術は、単一のシーケンシャルアクセスを前提としており、複数のシーケンシャルアクセスが同時に発生する多重シーケンシャルアクセスには対応することができない。特に例えば、ストリーミング配信では、複数のユーザに、コンテンツデータをそれぞれ配信する。ストレージシステム側から見る場合、高多重シーケンシャルアクセス（複数ストリーム）は、全体として単一のシーケンシャルアクセスにならないため、第２の従来技術では、プリフェッチを行うことができない。即ち、第２の従来技術は、ストリーム数が１つの場合でなければ、その効果を発揮しない。
【００１１】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、シーケンシャルな読出しが期待されるデータへのシーケンシャルアクセスの応答性能を改善できるようにしたストレージシステム及びストレージシステムの制御方法を提供することにある。本発明の他の目的は、データ配置の連続性が失われた場合でも、シーケンシャルアクセスの応答性能が所定値以下まで低下するのを防止でき、使い勝手を改善できるようにしたストレージシステム及びストレージシステムの制御方法を提供することにある。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１２】
上記課題を解決すべく、本発明に従うストレージシステムは、シーケンシャルな読出しが期待されるデータを記憶する書換可能な記憶デバイスを少なくとも１つ以上備えた記憶装置と、記憶装置から読み出されるデータを記憶するためのキャッシュメモリと、上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、記憶装置に記憶されたデータを予め読み出してキャッシュメモリに記憶させるプリフェッチ部と、記憶装置に記憶されているデータの配置の連続性を判定するための連続性判定部と、連続性判定部による判定結果と上位装置からのリードアクセスの状況とに基づいて、プリフェッチ量を算出するプリフェッチ量算出部と、プリフェッチ量算出部により算出されたプリフェッチ量をプリフェッチ部に設定し、かつ、連続性判定部による判定結果に基づいてプリフェッチ部の動作を制御するためのプリフェッチ動作制御部と、を備える。
【００１３】
本発明では、連続性判定部は、リードアクセスのキャッシュヒット率に基づいて、記憶部に記憶されているデータの配置の連続性を数値化して出力する。
【００１４】
本発明では、プリフェッチ動作制御部は、連続性判定部による判定結果が予め設定された所定値以下の場合に、プリフェッチ部によるプリフェッチ動作を停止させる。
【００１５】
本発明では、プリフェッチ動作制御部は、連続性判定部による判定結果が予め設定された他の所定値以上の場合に、プリフェッチ部によるプリフェッチ動作を作動させる。
【００１６】
本発明では、プリフェッチ動作制御部は、連続性判定部による判定結果が予め設定された所定値以下の場合に、プリフェッチ部によるプリフェッチ動作を停止させ、判定結果が予め設定された他の所定値以上の場合に、プリフェッチ動作を再開させる。
【００１７】
本発明では、連続性判定部は、リードアクセスのキャッシュヒット率に基づいて、記憶部に記憶されているデータの配置の連続性を数値化して出力するものであり、かつ、プリフェッチ動作が停止されている場合は、プリフェッチ動作の停止期間におけるキャッシュヒット率を予測することにより、プリフェッチ動作の停止期間におけるデータの配置の連続性を判定する。
【００１８】
本発明では、プリフェッチ量算出部は、プリフェッチ部によるプリフェッチ動作の一周期内に上位装置から読出しを要求される最大データ量に基づいて、プリフェッチ量を算出する。
【００１９】
本発明では、プリフェッチ量算出部は、プリフェッチ部によるプリフェッチ動作の一周期内に上位装置から読出しを要求される最大データ量を最大プリフェッチ量とし、この最大プリフェッチ量に、数値化される連続性判定部による判定結果を乗算することにより、プリフェッチ量を算出する。
【００２０】
本発明では、プリフェッチ動作制御部は、プリフェッチ部によるプリフェッチ動作を停止させる場合、警報を出力させる。
【００２１】
本発明では、プリフェッチ動作制御部は、プリフェッチ部によるプリフェッチ動作を停止させる場合に警報を出力し、記憶装置に記憶されているデータを連続的に配置させるための再配置処理を起動させる。
【００２２】
本発明では、プリフェッチ部と、連続性判定部と、プリフェッチ量算出部及びプリフェッチ動作制御部は、記憶デバイスに設けられる論理ボリューム毎にそれぞれ動作する。
【００２３】
本発明では、プリフェッチ動作制御部は、プリフェッチ量算出部により算出されるプリフェッチ量をプリフェッチ部に設定することによりプリフェッチ動作を行わせる第１モードと、予め設定された初期値に基づいてプリフェッチ部にプリフェッチ動作を行わせる第２モードとを備えている。
【００２４】
本発明では、プリフェッチ動作制御部は、プリフェッチ量算出部及び連続性判定部が作動可能となるまでの間は、第２モードでプリフェッチ部を作動させ、プリフェッチ量算出部及び連続性判定部が作動可能になった場合に、第２モードから第１モードに移行させる。
【００２５】
本発明の他の観点に従うストレージシステムの制御方法は、上位装置からのシーケンシャルなリードアクセスに応じて、データを上位装置に送信するストレージシステムを制御するための制御方法であって、上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、記憶装置に記憶されているデータを所定周期で予め読み出して、キャッシュメモリに記憶させるプリフェッチ動作を実行するプリフェッチステップと、上位装置からのリードアクセスのキャッシュヒット率に基づいて、記憶装置に記憶されているデータの配置の連続性を判定する連続性判定ステップと、連続性判定ステップによる判定結果と、所定周期内におけるリードアクセスで要求される最大データ量とに基づいて、プリフェッチ動作で使用されるプリフェッチ量を算出するプリフェッチ量算出ステップと、連続性判定ステップによる判定結果に基づいて、プリフェッチ動作を作動または停止させるプリフェッチ動作制御ステップと、を実行させる。
【００２６】
本発明のさらに別の観点に従う記憶制御装置は、シーケンシャルな読出しが期待されるデータを記憶する書換可能な記憶デバイスを少なくとも１つ以上備えた記憶装置と、この記憶装置にシーケンシャルなリードアクセスを発行する上位装置とにそれぞれ接続される記憶制御装置であって、記憶装置から読み出されるデータを記憶するためのキャッシュメモリと、上位装置からのシーケンシャルなリードアクセスを受け付けるよりも前に、記憶装置に記憶されたデータを予め読み出してキャッシュメモリに記憶させるプリフェッチ部と、記憶装置に記憶されているデータの配置の連続性を判定するための連続性判定部と、連続性判定部による判定結果と上位装置からのリードアクセスの状況とに基づいて、プリフェッチ量を算出するプリフェッチ量算出部と、プリフェッチ量算出部により算出されたプリフェッチ量をプリフェッチ部に設定し、かつ、連続性判定部による判定結果に基づいてプリフェッチ部の動作を制御するためのプリフェッチ動作制御部と、を備える。
【００２７】
本発明の各手段、各部、各ステップの少なくとも一部は、コンピュータプログラムによって実行可能な場合がある。そして、このコンピュータプログラムは、各種記録媒体に固定された状態で配布したり、あるいは、通信媒体を介して送信することができる。
【発明を実施するための最良の形態】
【００２８】
以下、図面に基づき、本発明の実施形態を説明する。図１は、本発明の全体概念を模式的に示す説明図である。本実施形態では、ストリーミング配信システムに用いた場合を例に挙げて説明する。
【００２９】
ストレージシステムは、例えば、記憶制御装置１及び記憶部２を備えている。記憶制御装置１は、「上位装置」としてのホストコンピュータ（以下「ホスト」）３に、通信経路５を介して接続されている。また、記憶制御装置１は、別の通信経路６を介して、記憶部２に接続されている。記憶制御装置１は、ホスト３から発行されたアクセス要求に基づいて、記憶部２からデータを読み出したり、記憶部２にデータを書き込む。
【００３０】
ホスト３は、例えば、映像や音声等のコンテンツデータを各ユーザマシン４にストリーミング配信するものである。ホスト３は、通信ネットワーク７を介して、複数のユーザマシン４にそれぞれ接続されている。ホスト３は、例えば、サーバマシン、メインフレームマシン等のように構成される。
【００３１】
ホスト３は、データ配信部３Ａ及び再配置処理部３Ｂを備えている。データ配信部３Ａは、記憶制御装置１を介して記憶部２からストリーミング配信用のコンテンツデータを取得し、このコンテンツデータを所定のビットレートで、各ユーザマシン４にそれぞれ配信するためのものである。
【００３２】
再配置処理部３Ｂは、記憶部２に記憶されているコンテンツデータを再配置し、データを順番に記憶させるものである。再配置処理は、後述のプリフェッチ動作制御部１Ｆから出力される警報に基づいて、自動的に行うことができる。また、ストリーミング配信されているファイルデータを格納する領域（論理ボリューム）についてのみ、再配置処理を行うこともできる。
【００３３】
ホスト３は、ストレージシステムからコンテンツデータを読出しながら、この読み出したコンテンツデータを所定のビットレートに従って、各ユーザマシン４に、それぞれ送信する。ユーザマシン４は、例えば、パーソナルコンピュータやワークステーションあるいは携帯情報端末等として構成される。
【００３４】
ここで、通信経路５，６として、例えば、SAN（Storage Area Network）等を用い、通信ネットワーク７として、LAN（Local Area Network）やインターネット等を用いることができる。但し、本発明は、種々の通信ネットワークや通信プロトコルに対応可能であり、SANやLAN等に限定されない。
【００３５】
記憶制御装置１の構成を説明する。記憶制御装置１は、例えば、ディスクアレイサブシステムのコントローラとして構成される。これに限らず、記憶制御装置１は、ホスト３と記憶部２との間に設けられるスイッチ装置等のように構成することもできる。
【００３６】
以下の説明では、記憶制御装置１を、ディスクアレイサブシステムの一部として構成する場合を例に挙げるが、本発明はこれに限定されない。記憶制御装置１は、例えば、アクセス要求処理部１Ａと、キャッシュメモリ１Ｂと、プリフェッチ部１Ｃと、断片化検出部１Ｄと、プリフェッチ量算出部１Ｅと、プリフェッチ動作制御部１Ｆとを備えることができる。
【００３７】
アクセス要求処理部１Ａは、ホスト３から発行されたアクセス要求を処理するためのものである。アクセス要求としては、例えば、リードアクセス及びライトアクセスを挙げることができる。
【００３８】
ホスト３がリードアクセスを要求する場合、アクセス要求処理部１Ａは、要求されたデータがキャッシュメモリ１Ｂ上に存在するか否かを判定する。アクセス要求処理部１Ａは、要求されたデータがキャッシュメモリ１Ｂ上に記憶されている場合、そのデータを読み出してホスト３に転送する。要求されたデータがキャッシュメモリ１Ｂに記憶されていない場合、アクセス要求処理部１Ａは、記憶部２にアクセスしてデータを読出し、このデータをキャッシュメモリ１Ｂに保存してから、ホスト３に送信する。
【００３９】
ホスト３がライトアクセスを要求する場合、アクセス要求処理部１Ａは、書込みを要求されたデータ（ライトデータ）を、キャッシュメモリ１Ｂに記憶し、ホスト３に書込み完了を報告する。その後、アクセス要求処理部１Ａは、適当なタイミングで、キャッシュメモリ１Ｂに記憶されたライトデータを記憶部２に書き込む。あるいは、アクセス要求処理部１Ａは、ライトデータを記憶部２に書き込んだ後で、ホスト３に書込み完了を報告することもできる。
【００４０】
なお、ホスト３は、例えば、記憶部２に記憶されているデータの削除を要求したり、記憶部２の構成（ボリューム構成等）の変更を要求することもできる。
【００４１】
キャッシュメモリ１Ｂは、上述のように、例えば、ホスト３と記憶部２との間でデータを受け渡すために使用される。ホスト３により読み出されるリードデータ及びホスト３から書き込まれるライトデータは、いずれもキャッシュメモリ１Ｂを経由する。
【００４２】
プリフェッチ部１Ｃは、ホスト３によって読み出されることが期待されるデータを、事前に記憶部２から読み出して、キャッシュメモリ１Ｂに記憶させるものである。プリフェッチ部１Ｃは、プリフェッチ動作制御部１Ｆによって、そのプリフェッチ動作のオンオフが制御される。また、プリフェッチ部１Ｃは、プリフェッチ動作制御部１Ｆによって設定されたプリフェッチ量に応じて、キャッシュメモリ１Ｂに所定量（プリフェッチ量）のデータを記憶させる。
なお、プリフェッチ部１Ｃがデータを読み出す単位（i/oサイズ）は、ホスト３がキャッシュメモリ１Ｂからデータを読み出す単位と一致している必要はない。例えば、ホスト３がキャッシュメモリ１Ｂからデータを読み出す単位よりも大きい単位で、プリフェッチ部１Ｃはデータを読み出すことができる。また、例えば、データ読出し位置（アクセス要求先アドレス）を変更することにより、データ読出しの効率を改善することもできる。
【００４３】
断片化検出部１Ｄは、「連続性判定部」に対応する。断片化検出部１Ｄは、ホスト３から発行されたリードアクセスのキャッシュヒット率を監視しており、このキャッシュヒット率に基づいて、データの断片化の度合を検出する。データの断片化とは、データ配置の連続性が失われ、１つまたは一連のファイルのデータが不連続に記憶されていることを意味する。
【００４４】
もしも、記憶部２内にデータが連続して配置されている場合、ホスト３からのシーケンシャルリードアクセスに先回りして、順番にデータを読み出せば、キャッシュヒット率は高くなると考えられる。これに対し、順番にデータを読み出しているにもかかわらず、キャッシュヒット率が低下した場合、データの断片化が発生しており、連続的配置が期待されているデータが別々の場所（ブロック）に記憶されていると推定可能である。そこで、断片化検出部１Ｄは、キャッシュヒット率に基づいて、記憶部２内のデータ配置の乱れを間接的に検出する。
【００４５】
さらに、断片化検出部１Ｄは、プリフェッチ動作が停止している期間中においても、キャッシュヒット率を予測して、データの断片化の度合を監視している。即ち、断片化検出部１Ｄは、プリフェッチ動作の停止期間内に、もしも今プリフェッチ動作を行っていたとしたら、キャッシュヒットしたか否かを判定する。このような予測されるキャッシュヒット率に基づいて、断片化検出部１Ｄは、プリフェッチ動作の停止期間内にも、データの断片化を検出することができる。
【００４６】
プリフェッチ量算出部１Ｅは、プリフェッチ部１Ｃによってプリフェッチされるデータの量を算出するものである。プリフェッチ量算出部１Ｅは、例えば、断片化検出部１Ｄにより検出されたデータ配置の断片化の度合とホスト３によるリードアクセスの発生頻度とに基づいて、適切と考えられるプリフェッチ量を算出する。例えば、プリフェッチ量算出部１Ｅは、データ配置の断片化が進むにつれてプリフェッチ量が少なくなるように、プリフェッチ量を算出する。
【００４７】
プリフェッチ動作制御部１Ｆは、プリフェッチ部１Ｃによるプリフェッチ動作を制御するものである。プリフェッチ動作制御部１Ｆは、断片化検出部１Ｄにより検出されたデータ配置の断片化の度合に基づいて、プリフェッチ動作を行わせるか否かを制御する。また、プリフェッチ動作制御部１Ｆは、プリフェッチ動作を行わせる場合のプリフェッチ量を、プリフェッチ部１Ｃに設定する。
【００４８】
プリフェッチ動作制御部１Ｆは、データの断片化の度合が大きくなった場合、即ち、プリフェッチ動作による効果を期待できない場合、プリフェッチ動作の停止を決定することができる。プリフェッチ動作の停止を決定する場合、プリフェッチ動作制御部１Ｆは、警報を出力することができる。また、プリフェッチ動作制御部１Ｆは、データの断片化が小さくなった場合、即ち、プリフェッチ動作による効果を期待できる場合、プリフェッチ動作の再開を決定することができる。
【００４９】
記憶部２は、ホスト３によって利用されるデータを記憶するものである。記憶部２は、例えば、ハードディスクドライブや半導体メモリドライブ等のような書換可能な記憶デバイスを少なくとも１つ以上備えている。１つまたは複数の記憶デバイスが提供する物理的な記憶領域上には、１つまたは複数の論理ボリュームを設定可能である。この論理ボリュームには、ホスト３のファイルシステムによりアクセスされる少なくとも１つ以上のファイルのデータが記憶される。
【００５０】
本実施形態の動作を説明する。記憶部２には、ホスト３によってストリーミング配信されるコンテンツデータが格納されている。ホスト３は、記憶制御装置１を介して記憶部２からコンテンツデータを読出し、この読み出したコンテンツデータのパケットを各ユーザマシン４に、それぞれ送信する。
【００５１】
プリフェッチ部１Ｃは、ホスト３により読み出されるデータを、先回りして記憶部２から読出し、キャッシュメモリ１Ｂに記憶させておく。これにより、ホスト３は、必要なデータをより速やかに入手することができる。
【００５２】
例えば、ホスト３が最初に記憶部２の所定箇所からＤ１を読み出した場合、プリフェッチ部１Ｃは、Ｄ１の次に読み出されることが期待されるＤ２を、ホスト３からのリードアクセスが発行されるよりも前に、記憶部２から読み出してキャッシュメモリ１Ｂに記憶させる。
【００５３】
同様に、プリフェッチ部１Ｃは、ホスト３からリードアクセスが発行されるよりも前に、Ｄ２の次に配置されているデータを記憶部２から読み出してキャッシュメモリ１Ｂに記憶させる。しかし、記憶部２内でデータの断片化が生じているために、記憶部２内において、Ｄ２の次に配置されているデータがＤ３ではなく、Ｄ５であるとする。この場合、キャッシュメモリ１Ｂには、Ｄ２に続いてＤ５が記憶される。しかし、ホスト３の要求するデータは、Ｄ３であってＤ５ではないため、キャッシュミスヒットが発生する。
【００５４】
断片化検出部１Ｄは、キャッシュヒット率に応じて（裏返せば、キャッシュミスヒット率に応じて）、記憶部２内で生じているデータの断片化の程度を検出する。記憶部２内には、ホスト３からシーケンシャルに読み出される１つまたは複数のファイルに関するデータが連続的に順番に配置されるべきである。従って、キャッシュミスヒットの増大は、記憶部２内におけるデータ配置の断片化（フラグメンテーション）の発生であると判断可能である。
【００５５】
記憶部２内でデータの断片化が生じている場合、プリフェッチ量算出部１Ｅは、より少ないプリフェッチ量を算出する。プリフェッチするデータの量を少なくすれば、キャッシュミスヒットの発生する可能性を低減できるためである。
【００５６】
プリフェッチ動作制御部１Ｆは、記憶部２内のデータ配置の断片化の程度に応じて、プリフェッチ部１Ｃを作動させるか、あるいは停止させるかを決定する。キャッシュミスヒットが増大した場合（キャッシュヒット率が低下した場合）、プリフェッチ動作制御部１Ｆは、プリフェッチ部１Ｃの作動を停止させる。
【００５７】
プリフェッチ動作が停止すると、アクセス要求処理部１Ａは、ホスト３から要求されたデータを記憶部２から読み出して、ホスト３に転送する。即ち、プリフェッチ動作停止後は、ホスト３からリードアクセスされるたびに、記憶部２からデータが読み出されてホスト３に送信される。従って、プリフェッチ動作停止後において、リードアクセスに対する応答性能は、記憶部２の応答性能に依存する。
【００５８】
そして、プリフェッチ動作制御部１Ｆは、プリフェッチ動作を停止させた後、警報を出力することができる。この警報は、データの断片化のためにプリフェッチ動作が停止されたことを示す。この警報は、例えば、ホスト３に実装された管理プログラムを介して、または、記憶制御装置１に接続された管理端末を介して、管理者に通知可能である。さらに、この警報を用いて、再配置処理部３Ｂを自動的に起動させることもできる。
【００５９】
ところで、記憶部２内のデータ配置の断片化が所定値以下まで低下した場合、このデータ配置の断片化の度合の低下は、断片化検出部１Ｄにより検出される。例えば、再配置処理部３Ｂによって、記憶部２内のデータの再配置が完了した場合、断片化が解消する。あるいは、記憶部２内のデータ配置の断片化が部分的に生じている場合、ホスト３からのリードアクセスが、その断片化発生領域を通過すると、断片化の度合が低下する。
【００６０】
プリフェッチ動作制御部１Ｆは、データ配置の断片化の度合が低下すると、プリフェッチ部１Ｃの作動を再開させる。プリフェッチ量算出部１Ｅは、適切と考えられるプリフェッチ量を算出する。プリフェッチ動作制御部１Ｆは、算出されたプリフェッチ量をプリフェッチ部１Ｃに設定する。これにより、プリフェッチ部１Ｃは、ホスト３からのリードアクセスに先回りして、記憶部２からデータを読出し、キャッシュメモリ１Ｂに記憶させる。この結果、リードアクセスに対する応答性能が高まる。
【００６１】
本実施形態のストレージシステムは、上述のように、断片化検出部１Ｄによって、プリフェッチ部１Ｃの作動を制御する構成とした。即ち、本実施形態では、効果を期待できる状況下ではプリフェッチ動作を行い、効果を期待できない状況下ではプリフェッチ動作を停止させることができる。この結果、本実施形態では、記憶部２が本来的に備える応答性能以上の応答性能を保証することができ、信頼性や使い勝手が向上する。
【００６２】
もしも、データ配置の断片化が生じているにもかかわらず、比較的多量のデータをプリフェッチする場合、キャッシュミスヒットが多発する。従って、この場合、リードアクセスの発行時に記憶部２から直接データを読み出す場合に比べて、ストレージシステムの応答性能は低下する。これに対し、本実施形態では、記憶部２内でデータが連続的に配置されている場合（データ配置の断片化が生じていない場合）は、プリフェッチ動作を作動させて、プリフェッチによる効果を得ることができる。また、記憶部２内でデータ配置の断片化が生じている場合は、プリフェッチ動作を停止させることにより、記憶部２の有する応答性能で、ホスト３にデータを送信することができる。
【００６３】
本実施形態では、キャッシュヒット率に基づいて、データ配置の断片化の度合を間接的に推定する構成とした。即ち、本実施形態では、キャッシュヒット率をデータ配置の断片化の度合の指標として採用することにより、記憶部２内の実際のデータ配置を調査することなく、データ配置の断片化を検出することができる。従って、記憶部２の記憶内容をスキャン等する必要がなく、比較的少ない低負荷でデータ配置の断片化を検出することができ、データ配置の断片化検出に伴って記憶制御装置１の性能が低下するのを、防止することができる。
【００６４】
本実施形態では、データ配置の断片化のためにプリフェッチ動作が停止されると、警報を出力させる構成とした。従って、管理者（ホスト３または記憶制御装置１のユーザ）は、この警報に基づいて、例えば、再配置処理の実行を命じたり、ストリーミング配信先のユーザ数やビットレートを調節等することができ、使い勝手が向上する。また、本実施形態では、前記警報によって再配置処理部３Ｂを自動的に起動させることができるため、さらに使い勝手が向上する。以下、本実施形態を詳細に説明する。
【実施例１】
【００６５】
図２は、本実施例によるストレージシステム１０の全体構成を示す説明図である。ストレージシステム１０は、例えば、コントローラ１００及び記憶部２００を備えて構成することができる。ストレージシステム１０は、少なくとも１つ以上のホスト２０と接続されている。
【００６６】
先に、図２と図１との対応関係を述べる。コントローラ１００は「記憶制御装置１」に、記憶部２００は「記憶部２」に、ホスト２０は「ホスト３」に、ユーザマシン４０は「ユーザマシン４」に、通信経路CN１は「通信経路５」に、通信経路CN２は「通信経路６」に、通信ネットワークCN３は「通信ネットワーク７」に、それぞれ対応する。
【００６７】
ストレージシステム１０は、例えば、SANやLAN等の通信経路CN１を介して、ホスト２０に接続されている。ホスト２０は、複数のユーザマシン４０と通信ネットワークCN３を介してそれぞれ接続されている。ユーザマシン４０は、例えば、パーソナルコンピュータや携帯情報端末等である。ホスト２０は、各ユーザマシン４０からの配信要求に応じて、ストレージシステム１０からデータを読出す。そして、ホスト２０は、この読み出したデータ（コンテンツデータ）を、所定のビットレートで、各ユーザマシン４０にそれぞれ配信する。このデータ転送手順を、ストリーム配信と呼ぶ。
【００６８】
また、ストレージシステム１０は、例えば、LAN等の通信経路CN４を介して、管理端末３０に接続されている。管理端末３０は、ストレージシステム１０の構成を設定したり、ストレージシステム１０内の各種状態を収集して管理する。管理端末３０を、さらにネットワーク上の管理サーバに接続させることもできる。なお、管理端末３０を廃止して、ホスト２０内でストレージシステム１０の構成等を管理することもできる。
【００６９】
次に、ストレージシステム１０の内部構成を説明する。まず最初にコントローラ１００の構成を説明し、続いて記憶部２００の構成を説明する。
【００７０】
コントローラ１００は、例えば、プロセッサ１１０と、メモリ１２０と、ホストインターフェース（図中「ホストI/F」）１４０と、ドライブインターフェース（図中「ドライブI/F」）１５０と、管理用インターフェース（図中、「管理用I/F」）１６０とを備えて構成される。これら各部１１０，１２０，１４０，１５０，１６０は、バス１７０によって相互に接続されている。
【００７１】
プロセッサ１１０は、例えば、少なくとも１つ以上のマイクロプロセッサ（CPU）から構成される。１つのプロセッサ１１０内に複数のCPUコアが設けられる場合もある。プロセッサ１１０は、メモリ１２０に記憶されているプログラムモジュールを読み出して実行することにより、後述する各機能をそれぞれ実現させる。なお、複数の機能の全てをソフトウェア処理でそれぞれ実現する構成に限定されない。必要に応じて、一部の機能をハードウェア回路で構成したり、１つまたは複数の機能の一部をハードウェア回路で支援等する構成でもよい。このようなハードウェア回路は、例えば、高度集積回路（LSI）のように構成されて、バス１７０に接続される。
【００７２】
メモリ１２０は、プログラムモジュール１２１〜１２９を記憶するプログラム領域と、キャッシュデータを記憶するキャッシュ領域１３０とを備えている。本実施例では、メモリ１２０内にプログラムとキャッシュデータとを混在させる構成を示すが、これに代えて、プログラムを記憶するためのプログラムメモリと、キャッシュデータを記憶させるキャッシュメモリとを分離する構成でもよい。従って、以下の説明では、キャッシュ領域１３０を、キャッシュメモリと呼ぶ場合もある。キャッシュ領域１３０は、図１中の「キャッシュメモリ１Ｂ」に対応する。
【００７３】
プリフェッチ処理モジュール１２１は、プリフェッチを行うためのプログラムモジュールであり、図１中の「プリフェッチ部１Ｃ」に対応する。
【００７４】
プリフェッチ動作制御モジュール１２２は、プリフェッチ処理モジュール１２１の作動を制御するためのプログラムモジュールである。プリフェッチ動作制御モジュール１２２は、図１中の「プリフェッチ動作制御部１Ｆ」に対応する。プリフェッチ動作制御モジュール１２２は、後述のように、データ配置の断片化の度合に応じて、プリフェッチ処理モジュール１２１に適切なプリフェッチ量を設定し、また、プリフェッチ動作の停止及び再開を指示するようになっている。
【００７５】
データ断片化指数算出（予測）モジュール１２３は、キャッシュヒット率に基づいて、記憶部２００内におけるデータ配置の断片化の度合を検出または予測するためのプログラムモジュールである。データ断片化指数とは、データ配置の断片化の程度を示す指標である。データ断片化指数算出（予測）モジュール１２３は、図１中の「断片化検出部１Ｄ」に対応する。以下、データ断片化指数算出（予測）モジュール１２３を、単に、データ断片化指数算出モジュール１２３と呼ぶ。データ断片化指数算出モジュール１２３は、プリフェッチ動作が行われている期間中、キャッシュヒット率に基づいてデータ配置の断片化を間接的に検出する。また、データ断片化指数算出モジュール１２３は、プリフェッチ動作が停止されている期間においても、プリフェッチを行っていたと仮定した場合のキャッシュヒット率に基づいてデータ配置の断片化を予測する。
【００７６】
プリフェッチ量算出モジュール１２４は、プリフェッチ量を算出するためのプログラムモジュールであり、図１中の「プリフェッチ量算出部１Ｅ」に対応する。プリフェッチ量算出モジュール１２４は、データ断片化指数算出モジュール１２３から出力されるデータ断片化指数に応じて、適切なプリフェッチ量を算出する。簡単には、例えば、データ断片化が大きくなるほどプリフェッチ量が小さくなるように、プリフェッチ量算出モジュール１２４は、プリフェッチ量を算出する。算出されたプリフェッチ量は、プリフェッチ動作制御モジュール１２２により、プリフェッチ処理モジュール１２１に設定される。
【００７７】
警報モジュール１２５は、プリフェッチ動作制御モジュール１２２からの指示に基づいて、所定の警報を発するためのプログラムモジュールである。この警報は、例えば、ホスト２０や管理端末３０のユーザインターフェースを介して、管理者に通知される。あるいは、この警報を契機として、データ配置の断片化を解消するための再配置処理を、ホスト２０内で起動させることもできる。
【００７８】
モニタモジュール１２６は、ストレージシステム１０内で管理される各種統計情報や履歴を管理するためのプログラムモジュールである。モニタモジュール１２６は、例えば、キャッシュヒット率、ホスト２０からアクセスを要求された時刻、アクセスされたデータのサイズ等の情報を管理する。
【００７９】
管理インターフェースモジュール１２７は、ホスト２０や管理端末３０から、ストレージシステム１０の動作設定や構成変更等を行うためのプログラムモジュールである。
【００８０】
ホストI/O処理モジュール１２８は、ホスト２０からのリードアクセス（リード要求）やライトアクセス（ライト要求）を処理するためのプログラムモジュールである。
【００８１】
ドライブI/O処理モジュール１２９は、記憶部２００内のディスクドライブ２１０にアクセスして、ディスクドライブ２１０からデータを読み出したり、または、ディスクドライブ２１０にデータを書き込んだりするためのプログラムモジュールである。ホストI/O処理モジュール１２８及びドライブI/O処理モジュール１２９は、図１中の「アクセス要求処理部１Ａ」に対応する。
【００８２】
ホストインターフェース１４０は、通信経路CN１を介して、ホスト２０との間で通信を行うものである。ドライブインターフェース１５０は、通信経路CN２を介して、記憶部２００内のディスクドライブ２１０との間で通信を行うものである。管理用インターフェース１６０は、通信経路CN４を介して、管理端末３０との間で通信を行うものである。
【００８３】
ホスト２０がいわゆるオープン系のサーバである場合、ホスト２０とストレージシステム１０とは、例えば、TCP/IP（Transmission Control Protocol/Internet Protocol）やFCP（Fibre Channel Protocol）等のプロトコルに従って、データ通信を行う。ホスト２０がメインフレームマシンである場合、ホスト２０とストレージシステム１０とは、例えば、FICON（Fibre Connection：登録商標）、ESCON（Enterprise System Connection：登録商標）、ACONARC（Advanced Connection Architecture：登録商標）、FIBARC（Fibre Connection Architecture：登録商標）等のプロトコルに従って、データ通信を行う。
【００８４】
次に、記憶部２００の構成を説明する。記憶部２００は、例えば、複数のディスクドライブ２１０を備えている。ディスクドライブ２１０としては、例えば、ハードディスクドライブ、半導体メモリドライブ、光ディスクドライブ、光磁気ディスクドライブ、磁気テープドライブ等の種々の記憶デバイスを用いることができる。また、ハードディスクドライブを使用する場合、例えば、FC（Fibre Channel）ディスク、SATA（Serial AT Attachment）ディスク、SCSI（Small Computer System Interface）ディスクのように、種々の種類のハードディスクドライブを利用可能である。また、記憶部２００内に、異なる種類の記憶デバイスを混在させることもできる。
【００８５】
RAIDレベル等によっても相違するが、所定数のディスクドライブ２１０によってRAIDグループ２２０を構成することができる。例えば、３個のデータディスクと１個のパリティディスクとから、RAID５の構成を得ることができる（３Ｄ＋１Ｐ）。また、１個の正ディスクと１個の副ディスクとから、RAID１の構成を得ることもできる。
【００８６】
RAIDグループ２２０は、冗長化された物理的な記憶領域であり、物理的な記憶デバイスと呼ぶこともできる。このRAIDグループ２２０の提供する物理的な記憶領域上に、論理的な記憶領域２３０を１つまたは複数設定することができる。論理的な記憶領域２３０は、例えば、論理ボリューム（図中「LU」と表示）と呼ばれる。この論理ボリューム２３０は、ホスト２０のアクセス対象となる。
【００８７】
記憶部２００内のディスクドライブ２１０（論理ボリューム２３０）には、ストリーミング配信の対象となるデータ（コンテンツデータ）が記憶されている。コンテンツデータは、例えば、映像や音声等を含んでおり、一般的にデータサイズが大きい。コンテンツデータは、ランダムアクセスされるデータベースや、必要な命令だけが読み出されるプログラムコード等とは異なり、データの先頭から順番に読み出されて使用される。コンテンツデータは、順番通りに連続して読み出される場合が多いため、論理ボリューム２３０上の連続した領域に、連続して配置される。
【００８８】
なお、記憶部２００は、少なくとも１つ以上のディスクドライブ２１０を備えていればよく、複数のディスクドライブ２１０を備える必要はない。単独のディスクドライブ２１０に論理ボリューム２３０を設定することもできる。
【００８９】
また、コントローラ１００と記憶部２００とを同一の筐体内に設けることもできるし、それぞれ別々の筐体内に設けることもできる。また、後述するプリフェッチ動作の制御機能を、例えば、通信経路CN１上に設けられるスイッチ装置に実装してもよい。
【００９０】
次に、本実施例の動作を説明する。以下に述べる各動作は、コントローラ１００のプロセッサ１１０が、メモリ１２０に記憶されている各プログラムモジュール１２１〜１２９を必要に応じて読み出して実行することにより、実現される。説明の便宜上、動作の主体をコントローラ１００として述べる。
【００９１】
ストレージシステムの動作を説明する前に、本実施例のストレージシステムが考慮している特徴的問題点について説明する。この特徴的問題点は、本発明の理解に役立つものである。しかし、本発明の範囲は特許請求の範囲の記載に基づいて定まるべきものであり、以下に述べる特徴的問題点は、本発明の範囲を何ら限定するものではない。
【００９２】
本実施例では、上述のように、ホスト２０から各ユーザマシン４０に所定のビットレートでデータを送信する。このようなストリーム配信では、一般に、各ユーザマシン４０からそれぞれ個別に配信要求が出されるため、ホスト２０は、複数のユーザマシン４０のそれぞれに向けて、同時並行的に、データを送る必要がある。
【００９３】
即ち、多数のユーザが、それぞれ別々のタイミングで、同一のコンテンツ（映画等）を視聴するため、ストリーミング配信が多重で実行される。あるユーザマシン４０には、ある論理ボリューム２３０内に記憶されたコンテンツデータが読み出されて配信され、また、別のあるユーザマシン４０には、別の論理ボリューム２３０内に記憶されたコンテンツデータが読み出されて、配信される。
【００９４】
この結果、ホスト２０からストレージシステム１０に、高多重のシーケンシャルアクセスが発生する。即ち、ホスト２０は、各ユーザマシン４０へのストリーミング配信を行うために、多数のシーケンシャルアクセス（リードアクセス）を同時に発行する。
【００９５】
各ストリーミング配信の１つ１つについて見ると、ホスト２０からストレージシステム１０へのアクセス要求は、それぞれシーケンシャルである。つまり、個別のストリーミング配信に着目すれば、連続的なデータの読出しが行われている。しかし、上述のように、多数のストリーミング配信が同時並行的に処理されるため、ストレージシステム１０は、各ストリーミング配信にそれぞれ対応したアクセス要求を受信する。ホスト２０とストレージシステム１０との間には、複数のシーケンシャルアクセスが存在するため、これら複数のシーケンシャルアクセスの全体としては、シーケンシャルなアクセスに見えないという特徴を有する。本実施例は、この特徴を考慮して、プリフェッチ動作（プリフェッチ機能）を制御する。
【００９６】
さらに述べるならば、各ユーザマシン４０へのストリーミング配信をそれぞれ独立して行うために、ホスト２０は、各ユーザマシン４０毎に必要となるデータを、ストレージシステム１０からそれぞれ順番に読み出す。ここで、留意すべき点は、プリフェッチされてキャッシュ領域１３０に記憶されたデータは、いったんホスト２０によって読み出された後、基本的に二度と使用されることはないという点である。ストリーミング配信の場合、基本的に、一度使用されたデータは、二度と使用されない。この点で、単なるメモリアクセスの高速化を図るためのキャッシュ制御技術や、プログラムの実行速度を上げるための技術とは異なる。
【００９７】
図３は、ホスト２０からのリード要求を処理するためのリード要求処理を示すフローチャートである。このリード要求処理は、コントローラ１００のホストI/O処理モジュール１２８（あるいは、ホストI/O処理モジュール１２８及びドライブI/O処理モジュール１２９）を中心として実現される。
【００９８】
なお、以下に述べる各フローチャートは、本発明の理解及び実施に必要な範囲で、処理の概要を示しており、実際のプログラムとは相違する場合がある。また、ステップを「Ｓ」と略記する。
【００９９】
コントローラ１００は、ホスト２０からのリード要求を受信すると（Ｓ１１）、要求されたデータがキャッシュ領域１３０に記憶されているか否かを判定する（Ｓ１２）。本実施例では、リード要求が発行されるよりも前に、先回りしてデータをキャッシュ領域１３０に記憶させることが可能である。
【０１００】
ホスト２０から要求されたデータが既にキャッシュ領域１３０に記憶されている場合（S12:YES）、コントローラ１００は、キャッシュ領域１３０に記憶されているデータを読み出して、ホスト２０に送信する（Ｓ１３）。そして、コントローラ１００は、キャッシュヒット率を更新する（Ｓ１７）。このキャッシュヒット率の更新は、モニタモジュール１２６によって実行される。モニタモジュール１２６は、キャッシュヒット率管理テーブル１２６１を備えている。この管理テーブル１２６１は、例えば、各論理ボリューム２３０毎に、それぞれのキャッシュヒット率を対応付けて管理するための情報である。ホスト２０のファイルシステムは、一般的に、１つの論理ボリューム２３０の全体を支配し、各論理ボリューム２３０毎にコンテンツデータが格納される場合が多い。データ配置の断片化は、各ファイルシステム毎にそれぞれ異なるため、各論理ボリューム２３０毎に、それぞれキャッシュヒット率を管理している。
【０１０１】
ホスト２０から要求されたデータがキャッシュ領域１３０に記憶されていない場合（S12:NO）、コントローラ１００は、記憶部２００内のディスクドライブ２１０にアクセスして、データを読み出す（Ｓ１４）。具体的には、例えば、リードコマンド内で明示された読出し先論理アドレスをドライブ上の物理アドレスに変換し、所定のディスクドライブ２１０からデータを取り出す。所定のディスクドライブ２１０とは、要求されたデータを保有する論理ボリューム２３０を構成するディスクドライブである。
【０１０２】
コントローラ１００は、ディスクドライブ２１０から読み出したデータをキャッシュ領域１３０に記憶させた後（Ｓ１５）、このデータをホスト２０に送信し（Ｓ１６）、キャッシュヒット率を更新させる（Ｓ１７）。
【０１０３】
上述したＳ１２→Ｓ１３の流れは、プリフェッチ効果が生じている場合であり、Ｓ１２→Ｓ１４→Ｓ１５→Ｓ１６の流れが、プリフェッチ効果が生じていない場合（プリフェッチ動作が停止している場合、及びキャッシュミスヒットの場合）である。
【０１０４】
図４は、プリフェッチ処理を示すフローチャートである。この処理は、コントローラ１００のプリフェッチ処理モジュール１２１を中心に実現される。コントローラ１００は、プリフェッチ量DPを取得する（Ｓ２１）。このプリフェッチ量DPは、図５と共に後述するプリフェッチ動作制御処理において設定される。プリフェッチ量DPは、データ断片化指数に応じて適宜調節される。
【０１０５】
コントローラ１００は、既にキャッシュ領域１３０にプリフェッチされているデータ量DPｂを取得し（Ｓ２２）、プリフェッチ量DPとプリフェッチ済みデータ量DPｂとを比較する（Ｓ２３）。
【０１０６】
プリフェッチ済みのデータ量DPｂの方がプリフェッチ量DPよりも少ない場合（S23:YES）、コントローラ１００は、ディスクドライブ２１０から所定量のデータを読み出して（Ｓ２４）、キャッシュ領域１３０に記憶させる（Ｓ２５）。そして、コントローラ１００は、Ｓ２１に戻る。このようにして、設定されたプリフェッチ量DP分のデータがキャッシュ領域１３０に記憶されるまで、Ｓ２１〜Ｓ２５のステップが繰り返される。
【０１０７】
プリフェッチ済みのデータ量DPｂがプリフェッチ量DPよりも多くなると（S23:NO）、コントローラ１００は、新たなデータをプリフェッチすることなく、Ｓ２１に戻る。なお、プリフェッチ済みのデータがホスト２０によって読み出されるたびに、プリフェッチ済みのデータ長DPｂの値は、減少していく。
【０１０８】
図５は、プリフェッチ動作制御処理を示すフローチャートである。この処理は、コントローラ１００のプリフェッチ動作制御モジュール１２２を中心に実現される。この処理は、例えば、ホスト２０からのリードアクセスを受けるたびに実行される。これに代えて、例えば、数秒程度の所定周期で、プリフェッチ動作制御処理を実行してもよい。
【０１０９】
コントローラ１００は、プリフェッチ動作がオン状態か否かを判断する（Ｓ３１）。プリフェッチ動作がオン状態とは、プリフェッチ機能が作動する状態である。プリフェッチ動作がオフ状態とは、プリフェッチ機能が停止されている状態である。
【０１１０】
プリフェッチ機能がオン状態に設定されている場合（S31:YES）、コントローラ１００は、データ断片化指数FIを算出する（Ｓ３２）。データ断片化指数FIの算出方法については、図６と共に後述する。簡単に説明すると、コントローラ１００は、キャッシュヒット率に基づいて、論理ボリューム２３０内のデータ配置の断片化をデータ断片化指数FIとして検出する。
【０１１１】
次に、コントローラ１００は、データ断片化指数FI及び最大プリフェッチ量DPmaxに基づいて、プリフェッチ量DPを算出する（Ｓ３３）。最大プリフェッチ量DPmaxの算出方法については、図９，図１０と共に後述する。コントローラ１００は、予め用意されているプリフェッチ量算出用の関数ｆに、データ断片化指数FI及び最大プリフェッチ量DPmaxを入力することにより、最新のプリフェッチ量DPを求める（DP＝ｆ（DPmax，FI））。
【０１１２】
簡単な例を挙げると、プリフェッチ量DPは、最大プリフェッチ量DPmaxにデータ断片化指数FIを乗算することにより得ることができる（DP＝DPmax×FI）。後述のように、データ断片化指数FIは、データ配置の断片化が進行するにつれて、”１”から”０”に向けて減少していく。データ配置の断片化が最も進行した場合、FIは”０”となるか、または負の値となる。データ配置の断片化が発生していない場合、FI＝１となる。従って、正の値である最大プリフェッチ量DPmaxにデータ断片化指数FIを乗算して得られるプリフェッチ量DPは、データ配置の断片化が進行すればするほど、小さくなっていく。なお、以上の説明は、簡単な一例を示すものであり、本発明はこれに限定されない。データ配置の断片化の度合が進むほど、プリフェッチ量DPを小さくできる関数であれば、構わない。また、関数を用いて算出する方法に代えて、プリフェッチ量DPとデータ断片化指数FIとの対応関係を記述したテーブルを用意しておき、このテーブルを参照することによりプリフェッチ量を求める構成でもよい。
【０１１３】
コントローラ１００は、プリフェッチ量DPを算出した後（Ｓ３３）、この算出されたプリフェッチ量DPが０以下であるか否かを判定する（Ｓ３４）。上述のように、データ配置の断片化が進行すると、FIの値は、０となる。FIが０になった場合、プリフェッチ量DPも０となる。
【０１１４】
プリフェッチ量DPが０になった場合（S34:YES）、コントローラ１００は、プリフェッチ機能を停止させる（Ｓ３６）。プリフェッチ機能がオン状態からオフ状態に遷移すると、コントローラ１００は、警報を出力する（Ｓ３７）。この警報は、警報モジュール１２５によって生成される。生成された警報は、管理インターフェースモジュール１２７からホストインターフェース１４０を介して、通信経路CN１に送り出され、ホスト２０によって受信される。
【０１１５】
ユーザは、コントローラ１００からの警報によって、プリフェッチ機能が停止した旨を確認することができる。なお、後述のように、コントローラ１００からの警報によって、ホスト２０内で、データ再配置処理を自動的に実行させることもできる。
【０１１６】
Ｓ３３で算出されたプリフェッチ量DPが０ではない場合（S34:NO）、コントローラ１００は、プリフェッチ機能のオン状態を継続させる（Ｓ３５）。この場合、コントローラ１００は、Ｓ３３で算出されたプリフェッチ量DPに基づいて、図４で述べたプリフェッチ処理を実行する。
【０１１７】
プリフェッチ機能がオフ状態に設定された場合（S31:NO）、コントローラ１００は、データ断片化指数FIの予測を行う（Ｓ３８）。データ断片化指数FIの予測方法については後述する。
【０１１８】
コントローラ１００は、予測されたデータ断片化指数FIが０以下であるか否かを判定する（Ｓ３９）。データ断片化指数FIが０以下の場合（S39:YES）、論理ボリューム２３０内に記憶されているコンテンツデータの連続性が失われており、プリフェッチ効果を期待することができない場合である。そこで、コントローラ１００は、プリフェッチ機能のオフ状態をそのまま継続させる（Ｓ４０）。プリフェッチ機能の停止期間中、コントローラ１００は、ホスト２０からリードアクセスされた時点で、ディスクドライブ２１０からデータを読み出してホスト２０に送信する。
【０１１９】
これに対し、Ｓ３８で予測されたデータ断片化指数FIが０より大きい値になった場合（S39:NO）、データ断片化の度合が低下しており、プリフェッチ効果を期待することができる場合である。そこで、コントローラ１００は、プリフェッチ機能をオフ状態からオン状態に遷移させる（Ｓ４１）。
【０１２０】
このように、コントローラ１００は、データ断片化指数FIに応じて、プリフェッチ動作のオンオフ制御を行う。また、コントローラ１００は、プリフェッチ動作を有効にする場合（プリフェッチ機能をオン状態に設定する場合）、データ断片化指数FIに応じた適切なプリフェッチ量DPを使用する。従って、ストレージシステム１０は、データ断片化の度合に応じて、プリフェッチ動作を適切に制御することができる。
【０１２１】
図６は、データ断片化指数FIを検出（予測）する方法を模式的に示す説明図である。データ断片化指数算出モジュール１２３は、例えば、下限値定数記憶部１２３１と、キャッシュヒット率予測部１２３２と、下限値定数管理テーブル１２３３と、予測キャッシュヒット率管理テーブル１２３４と、複数の演算式１２３５，１２３６を備えて構成することができる。
【０１２２】
下限値定数記憶部１２３１には、演算式１２３５，１２３６で使用される定数ｂが予め記憶されている。定数ｂは、例えば、キャッシュヒット率と応答性能との関係を実測し、プリフェッチ効果を得られなくなるキャッシュヒット率を調べることにより、得られる値である。即ち、定数ｂは、プリフェッチ効果を得ることができない限界点を示す。定数ｂは、”０”よりも大きく”１”よりも小さい値を取る（０＜ｂ＜１）。
【０１２３】
ディスクドライブ２１０の種類が予め定まっている場合、定数ｂには、予め設定された固定値を用いることができる。定数ｂは、ディスクドライブの性能に依存する。複数種類のディスクドライブ２１０に対応する場合は、ディスクドライブの種類に応じた定数ｂを記憶する下限値定数管理テーブル１２３３を用意すればよい。下限値定数管理テーブル１２３３は、各ディスクドライブの種類毎に、定数ｂの値が予め設定されている。なお、ホスト２０や管理端末３０から、定数ｂを設定することも可能である。
【０１２４】
キャッシュヒット率予測部１２３２は、プリフェッチ機能がオフ状態の場合に使用されるもので、ホスト２０からのリードアクセスがキャッシュヒットであるかキャッシュミスヒットであるかを判定する。判定結果は、予測キャッシュヒット率管理テーブル１２３４に記録される。この予測キャッシュヒット率管理テーブル１２３４は、上述のキャッシュヒット率管理テーブル１２６１と同様に、各論理ボリューム２３０毎に、それぞれについて予測されたキャッシュヒット率が対応付けられている。
【０１２５】
第１の演算式１２３５は、プリフェッチ機能がオン状態の場合に使用される。第１の演算式１２３５は、実際に観測されたキャッシュヒット率CH（０≦CH≦１）と定数ｂ（０＜ｂ＜１）とから、下記の式１に従って、データ断片化指数FIを算出する。
FI＝（CH−ｂ）／（１−ｂ）・・・（式１）
【０１２６】
第２の演算式１２３６は、プリフェッチ機能がオフ状態の場合に使用される。第２の演算式１２３６は、予測されたキャッシュヒット率CHｅ（０≦CHｅ≦１）と定数ｂとから、下記の式２に従って、データ断片化指数FIｅを予測する。
FIｅ＝（CHｅ−ｂ）／（１−ｂ）・・・（式２）
【０１２７】
ストリーミング配信に使用される本実施例のストレージシステム１０は、データがドライブ上（論理ボリューム２３０内に）にシーケンシャルに配置されていると仮定して、プリフェッチ動作を行う。従って、ドライブ上のデータ配置が断片化していると、プリフェッチに失敗することになる。このとき、キャッシュ領域１３０上には、ホスト２０から要求されたデータは存在しないため、キャッシュミスヒットとなり、キャッシュヒット率が低下する。従って、データ配置の断片化の程度は、キャッシュヒット率CHを指標とすることで検出可能である。ドライブ内を実際にスキャンすることなく、データ配置の断片化の程度を把握することができる。
【０１２８】
キャッシュヒット率CHは、モニタモジュール１２６が管理する統計情報の１つであり、例えば、キャッシュヒット率管理テーブル１２６１に記録されている。プリフェッチが完全に成功した場合、ホスト２０から要求されたデータは、常にキャッシュ領域１３０に存在するため、キャッシュヒット率は、”１（100%”）に近づく。これとは逆に、プリフェッチに失敗するほど、キャッシュヒット率CHは、”０”に近づく。
【０１２９】
即ち、第１の演算式１２３５で定義されるデータ配置の断片化指数FIは、データがドライブ上に完全にシーケンシャルに配置されている場合に、おおよそ最大値の”１”となり、データ配置の断片化の進行に伴って、次第に小さな値となる。そして、データ配置の断片化が進行してプリフェッチ効果が得られなくなると、”０”になる。つまり、データ配置の断片化指数FIが”０”以下の場合、プリフェッチ機能をオフ状態に設定すればよく、FIが”０”より大きい場合は、プリフェッチ機能をオン状態に設定すればよい。
【０１３０】
第２の演算式１２３６も、第１の演算式１２３５で述べた理由で、データ断片化指数FIを、第１の演算式１２３５と同様に定義する。定数ｂは、第１の演算式１２３５と共通のものを使用する。従って、データ配置の断片化が進むほどFIは０に近づき、データ配置が連続するほどFIは”１”に近づく。
【０１３１】
第２の演算式１２３６によるデータ断片化指数FIの予測は、プリフェッチ機能をオフ状態からオン状態に変更するために必要となる。FIを予測するためには、キャッシュヒット率として予測値CHｅを用いる必要がある。
【０１３２】
プリフェッチ機能がオフ状態に設定されている場合、データ配置が連続しているか断片化しているかにかかわらず、リードアクセスがキャッシュヒットすることはなく、実際に観測されるキャッシュヒット率CHは、基本的に０％となるためである。実際に観測されるキャッシュヒット率CHを用いると、FIの値も”０”近傍の値となるため、プリフェッチ機能をオフ状態からオン状態に変更することができなくなる。
【０１３３】
ここで、例えば、プリフェッチ機能がオフ状態の期間中に、定期的にプリフェッチ機能をオン状態に戻して、キャッシュヒット率を確認する方法も考えられる。しかし、このような試験的に確認する方法では、キャッシュミスヒットとなった場合に、ストレージシステム１０の応答性能（読出し性能）が大幅に低下する。
【０１３４】
つまり、試験的にプリフェッチ機能をオン状態にした場合に、プリフェッチ効果が得られなかったとすると、キャッシュミスヒットとなり、改めてディスクドライブ２１０へのアクセスが行われる。このような二度手間が発生するため、プリフェッチに失敗した場合のストレージシステム１０の応答性能は、ディスクドライブ２１０に最初からアクセスした場合の応答性能（最低保障性能と呼ぶ場合がある）よりも、大幅に劣る。
【０１３５】
そこで、本実施例では、プリフェッチ機能をオフ状態にしたままで、プリフェッチ機能がオン状態であったならば得られたと見込まれるキャッシュヒット率を予測する。これにより、ストレージシステム１０の応答性能を最低保障性能よりも低下させることなく、プリフェッチ機能の作動を制御することができる。
【０１３６】
図７，図８に基づいて、キャッシュヒット率の予測方法を説明する。図７は、プリフェッチ機能をオフ状態にしたままで、キャッシュヒット率の予測値CHｅを得る様子を模式的に示す説明図である。
【０１３７】
まず、基本的なプリフェッチ機能について説明する。プリフェッチ機能がオフ状態の場合、初期状態では、キャッシュ領域１３０にデータは１つも記憶されていない。従って、例えば、データブロック”００”についてのリード要求がホスト２０から発行された場合、キャッシュ領域１３０にデータブロック”００”が読み込まれた後、ホスト２０にデータブロック”００”の内容が送信される。キャッシュ領域１３０に読み込まれたデータブロック”００”の内容は、そのままキャッシュ領域１３０に残される。
【０１３８】
これに対し、プリフェッチ機能がオン状態の場合、初期状態では、キャッシュ領域１３０に１つもデータが記憶されていない。従って、ホスト２０が、１番目のデータブロック”００”にアクセスする場合の動作は、プリフェッチ機能をオフ状態に設定している場合と同様である。しかし、これ以降の動作は、プリフェッチ機能をオフ状態にしている場合と異なる。
【０１３９】
ストリーミング配信では順番にデータを読み出すため、データブロック”００”についてリード要求が発行されたならば、次のリード要求のアクセス先は、データブロック”００”に隣接する２番目のデータブロック”０１”となる。
【０１４０】
従って、隣接するデータブロック”００”の内容がキャッシュ領域１３０上に記憶されている場合、それに続くデータブロック”０１”が読み込まれると予想される。同様に、データブロック”０１”へのリードアクセスがあった場合、このデータブロック”０１”に隣接するデータブロック”０２”へのリードアクセスが予測される。そこで、コントローラ１００は、データブロック”００”，”０１”がキャッシュ領域１３０に存在する場合、次のデータブロック”０２”については、ホスト２０からリードアクセスされるよりも前に、キャッシュ領域１３０に記憶させる。即ち、データブロック”０２”の内容をプリフェッチする。
【０１４１】
このような手順を繰り返すことにより、データブロック”０３”，”０４”，”０５”の内容が、ホスト２０からのリードアクセスに先行してプリフェッチされる。なお、プリフェッチするデータブロックの数（プリフェッチ量DP）は、最大プリフェッチ量DPmaxを超えることはない。
【０１４２】
次に、プリフェッチ機能をオフ状態にしたままで、キャッシュヒット率を予測する場合を説明する。キャッシュ領域１３０には、コンテンツデータの１番目のデータブロック”００”及び２番目のデータブロック”０１”が既に記憶されているものとする。
【０１４３】
ホスト２０がデータブロック”０１”にリードアクセスする場合（Ｓ５１）、このデータブロック”０１”の内容は、既にキャッシュ領域１３０に記憶されているため、キャッシュヒットとなる。
【０１４４】
ホスト２０が３番目のデータブロック”０２”にリードアクセスした場合（Ｓ５２）、プリフェッチ機能はオフ状態に設定されているので、データブロック”０２”の内容は、キャッシュ領域１３０に記憶されていない。このため、このリードアクセスは、キャッシュミスヒットを発生させる。
【０１４５】
しかし、キャッシュヒット率を予測する場合は、データブロック”０２”に関するキャッシュミスヒットを、キャッシュヒットに分類して記録する（Ｓ５３）。リード要求されたデータブロック”０２”の直前のデータブロック”００”，”０１”は、キャッシュ領域１３０に存在しており、もしも、プリフェッチ機能をオン状態に設定していたならば、データブロック”０２”がプリフェッチされて、キャッシュヒットとなったはずだからである。
【０１４６】
なお、もしも、データブロック”０１”へのリードアクセスの次に、データブロック”０５”へのリードアクセスが行われた場合（Ｓ５４）、データブロック”０５”の内容はキャッシュ領域１３０に記憶されていないため、キャッシュミスヒットが生じる。このキャッシュミスヒットは、そのままキャッシュミスヒットに分類される（Ｓ５５）。データブロック”０５”の直前のデータブロック”０４”がキャッシュ領域１３０に記憶されておらず、たとえプリフェッチ機能をオン状態に設定していたとしても、キャッシュミスヒットとなるのを避けられないためである。
【０１４７】
図８は、キャッシュヒット率の予測処理を示すフローチャートである。予測処理の基本的考え方は既に述べた通りである。改めて説明すると、コントローラ１００は、リード要求が発行された場合（S61:YES）、要求されたデータがキャッシュ領域１３０に記憶されているか否かを判定する（Ｓ６２）。
【０１４８】
キャッシュミスヒットと判定された場合（S62:NO）、コントローラ１００は、もしもプリフェッチ機能をオン状態に設定していたならば、キャッシュヒットになったか否かを判定する（Ｓ６３）。プリフェッチ機能をオン状態に設定したならばキャッシュヒットになったであろうと判定される場合（S63:YES）、コントローラ１００は、Ｓ６２で検出されたキャッシュミスヒットを、キャッシュヒットとしてカウントする（Ｓ６４）。そして、コントローラ１００は、予測キャッシュヒット率管理テーブル１２３４の記憶内容を更新させる（Ｓ６５）。
【０１４９】
図９，図１０に基づいて、最大プリフェッチ量DPmaxの算出方法を説明する。既に述べたように、最大プリフェッチ量DPmaxは、プリフェッチ量DPを算出するための基礎となり、データ断片化指数FIが”１”に近づくほど、プリフェッチ量DPも最大プリフェッチ量DPmaxに近づいていく。
【０１５０】
図９は、ホスト２０からのリードアクセスのタイミングと、データをプリフェッチするタイミングとの関係を模式的に示す説明図である。横軸は、時間経過を示す。論理ボリューム２３０からキャッシュ領域１３０へデータを予め記憶させるプリフェッチは、所定の動作周期１/Tpのサイクルで実行される。
【０１５１】
つまり、プリフェッチは、所定の時間Tp毎に行われる。このプリフェッチ間隔を規定する時間Tpは、定数である。単純には、例えば、十数ミリ秒程度の適当な値を選んで、Tpとして用いてもよい。あるいは、モニタモジュール１２６が管理しているリードアクセスの統計情報から、リードアクセスの平均受信間隔を求め、この値を時間Tpとして使用する構成でもよい。なお、リードアクセスの平均受信間隔を用いる場合、論理ボリューム２３０毎に、それぞれ異なる値をTpとして設定するのが好ましい。各論理ボリューム２３０毎に、リードアクセスの頻度は、それぞれ相違する場合があるためである。
【０１５２】
図９に示す例は、１つの論理ボリューム２３０に対する一連のシーケンシャルアクセスを模式的に示している。図９に示すように、プリフェッチ機能を作動させることにより、所定のTp時間毎に、データブロック”００”，”０１”，”０２”が、キャッシュ領域１３０に順番に記憶されていく。一回のプリフェッチ毎に、最大プリフェッチ量DPmax分のデータがキャッシュ領域１３０に記憶される。図９に示す例では、Tp時間毎に１ブロックのデータをキャッシュ領域１３０に記憶させている。従って、この場合の最大プリフェッチ量DPmaxは、１ブロックである。
【０１５３】
データブロック”００”の記憶内容（データ）は、ホスト２０からリードアクセスされるよりも前に、キャッシュ領域１３０に記憶されているため、キャッシュヒットとなり、プリフェッチは成功したことになる。
【０１５４】
同様に、データブロック”０１”についても、ホスト２０からリードアクセスされる前に、キャッシュ領域１３０に記憶されているため、キャッシュヒットとなる。従って、データブロック”０１”のプリフェッチも成功する。
【０１５５】
これに対し、データブロック”０２”の場合は、プリフェッチが間に合わなかったため、キャッシュミスヒットとなっている。ホスト２０からのリードアクセスの間隔は、常に一定であるとは限らず、ゆらぎを生じるため、プリフェッチのタイミングがリードアクセスのタイミングに遅れる場合がある。このようなリードアクセス間隔のばらつきは、ホスト２０のファイルシステムの作動状態等によって生じる。例えば、ファイルシステムが、ストレージシステム１０内のプリフェッチとは別に、独自のプリフェッチを行う場合、比較的短い周期でリード要求が発行される。また、ホスト２０からユーザマシン４０にデータを配信する速度（ビットレート）等によって、ホスト２０がストレージシステム１０にアクセスするタイミングが異なる。
【０１５６】
本実施例では、上述のように、キャッシュヒット率CHをデータ断片化指数FIの算出に使用している。従って、データの断片化以外の要因によるキャッシュヒット率の低下は、好ましくない。そこで、本実施例では、プリフェッチのタイミングがリードアクセスのタイミングに間に合うように、十分なプリフェッチ量DPを確保する。
【０１５７】
即ち、本実施例では、プリフェッチ間隔Tp内にホスト２０からリードアクセスされる最大のデータ量（バースト長）を、プリフェッチ量DPを算出するための基礎となる最大プリフェッチ量DPmaxとして使用する。これにより、時間Tp内にホスト２０から要求されうる最大量DPmax分のデータを、プリフェッチすることが可能となり、キャッシュヒット率の低下を抑制することができる。
【０１５８】
図１０は、最大プリフェッチ量を設定するための処理を示すフローチャートである。この処理は、プリフェッチ量算出モジュール１２４を中心に実現される。この処理では、バースト長BSに応じて最大プリフェッチ量DPmaxを制御する。
【０１５９】
ここで、バースト長BSは、上述のように、例えば、ホスト２０におけるファイルシステムレベルでのプリフェッチ動作や、各ユーザマシン４０に配信しているストリームのビットレート等に依存してそれぞれ異なると考えられる。通常、１つの論理ボリューム２３０に１つのファイルシステムが対応しているため、バースト長BSは、論理ボリューム２３０毎に異なる可能性が高い。そこで、本実施例では、各論理ボリューム２３０毎に、バースト長BSをそれぞれ算出する。従って、本実施例では、各論理ボリューム２３０毎に、データ断片化の度合に応じた適切なプリフェッチ量DPをそれぞれ設定し、ドライブの最低保障性能以上の応答性能を確保する。
【０１６０】
コントローラ１００は、ホスト２０からのリードアクセスを検出すると、バースト長を前回確認した時点からＴ１時間が経過したか否かを判定する（Ｓ７１）。時間Ｔ１は、バースト長確認周期であり、任意の適当な値に設定される。
【０１６１】
前回のバースト長確認時から所定時間Ｔ１が経過していない場合（S71:NO）、コントローラ１００は、仮のバースト長BSｔに、今回のリードアクセスで要求されたデータ長（ホストI/Oサイズ）を加算して（Ｓ７２）、Ｓ７１に戻る。即ち、コントローラ１００は、所定時間Ｔ１が経過するまでの間、BSｔ＝BSｔ＋ホストI/Oサイズの演算を繰り返し、バースト長を計測する。
【０１６２】
ここで、仮バースト長BSｔ，バースト長BSの初期値は、ともに０である。また、ホスト２０からのリードアクセスされた時刻及び読出しを要求されたデータのサイズは、モニタモジュール１２６から取得することができる。
【０１６３】
前回のバースト長確認時から所定時間Ｔ１が経過した場合（S71:YES）、コントローラ１００は、前回検出されたバースト長（つまり、現在使用中のバースト長）BSよりも仮バースト長BSｔの方が大きいか否かを判定する（Ｓ７３）。
【０１６４】
現在のバースト長BSの方が仮バースト長BSｔよりも大きい場合（S73:NO）、コントローラ１００は、現在のバースト長BSをそのまま継続して使用する。コントローラ１００は、仮バースト長BSｔをリセットして（Ｓ７４）、Ｓ７１に戻る。そして、コントローラ１００は、再び所定時間Ｔ１内にホスト２０からリードアクセスされたデータのサイズを積算して、最新の仮バースト長BSｔを求める。
【０１６５】
現在のバースト長BSよりも仮バースト長BSｔの方が大きい場合（S73:YES）、コントローラ１００は、仮バースト長BSｔの値を新たなバースト長BSとして採用する（Ｓ７５）。そして、コントローラ１００は、更新されたバースト長BSと最大プリフェッチ量DPmaxとを比較する（Ｓ７７）。
【０１６６】
最大プリフェッチ量DPmaxの方がバースト長BSよりも大きい場合（S77:NO）、コントローラ１００は、最大プリフェッチ量DPmaxを更新することなく、現在の設定のままでプリフェッチ処理を継続する（Ｓ７８）。
【０１６７】
これに対し、バースト長BSの方が最大プリフェッチ量DPmaxよりも大きい場合（S77:YES）、上述のように、プリフェッチに失敗する可能性があるため、コントローラ１００は、最大プリフェッチ量DPmaxの値をバースト長BSの値に設定する（Ｓ７９）。最新のバースト長BSに応じて最大プリフェッチ量DPmaxを更新することにより、プリフェッチの失敗を低減することができる。そして、プリフェッチ失敗によるキャッシュミスヒットを抑制して、データ断片化指数FIの信頼性低下を抑制できる。
【０１６８】
なお、上述の方法とは異なる他の方法で、最大プリフェッチ量DPmaxを算出する構成でもよい。例えば、ストリーミング配信されるストリーム数が予め定められている場合、キャッシュ領域１３０のサイズをストリーム数で除算することにより、最大プリフェッチ量DPmaxを求めることもできる（DPmax＝キャッシュ領域サイズ／ストリーム数）。
【０１６９】
図１１は、プリフェッチ機能の停止によって、ホスト２０内で起動されるデフラグメンテーション処理を示すフローチャートである。図５と共に述べたように、論理ボリューム２３０内のデータ配置が断片化し、データ配置の連続性が失われると、コントローラ１００は、プリフェッチ機能を自動的に停止し（Ｓ３６）、警報を出力する（Ｓ３７）。
【０１７０】
ホスト２０は、コントローラ１００からの警報を受信すると（S81:YES）、デフラグメンテーション対象の論理ボリューム２３０を特定して、デフラグメンテーション実行の可否を、ホスト２０の管理者に問い合わせる（Ｓ８２）。
【０１７１】
ホスト２０のユーザインターフェースを介して、ホスト２０の管理者は、データ断片化の発生している論理ボリューム２３０を確認し、デフラグメンテーションを実行させるか否かを判断することができる。
【０１７２】
ホスト２０の管理者が、ホスト２０のユーザインターフェースを介して、デフラグメンテーション実行を指示すると（S83:YES）、ホスト２０は、デフラグメンテーション対象の論理ボリューム２３０についてデフラグメンテーションを実行する（Ｓ８４）。
【０１７３】
なお、例えば、承認を必要とする確認モードと承認不要の自動モードとを予め用意しておき、自動モードが予め設定されている場合には、管理者の承認を待たずにデフラグメンテーションを開始する構成でもよい。
【０１７４】
また、コントローラ１００が、例えば、NAS（Network Attached Storage）のようなファイルシステムを備えている場合、データの再配置処理をコントローラ１００が行うこともできる。
【０１７５】
さらに、ホスト２０上で動作するストリーミング配信処理とデフラグメンテーション処理とを連動させることにより、現在アクセス中のファイル等のように、特定のファイルデータについてのみデフラグメンテーション処理を行わせることもできる。
【０１７６】
本実施例は、上述のように構成されるので、以下の効果を奏する。本実施例では、ストリーミング配信が行われている期間内に、プリフェッチによる効果を期待できるか否かを判定し、プリフェッチによる効果を期待できる場合にのみプリフェッチ機能をオン状態に設定し、かつ、データ断片化の度合（FI）に応じてプリフェッチ量DPを適切に制御する構成とした。従って、データ配置が断片化している場合でも、ストレージシステム１０の応答性能がディスクドライブ２１０の備える応答性能以下になるのを防止して、信頼性を高めることができる。
【０１７７】
この点について、図１２を参照して説明する。図１２（ａ）は、本実施例によるプリフェッチ機能の制御を行った場合のストレージシステム１０の応答性能を示す。図１２（ｂ）は、本実施例によるプリフェッチ機能の制御を行わない場合のストレージシステム１０の応答性能を示す。図１２の各特性図の横軸は、時間軸を示し、縦軸はストレージシステム１０の応答性能を示す。
【０１７８】
既に述べたように、ホスト２０からのリードアクセスに先行してデータをプリフェッチし、そのプリフェッチが成功した場合には、ストレージシステム１０の応答性能を高めることができる。これに対し、プリフェッチしたデータがキャッシュミスヒットとなった場合、つまり、プリフェッチに失敗した場合、ストレージシステム１０の応答性能は、ディスクドライブ２１０の有する応答性能以下に低下する。
【０１７９】
図１２中のPPは、プリフェッチに成功した場合の応答性能を示す。プリフェッチ成功時の応答性能PPは、ストレージシステム１０の最大応答性能となる。図１２中のPDは、ディスクドライブ２１０の応答性能を示す。つまり、PDは、ホスト２０からリードアクセスされた場合に、ディスクドライブ２１０からデータを読み出すときの応答性能である。プリフェッチ成功時における応答性能PPは、ディスクドライブ２１０の応答性能PDよりも高い（PP＞PD）。
【０１８０】
図１２（ａ）に示すように、期間Ｔ１１においては、データがシーケンシャルに配置されている。この場合、プリフェッチが成功する確率は高くなるため、ストレージシステム１０の応答性能はPPに近づく。従って、ストレージシステム１０は、ディスクドライブ２１０の応答性能PDよりも、ΔP1だけ高い応答性能を発揮する（ΔP1＝PP−PD）。
【０１８１】
しかし、論理ボリューム２３０に記憶されるコンテンツデータは、即ち、ディスクドライブ２１０に記憶されるコンテンツデータは、必要に応じて編集等されるため、データ配置の連続性は、次第に失われていく。例えば、ホスト２０の管理者は、コンテンツデータに埋め込まれる広告情報を入れ替えたり、ある場面のデータを削除したり、新たな場面のデータを追加したりすることがある。
【０１８２】
このような編集作業が行われることにより、期間Ｔ１２では、データ配置の断片化が進行していく。ある時間ΔＴが経過したとき、ストレージシステム１０の応答性能は、最大値のPPからPDまで低下する。しかし、本実施例では、キャッシュヒット率に基づいてデータ配置の断片化の程度を検出し、プリフェッチ機能が有効に働かないと判定された場合は、プリフェッチ機能を自動的に停止させる。従って、ストレージシステム１０の応答性能が、ディスクドライブ２１０の応答性能PDを下回ることはない。つまり、本実施例のストレージシステム１０は、ディスクドライブ２１０の応答性能PDを、ストレージシステムが最低限保証する応答性能として確保する。従って、ストレージシステム１０を利用するホスト２０（管理者）は、常時、ディスクドライブ２１０の応答性能PD以上の応答性能を、ストレージシステム１０に期待することができる。
【０１８３】
また、本実施例では、データ配置の断片化の程度（FI）に応じて、プリフェッチ量DPを適切に制御する。即ち、データ配置の断片化が進むほど、プリフェッチ量DPを小さくすることにより、キャッシュミスヒットの生じる可能性を低減する。従って、データ配置の断片化が進行している期間Ｔ１２において、ストレージシステム１０の応答性能が最大値PPから最低保証値PDまで低下していく角度θ１を、比較的小さくすることができる。これにより、ストレージシステム１０の応答性能がPPからPDに低下するまでの時間ΔＴを比較的長くすることができる。この結果、ストレージシステム１０の平均応答性能を高くすることができ、信頼性や使い勝手が向上する。
【０１８４】
そして、プリフェッチ機能がオフ状態に変更された場合、コントローラ１００からホスト２０に向けて警報が出力される。この警報を契機として、データ再配置処理（デフラグメンテーション処理）が行われると、データ配置の連続性が回復する（Ｔ１３）。
【０１８５】
以上が本実施例によるストレージシステム１０の応答性能である。これに対し、図１２（ｂ）に示すように、プリフェッチ機能を制御しない場合、ストレージシステムの応答性能は、データ配置の断片化が進行するに従って、最大値PPから低下していき、やがて、ディスクドライブの応答性能PDを下回ってしまう。
【０１８６】
しかも、プリフェッチ量を固定にしたままでプリフェッチを継続するため、プリフェッチ失敗率は、データ配置の断片化が進むほど大きくなる。従って、ストレージシステムの応答性能は、比較的大きな角度θ２で、急激に低下する（θ２＞θ１）。
【０１８７】
このように、本実施例では、適切なプリフェッチ制御を行うため、ストレージシステム１０の応答性能がディスクドライブ２１０の応答性能PDを下回るのを防止でき、信頼正当を向上させることができる。
【０１８８】
本実施例では、キャッシュヒット率に基づいて、データ配置の断片化の度合を間接的に推定する。従って、論理ボリューム２３０内の実際のデータ配置を調査することなく、データ配置の断片化の度合を間接的に測定可能であり、ストレージシステム１０に大きな負荷を与えることなく、プリフェッチ制御を行うことができる。
【０１８９】
本実施例では、プリフェッチ機能をオン状態からオフ状態に変更した場合に、警報を出力させる。従って、ホスト２０の管理者は、この警報に基づいて、断片化の有無等を確認することができる。また、この警報によって自動的にデータ再配置処理を起動させることもできる。従って、使い勝手が向上する。
【実施例２】
【０１９０】
図１３，図１４に基づいて第２実施例を説明する。本実施例を含む以下の実施例は、第１実施例の変形例に該当する。本実施例では、プリフェッチ量DPの値を調整せずに、プリフェッチ機能だけをオンオフ制御する。
【０１９１】
図１３は、本実施例によるプリフェッチ動作制御処理を示すフローチャートである。このフローチャートは、図５に示すフローチャートに含まれるＳ３１〜Ｓ４１のうち、Ｓ３３以外の全てのステップを備えている。
【０１９２】
つまり、本実施例のプリフェッチ動作制御処理では、データ断片化指数FIに基づいてプリフェッチ量DPを更新していない。プリフェッチ量DPを固定したままで、プリフェッチ機能のオンオフだけを制御する。
【０１９３】
図１４は、本実施例によるストレージシステム１０の応答性能の特性を示す。図１４と図１２（ａ）とを比較するとわかるように、本実施例では、プリフェッチ量DPを調節しないため、ストレージシステム１０の応答性能が最大値PPから最低保障値PDに低下する角度θ３は、図１２（ａ）中のθ１よりも大きくなる（θ３＞θ１）。即ち、本実施例のストレージシステム１０は、データ配置の断片化が進行するにつれて、応答性能がPDまで急激に低下しうる。しかし、ストレージシステム１０の応答性能は、最低保障値であるPDを下回ることはない。
【０１９４】
このように構成される本実施例も、プリフェッチ量の更新に関する効果を除いて、第１実施例と同様の効果を奏する。これに加えて、本実施例では、プリフェッチ量を固定するため、第１実施例よりも制御内容を簡素化することができる。
【実施例３】
【０１９５】
図１５に基づいて第３実施例を説明する。本実施例では、第１実施例で述べたプリフェッチ動作制御を行うために必要な統計情報が蓄積されるまでの間は、プリフェッチ動作制御を開始しない。
【０１９６】
図１５は、プリフェッチ動作制御を起動させる処理を示すフローチャートである。コントローラ１００は、モニタモジュール１２６によって、プリフェッチ動作の制御（プリフェッチ量の設定、プリフェッチ機能のオンオフ）を行うために必要な統計情報が収集されたか否かを判定する（Ｓ９１）。統計情報としては、キャッシュヒット率、リードアクセス時刻、リードアクセスされたデータのサイズを挙げることができる。
【０１９７】
プリフェッチ動作制御の開始に十分な統計情報が蓄積された場合（S91:YES）、コントローラ１００は、プリフェッチ動作制御の開始についてユーザ（ホストの管理者）の承認が得られているか否かを判定する（Ｓ９２）。
【０１９８】
事前にまたは事後に、承認が得られた場合（S92:YES）、コントローラ１００は、上述したプリフェッチ動作の制御を開始する。
【０１９９】
このように構成される本実施例も上述した第１実施例と同様の効果を奏する。これに加えて、本実施例では、プリフェッチ動作の制御に必要な統計情報が蓄積されるまで、プリフェッチ動作を制御しないため、より高精度にプリフェッチ動作を制御することができ、ストレージシステム１０の信頼性を向上させることができる。
【０２００】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０２０１】
【図１】本発明の実施形態の全体概念を示す説明図である。
【図２】ストレージシステムの構成を示すブロック図である。
【図３】リード要求の処理を示すフローチャートである。
【図４】プリフェッチ処理を示すフローチャートである。
【図５】プリフェッチ動作を制御する処理を示すフローチャートである。
【図６】データ配置の断片化の度合を検出する様子を模式的に示す説明図である。
【図７】プリフェッチ機能がオフ状態に設定されている期間内に、キャッシュヒット率を予測する様子を模式的に示す説明図である。
【図８】キャッシュヒット率を予測する処理を示すフローチャートである。
【図９】ホストからのリード要求（リードアクセス）のタイミングとプリフェッチのタイミングとの関係を模式的に示す説明図である。
【図１０】最大プリフェッチ量を算出するための処理を示すフローチャートである。
【図１１】警報を契機としてデータを再配置させる処理を示すフローチャートである。
【図１２】（ａ）は、本実施例によるプリフェッチ動作制御を行った場合のストレージシステムの応答性能を、（ｂ）は、本実施例によるプリフェッチ動作制御を行わない場合のストレージシステムの応答性能を、それぞれ示す特性図である。
【図１３】第２実施例に係るストレージシステムにより実行されるプリフェッチ動作制御処理を示すフローチャートである。
【図１４】ストレージシステムの応答性能を示す特性図である。
【図１５】第３実施例に係るストレージシステムにより実行されるプリフェッチ動作制御を起動させるための処理を示すフローチャートである。
【符号の説明】
【０２０２】
１…記憶制御装置、１Ａ…アクセス要求処理部、１Ｂ…キャッシュメモリ、１Ｃ…プリフェッチ部、１Ｄ…断片化検出部、１Ｅ…プリフェッチ量算出部、１Ｆ…プリフェッチ動作制御部、２…記憶部、３…ホスト、３Ａ…データ配信部、３Ｂ…再配置処理部、４…ユーザマシン、５，６…通信経路、７…通信ネットワーク、１０…ストレージシステム、２０…ホスト、３０…管理端末、４０…ユーザマシン、１００…コントローラ、１１０…プロセッサ、１２０…メモリ、１２１…プリフェッチ処理モジュール、１２２…プリフェッチ動作制御モジュール、１２３…データ断片化指数算出モジュール、１２４…プリフェッチ量算出モジュール、１２５…警報モジュール、１２６…モニタモジュール、１２７…管理インターフェースモジュール、１２８…ホストI/O処理モジュール、１２９…ドライブI/O処理モジュール、１３０…キャッシュ領域、１４０…ホストインターフェース、１５０…ドライブインターフェース、１６０…管理用インターフェース、１７０…バス、２００…記憶部、２１０…ディスクドライブ、２２０…RAIDグループ、２３０…論理ボリューム
【図１】
2007249457.tif 000003
【図２】
2007249457.tif 000004
【図３】
2007249457.tif 000005
【図４】
2007249457.tif 000006
【図５】
2007249457.tif 000007
【図６】
2007249457.tif 000008
【図７】
2007249457.tif 000009
【図８】
2007249457.tif 000010
【図９】
2007249457.tif 000011
【図１０】
2007249457.tif 000012
【図１１】
2007249457.tif 000013
【図１２】
2007249457.tif 000014
【図１３】
2007249457.tif 000015
【図１４】
2007249457.tif 000016
【図１５】
2007249457.tif 000017