(57)【要約】【課題】複数のマイクロプロセッサを備えたストレージシステムにおいて一つのマイクロプロセッサに負荷が集中してしまうことを防ぐ。【解決手段】複数のマイクロプロセッサ１２、３２のうち、受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサ１２が、自分の負荷が第一の負荷以上の場合に、該Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分を、他のマイクロプロセッサ１２或いは３２に割り振り、該他のマイクロプロセッサ１２或いは３２が、少なくとも該Ｉ／Ｏ処理部分を実行する。Ｉ／Ｏ処理部分とは、キャッシュメモリ２０の一領域であってデータを記憶させるためのキャッシュ領域をキャッシュメモリ２０から確保することを含むキャッシュ制御処理を含んだ処理部分である。【選択図】図１
2007249729.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏ要求を発行する上位装置とデータを授受する複数の通信ポートと、
通信ポートを介して受信したＩ／Ｏ要求の処理であるＩ／Ｏ処理を実行する複数のマイクロプロセッサと、
Ｉ／Ｏ処理に従うデータが読み書きされる複数の記憶装置と、
前記上位装置と前記複数の記憶装置との間で授受されるデータを一時的に記憶するキャッシュメモリと
を備え、
前記複数のマイクロプロセッサのうち、受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上の場合に、該Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分を、前記複数のマイクロプロセッサのうちの他のマイクロプロセッサに割り振り、該他のマイクロプロセッサが、該Ｉ／Ｏ処理部分を実行し、
前記Ｉ／Ｏ処理部分とは、前記Ｉ／Ｏ処理の一部であり、該Ｉ／Ｏ処理において、マイクロプロセッサにとって低負荷のサブ処理に比して高負荷のサブ処理が含まれた部分である、
ストレージシステム。
【請求項２】
前記Ｉ／Ｏ処理部分とは、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保することを含むキャッシュ制御処理を含んだ処理部分である、
請求項１記載のストレージシステム。
【請求項３】
割り振り先として選択されても良い一以上のマイクロプロセッサＩＤが表された情報である割り振り制御情報の記憶域を更に備え、
前記マイクロプロセッサは、前記割り振り制御情報を参照し、参照した割り振り制御情報に表されている一以上のマイクロプロセッサＩＤの中からマイクロプロセッサＩＤを選択し、選択したマイクロプロセッサＩＤに対応する他のマイクロプロセッサをＩ／Ｏ処理部分の割り振り先とし、
各マイクロプロセッサは、自分の負荷が第二の負荷以上の場合に、自分のマイクロプロセッサＩＤを前記割り振り制御情報に増やし、自分の負荷が第二の負荷未満の場合に、自分のマイクロプロセッサＩＤを前記割り振り制御情報から減らす、
請求項１記載のストレージシステム。
【請求項４】
二以上のプロセッサパッケージを備え、
前記二以上のプロセッサパッケージ上に、前記複数のマイクロプロセッサが存在し、一つのプロセッサパッケージ上に、一以上のマイクロプロセッサと、前記キャッシュメモリに対するデータ通信に利用されるパスである内部データパスが搭載されており、
前記割り振り制御情報には、ライト割り振り制御情報とリード割り振り制御情報とがあり、
前記ライト割り振り制御情報は、ライトＩ／Ｏ処理部分の割り振りを制御するために用いられる割り振り制御情報であり、前記ライトＩ／Ｏ処理部分とは、前記Ｉ／Ｏ要求がライト要求である場合のＩ／Ｏ処理部分であり、
前記リード割り振り制御情報は、リードＩ／Ｏ処理部分の割り振りを制御するために用いられる割り振り制御情報であり、前記リードＩ／Ｏ処理部分とは、前記Ｉ／Ｏ要求がリード要求である場合のＩ／Ｏ処理部分であり、
前記ライトＩ／Ｏ処理部分の割り振りが行われる場合には、前記ライトＩ／Ｏ処理部分の割り振りが行われずにライトＩ／Ｏ処理が行われる場合に比して、前記キャッシュメモリの負荷及び前記内部データパスの負荷が高くなり、
各マイクロプロセッサは、前記ライト割り振り制御情報を更新する場合には、前記キャッシュメモリの負荷が或るメモリ負荷以上である、及び、自分を搭載するプロセッサパッケージの内部データパスの負荷が或るデータパス負荷以上である、のうちの少なくとも一方であるならば、自分のマイクロプロセッサＩＤを前記ライト割り振り制御情報から増やし、前記キャッシュメモリの負荷が前記或るメモリ負荷未満である、及び、自分を搭載するプロセッサパッケージの内部データパスの負荷が前記或るデータパス負荷未満である、のうちの少なくとも一方であるならば、自分のマイクロプロセッサＩＤを前記ライト割り振り制御情報に増やす、
請求項３記載のストレージシステム。
【請求項５】
前記複数のマイクロプロセッサには、前記上位装置と前記キャッシュメモリとの間の通信を制御するマイクロプロセッサである二以上の上位マイクロプロセッサと、前記記憶装置と前記キャッシュメモリとの通信を制御するマイクロプロセッサである一以上の下位マイクロプロセッサとがあり、
上位マイクロプロセッサが、割り振り対象が、前記Ｉ／Ｏ要求がライト要求である場合のＩ／Ｏ処理部分であるライトＩ／Ｏ処理部分ならば、他の上位マイクロプロセッサに割り振り、一方、割り振り対象が、前記Ｉ／Ｏ要求がリード要求である場合のＩ／Ｏ処理部分であるリードＩ／Ｏ処理部分ならば、下位マイクロプロセッサに割り振る、
請求項１記載のストレージシステム。
【請求項６】
前記上位マイクロプロセッサが前記他の上位マイクロプロセッサにライトＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記ライト要求に従うデータをバッファに蓄積し、前記他の上位マイクロプロセッサが、前記バッファに記憶されたデータを前記キャッシュメモリに書く、
請求項５記載のストレージシステム。
【請求項７】
前記上位マイクロプロセッサが前記ライトＩ／Ｏ処理部分の割り振りを行わない場合には、該上位マイクロプロセッサが、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保し、前記確保したキャッシュ領域にデータを書き、その後、前記確保したキャッシュ領域を解放することを行うようになっており、
前記ライトＩ／Ｏ処理部分は、前記キャッシュ領域を確保することと、前記確保したキャッシュ領域を解放することとを含んだキャッシュ制御処理であり、
前記上位マイクロプロセッサが前記他の上位マイクロプロセッサにライトＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記ライト要求に従うデータをバッファに蓄積し、前記他の上位マイクロプロセッサに所定の要求を発行し、前記他の上位マイクロプロセッサが、該所定の要求に応答して、前記キャッシュ領域を前記キャッシュメモリに確保し、前記バッファに記憶されたデータを前記確保されたキャッシュメモリに書き、前記確保したキャッシュ領域を解放して、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、前記上位装置にステータスを送信する、
請求項６記載のストレージシステム。
【請求項８】
ライトＩ／Ｏ処理部分の割り振りを制御するために用いられる情報であるライト割り振り制御情報を記憶した記憶域を更に備え、
前記ライト要求には、アクセス先を表す情報であるアクセス先情報が含まれており、
前記ライト割り振り制御情報には、複数の領域の各々に対応付けられた領域ＩＤ及び上位マイクロプロセッサＩＤが記憶され、
各領域は、前記ライト要求に含まれている前記アクセス先情報から求められるアドレス範囲の一部分であり、
前記複数の領域には、周期的に、同じ上位マイクロプロセッサＩＤが対応付けられている、
請求項５記載のストレージシステム。
【請求項９】
リードＩ／Ｏ処理部分の割り振りを制御するために用いられる情報であるリード割り振り制御情報を記憶した記憶域を更に備え、
前記下位マイクロプロセッサは複数個あり、各下位マイクロプロセッサには、通信可能に接続された記憶装置とそうではない記憶装置とがあり、
前記複数の記憶装置の二以上の記憶装置によりパリティグループが形成され、論理的な記憶デバイスである論理ユニットが、各パリティグループ毎に、一又は複数個形成されており、
各通信ポート毎に、通信可能な論理ユニット並びに該論理ユニットを形成する一以上の記憶装置が決まっており、
前記リード要求には、アクセス先を表す情報であるアクセス先情報が含まれており、該アクセス先情報には、論理ユニットのＩＤが含まれており、
前記リード割り振り制御情報には、各通信ポート毎に、通信ポートのＩＤ、該通信ポートに通信可能な論理ユニットのＩＤ、及び、該論理ユニットを形成する各記憶装置に通信可能な各下位マイクロプロセッサのＩＤが記録されており、
前記上位マイクロプロセッサが下位マイクロプロセッサにリードＩ／Ｏ処理部分を割り振る場合、該上位マイクロプロセッサが、リード要求を受信した通信ポートのＩＤと、該リード要求のアクセス先情報に含まれている論理ユニットＩＤとに対応した下位マイクロプロセッサＩＤに対応する下位マイクロプロセッサに、前記リードＩ／Ｏ処理部分の割り振る、
請求項５記載のストレージシステム。
【請求項１０】
前記上位マイクロプロセッサが前記リードＩ／Ｏ処理部分の割り振りを行わない場合には、該上位マイクロプロセッサが、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保し、所定の要求を下位マイクロプロセッサに送信し、該下位マイクロプロセッサが、該所定の要求に応答して、リード要求に従うデータを記憶装置から読み出して、該確保されているキャッシュ領域に格納し、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、該確保されているキャッシュ領域からデータを読み出し、該データとステータスとを前記上位装置に送信し、該確保されているキャッシュ領域を解放し、
前記リードＩ／Ｏ処理部分は、前記キャッシュ領域を確保することと、前記確保したキャッシュ領域を解放することとを含んだキャッシュ制御処理であり、
前記上位マイクロプロセッサが前記下位マイクロプロセッサにリードＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記下位マイクロプロセッサに確保要求を発行し、前記下位マイクロプロセッサが、該確保要求に応答して、リード要求に従うデータを記憶装置から読み出して、該確保されているキャッシュ領域に格納し、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、該確保されているキャッシュ領域からデータを読み出し、該データとステータスとを前記上位装置に送信し、該確保されているキャッシュ領域を解放し、解放要求を前記下位マイクロプロセッサに送信し、該下位マイクロプロセッサが、該解放要求に応答して、前記確保されているキャッシュ領域を解放する、
請求項５記載のストレージシステム。
【請求項１１】
Ｉ／Ｏ処理部分の割り振りの失敗状況を表す情報である失敗状況情報を記憶する記憶域と、
前記Ｉ／Ｏ処理部分の割り振りが失敗した場合に前記失敗状況情報を更新する失敗状況更新部と、
前記失敗状況情報を含んだ負荷情報を出力する負荷情報出力部と
を更に備える請求項１記載のストレージシステム。
【請求項１２】
二以上のプロセッサパッケージ上に、前記複数のマイクロプロセッサが存在し、一つのプロセッサパッケージ上に、一以上のマイクロプロセッサと、前記キャッシュメモリに対するデータ通信に利用されるパスである内部データパスが搭載されており、
前記負荷情報には、更に、前記複数のマイクロプロセッサの各々の負荷を表す情報であるプロセッサ負荷情報と、各プロセッサパッケージ毎の内部データパスの負荷を表す情報である内部データパス負荷情報とが含まれている、
請求項１１記載のストレージサブシステム。
【請求項１３】
所定の失敗状況以上に失敗されていることを示す失敗状況を前記失敗状況情報が表している場合に、マイクロプロセッサの増設を示唆する情報を表示する増設示唆部を更に備える、
請求項１１記載のストレージシステム。
【請求項１４】
ストレージシステムを管理するための計算機である管理計算機において、
前記ストレージシステムが、
Ｉ／Ｏ要求を発行する上位装置とデータを授受する複数の通信ポートと、
通信ポートを介して受信したＩ／Ｏ要求の処理であるＩ／Ｏ処理を実行する複数のマイクロプロセッサと、
Ｉ／Ｏ処理に従うデータが読み書きされる複数の記憶装置と、
前記上位装置と前記複数の記憶装置との間で授受されるデータを一時的に記憶するキャッシュメモリと、
Ｉ／Ｏ処理部分の割り振りの失敗状況を表す情報である失敗状況情報を記憶する記憶域と、
前記Ｉ／Ｏ処理部分の割り振りが失敗した場合に前記失敗状況情報を更新する失敗状況更新部と、
負荷情報を前記管理計算機に出力する負荷情報出力部と
を備え、
前記複数のマイクロプロセッサのうち、受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上の場合に、該Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分を、前記複数のマイクロプロセッサのうちの他のマイクロプロセッサに割り振り、該他のマイクロプロセッサが、少なくとも該Ｉ／Ｏ処理部分を実行し、
前記Ｉ／Ｏ処理部分とは、前記Ｉ／Ｏ処理の一部であり、該Ｉ／Ｏ処理において、マイクロプロセッサにとって低負荷のサブ処理に比して高負荷のサブ処理が含まれた部分であり、
前記管理計算機が、
前記ストレージシステムから負荷情報を受信する受信部と、
前記受信した負荷情報中の所定の失敗状況以上に失敗されていることを示す失敗状況を前記受信した失敗状況情報が表している場合に、マイクロプロセッサの増設を示唆する情報を表示する増設示唆部と
を備える管理計算機。
【請求項１５】
二以上のプロセッサパッケージ上に、前記複数のマイクロプロセッサが存在し、一つのプロセッサパッケージ上に、一以上のマイクロプロセッサと、前記キャッシュメモリに対するデータ通信に利用されるパスである内部データパスが搭載されており、
前記負荷情報には、更に、前記複数のマイクロプロセッサの各々の負荷を表す情報であるプロセッサ負荷情報と、各プロセッサパッケージ毎の内部データパスの負荷を表す情報である内部データパス負荷情報とが含まれており、
前記増設示唆部が、前記プロセッサ負荷情報及び前記内部データパス負荷情報に基づいて、マイクロプロセッサの増設を示唆する情報を表示する、
請求項１４記載の管理計算機。
【請求項１６】
Ｉ／Ｏ要求を発行する上位装置とデータを授受する複数の通信ポートと、
通信ポートを介して受信したＩ／Ｏ要求の処理であるＩ／Ｏ処理を実行する複数のマイクロプロセッサと、
Ｉ／Ｏ処理に従うデータが読み書きされる複数の記憶装置と、
前記上位装置と前記複数の記憶装置との間で授受されるデータを一時的に記憶するキャッシュメモリと
を備えたストレージシステムにおけるマイクロプロセッサの負荷分散方法であって、
受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサの負荷が第一の負荷以上の場合に、該Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分を、前記複数のマイクロプロセッサのうちの他のマイクロプロセッサに割り振り、
該他のマイクロプロセッサで、少なくとも該Ｉ／Ｏ処理部分を実行し、
前記Ｉ／Ｏ処理部分とは、前記Ｉ／Ｏ処理の一部であり、該Ｉ／Ｏ処理において、マイクロプロセッサにとって低負荷のサブ処理に比して高負荷のサブ処理が含まれた部分である、
負荷分散方法。
【請求項１７】
割り振り先として選択されても良い一以上のマイクロプロセッサＩＤが表された情報である割り振り制御情報に表されている前記一以上のマイクロプロセッサＩＤの中からマイクロプロセッサＩＤを選択し、選択されたマイクロプロセッサＩＤに対応するマイクロプロセッサが前記他のマイクロプロセッサであり、
マイクロプロセッサの負荷が第二の負荷以上の場合に、該マイクロプロセッサのマイクロプロセッサＩＤを前記割り振り制御情報に増やし、該マイクロプロセッサの負荷が第二の負荷未満の場合に、該マイクロプロセッサのマイクロプロセッサＩＤを前記割り振り制御情報から減らす、
請求項１６記載の負荷分散方法。
【請求項１８】
前記複数のマイクロプロセッサには、前記上位装置との前記キャッシュメモリとの間の通信を制御するマイクロプロセッサである二以上の上位マイクロプロセッサと、前記記憶装置と前記キャッシュメモリとの通信を制御するマイクロプロセッサである一以上の下位マイクロプロセッサとがあり、
上位マイクロプロセッサの割り振り対象が、前記Ｉ／Ｏ要求がライト要求である場合のＩ／Ｏ処理部分であるライトＩ／Ｏ処理部分ならば、該ライトＩ／Ｏ処理部分を、該上位マイクロプロセッサから他の上位マイクロプロセッサに割り振り、一方、前記割り振り対象が、前記Ｉ／Ｏ要求がリード要求である場合のＩ／Ｏ処理部分であるリードＩ／Ｏ処理部分ならば、該リードＩ／Ｏ処理部分を、該上位マイクロプロセッサから下位マイクロプロセッサに割り振る、
請求項１６記載の負荷分散方法。
【請求項１９】
Ｉ／Ｏ処理部分の割り振りの失敗状況を表す情報である失敗状況情報を、前記Ｉ／Ｏ処理部分の割り振りが失敗した場合に前記失敗状況情報を更新し、
所定の失敗状況以上に失敗されていることを示す失敗状況を前記失敗状況情報が表している場合に、マイクロプロセッサの増設を示唆する情報を表示する、
請求項１６記載の負荷分散方法。
【請求項２０】
Ｉ／Ｏ要求を発行する上位装置とデータを授受する複数の通信ポートと、
Ｉ／Ｏ処理に従うデータが読み書きされる複数の記憶装置と、
前記上位装置と前記複数の記憶装置との間で授受されるデータを一時的に記憶するキャッシュメモリと、
前記上位装置と前記キャッシュメモリとの間の通信を制御するマイクロプロセッサである二以上の上位マイクロプロセッサと、
前記記憶装置と前記キャッシュメモリとの通信を制御するマイクロプロセッサである一以上の下位マイクロプロセッサと、
Ｉ／Ｏ処理部分の割り振りの失敗状況を表す情報である失敗状況情報を記憶する記憶域と、
前記失敗状況情報を含んだ負荷情報を出力する負荷情報出力部と
を備え、
Ｉ／Ｏ要求のＩ／Ｏ処理を行う上位マイクロプロセッサは、前記Ｉ／Ｏ要求がライト要求の場合、自分の負荷が前記第一の負荷以上であれば、該ライト要求のＩ／Ｏ処理部分であるライトＩ／Ｏ処理部分を、他の上位マイクロプロセッサに割り振り、一方、前記Ｉ／Ｏ要求がリード要求の場合、自分の負荷が前記第一の負荷以上であれば、該リード要求のＩ／Ｏ処理部分であるリードＩ／Ｏ処理部分を、下位マイクロプロセッサに割り振り、
前記ライトＩ／Ｏ処理でも前記リードＩ／Ｏ処理でも、前記上位マイクロプロセッサは、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保することと、前記確保されたキャッシュ領域を解放することとを含むキャッシュ制御処理を行うようになっており、前記キャッシュ制御処理は、前記ライトＩ／Ｏ処理や前記リードＩ／Ｏ処理における他の処理よりも前記上位マイクロプロセッサにとって高負荷の処理であり、
前記ライトＩ／Ｏ処理部分及び前記リードＩ／Ｏ処理部分は、少なくとも前記キャッシュ制御処理を含んだ処理部分であり、
前記ライトＩ／Ｏ処理部分或いは前記リードＩ／Ｏ処理部分の割り振りに失敗した場合に、前記上位マイクロプロセッサが、前記失敗状況情報を更新する、
ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のマイクロプロセッサを備えたストレージシステムに関する。
【背景技術】
【０００２】
この種のストレージシステムとして、例えば、特許３２６４４６５号に記載のストレージシステムが知られている。このストレージシステムは、上位装置に対するインタフェースを構成する複数の上位側接続論理装置と、記憶装置と、前記記憶装置に対するインタフェースを構成する複数の記憶装置側接続論理装置と、これらの装置間で転送されるデータを一時記憶するキャッシュメモリ装置（複数の上位側接続論理装置及び複数の記憶装置側接続論理装置に共有されるキャッシュメモリ装置）とを有する。このストレージシステムでは、複数の上位装置側接続論理装置、複数の記憶装置側接続論理装置、及びキャッシュメモリ装置は、これらの装置に共有されるコモンバスにより相互に接続されるように構成されている。上位側接続論理装置、記憶装置側接続論理装置、キャッシュメモリ装置，及びこれらの間を接続するコモンバスは、二重化され、２系統に分けて配線されており、一方に障害が発生したときでも、他方を用いて縮退運転が可能である。
【０００３】
【特許文献１】特許３２６４４６５号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
各上位側接続論理装置には、一又は複数のマイクロプロセッサが搭載されている。各マイクロプロセッサが、上位装置から受信した入出力要求（以下、Ｉ／Ｏ要求）の処理を実行する。その際、一つのマイクロプロセッサに、複数のＩ／Ｏ要求が集中してしまうと、そのマイクロプロセッサの負荷が高くなりすぎて、各Ｉ／Ｏ要求の処理が遅くなってしまう可能性がある。
【０００５】
従って、本発明の目的は、複数のマイクロプロセッサを備えたストレージシステムにおいて一つのマイクロプロセッサに負荷が集中してしまうことを防ぐことにある。
【０００６】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【０００７】
本発明に従うストレージシステムは、Ｉ／Ｏ要求を発行する上位装置とデータを授受する複数の通信ポートと、通信ポートを介して受信したＩ／Ｏ要求の処理であるＩ／Ｏ処理を実行する複数のマイクロプロセッサと、Ｉ／Ｏ処理に従うデータが読み書きされる複数の記憶装置と、前記上位装置と前記複数の記憶装置との間で授受されるデータを一時的に記憶するキャッシュメモリとを備える。前記複数のマイクロプロセッサのうち、受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上の場合に、該Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分を、前記複数のマイクロプロセッサのうちの他のマイクロプロセッサに割り振り、該他のマイクロプロセッサが、少なくとも該Ｉ／Ｏ処理部分を（例えば割り振り元の前記マイクロプロセッサに代わって）実行する。前記Ｉ／Ｏ処理部分とは、前記Ｉ／Ｏ処理の一部であり、該Ｉ／Ｏ処理において、マイクロプロセッサにとって低負荷のサブ処理に比して高負荷のサブ処理が含まれた部分である。
【０００８】
第一の実施態様では、前記Ｉ／Ｏ処理部分とは、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保することを含むキャッシュ制御処理を含んだ処理部分である。
【０００９】
第二の実施態様では、ストレージシステムが、割り振り先として選択されても良い一以上のマイクロプロセッサＩＤが表された情報である割り振り制御情報の記憶域を更に備えることができる。前記マイクロプロセッサは、前記割り振り制御情報を参照し、参照した割り振り制御情報に表されている一以上のマイクロプロセッサＩＤの中からマイクロプロセッサＩＤを選択し、選択したマイクロプロセッサＩＤに対応する他のマイクロプロセッサをＩ／Ｏ処理部分の割り振り先とすることができる。各マイクロプロセッサは、自分の負荷が第二の負荷以上の場合に、自分のマイクロプロセッサＩＤを前記割り振り制御情報に増やし、自分の負荷が第二の負荷未満の場合に、自分のマイクロプロセッサＩＤを前記割り振り制御情報から減らすことができる。
【００１０】
第三の実施態様では、前記第二の実施態様において、二以上のパッケージが更に備えられ、前記二以上のプロセッサパッケージ上に、前記複数のマイクロプロセッサが存在する。一つのプロセッサパッケージ上に、一以上のマイクロプロセッサと、前記キャッシュメモリに対するデータ通信に利用されるパスである内部データパスが搭載されている。前記割り振り制御情報には、ライト割り振り制御情報とリード割り振り制御情報とがある。前記ライト割り振り制御情報は、ライトＩ／Ｏ処理部分の割り振りを制御するために用いられる割り振り制御情報である。前記ライトＩ／Ｏ処理部分とは、前記Ｉ／Ｏ要求がライト要求である場合のＩ／Ｏ処理部分である。前記リード割り振り制御情報は、リードＩ／Ｏ処理部分の割り振りを制御するために用いられる割り振り制御情報である。前記リードＩ／Ｏ処理部分とは、前記Ｉ／Ｏ要求がリード要求である場合のＩ／Ｏ処理部分である。前記ライトＩ／Ｏ処理部分の割り振りが行われる場合には、前記ライトＩ／Ｏ処理部分の割り振りが行われずにライトＩ／Ｏ処理が行われる場合に比して、前記キャッシュメモリの負荷及び前記内部データパスの負荷が高くなる。各マイクロプロセッサは、前記ライト割り振り制御情報を更新する場合には、前記キャッシュメモリの負荷が或るメモリ負荷以上である、及び、自分を搭載するプロセッサパッケージの内部データパスの負荷が或るデータパス負荷以上である、のうちの少なくとも一方であるならば、自分のマイクロプロセッサＩＤを前記ライト割り振り制御情報から増やすことができる。また、各マイクロプロセッサは、前記キャッシュメモリの負荷が前記或るメモリ負荷未満である、及び、自分を搭載するプロセッサパッケージの内部データパスの負荷が前記或るデータパス負荷未満である、のうちの少なくとも一方であるならば、自分のマイクロプロセッサＩＤを前記ライト割り振り制御情報に増やすことができる。
【００１１】
第四の実施態様では、前記複数のマイクロプロセッサには、前記上位装置と前記キャッシュメモリとの間の通信を制御するマイクロプロセッサである二以上の上位マイクロプロセッサと、前記記憶装置と前記キャッシュメモリとの通信を制御するマイクロプロセッサである一以上の下位マイクロプロセッサとがある。上位マイクロプロセッサが、割り振り対象が、前記Ｉ／Ｏ要求がライト要求である場合のＩ／Ｏ処理部分であるライトＩ／Ｏ処理部分ならば、他の上位マイクロプロセッサに割り振り、一方、割り振り対象が、前記Ｉ／Ｏ要求がリード要求である場合のＩ／Ｏ処理部分であるリードＩ／Ｏ処理部分ならば、下位マイクロプロセッサに割り振ることができる。
【００１２】
第五の実施態様では、前記第四の実施態様において、前記上位マイクロプロセッサが前記他の上位マイクロプロセッサにライトＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記ライト要求に従うデータをバッファに蓄積し、前記他の上位マイクロプロセッサが、前記バッファに記憶されたデータを前記キャッシュメモリに書くことができる。
【００１３】
第六の実施態様では、前記第五の実施態様において、前記上位マイクロプロセッサが前記ライトＩ／Ｏ処理部分の割り振りを行わない場合には、該上位マイクロプロセッサが、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保し（例えばキャッシュ領域をロックし）、前記確保したキャッシュ領域にデータを書き、その後、前記確保したキャッシュ領域を解放する（アンロックする）ことを行うようになっている。前記ライトＩ／Ｏ処理部分は、前記キャッシュ領域を確保することと、前記確保したキャッシュ領域を解放することとを含んだキャッシュ制御処理である。前記上位マイクロプロセッサが前記他の上位マイクロプロセッサにライトＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記ライト要求に従うデータをバッファに蓄積し、前記他の上位マイクロプロセッサに所定の要求を発行し、前記他の上位マイクロプロセッサが、該所定の要求に応答して、前記キャッシュ領域を前記キャッシュメモリに確保し、前記バッファに記憶されたデータを前記確保されたキャッシュメモリに書き、前記確保したキャッシュ領域を解放して、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、前記上位装置にステータスを送信することができる。
【００１４】
第七の実施態様では、前記第四の実施態様において、ライトＩ／Ｏ処理部分の割り振りを制御するために用いられる情報であるライト割り振り制御情報を記憶した記憶域が更に備えられる。前記ライト要求には、アクセス先を表す情報であるアクセス先情報が含まれている。前記ライト割り振り制御情報には、複数の領域の各々に対応付けられた領域ＩＤ及び上位マイクロプロセッサＩＤが記憶されている。各領域は、前記ライト要求に含まれている前記アクセス先情報から求められるアドレス範囲の一部分である。前記複数の領域には、周期的に、同じ上位マイクロプロセッサＩＤが対応付けられている。
【００１５】
第八の実施態様では、前記第四の実施態様において、リードＩ／Ｏ処理部分の割り振りを制御するために用いられる情報であるリード割り振り制御情報を記憶した記憶域が更に備えられる。前記下位マイクロプロセッサは複数個あり、各下位マイクロプロセッサには、通信可能に接続された記憶装置とそうではない記憶装置とがある。前記複数の記憶装置の二以上の記憶装置によりパリティグループが形成され、論理的な記憶デバイスである論理ユニットが、各パリティグループ毎に、一又は複数個形成されている。各通信ポート毎に、通信可能な論理ユニット並びに該論理ユニットを形成する一以上の記憶装置が決まっている。前記リード要求には、アクセス先を表す情報であるアクセス先情報が含まれており、該アクセス先情報には、論理ユニットのＩＤが含まれている。前記リード割り振り制御情報には、各通信ポート毎に、通信ポートのＩＤ、該通信ポートに通信可能な論理ユニットのＩＤ、及び、該論理ユニットを形成する各記憶装置に通信可能な各下位マイクロプロセッサのＩＤが記録されている。前記上位マイクロプロセッサが下位マイクロプロセッサにリードＩ／Ｏ処理部分を割り振る場合、該上位マイクロプロセッサが、リード要求を受信した通信ポートのＩＤと、該リード要求のアクセス先情報に含まれている論理ユニットＩＤとに対応した下位マイクロプロセッサＩＤに対応する下位マイクロプロセッサに、前記リードＩ／Ｏ処理部分の割り振ることができる。
【００１６】
第九の実施態様では、前記第四の実施態様において、前記上位マイクロプロセッサが前記リードＩ／Ｏ処理部分の割り振りを行わない場合には、該上位マイクロプロセッサが、前記キャッシュメモリの一領域であってデータを記憶させるためのキャッシュ領域を前記キャッシュメモリから確保し、所定の要求を下位マイクロプロセッサに送信し、該下位マイクロプロセッサが、該所定の要求に応答して、リード要求に従うデータを記憶装置から読み出して、確保されているキャッシュ領域に格納し、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、該確保されているキャッシュ領域からデータを読み出し、該データとステータスとを前記上位装置に送信し、該確保されているキャッシュ領域を解放することができる。前記リードＩ／Ｏ処理部分は、前記キャッシュ領域を確保することと、前記確保したキャッシュ領域を解放することとを含んだキャッシュ制御処理である。前記上位マイクロプロセッサが前記下位マイクロプロセッサにリードＩ／Ｏ処理部分を割り振る場合、前記上位マイクロプロセッサが、前記下位マイクロプロセッサに確保要求を発行し、前記下位マイクロプロセッサが、該確保要求に応答して、リード要求に従うデータを記憶装置から読み出して、該確保されているキャッシュ領域に格納し、完了報告を返し、前記上位マイクロプロセッサが、該完了報告に応答して、該確保されているキャッシュ領域からデータを読み出し、該データとステータスとを前記上位装置に送信し、該確保されているキャッシュ領域を解放し、解放要求を前記下位マイクロプロセッサに送信し、該下位マイクロプロセッサが、該解放要求に応答して、前記確保されているキャッシュ領域を解放することができる。
【００１７】
第十の実施態様では、Ｉ／Ｏ処理部分の割り振りの失敗状況を表す情報である失敗状況情報を記憶する記憶域と、前記Ｉ／Ｏ処理部分の割り振りが失敗した場合に前記失敗状況情報を更新する失敗状況更新部と、前記失敗状況情報を含んだ負荷情報を出力する負荷情報出力部とが更に備えられる。
【００１８】
第十一の実施態様では、前記第十の実施態様において、二以上のプロセッサパッケージ上に、前記複数のマイクロプロセッサが存在し、一つのプロセッサパッケージ上に、一以上のマイクロプロセッサと、前記キャッシュメモリに対するデータ通信に利用されるパスである内部データパスが搭載されている。前記負荷情報には、更に、前記複数のマイクロプロセッサの各々の負荷を表す情報であるプロセッサ負荷情報と、各プロセッサパッケージ毎の内部データパスの負荷を表す情報である内部データパス負荷情報とが含まれている。
【００１９】
第十二の実施態様では、前記第十の実施態様において、所定の失敗状況以上に失敗されていることを示す失敗状況を前記失敗状況情報が表している場合に、マイクロプロセッサの増設を示唆する情報を表示する増設示唆部が更に備えられる。
【００２０】
本発明に従う管理計算機は、前記ストレージシステムから負荷情報を受信する受信部と、前記受信した負荷情報中の所定の失敗状況以上に失敗されていることを示す失敗状況を前記受信した失敗状況情報が表している場合に、マイクロプロセッサの増設を示唆する情報を表示する増設示唆部とを備える。増設示唆部は、前記プロセッサ負荷情報及び前記内部データパス負荷情報に基づいて、マイクロプロセッサの増設を示唆する情報を表示することができる。
【００２１】
上記各部は、各手段と言い換えることができる。上記各部は、ハードウェア（例えば回路）、コンピュータプログラム、或いはそれらの組み合わせ（例えば、コンピュータプログラムを読み込んで実行する一又は複数のＣＰＵ）によって実現することもできる。各コンピュータプログラムは、コンピュータマシンに備えられる記憶資源（例えばメモリ）から読み込むことができる。その記憶資源には、ＣＤ−ＲＯＭやＤＶＤ（Digital Versatile Disk）等の記録媒体を介してインストールすることもできるし、インターネットやＬＡＮ等の通信ネットワークを介してダウンロードすることもできる。
【発明の効果】
【００２２】
本発明によれば、複数のマイクロプロセッサを備えたストレージシステムにおいて一つのマイクロプロセッサに負荷が集中してしまうことを防ぐことができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して、本発明の一実施形態について説明する。
【００２４】
図１は、本発明の一実施形態の特徴の一つの概念を示す。
【００２５】
ストレージシステム２には、複数の記憶装置３と、一以上の記憶装置３に対するデータの入出力を処理する一以上のマイクロプロセッサ（以下、「ＤＫＰ」と略記）３２と、上位装置１０００から発行されたＩ／Ｏ要求を処理する複数のマイクロプロセッサ（以下、「ＣＨＰ」と略記する）１２とが備えられる。このストレージシステム２では、上位装置１０００からＩ／Ｏ要求（ライト要求或いはリード要求）を受けたＣＨＰ１２は、そのＩ／Ｏ要求の処理（以下、Ｉ／Ｏ処理）の少なくとも高負荷部分（例えば、後述するキャッシュヒット判定やキャッシュロック）を、他のＣＨＰ１２或いはＤＫＰ３２に、割り振る。これにより、割り振り元のＣＨＰ１２は、Ｉ／Ｏ処理のうちの少なくとも高負荷の処理を実行することから解放され、その分、そのＣＨＰ１２の負荷が軽くなる。本明細書では、マイクロプロセッサから別のマイクロプロセッサにＩ／Ｏ処理の少なくとも高負荷部分（以下、「Ｉ／Ｏ処理部分」と略記する）を割り振ることを、「オフロード」と呼ぶこともある。
【００２６】
なお、ＣＨＰ１２は、他のＣＨＰ１２とＤＫＰ３２のいずれにもＩ／Ｏ処理部分をオフロードできるが、本実施形態では、Ｉ／Ｏ要求がライト要求である場合には、ライト要求のＩ／Ｏ処理の少なくとも高負荷部分（以下、ライトＩ／Ｏ処理部分）を他のＣＨＰ１２にオフロードし、一方、Ｉ／Ｏ要求がリード要求である場合には、リード要求のＩ／Ｏ処理の少なくとも高負荷部分（以下、リードＩ／Ｏ処理部分）をＤＫＰ３２にオフロードする。
【００２７】
また、上位装置１０００は、Ｉ／Ｏ要求を発行する装置であれば良く、例えば、ホスト計算機或いは他のストレージシステムとすることができる。
【００２８】
図２は、本実施形態の別の特徴の概念を示す。
【００２９】
ストレージシステム２は、各マイクロプロセッサ１２、３２の負荷を特定するための情報要素を含んだ負荷情報を所定の記憶域に保持し、且つ、その負荷情報を、各マイクロプロセッサ１２、３２の負荷の変化に応じて、更新する。
【００３０】
そのストレージシステム２には、ストレージシステム２を管理するためのサーバ（以下、管理サーバ）４０が接続されている。管理サーバ４０は、ストレージシステム２で管理されている負荷情報を取得し、取得した負荷情報を解析することにより、ストレージシステム２内の各ＣＨＰ１２やＤＫＰ３２の負荷がわかる。管理サーバ４０は、割り振り先の候補の全て（例えば、全てのマイクロプロセッサ１２、３２、全てのＤＫＰ３２、或いは、全てのＣＨＰ１２）の負荷が、Ｉ／Ｏ処理部分のオフロードを引き受けられない程に高い（例えば、負荷が所定の閾値よりも高い）ことがわかった場合、マイクロプロセッサの増設を提示するための増設提示情報（例えば、マイクロプロセッサの増設を指示するメッセージ）を出力する。管理者は、出力された増設提示情報を見た場合に、一以上のマイクロプロセッサをストレージシステム２に増設する。
【００３１】
具体的には、例えば、図２に示すように、全てのＣＨＰ１２の負荷が高くなったことがわかった場合には、ライトＩ／Ｏ処理部分の割り振り先の候補が無い状態なので、管理サーバ４０により、ＣＨＰの増設を提示するための増設提示情報が出力される。管理者は、その増設提示情報を見た場合、一以上のＣＨＰ１２を備えたプロセッサパッケージ（例えば後述のＣＨＡ）１０をストレージシステム２に増設する。ライトＩ／Ｏ処理部分の割り振り元のＣＨＰ１２は、プロセッサパッケージ１０が増設されたことを検出した場合に、増設されたプロセッサパッケージ１０に備えられている他のＣＨＰ１２に、ライトＩ／Ｏ処理部分をオフロードする。
【００３２】
以下、本実施形態について詳細に説明する。
【００３３】
図３は、ストレージサブシステム２の構成例を示す。
【００３４】
ストレージシステム２は、例えば、配列された複数の記憶装置３を備えるディスクアレイ装置である。ストレージシステム２には、上位装置の一種でありＩ／Ｏ要求を発行するホスト計算機（以下、単にホスト）１や、ストレージシステム２を管理するための前述した管理サーバ４０が接続される。ストレージシステム２は、コントローラ部と、複数の記憶装置３（図３には１つのみ図示）とを備える。
【００３５】
記憶装置３としては、例えば、ハードディスク、フレキシブルディスク、磁気テープ、半導体メモリ、光ディスク等のようなデバイスを用いることができる。以下、記憶装置３は、ハードディスクドライブとし、それを「ディスク」と略称する。複数のディスク３には、複数の論理ユニット（図示せず）が用意される。各論理ユニットは、例えば、複数のディスク３のうちの二以上のディスク３がＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）の法則に従ってグループ化され、グループ化された二以上のディスク３（以下、パリティグループと呼ぶが、ＲＡＩＤグループ或いはアレイグループと呼ばれることもある）が有する記憶資源を用いて用意された論理的な記憶デバイスである。
【００３６】
コントローラ部は、ストレージシステム２で行われる処理を制御する部であり、具体的には、例えば、一以上のチャネルアダプタ（ＣＨＡ）４と、一以上のディスクアダプタ（ＤＫＡ）３０と、サービスプロセッサ（ＳＶＰ）６と、キャッシュメモリ２０と、共有メモリ６０と、内部ネットワーク７とを備える。
【００３７】
各ＣＨＡ４は、ホスト１との間のデータ通信を行う回路基盤である。各ＣＨＡ４は、ホストＩ／Ｆポート１１と、ＣＨＰ１２と、ＣＨＰ１２にとってのローカルなメモリ（以下、ローカルメモリ１３）と、内部ネットワーク７に接続される内部Ｉ／Ｆ１６とを備える。ローカルメモリ１３には、ＣＨＰ１２に実行されるコンピュータプログラム、例えば、Ｉ／Ｏ処理プログラム１４や、周期処理プログラム１５が記憶される。
【００３８】
ＣＨＡ４の数や、一つのＣＨＡ４に備えられる前述の構成要素の数は、一以上であれば幾つでも良い。特に、例えば、ＣＨＡ４の数や、一つのＣＨＡ４に搭載されるＣＨＰ１２の数は、ストレージシステム２内に複数のＣＨＰ１２が存在すれば、幾つでもよい。ホストＩ／Ｆポート１１とＣＨＰ１２は関連付けられており、一つのＣＨＡ４に複数のホストＩ／Ｆポート１１及び複数のＣＨＰ１２が備えられている場合には、Ｉ／Ｏ要求を受信したホストＩ／Ｆポート１１に関連付けられているＣＨＰ１２が、そのＩ／Ｏ要求の処理を実行する。なお、前述したように、本実施形態では、ＣＨＰ１２は、自分の負荷が所定の基準値よりも高い場合には、他のＣＨＰ１２或いはＤＫＰ３２に、そのＩ／Ｏ処理部分をオフロードすることができる。
【００３９】
各ＤＫＡ３０は、ディスク３との間のデータ授受を行うものである。ＤＫＡ３０のハードウェア構成としては、ＣＨＡ４と同様とすることができる。すなわち、ＤＫＡ３０は、内部Ｉ／Ｆ３１や、ＤＫＰ３２や、ＤＫＰ３２にとってのローカルなメモリ（ローカルメモリ３３）や、ディスク３とデータを授受するディスクＩ／Ｆポート３６を備える。ローカルメモリ３３に記憶されているＩ／Ｏ処理プログラム３４や周期処理プログラム３５のうち少なくともＩ／Ｏ処理プログラム３４は、マイクロプロセッサをＤＫＰ３２として実行させるためのコンピュータプログラムである。ＤＫＡ３０とディスク３との通信は、例えば、種々の通信媒体、例えば、ＦＣ−ＡＬ（Fibre Channel Arbitration Loop）、ＦＣスイッチ、或いはＳＡＳ（Serial Attached SCSI）スイッチ（ＳＡＳエクスパンダと呼ばれることもある）を介して行われる。
【００４０】
ＳＶＰ６は、ストレージシステム２の保守又は管理のために操作されるコンピュータ装置である。ＳＶＰ６は、ＳＶＰ６にとってのローカルなメモリ（ローカルメモリ５０）を備え、そのローカルメモリ５０に記憶されている負荷情報収集プログラム５１を実行することにより、前述した負荷情報を収集し、収集された負荷情報を、管理Ｉ／Ｆポート５を介して管理サーバ４０に送信することができる。なお、管理サーバ４０は、一種の計算機であり、ＣＰＵ４３や、ストレージシステム２と通信するためのインターフェース（Ｉ／Ｆ）４４や、管理プログラム４２が記憶されたメモリ４１を備える。ＣＰＵ４３が管理プログラム４２を実行することにより、ストレージシステム２に負荷情報を求めるための負荷情報取得要求が発行され、その負荷情報取得要求がサービスプロセッサ６に受信された場合に、前述した負荷情報収集プログラム５１により、収集された負荷情報を管理サーバ４０が受けることができる。
【００４１】
内部ネットワーク７は、各ＣＨＡ４、各ＤＫＡ３０、ＳＶＰ６、キャッシュメモリ２０及び共有メモリ６０を相互に接続させる。内部ネットワーク７は、例えば、高速スイッチング動作によってデータ伝送を行う超高速クロスバススイッチ等のような高速バスとして構成することができる。また、LAN、SANのような通信ネットワークでも構成でき、さらに、前述の高速バスとともに複数のネットワークでも構成することができる。
【００４２】
キャッシュメモリ２０は、ホスト１から受信したデータや、ディスク３から読み出されたデータ等を一時的に記憶するものである。キャッシュメモリ２０には、データを記憶するメモリモジュール２２と、メモリモジュール２２に対するデータの読み書きを制御するメモリコントローラ２１とを備える。メモリコントローラ２１は、内部ネットワーク７を介して受信したデータをメモリモジュール２２に書込んだり、メモリモジュール２２からデータを読み出して内部ネットワーク７を介しＣＨＡ４或いはＤＫＡ３０に送信したりする。
【００４３】
共有メモリ６０は、ストレージシステム２の制御に用いられる制御情報を記憶したメモリであり、ＣＨＡ４とＤＫＡ３０に共有されるメモリである。共有メモリ６０は、キャッシュメモリ２０と一体にされてもよい。共有メモリ６０には、例えば、ステージング要求先テーブル６２、ライト振り先テーブル６１、オフロード許可ビットマップ６４、キャッシュ制御情報６３、プロセッサ稼働率情報６６、内部データパス利用率情報６５、キャッシュメモリ負荷情報６８、Ｉ／Ｏカウント値６７及びオフロード失敗カウント値６９が記憶される。
【００４４】
ステージング要求先テーブル６２は、ディスク３に記憶されたデータをキャッシュメモリ２０に読み出すこと（ステージ）を実行するマイクロプロセッサ、換言すれば、リードＩ／Ｏ処理部分の割り振り先のＤＫＰ、を決定するために使用されるテーブルである。ステージング要求先テーブル６２の構成例を図４に示す。ステージング要求先テーブル６２には、ホストＩ／Ｆポート１１毎に、ポート番号、ＬＵＮ（論理ユニット番号）、ディスクＩＤ及び振り先プロセッサＩＤが記録される。一つのＬＵＮには、そのＬＵＮを提供する全て（例えば４つ）のディスクのＩＤが対応付けられている。ＬＵＮは、例えば、Ｉ／Ｏ要求で指定されている。ディスクＩＤは、例えば、Ｉ／Ｏ要求で指定されている先頭論理ブロックアドレスを変換して得られる内部アドレスを基に特定されるＩＤである。このテーブル６２では、一つのポート番号、一つのＬＵＮ及び一つのディスクＩＤに対して、一つの振り先プロセッサＩＤが対応付けられている。ＣＨＰ１２は、リード要求を受けたホストＩ／Ｆポート１１のポート番号と、そのリード要求から求まるＬＵＮ及びディスクＩＤに対応する一以上の振り先プロセッサを、リードＩ／Ｏ処理部分の割り振り先とする。
【００４５】
ライト振り先テーブル６１は、ライトＩ／Ｏ処理部分の割り振り先のＣＨＰを決定するために使用されるテーブルである。ライト振り先テーブル６１の構成例を図５に示す。ライト振り先テーブル６１には、複数の領域の各々に対応するＩＤと振り先プロセッサＩＤとが記録される。ここで言う「領域」とは、Ｉ／Ｏ要求に含まれている情報（例えば、ＬＵＮ及び先頭論理ブロックアドレスのようなアクセス先情報）を用いて特定されるアクセス先のことである。具体的には、例えば、領域は、ＤＫＡ３０側の論理的なアドレス空間（上記アクセス先情報を変換することにより得られるアドレスの範囲）を構成する要素である。本実施形態では、所定個数の領域毎に（つまり周期的に）、同じ領域ＩＤが割り当てられる（図６の例では、１０個の領域毎に（例えば、領域Ａ０１の後の領域Ａ１１に）、同一の領域ＩＤ（例えば０）が割り当てられる）。各領域ＩＤには、一つの振り先プロセッサＩＤ（ＣＨＰのＩＤ）が対応付けられている。このような構成により、ライトＩ／Ｏ処理部分の割り振り先が特定のＣＨＰ１２に集中してしまうのを抑えることができる。なお、このライト振り先テーブル６１では、ライトＩ／Ｏ処理部分のオフロードが行われない領域の領域ＩＤには、無効値（無効な振り先プロセッサＩＤ、例えば、プロセッサＩＤとして存在し得ない値）が対応付けられる。また、このライト振り先テーブル６１に記録される振り先プロセッサＩＤは、各ＣＨＰ１２の負荷に応じて、増減される。例えば、ＣＨＰ１２は、自分の負荷が高くなった場合に、一又は複数の領域ＩＤに対応付けられている自分のプロセッサＩＤを無効値に変更し、逆に、自分の負荷が低くなった場合に、一又は複数の領域ＩＤに対応付けられている無効値を自分のプロセッサＩＤに変更することができる。
【００４６】
オフロード許可ビットマップ６４は、各ＤＫＰ３２に対してリードＩ／Ｏ処理部分をオフロードしてもよいか否かを表わすビットマップである。具体的には、例えば、図７に例示するように、各ＤＫＰ３２のＩＤ（プロセッサＩＤ）に１ビットが対応しており、その１ビットは、オフロード可を表す値（例えば"１"）か、又は、オフロード不可を表す値（例えば"０"）となる。
【００４７】
キャッシュ制御情報６３は、キャッシュヒットしたか否かの判定や排他制御などのキャッシュ制御に使用される情報である。キャッシュ制御情報６３には、例えば、複数のキャッシュ領域（例えば、メモリモジュール２２の一記憶域）の各々について、キャッシュ領域のキャッシュポインタ（以下、キャッシュポインタ）と、キャッシュポインタの属性情報とが含まれる。属性情報としては、例えば、ロックの有無と、キャッシュ領域のステータスと、データの領域アドレスとが含まれる。キャッシュ領域の状態としては、例えば、未割り当てであることを意味する"フリー"と、キャッシュ領域に記憶されているデータがディスク３に未反映であることを意味する"ダーティ"と、キャッシュ領域３に記憶されているデータがディスク３に存在することを意味する"クリーン"とがある。各マイクロプロセッサ１２、３２は、リードＩ／Ｏ処理やライトＩ／Ｏ処理でのキャッシュヒット判定の場合には、キャッシュ領域ステータスがクリーン又はダーティであり、且つ、データ領域アドレスが、リード要求或いはライト要求で指定されているアクセス先情報（例えばＬＵＮや先頭論理ブロックアドレス）を変換することにより得られたアドレスに対応していれば、キャッシュヒットとし、そうでなければ、キャッシュミスとする。各マイクロプロセッサ１２、３２は、キャッシュヒットとなった場合には、キャッシュ領域をロックし（ロック有りとし）、キャッシュミスとなった場合には、キャッシュ領域を割り当てて（例えば、未割り当てのキャッシュ領域を選択し、選択したキャッシュ領域に対応するデータ領域アドレスに、Ｉ／Ｏ要求のアクセス先情報を変換して得られたアドレスを設定し）、割り当てたキャッシュ領域をロックする。このように、キャッシュ領域をロックすることにより、他のＣＨＰ１２や他のＤＫＰ３２からそのキャッシュ領域がロックされないようになる、つまり、キャッシュ領域のいわゆる排他制御が行われる。なお、キャッシュ領域が解放される場合には、例えば、ロック有無がロック無しとされる。また、キャッシュヒットしたか否かの判定や、キャッシュ領域のロックの方法は、他の方法が採用されても良い。
【００４８】
プロセッサ稼働率情報６６は、各マイクロプロセッサ１２、３２の稼働率を表す。具体的には、例えば、各マイクロプロセッサ１２、３２のＩＤ毎に、稼働率が記録される。
【００４９】
内部データパス利用率情報６５には、各アダプタ４、３０において、そのアダプタ４、３０が有する内部パス（例えば外部Ｉ／Ｆポート１１、３６から内部Ｉ／Ｆ１６、３６にかけたパス）の転送能力に対して実際にデータ転送で使用されている能力を表す率（以下、内部データパス利用率）が記録される。内部データパス利用率は、例えば、各アダプタ４、３０毎に記録される。
【００５０】
キャッシュメモリ負荷情報６８は、キャッシュメモリ２０にかかっている負荷を表す情報であり、例えば、キャッシュメモリ２０の転送能力に対して実際にデータ転送で使用されている能力を表す率（以下、これを「キャッシュメモリ負荷」と言う）である。
【００５１】
Ｉ／Ｏカウント値６７は、ストレージシステム２のＩ／Ｏ要求の処理回数（受信回数であってもよい）のカウント値である。Ｉ／Ｏカウント値６７は、例えば、Ｉ／Ｏ要求を受信する都度に、カウント値が１増やされる。Ｉ／Ｏカウント値６７は、周期的にリセットされても良いし、リセットされずに更新されていってもよい。
【００５２】
オフロード失敗カウント値６９は、Ｉ／Ｏ処理部分のオフロードに失敗した回数のカウント値である。オフロード失敗カウント値６９は、例えば、振り元プロセッサがオフロードしようとしたが振り先プロセッサの都合によりオフロードできなかった場合に、１増やされる。振り先プロセッサの数が不足すると、この値が増えやすくなる。オフロード失敗カウント値６９は、Ｉ／Ｏカウント値６７と同じ周期でリセットされても良いし、リセットされずに更新されていってもよい。
【００５３】
以下、本実施形態で行われる処理の流れの一例を説明する。
【００５４】
図８は、ＣＨＰ１２でＩ／Ｏ処理プログラム１４が実行されることにより行われる処理の流れの一例を示す。
【００５５】
Ｉ／Ｏ処理プログラム１４は、イベント待ちになっており（ステップＳ１）、イベントが発生した場合には、そのイベントの種別を判定する（Ｓ２）。
【００５６】
Ｓ２の結果、イベントが、ホスト１からリード要求の受信であった場合には、Ｉ／Ｏ処理プログラム１４は、リードＩ／Ｏ処理を実行する（Ｓ３）。Ｓ２の結果、イベントが、ホスト１からライト要求の受信であった場合には、Ｉ／Ｏ処理プログラム１４は、ライトＩ／Ｏ処理を実行する（Ｓ４）。Ｓ２の結果、イベントが、他のＣＨＰからのコピー要求であった場合には、Ｉ／Ｏ処理プログラム１４は、ライト振り先処理を実行する（Ｓ５）。
【００５７】
図９は、図８のＳ３であるリードＩ／Ｏ処理の流れの一例を示す。
【００５８】
Ｉ／Ｏ処理プログラム１４は、自分を実行しているＣＨＰ１２のプロセッサ稼働率と、所定の基準値とを比較する（Ｓ１１）。そのプロセッサ稼働率は、Ｓ１１の比較の直前に算出された値であっても良いし、プロセッサ稼働率情報６６から読み出された、自分を実行しているＣＨＰ１２に対応した値であっても良い。Ｓ１１の比較の結果、プロセッサ稼働率が基準値以下であれば（Ｓ１１でＮｏ）、通常リードＩ／Ｏ処理（Ｓ１７）が行われ、一方、プロセッサ稼働率が基準値を超えていれば（Ｓ１１でＹｅｓ）、Ｓ１２が行われる。
【００５９】
Ｓ１２では、Ｉ／Ｏ処理プログラム１４は、ステージング要求先テーブル６２から、リード要求を受信したホストＩ／Ｆポート１１のポート番号と、そのリード要求から求まるＬＵＮ及びディスクＩＤに対応した一以上の振り先プロセッサＩＤを取得する。また、Ｉ／Ｏ処理プログラム１４は、オフロード許可ビットマップ６４を参照し、Ｓ１２で取得された各振り先プロセッサＩＤに対応する各ビットの値を認識する（Ｓ１３）。
【００６０】
Ｓ１３の結果、振り先プロセッサＩＤに対応したビットが、オフロード不可を表す値になっていたならば（Ｓ１３でＮｏ）、Ｉ／Ｏ処理プログラム１４は、オフロード失敗カウント値６９に１を足し（Ｓ１６）、通常リード処理（Ｓ１７）を実行する。一方、Ｓ１３の結果、振り先プロセッサＩＤに対応したビットが、オフロード可を表す値になっていたならば（Ｓ１３でＹｅｓ）、Ｉ／Ｏ処理プログラム１４は、リード振り元処理（Ｓ１４）を実行する。ここでは、各振り先プロセッサＩＤについて、同じ結果になることもあれば、或る振り先プロセッサＩＤについてはオフロードが行われるが別の振り先プロセッサＩＤについてはオフロードに失敗するということもあり得る。
【００６１】
Ｓ１４或いはＳ１７が終了した場合、Ｉ／Ｏ処理プログラム１４は、Ｉ／Ｏカウント値６７に１を足す（Ｓ１５）。
【００６２】
図１０は、図９のＳ１４であるリード振り元処理の流れの一例を示す。図１１は、図１０のリード振り元処理が実行されることにより行われるリード振り先処理の流れの一例を示す。
【００６３】
Ｉ／Ｏ処理プログラム１４は、図９のＳ１２で取得された各振り先プロセッサＩＤ（オフロード可のビット値に対応した各振り先プロセッサＩＤ）に対応する各ＤＫＰ３２に、データ確保要求を送る（Ｓ２１）。データ確保要求を受けたＤＫＰ３２では、Ｉ／Ｏ処理プログラム３４が、図１１のリード振り先処理を実行する。
【００６４】
Ｉ／Ｏ処理プログラム３４は、まず、キャッシュヒット判定を行う（Ｓ３１）。
【００６５】
Ｓ３１の結果、キャッシュヒットならば、Ｉ／Ｏ処理プログラム３４は、キャッシュヒットとなったキャッシュ領域をロックし（Ｓ３２）、ステージング済みなので、ステージングすることなく振り元プロセッサ（データ確保要求の送信元のＣＨＰ１２）に完了報告を送る（Ｓ３５）。一方、Ｓ３１の結果、キャッシュミスならば、Ｉ／Ｏ処理プログラム３４は、キャッシュ領域を割り当ててロックし（Ｓ３２）、ステージングを行い（すなわち、リード要求対象のデータをディスク３から読み出し、ロックされたキャッシュ領域に格納し）（Ｓ３４）、振り元プロセッサに完了報告を送る（Ｓ３５）。
【００６６】
振り元プロセッサにおいて、Ｉ／Ｏ処理プログラム１４は、図１０のＳ２１の後、振り先プロセッサからの完了報告を待っており（Ｓ２２）、完了報告を受けたならば、ロックされたキャッシュ領域に格納されているデータを読み出し、読み出したデータをホスト１（リード要求の送信元）に送り（Ｓ２３）、且つ、ステータス（例えば読出し終了）も、そのホスト１に送る（Ｓ２４）。そして、Ｉ／Ｏ処理プログラム１４は、振り先プロセッサ（ＤＫＰ３２）に、キャッシュ解放要求を送る（Ｓ２５）。
【００６７】
振り先プロセッサにおいて、Ｉ／Ｏ処理プログラム３４は、図１１のＳ３５の後、振り元プロセッサからのキャッシュ解放要求を待っており（Ｓ３６）、キャッシュ解放要求を受けたならば、キャッシュ領域を解放する（Ｓ３７）。具体的には、例えば、Ｉ／Ｏ処理プログラム３４は、キャッシュ制御情報６３における、キャッシュ領域に対応したロック有りを、ロック無しに変更することにより、そのキャッシュ領域を解放する。
【００６８】
以上のように、リード振り元処理が行なえれば、リードＩ／Ｏ処理部分がＤＫＰ３２にオフロードされるが、リード振り元処理が行えなければ、図９を参照して説明した通り、通常リードＩ／Ｏ処理が行われる。
【００６９】
図１２は、通常リードＩ／Ｏ処理の流れの一例の概要を示す。
【００７０】
ＣＨＰ１２で実行されるＩ／Ｏ処理プログラム１４が、キャッシュヒット判定を行い、その結果、キャッシュミスとなれば、キャッシュ領域を割り当ててロックし、ステージング要求を、リード要求対象のデータのあるディスク３に対応したＤＫＰ３２に送信し、完了報告を待つ。
【００７１】
ＤＫＰ３２で実行されるＩ／Ｏ処理プログラム３４が、ＣＨＰ１２からのステージング要求に応答して、キャッシュヒット判定を行う。既にキャッシュが割り当てられているので、その判定では、キャッシュヒットなる。Ｉ／Ｏ処理プログラム３４は、キャッシュヒットとなったキャッシュ領域をロックし（つまり、そのキャッシュ領域は二重にロックされ）、ステージングを行う。それが終了したら、Ｉ／Ｏ処理プログラム３４は、完了報告をＣＨＰ１２に返信し、且つ、ロックしたキャッシュ領域を解放する。
【００７２】
ＣＨＰ１２で実行されるＩ／Ｏ処理プログラム１４が、完了報告を受けたならば、自分がロックしたキャッシュ領域からデータを読出し、読み出したデータをホスト１に送信し、且つ、ステータスを送信する。それが終了したら、Ｉ／Ｏ処理プログラム１４は、自分がロックしたキャッシュ領域を解放する。
【００７３】
以上の通常リードＩ／Ｏ処理と、前述したリード振り元処理及びリード振り先処理（それらが行われる場合のリードＩ／Ｏ処理の流れの概要を図１３に示す）とを比較すると、振り元のＣＨＰ１２から、リードＩ／Ｏ処理部分として、例えば、キャッシュヒットの判定、キャッシュを割り当ててロックする処理、及びキャッシュ領域を解放する処理（以下、これらを「キャッシュ制御処理」と総称する）がオフロードされているのがわかる（なお、最後に通信が増えているのは、Ｉ／Ｏ処理の完了まで振り先ＤＫＰ３２にロックを保持させるためである）。通常リードＩ／Ｏ処理において、キャッシュ制御処理が、他の処理に比して負荷が高い。その高負荷のキャッシュ制御処理のオフロードを実行するために、プロセッサ稼働率のチェックや、オフロード可否のチェックを含む、通常リードＩ／Ｏ処理とは異なる図９のリードＩ／Ｏ処理が行われ、リード要求を受けたＣＨＰ１２の負荷（プロセッサ稼働率）が基準値以下の場合、或いは、オフロード不可の場合に、通常リードＩ／Ｏ処理が行われる。
【００７４】
以上のようにして、リード要求を受けたＣＨＰ１２の負荷が高い場合には、リードＩ／Ｏ処理部分が、ＣＨＰ１２からＤＫＰ３２にオフロードされる。これにより、振り元ＣＨＰ１２の負荷を下げて振り元プロセッサＣＨＰ１２のネックを回避することができ、以って、１ポート限界性能の向上につながる。なお、ＣＨＰ１２からＤＫＰ３２にリードＩ／Ｏ処理部分がオフロードされても、ＣＨＰ１２の負荷が低くなった分だけＤＫＰ３２の負荷が高くなるわけではなく、ＤＫＰ３２の負荷にあまり大きな変化は無いと考えられる。オフロードの有無に関わらず（つまり通常リードＩ／Ｏ処理でも）、ＤＫＰ３２はキャッシュ制御処理を行うためである。
【００７５】
図１４は、図８のＳ４であるライトＩ／Ｏ処理の流れの一例を示す。
【００７６】
Ｉ／Ｏ処理プログラム１４は、自分を実行しているＣＨＰ１２のプロセッサ稼働率と、所定の基準値とを比較する（Ｓ４１）。Ｓ４１の比較の結果、プロセッサ稼働率が基準値以下であれば（Ｓ４１でＮｏ）、Ｉ／Ｏ処理プログラム１４は、通常ライトＩ／Ｏ処理を行い（Ｓ４７）、一方、プロセッサ稼働率が基準値を超えていれば（Ｓ４１でＹｅｓ）、Ｓ４２を行う。
【００７７】
Ｓ４２では、Ｉ／Ｏ処理プログラム１４は、ライト振り先テーブル６１から、ライト要求から求まる領域のＩＤに対応した振り先プロセッサＩＤを取得する。Ｉ／Ｏ処理プログラム１４は、取得された振り先プロセッサＩＤが無効値であれば（Ｓ４３でＮｏ）、オフロード失敗カウント値６９に１を足し（Ｓ４６）、通常ライト処理（Ｓ１７）を実行する。一方、取得された振り先プロセッサＩＤが無効値でなければ（Ｓ４３でＹｅｓ）、Ｉ／Ｏ処理プログラム１４は、ライト振り元処理（Ｓ４４）を実行する。
【００７８】
Ｓ４４或いはＳ４７が終了した場合、Ｉ／Ｏ処理プログラム１４は、Ｉ／Ｏカウント値６７に１を足す（Ｓ４５）。
【００７９】
図１５は、図１４のＳ４４であるライト振り元処理の流れの一例を示す。図１６は、図１５のライト振り元処理が実行されることにより行われるライト振り先処理（図８のＳ５）の流れの一例を示す。
【００８０】
Ｉ／Ｏ処理プログラム１４は、ホスト１からデータ（ライト要求に従うデータ）を受領し、受領したデータをバッファに格納する（Ｓ５１）。バッファは、ストレージシステム２における記憶域であれば、どこに存在しても良いが、本実施形態では、キャッシュメモリ２０に設けられる。
【００８１】
Ｉ／Ｏ処理プログラム１４は、図１４のＳ４２で取得された振り先プロセッサＩＤに対応する他のＣＨＰ１２に、コピー要求を送る（Ｓ２１）。これにより、他のＣＨＰ１２では、図８において、コピー要求受信というイベントの発生となる。なお、そのコピー要求には、例えば、バッファに格納されたデータのポインタが含まれている。
【００８２】
他のＣＨＰ１２に実行されるＩ／Ｏ処理プログラム１４（以下、他のＩ／Ｏ処理プログラム１４）は、コピー要求に応答して、まず、キャッシュヒット判定を行う（図１６のＳ６１）。
【００８３】
Ｓ６１の結果、キャッシュヒットならば、他のＩ／Ｏ処理プログラム１４は、キャッシュヒットとなったキャッシュ領域をロックし（Ｓ６３）、Ｓ６４を行う。一方、Ｓ６１の結果、キャッシュミスならば、他のＩ／Ｏ処理プログラム１４は、キャッシュ領域を割り当ててロックし（Ｓ６２）、受信したコピー要求から特定されるデータを、バッファから、ロックされたキャッシュ領域にコピーする（Ｓ６４）。そして、他のＩ／Ｏ処理プログラム１４は、振り元プロセッサに完了報告を送り、ロックされているキャッシュ領域を解放する（Ｓ６６）。
【００８４】
振り元プロセッサにおいて、Ｉ／Ｏ処理プログラム１４は、図１５のＳ５２の後、振り先プロセッサからの完了報告を待っており（Ｓ５３）、完了報告を受けたならば、ステータス（例えば書き込み終了）を、ライト要求の送信元のホスト１に送る（Ｓ５４）。
【００８５】
以上のように、ライト振り元処理が行なえれば、ライトＩ／Ｏ処理部分が他のＣＨＰ１２にオフロードされるが、ライト振り元処理が行えなければ、図１４を参照して説明した通り、通常ライトＩ／Ｏ処理が行われる。
【００８６】
図１７は、通常ライトＩ／Ｏ処理の流れの一例の概要を示す。
【００８７】
Ｉ／Ｏ処理プログラム１４が、キャッシュヒット判定を行い、その結果、キャッシュミスとなれば、キャッシュ領域を割り当ててロックし、ホスト１からデータを受領し、受領したデータをキャッシュ領域に格納して、ホスト１にステータスを返信し、キャッシュ領域を解放する。
【００８８】
以上の通常ライトＩ／Ｏ処理と、前述したライト振り元処理及びライト振り先処理（それらが行われる場合のライトＩ／Ｏ処理の流れの概要を図１８に示す）とを比較すると、振り元のＣＨＰ１２から、ライトＩ／Ｏ処理部分として、例えば、前述したキャッシュ制御処理（具体的には、キャッシュヒットの判定、キャッシュを割り当ててロックする処理、及びキャッシュ領域を解放する処理）が、オフロードされているのがわかる。通常ライトＩ／Ｏ処理において、キャッシュ制御処理が、他の処理に比して負荷が高い。その高負荷のキャッシュ制御処理のオフロードを実行するために、プロセッサ稼働率のチェックや、振り先プロセッサＩＤが有効か否かの判定を含む、通常ライトＩ／Ｏ処理とは異なる図１４のライトＩ／Ｏ処理が行われ、ライト要求を受けたＣＨＰ１２の負荷（プロセッサ稼働率）が基準値以下の場合、或いは、振り先プロセッサＩＤが無効値の場合に、通常ライトＩ／Ｏ処理が行われる。
【００８９】
以上のようにして、ライト要求を受けたＣＨＰ１２の負荷が高い場合には、ライトＩ／Ｏ処理部分が、ＣＨＰ１２から他のＣＨＰ１２にオフロードされる。これにより、振り元ＣＨＰ１２の負荷を下げて振り元プロセッサＣＨＰ１２のネックを回避することができ、以って、１ポート限界性能の向上につながる。なお、本実施形態では、ＣＨＰ１２がバッファにデータを格納し、割り振り先の他のＣＨＰ１２が、キャッシュ領域を確保して、バッファからそのキャッシュ領域にデータをコピーしている。つまり、二重にキャッシュメモリ２０にデータを書いている。このため、一見手間に見えるが、正しくキャッシュ領域を確保する処理が高負荷なので、上記のようにした方が、ＣＨＰ１２にとって負荷が軽くなる。
【００９０】
また、本実施形態によれば、ライトＩ／Ｏ処理は、ホスト１からのデータをキャッシュ領域に格納する処理と、該データをキャッシュ領域からディスク３書込む処理とに分けることができる。ＤＫＰ３２は、後者の処理を行う必要があり、複数のディスク３によりパリティグループとする構成を採っていると、データの書き込みのために複数のＤＫＰ３２が働くことになる。一方、ＣＨＰ１２は、ホストからＩ／Ｏ要求を受けなければ低負荷である。これらの点を鑑みて、本実施形態では、ライトＩ／Ｏ処理部分はＤＫＰ３２ではなく他のＣＨＰ１２にオフロードされる。
【００９１】
また、本実施形態によれば、リードＩ／Ｏ処理部分を他のＣＨＰ１２にオフロードしてしまうと、キャッシュミスの場合に、他のＣＨＰ１２からＤＨＰ３２にステージング要求を送信するという無駄が生じてしまう。この点に鑑みて、本実施形態では、リードＩ／Ｏ処理部分は他のＣＨＰ１２ではなくＤＫＰ３２にオフロードされる。
【００９２】
さて、次に、ＣＨＰ１２の周期処理について説明する。その周期処理では、ＣＨＰ１２の稼働率、そのＣＨＰ１２を搭載したＣＨＡ４のデータパス利用率、及びキャッシュメモリ負荷に応じて、そのＣＨＰ１２の担当する領域を増減する処理が行われる。
【００９３】
図１９は、ＣＨＰ１２の周期処理の流れの一例を示す。この周期処理は、周期処理プログラム１５がＣＨＰ１２により実行されることにより行われる。
【００９４】
ＣＨＰ１２は、自分の稼働率を、共有メモリ６０のプロセッサ稼働率情報に、自分のプロセッサＩＤに対応付けて書く（Ｓ７１）。
【００９５】
また、ＣＨＰ１２は、自分を搭載しているＣＨＡ４の内部データパス利用率を、内部Ｉ／Ｆ１６のレジスタから読んで、共有メモリ６０の内部データパス利用率情報６５に、そのＣＨＡ４のＩＤに対応付けて書く（Ｓ７２）。内部データパス利用率は、例えば、ＣＨＡ４の所定の構成要素（例えば内部Ｉ／ＦのＬＳＩ）によって、定期的に、内部Ｉ／Ｆのレジスタ（図示せず）に書かれるようになっている。内部データパス利用率が書かれる場所は、そのレジスタに限らず、ＣＨＡ４の他の場所であっても良い。
【００９６】
さらに、ＣＨＰ１２は、キャッシュメモリ負荷情報を、キャッシュメモリ２０のメモリコントローラ２１のレジスタから読んで、共有メモリ６０に書く（Ｓ７３）。キャッシュメモリ負荷情報は、メモリコントローラ２１によって、それのレジスタ（図示せず）に書かれるようになっている。キャッシュメモリ情報が書かれる場所は、そのレジスタに限らず、他の場所であっても良い。
【００９７】
ＣＨＰ１２は、Ｓ７１で書いたプロセッサ稼働率が稼働率基準値以上か未満であるかを判定する（Ｓ７４）。プロセッサ稼働率が稼働率基準値未満であれば、ＣＨＰ１２は、Ｓ７２で書いた内部データパス利用率が利用率基準値以上か未満かを判定する（Ｓ７５）。その内部データパス利用率が利用率基準値未満であれば、ＣＨＰ１２は、Ｓ７３で書いたキャッシュメモリ負荷情報が表すキャッシュメモリ負荷が負荷基準値以上か未満かを判定する（Ｓ７６）。そのキャッシュメモリ負荷が負荷基準値未満であれば、ＣＨＰ１２は、ライト担当領域拡大処理（Ｓ７７）を実行し、Ｓ７４、Ｓ７５及びＳ７６のうちの一つでも以上と判断された場合には、ライト担当領域縮小処理（Ｓ７８）を実行する。
【００９８】
以上の処理によれば、ＣＨＰ１２は、自分に対してライトＩ／Ｏ処理部分が割り振られた方が好ましい場合には、自分が割り振り先に決定される確率を高めるためにライト担当領域拡大処理を行い、反対に、自分に対してライトＩ／Ｏ処理部分が割り振られない方が好ましい場合には、自分が割り振り先に決定される確率を低めるためにライト担当領域縮小処理を行う。なお、プロセッサ稼働率が稼働率基準値以上の場合にライト担当領域縮小処理を行うのは、割り振りを受けるとプロセッサ稼働率が一層高くなってしまうので、それを防ぐためである。また、内部データパス利用率が利用率基準値以上の場合にライト担当領域縮小処理を行うのは、割り振りを受けると内部データパス利用率が高くなってしまうので、それを防ぐためである。キャッシュメモリ負荷が負荷基準値以上の場合にライト担当領域縮小処理を行うのは、割り振りを受けるとキャッシュメモリ２０との通信回数が増えてしまうので、それを防ぐためである。
【００９９】
図２０は、ライト担当領域拡大処理の流れの一例を示す。
【０１００】
ＣＨＰ１２は、ライト振り先テーブル６１の先頭要素（先頭行）を検査対象とし（Ｓ８１）、その検査対象における振り先プロセッサＩＤが無効値か否かを判定する（Ｓ８２）。
【０１０１】
Ｓ８２の結果、無効値であれば、ＣＨＰ１２は、その無効値を自分のプロセッサＩＤに変えて（Ｓ８３）、処理を終了する。
【０１０２】
一方、Ｓ８２の結果、無効値でなければ、ＣＨＰ１２は、次の要素（次行）を検査対象として（Ｓ８４でＮｏ、Ｓ８５）、再びＳ８２の判定を行う。ＣＨＰ１２は、このような処理を、Ｓ８２で無効値が見つかるまで繰り返し、テーブル６１の全体を調査しても、無効値が見つからなければ（Ｓ８４でＹｅｓ）、処理を終了する。
【０１０３】
図２１は、ライト担当領域縮小処理の流れの一例を示す。
【０１０４】
ＣＨＰ１２は、ライト振り先テーブル６１の先頭要素（先頭行）を検査対象とし（Ｓ９１）、その検査対象における振り先プロセッサＩＤが自プロセッサＩＤか否かを判定する（Ｓ９２）。
【０１０５】
Ｓ９２の結果、自プロセッサＩＤであれば、ＣＨＰ１２は、自プロセッサＩＤを無効値に変えて（Ｓ９３）、処理を終了する。
【０１０６】
一方、Ｓ９２の結果、自プロセッサＩＤでなければ、ＣＨＰ１２は、次の要素（次行）を検査対象として（Ｓ９４でＮｏ、Ｓ９５）、再びＳ９２の判定を行う。ＣＨＰ１２は、このような処理を、Ｓ９２で自プロセッサＩＤが見つかるまで繰り返し、テーブル６１の全体を調査しても、自プロセッサＩＤが見つからなければ（Ｓ９４でＹｅｓ）、処理を終了する。
【０１０７】
さて、次に、ＤＫＰ３２の周期処理について説明する。その周期処理では、ＤＫＰ３２のプロセッサ稼働率に応じて、オフロード許可ビットマップをON／OFFする処理が行われる。
【０１０８】
図２２は、ＤＫＰ３２の周期処理の流れの一例を示す。この周期処理は、周期処理プログラム３５がＤＫＰ３２により実行されることにより行われる。
【０１０９】
ＤＫＰ３２は、自分の稼働率を、共有メモリ６０のプロセッサ稼働率情報に、自分のプロセッサＩＤに対応付けて書く（Ｓ１０１）。
【０１１０】
ＤＫＰ３２は、Ｓ１０１で書いたプロセッサ稼働率が稼働率基準値以上か未満であるかを判定する（Ｓ７４）。この稼働率基準値は、オフロードするか否かの判定で使用される基準値、或いは、ＣＨＰ１３の周期処理で使用される基準値と、同じ値であっても異なる値であっても良い。
【０１１１】
ＤＫＰ３２は、Ｓ７４で稼働率基準値未満であれば、オフロード許可ビットマップの、自プロセッサＩＤに対応するビットを１（ＯＮ）にし、一方、Ｓ７４で稼働率基準値以上であれば、オフロード許可ビットマップの、自プロセッサＩＤに対応するビットを０（ＯＦＦ）にする。
【０１１２】
以上の処理によれば、ＤＫＰ３２が、自分の負荷に応じて、自分が割り振り先として決定される確率を調整することができる。
【０１１３】
さて、次に、ハードウェアの増設を支援するための処理について説明する。その処理では、例えば、管理サーバ４０のＣＰＵ４３が管理プログラム４２を実行することによって、負荷チェック処理が定期的に或いは不定期的に行われる。
【０１１４】
図２３は、負荷チェック処理の流れの一例を示す。
【０１１５】
管理サーバ４０が、ＳＶＰ６に、負荷情報の取得要求を送り（Ｓ１１１）、負荷情報受信待ちとなる（Ｓ１１２）。ＳＶＰ６では、図２４に示すように、負荷情報取得要求待ちになっており（Ｓ１３１）、負荷情報取得要求を受けた場合、負荷情報（プロセッサ稼働率情報６６、内部データパス利用率情報６５、オフロード失敗カウント値６９、及びＩ／Ｏカウント値６７）が共有メモリ６０から読み出され（Ｓ１３２）、読み出された負荷情報が、管理サーバ４０に送られる（Ｓ１３３）。
【０１１６】
管理サーバ４０は、負荷情報を受信したならば、受信した負荷情報を表示する（Ｓ１１３）。また、管理サーバ４０は、負荷情報を用いてオフロード失敗率を算出し、算出されたオフロード失敗率が失敗率基準値以上か否かを判定する（Ｓ１１４）。オフロード失敗率は、例えば、オフロード失敗カウント値をＩ／Ｏカウント値で除算することにより算出される。
【０１１７】
Ｓ１１４の結果、オフロード失敗率が失敗率基準値以上であれば、管理サーバ４０は、振り先資源不足通知処理（Ｓ１１５）を実行する。
【０１１８】
図２５は、振り先資源不足通知処理の流れの一例を示す。
【０１１９】
管理サーバ４０は、負荷情報中の各プロセッサ稼働率が稼働率基準値以上か否かを比較し（Ｓ１２１）、稼働率基準値以上のプロセッサ稼働率があれば、「プロセッサ高負荷」のメッセージと、稼働率基準値以上の箇所（例えば、ＣＨＡ４或いはＤＫＡ３０のＩＤと、プロセッサＩＤ）を表示する（Ｓ１２２）。この表示に応答して、管理者は、例えば、高負荷のプロセッサがＣＨＰ１２であって、そのＣＨＰ１２の数が多いと感じたならば、ＣＨＡ４を増設すれば、オフロード失敗率を下げることが期待できるし、高負荷のプロセッサがＤＫＰ３２であり、ＤＫＰ３２の数が多いと感じたならば、ＤＫＡ３０を増設すれば、オフロード失敗率を下げることが期待できる。
【０１２０】
また、管理サーバ４０は、負荷情報中の各内部データパス利用率が利用率基準値以上か否かを比較し（Ｓ１２３）、利用率基準値以上のパッケージ（ＣＨＡ４或いはＤＫＡ３０）があれば、「内部データパス高負荷」のメッセージと、利用率基準値以上の箇所（例えば、ＣＨＡ４或いはＤＫＡ３０のＩＤ）を表示する（Ｓ１２４）。この表示に応答して、例えば、管理者は、高負荷のパッケージがＣＨＡ４であり、そのＣＨＡ４の数が多いと感じたならば、ＣＨＡ４を増設すれば、オフロード失敗率を下げることが期待できるし、高負荷のパッケージがＤＫＡ３０であり、そのＤＫＡ３０の数が多いと感じたならば、ＤＫＡ３０を増設すれば、オフロード失敗率を下げることが期待できる。
【０１２１】
以上のような負荷チェック処理や振り先資源不足通知処理により、管理者が振り先ネック解消のためにハードウェア増設を計画することを支援できる。
【０１２２】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、オフロード失敗カウント値は、リードとライト別に用意され、オフロード失敗率は、リードとライト別に算出され、その結果を基に、パッケージの増設が提示されても良い（例えば、リードのオフロード失敗率が基準値以上であるが故に振り先資源不足通知処理が行われた場合、増設対象は、ＤＫＡとなっても良い）。また、管理サーバ４０に代わって、ＳＶＰ６或いはホスト１が、負荷チェック処理及び振り先不足資源通知処理を行っても良い。また、共有メモリ６０に格納される種々の情報の少なくとも一部が各ローカルメモリ１３、３３に格納され、共有メモリ６０を参照する代わりにローカルメモリ１３或いは３３が参照されてもよい。また、キャッシュメモリ負荷が基準値以上であれば、キャッシュメモリの増設が提示されても良い。
【図面の簡単な説明】
【０１２３】
【図１】図１は、本発明の一実施形態の特徴の一つの概念を示す。
【図２】図２は、本実施形態の別の特徴の概念を示す。
【図３】図３は、ストレージサブシステム２の構成例を示す。
【図４】図４は、ステージング要求先テーブル６２の構成例を示す。
【図５】図５は、ライト振り先テーブル６１の構成例を示す。
【図６】図６は、実施の形態の説明で言う領域についての説明図である。
【図７】図７は、オフロード許可ビットマップ６４の構成例を示す。
【図８】図８は、ＣＨＰ１２でＩ／Ｏ処理プログラム１４が実行されることにより行われる処理の流れの一例を示す。
【図９】図９は、図８のＳ３であるリードＩ／Ｏ処理の流れの一例を示す。
【図１０】図１０は、図９のＳ１４であるリード振り元処理の流れの一例を示す。
【図１１】図１１は、図１０のリード振り元処理が実行されることにより行われるリード振り先処理の流れの一例を示す。
【図１２】図１２は、通常リードＩ／Ｏ処理の流れの一例の概要を示す。
【図１３】図１３は、リード振り元処理及びリード振り先処理が行われる場合のリードＩ／Ｏ処理の流れの概要を示す。
【図１４】図１４は、図８のＳ４であるライトＩ／Ｏ処理の流れの一例を示す。
【図１５】図１５は、図１４のＳ４４であるライト振り元処理の流れの一例を示す。
【図１６】図１６は、図１５のライト振り元処理が実行されることにより行われるライト振り先処理の流れの一例を示す。
【図１７】図１７は、通常ライトＩ／Ｏ処理の流れの一例の概要を示す。
【図１８】図１８は、ライト振り元処理及びライト振り先処理が行われる場合のライトＩ／Ｏ処理の流れの概要を示す。
【図１９】図１９は、ＣＨＰ１２の周期処理の流れの一例を示す。
【図２０】図２０は、ライト担当領域拡大処理の流れの一例を示す。
【図２１】図２１は、ライト担当領域縮小処理の流れの一例を示す。
【図２２】図２２は、ＤＫＰ３２の周期処理の流れの一例を示す。
【図２３】図２３は、負荷チェック処理の流れの一例を示す。
【図２４】図２４は、負荷情報取得処理の流れの一例を示す。
【図２５】図２５は、振り先資源不足通知処理の流れの一例を示す。
【符号の説明】
【０１２４】
１…ホスト  ２…ストレージシステム  ３…ディスク  ４…チャネルアダプタ  ６…サービスプロセッサ  １２…チャネルプロセッサ  ２０…キャッシュメモリ  ３０…ディスクアダプタ  ３２…ディスクプロセッサ  ６１…ライト振り先テーブル  ６２…ステージング要求先テーブル  ６３…キャッシュ制御情報  ６４…オフロード許可ビットマップ  ６５…内部データパス利用率情報  ６６…プロセッサ稼働率情報  ６７…Ｉ／Ｏカウント値  ６８…キャッシュメモリ負荷情報  ６９…オフロード失敗カウント値
【図１】
2007249729.tif 000003
【図２】
2007249729.tif 000004
【図３】
2007249729.tif 000005
【図４】
2007249729.tif 000006
【図５】
2007249729.tif 000007
【図６】
2007249729.tif 000008
【図７】
2007249729.tif 000009
【図８】
2007249729.tif 000010
【図９】
2007249729.tif 000011
【図１０】
2007249729.tif 000012
【図１１】
2007249729.tif 000013
【図１２】
2007249729.tif 000014
【図１３】
2007249729.tif 000015
【図１４】
2007249729.tif 000016
【図１５】
2007249729.tif 000017
【図１６】
2007249729.tif 000018
【図１７】
2007249729.tif 000019
【図１８】
2007249729.tif 000020
【図１９】
2007249729.tif 000021
【図２０】
2007249729.tif 000022
【図２１】
2007249729.tif 000023
【図２２】
2007249729.tif 000024
【図２３】
2007249729.tif 000025
【図２４】
2007249729.tif 000026
【図２５】
2007249729.tif 000027