(57)【要約】  第１及び第２のストレージコントローラのうちのリード要求を受信した受信コントローラが、第１及び第２のストレージコントローラのうちのリード元記憶領域の担当である担当コントローラでなければ、受信コントローラが、リード要求を担当コントローラに転送する。しかし、受信コントローラが、リード元記憶デバイスからリード対象データを読み出し、リード対象データを受信コントローラのキャッシュメモリに書き込み、受信コントローラのキャッシュメモリに書き込まれたリード対象データを上位装置に送信する。
2015056301.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶領域のうちのリード元記憶領域からデータを読み出すことの要求であるリード要求を上位装置から受信し前記リード要求に従うリード対象データを前記リード元記憶領域から読み出し前記リード対象データを前記上位装置に送信するストレージシステムであって、
第１のキャッシュメモリを有する第１のストレージコントローラと、
第２のキャッシュメモリを有する第２のストレージコントローラと
を有し、
前記第１及び第２のストレージコントローラのいずれも、前記上位装置から前記リード要求を受信することができ、
前記第１及び第２のストレージコントローラのうちの前記リード要求を受信した受信コントローラが、前記第１及び第２のストレージコントローラのうちの前記リード元記憶領域の担当である担当コントローラでなければ、前記受信コントローラが、前記リード要求を前記担当コントローラに転送するが、前記受信コントローラが、前記リード元記憶領域に基づく記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込み、前記受信コントローラのキャッシュメモリに書き込まれた前記リード対象データを前記上位装置に送信する、
ストレージシステム。
【請求項２】
前記担当コントローラが、前記リード元記憶領域について過去に受信したリード要求に関する履歴を基に、前記リード対象データのキャッシュ先を、前記受信コントローラのキャッシュメモリに限るとするか否かの判断を行い、
前記判断の結果が真の場合に、前記受信コントローラが、前記リード元記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込む、
請求項１記載のストレージシステム。
【請求項３】
前記リード元記憶領域からの読み出しのパターンがシーケンシャルリードであると前記履歴を基に判断された場合、前記判断の結果が真である、
請求項２に記載のストレージシステム。
【請求項４】
前記リード元記憶領域についてのキャッシュヒット率が所定の閾値未満であると前記履歴を基に判断された場合、前記判断の結果が真であり、
前記リード元記憶領域についてのキャッシュヒット率は、前記リード元記憶領域について受信したリード要求の数に対する、リード対象データが前記第１及び第２のキャッシュメモリのうちのいずれかに格納されていたリード要求の数の割合である、
請求項２に記載のストレージシステム。
【請求項５】
前記リード元記憶領域についてのキャッシュヒット率が前記所定の閾値以上であると前記履歴を基に判断された場合、前記判断の結果が偽であり、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから選択する、
請求項４に記載のストレージシステム。
【請求項６】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから前記受信コントローラのキャッシュメモリを優先的に選択する、
請求項２に記載のストレージシステム。
【請求項７】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリからラウンドロビンで選択する、
請求項２に記載のストレージシステム。
【請求項８】
前記受信コントローラが、前記受信コントローラが前記担当コントローラであるか否かを判断する前に、前記リード対象データが前記受信コントローラのキャッシュメモリに格納されているか否かを判断し、前記判断の結果が真の場合、前記リード要求を前記担当コントローラに転送すること無しに、前記受信コントローラのキャッシュメモリから前記リード対象データを読み出し、前記リード対象データを前記上位装置に送信し、前記判断の結果が偽の場合、前記リード要求を前記担当コントローラに転送する、
請求項１に記載のストレージシステム。
【請求項９】
前記担当コントローラが、前記受信コントローラのキャッシュメモリをキャッシュ先とするリードコマンドを生成し、前記リードコマンドを前記受信コントローラに送信し、前記受信コントローラが、前記リードコマンドを受信し、前記リードコマンドに従い、前記リード元記憶領域に対応する記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込む、
請求項１に記載のストレージシステム。
【請求項１０】
複数の記憶領域のうちのリード元記憶領域からデータを読み出すことの要求であるリード要求を上位装置から受信し前記リード要求に従うリード対象データを前記リード元記憶領域から読み出し前記リード対象データを前記上位装置に送信するストレージシステムのキャッシュ制御方法であって、
第１のキャッシュメモリを有する第１のストレージコントローラと、第２のキャッシュメモリを有する第２のストレージコントローラのいずれかが、前記上位装置から前記リード要求を受信し、
前記第１及び第２のストレージコントローラのうちの前記リード要求を受信した受信コントローラが、前記第１及び第２のストレージコントローラのうちの前記リード元記憶領域の担当である担当コントローラでなければ、前記受信コントローラが、前記リード要求を前記担当コントローラに転送するが、前記受信コントローラが、前記リード元記憶領域に基づく記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込み、前記受信コントローラのキャッシュメモリに書き込まれた前記リード対象データを前記上位装置に送信する、
キャッシュ制御方法。
【請求項１１】
前記担当コントローラが、前記リード元記憶領域について過去に受信したリード要求に関する履歴を基に、前記リード対象データのキャッシュ先を、前記受信コントローラのキャッシュメモリに限るとするか否かの判断を行い、
前記判断の結果が真の場合に、前記受信コントローラが、前記リード元記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込む、
請求項１０記載のキャッシュ制御方法。
【請求項１２】
前記リード元記憶領域からの読み出しのパターンがシーケンシャルリードであると前記履歴を基に判断された場合、前記判断の結果が真である、
請求項１１に記載のキャッシュ制御方法。
【請求項１３】
前記リード元記憶領域についてのキャッシュヒット率が所定の閾値未満であると前記履歴を基に判断された場合、前記判断の結果が真であり、
前記リード元記憶領域についてのキャッシュヒット率は、前記リード元記憶領域について受信したリード要求の数に対する、リード対象データが前記第１及び第２のキャッシュメモリのうちのいずれかに格納されていたリード要求の数の割合である、
請求項１１に記載のキャッシュ制御方法。
【請求項１４】
前記リード元記憶領域についてのキャッシュヒット率が前記所定の閾値以上であると前記履歴を基に判断された場合、前記判断の結果が偽であり、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから選択する、
請求項１１に記載のキャッシュ制御方法。
【請求項１５】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから前記受信コントローラのキャッシュメモリを優先的に選択する、
請求項１１に記載のキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関し、例えば、記憶デバイスから読み出されたデータのキャッシュに関する。
【背景技術】
【０００２】
一般に、ストレージシステムは、ホストコンピュータからのリード要求に対する応答を早めるために、ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）等の記憶デバイスから読み出したデータ（ホストデータ）をキャッシュメモリ（ＣＭ）にキャッシュしておき、以降、同一のホストデータを読出し対象としたリード要求を受けた場合には、記憶デバイスにアクセスすることなくＣＭ上のホストデータをホストコンピュータに返すことができる。【０００３】
ストレージシステムは、記憶デバイスへのアクセスを制御するコントローラを有しており、一般に、コントローラは、冗長化されている。このようなストレージシステムでは、複数のコントローラに備えられている複数のＣＭをホストデータのキャッシュに使用することにより、なるべく多くの領域を確保し、ホストデータのヒット率（ＣＭヒット率）を高めることができる。【０００４】
このように複数のコントローラの複数のＣＭを使用する場合には、複数のコントローラが、ＣＭとＣＭ上のデータの格納先（例えば、論理ボリューム（ＬＤＥＶ）の番号、アドレス、データサイズ）との対応関係を示す情報（以下、キャッシュ管理情報）を共有する必要がある。共有メモリを用いて複数のコントローラ間でキャッシュ管理情報の同期を取る方法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３２６４４６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のコントローラの複数のＣＭを使用してホストデータをキャッシュする場合においては、例えば、ホストコンピュータからＩ／Ｏ（Input/Output）要求を受信したコントローラ（受信コントローラ）と、ホストデータを格納するＣＭを備えるコントローラ（キャッシュコントローラ）とが別のコントローラとなることがある。この場合、Ｉ／Ｏ要求がリード要求であれば、キャッシュコントローラが、記憶デバイスからホストデータを読み出しキャッシュコントローラのＣＭにそのホストデータを格納するが、受信コントローラからそのホストデータがホストコンピュータに送信されるようにするために、キャッシュコントローラのＣＭから受信コントローラのＣＭへのホストデータの転送が必要となる。このため、ホストデータがメモリを通過する回数が多くなり、オーバーヘッドが大きい。
【課題を解決するための手段】
【０００７】
ストレージシステムは、複数の記憶領域のうちのリード元記憶領域からデータを読み出すことの要求であるリード要求を上位装置から受信しそのリード要求に従うリード対象データをリード元記憶領域から読み出しそのリード対象データを上位装置に送信するようになっている。この段落で言う「記憶領域」は、論理的な記憶デバイス（例えば後述のＬＤＥＶ）であってもよいし、論理的な記憶デバイスが有する複数の領域のうちの一領域であってもよい。【０００８】
ストレージシステムは第１のキャッシュメモリを有する第１のストレージコントローラと、第２のキャッシュメモリを有する第２のストレージコントローラとを有する。第１及び第２のストレージコントローラのいずれも、上位装置からリード要求を受信することができるようになっている。第１及び第２のストレージコントローラのうちのリード要求を受信した受信コントローラが、第１及び第２のストレージコントローラのうちのリード元記憶領域の担当である担当コントローラでなければ、受信コントローラが、リード要求を担当コントローラに転送する。しかし、受信コントローラが、リード元記憶領域に対応する記憶デバイスからリード対象データを読み出し、リード対象データを受信コントローラのキャッシュメモリに書き込み、受信コントローラのキャッシュメモリに書き込まれたリード対象データを上位装置に送信する。「記憶デバイス」は、物理記憶デバイスであってもよいし、複数の物理記憶デバイスで構成されたＲＡＩＤ（Redundant  Array  of  Independent  (or  Inexpensive)  Disks）グループであってもよいし、ＲＡＩＤグループを構成する各物理記憶デバイスであってもよいし、外部のストレージシステムから提供される論理的な記憶デバイスであってもよい。
【発明の効果】
【０００９】
受信コントローラと担当コントローラが異なっていても、リード対象データをストレージコントローラ間で転送することを回避できる。
【図面の簡単な説明】
【００１０】
【図１Ａ】一比較例に係るリード処理の概要を説明する図である。
【図１Ｂ】実施形態に係るリード処理の概要を説明する図である。
【図２】実施形態に係る計算機システムの構成図である。
【図３】実施形態に係るＬＭ内のプログラムの構成を説明する図である。
【図４】実施形態に係るＣＭの構成を説明する図である。
【図５】実施形態に係るポート管理テーブルの一例の構成図である。
【図６】実施形態に係るＲＧ管理テーブルの一例の構成図である。
【図７】実施形態に係るＬＤＥＶ管理テーブルの一例の構成図である。
【図８】実施形態に係るＣＭ領域管理テーブルの一例の構成図である。
【図９】実施形態に係るローカルメモリの構成を示す図である。
【図１０】実施形態に係るディスクＩ／Ｏインターフェースキューの一例の構成図である。
【図１１】実施形態に係るＩ／Ｏ情報格納テーブルの一例の構成図である。
【図１２】実施形態に係るＩ／Ｏ処理のフローチャートである。
【図１３】実施形態に係るリード要求処理のフローチャートである。
【図１４】実施形態に係るＣＭヒット判定処理のフローチャートである。
【図１５】実施形態に係るＣＭ確保処理のフローチャートである。
【図１６】実施形態に係るＩ／Ｏパターン解析処理のフローチャートである。
【発明を実施するための形態】
【００１１】
一実施形態を、図面を参照して説明する。
【００１２】
なお、以下の説明では「ａａａテーブル」等の表現にて情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことがある。さらに、各情報の内容を説明する際に、「ＩＤ」、「番号」という表現を用いるが、これらに代えて又は加えて他種の識別情報が使用されてよい。
【００１３】
また、以下の説明では、プログラムを主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェースを用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサを含むコントローラが行う処理としてもよい。また、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであってもよい。
【００１４】
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号を使用し（例えばＣＰＵ１６０Ａ、ＣＰＵ１６０Ｂ）、同種の要素を区別しないで説明する場合は、その要素の参照符号のうちの共通符号のみ使用する（例えばＣＰＵ１６０）ことがある。
【００１５】
また、以下の説明における用語の意味は、下記の通りである。
（＊）「ディスク」は、ディスク型記憶デバイスの略である。ディスクは、物理的な記憶デバイスの一例であり、ディスクに代えて又は加えて、他種の物理的な記憶デバイスが採用されてよい。
（＊）「ＣＭ」は、キャッシュメモリの略である。「ＬＭ」は、ローカルメモリの略である。
（＊）「ＲＧ」は、ＲＡＩＤグループの略である。ＲＧ（パリティグループと呼ばれることもある）は、複数のディスクで構成され所定のＲＡＩＤレベルでデータを記憶することができる。
（＊）「ＣＴＬ」は、ストレージシステムが有するストレージコントローラのことである。
（＊）「ＬＤＥＶ」は、論理的な記憶デバイスの略であり、論理ボリュームと呼ばれてもよい。ＬＤＥＶは、以下の実施形態では実体的なＬＤＥＶであるが、仮想的なＬＤＥＶであってもよい。実体的なＬＤＥＶは、物理的な記憶資源（例えばＲＧ）に基づくＬＤＥＶである。仮想的なＬＤＥＶは、外部のストレージシステムの記憶資源（例えばＬＤＥＶ）に基づいておりストレージ仮想化技術に従うＬＤＥＶである外部接続ＬＤＥＶであってもよいし、複数の仮想ページ（仮想的な記憶領域）で構成されており容量仮想化技術（典型的にはThin  Provisioning）に従うＬＤＥＶであってもよい。
【００１６】
まず、実施形態に係る計算機システムの概要について説明する。
【００１７】
図１Ａは、一比較例に係るリード処理の概要を説明する図である。鎖線矢印は、リード要求の流れを示し、実線矢印は、ホストデータ（リード要求に応答して読み出されたデータ）の流れを示す。
【００１８】
ストレージシステム１０が、二重化されたＣＴＬ、すなわち、ＣＴＬ１１Ａ及び１１Ｂを有している。ＣＴＬ１１Ａ及び１１Ｂは、複数のＬＤＥＶを１又は複数のホストコンピュータ１に提供する。ＬＤＥＶ毎に、担当ＣＴＬが決められている。ＬＤＥＶの担当ＣＴＬが、そのＬＤＥＶを指定したＩ／Ｏ要求を処理する。
【００１９】
ＣＴＬ１１Ａが、受信ＣＴＬ、すなわち、ホストコンピュータ１からリード要求を受信したＣＴＬであるとする。そして、そのリード要求で指定されているＬＤＥＶ（リード元ＬＤＥＶ）の担当ＣＴＬが、ＣＴＬ１１Ｂであるとする。
【００２０】
この場合、受信ＣＴＬ１１Ａが、受信したリード要求を、担当ＣＴＬ１１Ｂに転送する。担当ＣＴＬ１１Ｂが、そのリード要求を受信ＣＴＬ１１Ａから受信し、そのリード要求に従い、リード元ＬＤＥＶの基になっているＲＧ２０Ａからホストデータを読み出し、読み出したホストデータをＣＭ１４Ｂに格納する（図１Ａ（１））。次に、担当ＣＴＬ１１Ｂが、ＣＭ１４Ｂ内のホストデータを受信ＣＴＬ１１Ａに転送し、受信ＣＴＬ１１Ａが、そのホストデータをＣＭ１４Ａに格納する（図１Ａ（２））。その後、受信ＣＴＬ１１Ａが、ＣＭ１４Ａ内のホストデータを、ホストコンピュータ１０に返す（図１（３））。
【００２１】
この比較例によれば、受信ＣＴＬと担当ＣＴＬが異なる場合、図１Ａ（２）に示した通り、ＣＴＬ間のホストデータの転送が発生する。
【００２２】
本実施形態では、受信ＣＴＬと担当ＣＴＬが異なっても、ＣＴＬ間のホストデータの転送を回避することができる。
【００２３】
具体的には、図１Ｂに示すように、担当ＣＴＬ１１０Ｂが、ＣＭ確保ＣＴＬ（ホストデータの格納先ＣＭ領域が確保されるＣＴＬ）を受信ＣＴＬ１１０Ａであると決定し、ディスクリードコマンドを、受信ＣＴＬ１１０Ａに送信する（図１Ｂ（１１））。ディスクリードコマンドは、Ｉ／Ｏ種別がリードであるディスクＩ／Ｏコマンドであり、ディスクＩＤ（リード元のディスクのＩＤ）、ディスクアドレス（リード元のディスクにおけるアドレス）、ＣＭアドレス（担当ＣＴＬ１１０Ｂによって確保されたＣＭ領域のアドレス）等を含んでいる。受信ＣＴＬ（ＣＭ確保ＣＴＬ）１１０Ａは、そのディスクリードコマンドを受信し、そのディスクリードコマンドに従い、ＲＧ２００Ａからホストデータを読み出し、そのホストデータをＣＭ１４０ＡにおけるＣＭ領域（ディスクリードコマンド中のＣＭアドレスから特定されるＣＭ領域）に格納する（図１Ｂ（１２）。そして、受信ＣＴＬ１１Ａは、ＣＭ１４０Ａ内のホストデータを、ホストコンピュータ１０１に返す（図１Ｂ（１３））。
【００２４】
以上の通り、本実施形態では、受信ＣＴＬと担当ＣＴＬが異なってもＣＴＬ間のホストデータの転送を回避することができる。これにより、リード要求の処理におけるオーバーヘッドを低減することができる。なお、図１Ｂにおいて、受信ＣＴＬ１１０Ａは、リード要求を受信した場合、そのリード要求で指定されているＬＤＥＶの担当ＣＴＬがＣＴＬ１１０Ａであるか否かを判断する前に、そのリード要求に従うホストデータがＣＭ１４０Ａに格納されているか否かを判断し、その判断の結果が真の場合、ＣＭ１４０Ａ内のホストデータをホストコンピュータ１０１に送信してもよい。これにより、リード要求で指定されているＬＤＥＶの担当ＣＴＬがＣＴＬ１１０Ａであるか否かの判断、受信ＣＴＬから担当ＣＴＬへのリード要求の転送、及び、担当ＣＴＬから受信ＣＴＬへのディスクリードコマンドの送信を、省略することが期待できる。
【００２５】
以下、本実施形態を詳細に説明する。
【００２６】
図２は、実施形態に係る計算機システムの構成図である。
【００２７】
計算機システムは、ホストコンピュータ１０と、ストレージシステム１００とを有する。ホストコンピュータ１０と、ストレージシステム１００とは、例えば通信ネットワークを介してデータ通信可能に接続されている。なお、図２では、ホストコンピュータ１０を１台としているが、ホストコンピュータ１０は、複数台であってもよい。
【００２８】
ホストコンピュータ１０は、上位装置の一例であり、例えば、汎用のサーバ装置等により構成され、所定の処理を実行する。ホストコンピュータ１０は、ストレージシステム１００に対してＩ／Ｏ要求を発行する。Ｉ／Ｏ要求は、例えば、ＳＣＳＩのコマンドであり、要求種別（例えばリード又はライト）、Ｉ／Ｏ先のＬＤＥＶ（論理ユニット）に関連付いたポート番号及びＬＵＮ（Logical  Unit  Number）、ＬＤＥＶにおけるＩ／Ｏ先領域のＬＢＡ（Logical  Block  Address）等を含む。
【００２９】
ストレージシステム１００は、複数のＲＧ２００（２００Ａ〜２００Ｃ）と、複数のＣＴＬ１１０（１１０Ａ、１１０Ｂ）とを有する。各ＣＴＬ１１０Ａ、１１０Ｂは、複数のＲＧ２００のそれぞれと接続されている。ＲＧ２００は、複数のディスクで構成されている。本実施形態では、複数のＲＧ２００Ａ〜２００Ｃに基づいて、複数のＬＤＥＶが構成されている。ホストデータは、ＬＤＥＶに格納され、ＬＤＥＶに格納されたホストデータは、そのＬＤＥＶの基になっているＲＧに格納される。なお、本実施形態では、ＬＤＥＶ毎に担当ＣＴＬが決まっている。ＬＤＥＶの担当ＣＴＬは、そのＬＤＥＶをＩ／Ｏ先としたＩ／Ｏ要求を処理するＣＴＬであり、そのＬＤＥＶのオーナー権を持つＣＴＬということもできる。
【００３０】
ＣＴＬ１１０ＡとＣＴＬ１１０Ｂとは、互いに通信可能に接続されている。図面では、ＣＴＬ１１０Ａ内の要素には、末尾が「Ａ」である参照番号が付され、ＣＴＬ１１０Ｂ内の要素には、末尾が「Ｂ」である参照番号が付される。前述したように、どちらのＣＴＬの要素であるかを区別しない場合には、共通の符号のみが使用されることがある。
【００３１】
ＣＴＬ１１０Ａ（１１０Ｂ）は、ＦＥ  ＩＦ（フロントエンドインターフェース）１２０Ａ（１２０Ｂ）と、ＬＭ１３０Ａ（１３０Ｂ）と、ＣＭ１４０Ａ（１４０Ｂ）と、ＢＥ  ＩＦ（バックエンドインターフェース）１５０Ａ（１５０Ｂ）と、それらに接続されたＣＰＵ（Central  Processing  Unit）１６０Ａ（１６０Ｂ）とを有する。
【００３２】
ＦＥ  ＩＦ１２０は、通信インタフェースデバイスであり、例えば、プロトコルチップを有し、ホストコンピュータ１０との間のＩ／Ｏを制御する。ＦＥ  ＩＦ１２０は、１又は複数のポートを有し、各ポートを介して、ホストコンピュータ１０と通信可能である。ＬＭ１３０は、ＣＰＵ１６０が実行するプログラムや各種情報を格納する。本実施形態では、ＬＭ１３０は、ＣＭ１４０を構成するメモリよりもアクセス速度が速いメモリで構成されている。ＣＭ１４０は、ホストデータや、制御情報等を格納する。ＢＥ  ＩＦ１５０は、通信インタフェースデバイスであり、例えば、プロトコルチップを有し、ＲＧ２００との間のＩ／Ｏを制御する。ＢＥ  ＩＦ１５０は、１又は複数のポートを有し、各ポートを介して、ＲＧ２００と通信可能である。ＣＰＵ１６０は、ＬＭ１３０に格納されたプログラムを実行することにより各種処理を行う。
【００３３】
図３は、ＬＭ１３０内のプログラムの構成を説明する図である。
【００３４】
ＬＭ１３０Ａ（１３０Ｂ）は、プログラムを格納するプログラム領域１３１Ａ（１３１Ｂ）を有する。プログラム領域１３１Ａ（１３１Ｂ）には、ホストＩ／Ｏ処理プログラム１３２Ａ（１３２Ｂ）と、ＣＭ管理プログラム１３３Ａ（１３３Ｂ）と、Ｉ／Ｏパターン学習プログラム１３４Ａ（１３４Ｂ）と、データフロー最適化プログラム１３５Ａ（１３５Ｂ）と、ディスクＩ／Ｏ処理プログラム１３６Ａ（１３６Ｂ）とが格納される。
【００３５】
ホストＩ／Ｏ処理プログラム１３２は、ホストコンピュータ１０から受信したＩ／Ｏ要求を処理するプログラムである。ＣＭ管理プログラム１３３は、ＣＭ１４０に格納済のホストデータを管理する処理、ＬＤＥＶ毎のＣＭヒット率を管理する処理、及びＣＭヒット判定を行う処理等を実行するプログラムである。Ｉ／Ｏパターン学習プログラム１３４は、ＬＤＥＶ毎に、そのＬＤＥＶに対するＩ／Ｏパターンを学習し、Ｉ／Ｏパターンを判定する処理を行うプログラムである。Ｉ／Ｏパターンとしては、本実施形態では、ＬＤＥＶの連続する領域を順次読み出すシーケンシャルリードと、ＬＤＥＶのランダムな領域を読み出すランダムリードとがあり、ランダムリードについては、更に、ＣＭヒット率が高いランダムリードと、ＣＭヒット率が低いランダムリードとがある。データフロー最適化プログラム１３５は、ＣＴＬ１１０間を跨ったデータ転送が発生しないようなデータフローとなるように、ホストデータをキャッシュするＣＭ１４０を決定するプログラムである。ディスクＩ／Ｏ処理プログラム１３６は、ＲＧ２００を構成する各ディスクへのＩ／Ｏ処理を実行するプログラムである。なお、本実施形態において、ＬＤＥＶのＣＭヒット率は、そのＬＤＥＶをリード元としたリード要求の総数のうち、リード対象データがいずれかのＣＭ１４０Ａ又は１４０Ｂに格納されていたリード要求の数の割合でよい。リード要求の総数は、一定期間において受信されたリード要求の数でよい。また、ＬＤＥＶのＣＭヒット率は、リード要求に関するＣＭヒット率であるが、リード要求に関するＣＭヒット率は、リード要求のみについてのＣＭヒット率であってもよいし、Ｉ／Ｏ要求についてのＣＭヒット率であってもよい。
【００３６】
図４は、ＣＭ１４０の構成を説明する図である。
【００３７】
ＣＭ１４０Ａ（１４０Ｂ）は、制御情報を格納するための制御情報格納領域１４１Ａ（１４１Ｂ）と、ホストデータをキャッシュするためのホストデータキャッシュ領域１４２Ａ（１４２Ｂ）とを有する。制御情報格納領域１４１Ａ（１４１Ｂ）には、ポート管理テーブル１４３Ａ（１４３Ｂ）と、ＬＤＥＶ管理テーブル１４４Ａ（１４４Ｂ）と、ＣＭ領域管理テーブル１４５Ａ（１４５Ｂ）と、ＲＧ管理テーブル１４６Ａ（１４６Ｂ）とが格納される。各テーブルの構成については、後述する。
【００３８】
図５は、ポート管理テーブル１４３の一例の構成図である。
【００３９】
ポート管理テーブル１４３Ａ（１４３Ｂ）は、ＦＥ  ＩＦ１２０Ａ（１２０Ｂ）のポートを管理するテーブルであり、ポート毎にエントリを有する。エントリは、ポート番号５０１Ａ（５０１Ｂ）、ＬＵＮ５０２Ａ（５０２Ｂ）、実装ＣＴＬ番号５０３Ａ（５０３Ｂ）、及びＬＤＥＶ番号５０４Ａ（５０４Ｂ）のフィールドを有する。
【００４０】
ポート番号５０１には、ポートを一意に識別するポート番号が格納される。ＬＵＮ５０２には、ホストコンピュータ１０側で認識しているＬＵＮ（Logical  Unit  Number）が格納される。ＬＵＮは、ＬＤＥＶに関連付けられている。実装ＣＴＬ番号５０３は、ポートを実装しているＣＴＬ１１０の番号が格納される。ＬＤＥＶ番号５０４には、ＬＤＥＶの番号が格納される。
【００４１】
図６は、ＲＧ管理テーブル１４６の一例の構成図である。
【００４２】
ＲＧ管理テーブル１４６Ａ（１４６Ｂ）は、ＲＧを管理するためのテーブルであり、ＲＧ毎にエントリを有する。エントリは、ＲＧ番号６０１Ａ（６０１Ｂ）、ＲＡＩＤレベル６０２Ａ（６０２Ｂ）、及びディスクＩＤ６０３Ａ（６０３Ｂ）のフィールドを有する。
【００４３】
ＲＧ番号６０１には、ＲＧの番号が格納される。ＲＡＩＤレベル６０２には、ＲＧのＲＡＩＤレベルが格納される。ディスクＩＤ６０３には、ＲＧを構成するディスクのＩＤが格納される。
【００４４】
図７は、ＬＤＥＶ管理テーブル１４４の一例の構成図である。
【００４５】
ＬＤＥＶ管理テーブル１４４Ａ（１４４Ｂ）は、ＬＤＥＶを管理するためのテーブルであり、ＬＤＥＶ毎にエントリを有する。エントリは、ＬＤＥＶ番号７０１Ａ（７０１Ｂ）、容量７０２Ａ（７０２Ｂ）、担当ＣＴＬ番号７０３Ａ（７０３Ｂ）、ＣＭヒット率７０４Ａ（７０４Ｂ）、及びＲＧ番号７０５Ａ（７０５Ｂ）のフィールドを有する。
【００４６】
ＬＤＥＶ番号７０１には、ＬＤＥＶの番号が格納される。容量７０２には、ＬＤＥＶの容量が格納される。担当ＣＴＬ番号７０３には、ＬＤＥＶの担当ＣＴＬの番号が格納される。ＣＭヒット率７０４には、キャッシュヒット率（ＣＭヒット率）、すなわち、ＬＤＥＶに対するリード要求の対象のホストデータがいずれかのＣＭ１４０に存在する割合が格納される。なお、このＣＭヒット率は、リード要求に関する履歴情報の一種に相当する。ＲＧ番号７０５には、ＬＤＥＶの基になっているＲＧの番号が格納される。
【００４７】
図８は、ＣＭ領域管理テーブル１４５の一例の構成図である。
【００４８】
ＣＭ領域管理テーブル１４５Ａ（１４５Ｂ）は、ＣＭ１４０Ａ（１４０Ｂ）に格納されているホストデータについての管理テーブルであり、ホストデータ毎にエントリを有する。エントリは、ＬＤＥＶ番号８０１Ａ（８０１Ｂ）、ＬＤＥＶアドレス８０２Ａ（８０２Ｂ）、容量８０３Ａ（８０３Ｂ）、対応ＣＴＬ番号８０４Ａ（８０４Ｂ）、及びＣＭアドレス８０５Ａ（８０５Ｂ）のフィールドを有する。
【００４９】
ＬＤＥＶ番号８０１には、ＣＭ上のホストデータが格納されているＬＤＥＶの番号が格納される。ＬＤＥＶアドレス８０２には、ＣＭ上のホストデータのＬＤＥＶ領域（ＬＤＥＶにおける領域）の先頭アドレスが格納される。容量８０３には、ホストデータの容量（サイズ）が格納される。対応ＣＴＬ番号８０４には、ホストデータが格納されているＣＭ１４０を有するＣＴＬ１１０の番号が格納される。ＣＭアドレス８０５には、ホストデータが格納されているＣＭ領域（ＣＭ１４０における領域）のアドレスが格納される。例えば、ＣＭ領域管理テーブル１４５の一番上のエントリによると、ＬＤＥＶ番号が「０」のＬＤＥＶのアドレス「０ｘ００００００００」から、８ＭＢのホストデータが、ＣＴＬ番号が「０」のＣＴＬ１１０のＣＭ１４０のアドレス「０ｘ０００２００００」から始まる領域にキャッシュされたことがわかる。
【００５０】
図９は、ＬＭ１３０の構成を示す図である。
【００５１】
ＬＭ１３０Ａ（１３０Ｂ）は、プログラム領域１３１Ａ（１３１Ｂ）と、ディスクＩ／Ｏインターフェースキュー１３７Ａ（１３７Ｂ）と、Ｉ／Ｏ情報格納テーブル１３９Ａ（１３９Ｂ）とを有する。
【００５２】
図１０は、ディスクＩ／Ｏインターフェースキュー１３７の一例の構成図である。
【００５３】
ディスクＩ／Ｏインターフェースキュー１３７Ａ（１３７Ｂ）は、ＲＧ２００内のディスクに対するＩ／ＯコマンドであるディスクＩ／Ｏコマンドのキューである。ディスクＩ／Ｏ処理プログラム１３６は、ディスクＩ／Ｏコマンドに従ってＲＧ２００に対するＩ／Ｏを実行する。ディスクＩ／Ｏコマンドは、コマンド種別と、ディスクＩＤと、ディスクアドレスと、ＣＭ確保ＣＴＬ番号と、ＣＭアドレスとのフィールドを有する。コマンド種別には、ディスクＩ／Ｏコマンドの種別（例えば、リードかライトか）が格納される。ディスクＩＤには、ディスクＩ／Ｏコマンドの送信先ディスクのＩＤが格納される。ディスクアドレスには、ディスクＩ／Ｏコマンドに従うＩ／Ｏ先のアドレス（ディスクについてのアドレス）が格納される。ＣＭ確保ＣＴＬ番号には、ＣＭ確保ＣＴＬの番号、すなわち、ホストデータをディスクから読み出してキャッシュするＣＴＬ１１０の番号、が格納される。ＣＭアドレスには、ホストデータのキャッシュ先領域のアドレスが格納される。
【００５４】
図１１は、Ｉ／Ｏ情報格納テーブル１３９の一例の構成図である。
【００５５】
Ｉ／Ｏ情報格納テーブル１３９Ａ（１３９Ｂ）は、ＣＴＬ１１０Ａ（１１０Ｂ）が担当するＬＤＥＶに対するＩ／Ｏ要求に関する履歴情報を格納するテーブルである。Ｉ／Ｏ情報格納テーブル１３９Ａ（１３９Ｂ）は、Ｉ／Ｏ要求毎にエントリを有する。エントリは、ＬＤＥＶ番号１１０１Ａ（１１０１Ｂ）、要求通番１１０２Ａ（１１０２Ｂ）、要求種別１１０３Ａ（１１０３Ｂ）、要求ＬＢＡ１１０４Ａ（１１０４Ｂ）、要求レングス１１０５Ａ（１１０５Ｂ）、及び受信ＣＴＬ番号１１０６Ａ（１１０６Ｂ）のフィールドを有する。
【００５６】
ＬＤＥＶ番号１１０１(例えば１１０１Ａ)には、ＣＴＬ１１０（例えば１１０Ａ）が担当するＬＤＥＶの番号が格納される。要求通番１１０２には、Ｉ／Ｏ要求の通番が格納される。要求種別１１０３には、Ｉ／Ｏ要求の種別が格納される。要求ＬＢＡ１１０４には、Ｉ／Ｏ要求が指定するＬＢＡ（ＬＤＥＶにおけるＩ／Ｏ先領域のＬＢＡ）が格納される。要求レングス１１０５には、Ｉ／Ｏ要求に従い入出力されるホストデータの容量（レングス）が格納される。受信ＣＴＬ番号１１０６には、受信ＣＴＬの番号、すなわち、Ｉ／Ｏ要求をホストコンピュータから受信したＣＴＬ１１０の番号が格納される。
【００５７】
なお、Ｉ／Ｏ情報格納テーブル１３９に、１つのＬＤＥＶにつき、直近の所定数（例えば、３つ）のＩ／Ｏ要求の履歴のみが格納されてもよい。所定数のＩ／Ｏ要求の履歴が管理されているＬＤＥＶについて、新しいＩ／Ｏ要求が受信された場合には、そのＬＤＥＶについて最も古いＩ／Ｏ要求に対応するエントリから情報が削除されてよい。このようにすると、Ｉ／Ｏ情報格納テーブル１３９のサイズを抑えることができる。
【００５８】
次に、本実施形態において行われる処理を説明する。
【００５９】
図１２は、Ｉ／Ｏ処理のフローチャートである。
【００６０】
いずれかのＣＴＬ１１０におけるホストＩ／Ｏ処理プログラム１３２は、ホストコンピュータ１０からのＩ／Ｏ要求（リード要求又はライト要求）を受信する（Ｓ１０１）。以下、図１２〜図１８において、ホストコンピュータ１０からＩ／Ｏ要求を受信した受信ＣＴＬは、ＣＴＬ１１０Ａとする。
【００６１】
次に、受信ＣＴＬ１１０ＡにおけるホストＩ／Ｏ処理プログラム１３２Ａは、受信したＩ／Ｏ要求で指定されているＩ／Ｏ先情報からＬＤＥＶ番号及びＬＤＥＶアドレスを求める（Ｓ１０２）。具体的には、ホストＩ／Ｏ処理プログラム１３２Ａは、ポート管理テーブル１４３を参照し、Ｉ／Ｏ要求におけるＩ／Ｏ先情報中のポート番号及びＬＵＮに対応するＬＤＥＶ番号及び実装ＣＴＬ番号を特定し、且つ、Ｉ／Ｏ先情報中のＬＢＡをＬＤＥＶアドレスに変換する。なお、特定したＬＤＥＶ番号が、受信ＣＴＬ１１０Ａが担当するＬＤＥＶでない場合には、ホストＩ／Ｏ処理プログラム１３２Ａは、受信したＩ／Ｏ要求をＣＴＬ１１０Ｂに転送する。この場合、ＣＴＬ１１０ＢにおけるＩ／Ｏ処理プログラム１３２Ｂが、受信ＣＴＬ１１０ＡからのＩ／Ｏ要求について、Ｓ１０２と同じ処理を行う。以下、図１２〜図１８において、Ｉ／Ｏ要求に従うＩ／Ｏ先ＬＤＥＶの担当ＣＴＬが、ＣＴＬ１１０Ｂであるとし、故に、Ｉ／Ｏ要求は、受信ＣＴＬ１１０Ａから担当ＣＴＬ１１０Ｂに転送され、ホストＩ／Ｏ処理プログラム１３２Ｂが、そのＩ／Ｏ要求についてＳ１０２を行い、そのＩ／Ｏ要求に従うＩ／Ｏ先ＬＤＥＶの担当がＣＴＬ１１０Ｂであると認識したとする。
【００６２】
次に、ホストＩ／Ｏ処理プログラム１３２Ｂは、Ｉ／Ｏ情報格納テーブル１３９に、特定したＬＤＥＶ番号に対応するエントリを追加し、エントリ中の各フィールドに対応する情報を格納する（Ｓ１０３）。具体的には、ホストＩ／Ｏ処理プログラム１３２Ｂは、追加したエントリの要求通番１１０２Ｂには、Ｉ／Ｏ先ＬＤＥＶの要求通番として現在登録されているもっとも大きい番号に１を加算した値を設定し、要求種別１１０３Ｂには、Ｉ／Ｏ要求の種別を設定し、要求ＬＢＡ１１０４Ｂには、Ｉ／Ｏ要求中のＬＢＡを設定し、要求レングス１１０５Ｂには、Ｉ／Ｏ要求に従うＩ／Ｏ対象のデータの長さを設定し、受信ＣＴＬ番号１１０６Ｂには、Ｓ１０２で特定した実装ＣＴＬ番号（つまり受信ＣＴＬ１１０Ａの番号）を設定する。
【００６３】
次に、ホストＩ／Ｏ処理プログラム１３２Ｂは、受信したＩ／Ｏ要求がリード要求か否かを判定する（Ｓ１０４）。
【００６４】
Ｓ１０４の判定結果が真の場合（Ｓ１０４：Ｙｅｓ）、ホストＩ／Ｏ処理プログラム１３２Ｂは、リード要求処理（図１３参照）を実行し（Ｓ１０５）、その後、処理をＳ１０７に進める。
【００６５】
一方、Ｓ１０４の判定結果が偽の場合（Ｓ１０４：Ｎｏ）、ホストＩ／Ｏ処理プログラム１３２Ｂは、ライト要求に従うホストデータをＣＭ１４０Ｂに書き込むライト要求処理を行い（Ｓ１０６）、処理をＳ１０７に進める。なお、ＣＭ１４０Ｂ内のホストデータは、ディスクＩ／Ｏ処理プログラム１３６Ｂにより、ライト先ＬＤＥＶの基になっているＲＧ２００に書き込まれる。
【００６６】
Ｓ１０７では、ホストＩ／Ｏ処理プログラム１３２Ｂは、Ｉ／Ｏ要求の処理の完了を受信ＣＴＬ１１０Ａに通知し、受信ＣＴＬ１１０ＡにおけるホストＩ／Ｏ処理プログラム１３２Ａが、その通知を受けて、Ｉ／Ｏ要求を送信したホストコンピュータ１０に対してＩ／Ｏ要求の応答を返す。Ｉ／Ｏ要求がリード要求の場合、Ｉ／Ｏ要求の応答は、リード対象のホストデータを含む。リード要求処理（Ｓ１０５）において、リード対象のホストデータが、受信ＣＴＬ１１０ＡのＣＭ１４０Ａに格納される。従って、Ｓ１０７では、Ｉ／Ｏ処理プログラム１３２Ａは、ＣＭ１４０Ａからホストデータを読み出し、そのホストデータを含んだ応答をホストコンピュータ１０に返す。
【００６７】
図１３は、リード要求処理（図１２のＳ１０５）のフローチャートである。
【００６８】
ホストＩ／Ｏ処理プログラム１３２Ｂは、ＣＭ管理プログラム１３３Ｂをコールして、ＣＭヒット判定処理（図１４参照）を実行させる（Ｓ１１１）。この際、ホストＩ／Ｏ処理プログラム１３２Ｂは、ＣＭ管理プログラム１３３Ｂに、リード要求のリード元領域についてのＬＤＥＶ番号、ＬＤＥＶアドレス及びレングスを引数として渡す。
【００６９】
その後、ホストＩ／Ｏ処理プログラム１３２Ｂは、ＣＭ管理プログラム１３３ＢからのＣＭヒット判定処理の出力情報を受け取り、ＣＭヒットしたか否か、すなわち、リード対象のホストデータがＣＭ１４０Ａ又は１４０Ｂに格納されているか否かを判定する（Ｓ１１２）。Ｓ１１２の結果が真の場合（Ｓ１１２：Ｙｅｓ）、ホストＩ／Ｏ処理プログラム１３２Ｂは、処理をＳ１１５に進める。
【００７０】
一方、Ｓ１１２の判定結果が偽の場合（Ｓ１１２：Ｎｏ）、ホストＩ／Ｏ処理プログラム１３２Ｂは、処理対象のリード要求に対応するディスクＩ／ＯコマンドをディスクＩ／Ｏインターフェースキュー１３７Ｂに追加し、そのディスクＩ／Ｏコマンドに処理対象のリード要求に対応する情報要素を設定し、ＣＭ管理プログラム１３３Ｂをコールし、ＣＭ確保処理（図１５参照）を実行させる（Ｓ１１３）。ここで、ディスクＩ／Ｏコマンドに処理対象のリード要求に対応する情報要素を設定する処理は、具体的には、以下に示すように実行される。すなわち、ホストＩ／Ｏ処理プログラム１３２Ｂは、ＬＤＥＶ管理テーブル１４４Ｂを参照して、Ｓ１０２で求めたＬＤＥＶ番号に対応するＲＧ番号を特定し、ＲＧ管理テーブル１４６を参照して、特定したＲＧ番号に対応するＲＡＩＤレベルとディスクＩＤを特定し、Ｓ１０２で求めたＬＤＥＶアドレスと、特定したＲＡＩＤレベルと、特定したディスクＩＤとに基づいて、ＬＤＥＶアドレスに対応する物理領域を有するディスクのディスクＩＤ及びそのディスク内のアドレスを特定する。次に、ホストＩ／Ｏ処理プログラム１３２Ｂは、追加したディスクＩ／Ｏコマンドのコマンド種別に、「リード」を設定し、対象ディスクＩＤに、ＬＤＥＶアドレスに対応する物理領域を有するディスクのディスクＩＤを設定し、ディスクアドレスに、そのディスクにおけるアドレスを設定する。なお、この時点では、ＣＭ確保ＣＴＬ番号と、ＣＭアドレスは、設定されず、それぞれの値は、ＣＭ確保処理において設定される。
【００７１】
次に、ＣＭ確保処理後に、ホストＩ／Ｏ処理プログラム１３２Ｂは、ディスクＩ／Ｏ処理プログラム１３６Ｂをコールして、ディスクリード処理を実行させる（Ｓ１１４）。ディスクＩ／Ｏ処理プログラム１３６Ｂが、ディスクＩ／Ｏインターフェースキュー１３７Ｂのディスクリードコマンドのうち、ＣＭ確保ＣＴＬ番号が担当ＣＴＬ１１０Ｂの番号であるディスクリードコマンドを、そのディスクリードコマンドで指定されているディスクに送信し、そのディスクリードコマンドに応答して読み出されたデータを、担当ＣＴＬ１１０ＢのＣＭ１４０ＢにおけるＣＭ領域（そのディスクリードコマンドで指定されているＣＭアドレスに該当するＣＭ領域）に格納する。一方、ディスクＩ／Ｏインターフェースキュー１３７Ｂのディスクリードコマンドのうち、ＣＭ確保ＣＴＬ番号が担当ＣＴＬ１１０Ｂの番号ではないディスクリードコマンドについては、ディスクＩ／Ｏ処理プログラム１３６Ｂ（又はホストＩ／Ｏ処理プログラム１３２Ｂ）は、このディスクリードコマンドを、ＣＭ確保ＣＴＬ（つまりＣＴＬ１１０Ａ）に送信する。これにより、そのディスクリードコマンドが、ＣＭ確保ＣＴＬ１１０ＡのディスクＩ／Ｏ処理プログラム１３６Ａにより、そのディスクリードコマンドで指定されているディスクに送信され、そのディスクリードコマンドに応答して読み出されたデータが、受信ＣＴＬ１１０ＡのＣＭ１４０ＡにおけるＣＭ領域（そのディスクリードコマンドで指定されているＣＭアドレスに該当するＣＭ領域）に格納される。リード元ＬＤＥＶの基になっているＲＧを構成する複数のディスクにそれぞれ複数のディスクリードコマンドが送信されることで、それら複数のディスクからそれぞれ複数のデータが読み出され、それら複数のデータを基に、リード対象のホストデータが、読み出し先のＣＭ１４０に生成される。
【００７２】
ディスクＩ／Ｏ処理の実行後、Ｉ／Ｏ処理プログラム１３２Ｂは、処理をＳ１１５に進める。
【００７３】
Ｓ１１５では、ホストＩ／Ｏ処理プログラム１３２Ｂは、リード対象のホストデータが受信ＣＴＬ１１０ＡのＣＭ１４０Ａに格納されているか否かを判定する。Ｓ１１５の判定結果が真の場合（Ｓ１１５：Ｙｅｓ）、ホストＩ／Ｏ処理プログラム１３２Ｂは、処理を終了する。一方、Ｓ１１５の判定結果が偽の場合（Ｓ１１５：Ｎｏ）、担当ＣＴＬ１１０ＢのＣＭ１４０Ｂから受信ＣＴＬ１１０ＡのＣＭ１４０Ａにホストデータがコピーされ（Ｓ１１６）、処理が終了する。ホストデータのコピーは、担当ＣＴＬ１１０ＢからＣＭ１４０Ａへのライトであってもよいし、受信ＣＴＬ１１０ＡによるＣＭ１４０ＢからＣＭ１４０Ａへのリードであってもよい。
【００７４】
図１４は、ＣＭヒット判定処理（図１３のＳ１１１）のフローチャートである。
【００７５】
ＣＭ管理プログラム１３３Ｂは、ＣＭ１４０Ａ又は１４０Ｂに、Ｉ／Ｏ要求の対象のホストデータが存在するか否かを判定する（Ｓ１２１）。具体的には、ＣＭ管理プログラム１３３Ｂは、ＣＭ領域管理テーブル１４５Ｂに、ホストＩ／Ｏ処理プログラム１３２Ｂから受け取ったＬＤＥＶ番号、ＬＤＥＶアドレス、及びレングスで特定される領域に対応したエントリがあるか否かを判定する。
【００７６】
Ｓ１２１の判定結果が真の場合（Ｓ１２１：Ｙｅｓ）、ＣＭ管理プログラム１３３Ｂは、受け取ったＬＤＥＶ番号に対応するＣＭヒット率７０４Ｂの値を増やし（Ｓ１２２）、ＣＭヒット判定処理の出力情報にＣＭヒットを設定し（Ｓ１２３）、出力情報をホストＩ／Ｏ処理プログラム１３２Ｂに返す。
【００７７】
一方、Ｓ１２１の判定結果が偽の場合（Ｓ１２１：Ｎｏ）、ＣＭ管理プログラム１３３Ｂは、受け取ったＬＤＥＶ番号に対応するＣＭヒット率７０４Ｂの値を減らし（Ｓ１２４）、ＣＭヒット判定処理の出力情報にＣＭミスを設定し（Ｓ１２５）、出力情報をホストＩ／Ｏ処理プログラム１３２Ｂに返す。
【００７８】
図１５は、ＣＭ確保処理（図１３のＳ１１３）のフローチャートである。
【００７９】
ＣＭ管理プログラム１３３Ｂは、Ｉ／Ｏパターン学習プログラム１３４Ｂをコールして、Ｉ／Ｏパターン解析処理（図１６参照）を実行させる（Ｓ１３１）。
【００８０】
ＣＭ管理プログラム１３３は、Ｉ／Ｏパターン解析処理の出力情報を受け取って、出力情報に基づいて、Ｉ／Ｏパターンを判定する（Ｓ１３２）。本実施形態では、Ｉ／Ｏパターン解析処理の出力情報には、リード元ＬＤＥＶに対するＩ／Ｏパターンがシーケンシャルリードであることを示す「シーケンシャル」と、リード元ＬＤＥＶについてのＩ／Ｏパターンがランダムリードであって、ＣＭヒット率が高いことを示す「ランダム（ＣＭヒット率：高）」と、リード元ＬＤＥＶについてのＩ／Ｏパターンがランダムリードであって、ＣＭヒット率が低いことを示す「ランダム（ＣＭヒット率：低）」とのいずれかが設定される。ＣＭヒット率の高低は、例えば、ＣＭヒット率が閾値以上か否かでよい。
【００８１】
Ｉ／Ｏパターンがシーケンシャル又はランダム（ＣＭヒット率：低）である場合には、ＣＭ管理プログラム１３３Ｂは、データフロー最適化プログラム１３５Ｂによるデータフロー最適化ＣＭ確保処理（Ｓ１３３）を実行させる。ここで、データフロー最適化ＣＭ確保処理は、受信ＣＴＬ１１０ＡのＣＭ１４０Ａのみをホストデータのキャッシュ先とする処理である。この処理によると、ＣＴＬ１１０間で発生するホストデータの転送が回避され、故に、オーバーヘッドを低減することができる。ここで、Ｉ／Ｏパターンがシーケンシャルである場合にデータフロー最適化ＣＭ確保処理を行う理由は、シーケンシャルにデータがリードされるので、キャッシュされているホストデータが後続のリード要求で参照される可能性がほとんど見込めず、受信ＣＴＬ１１０Ａ以外のＣＭ１４０Ｂにデータをキャッシュしておくメリットが少なく、ＣＴＬ１１０間のホストデータ転送を回避する方が有効だからである。また、Ｉ／Ｏパターンがランダム（ＣＭヒット率：低）である場合にデータフロー最適化ＣＭ確保処理を行う理由は、後続のリード要求でヒットする可能性が低いので、受信ＣＴＬ１１０Ａ以外のＣＭ１４０Ｂにデータをキャッシュしておくメリットが少なく、ＣＴＬ１１０間のホストデータ転送を回避する方が有効だからである。
【００８２】
データフロー最適化ＣＭ確保処理では、データフロー最適化プログラム１３５Ｂは、受信ＣＴＬ１１０ＡのＣＭ１４０Ａをホストデータのキャッシュ先として確保するために、Ｉ／Ｏ情報格納テーブル１３９Ｂから、処理対象のリード要求に対応するエントリを特定し、そのエントリの受信ＣＴＬ番号１１０６Ｂに対応するＣＴＬ１１０ＡのＣＭ１４０Ａの領域をホストデータのキャッシュ先として確保する。なお、このＣＭ１４０Ａに空きのＣＭ領域がない場合には、ＣＭ１４０Ａから、最も使用頻度の低いクリーンＣＭ領域（リード元ＬＤＥＶに格納済のホストデータであるクリーンデータが格納されているＣＭ領域）が、新たに読み出されるホストデータのキャッシュ先として確保されてもよい。その後、ＣＭ管理プログラム１３３Ｂは、処理をＳ１３８に進める。
【００８３】
一方、Ｉ／Ｏパターンがランダム（ＣＭヒット率：高）である場合には、ＣＭ管理プログラム１３３Ｂは、ＣＭヒット率優先ＣＭ確保処理（Ｓ１３４）を実行する。ここで、ＣＭヒット率優先ＣＭ確保処理では、ＣＭヒット率を向上するために、ホストデータのキャッシュ先とするＣＭ１４０は、受信ＣＴＬ１１０ＡのＣＭ１４０Ａに限らない。ＣＭヒット率優先ＣＭ確保処理によると、ホストデータをキャッシュすることのできる容量を大きくすることができる。ここで、Ｉ／Ｏパターンがランダム（ＣＭヒット率：高）である場合に、ＣＭヒット率優先ＣＭ確保処理を行う理由は、ＣＴＬ１１０間のホストデータ転送を回避することよりも、ホストデータをキャッシュする容量を大きくしておくことによりＣＭヒット率を高めることの方がメリットが大きい、すなわち、後続のリード要求に対して、ＲＧ２００からホストデータを読み出さずにＣＭ１４０から読み出す機会を増加させることができ、ホストコンピュータに対する全体としてのＩ／Ｏのレスポンスを向上することが期待できるからである。
【００８４】
ＣＭヒット率優先ＣＭ確保処理では、ＣＭ管理プログラム１３３Ｂは、Ｉ／Ｏ情報格納テーブル１３９Ｂから、処理対象のリード要求に対応するエントリを特定し、そのエントリの受信ＣＴＬ番号１１０６Ｂに対応する受信ＣＴＬ１１０ＡのＣＭ１４０Ａに空きがあるか否かを判定する（Ｓ１３５）。Ｓ１３５の判定結果が真の場合（Ｓ１３５：Ｙｅｓ）、ＣＭ管理プログラム１３３Ｂは、ＣＭ１４０Ｂよりも優先してＣＭ１４０Ａからキャッシュ先のＣＭ領域を確保する（Ｓ１３７）。このように、受信ＣＴＬ１１０ＡのＣＭ１４０Ａを優先してキャッシュ先とすることにより、ＣＴＬ１１０間でのホストデータ転送を回避することができる。
【００８５】
一方、Ｓ１３５の判定結果が偽の場合（Ｓ１３５：Ｎｏ）、ＣＭ管理プログラム１３３Ｂは、受信ＣＴＬ１１０Ａ以外のＣＴＬ１１０Ｂ（非受信ＣＴＬ）のＣＭ１４０Ｂの領域を、ホストデータのキャッシュ先として確保する（Ｓ１３６）。
【００８６】
Ｓ１３３、Ｓ１３６、又はＳ１３７においてＣＭ領域を確保した後、ＣＭ管理プログラム１３３Ｂは、確保したＣＭ領域を含むＣＴＬ１１０の番号を、処理対象のリード要求に対応するディスクリードコマンドのＣＭ確保ＣＴＬ番号として設定し、確保したＣＭ領域のアドレスをＣＭアドレスとして設定する（Ｓ１３８）。
【００８７】
図１６は、Ｉ／Ｏパターン解析処理（図１５のＳ１３１）のフローチャートである。
【００８８】
Ｉ／Ｏパターン学習プログラム１３４Ｂは、Ｉ／Ｏ情報格納テーブル１３９Ｂを参照し、処理対象のリード要求に従うリード元ＬＤＥＶに対するＩ／ＯパターンがＬＤＥＶの領域をシーケンシャルに読込むシーケンシャルリードであるか否かを判定する（Ｓ１４１）。具体的には、Ｉ／Ｏパターン学習プログラム１３４Ｂは、Ｉ／Ｏ情報格納テーブル１３９Ｂを参照し、リード元ＬＤＥＶに対するＩ／Ｏ要求として、所定回数（例えば、３回）連続してリード要求を受信し、これらリード要求が、連続するＬＢＡを対象としている場合には、リード元ＬＤＥＶに対するＩ／Ｏパターンは、シーケンシャルリードであると判定する。なお、連続するリード要求が対象とするＬＢＡが連続しているか否かについては、連続するリード要求の要求ＬＢＡ及び要求レングスに基づいて判定することができる。
【００８９】
Ｓ１４１の判定結果が真の場合（Ｓ１４１：Ｙｅｓ）、Ｉ／Ｏパターン学習プログラム１３４Ｂは、Ｉ／Ｏパターン解析処理の出力情報に、Ｉ／Ｏパターンがシーケンシャルリードであることを示す「シーケンシャル」を設定し（Ｓ１４２）、出力情報をＣＭ管理プログラム１３３Ｂに返す。
【００９０】
一方、Ｓ１４１の判定結果が偽の場合、すなわち、Ｉ／Ｏパターンがランダムリードである場合（Ｓ１４１：Ｎｏ）、Ｉ／Ｏパターン学習プログラム１３４Ｂは、ＬＤＥＶ管理テーブル１４４Ｂを参照し、リード元ＬＤＥＶに対応したＣＭヒット率７０４Ｂが所定の閾値以上であるか否かを判定する（Ｓ１４３）。
【００９１】
Ｓ１４３の判定結果が真の場合（Ｓ１４３：Ｙｅｓ）、Ｉ／Ｏパターン学習プログラム１３４Ｂは、Ｉ／Ｏパターン解析処理の出力情報に、Ｉ／Ｏパターンがランダムリードであって、ＣＭヒット率が高いことを示す「ランダム（ＣＭヒット率：高）」を設定し（Ｓ１４４）、出力情報をＣＭ管理プログラム１３３Ｂに返す。一方、Ｓ１４３の判定結果が偽の場合（Ｓ１４３：Ｎｏ）、Ｉ／Ｏパターン学習プログラム１３４Ｂは、Ｉ／Ｏパターン解析処理の出力情報に、Ｉ／Ｏパターンがランダムリードであって、ＣＭヒット率が低いことを示す「ランダム（ＣＭヒット率：低）」を設定し（Ｓ１４５）、出力情報をＣＭ管理プログラム１３３Ｂに返す。
【００９２】
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００９３】
例えば、受信ＣＴＬ１１０Ａが、受信したリード要求に従うリード元ＬＤＥＶの担当が自分であるか否かを判定すること無しに、リード対象のホストデータがＣＭ１４０Ａに存在するか否かを判定する。その判定結果が真の場合、受信ＣＴＬ１１０Ａは、ＣＭ１４０からリード対象のホストデータを読み出し、そのホストデータを含んだ応答をホストコンピュータ１０に送信してよい。これにより、受信したＩ／Ｏ要求を担当ＣＴＬ１１０Ｂに転送すること無しに、リード要求に応答することができる。
【００９４】
また、ＣＭヒット率優先ＣＭ確保処理（図１５のＳ１３４）において、任意の方法（例えば、ラウンドロビン）により、複数のＣＴＬ１１０のＣＭ１４０の中からホストデータのキャッシュ先のＣＭ１４０が決定されてもよい。ラウンドロビンにより、ホストデータのキャッシュ先のＣＭ１４０を決定すると、各ＣＭ１４０におけるホストデータの量を均一化することができる。
【符号の説明】
【００９５】
１０：ホストコンピュータ、１００：ストレージシステム
【図２】
2015056301.tif 000003
【図３】
2015056301.tif 000004
【図４】
2015056301.tif 000005
【図５】
2015056301.tif 000006
【図６】
2015056301.tif 000007
【図７】
2015056301.tif 000008
【図８】
2015056301.tif 000009
【図９】
2015056301.tif 000010
【図１０】
2015056301.tif 000011
【図１１】
2015056301.tif 000012
【図１２】
2015056301.tif 000013
【図１３】
2015056301.tif 000014
【図１４】
2015056301.tif 000015
【図１５】
2015056301.tif 000016
【図１６】
2015056301.tif 000017
【図１Ａ】
2015056301.tif 000018
【図１Ｂ】
2015056301.tif 000019
【手続補正書】
【提出日】平成28年10月17日(2016.10.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の記憶領域のうちのリード元記憶領域からデータを読み出すことの要求であるリード要求を上位装置から受信し前記リード要求に従うリード対象データを前記リード元記憶領域から読み出し前記リード対象データを前記上位装置に送信するストレージシステムであって、
第１のキャッシュメモリを有する第１のストレージコントローラと、
第２のキャッシュメモリを有する第２のストレージコントローラと
を有し、
前記第１及び第２のストレージコントローラのいずれも、前記上位装置から前記リード要求を受信することができ、
前記第１及び第２のストレージコントローラのうちの前記リード要求を受信した受信コントローラが、前記第１及び第２のストレージコントローラのうちの前記リード元記憶領域の担当である担当コントローラでなければ、
前記受信コントローラが、前記リード要求を前記担当コントローラに転送し、
前記リード要求を受信した前記担当コントローラが、前記受信コントローラのキャッシュメモリをキャッシュ先とするリードコマンドを前記受信コントローラに送信し、
前記リードコマンドを受信した前記受信コントローラが、前記リード元記憶領域に基づく記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込み、前記受信コントローラのキャッシュメモリに書き込まれた前記リード対象データを前記上位装置に送信する、
ストレージシステム。
【請求項２】
前記リード要求を受信した前記担当コントローラが、前記リード元記憶領域について過去に受信したリード要求に関する履歴を基に、前記リード対象データのキャッシュ先を、前記受信コントローラのキャッシュメモリに限るとするか否かの判断を行い、
前記判断の結果が真の場合に、前記担当コントローラが、前記リードコマンドを前記受信コントローラに送信する、
請求項１記載のストレージシステム。
【請求項３】
前記リード元記憶領域からの読み出しのパターンがシーケンシャルリードであると前記履歴を基に判断された場合、前記判断の結果が真である、
請求項２に記載のストレージシステム。
【請求項４】
前記リード元記憶領域についてのキャッシュヒット率が所定の閾値未満であると前記履歴を基に判断された場合、前記判断の結果が真であり、
前記リード元記憶領域についてのキャッシュヒット率は、前記リード元記憶領域について受信したリード要求の数に対する、リード対象データが前記第１及び第２のキャッシュメモリのうちのいずれかに格納されていたリード要求の数の割合である、
請求項２に記載のストレージシステム。
【請求項５】
前記リード元記憶領域についてのキャッシュヒット率が前記所定の閾値以上であると前記履歴を基に判断された場合、前記判断の結果が偽であり、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから選択する、
請求項４に記載のストレージシステム。
【請求項６】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから前記受信コントローラのキャッシュメモリを優先的に選択する、
請求項２に記載のストレージシステム。
【請求項７】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリからラウンドロビンで選択する、
請求項２に記載のストレージシステム。
【請求項８】
前記受信コントローラが、
前記受信コントローラが前記担当コントローラであるか否かを判断する前に、前記リード対象データが前記受信コントローラのキャッシュメモリに格納されているか否かを判断し、
前記判断の結果が真の場合、前記受信コントローラのキャッシュメモリから前記リード対象データを読み出し、前記リード対象データを前記上位装置に送信し、
前記判断の結果が偽の場合、前記受信コントローラが前記担当コントローラであるか否かを判断し前記受信コントローラが前記担当コントローラでなければ、前記リード要求を前記担当コントローラに転送する、
請求項１に記載のストレージシステム。
【請求項９】
複数の記憶領域のうちのリード元記憶領域からデータを読み出すことの要求であるリード要求を上位装置から受信し前記リード要求に従うリード対象データを前記リード元記憶領域から読み出し前記リード対象データを前記上位装置に送信するストレージシステムのキャッシュ制御方法であって、
第１のキャッシュメモリを有する第１のストレージコントローラと、第２のキャッシュメモリを有する第２のストレージコントローラのいずれかが、前記上位装置から前記リード要求を受信し、
前記第１及び第２のストレージコントローラのうちの前記リード要求を受信した受信コントローラが、前記第１及び第２のストレージコントローラのうちの前記リード元記憶領域の担当である担当コントローラでなければ、前記受信コントローラが、前記リード要求を前記担当コントローラに転送し、
前記リード要求を受信した前記担当コントローラが、前記受信コントローラのキャッシュメモリをキャッシュ先とするリードコマンドを前記受信コントローラに送信し、
前記リードコマンドを受信した前記受信コントローラが、前記リード元記憶領域に基づく記憶デバイスから前記リード対象データを読み出し、前記リード対象データを前記受信コントローラのキャッシュメモリに書き込み、前記受信コントローラのキャッシュメモリに書き込まれた前記リード対象データを前記上位装置に送信する、
キャッシュ制御方法。
【請求項１０】
前記リード要求を受信した前記担当コントローラが、前記リード元記憶領域について過去に受信したリード要求に関する履歴を基に、前記リード対象データのキャッシュ先を、前記受信コントローラのキャッシュメモリに限るとするか否かの判断を行い、
前記判断の結果が真の場合に、前記担当コントローラが、前記リードコマンドを前記受信コントローラに送信する、
請求項９記載のキャッシュ制御方法。
【請求項１１】
前記リード元記憶領域からの読み出しのパターンがシーケンシャルリードであると前記履歴を基に判断された場合、前記判断の結果が真である、
請求項１０に記載のキャッシュ制御方法。
【請求項１２】
前記リード元記憶領域についてのキャッシュヒット率が所定の閾値未満であると前記履歴を基に判断された場合、前記判断の結果が真であり、
前記リード元記憶領域についてのキャッシュヒット率は、前記リード元記憶領域について受信したリード要求の数に対する、リード対象データが前記第１及び第２のキャッシュメモリのうちのいずれかに格納されていたリード要求の数の割合である、
請求項１０に記載のキャッシュ制御方法。
【請求項１３】
前記リード元記憶領域についてのキャッシュヒット率が前記所定の閾値以上であると前記履歴を基に判断された場合、前記判断の結果が偽であり、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから選択する、
請求項１０に記載のキャッシュ制御方法。
【請求項１４】
前記判断の結果が偽の場合、前記担当コントローラが、前記リード対象データのキャッシュ先とするキャッシュメモリを、前記第１及び前記第２のキャッシュメモリから前記受信コントローラのキャッシュメモリを優先的に選択する、
請求項１０に記載のキャッシュ制御方法。
【国際調査報告】
2015056301.tif 000020
2015056301.tif 000021
2015056301.tif 000022
2015056301.tif 000023
2015056301.tif 000024
2015056301.tif 000025