(57)【特許請求の範囲】
【請求項１】
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定する待ち入出力要求判定部と、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定する性能余裕判定部と、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置の性能限界値が高くなるように、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域の性能限界値を調整して第１性能融通を行ない、前記ストレージ装置の処理性能を改善し、次の第１性能融通サイクルで前記ストレージ装置の処理性能を元に戻す第１融通処理部と、を有する、ストレージ装置。
【請求項２】
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記第１融通処理部は、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置によって用いられる帯域以外の未割当帯域から性能融通を行なう、請求項１に記載のストレージ装置。
【請求項３】
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記第１融通処理部は、前記融通先記憶装置に対し、前記融通元記憶装置によって用いられる帯域における未割当帯域から前記第１性能融通を行なう、請求項２に記載のストレージ装置。
【請求項４】
前記ストレージ装置において前記複数の記憶装置が属するＲＡＩＤ（Redundant Arrays
of Inexpensive Disks）グループのビジー率（以下ＲＡＩＤグループビジー率という）を算出するビジー率算出部をさらに有し、
前記性能余裕判定部は、算出された前記ＲＡＩＤグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、請求項１〜請求項３のいずれか一項に記載のストレージ装置。
【請求項５】
前記ビジー率算出部は、前記ＲＡＩＤグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記ＲＡＩＤグループビジー率として算出する、請求項４に記載のストレージ装置。
【請求項６】
前記複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、前記ビジー率算出部は、各ディスクドライブのビジー率に対し前記種別に応じた係数を乗算して前記ＲＡＩＤグループビジー率を算出する、請求項５に記載のストレージ装置。
【請求項７】
複数の前記ＲＡＩＤグループが自動階層化プールを構成する場合、前記ビジー率算出部は、複数の前記ＲＡＩＤグループについて算出された複数の前記ＲＡＩＤグループビジー率のそれぞれに、各ＲＡＩＤグループに含まれるディスクドライブの種別に応じた重み付けを行なって、前記複数のＲＡＩＤグループについてのＲＡＩＤグループビジー率を算出する、請求項５に記載のストレージ装置。
【請求項８】
前記ビジー率算出部は、前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記ＲＡＩＤグループビジー率に加算した値を性能融通後のＲＡＩＤグループビジー率として用いる、請求項４〜請求項７のいずれか一項に記載のストレージ装置。
【請求項９】
ストレージ装置に含まれるコンピュータに、
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定し、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定し、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置の性能限界値が高くなるように、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域の性能限界値を調整して第１性能融通を行ない、前記ストレージ装置の処理性能を改善し、次の第１性能融通サイクルで前記ストレージ装置の処理性能を元に戻す、
処理を実行させる、ストレージ装置制御プログラム。
【請求項１０】
前記複数の記憶装置のうち前記第１性能融通サイクルよりも長い第２性能融通サイクルの間に亘り連続して処理性能に余裕のある第１記憶装置から処理性能が前記第２性能融通サイクルの間に亘り連続して不足している第２記憶装置への第２性能融通を行ない、所定復帰条件に基づき前記第１記憶装置、及び、前記第２記憶装置を元の処理性能で動作させる第２融通処理部、をさらに有する、請求項１〜請求項８のいずれか一項に記載のストレージ装置。
【請求項１１】
前記複数の記憶装置のうち前記第１性能融通サイクルよりも長い第２性能融通サイクルの間に亘り連続して処理性能に余裕のある第１記憶装置から処理性能が前記第２性能融通サイクルの間に亘り連続して不足している第２記憶装置への第２性能融通を行ない、所定復帰条件に基づき前記第１記憶装置、及び、前記第２記憶装置を元の処理性能で動作させる、
処理を、前記コンピュータに実行させる、請求項９に記載のストレージ装置制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置およびストレージ装置制御プログラムに関する。
【背景技術】
【０００２】
複数のサーバ（以下ホストという）が１台のストレージ装置を共用するストレージシステムでは、ホストの要求した入出力処理がストレージ装置内で競合し、入出力処理（アプリケーション）毎に安定したパフォーマンスを維持できない場合がある。そこで、ストレージ装置は、ホストからの処理要求に対し優先順位（優先度）を付与して処理を行なうことで、入出力処理毎に優先順位に従った適切な性能を維持させるＱｏＳ（Quality of Service）機能を有する場合がある。
【０００３】
ストレージ装置が有するＱｏＳ機能（ストレージＱｏＳ）としては、ホストにより指定された優先度に基づきキューなどの内部リソースを割り当て、コマンドを処理する技術が知られている。一例として、ホストＡとホストＢとの２台が１台のストレージ装置を共有するストレージシステムにおいて、ホストＡが優先度を指定してコマンドを送信する場合について説明する。ストレージ装置は、ホストＡから優先度が指定された場合、優先度の指定が無い処理に比べて例えば３倍の内部リソースを割り当てる。この結果、ストレージ装置は、ホストＡから要求された入出力処理を、ホストＢから要求された入出力処理よりも優先して実行する。
【０００４】
また、ストレージ装置側でホストやＬＵ（Logical Unit；論理ユニット）ごとに目標性能や性能制限を設定することで、入出力処理（アプリケーション）ごとに優先順位に従った適切な性能を維持させる技術も知られている。以下では、「ＬＵ」を「ボリューム」という場合がある。
【０００５】
さらに、特定の入出力処理の負荷状況が変化した場合、特定の入出力処理に対して設定される優先度を変更して上記負荷状況の変化に対応する技術も知られている。例えば、当該技術では、所定時間の間、継続して、実際の入出力処理量がストレージ全体の処理性能を下回り続けた場合、入出力処理量が性能限界値に到達したＬＵ等に設定された優先度を一段階上げることが行なわれている。当該ＬＵ等の優先度を一段階上げることで、当該ＬＵ等の性能限界値が高く変更される。これにより、当該ＬＵ等の性能調整が行なわれ、上記負荷状況の変化に対応することが可能になる。
【０００６】
このとき、ＬＵの処理性能が一時的に不足する場合、処理性能（帯域幅）の不足するＬＵに対し、処理性能に余裕のあるＬＵから処理性能を一時的に分配融通する技術も知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−５３６０１号公報
【特許文献２】特開２００９−９３６３６号公報
【特許文献３】特開２０１３−１２７７５８号公報
【特許文献４】特開２００３−１３１８１４号公報
【特許文献５】特開２００１−１４７８８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＱｏＳ機能をもつストレージ装置において、処理性能不足のＬＵに対し処理性能の融通を行なう場合、当該融通は、処理性能に余裕のあるＬＵのみから行なわれる。このため、処理性能に余裕のあるＬＵが無く処理性能不足のＬＵへの処理性能の融通を行なえない際、たとえＬＵが属するストレージ装置全体，ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループ，ディスクドライブに性能余裕があっても、その性能余裕を処理性能不足のＬＵに融通することができない。
【０００９】
一つの側面で、本発明は、記憶装置の属するストレージ装置における性能余裕を性能不足の記憶装置に対し融通できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本件のストレージ装置は、待ち入出力要求判定部，性能余裕判定部，第１融通処理部を有する。前記待ち入出力要求判定部は、複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定する。前記性能余裕判定部は、前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定する。前記第１融通処理部は、前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置の性能限界値が高くなるように、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域の性能限界値を調整して第１性能融通を行ない、前記ストレージ装置の処理性能を改善し、次の第１性能融通サイクルで前記ストレージ装置の処理性能を元に戻す。
【発明の効果】
【００１１】
一実施形態によれば、記憶装置の属するストレージ装置における性能余裕を性能不足の記憶装置に対し融通することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係るストレージシステムのハードウェア構成の一例を示すブロック図である。
【図２】本実施形態のストレージ装置により実行されるファームウェアにより実現される処理部の機能構成を示すブロック図である。
【図３】本実施形態に係るＳＣＳＩターゲット制御部の機能構成とＱｏＳ制御域およびテーブル域の情報とを示すブロック図である。
【図４】優先順位と性能値との対応関係の一例を示す図である。
【図５】ＱｏＳ管理テーブルの一例を示す図である。
【図６】本実施形態に係るＮミリ秒タイマスケジュール処理の処理手順を説明するフローチャートである。
【図７】本実施形態に係る全ＬＵ限界値加算処理の処理手順を説明するフローチャートである。
【図８】本実施形態に係るＱｏＳ Ｉ／Ｏ（Input/Output）起動スケジュール処理の処理手順を説明するフローチャートである。
【図９】本実施形態に係るＱｏＳ Ｉ／Ｏ起動スケジュール処理の処理手順を説明するフローチャートである。
【図１０】本実施形態に係るストレージ装置によるコマンド受信処理の処理手順を説明するフローチャートである。
【図１１】本実施形態に係るミクロ融通処理の概要を説明する図である。
【図１２】本実施形態に係るミクロ融通後処理の処理手順を説明するフローチャートである。
【図１３】本実施形態に係るマクロ融通１秒チェック処理の処理手順を説明するフローチャートである。
【図１４】本実施形態に係るマクロ融通処理の処理手順を説明するフローチャートである。
【図１５】本実施形態に係るマクロ融通処理の処理手順を説明するフローチャートである。
【図１６】本実施形態に係るマクロ融通復旧処理の処理手順を説明するフローチャートである。
【図１７】本実施形態に係るマクロ融通復旧処理の処理手順を説明するフローチャートである。
【図１８】本実施形態に係るマクロ融通復旧処理で作成される融通先ユニット配列（ＬＵＮ／ホスト番号配列）の一例を示す図である。
【図１９】本実施形態に係るマクロ融通復旧処理を具体的に説明する図である。
【図２０】本実施形態に係るマクロ融通復旧処理を具体的に説明する図である。
【図２１】本実施形態のストレージ装置制御プログラムを実行するコンピュータを示すブロック図である。
【図２２】本実施形態におけるディスクドライブのビジー率の算出に用いられる平均スループット値（シーケンシャル性能値）および平均レスポンス時間の例をディスクドライブ種別ごとに示す図である。
【図２３】本実施形態におけるディスクドライブのビジー率の算出に用いられる平均ＩＯＰＳ値（ランダム性能値）および平均レスポンス時間の例をディスクドライブ種別ごとに示す図である。
【図２４】本実施形態におけるディスクドライブのビジー率の算出に用いられる最大リードブロック数，最大ライトブロック数，最大リードコマンド数，最大ライトコマンド数の例をディスクドライブ種別ごとに示す図である。
【図２５】本実施形態におけるＲＡＩＤグループのビジー率の算出に用いられるディスクドライブ混在係数の例をディスクドライブ種別ごとに示す図である。
【図２６】本実施形態におけるＲＡＩＤグループのビジー率の算出に用いられるFlexible Tiered重み係数の例をディスクドライブ種別ごとに示す図である。
【図２７】各ディスクドライブが０．５秒間に処理可能なブロック数およびコマンド数の例をディスクドライブ種別ごとに示す図である。
【図２８】Volume １Ｉ／Ｏに対するＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数の例を示す図である。
【図２９】本実施形態に係るミクロ融通処理の処理手順を説明するフローチャートである。
【図３０】本実施形態に係るミクロ融通処理の処理手順を説明するフローチャートである。
【図３１】本実施形態に係るミクロ融通処理の処理手順を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、図面を参照し、本願の開示するストレージ装置およびストレージ装置制御プログラムの実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００１４】
〔１〕本実施形態の構成
まず、図１〜図５を参照しながら、本実施形態の構成について説明する。
〔１−１〕本実施形態のストレージシステムの構成
図１は、本実施形態に係るストレージシステム１の構成の一例を示す図である。図１に示すように、ストレージシステム１は、ホスト１０ａ，ホスト１０ｂおよびストレージ装置１００を有する。また、ストレージシステム１において、ストレージ装置１００は、ホスト１０ａおよびホスト１０ｂと接続される。なお、ストレージ装置１００と接続するホストの数は図示に限定されるものではなく、変更可能である。
【００１５】
〔１−２〕ホストの構成
続いて、図１を参照しながら、ホスト１０ａおよびホスト１０ｂの構成について説明する。ホスト１０ａおよびホスト１０ｂは、サーバなどの情報処理装置である。ホスト１０ａは、ＦＣ（Fibre Channel）−Ａ（Adapter）１１ａ，ＦＣ−Ａ１２ａ，ｉＳＣＳＩ（internet Small Computer System Interface）−Ａ１３ａ，ｉＳＣＳＩ−Ａ１４ａを有する。ＦＣ−Ａ１１ａ，１２ｂは、通常、ＦＣ−ＨＢＡ（Host Bus Adapter）の形態であり、ｉＳＣＳＩ−Ａ１３ａ，１４ａは、通常、ＮＩＣ（Network Interface Card）を使用し、そこでｉＳＣＳＩプロトコルを動作させる形態である。
【００１６】
ＦＣ−Ａ１１ａは、後述するＣＭ（Controller Module）２００ａ内のＦＣ−ＣＡ（Communication Adaptor）２０１ａとＦＣで接続するインターフェースである。また、同様に、ＦＣ−Ａ１２ａは、後述するＣＭ２００ｂ内のＦＣ−ＣＡ２０１ｂとＦＣで接続するインターフェースである。また、ｉＳＣＳＩ−Ａ１３ａは、後述するＣＭ２００ａ内のｉＳＣＳＩ−ＣＡ２０２ａとｉＳＣＳＩで接続するインターフェースである。同様に、ｉＳＣＳＩ−Ａ１４ａは、後述するＣＭ２００ｂ内のｉＳＣＳＩ−ＣＡ２０２ｂとｉＳＣＳＩで接続するインターフェースである。
【００１７】
ホスト１０ｂは、ＦＣ−Ａ１１ｂ，ＦＣ−Ａ１２ｂ，ｉＳＣＳＩ−Ａ１３ｂ，ｉＳＣＳＩ−Ａ１４ｂを有する。ＦＣ−Ａ１１ｂは、ＦＣ−Ａ１１ａに対応し、ＦＣ−Ａ１２ｂは、ＦＣ−Ａ１２ａに対応する。また、ｉＳＣＳＩ−Ａ１３ｂは、ｉＳＣＳＩ−Ａ１３ａに対応し、ｉＳＣＳＩ−Ａ１４ｂは、ｉＳＣＳＩ−Ａ１４ａに対応する。なお、以下の説明では、ホスト１０ａとホスト１０ｂとを区別せず一般化して称する場合には、ホスト１０として記載する。
【００１８】
〔１−３〕本実施形態に係るストレージ装置の構成
続いて、図１を参照しながら、本実施形態に係るストレージ装置１００の構成について説明する。本実施形態に係るストレージ装置１００は、ＨＤＤ（Hard Disk Drive）１０１ａ〜１０１ｄと、ＣＭ２００ａ，２００ｂとを有する。
ＨＤＤ１０１ａ〜１０１ｄは、ＲＡＩＤを構成し、ユーザデータを記憶する。ＣＭ２００ａ，２００ｂは、ストレージ装置１００のシステム全体を制御するストレージ制御モジュールである。ＣＭ２００ａ，２００ｂとで冗長化されている。なお、ストレージ装置１００が有するＨＤＤ，ＣＭの数は、図示したものに限定されるものではなく、変更可能である。また、コントローラエンクロジャーのストレージ装置（ストレージ制御装置）として、複数のＣＭを搭載し、ＨＤＤ等の物理ディスクは、ディスクエンクロージャのストレージ装置に搭載して、接続することでストレージシステムを構成してもよい。
また、ストレージ装置１００は、ＨＤＤ１０１ａ〜１０１ｄ（一以上の物理記憶装置）を論理的に分割した論理ユニット（以下ＬＵという）として使用される。各ＬＵ（記憶装置）は、それぞれが論理的な１台のＨＤＤとしてホスト１０ａ，１０ｂにより認識される。
【００１９】
ＣＭ２００ａは、ＦＣ−ＣＡ２０１ａ，ｉＳＣＳＩ−ＣＡ２０２ａ，ＳＡＳ（Serial Attached ＳＣＳＩ）２０３ａ，メモリ２１０ａおよびＣＰＵ（Central Processing Unit）２２０ａを有する。
【００２０】
ＦＣ−ＣＡ２０１ａは、ホスト１０ａおよびホスト１０ｂとＦＣで接続するインターフェースである。ｉＳＣＳＩ−ＣＡ２０２ａは、ホスト１０ａおよびホスト１０ｂとｉＳＣＳＩで接続するインターフェースである。ＳＡＳ２０３ａは、ＨＤＤ１０１ａ〜１０１ｄと、ＳＡＳで接続するインターフェースである。なお、以下の説明においてＦＣ−ＣＡ２０１ａおよびｉＳＣＳＩ−ＣＡ２０２ａのことを一般化して称する場合には、適宜、ポートと記載する。
【００２１】
メモリ２１０ａは、例えば、ＲＡＭ（Random Access Memory）などの半導体メモリ素子であり、キャッシュ域２１１ａと制御域２１２ａとを有する。キャッシュ域２１１ａは、ホスト１０ａまたはホスト１０ｂと、ＨＤＤ１０１ａ〜１０１ｄのいずれかとの間でやり取りされるデータを一時的に保持する。制御域２１２ａは、ストレージ装置１００が実行する各種の処理に要する情報を保持する。また、制御域２１２ａは各種プログラム等も格納されている。さらに、制御域２１２ａは、後述するＱｏＳ制御域２１３（図３参照）および後述するテーブル域２１４（図３参照）を有する。
【００２２】
ＣＰＵ２２０ａは、演算や制御などの各種処理を行う電子回路であり、後述する処理部３００（図２参照）を実現するために用いられる。
【００２３】
ＣＭ２００ｂは、ＦＣ−ＣＡ２０１ｂ，ｉＳＣＳＩ−ＣＡ２０２ｂ，ＳＡＳ２０３ｂ，メモリ２１０ｂおよびＣＰＵ２２０ｂを有する。ＦＣ−ＣＡ２０１ｂは、ＦＣ−ＣＡ２０１ａに対応し、ｉＳＣＳＩ-ＣＡ２０２ｂは、ｉＳＣＳＩ-ＣＡ２０２ａに対応し、ＳＡＳ２０３ｂは、ＳＡＳ２０３ａに対応する。また、メモリ２１０ｂは、メモリ２１０ａに対応し、ＣＰＵ２２０ｂは、ＣＰＵ２２０ａに対応する。
【００２４】
このようなストレージシステム１では、ストレージ装置１００のＣＰＵ２２０ａ，２２０ｂは、ファームウェアによって以下の処理を実行する。即ち、ストレージ装置１００は、複数のＬＵに設定された優先度に基づいて決定される入出力処理量の上限値をＬＵ毎に算出する。また、ストレージ装置１００は、ホスト１０から受信した入出力要求に係る処理量と、算出された上限値とに基づいて、入出力要求に係る処理の実行順をスケジュールし、スケジュールされた実行順で入出力要求に係る処理を実行する。そして、ストレージ装置１００は、ＬＵ毎に、当該ＬＵに対する入出力要求に係る処理量が第１所定時間（例えば３０秒）に亘って当該ＬＵの処理性能を超えているか否かを判定する。さらに、ストレージ装置１００は、当該ＬＵに対する入出力要求に係る処理量が当該ＬＵの処理性能を超えていると判定された場合、当該ＬＵについての上限値を、所定の性能融通単位（ユニット）で変更する。このようにして、ストレージ装置１００は、ホスト１０からの入出力要求（Ｉ／Ｏ要求，コマンド）の状況やホスト１０の接続環境の変化に応じて、ストレージ性能を最適に制御する。特に、ストレージ装置１００は、所定の性能融通単位（ユニット）で上限値を変更調整することで、ホスト１０から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。
【００２５】
なお、入出力処理量の上限値は、例えば、後述する限界Ｉ／Ｏ数や限界ブロック数であり、上限値，限界Ｉ／Ｏ数，限界ブロック数のことを、限界値、または、性能限界値という場合がある。
【００２６】
〔１−４〕ファームウェアにより実現される処理部の機能構成
次に、図２を参照しながら、ストレージ装置１００により実行されるファームウェアにより実現される処理部３００の機能構成について説明する。図２は、ストレージ装置１００により実行されるファームウェアにより実現される処理部３００の機能構成を示すブロック図である。なお、処理部３００は、メモリ２１０ａおよびメモリ２１０ｂと、ＣＰＵ２２０ａおよびＣＰＵ２２０ｂとが協働して実現される。
【００２７】
図２に示すように、処理部３００は、ＦＣ Ｉ／Ｆ（InterFace）制御部３０１，ｉＳＣＳＩ Ｉ／Ｆ制御部３０２，ＳＣＳＩターゲット制御部３０３，ＳＣＳＩコマンド制御部３０４，リソース制御部３０５，キャッシュ制御部３０６，ＲＡＩＤ制御部３０７を有する。また、処理部３００は、ディスク制御部３０８，ＳＡＳ Ｉ／Ｆ制御部３０９，メモリ制御部３１０，カーネル部３１１，システム構成制御部３１２，保守インタフェース制御部３１３を有する。
【００２８】
ＦＣ Ｉ／Ｆ制御部３０１は、ホスト１０とＦＣ接続する場合のＦＣプロトコルチップの制御を行なう。ｉＳＣＳＩ Ｉ／Ｆ制御部３０２は、ホスト１０とｉＳＣＳＩ接続する場合のｉＳＣＳＩプロトコルチップの制御を行なう。
【００２９】
ＳＣＳＩターゲット制御部３０３は、ＳＣＳＩターゲットの制御を行なう。ＳＣＳＩターゲット制御部３０３は、例えば、ホスト管理，ＬＵ管理，コマンド実行管理，コマンド以外の異常系イベント管理などを行なう。なお、ＳＣＳＩターゲット制御部３０３の詳細な機能については、図３を参照しながら後述する。
【００３０】
ＳＣＳＩコマンド制御部３０４は、ＳＣＳＩコマンド種ごとの制御を行なう。リソース制御部３０５は、全ＣＭをまたいでの論理ボリューム管理，ホストパス管理，負荷管理を行なう。キャッシュ制御部３０６は、キャッシュメモリの管理を行なう。ＲＡＩＤ制御部３０７は、ＲＡＩＤグループの管理を行なう。ディスク制御部３０８は、ディスクコマンド制御を行なう。ＳＡＳ Ｉ／Ｆ制御部３０９は、ＨＤＤ１０１ａ〜１０１ｄとＳＡＳ接続するプロトコルチップの制御を行なう。
【００３１】
メモリ制御部３１０は、各制御部が使用する制御メモリを管理する。カーネル部３１１は、基本ソフト部であり、各制御部の下位に位置する。システム構成制御部３１２は、ストレージ装置１００の構成情報を管理する。保守インターフェース制御部３１３は、保守用のユーザインターフェースを制御する。
【００３２】
〔１−５〕本実施形態に係るＳＣＳＩターゲット制御部の機能構成およびＱｏＳ制御域の情報
次に、図３を参照しながら、ＳＣＳＩターゲット制御部３０３の機能構成とＱｏＳ制御域２１３およびテーブル域２１４の情報とについて説明する。図３は、本実施形態に係るＳＣＳＩターゲット制御部３０３の機能構成とＱｏＳ制御域２１３およびテーブル域２１４の情報とを示すブロック図である。
【００３３】
図３に示すように、ＳＣＳＩターゲット制御部３０３は、後述するＱｏＳ管理テーブル５０１や、後述する各ＬＵ（ＬＵＮ＃１〜＃ｍ；ｍは２以上の整数）の性能融通情報や、後述するミクロ融通有フラグや、後述するテーブル域２１４における情報などに基づき、制御を行なう。ＱｏＳ管理テーブル５０１や、各ＬＵの性能融通情報や、ミクロ融通有フラグは、例えば、メモリ２１０ａ，２１０ｂの制御域２１２ａ，２１２ｂにおけるＱｏＳ制御域２１３に保存される。
【００３４】
また、図３に示すように、ＳＣＳＩターゲット制御部３０３は、待ちキュー格納部５０２，性能設定部５０３，コマンド受信部５０４，算出部５０５，スケジュール部５０６，実行部５０７を有する。さらに、ＳＣＳＩターゲット制御部３０３は、マクロ融通チェック部５１０，マクロ融通処理部５２０，マクロ融通復旧処理部５３０，ミクロ融通処理部５４０を有する。なお、以下に説明するＳＣＳＩターゲット制御部３０３の各機能は、メモリ２１０ａおよびメモリ２１０ｂと、ＣＰＵ２２０ａおよびＣＰＵ２２０ｂとが協働して実現される。
【００３５】
〔１−５−１〕優先順位と性能値との対応関係、および、ＱｏＳ管理テーブル
ＱｏＳ管理テーブル５０１は、対象毎に、「優先順位」と「性能値」と「実行可能な入出力処理数」と「実行した入出力処理数」とを対応付けた情報を記憶する。ここで、ＱｏＳ管理テーブル５０１の詳細な説明をする前に、まず、図４を参照しながら「優先順位」と「性能値」との対応関係について説明する。図４は、優先順位と性能値との対応関係の一例を示す図である。
【００３６】
図４に示すように、「優先順位」は、優先度を示し、例えば、１から１５までの１５段階のレベルとして設定される。なお、優先順位のレベルは、例示に過ぎず、１から１５の１５段階に限定されるものではない。
【００３７】
また、「優先順位」の段階毎に「性能値」が対応付けられる。言い換えると、「優先順位」は、性能制限を示す。「性能値」としては、単位時間当たりの通信量であるＭＢ／ｓ（megabytes per second）と、単位時間当たりに実行可能な入出力処理数であるＩＯＰＳ（Input Output Per Second）とが用いられる。「優先順位」（性能設定レベル）のそれぞれに対する具体的な「性能値（ＭＢ／ｓ）」および「性能値（ＩＯＰＳ）」は、例えば、ディスクドライブなどの現実的な性能を考慮して、図４に示すように設定される。
【００３８】
図４に示す例では、「優先順位」が「１」に設定される場合、単位時間当たりの通信量が「８００（ＭＢ／ｓ）」であり、単位時間当たりに「１５０００」の入出力処理が実行されることを示す。同様に、「優先順位」が「３」に設定される場合、単位時間当たりの通信量が「６００（ＭＢ／ｓ）」であり、単位時間当たりに「１００００」の入出力処理が実行されることを示す。
【００３９】
また、図４に示す例では、優先順位１〜８での性能値（ＭＢ／ｓ）の間隔は１００であり、優先順位８〜１０での性能値（ＭＢ／ｓ）の間隔は３０であり、優先順位１０〜１１での性能値（ＭＢ／ｓ）の間隔は１５であり、優先順位１１〜１５での性能値（ＭＢ／ｓ）の間隔は５である。つまり、性能値（ＭＢ／ｓ）は、「優先順位」の低いレベル（１５）から高いレベル（１）に向かって大きくなるように設定されている。
【００４０】
同様に、優先順位１〜５での性能値（ＩＯＰＳ）の間隔は２５００であり、優先順位５〜７での性能値（ＩＯＰＳ）の間隔は２０００であり、優先順位７〜１０での性能値（ＩＯＰＳ）の間隔は２００であり、優先順位１０〜１１での性能値（ＩＯＰＳ）の間隔は１００であり、優先順位１１〜１５での性能値（ＩＯＰＳ）の間隔は６０である。つまり、性能値（ＩＯＰＳ）も、「優先順位」の低いレベル（１５）から高いレベル（１）に向かって大きくなるように設定されている。
【００４１】
また、図３に示すテーブル域２１４には、ストレージ１００に属すＲＡＩＤグループごとに、各ＲＡＩＤグループ内で融通先ＬＵ（後述する融通フラグＦINがオンのＬＵ）に対し融通されるユニット数（ＲＡＩＤグループ融通ユニット数）ＮＫが保存される。ＲＡＩＤグループ融通ユニット数）ＮＫは、後述する１ミクロサイクルごとにクリアされる。
【００４２】
さらに、図３に示すテーブル域２１４には、ストレージ１００に属すＲＡＩＤグループごとに、各ＲＡＩＤグループのビジー率（ＲＡＩＤグループビジー率）Ｌが保存される。ＲＡＩＤグループビジー率Ｌは、ストレージ装置１００全体における性能余裕に係る値であり、後述するビジー率算出部５４５によって、所定の時間（例えば後述するＮミリ秒またはＮ×ｎ秒；ｎは２以上の整数）ごとに算出される。ＲＡＩＤグループビジー率Ｌの算出手順については、図２２〜図２６を参照しながら後述する。
【００４３】
また、ＲＡＩＤグループ内で融通先ＬＵに対する性能融通が行なわれる場合、ビジー率算出部５４５によって、当該性能融通の量がビジー率増加分に換算される。そして、換算されたビジー率増加分がＲＡＩＤグループビジー率Ｌに加算され、テーブル域２１４におけるＲＡＩＤグループビジー率Ｌが更新される。ビジー率増加分の換算等の手順については、図２７，図２８，図３０，図３１を参照しながら後述する。
【００４４】
次に、図５を参照しながら、ＱｏＳ管理テーブル５０１の一例について説明する。図５は、ＱｏＳ管理テーブル５０１の一例を示す図である。図５に示すように、ＱｏＳ管理テーブル５０１は、「対象」，「優先順位」，「Ｎミリ秒Ｉ／Ｏ数」，「Ｎミリ秒ブロック数」，「限界Ｉ／Ｏ数」，「限界ブロック数」，「現Ｉ／Ｏ数」および「現ブロック数」を対応付けた情報を記憶する。
【００４５】
ここで、ＱｏＳ管理テーブル５０１が記憶する「対象」は、優先順位を設定する対象を示す。ここで、「ポート」，「ホスト」，「ホストとＬＵＮとの組合せ」，「ポートとＬＵＮとの組合せ」のそれぞれが優先順位を設定する対象となる。例えば、「対象」には、「ＦＣ−ＣＡ２０１ａ」，「ホスト１０ａ」，「ホスト１０ａ−ＬＵＮ−Ａ」などが格納される。なお、以下の説明では、「対象」として「ホストとＬＵＮとの組合せ」または「ポートとＬＵＮとの組合せ」を指す場合については、単に、「ＬＵ」として適宜記載する。
【００４６】
「優先順位」は、対象に設定された優先度を示す。ここでは、優先順位のレベルが１から１５までの１５段階のいずれかのレベルが設定されるものとする。「優先順位」には、例えば「３」，「５」，「７」などのレベルが格納される。
【００４７】
「Ｎミリ秒Ｉ／Ｏ数」は、所定の時間（Ｎミリ秒）の間に実行可能なＩ／Ｏ数（入出力要求数，入出力コマンド数）を示す。ここで、所定の時間（Ｎミリ秒）として、例えば１０ミリ秒、つまりＮ＝１０が設定される。また、「Ｎミリ秒Ｉ／Ｏ数」には、例えば「１００」，「５０」，「１０」などの値が格納される。
【００４８】
「Ｎミリ秒ブロック数」は、所定の時間（Ｎミリ秒）の間に書込み可能なブロック数を示す。ブロック数は、１ブロックを５１２バイトとして、単位時間当たりの通信量（ＭＢ／ｓ）から算出される。なお、ここでは、所定の時間（Ｎミリ秒）として、例えば１０ミリ秒が設定される。すなわち、「Ｎミリ秒ブロック数」には、１０ミリ秒間に書込み可能なブロック数として、例えば「１２２８８」，「８１９２」，「４０９６」などの値が格納される。
【００４９】
「限界Ｉ／Ｏ数」は、現時点での実行可能なＩ／Ｏ数（入出力処理量）の上限値を示す。限界Ｉ／Ｏ数は、「Ｎミリ秒Ｉ／Ｏ数」に「Ｎミリ秒が経過した回数（ｎ）」を乗じた値から、後述する「現Ｉ／Ｏ数」を減算することによって算出される。例えば、「限界Ｉ／Ｏ数」には、「１００×ｎ−ａ」，「５０×ｎ−ｂ」，「１０×ｎ−ｃ」などの値が格納される。なお、「ｎ」は、「Ｎミリ秒が経過した回数」であり、「ａ」から「ｃ」は、後述するように、対応する「現Ｉ／Ｏ数」の値である。
【００５０】
「限界ブロック数」は、現時点での書込み可能なブロック数（入出力処理量）の上限値を示す。限界ブロック数は、「Ｎミリ秒ブロック数」に「Ｎミリ秒が経過した回数（ｎ）」を乗じた値から、後述する「現ブロック数」を減算することによって算出される。例えば、「限界ブロック数」には、「１２２８８×ｎ−Ａ」、「８１９２×ｎ−Ｂ」、「４０９６×ｎ−Ｃ」などの値が格納される。なお、「ｎ」は、「Ｎミリ秒が経過した回数」であり、「Ａ」から「Ｃ」は、後述するように、対応する「現ブロック数」の値である。
【００５１】
「現Ｉ／Ｏ数」は、所定の時間までに要求されたＩ／Ｏ数の累積値を示す。例えば、「現Ｉ／Ｏ数」には、「ａ」，「ｂ」，「ｃ」などが格納される。「現ブロック数」は、所定の時間までに要求されたブロック数の累積値を示す。例えば、「現ブロック数」には、「Ａ」，「Ｂ」，「Ｃ」などが格納される。
【００５２】
図５に示す例では、ＱｏＳ管理テーブル５０１は、「ポート」の優先順位が「３」であり、「Ｎミリ秒Ｉ／Ｏ数」が「１００」であり、「Ｎミリ秒ブロック数」が「１２２８８」であることを示す。また、ＱｏＳ管理テーブル５０１は、「限界Ｉ／Ｏ数」が「１００×ｎ−ａ」であり、「限界ブロック数」が「１２２８８×ｎ−Ａ」であり、「現Ｉ／Ｏ数」が「ａ」であり、「現ブロック数」が「Ａ」であることを示す。
【００５３】
なお、ＱｏＳ管理テーブル５０１が記憶する「対象」，「優先順位」，「Ｎミリ秒Ｉ／Ｏ数」，「Ｎミリ秒ブロック数」は、後述する性能設定部５０３により初期設定される値である。また、ＱｏＳ管理テーブル５０１が記憶する「限界Ｉ／Ｏ数」，「限界ブロック数」，「現Ｉ／Ｏ数」および「現ブロック数」はＮミリ秒ごとに更新される値である。
【００５４】
〔１−５−２〕待ちキュー格納部
待ちキュー格納部５０２は、キューであり、コマンド受信部５０４が受信したコマンドのうち、所定時間経過後にスケジュールされるコマンドを格納する。また、待ちキュー格納部５０２は、ホストとＬＵＮとの組合せ毎またはポートとＬＵＮとの組合せ毎（ＬＵ毎）に設けられる。
【００５５】
〔１−５−３〕性能設定部
性能設定部５０３は、ＱｏＳ管理テーブル５０１が記憶する情報のうち「対象」，「優先順位」，「Ｎミリ秒Ｉ／Ｏ数」，「Ｎミリ秒ブロック数」のそれぞれに、管理者から受け付けた値を設定する。また、性能設定部５０３は、表１を参照しながら後述するミクロ性能融通およびマクロ性能融通の各種条件や、当該各種条件に係る値などを、管理者からの指示に応じて設定する機能も有する。なお、管理者は、各ホスト１０の性能や各ホスト１０が実行するアプリケーションなどを加味して、優先順位や各種条件に係る値などを設定する。さらに、性能設定部５０３は、ストレージ装置１００に接続するホスト１０や、ホスト１０とＬＵＮとの組合せ（ＬＵ）が変化した場合に、ＱｏＳ管理テーブル５０１が記憶する情報を更新する。
【００５６】
〔１−５−４〕コマンド受信部
コマンド受信部５０４は、ホスト１０からコマンド（入出力要求）を受信して受け付けるとともに、実行待ちのコマンドがあるか否かを判定する。例えば、コマンド受信部５０４は、実行待ちのコマンドがあると判定した場合、受信したコマンドを待ちキュー格納部５０２に格納させる。また、コマンド受信部５０４は、実行待ちのコマンドがないと判定した場合、後述するスケジュール部５０６に受信したコマンドの実行順をスケジュールさせる。なお、コマンド受信部５０４の詳細な動作（コマンド受信処理の処理手順）については、図１０を参照しながら後述する。
【００５７】
〔１−５−５〕算出部
算出部５０５は、ホスト１０，ポートおよびＬＵのそれぞれに対して設定された優先順位に基づいて決定される入出力処理量の上限値（即ち限界Ｉ／Ｏ数と限界ブロック数）を所定の時間（Ｎミリ秒）毎に算出する。ここで、算出部５０５は、１０ミリ秒毎に限界Ｉ／Ｏ数と限界ブロック数とを算出するものとして説明する。例えば、算出部５０５は、１０ミリ秒毎に、限界Ｉ／Ｏ数にＮミリ秒Ｉ／Ｏ数を加算する。また、算出部５０５は、１０ミリ秒毎に、限界ブロック数にＮミリ秒ブロック数を加算する。算出部５０５は、算出した限界Ｉ／Ｏ数と限界ブロック数とをＱｏＳ管理テーブル５０１に格納させる。
【００５８】
さらに、算出部５０５は、後述するマクロ性能融通に対応すべく、以下のような機能を有する。つまり、算出部５０５は、１０ミリ秒毎に、融通先ＬＵ（後述する融通フラグＦINがオンのＬＵ）の限界Ｉ／Ｏ数に、上述のごとくＮミリ秒Ｉ／Ｏ数を加算するとともに、後述する融通ユニット数ＮＢに対応するＩ／Ｏ数をさらに加算する（図７参照）。同様に、算出部５０５は、１０ミリ秒毎に、当該融通先ＬＵの限界ブロック数に、上述のごとくＮミリ秒ブロック数を加算するとともに、上記融通ユニット数ＮＢに対応するブロック数をさらに加算する（図７参照）。
【００５９】
一方、算出部５０５は、１０ミリ秒毎に、融通元ＬＵ（後述する融通フラグＦOUTがオンのＬＵ）の限界Ｉ／Ｏ数に、上述のごとくＮミリ秒Ｉ／Ｏ数を加算した値から、上記融通ユニット数ＮＢに対応するＩ／Ｏ数を減算する（図７参照）。同様に、算出部５０５は、１０ミリ秒毎に、当該融通元ＬＵの限界ブロック数に、上述のごとくＮミリ秒ブロック数を加算した値から、上記融通ユニット数ＮＢに対応するブロック数を減算する（図７参照）。
【００６０】
〔１−５−６〕スケジュール部
スケジュール部５０６は、ホスト１０から受け付けたコマンド数と、算出部５０５により算出された限界Ｉ／Ｏ数および限界ブロック数とに基づいて、コマンドの実行順をスケジュールする。例えば、スケジュール部５０６は、所定の時間が経過する毎に、コマンドの実行順をスケジュールする。なお、スケジュール部５０６の詳細な動作（ＱｏＳ Ｉ／Ｏ起動スケジュール処理の処理手順）については、図８および図９を参照しながら後述する。
【００６１】
また、スケジュール部５０６は、マークしたホストとマークしたＬＵＮとを復元する。そして、スケジュール部５０６は、復元したホストとＬＵＮとの組合せから順に、以下の処理を実行する。なお、ホストのマークおよびＬＵＮのマークについては後述する。
【００６２】
まず、スケジュール部５０６は、ホスト１０から受け付けたコマンド数が、算出部５０５により算出されたホスト，ポート，ＬＵＮそれぞれの限界Ｉ／Ｏ数および限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部５０６は、受け付けたコマンド数が限界Ｉ／Ｏ数および限界ブロック数以内であり、処理可能であると判定した場合、実行部５０７にコマンドを起動させる。
【００６３】
また、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「現Ｉ／Ｏ数」に、起動したコマンド分のＩ／Ｏ数を加算した値を格納させる。同様に、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「現ブロック数」に、起動したコマンド分のブロック数を加算した値を格納させる。
【００６４】
また、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「限界Ｉ／Ｏ数」に、起動したコマンド分のＩ／Ｏ数を減算した値を格納させる。同様に、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「限界ブロック数」に、起動したコマンド分のブロック数を減算した値を格納させる。
【００６５】
一方、スケジュール部５０６は、受け付けたコマンド数が限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合、所定の時間が経過した後に、ホスト１０から受け付けたコマンド数が、新たに算出された限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する。
【００６６】
例えば、スケジュール部５０６は、受け付けたコマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合、ホストとＬＵＮとの組合せをマークし、所定の時間が経過後に、マークしたホストとＬＵＮとの組合せからスケジュールを実行する。また、例えば、スケジュール部５０６は、ポートの限界Ｉ／Ｏ数および限界ブロック数以内ではあるが、ホストの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合、ＬＵＮをマークする。そして、スケジュール部５０６は、次のＬＵＮをセットし、ホスト１０から受け付けたコマンド数が、新たに算出された限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する。ここで、次のＬＵＮが無い場合、スケジュール部５０６は、次のホストをセットし、受け付けたコマンド数が、新たに算出された限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する。
【００６７】
また、スケジュール部５０６は、コマンド受信部５０４により実行待ちのコマンドがないと判定された場合、所定の時間が経過するのを待つことなくコマンドの実行順をスケジュールする。例えば、スケジュール部５０６は、ホスト１０から受け付けたコマンド数が、算出部５０５により算出されたホスト，ポート，ＬＵＮそれぞれの限界Ｉ／Ｏ数および限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部５０６は、ホスト１０から受け付けたコマンド数がポート，ホスト，ＬＵＮのいずれかの限界Ｉ／Ｏ数および限界ブロック数以内で処理可能ではないと判定した場合、コマンドを待ちキュー格納部５０２に格納する。そして、スケジュール部５０６は、所定の時間が経過した後に、ホスト１０から受け付けたコマンド数が、新たに算出された限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する。
【００６８】
〔１−５−７〕実行部
実行部５０７は、スケジュール部５０６によりスケジュールされた実行順でコマンドを待ちキュー格納部５０２からデキューし、コマンドを起動して入出力処理を実行する。
【００６９】
〔１−５−８〕ミクロ性能融通、およびマクロ性能融通
次に、マクロ融通チェック部５１０，マクロ融通処理部５２０，マクロ融通復旧処理部５３０，ミクロ融通処理部５４０について説明するのに先立ち、本実施形態で採用される２種類の性能融通方式について説明する。２種類の性能融通方式は、ミクロ性能融通方式とマクロ性能融通方式とである。
【００７０】
なお、以下では、ストレージ装置１００の処理性能を改善すべく、各ＬＵ（または各ホスト）における入出力処理量の上限値つまり性能限界値を調整することを「性能融通」という。「性能融通」では、処理性能不足を解消するために性能限界値を高く変更するＬＵを、「融通先ＬＵ」という。また、「性能融通」では、「融通先ＬＵ」の性能限界値を高くする場合、「融通先ＬＵ」の性能限界値を高くする分だけ、処理性能に余裕のあるＬＵの性能限界値を低く変更する。これにより、処理性能に余裕のあるＬＵから「融通先ＬＵ」への性能融通が行なわれる。上述のごとく「融通先ＬＵ」に対して処理性能を融通した「処理性能に余裕のあるＬＵ」を、「融通元ＬＵ」という。
【００７１】
「ミクロ性能融通」は、一時的なスパイク性能などを吸収する際に用いて有効な方式である。「ミクロ性能融通」では、例えば１秒以下のサイクル（ミクロサイクル）で、処理性能が不足するＬＵに、処理性能に余裕のあるＬＵから処理性能が融通される。このときの融通量（後述するミクロ融通ユニット数ＮＨ）は、記憶されず、次のミクロサイクルでは性能限界値の調整に反映されない。従って、ストレージ装置１００は、次のミクロサイクルでは、元の処理性能で動作する。このように、「ミクロ性能融通」は一時的な融通であるため、「ミクロ性能融通」を用いることで一度に大量の性能融通が可能である。
【００７２】
「マクロ性能融通」は、ホスト１０から要求される処理性能が様々な状況に変動する場合に、性能融通量（性能限界値の調整量）を学習して調整し、各ＬＵの処理性能を実際の入出力性能に追従させる方式である。「マクロ性能融通」では、例えば２秒以上の、より大きなサイクル（マクロサイクル）で処理性能が監視される。そして、所定時間（例えば１マクロサイクル）に亘り連続して性能不足となっているＬＵに対し、前記所定時間に亘り連続して処理性能に余裕のあるＬＵから、処理性能が融通される。このように、「マクロ性能融通」は、性能融通量を学習により調整するため、ホスト１０から要求される処理性能の継続的な変動に有効に対応することができる。
【００７３】
なお、本実施形態の「マクロ性能融通」では、各ＬＵについて、例えば、１秒毎に処理性能の不足／余裕をチェックすることで、２秒以上のマクロサイクル毎にマクロ性能融通を実行するか否かの判定が行なわれる。例えば、１マクロサイクル内において、１秒毎に、処理性能が不足しているか、あるいは、処理性能に余裕があるかがチェックされる。このとき、１マクロサイクルの間、常に処理性能が不足している融通先ＬＵが存在し、且つ、１マクロサイクルの間、常に処理性能に余裕のある融通元ＬＵが存在していることが、マクロ性能融通の実行条件として設定される。そして、マクロ性能融通の実行条件を満たす場合、融通元ＬＵから融通先ＬＵへのマクロ性能融通が、所定の性能融通単位で実行される。
【００７４】
また、本実施形態の「マクロ性能融通」では、１マクロサイクル当たりの融通量の変更は、所定の性能融通単位（ユニット単位）で行なわれる。本実施形態において、所定の性能融通単位（ユニット単位）の入出力処理量は、上記優先度に基づいて決定される入出力処理量（性能値ＭＢ／ｓ，ＩＯＰＳ）の最小間隔以下に設定される。以下、所定の性能融通単位の入出力処理量を「ユニット」という。例えば、図４に示す優先順位と性能値との対応関係では、上記優先度についての性能値の最小間隔は、５ＭＢ／ｓおよび６０ＩＯＰＳであるので、「１ユニット」は、例えば、５ＭＢ／ｓおよび６０ＩＯＰＳに設定される。
【００７５】
ここで、上述のごとく優先度を変更して負荷状況の変化に対応する従来技術を用いた場合を考える。この場合、図４に示す例では、優先順位１〜７の範囲における性能限界値の変更間隔（融通量）は、性能値ＭＢ／ｓについて１００、性能値ＩＯＰＳについて２５００または２０００であり、優先順位８〜１５の範囲における変更間隔（融通量）に比べ、かなり大きい。性能限界値の変更間隔が大きいと、優先順位を上下させるだけでは調整範囲が限定的となり、ホスト１０から要求される性能の変動に細かく追従することができない。これに対して、本実施形態の「マクロ性能融通」では、上記優先度についての性能値の最小間隔５ＭＢ／ｓ，６０ＩＯＰＳを「１ユニット」とする単位で、性能融通が行なわれる。したがって、優先度を変更して性能限界値を変更する場合に比べ、性能限界値の変更間隔（融通量）を大幅に小さくすることができ、ホスト１０から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。
【００７６】
本実施形態では、上述したミクロ性能融通およびマクロ性能融通の特徴を踏まえ、ミクロ性能融通およびマクロ性能融通のいずれか一方が使用されてもよいし、両方が同時に使用されてもよい。一方のみを使用する場合、表１におけるパラメータ等を適切に設定することにより、より有効な融通が行なわれる。また、両方を使用する場合、一時的なスパイク性能などを吸収する際にはミクロ性能融通を使用する一方、継続的な性能変動を吸収する際にはマクロ性能融通を使用するように制御を行なうことで、両方の特徴を有効に利用することができる。
【００７７】
ついで、下記表１を参照しながら、ミクロ性能融通およびマクロ性能融通の各種条件や、当該各種条件に係る値などについて説明する。当該各種条件や、当該各種条件に係る値などは、前述した通り、性能設定部５０３により、管理者からの指示に応じて設定される。下記表１のごとく設定された各種条件や値に基づいて、ミクロ性能融通およびマクロ性能融通がそれぞれ実行される。
【００７８】
下記表１に示すように、本実施形態の「ミクロ性能融通」および「マクロ性能融通」では、それぞれ、以下のように各種条件や値が設定され使用される。各種条件や値としては、「サイクル」，「１サイクルでの融通ＬＵ数」，「融通回数制限」，「融通量」，「融通を受ける条件」，「融通する条件」，「復帰条件」が設定される。
【００７９】
【表１】
0006451307.tif 000002
【００８０】
「サイクル」は、性能融通を実行する周期（秒）である。ミクロ性能融通を実行するサイクル（ミクロサイクル）は、例えば、０．５秒とし、マクロ性能融通を実行するサイクル（マクロサイクル）は、例えば、３０秒とする。
【００８１】
「１サイクルでの融通ＬＵ数」は、１サイクルの間に性能融通を行なうＬＵの数の上限値である。ミクロ性能融通の「１サイクルでの融通ＬＵ数」は、例えば、最大４ＬＵ（デフォルト）とし、１６ＬＵまでチューニング可能とする。また、マクロ性能融通の「１サイクルでの融通ＬＵ数」も、例えば、最大４ＬＵ（デフォルト）とし、１６ＬＵまでチューニング可能とする。
【００８２】
「融通回数制限」は、性能融通の実行回数の制限に係る情報である。ミクロ性能融通の「融通回数制限」は、例えば、一つのＬＵについて、マクロ性能融通１サイクル（マクロサイクル；３０秒）当たり４回までとし、チューニング可能とする。また、マクロ性能融通の「融通回数制限」は、「なし」に設定される。ただし、上限および下限は設定される。
【００８３】
「融通量」は、性能融通１回当たりに融通される量である。ミクロ性能融通の「融通量」は、例えば、１回当たり、設定性能（例えば図４に示す優先度に応じて設定された性能値）の２倍とし、チューニング可能とする。また、マクロ性能融通の「融通量」は、例えば、１回当たり、上述した１ユニット（所定の性能融通単位）、つまり６０ＩＯＰＳおよび５ＭＢ／ｓの両方で同時に融通する。
【００８４】
「融通を受ける条件」は、ＬＵが他のＬＵから性能融通を受ける条件、つまりＬＵが融通先ＬＵになる条件である。ミクロ性能融通の「融通を受ける条件」は、待ちＩ／Ｏ（Ｉ／Ｏ数またはブロック数）を検出したＬＵであることとする。また、マクロ性能融通の「融通を受ける条件」は、３０秒（第１所定時間）の間、継続して処理性能不足を検出したＬＵであることとする。
【００８５】
「融通する条件」は、ＬＵが他のＬＵへ性能融通を行なう条件、つまりＬＵが融通元ＬＵになる条件である。ミクロ性能融通の「融通する条件」は、ミクロ性能融通を行なう際の上記「融通量」以上の余裕があることとする。また、マクロ性能融通の「融通する条件」は、３０秒（第２所定時間）の間、継続して処理性能に余裕のあるＬＵであることとする。
【００８６】
「復帰条件」は、融通元ＬＵから融通先ＬＵへ融通された入出力処理量を、融通先ＬＵから融通元ＬＵに復帰（復旧）させる条件である。ミクロ性能融通では、上述したように、融通量は記憶されず次のミクロサイクルでストレージ装置１００は元の処理性能で動作するため、ミクロ性能融通の「復帰条件」は設定されない。また、マクロ性能融通の「復帰条件」は、他のＬＵに性能融通を行なっている融通元ＬＵで処理性能不足を検出することとする。また、マクロ性能融通の復帰（復旧）は、ＱｏＳ関連設定変更時にも実行される。
【００８７】
〔１−５−９〕ＬＵの性能融通情報
次に、上述したミクロ性能融通およびマクロ性能融通を実行すべく、図３に示すように、ＱｏＳ制御域２１３に、ＬＵ（ＬＵＮ＃１〜＃ｍ；ｍは２以上の整数）毎に保持される、各ＬＵの性能融通情報について説明する。つまり、ＱｏＳ制御域２１３には、ＬＵ毎に、例えば、６種類の融通フラグＦIN，ＦOUT，ＦINMAX，ＦOUTMAX，ＦMICIN，ＦMICOUTと８種類の数値ＮＢ，ＮＣ，ＮＤ，ＮＥ，ＮＦ，ＮＧ，ＮＨ，ＮＩとが性能融通情報として保存される。これらの融通フラグや数値は、管理者からの指示に応じて性能設定部５０３により設定されるか、もしくは、ミクロ性能融通およびマクロ性能融通の実行中にＳＣＳＩターゲット制御部３０３の機能によって設定・更新される。
【００８８】
融通フラグＦINは、対象ＬＵが他のＬＵからマクロ性能融通を受けている場合つまり対象ＬＵが融通先ＬＵである場合にオンに設定され、それ以外の場合にオフに設定される。
融通フラグＦOUTは、対象ＬＵが他のＬＵに対しマクロ性能融通を行なっている場合つまり対象ＬＵが融通元ＬＵである場合にオンに設定され、それ以外の場合にオフに設定される。
【００８９】
融通フラグＦINMAXは、対象ＬＵが他のＬＵから受けているマクロ性能融通の融通量が予め設定された上限に到達している場合（上限到達時）にオンに設定され、それ以外の場合にオフに設定される。
融通フラグＦOUTMAXは、対象ＬＵから他のＬＵに対するマクロ性能融通の融通量が予め設定された下限に到達している場合（下限到達時）にオンに設定され、それ以外の場合にオフに設定される。
【００９０】
融通フラグＦMICINは、対象ＬＵが他のＬＵからミクロ性能融通を受けている場合にオンに設定され、それ以外の場合にオフに設定される。
融通フラグＦMICOUTは、対象ＬＵが他のＬＵに対しミクロ性能融通を行なっている場合にオンに設定され、それ以外の場合にオフに設定される。
【００９１】
融通ユニット数ＮＢは、対象ＬＵが他のＬＵからマクロ性能融通を受けている場合あるいは対象ＬＵが他のＬＵに対しマクロ性能融通を行なっている場合の融通量に対応するユニット数である。ここで、融通ユニット数ＮＢは、当該融通量を、上述した所定の性能融通単位（ユニット）の数に換算した値である。
【００９２】
待ちＩ／Ｏ数ＮＣは、対象ＬＵにおける、ＱｏＳ制御で待ち状態のＩ／Ｏ（ホスト１０からの入出力要求またはコマンド）の数である。
待ちブロック数ＮＤは、対象ＬＵにおける、ＱｏＳ制御で待ち状態のＩ／Ｏ（ホスト１０からの入出力要求またはコマンド）の総ブロック数である。
これらの待ちＩ／Ｏ数ＮＣおよび待ちブロック数ＮＤから、ＱｏＳ制御で待ち状態のＩ／Ｏに対応するユニット数（待ちユニット数）が換算される。
【００９３】
最小余りユニット数ＮＥは、対象ＬＵにおける１秒毎の余りユニット数ＮＩの最小値（最小余り量）である。ここで、余りユニット数ＮＩは、対象ＬＵに対するＩ／Ｏに係る処理量の、対象ＬＵの処理性能に対する処理余り量（余裕値）に対応するもので、当該処理余り量を、上述した所定の性能融通単位（ユニット）の数に換算した値である。
【００９４】
最小待ちユニット数ＮＦは、対象ＬＵにおける１秒毎の待ちユニット数の最小値（最小待ち量）である。ここで、待ちユニット数は、上述したように、待ちＩ／Ｏ数ＮＣおよび待ちブロック数ＮＤから換算される、ＱｏＳ制御で待ち状態のＩ／Ｏに対応するユニット数である。
【００９５】
ミクロ融通数ＮＧは、対象ＬＵがミクロ性能融通を行なう際の「融通回数制限」（表１参照）に対応する値で、対象ＬＵにおける、１マクロサイクル（例えば３０秒）内のミクロ性能融通の実行回数の制限値（例えば４回）である。
ミクロ融通ユニット数ＮＨは、今回のミクロ性能融通によって、対象ＬＵが他のＬＵから受ける一時的な融通量、もしくは、対象ＬＵが他のＬＵに対し融通する一時的な融通量に対応するユニット数である。つまり、ミクロ融通ユニット数ＮＨは、当該一時的な融通量を、上述した所定の性能融通単位（ユニット）の数に換算した値である。
【００９６】
余りユニット数ＮＩは、最小余りユニット数ＮＥの説明において上述した通り、対象ＬＵに対するＩ／Ｏに係る処理量の、対象ＬＵの処理性能に対する処理余り量（余裕値）に対応する。そして、余りユニット数ＮＩは、当該処理余り量を、上述した所定の性能融通単位（ユニット）の数に換算した値である。
【００９７】
〔１−５−１０〕マクロ融通チェック部
マクロ融通チェック部５１０は、第１判定部５２１および第２判定部５２２によりマクロ性能融通を実行するか否かを判定するために必要な情報（最小余りユニット数ＮＥおよび最小待ちユニット数ＮＦ）をチェックして取得する。このため、マクロ融通チェック部５１０は、第１取得部５１１および第２取得部５１２を有する。なお、マクロ融通チェック部５１０の詳細な動作（マクロ融通１秒チェック処理の処理手順）については、図１３を参照しながら後述する。
【００９８】
第１取得部５１１は、後述する第１判定部５２１がマクロ性能融通の上記「融通を受ける条件」の判定を行なうために必要な情報である最小待ちユニット数ＮＦを取得する。つまり、第１取得部５１１は、ＬＵ毎に、１マクロサイクル（例えば３０秒；第１所定時間）よりも短い時間間隔（例えば１秒間隔）で、当該ＬＵに対する待ちユニット数（Ｉ／Ｏの処理待ち量）を取得する。このとき、１秒毎の待ちユニット数は、上述したように、待ちＩ／Ｏ数ＮＣおよび待ちブロック数ＮＤから換算される。
【００９９】
そして、第１取得部５１１は、ＬＵ毎に、１マクロサイクル中に取得される待ちユニット数のうち最小のものを最小待ちユニット数（最小待ち量）ＮＦとして取得する。このとき、第１取得部５１１は、１マクロサイクル中の１秒毎に待ちユニット数を取得する都度、今回取得した待ちユニット数と、ＱｏＳ制御域２１３に保存されている値（現時点までの最小待ちユニット数）ＮＦとを比較する。今回取得した待ちユニット数が値ＮＦよりも小さい場合、第１取得部５１１は、値ＮＦを、今回取得した待ちユニット数に置き換える。第１取得部５１１が以上の処理を繰り返すことにより、１マクロサイクルが経過した時点でＱｏＳ制御域２１３に保存されている値ＮＦが、最小待ちユニット数ＮＦとなる。
【０１００】
第２取得部５１２は、後述する第２判定部５２２がマクロ性能融通の上記「融通する条件」の判定を行なうために必要な情報である最小余りユニット数ＮＥを取得する。つまり、第２取得部５１２は、ＬＵ毎に、１マクロサイクル（例えば３０秒；第２所定時間）よりも短い時間間隔（例えば１秒間隔）で、当該ＬＵについての余りユニット数（処理余り量）を取得する。このとき、１秒毎の余りユニット数は、ＱｏＳ制御域２１３に保存される余りユニット数ＮＩを１秒毎に参照することで取得される。
【０１０１】
そして、第２取得部５１２は、ＬＵ毎に、１マクロサイクル中に取得される余りユニット数ＮＩのうち最小のものを最小余りユニット数（最小余り量）ＮＥとして取得する。このとき、第２取得部５１２は、１マクロサイクル中の１秒毎に余りユニット数ＮＩを取得する都度、今回取得した余りユニット数ＮＩと、ＱｏＳ制御域２１３に保存されている値（現時点までの最小余りユニット数）ＮＥとを比較する。今回取得した余りユニット数が値ＮＥよりも小さい場合、第２取得部５１２は、値ＮＥを、今回取得した余りユニット数ＮＩに置き換える。第２取得部５１２が以上の処理を繰り返すことにより、１マクロサイクルが経過した時点でＱｏＳ制御域２１３に保存されている値ＮＥが、最小余りユニット数ＮＥとなる。
【０１０２】
〔１−５−１１〕マクロ融通処理部
マクロ融通処理部５２０は、マクロ融通チェック部５１０の第１取得部５１１および第２取得部５１２によりそれぞれ取得された最小待ちユニット数ＮＦおよび最小余りユニット数ＮＥに基づき、マクロ性能融通を実行する。マクロ融通処理部５２０は、第１判定部５２１，第２判定部５２２および変更部５２３を有する。なお、マクロ融通処理部５２０の詳細な動作（マクロ融通処理の処理手順）については、図１４および図１５を参照しながら後述する。
【０１０３】
第１判定部５２１は、各ＬＵがマクロ性能融通の上記「融通を受ける条件」を満たすか否かを判定する。つまり、第１判定部５２１は、ＬＵ毎に、当該ＬＵに対するＩ／Ｏに係る処理量が１マクロサイクル（第１所定時間；３０秒）に亘って当該ＬＵの処理性能を超えているか否かを判定する。より具体的に、第１判定部５２１は、当該ＬＵについて第１取得部５１１により取得された最小待ちユニット数ＮＦが０でない場合、当該ＬＵに対するＩ／Ｏに係る処理量が１マクロサイクルに亘って当該ＬＵの処理性能を超えていると判定する。つまり、第１判定部５２１は、当該ＬＵがマクロ性能融通の上記「融通を受ける条件」を満たす融通先ＬＵであると判定する。
【０１０４】
第２判定部５２２は、各ＬＵがマクロ性能融通の上記「融通する条件」を満たすか否かを判定する。つまり、第２判定部５２２は、ＬＵ毎に、当該ＬＵに対するＩ／Ｏに係る処理量が１マクロサイクル（第２所定時間；３０秒）に亘って当該ＬＵの処理性能を下回っているか否かを判定する。より具体的に、第２判定部５２２は、当該ＬＵについて第２取得部４１２により取得された最小余りユニット数ＮＥが０でない場合、当該ＬＵに対するＩ／Ｏに係る処理量が１マクロサイクルに亘って当該ＬＵの処理性能を下回っていると判定する。つまり、第２判定部５２２は、当該ＬＵがマクロ性能融通の上記「融通する条件」を満たす融通元ＬＵであると判定する。
【０１０５】
変更部５２３は、第１判定部５２１および第２判定部５２２による判定結果に従って、対象ＬＵの性能限界値をユニット単位で変更することで、融通元ＬＵから融通先ＬＵへのマクロ性能融通を、１ユニット単位で行なう。つまり、第１判定部５２１による判定結果が下記項目（ａ１）に示す場合であり、且つ、第２判定部５２２による判定結果が下記項目（ａ２）に示す場合である時、変更部５２３は、下記項目（ａ３）に示す変更処理を行なう。
【０１０６】
（ａ１）第１判定部５２１による判定結果：  一のＬＵ（第１記憶装置）がマクロ性能融通の上記「融通を受ける条件」を満たす融通先ＬＵである場合。
（ａ２）第２判定部５２２による判定結果：  他のＬＵ（第２記憶装置）がマクロ性能融通の上記「融通する条件」を満たす融通元ＬＵである場合。
（ａ３）変更処理：  融通先ＬＵについて算出された性能制限値に、上記所定の性能融通単位で１ユニット分に対応する値を加算するとともに、融通元ＬＵについて算出された性能制限値から、上記所定の性能融通単位で１ユニット分に対応する値を減算する。
【０１０７】
〔１−５−１２〕マクロ融通復旧処理部
マクロ融通復旧処理部５３０は、各ＬＵが上記「復帰条件」を満たした場合、融通先ＬＵに融通した処理量を、融通先ＬＵから融通元ＬＵに復帰させる復旧処理を実行する。マクロ融通復旧処理部５３０は、第３判定部５３１および復旧処理部５３２を有する。なお、マクロ融通復旧処理部５３０（特に復旧処理部５３２）の詳細な動作（マクロ融通復旧処理の処理手順）については、図１６〜図２０を参照しながら後述する。
【０１０８】
第３判定部５３１は、各ＬＵがマクロ性能融通の上記「復帰条件」を満たすか否かを判定する。つまり、第３判定部５３１は、ＬＵ毎に、当該ＬＵが、一以上の融通先ＬＵ（第１記憶装置）へのマクロ性能融通を行なった融通元ＬＵ（第２記憶装置）であり、且つ、当該ＬＵに対するＩ／Ｏの処理待ちの生じた融通復旧対象であるか否かを判定する。
【０１０９】
復旧処理部５３２は、第３判定部５３１により当該ＬＵが融通復旧対象（以下、融通復旧ＬＵという）であると判定された場合、融通復旧ＬＵが他のＬＵに融通した処理量を一以上の融通先ＬＵから融通復旧ＬＵに復帰させる復旧処理を実行する。その際、復旧処理部５３２は、一以上の融通先ＬＵに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を一以上の融通先ＬＵから融通復旧ＬＵに復帰させる。
【０１１０】
〔１−５−１３〕ミクロ融通処理部
ミクロ融通処理部５４０は、ミクロ性能融通を実行するもので、第４判定部５４１，融通処理部５４２，融通後処理部５４３，第５判定部５４４，ビジー率算出部５４５を有する。なお、ミクロ融通処理部５４０の詳細な動作（ミクロ融通処理およびミクロ融通後処理の処理手順）については、図１１，図１２および図２２〜図３１を参照しながら後述する。ミクロ融通処理部５４０によるミクロ性能融通の実行回数は、１マクロサイクル当たり、ＱｏＳ制御域２１３においてミクロ融通数ＮＧとして設定される値（例えば４）に制限される。
【０１１１】
第４判定部（待ち入出力要求判定部）５４１は、各ＬＵがミクロ性能融通の「融通を受ける条件」を満たすか否かを判定する。つまり、本実施形態において、第４判定部５４１は、ＬＵのそれぞれについて、待ち状態のＩ／Ｏ要求が有るか否か（待ち状態のＩ／Ｏ要求の有無）を判定する。
【０１１２】
第５判定部（性能余裕判定部）５４４は、第４判定部５４１によって待ち状態のＩ／Ｏ要求が有ると判定された融通先ＬＵが存在する場合、当該融通先ＬＵを含むＲＡＩＤグループ（ストレージ装置１００）における性能余裕の有無を判定する。このとき、第５判定部５４４は、ビジー率算出部５４５によって算出されるＲＡＩＤグループビジー率Ｌが所定値（例えば８０％）未満である場合、当該ＲＡＩＤグループに性能余裕が有ると判定する。
【０１１３】
ビジー率算出部５４５は、ストレージ装置１００において複数のＬＵが属するＲＡＩＤグループのビジー率（ＲＡＩＤグループビジー率）Ｌを算出する。その際、ビジー率算出部５４５は、ＲＡＩＤグループに含まれる複数のディスクドライブ（ＨＤＤ１０１ａ〜１０１ｄ）のそれぞれについてビジー率を算出し、複数のディスクドライブの平均ビジー率を、ＲＡＩＤグループビジー率Ｌとして算出する。
【０１１４】
なお、複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、ビジー率算出部５４５は、各ディスクドライブのビジー率に対し種別に応じた係数（図２５参照）を乗算してＲＡＩＤグループビジー率Ｌを算出する。また、複数のＲＡＩＤグループが自動階層化プール（Flexible Tieredのプール）を構成する場合、ビジー率算出部５４５は、全てのＲＡＩＤグループにおける全てのディスクドライブを考慮してＲＡＩＤグループビジー率Ｌを算出する。つまり、ビジー率算出部５４５は、複数のＲＡＩＤグループについて算出された複数のＲＡＩＤグループビジー率のそれぞれに、各ＲＡＩＤグループに含まれるディスクドライブの種別に応じた係数（図２６参照）を乗算して、複数のＲＡＩＤグループ全体についてのビジー率Ｌを算出する。ビジー率算出部５４５によるＲＡＩＤグループビジー率Ｌの算出手順については、図２２〜図２６を参照しながら後述する。
【０１１５】
また、ビジー率算出部５４５は、融通先ＬＵに対する性能融通量をビジー率増加分に換算し、換算されたビジー率増加分をＲＡＩＤグループビジー率Ｌに加算した値を性能融通後のＲＡＩＤグループビジー率Ｌとして用いる。ビジー率算出部５４５によるビジー率増加分の換算等の手順については、図２７，図２８，図３０，図３１を参照しながら後述する。
【０１１６】
融通処理部５４２は、第５判定部５４４によってＲＡＩＤグループに性能余裕が有ると判定された場合つまりＲＡＩＤグループビジー率Ｌが所定値（例えば８０％）未満であると判定された場合、融通先ＬＵに対しＲＡＩＤグループの未割当帯域から性能融通を行なう。このとき、複数のＬＵの中に性能余裕をもつ融通元ＬＵが存在しない場合、融通処理部５４２は、融通先ＬＵに対し、ＲＡＩＤグループにおける複数のＬＵ用帯域以外の未割当帯域から性能融通を行なう。一方、複数のＬＵの中に融通元ＬＵが存在する場合、融通処理部５４２は、融通先ＬＵに対し、融通元ＬＵ用帯域における未割当帯域から性能融通を行なう。
【０１１７】
つまり、本実施形態では、処理性能に余裕のあるＬＵが無く融通先ＬＵへの処理性能の融通を行なえない際、融通先ＬＵの属するＲＡＩＤグループに性能余裕があれば、ＲＡＩＤグループにおけるＬＵ用帯域以外の未割当帯域からミクロ性能融通が行なわれる。また、本実施形態では、処理性能に余裕のある融通元ＬＵから融通先ＬＵへの性能融通が可能であっても、これらのＬＵの属するＲＡＩＤグループに性能余裕がなければ、融通元ＬＵから融通先ＬＵへのミクロ性能融通を行なわないように構成される。
【０１１８】
融通処理部５４２と融通後処理部５４３とは、協働して、第４判定部５４１により「融通を受ける条件」を満たすと判定された融通先ＬＵに対するミクロ性能融通を行なう。その際、上述したように、融通先ＬＵの属するＲＡＩＤグループに性能余裕がある場合つまり当該ＲＡＩＤグループのビジー率が所定値未満である場合、融通先ＬＵに対するミクロ性能融通が行なわれる。
【０１１９】
なお、ミクロ性能融通の「融通量」は、ＱｏＳ制御域２１３においてミクロ融通ユニット数ＮＨとして保持される。ＱｏＳ制御域２１３におけるミクロ融通ユニット数ＮＨの値は、図２９を参照しながら後述するように、１ミクロサイクルの開始時にクリアされる。このため、ミクロ融通ユニット数ＮＨの値に応じた融通量でのミクロ性能融通は、１回（１ミクロサイクル）だけ実行される。
【０１２０】
融通処理部５４２は、スケジュール部５０６によるＱｏＳ Ｉ／Ｏ起動スケジュール処理前（図６参照）に動作する。融通処理部５４２は、１ミクロサイクル毎に、性能不足となる融通先ＬＵ（待ちＬＵ）を検索し、もし該当する融通先ＬＵがあれば、処理性能に余裕のある融通元ＬＵ（余りＬＵ）を検索する。そして、融通処理部５４２は、検索された待ちＬＵの待ちユニット数と検索された余りＬＵの余りユニット数とを、それぞれ大きい順に並べた待ちＬＵ配列および余りＬＵ配列として記憶する。融通処理部５４２は、待ちＬＵ配列および余りＬＵ配列に基づき、全ての余りユニット数（合計値）を待ちＬＵで分配し各待ちＬＵに対するミクロ融通ユニット数ＮＨを決定する。また、融通処理部５４２は、上述のごとくＲＡＩＤグループに性能余裕があれば、性能融通を行なう待ちＬＵおよび余りＬＵについてＱｏＳ制御域２１３にミクロ融通ユニット数ＮＨおよび融通フラグＦMICIN，ＦMICOUTを設定する。さらに、融通処理部５４２は、ミクロ性能融通を行なう待ちＬＵと余りＬＵとの組合せを一組でも決定した場合、ＱｏＳ制御域２１３のミクロ融通有フラグ（図３参照）をオンに設定し、ミクロ性能融通を行なう旨を融通後処理部５４３に通知する。
【０１２１】
さらに、融通処理部５４２は、待ちＬＵが有るが余りＬＵが無い場合、上述のごとくＲＡＩＤグループに性能余裕があれば、ＲＡＩＤグループにおけるＬＵ用帯域以外の未割当帯域から待ちＬＵへのミクロ性能融通を行なう。このとき、融通処理部５４２は、ミクロ融通ユニット数ＮＨを、以下の４つのパターンのうちの一つで決定し、待ちＬＵについてＱｏＳ制御域２１３にミクロ融通ユニット数ＮＨおよび融通フラグＦMICINを設定する。そして、融通処理部５４２は、ＱｏＳ制御域２１３のミクロ融通有フラグ（図３参照）をオンに設定し、ミクロ性能融通を行なう旨を融通後処理部５４３に通知する。
【０１２２】
パターン１：  ミクロ融通ユニット数ＮＨ＝[所定閾値(例えば８０％)]−[ＲＡＩＤグループビジー率Ｌ]の値を換算したユニット数
パターン２：  ミクロ融通ユニット数ＮＨ＝待ち（不足）ユニット数のｎ倍（ｎは１以上の整数）
パターン３：  ミクロ融通ユニット数ＮＨ＝所定の固定ユニット数
パターン４：  ミクロ融通ユニット数ＮＨ＝対象ＬＵ（融通先ＬＵ）のＱｏＳ設定値に依存（比例）したユニット数
【０１２３】
融通処理部５４２は、以上のようなミクロ融通処理を、図２９〜図３１を参照しながら詳述する処理手順で実行する。
【０１２４】
融通後処理部５４３は、スケジュール部５０６によるＱｏＳ Ｉ／Ｏ起動スケジュール処理後（図６参照）、ＱｏＳ制御域２１３のミクロ融通有フラグ（図３参照）がオンに設定されている場合に動作する。融通後処理部５４３は、１ミクロサイクル毎に、ミクロ融通ユニット数ＮＨおよび融通フラグＦMICIN，ＦMICOUTに基づいて、待ちＬＵおよび余りＬＵの限界値に対する加減算処理を行ない、次のＮミリ秒サイクルでミクロ性能融通を実行する。ただし、本実施形態では、ＱｏＳ制御用のメモリで保持可能な数値範囲を超えるのを抑止すべく、図６に示すように、１秒毎に、ＱｏＳ制御に係るＱｏＳカウントがクリアされる。当該ＱｏＳカウントのクリアに対応すべく、融通後処理部５４３は、１秒毎のＱｏＳカウントクリアタイミングとそれ以外のタイミングとで異なる処理を行なっている。各タイミングでの、融通後処理部５４３による処理については、図１２を参照しながら後述する。融通後処理部５４３は、以上のようなミクロ融通後処理を、図１２を参照しながら詳述する処理手順で実行する。
【０１２５】
〔２〕本実施形態の動作
次に、図６〜図２０を参照しながら、本実施形態に係るストレージ装置１００の動作、特に、本実施形態に係るストレージ装置１００による処理の処理手順について説明する。
【０１２６】
〔２−１〕Ｎミリ秒タイマスケジュール処理
まず、図６に示すフローチャート（ステップＳ１０１〜Ｓ１１１）に従って、本実施形態のＳＣＳＩターゲット制御部３０３によって実行されるＮミリ秒タイマスケジュール処理の処理手順について説明する。Ｎは、例えば、１０であり、ＳＣＳＩターゲット制御部３０３は、各ポートについて、１０ミリ秒毎に、図６に示すＮミリ秒タイマスケジュール処理を実行する。これにより、図７〜図９および図１１〜図２０を参照しながら詳述するごとく、ＱｏＳ制御（ＱｏＳ Ｉ／Ｏ起動スケジュール），マクロ性能融通およびミクロ性能融通が実行される。
【０１２７】
Ｎミリ秒タイマスケジュール処理が起動されると、まず、算出部５０５は、各ポートの限界値である限界Ｉ／Ｏ数および限界ブロック数に、それぞれＮミリ秒Ｉ／Ｏ数およびＮミリ秒ブロック数を加算する。加算結果のポート限界値は、ＱｏＳ管理テーブル５０１に上書き保存される（ステップＳ１０１）。ポート限界値に加算される限界Ｉ／Ｏ数および限界ブロック数は、ＱｏＳ設定（図４の性能値）のＮ／１０００（Ｎ＝１０の場合、１／１００）の値となる（図５参照）。
【０１２８】
また、算出部５０５は、全てのホスト１０の限界値である限界Ｉ／Ｏ数および限界ブロック数に、それぞれＮミリ秒Ｉ／Ｏ数およびＮミリ秒ブロック数を加算する。加算結果の全ホスト限界値は、ＱｏＳ管理テーブル５０１に上書き保存される（ステップＳ１０２）。各ホスト限界値に加算される限界Ｉ／Ｏ数および限界ブロック数は、ＱｏＳ設定（図４の性能値）のＮ／１０００（Ｎ＝１０の場合、１／１００）の値となる（図５参照）。
【０１２９】
さらに、本実施形態では、ＬＵを性能融通対象としているため、算出部５０５は、全てのＬＵのそれぞれに対し、図７に示す全ＬＵ限界値加算処理を実行する（ステップＳ１０３）。ここで、図７に示すフローチャート（ステップＳ１２１〜Ｓ１２５）に従って、全ＬＵ限界値加算処理の処理手順について説明する。
【０１３０】
図７に示すように、算出部５０５は、全てのＬＵの限界値である限界Ｉ／Ｏ数および限界ブロック数に、それぞれＮミリ秒Ｉ／Ｏ数およびＮミリ秒ブロック数を加算する。加算結果の全ホスト限界値は、ＱｏＳ管理テーブル５０１に上書き保存される（ステップＳ１２１）。各ホスト限界値に加算される限界Ｉ／Ｏ数および限界ブロック数は、ＱｏＳ設定（図４の性能値）のＮ／１０００（Ｎ＝１０の場合、１／１００）の値となる（図５参照）。
【０１３１】
そして、算出部５０５は、ＱｏＳ制御域２１３を参照し、各ＬＵの融通フラグＦINがオンであるか否かを判定する（ステップＳ１２２）。融通フラグＦINがオンである場合（ステップＳ１２２のＹＥＳルート）、つまり対象ＬＵがマクロ性能融通を受けている融通先ＬＵである場合、算出部５０５は、さらに、以下の加算処理を行なう（ステップＳ１２３）。
【０１３２】
即ち、算出部５０５は、対象ＬＵの限界値である限界Ｉ／Ｏ数に、ＱｏＳ制御域２１３の融通ユニット数ＮＢに対応するＩ／Ｏ数をさらに加算する。具体的には、[融通ユニット数ＮＢ]×[ユニット当たりのＩ／Ｏ数]のＮ／１０００の値が限界Ｉ／Ｏ数に加算される。同様に、算出部５０５は、対象ＬＵの限界値である限界ブロック数に、ＱｏＳ制御域２１３の融通ユニット数ＮＢに対応するＩ／Ｏ数をさらに加算する。具体的には、[融通ユニット数ＮＢ]×[ユニット当たりのブロック数]のＮ／１０００の値が限界ブロック数に加算される。加算結果は、ＱｏＳ管理テーブル５０１に上書き保存される。
【０１３３】
ステップＳ１２３の処理後、もしくは、融通フラグＦINがオフである場合（ステップＳ１２２のＮＯルート）、算出部５０５は、ＱｏＳ制御域２１３を参照し、各ＬＵの融通フラグＦOUTがオンであるか否かを判定する（ステップＳ１２４）。融通フラグＦOUTがオンである場合（ステップＳ１２４のＹＥＳルート）、つまり対象ＬＵがマクロ性能融通を行なっている融通元ＬＵである場合、算出部５０５は、さらに、以下の減算処理を行なう（ステップＳ１２５）。
【０１３４】
即ち、算出部５０５は、対象ＬＵの限界値である限界Ｉ／Ｏ数から、ＱｏＳ制御域２１３の融通ユニット数ＮＢに対応するＩ／Ｏ数を減算する。具体的には、[融通ユニット数ＮＢ]×[ユニット当たりのＩ／Ｏ数]のＮ／１０００の値が限界Ｉ／Ｏ数から減算される。同様に、算出部５０５は、対象ＬＵの限界値である限界ブロック数から、ＱｏＳ制御域２１３の融通ユニット数ＮＢに対応するブロック数を減算する。具体的には、[融通ユニット数ＮＢ]×[ユニット当たりのブロック数]のＮ／１０００の値が限界ブロック数から減算される。減算結果は、ＱｏＳ管理テーブル５０１に上書き保存される。
【０１３５】
ステップＳ１２５の処理後、もしくは、融通フラグＦOUTがオフである場合（ステップＳ１２４のＮＯルート）、算出部５０５は、全ＬＵ限界値加算処理を完了する。
上述のような全ＬＵ限界値加算処理（ステップＳ１０３，Ｓ１２１〜Ｓ１２５）をＮミリ秒毎に実行することで、マクロ性能融通がＮミリ秒毎に実行される。なお、ホスト１０を性能融通対象とする場合には、算出部５０５は、ステップＳ１０２において、全てのホストのそれぞれに対し、図７に示す全ＬＵ限界値加算処理と同様の全ホスト限界値加算処理を実行する。
【０１３６】
さて、限界値加算処理（ステップＳ１０１〜Ｓ１０３）を完了すると、図６に示すように、ビジー率算出部５４５によって、全てのＲＡＩＤグループのビジー率Ｌの算出処理および蓄積処理が、例えば０．５秒（１ミクロサイクル）毎に実行される（ステップＳ１０４１）。ビジー率算出部５４５によるＲＡＩＤグループビジー率Ｌの算出手順については、図２２〜図２６を参照しながら後述する。
【０１３７】
この後、第４判定部５４１，融通処理部５４２，第５判定部５４４およびビジー率算出部５４５によるミクロ融通処理が、例えば０．５秒（１ミクロサイクル）毎に実行される（ステップＳ１０４２）。第４判定部５４１，融通処理部５４２，第５判定部５４４およびビジー率算出部５４５によるミクロ融通処理については、図２９〜図３１を参照しながら後述する。また、ミクロ融通処理に含まれる、ビジー率算出部５４５によるビジー率増加分の換算等の手順については、図２７および図２８を参照しながら後述する。
【０１３８】
そして、マクロ融通チェック部５１０によるマクロ融通１秒チェック処理が、１秒毎に実行されてから（ステップＳ１０５）、第３判定部５３１により融通元ＬＵで処理性能不足が発生したか否かが、Ｎミリ秒毎に判定される（ステップＳ１０６）。融通元ＬＵで処理性能不足が発生した場合（ステップＳ１０６のＹＥＳルート）、つまり融通復旧ＬＵが存在する場合、復旧処理部５３２によるマクロ融通復旧処理が実行される（ステップＳ１０７）。上述したステップＳ１０５〜Ｓ１０７の処理は、マクロ融通前処理に相当する。なお、マクロ融通チェック部５１０によるマクロ融通１秒チェック処理については、図１３を参照しながら後述し、復旧処理部５３２によるマクロ融通復旧処理については、図１６および図１７を参照しながら後述する。
【０１３９】
ステップＳ１０７の処理後、もしくは、融通復旧ＬＵが存在しない場合（ステップＳ１０６のＮＯルート）、スケジュール部５０６は、ＱｏＳ Ｉ／Ｏ起動スケジュール処理を実行する（ステップＳ１０８）。ＱｏＳ Ｉ／Ｏ起動スケジュール処理については、図８および図９を参照しながら後述する。
【０１４０】
ついで、マクロ融通処理部５２０によるマクロ融通処理が、例えば３０秒（１マクロサイクル）毎に実行され（ステップＳ１０９）、１秒毎に、ＱｏＳ制御に係るＱｏＳカウントがクリアされる（ステップＳ１１０）。ＱｏＳカウントのクリアにより、ＱｏＳ制御用のメモリで保持可能な数値範囲を超えることが抑止される。この後、融通後処理部５４３によるミクロ融通後処理が、例えば０．５秒（１ミクロサイクル）毎に実行され（ステップＳ１１１）、Ｎミリ秒タイマスケジュールの１サイクル分（Ｎミリ秒毎）の処理が完了する。マクロ融通処理部５２０によるマクロ融通処理については、図１４および図１５を参照しながら後述する。また、融通後処理部５４３によるミクロ融通後処理については、図１２を参照しながら後述する。
【０１４１】
〔２−２〕ＱｏＳ Ｉ／Ｏ起動スケジュール処理
次に、図８および図９に示すフローチャート（ステップＳ２０１〜Ｓ２１７）に従って、本実施形態のスケジュール部５０６によって実行されるＱｏＳ Ｉ／Ｏ起動スケジュール処理（図６のステップＳ１０８）の処理手順について詳細に説明する。ＱｏＳ Ｉ／Ｏ起動スケジュール処理では、ＬＵ毎に設けた待ちキュー内にコマンドが待機している場合、以下のように、当該ＬＵの限界Ｉ／Ｏ数および限界ブロック数に従って、待ちキュー内のコマンドが実行される。
【０１４２】
スケジュール部５０６は、マークしたホストを復元する（ステップＳ２０１）。続いて、スケジュール部５０６は、マークしたＬＵを復元する（ステップＳ２０２）。そして、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがあるか否かを判定する（ステップＳ２０３）。
【０１４３】
ここで、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがあると判定した場合（ステップＳ２０３のＹＥＳルート）、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ２０４）。そして、スケジュール部５０６は、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ２０４のＹＥＳルート）、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ２０５）。
【０１４４】
ここで、スケジュール部５０６は、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ２０５のＹＥＳルート）、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ２０６）。そして、スケジュール部５０６は、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ２０６のＹＥＳルート）、ポートの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数およびブロック数を減算する（ステップＳ２０７）。
【０１４５】
また、スケジュール部５０６は、ホストの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数およびブロック数を減算する（ステップＳ２０８）。続いて、スケジュール部５０６は、ＬＵの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数およびブロック数を減算する（ステップＳ２０９）。そして、実行部５０７は、コマンドを起動する（ステップＳ２１０）。また、コマンドを起動した後、実行部５０７は、コマンドを待ちキュー格納部５０２からデキューする（ステップＳ２１１）。この処理の後、ストレージ装置１００は、ステップＳ２０３に移行する。
【０１４６】
また、スケジュール部５０６は、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ２０４のＮＯルート）、ホストとＬＵとをマークし（ステップＳ２１２）、処理を終了する。また、スケジュール部５０６は、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ２０５のＮＯルート）、ＬＵをマークし（ステップＳ２１３）、ステップＳ２１４に移行する。
【０１４７】
また、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがないと判定した場合（ステップＳ２０３のＮＯルート）、ステップＳ２１４に移行する。また、スケジュール部５０６は、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ２０６のＮＯルート）、ステップＳ２１４に移行する。
【０１４８】
ステップＳ２１４において、スケジュール部５０６は、次のＬＵをセットする。そして、スケジュール部５０６は、次のＬＵがマークしたＬＵと同じＬＵであるか否かを判定する（ステップＳ２１５）。ここで、スケジュール部５０６は、次のＬＵがマークしたＬＵと同じＬＵではないと判定した場合（ステップＳ２１５のＮＯルート）、ステップＳ２０３に移行する。
【０１４９】
一方、スケジュール部５０６は、次のＬＵがマークしたＬＵと同じＬＵであると判定した場合（ステップＳ２１５のＹＥＳルート）、次のホストをセットする（ステップＳ２１６）。続いて、スケジュール部５０６は、次のホストがマークしたホストと同じホストであるか否かを判定する（ステップＳ２１７）。ここで、スケジュール部５０６は、次のホストがマークしたホストと同じホストではないと判定した場合（ステップＳ２１７のＮＯルート）、ステップＳ２０２に移行する。一方、スケジュール部５０６は、次のホストがマークしたホストと同じホストであると判定した場合（ステップＳ２１７のＹＥＳルート）、処理を終了する。
【０１５０】
〔２−３〕コマンド受信時の処理
ここで、図１０に示すフローチャート（ステップＳ３０１〜Ｓ３０９）に従って、本実施形態のコマンド受信部５０４によって実行されるコマンド受信処理の処理手順について詳細に説明する。ストレージ装置１００は、例えば、コマンドを受信したことを契機にこのコマンド受信処理を実行する。コマンド受信処理では、ホストからコマンドを受信した際、以下のように、受信したコマンドは、限界Ｉ／Ｏ数および限界ブロック数に応じて、即座に実行されるか、もしくは、待ちキューにエンキューされる。
【０１５１】
図１０に示すように、コマンド受信部５０４は、受信したコマンドの発行元ホストとＬＵとの間で待ちＩ／Ｏがあるか否かを判定する（ステップＳ３０１）。ここで、コマンド受信部５０４により発行元ホストとＬＵＮとの間で待ちＩ／Ｏがないと判定された場合（ステップＳ３０１のＮＯルート）、スケジュール部５０６は、以下の処理を実行する。すなわち、スケジュール部５０６は、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ３０２）。そして、スケジュール部５０６は、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ３０２のＹＥＳルート）、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ３０３）。
【０１５２】
ここで、スケジュール部５０６は、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ３０３のＹＥＳルート）、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内であるか否かを判定する（ステップＳ３０４）。そして、スケジュール部５０６は、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内であると判定した場合（ステップＳ３０４のＹＥＳルート）、ポートの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数とブロック数とを減算する（ステップＳ３０５）。
【０１５３】
また、スケジュール部５０６は、ホストの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数およびブロック数を減算する（ステップＳ３０６）。続いて、スケジュール部５０６は、ＬＵの限界値（限界Ｉ／Ｏ数および限界ブロック数）から、コマンド分のＩ／Ｏ数およびブロック数を減算する（ステップＳ３０７）。また、実行部５０７は、コマンドを起動する（ステップＳ３０８）。ストレージ装置１００は、ステップＳ３０８の終了後、処理を終了する。
【０１５４】
コマンド受信部５０４は、受信したコマンドの発行元ホストとＬＵとの間で待ちＩ／Ｏがあると判定した場合（ステップＳ３０１のＹＥＳルート）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がポートの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ３０２のＮＯルート）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がホストの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ３０３のＮＯルート）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がＬＵの限界Ｉ／Ｏ数および限界ブロック数以内ではないと判定した場合（ステップＳ３０４のＮＯルート）、ステップＳ３０９に移行する。そして、コマンド受信部５０４は、ステップＳ３０９において、コマンドを待ちキュー格納部５０２にエンキューし、処理を終了する。
【０１５５】
〔２−４〕ミクロ融通処理
ここで、図１１を参照しながら、本実施形態に係るミクロ融通処理の概要について説明する。図１１に示す例では、ＲＡＩＤグループの帯域幅の中に３つのＬＵ＃０，ＬＵ＃１，ＬＵ＃２のためのＱｏＳ設定範囲（帯域幅）が確保されている。また、３つのＬＵ＃０，ＬＵ＃１，ＬＵ＃２のそれぞれについての帯域上限がＱｏＳ設定範囲内で設定されている。そして、図１１に示す例では、ＬＵ＃１およびＬＵ＃２に対するＩ／Ｏ要求は帯域上限に達しているとともに、ＬＵ＃０に対するＩ／Ｏ要求は帯域上限を超えている。このため、ＬＵ＃０は、処理性能不足の状態であり、ＬＵ＃１およびＬＵ＃２は、いずれも処理性能不足ではないが処理性能に余裕がある状態でもない。したがって、従来、ＱｏＳ設定範囲内において、処理性能不足のＬＵ＃０に対しＬＵ＃１，ＬＵ＃２から性能融通を行なうことができない。
【０１５６】
このような状態において、ＬＵ＃０〜ＬＵ＃２の属するＲＡＩＤグループの帯域幅に余裕があれば、図１１に示すように、余裕のある帯域（未割当帯域）を処理性能不足のＬＵ＃０に融通することが望まれる。本実施形態では、処理性能に余裕のあるＬＵが無く融通先ＬＵ＃０への処理性能の融通を行なえない際、融通先ＬＵ＃０の属するＲＡＩＤグループに性能余裕があれば、ＲＡＩＤグループにおけるＱｏＳ設定範囲以外の未割当帯域からミクロ性能融通が行なわれる。
【０１５７】
〔２−４−１〕ＲＡＩＤグループビジー率およびその増加分の算出手順
まず、ミクロ融通処理に先立ち、図６のステップＳ１０４１でビジー率算出部５４５によって行なわれる、ＲＡＩＤグループビジー率Ｌの算出手順について、下記項目（Ａ），（Ｂ）において図２２〜図２６を参照しながら説明する。
【０１５８】
ＲＡＩＤグループビジー率Ｌの基本的な算出手順では、ＲＡＩＤグループに属する各ディスクドライブのビジー率が算出され、ＲＡＩＤグループに属する全ディスクドライブのビジー率の平均値が、ＲＡＩＤグループビジー率Ｌとして算出される。各ディスクドライブのビジー率の算出について下記項目（Ａ）で説明し、ＲＡＩＤグループビジー率Ｌの算出について下記項目（Ｂ）で説明する。各ディスクドライブのビジー率は、ディスクドライブ種別ごとの実力値（最大値）とされる性能値に基づき算出される。
【０１５９】
そして、ミクロ融通処理中にビジー率算出部５４５によって行なわれるＲＡＩＤグループビジー率増加分の算出手順について、下記項目（Ｃ）において図２７および図２８を参照しながら説明する。ＲＡＩＤグループビジー率増加分の算出処理は、図３０のステップＳ４１７および図３１のステップＳ４２４で実行される。
【０１６０】
（Ａ）ディスクドライブビジー率について
まず、ビジー率算出についての説明に際して用いられる、具体的な数値例を図２２および図２３に示す。図２２は、本実施形態におけるディスクドライブのビジー率の算出に用いられる、平均スループット値（シーケンシャル性能値）と、当該スループット値が得られる際の平均レスポンス時間とを、ディスクドライブ種別ごとに示す図である。また、図２３は、本実施形態におけるディスクドライブのビジー率の算出に用いられる、平均ＩＯＰＳ値（ランダム性能値）と当該平均ＩＯＰＳ値が得られる際の平均レスポンス時間とを、ディスクドライブ種別ごとに示す図である。
【０１６１】
なお、図２２〜図２７におけるディスクドライブ種別は、ＳＳＤ（Solid State Drive）、１５Ｋ ＳＡＳ、１０Ｋ ＳＡＳ、７．２Ｋ ＮＬ（nearline）−ＳＡＳ、５．４Ｋ ＳＡＴＡ（Serial Advanced Technology Attachment）の５種類である。
【０１６２】
ここで、図２２の上側４段には平均スループット値［ＭＢ／ｓ］が示されている。そして、１段目および２段目には、それぞれ、シーケンシャルリードおよびシーケンシャルライトの平均スループット値の実力値（最大値）［ＭＢ／ｓ］が示される。３段目および４段目には、それぞれ、ビジー率算出に用いられるリード使用値およびライト使用値［ＭＢ／ｓ］が示される。リード使用値およびライト使用値としては、それぞれ、シーケンシャルリードおよびシーケンシャルライトの平均スループット値の実力値以下の値が設定される。図２２の下側４段には、それぞれ、図２２の上側４段に示される平均スループット値に対応する平均レスポンス時間［ｍｓ］が示されている。
【０１６３】
また、図２３の上側４段には平均ＩＯＰＳ値が示されている。そして、１段目および２段目には、それぞれ、ランダムリードおよびランダムライトの平均ＩＯＰＳ値の実力値（最大値）が示される。また、３段目および４段目には、それぞれ、ビジー率算出に用いられるリード使用値およびライト使用値［ＩＯＰＳ］が示される。リード使用値およびライト使用値としては、それぞれ、ランダムリードおよびランダムライトの平均ＩＯＰＳ値の実力値以下の値が設定される。図２３の下側４段には、それぞれ、図２３の上側４段に示される平均ＩＯＰＳ値に対応する平均レスポンス時間［ｍｓ］が示されている。
【０１６４】
図２２および図２３に示すリード使用値やライト使用値に基づき、まず、図２４に示すような最大リードブロック数，最大ライトブロック数，最大リードコマンド数，最大ライトコマンド数が、ディスクドライブ種別ごとに算出される。最大リードブロック数および最大ライトブロック数は、それぞれ、リードおよびライトのスループットを平均レスポンス時間で処理する場合の、平均実行中におけるブロック数であり、以下のように算出される。また、最大リードコマンド数および最大ライトコマンド数は、それぞれ、リードおよびライトのＩＯＰＳを平均レスポンス時間で処理する場合の、平均実行中におけるコマンド数であり、以下のように算出される。
【０１６５】
[最大リードブロック数]＝[シーケンシャルリードの１ms当たりのスループット値をブロック数に換算した値]×[シーケンシャルリードの平均レスポンス時間]
[最大ライトブロック数]＝[シーケンシャルライトの１ms当たりのスループット値をブロック数に換算した値]×[シーケンシャルライトの平均レスポンス時間]
[最大リードコマンド数]＝[ランダムリードの１ms当たりのコマンド数]×[ランダムリードの平均レスポンス時間]
[最大ライトコマンド数]＝[ランダムライトの１ms当たりのコマンド数]×[ランダムライトの平均レスポンス時間]
【０１６６】
例えば、ＳＳＤの最大リードブロック数は、以下のように算出される。つまり、シーケンシャルリードの１ms当たりのスループット値（リード使用値）は485/1000である。当該１ms当たりのスループット値485/1000をブロック数に換算すると、485/1000×2000となる。また、シーケンシャルリードの平均レスポンス時間（リード使用値）は9である。したがって、ＳＳＤの最大リードブロック数は、485/1000×2000×9＝8730となる。
【０１６７】
また、例えば、ＳＳＤの最大ライトコマンド数は、以下のように算出される。つまり、ランダムライトの１ms当たりのコマンド数（ライト使用値）は11170/1000である。また、ランダムライトの平均レスポンス時間（ライト使用値）は3である。したがって、ＳＳＤの最大ライトコマンド数は、11170/1000×3≒33となる。
【０１６８】
なお、最大リードコマンド数や最大ライトコマンド数は、ディスクドライブのキュー数になる。本実施形態では、ディスクドライブ種別がＳＳＤ、１５Ｋ ＳＡＳ、１０Ｋ ＳＡＳである場合、最大リードコマンド数および最大ライトコマンド数の上限値として４０が用いられてもよい。また、ディスクドライブ種別がＮＬ−ＳＡＳ、５．４Ｋ ＳＡＴＡである場合、最大リードコマンド数および最大ライトコマンド数の上限値として３０が用いられてもよい。
【０１６９】
そして、ビジー率算出部５４５は、各ディスクドライブのビジー率を算出するタイミングで、各ディスクドライブにおける以下の情報(1)〜(4)を取得する。
【０１７０】
(1) 実行中のリードコマンド数
(2) 実行中のリードコマンドの全ブロック数
(3) 実行中のライトコマンド数
(4) 実行中のライトコマンドの全ブロック数
【０１７１】
ついで、ビジー率算出部５４５は、上記情報(1)〜(4)のそれぞれについて、以下のようなビジー率情報(a)〜(d)を算出する。
【０１７２】
(a) [リードブロック数からのビジー率]＝[実行中リードブロック数（上記情報(2)）]÷[最大リードブロック数（図２４の１段目参照）]
(b) [ライトブロック数からのビジー率]＝[実行中ライトブロック数（上記情報(4)）]÷[最大ライトブロック数（図２４の２段目参照）]
(c) [リードコマンド数からのビジー率]＝[実行中リードコマンド数（上記情報(1)）]÷[最大リードコマンド数（図２４の３段目参照）])
(d) [ライトコマンド数からのビジー率]＝[実行中ライトコマンド数（上記情報(3)）]÷[最大ライトコマンド数（図２４の４段目参照）]
【０１７３】
ビジー率算出部５４５は、上述のようなビジー率情報(a)〜(d)の算出処理を、ミクロ性能融通チェック期間である例えば０．５秒の間において、Ｎミリ秒間隔で実施する。Ｎ＝１０の場合、５０回分の算出結果の平均によってビジー率が求められ、求められたビジー率の値で性能融通の判断を行なうことができる。Ｎ＝１００の場合、５回分の算出結果の平均によってビジー率が求められ、求められたビジー率の値で性能融通の判断を行なうことができる。
【０１７４】
ついで、ビジー率算出部５４５は、ミクロ性能融通チェック期間である例えば０．５秒間のシーケンシャル／ランダム比率情報(e)〜(l)を取得する。シーケンシャルは、例えば１２８ブロック以上のサイズのコマンドとし、ランダムは、例えば１２８ブロック未満のサイズのコマンドとする。ここで、取得される情報(e)〜(l)は、以下の通りである。
【０１７５】
(e) シーケンシャルリードコマンド数（ブロックサイズが１２８以上）
(f) シーケンシャルライトコマンド数（ブロックサイズが１２８以上）
(g) ランダムリードコマンド数（ブロックサイズが１２８未満）
(h) ランダムライトコマンド数（ブロックサイズが１２８未満）
(i) シーケンシャルリードブロック数（ブロックサイズが１２８以上）
(j) シーケンシャルライトブロック数（ブロックサイズが１２８以上）
(k) ランダムリードブロック数（ブロックサイズが１２８未満）
(l) ランダムライトブロック数（ブロックサイズが１２８未満）
【０１７６】
ビジー率算出部５４５は、ディスクドライブごとに、０．５秒間のディスクドライブビジー率を、下式によって算出する。
【０１７７】
[ディスクドライブビジー率]＝
(a)×((i)÷((i)＋(j)＋(k)＋(l)))＋(b)×((j)÷((i)＋(j)＋(k)＋(l)))＋
(c)×((g)÷((e)＋(f)＋(g)＋(h)))＋(d)×((h)÷((e)＋(f)＋(g)＋(h)))
【０１７８】
（Ｂ）ＲＡＩＤグループビジー率について
上述のようにして、ディスクドライブごとにディスクドライブビジー率が算出されると、ビジー率算出部５４５は、算出されたディスクドライブビジー率に基づき、ＲＡＩＤグループビジー率Ｌを算出する。
【０１７９】
このとき、ＲＡＩＤグループビジー率Ｌは、下式のように、当該ＲＡＩＤグループを構成する全てのディスクドライブについて算出されたディスクドライブビジー率の平均値（平均ビジー率）とする。ＲＡＩＤレベルごとの違いは全てのディスクドライブに対するコマンド数に反映されているため、ＲＡＩＤレベルごとのビジー率の求め方に差異はないものとする。なお、以下では、ＲＡＩＤグループを構成するディスクドライブのことを、「構成ディスクドライブ」という場合がある。
【０１８０】
[ＲＡＩＤグループビジー率Ｌ]＝[ＲＡＩＤグループを構成する全てのディスクドライブのそれぞれについて算出されたディスクドライブビジー率の和]÷[構成ディスクドライブの数]
【０１８１】
なお、ＲＡＩＤグループを構成する複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、ビジー率算出部５４５は、下式の通り、各ディスクドライブのビジー率に対し種別に応じた係数を乗算してＲＡＩＤグループビジー率Ｌを算出してもよい。ＲＡＩＤグループの性能は、実力性能の低いディスクドライブの性能に依存するところが大きくなる。このため、係数は、図２５においてディスクドライブ混在係数として示すように、ディスクドライブの性能が低くなるほど大きくなるよう設定されている。
【０１８２】
[ＲＡＩＤグループビジー率Ｌ]＝
〔[ＲＡＩＤグループを構成する全てのディスクドライブのそれぞれについて算出されたビジー率]×[各ディスクドライブの種別に応じたディスクドライブ混在係数]の和〕÷[各ディスクドライブのビジー率に乗じたディスクドライブ混在係数の和]
【０１８３】
また、複数のＲＡＩＤグループが自動階層化プール（Flexible Tieredのプール）を構成する場合も、ＲＡＩＤグループビジー率Ｌは、全ＲＡＩＤグループに属する全ディスクドライブのビジー率の平均値として算出することができる。その際、高速なＲＡＩＤグループほど大きな重みを付与することが望ましい。このため、ビジー率算出部５４５は、下式の通り、各ＲＡＩＤグループのビジー率に対し当該ＲＡＩＤグループに属するディスクドライブの種別に応じた重み付け（重み係数の乗算）を行なってもよい。このとき、重み係数は、図２６においてFlexible Tiered重み係数として示すように、ディスクドライブの処理速度が速くなるほど大きくなるように設定される。
【０１８４】
[ＲＡＩＤグループビジー率Ｌ]＝
〔[各ＲＡＩＤグループに属するディスクドライブの平均ビジー率]×[各ＲＡＩＤグループに属するディスクドライブの種別に応じたFlexible Tiered重み係数]の和〕÷〔[各ＲＡＩＤグループに属するディスクドライブの数]×[各ＲＡＩＤグループに属するディスクドライブの種別に応じたFlexible Tiered重み係数]の和〕
【０１８５】
上述のように、Flexible Tieredの場合、プールを構成する全ＲＡＩＤグループの全ディスクドライブについて上記計算を行なうことで、ＲＡＩＤグループビジー率Ｌが求められる。しかし、このとき、プールを構成するＲＡＩＤグループの管理を担当するＣＭが、ＣＭ２００ａとＣＭ２００ｂとの二つに分かれる場合が問題になる。基本的には、一方のＣＭ側のみでビジー率を保持して当該一方のＣＭ側で性能融通を可能にする。当該一方のＣＭとしては、最高速のＲＡＩＤグループを管理下にもつＣＭが選択され、該当するＣＭが無い場合、容量の大きい方のＣＭが選択される。ビジー率を保持しない方のＣＭ（他方のＣＭ）において性能融通は行なわれない。
【０１８６】
（Ｃ）ＲＡＩＤグループビジー率増加分について
次に、ビジー率算出部５４５によるビジー率増加分の換算等の手順について、図２７および図２８を参照しながら説明する。
【０１８７】
本実施形態では、ミクロサイクル（例えば０．５秒）ごとにＬＵ（ボリューム）ごとの性能融通が行なわれる。このとき、ビジー率Ｌが例えば所定値（例えば８０％）未満のＲＡＩＤグループは、次のミクロサイクル向けに性能融通を受けることで、ビジー率Ｌが上昇することが予想される。また、ビジー率Ｌの上昇を考慮せずに、複数のＬＵ（ボリューム）に対し性能融通を行なうと、ビジー率Ｌが一気に跳ね上がることが予想される。
【０１８８】
そこで、本実施形態では、ＬＵに対し性能融通を行なう際には、当該性能融通の量がビジー率Ｌをどれだけ上昇（増加）させるか、その増加分をビジー率算出部５４５によって算出しながら性能融通が行なわれる。融通先ＬＵが複数存在する場合、優先順（例えば待ちユニット数の大きい順）に性能融通が行なわれる。その際、当該性能融通後のビジー率増加分をビジー率Ｌに反映することで、ビジー率Ｌが所定閾値を大きく超えるような性能融通の実行が抑止される。
【０１８９】
以下、ＬＵに対する性能融通量が、ＲＡＩＤグループビジー率Ｌをどれほど増加させるか、そのビジー率増加分の換算手順について説明する。
【０１９０】
まず、ビジー率算出部５４５は、ＲＡＩＤグループの０．５秒の最大性能値を求める。シンプロビジョニング（thin provisioning）プールの場合、プールに含まれるＲＡＩＤグループごとに得られる最大性能値の和が求められる。また、Flexible Tieredのプールの場合、層ごとに得られる最大性能値にディスクドライブ種別の重み係数（図２６参照）を乗算した値の和が求められる。
【０１９１】
各ディスクドライブが０．５秒間に処理可能なブロック数およびコマンド数（最大性能値）としては、図２７に示すような値が求められる。図２７では、ディスクドライブ種別ごとに算出された「ブロック数／0.5秒」および「コマンド数／0.5秒」が示されている。ここでは、性能の低いライト動作から、最大性能値を求めている。
【０１９２】
図２７の例えばディスクドライブ種別「ＳＳＤ」の欄においては、シーケンシャルライトの平均スループット値340 ＭＢ／ｓ（図２２のＳＳＤのライト使用値参照）が記入されている。当該平均スループット値340に、2048と0.5とを乗算することにより、シーケンシャルライトの平均スループット値340は「ブロック数／0.5秒」の値348160に換算される。同様に、図２７の例えばディスクドライブ種別「ＳＳＤ」の欄においては、ランダムライトの平均ＩＯＰＳ値11170（図２３のＳＳＤのライト使用値参照）が記入されている。当該平均ＩＯＰＳ値11170に、0.5を乗算することにより、ランダムライトの平均ＩＯＰＳ値11170は「コマンド数／0.5秒」の値5585に換算される。
【０１９３】
また、Volume １Ｉ／Ｏ（ＬＵ 1Ｉ／Ｏ）に対するＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数は、例えば図２８に示す通りである。
【０１９４】
上述のような各ディスクドライブの０．５秒間の最大性能値に基づき、ＲＡＩＤグループの０．５秒間に処理可能なブロック数およびコマンド数は、通常、それぞれ下式(101), (102)のように算出される。ここでは、ディスクドライブの種別は同一であるとする。
【０１９５】
[ＲＡＩＤグループブロック数/0.5秒]＝
[構成ディスクドライブのブロック数/0.5秒の和]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]    (101)
【０１９６】
[ＲＡＩＤグループコマンド数/0.5秒]＝
[構成ディスクドライブのコマンド数/0.5秒の和]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]    (102)
【０１９７】
また、ＲＡＩＤグループを構成するディスクドライブの種別が異なる場合、ＲＡＩＤグループの性能は、実力性能の低いディスクドライブの性能に依存するため、ＲＡＩＤグループの０．５秒間に処理可能なブロック数およびコマンド数は、下式(103), (104)のように算出される。
【０１９８】
[ＲＡＩＤグループブロック数/0.5秒]＝
[構成ディスクドライブのうち最も性能の低いディスクドライブのブロック数/0.5秒]×[構成ディスクドライブの数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]    (103)
【０１９９】
[ＲＡＩＤグループコマンド数/0.5秒]＝
[構成ディスクドライブのうち最も性能の低いディスクドライブのコマンド数/0.5秒]×[構成ディスクドライブの数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]    (104)
【０２００】
また、Flexible Tieredのプールの場合、当該プールの性能は、下式(105), (106)のように、当該プールを構成する各ＲＡＩＤグループの[ブロック数/0.5秒]または[コマンド数/0.5秒]に、ディスクドライブ種別ごとのFlexible Tiered重み係数（図２６参照）を乗算した値の和として算出される。
【０２０１】
[Flexible Tieredプールブロック数/0.5秒]＝
〔[プールを構成するＲＡＩＤグループのブロック数/0.5秒]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]〕の和    (105)
【０２０２】
[Flexible Tieredプールコマンド数/0.5秒]＝
〔[プールを構成するＲＡＩＤグループのコマンド数/0.5秒]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]〕の和    (106)
【０２０３】
そして、本実施形態において、ビジー率算出部５４５は、下式(107), (108)のごとく、性能融通によるＲＡＩＤグループのビジー率増加分を、以下の分母および分子をもつ分数の値として算出する。つまり、分母は、上式(101)〜(104)のように算出された、０．５秒当たりのＲＡＩＤグループブロック数あるいは０．５秒当たりのＲＡＩＤグループコマンド数とする。また、分子には、性能融通を受けるブロック数あるいはコマンド数（性能融通量）に、ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数を乗算した値が使用される。
【０２０４】
[ＲＡＩＤグループビジー率増加分]＝
〔[融通ブロック数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]÷[ＲＡＩＤグループブロック数/0.5秒]〕と
〔[融通コマンド数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]÷[ＲＡＩＤグループコマンド数/0.5秒]〕と
で大きい方の値    (107)
【０２０５】
また、Flexible Tieredのプールの場合、性能融通によるＲＡＩＤグループのビジー率増加分は、下式(108)のように算出される。
【０２０６】
[ＲＡＩＤグループビジー率増加分]＝
〔[融通ブロック数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]÷[ＲＡＩＤグループブロック数/0.5秒]〕と
〔[融通コマンド数]×[ＲＡＩＤレベルごとのディスクドライブＩ／Ｏ数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]÷[ＲＡＩＤグループコマンド数/0.5秒]〕と
で大きい方の値    (108)
【０２０７】
〔２−４−２〕ミクロ融通処理の詳細
次に、図２９〜図３１に示すフローチャート（ステップＳ４０１〜Ｓ４２４）に従って、本実施形態のミクロ融通処理部５４０（第４判定部５４１および融通処理部５４２）によって実行されるミクロ融通処理（図６のステップＳ１０４２）の処理手順について説明する。ミクロ融通処理は、図６に示すＮミリ秒タイマスケジュール処理がＮミリ秒毎に実行される中で、１ミクロサイクル（例えば０．５秒＝５００ミリ秒）毎に、スケジュール部５０６によるＱｏＳ Ｉ／Ｏ起動スケジュール処理前に実行される。なお、図２９にはステップＳ４０１〜Ｓ４０７の処理が示され、図３０にはステップＳ４０８〜Ｓ４１７の処理が示され、図３１にはステップＳ４１８〜Ｓ４２４の処理が示されている。
【０２０８】
図１１に示すように、ミクロ融通処理部５４０は、０．５秒毎に起動されると、まず、各ＲＡＩＤグループについて、テーブル域２１４のＲＡＩＤグループ融通ユニット数ＮＫをクリアして０にする（ステップＳ４０１）。また、ミクロ融通処理部５４０は、各ＬＵについて、ＱｏＳ制御域２１３の融通フラグＦMICINおよびＦMICOUTをクリアしてオフ状態にする（ステップＳ４０２）。また、ミクロ融通処理部５４０は、各ＬＵについて、ＱｏＳ制御域２１３のミクロ融通ユニット数ＮＨをクリアして０にする（ステップＳ４０３）。これにより、前回のミクロ性能融通に係る情報が全てクリアされる。従って、ミクロ融通ユニット数ＮＨの値に応じた融通量でのミクロ性能融通は、１回（１ミクロサイクル）だけ実行される。
【０２０９】
この後、第４判定部５４１は、ＬＵ毎に、当該ＬＵ（対象ＬＵ）について、待ち状態のＩ／Ｏ要求が有るか否かを判定する（ステップＳ４０４）。そして、待ち状態のＩ／Ｏ要求が有る場合（ステップＳ４０４のＹＥＳルート）、第５判定部５４４が、対象ＬＵ（融通先ＬＵ）を含むＲＡＩＤグループにおける性能余裕の有無を判定する（ステップＳ４０５）。このとき、第５判定部５４４は、ビジー率算出部５４５によって算出されテーブル域２１４に保存される、当該ＲＡＩＤグループについてのビジー率Ｌが所定値（例えば８０％）以上であるか否かを判定する。
【０２１０】
当該ＲＡＩＤグループについてのビジー率Ｌが所定値未満である場合（ステップＳ４０５のＮＯルート）、当該ＲＡＩＤグループに性能余裕が有ると判定され、融通処理部５４２は、今回の対象ＬＵを、待ちＬＵ配列（リスト）の適切な位置に挿入する（ステップＳ４０６）。待ちＬＵ配列は、待ち状態のＩ／Ｏ要求をもつ融通先ＬＵを、優先度の高い順に配列してから、待ち状態のＩ／Ｏ要求量（待ちユニット数）の大きい順に配列したものである。待ちユニット数は、ＱｏＳ制御域２１３の待ちＩ／Ｏ数ＮＣおよび待ちブロック数ＮＤから換算される。ミクロ性能融通用の待ちＬＵ配列（リスト）は、例えばＱｏＳ制御域２１３内に作成され、ＬＵを特定するＬＵＮと当該ＬＵにおける待ちユニット数とを対応付けて保存している。なお、本実施形態において、ミクロ性能融通での「１サイクルでの融通ＬＵ数」は、例えば、４ＬＵとしているので、待ちＬＵ配列における要素数は４で十分である。
【０２１１】
ステップＳ４０６の処理後、もしくは、対象ＬＵに対するＩ／Ｏ要求が無い場合（ステップＳ４０４のＮＯルート）、もしくは、ビジー率Ｌが所定値以上で当該ＲＡＩＤグループに性能余裕が無いと判定された場合（ステップＳ４０５のＹＥＳルート）、融通処理部５４２は、ステップＳ４０７の処理を行なう。つまり、融通処理部５４２は、全てのＬＵについて待ち状態のＩ／Ｏ要求の有無の判定を行なったか否かを判定する（ステップＳ４０７）。全てのＬＵについて待ち状態のＩ／Ｏの有無の判定を行なっていない場合（ステップＳ４０７のＮＯルート）、ミクロ融通処理部５４０は、ステップＳ４０２の処理に戻る。一方、全てのＬＵについて待ちユニット数の判定を行なった場合（ステップＳ４０７のＹＥＳルート）、融通処理部５４２は、ミクロ性能融通用の待ちＬＵ配列に待ちＬＵが存在するか否かを判定する（ステップＳ４０８）。
【０２１２】
待ちＬＵ配列に待ちＬＵが存在する場合（ステップＳ４０８のＹＥＳルート）、融通処理部５４２は、対象ＬＵを、余りＬＵ配列（リスト）の適切な位置に挿入する（ステップＳ４０９）。余りＬＵ配列は、性能余裕をもつ融通元ＬＵを、性能余裕量（余りユニット数）の大きい順に配列したものである。ミクロ性能融通用の余りＬＵ配列（リスト）は、例えばＱｏＳ制御域２１３内に作成され、ＬＵを特定するＬＵＮと当該ＬＵにおける余りユニット数とを対応付けて保存している。対象ＬＵの余りユニット数としては、ＱｏＳ制御域２１３に保存される余りユニット数ＮＩが読み出されて用いられる。
【０２１３】
この後、融通処理部５４２は、ミクロ性能融通用の余りＬＵ配列に余りＬＵが存在するか否かを判定する（ステップＳ４１０）。余りＬＵ配列に余りＬＵが存在する場合（ステップＳ４１０のＹＥＳルート）、融通処理部５４２は、待ちＬＵ配列および余りＬＵ配列に基づき、全ての余りユニット数（合計値）を待ちＬＵで分配し各待ちＬＵに対するミクロ融通ユニット数ＮＨを決定する（ステップＳ４１１）。
【０２１４】
そして、融通処理部５４２は、待ちユニットの有無を確認する（ステップＳ４１２）。待ちユニットが有る場合（ステップＳ４１２のＹＥＳルート）、ステップＳ４０５と同様、第５判定部５４４が、対象ＬＵ（融通先ＬＵ）を含むＲＡＩＤグループにおける性能余裕の有無を判定する（ステップＳ４１３）。当該ＲＡＩＤグループについてのビジー率Ｌが所定値以上で当該ＲＡＩＤグループに性能余裕が無いと判定された場合（ステップＳ４１３のＹＥＳルート）、融通処理部５４２は、ステップＳ４１２の処理に戻る。
【０２１５】
一方、当該ＲＡＩＤグループについてのビジー率Ｌが所定値未満である場合（ステップＳ４１３のＮＯルート）、当該ＲＡＩＤグループに性能余裕が有ると判定され、融通処理部５４２は、余りＬＵから待ちＬＵへのミクロ性能融通を行なうべく、ステップＳ４１４の処理を行なう。つまり、融通処理部５４２は、性能融通を受ける待ちＬＵのＱｏＳ制御域２１３において、余りＬＵから融通されるミクロ融通ユニット数ＮＨを設定するとともに、当該待ちＬＵがミクロ性能融通を受けることを示す融通フラグＦMICINをオンに設定する。また、融通処理部５４２は、決定された組合せの余りＬＵのＱｏＳ制御域２１３において、待ちＬＵに融通するミクロ融通ユニット数ＮＨを設定するとともに、当該余りＬＵがミクロ性能融通を行なっていることを示す融通フラグＦMICOUTをオンに設定する（ステップＳ４１４）。なお、性能融通により待ち状態や余り状態を解消されうる待ちＬＵや余りＬＵについては、待ちＬＵ配列や余りＬＵ配列から削除される。
【０２１６】
また、融通処理部５４２は、ミクロ性能融通を行なう待ちＬＵと余りＬＵとの組合せを一組でも決定すると、ＱｏＳ制御域２１３のミクロ融通有フラグをオンに設定し（ステップＳ４１５）、ミクロ性能融通を行なう旨を融通後処理部５４３に通知する。そして、融通処理部５４２は、性能融通を受ける待ちＬＵが属するＲＡＩＤグループの融通ユニット数ＮＫ（テーブル域２１４）に、ステップＳ４１１で決定されたミクロ融通ユニット数ＮＨを加算する（ステップＳ４１６）。
【０２１７】
さらに、ビジー率算出部５４５は、ステップＳ４１１で決定されたミクロ融通ユニット数ＮＨ（性能融通量）を、ＲＡＩＤグループビジー率Ｌの増加分（ビジー率増加分）に換算する。その換算手法は、上記項目（Ｃ）で説明した通りである。ビジー率算出部５４５は、換算したビジー率増加分を、テーブル域２１４における、性能融通対象の待ちＬＵの属するＲＡＩＤグループについてのビジー率Ｌに加算する（ステップＳ４１７）。この後、ミクロ融通処理部５４０は、ステップＳ４１２の処理に戻る。
【０２１８】
ステップＳ４０８，Ｓ４１０，Ｓ４１２のそれぞれにおいてＮＯ判定となった場合、融通処理部５４２は、待ちユニットが存在するか、あるいは、さらに性能不足のＬＵが存在するを判定する（ステップＳ４１８）。待ちユニットや性能不足ＬＵが存在しない場合（ステップＳ４１８のＮＯルート）、ミクロ融通処理部５４０は、ミクロ融通処理を完了する。
【０２１９】
一方、待ちユニットや性能不足ＬＵが存在する場合、融通先ＬＵに対するミクロ性能融通を行なうことのできる余りＬＵが存在しない状態になっているものと考えられる。このような状態になった際、本実施形態では、待ちＬＵ（性能不足ＬＵ）の属するＲＡＩＤグループに性能余裕があれば、ＲＡＩＤグループにおけるＬＵ用帯域以外の未割当帯域からミクロ性能融通が行なわれる。
【０２２０】
そこで、本実施形態では、待ちユニットや性能不足ＬＵが存在する場合（ステップＳ４１８のＹＥＳルート）、ステップＳ４０５と同様、第５判定部５４４が、待ちＬＵ（待ちユニット）を含むＲＡＩＤグループにおける性能余裕の有無を判定する（ステップＳ４１９）。当該ＲＡＩＤグループについてのビジー率Ｌが所定値以上で当該ＲＡＩＤグループに性能余裕が無いと判定された場合（ステップＳ４１９のＹＥＳルート）、融通処理部５４２は、ステップＳ４１８の処理に戻る。
【０２２１】
一方、当該ＲＡＩＤグループについてのビジー率Ｌが所定値未満である場合（ステップＳ４１９のＮＯルート）、当該ＲＡＩＤグループに性能余裕が有ると判定される。そして、融通処理部５４２は、ＲＡＩＤグループにおけるＬＵ用帯域以外の未割当帯域（性能余裕のある帯域）から、待ちＬＵへのミクロ性能融通を行なうべく、ステップＳ４２０，Ｓ４２１の処理を行なう。
【０２２２】
このとき、融通処理部５４２は、ＲＡＩＤグループの未割当帯域から待ちＬＵへ融通するミクロ融通ユニット数ＮＨを、上述する４つのパターンのうちの一つによって決定する（ステップＳ４２０）。そして、融通処理部５４２は、性能融通を受ける待ちＬＵのＱｏＳ制御域２１３において、余りＬＵから融通されるミクロ融通ユニット数ＮＨを設定するとともに、当該待ちＬＵがミクロ性能融通を受けることを示す融通フラグＦMICINをオンに設定する（ステップＳ４２１）。なお、性能融通により待ち状態を解消されうる待ちＬＵについては、待ちＬＵ配列から削除される。
【０２２３】
また、融通処理部５４２は、ＱｏＳ制御域２１３のミクロ融通有フラグをオンに設定し（ステップＳ４２２）、ミクロ性能融通を行なう旨を融通後処理部５４３に通知する。そして、融通処理部５４２は、性能融通を受ける待ちＬＵが属するＲＡＩＤグループの融通ユニット数ＮＫ（テーブル域２１４）に、ステップＳ４２０で決定されたミクロ融通ユニット数ＮＨを加算する（ステップＳ４２３）。
【０２２４】
さらに、ステップＳ４１７と同様、ビジー率算出部５４５は、ステップＳ４２０で決定されたミクロ融通ユニット数ＮＨを、ＲＡＩＤグループビジー率Ｌの増加分（ビジー率増加分）に換算する。そして、ビジー率算出部５４５は、換算したビジー率増加分を、テーブル域２１４における、性能融通対象の待ちＬＵの属するＲＡＩＤグループについてのビジー率Ｌに加算する（ステップＳ４２４）。この後、ミクロ融通処理部５４０は、ステップＳ４１８の処理に戻る。
【０２２５】
〔２−５〕ミクロ融通後処理
次に、図１２に示すフローチャート（ステップＳ５０１〜Ｓ５０７）に従って、本実施形態の融通後処理部５４３によって実行されるミクロ融通後処理（図６のステップＳ１１１）の処理手順について説明する。ミクロ融通後処理は、図６に示すＮミリ秒タイマスケジュール処理がＮミリ秒毎に実行される中で、１ミクロサイクル（０．５秒）毎に、スケジュール部５０６によるＱｏＳ Ｉ／Ｏ起動スケジュール処理後に実行される。特に、ミクロ融通後処理は、図６に示すように、ＱｏＳ Ｉ／Ｏ起動スケジュール処理およびマクロ融通処理が実行され、１秒毎のＱｏＳカウントがクリアされた後の、Ｎミリ秒タイマスケジュール処理の最終ステップＳ１１１で実行される。
【０２２６】
図１２に示すように、融通後処理部５４３は、まず、ＱｏＳ制御域２１３のミクロ融通有フラグがオンであるか否かを判定する（ステップＳ５０１）。ミクロ融通有フラグがオフである場合（ステップＳ５０１のＮＯルート）、融通後処理部５４３は、何ら処理を行なうことなく、ミクロ融通後処理を完了する。
【０２２７】
ミクロ融通有フラグがオンである場合（ステップＳ５０１のＹＥＳルート）、融通後処理部５４３はＱｏＳ制御域２１３のミクロ融通有フラグをオフに設定する（ミクロ融通有設定クリア後；ステップＳ５０２）。この後、融通後処理部５４３は、各ＬＵについて、融通フラグＦMICINがオンであるか否かを判定する（ステップＳ５０３）。
【０２２８】
融通フラグＦMICINがオンである場合（ステップＳ５０３のＹＥＳルート）、即ち対象ＬＵが待ちＬＵである場合、融通後処理部５４３は、当該ＬＵの限界Ｉ／Ｏ数にミクロ融通ユニット数ＮＨ分のＩ／Ｏ数を加算する。また、融通後処理部５４３は、当該ＬＵの限界ブロック数にミクロ融通ユニット数ＮＨ分のブロック数を加算する（ステップＳ５０４）。
【０２２９】
ステップＳ５０４の処理後、もしくは、融通フラグＦMICINがオフである場合（ステップＳ５０３のＮＯルート）、融通後処理部５４３は、各ＬＵについて、下記所定の判定条件を満たしているか否かを判定する（ステップＳ５０５）。ここで、所定の判定条件は、対象ＬＵの融通フラグＦMICOUTがオンで、且つ、今回のタイミングが１秒毎のＱｏＳカウントクリア後ではないという条件である。
【０２３０】
所定の判定条件を満たす場合（ステップＳ５０５のＹＥＳルート）、即ち今回のタイミングが１秒毎のＱｏＳカウントクリア後ではなく且つ対象ＬＵが余りＬＵである場合、融通後処理部５４３は、以下の減算処理を行なう（ステップＳ５０６）。つまり、融通後処理部５４３は、当該ＬＵの限界Ｉ／Ｏ数からミクロ融通ユニット数ＮＨ分のＩ／Ｏ数を減算するとともに、当該ＬＵの限界ブロック数からミクロ融通ユニット数ＮＨ分のブロック数を減算する。
【０２３１】
所定の判定条件を満たさない場合（ステップＳ５０５のＮＯルート）、つまり対象ＬＵの融通フラグＦMICOUTがオフ、または、今回のタイミングが１秒毎のＱｏＳカウントクリア後である場合、融通後処理部５４３は、ステップＳ５０６の減算処理を行なうことなくステップＳ５０７の処理に移行する。今回のタイミングが１秒毎のＱｏＳカウントクリア後である場合、ＱｏＳカウントがクリアされているため、減算処理を行なう必要が無いからである。
【０２３２】
ステップＳ５０６の処理後、もしくは、ステップＳ５０５でＮＯ判定後、融通後処理部５４３は、判定対象のＬＵがまだ有るか否か判定する（ステップＳ５０７）。判定対象のＬＵがまだ有る場合（ステップＳ５０７のＹＥＳルート）、融通後処理部５４３は、ステップＳ５０３の処理に戻る。判定対象のＬＵが無い場合（ステップＳ５０７のＮＯルート）、融通後処理部５４３は、ミクロ融通後処理を完了する。
【０２３３】
〔２−６〕マクロ融通１秒チェック処理
次に、図１３に示すフローチャート（ステップＳ６０１〜Ｓ６０８）に従って、本実施形態のマクロ融通チェック部５１０によって実行されるマクロ融通１秒チェック処理（図６のステップＳ１０５）の処理手順について説明する。マクロ融通１秒チェック処理では、第１判定部５２１および第２判定部５２２によりマクロ性能融通を実行するか否かを判定するために必要な情報である、最小余りユニット数ＮＥおよび最小待ちユニット数ＮＦが取得される。マクロ融通１秒チェック処理は、図６に示すＮミリ秒タイマスケジュール処理がＮミリ秒毎に実行される中で、例えば１秒毎に実行される。
【０２３４】
図１３に示すように、マクロ融通チェック部５１０は、まず、復帰値のデフォルト値として“FALSE”をＱｏＳ制御域２１３等に記憶させる（ステップＳ６０１）。ここで、復帰値“FALSE”は、マクロ性能融通による融通量を復帰させる融通復旧ＬＵが存在しないことを示す情報である。この後、マクロ融通チェック部５１０は、各ＬＵについて、以下の処理（ステップＳ６０２〜Ｓ６０８）を実行する。
【０２３５】
マクロ融通チェック部５１０は、対象ＬＵの融通フラグＦOUTがオンで、且つ、対象ＬＵに待ちＩ／Ｏがあるか否か、つまり、対象ＬＵが、融通元ＬＵでありながら処理性能不足の生じた融通復旧ＬＵであるか否かを判定する（ステップＳ６０２）。
【０２３６】
対象ＬＵが融通復旧ＬＵである場合（ステップＳ６０２のＹＥＳルート）、マクロ融通チェック部５１０は、復帰値として“TRUE”をＱｏＳ制御域２１３等に記憶させる（ステップＳ６０８）。ここで、復帰値“TRUE”は、融通復旧ＬＵが存在することを示す情報である。この後、マクロ融通チェック部５１０は、ステップＳ６０７の処理に移行する。
【０２３７】
対象ＬＵが融通復旧ＬＵでない場合（ステップＳ６０２のＮＯルート）、第２取得部５１２は、当該ＬＵの現在の余りユニット数ＮＩを取得する。各ＬＵの余りユニット数ＮＩは、ＱｏＳ制御域２１３に保存される各ＬＵの余りユニット数ＮＩを参照することで取得される。そして、第２取得部５１２は、今回取得した余りユニット数ＮＩと、ＱｏＳ制御域２１３に保存されている値（現時点までの最小余りユニット数）ＮＥとを比較する（ステップＳ６０３）。
【０２３８】
今回取得した余りユニット数ＮＩが値ＮＥよりも小さい場合（ステップＳ６０３のＹＥＳルート）、第２取得部５１２は、値ＮＥを今回取得した余りユニット数ＮＩに置き換える（ステップＳ６０４）。
【０２３９】
ステップＳ６０４の処理後、もしくは、今回取得した余りユニット数ＮＩが値ＮＥ以上である場合（ステップＳ６０３のＮＯルート）、第１取得部５１１は、当該ＬＵの現在の待ちユニット数を取得する。各ＬＵの待ちユニット数は、上述したように対象ＬＵの待ちＩ／Ｏ数ＮＣおよび待ちブロック数ＮＤから換算される。そして、第１取得部５１１は、今回取得した待ちユニット数と、ＱｏＳ制御域２１３に保存されている値（現時点までの最小待ちユニット数）ＮＦとを比較する（ステップＳ６０５）。
【０２４０】
今回取得した待ちユニット数が値ＮＦよりも小さい場合（ステップＳ６０５のＹＥＳルート）、第１取得部５１１は、値ＮＦを、今回取得した待ちユニット数に置き換える（ステップＳ６０６）。
【０２４１】
ステップＳ６０６やＳ６０８の処理後、または、今回取得した待ちユニット数が値ＮＦ以上である場合（ステップＳ６０５のＮＯルート）、マクロ融通チェック部５１０は、全てのＬＵについてマクロ融通１秒チェック処理を終了したか否か判定する（ステップＳ６０７）。全てのＬＵについてチェック処理を終了していない場合（ステップＳ６０７のＮＯルート）、マクロ融通チェック部５１０は、ステップＳ６０２の処理に戻る。全てのＬＵについてチェック処理を終了した場合（ステップＳ６０７のＹＥＳルート）、マクロ融通チェック部５１０は、マクロ融通１秒チェック処理を完了する。
【０２４２】
以上のようなマクロ融通１秒チェック処理を、１マクロサイクル（３０秒）の間、１秒毎に実行することで、最終的にＱｏＳ制御域２１３に保存されている値ＮＥが、１マクロサイクル中の最小余りユニット数ＮＥとなる。また、同様に、最終的にＱｏＳ制御域２１３に保存されている値ＮＦが、１マクロサイクル中の最小待ちユニット数ＮＦとなる。なお、ステップＳ６０３およびＳ６０４の処理と、ステップＳ６０５およびＳ６０６の処理とは、逆の順序で実行されてもよい。
【０２４３】
〔２−７〕マクロ融通処理
次に、図１４および図１５に示すフローチャート（ステップＳ７０１〜Ｓ７１３）に従って、本実施形態のマクロ融通処理部５２０によって実行されるマクロ融通処理（図６のステップＳ１０９）の処理手順について説明する。マクロ融通処理は、図６に示すＮミリ秒タイマスケジュール処理がＮミリ秒毎に実行される中で、１マクロサイクル（例えば３０秒）毎に、スケジュール部５０６によるＱｏＳ Ｉ／Ｏ起動スケジュール処理後に起動される。マクロ融通処理では、ＱｏＳ Ｉ／Ｏ起動スケジュール後に、１マクロサイクル毎のタイミングで、連続的に処理性能に余裕のあるＬＵから連続的に処理性能が不足しているＬＵにマクロ性能融通が行なわれる。
【０２４４】
まず、第１判定部５２１は、各ＬＵについて、当該ＬＵの最小待ちユニット数ＮＦが０以外の値で、且つ、当該ＬＵの融通フラグＦINMAXがオフであるかを判定する（ステップＳ７０１）。ここで、当該ＬＵの最小待ちユニット数ＮＦが０以外の値である場合、当該ＬＵは、１マクロサイクルにおける一秒刻みのタイミングでは、常に待ち状態である。したがって、当該ＬＵは、１マクロサイクルに亘って処理性能不足の状態であるとみなせ、本実施形態では、上記「融通を受ける条件」を満たしているものと判断される。ただし、当該ＬＵの融通フラグＦINMAXがオンである場合、当該ＬＵにおいては、他のＬＵから受けているマクロ性能融通の融通量が上限に到達しており、マクロ性能融通を行なうことができない。そこで、本実施形態では、各ＬＵについて、当該ＬＵの最小待ちユニット数ＮＦが０以外の値で、且つ、当該ＬＵの融通フラグＦINMAXがオフであるかが判定されている。
【０２４５】
当該ＬＵの最小待ちユニット数ＮＦが０以外の値で、且つ、当該ＬＵの融通フラグＦINMAXがオフである場合（ステップＳ７０１のＹＥＳルート）、第１判定部５２１は、今回の対象ＬＵの最小待ちユニット数ＮＦを、待ちユニット数の大きい順に並べた待ちユニット配列の適切な箇所に挿入する（ステップＳ７０２）。マクロ性能融通用の待ちユニット配列は、例えばＱｏＳ制御域２１３内に作成され、ＬＵを特定するＬＵＮと当該ＬＵにおける最小待ちユニット数ＮＦとを対応付けて保存している。なお、本実施形態において、マクロ性能融通での「１サイクルでの融通ＬＵ数」は、例えば、４ＬＵとしているので、待ちユニット配列における要素数は４で十分である。
【０２４６】
ステップＳ７０２の処理後、もしくは、当該ＬＵの最小待ちユニット数ＮＦが０又は当該ＬＵの融通フラグＦINMAXがオンである場合（ステップＳ７０１のＮＯルート）、第１判定部５２１は、全てのＬＵについて最小待ちユニット数ＮＦの判定を行なったか否かを判定する（ステップＳ７０３）。全てのＬＵについて待ちユニット数の判定を行なっていない場合（ステップＳ７０３のＮＯルート）、第１判定部５２１は、ステップＳ７０１の処理に戻る。全てのＬＵについて待ちユニット数の判定を行なった場合（ステップＳ７０３のＹＥＳルート）、マクロ融通処理部５２０は、マクロ性能融通用の待ちユニット配列に待ちユニットが存在するか否かを判定する（ステップＳ７０４）。マクロ性能融通用の待ちユニット配列に待ちユニットが存在しない場合（ステップＳ７０４のＮＯルート）、マクロ融通処理部５２０は、マクロ融通処理を完了する。
【０２４７】
マクロ性能融通用待ちユニット配列に待ちユニットが存在する場合（ステップＳ７０４のＹＥＳルート）、第２判定部５２２は、各ＬＵについて、当該ＬＵの最小余りユニット数ＮＥが０以外の値で、且つ、当該ＬＵの融通フラグＦOUTMAXがオフであるかを判定する（ステップＳ７０５）。ここで、当該ＬＵの最小余りユニット数ＮＥが０以外の値である場合、当該ＬＵは、１マクロサイクルにおける一秒刻みのタイミングでは、常に余り状態である。したがって、当該ＬＵは、１マクロサイクルに亘って処理性能に余裕のある状態であるとみなせ、本実施形態では、上記「融通する条件」を満たしているものと判断される。ただし、当該ＬＵの融通フラグＦOUTMAXがオンである場合、当該ＬＵにおいては、他のＬＵに対するマクロ性能融通の融通量が下限に到達しており、マクロ性能融通を行なうことができない。そこで、本実施形態では、各ＬＵについて、当該ＬＵの最小余りユニット数ＮＥが０以外の値で、且つ、当該ＬＵの融通フラグＦOUTMAXがオフであるかが判定されている。
【０２４８】
当該ＬＵの最小余りユニット数ＮＥが０以外の値で、且つ、当該ＬＵの融通フラグＦOUTMAXがオフである場合（ステップＳ７０５のＹＥＳルート）、第２判定部５２２は、今回の対象ＬＵの最小余りユニット数ＮＥを、余りユニット数の大きい順に並べた余りユニット配列の適切な箇所に挿入する（ステップＳ７０６）。マクロ性能融通用の余りユニット配列は、例えばＱｏＳ制御域２１３内に作成され、ＬＵを特定するＬＵＮと当該ＬＵにおける最小余りユニット数ＮＥとを対応付けて保存している。なお、本実施形態において、マクロ性能融通での「１サイクルでの融通ＬＵ数」は、例えば、４ＬＵとしているので、余りユニット配列における要素数は４で十分である。
【０２４９】
ステップＳ７０６の処理後、もしくは、当該ＬＵの最小余りユニット数ＮＥが０又は当該ＬＵの融通フラグＦOUTMAXがオンである場合（ステップＳ７０５のＮＯルート）、第２判定部５２２は、全てのＬＵについて最小余りユニット数ＮＥの判定を行なったか否かを判定する（ステップＳ７０７）。全てのＬＵについて待ちユニット数の判定を行なっていない場合（ステップＳ７０７のＮＯルート）、第２判定部５２２は、ステップＳ７０５の処理に戻る。
【０２５０】
全てのＬＵについて待ちユニット数の判定を行なった場合（ステップＳ７０７のＹＥＳルート）、マクロ融通処理部５２０は、待ちユニット配列の要素[i]が０であるか、あるいは、余りユニット配列の要素[i]が０であるかを判定する（ステップＳ７０８）。待ちユニット配列の要素[i]が０、または、余りユニット配列の要素[i]が０である場合（ステップＳ７０８のＹＥＳルート）、マクロ融通処理部５２０は、マクロ融通処理を完了する。
【０２５１】
待ちユニット配列の要素[i]も余りユニット配列の要素[i]も０でない場合（ステップＳ７０８のＮＯルート）、マクロ融通処理部５２０（変更部５２３）は、以下の処理（ステップＳ７０９〜Ｓ７１３）を実行する。ここでは、待ちユニット配列のｉ番目の要素[i]に係る融通先ＬＵと、余りユニット配列のｉ番目の要素[i]に係る融通元ＬＵとを、マクロ性能融通を行なう一つの組合せとする。本実施形態において、各配列の要素数は４としているので、ｉは、例えば０，１，２，３とする。また、ステップＳ７０８〜Ｓ７１３の処理は、各配列の待ちユニット数または余りユニット数の大きい順に実行される。
【０２５２】
なお、ステップＳ７０９〜Ｓ７１３の処理のうち、ステップＳ７０９の処理は、融通先ＬＵのＱｏＳ制御域２１３を対象としている。また、ステップＳ７０９〜Ｓ７１３の処理のうち、ステップＳ７１０〜Ｓ７１２の処理は、融通元ＬＵのＱｏＳ制御域２１３を対象としている。
【０２５３】
変更部５２３は、待ちユニット配列のｉ番目の融通先ＬＵに係る、ＱｏＳ制御域２１３における性能融通情報を、以下のように設定・変更する（ステップＳ７０９）。つまり、変更部５２３は、ｉ番目の融通先ＬＵの融通フラグＦINをオンに設定する。また、変更部５２３は、ｉ番目の融通先ＬＵの融通ユニット数ＮＢを１インクリメントする。これにより、融通先ＬＵについて算出される性能制限値に、１ユニット分に対応する値（例えば５ＭＢ／ｓ，６０ＩＯＰＳ）が加算される（図７のステップＳ１２３参照）。さらに、変更部５２３は、融通ユニット数ＮＢを１インクリメントすることで他のＬＵからの融通量が上限に到達した場合、融通フラグＦINMAXをオンに設定する。
【０２５４】
そして、変更部５２３は、余りユニット配列のｉ番目の融通元ＬＵの融通フラグＦINがオンであるか否かを判定する（ステップＳ７１０）。融通フラグＦINがオンである場合（ステップＳ７１０のＹＥＳルート）、ｉ番目の融通元ＬＵは、処理性能に余裕があるにもかかわらず他のＬＵから性能融通を受けているものと考えられる。そこで、変更部５２３は、余りユニット配列のｉ番目の融通元ＬＵに係る、ＱｏＳ制御域２１３における性能融通情報を、以下のように設定・変更する（ステップＳ７１１）。
【０２５５】
つまり、変更部５２３は、ｉ番目の融通元ＬＵの融通ユニット数ＮＢを１デクリメントする。これにより、融通元ＬＵについて算出される性能制限値から、１ユニット分に対応する値（例えば５ＭＢ／ｓ，６０ＩＯＰＳ）が減算されることになる（図７のステップＳ１２３参照）。また、ｉ番目の融通元ＬＵの融通フラグＦINMAXがオンである場合、即ち他のＬＵからの融通量が上限に到達していた場合、変更部５２３は、ｉ番目の融通元ＬＵの融通フラグＦINMAXをオフに設定する。さらに、融通ユニット数ＮＢを１デクリメントすることで融通ユニット数ＮＢが０になった場合、ｉ番目の融通元ＬＵが他のＬＵから受ける融通量は０となるので、変更部５２３は、ｉ番目の融通元ＬＵの融通フラグＦINをオフに設定する。
【０２５６】
ｉ番目の融通元ＬＵの融通フラグＦINがオフである場合（ステップＳ７１０のＮＯルート）、変更部５２３は、ｉ番目の融通元ＬＵに係る、ＱｏＳ制御域２１３における性能融通情報を、以下のように設定・変更する（ステップＳ７１２）。つまり、変更部５２３は、ｉ番目の融通元ＬＵの融通フラグＦOUTをオンに設定する。また、変更部５２３は、ｉ番目の融通元ＬＵの融通ユニット数ＮＢを１インクリメントする。これにより、融通元ＬＵについて算出される性能制限値から、１ユニット分に対応する値（例えば５ＭＢ／ｓ，６０ＩＯＰＳ）が減算される（図７のステップＳ１２５参照）。さらに、変更部５２３は、融通ユニット数ＮＢを１インクリメントすることで、他のＬＵへの融通量が上限に到達した場合、融通フラグＦOUTMAXをオンに設定する。
【０２５７】
ステップＳ７１１またはＳ７１２の処理後、マクロ融通処理部５２０は、マクロ性能融通用の待ちユニット配列に、次の要素[i]があるか否かを判定する（ステップＳ７１３）。次の要素[i]がある場合（ステップＳ７１３のＹＥＳルート）、マクロ融通処理部５２０は、ステップＳ７０８の処理に戻る。次の要素[i]がない場合（ステップＳ７１３のＮＯルート）、マクロ融通処理部５２０は、マクロ融通処理を完了する。
【０２５８】
〔２−８〕マクロ融通復旧処理
次に、図１６および図１７に示すフローチャート（ステップＳ８０１〜Ｓ８１８）に従って、本実施形態の復旧処理部５３２によって実行されるマクロ融通復旧処理（図６のステップＳ１０７）の処理手順について説明する。マクロ融通復旧処理は、図６に示すＮミリ秒タイマスケジュール処理がＮミリ秒毎に実行される中で、他のＬＵへ性能を融通しているＬＵで性能不足を検出した場合（図６のステップＳ１０６のＹＥＳルート）、当該ＬＵの性能を元の設定性能に戻すために実行される。つまり、マクロ融通復旧処理では、融通復旧ＬＵが他のＬＵに融通した処理量が、融通先ＬＵから融通復旧ＬＵに復帰される。その際、復旧処理部５３２は、融通先ＬＵに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を融通先ＬＵから融通復旧ＬＵに復帰させる。
【０２５９】
復旧処理部５３２は、まず、融通復旧ＬＵが存在するか否かを確認する（ステップＳ８０１）。融通復旧ＬＵが存在しない場合（ステップＳ８０１のＮＯルート）、復旧処理部５３２は、マクロ融通復旧処理を完了する。
【０２６０】
融通復旧ＬＵが存在する場合（ステップＳ８０１のＹＥＳルート）、復旧処理部５３２は、各ＬＵについて、以下の処理（ステップＳ８０２〜Ｓ８０５）を実行する。復旧処理部５３２は、対象ＬＵの融通フラグＦINがオンであるか否か、つまり対象ＬＵが融通先ＬＵであるか否かを判定する（ステップＳ８０２）。
【０２６１】
対象ＬＵが融通先ＬＵである場合（ステップＳ８０２のＹＥＳルート）、復旧処理部５３２は、今回の対象ＬＵの融通ユニット数ＮＢを、融通ユニット数ＮＢの大きい順に並べた融通先ユニット配列の適切な箇所に挿入する（ステップＳ８０３）。併せて、復旧処理部５３２は、融通先ＬＵを特定するＬＵＮと、融通先ＬＵに係るホストを特定する番号とを対応付ける配列も作成する（ステップＳ８０４）。ＬＵ／ホスト番号配列を含む融通先ユニット配列は、例えばＱｏＳ制御域２１３内に作成され、融通先ＬＵを特定するＬＵＮと当該ＬＵにおける融通ユニット数ＮＢとを対応付けて保存している。なお、融通先ユニット配列（ＬＵＮ／ホスト番号配列）の一例については、図１８を参照しながら後述する。また、融通先ユニット配列における要素数は、例えば１５である。対象が「ポートとＬＵＮとの組合せ」である場合、復旧処理部５３２は、ステップＳ８０４において、融通先ＬＵを特定するＬＵＮと、融通先ＬＵに係るポートを特定する情報とを対応付ける配列も作成する。
【０２６２】
ステップＳ８０４の処理後、もしくは、対象ＬＵが融通先ＬＵでない場合（ステップＳ８０２のＮＯルート）、復旧処理部５３２は、全てのＬＵについて融通フラグＦＩNの判定を行なったか否かを判定する（ステップＳ８０５）。全てのＬＵについて融通フラグＦＩNの判定を行なっていない場合（ステップＳ８０５のＮＯルート）、復旧処理部５３２は、ステップＳ８０２の処理に戻る。全てのＬＵについて融通フラグＦＩNの判定を行なった
場合（ステップＳ８０５のＹＥＳルート）、復旧処理部５３２は、ステップＳ８０３，Ｓ８０４で作成された融通先ユニット配列を参照しながら、以下の処理（ステップＳ８０６〜Ｓ８１８）を実行する。これにより、復旧処理部５３２は、融通先ＬＵに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を融通先ＬＵから融通復旧ＬＵに復帰させる。
【０２６３】
復旧処理部５３２による以下の処理を実行するに際し、融通復旧ＬＵに復旧させるべきユニット数（必要ユニット数）をＡ、復旧残りユニット数をＲとする。復旧残りユニット数Ｒの初期値は、必要ユニット数Ａである。また、融通先ユニット配列数（融通先ユニット配列の要素数）をＭ、配列内ユニット数をＸ0，Ｘ1，Ｘ2，…，ＸM-1（ただしＸ0≧Ｘ1≧Ｘ2≧…≧ＸM-1）、配列内ＬＵをＬ0，Ｌ1，Ｌ2，…，ＬM-1とする（ステップＳ８０６）。
【０２６４】
そして、復旧処理部５３２は、ｉ＝０としてから（ステップＳ８０７）、復旧残りユニット数Ｒが（Ｘi−Ｘi+1）×（ｉ＋１）以下であるか否かを判定する（ステップＳ８０８）。復旧残りユニット数Ｒが（Ｘi−Ｘi+1）×（ｉ＋１）よりも大きい場合（ステップＳ８０８のＮＯルート）、復旧処理部５３２は、ＱｏＳ制御域２１３において、配列内ＬＵのＬ0からＬiまでの融通ユニット数ＮＢから、（Ｘi−Ｘi+1）を減算する。このとき、Ｌ0〜Ｌiのそれぞれの融通フラグＦINMAXがオンであれば、復旧処理部５３２は、融通フラグＦINMAXをオフに設定する。そして、復旧処理部５３２は、復旧残りユニット数ＲをＲ−（Ｘi−Ｘi+1）×（ｉ＋１）に置き換える（ステップＳ８０９）。この後、復旧処理部５３２は、ｉをｉ＋１にインクリメントしてから（ステップＳ８１０）、ｉがＭ−１と一致するか否かを判定する（ステップＳ８１１）。ｉがＭ−１と一致しない場合（ステップＳ８１１のＮＯルート）、復旧処理部５３２は、ステップＳ８０８の処理に戻る。
【０２６５】
一方、復旧残りユニット数Ｒが（Ｘi−Ｘi+1）×（ｉ＋１）以下である場合（ステップＳ８０８のＹＥＳルート）、復旧処理部５３２は、以下の処理（ステップＳ８１２）を実行する。つまり、復旧処理部５３２は、復旧残りユニット数Ｒを（ｉ＋１）個以内の整数値に分割する。そして、復旧処理部５３２は、ＱｏＳ制御域２１３において、配列内ＬＵのＬ0からＬiまでの融通ユニット数ＮＢから、分割して得られた整数値を減算する。このとき、Ｌ0〜Ｌiのそれぞれの融通フラグＦINMAXがオンであれば、復旧処理部５３２は、融通フラグＦINMAXをオフに設定する。そして、復旧処理部５３２は、融通ユニット数ＮＢの減算処理に伴い融通ユニット数ＮＢが０になった場合、融通フラグＦINをオフに設定する。そして、復旧処理部５３２は、復旧残りユニット数Ｒを０に置き換える。
【０２６６】
ステップＳ８１２の処理後、もしくは、ｉがＭ−１と一致した場合（ステップＳ８１１のＹＥＳルート）、復旧処理部５３２は、復旧残りユニット数Ｒが０と一致しているか否かを判定する（ステップＳ８１３）。復旧残りユニット数Ｒが０でない場合（ステップＳ８１３のＮＯルート）、復旧処理部５３２は、融通フラグＦINがオンの全ＬＵの中から、ＬＵＮの最も若いＬＵを選択する（ステップＳ８１４）。この後、復旧処理部５３２は、復旧残りユニット数Ｒが、選択したＬＵの融通ユニット数ＮＢ以下であるか否かを判定する（ステップＳ８１５）。
【０２６７】
復旧残りユニット数Ｒが融通ユニット数ＮＢよりも大きい場合（ステップＳ８１５のＮＯルート）、復旧処理部５３２は、復旧残りユニット数Ｒを、Ｒから融通ユニット数ＮＢを減算した値に置き換える。また、復旧処理部５３２は、ＱｏＳ制御域２１３において、選択したＬＵの融通ユニット数ＮＢを０に設定する。さらに、選択したＬＵの融通フラグＦINMAXがオンであれば、復旧処理部５３２は、融通フラグＦINMAXをオフに設定する。そして、復旧処理部５３２は、融通フラグＦINをオフに設定する（ステップＳ８１６）。
【０２６８】
ステップＳ８１６の処理後、復旧処理部５３２は、ステップＳ８１４に戻り、融通フラグＦINがオンの全ＬＵの中から、ＬＵＮが次に若いＬＵを選択し、同様の処理（ステップＳ８１５，Ｓ８１６）を実行する。
【０２６９】
復旧残りユニット数Ｒが融通ユニット数ＮＢ以下である場合（ステップＳ８１５のＹＥＳルート）、復旧処理部５３２は、ＱｏＳ制御域２１３において、選択したＬＵの融通ユニット数ＮＢから、復旧残りユニット数Ｒを減算する。また、選択したＬＵの融通フラグＦINMAXがオンであれば、復旧処理部５３２は、融通フラグＦINMAXをオフに設定する。さらに、復旧処理部５３２は、融通ユニット数ＮＢの減算処理に伴い融通ユニット数ＮＢが０になった場合、融通フラグＦINをオフに設定する。そして、復旧処理部５３２は、復旧残りユニット数Ｒを０に置き換える（ステップＳ８１７）。
【０２７０】
ステップＳ８１７の処理後、または、復旧残りユニット数Ｒが０である場合（ステップＳ８１３のＹＥＳルート）、復旧処理部５３２は、ＱｏＳ制御域２１３において、融通復旧ＬＵの融通フラグＦOUTおよびＦOUTMAXをいずれもオフに設定する。また、復旧処理部５３２は、ＱｏＳ制御域２１３において、融通復旧ＬＵの融通ユニット数ＮＢを０に設定する（ステップＳ８１８）。この後、復旧処理部５３２は、マクロ融通復旧処理を完了する。
【０２７１】
次に、図１７のステップＳ８０７〜Ｓ８１３の処理について、図１８〜図２０に示す例を参照しながら、具体的に説明する。なお、図１８は、本実施形態に係るマクロ融通復旧処理（図１６のステップＳ８０３，Ｓ８０４）で作成される融通先ユニット配列（ＬＵＮ／ホスト番号配列）の一例を示す図である。また、図１９および図２０は、本実施形態に係るマクロ融通復旧処理（特に図１７のステップＳ８０７〜Ｓ８１３）を具体的に説明する図である。
【０２７２】
図１８に示す融通先ユニット配列では、「ホストとＬＵＮとの組合せ」を特定するホスト番号およびＬＵＮと、当該ＬＵＮに対応する融通先ＬＵの融通ユニット数ＮＢとが、対応付けられ、融通ユニット数ＮＢの大きい順にソートされている。図１８および図１９に示す例において、配列内ＬＵのＬ0は、ホスト＃１およびＬＵＮ＃１に対応し、Ｌ0の融通ユニット数ＮＢ（＝Ｘ0）は、５０である。また、配列内ＬＵのＬ1は、ホスト＃２およびＬＵＮ＃３に対応し、Ｌ1の融通ユニット数ＮＢ（＝Ｘ1）は、２５であり、配列内ＬＵのＬ2は、ホスト＃１およびＬＵＮ＃４に対応し、Ｌ2の融通ユニット数ＮＢ（＝Ｘ2）は、１５である。さらに、配列内ＬＵのＬ3は、ホスト＃２およびＬＵＮ＃２に対応し、Ｌ3の融通ユニット数ＮＢ（＝Ｘ3）は、１０であり、配列内ＬＵのＬ4は、ホスト＃２およびＬＵＮ＃５に対応し、Ｌ4の融通ユニット数ＮＢ（＝Ｘ4）は、８である。なお、融通先ユニット配列数（融通先ユニット配列の要素数）Ｍは１０とする。
【０２７３】
以下では、図１８および図１９に示す融通先ユニット配列に基づき、復旧処理部５３２が、必要ユニット数Ａ＝６４のユニットを融通復旧ＬＵに復旧させる場合の処理手順について具体的に説明する。このとき、復旧残りユニット数Ｒの初期値は、必要ユニット数Ａの６４となる。復旧処理部５３２は、ｉ＝０を設定してから（ステップＳ８０７）、まず、ｉ＝０のときの値（Ｘi−Ｘi+1）×（ｉ＋１）＝（Ｘ0−Ｘ1）×（０＋１）＝２５×１＝２５を算出する。Ｒの値は６４であるので、Ｒ＞２５であり（ステップＳ８０８のＮＯルート）、Ｌ0から融通復旧ユニットに２５ユニット分の性能を復旧させるべく、復旧処理部５３２は、Ｌ0の融通ユニット数ＮＢから２５を減算する。そして、復旧処理部５３２は、復旧残りユニット数Ｒを、６４から、６４−２５＝３９に置き換える（ステップＳ８０９；図２０の最上段の式参照）。
【０２７４】
ついで、復旧処理部５３２は、ｉを１インクリメントしてｉ＝１にする（ステップＳ８１０）。このとき、ｉ＝１≠Ｍ−１＝９であるため（ステップＳ８１１のＮＯルート）、復旧処理部５３２は、ステップＳ８０８に戻り、ｉ＝１のときの値（Ｘi−Ｘi+1）×（ｉ＋１）＝（Ｘ1−Ｘ2）×（１＋１）＝１０×２＝２０を算出する。Ｒの値は３９であるので、Ｒ＞２０であり（ステップＳ８０８のＮＯルート）、Ｌ0およびＬ1から融通復旧ユニットに２０ユニット分の性能を復旧させるべく、復旧処理部５３２は、Ｌ0およびＬ1の融通ユニット数ＮＢからそれぞれ１０を減算する。そして、復旧処理部５３２は、復旧残りユニット数Ｒを、３９から、３９−２０＝１９に置き換える（ステップＳ８０９；図２０の上から２段目の式参照）。
【０２７５】
ついで、復旧処理部５３２は、ｉを１インクリメントしてｉ＝２にする（ステップＳ８１０）。このとき、ｉ＝２≠Ｍ−１＝９であるため（ステップＳ８１１のＮＯルート）、復旧処理部５３２は、ステップＳ８０８に戻り、ｉ＝２のときの値（Ｘi−Ｘi+1）×（ｉ＋１）＝（Ｘ2−Ｘ3）×（２＋１）＝５×３＝１５を算出する。Ｒの値は１９であるので、Ｒ＞１５であり（ステップＳ８０８のＮＯルート）、Ｌ0，Ｌ1，Ｌ2から融通復旧ユニットに１５ユニット分の性能を復旧させるべく、復旧処理部５３２は、Ｌ0，Ｌ1，Ｌ2の融通ユニット数ＮＢからそれぞれ５を減算する。そして、復旧処理部５３２は、復旧残りユニット数Ｒを、１９から、１９−１５＝４に置き換える（ステップＳ８０９；図２０の上から３段目の式参照）。
【０２７６】
ついで、復旧処理部５３２は、ｉを１インクリメントしてｉ＝３にする（ステップＳ８１０）。このとき、ｉ＝３≠Ｍ−１＝９であるため（ステップＳ８１１のＮＯルート）、復旧処理部５３２は、ステップＳ８０８に戻り、ｉ＝３のときの値（Ｘi−Ｘi+1）×（ｉ＋１）＝（Ｘ3−Ｘ4）×（３＋１）＝２×４＝８を算出する。Ｒの値は４であるので、Ｒ≦８であり（ステップＳ８０８のＹＥＳルート；図２０の上から４段目の式参照）、復旧処理部５３２は、復旧残りユニット数Ｒ＝４を（ｉ＋１）＝４個以内の整数値に分割する。ここでは、Ｒ＝４は、４つのＬＵであるＬ0〜Ｌ3に分割され、復旧処理部５３２は、４つのＬ0〜Ｌ3の融通ユニット数ＮＢから、それぞれ１を減算し、復旧残りユニット数Ｒを４から０に置き換える（ステップＳ８１２）。このときＲ＝０であるため（ステップＳ８１３のＹＥＳルート）、復旧処理部５３２は、ステップＳ８１８の処理に移行する。
【０２７７】
以上の処理によって、融通復旧ＬＵが他のＬＵに融通した性能（処理量）が、融通先ＬＵから融通復旧ＬＵに復帰される。その際、融通先ＬＵに対し融通された性能（処理量）の残量が均等もしくはほぼ均等になるように、当該性能を融通先ＬＵから融通復旧ＬＵに復帰させることができる。
【０２７８】
〔３〕本実施形態の効果
本実施形態のストレージ装置１００によれば、使用されるホストとＬＵとの組合せの性能レベル（優先度）に従って、ストレージ装置１００の性能を配分し、ストレージのＱｏＳ機能を容易に実現することができる。
【０２７９】
また、本実施形態のストレージ装置１００によれば、ホスト１０からの入出力要求（Ｉ／Ｏ要求，コマンド）の状況やホスト１０の接続環境の変化に応じて、ストレージ性能を最適に制御することができる。特に、本実施形態のマクロ性能融通では、上記優先度についての性能値の最小間隔５ＭＢ／ｓ，６０ＩＯＰＳを「１ユニット」とする単位で、性能融通が行なわれる。したがって、優先度を変更して性能限界値を変更する場合に比べ、性能限界値の変更間隔（融通量）を大幅に小さくすることができ、ホスト１０から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。その際、複数ボリューム（ＬＵ）間で、処理性能に余裕のあるＬＵから、性能不足のＬＵに対し、性能が融通されるため、性能融通を確実に行なうことができる。
【０２８０】
さらに、本実施形態のストレージ装置１００では、ミクロ性能融通およびマクロ性能融通の特徴を踏まえ、ミクロ性能融通およびマクロ性能融通のいずれか一方が使用される。ミクロ性能融通およびマクロ性能融通の一方を使用する場合、ストレージ装置１００のストレージＱｏＳを使用する動作環境に応じて、適切な性能融通を選択することができる。また、両方を使用する場合、一時的なスパイク性能などを吸収する際にはミクロ性能融通を使用する一方、継続的な性能変動を吸収する際にはマクロ性能融通を使用するように制御を行なうことで、両方の特徴を有効に利用することができる。
【０２８１】
また、本実施形態のミクロ性能融通では、例えば１秒以下ミクロサイクルで、処理性能が不足するＬＵに、処理性能に余裕のあるＬＵから処理性能が融通される。このときの融通量は、記憶されず、次のミクロサイクルでは性能限界値の調整に反映されない。従って、ストレージ装置１００は、次のミクロサイクルでは、元の処理性能で動作する。このように、ミクロ性能融通は一時的な融通であるため、ミクロ性能融通を用いることで一度に大量の性能融通が可能である。
【０２８２】
特に、本実施形態のミクロ性能融通では、融通先ＬＵ（待ちＬＵ）が存在する場合、ビジー率Ｌに基づき当該待ちＬＵを含むＲＡＩＤグループに性能余裕が有るか否かが判定される。性能余裕が無い場合には、融通元ＬＵ（余りＬＵ）が存在したとしてもミクロ性能融通を実行しない。これにより、余りＬＵから待ちＬＵへの性能融通によってＲＡＩＤグループ全体の性能余裕が無くなるのを回避することができる。
【０２８３】
また、本実施形態のミクロ性能融通では、処理性能に余裕のあるＬＵが無く融通先ＬＵへの処理性能の融通を行なえない際、融通先ＬＵの属するＲＡＩＤグループに性能余裕が有るか否かが確認される。そして、性能余裕が有る場合には、図１１に示すように、ＲＡＩＤグループにおけるＬＵ用帯域（ＱｏＳ設定帯域）以外の未割当帯域からミクロ性能融通を行なうことが可能になる。したがって、性能不足を招くことなくＲＡＩＤグループにおける未割当帯域を有効に利用して、性能不足のＬＵを解消することができる。
【０２８４】
さらに、本実施形態のミクロ性能融通では、融通先ＬＵに対し性能融通を行なう際、当該性能融通の量がビジー率Ｌをどれだけ増加させるか、その増加分をビジー率算出部５４５によって算出しながら性能融通が行なわれる。また、融通先ＬＵが複数存在する場合、例えば待ちユニット数の大きい順に性能融通が行なわれる。その際、当該性能融通後のビジー率増加分をビジー率Ｌに反映することで、ビジー率Ｌが所定閾値を大きく超えるような性能融通の実行が確実に抑止される。
【０２８５】
さらに、本実施形態のマクロ性能融通では、例えば２秒以上の、より大きなマクロサイクルで処理性能が監視される。そして、所定時間（例えば１マクロサイクル）に亘り連続して性能不足となっているＬＵに対し、前記所定時間に亘り連続して処理性能に余裕のあるＬＵから、処理性能が融通される。このように、マクロ性能融通は、性能融通量を学習により調整するため、ホスト１０から要求される処理性能の継続的な変動に有効に対応することができる。
【０２８６】
またさらに、本実施形態のストレージ装置１００では、融通元ＬＵで処理性能不足が発生した場合、つまり融通復旧ＬＵが存在する場合、融通復旧ＬＵが他のＬＵに融通した性能（処理量）が、融通先ＬＵから融通復旧ＬＵに復帰される。その際、融通先ＬＵに対し融通された性能（処理量）の残量が均等もしくはほぼ均等になるように、当該性能を融通先ＬＵから融通復旧ＬＵに復帰させることができる。つまり、融通復旧ＬＵの性能復旧後の複数の融通先ＬＵにおいて融通量を均等もしくはほぼ均等に残すことができ、複数の融通先ＬＵにおいて融通量の偏りがなくなる。したがって、当該複数の融通先ＬＵを含むストレージ装置１００において、以降の処理を効率よく行なうことができる。
【０２８７】
〔４〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０２８８】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、ＳＣＳＩターゲット制御部３０３において、コマンド受信部５０４とスケジュール部５０６とは統合されてもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０２８９】
また、本実施形態において説明した各種処理は、予め用意されたプログラムをストレージ装置が有するコンピュータで実行することによって実現することができる。そこで、以下では、図２１を参照しながら、本実施形態と同様の機能を有するストレージ装置制御プログラムを実行するコンピュータの一例を説明する。図２１は、本実施形態のストレージ装置制御プログラムを実行するコンピュータを示すブロック図である。
【０２９０】
図２１に示すように、コンピュータ１０００は、ホストとのインターフェースであるＦＣ−ＣＡ１０１０と、ホストとのインターフェースであるｉＳＣＳＩ−ＣＡ１０２０と、ディスク装置とのインターフェースであるＳＡＳ１０３０とを有する。また、コンピュータ１０００は、各種情報を一時記憶するＲＡＭ１０４０と、書き換え可能であり、電源を切ってもデータが消えない不揮発性のフラッシュメモリ１０５０とを有する。さらに、コンピュータ１０００は、読み出し専用メモリであるＲＯＭ（Read Only Memory）１０６０と、各種演算処理を実行するＣＰＵ１０７０とを有する。また、コンピュータ１０００が有する各部は、バス１０８０を介して接続される。
【０２９１】
そして、フラッシュメモリ１０５０には、図３および図５に示したＱｏＳ管理テーブル５０１に対応するＱｏＳ管理テーブル１０５１や、図３に示した各ＬＵの性能融通情報などが記憶される。また、ＲＯＭ１０６０には、図３に示した算出部５０５，スケジュール部５０６，実行部５０７，マクロ融通チェック部５１０，マクロ融通処理部５２０，マクロ融通復旧処理部５３０，ミクロ融通処理部５４０と同様の機能を有するストレージ装置制御プログラム１０６１が記憶される。
【０２９２】
そして、ＣＰＵ１０７０は、フラッシュメモリ１０５０から読み出したＱｏＳ管理テーブル１０５１や各ＬＵの性能融通情報を参照し、ＲＯＭ１０６０から読み出したストレージ装置制御プログラム１０６１をストレージ装置制御プロセス１０７１として実行する。
【０２９３】
なお、上記ストレージ装置制御プログラム１０６１は、必ずしもＲＯＭ１０６０に格納されている必要はない。例えば、当該プログラム１０６１は、フレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷなど），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷなど），ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供されてもよい。この場合、コンピュータ１０００はその記録媒体からプログラム１０６１を読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、公衆回線，インターネット，ＬＡＮ（Local Area Network），ＷＡＮ（Wide Area Network）等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）等にこのプログラム１０６１を記憶させておき、コンピュータ１０００がこれらからプログラム１０６１を読み出して実行するようにしてもよい。
【０２９４】
〔５〕付記
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２９５】
（付記１）
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定する待ち入出力要求判定部と、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定する性能余裕判定部と、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう融通処理部と、を有する、ストレージ装置。
【０２９６】
（付記２）
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通処理部は、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、付記１に記載のストレージ装置。
【０２９７】
（付記３）
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通処理部は、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、付記１または付記２に記載のストレージ装置。
【０２９８】
（付記４）
前記ストレージ装置において前記複数の記憶装置が属するＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループのビジー率（以下ＲＡＩＤグループビジー率という）を算出するビジー率算出部をさらに有し、
前記性能余裕判定部は、算出された前記ＲＡＩＤグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、付記１〜付記３のいずれか一項に記載のストレージ装置。
【０２９９】
（付記５）
前記ビジー率算出部は、前記ＲＡＩＤグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記ＲＡＩＤグループビジー率として算出する、付記４に記載のストレージ装置。
【０３００】
（付記６）
前記複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、前記ビジー率算出部（５４５）は、各ディスクドライブのビジー率に対し前記種別に応じた係数を乗算して前記ＲＡＩＤグループビジー率を算出する、付記５に記載のストレージ装置。
【０３０１】
（付記７）
複数の前記ＲＡＩＤグループが自動階層化プールを構成する場合、前記ビジー率算出部は、複数の前記ＲＡＩＤグループについて算出された複数の前記ＲＡＩＤグループビジー率のそれぞれに、各ＲＡＩＤグループに含まれるディスクドライブの種別に応じた重み付けを行なって、前記複数のＲＡＩＤグループについてのＲＡＩＤグループビジー率を算出する、付記５に記載のストレージ装置。
【０３０２】
（付記８）
前記ビジー率算出部は、前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記ＲＡＩＤグループビジー率に加算した値を性能融通後のＲＡＩＤグループビジー率として用いる、付記４〜付記７のいずれか一項に記載のストレージ装置。
【０３０３】
（付記９）
ストレージ装置が、
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定し、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定し、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう、ストレージ装置の制御方法。
【０３０４】
（付記１０）
前記ストレージ装置が、さらに、
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、付記９に記載のストレージ装置の制御方法。
【０３０５】
（付記１１）
前記ストレージ装置が、さらに、
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、付記９または付記１０に記載のストレージ装置の制御方法。
【０３０６】
（付記１２）
前記ストレージ装置が、さらに、
前記ストレージ装置において前記複数の記憶装置が属するＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループのビジー率（以下ＲＡＩＤグループビジー率という）を算出し、
算出された前記ＲＡＩＤグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、付記９〜付記１１のいずれか一項に記載のストレージ装置の制御方法。
【０３０７】
（付記１３）
前記ストレージ装置が、さらに、
前記ＲＡＩＤグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記ＲＡＩＤグループビジー率として算出する、付記１２に記載のストレージ装置の制御方法。
【０３０８】
（付記１４）
前記ストレージ装置が、さらに、
前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記ＲＡＩＤグループビジー率に加算した値を性能融通後のＲＡＩＤグループビジー率として用いる、付記１２または付記１３に記載のストレージ装置の制御方法。
【０３０９】
（付記１５）
ストレージ装置に含まれるコンピュータに、
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定し、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定し、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう、
処理を実行させる、ストレージ装置制御プログラム。
【０３１０】
（付記１６）
前記コンピュータに、さらに、
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、
処理を実行させる、付記１５に記載のストレージ装置制御プログラム。
【０３１１】
（付記１７）
前記コンピュータに、さらに、
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、
処理を実行させる、付記１５または付記１６に記載のストレージ装置制御プログラム。
【０３１２】
（付記１８）
前記コンピュータに、さらに、
前記ストレージ装置において前記複数の記憶装置が属するＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループのビジー率（以下ＲＡＩＤグループビジー率という）を算出し、
算出された前記ＲＡＩＤグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、
処理を実行させる、付記１５〜付記１７のいずれか一項に記載のストレージ装置制御プログラム。
【０３１３】
（付記１９）
前記コンピュータに、さらに、
前記ＲＡＩＤグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記ＲＡＩＤグループビジー率として算出する、付記１８に記載のストレージ装置制御プログラム。
処理を実行させる、
【０３１４】
（付記２０）
前記コンピュータに、さらに、
前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記ＲＡＩＤグループビジー率に加算した値を性能融通後のＲＡＩＤグループビジー率として用いる、
処理を実行させる、付記１８または付記１９に記載のストレージ装置制御プログラム。
【符号の説明】
【０３１５】
１    ストレージシステム
１０ａ，１０ｂ    ホスト（情報処理装置）
１００    ストレージ装置
１０１ａ〜１０１ｄ    ＨＤＤ（一以上の物理記憶装置，ディスクドライブ）
２００ａ，２００ｂ    ＣＭ
２０１ａ，２０１ｂ，１０１０    ＦＣ−ＣＡ（ポート）
２０２ａ，２０２ｂ，１０２０    ｉＳＣＳＩ−ＣＡ（ポート）
２０３ａ，２０３ｂ，１０３０    ＳＡＳ
２１０ａ，２１０ｂ    メモリ
２１１ａ，２１１ｂ    キャッシュ域
２１２ａ，２１２ｂ    制御域
２１３    ＱｏＳ制御域
２１４    テーブル域
２２０ａ，２２０ｂ，１０７０    ＣＰＵ（コンピュータ）
３０３    ＳＣＳＩターゲット制御部
３０４    ＳＣＳＩコマンド制御部
５０１    ＱｏＳ管理テーブル
５０２    待ちキュー格納部
５０３    性能設定部
５０４    コマンド受信部
５０５    算出部
５０６    スケジュール部
５０７    実行部
５１０    マクロ融通チェック部
５１１    第１取得部
５１２    第２取得部
５２０    マクロ融通処理部
５２１    第１判定部
５２２    第２判定部
５２３    変更部
５３０    マクロ融通復旧処理部
５３１    第３判定部
５３２    復旧処理部
５４０    ミクロ融通処理部
５４１    第４判定部（待ち入出力要求判定部）
５４２    融通処理部
５４３    融通後処理部
５４４    第５判定部（性能余裕判定部）
５４５    ビジー率算出部
１０００    コンピュータ
１０４０    ＲＡＭ
１０５０    フラッシュメモリ
１０６０    ＲＯＭ
１０６１    ストレージ装置制御プログラム
１０７１    ストレージ装置制御プロセス
【図１】
0006451307.tif 000003
【図２】
0006451307.tif 000004
【図３】
0006451307.tif 000005
【図４】
0006451307.tif 000006
【図５】
0006451307.tif 000007
【図６】
0006451307.tif 000008
【図７】
0006451307.tif 000009
【図８】
0006451307.tif 000010
【図９】
0006451307.tif 000011
【図１０】
0006451307.tif 000012
【図１１】
0006451307.tif 000013
【図１２】
0006451307.tif 000014
【図１３】
0006451307.tif 000015
【図１４】
0006451307.tif 000016
【図１５】
0006451307.tif 000017
【図１６】
0006451307.tif 000018
【図１７】
0006451307.tif 000019
【図１８】
0006451307.tif 000020
【図１９】
0006451307.tif 000021
【図２０】
0006451307.tif 000022
【図２１】
0006451307.tif 000023
【図２２】
0006451307.tif 000024
【図２３】
0006451307.tif 000025
【図２４】
0006451307.tif 000026
【図２５】
0006451307.tif 000027
【図２６】
0006451307.tif 000028
【図２７】
0006451307.tif 000029
【図２８】
0006451307.tif 000030
【図２９】
0006451307.tif 000031
【図３０】
0006451307.tif 000032
【図３１】
0006451307.tif 000033