(57)【要約】  ストレージシステムにおいて、第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシが、第１のホストインタフェースから第２のキャッシュメモリに対するレイテンシよりも小さく、第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシが、第２のホストインタフェースから第１のキャッシュメモリに対するレイテンシよりも小さい。第１のプロセッサと対応付けられており第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが第１のプロセッサにより一時的に格納される第１の区画と、第２のプロセッサと対応付けられており第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが第２のプロセッサにより一時的に格納される第２の区画とを有する。プロセッサは、第１のキャッシュメモリの第１の区画のサイズと、第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、第１のキャッシュメモリの第２の区画のサイズと、第２のキャッシュメモリの第２の区画のサイズとを独立に制御する。
2016181562.tif 000002
【特許請求の範囲】
【請求項１】
第１及び第２のプロセッサと、
第１及び第２のキャッシュメモリと、
ホスト計算機と双方向通信可能な第１及び第２のホストインタフェースと、
記憶ドライブと
を備えるストレージステムであって、
前記第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシが、前記第１のホストインタフェースから前記第２のキャッシュメモリに対するレイテンシよりも小さく、
前記第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシが、前記第２のホストインタフェースから前記第１のキャッシュメモリに対するレイテンシよりも小さく、
前記第１及び第２のキャッシュメモリの各々は、前記第１のプロセッサと対応付けられており前記第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第１のプロセッサにより一時的に格納される第１の区画と、前記第２のプロセッサと対応付けられており前記第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第２のプロセッサにより一時的に格納される第２の区画とを有し、
前記第１及び第２のプロセッサの内の少なくとも１つは、前記第１のキャッシュメモリの第１の区画のサイズと、前記第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、前記第１のキャッシュメモリの第２の区画のサイズと、前記第２のキャッシュメモリの第２の区画のサイズとを独立に制御する
ストレージシステム。
【請求項２】
前記第１のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れの区画にも存在しない場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第１のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れの区画にも存在しない場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第２のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１のキャッシュメモリの第１の区画に対するデータの格納頻度に応じて、前記第１のキャッシュメモリの第１の区画のサイズを変更し、
前記第２のキャッシュメモリの第２の区画に対するデータの格納頻度に応じて、前記第２のキャッシュメモリの第２の区画のサイズを変更する
請求項１に記載のストレージシステム。
【請求項３】
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１又は第２のキャッシュメモリ内の第１の区画のサイズを拡大する場合、同一キャッシュメモリ内の第２の区画のサイズを縮小し、
前記第１又は第２のキャッシュメモリ内の第２の区画のサイズを拡大する場合、同一キャッシュメモリ内の第１の区画のサイズを縮小する
請求項２に記載のストレージシステム。
【請求項４】
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における前記第１の区画に対するデータの格納頻度と前記第２の区画に対するデータの格納頻度とを比較し、格納頻度の大きい方の区画のサイズを拡大する
請求項２に記載のストレージシステム。
【請求項５】
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における第１の区画に対するデータの格納頻度と第２の区画に対するデータの格納頻度とに基づいて、当該キャッシュメモリ内における第１及び第２の区画の目標のサイズを決定し、
当該キャッシュメモリ内における第１及び第２の区画のサイズを、それぞれ、その決定した第１及び第２の区画の目標のサイズに近づくように変更する
請求項４に記載のストレージシステム。
【請求項６】
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における第１の区画に対するデータの格納頻度と第２の区画に対するデータの格納頻度との差分が所定の閾値以上の場合、格納頻度の大きい方の区画のサイズが拡大され、格納頻度の小さい方の区画のサイズが縮小されるように、当該キャッシュメモリ内における第１及び第２の区画の目標のサイズを決定する
請求項５に記載のストレージシステム。
【請求項７】
各区画には、前記キャッシュメモリのアクセス単位であるセグメントが複数割り当てられており、
各キャッシュメモリは、何れの区画にも割り当てられてないセグメントである共有フリーセグメントを複数有し、
前記キャッシュメモリ内の区画のサイズを拡大することは、同一キャッシュメモリ内の共有フリーセグメントを当該区画に割り当てることであり、
前記キャッシュメモリ内の区画のサイズを縮小することは、当該区画に割り当てられているセグメントの割当を解除し、同一キャッシュメモリ内の共有フリーセグメントに変更することである
請求項２に記載のストレージシステム。
【請求項８】
前記第１のホストインタフェースがホスト計算機からライト要求を受領した場合、前記第１及び第２のプロセッサの内の当該ライト要求を処理するライト実行プロセッサは、当該ライト要求に係るデータを、前記第１及び第２のキャッシュメモリの当該ライト実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からライト要求を受領した場合、前記第１及び第２のプロセッサの内の当該ライト要求を処理するライト実行プロセッサは、当該ライト要求に係るデータを、前記第１及び第２のキャッシュメモリの当該ライト実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの少なくとも１つは、
各キャッシュメモリの区画毎に、前記記憶ドライブに未格納なデータを有するダーティセグメントと、前記記憶ドライブに格納済みのデータを有するクリーンセグメントと、新規データを格納可能なフリーセグメントと、を管理し、
キャッシュメモリ毎に、共有フリーセグメントを管理する
請求項７に記載のストレージシステム。
【請求項９】
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記キャッシュメモリにおける共有フリーセグメントの数が閾値以下の場合、当該キャッシュメモリ内におけるサイズの縮小対象の区画のフリーセグメントを、共有フリーセグメントに変更する
請求項８に記載のストレージシステム。
【請求項１０】
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記キャッシュメモリ内におけるサイズの縮小対象の区画にフリーセグメントが存在しない場合、当該区画のダーティセグメント又はクリーンセグメントを、フリーセグメントに変更する
請求項９に記載のストレージシステム。
【請求項１１】
各区画には、前記キャッシュメモリのアクセス単位であるセグメントが複数割り当てられており、
各キャッシュメモリは、何れの区画にも割り当てられてないセグメントである共有フリーセグメントを複数有し、
前記第１及び第２のプロセッサの少なくとも１つは、
各キャッシュメモリの区画毎に、前記記憶ドライブに未格納なデータを有するダーティセグメントと、前記記憶ドライブに格納済みのデータを有するクリーンセグメントと、新規データを格納可能なフリーセグメントと、を管理し、
キャッシュメモリ毎に、共有フリーセグメントを管理する
前記キャッシュメモリ内の区画のサイズを拡大することは、同一キャッシュメモリ内の共有フリーセグメントを、当該区画にフリーセグメントとして割り当てることであり、
前記キャッシュメモリ内の区画のサイズを縮小することは、当該区画に割り当てられているクリーンセグメント又はフリーセグメントを、同一キャッシュメモリ内の共有フリーセグメントに変更することである
請求項２に記載のストレージシステム。
【請求項１２】
第１及び第２のプロセッサと、
第１及び第２のキャッシュメモリと、
ホスト計算機と双方向通信可能に接続されている第１及び第２のホストインタフェースと、
記憶ドライブと
を備える計算機における記憶制御方法であって、
前記第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシが、前記第１のホストインタフェースから前記第２のキャッシュメモリに対するレイテンシよりも小さく、
前記第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシが、前記第２のホストインタフェースから前記第１のキャッシュメモリに対するレイテンシよりも小さく、
前記第１及び第２のキャッシュメモリの各々は、前記第１のプロセッサと対応付けられており前記第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第１のプロセッサにより一時的に格納される第１の区画と、前記第２のプロセッサと対応付けられており前記第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第２のプロセッサにより一時的に格納される第２の区画とを有し、
前記第１及び第２のプロセッサの内の少なくとも１つは、前記第１のキャッシュメモリの第１の区画のサイズと、前記第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、前記第１のキャッシュメモリの第２の区画のサイズと、前記第２のキャッシュメモリの第２の区画のサイズとを独立に制御する
記憶制御方法。
【請求項１３】
前記第１のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れかの区画に存在するか否かを判定し、何れの区画にも存在しないと判定した場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第１のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れかの区画に存在するか否かを判定し、何れの区画にも存在しないと判定した場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第２のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１のキャッシュメモリの第１の区画に対するデータの格納頻度に応じて、前記第１のキャッシュメモリの第１の区画のサイズを変更し、
前記第２のキャッシュメモリの第２の区画に対するデータの格納頻度に応じて、前記第２のキャッシュメモリの第２の区画のサイズを変更する
請求項１２に記載の記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関し、例えば、ストレージシステムの技術に関する。
【背景技術】
【０００２】
ローカルメモリ及び複数のＭＰ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｏｒ）を含むＭＰＰＫ（ＭＰ  Ｐａｃｋａｇｅ）と、共有メモリ及びキャッシュメモリを含むＣＭＰＫとを有し、ホスト計算機から記憶装置に対するデータの入出力を制御する計算機システムに関し、特許文献１には、次の技術が開示されている。ＭＰの制御権限を他のＭＰに移行し、そして、ＭＰがデータ入出力処理を行う上で必要な制御情報を、共有メモリからＭＰのローカルメモリに移動させても、複数のＭＰ間で、データの入出力制御に必要な制御機能の割り当てに不均衡が生じないように、ＭＰから必要な制御機能を解放し、解放した制御機能を他のＭＰに割り当てる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１２―５３３７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のコントローラのそれぞれがキャッシュメモリを有し、コントローラ同士が接続されているストレージシステムにおいて、或るコントローラがＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求を受領し、そのＩ／Ｏ要求にヒットするキャッシュデータが、或るコントローラとは別のコントローラのキャッシュメモリに存在する場合、別のコントローラから或るコントローラへキャッシュデータを転送する必要がある。この処理は、ストレージシステムのＩ／Ｏ性能の低下の要因となり得る。【０００５】
そこで本発明の目的は、複数のコントローラのそれぞれがキャッシュメモリを有し、コントローラ同士が接続されているストレージシステムにおいて、コントローラ間におけるキャッシュデータの転送を減らすことにある。また、本発明の別の目的は、当該ストレージシステムにおいて、キャッシュメモリの利用効率を向上させ、Ｉ／Ｏ性能を向上させることにある。
【課題を解決するための手段】
【０００６】
本発明の一実施形態に係るストレージシステムは、第１及び第２のプロセッサと、第１及び第２のキャッシュメモリと、ホスト計算機と双方向通信可能な第１及び第２のホストインタフェースと、記憶ドライブとを備える。
第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシは、第１のホストインタフェースから前記第２のキャッシュメモリに対するレイテンシよりも小さい。
第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシは、第２のホストインタフェースから前記第１のキャッシュメモリに対するレイテンシよりも小さい。
第１及び第２のキャッシュメモリの各々は、第１のプロセッサと対応付けられており第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが第１のプロセッサにより一時的に格納される第１の区画と、第２のプロセッサと対応付けられており第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが第２のプロセッサにより一時的に格納される第２の区画とを有する。
第１及び第２のプロセッサの内の少なくとも１つは、第１のキャッシュメモリの第１の区画のサイズと、第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、第１のキャッシュメモリの第２の区画のサイズと、第２のキャッシュメモリの第２の区画のサイズとを独立に制御する。
【発明の効果】
【０００７】
本発明によれば、複数のコントローラのそれぞれがキャッシュメモリを有し、コントローラ同士が接続されているストレージシステムにおいて、コントローラ間におけるキャッシュデータの転送を減らすことができる。また、本発明によれば、当該ストレージシステムにおいて、キャッシュメモリの利用効率を向上させ、Ｉ／Ｏ性能を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係る計算機システムの構成例を示す。
【図２】第１の実施形態の概要を示す。
【図３】メモリの有する各領域の例を示す。
【図４】プログラム領域に格納されるプログラムの例を示す。
【図５】共有メモリ領域及びローカルメモリ領域に格納される情報の例を示す。
【図６】ドライブテーブルの構成例を示す。
【図７】論理ＶＯＬ（Ｖｏｌｕｍｅ）テーブルの構成例を示す。
【図８】セグメントテーブルの構成例を示す。
【図９】連結キューの構成例を示す。
【図１０】属性テーブルの構成例を示す。
【図１１】キャッシュディレクトリの構成例を示す。
【図１２】区画テーブルの構成例を示す。
【図１３】状況管理テーブルの構成例を示す。
【図１４】共有フリーテーブルの構成例を示す。
【図１５】Ｉ／Ｏコマンド管理テーブルの構成例を示す。
【図１６】Ｉ／Ｏコマンド振り分けプログラムの処理例を示すフローチャートである。
【図１７】Ｉ／Ｏ処理プログラムの処理例を示すフローチャートである。
【図１８】リード処理例を示すフローチャートである。
【図１９】ライト処理例を示すフローチャートである。
【図２０】セグメント管理プログラムの処理例を示すフローチャートである。
【図２１】目標区画決定プログラムの処理例を示すフローチャートである。
【図２２】区画変更プログラムの処理例を示すフローチャートである。
【図２３】区画縮小プログラムの処理例を示すフローチャートである。
【図２４】区画拡大プログラムの処理例を示すフローチャートである。
【図２５】第２の実施形態に係る計算機システムの構成例を示す。
【発明を実施するための形態】
【０００９】
以下、一実施例を説明する。以下の説明では、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」を「ｘｘｘ情報」と呼ぶことができる。
【００１０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信インターフェイスデバイスのうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【００１１】
また、以下の説明では、計算機システムに含まれる少なくとも１つの装置を管理する１以上の計算機の集合を「管理システム」と呼ぶことがある。管理計算機が表示用情報を表示する場合は管理計算機が管理システムでよい。また、管理計算機と表示用計算機の組み合わせも管理システムでよい。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合はそれら複数の計算機（表示を表示用計算機が行う場合は表示用計算機も含んでよい）が管理システムでよい。本実施例では、管理計算機が管理システムである。また、管理計算機が情報を表示するとは、管理計算機が有する表示デバイスに情報を表示することであってもよいし、管理計算機（例えばサーバ）に接続された表示用計算機（例えばクライアント）に表示用情報を送信することであってもよい。後者の場合、表示用計算機が有する表示デバイスに表示用情報が表す情報が表示用計算機によって表示される。
【００１２】
また、以下の説明では、同種の要素を区別して説明する場合には、「ｘｘｘ１１ａ」、「ｘｘｘ１１ｂ」、「ｘｘｘ１７２―１」、「ｘｘｘ１７２―２」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「ｘｘｘ１１」、「ｘｘｘ１７２」のように参照符号のうちの共通番号のみを使用することがある。
【００１３】
（第１の実施形態）
【００１４】
図１は、第１の実施形態に係る計算機システム１ａの構成例を示す。
【００１５】
計算機システム１ａは、ストレージシステム２ａと、ホスト計算機４と、管理計算機３０とを備える。ホスト計算機４とストレージシステム２は、外部ネットワーク４０を介して双方向通信可能に接続されている。管理計算機３０とストレージシステム２ａは、管理ネットワーク５０を介して双方向通信可能に接続されている。ストレージシステム２ａ、ホスト計算機４、管理計算機３０は、それぞれ複数あってもよい。管理計算機３０は、管理システムと呼ばれてもよい。
【００１６】
ストレージシステム２ａは、複数のストレージコントローラ（以下「コントローラ」という）１１ａ、１１ｂを有する。コントローラ１１は、マイクロプロセッサ（以下「プロセッサ」という）１２と、メモリ１３と、ホストＩ／Ｆ１４と、ドライブＩ／Ｆ１５と、管理Ｉ／Ｆ１６とを有する。これらの要素１１乃至１６は、内部バス３１を介して双方向通信可能に接続されている。これらの要素１１乃至１６は、それぞれ複数であってよい。
【００１７】
コントローラ１１ａと１１ｂとは、コントローラ間パス３２を介して双方向通信可能に接続されている。すなわち、コントローラ１１ａの有するプロセッサ１２ａ、１２ｂ又はＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）回路（不図示）は、コントローラ１１ａの有するメモリ１３ａだけでなく、コントローラ間パス３２を介して、コントローラ１１ｂの有するメモリ１３ｂにもアクセス可能である。反対に、コントローラ１１ｂの有するプロセッサ１２ｃ、１２ｄ又はＤＭＡ回路（不図示）は、コントローラ１１ｂの有するメモリ１３ｂだけでなく、コントローラ間パス３２を介して、コントローラ１１ａの有するメモリ１３ａにもアクセス可能である。
【００１８】
ホストＩ／Ｆ１４ａ（ドライブＩ／Ｆ１５ａ）からメモリ１３ａに対するレイテンシは、ホストＩ／Ｆ１４ａ（ドライブＩ／Ｆ１５ａ）からメモリ１３ｂに対するレイテンシよりも小さい。また、ホストＩ／Ｆ１４ｂ（ドライブＩ／Ｆ１５ｂ）からメモリ１３ｂに対するレイテンシは、ホストＩ／Ｆ１４ｂ（ドライブＩ／Ｆ１５ｂ）からメモリ１３ａに対するレイテンシよりも小さい。すなわち、ホストＩ／Ｆ１４（ドライブＩ／Ｆ１５）から同じコントローラ１１内のメモリ１３に対するレイテンシの方が、そのホストＩ／Ｆ１４（ドライブＩ／Ｆ１５）からコントローラ間パス３２を介して他のコントローラ１１内のメモリ１３に対するレイテンシよりも小さい。なぜなら、ホストＩ／Ｆ１４（ドライブＩ／Ｆ１５）からメモリ１３までの物理的な距離が短い方が、レイテンシが小さくなるからである。また、他のコントローラ１１のメモリ１３に対するアクセス速度は、コントローラ間パス３２の最大通信速度（最大通信帯域）に制限されるからである。
【００１９】
プロセッサ１２がマルチコアプロセッサの場合、プロセッサ１２内の幾つかのコアをグループ化してよい。そして、コントローラ１１は、論理的な複数のプロセッサを有してよい。
【００２０】
ホストＩ／Ｆ１４は、コントローラ１１を、外部ネットワーク４０へ接続するためのＩ／Ｆデバイスである。内部パス３１がＰＣＩｅ（ＰＣＩ−Ｅｘｐｒｅｓｓ）、外部ネットワーク４０がＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）の場合、ホストＩ／Ｆ１４は、ＰＣＩｅプロトコルとＦｉｂｒｅＣｈａｎｎｅｌプロトコルとを変換するアダプタであってよい。
【００２１】
管理Ｉ／Ｆ１６は、コントローラ１１を、管理ネットワーク５０へ接続するためのＩ／Ｆデバイスである。内部パス３１がＰＣＩｅ、管理ネットワーク５０がＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）の場合、管理Ｉ／Ｆ１６は、ＰＣＩｅプロトコルとＩＰプロトコルとを変換するアダプタであってよい。
【００２２】
ドライブＩ／Ｆ１５は、コントローラ１１と、記憶デバイスの一種であるドライブ１８とを接続するためのＩ／Ｆデバイスである。内部パス３１がＰＣＩｅ、ドライブ１８のＩ／ＦがＦｉｂｒｅＣｈａｎｎｅｌプロトコルの場合、ドライブＩ／Ｆ１５は、ＰＣＩｅプロトコルとＦｉｂｒｅＣｈａｎｎｅｌプロトコルとを変換するアダプタであってよい。
【００２３】
ストレージシステム２は、ドライブ格納部１７を有する。ドライブ格納部１７には、複数のドライブ１８が格納されてよい。ドライブ１８の例は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、テープ型の記憶デバイスである。
【００２４】
コントローラ１１は、１つ以上のドライブ１８の記憶領域を用いて、論理ＶＯＬを構成してよい。コントローラ１１は、複数のドライブ１８を用いてＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを構成し、そのＲＡＩＤグループを用いて論理ＶＯＬを構成してもよい。コントローラ１１は、論理ＶＯＬを、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）として、ホスト計算機４へ提供してよい。コントローラ１１は、ホスト計算機４からライト要求を受領すると、そのライト要求によって指定された論理ＶＯＬのアドレスに、データをライトする。コントローラ１１は、ホスト計算機４からリード要求を受領すると、そのリード要求によって指定された論理ＶＯＬのアドレスからデータをリードして、ホスト計算機４へ返す。論理ＶＯＬ毎に、その論理ＶＯＬに対するＩ／Ｏ処理を担当するプロセッサ１２が決められてよい。
【００２５】
図２は、第１の実施形態の概要を示す。
【００２６】
コントローラ１１ａは、メモリ１３ａにキャッシュメモリ領域１７０―１を有し、コントローラ１１ｂは、メモリ１３ｂにキャッシュメモリ領域１７０―２を有する。
【００２７】
キャッシュメモリ領域１７０は、複数のセグメントから構成される。セグメントは、所定サイズの領域であってよい。キャッシュメモリ領域１７０は、セグメントの単位で管理及び制御（リード、ライト、消去等）されてよい。
【００２８】
コントローラ１１ａにおけるキャッシュメモリ領域１７０―１は、プロセッサ１２ａのために確保された区画１７２―１ａと、プロセッサ１２ｂのために確保された区画１７２―１ｂと、プロセッサ１２ｃのために確保された区画１７２―１ｃと、プロセッサ１２ｄのために確保された区画１７２―１ｄと、何れのプロセッサ１２のためにも確保されていない区画１７５―１と、を有してよい。コントローラ１１ｂにおけるキャッシュメモリ領域１７０―２は、プロセッサ１２ａのために確保された区画１７２―２ａと、プロセッサ１２ｂのために確保された区画１７２―２ｂと、プロセッサ１２ｃのために確保された区画１７２―２ｃと、プロセッサ１２ｄのために確保された区画１７２―２ｄと、何れのプロセッサのためにも確保されていない区画１７５―２と、を有してよい。何れのプロセッサ１２のためにも確保されていない区画１７５は「共有フリー区画」と呼ばれてもよい。各区画は、複数のセグメントから構成されてよい。共有フリー区画１７５のセグメントは「共有フリーセグメント」と呼ばれてもよい。
【００２９】
ホスト計算機４からリード要求を受領したコントローラ１１は、そのリード要求に係るキャッシュデータを、自分のコントローラ１１側のメモリ１３のキャッシュメモリ領域１７０に格納する。コントローラ１１ａが、プロセッサ１１ａ及びプロセッサ１１ｃがＩ／Ｏ処理担当である論理ＶＯＬに対するリード要求を、集中的に受領したとする。この場合、コントローラ１１ａ（ホストＩ／Ｆ１４ａ又はドライブＩ／Ｆ１５ａ）は、自分のコントローラ１１ａ側のキャッシュメモリ領域１７０―１の区画１７２−１ａ及び１７２−１ｃに、キャッシュデータを格納する。また、コントローラ１１ｂが、プロセッサ１１ｂ及びプロセッサ１１ｄがＩ／Ｏ処理担当である論理ＶＯＬに対するリード要求を、集中的に受領したとする。この場合、コントローラ１１ｂ（ホストＩ／Ｆ１４ｂ又はドライブＩ／Ｆ１５ｂ）は、自分のコントローラ１１ｂ側のキャッシュメモリ領域１７０―２の区画１７２―２ｂ及び１７２―２ｄに、キャッシュデータを格納する。仮に、各区画１７２のサイズが固定的であったとすると、コントローラ１１ａに対する集中的なリード要求に対して区画１７２−１ｂ及び１７２―１ｄのキャッシュデータは全く貢献せず、コントローラ１１ｂに対する集中的なリード要求に対して区画１７２−２ａ及び１７２―２ｃのキャッシュデータは全く貢献しない。すなわち、各コントローラ１１のキャッシュメモリ領域１７０の利用効率が悪い。
【００３０】
そこで本実施形態では、各コントローラ１１は、それぞれのキャッシュメモリ領域１７０における各区画１７２のサイズを独立に制御及び管理する。また、各コントローラ１１は、それぞれのキャッシュメモリ領域１７０における各区画１７２のサイズを動的に変更可能にする。例えば、上述のコントローラ１１ａに対する集中的なリード要求に対して、コントローラ１１ａのキャッシュメモリ領域１７０―１において、区画１７２―１ｂ及び１７２―１ｄのサイズを縮小し、区画１７２−１ａ及び１７２―１ｃのサイズを拡大する。そして、上述のコントローラ１１ｂに対する集中的なリード要求に対して、コントローラ１１ｂのキャッシュメモリ領域１７０―２において、区画１７２−２ａ及び１７２―２ｃのサイズを縮小し、区画１７２―２ｂ及び１７２―２ｄのサイズを拡大する。
【００３１】
これにより、各コントローラ１１のキャッシュメモリ領域１７０の利用効率が向上する。そして、キャッシュメモリ領域１７０の利用効率の向上により、リード要求を受領したコントローラ１１におけるキャッシュヒット率も向上し得る。また、コントローラ１１は、自分のコントローラ１１側のキャッシュメモリ領域１７０にキャッシュデータを格納するので、コントローラ間パス３２ａを介するキャッシュデータの転送が発生しない（又は減少する）。コントローラ間パス３２ａを介するデータ転送は、ストレージシステム２ａの応答性能及びスループット性能の低下の要因の一つである。したがって、本実施形態によれば、ストレージシステム２ａにおけるコントローラ間パス３２ａを介するデータ転送が減少し得るので、ストレージシステム２ａの応答性能及びスループット性能が向上し得る。
【００３２】
図３は、メモリ１３の有する各領域の例を示す。
【００３３】
メモリ１３は、プログラム領域１３０と、共有メモリ領域１４０と、ローカルメモリ領域１５０と、バッファ領域１６０と、キャッシュメモリ領域１７０とを有してよい。
【００３４】
プログラム領域１３０には、プロセッサ１２によって実行されるプログラムが格納される。プログラム領域１３０に格納されるプログラムの例は、後述する（図４参照）。
【００３５】
共有メモリ領域１４０には、各コントローラ１１のプロセッサ１２から共通に利用される情報が格納される。共有メモリ領域１４０に格納される情報の例は、後述する（図５参照）。
【００３６】
ローカルメモリ領域１５０には、当該メモリ１３を有するコントローラ１１内のプロセッサ１２のみから利用される情報が格納されてよい。ローカルメモリ領域１５０に格納される情報の例は、後述する（図５参照）。
【００３７】
バッファ領域１６０には、コントローラ１１内の各要素１２乃至１６間、又は、コントローラ１１間において転送されるキャッシュデータが一時的に格納されてよい。
【００３８】
キャッシュメモリ領域１７０には、論理ＶＯＬからのリードデータ、及び／又は、論理ＶＯＬに対するライトデータが、キャッシュデータとして格納されてよい。ホスト計算機４に対するストレージシステム２ａの応答時間を短縮するためである。
【００３９】
図４は、プログラム領域１３０に格納されるプログラムの例を示す。
【００４０】
プログラム領域１３０は、Ｉ／Ｏコマンド振り分けブログラム２００と、Ｉ／Ｏ処理プログラム２０２と、ＲＡＩＤ処理プログラム２０４と、セグメント管理プログラム２０６と、区画変更プログラム２０７と、区画拡大プログラム２０８と、区画縮小プログラム２１０と、目標区画決定プログラム２１２と、コントローラ間転送プログラム２１６とを有してよい。これらのプログラムは、何れかのプロセッサ１２で実行されてよい。
【００４１】
Ｉ／Ｏコマンド振り分けプログラム２００は、ホスト計算機４から送信されたリード要求（又はライト要求）を、その要求先の論理ＶＯＬのＩ／Ｏ処理担当のプロセッサ１２に振り分ける。Ｉ／Ｏコマンド振り分けプログラム２００は、ホスト計算機４から送信されたリード要求（又はライト要求）を受領したホストＩ／Ｆ１４と同じコントローラ１１内のプロセッサ１２で実行されてよい。Ｉ／Ｏコマンド振り分けプログラム２００の実行例については後述する（図１６参照）。
【００４２】
Ｉ／Ｏ処理プログラム２０２は、Ｉ／Ｏコマンド振り分けプログラム２００によって振り分けられたリード要求から論理ＶＯＬのリード先を特定し、その特定したリード先からデータをリードする。そして、Ｉ／Ｏ処理プログラム２０２は、リードデータを、リード要求の発行元のホスト計算機４へ返してよい。また、Ｉ／Ｏ処理プログラム２０２は、振り分けられたライト要求から論理ＶＯＬのライト先を特定し、その特定したライト先にデータをライトする。そして、Ｉ／Ｏ処理プログラム２０２は、ライト処理の結果を、ライト要求の発行元のホスト計算機４へ返してよい。Ｉ／Ｏ処理プログラム２０２は、ホスト計算機４から送信されたリード要求（又はライト要求）を受領したホストＩ／Ｆ１４と同じコントローラ１１内のプロセッサ１２で実行されてもよいし、別のコントローラ１１内のプロセッサ１２で実行されてもよい。Ｉ／Ｏ処理プログラム２０２の実行例については後述する（図１７、１８、１９参照）。
【００４３】
ＲＡＩＤ処理プログラム２０４は、リード及び／又はライト時に、必要に応じて、ドライブ１８のデータをキャッシュメモリ領域１７０へコピー（ステージング）したり、キャッシュメモリ領域１７０のデータをドライブ１８へ格納（デステージ）したりする。
【００４４】
セグメント管理プログラム２０６は、キャッシュメモリ領域１７０におけるセグメントを制御及び管理する。セグメント管理プログラム２０６は、共有フリーセグメントを或る区画のセグメントに変更したり、或る区画のセグメントを共有フリーセグメントに変更したりしてよい。セグメント管理プログラム２０６の実行例については後述する（図２０参照）。
【００４５】
目標区画決定プログラム２１２は、キャッシュ領域１７０における各区画１７２の目標サイズを決定する。各区画１７２のサイズは、この目標区画決定プログラム２１２によって決定された目標サイズに適合するように変更されてよい。目標サイズは、セグメント数として表現されてもよい。各区画１７２の目標サイズは、ストレージシステム２の状況によって決定されてもよいし、管理者から予め設定されてもよい。例えば、各区画１７２の目標サイズは、クリーンセグメント（図８の説明を参照）の滞在時間、リードヒットＩＯＰＳ、管理者が定義するポリシー、又は、それらの組み合わせ等によって決定されてよい。目標区画決定プログラム２１２は、同一のキャッシュメモリ領域１７０内における、各区画１７２に対応するセグメント割当頻度３６３（図１４参照）を比較し、セグメント割当頻度３６３の大きい方の区画１７２を拡大し、セグメント割当頻度３６３の小さい方の区画１７２を縮小するように、各区画１７２の目標サイズを決定してもよい。
【００４６】
区画変更プログラム２０７は、目標区画決定プログラム２１２によって決定された各区画１７２の目標サイズに適合するように、各メモリ１３のキャッシュメモリ領域１７０における各区画１７２のサイズを変更（拡大又は縮小）する。区画変更プログラム２０７の実行例については後述する（図２２参照）。区画変更プログラム２０７は、同一のキャッシュメモリ領域１７０内において、或る区画のサイズを縮小させてから、別の区画のサイズを拡大させてよい。
【００４７】
区画拡大プログラム２０８は、区画１７２のサイズが、目標区画決定プログラム２１２によって決定された目標サイズよりも小さい場合、その区画１７２のサイズを、目標サイズに近づくように拡大する。区画拡大プログラム２０８は、区画変更プログラム２０７から呼び出されてよい。区画拡大プログラム２０８の実行例については後述する（図２４参照）。
【００４８】
区画縮小プログラム２１０は、区画１７２のサイズが目標区画決定プログラム２１２によって決定された目標サイズよりも大きい場合、その区画１７２のサイズを、目標サイズに近づくように縮小する。区画縮小プログラム２１０は、区画変更プログラム２０７から呼び出されてよい。区画縮小プログラム２０８の実行例については後述する（図２３参照）。
【００４９】
コントローラ間転送プログラム２１６は、コントローラ間パス３２を介するコントローラ１１間におけるキャッシュデータの転送を制御する。
【００５０】
図５は、共有メモリ領域１４０及びローカルメモリ領域１５０に格納される情報の例を示す。
【００５１】
共有メモリ領域１４０は、ドライブテーブル３００と、論理ＶＯＬテーブル３１０と、属性テーブル３２０と、セグメントテーブル３３０と、キャッシュディレクトリ３４０と、区画テーブル３５０と、状況管理テーブル３６０と、共有フリーテーブル３７０とを有してよい。
【００５２】
ドライブテーブル３００は、各ドライブ１８に関する情報を有する。ドライブテーブル３００の詳細は、後述する（図６参照）。
【００５３】
論理ＶＯＬテーブル３１０は、各論理ＶＯＬに関する情報を有する。論理ＶＯＬテーブル３１０の詳細は、後述する（図７参照）。
【００５４】
属性テーブル３２０は、セグメントの属性に関する情報を有する。属性テーブル３２０の詳細は、後述する（図１０参照）。
【００５５】
セグメントテーブル３３０は、各セグメントに関する情報を有する。セグメントテーブル３３０の詳細は、後述する（図８参照）。
【００５６】
キャッシュディレクトリ３４０は、キャッシュに関する情報を有する。キャッシュディレクトリ３４０の詳細は、後述する（図１１参照）。
【００５７】
区画テーブル３５０は、各区画のサイズに関する情報を有する。区画テーブル３５０の詳細は、後述する（図１２参照）。
【００５８】
状況管理テーブル３６０は、各プロセッサ１２の稼働状況に関する情報を有する。状況管理テーブル３６０の詳細は、後述する（図１３参照）。
【００５９】
共有フリーテーブル３７０は、共有フリーセグメントに関する情報を有する。共有フリーテーブル３７０の詳細は、後述する（図１４参照）。
【００６０】
ローカルメモリ領域１５０は、ローカルの属性テーブル４００と、ローカルのセグメントテーブル４１０と、ローカルのキャッシュディレクトリ４２０と、Ｉ／Ｏコマンド管理テーブル４３０とを有してよい。
【００６１】
ローカルの属性テーブル４００は、共有メモリ領域１４０の属性テーブル３２０内の少なくとも一部の情報を有する。
【００６２】
ローカルのセグメントテーブル４１０は、共有メモリ領域１４０のセグメントテーブル３３０内の少なくとも一部の情報を有する。
【００６３】
ローカルのキャッシュディレクトリ４２０は、共有メモリ領域１４０のキャッシュディレクトリ３４０内の少なくとも一部の情報を有する。
【００６４】
プロセッサ１２は、共有メモリ領域１４０に格納されている情報３２０、３３０、３４０にアクセスする前に、同じコントローラ１１内のローカルメモリ領域１５０に格納されているこれらの情報４００、４１０、４２０にアクセスしてもよい。複数のプロセッサ１２が共有メモリ領域１４０にアクセスした場合に発生し得る競合を回避するためである。なお、本実施形態において、共有メモリ領域１４０のテーブル３２０、３３０、３４０に対するアクセスは、ローカルメモリ領域１５０のテーブル４００、４１０、４２０に対するアクセスであってもよいし、又は、その反対であってもよい。
【００６５】
図６は、ドライブテーブル３００の構成例を示す。
【００６６】
ドライブテーブル３００は、ストレージシステム２の有するドライブ１８を管理するためのテーブルである。ドライブテーブル３００のレコードは、フィールド値として、ドライブ番号３０１、パリティグループ番号３０２、ＲＡＩＤレベル３０３、ドライブ容量３０４、ドライブ種別３０５を有してよい。
【００６７】
ドライブ番号３０１は、ドライブ１８を識別するための番号である。
【００６８】
パリティグループ番号３０２は、パリティグループを識別するための番号である。パリティグループ番号３０２が同じドライブ番号３０１のドライブによって、当該パリティグループ番号３０２のパリティグループが形成されてよい。
【００６９】
ＲＡＩＤレベル３０３は、パリティグループ番号３０２のパリティグループのＲＡＩＤレベルを示す。ＲＡＩＤレベル３０３の例は、ＲＡＩＤ１（２Ｄ２Ｄ）、ＲＡＩＤ５（３Ｄ１Ｐ）である。
【００７０】
ドライブ容量３０４は、ドライブ番号３０１のドライブ１８の最大容量である。ドライブ容量３０４の単位の例は、ＧＢ（Ｇｉｇａ  Ｂｙｔｅ）、ＴＢ（Ｔｅｒａ  Ｂｙｔｅ）である。
【００７１】
ドライブ種別３０５は、ドライブ番号３０１のドライブ１８の種類である。ドライブ種別３０５の例は、ＳＳＤ、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＮＬ−ＳＡＳ（Ｎｅａｒ−ｏｎＬｉｎｅ  ＳＡＳ）である。
【００７２】
ドライブテーブル３００を参照することにより、パリティグループへのアクセス先（アドレス）に対応する、ドライブ番号３０１と当該ドライブ番号３０１のドライブ１８内のアクセス先（アドレス）を特定することができる。
【００７３】
図７は、論理ＶＯＬテーブル３１０の構成例を示す。
【００７４】
論理ＶＯＬテーブル３１０は、ストレージシステム２の有する論理ＶＯＬを管理するためのテーブルである。論理ＶＯＬテーブル３１０のレコードは、フィールド値として、論理ＶＯＬ番号３１１、パリティグループ番号３１２、パリティグループ内開始アドレス３１３、論理ＶＯＬ容量３１４、担当プロセッサ番号３１５を有する。
【００７５】
論理ＶＯＬ番号３１０は、論理ＶＯＬを識別するための番号である。
【００７６】
パリティグループ番号３１２は、論理ＶＯＬ番号３１１の論理ＶＯＬが属するパリティグループの番号である。
【００７７】
パリティグループ内開始アドレス３１３は、パリティグループ番号３１２のパリティグループにおける、論理ＶＯＬ番号３１１の論理ＶＯＬの先頭アドレスを示す。
【００７８】
論理ＶＯＬ容量３１４は、論理ＶＯＬ番号３１１の論理ＶＯＬの最大容量である。論理ＶＯＬ容量３１４の単位の例は、ＧＢである。
【００７９】
担当プロセッサ番号３１５は、論理ＶＯＬ番号３１１の論理ＶＯＬのＩ／Ｏ処理を担当するプロセッサ１２の番号である。
【００８０】
論理ＶＯＬテーブル３１０を参照することにより、論理ＶＯＬへのアクセス先（アドレス）に対応する、パリティグループ番号３１２及び当該パリティグループ番号３１２のパリティグループ内のアクセス先（アドレス）を特定することができる。
【００８１】
したがって、ドライブテーブル３００及び論理ＶＯＬテーブル３１０を参照することにより、論理ＶＯＬのアクセス先（アドレス）に対応する、ドライブ番号３０１と当該ドライブ番号３０１内のアクセス先（アドレス）を特定することができる。
【００８２】
本実施形態では、論理ＶＯＬが１つのパリティグループに属する場合を説明する。しかし、論理ＶＯＬは、シンプロビジョニングに係る論理ＶＯＬであってもよい。すなわち、複数のパリティグループから構成されるプールを有し、論理ＶＯＬ（仮想ＶＯＬ）に対するアクセス時に、プールの一部の領域がその論理ＶＯＬ（仮想ＶＯＬ）に動的に割り当てられる構成であってもよい。
【００８３】
図８は、セグメントテーブル３３０の構成例を示す。
【００８４】
セグメントテーブル３３０は、ストレージシステム２の有するセグメントを管理するためのテーブルである。セグメントテーブル３３０のレコードは、フィールド値として、セグメント番号３３１、論理ＶＯＬ番号３３２、ブロック番号３３３、ノード番号３３４、順ノード番号３３５、逆ノード番号３３６、セグメント属性３３７、ダーティビットマップ３３８、コントローラ番号３３９を有する。
【００８５】
セグメント番号３３１は、キャッシュメモリ領域１７０内のセグメントを識別するための番号である。
【００８６】
論理ＶＯＬ番号３３２は、上述の論理ＶＯＬ番号３１０と同様である。
【００８７】
ブロック番号３３３は、論理ＶＯＬ番号３３２の論理ＶＯＬを構成する複数のブロックのそれぞれを識別するための番号である。ブロックとセグメントは、１対１に対応してよい。例えば、セグメント番号３３１のセグメントに格納されているキャッシュデータは、論理ＶＯＬ番号３３２の論理ＶＯＬにおけるブロック番号３３３のブロックに格納されているデータと同じであってよい。
【００８８】
ノード番号３３４は、セグメントテーブル３００のレコードを識別するための番号である。
【００８９】
順ノード番号３３５は、属性毎の連結キューにおいて、ノード番号３３４からＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）へ向かう次のノードの番号である。ノード番号３３４が、連結キューのＬＲＵ方向の端である場合、順ノード番号３３５は「ＬＲＵ」と表現されてよい。
【００９０】
逆ノード番号３３６は、属性毎の連結キューにおいて、ノード番号３３４からＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）へ向かう次のノードの番号である。ノード番号３３４が、連結キューのＭＲＵ方向の端である場合、逆ノード番号３３６は「ＭＲＵ」と表現されてよい。
【００９１】
セグメント属性３３７は、セグメント番号３３１のセグメントの属性を示す。セグメント属性３３７の例は、「クリーン」、「ダーティ」、「フリー」、「共有フリー」である。
【００９２】
セグメント属性３３７「クリーン」のレコードにおけるセグメント番号３３１のセグメントは、或るプロセッサ１２のための区画１７２に割当済みであり、且つ、ドライブ１８に格納済みのキャッシュデータが格納されているセグメントである。このセグメントを「クリーンセグメント」と呼び、クリーンセグメントに格納されているキャッシュデータを、「クリーンデータ」と呼んでよい。
【００９３】
セグメント属性３３７「ダーティ」のレコードにおけるセグメント番号３３１のセグメントは、或るプロセッサ１２のための区画１７２に割当済みであり、且つ、ドライブ１８に未格納のキャッシュデータが格納されているセグメントである。このセグメントを「ダーティセグメント」と呼び、ダーティセグメントに格納されているキャッシュデータを、「ダーティデータ」と呼んでよい。
【００９４】
セグメント属性３３７「クリーン」のレコードにおけるセグメント番号３３１のセグメントは、或るプロセッサ１２のための区画１７２に割当済みであり、且つ、キャッシュデータが格納されていない（空の）セグメントである。このセグメントを「フリーセグメント」と呼んでよい。フリーセグメントには、新たにキャッシュデータを格納することができる。フリーセグメントに新たにキャッシュデータが格納された場合、そのセグメントは、ダーティセグメント又はクリーンセグメントに変更されてよい。
【００９５】
セグメント属性３３７「共有フリー」のレコードにおけるセグメント番号３３１のセグメントは、何れのプロセッサ１２のための区画１７２にも割り当てられていないセグメントである。このセグメントを「共有フリーセグメント」と呼んでよい。共有フリーセグメントは、或るプロセッサ１２のための区画１７２に割り当てることができる。共有フリーセグメントが或るプロセッサ１２のための区画１７２に割り当てられた場合、そのセグメントは、フリーセグメントに変更されてよい。
【００９６】
ダーティビットマップ３３８は、セグメント番号３３１のダーティセグメントの中で、どの部分のデータがドライブ１８に未格納であるかを示す。ダーティビットマップ３３８を用いることで、コントローラ１１は、セグメントのサイズよりも小さなライトデータをホスト計算機４から受領した場合、そのライトデータの未格納の部分だけドライブ１８へ格納すればよい。
【００９７】
コントローラ番号３３９は、セグメント番号３３１のセグメントを有するメモリ１３を備えるコントローラ１１の番号である。
【００９８】
図９は、連結キューの構成例を示す。
【００９９】
コントローラ１１は、自分のコントローラ１１が備えるメモリ１３のキャッシュメモリ領域１７０において、区画１７２毎に、クリーンセグメント、ダーティセグメント、及び、フリーセグメントに関する連結キューを管理してよい。コントローラ１１は、自分のコントローラ１１が備えるメモリ１３のキャッシュメモリ領域１７０において、共有クリーンセグメントの連結キューを管理してよい。
【０１００】
連結キューは、最近最も使われたセグメントに対応するノード番号３３４を先頭に、最近最も使われていないセグメントのノード番号３３４を最後尾に有する双方向型の連結キューであってよい。なお、フリーセグメントの連結キューは、ＬＲＵを管理しなくてもよい。フリーセグメントは、アクセスされるとクリーンセグメント又はダーティセグメントに変更されるため、ＬＲＵを管理する必要が無いからである。また、共有フリーセグメントの連結キューも、ＬＲＵを管理しなくてもよい。共有フリーセグメントは、直接アクセスされることはないため、ＬＲＵを管理する必要が無いからである。
【０１０１】
図１０は、属性テーブル３２０の構成例を示す。
【０１０２】
属性テーブル３２０は、区画毎の各属性の連結キューを管理するためのテーブルである。属性テーブル３２０のレコードは、フィールド値として、プロセッサ番号３２１、コントローラ番号３２２、セグメント属性３２３、ＭＲＵノード番号３２４、ＬＲＵノード番号３２５を有してよい。
【０１０３】
プロセッサ番号３２１は、プロセッサ１２を識別するための番号である。
【０１０４】
コントローラ番号３２２は、コントローラ１１を識別するための番号である。
【０１０５】
セグメント属性３２３は、上述のセグメント属性３３７と同様である。
【０１０６】
ＭＲＵノード番号３２４は、コントローラ番号３２２のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０に構成された、プロセッサ番号３２１のプロセッサ１２のための区画１７２において、セグメント属性３２３の連結キューのＭＲＵのノード番号３３４である。
【０１０７】
ＬＲＵノード番号３２５は、コントローラ番号３２２のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０に構成された、プロセッサ番号３２１のプロセッサ１２のための区画１７２において、セグメント属性３２３の連結キューのＬＲＵのノード番号３３４である。
【０１０８】
例えば、図１０において、コントローラ番号３２２「１」のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０に構成された、プロセッサ番号３２１「１」のプロセッサ１２のための区画１７２において、最近最も使われた順にクリーンセグメントを検索したい場合は、ＭＲＵノード番号３２４「２」を先頭に、セグメントテーブル３３０の順ノード番号３３５を順に追っていけばよい。反対に、最近最も使われていない順にクリーンセグメントを検索したい場合は、ＬＲＵノード番号３２５「１２１」を先頭に、セグメントテーブル３３０の逆ノード番号３３６を順に追っていけばよい。ダーティセグメント、フリーセグメントについても同様である。
【０１０９】
なお、セグメント属性３２３「共有フリー」のレコードのプロセッサ番号３２１は、「ＮＵＬＬ」であってよい。共有フリーセグメントは、プロセッサ１２毎に管理する必要が無いからである。
【０１１０】
図１１は、キャッシュディレクトリ３４０の構成例を示す。
【０１１１】
キャッシュディレクトリ３４０は、キャッシュ済みのデータを管理するためのテーブルである。キャッシュディレクトリ３４０のレコードは、フィールド値として、論理ＶＯＬ番号３４１、ブロック番号３４２、第１ノード番号３４３、第２ノード番号３４４を有してよい。
【０１１２】
論理ＶＯＬ番号３４１及びブロック番号３４２は、上述の論理ＶＯＬ番号３３２及びブロック番号３３３と同様である。
【０１１３】
第１ノード番号３４３及び第２ノード番号３４４は、上述のノード番号３３４と対応する。
【０１１４】
例えば、図１１のキャッシュディレクトリ３４０は、論理ＶＯＬ番号３４０「１」の論理ＶＯＬにおけるブロック番号３４２「３」のブロックのデータが、第１ノード番号３４３「２０」に対応するセグメント番号３３１のセグメントと、第２ノード番号３４４「１５」に対応するセグメント番号３３１のセグメントとにキャッシュされていることを示す。
【０１１５】
同一のデータを２つのセグメントにキャッシュしているのは、主にライトデータの冗長化のためである。したがって、第１ノード番号３４３に対応するセグメントと、第２ノード番号３４４に対応するセグメントとは、別々のコントローラ１１のメモリ１３に属していることが望ましい。
【０１１６】
キャッシュディレクトリ３４０を参照することにより、キャッシュヒット又はキャッシュミスを判定することができる。アクセス先の論理ＶＯＬ番号３４１のブロック番号３４２に対応する第１ノード番号３４３及び第２ノード番号３４４の何れかが「ＮＵＬＬ」でない場合、キャッシュヒットと判定できる。アクセス先の論理ＶＯＬ番号３４１のブロック番号３４２に対応する第１ノード番号３４３及び第２ノード番号３４４の何れもが「ＮＵＬＬ」である場合、キャッシュミスと判定できる。
【０１１７】
図１２は、区画テーブル３５０の構成例を示す。
【０１１８】
区画テーブル３５０は、キャッシュメモリ領域１７０における各プロセッサ１２のための区画１７２を管理するためのテーブルである。区画テーブル３５０のレコードは、フィールド値として、プロセッサ番号３５１、コントローラ番号３５２、目標セグメント数３５３、割当セグメント数３５４を有してよい。
【０１１９】
プロセッサ番号３５１及びコントローラ番号３５２は、上述のプロセッサ番号３２１及びコントローラ番号３２２と同様である。
【０１２０】
割当セグメント数３５４は、コントローラ番号３５２のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０において、プロセッサ番号３５２のプロセッサ１２のための区画１７２に割り当てられたセグメントの数である。
【０１２１】
目標セグメント数３５３は、コントローラ番号３５２のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０において、プロセッサ番号３５２のプロセッサ１２のための区画１７２に割り当てられることが望ましいセグメントの数である。すなわち、割当セグメント数３５４と目標セグメント数３５３との差分は、できるだけ小さい方が望ましい。目標セグメント数３５３は、ストレージシステム２の状況に応じて、適宜変更されてよい。
【０１２２】
図１３は、状況管理テーブル３６０の構成例を示す。
【０１２３】
状況管理テーブル３６０は、ストレージシステム２の稼働状況に関する情報を有する。状況管理テーブル３６０の情報は、目標セグメント数３５３を決定するために用いられてよい。状況管理テーブル３６０のレコードは、フィールド値として、プロセッサ番号３６１、コントローラ番号３６２、セグメント割当頻度３６３を有してよい。
【０１２４】
プロセッサ番号３６１及びコントローラ番号３６２は、上述のプロセッサ番号３２１及びコントローラ番号３２２と同様である。
【０１２５】
セグメント割当頻度３６３は、コントローラ番号３６２のコントローラ１１内のメモリ１３のキャッシュメモリ領域１７０において、プロセッサ番号３６１のプロセッサ１２のための区画１７２に対して、単位時間当たりに新規に割り当てられたセグメントの数である。なお、本実施形態におけるセグメント割当頻度３６３は一例であり、目標セグメント数３５３を決定するための指標であれば何でもよい。例えば、連結キューにおけるクリーンセグメントの滞在時間、キャッシュヒット率、又は、単位Ｉ／Ｏ当たりに新規に割り当てられたセグメント数などであってもよい。又は、管理者が、管理計算機３０を通じて、目標セグメント数３５３を決定するための指標を入力できてもよい。
【０１２６】
図１４は、共有フリーテーブル３７０の構成例を示す。
【０１２７】
共有フリーテーブル３７０は、共有フリーセグメントを管理するためのテーブルである。共有フリーテーブル３７０のレコードは、フィールド値として、コントローラ番号３７１、共有フリーセグメント数３７２、共有フリーセグメント閾値３７３を有してよい。
【０１２８】
コントローラ番号３７１は、上述のコントローラ番号３２２と同様である。
【０１２９】
共有フリーセグメント数３７２は、コントローラ番号３７１のコントローラ１１内のメモリ１３に存在する共有フリーセグメントの数である。
【０１３０】
共有フリーセグメントの閾値３７３は、共有フリーセグメント数３７２に対する下限の閾値である。共有フリーセグメント数３７２が枯渇すると、コントローラ番号３７１のコントローラ１１内のメモリ１３において、区画１７２に対する割当セグメント数３５４を調整することができなくなってしまう。そこで、コントローラ１１は、共有フリーセグメント数３７２が共有フリーセグメントの閾値３７３以下にならないように調整してよい。
【０１３１】
図１５は、Ｉ／Ｏコマンド管理テーブル４３０の構成例を示す。
【０１３２】
Ｉ／Ｏコマンド管理テーブル４３０は、コントローラ１１が受領したＩ／Ｏコマンドを管理するためのテーブルである。Ｉ／Ｏコマンド管理テーブル４３０のレコードは、フィールド値として、Ｉ／Ｏコマンド管理番号４３１、Ｉ／Ｏ処理中フラグ４３２、Ｉ／Ｏコマンド受領コントローラ番号４３３、Ｉ／Ｏコマンド種別４３４を有してよい。
【０１３３】
Ｉ／Ｏコマンド管理番号４３１は、ストレージシステム２内でＩ／Ｏコマンドを識別するための番号である。
【０１３４】
Ｉ／Ｏ処理中フラグ４３２は、Ｉ／Ｏコマンド管理番号４３１のＩ／Ｏコマンドが、未処理であるか、それとも処理中であるかを示すフラグである。例えば、Ｉ／Ｏ処理中フラグ４３２は、未処理の場合に「ＯＦＦ」、処理中の場合に「ＯＮ」であってよい。
【０１３５】
Ｉ／Ｏコマンド受領コントローラ番号４３３は、Ｉ／Ｏコマンド管理番号４３１のＩ／Ｏコマンドを受領したコントローラ１１の番号である。
【０１３６】
Ｉ／Ｏコマンド種別４３４は、Ｉ／Ｏコマンド管理番号４３１のＩ／Ｏコマンドの種別である。Ｉ／Ｏコマンド種別４３４の例は、リードコマンド、ライトコマンドである。
【０１３７】
図１６は、Ｉ／Ｏコマンド振り分けプログラム２００の処理例を示すフローチャートである。
【０１３８】
このプログラム２００は、Ｉ／Ｏ要求を受領したコントローラ１１の何れかのプロセッサ１２で実行されてよい。プログラム２００は、ホスト計算機４からＩ／Ｏ要求の受領を検知すると、次の処理を実行する。
【０１３９】
プログラム２００は、論理ＶＯＬテーブル３１０から、アクセス先の論理ＶＯＬ番号３１１に対応する担当プロセッサ番号３１５を特定する（ステップＳ１０２）。以下の説明において、この特定された担当プロセッサ番号３１５のプロセッサ１２を、「担当プロセッサ」という。
【０１４０】
プログラム２００は、担当プロセッサのローカルメモリ領域１５０内のＩ／Ｏコマンド管理テーブル４３０から、未使用のＩ／Ｏコマンド管理番号４３１を取得する。そして、プログラム２００は、その取得したＩ／Ｏコマンド管理番号４３１に対応するＩ／Ｏ処理中フラグ４３２を「ＯＮ」に変更する。そして、プログラム２００は、Ｉ／Ｏ受領コントローラ番号４３３とＩ／Ｏコマンドパラメータ４３４を更新する（ステップＳ１０４）。
【０１４１】
プログラム２００は、担当プロセッサに対して、ステップＳ１０４で取得したＩ／Ｏコマンド管理番号４３１を含むＩ／Ｏコマンド処理要求を送信する。そして、プログラム２００は、本処理を終了する。
【０１４２】
図１７は、Ｉ／Ｏ処理プログラム２０２の処理例を示すフローチャートである。
【０１４３】
このプログラム２０２は、担当プロセッサで実行されてよい。プログラム２０２は、Ｉ／Ｏコマンド処理要求の受領を検知すると、次の処理を実行する。
【０１４４】
プログラム２０２は、その受領したＩ／Ｏコマンド処理要求からＩ／Ｏコマンド管理番号４３１を抽出し、Ｉ／Ｏコマンド管理テーブル４３０から、その抽出したＩ／Ｏコマンド管理番号４３１に対応するＩ／Ｏコマンド種別４３４を特定する（ステップＳ１２０）。
【０１４５】
プログラム２０２は、その特定したＩ／Ｏコマンド種別４３４に基づいて、Ｉ／Ｏコマンドが、リードコマンド又はライトコマンドの何れであるかを判定する（ステップＳ１２２）。
【０１４６】
ステップＳ１２２の判定結果が「リードコマンド」の場合（ステップＳ１２２：リード）、プログラム２０２は、リード処理（ステップＳ２００）を行う。リード処理の詳細は、図１８に示す。
【０１４７】
ステップＳ１２２の判定結果が「ライトコマンド」の場合（ステップＳ１２２：ライト）、プログラム２０２は、ライト処理（ステップＳ３００）を行う。ライト処理の詳細は、図１９に示す。
【０１４８】
図１８は、リード処理例を示すフローチャートである。
【０１４９】
Ｉ／Ｏ処理プログラム２０２は、キャッシュディレクトリ３４０（又はローカルのキャッシュディレクトリ４２０）を参照し、リード先の論理ＶＯＬ番号３４１のブロック番号３４２に対応する第１ノード番号３４３及び第２ノード番号３４４の何れもが「ＮＵＬＬ」であるか否かを判定する（ステップＳ２０２）。すなわち、プログラム２０２は、リード先の論理ＶＯＬのブロックのデータについて、キャッシュヒット又はキャッシュミスの何れであるかを判定する。
【０１５０】
キャッシュミスの場合（ステップＳ２０２：ＮＯ）、プログラム２０２は、次の処理を行う。
【０１５１】
プログラム２０２は、Ｉ／Ｏコマンド管理テーブル４３０から、ステップＳ１２０で抽出したＩ／Ｏコマンド管理番号４３１に対応するＩ／Ｏ受領コントローラ番号４３３を特定する（ステップＳ２０４）。
【０１５２】
そして、セグメント管理プログラム２０６が、その特定したＩ／Ｏ受領コントローラ番号４３３のコントローラ１１のメモリ１３の区画１７２について、セグメント割当処理を行う（ステップＳ２０６）。セグメント割当処理の詳細については後述する（図２０参照）。
【０１５３】
そして、ＲＡＩＤ処理プログラム２０４が、セグメント割当処理によって区画１７２に割り当てられたフリーセグメントに、リード先の論理ＶＯＬのブロックのデータをステージングする（ステップＳ２０８）。そして、プログラム２０２は、ステップＳ２０２に戻る。
【０１５４】
キャッシュヒットの場合（ステップＳ２０２：ＹＥＳ）、プログラム２０２は、次の処理を行う。
【０１５５】
プログラム２０２は、セグメント管理テーブル３３０から、第１ノード番号３４３又は第２ノード番号３４４の内のヒットしたノード番号３３４を含むレコードを抽出する。そして、プログラム２０２は、その抽出したレコードから、コントローラ番号３３９を特定する。そして、プログラム２０２は、その特定したコントローラ番号３３９と、ステップＳ１２０で抽出したＩ／Ｏコマンド管理番号４３１に対応するＩ／Ｏ受領コントローラ番号４３３と、が一致するか否かを判定する（ステップＳ２１０）。
【０１５６】
ステップＳ２１０の判定結果が肯定的な場合（ステップＳ２１０：ＹＥＳ）、プログラム２０２は、ステップＳ２３０へ進む。
【０１５７】
ステップＳ２１０の判定結果が否定的な場合（ステップＳ２１０：ＮＯ）、コントローラ間転送プログラム２１６が、キャッシュヒットしたセグメントのデータを、ホスト計算機４からのリード要求を受領したコントローラ１１のメモリ１３のバッファ領域１６０へ転送する（ステップＳ２１２）。そして、プログラム２０２は、ステップＳ２３０へ進む。
【０１５８】
ステップＳ２３０において、プログラム２０２は、ホスト計算機４からリード要求を受領したコントローラ１１のメモリ１３のキャッシュ領域１７０又はバッファ領域１６０のデータを、そのリード要求の応答として、ホスト計算機４へ返す（ステップＳ２３０）。そして、プログラム２０２は、本処理を終了する。
【０１５９】
ステップＳ２１２におけるコントローラ１１間のデータ転送は、メモリ１３の帯域、コントローラ間パス３２の帯域、及び、プロセッサ１２における処理のオーバーヘッドとなり得る。そのため、プログラム２０２は、リードデータに対応するキャッシュデータを、ホスト計算機４からのＩ／Ｏ要求を受領したコントローラ１１側のメモリ１３に優先的に格納する。すなわち、ステップＳ２０６において、ホスト計算機３からのＩ／Ｏ要求を受領したコントローラ１１側のメモリ１３の区画に、新規セグメントが割り当てられる。これにより、コントローラ１１間のデータ転送の発生を減らすことができる。
【０１６０】
図１９は、ライト処理例を示すフローチャートである。
【０１６１】
Ｉ／Ｏ処理プログラム２０２は、上記のステップＳ２０２と同様に、ライト先の論理ＶＯＬのブロックのデータについて、キャッシュヒット又はキャッシュミスの何れであるかを判定する（ステップＳ３０２）。
【０１６２】
キャッシュミスの場合（ステップＳ３０２：ＮＯ）、セグメント管理プログラム２０６が、セグメント割当処理を行う（ステップＳ３０４）。セグメント割当処理の詳細については後述する（図２０参照）。そして、プログラム２０２は、ステップＳ３０２へ戻る。戻った後のステップＳ３０２の判定は「ＹＥＳ」となる。
【０１６３】
キャッシュヒットの場合（ステップＳ３０２：ＹＥＳ）、プログラム２０２は、他方のコントローラ１１のメモリ１３の区画１７２に、ライトデータを格納するためのフリーセグメントが存在するか否かを判定する（ステップＳ３１０）。
【０１６４】
ステップＳ３１０の判定結果が否定的な場合（ステップＳ３１０：ＮＯ）、セグメント管理プログラム２０６が、他方のコントローラ１１のメモリ１３の区画１７２について、セグメント割当処理を行う（ステップＳ３１２）。そして、プログラム２０２は、ステップＳ３１０へ戻る。戻った後のステップＳ３１０の判定は「ＹＥＳ」となる。
【０１６５】
ステップＳ３１０の判定結果が肯定的な場合（ステップＳ３１０：ＹＥＳ）、ＲＡＩＤ処理プログラム２０４が、ライトデータに対応するキャッシュデータを格納するためのフリーセグメントのダーティビットマップ３３８を、ライト先の論理ＶＯＬのブロックに適合するように変更する。そして、プログラム２０２は、そのフリーセグメントのセグメント属性３３７を「ダーティ」に変更する。すなわち、プログラム２０２は、そのフリーセグメントを、ダーティセグメントに変更する。
【０１６６】
プログラム２０２は、ホスト計算機４から受領したライトデータを、ステップＳ３０４及びステップＳ３１２で割り当てられた２つのセグメントに格納する（ステップＳ３２２）。すなわち、プログラム２０２は、ライトデータに対応するキャッシュデータを、２つのコントローラ１１のそれぞれのメモリ１３に格納する（二重化する）。なお、セグメントに格納されたダーティデータは、ＲＡＩＤプログラム２０４によって、Ｉ／Ｏ処理とは非同期にドライブ１８へデステージされてよい。
【０１６７】
プログラム２０２は、ホスト計算機４からのライト要求の応答として、そのホスト計算機４へ「Ｇｏｏｄステータス」を返す。そして、プログラム２０２は、本処理を終了する。
【０１６８】
図２０は、セグメント管理プログラム２０６の処理例を示すフローチャートである。
【０１６９】
本処理は、図１８のステップＳ２０６及び図１９のステップＳ３０４、Ｓ３１２の詳細に相当する。本処理は、コントローラ１１毎に実行されてよい。
【０１７０】
セグメント管理プログラム２０６は、属性テーブル３２０から、当該プログラム２０６を実行しているプロセッサ番号３２１と、ステップＳ２０４で特定したＩ／Ｏ受領コントローラ番号４３３と一致するコントローラ番号３２２とを含むレコード群を抽出する。そして、プログラム２０６は、その抽出したレコード群から、セグメント属性３２３が「フリー」のレコードのＬＲＵノード番号３２５を特定する。そして、プログラム２０６は、この特定したＬＲＵノード番号３２５をＬＲＵとするフリーキューから、フリー属性のノード番号を検索する（ステップＳ４０２）。すなわち、プログラム２０６は、フリーセグメントを検索する。
【０１７１】
ステップＳ４０２においてフリー属性のノード番号を発見できた場合（ステップＳ４０４：ＹＥＳ）、プログラム２０６は次の処理を行う。
【０１７２】
プログラム２０６は、その発見したフリー属性のノード番号を、キャッシュディレクトリ３４０の第１ノード番号３４３（又は第２ノード番号３４４）に登録する（ステップＳ４０６）。
【０１７３】
そして、プログラム２０６は、その発見したフリー属性のノード番号を、フリーキューから切り離し（デキューし）、クリーンキューのＭＲＵに連結する（エンキューする）。すなわち、フリーセグメントを、クリーンセグメントに変更する。そして、プログラム２０６は、セグメントテーブル３３０において、このノード番号３３４を有するレコードの論理ＶＯＬ番号３３２、ブロック番号３３３、ダーティビットマップ３３８、及び、コントローラ番号３３９を更新する（ステップＳ４０８）。
【０１７４】
そして、プログラム２０６は、状況管理テーブル３６０のセグメント割当頻度３６３を更新（インクリメント）する。そして、本処理の呼び出し元の処理へ戻る。
【０１７５】
ステップＳ４０２においてフリー属性のノード番号を発見できなかった場合（ステップＳ４０４：ＮＯ）、プログラム２０６は次の処理を行う。
【０１７６】
プログラム２０６は、ステップＳ４０２で抽出したレコード群から、セグメント属性３２３が「クリーン」のレコードのＬＲＵノード番号３２５を特定する。そして、プログラム２０６は、この特定したＬＲＵノード番号３２５をＬＲＵとするクリーンキューから、クリーン属性のノード番号を検索する（ステップＳ４１０）。すなわち、プログラム２０６は、クリーンセグメントを検索する。
【０１７７】
ステップＳ４１０においてクリーン属性のノード番号を発見できた場合（ステップＳ４１２：ＹＥＳ）、プログラム２０６は次の処理を行う。
【０１７８】
プログラム２０６は、その発見したクリーン属性のノード番号を、クリーンキューから切り離し（デキューし）、フリーキューのＭＲＵに連結する（エンキューする）。すなわち、プログラム２０６は、クリーンセグメントを、フリーセグメントに変更する。そして、プログラム２０６は、セグメントテーブル３３０において、このノード番号３３４を有するレコードのセグメント属性３３７を「フリー」に変更する。また、プログラム２０６は、キャッシュディレクトリ３４０において、その発見したノード番号を有する第１ノード番号３４３及び第２ノード番号３４４を「ＮＵＬＬ」に変更する（ステップＳ４１４）。そして、プログラム２０６は、ステップＳ４０２へ戻る。これにより、区画１７２にフリーセグメントが確保される。
【０１７９】
ステップＳ４１０においてクリーン属性のノード番号を発見できなかった場合（ステップＳ４１２：ＮＯ）、プログラム２０６は次の処理を行う。
【０１８０】
プログラム２０６は、ステップＳ４０２で抽出したレコード群から、セグメント属性３２３が「ダーティ」のレコードのＬＲＵノード番号３２５を特定する。そして、プログラム２０６は、この特定したＬＲＵノード番号３２５をＬＲＵとするダーティキューから、ダーティ属性のノード番号を検索する（ステップＳ４２０）。すなわち、プログラム２０６は、ダーティセグメントを検索する。この処理は、フリーセグメントもクリーンセグメントも見つからない時に実行されるため、ダーティセグメントは発見される。
【０１８１】
そして、ＲＡＩＤ処理プログラム２０４が、発見したダーティセグメントのデータを、論理ＶＯＬにデステージする。そして、プログラム２０６は、そのダーティ属性のノード番号を、ダーティキューから切り離し（デキューし）、フリーキューのＭＲＵに連結する（エンキューする）。すなわち、プログラム２０６は、ダーティセグメントを、フリーセグメントに変更する（ステップＳ４２２）。そして、プログラム２０６は、ステップＳ４０２へ戻る。これにより、区画１７２にフリーセグメントが確保される。
【０１８２】
図２１は、目標区画決定プログラム２１２の処理例を示すフローチャートである。
【０１８３】
本処理は、所定の周期で実行されてもよいし、管理計算機３０からの指示によって実行されてもよい。本処理は、Ｉ／Ｏ処理に影響を与えないように、Ｉ／Ｏ処理とは非同期に実行されてもよい。
【０１８４】
目標区画決定プログラム２１２は、区画テーブル３５０から、処理対象のコントローラ番号３５２を有し、且つ、割当セグメント数３５４が所定の閾値以上であるプロセッサ番号３５１を特定する。割当セグメント数３５４の少ない区画１７２から、更にセグメントの割当数が減らされないようにするためである（ステップＳ７０２）。
【０１８５】
次に、プログラム２１２は、状況管理テーブル３６０から、処理対象のコントローラ番号３５２、且つ、ステップＳ７０２で特定したプロセッサ番号３５１を有するレコード群を抽出する。そして、プログラム２１２は、その抽出したレコード群の中から、セグメント割当頻度３６３の最大値のレコードと最小値のレコードとを特定する（ステップＳ７０４）。
【０１８６】
次に、プログラム２１２は、ステップＳ７０４で特定したセグメント割当頻度３６３の最大値と最小値の差分が、所定の閾値よりも大きいか否かを判定する（ステップＳ７０６）。誤差又は一時的な変動等によって、目標セグメント数３５３が、頻繁に変更されてしまうことを防ぐためである。
【０１８７】
ステップＳ７０４の判定結果が否定的な場合（ステップＳ７０６：ＮＯ）、プログラム２１２は、本処理を終了する。ステップＳ７０６の判定結果が肯定的な場合（ステップＳ７０６：ＹＥＳ）、プログラム２１２は、次の処理を行う。
【０１８８】
プログラム２１２は、セグメント割当頻度３６３が最小値のプロセッサ番号３５１に対応する目標セグメント数３５３を減らす（ステップＳ７０８）。そして、プログラム２１２は、セグメント割当頻度３６３が最大値のプロセッサ番号３５１に対応する目標セグメント数３５３を増やす（ステップＳ７１０）。そして、プログラム２１２は、本処理を終了する。
【０１８９】
目標セグメント数３５３の減少数及び増加数は、ステップＳ７０６で算出された差分の大きさに基づいて決定されてよい。例えば、差分が大きくなる程、目標セグメント数３５３の減少数及び増加数も大きくなってよい。反対に、差分が小さくなる程、目標セグメント数３５３の減少数及び増加数も小さくなってよい。
【０１９０】
目標セグメント数３５３の減算数と増加数は同じであってもよい。すなわち、同じコントローラ１１のキャッシュメモリ領域１７０における目標セグメント数３５３の合計は、変化しないとしてもよい。
【０１９１】
又は、次のように、全てのプロセッサ１２の目標セグメント数３５３を変更してもよい。プログラム２１２は、処理対象のコントローラ番号３６２の各プロセッサ番号３６１に対応するセグメント割当頻度３６３の平均値を算出する。そして、プログラム２１２は、状況管理テーブル３６０から、処理対象のコントローラ番号３１７のレコード群を抽出し、その抽出したレコード群を、セグメント割当頻度３６３が平均値以上であるレコード群と、セグメント割当頻度３６３が平均値未満であるレコード群とに分ける。そして、プログラム２１２は、セグメント割当頻度３６３が平均値以上であるレコード群に係る目標セグメント数３５３を増やし、セグメント割当頻度３６３が平均値未満であるレコード群に係る目標セグメント数３５３を減らす。増加数及び減少数は、平均値とセグメント割当頻度３６３との差分の大きさに基づいて決定されてもよい。
【０１９２】
図２２は、区画変更プログラム２０７の処理例を示すフローチャートである。
【０１９３】
本処理は、所定の周期で実行されてもよいし、管理計算機３０からの指示によって実行されてもよい。本処理は、Ｉ／Ｏ処理に影響を与えないように、Ｉ／Ｏ処理とは非同期に実行されてもよい。
【０１９４】
区画変更プログラム２０７は、コントローラ１１ａのメモリ１３ａの各区画１７０―１について、区画サイズ縮小処理を実行する（ステップＳ５００―１）。そして、区画変更プログラム２０７は、コントローラ１１ｂのメモリ１３ｂの各区画１７０―１について、区画サイズ拡大処理を実行する（ステップＳ６００―１）。
【０１９５】
また、区画変更プログラム２０７は、コントローラ１１ｂのメモリ１３ｂの各区画１７０―２について、区画サイズ縮小処理を実行する（ステップＳ５００―２）。そして、区画変更プログラム２０７は、コントローラ１１ｂのメモリ１３ｂの各区画１７０―２について、区画サイズ拡大処理を実行する（ステップＳ６００―２）。
【０１９６】
区画サイズ縮小処理の詳細は後述する（図２３参照）。区画サイズ拡大処理の詳細は後述する（図２４参照）。
【０１９７】
図２３は、区画縮小プログラム２１０の処理例を示すフローチャートである。本処理は、図２２のステップＳ５００―１、Ｓ５００―２の詳細に相当する。
【０１９８】
区画縮小プログラム２１０は、区画テーブル３５０から、処理対象のコントローラ番号３５２及びプロセッサ番号３５１に対応する目標セグメント数３５３及び割当セグメント数３５４を取得する（ステップＳ５０２）。
【０１９９】
次に、プログラム２１０は、割当セグメント数３５４が、目標セグメント数３５３よりも大きいか否かを判定する（ステップＳ５０４）。
【０２００】
ステップＳ５０４の判定結果が否定的な場合（ステップＳ５０４：ＮＯ）、プログラム２１０は、本処理を終了する。ステップＳ５０４の判定結果が肯定的な場合（ステップＳ５０４：ＹＥＳ）、プログラム２１０は、次の処理を行う。
【０２０１】
プログラム２１０は、属性テーブル３２０から、処理対象のコントローラ番号３２２及びプロセッサ番号３２１に対応する（つまり、処理対象の区画１７２の）セグメント属性３２３「フリー」のＬＲＵノード番号３２５を検索する（ステップＳ５０６）。すなわち、プログラム２１０は、処理対象の区画１７２から、フリーセグメントを検索する。
【０２０２】
以下、ステップＳ５０６の検索において処理対象の区画１７２からフリーセグメントを発見できた場合（ステップＳ５０８：ＹＥＳ）について述べる。
【０２０３】
プログラム２１０は、ステップＳ５０６で発見したセグメント属性３２３「フリー」のＬＲＵノード番号３２５を、フリーキューから切り離し（デキューし）、共有フリーキューに連結する（エンキューする）（ステップＳ５１０）。すなわち、プログラム２１０は、区画１７２に割り当てられていたフリーセグメントの割当を解除し、共有フリーセグメントに変更する。共有フリーキューへの連結は、排他処理後に行われてよい。処理の途中で他のプロセッサ１２から共有フリーキューが更新されることを防ぐためである。
【０２０４】
そして、プログラム２１０は、属性テーブル３２０（ローカルの属性テーブル４００）、セグメントテーブル３３０（ローカルのセグメントテーブル４１０）、キャッシュディレクトリ３４０（ローカルのキャッシュディレクトリ４２０）において、フリーキューから切り離されたセグメントの情報を無効化する（ステップＳ５１２）。
【０２０５】
そして、プログラム２１０は、区画テーブル３５０において、処理対象のコントローラ番号３５２及びプロセッサ番号３５１に対応する（つまり、処理対象の区画１７２の）割当セグメント数３５４を「１」減らす。そして、プログラム２１０は、共有フリーテーブル３７０において、処理対象のコントローラ番号３７１の共有フリーセグメント数３１２を「１」増やす（ステップＳ５１４）。そして、プログラム２１０は、ステップＳ５０４に戻る。
【０２０６】
以下、ステップＳ５０６の検索において処理対象の区画１７２からフリーセグメントを発見できなかった場合（ステップＳ５０８：ＮＯ）について述べる。
【０２０７】
プログラム２１０は、属性テーブル３２０から、処理対象のコントローラ番号３２２及びプロセッサ番号３２１に対応する（つまり、処理対象の区画１７２の）セグメント属性３２３「クリーン」のＬＲＵノード番号３２５を検索する（ステップＳ５２０）。すなわち、プログラム２１０は、処理対象の区画１７２から、クリーンセグメントを検索する。
【０２０８】
以下、ステップＳ５２０の検索において処理対象の区画１７２からクリーンセグメントを発見できた場合（ステップＳ５２２：ＹＥＳ）について述べる。
【０２０９】
プログラム２１０は、ステップＳ５２０で発見したセグメント属性３２３「クリーン」のＬＲＵノード番号３２５を、クリーンキューから切り離し（デキューし）、フリーキューに連結する（エンキューする）。すなわち、プログラム２１０は、処理対象の区画１７２のクリーンセグメントを、フリーセグメントに変更する。そして、プログラム２１０は、ステップＳ５０６へ戻る。戻った後のステップＳ５１０の処理において、このフリーセグメントは、共有フリーセグメントに変更される。
【０２１０】
以下、ステップＳ５２０の検索において処理対象の区画１７２からクリーンセグメントを発見できなかった場合（ステップＳ５２２：ＮＯ）について述べる。
【０２１１】
プログラム２１０は、属性テーブル３２０から、処理対象のコントローラ番号３２２及びプロセッサ番号３２１に対応する（つまり、処理対象の区画１７２の）セグメント属性３２３「ダーティ」のＬＲＵノード番号３２５を検索する（ステップＳ５３０）。すなわち、プログラム２１０は、処理対象の区画１７２から、ダーティセグメントを検索する。そして、ＲＡＩＤ処理プログラム２０４が、ステップＳ５３０で発見したダーティセグメントを、論理ＶＯＬへデステージする。そして、プログラム２１０は、ステップＳ５２０で発見したセグメント属性３２３「ダーティ」のＬＲＵノード番号３２５を、ダーティキューから切り離し（デキューし）、フリーキューに連結する（エンキューする）。すなわち、プログラム２１０は、処理対象の区画１７２のダーティセグメントを、フリーセグメントに変更する。そして、プログラム２１０は、ステップＳ５１０へ戻る。戻った後のステップＳ５１０の処理において、このフリーセグメントは、共有フリーセグメントに変更される。
【０２１２】
以上の処理により、処理対象の区画１７２に割り当てられていたフリーセグメントの割当が解除される。すなわち、その区画１７２のサイズが縮小される。
【０２１３】
図２４は、区画拡大プログラム２０８の処理例を示すフローチャートである。本処理は、図２２のステップＳ６００―１、Ｓ６００―２の詳細に相当する。
【０２１４】
区画拡大プログラム２０８は、共有フリーテーブル３７０から、処理対象のコントローラ番号３７１に対応する共有フリーセグメント数３７２及び共有フリーセグメントの閾値３７３を取得する。そして、プログラム２０８は、その取得した共有フリーセグメント数３７２が、共有フリーセグメントの閾値３７３よりも大きいか否かを判定する（ステップＳ６０２）。
【０２１５】
ステップＳ６０２の判定結果が否定的な場合（ステップＳ６０２：ＮＯ）、プログラム２０８は、本処理を終了する。ステップＳ６０２の判定結果が肯定的な場合（ステップＳ６０２：ＹＥＳ）、プログラム２０８は、次の処理を行う。
【０２１６】
プログラム２０８は、セグメントテーブル３５０から、処理対象のコントローラ番号３５２及びプロセッサ番号３１０に対応する（つまり、処理対象の区画１７２の）、目標セグメント数３５３及び割当セグメント数３５４を取得する（ステップＳ６０４）。
【０２１７】
そして、プログラム２０８は、目標セグメント数３５３が、割当セグメント数３５４よりも大きいか否かを判定する（ステップＳ６０６）。
【０２１８】
ステップＳ６０６の判定結果が否定的な場合（ステップＳ６０６：ＮＯ）、プログラム２０８は、本処理を終了する。ステップＳ６０６の判定結果が肯定的な場合（ステップＳ６０６：ＹＥＳ）、プログラム２０８は、次の処理を行う。
【０２１９】
プログラム２０８は、属性テーブル３２０から、処理対象のコントローラ番号３７１に対応するセグメント属性３２３「共有フリー」のＬＲＵノード番号３２５（ＭＲＵノード番号３２４でもよい）を検索する。そして、プログラム２０８は、そのセグメント属性３２３「共有フリー」のＬＲＵノード番号３２５を、共有フリーキューから切り離し（デキューし）、処理対象のコントローラ番号及びプロセッサ番号に対応する（つまり、処理対象の区画１７２の）フリーキューに連結する（エンキューする）（ステップＳ６０８）。
【０２２０】
プログラム２０８は、共有メモリ領域１４０の属性テーブル３２０、セグメントテーブル３３０、キャッシュディレクトリ３４０において、フリーキューに連結されたセグメントの情報を更新する。そして、プログラム２０８は、区画テーブル３５０において、処理対象のコントローラ番号３５２及びプロセッサ番号３５１に対応する（つまり、処理対象の区画１７２の）割当セグメント数３５４を「１」増やす。そして、プログラム２１０は、共有フリーテーブル３７０において、処理対象のコントローラ番号３７１の共有フリーセグメント数３７２を「１」減らす（ステップＳ６１０）。
【０２２１】
プログラム２０８は、共有メモリ領域１４０の属性テーブル３２０、セグメントテーブル３３０、キャッシュディレクトリ３４０における、処理対象の区画１７２に新規に割り当てられたセグメントに対応するレコードを、ローカルメモリ領域１０のローカルの属性テーブル４００、ローカルのセグメントテーブル４１０、ローカルのキャッシュテーブル４２０にコピーする（ステップＳ６１２）。そして、プログラム２０８は、ステップＳ６０２へ戻る。なお、ステップＳ６０８、Ｓ６１０及びＳ６１２は、何れの順番に実行されてもよい。
【０２２２】
第１の実施形態によれば、コントローラ１１毎のメモリ１３のキャッシュ領域１７０において、各区画１７２のサイズが適切に変更される。例えば、セグメント割当頻度の小さい区画１７２のサイズは縮小され、セグメント割当頻度の大きい区画１７２のサイズは拡大される。これにより、各区画１７２のキャッシュヒット率が高まる。よって、コントローラ１１間におけるキャッシュデータの転送も減少し得る。
【０２２３】
（第２の実施形態）
【０２２４】
図２５は、第２の実施形態に係る計算機システム１ｂの構成例を示す。
【０２２５】
図２５に示す計算機システム１ｂは、図１に示す計算機システム１ａと比較して、１つのコントローラ１１内に、ホストＩ／Ｆ１４、プロセッサ１２及びメモリ１３のセットを、２つ以上有する点において相違する。さらに、同一コントローラ１１内のプロセッサ１２同士は、コントローラ内プロセッサ間パス１９によって、双方向通信可能に接続されている。
【０２２６】
例えば、同一コントローラ１１ｃ内において、一方のセットのプロセッサ１２ｅは、当該セット内のメモリ１３ｃ（例えば、プロセッサ１２ｅに直結されているメモリ１３ｃ）だけでなく、プロセッサ間パス１９ａを介して、他方のセットのメモリ１３ｄにもアクセス可能である。典型的には、一方のセットのプロセッサ１２ｅの、そのプロセッサ１２ｅと同じセット内のメモリ１３ｃに対するレイテンシの方が、コントローラ内プロセッサ間パス１９ａを介する他方のセットのメモリ１３ｄに対するレイテンシよりも、小さい。なぜなら、他方のセットのメモリ１３ｄに対するアクセス速度は、プロセッサ間パス１９の最大通信速度（最大通信帯域）に制限されるからである。このようなアーキテクチャは、ＮＵＭＡ（Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）と呼ばれる。
【０２２７】
以下、プロセッサ１２ｅが、同一セット内のメモリ１３ｃ（そのプロセッサ１２ｅに直結されているメモリ１３ｃ）へアクセスすることを「ローカルアクセス」と呼び、コントローラ内プロセッサ間パス１９ａを介して、他方のセットのメモリ１３ｄへアクセスすることを「リモートアクセス」と呼ぶ。プロセッサ１２ｆ、１２ｇ、１２ｈについても同様である。
【０２２８】
典型的には、アクセス速度は、ローカルアクセスの方が、リモートアクセスよりも高速である。すなわち、ローカルアクセスのレイテンシの方が、リモートアクセスのレイテンシよりも小さい。同様に、一方のセットのホストＩ／Ｆ１４ｃも、同一セット内のメモリ１３ｃにアクセスする方が、プロセッサ間パス１９ａを介して他方のセットのメモリ１３ｄにアクセスするよりも、高速である。
【０２２９】
第１の実施形態では、コントローラ１１ａの有するメモリ１３ａのキャッシュ領域１７０―１と、コントローラ１１ｂの有するメモリ１３ｂのキャッシュ領域１７０―２と、のセグメント割当数を管理している。これに対して、第２の実施形態では、プロセッサ１２ｅと同一セット内のメモリ１３ｃのキャッシュ領域と、他方のセットのメモリ１３ｄのキャッシュ領域と、のセグメント割当数を管理する。管理方法は、第１の実施形態と同様であってよい。
【０２３０】
ストレージシステム２ｂは、ホスト計算機４からのリード要求を受領した場合、そのリード要求を受領したホストＩ／Ｆ１４ｃと同一のセット内のメモリ１３ｃに、優先的にリードデータ（キャッシュデータ）を格納する。すなわち、リード要求を受領したホストＩ／Ｆ１４ｃと同一のセット内のメモリ１３ｃのキャッシュメモリ領域に、優先的にセグメントを割り当てる。
【０２３１】
ストレージシステム２ｂは、ホスト計算機４からのライト要求を受領した場合、そのライト要求を受領したホストＩ／Ｆ１４ｃと同一のセット内のメモリ１３ｃと、そのセット内のプロセッサ１２ｅとコントローラ間パス３２ｃによって接続されているプロセッサ１２ｈを含むセット内のメモリ１３ｆと、に優先的にライトデータ（キャッシュデータ）を格納する。すなわち、ライト要求を受領したホストＩ／Ｆ１４ｃと同一セット内のメモリ１３ｃのキャッシュメモリ領域と、そのセット内のプロセッサ１２ｅとコントローラ間パス３２ｃによって接続されているプロセッサ１２ｈを含むセット内のメモリ１３ｆと、に優先的にセグメントを割り当てる。
【０２３２】
これにより、同一コントローラ１１ｃ内におけるメモリ１３ｃ、１３ｄ及びホストＩ／Ｆ１４ｃ、１４ｄ間のデータ転送、並びに、コントローラ１１ｃのメモリ１３ｃ、１３ｄ及びコントローラ１１ｄのメモリ１３ｅ、１３ｆ間のデータ転送、を最適化することができる。すなわち、コントローラ１１ｃ、１１ｄ内のプロセッサ間パス１９ａ、１９ｂにおけるデータ転送、及び／又は、コントローラ１１ｃ、１１ｄの間のコントローラ間パス３２ｃ、３２ｄにおけるデータ転送を減少させることができる。
【０２３３】
プロセッサ間パス１９ａ、１９ｂを介するデータ転送、及び、コントローラ間パス３２ｃ、３２ｄを介するデータ転送は、ストレージシステム２ｂの応答性能及びスループット性能の低下の要因の一つである。したがって、本実施形態によれば、プロセッサ間パス１９ａ、１９ｂを介するデータ転送、及び／又は、コントローラ間パス３２ｃ、３２ｄを介するデータ転送が減少し得るので、ストレージシステム２ｂの応答性能及びスループット性能が向上し得る。
【０２３４】
以上、幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【０２３５】
第１の実施形態において、プロセッサ１２ａ、１２ｂは、第１のプロセッサの例であってよい。プロセッサ１２ｃ、１２ｄは、第２のプロセッサの例であってよい。ホストＩ／Ｆ１４ａは、第１のホストインタフェースの例であってよい。ホストＩ／Ｆ１４ｂは、第２のホストインタフェースの例であってよい。メモリ１３ａは、第１のメモリの例であってよい。メモリ１３ｂは、第２のメモリの例であってよい。割当セグメント数３５４は、区画のサイズの例であってよい。目標セグメント数３５３は、区画の目標のサイズの例であってよい。セグメント割当頻度３６３は、区画に対するデータの格納頻度の例であってよい。
【０２３６】
第２の実施形態において、プロセッサ１２ｅ、１２ｇは、第１のプロセッサの例であってよい。プロセッサ１２ｆ、１２ｈは、第２のプロセッサの例であってよい。ホストＩ／Ｆ１４ｃ、１４ｅは、第１のホストインタフェースの例であってよい。ホストＩ／Ｆ１４ｄ、１４ｆは、第２のホストインタフェースの例であってよい。メモリ１３ｃ、１３ｅは、第１のメモリの例であってよい。メモリ１３ｄ、１３ｆは、第２のメモリの例であってよい。
【０２３７】
実施形態に係る内容は、以下のように表現することもできる。
（表現１）
第１及び第２のプロセッサと、
第１及び第２のキャッシュメモリと、
ホスト計算機と双方向通信可能な第１及び第２のホストインタフェースと、
記憶ドライブと
を備えるストレージステムであって、
前記第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシが、前記第１のホストインタフェースから前記第２のキャッシュメモリに対するレイテンシよりも小さく、
前記第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシが、前記第２のホストインタフェースから前記第１のキャッシュメモリに対するレイテンシよりも小さく、
前記第１及び第２のキャッシュメモリの各々は、前記第１のプロセッサと対応付けられており前記第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第１のプロセッサにより一時的に格納される第１の区画と、前記第２のプロセッサと対応付けられており前記第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第２のプロセッサにより一時的に格納される第２の区画とを有し、
前記第１及び第２のプロセッサの内の少なくとも１つは、前記第１のキャッシュメモリの第１の区画のサイズと、前記第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、前記第１のキャッシュメモリの第２の区画のサイズと、前記第２のキャッシュメモリの第２の区画のサイズとを独立に制御する
ストレージシステム。
（表現２）
前記第１のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れの区画にも存在しない場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第１のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れの区画にも存在しない場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第２のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１のキャッシュメモリの第１の区画に対するデータの格納頻度に応じて、前記第１のキャッシュメモリの第１の区画のサイズを変更し、
前記第２のキャッシュメモリの第２の区画に対するデータの格納頻度に応じて、前記第２のキャッシュメモリの第２の区画のサイズを変更する
表現１に記載のストレージシステム。
（表現３）
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１又は第２のキャッシュメモリ内の第１の区画のサイズを拡大する場合、同一キャッシュメモリ内の第２の区画のサイズを縮小し、
前記第１又は第２のキャッシュメモリ内の第２の区画のサイズを拡大する場合、同一キャッシュメモリ内の第１の区画のサイズを縮小する
表現２に記載のストレージシステム。
（表現４）
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における前記第１の区画に対するデータの格納頻度と前記第２の区画に対するデータの格納頻度とを比較し、格納頻度の大きい方の区画のサイズを拡大する
表現２又は３に記載のストレージシステム。
（表現５）
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における第１の区画に対するデータの格納頻度と第２の区画に対するデータの格納頻度とに基づいて、当該キャッシュメモリ内における第１及び第２の区画の目標のサイズを決定し、
当該キャッシュメモリ内における第１及び第２の区画のサイズを、それぞれ、その決定した第１及び第２の区画の目標のサイズに近づくように変更する
表現２乃至４の何れか１つに記載のストレージシステム。
（表現６）
前記第１及び第２のプロセッサの内の少なくとも１つは、
同一キャッシュメモリ内における第１の区画に対するデータの格納頻度と第２の区画に対するデータの格納頻度との差分が所定の閾値以上の場合、格納頻度の大きい方の区画のサイズが拡大され、格納頻度の小さい方の区画のサイズが縮小されるように、当該キャッシュメモリ内における第１及び第２の区画の目標のサイズを決定する
表現５に記載のストレージシステム。
（表現７）
各区画には、前記キャッシュメモリのアクセス単位であるセグメントが複数割り当てられており、
各キャッシュメモリは、何れの区画にも割り当てられてないセグメントである共有フリーセグメントを複数有し、
前記キャッシュメモリ内の区画のサイズを拡大することは、同一キャッシュメモリ内の共有フリーセグメントを当該区画に割り当てることであり、
前記キャッシュメモリ内の区画のサイズを縮小することは、当該区画に割り当てられているセグメントの割当を解除し、同一キャッシュメモリ内の共有フリーセグメントに変更することである
表現２乃至６の何れか１つに記載のストレージシステム。
（表現８）
前記第１のホストインタフェースがホスト計算機からライト要求を受領した場合、前記第１及び第２のプロセッサの内の当該ライト要求を処理するライト実行プロセッサは、当該ライト要求に係るデータを、前記第１及び第２のキャッシュメモリの当該ライト実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からライト要求を受領した場合、前記第１及び第２のプロセッサの内の当該ライト要求を処理するライト実行プロセッサは、当該ライト要求に係るデータを、前記第１及び第２のキャッシュメモリの当該ライト実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの少なくとも１つは、
各キャッシュメモリの区画毎に、前記記憶ドライブに未格納なデータを有するダーティセグメントと、前記記憶ドライブに格納済みのデータを有するクリーンセグメントと、新規データを格納可能なフリーセグメントと、を管理し、
キャッシュメモリ毎に、共有フリーセグメントを管理する
表現７に記載のストレージシステム。
（表現９）
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記キャッシュメモリにおける共有フリーセグメントの数が閾値以下の場合、当該キャッシュメモリ内におけるサイズの縮小対象の区画のフリーセグメントを、共有フリーセグメントに変更する
表現８に記載のストレージシステム。
（表現１０）
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記キャッシュメモリ内におけるサイズの縮小対象の区画にフリーセグメントが存在しない場合、当該区画のダーティセグメント又はクリーンセグメントを、フリーセグメントに変更する
表現９に記載のストレージシステム。
（表現１１）
各区画には、前記キャッシュメモリのアクセス単位であるセグメントが複数割り当てられており、
各キャッシュメモリは、何れの区画にも割り当てられてないセグメントである共有フリーセグメントを複数有し、
前記第１及び第２のプロセッサの少なくとも１つは、
各キャッシュメモリの区画毎に、前記記憶ドライブに未格納なデータを有するダーティセグメントと、前記記憶ドライブに格納済みのデータを有するクリーンセグメントと、新規データを格納可能なフリーセグメントと、を管理し、
キャッシュメモリ毎に、共有フリーセグメントを管理する
前記キャッシュメモリ内の区画のサイズを拡大することは、同一キャッシュメモリ内の共有フリーセグメントを、当該区画にフリーセグメントとして割り当てることであり、
前記キャッシュメモリ内の区画のサイズを縮小することは、当該区画に割り当てられているクリーンセグメント又はフリーセグメントを、同一キャッシュメモリ内の共有フリーセグメントに変更することである
表現１乃至６の何れか１つに記載のストレージシステム。
（表現１２）
第１及び第２のプロセッサと、
第１及び第２のキャッシュメモリと、
ホスト計算機と双方向通信可能に接続されている第１及び第２のホストインタフェースと、
記憶ドライブと
を備える計算機における記憶制御方法であって、
前記第１のホストインタフェースから第１のキャッシュメモリに対するレイテンシが、前記第１のホストインタフェースから前記第２のキャッシュメモリに対するレイテンシよりも小さく、
前記第２のホストインタフェースから第２のキャッシュメモリに対するレイテンシが、前記第２のホストインタフェースから前記第１のキャッシュメモリに対するレイテンシよりも小さく、
前記第１及び第２のキャッシュメモリの各々は、前記第１のプロセッサと対応付けられており前記第１のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第１のプロセッサにより一時的に格納される第１の区画と、前記第２のプロセッサと対応付けられており前記第２のプロセッサにより処理されるＩ／Ｏ要求に関するデータが前記第２のプロセッサにより一時的に格納される第２の区画とを有し、
前記第１及び第２のプロセッサの内の少なくとも１つは、前記第１のキャッシュメモリの第１の区画のサイズと、前記第２のキャッシュメモリの第１の区画のサイズとを独立に制御し、前記第１のキャッシュメモリの第２の区画のサイズと、前記第２のキャッシュメモリの第２の区画のサイズとを独立に制御する
記憶制御方法。
（表現１３）
前記第１のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れかの区画に存在するか否かを判定し、何れの区画にも存在しないと判定した場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第１のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第２のホストインタフェースがホスト計算機からリード要求を受領した場合、前記第１及び第２のプロセッサの内の当該リード要求を処理するリード実行プロセッサは、当該リード要求に係るデータが、前記第１及び第２のキャッシュメモリの当該リード実行プロセッサと対応付けられている何れかの区画に存在するか否かを判定し、何れの区画にも存在しないと判定した場合、当該リード要求に係るデータを前記記憶ドライブからリードし、そのリードしたデータを前記第２のキャッシュメモリ内の当該リード実行プロセッサと対応付けられている区画に一時的に格納し、
前記第１及び第２のプロセッサの内の少なくとも１つは、
前記第１のキャッシュメモリの第１の区画に対するデータの格納頻度に応じて、前記第１のキャッシュメモリの第１の区画のサイズを変更し、
前記第２のキャッシュメモリの第２の区画に対するデータの格納頻度に応じて、前記第２のキャッシュメモリの第２の区画のサイズを変更する
表現１２に記載の記憶制御方法。
【符号の説明】
【０２３８】
２：ストレージシステム  ４：ホスト計算機  １１：ストレージコントローラ  １２：プロセッサ  １３：メモリ  １８：ドライブ  １９：プロセッサ間パス  ３２：コントローラ間パス
【図１】
2016181562.tif 000003
【図２】
2016181562.tif 000004
【図３】
2016181562.tif 000005
【図４】
2016181562.tif 000006
【図５】
2016181562.tif 000007
【図６】
2016181562.tif 000008
【図７】
2016181562.tif 000009
【図８】
2016181562.tif 000010
【図９】
2016181562.tif 000011
【図１０】
2016181562.tif 000012
【図１１】
2016181562.tif 000013
【図１２】
2016181562.tif 000014
【図１３】
2016181562.tif 000015
【図１４】
2016181562.tif 000016
【図１５】
2016181562.tif 000017
【図１６】
2016181562.tif 000018
【図１７】
2016181562.tif 000019
【図１８】
2016181562.tif 000020
【図１９】
2016181562.tif 000021
【図２０】
2016181562.tif 000022
【図２１】
2016181562.tif 000023
【図２２】
2016181562.tif 000024
【図２３】
2016181562.tif 000025
【図２４】
2016181562.tif 000026
【図２５】
2016181562.tif 000027
【国際調査報告】
2016181562.tif 000028
2016181562.tif 000029
2016181562.tif 000030
2016181562.tif 000031