(57)【特許請求の範囲】
【請求項１】
サーバ装置で実行される仮想機械からストレージ装置へのアクセス制御方法であって、
前記仮想機械から入出力命令とともに出力された前記仮想機械を識別する仮想機械識別子に基づいて、仮想機械識別子とサービスレベルとの対応関係を記憶する記憶部を参照して、前記仮想機械識別子に対応するサービスレベルを取得し、
前記サーバ装置および前記ストレージ装置の少なくとも一方において、前記仮想機械からの入出力命令を取得した前記サービスレベルに従って実行し、
前記サーバ装置にて、
前記仮想機械からの入出力命令を前記仮想機械に対応するサービスレベル別にサービスレベル別キューに記憶して待ち合わせ、
前記サービスレベルに応じた許容数で前記サービスレベル別キューに記憶されている前記入出力命令を待ち行列順で読み出し、
前記読み出した入出力命令を前記仮想機械に対応する仮想機械識別子とともに前記ストレージ装置に対して発行する、
ことを特徴とするアクセス制御方法。
【請求項２】
前記サーバ装置において、前記サービスレベルに応じた許容数を現在までの前記入出力命令の実行状況に応じて変更する、
ことを特徴とする請求項１に記載のアクセス制御方法。
【請求項３】
前記ストレージ装置にて、
前記入出力命令を前記仮想機械識別子とともに前記サーバ装置から受け付け、
前記受け付けた入出力命令を、前記仮想機械識別子に対応するサービスレベル別にサービスレベル別入出力キューに記憶して待ち合わせ、
前記サービスレベルに応じた許容数で前記サービスレベル別入出力キューに記憶されている前記入出力命令を待ち行列順で読み出して、記憶装置へのアクセスを実行する、
ことを特徴とする請求項１または請求項２に記載のアクセス制御方法。
【請求項４】
前記ストレージ装置にて、
自装置に含まれる特定のコントローラが入出力処理を実行する通常モードと、自装置に含まれる前記特定のコントローラ以外のコントローラが入出力命令を実行する負荷分散モードと、の２つの運転モードを前記サービスレベルごとに有し、
前記仮想機械ごとに入出力命令の平均処理時間を監視し、
前記通常モード中の同じサービスレベルの前記仮想機械のいずれかの前記平均処理時間が第１の閾値を超えたことを契機に、前記同じサービスレベルの運転モードを前記負荷分散モードに切り替え、
前記負荷分散モード中の同じサービスレベルの全ての前記仮想機械の平均処理時間が第２の閾値を下回ったことを契機に、前記同じサービスレベルの運転モードを通常モードに切り替える、
ことを特徴とする請求項３に記載のアクセス制御方法。
【請求項５】
仮想機械が動作するサーバ装置であって、
前記仮想機械を識別する仮想機械識別子に対応付けて前記仮想機械に設定されたサービスレベルを記憶する記憶部と、
前記仮想機械からの入出力命令を前記仮想機械に対応するサービスレベル別に記憶し待ち合わせるサービスレベル別キューと、
前記サービスレベルに応じて前記サービスレベル別キューに記憶されている前記入出力命令を待ち行列順で読み出す制御部と、
前記読み出した入出力命令を前記仮想機械に対応する仮想機械識別子とともに発行するインタフェース部と、
を備えることを特徴とするサーバ装置。
【請求項６】
前記制御部は、前記サービスレベルに応じた許容数を現在までの前記入出力命令の実行状況に応じて変更する、ことを特徴とする請求項５に記載のサーバ装置。
【請求項７】
サーバ装置で実行される仮想機械を識別する仮想機械識別子に対応付けて前記仮想機械に設定されたサービスレベルを記憶する記憶部と、
前記入出力命令を前記仮想機械識別子とともに受け付けるインタフェース部と、
前記受け付けた入出力命令を、前記仮想機械識別子に対応するサービスレベル別に記憶して待ち合わせるサービスレベル別入出力キューと、
前記サービスレベルに応じて前記サービスレベル別入出力キューに記憶されている前記入出力命令を待ち行列順で読み出して、記憶装置へのアクセスを実行する制御部と、
を備え、
自装置に含まれる特定のコントローラが入出力処理を実行する通常モードと、自装置に含まれる前記特定のコントローラ以外のコントローラが入出力命令を実行する負荷分散モードと、の２つの運転モードを前記サービスレベルごとに有し、
前記仮想機械ごとに入出力命令の平均処理時間を監視し、
前記通常モード中の同じサービスレベルの前記仮想機械のいずれかの前記平均処理時間が第１の閾値を超えたことを契機に、前記同じサービスレベルの運転モードを前記負荷分散モードに切り替え、
前記負荷分散モード中の同じサービスレベルの全ての前記仮想機械の平均処理時間が第２の閾値を下回ったことを契機に、前記同じサービスレベルの運転モードを通常モードに切り替えることを特徴とするストレージ装置。
【請求項８】
前記制御部は、前記サービスレベルに応じた許容数を現在までの前記入出力命令の実行状況に応じて変更する、ことを特徴とする請求項７に記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ装置上の仮想機械からストレージ装置へのアクセスの制御方法、サーバ装置およびストレージ装置に関する。
【背景技術】
【０００２】
従来、仮想サーバを提供する複数のサーバと、ストレージ装置と、を含む計算機システムがある。複数のサーバからストレージ装置にデータアクセスが実行される場合、実行されるデータアクセスの総数に応じて、計算機システムの処理能力は分散される。そのため、実行されるデータアクセスが増加すると、１つのデータアクセス当りの実行時間も長くなる。その結果、計算機システムの処理性能が低下すことになる。
【０００３】
上記技術に関連して、仮想サーバを提供するサーバとストレージシステムの両方を考慮して、計算機システム全体としての性能管理を行なう計算機システムについて知られている。この計算機システムは、仮想サーバ毎に仮想サーバに関するＩ／Ｏ優先度にしたがって仮想サーバのＩ／Ｏ処理を制御することで、仮想サーバ間のＩ／Ｏ処理性能の調整を行なうサーバと、ストレージシステムの設定を連携させる。
【０００４】
また、移動後の仮想マシンにおけるアレイグループへの入出力（Ｉ／Ｏ）を考慮した仮想マシンの移動を行なう管理サーバについて知られている。この管理サーバは、移動後の仮想マシンの予測Ｉ／Ｏ量を算出し、移動後の仮想マシンに接続しているアレイグループの最大Ｉ／Ｏ量が予測Ｉ／Ｏ量が超えていた場合、最大Ｉ／Ｏ量が予測Ｉ／Ｏ量を下回るアレイグループを検索する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１０８４０９号公報
【特許文献２】特開２０１０−１０８１１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
計算機システムの処理性能が低下しないようにするために、例えば、ストレージ装置において、ストレージ装置と接続するサーバ毎に定義したアクセスレベルに応じて、ストレージ装置へのデータアクセスの優先制御を行なうことが考えられる。
【０００７】
しかし、例えば、サーバが提供する仮想サーバ毎にサービスレベルを設定したい場合、ストレージ装置において、アクセスレベルに応じて、ストレージ装置へのデータアクセスの優先制御を行なうことは難しい。
【０００８】
１つの側面では、本発明は、仮想機械からストレージ装置へのデータアクセスを、仮想機械毎に制御することができるアクセス制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本アクセス制御方法の１つの観点によれば、本アクセス制御方法は、サーバ装置で実行される仮想機械からストレージ装置へのアクセス制御方法であって、以下の処理を行なう。
【００１０】
前記仮想機械から入出力命令とともに出力された前記仮想機械を識別する仮想機械識別子に基づいて、仮想機械識別子とサービスレベルとの対応関係を記憶する記憶部を参照して、前記仮想機械識別子に対応するサービスレベルを取得する。
【００１１】
前記サーバ装置および前記ストレージ装置の少なくとも一方において、前記仮想機械からの入出力命令を取得した前記サービスレベルに従って実行する。
【発明の効果】
【００１２】
発明の１つの態様では、仮想機械からストレージ装置へのデータアクセスを、仮想機械毎に制御することができるアクセス制御方法を提供できる。
【図面の簡単な説明】
【００１３】
【図１】ストレージシステム１００の概要を説明する図である。
【図２】ストレージシステム２００の構成例を示す図である。
【図３】ストレージシステム２００の概要を説明する図である。
【図４】サービスレベル管理テーブル４００の例を示す図である。
【図５】仮想サーバ管理テーブル５００の例を示す図である。
【図６】物理サーバ２１０に備わる１次キュー３３１の例を示す図である。
【図７】ストレージ装置に備わる２次キュー３４１の例を示す図である。
【図８】仮想サーバが送信するＩ／Ｏ要求パケット８００の例を示す図である。
【図９】物理サーバ２１０による仮想サーバの監視処理を示すフローチャートである。
【図１０】物理サーバ２１０によるＩ／Ｏ要求の実行処理を示すフローチャートである。
【図１１】物理サーバ２１０によるＩ／Ｏ要求の実行処理を示すフローチャートである。
【図１２】システム管理サーバ２５０によるサービスレベル管理テーブル４００の監視処理を示すフローチャートである。
【図１３】システム管理サーバ２５０による仮想サーバ管理テーブル５００の監視処理を示すフローチャートである。
【図１４】ストレージ装置２２０によるサービスレベル管理テーブル４００の監視処理を示すフローチャートである。
【図１５】ストレージ装置２２０によるＩ／Ｏ要求の実行処理を示すフローチャートである。
【図１６】ストレージ装置２２０によるＩ／Ｏ要求の実行処理を示すフローチャートである。
【図１７】ストレージ装置２２０によるＩ／Ｏ要求の実行処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態の一例について、図１〜図１７に基づいて説明する。なお、以下に説明する実施形態はあくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図ではない。すなわち、本実施形態は、その趣旨を逸脱しない範囲で、各実施例を組み合わせるなど種々変形して実施することができる。また、図１０−１７にフローチャートの形式で示した処理手順は、処理の順番を限定する趣旨ではない。したがって、可能な場合には、処理の順番を入れ替えても良いのは当然である。
【００１５】
≪実施例≫
図１は、一実施例に係るストレージシステム１００の概要を説明する図である。
ストレージシステム１００は、サーバ装置１１０と、ストレージ装置１２０と、を備える。そして、サーバ装置１１０とストレージ装置１２０とは、ネットワーク１３０などを介して互いに通信可能に接続している。
【００１６】
サーバ装置１１０は、サーバ装置１１０に備わる図示しないＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が所定のプログラムを実行することにより１または２以上の仮想機械１１１−０、１１１−１、・・・および１１１−ｎを提供する。ただし、ｎは１以上の整数とする。仮想機械１１１−０、１１１−１、・・・および１１１−ｎの任意の仮想機械を「仮想機械１１１」という。
【００１７】
サーバ装置１１０は、記憶部１１２と、サービスレベル別キュー１１３−０、１１３−１、・・・および１１３−ｍと、制御部１１４と、インタフェース部１１５と、を含むことができる。ただし、ｍは１以上の整数とする。サービスレベル別キュー１１３−０、１１３−１、・・・および１１３−ｍの任意のサービスレベル別キューを「サービスレベル別キュー１１３」という。
【００１８】
記憶部１１２は、仮想機械１１１を識別する仮想機械識別子に対応付けて仮想機械１１１に設定されたサービスレベルを記憶する。記憶部１１２には、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などメモリを使用することができる。
【００１９】
サービスレベル別キュー１１３は、制御部１１４の操作により、仮想機械１１１からの入出力命令１１６を仮想機械１１１に対応するサービスレベル別に記憶し待ち合わせる。
制御部１１４は、サービスレベルに応じてサービスレベル別キュー１１３に記憶されている入出力命令１１６を待ち行列順で読み出す。
【００２０】
インタフェース部１１５は、ストレージ装置１２０に対して、制御部１１４が読み出した入出力命令１１６を仮想機械に対応する仮想機械識別子とともに発行する。
ストレージ装置１２０は、記憶部１２１と、インタフェース部１２２と、サービスレベル別入出力キュー１２３−０、１２３−１、・・・および１２３−ｊと、制御部１２４と、を含むことができる。ただし、ｊは１以上の整数とする。サービスレベル別入出力キュー１２３−０、１２３−１、・・・および１２３−ｊの任意のサービスレベル別入出力キューを「サービスレベル別入出力キュー１２３」という。
【００２１】
ストレージ装置１２０には、さらに、記憶装置１２５を含むことができる。記憶装置１２５は、任意のデータを記憶する記憶装置である。記憶装置１２５には、例えば、１または２以上の磁気ディスク装置などを用いることができる。
【００２２】
記憶部１２１は、サーバ装置１１０で実行される仮想機械１１１を識別する仮想機械識別子に対応付けて仮想機械１１１に設定されたサービスレベルを記憶する。記憶部１２１には、ＲＡＭなどのメモリを使用することができる。
【００２３】
インタフェース部１２２は、入出力命令１１６を仮想機械識別子とともに受け付ける。
サービスレベル別入出力キュー１２３は、制御部１２４の操作により、受け付けた入出力命令１１６を、仮想機械識別子に対応するサービスレベル別に記憶して待ち合わせる。
【００２４】
制御部１２４は、サービスレベルに応じてサービスレベル別入出力キュー１２３に記憶されている入出力命令１１６を待ち行列順で読み出して、記憶装置１２５へのアクセスを実行する。
【００２５】
なお、図１の例では、簡単のために、サーバ装置１１０とストレージ装置１２０とをそれぞれ１台ずつ例示したが、ストレージシステム１００を図１に示した構成に限定する趣旨ではない。サーバ装置１１０は、複数のストレージ装置１２０と接続してもよいし、ストレージ装置１２０は、複数のサーバ装置１１０と接続してもよい。
【００２６】
以上の構成において、例えば、サーバ装置１１０およびストレージ装置１２０の少なくとも一方は、仮想機械１１１から入出力命令１１６とともに出力された仮想機械１１１を識別する仮想機械識別子に基づいて、仮想機械識別子とサービスレベルとの対応関係を記憶する記憶部１１２または１２１を参照して、仮想機械識別子に対応するサービスレベルを取得する。
【００２７】
そして、サーバ装置１１０およびストレージ装置１２０の少なくとも一方は、仮想機械１１１からの入出力命令１１６を仮想機械識別子に対応するサービスレベルに従って実行する。
【００２８】
以上のように、ストレージシステム１００が実現するストレージアクセス制御方法によると、仮想機械１１１からストレージ装置１２０へのデータアクセスを、仮想機械１１１毎に制御するストレージアクセス制御方法を実現することができる。
【００２９】
≪その他の実施例≫
図２は、その他の実施例に係るストレージシステム２００の構成例を示す図である。
ストレージシステム２００は、物理サーバ２１０と、ストレージ装置２２０と、システム管理サーバ２５０と、を備える。物理サーバ２１０と、ストレージ装置２２０と、システム管理サーバ２５０と、互いにネットワークを介して通信可能に接続している。また、物理サーバ２１０は、ストレージ装置２２０と特定のＩ／Ｆを使用して通信可能に接続することができる。
【００３０】
なお、図２では、ストレージ装置２２０に対して物理サーバ２１０が１台だけ接続している場合を例示しているが、ストレージ装置２２０は、複数の物理サーバ２１０を接続することができる。同様に、物理サーバ２１０は、複数のストレージ装置２２０と接続することができる。
【００３１】
物理サーバ２１０は、プロセッサ２１１と、メインメモリ２１２と、記憶装置２１３と、ネットワークＩ／Ｆ２１４と、ストレージＩ／Ｆ２１５と、媒体駆動装置２１６と、を備える情報処理装置である。そして、これらの装置がバスに接続されて相互にデータを受け渡しが行なえる構成となっている。
【００３２】
プロセッサ２１１は、周辺機器や各種ソフトウェアを実行する他に本実施例に係るストレージ制御を実現するプログラム、例えば、記憶装置２１３に記憶されている仮想サーバ管理プログラムなどを実行する演算装置である。
【００３３】
メインメモリ２１２は、プログラムを実行するために使用される揮発性の記憶装置である。メインメモリ２１２には、例えば、ＲＡＭなどを使用することができる。
記憶装置２１３は、物理サーバ２１０が動作するために必要なプログラムやデータの他に本実施例に係るストレージ制御を実現するプログラムを記憶する不揮発性の記憶装置である。記憶装置２１３には、例えば、磁気ディスク記憶装置などを使用することができる。
【００３４】
記憶装置２１３には、例えば、サービスレベル管理テーブル、仮想サーバ管理テーブル、仮想サーバ管理プログラム、Ｉ／Ｏ要求実行プログラムなどを記憶することができる。物理サーバ２１０は、例えば、起動時にシステム管理サーバ２５０からサービスレベル管理テーブル、仮想サーバ管理テーブルを取得して記憶装置２１３に記憶することができる。
【００３５】
なお、サービスレベル管理テーブルについては、図３で後述する。また、仮想サーバ管理テーブルについては、図４で後述する。また、仮想サーバ管理プログラムは、後述する図９で後述する処理を実現するためのプログラムである。Ｉ／Ｏ要求実行プログラムは、後述する図１０−図１１で後述する処理を実現するためのプログラムである。
【００３６】
ネットワークＩ／Ｆ２１４は、ネットワーク２６０に接続する装置である。
ストレージＩ／Ｆ２１５は、ストレージ装置２２０と特定の規格にしたがって通信を行なうＩ／Ｆである。ストレージＩ／Ｆ２１５には、例えば、Ｆｉｂｅｒ  ＣｈａｎｎｅｌのＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）や、ｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）のＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）などを使用することができる。
【００３７】
ストレージＩ／Ｆ２１５は、例えば、プロセッサ２１５ａと、メモリ２１５ｂと、Ｉ／Ｆポート２１５ｃと、を備える。プロセッサ２１５ａは、Ｉ／Ｆポート２１５ｃを介して接続するストレージ装置２２０と特定の規格にしたがった通信を実現するために必要なプログラムを実行する演算装置である。また、プロセッサ２１５ａは、本実施例に係るストレージ制御を実現するプログラム、例えば、記憶装置２１３に記憶されているＩ／Ｏ要求実行プログラムなどを実行する。メモリ２１５ｂには、後述する１次キュー３３０を格納することができる。
【００３８】
媒体駆動装置２１６は、メインメモリ２１２や記憶装置２１３のデータを可搬記憶媒体、例えば、フロッピイディスクやＭＯディスク、ＣＤ−ＲやＤＶＤ−Ｒなどに出力し、または可搬記憶媒体からプログラムやデータ等を読み出す装置である。
【００３９】
ストレージ装置２２０は、常用コントローラ２３０と待機コントローラ２４０とを備える。常用コントローラ２３０と待機コントローラ２４０とは、内部バス２２１で接続され、互いにデータの授受を行なうことができる。
【００４０】
常用コントローラ２３０と待機コントローラ２４０とは、図４で後述するサービスレベル管理テーブル４００に設定される遅延フラグを利用して使い分けることができる。例えば、常用コントローラ２３０は、遅延フラグがＯＮの場合にだけ、待機コントローラ２４０にＩ／Ｏ要求を転送してもよい。
【００４１】
常用コントローラ２３０は、プロセッサ２３１と、キャッシュメモリ２３２と、フラッシュメモリ２３３と、ネットワークＩ／Ｆ２３４と、ストレージＩ／Ｆ２３５と、媒体駆動装置２３６と、を備える。そして、これらの装置がバスに接続されて相互にデータを受け渡しが行なえる構成となっている。
【００４２】
プロセッサ２３１は、記憶装置２２２に対する制御のためのプログラムを実行する他に本実施例に係るストレージ制御を実現するプログラム、例えば、フラッシュメモリ２３３に記憶されているサービスレベル同期プログラムやＩ／Ｏ制御プログラムなどを実行する演算装置である。
【００４３】
キャッシュメモリ２３２は、プロセッサ２３１が実行するプログラムや、後述する２次キュー３４０、記憶装置２２２に記憶されているデータの一部などを記憶するためなどに使用される揮発性の記憶装置である。キャッシュメモリ２３２には、例えば、ＲＡＭなどを使用することができる。
【００４４】
フラッシュメモリ２３３は、常用コントローラ２３０が動作するために必要なプログラムやデータの他に本実施例に係るストレージ制御を実現するプログラムを記憶する不揮発性の記憶装置である。
【００４５】
フラッシュメモリ２３３には、例えば、サービスレベル管理テーブル、仮想サーバ管理テーブル、サービスレベル同期プログラム、Ｉ／Ｏ制御プログラムなどを記憶することができる。常用コントローラ２３０は、例えば、起動時にシステム管理サーバ２５０からサービスレベル管理テーブル、仮想サーバ管理テーブルを取得してフラッシュメモリ２３３に記憶することができる。
【００４６】
なお、サービスレベル同期プログラムは、後述する図１４に示す処理を実現するためのプログラムである。Ｉ／Ｏ制御プログラムは、後述する図１５−図１７に示す処理を実現するためのプログラムである。
【００４７】
ネットワークＩ／Ｆ２３４は、ネットワーク２６０に接続する装置である。
Ｉ／Ｆポート２３５は、ストレージＩ／Ｆ２１５と特定の規格にしたがって通信を行なうＩ／Ｆである。
【００４８】
媒体駆動装置２３６は、キャッシュメモリ２３２やフラッシュメモリ２３３のデータを可搬記憶媒体、例えば、フロッピイディスクやＭＯディスク、ＣＤ−ＲやＤＶＤ−Ｒなどに出力し、または可搬記憶媒体からプログラムやデータ等を読み出す装置である。
【００４９】
待機コントローラ２４０は、常用コントローラ２３０と同様の構成を含むことができる。例えば、待機コントローラ２４０に備わるプロセッサ２４１、キャッシュメモリ２４２、およびフラッシュメモリ２４３は、それぞれ、常用コントローラ２３０に備わるプロセッサ２３１、キャッシュメモリ２３２、およびフラッシュメモリ２３３と同様のものを使用することができる。同様に、待機コントローラ２４０に備わるネットワークＩ／Ｆ２４４、Ｉ／Ｆポート２４５、および媒体駆動装置２４６は、それぞれ、常用コントローラ２３０に備わるネットワークＩ／Ｆ２３４、Ｉ／Ｆポート２３５、および媒体駆動装置２３６と同様のものを使用することができる。したがって、待機コントローラ２４０についての説明は省略する。
【００５０】
システム管理サーバ２５０は、プロセッサ２５１と、メインメモリ２５２と、記憶装置２５３と、ネットワークＩ／Ｆ２５４と、媒体駆動装置２５５と、を備える情報処理装置である。そして、これらの装置がバスに接続されて相互にデータを受け渡しが行なえる構成となっている。ただし、システム管理サーバ２５０は、独立した１つの情報処理装置であることに限定するものではない。例えば、システム管理サーバ２５０は、物理サーバ２１０が提供する後述の仮想サーバ３１１によっても実現することができる。
【００５１】
システム管理サーバ２５０に備わるプロセッサ２５１、メインメモリ２５２、および記憶装置２５３は、それぞれ、物理サーバ２１０に備わるプロセッサ２１１、メインメモリ２１２、および記憶装置２１３と同様のものを使用することができる。同様に、システム管理サーバ２５０に備わるネットワークＩ／Ｆ２５４、および媒体駆動装置２５５は、それぞれ、物理サーバ２１０に備わるネットワークＩ／Ｆ２１４、および媒体駆動装置２１６と同様のものを使用することができる。したがって、プロセッサ２５１、メインメモリ２５２、記憶装置２５３、ネットワークＩ／Ｆ２５４、および媒体駆動装置２５５についての具体的な説明は省略する。
【００５２】
なお、記憶装置２５３には、サービスレベル管理テーブル、仮想サーバ管理テーブル、サービスレベル管理テーブル用の管理プログラム、および仮想サーバ管理テーブル用の管理プログラムなどを記憶することができる。サービスレベル管理テーブル用の管理プログラムは、後述する図１２に示す処理を実現するためのプログラムである。仮想サーバ管理テーブル用の管理プログラムは、後述する図１３に示す処理を実現するためのプログラムである。
【００５３】
なお、メインメモリ２１２、２５２、メモリ２１５ｃ、記憶装置２１３、２５３、キャッシュメモリ２３２、２４２、フラッシュメモリ２３３、２４３、および可搬記憶媒体などの情報処理装置に読取り可能な記憶媒体には、非一時的（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ）な媒体を使用することができる。
【００５４】
図３は、ストレージシステム２００の概要を説明する図である。
物理サーバ２１０は、所定のプログラムを実行することにより、ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）３１０を提供する。このＶＭＭ３１０は、１または２以上の仮想サーバ（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）３１１を提供することができる。図３では、ＶＭ０１−０３の３つの仮想サーバ３１１をＶＭＭ３１０が提供している場合を例示している。ただし、ＶＭＭ３１０が提供する仮想サーバ３１１の数を限定する趣旨ではない。以下に記載する（１）−（１２）は、図３に記載する（１）−（１２）に対応する。
【００５５】
（１）ＶＭＭ３１０は、仮想サーバ３１１からＩ／Ｏ要求を受信すると、ストレージＩ／Ｆ２１５に転送する。ストレージＩ／Ｆ２１５は、ＶＭＭ３１０から受信したＩ／Ｏ要求を、仮想サーバ３１１毎に入出力用のキューを設けた一時キュー３２０に格納する。
【００５６】
図３には、３つの一時キュー３２１、３２２および３２３を使用する場合について例示しているが、使用する一時キュー３２０の数を限定する趣旨ではない。一時キュー３２１は、ＶＭ０１から受信したＩ／Ｏ要求を格納し、ＶＭ０１に出力する応答を格納するキューである。一時キュー３２１は、ＶＭ０２から受信したＩ／Ｏ要求を格納し、ＶＭ０１に出力する応答を格納するキューである。一時キュー３２１は、ＶＭ０１から受信したＩ／Ｏ要求を格納し、ＶＭ０１に出力する応答を格納するキューである。なお、図３に示すＣＯＭ０１、０２、・・・は、Ｉ／Ｏ要求を示す。また、図３に示すＳＴＳ０１、０２、・・・は、Ｉ／Ｏ要求に対する応答を示す。
【００５７】
（２）ストレージＩ／Ｆ２１５は、一時キュー３２０に格納してあるＩ／Ｏ要求を取り出す。そして、ストレージＩ／Ｆ２１５は、取り出したＩ／Ｏ要求を１次キュー３３０に格納する。なお、１次キュー３３０には、Ｉ／Ｏ要求を格納する１次キュー３３１と、Ｉ／Ｏ要求に対する応答を格納する１次キュー３３２と、が含まれる。
【００５８】
１次キュー３３１は、Ｉ／Ｏ要求の要求元の仮想サーバ３１１のサービスレベル毎に、Ｉ／Ｏ要求を格納するキューである。１次キュー３３１の具体例については、図６で後述する。１次キュー３３２は、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）形式のデータ構造により実現する単一のキューであるから説明は省略する。
【００５９】
（３）ストレージＩ／Ｆ２１５は、要求元の仮想サーバ３１１毎に、要求元の仮想サーバ３１１のサービスレベルに応じたＩ／Ｏ要求数のＩ／Ｏ要求を１次キュー３３１から取り出し、ストレージ装置２２０に対してＩ／Ｏ要求を発行する。ただし、図５で後述する仮想サーバ管理テーブル５００に０でないＩ／Ｏ抑止数が設定されている仮想サーバ３１１からのＩ／Ｏ要求の場合、ストレージＩ／Ｆ２１５は、要求元の仮想サーバ３１１のサービスレベルに応じたＩ／Ｏ要求数からＩ／Ｏ抑止数を減じた数のＩ／Ｏ要求を発行する。
【００６０】
ストレージＩ／Ｆ２１５は、一定期間毎に、１秒間あたりの転送データ量を算出する。そして、ストレージＩ／Ｆ２１５は、算出した転送データ量が、サービスレベル管理テーブル４００の性能制限を超過すると、その超過分に基づいてＩ／Ｏ抑止数を算出する。そして、ストレージＩ／Ｆ２１５は、算出したＩ／Ｏ抑止数を、仮想サーバ管理テーブル５００の、性能制限を超過した仮想サーバ３１１に設定する。
【００６１】
（４）ストレージ装置２２０の常用コントローラ２３０は、物理サーバ２１０から受信したＩ／Ｏ要求を、２次キュー３４０に格納する。２次キュー３４０には、Ｉ／Ｏ要求を格納する２次キュー３４１と、Ｉ／Ｏ要求の実行結果を格納する２次キュー３４２と、が含まれる。２次キュー３４１は、Ｉ／Ｏ要求の要求元の仮想サーバ３１１のサービスレベル毎に、Ｉ／Ｏ要求を格納するキューである。２次キュー３４１の具体例については、図７で後述する。２次キュー３４２は、１次キュー３３２と同様に、ＦＩＦＯ形式のデータ構造により実現する単一のキューであるから説明は省略する。
【００６２】
（５）常用コントローラ２３０は、要求元の仮想サーバ３１１毎に、要求元の仮想サーバ３１１のサービスレベルに応じたＩ／Ｏ要求数のＩ／Ｏ要求を２次キュー３４１から取り出して実行する。そして、常用コントローラ２３０は、Ｉ／Ｏ要求の実行結果を２次キュー３４２に格納する。また、常用コントローラ２３０は、２次キュー３４２から応答を取り出して物理サーバ２１０に送信する。
【００６３】
常用コントローラ２３０および待機コントローラ２４０は、一定期間毎に、Ｉ／Ｏ要求を受信してから応答を返すまでの応答時間の平均、すなわち、平均応答時間を算出する。そして、例えば、常用コントローラ２３０は、平均応答時間がサービスレベル管理テーブル４００の移譲レベルを超えたことを検出する。この場合、常用コントローラ２３０は、平均応答時間が移譲レベルを超えたＩ／Ｏ要求の要求元である仮想サーバ３１１のサービスレベルに対応する、サービスレベル管理テーブル４００の遅延フラグをＯＮに設定する。
【００６４】
また、常用コントローラ２３０および待機コントローラ２４０は、平均応答時間がサービスレベル管理テーブル４００の復帰レベル以下になると、平均応答時間が復帰レベル以下となったことを検出する。この場合、常用コントローラ２３０および待機コントローラ２４０は、Ｉ／Ｏ要求の要求元である仮想サーバ３１１のサービスレベルに対応する、サービスレベル管理テーブル４００の遅延フラグをＯＦＦに設定する。
【００６５】
（６）一方、サービスレベル管理テーブル４００の遅延フラグがＯＮに設定されている場合、常用コントローラ２３０は、遅延フラグがＯＮに設定されているサービスレベルの仮想サーバ３１１から受信したＩ／Ｏ要求を待機コントローラ２４０に転送する。
【００６６】
（７）待機コントローラ２４０は、常用コントローラ２３０から受信したＩ／Ｏ要求を、２次キュー３５０に格納する。２次キュー３５０は、２次キュー３４０と同様の構成を用いることができるので説明は省略する。
【００６７】
（８）待機コントローラ２４０は、要求元の仮想サーバ３１１毎に、要求元の仮想サーバ３１１のサービスレベルに応じたＩ／Ｏ要求数のＩ／Ｏ要求を２次キュー３５１から取り出して実行する。そして、待機コントローラ２４０は、Ｉ／Ｏ要求の実行結果を２次キュー３５２に格納する。
【００６８】
（９）待機コントローラ２４０は、２次キュー３５２から応答を取り出して常用コントローラ２３０に出力する。常用コントローラ２３０は、待機コントローラ２４０から受信した応答を物理サーバ２１０に出力する。
【００６９】
（１０）ストレージＩ／Ｆ２１５は、ストレージ装置２２０から応答を受信すると、受信した応答を１次キュー３３２に格納する。そして、（１１）ストレージＩ／Ｆ２１５は、１次キュー３３２から応答を取り出して、取り出した応答を一時キュー３２０に格納する。ストレージＩ／Ｆ２１５は、一時キュー３２０から応答を取り出してＶＭＭ３１０に出力する。
【００７０】
（１２）ＶＭＭ３１０は、ストレージＩ／Ｆ２１５から受信した応答を、仮想サーバＶＭ０１−０３のいずれかに転送する。
【００７１】
図４は、サービスレベル管理テーブル４００の例を示す図である。
サービスレベル管理テーブル４００には、サービスレベル、Ｉ／Ｏ優先数、性能制限、平均Ｉ／Ｏ応答時間、移譲レベル、復帰レベル、および遅延フラグについての情報などを含むことができる。
【００７２】
サービスレベルは、仮想サーバ３１１毎に設定されるサービスの優先度である。本実施例では、「高」、「中」および「低」の３種類を使用する。サービスレベルは、「高」が最も優先度が高く、「高」の次に「中」の優先度が高い。そして、「低」の優先度が最も低い。
【００７３】
Ｉ／Ｏ優先数は、サービスレベル毎に、１度に実行できるＩ／Ｏ発行数の上限を定めた値である。
性能制限は、ライト処理に対する性能制限と、リード処理に対する性能制限と、を含むことができる。性能制限とは、サービスレベル毎に許可する転送データ量（ＭＢ／Ｓ）の上限である。
【００７４】
平均Ｉ／Ｏ応答時間は、仮想サーバ３１１のＩ／Ｏ要求の実行に要する平均時間（ｍｓ）である。例えば、物理サーバ２１０は、Ｉ／Ｏ要求を発行してからその応答を受信するまでの時間の平均時間を、平均Ｉ／Ｏ応答時間として算出することができる。また、ストレージ装置２２０は、Ｉ／Ｏ要求を受信してからそのＩ／Ｏ要求に対する応答を出力するまでの時間の平均時間を、平均Ｉ／Ｏ応答時間として算出することができる。
【００７５】
移譲レベルは、受信するＩ／Ｏ要求を全て常用コントローラが処理する通常モードから、常用コントローラが受信するＩ／Ｏ要求の一部の処理を待機コントローラに移譲する負荷分散モードに移行するか否かを判別するための閾値である。移譲レベルは、平均Ｉ／Ｏ応答時間に対する割合で表わすことができる。
【００７６】
復帰レベルは、負荷分散モードから通常モードに復帰するか否かを判別するための閾値である。復帰レベルも、移譲レベルと同様に、平均Ｉ／Ｏ応答時間に対する割合で表わすことができる。
【００７７】
遅延フラグは、受信するＩ／Ｏ要求を常用コントローラまたは待機コントローラのどちらで実行するかを判定するためのフラグである。遅延フラグがＯＦＦの場合、受信するＩ／Ｏ要求を常用コントローラが実行する。また、遅延フラグがＯＮの場合、受信するＩ／Ｏ要求を待機コントローラが実行する。
【００７８】
図５は、仮想サーバ管理テーブル５００の例を示す図である。
仮想サーバ管理テーブル５００には、物理サーバ２１０、仮想サーバ、識別子、サービスレベル、平均Ｉ／Ｏ処理時間（物理サーバ）、転送データ量、Ｉ／Ｏ抑止数、および平均Ｉ／Ｏ処理時間（ストレージ装置）についての情報などを含むことができる。
【００７９】
物理サーバ２１０は、物理サーバ２１０を識別する識別情報である。
仮想サーバは、物理サーバ２１０上で動作する仮想サーバ３１１に割り当てられた固有ＩＤである。
【００８０】
識別子は、受信したＩ／Ｏ要求の要求元である仮想サーバ３１１をストレージ装置２２０が識別するための情報である。
サービスレベルは、仮想サーバ３１１に割り当てられるサービスレベルである。
【００８１】
平均Ｉ／Ｏ処理時間（物理サーバ）は、仮想サーバ３１１のＩ／Ｏ要求に対する処理が完了するまでの平均時間（ｍｓ）である。この平均Ｉ／Ｏ処理時間（物理サーバ）は、例えば、仮想サーバ３１１からＩ／Ｏ要求を受信した物理サーバ２１０がＩ／Ｏ要求をストレージ装置２２０に対して発行してから、そのＩ／Ｏ要求に対する応答を物理サーバ２１０がストレージ装置２２０から受信するまでの時間の平均値などを使用することができる。
【００８２】
転送データ量は、Ｉ／Ｏ要求による処理がライト処理の時のデータ転送量（ＭＢ／ｓ）と、Ｉ／Ｏ要求による処理がリード処理の時のデータ転送量（ＭＢ／ｓ）と、を含むことができる。
【００８３】
Ｉ／Ｏ抑止数は、データ転送量がサービスレベル管理テーブル４００の性能制限を超えた仮想サーバ３１１の、次回発行するＩ／Ｏ要求を制限する数である。Ｉ／Ｏ抑止数には、０以上の整数値を用いることができる。
【００８４】
平均Ｉ／Ｏ処理時間（ストレージ装置）は、仮想サーバ３１１のＩ／Ｏ要求に対する処理が完了するまでの平均時間（ｍｓ）である。この平均Ｉ／Ｏ処理時間（ストレージ装置）は、例えば、ストレージ装置２２０がＩ／Ｏ要求を受信してから、Ｉ／Ｏ要求に対する応答を物理サーバ２１０に送信するまでの平均時間などを使用することができる。
【００８５】
図６は、物理サーバ２１０に備わる１次キュー３３１の例を示す図である。
１次キュー３３１は、高レベルキュー３３１ａと、中レベルキュー３３１ｂと、低レベルキュー３３１ｃと、を備える。以下では、高レベルキュー３３１ａ、中レベルキュー３３１ｂ、および低レベルキュー３３１ｃ、または、図７で後述する高レベルキュー３４１ａ、中レベルキュー３４１ｂ、および低レベルキュー３４１ｃを総じて「レベル別キュー」という。
【００８６】
高レベルキュー３３１ａは、サービスレベルが「高」に設定されている仮想サーバ３１１から受信したＩ／Ｏ要求を格納するキューである。中レベルキュー３３１ｂは、サービスレベルが「中」に設定されている仮想サーバ３１１から受信したＩ／Ｏ要求を格納するキューである。低レベルキュー３３１ｃは、サービスレベルが「低」に設定されている仮想サーバ３１１から受信したＩ／Ｏ要求を格納するキューである。
【００８７】
高レベルキュー３３１ａ、中レベルキュー３３１ｂおよび低レベルキュー３３１ｃには、それぞれ、仮想サーバ３１１毎にその仮想サーバ３１１から受信したＩ／Ｏ要求だけを格納する個別キューを備える。個別キューは、ＦＩＦＯ形式のデータ構造で実現することができる。図６には、例えば、仮想サーバＶＭ０１から受信したＩ／Ｏ要求を格納する個別キュー５１１と、仮想サーバＶＭ０４から受信したＩ／Ｏ要求を格納する個別キュー５１２と、を含む高レベルキュー３３１ａが例示されている。
【００８８】
図７は、ストレージ装置２２０に備わる２次キュー３４１の例を示す図である。
２次キュー３４１は、１次キュー３３１と同様に、高レベルキュー３４１ａと、中レベルキュー３４１ｂと、低レベルキュー３４１ｃと、を備える。
【００８９】
高レベルキュー３４１ａは、サービスレベルが「高」に設定されている仮想サーバ３１１が要求元のＩ／Ｏ要求を格納するキューである。中レベルキュー３４１ｂは、サービスレベルが「中」に設定されている仮想サーバ３１１が要求元のＩ／Ｏ要求を格納するキューである。低レベルキュー３４１ｃは、サービスレベルが「低」に設定されている仮想サーバ３１１が要求元のＩ／Ｏ要求を格納するキューである。
【００９０】
高レベルキュー３４１ａ、中レベルキュー３４１ｂおよび低レベルキュー３４１ｃには、それぞれ、仮想サーバ３１１毎にその仮想サーバ３１１から受信したＩ／Ｏ要求だけを格納する個別キューを備える。個別キューは、ＦＩＦＯ形式のデータ構造で実現することができる。図７には、例えば、物理サーバＳＶ０１で動作する仮想サーバＶＭ０１が要求元のＩ／Ｏ要求を格納する個別キュー６１１と、物理サーバＳＶ０２で動作する仮想サーバＶＭ０１が要求元のＩ／Ｏ要求を格納する個別キュー６１２と、を含む高レベルキュー３４１ａが例示されている。
【００９１】
図８は、仮想サーバ３１１が送信するＩ／Ｏ要求パケット８００の例を示す図である。
Ｉ／Ｏ要求パケット８００には、例えば、ＩＥＥＥ（Ｔｈｅ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃ  Ｅｎｇｉｎｅｅｒｓ）  ８０２．１に準拠したフォーマットのパケットを使用することができる。
【００９２】
この場合、Ｉ／Ｏ要求パケット８００には、送信先ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、送信元ＭＡＣアドレス、タグヘッダ、タイプ、データ、およびＦＣＳ（Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）についての情報などを含むことができる。
【００９３】
また、タグヘッダには、ＴＰＩＤ（Ｔａｇ  Ｐｒｏｔｏｃｏｌ  Ｉｄｅｎｔｉｆｉｅｒ）と、ＴＣＩ（Ｔａｇ  Ｃｏｎｔｒｏｌ  Ｉｎｆｏｒｍａｔｉｏｎ）と、を含むことができる。そして、ＴＣＩには、ＰＣＰ（Ｐｒｉｏｒｉｔｙ  Ｃｏｄｅ  Ｐｏｉｎｔ）と、ＣＦＩ（Ｃａｎｏｎｉｃａｌ  Ｆｏｒｍａｔ  Ｉｎｄｉｃａｔｏｒ）およびＶＬＡＮ  ＩＤについての情報を含むことができる。
【００９４】
ＶＬＡＮ  ＩＤには、図５に示した仮想サーバ３１１の識別子を設定することができる。なお、図８に例示したＩ／Ｏ要求パケット８００は、ＩＥＥＥ  ８０２．１に準拠したフォーマットのパケットであるから、Ｉ／Ｏ要求パケット８００に含まれるＶＬＡＮ  ＩＤ以外の情報についての説明は省略する。ただし、Ｉ／Ｏ要求パケット８００を、ＩＥＥＥ  ８０２．１に準拠したフォーマットに限定する趣旨ではなく、Ｉ／Ｏ要求パケット８００のフォーマットは、必要に応じてあらかじめ決めておくことができる。
【００９５】
図９は、物理サーバ２１０による仮想サーバ３１１の監視処理を示すフローチャートである。
物理サーバ２１０は、起動すると（ステップＳ９００）、記憶装置２１３からサービスレベル管理テーブル４００と仮想サーバ管理テーブル５００とを読出して、メインメモリ２１２に展開する（ステップＳ９０１）。そして、物理サーバ２１０は、新規に起動される仮想サーバ３１１の監視を開始する（ステップＳ９０２  ＮＯ）。新規に起動された仮想サーバ３１１を以下では、「新規仮想サーバ」という。
【００９６】
新規仮想サーバを検出すると（ステップＳ９０３  ＹＥＳ）、物理サーバ２１０は、検出した新規仮想サーバに割り当てる固有ＩＤを決定する（ステップＳ９０４）。物理サーバ２１０は、図５に例示したように、仮想サーバ３１１の固有ＩＤは、ＶＭ０１から順にＶＭ０２、ＶＭ０３、・・・などと機械的に決めることができる。
【００９７】
そして、物理サーバ２１０は、図示しない表示装置等に、新規仮想サーバのサービスレベルの設定を促す表示を出力する。そして、利用者が、入力装置を操作して新規仮想サーバに対するサービスレベルを入力したことを検出すると、物理サーバ２１０は、その入力されたサービスレベルを取得する（ステップＳ９０５）。
【００９８】
物理サーバ２１０は、新規仮想サーバについての、ステップＳ９０４で決定した固有ＩＤと、ステップＳ９０５で取得したサービスレベルと、を自身の識別情報とともに、メインメモリ２１２の仮想サーバ管理テーブル５００に追加する（ステップＳ９０６）。
【００９９】
物理サーバ２１０は、新規仮想サーバについての、ステップＳ９０４で決定した固有ＩＤと、ステップＳ９０５で取得したサービスレベルと、を自身の識別情報とともに、システム管理サーバ２５０に通知する（ステップＳ９０７）。そして、物理サーバ２１０は、システム管理サーバ２５０に対して、新規仮想サーバの識別子を要求する（ステップＳ９０８）。その後、物理サーバ２１０は、システム管理サーバ２５０から新規仮想サーバの識別子を受信するまで待つ（ステップＳ９０９  ＮＯ）。
【０１００】
システム管理サーバ２５０から新規仮想サーバの識別子を受信すると（ステップＳ９０９  ＹＥＳ）、物理サーバ２１０は、受信した識別子をメインメモリ２１２の仮想サーバ管理テーブル５００に記憶する（ステップＳ９１０）。そして、物理サーバ２１０は、メインメモリ２１２の仮想サーバ管理テーブル５００の変更内容を、記憶装置２１３の仮想サーバ管理テーブル５００に反映し、処理をステップＳ９０３に移行する。
【０１０１】
図１０および図１１は、物理サーバ２１０によるＩ／Ｏ要求の実行処理を示すフローチャートである。なお、本実施例では、ストレージＩ／Ｆ２１５が、図１０および図１１に示す処理を行なうが、物理サーバ２１０に含まれるプロセッサ２１１に所定のプログラムを実行させることによっても行なうことができる。そこで、以下では、処理の主体を「物理サーバ２１０」として説明する。
物理サーバ２１０は、タイマを起動して一定時間の計測を開始する（ステップＳ１００１）。
【０１０２】
仮想サーバ３１１からＩ／Ｏ要求を受信すると（ステップＳ１００２）、物理サーバ２１０は、メインメモリ２１２に記憶している仮想サーバ管理テーブル５００を参照する。そして、物理サーバ２１０は、Ｉ／Ｏ要求の要求元の仮想サーバ３１１の識別子とサービスレベルを取得する（ステップＳ１００３）。以下の処理の説明では、ステップＳ１００２で受信したＩ／Ｏ要求の要求元の仮想サーバ３１１を「対象仮想サーバ」という。
【０１０３】
物理サーバ２１０は、ステップＳ１００３で取得した対象仮想サーバの識別子を、ステップＳ１００２で受信したＩ／Ｏ要求のパケットの所定の位置、例えば、図８で例示したＶＬＡＮ  ＩＤの位置に設定する（ステップＳ１００４）。
【０１０４】
物理サーバ２１０は、１次キュー３３１に含まれる高レベルキュー、中レベルキューおよび低レベルキューのうち、ステップＳ１００３で取得したサービスレベルに対応するキューに、対象仮想サーバの個別キューを生成する（ステップＳ１００５）。ただし、既に対象仮想サーバの個別キューが存在する場合、物理サーバ２１０は、ステップＳ１００５の処理をスキップしてステップＳ１００６に移行する。
【０１０５】
そして、物理サーバ２１０は、ステップＳ１００３で取得したサービスレベルに対応するキューに含まれる、ステップＳ１００５で生成した個別キューに、Ｉ／Ｏ要求を格納する（ステップＳ１００６）。
【０１０６】
物理サーバ２１０は、ステップＳ１００１で起動したタイマを参照し、所定の時刻からの経過時間を取得する（ステップＳ１００７）。
ステップＳ１００７で取得した経過時間が一定時間未満の場合（ステップＳ１００８  ＮＯ）、物理サーバ２１０は、処理をステップＳ１００２に移行する。そして、物理サーバ２１０は、ステップＳ１００２−Ｓ１００８の処理を繰り返す。
【０１０７】
ステップＳ１００７で取得した経過時間が一定時間以上の場合（ステップＳ１００８  ＹＥＳ）、物理サーバ２１０は、時間計測を終了して処理をステップＳ１００９に移行する。そして、物理サーバ２１０は、サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出する（ステップＳ１００９）。
【０１０８】
物理サーバ２１０は、物理サーバ２１０で動作するサービスレベル毎の仮想サーバ３１１の数に基づいて、サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出することができる。一例として、下記条件の場合について説明する。
【０１０９】
インタフェースの最大Ｉ／Ｏ処理数：１００，０００ＩＯＰＳ
サービスレベル「高」の仮想サーバ３１１の数：２台
サービスレベル「中」の仮想サーバ３１１の数：５台
サービスレベル「低」の仮想サーバ３１１の数：２台
サービスレベル毎のＩ／Ｏ優先数  ：図４に示したＩ／Ｏ優先数
【０１１０】
なお、最大Ｉ／Ｏ処理数とは、物理サーバ２１０に実装されている、ストレージ装置２２０とのインタフェースが、一度に処理できるＩ／Ｏの数の最大値である。インタフェースには、Ｆｉｂｅｒ  ＣｈａｎｎｅｌのＨＢＡやｉＳＣＳＩのＮＩＣなどのストレージＩ／Ｆ２１５が含まれる。最大Ｉ／Ｏ処理数は、あらかじめ記憶装置２１３などに記憶しておくことができる。本実施例中で表記する「ＩＯＰＳ」は、単位時間当りに処理されるＩ／Ｏ要求の数を示す単位である。
【０１１１】
（１）まず、物理サーバ２１０は、メインメモリ２１２に記憶されているサービスレベル管理テーブル４００を参照し、サービスレベル毎のＩ／Ｏ優先数を取得する。本実施例では、サービスレベルが「高」のＩ／Ｏ優先数は「４」、サービスレベルが「中」のＩ／Ｏ優先数は「２」、サービスレベルが「低」のＩ／Ｏ優先数は「１」である。
【０１１２】
（２）次に、物理サーバ２１０は、物理サーバ２１０で動作しているサービスレベル毎の仮想サーバ３１１の数を取得する。このサービスレベル毎の仮想サーバ３１１の数は、例えば、メインメモリ２１２に記憶されている仮想サーバ管理テーブル５００から取得することができる。本実施例では、物理サーバ２１０で動作している仮想サーバ３１１のうち、サービスレベルが「高」の仮想サーバ３１１は２台、サービスレベルが「中」の仮想サーバ３１１は５台、サービスレベルが「低」の仮想サーバ３１１は２台である。
【０１１３】
（３）そして、物理サーバ２１０は、Ｉ／Ｏ割当定数を算出する。物理サーバ２１０は、次式を用いてＩ／Ｏ割当定数を算出することができる。
「Ｉ／Ｏ割当定数」＝「インタフェースの最大Ｉ／Ｏ処理数」÷（「サービスレベル「高」のＩＯ優先数」×「サービスレベル「高」の仮想サーバ３１１の数」＋「サービスレベル「中」のＩＯ優先数」×「サービスレベル「中」の仮想サーバ３１１の数」＋「サービスレベル「低」のＩＯ優先数」×「サービスレベル「低」の仮想サーバ３１１の数」）
・・・・・（１）
【０１１４】
したがって、本実施例の場合、物理サーバ２１０は、Ｉ／Ｏ割当定数を５，０００ＩＯＰＳ（＝１００，０００ＩＯＰＳ÷（４ＩＯ×２台＋２ＩＯ×５台＋１ＩＯ×２台））と算出することができる。なお、本実施例中で表記する「ＩＯ」は、Ｉ／Ｏ処理の数を意味する。
【０１１５】
（４）そして、物理サーバ２１０は、サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出する。物理サーバ２１０は、次式を用いて、サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出することができる。
「サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数」＝
「Ｉ／Ｏ割当定数」×「サービスレベル毎のＩ／Ｏ優先数」
・・・・・（２）
【０１１６】
したがって、本実施例の場合、物理サーバ２１０は、サービスレベル「高」の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を、２０，０００ＩＯ（＝４ＩＯ×５，０００ＩＯＰＳ）と算出することができる。また、物理サーバ２１０は、サービスレベル「中」の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を、１０，０００ＩＯ（＝２ＩＯ×５，０００ＩＯＰＳ）と算出することができる。また、物理サーバ２１０は、サービスレベル「低」の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を、５，０００ＩＯ（＝１ＩＯ×５，０００ＩＯＰＳ）と算出することができる。
【０１１７】
サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出すると、物理サーバ２１０は、１次キュー３３１にＩ／Ｏ要求が記憶されている仮想サーバ３１１のうち、任意の仮想サーバ３１１を選択する（ステップＳ１０１０）。以下の処理では、選択した仮想サーバ３１１を「選択仮想サーバ」という。
【０１１８】
なお、仮想サーバ３１１の選択は、高レベルキュー３３１ａにＩ／Ｏ要求が格納されている仮想サーバ３１１、中レベルキュー３３１ｂにＩ／Ｏ要求が格納されている仮想サーバ３１１、低レベルキュー３３１ｃにＩ／Ｏ要求が格納されている仮想サーバ３１１の順に行なう。また、例えば、高レベルキュー３３１ａにＩ／Ｏ要求が格納されている仮想サーバ３１１が複数ある場合、それらの仮想サーバ３１１を全て選択した後に、中レベルキュー３３１ｂにＩ／Ｏ要求が格納されている仮想サーバ３１１を選択する。
【０１１９】
物理サーバ２１０は、メインメモリ２１２に記憶されている仮想サーバ管理テーブル５００を参照し、選択仮想サーバに、０以外のＩ／Ｏ抑止数が設定されているか否かを確認する（ステップＳ１０１１）。本実施例のＩ／Ｏ抑止数は、初期値として０が設定されているものとする。
【０１２０】
選択仮想サーバに０以外のＩ／Ｏ抑止数が設定されている場合（ステップＳ１０１２  ＹＥＳ）、物理サーバ２１０は、処理をステップＳ１０１３に移行する。この場合、物理サーバ２１０は、ステップＳ１００９で算出したＩ／Ｏ要求の数から、Ｉ／Ｏ抑止数だけ減じる（ステップＳ１０１３）。例えば、ステップＳ１００９の例で、選択仮想サーバのサービスレベルが「高」の場合、物理サーバ２１０は、２０，０００ＩＯからＩ／Ｏ抑止数だけ減算を行なう。そして、物理サーバ２１０は、処理をステップＳ１０１４に移行する。また、選択仮想サーバにＩ／Ｏ抑止数が０と設定されている場合（ステップＳ１０１２  ＮＯ）、物理サーバ２１０は、処理をステップＳ１０１４に移行する。
【０１２１】
物理サーバ２１０は、１次キュー３３１から、ステップＳ１００９で算出したＩ／Ｏ要求の数、ただし、ステップＳ１０１３の処理を行なった場合には、ステップＳ１０１３で算出したＩ／Ｏ要求の数だけ、選択仮想サーバのＩ／Ｏ要求を取り出す。そして、物理サーバ２１０は、取り出したＩ／Ｏ要求を、ストレージ装置２２０に対して発行する（ステップＳ１０１４）。
【０１２２】
物理サーバ２１０は、ステップＳ１０１４で発行したＩ／Ｏ要求の処理種別と転送データ数をメインメモリ２１２の所定の領域に記憶する（ステップＳ１０１５）。Ｉ／Ｏ要求の処理種別とは、Ｉ／Ｏ要求が要求する、例えば、ライト処理やリード処理などの処理である。Ｉ／Ｏ要求の転送データ数とは、例えば、Ｉ／Ｏ要求の処理種別がライト処理の場合のライト処理対象のデータ数や、Ｉ／Ｏ要求の処理種別がリード処理の場合のリード処理対象のデータ数などである。Ｉ／Ｏ要求の処理種別と転送データ数は、Ｉ／Ｏ要求パケットのヘッダ部などから取得することができる。
【０１２３】
さらに、物理サーバ２１０は、ステップＳ１０１４でＩ／Ｏ要求を発行した発行時刻をメインメモリ２１２の所定の領域に記憶する（ステップＳ１０１６）。そして、物理サーバ２１０は、発行したＩ／Ｏ要求の実行が完了すると、すなわち、ストレージ装置２２０からＩ／Ｏ要求に対する応答を受信すると、その応答を受信した時刻をＩ／Ｏ要求の完了時刻としてメインメモリ２１２の所定の領域に記憶する（ステップＳ１０１７）。
【０１２４】
物理サーバ２１０は、ステップＳ１０１４で発行したＩ／Ｏ要求のうち、ストレージ装置２２０から応答を受信したものについて、それぞれ、ステップＳ１０１６で記憶した発行時刻とステップＳ１０１７で記憶した完了時刻との差分から応答時間を算出する。そして、物理サーバ２１０は、算出した応答時間から、ステップＳ１０１４で発行したＩ／Ｏ要求のうちストレージ装置２２０から応答を受信したＩ／Ｏ要求の平均応答時間を算出する（ステップＳ１０１８）。物理サーバ２１０は、算出した平均応答時間を、メインメモリ２１２に記憶されている仮想サーバ管理テーブル５００の平均Ｉ／Ｏ処理時間（物理サーバ）として記憶する。
【０１２５】
物理サーバ２１０は、ステップＳ１０１４で発行したＩ／Ｏ要求のうち、ストレージ装置２２０から応答を受信したものについての転送データ量の総和を算出する。また、物理サーバ２１０は、ステップＳ１０１４で発行したＩ／Ｏ要求のうち、ストレージ装置２２０から応答を受信したものについての応答時間の総和を算出する。そして、物理サーバ２１０は、転送データ量の総和を応答時間の総和で除することにより、１秒あたりの転送データ量を算出する（ステップＳ１０１９）。また、物理サーバ２１０は、算出した１秒あたりの転送データ量を、メインメモリ２１２に記憶されている仮想サーバ管理テーブル５００の転送データ量として記憶する。
【０１２６】
物理サーバ２１０は、メインメモリ２１２に記憶されているサービスレベル管理テーブル４００を参照し、選択仮想サーバのサービスレベルに対応する性能制限を取得する（ステップＳ１０２０）。ステップＳ１０１９で算出した１秒あたりのデータ転送量が、ステップＳ１０２０で取得した性能制限を超過している場合（ステップＳ１０２１  ＹＥＳ）、物理サーバ２１０は、Ｉ／Ｏ抑止数を算出する（ステップＳ１０２２）。物理サーバ２１０は、Ｉ／Ｏ抑止数を、次の式（３）により算出することができる。
「Ｉ／Ｏ抑止数」＝
（「転送データ量Ａ」−「性能制限Ｂ」）÷（「転送データ量Ｃ」÷「Ｉ／Ｏ要求数Ｄ」）
・・・・・（３）
【０１２７】
ただし、上記式（３）において、転送データ量Ａは、ステップＳ１０１９で算出した１秒あたりの転送データ量である。また、性能制限Ｂは、メインメモリ２１２に記憶されているサービスレベル管理テーブル４００に設定されている性能制限である。また、転送データ量Ｃは、ステップＳ１０１４で発行したＩ／Ｏ要求のうち、ストレージ装置２２０から応答を受信したものについての転送データ量の総和である。また、Ｉ／Ｏ要求数Ｄは、ステップＳ１０１４で発行したＩ／Ｏ要求のうち、ストレージ装置から応答を受信したＩ／Ｏ要求の数である。
【０１２８】
Ｉ／Ｏ抑止数を算出すると、物理サーバ２１０は、処理をステップＳ１０２３に移行する。また、ステップＳ１０１９で算出した１秒あたりのデータ転送量が、ステップＳ１０２０で取得した性能制限を超過していない場合も（ステップＳ１０２１  ＮＯ）、物理サーバ２１０は、処理をステップＳ１０２３に移行する。
【０１２９】
１次キュー３３１に未発行のＩ／Ｏ要求がある場合（ステップＳ１０２３、Ｓ１０２４  ＹＥＳ）、物理サーバ２１０は、処理をステップＳ１０１０に移行する。また、１次キュー３３１に未発行のＩ／Ｏ要求がない場合（ステップＳ１０２３、Ｓ１０２４  ＮＯ）、物理サーバ２１０は、Ｉ／Ｏ要求の実行処理を終了する（ステップＳ１０２５）。
【０１３０】
物理サーバ２１０によるサービスレベル管理テーブル４００の監視処理は、ストレージ装置２２０と同様である。ストレージ装置２２０によるサービスレベル管理テーブル４００の監視処理については、図１４で後述する。
【０１３１】
なお、ステップＳ１０２２では、１秒あたりのデータ転送量が、性能制限を超過した場合にＩ／Ｏ抑止数を算出しているが、平均Ｉ／Ｏ処理時間（物理サーバ）が、例えば、サービスレベル管理テーブル４００の平均Ｉ／Ｏ応答時間を超えた場合にＩ／Ｏ抑止数を算出してもよい。
【０１３２】
図１２は、システム管理サーバ２５０によるサービスレベル管理テーブル４００の監視処理を示すフローチャートである。
システム管理サーバ２５０は、起動すると（ステップＳ１２００）、記憶装置２５３からサービスレベル管理テーブル４００を読出す。そして、システム管理サーバ２５０は、読出したサービスレベル管理テーブル４００を、メインメモリ２５２の所定の領域に展開する（ステップＳ１２０１）。
【０１３３】
そして、システム管理サーバ２５０は、記憶装置２５３に記憶されているサービスレベル管理テーブル４００の変更を監視する（ステップＳ１２０２、Ｓ１２０３  ＮＯ）。この場合、例えば、システム管理サーバ２５０は、定期的に、記憶装置２５３からサービスレベル管理テーブル４００を読出して、ステップＳ１２０１でメインメモリ２５２の所定の領域に展開したサービスレベル管理テーブル４００と、比較する。そして、記憶装置２５３から読出したサービスレベル管理テーブル４００と、メインメモリ２５２の所定の領域に展開したサービスレベル管理テーブル４００と、に違いがある場合、システム管理サーバ２５０は、サービスレベル管理テーブル４００が変更されたと判断する。
【０１３４】
記憶装置２５３に記憶されたサービスレベル管理テーブル４００に変更があった場合（ステップＳ１２０２  ＹＥＳ）、システム管理サーバ２５０は、変更された項目を、メインメモリ２５２の所定の領域に展開したサービスレベル管理テーブル４００に反映する（ステップＳ１２０４）。また、システム管理サーバ２５０は、サービスレベル管理テーブル４００の変更された項目を、物理サーバ２１０やストレージ装置２２０にも通知する。通知を受けた物理サーバ２１０は、変更された項目を、メインメモリ２１２の所定の領域に展開したサービスレベル管理テーブル４００に反映する。同様に、通知を受けたストレージ装置２２０は、変更された項目を、キャッシュメモリ２３２の所定の領域に展開したサービスレベル管理テーブル４００に反映する。
【０１３５】
以上の処理が終了すると、システム管理サーバ２５０は、処理をステップＳ１２０３に移行して、ステップＳ１２０２−Ｓ１２０４の処理を繰り返す。
【０１３６】
図１３は、システム管理サーバ２５０による仮想サーバ管理テーブル５００の監視処理を示すフローチャートである。
システム管理サーバ２５０は、起動すると（ステップＳ１３００）、記憶装置２５３から仮想サーバ管理テーブル５００を読出す。そして、システム管理サーバ２５０は、読出した仮想サーバ管理テーブル５００を、メインメモリ２５２の所定の領域に展開する（ステップＳ１３０１）。
【０１３７】
そして、システム管理サーバ２５０は、物理サーバ２１０から新規仮想サーバの固有ＩＤとサービスレベルを受信したか確認する（ステップＳ１３０２、Ｓ１３０３  ＮＯ）。
物理サーバ２１０から新規仮想サーバの固有ＩＤとサービスレベルを受信した場合（ステップＳ１３０３  ＹＥＳ）、システム管理サーバ２５０は、処理をステップＳ１３０４に移行する。この場合、システム管理サーバ２５０は、メインメモリ２５２に記憶されている仮想サーバ管理テーブル５００に、新規仮想サーバのテーブル領域を追加する（ステップＳ１３０４）。
【０１３８】
そして、システム管理サーバ２５０は、ステップＳ１３０４で追加した新規仮想サーバのテーブル領域に、ステップＳ１３０２で物理サーバ２１０から受信した新規仮想サーバの固有ＩＤとサービスレベルを反映する（ステップＳ１３０５）。
【０１３９】
システム管理サーバ２５０は、新規仮想サーバの識別子を生成する（ステップＳ１３０６）。例えば、システム管理サーバ２５０は、「ｖＬＡＮ０１」、「ｖＬＡＮ０２」、・・・のように、文字列「ｖＬＡＮ」に２桁の数字を追加して識別子を生成することができる。
【０１４０】
システム管理サーバ２５０は、メインメモリ２５２に記憶されている仮想サーバ管理テーブル５００を参照し、ステップＳ１３０６で生成した識別子と同一の識別子を検索する（ステップＳ１３０７）。
【０１４１】
ステップＳ１３０６で生成した識別子と同一の識別子が、既に仮想サーバ管理テーブル５００で使用されている場合、識別子が重複していると判断し（ステップＳ１３０８  ＹＥＳ）、システム管理サーバ２５０は、処理をステップＳ１３０９に移行する。そして、システム管理サーバ２５０は、新規仮想サーバの新たな識別子を生成する（ステップＳ１３０９）。そして、システム管理サーバ２５０は、処理をステップＳ１３０７に移行する。
【０１４２】
ステップＳ１３０６で生成した識別子と同一の識別子が、仮想サーバ管理テーブル５００で使用されていない場合、識別子は重複しないと判断し（ステップＳ１３０８  ＮＯ）、システム管理サーバ２５０は、処理をステップＳ１３１０に移行する。そして、システム管理サーバ２５０は、ステップＳ１３０６またはＳ１３０９で生成した識別子を、メインメモリ２５２に記憶している仮想サーバ管理テーブル５００に反映する（ステップＳ１３１０）。また、システム管理サーバ２５０は、メインメモリ２５２の仮想サーバ管理テーブル５００の変更内容を、記憶装置２５３の仮想サーバ管理テーブル５００に反映する。
【０１４３】
システム管理サーバ２５０は、ステップＳ１３０６または１３０９で生成した識別子を、物理サーバ２１０に通知する（ステップＳ１３１１）。また、システム管理サーバ２５０は、キャッシュメモリ２３２に記憶している仮想サーバ管理テーブル５００の更新内容を含む更新情報をストレージ装置２２０に通知する（ステップＳ１３１２）。この更新情報には、例えば、物理サーバ２１０から受信した新規仮想サーバの固有ＩＤおよびサービスレベル、ステップＳ１３０６またはＳ１３０９で生成した新規仮想サーバの識別子などを含むことができる。
【０１４４】
以上の処理が終了すると、システム管理サーバ２５０は、処理をステップＳ１３０２に移行する。
【０１４５】
図１４は、ストレージ装置２２０によるサービスレベル管理テーブル４００の監視処理を示すフローチャートである。
ストレージ装置２２０は、起動すると（ステップＳ１４００）、フラッシュメモリ２３３からサービスレベル管理テーブル４００を読出す。そして、ストレージ装置２２０は、読出したサービスレベル管理テーブル４００を、キャッシュメモリ２３２の所定の領域に展開する（ステップＳ１４０１）。
【０１４６】
ストレージ装置２２０は、システム管理サーバ２５０からサービスレベル管理テーブル４００の変更された項目を受信したか否かを確認する（ステップＳ１４０２、Ｓ１４０３  ＮＯ）。
【０１４７】
システム管理サーバ２５０からサービスレベル管理テーブル４００の変更された項目を受信した場合（ステップＳ１４０３  ＹＥＳ）、ストレージ装置２２０は、処理をステップＳ１４０４に移行する。この場合、ストレージ装置２２０は、サービスレベル管理テーブル４００の変更された項目を、キャッシュメモリ２３２の処理の領域に格納されているサービスレベル管理テーブル４００と、フラッシュメモリ２３２に記憶しているサービスレベル管理テーブル４００に反映する。そして、ストレージ装置２２０は、処理をステップＳ１４０２に移行する。
【０１４８】
図１５、図１６および図１７は、ストレージ装置２２０によるＩ／Ｏ要求の実行処理を示すフローチャートである。なお、ステップＳ１５０１−Ｓ１５１１の処理は、ストレージ装置２２０に含まれる常用コントローラ２３０が常に行なうが、説明の都合上、ストレージ装置２２０を主体として記載する。
【０１４９】
ストレージ装置２２０は、起動すると（ステップＳ１５００）、フラッシュメモリ２３３から仮想サーバ管理テーブル５００読出す。そして、ストレージ装置２２０は、読出した仮想サーバ管理テーブル５００をキャッシュメモリ２３２の所定の領域に展開する（ステップＳ１５０１）。
【０１５０】
ストレージ装置２２０は、システム管理サーバ２５０から仮想サーバ管理テーブル５００の更新情報を受信したか確認する（ステップＳ１５０２、Ｓ１５０３  ＮＯ）。
【０１５１】
システム管理サーバ２５０から仮想サーバ管理テーブル５００の更新情報を受信すると（ステップＳ１５０３  ＹＥＳ）、ストレージ装置２２０は、受信した更新情報を、フラッシュメモリ２３３に記憶されている仮想サーバ管理テーブル５００に反映する（ステップＳ１５０４）。また、ストレージ装置２２０は、受信した更新情報を、キャッシュメモリ２３２に記憶されている仮想サーバ管理テーブル５００に反映する（ステップＳ１５０４）。
【０１５２】
そして、ストレージ装置２２０は、タイマを起動して一定時間の計測を開始すると（ステップＳ１５０５）、物理サーバ２１０からＩ／Ｏ要求を受信したか確認する（ステップＳ１５０６、Ｓ１５０７  ＮＯ）。
【０１５３】
物理サーバ２１０からＩ／Ｏ要求を受信すると（ステップＳ１５０７  ＹＥＳ）、ストレージ装置２２０は、キャッシュメモリ２３２に記憶されている仮想サーバ管理テーブル５００を参照する。そして、ストレージ装置２２０は、Ｉ／Ｏ要求に含まれる識別子に対応する仮想サーバ３１１と、その仮想サーバ３１１のサービスレベルと、を特定する（ステップＳ１５０８）。このときの、Ｉ／Ｏ要求に含まれる識別子に対応する仮想サーバ３１１を、以下の処理では「対象仮想サーバ」という。Ｉ／Ｏ要求に含まれる識別子とは、図８に示したＶＬＡＮ  ＩＤに含まれる情報である。
【０１５４】
また、ストレージ装置２２０は、キャッシュメモリ２３２に記憶されているサービスレベル管理テーブル４００を参照し、ステップＳ１５０９で特定したサービスレベルの遅延フラグを取得する（ステップＳ１５０９）。そして、遅延フラグがＯＮの場合（ステップＳ１５１０  ＮＯ）、ストレージ装置２２０は、Ｉ／Ｏ要求を待機コントローラ２４０に転送する（ステップＳ１５１１）。そして、ストレージ装置２２０は、処理をステップＳ１５１２に移行する。この場合、以後の処理は、ストレージ装置２２０に含まれる待機コントローラ２４０が行なう。
【０１５５】
遅延フラグがＯＦＦの場合（ステップＳ１５１０  ＹＥＳ）、ストレージ装置２２０は、処理をステップＳ１５１２に移行する。この場合、以後の処理は、ストレージ装置２２０に含まれる常用コントローラ２３０が継続して行なう。以後の処理は、常用コントローラ２３０と待機コントローラ２４０とで同じなので、処理の主体はストレージ装置２２０として説明する。
【０１５６】
ストレージ装置２２０は、対象仮想サーバのサービスレベルに応じたレベル別キュー、すなわち、高レベルキュー、中レベルキュー、低レベルキューのいずれかに、対象仮想サーバ用の個別キューを生成する（ステップＳ１５１２）。既に対象仮想サーバ用の個別キューが存在する場合、ストレージ装置２２０は、ステップＳ１５１２をスキップしてステップＳ１５１３に移行することができる。ストレージ装置２２０は、対象仮想サーバ用の個別キューに、対象仮想サーバのＩ／Ｏ要求を格納する（ステップＳ１５１３）。
【０１５７】
ストレージ装置２２０は、ステップＳ１５０５で起動したタイマを参照し、所定の時刻からの経過時間を取得する（ステップＳ１５１４）。
ステップＳ１５１４で取得した経過時間が一定期間未満の場合（ステップＳ１５１５  ＮＯ）、ストレージ装置２２０は、処理をステップＳ１５０６に移行する。そして、ストレージ装置２２０は、ステップＳ１５０６−Ｓ１５１５の処理を繰り返す。
【０１５８】
ステップＳ１５１４で取得した経過時間が一定時間以上の場合（ステップＳ１５１５  ＹＥＳ）、ストレージ装置２２０は、時間計測を終了して処理をステップＳ１５１６に移行する。この場合、ストレージ装置２２０は、キャッシュメモリ２３２に記憶されているサービスレベル管理テーブル４００を参照し、サービスレベル毎のＩ／Ｏ優先数を取得する（ステップＳ１５１６）。そして、ストレージ装置２２０は、サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出する（ステップＳ１５１７）。サービスレベル毎の、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数は、ステップＳ１００９と同様に算出することができる。
【０１５９】
ストレージ装置２２０は、２次キュー３４１にＩ／Ｏ要求が格納されている仮想サーバ３１１のうち任意の仮想サーバを選択する。選択の仕方については、ステップＳ１０１０に説明したとおりである。ストレージ装置２２０は、選択した仮想サーバ３１１用の個別キューから、ステップＳ１５１７で算出した数のＩ／Ｏ要求を取り出して実行する（ステップＳ１５１８）。以下の処理では、ステップＳ１５１８で選択された仮想サーバ３１１を「選択仮想サーバ」という。
【０１６０】
ストレージ装置２２０は、ステップＳ１５１８で実行したＩ／Ｏ要求の処理種別と転送データ数をキャッシュメモリ２３２の所定の領域に記憶する（ステップＳ１５１９）。Ｉ／Ｏ要求の処理種別と転送データ数は、ステップＳ１０１５で説明したとおりである。
【０１６１】
また、ストレージ装置２２０は、ステップＳ１５１８でＩ／Ｏ要求を実行した開始時刻をキャッシュメモリ２３２の所定の領域に記憶する（ステップＳ１５２０）。そして、ストレージ装置２２０は、Ｉ／Ｏ要求の実行が終了すると、Ｉ／Ｏ要求に対する処理が完了した旨の応答を物理サーバ２１０に出力する。ストレージ装置２２０は、応答を出力すると、現在時刻をキャッシュメモリ２３２の所定の領域に記憶する（ステップＳ１５２１）。
【０１６２】
ストレージ装置２２０は、ステップＳ１５１８で実行したＩ／Ｏ要求のうち、処理を終了したＩ／Ｏ要求について、それぞれ、ステップＳ１５２０で記憶した開始時刻とステップＳ１５２１で記憶した終了時刻との差分から応答時間を算出する。そして、ストレージ装置２２０は、算出した応答時間から、ステップＳ１５１８で実行したＩ／Ｏ要求のうち、処理を終了したＩ／Ｏ要求の平均応答時間を算出する（ステップＳ１５２２）。ストレージ装置２２０は、算出した平均応答時間を、キャッシュメモリ２３２に記憶されている仮想サーバ管理テーブル５００の平均Ｉ／Ｏ処理時間（ストレージ装置）に反映する（ステップＳ１５２２）。
【０１６３】
ストレージ装置２２０は、キャッシュメモリ２３２に記憶されているサービスレベル管理テーブル４００を参照し、選択仮想サーバのサービスレベルに応じた遅延フラグを取得する（ステップＳ１５２３）。
【０１６４】
遅延フラグがＯＦＦの場合（ステップＳ１５２４  ＹＥＳ）、ストレージ装置２２０は、移譲レベルの平均Ｉ／Ｏ応答時間を算出する（ステップＳ１５２５）。移譲レベルの平均Ｉ／Ｏ応答時間は、キャッシュメモリ２３２に記憶されているサービスレベル管理テーブル４００に設定されている平均Ｉ／Ｏ応答時間と移譲レベルとの乗算により算出することができる。
【０１６５】
ストレージ装置２２０は、ステップＳ１５２５で算出した、移譲レベルの平均Ｉ／Ｏ応答時間と、ステップＳ１５２２で算出した、選択仮想サーバの平均Ｉ／Ｏ処理時間（ストレージ装置）と、を比較する（ステップＳ１５２６）。
【０１６６】
選択仮想サーバの平均Ｉ／Ｏ処理時間（ストレージ装置）が、移譲レベルの平均Ｉ／Ｏ応答時間を超えた場合（ステップＳ１５２７  ＹＥＳ）、ストレージ装置２２０は、遅延フラグをＯＮに設定する（ステップＳ１５２８）。そして、ストレージ装置２２０は、処理をステップＳ１５３３に移行する。また、選択仮想サーバの平均Ｉ／Ｏ処理時間（ストレージ装置）が、移譲レベルの平均Ｉ／Ｏ応答時間以下の場合も（ステップＳ１５２７  ＮＯ）、ストレージ装置２２０は、処理をステップＳ１５３３に移行する。
【０１６７】
一方、遅延フラグがＯＮの場合（ステップＳ１５２４  ＮＯ）、ストレージ装置２２０は、復帰レベルの平均Ｉ／Ｏ応答時間を算出する（ステップＳ１５２９）。復帰レベルの平均Ｉ／Ｏ応答時間は、キャッシュメモリ２３２に記憶されているサービスレベル管理テーブル４００に設定されている平均Ｉ／Ｏ応答時間と復帰レベルとの乗算により算出することができる。
【０１６８】
ストレージ装置２２０は、ステップＳ１５２９で算出した復帰レベルの平均Ｉ／Ｏ応答時間と、ステップＳ１５２２で算出した選択仮想サーバと同じサービスレベルの仮想サーバそれぞれの平均Ｉ／Ｏ処理時間（ストレージ装置）と、を比較する（ステップＳ１５３０）。
【０１６９】
選択仮想サーバと同じサービスレベルの仮想サーバの平均Ｉ／Ｏ処理時間（ストレージ装置）が、全て復帰レベルの平均Ｉ／Ｏ応答時間以下の場合（ステップＳ１５３１  ＹＥＳ）、ストレージ装置２２０は、遅延フラグをＯＦＦに設定する（ステップＳ１５３２）。そして、ストレージ装置２２０は、処理をステップＳ１５３３に移行する。
【０１７０】
また、選択仮想サーバと同じサービスレベルの仮想サーバの平均Ｉ／Ｏ処理時間（ストレージ装置）のいずれかが、復帰レベルの平均Ｉ／Ｏ応答時間を超えている場合も（ステップＳ１５３１  ＮＯ）、ストレージ装置２２０は、処理をステップＳ１５３３に移行する。
【０１７１】
２次キュー３４１に未実行のＩ／Ｏ要求がある場合、すなわち、Ｉ／Ｏ要求が格納されている個別キューがある場合（ステップＳ１５３３、Ｓ１５３４  ＹＥＳ）、ストレージ装置２２０は、処理をステップＳ１５１８に移行する。
【０１７２】
また、２次キュー３４１に未実行のＩ／Ｏ要求がない場合、すなわち、Ｉ／Ｏ要求が格納されている個別キューがない場合（ステップＳ１５３３、Ｓ１５３４  ＮＯ）、ストレージ装置２２０は、Ｉ／Ｏ要求の実行処理を終了する（ステップＳ１５３５）。
【０１７３】
なお、ステップＳ１５２８では、平均Ｉ／Ｏ処理時間（ストレージ装置）が、移譲レベルの平均Ｉ／Ｏ応答時間を超えた場合に、遅延フラグをＯＮに設定しているが、これに限定する趣旨ではない。ステップＳ１５２８では、例えば、１秒当りの転送データ量が移譲レベルの転送データ量を超えた場合に遅延フラグをＯＮに設定してもよい。この場合、１秒当りの転送データ量は、ステップＳ１０１５−Ｓ１０１９と同様の処理によって算出することができる。また、移譲レベルの転送データ量は、例えば、サービスレベル管理テーブル４００に設定されている性能制限と移譲レベルとの乗算により算出することができる。同様に、ステップＳ１５３２では、１秒当りの転送データ量が復帰レベルの転送データ量以下の場合に遅延フラグをＯＦＦに設定してもよい。
【０１７４】
以上に述べたように、ストレージ装置２２０は、受信したＩ／Ｏ要求に設定された識別子に対応する仮想サーバ３１１のサービスレベルを特定する。そして、ストレージ装置２２０は、受信したＩ／Ｏ要求を、特定したサービスレベルに対応する、２次キュー３４１のレベル別キューに格納する。また、ストレージ装置２２０は、サービスレベル毎に、仮想サーバ３１１が実行可能なＩ／Ｏ要求の数を算出する。そして、ストレージ装置２２０は、算出した数のＩ／Ｏ要求を２次キュー３４１から取得して実行する。このように、ストレージ装置２２０は、仮想サーバ３１１からストレージ装置２２０へのデータアクセスを、サービスレベルを利用して仮想サーバ３１１毎に制御することが可能となる。例えば、ストレージ装置２２０は、仮想サーバ３１１毎にサービスレベルを設定することにより、仮想サーバ３１１毎に、仮想サーバ３１１からストレージ装置２２０へのデータアクセスに優先順位を付けて制御する優先制御が可能となる。
【０１７５】
また、ストレージ装置２２０は、サービスレベル毎に、通常モードと負荷分散モードを持つ。そして、ストレージ装置２２０は、平均Ｉ／Ｏ処理時間（ストレージ装置）が移譲レベルを超えると、通常モードから負荷分散モードに切り替る。この場合、ストレージ装置２２０は、負荷分散モードに切り替ったサービスレベルの仮想サーバ３１１から受信したＩ／Ｏ要求を待機コントローラ２４０で処理するので、ストレージ装置２２０は、サービスレベル毎に、Ｉ／Ｏ要求の処理にかかる負荷を分散することができる。この場合、Ｉ／Ｏ要求の処理にかかる負荷が、常用コントローラ２３０と待機コントローラ２４０とに分散されるので、移譲レベルを超過した平均Ｉ／Ｏ処理時間（ストレージ装置）を短縮することが可能となる。
【０１７６】
また、物理サーバ２１０は、サービスレベル管理テーブル４００の性能制限を超過すると、超過した分に応じたＩ／Ｏ抑止数を算出し、次にＩ／Ｏ要求を発行する際には、Ｉ／Ｏ抑止数だけ減じた数のＩ／Ｏ要求を発行する。その結果、物理サーバ２１０は、サービスレベル毎に、サービスレベル管理テーブル４００の性能制限を含む一定範囲内に、仮想サーバ３１１からのストレージ装置２２０へのデータアクセスの性能を制御することが可能となる。
【符号の説明】
【０１７７】
１００      ストレージシステム
１１０      サーバ装置
１１１      仮想機械
１１２      記憶部
１１３      サービスレベル別キュー
１１４      制御部
１１５      インタフェース部
１２０      ストレージ装置
１２１      記憶部
１２２      インタフェース部
１２３      サービスレベル別入出力キュー
１２４      制御部
１２５      記憶装置
【図１】
0005891900.tif 000002
【図２】
0005891900.tif 000003
【図３】
0005891900.tif 000004
【図４】
0005891900.tif 000005
【図５】
0005891900.tif 000006
【図６】
0005891900.tif 000007
【図７】
0005891900.tif 000008
【図８】
0005891900.tif 000009
【図９】
0005891900.tif 000010
【図１０】
0005891900.tif 000011
【図１１】
0005891900.tif 000012
【図１２】
0005891900.tif 000013
【図１３】
0005891900.tif 000014
【図１４】
0005891900.tif 000015
【図１５】
0005891900.tif 000016
【図１６】
0005891900.tif 000017
【図１７】
0005891900.tif 000018