(57)【特許請求の範囲】
【請求項１】
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び前記情報処理装置と自装置が有する論理的な記憶装置との組合せに設定された優先度に基づいて決定される入出力処理数の上限値を算出する算出部と、
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、複数の判定対象の入出力処理のうち、１の入出力処理の負荷状況が変化したか否かを判定する判定部と、
前記判定部により負荷状況が変化したと判定された場合、前記１の入出力処理の前記優先度を変更して前記１の入出力処理の前記上限値を変更する変更部と、
前記情報処理装置から受付けた入出力処理数と、前記変更部により変更された前記上限値とに基づいて、入出力処理の実行順をスケジュールするスケジュール部と、
前記スケジュール部によりスケジュールされた前記実行順で入出力処理を実行する実行部と
を有することを特徴とするストレージ装置。
【請求項２】
前記判定部により負荷状況が変化したと判定された場合に、前記１の入出力処理を前記上限値に基づいて特定する特定部を更に有し、
前記変更部は前記特定部により特定された前記１の入出力処理の前記優先度を変更して前記１の入出力処理の上限値を変更する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記判定部は、入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けた場合に、前記１の入出力処理の負荷状況が変化したと判定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記判定部は、前記優先度を変更後、入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けているか否かを判定し、
前記変更部は、前記判定部により入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けていないと判定された場合に、前記優先度を変更前の値に変更する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記判定部は、複数の判定対象の入出力処理のうち、１の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有した場合に、該１の入出力処理の負荷状況が変化したと判定し、
前記変更部は、前記判定部により該１の入出力処理の負荷状況が変化したと判定された場合、該１の入出力処理の入出力処理数を決定する前記優先度を設定された値より低い値に変更する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記判定部は、前記優先度を設定された値より低い値に変更後、該１の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有しているか否かを判定し、
前記変更部は、前記判定部により該１の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有していないと判定された場合に、前記優先度を変更前の値に変更する
ことを特徴とする請求項５に記載のストレージ装置。
【請求項７】
前記ストレージ装置が、
前記情報処理装置から入出力処理を受付けるとともに、実行待ちの入出力処理があるか否かを判定する受信部を更に有し、
前記スケジュール部は、前記受信部により実行待ちの入出力処理があると判定された場合、前記所定の時間が経過した後に実行待ちの入出力処理の実行順をスケジュールする
ことを特徴とする請求項１に記載のストレージ装置。
【請求項８】
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び前記情報処理装置と自装置が有する論理的な記憶装置との組合せのそれぞれに設定された優先度を示す情報を記憶する記憶部と、
自装置と接続する情報処理装置、前記情報処理装置が使用する論理的な記憶装置が変化した場合に、前記記憶部が記憶する情報を更新する更新部と
を更に有することを特徴とする請求項１に記載のストレージ装置。
【請求項９】
ストレージ装置が、
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び前記情報処理装置と自装置が有する論理的な記憶装置との組合せに設定された優先度に基づいて決定される入出力処理数の上限値を算出し、
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、複数の判定対象の入出力処理のうち、１の入出力処理の負荷状況が変化したか否かを判定し、
負荷状況が変化したと判定した場合、前記１の入出力処理の前記優先度を変更して前記１の入出力処理の前記上限値を変更し、
前記情報処理装置から受付けた入出力処理数と、変更した前記上限値とに基づいて、入出力処理の実行順をスケジュールし、
スケジュールされた前記実行順で入出力処理を実行する
ことを特徴とするストレージ装置の制御方法。
【請求項１０】
ストレージ装置に、
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び前記情報処理装置と自装置が有する論理的な記憶装置との組合せに設定された優先度に基づいて決定される入出力処理数の上限値を算出し、
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、複数の判定対象の入出力処理のうち、１の入出力処理の負荷状況が変化したか否かを判定し、
負荷状況が変化したと判定した場合、前記１の入出力処理の前記優先度を変更して前記１の入出力処理の前記上限値を変更し、
前記情報処理装置から受付けた入出力処理数と、変更した前記上限値とに基づいて、入出力処理の実行順をスケジュールし、
スケジュールされた前記実行順で入出力処理を実行させる
ためのストレージ装置制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、ストレージ装置の制御方法及びストレージ装置制御プログラムに関する。
【背景技術】
【０００２】
従来、複数のサーバが１台のストレージ装置を共有するストレージシステムでは、サーバが要求した入出力処理がストレージ装置内で競合し、入出力処理ごとに安定したパフォーマンスを維持できない場合がある。
【０００３】
このようなことから、ストレージ装置は、サーバからの処理要求に対して優先順位をつけて処理を行うことで、入出力処理ごとに優先順位に従った適切な性能を維持させるＱｏＳ（Quality  of  Service）機能を有する場合がある。
【０００４】
ストレージ装置が有するＱｏＳ機能としては、サーバにより指定された優先度に基づきキューなどの内部リソースを割り当て、コマンドを処理する技術が知られている。一例として、サーバＡとサーバＢとの２台が、ストレージ装置を共有するストレージシステムにおいて、サーバＡが優先度を指定してコマンドを送信する場合を説明する。
【０００５】
ストレージ装置は、サーバＡから優先度が指定された場合、優先度の指定が無い処理に比べて例えば３倍の内部リソースを割当てる。この結果、ストレージ装置は、サーバＡから要求された入出力処理を、サーバＢから要求された入出力処理よりも優先して実行する。
【０００６】
また、ストレージ装置側でサーバやＬＵＮ（Logical  Unit  Number）ごとに目標性能や性能制限を設定することで、アプリケーションごとに優先順位に従った適切な性能を維持させる技術も知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２６４７５１号公報
【特許文献２】特開２００３−１２４９７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来の技術では、ストレージのＱｏＳ機能を容易に実現することができない場合がある。
【０００９】
具体的には、サーバＡが優先度を指定してコマンドを送信する場合、ストレージ装置は、サーバごとに相対的な性能を割当てる。言い換えると、優先度は、ストレージ装置を共有するサーバの台数に依存し、絶対的なリソースを分配することはできない。
【００１０】
このため、ストレージ装置を共有するサーバの台数が増えた場合、サーバＡが優先度を指定してコマンドを送信しても、ストレージ装置がサーバＡの処理に割当てるリソースは低下する。さらに、この場合、ストレージ装置とサーバとを連携する専用のソフトウェアも必要になる。
【００１１】
また、ストレージ装置側でサーバやＬＵＮごとに目標性能や性能制限を設定する場合、優先度の高いサーバだけがリソースを占有し、優先度の低いサーバは処理を実行できない場合が起こりうる。また、この場合、サーバごとＬＵＮごとに具体的な性能値を設定することが煩雑である。
【００１２】
１つの側面では、ストレージのＱｏＳ機能を容易に実現することができるストレージ装置、ストレージ装置の制御方法及びストレージ装置制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本件のストレージ装置は、情報処理装置、情報処理装置と自装置との間のインターフェースであるポート、及び前記情報処理装置と自装置が有する論理的な記憶装置との組合せに設定された優先度に基づいて決定される入出力処理数の上限値を算出する。また、ストレージ装置は、入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、複数の判定対象の入出力処理のうち、１の入出力処理の負荷状況が変化したか否かを判定する。また、ストレージ装置は、負荷状況が変化したと判定した場合、前記１の入出力処理の前記優先度を変更して前記１の入出力処理の前記上限値を変更する。また、ストレージ装置は、情報処理装置から受付けた入出力処理数と、変更した上限値とに基づいて、入出力処理の実行順をスケジュールする。そして、ストレージ装置は、スケジュールされた実行順で入出力処理を実行する。
【発明の効果】
【００１４】
ストレージのＱｏＳ機能を容易に実現することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例１に係るストレージシステムのハードウェア構成の一例を示す図である。
【図２】図２は、ストレージ装置により実行されるファームウェアにより実現される処理部の機能構成を示す機能ブロック図である。
【図３】図３は、実施例１に係るＳＣＳＩターゲット制御部の機能構成を示す機能ブロック図である。
【図４】図４は、優先順位と性能値との対応関係の一例を示す図である。
【図５】図５は、ＱｏＳ管理テーブルの一例を示す図である。
【図６】図６は、実施例１に係るＮミリ秒タイマスケジュール処理の処理手順を示すフローチャートである。
【図７】図７は、実施例１に係るＱｏＳ  ＩＯスケジュール処理の処理手順を示すフローチャートである。
【図８】図８は、実施例１に係るストレージ装置によるコマンド受信時の処理の処理手順を示すフローチャートである。
【図９】図９は、実施例１に係るストレージ装置による効果の一例を示す図である。
【図１０】図１０は、実施例２に係るＳＣＳＩターゲット制御部の機能構成を示す機能ブロック図である。
【図１１】図１１は、実施例２に係るストレージ装置によるＮミリ秒タイマスケジュール処理の処理手順を示すフローチャートである。
【図１２】図１２は、実施例２に係るストレージ装置による限界値設定調整処理の処理手順を示すフローチャートである。
【図１３】図１３は、実施例２に係るストレージ装置による効果の一例を示す図である。
【図１４】図１４は、実施例３に係るストレージ装置による限界値設定調整処理の処理手順を示すフローチャートである。
【図１５】図１５は、実施例３に係るストレージ装置による効果の一例を示す図である。
【図１６】図１６は、実施例４に係るストレージ装置による効果の一例を示す図である。
【図１７】図１７は、ストレージ装置制御プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示するストレージ装置、ストレージ装置の制御方法及びストレージ装置制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１７】
［実施例１に係るストレージシステムの構成］
図１は、実施例１に係るストレージシステムの構成の一例を示す図である。図１に示すように、ストレージシステム１は、ホスト１０ａ、ホスト１０ｂ及びストレージ装置１００を有する。また、ストレージシステム１において、ストレージ装置１００は、ホスト１０ａ及びホスト１０ｂと接続される。なお、ストレージ装置１００と接続するホストの数は図示に限定されるものではなく、変更可能である。
【００１８】
［ホストの構成］
続いて、図１を用いて、ホスト１０ａ及びホスト１０ｂの構成を説明する。ホスト１０ａ及びホスト１０ｂは、サーバなどの情報処理装置である。ホスト１０ａは、ＦＣ（Fibre  Channel）−Ａ（Adapter）１１ａ、ＦＣ−Ａ１２ａ、ｉＳＣＳＩ（Small  Computer  System  Interface）−Ａ１３ａ、ｉＳＣＳＩ−Ａ１４ａを有する。ＦＣ−Ａは通常ＦＣ−ＨＢＡ（Host  Bus  Adapter）の形態であり、ｉＳＣＳＩ−Ａは通常ＮＩＣ（Network  Interface  Card）を使用しそこでｉＳＣＳＩプロトコルを動作させる形態である。
【００１９】
ＦＣ−Ａ１１ａは、後述するＣＭ（Controller  Module）２００ａ内のＦＣ−ＣＡ２０１ａとＦＣで接続するインターフェースである。また、同様に、ＦＣ−Ａ１２ａは、後述するＣＭ２００ｂ内のＦＣ−ＣＡ２０１ｂとＦＣで接続するインターフェースである。また、ｉＳＣＳＩ−Ａ１３ａは、後述するＣＭ２００ａ内のｉＳＣＳＩ−ＣＡ２０２ａとｉＳＣＳＩで接続するインターフェースである。同様に、ｉＳＣＳＩ−Ａ１４ａは、後述するＣＭ２００ｂ内のｉＳＣＳＩ−ＣＡ２０２ｂとｉＳＣＳＩで接続するインターフェースである。
【００２０】
ホスト１０ｂは、ＦＣ−Ａ１１ｂ、ＦＣ−Ａ１２ｂ、ｉＳＣＳＩ−Ａ１３ｂ、ｉＳＣＳＩ−Ａ１４ｂを有する。ＦＣ−Ａ１１ｂは、ＦＣ−Ａ１１ａに対応し、ＦＣ−Ａ１２ｂは、ＦＣ−Ａ１２ａに対応する。また、ｉＳＣＳＩ−Ａ１３ｂは、ｉＳＣＳＩ−Ａ１３ａに対応し、ｉＳＣＳＩ−Ａ１４ｂは、ｉＳＣＳＩ−Ａ１４ａに対応する。なお、以下の説明では、ホスト１０ａとホスト１０ｂとを区別せず一般化して称する場合には、ホスト１０として記載する。
【００２１】
［実施例１に係るストレージ装置の構成］
続いて、図１を用いて、実施例１に係るストレージ装置１００の構成を説明する。実施例１に係るストレージ装置１００は、ＨＤＤ（Hard  Disk  Drive）１０１ａ〜１０１ｄと、ＣＭ２００ａ、２００ｂを有する。ＨＤＤ１０１ａ〜１０１ｄは、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）を構成し、ユーザデータを記憶する。なお、ストレージ装置１００が有するＨＤＤ、ＣＭの数は図示したものに限定されるものではなく、変更可能である。また、ストレージ装置１００は、ＨＤＤ１０１ａ〜１０１ｄを論理的に分割したＬＵＮとして使用される。このＬＵＮは、それぞれが論理的な１台のＨＤＤとしてホスト１０ａ、１０ｂにより認識される。
【００２２】
ＣＭ２００ａは、ＦＣ−ＣＡ２０１ａ、ｉＳＣＳＩ−ＣＡ２０２ａ、ＳＡＳ（Serial  Attached  SCSI）２０３ａ、メモリ２１０ａ及びＣＰＵ（Central  Processing  Unit）２２０ａを有する。
【００２３】
ＦＣ−ＣＡ２０１ａは、ホスト１０ａ及びホスト１０ｂとＦＣで接続するインターフェースである。ｉＳＣＳＩ−ＣＡ２０２ａは、ホスト１０ａ及びホスト１０ｂとｉＳＣＳＩで接続するインターフェースである。ＳＡＳ２０３ａは、ＨＤＤ１０１ａ〜１０１ｄと、ＳＡＳで接続するインターフェースである。なお、以下の説明では、ＦＣ−ＣＡ２０１及びｉＳＣＳＩ−ＣＡ２０２のことを一般化して称する場合には適宜ポートと記載する。
【００２４】
メモリ２１０ａは、例えば、ＲＡＭなどの半導体メモリ素子であり、キャッシュ域２１１ａと制御域２１２ａとを有する。キャッシュ域２１１ａは、ホスト１０ａまたはホスト１０ｂと、ＨＤＤ１０１ａ〜１０１ｄのいずれかとの間でやり取りされるデータを一時的に保持する。制御域２１２ａは、ストレージ装置１００が実行する各種の処理に要する情報を保持する。また、制御域２１２ａは各種プログラム等も格納されている。
【００２５】
ＣＰＵ２２０ａは、演算や制御などの各種処理を行う電子回路である。
【００２６】
ＣＭ２００ｂは、ＦＣ−ＣＡ２０１ｂ、ｉＳＣＳＩ−ＣＡ２０２ｂ、ＳＡＳ２０３ｂ、メモリ２１０ｂ及びＣＰＵ２２０ｂを有する。ＦＣ−ＣＡ２０１ｂは、ＦＣ−ＣＡ２０１ａに対応し、ｉＳＣＳＩ-ＣＡ２０２ｂは、ｉＳＣＳＩ-ＣＡ２０２ａに対応し、ＳＡＳ２０３ｂは、ＳＡＳ２０３ａに対応する。また、メモリ２１０ｂは、メモリ２１０ａに対応し、ＣＰＵ２２０ｂは、ＣＰＵ２２０ａに対応する。
【００２７】
このようなストレージシステム１では、ストレージ装置１００のＣＰＵ２２０ａ、２２０ｂは、ファームウェアによって以下の処理を実行する。すなわち、ストレージ装置１００は、ホスト１０と、ポートと、ＬＵＮとに設定された優先度に基づいて決定される入出力処理数の上限値を所定の時間毎に算出する。また、ストレージ装置１００は、ホスト１０から受付けた入出力処理数と、算出された上限値とに基づいて、入出力処理の実行順をスケジュールする。そして、ストレージ装置１００は、スケジュールされた入出力処理を実行する。このようにして、ストレージ装置１００は、ホストＩＯの状況やホストの接続環境の変化に応じて、ストレージ性能を最適に制御する。
【００２８】
［ファームウェアにより実現される処理部の機能構成］
次に、図２を用いて、ストレージ装置１００により実行されるファームウェアにより実現される処理部の機能構成を説明する。図２は、ストレージ装置により実行されるファームウェアにより実現される処理部の機能構成を示す機能ブロック図である。なお、ストレージ装置１００により実行されるファームウェアにより実現される処理部３００は、メモリ２１０ａ及びメモリ２１０ｂと、ＣＰＵ２２０ａ及びＣＰＵ２２０ｂとが協働して実現される。
【００２９】
図２に示すように、処理部３００は、ＦＣ  Ｉ／Ｆ制御部３０１、ｉＳＣＳＩ  Ｉ／Ｆ制御部３０２、ＳＣＳＩターゲット制御部３０３、ＳＣＳＩコマンド制御部３０４、リソース制御部３０５、キャッシュ制御部３０６、ＲＡＩＤ制御部３０７を有する。また、処理部３００は、ディスク制御部３０８、ＳＡＳ  Ｉ／Ｆ制御部３０９、メモリ制御部３１０、カーネル部３１１、システム構成制御部３１２、保守インターフェース制御部３１３を有する。
【００３０】
ＦＣ  Ｉ／Ｆ制御部３０１は、ホストとＦＣ接続する場合のＦＣプロトコルチップの制御を行う。ｉＳＣＳＩ  Ｉ／Ｆ制御部３０２は、ホストとｉＳＣＳＩ接続する場合のｉＳＣＳＩプロトコルチップの制御を行う。
【００３１】
ＳＣＳＩターゲット制御部３０３は、ＳＣＳＩターゲットの制御を行う。例えば、ＳＣＳＩターゲット制御部３０３は、ホスト管理、ＬＵＮ管理、コマンド実行管理、コマンド以外の異常系イベント管理などを行う。なお、ＳＣＳＩターゲット制御部３０３の詳細な機能については後述する。
【００３２】
ＳＣＳＩコマンド制御部３０４は、ＳＣＳＩコマンド種ごとの制御を行う。リソース制御部３０５は、全ＣＭをまたいでの論理ボリューム管理、ホストパス管理、負荷管理を行う。キャッシュ制御部３０６は、キャッシュメモリの管理を行う。
【００３３】
ＲＡＩＤ制御部３０７は、ＲＡＩＤグループの管理を行う。ディスク制御部３０８は、ディスクコマンド制御を行う。ＳＡＳ  Ｉ／Ｆ制御部３０９は、ディスクとＳＡＳ接続するプロトコルチップの制御を行う。
【００３４】
メモリ制御部３１０は、各制御部が使用する制御メモリを管理する。カーネル部３１１は、基本ソフト部であり、各制御部の下位に位置する。システム構成制御部３１２は、ストレージ装置１００の構成情報を管理する。保守インターフェース制御部３１３は、保守用のユーザインターフェースを制御する。
【００３５】
［実施例１に係るＳＣＳＩターゲット制御部の機能構成］
次に、図３を用いて、ＳＣＳＩターゲット制御部３０３の機能構成を説明する。図３は、ＳＣＳＩターゲット制御部の機能構成を示す機能ブロック図である。図３に示すように、ＳＣＳＩターゲット制御部３０３は、ＱｏＳ管理テーブル５０１、待ちキュー格納部５０２、性能設定部５０３、コマンド受信部５０４、算出部５０５、スケジュール部５０６、実行部５０７を有する。
【００３６】
ＱｏＳ管理テーブル５０１は、対象ごとに、「優先順位」、「性能値」、実行可能な入出力処理数、実行した入出力処理数を対応付けた情報を記憶する。ここでは、ＱｏＳ管理テーブル５０１の詳細な説明をする前に、まず、図４を用いて「優先順位」と「性能値」との対応関係について説明する。
【００３７】
図４は、優先順位と性能値との対応関係の一例を示す図である。図４に示すように、「優先順位」は、優先度を示し、例えば、１から１５までの１５段階のレベルが設定される。なお、優先順位のレベルは、例示に過ぎず、１から１５の１５段階に限定されるものではない。
【００３８】
また、「優先順位」の段階ごとに「性能値」が対応付けられる。言い換えると、「優先順位」は、性能制限を示す。この「性能値」として、単位時間当たりの通信量である（ＭＢ／ｓ）、単位時間当たりに実行可能な入出力処理数であるＩＯＰＳ（Input  Output  Per  Second）が用いられる。
【００３９】
図４に示す例では、「優先順位」が「１」に設定される場合、単位時間当たりの通信量が「７５０（ＭＢ／ｓ）」であり、単位時間当たりに「３７５００」の入出力処理を実行することを示す。また、同様に、「優先順位」が「３」に設定される場合、単位時間当たりの通信量が「６５０（ＭＢ／ｓ）」であり、単位時間当たりに「３２５００」の入出力処理を実行することを示す。
【００４０】
次に、図５を用いてＱｏＳ管理テーブル５０１の一例を説明する。図５は、ＱｏＳ管理テーブルの一例を示す図である。図５に示すように、ＱｏＳ管理テーブル５０１は、「対象」、「優先順位」、「Ｎミリ秒ＩＯ数」、「Ｎミリ秒ブロック数」、「限界ＩＯ数」、「限界ブロック数」、「現ＩＯ数」及び「現ブロック数」を対応付けた情報を記憶する。
【００４１】
ここで、ＱｏＳ管理テーブル５０１が記憶する「対象」は、優先順位を設定する対象を示す。ここで、「ポート」、「ホスト」、「ホストとＬＵＮとの組合せ」のそれぞれが優先順位を設定する対象となる。例えば、「対象」には、「ＦＣ−ＣＡ２０１ａ」、「ホスト１０ａ」、「ホスト１０ａ−ＬＵＮ−Ａ」などが格納される。なお、以下の説明では、「対象」として「ホストとＬＵＮとの組合せ」を指す場合については、単に、「ＬＵＮ」として適宜記載する。
【００４２】
「優先順位」は、対象に設定された優先度を示す。ここでは、優先順位のレベルが１から１５までの１５段階のいずれかのレベルが設定されるものとする。例えば、「優先順位」には、「３」、「５」、「７」などのレベルが格納される。
【００４３】
「Ｎミリ秒ＩＯ数」は、所定の時間の間に実行可能なＩＯ数を示す。ここで、所定の時間として、例えば１０ミリ秒が設定される。また、「Ｎミリ秒ＩＯ数」には、例えば、「３２５」、「２７５」、「２２５」などの値が格納される。
【００４４】
「Ｎミリ秒ブロック数」は、所定の時間の間に書込み可能なブロック数を示す。この、ブロック数は、１ブロックを５１２Ｂｙｔｅとして、単位時間当たりの通信量（ＭＢ／ｓ）から算出される。なお、ここでは、所定の時間として、例えば１０ミリ秒が設定される。すなわち、「Ｎミリ秒ブロック数」には、１０ミリ秒間に書込み可能なブロック数として、例えば、「１３３１２」、「１１２６４」、「９２１６」などの値が格納される。
【００４５】
「限界ＩＯ数」は、現時点での実行可能なＩＯ数の上限値を示す。この限界ＩＯ数は、「Ｎミリ秒ＩＯ数」に「Ｎミリ秒が経過した回数（ｎ）」を乗じた値から、後述する「現ＩＯ数」を減算することによって算出される。例えば、「限界ＩＯ数」には、「３２５×ｎ−ａ」、「２７５×ｎ−ｂ」、「２２５×ｎ−ｃ」などの値が格納される。なお、「ｎ」は、「Ｎミリ秒が経過した回数」であり、「ａ」から「ｃ」は、後述するように、対応する「現ＩＯ数」の値である。
【００４６】
「限界ブロック数」は、現時点での書込み可能なブロック数の上限値を示す。この限界ブロック数は、「Ｎミリ秒ブロック数」に「Ｎミリ秒が経過した回数（ｎ）」を乗じた値から、後述する「現ブロック数」を減算することによって算出される。例えば、「限界ブロック数」には、「１３３１２×ｎ−Ａ」、「１１２６４×ｎ−Ｂ」、「９２１６×ｎ−Ｃ」などの値が格納される。なお、「ｎ」は、「Ｎミリ秒が経過した回数」であり、「Ａ」から「Ｃ」は、後述するように、対応する「現ブロック数」の値である。
【００４７】
「現ＩＯ数」は、所定の時間までに要求されたＩＯ数の累積値を示す。例えば、「現ＩＯ数」には、「ａ」、「ｂ」、「ｃ」などが格納される。「現ブロック数」は、所定の時間までに要求されたブロック数の累積値を示す。例えば、「現ブロック数」には、「Ａ」、「Ｂ」、「Ｃ」などが格納される。
【００４８】
図５に示す例では、ＱｏＳ管理テーブル５０１は、「ポート」の優先順位が「３」であり、「Ｎミリ秒ＩＯ数」が「３２５」であり、「Ｎミリ秒ブロック数」が「１３３１２」であることを示す。また、ＱｏＳ管理テーブル５０１は、「限界ＩＯ数」が「３２５×ｎ−ａ」であり、「限界ブロック数」が「１３３１２×ｎ−Ａ」であり、「現ＩＯ数」が「ａ」であり、「現ブロック数」が「Ａ」であることを示す。
【００４９】
なお、ＱｏＳ管理テーブル５０１が記憶する「対象」、「優先順位」、「Ｎミリ秒ＩＯ数」、「Ｎミリ秒ブロック数」は、後述する性能設定部５０３により初期設定される値である。また、ＱｏＳ管理テーブル５０１が記憶する「限界ＩＯ数」、「限界ブロック数」、「現ＩＯ数」及び「現ブロック数」はＮミリ秒ごとに更新される値である。
【００５０】
待ちキュー格納部５０２は、キューであり、コマンド受信部５０４が受信したコマンドのうち、所定時間経過後にスケジュールされるコマンドを格納する。また、この待ちキュー格納部５０２は、ホストとＬＵＮとの組合せごとに設けられる。
【００５１】
性能設定部５０３は、ＱｏＳ管理テーブル５０１が記憶する情報のうち、「対象」、「優先順位」、「Ｎミリ秒ＩＯ数」、「Ｎミリ秒ブロック数」のそれぞれに管理者から受付けた値を設定する。なお、管理者は、ホストの性能やホストが実行するアプリケーションなどを加味して優先順位を設定する。
【００５２】
また、性能設定部５０３は、ストレージ装置１００に接続するホスト、ホストが使用するＬＵＮの組合せが変化した場合に、ＱｏＳ管理テーブル５０１が記憶する情報を更新する。
【００５３】
コマンド受信部５０４は、いずれからのホストからコマンドを受付けるとともに、実行待ちのコマンドがあるか否かを判定する。例えば、コマンド受信部５０４は、実行待ちのコマンドがあると判定した場合、受信したコマンドを待ちキュー格納部５０２に格納させる。また、コマンド受信部５０４は、実行待ちのコマンドがないと判定した場合、後述するスケジュール部５０６に受信したコマンドの実行順をスケジュールさせる。
【００５４】
算出部５０５は、ホスト１０、ポート及びＬＵＮごとに設定された優先順位に基づいて決定される限界ＩＯ数と限界ブロック数とを所定の時間毎に算出する。ここでは、算出部５０５は、１０ミリ秒ごとに限界ＩＯ数と限界ブロック数とを算出するものとして説明する。
【００５５】
例えば、算出部５０５は、１０ミリ秒ごとに、限界ＩＯ数の値に、Ｎミリ秒ＩＯ数を加算する。また、算出部５０５は、１０ミリ秒ごとに、限界ブロック数の値に、Ｎミリ秒ブロック数を加算する。算出部５０５は、算出した限界ＩＯ数と限界ブロック数とをＱｏＳ管理テーブル５０１に格納させる。
【００５６】
スケジュール部５０６は、ホストから受付けたコマンド数と、算出部５０５により算出された限界ＩＯ数及び限界ブロック数とに基づいて、コマンドの実行順をスケジュールする。例えば、スケジュール部５０６は、所定の時間が経過するごとに、コマンドの実行順をスケジュールする。
【００５７】
スケジュール部５０６は、マークしたホストとマークしたＬＵＮとを復元する。そして、スケジュール部５０６は、復元したホストとＬＵＮとの組合せから順に、以下の処理を実行する。なお、ホストのマーク及びＬＵＮのマークについては後述する。
【００５８】
まず、スケジュール部５０６は、ホストから受付けたコマンド数が、算出部５０５により算出されたホスト、ポート、ＬＵＮそれぞれの限界ＩＯ数及び限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部５０６は、受付けたコマンド数が限界ＩＯ数及び限界ブロック数以内であり、処理可能であると判定した場合、実行部５０７にコマンドを起動させる。
【００５９】
また、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「現ＩＯ数」に、起動したコマンド分のＩＯ数を加算した値を格納させる。同様に、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「現ブロック数」に、起動したコマンド分のブロック数を加算した値を格納させる。
【００６０】
また、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「限界ＩＯ数」に、起動したコマンド分のＩＯ数を減算した値を格納させる。同様に、スケジュール部５０６は、処理可能であると判定した場合、ＱｏＳ管理テーブル５０１が記憶する「限界ブロック数」に、起動したコマンド分のブロック数を減算した値を格納させる。
【００６１】
一方、スケジュール部５０６は、受付けたコマンド数が限界ＩＯ数及び限界ブロック数以内ではないと判定した場合、所定の時間が経過した後に、ホストから受付けたコマンド数が、新たに算出された限界ＩＯ数及び限界ブロック数以内であるか否かを判定する。
【００６２】
例えば、スケジュール部５０６は、受付けたコマンド数がポートの限界ＩＯ数及び限界ブロック数以内ではないと判定した場合、ホストとＬＵＮの組合せをマークし、所定の時間が経過後に、マークしたホストとＬＵＮの組合せからスケジュールを実行する。また、例えば、スケジュール部５０６は、ポートの限界ＩＯ数及び限界ブロック数以内ではあるが、ホストの限界ＩＯ数及び限界ブロック数以内ではないと判定した場合、ＬＵＮをマークする。そして、スケジュール部５０６は、次のＬＵＮをセットし、ホストから受付けたコマンド数が、新たに算出された限界ＩＯ数及び限界ブロック数以内であるか否かを判定する。ここで、次のＬＵＮが無い場合、スケジュール部５０６は、次のホストをセットし、受付けたコマンド数が、新たに算出された限界ＩＯ数及び限界ブロック数以内であるか否かを判定する。
【００６３】
また、スケジュール部５０６は、コマンド受信部５０４により実行待ちのコマンドがないと判定された場合、所定の時間が経過するのを待つことなくコマンドの実行順をスケジュールする。例えば、スケジュール部５０６は、ホストから受付けたコマンド数が、算出部５０５により算出されたホスト、ポート、ＬＵＮそれぞれの限界ＩＯ数及び限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部５０６は、ホストから受付けたコマンド数が、ポート、ホスト、ＬＵＮのいずれかの限界ＩＯ数及び限界ブロック数以内で処理可能ではないと判定した場合、コマンドを待ちキュー格納部５０２に格納する。そして、スケジュール部５０６は、所定の時間が経過した後に、ホストから受付けたコマンド数が、新たに算出された限界ＩＯ数及び限界ブロック数以内であるか否かを判定する。
【００６４】
実行部５０７は、スケジュール部５０６によりスケジュールされた実行順でコマンドを待ちキュー格納部５０２からデキューし、コマンドを起動して入出力処理を実行する。
【００６５】
なお、ＳＣＳＩターゲット制御部３０３の各機能は、メモリ２１０ａ及びメモリ２１０ｂと、ＣＰＵ２２０ａ及びＣＰＵ２２０ｂとが協働して実現される。
【００６６】
［実施例１に係るストレージ装置よる処理の処理手順］
次に図６から図８を用いて、実施例１に係るストレージ装置１００による処理の処理手順を説明する。ここでは、図６を用いて、Ｎミリ秒タイマスケジュール処理の処理手順について説明し、図７を用いて、ＱｏＳ  ＩＯスケジュール処理の処理手順について説明し、図８を用いて、ストレージ装置１００によるコマンド受信時の処理の処理手順を説明する。
【００６７】
（Ｎミリ秒タイマスケジュール処理）
図６は、Ｎミリ秒タイマスケジュール処理の処理手順を示すフローチャートである。図６に示すように、算出部５０５は、ポート限界値を加算する（ステップＳ１０１）。また、算出部５０５は、全ホスト限界値を加算する（ステップＳ１０２）。また、算出部５０５は、全ＬＵＮ限界値を加算する（ステップＳ１０３）。そして、スケジュール部５０６は、ＱｏＳ  ＩＯスケジュール処理を実行する（ステップＳ１０４）。
【００６８】
（ＱｏＳ  ＩＯスケジュール処理）
図７は、ＱｏＳ  ＩＯスケジュール処理の処理手順を示すフローチャートである。Ｎミリ秒タイマスケジュール処理のステップＳ１０４の詳細処理である。
【００６９】
図７に示すように、スケジュール部５０６は、マークしたホストを復元する（ステップＳ２０１）。続いて、スケジュール部５０６は、マークしたＬＵＮを復元する（ステップＳ２０２）。そして、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがあるか否かを判定する（ステップＳ２０３）。
【００７０】
ここで、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがあると判定した場合（ステップＳ２０３、Ｙｅｓ）、コマンド数がポートの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ２０４）。そして、スケジュール部５０６は、コマンド数がポートの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ２０４、Ｙｅｓ）、コマンド数がホストの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ２０５）。
【００７１】
ここで、スケジュール部５０６は、コマンド数がホストの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ２０５、Ｙｅｓ）、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ２０６）。そして、スケジュール部５０６は、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ２０６、Ｙｅｓ）、ポートの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ２０７）。
【００７２】
また、スケジュール部５０６は、ホストの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ２０８）。続いて、スケジュール部５０６は、ＬＵＮの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ２０９）。そして、実行部５０７は、コマンドを起動する（ステップＳ２１０）。また、コマンドを起動した後、実行部５０７は、コマンドを待ちキュー格納部５０２からデキューする（ステップＳ２１１）。この処理の後、ストレージ装置１００は、ステップＳ２０３に移行する。
【００７３】
また、スケジュール部５０６は、コマンド数がポートの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ２０４、Ｎｏ）、ホストとＬＵＮとをマークし（ステップＳ２１２）、処理を終了する。また、スケジュール部５０６は、コマンド数がホストの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ２０５、Ｎｏ）、ＬＵＮをマークし（ステップＳ２１３）、ステップＳ２１６に移行する。
【００７４】
また、スケジュール部５０６は、待ちキュー格納部５０２内に次のコマンドがないと判定した場合（ステップＳ２０３、Ｎｏ）、ステップＳ２１４に移行する。また、スケジュール部５０６は、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ２０６、Ｎｏ）、ステップＳ２１４に移行する。
【００７５】
ステップＳ２１４において、スケジュール部５０６は、次のＬＵＮをセットする。そして、スケジュール部５０６は、次のＬＵＮがマークしたＬＵＮと同じＬＵＮであるか否かを判定する（ステップＳ２１５）。ここで、スケジュール部５０６は、次のＬＵＮがマークしたＬＵＮと同じＬＵＮではないと判定した場合（ステップＳ２１５、Ｎｏ）、ステップＳ２０３に移行する。
【００７６】
一方、スケジュール部５０６は、次のＬＵＮがマークしたＬＵＮと同じＬＵＮであると判定した場合（ステップＳ２１５、Ｙｅｓ）、次のホストをセットする（ステップＳ２１６）。続いて、スケジュール部５０６は、次のホストがマークしたホストと同じホストであるか否かを判定する（ステップＳ２１７）。ここで、スケジュール部５０６は、次のホストがマークしたホストと同じホストではないと判定した場合（ステップＳ２１７、Ｎｏ）、ステップＳ２０２に移行する。一方、スケジュール部５０６は、次のホストがマークしたホストと同じホストであると判定した場合（ステップＳ２１７、Ｙｅｓ）、処理を終了する。
【００７７】
（コマンド受信時の処理）
図８は、ストレージ装置によるコマンド受信時の処理の処理手順を示すフローチャートである。ストレージ装置１００は、例えば、コマンドを受信したことを契機にこの処理を実行する。
【００７８】
図８に示すように、コマンド受信部５０４は、受信したコマンドのホストとＬＵＮとの間で待ちＩＯがないか否かを判定する（ステップＳ３０１）。ここで、コマンド受信部５０４により受信したコマンドのホストとＬＵＮとの間で待ちＩＯがないと判定された場合（ステップＳ３０１、Ｙｅｓ）、スケジュール部５０６は、以下の処理を実行する。すなわち、スケジュール部５０６は、コマンド数がポートの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ３０２）。そして、スケジュール部５０６は、コマンド数がポートの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ３０２、Ｙｅｓ）、コマンド数がホストの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ３０３）。
【００７９】
ここで、スケジュール部５０６は、コマンド数がホストの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ３０３、Ｙｅｓ）、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内であるか否かを判定する（ステップＳ３０４）。そして、スケジュール部５０６は、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内であると判定した場合（ステップＳ３０４、Ｙｅｓ）、ポートの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ３０５）。
【００８０】
また、スケジュール部５０６は、ホストの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ３０６）。続いて、スケジュール部５０６は、ＬＵＮの限界値からコマンド分のＩＯ数分とブロック数分とを減算する（ステップＳ３０７）。また、実行部５０７は、コマンドを起動する（ステップＳ３０８）。ストレージ装置１００は、ステップＳ３０８の終了後、処理を終了する。
【００８１】
コマンド受信部５０４は、受信したコマンドのホストとＬＵＮとの間で待ちＩＯがあると判定した場合（ステップＳ３０１、Ｎｏ）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がポートの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ３０２、Ｎｏ）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がホストの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ３０３、Ｎｏ）、ステップＳ３０９に移行する。また、スケジュール部５０６は、コマンド数がＬＵＮの限界ＩＯ数、限界ブロック数以内ではないと判定した場合（ステップＳ３０４、Ｎｏ）、ステップＳ３０９に移行する。そして、コマンド受信部５０４は、ステップＳ３０９において、コマンドを待ちキュー格納部５０２にエンキューし、処理を終了する。
【００８２】
［実施例１の効果］
このように、実施例１に係るストレージ装置１００は、ストレージのＱｏＳ機能を容易に実現することができる。次に、図９を用いて、実施例１に係るストレージ装置１００による効果の一例を説明する。図９は、実施例１に係るストレージ装置による効果の一例を示す図である。図９に示す例では、ホストＡがＬＵＮ−Ａ、ＬＵＮ−Ｂにアクセス可能であり、ホストＢがＬＵＮ−Ｃにアクセス可能である場合を説明する。また、ここでは、ホストＡの性能制限が２００（ＭＢ／ｓ）、ホストＢの性能制限が１５０（ＭＢ／ｓ）であるものと仮定する。また、ＬＵＮ−Ａの性能制限が１５０（ＭＢ／ｓ）、ＬＵＮ−Ｂの性能制限が１００（ＭＢ／ｓ）、ＬＵＮ−Ｃの性能制限が１００（ＭＢ／ｓ）、ポートの性能制限が２５０（ＭＢ／ｓ）であるものと仮定する。
【００８３】
まず、ホストＡのみが、ＬＵＮ−Ａのみを１５０（ＭＢ／ｓ）の通信量で使用する場合を説明する。この通信量は、ＬＵＮ−Ａの性能１５０（ＭＢ／ｓ）、ホストＡの性能制限２００（ＭＢ／ｓ）、ポートの性能制限２５０（ＭＢ／ｓ）のいずれにも到達しない。このため、スケジュール部５０６は、受付けたコマンドを所定の時間を待つことなく、性能制限までスケジュールする。この結果、ストレージ装置１００では、ホストＡによるＬＵＮ−Ａへのアクセスを１５０（ＭＢ／ｓ）で処理できる。
【００８４】
次に、ホストＡのみが、ＬＵＮ−Ａを１５０（ＭＢ／ｓ）の通信量で使用し、ＬＵＮ−Ｂを１００（ＭＢ／ｓ）の通信量で使用する場合を説明する。この通信量の和は、ＬＵＮ−Ａの性能１５０（ＭＢ／ｓ）、ＬＵＮ−Ｂの性能１００（ＭＢ／ｓ）、ポートの性能制限２５０（ＭＢ／ｓ）のいずれにも到達しないが、ホストＡの性能制限２００（ＭＢ／ｓ）を越える。このため、ホストＡから受付けたコマンドは、その場でスケジュールされるものと、待ちキュー格納部５０２に格納した後、スケジュール部５０６により、Ｎミリ秒タイマスケジュールによりスケジュールされるものが出てくる。
【００８５】
この結果、ＬＵＮ−ＡとＬＵＮ−Ｂのそれぞれの性能はおおよそ以下の通り制限される。ホストＡによるＬＵＮ−Ａへのアクセスは、２００（ＭＢ／ｓ）×１５０／（１５０＋１００）＝１２０（ＭＢ／ｓ）、ホストＡによるＬＵＮ−Ｂへのアクセスは、２００（ＭＢ／ｓ）×１００／（１５０＋１００）＝８０（ＭＢ／ｓ）となる。
【００８６】
次に、ホストＡが、ＬＵＮ−Ａを１５０（ＭＢ／ｓ）の通信量で使用し、ＬＵＮ−Ｂを１００（ＭＢ／ｓ）の通信量で使用し、ホストＢがＬＵＮ−Ｃを１００（ＭＢ／ｓ）の通信量で使用する場合を説明する。この通信量の総和３５０（ＭＢ／ｓ）は、ポートの性能制限２５０（ＭＢ／ｓ）を超える。このため、ホストＡ及びホストＢから受付けたコマンドは、その場でスケジュールされるものと、待ちキュー格納部５０２に格納した後、スケジュール部５０６により、Ｎミリ秒タイマスケジュールによりスケジュールされるものが出てくる。
【００８７】
この結果、ストレージ装置１００では、例えばおおよそ以下のようなそれぞれの性能で処理を実行する。すなわち、ホストＡによるＬＵＮ−Ａへのアクセスは、２５０（ＭＢ／ｓ）×１５０／（１５０＋１００＋１００）＝１０７（ＭＢ／ｓ）となる。また、ホストＡによるＬＵＮ−Ｂへのアクセスは、２５０（ＭＢ／ｓ）×１００／（１５０＋１００＋１００）＝７１（ＭＢ／ｓ）となる。また、ホストＢによるＬＵＮ−Ｃへのアクセスは、２５０（ＭＢ／ｓ）×１００／（１５０＋１００＋１００）＝７１（ＭＢ／ｓ）となる。
【００８８】
このように、実施例１に係るストレージ装置１００は、使用されるホストとＬＵＮとの組合せの性能レベルに従って、ストレージ装置１００の性能を配分し、ストレージのＱｏＳ機能を容易に実現することができる。
【実施例２】
【００８９】
実施例１では、使用されるホストとＬＵＮとの組合せの性能レベルに従って、ストレージ装置１００の性能を配分する例について説明した。ところで、ストレージ装置１００において、ある時間帯では特定のホスト、あるいは特定のＬＵＮのみ使用される場合がある。このようなことから、ホストやＬＵＮの使用状況に応じて、性能の配分を動的に調整してもよいものである。
【００９０】
そこで、実施例２では、ストレージ装置１００が、Ｎミリ秒タイマスケジュール内の処理で、限界値を変更する場合を説明する。例えば、ストレージ装置１００は、所定の時間継続して、実際のＩ／Ｏの性能がストレージ全体の性能を下回り続けたことを検出した場合、限界までＩ／ＯがあったＬＵＮなどで、設定された性能レベルを格上げする。
【００９１】
［実施例２に係るストレージシステム及びストレージ装置の構成］
実施例２に係るストレージシステムの構成は、ストレージ装置が実行するファームウェアにおいて、ＳＣＳＩターゲット制御部の機能構成が異なる点を除いて、図１に示した実施例１に係るストレージシステムの構成と同様である。このため、実施例２に係るストレージシステムの構成、実施例２に係るストレージ装置の構成については、説明を省略する。
【００９２】
［実施例２に係るＳＣＳＩターゲット制御部の機能構成］
次に、図１０を用いて、実施例２に係るＳＣＳＩターゲット制御部の機能構成を説明する。図１０は、実施例２に係るＳＣＳＩターゲット制御部の機能構成を示す機能ブロック図である。なお、実施例１に係るＳＣＳＩターゲット制御部と同様の構成については同一の符号を付与し、説明を省略する。
【００９３】
図１０に示すように、実施例２に係るＳＣＳＩターゲット制御部６００は、ＱｏＳ管理テーブル５０１、待ちキュー格納部５０２、性能設定部５０３、コマンド受信部５０４、算出部５０５、スケジュール部５０６、実行部５０７、判定部６０２、変更部６０３を有する。
【００９４】
判定部６０２は、コマンドの実行数と、ストレージ装置１００の全体性能とに基づいて、入出力処理の負荷状況が変化したか否かを判定する。なお、ここでいうストレージ装置１００の全体性能とは、ストレージ装置１００の物理的な性能であり、例えば、ＨＤＤ１０１ａ〜１０１ｄの転送速度、ＲＡＩＤの容量、ＣＰＵの処理効率などストレージ装置１００が有する処理容量を示す。
【００９５】
例えば、判定部６０２は、コマンドの実行数が、ストレージ装置１００の全体性能に基づく実行可能な入出力処理数を所定の時間継続して下回り続けた場合に、特定の入出力処理の負荷状況が変化したと判定する。
【００９６】
一例を挙げると、判定部６０２は、ＨＤＤが本来有する転送速度と実際の書込み処理の速度とを比較する。そして、判定部６０２は、ＨＤＤが本来有する転送速度よりも実際の書込み処理の速度が所定の時間継続して遅い場合に、ストレージ装置１００の全体性能が発揮されていないと判定する。ここで、所定の時間として３０秒を例にする。
【００９７】
続いて、判定部６０２は、ストレージ装置１００の全体性能が発揮されていない状態が３０秒以上経過したと判定した場合、性能値の限界までコマンドを実行したＬＵＮが存在するか否かを判定する。例えば、判定部６０２は、限界ＩＯ数が０または限界ブロック数が０に近づいている場合に、性能値の限界までコマンドを実行したと判定する。判定部６０２は、限界ＩＯ数が０または限界ブロック数が０に近づいていると判定した場合、変更部６０１に、性能値の限界までコマンドを実行したＬＵＮの優先順位を例えば１段階上げる旨を通知する。
【００９８】
また、判定部６０２は、優先順位を１段階上げる旨を通知した後、コマンドの実行数が、ストレージ装置１００の全体性能に基づく実行可能な入出力処理数を所定の時間継続して下回り続けているか否かを判定する。
【００９９】
変更部６０３は、判定部６０２により入出力処理の負荷状況が変化したと判定された場合、ＱｏＳ管理テーブル５０１が記憶する優先順位のうち、特定のＬＵＮを対象とする優先順位を変更する。例えば、変更部６０３は、判定部６０２により特定の入出力処理の負荷状況が変化したと判定された場合、特定のＬＵＮを対象とする優先順位を設定された値より例えば１段階高い値に変更する。なお、変更部６０３が格上げする優先順のレベルは、１段階に限定されるものではなく、例えば２段階格上げしてもよい。
【０１００】
また、変更部６０３は、判定部６０２によりコマンドの実行数が、ストレージ装置の全体性能に基づく実行可能な入出力処理数を所定の時間継続して下回り続けていないと判定された場合に、優先順位を１段階上げたＬＵＮの優先順位を、変更前の値に戻す。
【０１０１】
なお、判定部６０２及び変更部６０３の各機能は、メモリ２１０ａ及びメモリ２１０ｂと、ＣＰＵ２２０ａ及びＣＰＵ２２０ｂとが協働して実現される。
【０１０２】
［実施例２に係るストレージ装置による処理の処理手順］
次に図１１と図１２とを用いて、実施例２に係るストレージ装置１００による処理の処理手順を説明する。ここでは、図１１を用いて、実施例２に係るストレージ装置１００によるＮミリ秒タイマスケジュール処理の処理手順について説明し、図１２を用いて、実施例２に係るストレージ装置１００による限界値設定調整処理の処理手順について説明する。
【０１０３】
（Ｎミリ秒タイマスケジュール処理）
図１１は、実施例２に係るストレージ装置によるＮミリ秒タイマスケジュール処理の処理手順を示すフローチャートである。なお、図１１に示すステップＳ４０１からステップＳ４０４までの各処理は、図６に示すステップＳ１０１からステップＳ１０４までの各処理に対応するので、ここでは説明を省略する。図１１に示すように、実施例２に係るストレージ装置１００は、ステップＳ４０４の終了後、限界値設定調整処理を実行する（ステップＳ４０５）。
【０１０４】
（限界値設定調整処理）
図１２は、実施例２に係るストレージ装置による限界値設定調整処理の処理手順を示すフローチャートである。
【０１０５】
図１２に示すように、判定部６０２は、ストレージ装置１００の全体性能が発揮されていない状態が３０秒以上経過したか否かを判定する（ステップＳ５０１）。ここで、判定部６０２は、ストレージ装置１００の全体性能が発揮されていない状態が３０秒以上経過したと判定した場合（ステップＳ５０１、Ｙｅｓ）、性能限界値に達したＬＵＮが存在するか否かを判定する（ステップＳ５０２）。
【０１０６】
ここで、判定部６０２により、性能限界値に達したＬＵＮが存在すると判定された場合（ステップＳ５０２、Ｙｅｓ）、変更部６０３は、性能限界値に達したＬＵＮの設定レベルを１段階上げ（ステップＳ５０３）、処理を終了する。一方、判定部６０２は、性能限界値に達したＬＵＮが存在しないと判定した場合（ステップＳ５０２、Ｎｏ）、処理を終了する。
【０１０７】
また、判定部６０２は、ストレージ装置１００の全体性能が発揮されていない状態が３０秒以上経過していないと判定した場合（ステップＳ５０１、Ｎｏ）、設定レベルを上げた後に３０秒以上経過したか否かを判定する（ステップＳ５０４）。
【０１０８】
ここで、判定部６０２により、設定レベルを上げた後に３０秒以上経過したと判定された場合（ステップＳ５０４、Ｙｅｓ）、変更部６０３は、設定レベルを１段階上げたＬＵＮの設定レベルを１段階下げ（ステップＳ５０５）、処理を終了する。一方、判定部６０２は、設定レベルを上げた後に３０秒以上経過していないと判定した場合（ステップＳ５０４、Ｎｏ）、処理を終了する。
【０１０９】
［実施例２の効果］
次に、図１３を用いて、実施例２に係るストレージ装置１００による効果を説明する。図１３は、実施例２に係るストレージ装置による効果の一例を示す図である。図１３では、ストレージ装置１００にはホストＡのみ接続され、ホストＡがＬＵＮ−Ａ、ＬＵＮ-Ｂにアクセスする場合を例に説明する。また、ここでは、ホストＡの性能制限が２００（ＭＢ／ｓ）、ＬＵＮ−Ａの性能制限が１５０（ＭＢ／ｓ）、ＬＵＮ−Ｂの性能制限が１００（ＭＢ／ｓ）、ポートの性能制限が２５０（ＭＢ／ｓ）であるものとする。
【０１１０】
まず、ホストＡが、ＬＵＮ−ＡとＬＵＮ−Ｂを同程度に使用する場合を説明する。ＬＵＮ−ＡとＬＵＮ−Ｂの性能は、図９の説明と同様以下のように制限されているものとする。例えば、ストレージ装置１００は、ホストＡによるＬＵＮ−Ａへのアクセスを１２０（ＭＢ／ｓ）で処理し、ホストＡによるＬＵＮ−Ｂへのアクセスを８０（ＭＢ／ｓ）で処理する。
【０１１１】
ここで、ホストＡがＬＵＮ−Ａを使用する割合が著しく多くなった場合、スケジュール部５０６は、例えば、ＬＵＮ−Ａの性能制限まで処理するようにスケジュールする。この結果、実施例２に係るストレージ装置１００では、ホストＡによるＬＵＮ−Ａへのアクセスを１５０（ＭＢ／ｓ）で処理し、ホストＡによるＬＵＮ−Ｂへのアクセスを５０（ＭＢ／ｓ）で処理する。
【０１１２】
ここで、ストレージ装置１００が、ホストＡによるＬＵＮ−Ａへのアクセスを１５０（ＭＢ／ｓ）で処理する一方、ホストＡからＬＵＮ−Ｂへのアクセスが３０秒以上なくなった場合について説明する。この場合、判定部６０２は、ストレージ装置１００の全体性能が発揮されていない状態が３０秒以上経過したと判定し、ホストＡによるＬＵＮ−Ａへのアクセスの優先順位を１段階上げる。この結果、実施例２に係るストレージ装置１００は、ＬＵＮ−Ａの性能制限以上に性能を配分し、例えば、ホストＡによるＬＵＮ−Ａへのアクセスを２００（ＭＢ／ｓ）で処理できる。
【０１１３】
また、この後、ホストＡからＬＵＮ−Ｂへのアクセスが発生した場合について説明する。この場合、実施例２に係るストレージ装置１００は、ＬＵＮ−Ａへのアクセスの優先順位を１段階下げ、ホストＡによるＬＵＮ−Ａへのアクセスを１５０（ＭＢ／ｓ）で処理し、ホストＡによるＬＵＮ−Ｂへのアクセスを５０（ＭＢ／ｓ）で処理する。なお、実施例２に係るストレージ装置１００は、ＬＵＮ−ＡとＬＵＮ−Ｂのアクセス状況に応じ、例えば、ＬＵＮ−Ａへのアクセスを１２０（ＭＢ／ｓ）で処理し、ホストＡによるＬＵＮ−Ｂへのアクセスを８０（ＭＢ／ｓ）で処理するようにスケジュールする。
【実施例３】
【０１１４】
実施例２では、ストレージ装置１００の全体性能が発揮されていない状態が所定の時間以上経過した場合、優先順位を１段階上げることで性能制限以上に性能を配分して処理を実行する例について説明した。ところで、ストレージ装置１００において、優先度の高い処理については、性能制限を設けずに処理させたい場合がある。
【０１１５】
また、一方で、性能制限を設けずに処理した場合には、優先度の高い処理がストレージ装置の性能を占有し、他の処理を実行できない場合が起こりうる。そこで、実施例３では、優先度の高い処理については、それぞれの対象を指定して性能制限を設けない無制限設定を行い、優先度の高い処理がストレージ装置の性能を占有した場合、無制限設定を有限設定の最高値まで格下げする場合を例に説明する。
【０１１６】
［実施例３に係るストレージシステム及びストレージ装置の構成］
実施例３に係るストレージシステムの構成は、ストレージ装置が実行するファームウェアにおいて、ＳＣＳＩターゲット制御部の機能構成が異なる点を除いて、図１に示した実施例１に係るストレージシステムの構成と同様である。このため、実施例３に係るストレージシステムの構成、実施例３に係るストレージ装置の構成については、説明を省略する。
【０１１７】
［実施例３に係るＳＣＳＩターゲット制御部の機能構成］
実施例３に係るＳＣＳＩターゲット制御部の機能構成は、ＱｏＳ管理テーブルが記憶する情報、判定部及び変更部の動作が異なる点を除いて、図１０に示した実施例２に係るＳＣＳＩターゲット制御部の機能構成と同様である。このため実施例３では、図１０において、ＳＣＳＩターゲット制御部６００をＳＣＳＩターゲット制御部７００に、ＱｏＳ管理テーブル５０１をＱｏＳ管理テーブル７０１に、判定部６０２を判定部７０２に、変更部６０３を変更部７０３に置換えて説明する。
【０１１８】
図１０に示すように、実施例３に係るＳＣＳＩターゲット制御部７００は、ＱｏＳ管理テーブル７０１、待ちキュー格納部５０２、性能設定部５０３、コマンド受信部５０４、算出部５０５、スケジュール部５０６、実行部５０７、判定部７０２、変更部７０３を有する。
【０１１９】
ＱｏＳ管理テーブル７０１は、実施例１に係るＱｏＳ管理テーブルが記憶する情報に追加して、以下の情報を記憶する。例えば、実施例３に係るＱｏＳ管理テーブル７０１は、優先順位として、０から１５の１６段階の優先度から選択された値を記憶する。ここで、優先順位が「０」に設定された対象は、限界ＩＯ数及び限界ブロック数がストレージ装置１００の全体性能以内で無制限となる。なお、優先順位の１から１５については、実施例１に係る優先順と同様である。
【０１２０】
判定部７０２は、コマンドの実行数と、ストレージ装置１００の全体性能とに基づいて、入出力処理の負荷状況が変化したか否かを判定する。例えば、判定部７０２は、優先順位が「０」に設定されたＬＵＮの入出力処理が、ストレージ装置１００の全体性能に基づく実行可能な入出力処理数を所定の時間継続して占有した場合に、入出力処理の負荷状況が変化したと判定する。
【０１２１】
一例を挙げると、判定部７０２は、ＱｏＳ管理テーブル７０１が記憶する優先順位が「０」ではないＬＵＮの「現ＩＯ数」及び「現ブロック数」が所定の時間変化したか否かを判定する。ここで、所定の時間として３０秒を例にする。なお、優先順位が「０」ではないＬＵＮとは、すなわち、性能値の制限されたＬＵＮを意味する。
【０１２２】
続いて、判定部７０２は、優先順位が「０」に設定されたＬＵＮによりストレージ装置１００の全体性能を所定の時間継続して占有された状態が３０秒以上経過したと判定した場合、性能値の制限されたＬＵＮにコマンドが存在するか否かを判定する。例えば、判定部７０２は、性能値の制限されたＬＵＮにコマンドが存在する場合に、優先順位が「０」に設定されたＬＵＮの優先順位を「１」に下げる旨を変更部７０３に通知する。
【０１２３】
また、判定部７０２は、優先順位が「０」に設定されたＬＵＮの優先順位を「１」に下げた後も、ストレージ装置１００の全体性能を所定の時間継続して占有しているか否かを判定する。
【０１２４】
変更部７０３は、判定部７０２により入出力処理の負荷状況が変化したと判定された場合、優先順位が「０」に設定されたＬＵＮの優先順位を「１」に変更する。なお、ここでは、変更部７０３は、優先順位が「０」に設定されたＬＵＮの優先順位を「１」に格下げする場合を例に説明したが、これに限定されるものではない。例えば、変更部７０３は、優先順位が「０」に設定されたＬＵＮの優先順位を「２」に格下げしてもよい。
【０１２５】
また、変更部７０３は、判定部７０２により優先順位が「０」から「１」に変更されたＬＵＮが、ストレージ装置１００の全体性能に基づく実行可能な入出力処理数を所定の時間継続して占有していないと判定された場合に、優先度を変更前の「０」に戻す。
【０１２６】
なお、ＱｏＳ管理テーブル７０１、判定部７０２及び変更部７０３の各機能は、メモリ２１０ａ及びメモリ２１０ｂと、ＣＰＵ２２０ａ及びＣＰＵ２２０ｂとが協働して実現される。
【０１２７】
［実施例３に係るストレージ装置による処理の処理手順］
次に図１４を用いて、実施例３に係るストレージ装置１００による処理の処理手順を説明する。ここでは、図１４を用いて、実施例３に係るストレージ装置による限界値設定調整処理の処理手順について説明する。
【０１２８】
（限界値設定調整処理）
図１４は、実施例３に係るストレージ装置による限界値設定調整処理の処理手順を示すフローチャートである。
【０１２９】
図１４に示すように、判定部７０２は、３０秒間ストレージ装置１００の全体性能がほぼ無制限設定のＬＵＮのみで消費されたか否かを判定する（ステップＳ６０１）。ここで、判定部７０２は、３０秒間ストレージ装置の全体性能１００がほぼ無制限設定のＬＵＮのみで消費されたと判定した場合（ステップＳ６０１、Ｙｅｓ）、有限設定のＬＵＮにＩＯアクセスがあるか否かを判定する（ステップＳ６０２）。
【０１３０】
ここで、判定部７０２により、有限設定のＬＵＮにＩＯアクセスがあると判定された場合（ステップＳ６０２、Ｙｅｓ）、変更部７０３は、無制限設定のＬＵＮの設定レベルをレベル１に設定し（ステップＳ６０３）、処理を終了する。一方、判定部７０２は、有限設定のＬＵＮにＩＯアクセスがないと判定した場合（ステップＳ６０２、Ｎｏ）、処理を終了する。
【０１３１】
また、判定部７０２は、３０秒間ストレージ装置１００の全体性能がほぼ無制限設定のＬＵＮのみで消費されていないと判定した場合（ステップＳ６０１、Ｎｏ）、設定レベルをレベル１に設定した後に３０秒以上経過したか否かを判定する（ステップＳ６０４）。
【０１３２】
ここで、判定部７０２により、設定レベルをレベル１に設定した後に３０秒以上経過したと判定された場合（ステップＳ６０４、Ｙｅｓ）、変更部７０３は、以下の処理を実行する。すなわち、変更部７０３は、設定レベルが１に設定された無制限設定のＬＵＮの設定レベルを無制限に戻し（ステップＳ６０５）、処理を終了する。一方、判定部７０２は、設定レベルをレベル１に設定した後に３０秒以上経過していないと判定した場合（ステップＳ６０４、Ｎｏ）、処理を終了する。
【０１３３】
［実施例３の効果］
次に、図１５を用いて、実施例３に係るストレージ装置１００による効果の一例を説明する。図１５は、実施例３に係るストレージ装置による効果の一例を示す図である。図１５に示す例では、ホストＡがＬＵＮ−Ａ、ＬＵＮ−Ｂにアクセス可能であり、ホストＢがＬＵＮ−Ｃにアクセス可能である場合を説明する。また、ここでは、ホストＡの性能制限が無制限（ＭＢ／ｓ）、ホストＢの性能制限が１５０（ＭＢ／ｓ）であるものとする。また、ＬＵＮ−Ａの性能制限が無制限（ＭＢ／ｓ）、ＬＵＮ−Ｂの性能制限が１００（ＭＢ／ｓ）、ＬＵＮ−Ｃの性能制限が１００（ＭＢ／ｓ）、ポートの性能制限が無制限（ＭＢ／ｓ）であるものとする。また、実際のストレージ装置１００の全体性能が例えば１０００（ＭＢ／ｓ）である場合を仮定する。
【０１３４】
まず、ホストＡがＬＵＮ−Ａを使用する性能が８００（ＭＢ／ｓ）以下である場合について説明する。実施例３では、無制限設定と通常の性能制限設定が混在する場合、基本は無制限設定の対象が使用する性能(帯域)を差し引いた分の性能を性能制限設定された対象が分け合う形とする。例えば、この場合、ホストＡ−ＬＵＮ−ＢとホストＢ−ＬＵＮ−Ｃの性能は１００（ＭＢ／ｓ）配分される。
【０１３５】
次に、ホストＡがＬＵＮ−Ａを使用する性能が９００（ＭＢ／ｓ）になった場合について説明する。この場合、ホストＡによるＬＵＮ−ＢへのアクセスとホストＢによるＬＵＮ−Ｃへのアクセス性能はそれぞれ５０（ＭＢ／ｓ）となる。
【０１３６】
次に、ホストＡによりＬＵＮ−Ａを常に１０００（ＭＢ／ｓ）以上使用しようとする場合について説明する。この場合、判定部７０２は、ホストＡによるＬＵＮ−Ａへのアクセスのみでストレージ装置１００の性能が占有されてしまう状態が一定時間以上経過したと判定する。そして、変更部７０３は、ホストＡによるＬＵＮ−Ａへのアクセス性能を優先順位の最高値である７５０（ＭＢ／ｓ）に設定を変更する。続いて、スケジュール部５０６は、変更された優先順位に基づいてスケジュールする。
【０１３７】
このように、実施例３では、無制限設定が極度に性能(帯域)を使用し続ける場合は、無制限設定を通常の性能制限設定の最高レベルと同等の性能に落として制御するようにする。例えば、単位時間３０秒の間継続して、無制限設定のＬＵＮに対するＩ／Ｏの性能がストレージ全体の性能のほとんどを使用していることを検出した場合、無制限設定のＬＵＮの性能レベルを有限設定の最高レベルに格下げする。この結果、実施例３に係るストレージ装置１００は、ホストＡによるＬＵＮ−Ａへのアクセスを優先して処理しつつ、ホストＡによるＬＵＮ−ＢへのアクセスとホストＢによるＬＵＮ−Ｃへのアクセスとを保証できる。
【実施例４】
【０１３８】
ところで、本発明は、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例４では、本発明に含まれる他の実施例について説明する。
【０１３９】
（システム構成等）
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
【０１４０】
また、ストレージ装置１００は、ＬＵＮ故障時やホストのログアウト時など対象が削除された場合、あるいはＬＵＮ追加時やホストログイン時など対象が追加された場合、該当のポートに関連する全対象で性能を動的に再配分するようにしてもよい。そこで、ストレージ装置１００が、対象を削除、追加した直後のＮミリ秒タイマスケジュールで、スケジュール対象を削除、追加する機能を有する場合を実施例４として説明する。なお、このスケジュール対象を削除、追加する機能は性能設定部５０３が有するものとする。
【０１４１】
図１６を用いて、実施例４に係るストレージ装置１００による効果の一例を説明する。図１６は、実施例４に係るストレージ装置による効果の一例を示す図である。図１６に示す例では、ホストＡがＬＵＮ−Ａ、ＬＵＮ−Ｂにアクセス可能であり、ホストＢがＬＵＮ−Ｃにアクセス可能であり、新たにホストＢがアクセス可能であるＬＵＮ−Ｄを追加する場合を説明する。また、ここでは、ホストＡの性能制限が２００（ＭＢ／ｓ）、ホストＢの性能制限が１５０（ＭＢ／ｓ）であるものとする。また、ＬＵＮ−Ａの性能制限が１５０（ＭＢ／ｓ）、ＬＵＮ−Ｂの性能制限が１００（ＭＢ／ｓ）、ＬＵＮ−Ｃの性能制限が１００（ＭＢ／ｓ）、ＬＵＮ−Ｄの性能制限が１００（ＭＢ／ｓ）、ポートの性能制限が２５０（ＭＢ／ｓ）であるものとする。
【０１４２】
例えば、ＬＵＮ−Ｄを追加する前では、ホストＡがＬＵＮ−Ａを１０７（ＭＢ／ｓ）で使用し、ＬＵＮ−Ｂを７１（ＭＢ／ｓ）で使用する。また、ホストＢがＬＵＮ−Ｃを７１（ＭＢ／ｓ）で使用する。
【０１４３】
そして、ＬＵＮ−Ｄを追加した後では、ホストＡがＬＵＮ−Ａを８３（ＭＢ／ｓ）で使用し、ＬＵＮ−Ｂを５６（ＭＢ／ｓ）で使用する。また、ホストＢがＬＵＮ−Ｃを５６（ＭＢ／ｓ）で使用し、ＬＵＮ−Ｄを５６（ＭＢ／ｓ）で使用する。また、ホストＢがログアウトし、しばらく再ログインしない場合、ホストＡがＬＵＮ−Ａを１２０（ＭＢ／ｓ）で使用し、ＬＵＮ−Ｂを８０（ＭＢ／ｓ）で使用する。
【０１４４】
このように、実施例４に係るストレージ装置１００は、使用されるホストとＬＵＮとの組合せが変更された場合でも、ストレージ装置１００の性能を動的に配分し、ストレージのＱｏＳ機能を容易に実現することができる。
【０１４５】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、ＳＣＳＩコマンド制御部３０４では、コマンド受信部５０４とスケジュール部５０６とは統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１４６】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをストレージ装置が有するコンピュータで実行することによって実現することができる。そこで、以下では、図１７を用いて、上記実施例と同様の機能を有するストレージ装置制御プログラムを実行するコンピュータの一例を説明する。図１７は、ストレージ装置制御プログラムを実行するコンピュータを示す図である。
【０１４７】
図１７に示すように、コンピュータ１０００は、ホストとのインターフェースであるＦＣ−ＣＡ１０１０、ホストとのインターフェースであるｉＳＣＳＩ−ＣＡ１０２０、ディスク装置とのインターフェースであるＳＡＳ１０３０を有する。また、コンピュータ１０００は、各種情報を一時記憶するＲＡＭ１０４０、書き換え可能であり、電源を切ってもデータが消えない不揮発性のフラッシュメモリ１０５０を有する。また、コンピュータ１０００は、読み出し専用メモリであるＲＯＭ（Read  Only  Memory）１０６０、各種演算処理を実行するＣＰＵ１０７０を有する。また、コンピュータ１０００が有する各部は、バス１０８０で接続される。
【０１４８】
そして、フラッシュメモリ１０５０には、図３に示したＱｏＳ管理テーブル５０１に対応するＱｏＳ管理テーブル１０５１が記憶される。また、ＲＯＭ１０６０には、図３に示した算出部５０５とスケジュール部５０６と実行部５０７と同様の機能を有するストレージ装置制御プログラム１０６１が記憶される。
【０１４９】
そして、ＣＰＵ１０７０は、フラッシュメモリ１０５０から読み出したＱｏＳ管理テーブル１０５１を参照し、ＲＯＭ１０６０から読み出したストレージ装置制御プログラム１０６１をストレージ装置制御プロセス１０７１として実行する。
【０１５０】
なお、上記のストレージ装置制御プログラム１０６１は、必ずしもＲＯＭ１０６０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたこのプログラムを、コンピュータ１０００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮ（Wide  Area  Network）等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）等にこのプログラムを記憶させておき、コンピュータ１０００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１５１】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１５２】
（付記１）情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び自装置が有する記憶装置に設定された優先度に基づいて決定される入出力処理数の上限値を算出する算出部と、
前記情報処理装置から受付けた入出力処理数と、算出された前記上限値とに基づいて、入出力処理の実行順をスケジュールするスケジュール部と、
前記スケジュール部によりスケジュールされた前記実行順で入出力処理を実行する実行部と
を有することを特徴とするストレージ装置。
【０１５３】
（付記２）前記ストレージ装置が、
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、特定の入出力処理の負荷状況が変化したか否かを判定する判定部と、
前記判定部により入出力処理の負荷状況が変化したと判定された場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更する変更部とを更に有し、
前記スケジュール部は、前記変更部により変更された優先度から決定される入出力処理数の上限値と、前記情報処理装置から受付けた入出力処理数とに基づいて、入出力処理の実行順をスケジュールする
ことを特徴とする付記１に記載のストレージ装置。
【０１５４】
（付記３）前記判定部は、特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けた場合に、特定の入出力処理の負荷状況が変化したと判定し、
前記変更部は、前記判定部により特定の入出力処理の負荷状況が変化したと判定された場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更する
ことを特徴とする付記２に記載のストレージ装置。
【０１５５】
（付記４）前記判定部は、前記優先度を変更後、特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けているか否かを判定し、
前記変更部は、前記判定部により特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けていないと判定された場合に、前記優先度を変更前の値に変更する
ことを特徴とする付記３に記載のストレージ装置。
【０１５６】
（付記５）前記判定部は、特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有した場合に、特定の入出力処理の負荷状況が変化したと判定し、
前記変更部は、前記判定部により特定の入出力処理の負荷状況が変化したと判定された場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を設定された値より低い値に変更する
ことを特徴とする付記２に記載のストレージ装置。
【０１５７】
（付記６）前記判定部は、前記優先度を設定された値より低い値に変更後、特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有しているか否かを判定し、
前記変更部は、前記判定部により特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有していないと判定された場合に、前記優先度を変更前の値に変更する
ことを特徴とする付記５に記載のストレージ装置。
【０１５８】
（付記７）前記ストレージ装置が、
前記情報処理装置から入出力処理を受付けるとともに、実行待ちの入出力処理があるか否かを判定する受信部を更に有し、
前記スケジュール部は、前記受信部により実行待ちの入出力処理があると判定された場合、前記所定の時間が経過した後に入出力処理の実行順をスケジュールする
ことを特徴とする付記１に記載のストレージ装置。
【０１５９】
（付記８）前記スケジュール部は、前記受信部により実行待ちの入出力処理がないと判定された場合、前記所定の時間が経過するのを待つことなく入出力処理の実行順をスケジュールする
ことを特徴とする付記７に記載のストレージ装置。
【０１６０】
（付記９）前記スケジュール部は、前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定し、前記受付けた入出力処理数が前記上限値以内であると判定した場合、前記上限値から受付けた入出力処理数を減算することにより、入出力処理の実行順をスケジュールすることを特徴とする付記７または８に記載のストレージ装置。
【０１６１】
（付記１０）前記スケジュール部は、前記受付けた入出力処理数が前記上限値以内ではないと判定した場合、前記所定の時間が経過した後に、前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定することを特徴とする付記９に記載のストレージ装置。
【０１６２】
（付記１１）情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び記憶装置のそれぞれに設定された優先度を示す情報を記憶する記憶部と、
自装置と接続する情報処理装置、前記情報処理装置が使用する記憶装置が変化した場合に、前記記憶部が記憶する情報を更新する更新部と
を更に有することを特徴とする付記１に記載のストレージ装置。
【０１６３】
（付記１２）ストレージ装置が、
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び自装置が有する記憶装置に設定された優先度に基づいて決定される入出力処理数の上限値を算出し、
前記情報処理装置から受付けた入出力処理数と、算出した前記上限値とに基づいて、入出力処理の実行順をスケジュールし、
スケジュールされた前記実行順で入出力処理を実行する
ことを特徴とするストレージ装置の制御方法。
【０１６４】
（付記１３）前記ストレージ装置が、更に
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、特定の入出力処理の負荷状況が変化したか否かを判定し、
入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更し、
変更された優先度から決定される入出力処理数の上限値と、前記情報処理装置から受付けた入出力処理数とに基づいて、入出力処理の実行順をスケジュールする
ことを特徴とする付記１２に記載のストレージ装置の制御方法。
【０１６５】
（付記１４）特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けた場合に、特定の入出力処理の負荷状況が変化したと判定し、
特定の入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更する
ことを特徴とする付記１３に記載のストレージ装置の制御方法。
【０１６６】
（付記１５）前記優先度を変更後、特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けているか否かを判定し、
特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けていないと判定した場合に、前記優先度を変更前の値に変更する
ことを特徴とする付記１４に記載のストレージ装置の制御方法。
【０１６７】
（付記１６）特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有した場合に、特定の入出力処理の負荷状況が変化したと判定し、
特定の入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を設定された値より低い値に変更する
ことを特徴とする付記１３に記載のストレージ装置の制御方法。
【０１６８】
（付記１７）前記優先度を設定された値より低い値に変更後、特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有しているか否かを判定し、
特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有していないと判定した場合に、前記優先度を変更前の値に変更する
ことを特徴とする付記１６に記載のストレージ装置の制御方法。
【０１６９】
（付記１８）前記ストレージ装置が、更に
前記情報処理装置から入出力処理を受付けるとともに、実行待ちの入出力処理があるか否かを判定し、
実行待ちの入出力処理があると判定した場合、前記所定の時間が経過した後に入出力処理の実行順をスケジュールする
ことを特徴とする付記１２に記載のストレージ装置の制御方法。
【０１７０】
（付記１９）実行待ちの入出力処理がないと判定した場合、前記所定の時間が経過するのを待つことなく入出力処理の実行順をスケジュールする
ことを特徴とする付記１８に記載のストレージ装置の制御方法。
【０１７１】
（付記２０）前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定し、前記受付けた入出力処理数が前記上限値以内であると判定した場合、前記上限値から受付けた入出力処理数を減算することにより、入出力処理の実行順をスケジュールすることを特徴とする付記１８または１９に記載のストレージ装置の制御方法。
【０１７２】
（付記２１）前記受付けた入出力処理数が前記上限値以内ではないと判定した場合、前記所定の時間が経過した後に、前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定することを特徴とする付記２０に記載のストレージ装置の制御方法。
【０１７３】
（付記２２）自装置と接続する情報処理装置、前記情報処理装置が使用する記憶装置が変化した場合に、記憶部が記憶する情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び記憶装置のそれぞれに設定された優先度を示す情報を更新することを特徴とする付記１２に記載のストレージ装置の制御方法。
【０１７４】
（付記２３）ストレージ装置に、
情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び自装置が有する記憶装置に設定された優先度に基づいて決定される入出力処理数の上限値を算出し、
前記情報処理装置から受付けた入出力処理数と、算出した前記上限値とに基づいて、入出力処理の実行順をスケジュールし、
スケジュールされた前記実行順で入出力処理を実行させる
ためのストレージ装置制御プログラム。
【０１７５】
（付記２４）前記ストレージ装置に、更に
入出力処理の実行数と、自装置が有する入出力処理の処理容量とに基づいて、特定の入出力処理の負荷状況が変化したか否かを判定し、
入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更し、
変更された優先度から決定される入出力処理数の上限値と、前記情報処理装置から受付けた入出力処理数とに基づいて、入出力処理の実行順をスケジュールする
ことを実行させるための付記２３に記載のストレージ装置制御プログラム。
【０１７６】
（付記２５）特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けた場合に、特定の入出力処理の負荷状況が変化したと判定し、
特定の入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を変更する
ことを実行させるための付記２４に記載のストレージ装置制御プログラム。
【０１７７】
（付記２６）前記優先度を変更後、特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けているか否かを判定し、
特定の入出力処理の実行数が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して下回り続けていないと判定した場合に、前記優先度を変更前の値に変更する
ことを実行させるための付記２５に記載のストレージ装置制御プログラム。
【０１７８】
（付記２７）特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有した場合に、特定の入出力処理の負荷状況が変化したと判定し、
特定の入出力処理の負荷状況が変化したと判定した場合、前記特定の入出力処理の入出力処理数を決定する前記優先度を設定された値より低い値に変更する
ことを実行させるための付記２４に記載のストレージ装置制御プログラム。
【０１７９】
（付記２８）前記優先度を設定された値より低い値に変更後、特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有しているか否かを判定し、
特定の入出力処理が、前記処理容量に基づく実行可能な入出力処理数を所定の時間継続して占有していないと判定した場合に、前記優先度を変更前の値に変更する
ことを実行させるための付記２７に記載のストレージ装置制御プログラム。
【０１８０】
（付記２９）前記ストレージ装置に、更に
前記情報処理装置から入出力処理を受付けるとともに、実行待ちの入出力処理があるか否かを判定し、
実行待ちの入出力処理があると判定した場合、前記所定の時間が経過した後に入出力処理の実行順をスケジュールする
ことを実行させるための付記２３に記載のストレージ装置制御プログラム。
【０１８１】
（付記３０）実行待ちの入出力処理がないと判定した場合、前記所定の時間が経過するのを待つことなく入出力処理の実行順をスケジュールする
ことを実行させるための付記２９に記載のストレージ装置制御プログラム。
【０１８２】
（付記３１）前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定し、前記受付けた入出力処理数が前記上限値以内であると判定した場合、前記上限値から受付けた入出力処理数を減算することにより、入出力処理の実行順をスケジュールすることを実行させるための付記２９または３０に記載のストレージ装置制御プログラム。
【０１８３】
（付記３２）前記受付けた入出力処理数が前記上限値以内ではないと判定した場合、前記所定の時間が経過した後に、前記情報処理装置から受付けた入出力処理数が、算出された前記上限値以内であるか否かを判定することを実行させるための付記３１に記載のストレージ装置制御プログラム。
【０１８４】
（付記３３）自装置と接続する情報処理装置、前記情報処理装置が使用する記憶装置が変化した場合に、記憶部が記憶する情報処理装置、前記情報処理装置と自装置との間のインターフェースであるポート、及び記憶装置のそれぞれに設定された優先度を示す情報を更新することを実行させるための付記２３に記載のストレージ装置制御プログラム。
【符号の説明】
【０１８５】
１  ストレージシステム
１０ａ、１０ｂ  ホスト
１００  ストレージ装置
１０１ａ〜１０１ｄ  ＨＤＤ
２００ａ、２００ｂ  ＣＭ
２０１ａ、２０１ｂ、１０１０  ＦＣ−ＣＡ
２０２ａ、２０２ｂ、１０２０  ｉＳＣＳＩ−ＣＡ
２０３ａ、２０３ｂ、１０３０  ＳＡＳ
２１０ａ、２１０ｂ  メモリ
２１１ａ、２１１ｂ  キャッシュ域
２１２ａ、２１２ｂ  制御域
２２０ａ、２２０ｂ、１０７０  ＣＰＵ
３０４  ＳＣＳＩコマンド制御部
５０１、７０１、１０５１  ＱｏＳ管理テーブル
５０２  待ちキュー格納部
５０３  性能設定部
５０４  コマンド受信部
５０５  算出部
５０６  スケジュール部
５０７  実行部
６０２、７０２  判定部
６０３、７０３  変更部
１０００  コンピュータ
１０４０  ＲＡＭ
１０５０  フラッシュメモリ
１０６０  ＲＯＭ
１０６１  ストレージ装置制御プログラム
１０７１  ストレージ装置制御プロセス
【図１】
0005903873.tif 000002
【図２】
0005903873.tif 000003
【図３】
0005903873.tif 000004
【図４】
0005903873.tif 000005
【図５】
0005903873.tif 000006
【図６】
0005903873.tif 000007
【図７】
0005903873.tif 000008
【図８】
0005903873.tif 000009
【図９】
0005903873.tif 000010
【図１０】
0005903873.tif 000011
【図１１】
0005903873.tif 000012
【図１２】
0005903873.tif 000013
【図１３】
0005903873.tif 000014
【図１４】
0005903873.tif 000015
【図１５】
0005903873.tif 000016
【図１６】
0005903873.tif 000017
【図１７】
0005903873.tif 000018