(57)【要約】【課題】単位時間当たりに起動するコマンドの数と起動される各コマンドの応答時間との両方をコマンドの優先順位に応じてストレージシステムが制御できるようにする。【解決手段】ストレージシステムが、コマンドの優先度毎に対応したキューと、起動順序制御部とを備える。ストレージシステムがホスト計算機から受信したコマンドは、そのコマンドから特定された優先度に対応したキューに蓄積される。起動順序制御部は、各キューについて、キューに対応する優先度を基に、キューに蓄積されている複数のコマンドのうちの起動対象とするコマンドである起動対象コマンドの数を決定する。そして、起動順序制御部は、各キューについての決定された起動対象コマンド数を基に、優先度が高いほど起動対象コマンドの論理応答時間の平均値が短くなるような、起動対象コマンドの起動順序を決定する。決定された起動順序に従って、起動対象コマンドが起動される。【選択図】図２
2010102458.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理記憶装置を有しており、ホスト計算機からＩ／Ｏコマンドを受信し、受信したＩ／Ｏコマンドに応答して、前記複数の物理記憶装置の少なくとも一つに対してＩ／Ｏを行うストレージシステムであって、
コマンドの各優先度に対応したキューと、
ホスト計算機からコマンドを受け付けるポートと、
受信したコマンドの優先度を特定し、特定された優先度に対応したキューに、前記受信したコマンドを蓄積するコマンド蓄積部と、
コマンドの起動順序を決定する起動順序制御部と、
決定された起動順序に従って起動対象のコマンドを起動するコマンド起動部と
を備え、
前記起動順序制御部が、
（１−１）各キューについて、キューに対応する優先度を基に、キューに蓄積されている複数のコマンドのうちの起動対象とするコマンドである起動対象コマンドの数を決定し、
（１−２）各キューについての決定された起動対象コマンド数を基に、優先度が高いほど起動対象コマンドの論理応答時間の平均値が短くなるような、起動対象コマンドの起動順序を決定する、
ストレージシステム。
【請求項２】
各キューについて、単位時間当たりに起動するコマンドの数に基づく値である割当比率が予め設定されており、
前記起動順序制御部が、
前記（１−２）において、下記（１−２−１）乃至（１−２−５）を実行する、
（１−２−１）各キューについて、（割当比率／割当比率の合計）×起動対象コマンド数を計算することにより、論理応答時間の和の比率を算出する；
（１−２−２）１から起動対象コマンドの総数Ｎまでの和を算出することにより、論理応答時間の和の合計Ｔを算出する；
（１−２−３）各キューについて、（論理応答時間の和の比率／論理応答時間の和の比率の合計）×Ｔを計算することにより、論理応答時間の和を算出し、もし、算出された値が整数でなければ、論理応答時間の和を、その値の直前又は直後の整数とする；
（１−２−４）各キューについて、前記論理応答時間の和の要素となり得るｎ個（そのキューについての起動対象コマンド数）の整数を特定する；
（１−２−５）各起動対象コマンドについて、起動対象コマンドの起動順番を、特定された整数が表す順番とし、もし、その順番が、他の起動対象コマンドについて既に決定された起動順番と同じ順番であるならば、その順番を、その順番に直近の未決定の順番とする；
請求項１記載のストレージシステム。
【請求項３】
前記（１−２−４）において、特定される整数は、有効範囲に属する整数であり、
前記ｎ個の整数には、同じ整数は含まれておらず、
前記有効範囲の最大値は、論理応答時間の和−（ｎ−１）×ｎ／２であり、
前記有効範囲の最小値は、２×｛２×論理応答時間の和＋ｎ×（ｎ−１）｝／ｎである、
請求項２記載のストレージシステム。
【請求項４】
前記（１−２−５）において、複数のキューがラウンドロビンでチェックされ、キューがチェックされる都度に、チェックされたキューのうちの一つの起動対象コマンドについて、起動順番が決定される、
請求項３記載のストレージシステム。
【請求項５】
各キューについて、実行コマンド上限値が予め設定されており、
前記（１−１）で、各キューについて決定される起動対象コマンド数は、そのキューに対応した実行コマンド上限値と、そのキューについて既に実行中であるコマンドの数との差以下の数である、
請求項４記載のストレージシステム。
【請求項６】
起動数制御部を備え、
各キューについて、優先度に応じた起動数が予め設定されており、
前記起動数制御部は、各キューについて、単位時間当たりに、予め設定されている起動数と同数のコマンドを起動し、
前記起動順序制御部と前記起動数制御部とのうちの選択された制御部が実行される、
請求５記載のストレージシステム。
【請求項７】
前記起動順序制御部と前記起動数制御部とのうちの実行対象とする制御部を選択する選択部を更に備え、
前記選択部は、コマンドの発行頻度を調整する調整部を前記ホスト計算機が有している場合には、前記起動数制御部を選択し、一方、前記ホスト計算機が前記調整部を有していない場合には、前記起動順序制御部を選択する、
請求項６記載のストレージシステム。
【請求項８】
ポート毎に、前記起動順序制御部又は前記起動数制御部による処理が行われる、
請求項７記載のストレージシステム。
【請求項９】
前記（１−２）では、各キューについて、論理応答時間の平均値の比が割当比率の逆比となるような、起動対象コマンドの起動順序が決定され、
割当比率とは、優先度に基づくパラメータ値であり、
各キューについての論理応答時間の和は、各キューについて決定された全ての起動対象コマンドの全てが起動されるまでにかかる時間に基づく時間である、
請求項１記載のストレージシステム。
【請求項１０】
前記起動順序制御部が、前記（１−２）において、各キューについて、前記論理応答時間の和の要素となり得るｎ個（ｎは、そのキューについての起動対象コマンドの数）の整数を特定し、各起動対象コマンドについて、起動対象コマンドの起動順番を、特定された整数が表す順番とする、
請求項９記載のストレージシステム。
【請求項１１】
複数のキューがラウンドロビンでチェックされ、キューがチェックされる都度に、チェックされたキューのうちの一つの起動対象コマンドについて、起動順番が決定される、
請求項１０記載のストレージシステム。
【請求項１２】
各キューについて、実行コマンド上限値が予め設定されており、
前記（１−１）で、各キューについて決定される起動対象コマンド数は、そのキューに対応した実行コマンド上限値と、そのキューについて既に実行中であるコマンドの数との差以下の数である、
請求項１、９乃至１１のうちのいずれかに記載のストレージシステム。
【請求項１３】
起動数制御部を備え、
各キューについて、優先度に応じた起動数が予め設定されており、
前記起動数制御部は、各キューについて、単位時間当たりに、予め設定されている起動数と同数のコマンドを起動し、
前記起動順序制御部と前記起動数制御部とのうちの選択された制御部が実行される、
請求１、９乃至１２のうちのいずれかに記載のストレージシステム。
【請求項１４】
前記起動順序制御部と前記起動数制御部とのうちの実行対象とする制御部を選択する選択部を更に備え、
前記選択部は、コマンドの発行頻度を調整する調整部を前記ホスト計算機が有している場合には、前記起動数制御部を選択し、一方、前記ホスト計算機が前記調整部を有していない場合には、前記起動順序制御部を選択する、
請求項１３記載のストレージシステム。
【請求項１５】
ホスト計算機からＩ／Ｏコマンドを受信し、受信したＩ／Ｏコマンドに応答して、複数の物理記憶装置の少なくとも一つに対してＩ／Ｏを行うストレージシステムで実現する方法であって、
ホスト計算機からコマンドを受信した場合、受信したコマンドの優先度を特定し、優先度毎に対応したキューのうちの、特定された優先度に対応したキューに、前記受信したコマンドを蓄積し、
各キューについて、キューに対応する優先度を基に、キューに蓄積されている複数のコマンドのうちの起動対象とするコマンドである起動対象コマンドの数を決定し、
各キューについての決定された起動対象コマンド数を基に、優先度が高いほど起動対象コマンドの論理応答時間の平均値が短くなるような、起動対象コマンドの起動順序を決定し、
決定された起動順序に従って起動対象コマンドを起動する、
コマンド起動制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにおけるコマンドの起動を制御に関する。
【背景技術】
【０００２】
コマンドの起動を制御するストレージシステムとして、例えば、特許文献１に開示のストレージシステムが知られている。
【０００３】
【特許文献１】特開２００２−２３６５６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ストレージシステムが受信したコマンドは、一旦記憶資源（例えばキュー）に蓄積される。コマンドの起動の制御として、例えば、単位時間当たりに起動するコマンドの数（以下、起動対象コマンド数）を、コマンドの優先順位に応じた数とする方法が考えられる。その方法によれば、例えば、優先度がより高いコマンドについては、起動対象コマンド数がより多くなる。
【０００５】
しかし、この方法では、コマンドについての応答時間（コマンドが発行されてから応答が返るまでの時間長）が、優先度通りにならないことがある。具体的には、例えば、高優先度のコマンドをたくさん受信したが故に、先に受信したコマンドについては早くに起動されて応答が返されても（つまり応答時間が短くても）、後に受信した高優先度のコマンドについては遅くに起動されそれ故遅くに応答が返されること（つまり応答時間が長くなること）があり得る。応答時間が長い場合、コマンドの発行元（例えばホスト計算機）がコマンドの発行頻度を制御することで、応答時間の短縮が期待できる。しかし、コマンドの発行元がコマンドの発行頻度を制御する機能を有しているとは限らない。
【０００６】
そこで、本発明の目的は、単位時間当たりに起動するコマンドの数と起動される各コマンドの応答時間長との両方をコマンドの優先順位に応じてストレージシステムが制御できるようにすることにある。
【課題を解決するための手段】
【０００７】
ストレージシステムが、コマンドの優先度毎に対応したキューと、起動順序制御部とを備える。ストレージシステムがホスト計算機から受信したコマンドは、そのコマンドから特定された優先度に対応したキューに蓄積される。起動順序制御部は、各キューについて、キューに対応する優先度を基に、キューに蓄積されている複数のコマンドのうちの起動対象とするコマンドである起動対象コマンドの数を決定する。そして、起動順序制御部は、各キューについての決定された起動対象コマンド数を基に、優先度が高いほど起動対象コマンドの論理応答時間の平均値が短くなるような、起動対象コマンドの起動順序を決定する。決定された起動順序に従って、起動対象コマンドが起動される。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して、本発明の一実施形態を説明する。なお、以下の説明では、説明が冗長になることを防ぐために、適宜、コンピュータプログラムを主語にして処理を説明するが、実際には、その処理は、コンピュータプログラムを実行するプロセッサによって行われる。
【０００９】
図１は、本発明の一実施形態に係る計算機システムの構成例を示す。
【００１０】
ストレージシステム１１０に、一以上のホスト計算機（以下、ホスト）、例えば４台のホスト１０１Ａ〜１０１Ｄが接続されている。ホスト１０１Ａ〜１０１Ｄは、ＣＰＵやメモリ等の情報処理資源を有する。ホスト１０１Ａ〜１０１Ｄでは、それぞれ、アプリケーションプログラム（ＡＰ）１０３Ａ〜１０３Ｄが実行される。ホスト１０１Ａ〜１０１Ｄのうち、ホスト１０１Ａ（１０１Ｄ）に、Qos（Quality of Service）制御部１０５Ａ（１０５Ｄ）が備えられる。Qos制御部１０５Ａ（１０５Ｄ）は、コマンド発行頻度を制御する機能を有する。Qos制御部は、ホスト以外の、ストレージシステム１１０の外部の装置、例えば、ストレージシステムの管理計算機に供えられても良い。Qos制御部の詳細については、後述する。
【００１１】
ストレージシステム１１０は、複数のポート、例えば３つのポート１１１Ａ〜１１１Ｃを有している。各ポートは、ホストからＩ／Ｏ（Input/Output）コマンド等のコマンドを受け付ける。図１の例では、ポート１１１Ａは、ホスト１０１Ａに接続されており、ポート１１１Ｂは、ホスト１０１Ｂに接続されており、ポート１１１Ｃは、スイッチ装置１０７を介して、ホスト１０１Ｃ及び１０１Ｄに接続されている。スイッチ装置１０７は、ＳＡＮ（Storage Area Network）等の通信ネットワークに備えられる装置（例えば、ファイバチャネルスイッチ）である。
【００１２】
ストレージシステム１１０は、コントローラ１１９とＨＤＤ（Hard Disk Drive）群１２０とを備える。
【００１３】
ＨＤＤ群１２０は、複数のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループを有する。ＲＡＩＤグループ１５１は、複数のＨＤＤ１２１で構成されており、所定のＲＡＩＤレベルに応じてデータを記憶する。ＲＡＩＤグループ１２１の記憶空間を基に、論理記憶装置としてのＬＵ（Logical Unit）が形成される。ＨＤＤ１２１に代えて、フラッシュメモリなど他種の物理記憶装置が採用されても良い。
【００１４】
コントローラ１１９は、一以上（例えば３つ）のＣＨＰ（Channel Processor）１１３Ａ〜１１３Ｃと、メモリ１２５と、転送ＬＳＩ（Large Scale Integration）１２２と、一以上（例えば２つ）のディスクＩ／Ｆ１１７Ａ及び１１７Ｂとを有する。
【００１５】
ＣＨＰ（例えば１１３Ａ）は、ホスト（例えば１０１Ａ）との通信インタフェース装置であり、一以上（例えば一つ）のポート（例えば１１１Ａ）を有する。ＣＨＰが有するポートで、ホストからＩ／Ｏコマンドが受け付けられる。Ｉ／Ｏコマンドがライトコマンドの場合、ライト対象のデータが、ＣＨＰ５を通じて、メモリ１２５のキャッシュ領域に格納される。一方、Ｉ／Ｏコマンドがリードコマンドの場合、リード対象のデータが、キャッシュ領域から読み出され、ＣＨＰを通じて、ホストに送信される。
【００１６】
転送ＬＳＩ１１５は、コントローラ１１９内での各要素間のやり取りを制御する。
【００１７】
ディスクＩ／Ｆ（例えば１１７Ａ）は、ＨＤＤ１２１に対する通信インタフェース装置である。ＣＨＰで受けたＩ／Ｏコマンドがライトコマンドの場合、ライト対象のデータが、キャッシュ領域から読み出され、ディスクＩ／Ｆを通じて、そのコマンドで指定されているＬＵ（そのＬＵの基になっているＨＤＤ１２１）に書き込まれる。一方、ＣＨＰで受けたＩ／Ｏコマンドがリードコマンドの場合、リード対象のデータが、そのコマンドで指定されているＬＵ（そのＬＵの基になっているＨＤＤ１２１）から読み出され、読み出されたデータがキャッシュ領域に書き込まれる。
【００１８】
以上が、本実施形態に係る計算機システムの概要である。
【００１９】
以下、ホスト１０１ＡとＣＨＰ１１３Ａを例に採り、図２を参照して、ホスト１０１Ａとストレージシステム１１０との間で行われる通信を説明する。
【００２０】
ＣＨＰ１１３Ａは、ポート１１１Ａの他に、コマンドの優先度毎に対応したキュー１３５、１３５、…と、マイクロプロセッサ（ＭＰ）１３１と、メモリ（以下、ＬＭ（Local Memory））１３３とを有する。各キュー１３５は、ＬＭ１３３及び／又は別の記憶資源が基になっている。
【００２１】
Qos制御部１０５Ａは、Qos制御の統括的な機能を有する。例えば、Qos制御部１０５Ａは、後述する種々のパラメータ値をＣＨＰ１１３Ａに設定したり、モニタ情報をＣＨＰ１１３Ａ及びＡＰ１０３Ａから採取したり、ＡＰ１０３Ａからのコマンド発行頻度を調整したりする。パラメータ値は、ＬＭ１３３に設定される。ＣＨＰ１１３Ａからのモニタ情報には、例えば、どのキュー（優先度）にどれだけの数のコマンドが蓄積されているか等の情報が含まれている。ＡＰ１０３Ａからのモニタ情報には、例えば、コマンドの発行頻度を表す情報や、ＡＰ１０３Ａから発行されるコマンドの属性情報などが含まれている。Qos制御部１０５Ａは、ＡＰ１０３Ａからのモニタ情報を基に、ＡＰ１０３Ａから発行するコマンドに設定すべき優先度を指示する。ＡＰ１０３Ａから発行されるコマンドには、ＡＰ１０３Ａによって、Qos制御部１０５Ａから指示された優先度が設定される。本実施形態において、「優先度」とは、コマンド（例えばＩ／Ｏコマンド）毎に設定されるラベルである。本実施形態では、後述する起動順序ＰＧによって、優先度が高いほど、起動されるコマンドの数が多く、また、各コマンドの応答時間は短くなるように、コマンドの起動が制御される。
【００２２】
ＭＰ１３１は、ＣＨＰ１１３Ａがコマンドを受信したら、そのコマンドに含まれている優先度を特定し、そのコマンドを、特定された優先度に対応したキュー１３５に蓄積する。ＭＰ１３１は、起動順序決定処理を実行する。起動順序決定処理では、応答時間の比が優先度の逆比になるように、複数のキュー１３５に蓄積されているコマンドのうちの起動対象のコマンドの起動順序が決定され、決定された起動順序に従って、起動対象コマンドが起動される。起動順序決定処理は、ポート１１１Ａ単位に行われる。すなわち、本実施形態では、ＣＨＰ１１３Ａに備えられているポート１１１Ａは一つであるが、ＣＨＰ１１３Ａに複数のポート１１１Ａが備えられている場合には、ポート１１１Ａ毎に独立した起動順序決定処理が行われる。複数のポート１１１ＡがＣＨＰ１１３Ａに備えられている場合、コマンドの優先度毎に対応したキュー１３５、１３５、…のセットは、ポート１１１Ａ毎に備えられても良い。
【００２３】
図３は、ＬＭ１３３に記憶される情報及びコンピュータプログラムを示す。
【００２４】
ＬＭ１３３に記憶される情報としては、例えば、キュー毎の蓄積コマンドＣＶ、キュー毎の起動数ＣＶ、キュー毎の割当量、キュー毎の割当量累積値、割当量累積値の閾値、キュー毎の割当比率、キュー毎の実行中コマンド数、及び、キュー毎の上限値がある。コンピュータプログラムとしては、例えば、方式選択ＰＧ３０１、起動数制御ＰＧ３０３、起動順序制御ＰＧ３０５、及びコマンド蓄積ＰＧ３０６がある。これらのＰＧは、ＭＰ１３１で実行される。本実施形態の説明及び図面において、ＣＶは、カウント値の略であり、ＰＧは、プログラムの略である。
【００２５】
蓄積コマンドＣＶは、そのＣＶに対応するキューに蓄積されているコマンドの数を表す値である。キューにコマンドが蓄積される都度に、そのキューに対応する蓄積コマンドＣＶが、コマンド蓄積ＰＧ３０６によって１インクリメントされる。また、蓄積コマンドＣＶは、そのＣＶに対応するキューからコマンドが起動される都度に、起動数制御ＰＧ３０３又は起動順序制御ＰＧ３０５によって１デクリメントされる。
【００２６】
起動数ＣＶは、そのＣＶに対応するキューから起動可能なコマンドの数を表す値である。キューからコマンドが起動される都度に、そのキューに対応する起動数ＣＶが、起動数制御ＰＧ３０３によって１デクリメントされる。起動数ＣＶの初期値は、そのＣＶに対応するキューについての優先度に基づく値、例えば、そのＣＶに対応するキューについての割当量又は割当比率と同じ値である。
【００２７】
割当量は、キューの処理の割合を表す量である。割当量は、Qos制御部１０５Ａから予め設定されるパラメータ値の一つである。割当量は、キューに対応する優先度に基づく値である。
【００２８】
割当量累積値は、割当量の累計を表す値である。
【００２９】
割当量累積値の閾値は、割当量累積値と比較される値である。全てのキューに一つの閾値が共通している。
【００３０】
割当比率は、割当量の比率である。
【００３１】
実行中コマンド数は、起動されて実行中であるコマンドの数である。
【００３２】
上限値は、実行中コマンド数と起動対象コマンド数の合計の上限を表す値である。
【００３３】
本実施形態では、コマンドの起動のスケジューリングの方式として、起動数制御方式と起動順序制御方式の２種類の方式が用意されている。起動数制御方式とは、各キューについて、単位時間当たりの起動対象コマンド数を制御する方式であり、起動順序制御方式とは、各キューについて、単位時間当りの起動対象コマンド数に加えて、起動対象コマンドの起動順序も制御する方式（前述した起動順序決定処理が行われる方式）である。起動数制御方式に従うスケジューリングは、起動数制御ＰＧ３０３によって行われ、起動順序制御方式に従うスケジューリングは、起動順序制御ＰＧ３０５によって行われる。起動順序制御ＰＧ３０５は、例えば、IOPS比制御（後述する）を行うIOPS制御部３１２と、応答時間比制御（後述する）を行う応答時間比制御部３１３と、起動対象コマンドを実際に起動するコマンド起動部３１４とを有する。
【００３４】
方式選択ＰＧ３０１は、コマンドの起動のスケジューリング方式として、起動数制御と起動順序制御のどちらかの方式を選択する。具体的には、方式選択ＰＧ３０１は、起動数制御ＰＧ３０３と起動順序制御ＰＧ３０５のどちらを実行するか選択する。この選択は、ポート単位に行われる。従って、或るポートで受け付けた複数のコマンドについては、起動数制御方式でコマンドの起動がスケジューリングされ、別のポートで受け付けた複数のコマンドについては、起動順序制御方式でコマンドの起動がスケジューリングされることがある。
【００３５】
コマンド蓄積ＰＧ３０６は、ＣＨＰ１１３Ａがコマンドを受信したら、そのコマンドに含まれている優先度を特定し、そのコマンドを、特定された優先度に対応したキューに蓄積する。その際、コマンド蓄積ＰＧ３０６は、そのキューに対応する蓄積コマンドＣＶを１インクリメントする。
【００３６】
以下、起動数制御方式、起動順序制御方式、及び方式選択について説明する。なお、以下の説明では、コマンドとは、Ｉ／Ｏコマンドを意味するものとする。
【００３７】
＜起動数制御方式＞。
【００３８】
図４は、起動数制御方式の概要を示す。
起動数制御方式は、各キューから起動するコマンドの数の比が割当比率の比となるように、各キューから起動するコマンドの数を制御する方式である。前述したように、各キューについて起動数ＣＶがあり、起動数制御ＰＧ３０３が、起動数ＣＶを更新するカウンタとして機能する。起動数制御ＰＧ３０３は、下記のように動作する。
【００３９】
例えば、優先度４、３及び２（ここでは優先度１が最も高い）に対応したキューＰ１〜Ｐ３があるとする。また、キューＰ１〜Ｐ３に対応した３つの割当比率として、優先度と同じ値４、３、２が設定されており、それ故、キューＰ１〜Ｐ３に対応した起動数ＣＶの初期値が、４、３、２であるとする。更に、キューＰ１には、５つのコマンドが蓄積されており、キューＰ２には、３つのコマンドが蓄積されており、キューＰ３には、４つのコマンドが蓄積されているとする。
【００４０】
ここで、起動数制御ＰＧ３０３が、各キューについての起動数ＣＶを初期化すると（Ｓ１）、キューＰ１〜Ｐ３に対応した起動数ＣＶは、４、３、２になる（キュー[Ｐ１，Ｐ２，Ｐ３]＝起動数ＣＶ[４，３，２]となる）。
【００４１】
次に、起動数制御ＰＧ３０３は、高い優先度に対応したキューからラウンドロビンでキューをチェックしていく（Ｓ２）。その際、起動数制御ＰＧ３０３は、チェックしたキューに対応した蓄積コマンドＣＶ及び起動数ＣＶが０より大きければ、そのキューにおける先頭のコマンドを起動し、そのキューに対応する起動数ＣＶ及び蓄積コマンドＣＶを１デクリメントする（Ｓ３）。
【００４２】
この結果、キューＰ１〜Ｐ３の１周目のチェックでは、キューＰ１〜Ｐ３からそれぞれ先頭の一つのコマンドが起動され、且つ、キューＰ１〜Ｐ３に対応する起動数ＣＶは、それぞれ１デクリメントされて、起動数ＣＶは３，２，１となる。同様に、キューＰ１〜Ｐ３の２周目のチェックでも、キューＰ１〜Ｐ３からそれぞれ先頭の一つのコマンドが起動され、且つ、キューＰ１〜Ｐ３に対応する起動数ＣＶは、それぞれ１デクリメントされる。これにより、起動数ＣＶは２，１，０となる。つまり、キューＰ３に対応した起動数ＣＶが０となる。それ故、キューＰ１〜Ｐ３の３周目のチェックでは、キューＰ１及びＰ２からは、先頭の一つのコマンドが起動されるが、キューＰ３からは、コマンドが起動されない。
【００４３】
Ｓ２及びＳ３の繰り返しによって、全ての起動数ＣＶがゼロになったならば、起動数制御ＰＧ３０３は、再びＳ１を実行する。
【００４４】
以上のように、起動数制御方式は、起動数ＣＶを用いて各キューから起動するコマンド数を制御する方式である。この方式によれば、各キューの負荷（一定時間に蓄積されるコマンドの数）がほぼ等しければ、キュー毎の応答時間の比が、優先度の逆比（割当比率の逆比）となるように制御される。また、この方式は、後述する起動順序制御方式よりも、処理が単純な為、外部（例えば、ホスト又は管理計算機等の外部で実行されるQos制御部）にとって、ＣＨＰ内部での動作を把握し易い。
【００４５】
図５は、起動数制御方式に従うスケジューリングのフローを示す。
【００４６】
起動数制御ＰＧ３０３は、このフローを定期的に開始する。
【００４７】
まず、起動数制御ＰＧ３０３は、チェック対象のキューに対応する優先度を表すパラメータＰｘの値として、１をセットする（Ｓ５０１）。つまり、優先度の高いキューからチェックをしていく。
【００４８】
次に、起動数制御ＰＧ３０３は、優先度Ｐｘに対応したキュー（キューＰｘ）をチェックする（Ｓ５０２）。
【００４９】
起動数制御ＰＧ３０３は、キューＰｘに対応した蓄積コマンドＣＶ及び起動数ＣＶの一方が０であれば、Ｓ５０４乃至Ｓ５０８をスキップして、後述のＳ５０９を実行する。
【００５０】
起動数制御ＰＧ３０３は、キューＰｘに対応した蓄積コマンドＣＶ及び起動数ＣＶが両方とも０より大きければ（Ｓ５０３：ＹＥＳ、及び、Ｓ５０４：ＹＥＳ）、キューＰｘ内の先頭のコマンドを起動する（Ｓ５０５）。そして、起動数制御ＰＧ３０３は、キューＰｘに対応した蓄積コマンドＣＶ及び起動数ＣＶをそれぞれ１デクリメントする（Ｓ５０６、Ｓ５０７）。
【００５１】
Ｓ５０７の後、起動数制御ＰＧ３０３は、全ての起動数ＣＶがゼロか否かを判断する（Ｓ５０８）。
【００５２】
Ｓ５０８の判断の結果が肯定的であれば（Ｓ５０８：ＹＥＳ）、全ての起動数ＣＶが初期化され（Ｓ５１１）、このフローが終了する。
【００５３】
一方、Ｓ５０８の判断の結果が否定的であれば（Ｓ５０８：ＮＯ）、Ｐｘが１インクリメントされる（Ｓ５０９）。Ｓ５０９の後、Ｐｘが所定の値を超えていれば（Ｓ５１０：ＹＥＳ）、全てのキューをチェックしたということなので、このフローが終了する。一方、Ｐｘが所定の値を超えていなければ（Ｓ５１０：ＮＯ）、インクリメント後のＰｘに対応するキューについて、Ｓ５０２以降が行われる。
【００５４】
＜起動順序制御方式＞。
【００５５】
図６は、起動順序制御方式の概要を示す。
【００５６】
起動順序制御方式は、起動するコマンドの数だけでなく、コマンドを起動させる順序を制御することで、応答時間の比が割当比率の逆比となるようにする方式である。この方式に従うスケジューリングは、起動対象コマンド数算出処理（IOPS比率制御）と起動順序決定処理（応答時間比率制御）から構成される。IOPSとは、IO Per Secondの略であり、１秒当たりのＩ／Ｏ数である。
【００５７】
起動対象コマンド算出処理では、各キューについての割当量及び上限値を基に、起動対象コマンド数がキュー毎に算出される。ここでは、各キューについて、上限値を超えない範囲で、起動対象コマンド数が割当比率と同じになるように制御される。これにより、起動対象コマンド数が割当比率と等しくなりIOPS比率制御が可能となる。
【００５８】
具体的には、例えば、図４に示すように、キューＰ１〜Ｐ３に蓄積されているコマンドの数が、５，３，４であり、且つ、キューＰ２から起動された一つのコマンドとキューＰ３から起動された一つのコマンドが実行中であるとする。そして、キューＰ１〜Ｐ３に対応した割当比率が、５，２，１であり、上限値が、４，２，１であるとする。この場合、起動対象コマンドとされるのは、キューＰ１〜Ｐ３上に点線で示した境界よりも右に存在するコマンドだけである。
【００５９】
すなわち、キューＰ１については、５つのコマンドが蓄積されており、割当比率が５であるため、上限値が無ければ５つのコマンドの全てが起動対象コマンドとされる。しかし、上限値として４が設定されている。このため、５つのコマンドのうち起動対象コマンドとされるのは、先頭から４つのコマンドである。
【００６０】
キューＰ２については、３つのコマンドが蓄積されており、割当比率が２であるため、上限値が無ければ、３つのコマンドのうちの２つが起動対象コマンドとされる。しかし、上限値として２が設定されており、且つ、キューＰ２から起動された１つのコマンドが実行中である。このため、３つのコマンドのうち起動対象コマンドとされるのは、先頭のコマンドのみである。つまり、起動対象コマンド数と実行中コマンド数の合計が上限値以下とされる。
【００６１】
キューＰ３については、４つのコマンドが蓄積されており、割当比率が１であり、上限値が１であるため、キューＰ３についての実行中のコマンドが１つも無ければ、４つのコマンドのうちの１つが起動対象コマンドとされる。しかし、キューＰ３から起動された１つのコマンドが実行中であるため、４つのコマンドのうちのいずれも起動対象コマンドとされない。１つでも起動対象コマンドとされると、起動対象コマンド数と実行中コマンド数の合計が上限値を超えてしまうからである。
【００６２】
以上のようにして、起動対象コマンド算出処理では、キュー毎に、起動対象コマンド数が算出される。
【００６３】
起動順序決定処理では、起動対象コマンド算出処理で算出されたコマンド数分の起動対象コマンドについて、起動順番が決定される。つまり、起動対象コマンドの起動順序が決定される。決定される起動順序は、応答時間の比が割当比率の逆比となるような順序である。このため、決定される起動順序は、図６に示すように、割当比率が大きいキュー（優先度が高いキュー）にある起動対象コマンドの多くが、割当比率が低いキュー（優先度が低いキュー）よりも早く起動されるような順序とされる。
【００６４】
図７は、起動順序制御方式に従うスケジューリングの全体的なフローを示す。このフローは定期的に開始される。
【００６５】
起動順序制御ＰＧ３０５内のIOPS比制御部３１２が、起動対象コマンド数算出処理を行う（Ｓ７０１）。すなわち、IOPS比制御部３１２は、キューをラウンドロビンでチェックし、チェックしたキューについて、蓄積されているコマンドのうち起動対象コマンドとするコマンドの数を算出する。
【００６６】
起動順序制御ＰＧ３０５内の応答時間比制御部３１３が、起動順序決定処理を行う（Ｓ７０２）。すなわち、応答時間比制御部３１３は、起動対象コマンドの起動順序を決定することで、応答時間の比が割当比率の逆比となるように制御する。
【００６７】
その後、起動順序制御ＰＧ３０５内のコマンド起動部３１４が、決定された起動順序に従い、各キューから起動対象コマンドを起動させる（Ｓ７０３）。その際、起動された起動対象コマンドに対応するキューについての実行中コマンド数が１インクリメントされる。また、起動対象コマンドが起動された場合に、そのコマンドについての応答が、そのコマンドの発行元のホストにＭＰ１３１によって返される。なお、コマンドの実行が終了したら、実行中コマンド数が１デクリメントされる。
【００６８】
図８は、起動対象コマンド数算出処理のフローを示す。
【００６９】
IOPS比制御部３１２は、このフローを定期的に開始する。
【００７０】
まず、IOPS比制御部３１２は、チェック対象のキューに対応する優先度を表すパラメータＰｘの値として、１をセットする（Ｓ８００）。つまり、優先度の高いキューからチェックをしていく。
【００７１】
次に、IOPS比制御部３１２は、優先度Ｐｘに対応したキュー（キューＰｘ）に対応した蓄積コマンドが０より大きいか否か（つまりキューＰｘにコマンドが蓄積されているか否か）を判断する（Ｓ８０１）。
【００７２】
Ｓ８０１の判断の結果が否定的の場合（Ｓ８０１：ＮＯ）、IOPS比制御部３１２は、キューＰｘに対応した割当量累積値を初期化する（Ｓ８０６）。その後、Ｓ８０７が行われる。
【００７３】
Ｓ８０１の判断の結果が肯定的の場合（Ｓ８０１：ＹＥＳ）、IOPS比制御部３１２は、キューＰｘに対応した割当量累積値に、キューＰｘに対応した割当量を加算する（Ｓ８０２）。
【００７４】
そして、IOPS比制御部３１２は、下記の条件１及び条件２の少なくとも一方が満たされなくなるまで、
（条件１）キューＰｘに対応した実行中コマンド数と、キューＰｘに対応した起動対象コマンドの数との和が、キューＰｘに対応した上限値未満である、
（条件２）キューＰｘに対応した割当量累積値が閾値を超えている、
Ｓ８０３〜Ｓ８０５を繰り返す。Ｓ８０３では、IOPS比制御部３１２は、キューＰｘに蓄積されているコマンドのうち、先頭に最も近く、且つ、未だ起動対象コマンドとされていないコマンドを、起動対象コマンドとして選出する（例えば、そのコマンドの属性（例えばＩＤ）を、キューＰｘに対応した起動対象リスト（図示せず）に追記する）。Ｓ８０４では、IOPS比制御部３１２は、キューＰｘに対応した割当量累積値から、キューＰｘに対応した割当量をデクリメントする。Ｓ８０５では、IOPS比制御部３１２は、キューＰｘに対応した蓄積コマンドＣＶを１デクリメントする。
【００７５】
Ｓ８０３〜Ｓ８０５のループから抜けた後、又は、Ｓ８０６の後、IOPS比制御部３１２は、Ｐｘを１インクリメントする（Ｓ８０７）。その後、Ｐｘが所定の値を超えていれば（Ｓ８０８：ＹＥＳ）、全てのキューをチェックしたということなので、このフローが終了する。一方、Ｐｘが所定の値を超えていなければ（Ｓ８０７：ＮＯ）、インクリメント後のＰｘに対応するキューについて、Ｓ８０１以降が行われる。
【００７６】
以上が、起動対象コマンド数算出処理（IOPS比制御）のフローの説明である。この処理の後に、起動順序決定処理（応答時間比制御）が行われる。
【００７７】
次に、起動順序決定処理について説明する。
【００７８】
図９は、起動順序決定処理の概要のフローを示す。
【００７９】
起動順序決定処理は、図９に示すように、３つのステップ、
Ｓ９０１：各キューの論理応答時間の和が算出される；
Ｓ９０２：論理応答時間の和を基に、キュー毎の起動順序が決定される；
Ｓ９０３：全キューについての起動対象コマンドの起動順序が決定される；
に大別することができる。
【００８０】
コマンドが発行されてからそのコマンドが起動されることによって応答が返されるまでの時間長、つまり、応答時間は、各キューでの待ち時間（起動されるまでの待ち時間）の影響を受ける。なぜなら、例えば、待ち時間の長いコマンドは応答時間が長く、待ち時間の短いコマンドは応答時間が短いからである。この点に着目すれば、キューでの待ち時間を制御することが、応答時間の制御につながることがわかる。
【００８１】
ここで、論理応答時間を定義し、以下、この値を調整することで、起動順序が制御される。「論理応答時間」とは、或るコマンドが起動されるまでの待ち時間を表している。具体的には、例えば、キューにおけるＮ番目のコマンドは、自分を含めてＮ個の起動待ちコマンドがあるため、論理応答時間は、1+2+...+N = N×(N+1)/2とされる。この値は、応答時間に反映されるものであるため、論理応答時間の比を割当比率の逆比（逆数の比）とすることで、応答時間の比が割当比率と反比例させられることになる。
【００８２】
図１０は、起動順序決定処理の詳細のフローを示す。以下、この図を参照して、前述したＳ９０１からＳ９０３について、詳細に説明する。
【００８３】
＜＜図９のＳ９０１について＞＞。
【００８４】
応答時間比制御部３１３は、各キューについての割当比率と、起動対象コマンド数算出処理で決定された起動対象コマンド数とを基に、各キューの論理応答時間の和を求める。具体的には、下記の処理（９０１−１）〜（９０１−３）が行われる。なお、以下の処理では、各キューの割当比率の比は、S0：S1：…：Skとし（kは、キューの数）、キューに対応した起動対象コマンドは、ｎ個とする。
（９０１−１）応答時間比制御部３１３が、各キューについて、論理応答時間の和の比率（論理応答時間の和の比を構成する項の値）を算出する（図１０のＳ１００１）。キュー（ｉ）に対応する論理応答時間の和の比率を、WTiとすると、WTiは、下記（式１）、
【数１】
2010102458.tif 000003
で算出される。Sは、全てのキューに対応した全ての割当比率の合計値（下記（式２）で表されるS）である。
【数２】
2010102458.tif 000004
niは、キュー（ｉ）に対応する起動対象コマンド数である。なお、論理応答時間の和とは、キュー毎に算出される値であり、キューについての各起動対象コマンドの論理応答時間の合計のことである。
（９０１−２）応答時間比制御部３１３が、各キューについて論理応答時間の和の合計である総和Tを算出する（図１０のＳ１００２）。具体的には、総和Ｔは、下記（式３）、
【数３】
2010102458.tif 000005
で算出される。ここでは、Ｎ＝ｎである。また、ｔは、一つのコマンドに要する処理時間としての一定値である。このような式で総和Ｔが算出されるとする理由は、x番目の起動対象コマンドは、それ以前の(x-1)個分の起動対象コマンドが起動されるのを待つ必要があるということである。
（９０１−３）応答時間比制御部３１３が、上記（９−１）で算出した、各キューでの論理応答時間の和の比率と、上記（９−２）で算出した総和Ｔとを用いて、各キューについて、論理応答時間の和を算出する（図１０のＳ１００３）。キュー（i）の論理応答時間の和をWiとすると、Wiは、下記（式４）、
【数４】
2010102458.tif 000006
で算出される。なお、もし、算出された値が、整数にならなければ、直前又は直後の整数が、Wiとされる。
【００８５】
＜＜図９のＳ９０２について＞＞。
【００８６】
キュー毎に論理応答時間の和が算出されると、当該キューについての起動対象コマンド数が分かっているため、各キューについて、起動対象コマンドの論理応答時間が幾つになれば、算出された和を満たすか（つまり起動順番が何番になればよいか）が分かる。
【００８７】
例えば、下記の条件（Ａ）〜（Ｃ）、
（Ａ）全キューについての起動対象コマンド数Ｍ（下記（式５）で表されるＭ、つまり、キュー毎の起動対象コマンド数の合計）が７である、
【数５】
2010102458.tif 000007
（Ｂ）或るキューに対応した起動対象コマンド数ｎが２である、
（Ｃ）論理応答時間の和Wiが８である、
において、或るキューに対応した２つの起動対象コマンドＮ０、Ｎ１のそれぞれの起動順番は、起動順番の和が８を満たす関係である。具体的には、２つの起動対象コマンド（Ｎ０，Ｎ１）の起動順番を、（ＴＵ１，ＴＵ２）で表すと、図１１Ａに示す組である（１，７）、図１１Ｂに示す組である（２，６）、及び図１１Ｃに示す組である（３，５）のいずれかとなる
そこで、応答時間比制御部３１３は、キュー毎に、次のような処理を行う。
（９０２−１）応答時間比制御部３１３は、起動順番の有効範囲を算出する（図１０のＳ１００４）。
（９０２−２）応答時間比制御部３１３は、起動順番の有効範囲内で、起動対象コマンドの起動順番を決定する（図１０のＳ１００５、及びＳ１００６：ＮＯ）。
【００８８】
以下、キュー（ｉ）を例に採り、上記（９０２−１）及び（９０２−２）を詳細に説明する。
【００８９】
論理応答時間の和Wiが、ｎ個の整数K0, K1, …, Kn-1の和になるように分割される（つまり、Wi = K0 + K1 + … + Kn-1）。ただし、ｎ個の整数には、２以上の同じ値の整数は含まれず、互いに異なる整数のみが含まれる。また、ｎ個の整数に含まれる各整数は、前述の（式５）で表されるＭ以下であるような値（但し０より大きい値）である（つまり、（Ｍ＞）K0 ＞ K1 ＞ … ＞ Kn-1（＞０））。
【００９０】
ここで、Ki（ｎ個の整数に含まれ得る整数）のとり得る範囲、つまり有効範囲は、下記（式６）で表す範囲であり、
【数６】
2010102458.tif 000008
この有効範囲から、Kiがランダムに決定される。
【００９１】
Kmaxは、次の方法で算出される（図１２Ａ参照）。すなわち、K0が最大となるのは、K1 + … + Kn-1が最小となるとき、つまり、K1 + … + Kn-1 = 1 + 2 + … + (n-1) = (n-1) * n / 2が最小となるときである。下記（式７）で表されるＡは、一定値Wiであるため、 
【数７】
2010102458.tif 000009
K0の最大値Kmaxとすると、Kmaxは、下記（式８）、
【数８】
2010102458.tif 000010
で算出される。
【００９２】
一方、Kminは、次の方法で算出される（図１２Ｂ参照）。すなわち、K0が最小となるのは、K1 = K0 -1、K2 = K0 -2; 2、・・・、Kn-1 = K0 - (n - 1)のときである。上記（式７）で表されるＡは、一定値Wiであるため、K0の最小値Kminとすると、Wi = Kmin + Kmin-1 + … + = Kmin - (n-1)であるため、Kmaxは、下記（式９）、
【数９】
2010102458.tif 000011
で算出される。
【００９３】
以上の理由から、K0のとり得る範囲（つまり有効範囲）は、下記（式１０）、
【数１０】
2010102458.tif 000012
に表される範囲となる。この範囲から、各キューについて、各起動対象コマンドの起動順番が決定される。
【００９４】
＜＜図９のＳ９０３について＞＞。
【００９５】
応答時間比制御部３１３が、各キューについて決定された起動順序を基に、全体的な起動順序を決定する（図１０のＳ１００７）。以下、キューについての起動順序を「ローカル起動順序」と言い、ローカル起動順序における起動順番を「ローカル起動順番」と言い、全てのキューについての全体的な起動順序を「グローバル起動順序」と言い、グローバル起動順序における起動順番を「グローバル起動順番」と言う。ローカル起動順番は、有効範囲からランダムに選択された値Ｋである。
【００９６】
具体的には、例えば、図１３に示すように、応答時間比制御部３１３は、最も優先度の高いキューＰ１から、ラウンドロビンでキューをチェックしていく。すなわち、応答時間比制御部３１３は、チェックしたキューのうちの一つの起動対象コマンドについてグローバル起動順番を決定したら、次に優先度の高いキューをチェックし、そのキューについても、一つの起動対象コマンドについてグローバル起動順番を決定する。
【００９７】
グローバル起動順番は、原則として、ローカル起動順番と同じ順番とされる。
【００９８】
例えば、図１３に示すように、キューＰ１内の或る起動対象コマンドのローカル起動順番が“８”の場合、その起動対象コマンドのグローバル起動順番として、ローカル起動順番と同じ順番“８”が割当てられる（Ｓ１３Ａ）。キューＰ１について一つの起動対象コマンドの起動順番が決定されたので、次に、キューＰ２がチェックされる。
【００９９】
キューＰ２内の或る起動対象コマンドのローカル起動順番が“８”の場合、グローバル起動順番として“８”が既に割り当て済みのため、その起動対象コマンドについては、“８”の直前の順番“７”が、グローバル起動順番として割当てられる（Ｓ１３Ｂ）。もし、その順番“７”も決定済みであれば、“８”の直後の順番“９”が割当てられる。すなわち、ローカル起動順番と同じ順番がグローバル起動順番として既に決定済みの場合には、そのローカル起動順番に直近且つ未決定の順番が、グローバル起動順番として割当てられる。キューＰ２について一つの起動対象コマンドの起動順番が決定されたので、次に、キューＰ３がチェックされる。
【０１００】
キューＰ３内の或る起動対象コマンドのローカル起動順番が“２”の場合、その起動対象コマンドのグローバル起動順番として、ローカル起動順番と同じ順番“２”が割当てられる（Ｓ１３Ｃ）。キューＰ３について一つの起動対象コマンドの起動順番が決定されたので、次に、キューＰ１がチェックされる。
【０１０１】
以上が、起動順序決定処理についての説明である。この起動順序決定処理の一例を、図１４を参照して、以下、２つのキューＰ１、Ｐ２を例に採り、説明する。
【０１０２】
キューＰ１、Ｐ２に対応した割当比率Ｓ１，Ｓ２は、Ｓ１＝２、Ｓ２=１（Ｓ１：Ｓ２＝２：１）であるとする。また、キューＰ１、Ｐ２に対応した起動対象コマンド数ｎ１，ｎ２は、ｎ１＝４、ｎ２＝２であるとする。IOPS比制御のため、起動対象コマンド数は、割当比率と等しくなる。
【０１０３】
論理応答時間の和の比は、
W0：W1 = (S0 + S1) / S0 * N0 : (S0 + S1) / S1 * N1 = 1：1
となる。
【０１０４】
一方、起動対象コマンド数の合計Nは、
N = ｎ0 + ｎ1 = 6
となる。
【０１０５】
また、論理応答時間の総和Tは
T = N * (N + 1) / 2＝２１
となる。
【０１０６】
よって、キューＰ１、Ｐ２の論理応答時間の和は、
W0’ = W0 /(W0 + W1) * N0 = 10.5
W1’ = W1 / (W0 + W1) * N1 = 10.5
となる。
【０１０７】
(W0’, W1’) = (11, 10)又は(10, 11)として、W0’及びW1’がそれぞれ分割されると、
W0’ = 1 + 2 + 3 + 5,
W1’ = 4 + 6
となる。つまり、キューＰ１についての４つの起動対象コマンドは、1, 2, 3, 5番目に起動させ、キューＰ２についての２つの起動対象コマンドは4. 6番目に起動させればよいことがわかる。
【０１０８】
論理応答時間の平均値は、それぞれ、
W0_average = (1 + 2 + 3 + 5) / 4 = 11 / 4 = 2.75
W1_average = (4 + 6) / 2 = 5
となる。すなわち、キューP１とキューP２の論理応答時間の比、つまり応答時間の比は、2.75 ：5となり、ほぼ、割当比率の比の逆比（１／２：１）と等しくなる。
【０１０９】
＜方式選択＞。
【０１１０】
各ポートについて、外部（例えばホスト又は管理計算機など）から、手動で、起動数制御方式と起動順序制御方式のどちらが選択するかが採用されても良いが、本実施形態では、方式選択ＰＧ３０１によって、その選択を自動で行うことが可能である。
【０１１１】
図１５は、制御方式選択処理のフローを示す。
【０１１２】
方式選択ＰＧ３０１は、各ポートについて、このフローを実行する。以下、図１５を参照した説明では、処理対象のポートを「対象ポート」と言う。
【０１１３】
方式選択ＰＧ３０１は、対象ポートに接続されている一以上のホストのうちの選択したホスト（以下、図１５の説明において「対象ホスト」と言う）について、Qos制御部が有るか否かを判断する（Ｓ１６０１）。方式選択ＰＧ３０１は、例えば、対象ホストから提供されたホスト構成情報（例えば、ストレージシステム１１０のメモリ１２５で管理される情報）を参照し、その情報を解析することで、対象ホストにQos制御部が有るか否かを判断する。
【０１１４】
方式選択ＰＧ３０１は、対象ホストについてQos制御部が無いと判断された場合には（Ｓ１６０１：ＮＯ）、他のホストについてＳ１６０１の判断を行うことなく、対象ポートについては起動順序制御方式を行うことを選択する（Ｓ１６０３）。すなわち、対象ポートについては、起動数制御ＰＧ３０３ではなく起動順序制御ＰＧ３０５が実行される。
【０１１５】
一方、方式選択ＰＧ３０１は、対象ホストについてQos制御部が有ると判断された場合には（Ｓ１６０１：ＹＥＳ）、他のホストを選択してＳ１６０１の判断を行う。対象ポートに接続されている全てのホストについて、Ｓ１６０１の判断の結果が肯定的の場合には、方式選択ＰＧ３０１は、対象ポートについては起動数制御方式を行うことを選択する（Ｓ１６０２）。すなわち、対象ポートについては、起動順序制御ＰＧ３０５ではなく起動数制御ＰＧ３０３が実行される。
【０１１６】
前述した２つの制御方式は、それぞれ異なる特徴を持つ。すなわち、起動数制御方式は、処理が比較的単純ではあるが、キューに蓄積されているコマンド数が意識されないため、キュー毎に蓄積されるコマンド数（キューへの負荷）が大きく異なる場合には、IOPSの比は制御できても、応答時間の比を制御することができない。一方、起動順序制御方式では、起動数制御方式よりも処理の負荷が高いが、ストレージシステム１１０内で、IOPSの比だけでなく応答時間の比も制御することができるため、キューへの負荷が異なるような状況でも、好適なコマンド起動制御が可能となる。したがって、ストレージシステム１１０の外部にQos制御部が有る場合（外部からI/Oの発行頻度を調整できる場合）には、起動数制御方式が好ましいと考えられ、一方、ストレージシステム１１０の外部にQos制御部が無いような構成には、起動順序制御方式が好ましいと考えられる。上記のフローによれば、対象ポートに接続されている少なくとも一つのホストがQos制御部を有しない場合には、起動順序制御方式が選択される。これにより、ストレージシステム１１０が適切にQosを提供することができる。
【０１１７】
以上、本発明の好適な実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【図面の簡単な説明】
【０１１８】
【図１】図１は、本発明の一実施形態に係る計算機システムの構成例を示す。
【図２】図２は、ホスト１０１ＡとＣＨＰ１１３Ａとの間のやり取りの説明図である。
【図３】図３は、ＬＭ１３３に記憶される情報及びコンピュータプログラムを示す。
【図４】図４は、起動数制御方式の概要を示す。
【図５】図５は、起動数制御方式に従うスケジューリングのフローを示す。
【図６】図６は、起動順序制御方式の概要を示す。
【図７】図７は、起動順序制御方式に従うスケジューリングの全体的なフローを示す。
【図８】図８は、起動対象コマンド数算出処理のフローを示す。
【図９】図９は、起動順序決定処理の概要のフローを示す。
【図１０】図１０は、起動順序決定処理の詳細のフローを示す。
【図１１】図１１Ａは、論理応答時間の和を構成する第１の要素のセットの例を示す。図１１Ｂは、論理応答時間の和を構成する第２の要素のセットの例を示す。図１１Ｃは、論理応答時間の和を構成する第３の要素のセットの例を示す。
【図１２】図１２Ａは、有効範囲の最大値の算出方法の説明で参照される図である。図１２Ｂは、有効範囲の最小値の算出方法の説明で参照される図である。
【図１３】図１３は、グローバル起動順番の決定方法の概要を示す。
【図１４】図１４は、起動順序決定処理の一例の説明で参照される図である。
【図１５】図１５は、制御方式選択処理のフローを示す。
【符号の説明】
【０１１９】
１１０…ストレージシステム
【図１】
2010102458.tif 000013
【図２】
2010102458.tif 000014
【図３】
2010102458.tif 000015
【図４】
2010102458.tif 000016
【図５】
2010102458.tif 000017
【図６】
2010102458.tif 000018
【図７】
2010102458.tif 000019
【図８】
2010102458.tif 000020
【図９】
2010102458.tif 000021
【図１０】
2010102458.tif 000022
【図１１】
2010102458.tif 000023
【図１２】
2010102458.tif 000024
【図１３】
2010102458.tif 000025
【図１４】
2010102458.tif 000026
【図１５】
2010102458.tif 000027