(57)【特許請求の範囲】
【請求項１】
ホスト計算機からの記憶装置に対するデータ入出力要求を制御する計算機システムであって、
第１のマイクロプロセッサと第１のローカルメモリとを有し、前記入出力要求を処理する第１の制御部と、
第２のマイクロプロセッサと第２のローカルメモリとを有し、前記入出力要求を処理する第２の制御部と、
複数のセグメントを含むキャッシュメモリを有する共有メモリ部と、
を備え、
前記第１のマイクロプロセッサは、前記複数のセグメントのうちの第１の集合を前記第１の制御部に割り当て、前記第２のマイクロプロセッサは、前記複数のセグメントのうちの第２の集合を前記第２の制御部に割り当て、
前記共有メモリ部は、前記複数のセグメントのうち、前記第１の制御部に割り当てられておらず、かつ、前記第２の制御部に割り当てられていないセグメントを共有状態として管理し、
前記第１の制御部は、
前記第１のローカルメモリに、前記複数のセグメントのうち前記第１の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第１の制御部に割り当て済みの前記セグメント数を設定し、前記第１の制御部に割り当てられるべき前記セグメント数の目標値と、前記第１の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも小さい場合、前記第１の制御部に割り当てられた前記第１の集合のうち、データを書き込むことが出来る属性を持ったセグメントを前記第１の制御部から解放し、当該解放したセグメントを前記共有状態とし、
前記第２の制御部は、
前記第２のローカルメモリに、前記複数のセグメントのうち前記第２の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第２の制御部に割り当て済みの前記セグメント数を設定し、前記第２の制御部に割り当てられるべき前記セグメント数の目標値と、前記第２の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも大きい場合、前記複数のセグメントのうち前記共有状態のセグメントを、前記第２の制御部に割り当てる、
計算機システム。
【請求項２】
複数の制御部は、各々ローカルメモリを有し、
記憶装置の記憶領域を論理化して、これを複数の論理領域に分割してホスト計算機に提供し、
前記共有メモリは、前記複数の論理領域に対する前記入出力要求の処理を前記複数の制御部に分担させて管理する論理領域管理テーブルを含む制御情報を有し、
前記制御部は、前記ローカルメモリの各々に、前記論理領域管理テーブルのうち、当該ローカルメモリに対応する前記制御部に割り当てられた前記複数の論理領域に対する管理情報を、前記共有メモリからコピーし、
前記共有メモリは、前記複数のセグメントと前記複数の論理領域との第１の対応関係テーブルと、前記複数のセグメントの共有状態を管理する第２の対応関係テーブルと、前記複数のセグメントの前記複数の制御部への割り当てを管理する第３の対応関係テーブルと、を備え、
前記複数のローカルメモリの各々は、前記第１の対応関係テーブルのうち当該ローカルメモリに対応する前記制御部に割り当てられる情報を記録し、
前記制御部は、前記２の対応関係テーブルの情報に基づいて、前記入出力要求の対象となった前記論理領域に対応する前記セグメントを判定して当該セグメントにアクセスし、前記データを書き込むことができる属性を持った前記セグメントを、前記他の制御部に割り当て可能な共有状態になるように、当該セグメントの割り当てを、前記第３の対応関係テーブルから解放して、さらに、前記第２の対応関係テーブルに登録し、
前記制御部は、前記複数の制御部のそれぞれのローカルメモリに、前記複数のセグメントのうち当該制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、割り当て済みの前記セグメント数を設定し、前記目標値と前記割り当て済みのセグメント数とを比較し、前記目標値が前記割り当て数より大きいことを判定すると、前記第２の対応関係テーブルから前記共有状態にあるセグメントを当該第２の対応関係テーブルから解放し、当該セグメントを前記第３の対応関係テーブルに登録し、前記目標値が前記割り当て数より小さいことを判定すると、前記第３の対応関係テーブルから当該セグメントを解放し、これを前記第２の対応関係テーブルに登録する、
請求項１記載の計算機システム。
【請求項３】
前記第１の制御部は第１のローカルメモリを有し、前記第２の制御部は第２のローカルメモリを有し、
前記共有メモリ部は共有メモリを有し、
前記第１の制御部と前記２の制御部とは、前記記憶装置の記憶領域を論理化して、これを複数の論理領域に分割してホスト計算機に提供し、
前記共有メモリは、前記複数の論理領域に対する前記入出力要求の処理の前記第１制御部と前記第２制御部間の分担を管理する論理領域管理テーブルを含む制御情報を有し、
前記第１の制御部は、前記第１のローカルメモリに、前記論理領域管理テーブルのうち、前記第１の制御部に割り当てられた前記複数の論理領域に対する管理情報を、前記共有メモリからコピーし、
前記第２の制御部は、前記第２のローカルメモリに、前記論理領域管理テーブルのうち、前記第２の制御部に割り当てられた前記複数の論理領域に対する管理情報を、前記共有メモリからコピーする、
請求項１記載の計算機システム。
【請求項４】
前記共有メモリは、前記複数のセグメントと前記複数の論理領域との第１の対応関係テーブルと、前記複数のセグメントの共有状態を管理する第２の対応関係テーブルと、前記複数のセグメントの前記複数の制御部への割り当てを管理する第３の対応関係テーブルと、を備え、
前記第１のローカルメモリは、前記第１の対応関係テーブルのうち前記第１の制御部に割り当てられる情報を記録し、
前記第１の制御部は、前記第２の対応関係テーブルの情報に基づいて、前記入出力要求の対象となった前記論理領域に対応する前記セグメントを判定して当該セグメントにアクセスし、前記データを書き込むことができる属性を持った前記セグメントを、前記共有状態になるように、当該セグメントの割り当てを、前記第３の対応関係テーブルから解放して、さらに、前記第２の対応関係テーブルに登録する、
請求項３記載の計算機システム。
【請求項５】
前記マイクロプロセッサは、
前記データが書き込まれる属性を持ったセグメントの目標値と、当該セグメントの割り当て数と、を比較し、
前記目標値が前記割り当て数より大きいことを判定すると、前記第２の対応関係テーブルから前記共有状態にあるセグメントを当該第２の対応関係テーブルから解放し、当該セグメントを前記第３の対応関係テーブルに登録し、
前記目標値が前記割り当て数より小さいことを判定すると、前記第３の対応関係テーブルから当該セグメントを解放し、これを前記第２の対応関係テーブルに登録する、
請求項４記載の計算機システム。
【請求項６】
前記マイクロプロセッサは、前記キャッシュメモリの全てのセグメント数を複数の制御部の全数で均等割りして得た値を、前記目標値として、各制御部に対して設定する、
請求項４記載の計算機システム。
【請求項７】
前記マイクロプロセッサは、前記複数の制御部に対してクリーンデータのＬＲＵを比較し、当該比較結果に基づいて、前記複数の制御部の少なくとも一つのマイクロプロセッサの前記目標値を変更する、
請求項６記載の計算機システム。
【請求項８】
前記制御部は前記ＬＲＵが最小の制御部と、前記ＬＲＵが最大の制御部とを特定し、
前記ＬＲＵが最小の制御部の前記目標値を減らし、
前記ＬＲＵが最大の制御部の前記目標値を増加させる、
請求項７記載の計算機システム。
【請求項９】
前記マイクロプロセッサは、前記複数の制御部に対して、データがダーディデータであるセグメントの割合を求めてこれらを比較し、当該比較結果に基づいて、複数の前記制御部の少なくとも一つの制御部の前記目標値を変更する、
請求項６記載の計算機システム。
【請求項１０】
前記マイクロプロセッサは、前記複数の制御部に対してクリーンデータのＬＲＵを比較し、
前記ダーティデータであるセグメントの割合に対する比較と、前記ＬＲＵに対する比較とに基づいて、前記複数の制御部の少なくとも一つの制御部の前記目標値を変更する、
請求項９記載の計算機システム。
【請求項１１】
第１のマイクロプロセッサと第１のローカルメモリとを有し、前記入出力要求を処理する第１の制御部と、
第２のマイクロプロセッサと第２のローカルメモリとを有し、前記入出力要求を処理する第２の制御部と、
複数のセグメントを含むキャッシュメモリを有する共有メモリ部と、
を備える計算機システムの負荷均等化方法において、
前記複数のセグメントのうちの第１の集合を前記第１の制御部に割り当て、前記複数のセグメントのうちの第２の集合を前記第２の制御部に割り当て、
前記複数のセグメントのうち、前記第１の制御部に割り当てられておらず、かつ、前記第２の制御部に割り当てられていないセグメントを共有状態として管理し、
前記第１のローカルメモリに、前記複数のセグメントのうち前記第１の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第１の制御部に割り当て済みの前記セグメント数を設定し、前記第１の制御部に割り当てられるべき前記セグメント数の目標値と、前記第１の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも小さい場合、前記第１の制御部に割り当てられた前記第１の集合のうち、データを書き込むことが出来る属性を持ったセグメントを前記第１の制御部から解放し、当該解放したセグメントを前記共有状態として管理し、
前記第２のローカルメモリに、前記複数のセグメントのうち前記第２の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第２の制御部に割り当て済みの前記セグメント数を設定し、前記第２の制御部に割り当てられるべき前記セグメント数の目標値と、前記第２の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも大きい場合、前記複数のセグメントのうち前記共有状態のセグメントを、前記第２の制御部に割り当てる、
計算機システムの負荷均等化方法。
【請求項１２】
データの入出力制御用に、第１のマイクロプロセッサと第１のローカルメモリとを有し、前記入出力要求を処理する第１の制御部と、
データの入出力制御用に、第２のマイクロプロセッサと第２のローカルメモリとを有し、前記入出力要求を処理する第２の制御部と、
複数のセグメントを含むキャッシュメモリと、共有メモリとを有する共有メモリ部と、
を備える計算機システムの負荷均等化方法において、
前記記憶装置の記憶領域を論理化して、これを複数の論理領域に分割してホスト計算機に提供し、
前記複数の論理領域に対する前記入出力要求の処理の前記第１制御部と前記第２制御部分担を管理する論理領域管理テーブルを含む制御情報を有し、
前記第１のローカルメモリに、前記論理領域管理テーブルのうち、前記第１の制御部に割り当てられた前記複数の論理領域に対する管理情報を、前記共有メモリからコピーし、
前記第２のローカルメモリに、前記論理領域管理テーブルのうち、前記第２の制御部に割り当てられた前記複数の論理領域に対する管理情報を、前記共有メモリからコピーし、
前記複数のセグメントのうちの第１の集合を前記第１の制御部に割り当て、前記複数のセグメントのうちの第２の集合を前記第２の制御部に割り当て、
前記複数のセグメントのうち、前記第１の制御部に割り当てられておらず、かつ、前記第２の制御部に割り当てられていないセグメントを共有状態として管理し、
前記第１のローカルメモリに、前記複数のセグメントのうち前記第１の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第１の制御部に割り当て済みの前記セグメント数を設定し、前記第１の制御部に割り当てられるべき前記セグメント数の目標値と、前記第１の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも小さい場合、前記第１の制御部に割り当てられた前記第１の集合のうち、前記データを書き込むことが出来る属性を持ったセグメントを前記第１の制御部から解放し、当該解放したセグメントを前記共有状態として管理し、
前記第２のローカルメモリに、前記複数のセグメントのうち前記第２の制御部に割り当てられるべき前記セグメント数の目標値を設定し、さらに、前記第２の制御部に割り当て済みの前記セグメント数を設定し、前記第２の制御部に割り当てられるべき前記セグメント数の目標値と、前記第２の制御部に割り当て済みのセグメント数とを比較し、当該目標値が当該割り当て済みセグメント数よりも大きい場合、前記複数のセグメントのうち前記共有状態のセグメントを、前記第２の制御部に割り当てる、
計算機システムの負荷均等化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザ装置にデータストレージサービスを提供する計算機システム及びその負荷制御方法に関するものである。
【背景技術】
【０００２】
この種の計算機システムは、ユーザ側にあるホスト計算機などの上位装置と、上位装置に対してデータストレージ処理を実現するストレージシステムと、を備えている。そして、ストレージシステムは、データを記憶するストレージと、記憶装置とホスト計算機との間のデータの入出力要求を処理するストレージサブシステムとを備えている。
【０００３】
ストレージサブシステムは、論理的な記憶領域を、ホスト計算機からの入出力対象として管理しており、ストレージサブシステム内のコントローラが、論理ボリュームへのデータ書込み処理と、論理ボリュームからのデータの読み出し処理を行っている。
【０００４】
ストレージサブシステムには、複数のコントローラを備えるタイプのものがある。ストレージサブシステムは、複数のコントローラ間でデータ処理に伴う負荷を均等にさせるために、複数の論理ボリュームに対するデータ入出力処理を複数のコントローラに分担させている。
【０００５】
すなわち、ストレージサブシステムの管理者は、データストレージサービスの運用開始前に、コントローラがデータ入出力処理を担当する論理ボリュームに関する割り当てを、予めストレージサブシステムの制御メモリに設定するようにしていた。
【０００６】
そして、データストレージサービスの運用を開始した後、ストレージサブシステムは、複数のコントローラの間で負荷が不均一になると、負荷が集中しているコントローラが有している論理ボリュームに対する制御・処理権限を、他のコントローラに移行できるようにしている（特開２００８−２６９４２４号公報）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２６９４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ストレージシステムは、移行先コントローラが移行元コントローラから引き継いだ論理ボリュームに対する入出力制御を継続できるようにするために、移行元コントローラに対する制御情報、例えば、LDEV構成情報、キャッシュメモリのセグメントに関するディレクトリ情報を、移行元コントローラから移行先コントローラに割り当て直していた。
【０００９】
ところで、ストレージサブシステムが、コントローラにとってデータ入出力処理を行う上で必要とされる制御情報を、共有メモリからコントローラのローカルメモリに移動させて、コントローラが制御情報に迅速にアクセスできるようにすると、移行先コントローラに属する制御情報を他のコントローラが参照できないため、制御情報が複数のコントローラ間で不均衡になるという課題があった。
【００１０】
この結果、特開２００８−２６９４２４号公報記載のように、負荷が集中しているコントローラが有している論理ボリュームに対する制御権限を、他のコントローラに移行して、複数のコントローラ間で負荷を均等しようとしても、この負荷均等化処理によって、結果的に、例えば、キャッシュメモリのセグメントの割り当てが少なくなってしまったコントローラは、ホスト計算機からのアクセスに対する処理を遅延させてしまうおそれがあった。
【００１１】
したがって、従来の負荷分散技術は、ストレージシステム全体における入出力処理のパフォーマンスを十分に達成できないという課題があった。
【００１２】
そこで、この発明は、データの入出力制御用に複数のコントローラを有する計算機システムにおいて、プロセッサの制御権限を他のプロセッサに移行し、そして、計算機システムが、コントローラがデータ入出力処理を行う上で必要な制御情報を、共有メモリからコントローラのローカルメモリに移動させても、複数のコントローラ間でデータの入出力制御に必要な制御機能の割り当てに不均衡が生じないようにした計算機システム、及び、その負荷均等化方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１３】
そこで、この目的を達成するために、この発明は、データの入出力制御用に複数のコントローラを有する計算機システムにおいて、コントローラの制御権限を他のコントローラに移行し、そして、コントローラがデータ入出力処理を行う上で必要な制御情報を、共有メモリからコントローラのローカルメモリに移動させても、複数のコントローラ間でデータの入出力制御に必要な制御機能の割り当てに不均衡が生じないように、前記コントローラから必要な制御機能を解放し、解放した制御機能を他のコントローラに割り当てるようにしたことを特徴とするものである。
【発明の効果】
【００１４】
この発明は、データの入出力制御用に複数のコントローラを有する計算機システムにおいて、プロセッサの制御権限を他のプロセッサに移行し、そして、計算機システムが、コントローラがデータ入出力処理を行う上で必要な制御情報を、共有メモリからコントローラのローカルメモリに移動させても、複数のコントローラ間でデータの入出力制御に必要な制御機能の割り当てに不均衡が生じないようにした計算機システム、及び、その負荷均等化方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明に係る計算機システムの実施形態を説明するためのハードウエアブロック図である。
【図２】図１の計算機システムのコントローラの構成例を示す図である。
【図３】コントローラの論理的な構成例を示すブロック図である。
【図４】メモリパッケージの論理的な構成例を示すブロック図である。
【図５】制御情報のローカル化の概念を示すブロック図である。
【図６】キャッシュディレクトリとキャッシュセグメント管理ブロックの構造を示すブロック図である。
【図７Ａ】クリーンキュー管理情報の構造を示すブロック図である。
【図７Ｂ】ダーティキュー管理情報の構造を示すブロック図である。
【図７Ｃ】フリーキュー管理情報の構造を示すブロック図である。
【図８】コントローラへの配置済みフリーセグメント数を管理する情報の構造を示す管理テーブルである。
【図９Ａ】MPPKフリーセグメント管理情報の管理テーブルの一例である。
【図９Ｂ】共有フリーセグメント管理情報である。
【図１０Ａ】CMセグメント割当てを示すブロック図である。
【図１０Ｂ】セグメント配置の例を示すブロック図である。
【図１１】ストレージサブシステムにフリーセグメントを初期配置する処理を説明するためのフローチャートである。
【図１２】フリーセグメント配置処理を説明するフローチャートである。
【図１３】コントローラのフリーセグメントを解放する処理を説明するフローチャートである。
【図１４】コントローラにフリーセグメントを確保する処理を説明するフローチャートである。
【図１５】ストレージサブシステムの構成変更時の目標値再設定処理を説明するフローチャートである。
【図１６】閉塞したコントローラを検出する処理を説明するフローチャートである。
【図１７】セグメントの配置状況を確認するための画面を示すブロック図である。
【図１８】本発明の第２の実施形態に係るコントローラの論理的な構成例を示す図である。
【図１９】ホスト計算機からリードコマンドが発行された場合にストレージサブシステムが実行するリード処理の一例を示すフローチャートである。
【図２０】ホスト計算機からライトコマンドが発行された場合にストレージサブシステムが実行するライト処理の一例を示すフローチャートである。
【図２１】ホスト計算機からのアクセスコマンドに対して、ストレージサブシステムがキャッシュセグメントを割り当てる処理の一例を示すフローチャートである。
【図２２】キュー遷移に基づいて各コントローラに配置するセグメント数をチューニングする処理の一例を示すフローチャートである。
【図２３】ダーティ率に基づいて各コントローラに配置するセグメント数をチューニングする処理の一例を示すフローチャートである。
【図２４】各コントローラでのフリーセグメントの目標値を自動調整する経過を表示する画面を示すブロック図である。
【図２５】各コントローラでのフリーセグメントの目標値を手動でチューニングするための操作画面を説明するブロック図である。
【図２６】ホストI/Fの論理的な構成例を示すブロック図である。
【図２７Ａ】パス管理テーブルの構造を示すブロック図である。
【図２７Ｂ】LDEV番号対応テーブルの構造を示すブロック図である。
【図２８Ａ】フリーセグメントを複数のコントローラ間で移行する動作の概要を説明するブロック図である。
【図２８Ｂ】フリーセグメントを、共有状態を介して複数のコントローラ間で移行する動作の概要を説明するブロック図である。
【発明を実施するための形態】
【００１６】
次に本発明の実施形態を、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に記載された発明を限定するものではなく、当業者によって適宜可能なものである。
【００１７】
図1は本発明に係る記憶制御システムの構成例を示すブロック図である。符号100000はホスト計算機200000に対してデータストレージサービスを提供するストレージシステムである。
【００１８】
ストレージシステムは、データストレージ処理におけるコントローラ部としてのストレージサブシステム110000と、記憶装置部170000と、サービスプロセッサ（SVP）180000と、を備えている。
【００１９】
ストレージサブシステム110000において、符号120000はマイクロプロセッサーを含むコントロールユニットとしてのマイクロプロセッサーパッケージ（MPPK）である。MPPKは、一つ以上のマイクロプロセッサー（MP）121000と、一つ以上のローカルメモリ（LM）122000と、を備えている。LMはMPに必要な制御情報を有している。
【００２０】
符号130000は、制御情報の格納領域、及び、ユーザデータの一時格納領域としてキャッシュメモリパッケージ（以下、CMPK、と略称する。）、符号140000は内部ネットワーク、符号150000は一つ以上のホストI/F（インターフェース）、符号160000は一つ以上のディスクI/F、符号170000は複数の記憶装置171000を有する記憶装置部170000である。
【００２１】
記憶制御システムは、ストレージシステム100000と、ホスト計算機200000とを外部ネットワーク300000によって接続している。ストレージシステム100000は、データのリード（読み出し）やライト（書き込み）を行う1以上のホスト計算機200000と外部ネットワーク300000を介して接続される。
【００２２】
外部ネットワークとしては、SAN（Storage  Area  Network）、LAN（Local  Area  Network）、インターネット、専用回線、公衆回線等であってもよく、データ通信を行うことのできるネットワークであればよい。
【００２３】
また、ネットワークにおけるプロトコルとしては、ファイバチャネルプロトコルや、TCP/IPプロトコルであってもよく、ホスト計算機200000とストレージシステム100000との間でデータのやり取りが可能なプロトコルであれば、任意のプロトコルであってよい。
【００２４】
ホスト計算機200000は、ストレージシステム100000に対してデータの書き込みまたは読み込みを行うため、Ｉ／Ｏ（Input/Output）要求をストレージシステム100000に対して送信する。Ｉ／Ｏ要求は、例えば、ＳＣＳＩ（Small  Computer  System  Interface）のコマンド等であり、リード／ライトの区別を示す情報と、アクセス対象の装置を指し示すＳＣＳＩのポート番号と、ＬＵＮ（Logical  Unit  Number）、およびアクセス対象領域を指し示すＬＢＡ（Logical  Block  Address）などを含む。
【００２５】
ホストI/F150000は、外部ネットワーク300000に接続される。ホストI/F150000は、例えば、ＦＣのポートである。図示していないが、ホストI/F150000は、データ転送プロセッサを有する。データ転送プロセッサは、CMPK130000からホスト計算機200000へデータを転送する。
【００２６】
ホストI/F150000は、図２６に示すように、MPPK120000とLDEVとの対応関係の情報を管理するパス管理情報151000を保持するためのホストＩ／Ｆバッファメモリを有する。
【００２７】
ディスクI/F160000は、記憶装置部170000内の複数の記憶装置171000に接続している。ディスクI/F160000は、例えばＦＣ（Fibre  Channel）のポートである。図示していないが、ディスクI/F160000は、データ転送プロセッサを有し、データ転送プロセッサは、記憶装置171000とCMPK130000との間でのデータ転送を制御する。
【００２８】
記憶装置部170000内の複数の記憶装置171000は、全て同種類のものであってもよいし、異なる種類が混在したものであってもよい。記憶装置171000として可能なものは、ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）、テープ型記憶装置（例えば、磁気テープドライブ）などである。
【００２９】
ストレージサブシステム110000は、複数の記憶装置171000の記憶空間を基に1または複数の論理ボリュームを形成し、これをLDEV（Logical  Devise）としてホスト計算機200000に提供することができる。
【００３０】
例えば、ストレージサブシステム110000は、複数の記憶装置171000のうちの２以上の記憶装置171000からRAID（Redundant  Array  of  Independent  Disks）グループを構成し、そのRAIDグループの記憶空間にLDEVを設定する。複数のLDEVの各々には、LDEV番号対応テーブル131600（後に説明する図２７B）により、ホスト計算機が認識するLUNが設定されている。
【００３１】
ストレージサブシステム110000の制御部は、図２に示す様に、複数のMPPK12000を有しており、パス管理テーブル151000によって、LDEV毎に、LDEVに対するＩ／Ｏ処理を担当するMPPK120000（「担当MPPK」）が設定されている。LDEVに対する入出力処理を担当するMPPKの権限を、LDEVオーナ権と名付ける。LDEV番号対応テーブル131600は、ストレージ管理者によってCMPK130000の制御情報格納領域に記憶される。
【００３２】
図２７Ａに示すパス管理テーブル151000は、LUNフィールドと、MPPK番号（MPPK#）フィールドとを含むエントリを有する。パス管理エーブルには、ホストI/F150000に対して指定可能なLUNの数分のエントリを有している。
【００３３】
LUNフィールドには、ホスト計算機がLDEVを参照するためのパス名（識別情報）が格納される。LUNフィールドには、例えば、ホスト計算機との間の通信でＳＣＳＩ規格を用いている場合には、ロジカルユニット番号が格納される。
【００３４】
一つの同じLDEVに対して複数のLUNが定義されてもよい。各MPPKは、LDEV番号対応テーブル131600と、CMPK130000に一時格納されたホスト計算機のアクセスに含まれるLUNと、を参照して、当該アクセスを自身が処理すべきかどうかを判定する。
【００３５】
図1に戻り説明を続けると、サービスプロセッサ（SVP）180000は、ストレージシステム100000の保守あるいは管理を行うための装置である。サービスプロセッサ（SVP）180000は、例えば、ノート型のパーソナルコンピュータなどの計算機であり、各MP121000の構成情報を設定したり、ストレージサブシステム110000の構成変更に関する設定を実行したり、ストレージサブシステム110000内のMPPK120000等のパッケージに障害が発生したときに、他のMPPKが障害箇所を使用しないように、例えば、パッケージの閉塞などMPPKに関する構成情報の変更など種々の処理を実行する。
【００３６】
内部ネットワーク140000は、MPPK120000、CMPK130000、ホストI/F150000、ディスクI/F160000に接続している。内部ネットワーク140000は、これら複数の要素のうちのどの要素とどの要素とを接続するかの切り替えを行うものであり、例えば、LSI（Large  Scale  Integration）によって実現される。また、バスによって実現されてもよい。
【００３７】
図２は、ストレージサブシステム110000の詳細なブロック図である。図２は、MPPK120000とCMPK130000とがそれぞれ複数備えること、そして、各パッケージの詳細な構成を示している。
【００３８】
CMPK130000は、制御情報を記録する共有メモリ部（SM：Shared  Memory）131000とキャッシュメモリ部（CM）を備え、内部ネットワーク140000によって、MPPKに接続している。CMPKは、揮発性のメモリ、たとえばDRAM（Dynamic  Random  Access  Memory）である。このSM131000とCM132000は、物理的に異なるDRAMから構成されても、物理的に同じDRAMを論理的に分割されることによって構成されてもよい。
【００３９】
CM132000は、記憶装置171000に格納されたホストデータに対するアクセス高速化のために一般的に用いられるキャッシュメモリであり、記憶装置171000に格納されたホストデータの一部を一時的に格納することにより、ホスト計算機200000から頻繁に入出力されるデータに対して、MPK120000が高速にアクセスすることを可能にしている。
【００４０】
CM132000は、メモリ空間を、固定長のセグメントに分割して管理する。このセグメントをキャッシュセグメント（CMセグメント）と呼ぶ。キャッシュセグメントのサイズは、任意のサイズである。例えば、1セグメントサイズは4KB（キロバイト）である。
【００４１】
また、ストレージサブシステム110000は、キャッシュ領域を論理的に分割し、分割した領域ごとに、セグメントのサイズを可変にしてもよい。
【００４２】
SM131000には、CM132000をMPが制御するためのキャッシュ制御情報が格納されている。キャッシュ制御情報は前述のCMセグメントを管理するための情報である。CMキャッシュセグメントの管理構造は後述の図６に示すとおりである。
【００４３】
ストレージシステム100000において、ストレージサブシステム110000内のMPPK120000、CMPK130000、ホストI/F150000などの各構成要素を管理するための構成情報は、SM131000に制御情報として格納される。キャッシュ制御情報と構成情報とを総称して、制御情報、と言うこととする。
【００４４】
MPPK120000は、１以上のMP121000と1以上のLM122000とを備えており、これらは内部バスによって接続されている。
【００４５】
内部ネットワーク140000を介することで、MPPK120000の各MP121000は、他のMPPK120000、CMPK130000、ホストI/F150000、ディスクI/F160000のいずれとも通信可能になる。すなわち、CMPK130000は全MPから参照される。
【００４６】
図２７Ｂは、構成情報として、SM131000に格納されるLDEV番号対応テーブルの例である。LDEV番号対応テーブル131600には、I/F番号（I/F＃）フィールド131610と、LUNフィールド131620と、LDEV番号（LDEV＃）フィールド131630とからなるエントリが格納されている。
【００４７】
I/F＃フィールド131610には、ホストI/F150000の識別番号が格納される。LUNフィールド131620には、ホスト計算機200000がLDEVを参照するために指定する論理ユニット番号が格納される。LDEV＃フィールド131630には、同じエントリのI/F番号が受信した、同じエントリのLUNに対応するLDEVの識別情報（LDEV番号）が格納される。
【００４８】
このLDEV番号対応テーブルによって、MP121000は、ホストI/F150000から受け取った入出力要求に係るLUNと、入出力要求とともに受け取ったホストI/F150000の番号とに基づいて、LDEV番号を特定できる。
【００４９】
LDEV番号対応テーブル131600は、SM131000と、LM122000に格納される。SM131000に格納されるLDEV番号対応テーブル131600は、ストレージシステム100000の全てのLDEVに対応するエントリを有している。一方、LM122000に格納されるLDEV番号対応テーブル131600は、LM122000が属するMPPK120000がオーナ権を有しているLDEVに対応するエントリを有している。
【００５０】
MP121000は、自己の属するMPPK120000のLM122000のLDEV番号対応テーブル131600を参照することにより、オーナ権を有し、入出力要求の対象となるLDEV番号を迅速に特定することができる。
【００５１】
図３は、MPPKの論理的な構成の例を示すブロック図である。LM122000は、MP121000により実行される処理のプログラムやデータを記憶する領域として、あるいは、MP121000による処理に使用されているデータを格納する作業領域である。複数あるMPの各MP121000は、LM122000に格納されたプログラムを実行することにより、ホスト計算機200000からホストI/F150000を介して受信したリードコマンドやライトコマンドを処理する。MP121000が実行するリード処理及びライト処理を図１９及び図２０を用いて後に説明する。
【００５２】
MP121000は、制御情報初期設定処理121100、フリーセグメント再配置処理121200、MPPKフリーセグメント解放処理121300、MPPKフリーセグメント確保処理121400、そして、構成変更時のフリーセグメント再配置処理と、を実行する。
【００５３】
LM122000は、キャッシュディレクトリ122100、セグメント管理ブロック（SGCB）122200、スロット属性管理情報122300、配置済みフリーセグメント数管理情報122400、MPPKフリーセグメント管理情報122500、さらに、LDEV番号対応テーブル122600と、を備えている。これらの詳細を、後述の説明の中で明らかにする。
【００５４】
図４は、CMPK130000の論理的な構成例を示すブロック図である。SM131000は、キャッシュディレクトリ131100、セグメント管理ブロック（SGCB）131200、はMPPKフリーセグメント管理情報131300、共有フリーセグメント管理情報131400、構成情報131500、さらに、LDEV番号対応テーブル131600と、を有している。CM132000はCMセグメント132100を有している。
【００５５】
図５はSM1310000の制御情報をLM122000にローカル化することを示すブロック図である。ローカル化とは、MP121000が、SM131000上の制御情報をLM122000にコピーし、同時にSM131000のローカル化した情報に、他のMPがアクセスすることを排他するロック情報を設定することをいう。
【００５６】
このように、MP121000から遠いSM131000から、MP121000と同一のパッケージ内にあるLM122000にコピーされた制御情報によって、各MPは制御情報へのアクセス時間を短縮しながら制御情報をリードすることができる。
【００５７】
なお、MPPKの障害時にLMのデータが失われないようにするために、MPはLM上の情報を更新するときは、同時にSMのデータも更新することとする。
【００５８】
ただし、LMの容量はSMと比較して小さいため、ストレージサブシステム110000はSMの制御情報の全てをLMで管理することはできない。そこで、ストレージサブシステムは、ローカル化する制御情報を、各MPPKがオーナ権を持つLDEVに関するものと、「フリー」という属性を備えるキャッシュセグメント(フリーセグメント)などキャッシュセグメントに関するものに限定する。
【００５９】
フリーセグメントとは後述のように、ダーティデータ又はクリーンデータを格納していない属性をもったCMセグメントをいう。フリーセグメントには、特定のMPPKに割り当てられる属性を持ったものと、全てのMPPKに割り当て可能であり、共有のものとしてSMにおいて管理される属性を持ったものとがある。後者を前者と区別するために、共有フリーセグメント、と名付けることとする。
【００６０】
図５に示すとおり、フリーセグメントに関連する制御情報には、セグメント管理ブロック（SGCB）、MPPKフリーセグメント管理情報と、がある。LDEVに関連する制御情報は、LDEV番号対応テーブル、キャッシュディレクトリがある。
【００６１】
これら制御情報をLM122000に存在するかSM131000に存在するかで区別する。キャッシュディレクトリについては、SMに格納されたものをSMキャッシュディレクトリ131100、LMに格納されたものをLMキャッシュディレクトリ122100と呼ぶ。
【００６２】
セグメント管理ブロック（SGCB：Segment  Control  Block）については、SMに格納されたものをセグメント管理ブロック（SM SGCB）131200と、LMに格納されたものをセグメント管理ブロック（LM SGCB）122200と呼ぶ。
【００６３】
MPPKフリーセグメント管理情報については、SMに格納されたものをMPPKフリーセグメント管理情報（SM）131300と、LMに格納されたものをMPPKフリーセグメント管理情報（LM）122500と呼ぶ。
【００６４】
LDEV番号対応テーブルについては、SMに格納されたものをLDEV番号対応テーブル（SM）131600と、LMに格納されたものをLDEV番号対応テーブル（LM）122600と呼ぶ。
【００６５】
さらに、LM122000は、LMでのみ管理される制御情報として、スロット属性管理情報122300と配置済みフリーセグメント数管理情報122400とを有している。SM13100は、SMにおいてのみ管理される制御情報として、共有フリーセグメント管理情報131400と、構成情報131500と、を有している。
【００６６】
図６はCMセグメントの管理構造の一例を示すブロック図である。CMセグメント管理構造とは、MPがスロット番号からキャッシュセグメント管理ブロック（SGCB：Segment  Control  Block）を特定するためのデータ構造である。LM122000に格納される管理構造とSM13100に格納された管理構造は同一であるため、図６では、便宜上、SMの管理構造を図示し、これを説明することとする。以後同様な場合にはこのようにする。
【００６７】
管理構造は具体的にはハッシュテーブルを利用するものであるため、キャッシュディレクトリ131100には、ハッシュテーブルを介して、SGCB131200への複数のポインタ（SGCBポインタ）が格納される。
【００６８】
スロット番号とは、LDEVを分割した管理単位であり、ホスト計算機からのコマンドで指定されているアクセス先情報、例えばLUN及びLBAから算出される。
【００６９】
スロットサイズは、例えば、CMセグメントのサイズと同じであるか、又は、CMセグメントサイズのＮ倍（Ｎは２以上の整数）である。後者の場合、セグメントアドレスには、Ｎ個のCMセグメントのそれぞれのアドレスが記述される。SGCB131200は、CMセグメントがどのスロットに割り当てられているかを管理するためのデータ構造である。
【００７０】
SGCBポインタ131100はスロット番号をハッシュ化したハッシュ値である。スロット番号は他の方式で圧縮されてもよい。
【００７１】
MPがキャッシュディレクトリたどることによって、ホスト計算機がアクセス対象とするスロット番号に関するデータがどのCMセグメントに関するものであるかが分かる。
【００７２】
ハッシュテーブルによって、スロット番号をハッシュ化したハッシュ値そのものがキャッシュディレクトリのインデックスとなるため、MPは、SGCBがキャッシュディレクトリのどこに入っているかが直ちに分かる。
【００７３】
キャッシュディレクトリは、SM131000と、LM122000に格納されている。ハッシュテーブルはLDEV毎に用意されており、SM131000に格納されるSMキャッシュディレクトリ131100は、ストレージシステム100000の全てのLDEVに対応するハッシュテーブルを有している。一方、LM122000に格納されるLMキャッシュディレクトリ122100は、LM122000の属するMPPK120000がオーナ権を有しているLDEVに対応するハッシュテーブルのみを有している。
【００７４】
セグメント管理ブロック（SGCB）は、SM131000とLM122000に格納される。SM131000に格納されるセグメント管理ブロック（SM SGCB）131200は、ストレージシステム100000内の全てのキャッシュ（CM）132000のセグメントに対応している。一方、LM122000に格納されるセグメント管理ブロック（LM SGCB）122200は、LMの属するMPPKがオーナ権を有しているキャッシュセグメントに対応する。
【００７５】
各MPPKが使用できるCMセグメント数は、各LM上の配置済フリーセグメント数管理情報122400内の目標値122410として設定される。なお、配置済フリーセグメント数管理情報122400については、図８に基づいて後述される。
【００７６】
図６に示すように、SM SGCB131200には複数種類の情報要素が記述されている。SM SGCB131200には、SGCBポインタ131210、双方向キューポインタ131220、スロット番号131230、セグメントアドレス131240、スロット属性131250、ダーティビットマップ131260、ロックワード131270、及び、キュー遷移時刻131280が記述されている。
【００７７】
SGCBポインタ131210は、既述のとおり、スロット番号をハッシュ化したハッシュ値である。
【００７８】
双方向キューポインタ131220は、後述するスロット属性のLRU（Least  Recently  Used）管理構造において、どのSGCBと論理的に繋がるかを表す値であり、双方向に繋がるため２つのポインタを有するものである。MPは、この双方向キューポインタから、あるSGCBに論理的に繋がっている２つの他のSGCBのうち、どちらがLRU側に近い方でどちらがMRU（Most  Recently  Use）側に近い方であるかを特定することができる。
【００７９】
セグメントアドレスは、CMセグメントのキャッシュメモリ内での場所を表す。スロット属性とは、スロットに対応したセグメントの属性（ダーティ、クリーン、フリー）であり、LMに存在する。“クリーン”とは、記憶装置171000に格納済みのデータ（クリーンのデータ）を記憶しているセグメントに対する属性である。
【００８０】
“ダーティ”とは、記憶装置171000に未だ格納されていないデータ（ダーティのデータ）を記憶しているセグメントに対する属性である。
【００８１】
“フリー”とは、データの格納先の候補となるセグメントに対する属性である。すなわち、MPがCMにデータを格納する場合には、複数のセグメントの中から、セグメントの属性が“フリー”であるセグメントを選択してデータを一時格納し、その格納されたデータに対する制御ステイタスの相違によって、データが格納されたセグメントの属性が、“フリー”から、その後“クリーン”或いは“ダーティ”に変更される。
【００８２】
MPは、セグメントの属性が“クリーン”である複数のセグメントから、フリー化しても良いセグメントを選択し、選択されたセグメントのサブ領域の属性を、“クリーン”から“フリー”に変更する。これを“フリー化”と呼ぶ。属性が“フリー”であるキャッシュセグメントを既述のとおり“フリーセグメント”と呼ぶ。なお、MPPKが、フリーセグメントを利用する権限をLDEVに対する権限と同様にオーナ権と呼ぶこととする。
【００８３】
MPは、定期的に、“ダーティ”に分類されたセグメントのダーティデータを記憶装置171000に格納する。格納後、セグメントの属性を“ダーティ”から“クリーン”に変更する。
【００８４】
セグメントの属性が“フリー”になると、MPはフリーセグメントをキャッシュディレクトリから解放する。解放されたフリーセグメントはオーナ権を持つMPPKの制御下に置かれる。
【００８５】
一方、MPは、属性が「ダーティ」、又は、「クリーン」であるキャッシュセグメントを、キャッシュディレクトリを介して、ホスト計算機がアクセス対象とするスロット番号に対応付ける。このように、MPPKは、オーナ権を所有するLDEVに関係付けられたCMセグメントを制御・処理する。
【００８６】
ダーティビットマップ131260は、例えば、スロットに対応したCMセグメントを複数の領域に分割した場合に、各領域に対応したビットの集合である。MPは、ダーティデータが存在する領域に対応したビットを有効（例えば「１」）とし、そうでない領域に対応したビットを無効（例えば「０」）とする。
【００８７】
ダーティビットマップ131260は、ホスト計算機から発行されたライトコマンドにおけるデータの書込み単位サイズが、セグメントサイズと一致しない場合に有用である。具体的には、例えば、セグメントサイズが、書込み単位サイズのＭ倍（Ｍは２以上の整数）の場合には、一つのセグメントにつきＭ個のビットの集合でダーティビットマップが構成される。
【００８８】
ＳＣＳＩにおいて、ホスト２００からのアクセス（Ｉ／Ｏ）最小単位は５１２バイトであるため、セグメントサイズは４ｋｂであれば、ダーティビットマップは8ビット（4kB/512B＝８bit）となる。
【００８９】
ロックワード131270とは、ローカル化が適用されたMPPKを特定するための情報で、例えば、ローカル化が適用されたMPPK番号を含む。
【００９０】
キュー遷移時刻131280とは、SGCBがスロット属性管理キューに接続した時刻である。
【００９１】
図７Ａ〜図７Ｃは、それぞれキャッシュディレクトリ131100の管理構造の一例である。図７Ａは「クリーン」であるデータを管理するためのキュー（クリーンキュー）の管理構造を示すブロック図である。「クリーン」のデータの管理にはLRU管理が適用される。
【００９２】
LRU管理は、キューを用いて、CM13200に存在する「クリーン」のデータのLRUが管理されることによって達成される。MRUポインタとLRUポインタとの間に、スロット属性131250が「クリーンである」セグメント管理ブロック(SGCB)が順番に連結される。
【００９３】
クリーンキューのLRUポインタ122310Aに繋がっているSGCB122200から特定されるCMセグメントに記述されたデータが、CMセグメントに存在する「クリーン」のデータのうち最も過去に使われたデータであることを示す。
【００９４】
キューのLRUポインタ122310Aに繋がっているSGCB122200が、最後に使用、すなわち、MPにアクセスされてからの経過時間が、クリーンキューのLRU時間（クリーンLRU時間）である。
【００９５】
クリーンLRU時間は、クリーンキューのLRUポインタ122310に繋がっているSGCB122200内で管理されているキュー遷移時刻と、現在時刻との差を計算することによって得られる。
【００９６】
逆に、クリーンキューのMRUポインタ122310Bに繋がっているSGCB122200から特定されるCMセグメントに記述されたデータが、MRU、すなわち、最近使われたデータであることを示す。新たにCMのデータが利用される（アクセスされる）度に、その利用に対応したSGCB122200が、MRUポインタ122310と、それに繋がっているSGCB122200との間に挿入される。
【００９７】
図７Ｂは「ダーティ」であるデータを管理するためのキューの構造を示すブロック図である。これは、図７Ａと同様であり、CM上に存在する「ダーティ」のデータのLRU/MRUを管理する。ダーティキューのLRUポインタ122320Aに繋がっているSGCB122200が、最後に使用されてからの経過時間がダーティキューのLRU時間（ダーティLRU時間）である。
【００９８】
図７Ｃはフリーセグメントを管理するためのキュー(フリーキュー)の構造を示す図である。スロット属性が“フリー”に属するSGCBが管理されればよく、LRU/MRUの管理は不要である。
【００９９】
したがって、双方向キューポインタに含まれる２つのポインタのうち片方が使用され、他方のポインタには、例えば、無効を意味する値が設定される。フリーキューポインタ12230から、スロット属性が「フリー」の一以上のSGCBが連結される。この連結構造の末尾のSGCBには、末尾を意味する値、例えば、ＮＵＬＬが関連付けられている。
【０１００】
図８は配置済みフリーセグメント数管理情報12240(図５)の一例である。配置済みフリーセグメント数管理情報は、目標値122410、配置済み(フリー)セグメント数122420、再配置予定（フリー）セグメント数122430を含む。
【０１０１】
目標値122410は各MPPKにどれだけのフリーセグメントを配置するかを定義した値であり、ストレージサブシステムの管理者が構成情報を初期設定する時、又は、ストレージサブシステムの構成を変更する時などのタイミングで更新される。後者の例としては、CMPKを増設する場合である。このとき、新たに追加されたキャッシュメモリ容量を、各MPPKに均等に割り当てるように目標値を変更する。
【０１０２】
配置済みセグメント数は通常は一定であり、かつ目標値と一致している。しかし、MPPKのLDEVに対するオーナ権を他のMPPKに移転する場合には、配置済みセグメント数が増減する。LDEVオーナ権を移行する契機は、例えば、MPPKを増減設するときなどであり、その目的は、MPPK間でLDEVに対するI/O負荷を均衡化するためである。LDEVオーナ権を移行するときには、SMからLMにローカル化している、LDEVオーナ権に属する制御情報を移行先のMPPKのLMにコピーする必要がある。ここで、LDEVオーナ権に属する制御情報とは既述の通り、LMキャッシュディレクトリ122100、LMキャッシュディレクトリに関連付けられている、LM SGCB122200、LDEV番号対応テーブル122600である。LMキャッシュディレクトリに関連付けられているLM SGCB122200とは、ホストが該LDEVに対してアクセスしたデータがキャッシュされているセグメント、すなわちセグメントの属性がクリーン、もしくはダーティのSGCBのことを指す。LDEVオーナ権を移行するときには、これら全ての制御情報を移行先MPPKのLMに移動する。この結果、LDEVオーナ権移行元のMPPKの配置済セグメント数が、クリーンもしくはダーティ属性のセグメント数だけ減少する。同時に移行先のMPPKの配置済セグメント数が、同じだけ増加することになる。このように、LDEVオーナ権を移行することによって、MPPK間のI/O負荷は均一になるが、MPPKごとの割当済セグメント数は不均一となってしまい、配置済セグメント数が減少したMPPKのキャッシュ利用効率が低下し、性能が低下するという問題がある。
【０１０３】
配置済みセグメント数122420は、各MPPKに割り当てられたセグメント数を管理する情報である。配置済みセグメント数122420は、各MPPKのセグメント管理ブロック（LM SGCB）122200の総数を計算することで求められる。
【０１０４】
再配置予定セグメント数122430は、複数のMPPK間でフリーなキャッシュセグメントを再配置する際に、MPPKに確保、もしくは、MPPKから解放しなければならないキャッシュセグメント数のことであり、目標値122410と配置済みセグメント数122420の差の絶対値に相当する。
【０１０５】
通常、目標値と配置済みフリーセグメント数は一致しており、再配置予定セグメント数は0である。一方、既述したように、MPPKのLDEVに対するオーナ権が移転された場合のように、目標値と配置済みフリーセグメント数が異なった場合には、図１２で示すフリーセグメント配置処理によって、配置済みセグメント数が目標値に一致するようにフリーセグメントの再配置処理を行う。
【０１０６】
図９ＡはMPPKフリーセグメント管理情報（131300,122500）（図５）の管理テーブルの一例である。一つのテーブルが１つのMPPK分のテーブルに相当する。MPPKフリーセグメント管理情報131300は、各MPPKに配置済みのフリーセグメント（MPPKフリーセグメント）を管理するための情報である。MPPKフリーセグメント管理情報は、各MPPKにどのフリーセグメント配置されているかを管理するためである。特にMPPKが閉塞したときに、SM上のMPPKフリーセグメント管理情報を参照することで、閉塞したMPPKに割り当てられていたフリーセグメントを特定し、そのフリーセグメントを他のMPPKが引き継ぐことが可能になる。
【０１０７】
MPPKフリーセグメント管理情報は、SMに記録されているが、これをLMにコピーすることによりMPはMPPKフリーセグメント管理情報を迅速に参照できる。
【０１０８】
LM122000で管理するMPPKフリーセグメント管理情報をMPPKフリーセグメント管理情報（LM）122500、SM131000で管理するそれをMPPKフリーセグメント管理情報（SM）131300として区別すべきことは、図５において説明したとおりである。
【０１０９】
LMに格納されているのは、LMが属するMPPK用のMPPKフリー管理情報である。これに対して、SMには、全MPPK用のMPPKフリー管理情報が記録されている。両者のデータ構造は同じであるため、図９にはMPPKフリーセグメント管理情報（SM）131300を代表して図示した。
【０１１０】
図９Ａに示す様に、フリーセグメントはビットマップによって管理される。すなわち、あるMPPKに配置済みで、かつ、スロット属性がフリーに分類されたセグメントにビット「1」がセットされ、フリーでなく、ダーティ又はクリーンである属性を持ったセグメントに「0」がセットされる。全てのセグメントに対するビット情報からビットマップが定義される。このビットをMPPKフリーbit131310と名付ける。
【０１１１】
セグメント番号131320はSGCB内のセグメントアドレス131240に対して一意に決定される番号であり、ストレージサブシステム内のCMセグメント固有の番号である。セグメント番号は、セグメントアドレスに対して連続するように定義されてもよい。例えば、セグメントアドレスをセグメントサイズで割れば連続した番号になる。なお、フリーセグメントに関する管理をビットマップによるものではなく、図７Ａ〜図７Ｃに示すように、キューによって達成してもよい。
【０１１２】
図９Ｂは共有フリーセグメント管理情報テーブル131400(図５)である。共有フリーセグメント管理情報テーブル131400は、どのMPPKにも配置されておらず、どのMPPKも使用可能な属性を持ったフリーセグメント（共有フリーセグメント）を管理するための管理情報である。共有フリー管理情報はLMにローカル化されることなくSMに存在する。
【０１１３】
キャッシュセグメントが共有フリーの属性に該当するか否かは、図９Ａに示す、MPPKフリーセグメント管理情報と同様に、図９Ｂに示すとおり、ビットマップによって管理される。なお、このビットを共有フリーフリーbit  131410と名付ける。
【０１１４】
なお、念のため、共有フリーセグメント管理情報のセグメント番号131320は、MPPKフリーセグメント管理情報のセグメント番号131320と共通であることを付言する。
【０１１５】
図１０Ａは「CMセグメント割当て」を示すブロック図であり、図１０Ｂは「セグメント配置」を説明するブロック図である。そこで、両者の相違について説明する。
【０１１６】
「CMセグメント割当て」は、図６に示す様に、キャッシュディレクトリ131100にSGCB131200を接続する動作のことである。キャッシュディレクトリに、SGCBを接続することにより、ホスト計算機200000がアクセス対象とするLDEVのスロット番号がCMセグメントに対応付けられ、データがCMセグメントに転送されるようになる。「CMセグメント割当て」処理の詳細を、図２１を用いて後述する。
【０１１７】
「セグメント配置」とは、特定のMPPKがSM上のSGCB（SM SGCB）をロックし、かつロックしたSGCBをLMにコピーすることである。MPは、自己の属するMPPKのLM上のSGCBを参照することにより、オーナ権を有している、CMセグメントに対して排他的に、ホスト計算機200000がアクセス対象とするLDEVのスロット番号を対応付ける。
【０１１８】
「セグメント配置」には「セグメント再配置」の処理も含まれる。「セグメント再配置」の処理を図１２において後に説明する。なお、MPPKは、LMのセグメント管理ブロック（SM SGCB）131200を参照することによって、SMのSM SGCB131200を参照する場合に比べて、CMセグメントへ迅速にデータを転送することができる。
【０１１９】
以下、図１に係るシステムに関連する複数の動作について説明する。図１１は、制御情報を初期設定するためのフローチャートである。なお、図１１を含め、後述のフローチャートにおいては、ステップを「Ｓ」と略記する。制御情報初期設定処理（図３:121100）は、ストレージ管理者がストレージサブシステム100000を最初に起動する際に、MPが実行する処理である。MPは、ストレージシステム100000の構成情報、例えば、ストレージシステムに搭載しているMPPK120000の数やキャッシュ（CM）132000の容量に基づき、SM131000とLM122000に制御情報を設定する。なお、制御情報初期設定処理121100はストレージシステム100000内の1つのMPによって実行される。なお、初期設定時、例えば、全CMセグメントを均等割りして、各MPPKに割り当てておく。
【０１２０】
ステップ121101では、MPは、構成情報131500を元にストレージサブシステム100000内の全CMPKに搭載されているCMの容量を計算し、全容量に対するセグメント管理ブロック（SM SGCB）131200をSMに定義し、SGCB内の各情報の値を初期化する。
【０１２１】
ステップ121102では、MPは、MPPKフリーセグメント管理情報（SM）131300を全MPPK数分定義し、さらに、この管理情報を各MPPKのLMに設定する。この時点ではどのフリーセグメントもMPPKに配置されていないため、全てのセグメント番号に対応するMPPKフリーbit（図９Ａ）は0である。そして、共有フリーセグメント管理情報131400をSMに対して定義する。この時点では全てのセグメント番号に対応する共有フリーbitは1（図９Ｂ）である。
【０１２２】
ステップ121103では、MPは、パス管理テーブル151000（図２７Ａ）とLDEV番号対応テーブル（図２７Ｂ）に従って、LDEVに対するオーナ権を持っているMPPKを特定し、このMPPKがオーナ権を有しているLDEVに対するエントリをLDEV番号対応テーブル（SM）131600からLDEV番号対応テーブル（LM）122600にコピーする。
【０１２３】
ステップ121104では、図５に示すように、MPは、パス管理テーブル151000に従って、SMキャッシュディレクトリ131100の内、MPPKがオーナ権を所有しているLDEVに対するエントリを、LMキャッシュディレクトリ122100として当該MPPKが所有するLMにコピーする。
【０１２４】
ステップ121105では、MPは、各MPPKのLM122000内の配置済フリーセグメント数管理情報122400を設定する。具体的には、各MPPKに配置するフリーセグメント数を計算し、目標値122410フィールドと、配置済みセグメント数122420フィールドに登録する（図８）。
【０１２５】
各MPPKに配置するフリーセグメント数は、例えば、ストレージシステム100000の全CMPK内の全セグメント数を全MPPK数で均等割りした値とする。
【０１２６】
ステップ121106では、図５に示すように、MPは、配置済フリーセグメント数管理情報122400に従って、各MPPKに配置されたフリーセグメントに対するセグメントを、SMのセグメント管理ブロック（SM SGCB）131200の中から特定し、特定されたセグメントのSGCBを、SM SGCBからリードして、このセグメントが配置されたMPPKのLMのセグメント管理ブロック（LM SGCB）122200にコピーする。
【０１２７】
ステップ121107もステップ121106と同様に、SMのMPPKフリーセグメント管理情報（SM）131300をMPPKフリーセグメント管理情報（LM）122500にコピーする。
【０１２８】
図１２はフリーセグメント配置処理のフローチャートである。フリーセグメント配置処理121200は、図１１で説明した、セグメントを各MPPKに初期設定した後、各MPPKに配置されているフリーセグメント数があらかじめ設定しておいた目標値122410と一致しているかどうかを判定するものであって、不足していれば目標値に一致するようにフリーセグメントをMPPKに対して確保し、反対に過剰であれば、MPPKからフリーセグメントを共有フリーに解放する。
【０１２９】
この処理は、図１１の初期配置処理中にも実行され、そして、その後のストレージシステムの通常動作時にも、MPが所定の閾値を参照しながら、一定時間間隔で繰り返し実行される。管理者が構成情報を変更する際には、MPは、所定の閾値に基づくことなく、構成変更時のフリーセグメント配置処理121500を強制実行する。
【０１３０】
フリーセグメント配置は全MPPK上で行なわれるが、各MPPK上の全MPが行う必要はなく、代表MP1つがフリーセグメント配置処理を行えばよい。以下、ある一つのMPPKの１MPがこの処理を実行するものとして説明するが、他のMPPKにおいても同様の処理が行なわれる。また、MPPK上の代表MP１つは、予め決めておいてもよいし、処理の都度異なるMPに代わってもよい。
【０１３１】
以下、フローチャートを説明する。ステップ121201では、MPは、配置済みセグメント数122420を、自MPPKのセグメント管理ブロック（LM SGCB）122200の総数から計算する。そして、求めた配置済みセグメント数を配置済フリーセグメント数管理情報122400(図５、図８)に登録する。
【０１３２】
ステップ121202では、MPは、ステップ121201で求めた配置済みセグメント数が、自MPPKの目標値122410(図８)と一致しているかどうかを調べ、フリーセグメントの再配置が必要かどうかを判定する。一致していれば、再配置の必要が無いため、何もせずに終了する。もし、一致していなければ再配置を実施する。
【０１３３】
ステップ121203では、MPは、MPは再配置予定セグメント数122430を求め、配置済フリーセグメント数管理情報122400（図８）に登録する。ここで、再配置予定セグメント数122430は、既述の通り、目標値122410と配置済セグメント数122420の差の絶対値を計算することで求められる。
【０１３４】
ステップ121204では、MPは、配置済セグメント数が目標値と比べて大きいかどうかを判定し、その後の処理を決定する。配置済セグメント数のほうが目標値よりも大きいときは、自MPPKに必要以上のセグメント数が配置されている状態である。
【０１３５】
なお、目標値は、（１）ユーザが何らかの理由により直接変更する、（２）構成変更に伴い割当量が変わる、（３）後述する自動チューニング処理、の契機で決まる。
【０１３６】
MPは、目標値に一致させるためにMPPKフリーセグメント解放処理121300（図３、図１３）を呼び出し、ローカル化しているセグメント、即ち、MPPKに配置されているセグメントのうち再配置予定セグメント数122430だけのMPPKフリーセグメントを、フリー状態のセグメントはそのまま、ダーティ状態のセグメントをクリーン状態を経てフリー状態に変更し、また、クリーン状態のセグメントをフリー状態に変更するようにして、MPが属する自MPPKに対する割り当てから解放してこれを共有フリー状態にする。このとき、キャッシュヒット率を維持するために、共有フリー状態にするセグメントは、フリー状態、クリーン状態、ダーティ状態、の順で選ぶこととする。
【０１３７】
逆に、MPは、配置済セグメント数のほうが目標値よりも小さければ、MPPKフリーセグメント確保処理121400（図３、図１４）を呼び出し、不足しているセグメント数に相当する数の共有フリーセグメントを自MPPKに割り当てることによって、自MPPKに確保する。
【０１３８】
図１３はMPPKフリーセグメント解放処理（図１）のフローチャートである。この処理は各MPPKの代表MPによってMPPK毎で実行される。ステップ121251では、MPは自MPPK内のMPPKフリーセグメント数と再配置予定セグメント数122430（図８）とを比較し、解放可能なMPPKフリーセグメントが再配置予定セグメント数だけあるかどうかを判定する。ここで、再配置予定セグメント数122430は、既述の通り、目標値122410と配置済セグメント数122420の差の絶対値を計算することで求められる。
【０１３９】
MPは、MPPKフリーセグメント数を、MPPKフリーセグメント管理情報（LM）122500を参照しMPPKフリーbit（図９Ａ）が「1」であるセグメント番号の数を合計することにより求める。判定の結果、MPPKフリーセグメント数が再配置予定セグメント数よりも大きければ,MPはステップ121255に進む。MPPKフリーセグメント数が再配置予定セグメント数よりも小さければ、ステップ121252に進む。
【０１４０】
ステップ121252では、MPは、既述のとおり、セグメントの属性が“フリー”ではないセグメント（“クリーン”、もしくは“ダーティ”）をフリー化する。優先度的にはまず“クリーン”のセグメントをフリー化する。
【０１４１】
その際、不足分のセグメント数分、クリーンキューのLRUポインタに繋がっているSGCBをデキューする(S121252)。そして、ステップ121253に進む。ここで、不足分のセグメント数は、配置予定セグメント数-MPPKフリーセグメント数で求められる。
【０１４２】
ステップ121253では、MPはデキューしたSGCBをフリーキューにエンキューする、すなわちフリーキューポインタ122330に繋ぐ。
【０１４３】
ステップ121254では、MPはMPPKフリーセグメント管理情報（LM）122500(図５)を参照し、ステップ121253でフリー化したセグメント番号に対応するMPPKフリーbitを1にする。そして、MPはMPPKフリーセグメント管理情報（SM）131300(図９Ａ)を同様に更新する。そして、ステップ121255に進む。
【０１４４】
ステップ121255では、MPは、再配置予定セグメント数だけ共有フリー化する。具体的には、MPは、共有フリー化したいフリーセグメントに対応するSM SGCBのロックワード131270(図６)を破棄し、ロックを解放する。その後、MPは、望ましくは、LM SGCBを破棄する。そして、ステップ121256に進む。
【０１４５】
ステップ121256では、MPはMPPKフリーセグメント管理情報（LM）122500(図９Ａ)を参照し、ステップ121255で共有フリー化したセグメント番号に対応するMPPKフリーbitを0にする。さらに、MPはMPPKフリーセグメント管理情報（SM）131300(図５)を同様に更新する。そして、ステップ121257に進む。
【０１４６】
ステップ121257では、MPは共有フリーセグメント管理情報131400(図９Ｂ)を参照し、ステップ121255で共有フリー化したセグメント番号に対応する共有フリーbitを「１」にする。そして、ステップ121258に進む。
【０１４７】
ステップ121258では、MPは、配置済フリーセグメント数管理情報122400(図８)を参照し、配置済みフリーセグメント数を更新する。
【０１４８】
図１４は、MPPKフリーセグメント確保処理のフローチャートである。各MPPKの代表MPがこのフローチャートを実行する。ステップ121271では、MPは共有フリーセグメント数を取得する。具体的には、MPはSM上の共有フリーセグメント管理情報131400(図９Ｂ)の共有フリーbitが1であるセグメント番号の個数を数える。そしてステップ121272に進む。
【０１４９】
ステップ121272では、MPは再配置予定セグメント数が0と一致するかどうかを判断する。一致すれば、確保すべきセグメント数を全て確保したと判断し、処理を終了する。一致しなければステップ121273に進む。
【０１５０】
ステップ121273では、MPは共有フリーセグメント数が0に等しいかどうかを判断する。等しければ、すぐに確保可能な共有フリーセグメントが無いと判断し、処理を終了する。等しくなければステップ121274に進む。ここで、本実施例とは別に、共有フリーセグメント数が0に等しいときに、他のMPPKがMPPKフリーセグメントを解放し、共有フリー化するまで待つということも考えられる。しかし、その待ち時間によりMPの稼働率が低下するため、ストレージサブシステムの性能低下の要因となる。フリーセグメント再配置処理は、性能チューニングを目的とした処理のため、極力、ストレージサブシステムの性能に影響しないことが望ましい。そこで、本実施形態では既述の通り、すぐに確保可能な共有フリーセグメントが無ければ、すぐにフリーセグメント確保処理を終了する。このとき必要なフリーセグメントを全て確保できなくても、一定時間毎にフリーセグメント再配置処理が呼び出されるため問題ない。ただし、必要な数のフリーセグメントを確保するまでの時間が大きく伸びる可能性はある。
【０１５１】
なお、フリーセグメント確保処理の基本方針は、以下の通りである。共有フリーセグメントがあれば1つずつセグメントを確保する。再配置予定数分確保できれば処理を終了する。再配置予定数分確保できなくても共有フリーセグメントが0になれば処理を終了する。図28で説明しているが、MPの待ち時間を排除するために、他のMPPKからセグメントが解放されるのをここでは待たない。ここで確保できなくても、一定時間たてばフリーセグメント再配置処理が動くので、その時点でもう一度確保できるかを判定する。
【０１５２】
ステップ121274では、MPは共有フリーセグメント管理情報131400を参照し、共有フリーbitが1であるセグメントを1つ選ぶ。MPは、そのセグメント番号の共有フリーbitを0にする。そして、ステップ121275に進む。
【０１５３】
ステップ121275では、MPはステップ121274で選んだセグメント番号に対応するSM SGCBのロックワードを設定する。そして、ステップ121276に進む。
【０１５４】
ステップ121276では、MPはステップ121274でロックしたSGCBをLMにコピーする。そして、ステップ121277に進む。
【０１５５】
ステップ121277では、MPはMPPKフリーセグメント管理情報（LM）122500(図５、図９Ａ)を参照し、121274で選んだセグメント番号に対応するMPPKフリーbitを1にする。そして、ステップ121278に進む。
【０１５６】
ステップ121278では、MPは配置済フリーセグメント数管理情報122400(図８)を参照し、割当済セグメント数を1増やし、再配置予定セグメント数を1減らす。そして、ステップ121272に戻る。MPは、S121272において、共有フリーセグメントが配置予定セグメント数分MPPKフリーセグメントになるまで、ステップを繰り返す。
【０１５７】
図１５は、ストレージサブシステムの構成変更時の目標値再設定処理のフローチャートである。
【０１５８】
構成変更とは、例えば、ストレージ管理者が、CMPK130000を増設することにより、ストレージシステム全体のキャッシュメモリを増やす場合である。
【０１５９】
この処理は、サービスプロセッサ（SVP）180000がストレージシステムの構成変更を検出したときに呼び出される。この処理はサービスプロセッサ（SVP）180000が指定した、ストレージシステム内の代表MPが実行する。
【０１６０】
ステップ121511では、MPは、閉塞検出処理121530を呼び出し、閉塞中のMPPKが無いかを調べ、もしあれば閉塞中のMPPKからフリーセグメントを回収する。この閉塞検出処理を、図１６を参照して後に説明する。
【０１６１】
ステップ121512では、MPは構成情報131500(図４)を参照し、各MPPKに配置するセグメント数を再計算する。例えば、具体的には、制御情報初期設定処理121100(図１１)と同様に、ストレージシステム100000内の全セグメント数を閉塞していない全MPPK数で均等割りした数のセグメントを各MPPKに配置する。
【０１６２】
ステップ121513では、MPは、全MPPK内のLMにある配置済フリーセグメント数管理情報122400（図８）を参照し、目標値としてステップ121512で求めたセグメント数を設定する。
【０１６３】
ステップ121514では、MPは、フリーセグメント再配置処理121200(図３)を呼び出し、フリーセグメントの再配置を行う。
【０１６４】
図１６は閉塞検出処理のフローチャートである。この処理はサービスプロセッサ（SVP）180000が指定した、ストレージシステム内の代表MP1つが実行する。
【０１６５】
ステップ121531では、MPは閉塞中のMPPKの有無を判定する。閉塞中のMPPPKがなければステップ121534に進む。有れば、ステップ121532に進む。
【０１６６】
ステップ121532では、MPは閉塞中のMPPKに配置済みのセグメントを全てフリー化する。ダーティセグメントはクリーン化した上でフリー化される。
【０１６７】
MPはSM SGCB(図６)を順番に参照し、閉塞中のMPPKがロックしているSGCBを検索する。閉塞中のMPPKがロックしているSGCBがあれば、MPは共有フリーセグメント管理情報131400(図９Ｂ)を参照し、そのSGCBに対応するセグメント番号の共有フリーbitを1にする。そして、そのSGCBのロックワードを破棄する。同様にして、全てのSM SGCBを検索する。
【０１６８】
ステップ121533では、MPは、閉塞中のMPPKの配置済フリーセグメント数管理情報122400（図８）を参照し、配置済セグメント数を0に変更する。
【０１６９】
ステップ121534では、MPは閉塞中のCMPKの有無を判定する。閉塞中のCMPPKが有れば、ステップ121535に進む。
【０１７０】
ステップ151535では、MPは、各MPPKに対して、各MPPKがローカル化しているSGCBのうち、閉塞中のCMPK上のセグメントを無効化するように指示を送る。具体的には、LM SGCB内のセグメントアドレスを参照し、閉塞中のCMPK上のセグメントかどうかを判断する。閉塞中のCMPK上のセグメントがあれば、そのセグメントに対応するLM SGCBを破棄する。
【０１７１】
ステップ121536では、MPは配置済フリーセグメント数管理情報122400を参照し、割当済セグメント数をステップ121535において破棄した数だけ減らす。
【０１７２】
図１７はセグメント配置状況を確認する画面を示す図である。代表MPは、各MPPKから必要な情報を取得し、これをSM(図２)に記録する。SVP180000は、この情報を取得して画面情報を形成し、これを管理画面として表示端末装置に出力する。管理画面は、MPPK毎に目標値、配置済みセグメント数、クリーン・ダーティセグメント数を管理ユーザに対して提供する。
【０１７３】
なお、図17は初期配置処理完了直後の管理画面であり、配置済みセグメントの属性は全て“フリー”である。すなわち、クリーン・ダーティセグメント数は最少である。
【０１７４】
次に本発明の他の実施形態について説明する。既述の実施形態は、各MPPKに配置するフリーセグメント数、すなわち、目標値を初期設定時、もしくは構成変更時に設定していた。以下に示す実施形態は、複数のMPPK毎にキャッシュメモリの利用状況を監視し、ストレージシステム全体のキャッシュ利用効率を最大化させるような目標値を自動的に設定することを特徴とするものである。
【０１７５】
既述の通り、MPPKごとのI/O負荷はLDEVオーナ権を適切に移行することによって実現可能であるが、同じI/O負荷でもアクセスパターンによって、キャッシュの使い方が異なるため、同じI/O負荷に対して同じキャッシュサイズを用意しても、キャッシュヒット率は一定とならない。例えば、I/Oのパターンが、連続したデータへのシーケンシャルアクセスの場合には、次にアクセスされるアドレスが予測可能なため、少ないキャッシュサイズでも効率よくキャッシュヒット率を上げることが可能である。一方、アクセス対象となるデータの範囲が広い、ランダムアクセスのような場合にはキャッシュサイズが大きいほどヒット率が高くなる。このように、キャッシュ利用効率を最大化させるためにはアクセスパターンに応じて各MPPKに配置するセグメント数を調節する必要がある。
【０１７６】
図１８はこの実施形態における制御部（MPPK）の論理的な構成例を示すブロック図である。図３と同じ構成には同一の符号を付し、その説明を省略する。以下、図３との相違点についてのみ説明する。
【０１７７】
ホストI/O処理121600は、ホストI/F150000がホスト計算機200000から受信したホストコマンドを処理するものである。受信するホストコマンドには、リードとライトがあり、それぞれ図１９、図２０を参照して後述する。また、CMセグメント割当て処理121700も、図２１に基づいて後述する。
【０１７８】
セグメント動的再配置処理121800は、ストレージシステム全体でのキャッシュ利用効率を最大化させるような目標値を、それぞれのMPPKに自動的に設定する処理のことである。目標値の決定方法として、最大化させるための指標によって、複数の実現方式が存在する。これを、図２２、図２３に基づいて後述する。
【０１７９】
図１９は、ホスト計算機200000からストレージサブシステム11000にリードコマンドが発行された場合に実行される処理の一例を示す。
【０１８０】
ステップ121611及びS121612では、MPは、キャッシュヒット／ミスの判定を行う。具体的には、例えば、MPは自身のMPPKのLMに格納されているキャッシュディレクトリを参照し、スロット番号に対応したSGCBの有無の判定を行う。対応したSGCBが有る場合はステップ121615に進む。対応したSGCBが無い場合はCMフリーセグメント割当て処理121700を行い、スロット番号に対して、CMセグメントを割り当てる。この処理については、後に、図２１を参照して説明する。
【０１８１】
ステップ121613では、スロット番号によって特定される、記憶装置171000上のデータ領域から、処理121700で割当てられたCMセグメントへ、データの転送を行う。
【０１８２】
ステップ121614は、クリーン属性の設定を行う。具体的には、前記SGCB内で管理しているスロット属性を“クリーン”に設定する。
【０１８３】
ステップ121615は、キューの遷移を行う(図６)。具体的には、MPは、前記SGCB122200を、CMクリーンキューのMRUポインタ122310Bに繋げ、前記SGCB内で管理するキュー遷移時刻を、このステップを実行した時刻に更新する。このように、リードコマンドによって、MPがCMセグメント上のデータにアクセスする毎にキュー遷移時刻を更新する。
【０１８４】
ステップ121616は、MPが、前記SGCBに記録されているセグメントアドレスから、リードコマンド送信元が要求しているデータを格納しているCMセグメントを特定する。そして、MPは、特定したCMセグメントから、リードコマンドの送信元のホスト計算機へ、データを転送する。
【０１８５】
ステップ121617では、MPがレスポンス（例えば読出し完了）をホスト計算機に対して送信する。
【０１８６】
図２０はホスト計算機からライトコマンドが発行された場合に、MP121000が実行する処理の一例であるフローチャートである。
【０１８７】
ステップ121621では、ステップ121611と同様に、MPがキャッシュヒット/ミスの判定を行う。ヒットの場合はステップ121625に進む。ミスの場合はステップ121623に進む。
【０１８８】
ステップ121623において、MPは、ダーティのデータが過多であること、例えば、スロット属性“ダーティ”のSGCBの数が所定値に達していることを検出した場合には、ステップ121628に進み、ダーティセグメントがクリーン化されるまで一定時間待つ。もし、検出されなければ、CMセグメント割当て処理121700を行う。この処理については、後に、図２１を参照して説明する。
【０１８９】
ステップ121624は、ダーティ属性の設定、ダーティビットの設定を行う。ダーティ属性の設定とダーティビットの設定は、例えば、具体的には、MPが、データ転送先のＣＭセグメントに対応したSGCBに、スロット属性“ダーティ”を設定し、且つ、SGCBにおけるダーティビットマップにおいて、そのＣＭセグメントに対応するビットを有効にすることにより実行される。なお、この段階で、ダーティとするのは、ＣＭセグメントに書かれたデータが、未だ記憶装置にライトされていないためである。
【０１９０】
ステップ121625では、MPは、キュー遷移を行う。キュー遷移をステップ121614と同様にして行う。具体的には、前記SGCB122200を、ダーティキューのMRUポインタ122320Bに繋げ、前記SGCB内で管理するキュー遷移時刻を、本ステップを実行した時刻に更新する。
【０１９１】
ステップ121626では、MPが、CMセグメント割当て処理121700で割当てられたＣＭセグメントに、ホスト計算機からのライトコマンドに従うデータを転送する。つまり、ＣＭセグメントにデータが書込まれる。
【０１９２】
ステップ121627では、MPがレスポンス、例えば、書き込み完了、を送信する。
【０１９３】
なお、図２０とは別に、MPは、CMセグメントに書き込んだデータに対してパリティを計算して記憶装置171000に書き込み、CMセグメントに空きを作る処理も実行する。その際、MPはダーティキューのLRU側から順にSGCBをデキューし、記憶装置171000にCMセグメント内のデータを書き込み、クリーンキューにエンキューする。その際、ダーティキューからデキューして、ダーティLRU時間を更新する。
【０１９４】
図２１は、フリーセグメント割当て処理の流れの一例を示すフローチャートである。この処理を複数のMPPK毎に代表MPが実行する。ステップ121701では、MPは、フリーキューに、SGCBがあるかどうかを判断する(図７Ｃ)。有れば、ステップ121701に進み、無ければ、ステップ121702に進む。
【０１９５】
ステップ121704では、MPはフリーキューからSGCBを外す、換言すれば、フリーキューポインタに繋がっているSGCBをデキューする。そして、ステップ121705に進む。
【０１９６】
ステップ121705では、MPは、ステップ121704でデキューしたSGCBのセグメント番号に対応するMPPKフリーbit(図９Ａ)を1にする。
【０１９７】
ステップ121702では、MPは、クリーンキューから、LRUポインタに繋がっているSGCBをデキューし、クリーンLRU時間を更新する。例えば、このクリーンLRU時間を用いることで、MPは、各MPPKのキャッシュの利用効率を評価することができる。
【０１９８】
クリーンLRU時間が短いことは、ホストからのリード要求が頻繁に来ている、すなわち、キャッシュの利用効率が高いことになる。一方、クリーンLRU時間が長いことは、キャッシュセグメントの利用効率が低いことになる。このように、クリーンLRU時間を用いることによって、MPPKごとのキャッシュの利用効率が評価される。
【０１９９】
ホスト計算機がリードコマンドを頻繁に発行するときは、CMセグメント内のデータが頻繁に入れ替わるため、クリーンLRU時間が短くなる。逆に、ホストからのコマンド要求が少ないときは、CMセグメントはキューに接続し続けるため、クリーンLRU時間は長くなる。
【０２００】
ステップ121703では、MPは、ディレクトリ接続解除を行う。具体的には、MPは、LMキャッシュディレクトリ122100と、デキューされたSGCB122200との関連付けを解除する。
【０２０１】
ステップ121706では、MPは、ディレクトリ接続を行う。具体的には、MPは、今回の格納先となるスロット番号及びそれのハッシュ値（SGCBポインタ）をSGCBに記録することで、LMキャッシュディレクトリ122100と、そのSGCB122200とを関連付ける。
【０２０２】
図２２は、MPがクリーンLRU時間に基づいて各MPPKに配置するセグメント数を自動的にチューニングする処理の一例を示すフローチャートである。既述のとおりクリーンキューのLRUポインタ122310に繋がっているSGCB122200内の、キュー遷移時間を、クリーンキューのLRU時間（クリーンLRU時間）と呼ぶ。
【０２０３】
このフローチャートは、特に、クリーンLRU時間が短いMPPKに対して、クリーンLRU時間が長いMPPKからセグメントを割り当てる処理である。クリーンLRU時間が短いときは、ホスト計算機からのリード要求が頻繁に発行されていることが推定されるため、MPPKにフリーなキャッシュセグメントを優先的に割り当てることが、MPPKのキャッシュヒット率の向上につながることが期待できる。
【０２０４】
一方、クリーンLRU時間が長いことは、キャッシュセグメントの利用効率が低い状態であるとの推定につながる。よって、配置済のCMセグメントの一部をMPPKから解放しても、キャッシュの利用効率は大きく減少しないことが期待される。
【０２０５】
図２２の処理は、ストレージサブシステム内の代表MP1つによって実行される。ステップ121811では、MPが全MPPKの中で、最小のクリーンLRU時間を持つMPPK番号と、最大のクリーンLRU時間を持つMPPK番号とを特定する。
【０２０６】
ステップ121812では、ステップ121811で特定した、最大のクリーンLRU時間と最小のクリーンLRU時間の差が閾値以上かどうかを判定する。この閾値は、例えば、最大のキュー接続時間の30%とする。もし、閾値以下ならば、フローチャートを終了する。閾値以上ならば、ステップ121813に進む。
【０２０７】
ステップ121813では、MPは、クリーンLRU時間が最大のMPPKのフリーセグメントの配置に関する目標値を、固定量分、例えば、ストレージシステム内の全セグメント数の１％だけ、減らす。
【０２０８】
ステップ121814では、MPは、クリーンLRU時間が最小のMPPKの目標値を固定量分、例えば、ステップ121813で減らしセグメント数と同じか、それ以下の値だけ増やす。
【０２０９】
MPは、目標値に対する係るチューニングを行うことによって、リードのヒット率が高いと期待できる、即ち、キャッシュの利用効率が高いMPPKに優先的にCMセグメントを配置する。
【０２１０】
図２３はダーティ率に基づいて、各MPPKに配置されるセグメント数を自動的にチューニングする処理の一例を示すフローチャートである。ダーティ率とは、各MPPKに配置済みの総セグメント数に対する、スロット属性が“ダーティ”であるSGCB数の比率のことである。すなわち、ダーティ率は、記憶装置に書き込まれていない状態のデータに関する管理情報である。
【０２１１】
この処理は、ストレージシステム内の代表MP1つによって実行される。ステップ121821では、MPが、全てのMPPKのダーティ率を計算し、ダーティ率が第一閾値（具体的には例えば、70％）以上、かつ、ダーティLRU時間が平均よりも短いMPPKが存在するかどうかを判定する。
【０２１２】
存在しなければ、MPは処理を終了する。存在すれば、ステップ121822に進む。MPは、ダーティLRU時間が平均より長いMPPKをセグメント確保対象から除外する。これによって、ダーティデータを記憶装置に吐き出す上でのスループットが低いためにダーティデータを溜めており、即ち、キャッシュを低い利用効率で運用するMPPKがキャッシュセグメントを消費しないようにする。
【０２１３】
ステップ121822では、MPが、ダーティ率が第二閾値、例えば、30％以下、かつ、クリーンLRU時間が平均よりも長いMPPKが存在するかどうかを判定する。存在しなければ、フローチャートを終了する。存在すれば、ステップ121823に進む。MPは、クリーンLRU時間が平均より短いMPPKをセグメント解放対象から除外して、キャッシュの利用効率が高いと期待できるMPPKにフリーセグメント配置数が減少しないようにする。
【０２１４】
ステップ121823では、MPが、ダーティ率が最小のMPPKの目標値を固定量分、例えば、ストレージシステム内の全セグメント数の1%だけ、減らす。ステップ121824では、MPが、ダーティ率が最大のMPPKの目標値を固定量分、例えば、ステップ121813で減らしたセグメント数と同じか、それ以下の分増やす。
【０２１５】
このように、MPは、ライトのデータ流入量が多いなどにより、ダーティデータを溜めているMPPKに、CMセグメントを優先的に配置して、そのMPPKのライトレスポンス性能がCMセグメントの不足によって低下しないようにする。
【０２１６】
図２４は、MPPKの目標値の自動調整の経過を表示する管理画面を示すものである。管理画面では、図１７と同様にMPPK毎に目標値、配置済みセグメント数、クリーン・ダーティセグメント数を管理ユーザに対し提供する。
【０２１７】
図２４は、各MPPKに性能チューニングを適用することにより、各MPPKの目標値が変更になった直後の画面であることから、各MPPKの目標値が全ては一致していない。なお、管理確認画面に、セグメントの再配置が途中であることを管理ユーザが管理できるようする表示があってもよい。
【０２１８】
図２５はMPPKに目標値を手動にて設定して、MPPKに配置されるフリーセグメントをチューニングする画面である。この管理画面を、システム管理者は、サービスプロセッサ（SVP）180000によって確認する。管理画面は、図１７と同様にMPPK毎に目標値、配置済みセグメント数、クリーン・ダーティセグメント数をユーザに確認できるようにしている。
【０２１９】
図２５は、さらに、各MPPKについて、キュー接続時間183100と、MPPKに配置されるフリーセグメントの目標値の設定内容183200と、を表示している。さらに、図２５に係る管理画面は、フリーセグメントの確保が推奨されるMPPKであることの表示、及び、フリーセグメントの解放が推奨されるMPPKであることの表示183300も含んでいる。
【０２２０】
図２２,２３において、キャッシュ利用効率を最大化させるために自動で目標値をチューニングする処理を示したが、目標値チューニングをシステムの管理者が手動で直接行ってもよい。管理者が目標値を変更する手段は、例えば、目標値設定欄183200（図２５）にサービスプロセッサ（SVP）180000に搭載されたキーボードなどの入力装置を利用することで実現される。
【０２２１】
既述のとおり、ストレージサブシステムは、複数のMPPK間でのフリーセグメントの割り当てを、複数のMPPK間で直接フリーセグメントを受け渡しすることによって達成するのではなく、図９Ｂに示すように、フリーセグメントを共有フリーというステイタスの集合に設定し、共有フリーセグメントグループからMPPKにフリーセグメントを割り当てていた。
【０２２２】
この理由を図２８に基づいて説明する。図２８Ａは、複数のMPPK間でのフリーセグメントの割り当てを実施することを示すブロック図である。ストレージシステムが、矢印で示すように、MPPK＃１からMPPK＃２に対して、直接CMのフリーセグメントを移動させようとすると、MPPK＃２がフリーセグメントの確保処理を完了することと、MPPK＃１がフリーセグメントの解放処理を完了することとを同期させなければならず、フリーセグメントの移動において余計な待ち時間が発生する。
【０２２３】
これに対して、ストレージシステムが、MPPKから解放されたフリーセグメントを共有フリーセグメントグループに設定し、ここからフリーセグメントをMPPKに割り当てるようにすれば、各MPPKへのフリーセグメントの受け渡しを非同期的に実行することができるために、フリーセグメントの移動に無駄な待ち時間が発生せずMPの稼働率の低下を防ぐことができる。
【０２２４】
なお、この明細書おいて、計算機システムとは、ユーザ側の上位計算機及びストレージシステムとを備える記憶制御装置を示す他、ストレージサブシステム、又は、ストレージサブシステムと記憶装置とからなるストレージシステムを意味する。
【符号の説明】
【０２２５】
１０００００：ストレージシステム
１１００００：コントローラ部
１２００００：制御部（MPPK）
１２１０００：MP
１２２０００：LM
１３００００：共有メモリ部（CMPK）
１４００００：内部ネットワーク
１５００００：ホストインタフェース（I/F）
１６００００：ディスクインタフェース（I/F）
１７００００：ディスクアレイ装置
１８００００：管理端末（SVP）
２０００００：ホスト計算機
３０００００：外部ネットワーク
【図１】
0005531091.tif 000002
【図２】
0005531091.tif 000003
【図３】
0005531091.tif 000004
【図４】
0005531091.tif 000005
【図５】
0005531091.tif 000006
【図６】
0005531091.tif 000007
【図７Ａ】
0005531091.tif 000008
【図７Ｂ】
0005531091.tif 000009
【図７Ｃ】
0005531091.tif 000010
【図８】
0005531091.tif 000011
【図９Ａ】
0005531091.tif 000012
【図９Ｂ】
0005531091.tif 000013
【図１０Ａ】
0005531091.tif 000014
【図１０Ｂ】
0005531091.tif 000015
【図１１】
0005531091.tif 000016
【図１２】
0005531091.tif 000017
【図１３】
0005531091.tif 000018
【図１４】
0005531091.tif 000019
【図１５】
0005531091.tif 000020
【図１６】
0005531091.tif 000021
【図１７】
0005531091.tif 000022
【図１８】
0005531091.tif 000023
【図１９】
0005531091.tif 000024
【図２０】
0005531091.tif 000025
【図２１】
0005531091.tif 000026
【図２２】
0005531091.tif 000027
【図２３】
0005531091.tif 000028
【図２４】
0005531091.tif 000029
【図２５】
0005531091.tif 000030
【図２６】
0005531091.tif 000031
【図２７Ａ】
0005531091.tif 000032
【図２７Ｂ】
0005531091.tif 000033
【図２８Ａ】
0005531091.tif 000034
【図２８Ｂ】
0005531091.tif 000035