(57)【要約】  プロセッサとメモリとを備えた計算機と、前記計算機の資源を仮想化して複数の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムでデータ転送を制御する方法であって、前記計算機は、ストレージ装置に接続されるアダプタを有し、アダプタがストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを仮想計算機毎に測定し、仮想化部は、アダプタから取得したデータの転送量とＩ／Ｏ回数に基づいて、データ転送量の上限値と、Ｉ／Ｏ回数の上限値を仮想計算機毎に演算して仮想計算機に通知し、仮想計算機が、ストレージ装置との間で送受信するデータをキューに保持し、仮想計算機が、データ転送量の上限値と、Ｉ／Ｏ回数の上限値を超えないように前記キューから出力するデータを制御する。
2014118969.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリとを備えた計算機と、
前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムであって、
前記計算機は、
ストレージ装置に接続されるアダプタを有し、
前記アダプタは、
前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する転送処理部と、
前記データの転送量とＩ／Ｏ回数を前記仮想計算機毎に格納するカウンタと、を有し、
前記仮想計算機は、
前記ストレージ装置との間で送受信するデータを保持するキューと、
前記データの転送量とＩ／Ｏ回数を制御する帯域制御部と、を有し、
前記仮想化部は、
前記アダプタのカウンタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算する閾値演算部を有し、
前記帯域制御部は、
前記仮想化部が演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を超えないように前記キューから出力するデータを制御することを特徴とする仮想計算機システム。
【請求項２】
請求項１に記載の仮想計算機システムであって、
前記仮想計算機は、
前記データの転送量を格納する帯域値と、前記Ｉ／Ｏ回数を格納するＩ／Ｏ回数値と、前記データの転送量の上限値を格納する帯域閾値と、前記Ｉ／Ｏ回数の上限値を格納するＩ／Ｏ回数閾値と、を有し、
前記帯域制御部は、
前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値以下で、かつ前記Ｉ／Ｏ回数値がＩ／Ｏ回数閾値以下であれば前記キューからデータを出力することを特徴とする仮想計算機システム。
【請求項３】
請求項２に記載の仮想計算機システムであって、
前記帯域制御部は、
前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値を超え、またはＩ／Ｏ回数値がＩ／Ｏ回数閾値を超える場合は、前記帯域値及び前記Ｉ／Ｏ回数閾値がリセットされるまでは前記キューからデータの出力を禁止することを特徴とする仮想計算機システム。
【請求項４】
請求項２に記載の仮想計算機システムであって、
前記閾値演算部は、
所定の周期が経過する度に、前記アダプタから前記データの転送量とＩ／Ｏ回数を取得して、所定のルールに基づいて前記取得した前記データの転送量とＩ／Ｏ回数から、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知し、
前記帯域制御部は、
前記閾値演算部の前記データの転送量の上限値と前記Ｉ／Ｏ回数の上限値の通知を受信したことに基づいて、前記仮想計算機の帯域値と、前記Ｉ／Ｏ回数値とをリセットすることを特徴とする仮想計算機システム。
【請求項５】
請求項４に記載の仮想計算機システムであって、
前記所定のルールは、
前記仮想計算機ごとに予め設定された増分値を加算することを特徴とする仮想計算機システム。
【請求項６】
プロセッサとメモリとを備えた計算機と、前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムでデータ転送を制御する方法であって、
前記計算機は、ストレージ装置に接続されるアダプタを有し、
前記アダプタが、前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する第１のステップと、
前記仮想化部は、前記アダプタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知する第２のステップと、
前記仮想計算機が、前記ストレージ装置との間で送受信するデータをキューに保持する第３のステップと、
前記仮想計算機が、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を超えないように前記キューから出力するデータを制御する第４のステップと、
を含むことを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項７】
請求項６に記載の仮想計算機システムのデータ転送制御方法であって、
前記第２のステップは、
前記仮想計算機が、前記データの転送量を帯域値に格納し、前記Ｉ／Ｏ回数をＩ／Ｏ回数値に格納し、前記データの転送量の上限値を帯域閾値に格納し、前記Ｉ／Ｏ回数の上限値をＩ／Ｏ回数閾値に格納するステップを含み、
前記第４のステップは、
前記仮想計算機が、前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値以下で、かつ前記Ｉ／Ｏ回数値がＩ／Ｏ回数閾値以下であれば前記キューからデータを出力することを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項８】
請求項７に記載の仮想計算機システムのデータ転送制御方法であって、
前記第４のステップは、
前記仮想計算機が、前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値を超え、またはＩ／Ｏ回数値がＩ／Ｏ回数閾値を超える場合は、前記帯域値及び前記Ｉ／Ｏ回数閾値がリセットされるまでは前記キューからデータの出力を禁止することを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項９】
請求項７に記載の仮想計算機システムのデータ転送制御方法であって、
前記第２のステップは、
前記仮想計算機は、所定の周期が経過する度に、前記アダプタから前記データの転送量とＩ／Ｏ回数を取得して、所定のルールに基づいて前記取得した前記データの転送量とＩ／Ｏ回数から、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知するステップと、
前記仮想計算機は、前記データの転送量の上限値と前記Ｉ／Ｏ回数の上限値の通知を受信したことに基づいて、前記仮想計算機の帯域値と、前記Ｉ／Ｏ回数値とをリセットするステップと、
を含むことを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項１０】
請求項９に記載の仮想計算機システムのデータ転送制御方法であって、
前記所定のルールは、
前記仮想計算機ごとに予め設定された増分値を加算することを特徴とする仮想計算機システムのデータ転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイバチャネルに接続されるＨＢＡ（Host Bus Adapter）を、複数の仮想計算機で共用する技術に関する。
【背景技術】
【０００２】
計算機の仮想化技術およびクラウドコンピューティング技術の発展により、ホスト計算機における物理的な計算機資源を、複数の仮想的なゲスト計算機（仮想計算機）で共用して利用するシステムは、一般的に利用されるようになってきている。仮想計算機システムでは、物理的な計算機資源を効率的に利用しやすくなる反面、適切にゲスト計算機間の負荷を制御しなければならない。ゲスト計算機の負荷を制御しない場合、複数のゲスト計算機間で共用している計算機資源を１つのゲスト計算機が占有したり、重要なゲスト計算機のために確保しておきたい計算機資源を、重要でないゲスト計算機が使ってしまったりする可能性がある。【０００３】
近年は、ミッションクリティカルな分野で仮想計算機システムが用いられる事例も増加傾向にあり、各々のゲスト計算機に割り当てる計算機資源を制御する機能はますます重要となってくると考えられる。特に、ディスク装置と通信するために用いられるファイバチャネルＨＢＡは、ゲスト計算機とディスク装置またはＳＡＮ（Storage Area Network）とのインターフェースとして重要な役割を担っている。このため、多数のゲスト計算機が存在する仮想計算機システムにおいても、各々のゲスト計算機に対して、効率良くファイバチャネルＨＢＡの帯域を割り当てられる技術の実現が求められている。【０００４】
特許文献１は、ネットワークにおけるパケット転送装置において帯域制御を実現した例である。特許文献１では、通信インターフェースにおいて送信パケットのサイズを解析することにより、送信するデータの量を検出し、パケットを送信するタイミングを制御することで帯域制御を実現していた。【０００５】
非特許文献１は、仮想化ソフトウェアを用いて複数のゲスト計算機間で共有される、ファイバチャネルＨＢＡの帯域制御を行う例である。非特許文献２では、仮想化ソフトウェアにおけるＩ／Ｏ数を、ＳＣＳＩ Ｉ／Ｏ単位で計測し、帯域を制御するものである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１０９２９９号公報
【非特許文献】
【０００７】
【非特許文献１】”FIBER CHANNEL Physical Interface-4 (FC-PI-4) Rev.7.00”、Chapter.6、Table 6、 Single-mode link classes1 (OS1, OS2) 800-SMLC-L: Data rate: 800MB/s、[online]、Global Engineering、２００７年９月２０日、[平成２５年１月１５日検索]
【非特許文献２】「VMware vSphere 5.0 評価ガイド Vol.2： 高度なストレージ機能テクニカル ホワイト ペーパー」、第48頁 IOPS 制限の効果の確認、[online]、ヴイエムウェア株式会社、[平成２５年１月１５日検索]
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ファイバチャネルＨＢＡにおいて、１つの物理的なＨＢＡポートから発行可能な１秒あたりのデータ送受信量（ＭＢ／ｓ）は、共通規格（例えば、非特許文献１）によって定められている。例えば、８Ｇｂｐｓファイバチャネルにおいては、８００ＭＢ／ｓである。このため、このＨＢＡポートを共有する各々のゲスト計算機が使用できる１秒あたりのデータ送受信量を保障するためには、各々のゲスト計算機の所定の周期あたりのデータ送受信量に閾値を設け、データ送受信量の合計がファイバチャネルＨＢＡの規格（８Ｇｂｐｓの場合は８００ＭＢ／ｓ）を超えないように制御することが必要である。【０００９】
上記非特許文献２の手法は、ＳＣＳＩ Ｉ／Ｏ数とデータ送受信量が比例するものと見なしてＳＣＳＩ Ｉ／Ｏ数をカウントすることにより負荷を推定し、ＳＣＳＩ Ｉ／Ｏの数を制御する手法である。この手法を用いると、「１つのＳＣＳＩ Ｉ／Ｏあたりのデータ送受信量」が常に一定ならば、ファイバチャネルＨＢＡにおける各々のゲスト計算機の制御間隔あたりのデータ送受信量を制御できる。しかし、「１つのＳＣＳＩ Ｉ／Ｏあたりのデータ送受信量」がゲスト計算機によって異なる場合は、ＳＣＳＩ Ｉ／Ｏ数がデータ送受信量に比例するという仮定が成り立たないため、各々のゲスト計算機の制御間隔あたりのデータ送受信量のカウント値と、実際のデータ通信量との間の誤差が大きくなるという課題があった。【００１０】
たとえば、ゲスト計算機１とゲスト計算機２の間で、ゲスト計算機２のデータ送受信量をゲスト計算機１の１００分の１に制限するために、ゲスト計算機２のコマンド数をゲスト計算機１の１００分の１となるように制限したと仮定する。このとき、ゲスト計算機２の「１つのＳＣＳＩ Ｉ／Ｏあたりのデータ送受信量」がゲスト計算機１の１００倍であれば、ゲスト計算機２のＳＣＳＩ Ｉ／Ｏ数をゲスト計算機１の１００分の１に抑えることができたとしても、ゲスト計算機２のデータ送受信量はゲスト計算機１のデータ送受信量とほぼ同じとなる。その場合、ゲスト計算機２のデータ送受信量をゲスト計算機１の１００分の１に抑えるという目的は達成できない、という課題があった。【００１１】
データ送受信量に基づいて帯域制御を実現した例として、上記特許文献１が知られている。しかしながら、特許文献１の手法では、実際にパケットを送信する前に、パケットのデータ量を、「制御間隔あたりのデータ送信量を保持するカウント値」に加算しているため、カウント値と実際のデータ送受信量との間に誤差が生じる可能性がある。【００１２】
例として、フレームサイズ８ＭＢのＳＣＳＩ Ｉ／Ｏコマンドを送受信する場合を考える。この場合、データ送受信開始から１ミリ秒経過した時点では、実際には８００ＫＢ分のデータしか送受信できていないにもかかわらず、特許文献１の手法では、８ＭＢのデータを送受信したとカウントする。つまり、特許文献１の手法は、１つのＩ／Ｏコマンドで送受信するデータサイズが大きくなるほどに、カウント値と実際に使用しているデータ送受信量との誤差が大きくなる、という課題があった。【００１３】
一方、データベースの分野ではＳＣＳＩに準じた通信を行う際に、１つのＳＣＳＩコマンドで転送するデータ量を大きく(１ＭＢ程度)設定することがある。この様な分野では、「１つのＩ／Ｏコマンドで転送するデータサイズが大きくなったとしても、カウント値と実際に使用しているデータ送受信量との誤差が変わらない」手法が求められていた。
【課題を解決するための手段】
【００１４】
本発明は、プロセッサとメモリとを備えた計算機と、前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムであって、前記計算機は、ストレージ装置に接続されるアダプタを有し、前記アダプタは、前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する転送処理部と、前記データの転送量とＩ／Ｏ回数を前記仮想計算機毎に格納するカウンタと、を有し、前記仮想計算機は、前記ストレージ装置との間で送受信するデータを保持するキューと、前記データの転送量とＩ／Ｏ回数を制御する帯域制御部と、を有し、前記仮想化部は、前記アダプタのカウンタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算する閾値演算部を有し、前記帯域制御部は、前記仮想化部が演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を超えないように前記キューから出力するデータを制御する。
【発明の効果】
【００１５】
本発明により、ストレージ装置に接続されるアダプタ（例えば、ＨＢＡ）のＩ／Ｏについて、Ｉ／Ｏ回数に基づく帯域制御のみでなく、実際に各ゲスト計算機が送受信したデータ量に基づく帯域制御を実現することが可能となる。これにより、従来のＩ／Ｏ回数のみによる帯域制御に対して、ＨＢＡの帯域を超えることなく各ゲスト計算機毎に正確な帯域制御が実現できる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施例を示し、仮想計算機システムの一例を示すブロック図である。
【図２】本発明の実施例を示し、ハイパバイザの一例を示すブロック図である。
【図３】本発明の実施例を示し、ゲスト計算機の一例を示すブロック図である。
【図４】本発明の実施例を示し、ＨＢＡの一例を示すブロック図である。
【図５】本発明の実施例を示し、仮想計算機システムで行われるＳＣＳＩ  Ｉ／Ｏ処理の一例を示すシーケンス図である。
【図６】本発明の実施例を示し、仮想計算機システムで行われる閾値更新処理の一例を示すシーケンス図である。
【図７】本発明の実施例を示し、ハイパーバイザが管理する閾値更新ルールの一例を示す図である。
【図８】本発明の実施例を示し、コマンド数とデータ量と目標帯域の関係を示す図である。
【図９】本発明の実施例を示し、仮想ＷＷＮテーブルの一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明を適用する仮想計算機システムについて、図面を参照して詳細に説明する。
【００１８】
図１は、本発明の仮想計算機システムの一例を示すブロック図である。図１において、ホスト計算機１００は、演算を実行する複数の物理プロセッサ１０９−１〜１０９−ｎと、データやプログラムを格納する物理メモリ１１４と、ＬＡＮ２８０と通信を行うＮＩＣ（Network Interface Card）２７０と、ＳＡＮ（Storage Area Network）２５０を介してストレージ装置２６０を制御するファイバチャネルＨＢＡ（HOST BUS ADAPTER）２１０と、ファイバチャネルＨＢＡ２１０及びＮＩＣ２７０と各物理プロセッサ１０９−１〜１０９−ｎとを接続するチップセット１０８と、を備える。
【００１９】
ハイパーバイザ（仮想化部）１７０は、ホスト計算機１００の物理プロセッサ１０９−１〜１０９−ｎや物理メモリ１１４等の物理計算機資源を分割して仮想計算機資源３００（図２参照）を生成し、仮想プロセッサや仮想メモリなどの仮想計算機資源（または論理計算機資源）をゲスト計算機（または仮想計算機）１〜ｎ（１０５−１〜１０５−ｎ）に割り当てることで、ゲスト計算機１０５−１〜１０５−ｎをホスト計算機１００上に構成する。
【００２０】
なお、ゲスト計算機ｎ（１０５−ｎ）も、ゲスト計算機１（１０５−１）と同様の構成であるため、本実施例ではゲスト計算機ｎ（１０５−ｎ）の説明を省略し、ゲスト計算機１（１０５−１）について説明する。なお、以下では、ゲスト計算機１０５−１〜１０５−ｎの総称を符号１０５で表記し、物理プロセッサ１０９−１〜１０９−ｎの総称を符号１０９で表記する。以下、他の符号についても同様であり、構成要素の総称を示す符号は”−”以降を削除した符号を用いる。
【００２１】
＜概要＞
本発明は、ファイバチャネルＨＢＡ（以下、ＨＢＡとする）２１０を複数のゲスト計算機１０５で共有し、各ゲスト計算機１０５がそれぞれ使用するＨＢＡ２１０の帯域とＩ／Ｏ回数の上限値をハイパーバイザ１７０が決定し、各ゲスト計算機１０５の仮想ドライバに含まれる帯域制御部がＨＢＡ２１０の帯域とＩ／Ｏ回数を規制する。
【００２２】
このため、各ゲスト計算機１０５が使用したＨＢＡ２１０の帯域（データ量）とＩ／Ｏ回数を、ＨＢＡ２１０の転送処理部がゲスト計算機１０５毎に測定する。そして、ハイパーバイザ１７０は、所定の時間間隔（例えば、１０msec）ごとに、各ゲスト計算機１０５が使用した帯域とＩ／Ｏ回数をＨＢＡ２１０から取得して、各ゲスト計算機１０５がそれぞれ使用するＨＢＡ２１０の帯域の上限値である帯域閾値と、Ｉ／Ｏ回数（以下ＩＯＰＳとする）の上限値であるＩＯＰＳ閾値（Ｉ／Ｏ回数閾値）とを算出して更新する。なお、ＩＯＰＳ閾値は、所定の時間間隔あたりにゲスト計算機１０５が発行可能なＩ／Ｏ数である。帯域閾値は、所定の時間間隔あたりにゲスト計算機１０５が発行可能なデータの送受信量である。なお、所定の時間間隔としては、ゲストＯＳ１２５のタイマ割り込みの周期等を用いるようにしてもよい。
【００２３】
ゲスト計算機１０５は、後述するように所定のタイミングで帯域閾値と、ＩＯＰＳ閾値をハイパーバイザ１７０から取得し、仮想ドライバに含まれる帯域制御部が、ＨＢＡ２１０の帯域を制御する。
【００２４】
＜ハイパーバイザ＞
図２は、ハイパーバイザ１７０の一例を示すブロック図である。
【００２５】
ハイパーバイザ１７０は、ゲスト計算機１０５を制御するためのプログラムであり、ホスト計算機１００の物理メモリ１１４にロードされて、物理プロセッサ１０９によって実行される。
【００２６】
ハイパーバイザ１７０は、ホスト計算機１００の物理プロセッサ１０９−１〜１０９−ｎや物理メモリ１１４等の物理資源を分割し、仮想プロセッサ３０１−１〜３０１−ｎや仮想メモリ３０２−１〜３０２−ｎ及び仮想ＨＢＡ３０３−１〜３０３−ｎを仮想計算機資源３００として生成し、ゲスト計算機１〜ｎ（１０５−１〜１０５−ｎ）に割り当てる。なお、図示はしないが、ＮＩＣ２７０についても、ＨＢＡ２１０と同様にハイパーバイザ１７０が仮想ＮＩＣをゲスト計算機１０５に提供する。
【００２７】
ハイパーバイザ１７０は、ゲスト計算機１０５−１〜１０５−ｎに割り当てる仮想ＨＢＡ３０３−１〜３０３−ｎのそれぞれについて、仮想ＷＷＮ（図中ＶＷＷＮ−１〜ＶＷＷＮ−ｎ）を割り当てる。そして、ハイパーバイザ１７０は、仮想ＨＢＡ３０３に仮想ＷＷＮ（World Wide Name）を割り当てる度に、当該仮想ＷＷＮと当該仮想ＨＢＡ３０３を割り当てたゲスト計算機１０５の識別子を物理的なＨＢＡ２１０へ通知する。
【００２８】
ＨＢＡ２１０は、ＳＣＳＩ  Ｉ／Ｏ（以下、単にＩ／Ｏとする）を受け付けると、上記通知された仮想ＷＷＮとゲスト計算機１０５の識別子からＩ／Ｏの発行元のゲスト計算機１０５を特定する。なお、ハイパーバイザ１７０が仮想ＨＢＡ３０３−１〜３０３−ｎに割り当てる仮想ＷＷＮ−１〜ＶＷＷＮ−ｎの値は、仮想計算機システム内でユニークであれば良い。
【００２９】
そして、上述のようにゲスト計算機１０５毎のＨＢＡ２１０に対するＩ／Ｏの帯域とＩ／ＯＰＳを制御するため、ハイパーバイザ１７０は、Ｉ／Ｏの帯域閾値とＩＯＰＳ閾値を算出する閾値計算部１８５と、閾値を更新する際のルールを保持する閾値更新ルール１８６と、ＨＢＡ２１０を制御するための物理ドライバ１８７を有する。なお、図示はしないが、ハイパーバイザ１７０は、ＮＩＣ２７０などの他のデバイスについても物理ドライバを備えて制御する。また、図２において、仮想計算機資源（または論理計算機資源）の提供については、公知または周知の技術を適用すれば良いので、本実施例では説明しない。
【００３０】
ハイパーバイザ１７０は、物理メモリ１１４の所定の領域を使用し、データやプログラムを保持する。ハイパーバイザ１７０は、ゲスト計算機１〜ｎ（１０５−１〜１０５−ｎ）のそれぞれについて、ＨＢＡ２１０から取得したＩＯＰＳを格納するＩＯＰＳ値（Ｉ／Ｏ回数値）１〜ｎ（１９０−１〜１９０−ｎ）と、閾値計算部１８５が算出したＩＯＰＳ閾値を格納するＩＯＰＳ閾値１〜ｎ（２００−１〜２００−ｎ）と、ＨＢＡ２１０から取得したＩ／Ｏの帯域（データ転送量）を格納する帯域値１〜ｎ（１９５−１〜１９５−ｎ）および閾値計算部１８５が算出したＩ／Ｏの帯域閾値を格納する帯域閾値１〜ｎ（２０５−１〜２０５−ｎ）を保持する。
【００３１】
閾値計算部１８５は閾値計算プログラムで構成され、物理メモリ１１４の所定の領域にロードされて、物理プロセッサ１０９で実行される。
【００３２】
閾値計算部１８５は、ＨＢＡ２１０が測定したＩＯＰＳカウンタ１〜ｎ（２３５−１〜ｎ：図４参照）の値と、帯域カウンタ１〜ｎ（２４０−１〜２４０−ｎ：図４参照）の値を取得し、上記ハイパーバイザ１７０のＩＯＰＳ値１９０および帯域値１９５に格納し、閾値計算部１８５がＩＯＰＳ閾値２００および帯域閾値２０５を更新する。そして、閾値計算部１８５からの閾値更新完了の通知に基づいて、仮想ドライバ１３０はＩＯＰＳ値１’（１５０）と帯域値１’（１５５）をリセットする。
【００３３】
なお、ハイパーバイザ１７０は、ゲスト計算機１０５−１〜１０５−ｎの仮想ドライバ１３０からＩ／Ｏの要求（リード要求またはライト要求）を受け付けると、物理ドライバ１８７でＩ／Ｏ要求を物理的なＨＢＡ２１０に転送する。そして、Ｉ／Ｏ要求には仮想ＨＢＡ３０３−１〜３０３−ｎの仮想ＷＷＮを付与することで、ハイパーバイザ１７０及び物理的なＨＢＡ２１０はＩ／Ｏの発行元のゲスト計算機１０５−１〜１０５−ｎを特定することができるのである。
【００３４】
また、ハイパーバイザ１７０は、ＬＡＮ２８０を介して図示しない管理計算機などからゲスト計算機の生成、起動または停止、削除の指令を受けて付けて仮想計算機資源の割り当てを制御する。
【００３５】
図７は、ハイパーバイザ１７０が管理する閾値更新ルール１８６の一例を示す図である。閾値更新ルール１８６は、ゲスト計算機１０５−１〜１０５−ｎの識別子を格納するエントリ１８６１と、各ゲスト計算機１０５毎の閾値更新ルールを格納するルール１８６２のエントリを備え、ゲスト計算機１０５−１〜１０５−ｎに対応するフィールドを有する。ルール１８６２は、ＬＡＮ２８０を介して図示しない管理計算機などから受け付けた値を格納する。ここで、ルール１８６２が「増大」のゲスト計算機１０５では、ＩＯＰＳ値１５０がＩＯＰＳ閾値１４０を超えたり、帯域値１５５が帯域閾値１４５を超えた場合、次回の制御間隔で用いる帯域閾値１４５を増大させ、また、ＩＯＰＳ閾値１４０を増大させる。帯域閾値１４５の増大は、予め設定した増分値を加算することができる。ただし、帯域閾値１４５を増大する上限を設けても良い。また、ＩＯＰＳ閾値１４０の増大も、予め設定した増分値を加算することができ、ＩＯＰＳ閾値１４０を増大する上限を設けても良い。
【００３６】
＜ゲスト計算機＞
図３は、ゲスト計算機１０５−１の一例を示すブロック図である。なお、他のゲスト計算機１０５−ｎも同様の構成であるので、重複した説明は省略する。ゲスト計算機１０５−１は、ハイパーバイザ１７０が提供する仮想計算機資源上で稼動する仮想計算機である。
【００３７】
ゲスト計算機１０５−１は、ハイパーバイザ１７０から仮想プロセッサ３０１−１と、仮想メモリ３０２−１及び仮想ＨＢＡ３０３−１の提供を受けて、ゲストＯＳ１２５を実行する。ゲストＯＳ１２５上では、仮想ＨＢＡ３０３−１に対してアクセスする仮想ドライバ１３０と、仮想ドライバ１３０にＩ／Ｏ要求を行うアプリケーション１２０が稼働する。アプリケーション１２０は、ゲストＯＳ１２５上で稼働するソフトウェアであり、ゲストＯＳ１２５に対してデータの送受信を要求する。
【００３８】
仮想ドライバ１３０は、ゲストＯＳ１２５からデータ送受信の要求であるＩ／Ｏ要求を受け付けて、仮想ＨＢＡ３０３−１に対して当該Ｉ／Ｏ要求に応じたデータの送受信を実行するプログラムである。
【００３９】
仮想ドライバ１３０の帯域制御部１３５は、ＳＣＳＩ  Ｉ／Ｏキュー（以下、Ｉ／Ｏキューとする）１６０の中のＩ／Ｏに記録されているデータ量１６５を取得して、ＩＯＰＳ値１’（１５０）の値がＩＯＰＳ閾値１’（１４０）を超えないように、また帯域値１’（１５５）の値が帯域閾値１’（１４５）を超えないように、仮想ＨＢＡ３０３−１（ＨＢＡ２１０）が発行するＩ／Ｏの量を所定の時間間隔（例えば、１０msec）ごとに、制限する。
【００４０】
Ｉ／Ｏキュー１６０は、複数のキュー１６５−１〜１６５−ｎを有し、送受信するデータを一時的に格納する。Ｉ／Ｏキュー１６０は、仮想ドライバ１３０がゲストＯＳ１２５から受け取ったＩ／Ｏ要求を一時的に保持するための記憶領域である。Ｉ／Ｏキュー１６０の中の各々のＩ／Ｏには、送受信するデータ量が記録されている。
【００４１】
仮想ＨＢＡ３０３−１の所定の時間間隔毎のデータ転送量は、仮想ＨＢＡ３０３−１に発行したＩＯＰＳを格納するＩＯＰＳ値１’（１５０）と、仮想ＨＢＡ３０３−１から物理ドライバ１８７に転送したデータ量を格納する帯域値１’（１５５）と、からなる。
【００４２】
また、ハイパーバイザ１７０から取得した仮想ＨＢＡ３０３−１の閾値は、仮想ＨＢＡ３０３−１の仮想ＷＷＮ−１に対応付けられたＨＢＡ２１０のＩＯＰＳを規制するＩＯＰＳ閾値１’（１４０）と、帯域を規制する値を格納する帯域閾値１’（１４５）とを含む。
【００４３】
アプリケーション１２０は、ストレージ装置２６０へのアクセスが発生すると、仮想ドライバ１３０にＩ／Ｏ要求を仮想ＨＢＡ３０３−１に発行しデータをＩ／Ｏキュー１６０に格納する。
【００４４】
仮想ドライバ１３０の帯域制御部１３５は、ＩＯＰＳ値１’（１５０）及び帯域値１’（１５５）がＩＯＰＳ閾値１’（１４０）及び帯域閾値１’（１４５）以内であれば、キュー１６０のデータをハイパーバイザ１７０の物理ドライバ１８７へ転送するように仮想ＨＢＡ３０３−１へ指令する。
【００４５】
一方、仮想ドライバ１３０の帯域制御部１３５は、ＩＯＰＳ値１’（１５０）または帯域値１’（１５５）の何れかが、ＩＯＰＳ閾値１’（１４０）あるいは帯域閾値１’（１４５）の何れかを超えていれば、所定の時間間隔（例えば、１０msec）が経過するまでＩ／Ｏ要求をキュー１６０に保留し、ハイパーバイザ１７０によってＩＯＰＳ閾値１’（１４０）及び帯域閾値１’（１４５）が更新されるのを待つ。
【００４６】
上記帯域制御部１３５により、ゲスト計算機１０５−１が利用する仮想ＨＢＡ３０３−１（ＨＢＡ２１０）の帯域（データ転送量）及びＩＯＰＳは、所定の時間間隔ごとに閾値以内に制御される。
【００４７】
本発明の帯域制御部１３５における帯域制御では、ゲスト計算機１（１０５−１）が発行するＩ／Ｏ要求の数およびデータの送受信量を一定の時間間隔（１０ｍｓ）ごとに、閾値を設けて制限する。この一定間隔を制御間隔と呼び、当該制御間隔毎にハイパーバイザ１７０が閾値を更新する。閾値としては、Ｉ／Ｏ要求の数と、データの送受信量（帯域）についてそれぞれの値が設定され、各々の閾値を超過しないように、ゲスト計算機１０５で仮想ＨＢＡ３０３−１を制御する仮想ドライバ１３０の帯域制御部１３５がＩ／Ｏを発行するタイミングを制御することにより、帯域制御を実現する。
【００４８】
ＩＯＰＳ閾値１’（１４０）は、制御間隔あたりにゲスト計算機１（１０５−１）が発行可能なＩ／Ｏ数を保持する変数である。ＩＯＰＳ値１’（１５０）は、制御間隔あたりにゲスト計算機１（１０５−１）が発行したＩ／Ｏ数を保持する変数である。帯域閾値１’（１４５）は、制御間隔あたりにゲスト計算機１（１０５−１）が発行可能なデータの送受信量を保持する変数である。帯域値１’（１５５）は、制御間隔あたりのゲスト計算機１（１０５−１）のデータ送受信量を保持する変数である。
【００４９】
ＩＯＰＳ閾値１’（１４０）および帯域閾値１’（１４５）には制御間隔が開始する時点で、該制御間隔の間にゲスト計算機１０５−１が送受信可能なＩ／Ｏ数およびデータ送受信量が、後述の閾値計算部１８５によって設定される。ＩＯＰＳ値１’（１５０）および帯域値１’（１５５）は、所定の制御間隔でハイパーバイザ１７０からの通知によって０にリセットされる。
【００５０】
ホスト計算機１００は以上のように構成され、ハイパーバイザ１７０の閾値計算部１８５と、ゲストＯＳ１２５、アプリケーション１２０、仮想ドライバ１３０、帯域制御部１３５は、物理メモリ１１４に格納されたプログラムとして物理プロセッサ１０９により実行される。
【００５１】
物理プロセッサ１０９は、各機能部のプログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、物理プロセッサ１０９は、帯域制御プログラムに従って動作することで帯域制御部１３５として機能し、閾値計算プログラムに従って動作することで閾値計算部１８５として機能する。他のプログラムについても同様である。さらに、物理プロセッサ１０９は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００５２】
ホスト計算機１００の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置２６０や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００５３】
＜ＨＢＡ＞
図４は、ＨＢＡ２１０の一例を示すブロック図である。
【００５４】
ＨＢＡ２１０は、ホスト計算機１００とファイバチャネルで構成されたＳＡＮ２５０及びストレージ装置２６０との間でデータの送受信を実行する装置である。
【００５５】
ＨＢＡ２１０は、組み込みプロセッサ２１５と、記憶部２２０と、カウント回路２３０と、ホスト計算機１００に接続されるＩ／Ｆ部２３６と、ＳＡＮ２５０に接続されるポート２３７とを備える。Ｉ／Ｆ部２３６は、例えば、ＰＣＩ  ｅｘｐｒｅｓｓなどで構成される。
【００５６】
カウント回路２３０は、データの送受信量を測定する論理回路である。記憶部２２０には、データの送受信処理を行う転送処理部２２５と、ゲスト計算機１０５−１〜１０５−ｎ毎に仮想ＨＢＡ３０３−１〜３０３−ｎのＩ／Ｏ数の測定結果を格納するＩＯＰＳカウンタ１〜ｎ（２３５−１〜２３−ｎ）と、データ転送量（帯域）の測定結果を格納する帯域カウンタ１〜ｎ（２４０−１〜２４０−ｎ）と、ハイパーバイザ１７０から受信した仮想ＷＷＮとゲスト計算機１０５の識別子を対応付けて保持する仮想ＷＷＮテーブル２４５が格納される。転送処理部２２５は、記憶部２２０に転送処理プログラムをロードして、組み込みプロセッサ２１５が実行することで機能する。
【００５７】
転送処理部２２５は、ハイパーバイザ１７０から仮想ＷＷＮとゲスト計算機１０５の識別子を受信すると、仮想ＷＷＮとゲスト計算機１０５の識別子を対応付けて仮想ＷＷＮテーブル２４５に格納する。そして、転送処理部２２５は、仮想ＷＷＮ毎に、ＩＯＰＳカウンタ２３５と帯域カウンタ２４０を割り当てる。図９は、仮想ＷＷＮテーブル２４５の一例を示す図である。仮想ＷＷＮテーブル２４５は、ハイパーバイザ１７０が仮想ＨＢＡ３０３に割り当てた仮想ＷＷＮを格納するカラム２４５１と、仮想ＷＷＮの仮想ＨＢＡ３０３を割り当てたゲスト計算機１０５の識別子を格納するカラム２４５２と、転送処理部２２５が当該仮想ＷＷＮに割り当てたＩＯＰＳカウンタ２３５の識別子を格納するカラム２４５３と、転送処理部２２５が当該仮想ＷＷＮに割り当てた帯域カウンタ２４０の識別子を格納するカラム２４５４と、からひとつのエントリが構成される。
【００５８】
なお、ハイパーバイザ１７０は、ひとつの物理的なＨＢＡ２１０から生成した複数の仮想ＨＢＡ３０３を、各ゲスト計算機１０５にひとつずつ割り当てるものとする。
【００５９】
転送処理部２２５は、ホスト計算機１００からのＩ／Ｏ要求に応じてＳＡＮ２５０を介してストレージ装置２６０と通信を行う。このとき、転送処理部２２５はカウント回路２３０を用いてゲスト計算機１０５毎にデータの転送量を帯域として測定し、帯域カウンタ２４０に格納する。また、ゲスト計算機１０５毎にＩ／Ｏ要求の回数を測定し、ＩＯＰＳカウンタ２３５に格納する。
【００６０】
ここで、転送処理部２２５は、Ｉ／Ｏに含まれる仮想ＷＷＮから仮想ＷＷＮテーブル２４５を参照して、ゲスト計算機１０５とＩＯＰＳカウンタ２３５及び帯域カウンタ２４０を特定し、当該仮想ＷＷＮに対応するＩＯＰＳカウンタ２３５と帯域カウンタ２４０に値を格納する。例えば、Ｉ／Ｏ要求に含まれる仮想ＷＷＮが「ＶＷＷＮ−１」であれば、転送処理部２２５は、ゲスト計算機１０５−１の仮想ＨＢＡ３０３−１が発行したＩ／Ｏ要求であると判定し、ゲスト計算機１０５−１に対応するＩＯＰＳカウンタ２３５−１と帯域カウンタ２４０−１に値を格納する。
【００６１】
そして、後述するように、ＨＢＡ２１０はハイパーバイザ１７０からの要求を受け付けると、ＩＯＰＳカウンタ２３５と帯域カウンタ２４０の値を通知する。また、ＨＢＡ２１０は、ハイパーバイザ１７０から読み出し要求に応じて値を読み出したＩＯＰＳカウンタ２３５及び帯域カウンタ２４０をリセットする。
【００６２】
＜Ｉ／Ｏ処理＞
図５は、仮想計算機システムで行われるＳＣＳＩ  Ｉ／Ｏ処理（以下、Ｉ／Ｏ処理とする）の一例を示すシーケンス図である。図５のシーケンス図は、ゲスト計算機１０５のアプリケーション１２０がゲストＯＳ１２５にＩ／Ｏ要求を送信したときに実行される。
【００６３】
本処理では、まずゲストＯＳ１２５が、アプリケーション１２０から発行されたデータ送受信要求を受信する（ステップ５００）。ゲストＯＳ１２５は、受信したデータ送受信要求をＳＣＳＩ Ｉ／Ｏに変換し、仮想ドライバ１３０にＩ／Ｏを発行する（ステップ５０１）。更に仮想ドライバ１３０は、ゲストＯＳ１２５から受信したＩ／Ｏを、ＳＣＳＩ Ｉ／Ｏキュー１６０にエンキューする（ステップ５０２）。
【００６４】
さらに、仮想ドライバ１３０の帯域制御部１３５は、ゲスト計算機１（１０５−１）が各Ｉ／ＯをＳＣＳＩ Ｉ／Ｏキュー１６０からデキュー可能か否かの判定を行う（ステップ５０３）。判定方法については後述する。
【００６５】
ステップ５０３の判定で、デキュー可能と判断した場合、帯域制御部１３５は、ＳＣＳＩ Ｉ／Ｏキュー１６０にエンキューされた順番でＩ／Ｏをデキューし、ハイパーバイザ１７０にＩ／Ｏを発行する（ステップ５０５）。ハイパーバイザ１７０は受信したＩ／Ｏを物理ドライバ１８７でＨＢＡ２１０に転送する（ステップ５０６）。
【００６６】
一方、ステップ５０３の判定で、デキューが不可能と判断した場合は、判断した時点で、該ゲスト計算機１０５のＩ／Ｏの発行を停止する制御を行う。
【００６７】
上記ステップ５０３の帯域制御部１３５の処理は、まず、ＳＣＳＩ Ｉ／Ｏキュー１６０にエンキューされた順にＩ／Ｏを選択し、制御間隔内でゲスト計算機１（１０５−１）が該Ｉ／Ｏを発行可能であるか判定するため、仮想ドライバ１３０のＩＯＰＳ値１’（１５０）に、１ (該Ｉ／Ｏ分)を加算し、Ｉ／Ｏに記入されているデータ量を、帯域値１’（１５５）に加算する。
【００６８】
その後、帯域制御部１３５は、ＩＯＰＳ値１’（１５０）とＩＯＰＳ閾値１’（１４０）を比較し、更に帯域値１’（１５５）と帯域閾値１’（１４５）を比較する（ステップ５０３）。
【００６９】
上記比較の結果、ＩＯＰＳ値１’（１５０）がＩＯＰＳ閾値１’（１４０）以下であり、かつ、帯域値１’（１５５）が帯域閾値１’（１４５）以下であるならば、該ゲスト計算機がＩ／Ｏを追加して発行可能であると帯域制御部１３５は判定する。そして、帯域制御部１３５は、ＳＣＳＩ Ｉ／Ｏキュー１６０から該Ｉ／Ｏをデキューし、ＨＢＡ２１０の転送処理プログラム２２５に対してＩ／Ｏの発行処理を行う（ステップ５０５）。ＩＯＰＳ値１’（１５０）がＩＯＰＳ閾値１’（１４０）より大きいか、または、帯域値１’（１５５）が帯域閾値１’（１４５）より大きいならば、該ゲスト計算機１０５が追加でＩ／Ｏを発行不可であると帯域制御部１３５は判定する。このため、帯域制御部１３５は該Ｉ／Ｏの発行処理を行わず、該Ｉ／ＯはＳＣＳＩ Ｉ／Ｏキュー１６０に滞留されたままとなる（ステップ５０４）。すなわち、ＳＣＳＩ Ｉ／Ｏキュー１６０のデータは出力が禁止される。
【００７０】
そして、ステップ５０４では、ＩＯＰＳ値１’（１５０）がＩＯＰＳ閾値１’（１４０）を超えたか、または、帯域値１’（１５５）が帯域閾値１’（１４５）を超えたときには、仮想ドライバ１３０はハイパーバイザ１７０に対して閾値を超えたことを通知する。
【００７１】
Ｉ／ＯがＳＣＳＩ Ｉ／Ｏキュー１６０に滞留する場合は、制御間隔が終了する時点で、ＩＯＰＳ値１’（１５０）および帯域値１’（１５５）が、後述するようにハイパーバイザ１７０の通知でリセットされることを契機として帯域制御部１３５により、ステップ５０３へ戻って再び加算結果と閾値の比較が実行される。
【００７２】
帯域制御部１３５により、Ｉ／Ｏがハイパーバイザ１７０の物理ドライバ１８７を介して転送処理部２２５に転送された後、転送処理部２２５は、受信したＩ／Ｏをストレージ装置２６０へ発行する。また、転送処理部２２５は発行したＩ／Ｏをカウント回路２３０へ転送する（ステップ５０７、５０８）。
【００７３】
ＨＢＡ２１０のカウント回路２３０は、ＩＯＰＳカウンタ２３５に発行したＩ／Ｏ数を加算した後、Ｉ／Ｏの転送を開始してから終了するまでのデータ転送量を仮想ＷＷＮに基づいて帯域カウンタ２４０に加算する（ステップ５０８）。
【００７４】
以上の処理により、ゲスト計算機１０５の仮想ドライバ１３０の帯域制御部１３５は、ハイパーバイザ１７０が決定したＩＯＰＳ閾値１’（１４０）と帯域閾値’（１４５）で所定の制御間隔（例えば、１０msec）ないで、Ｉ／Ｏ回数またはＩ／Ｏのデータ量（帯域）が閾値を超えないように監視する。Ｉ／Ｏ回数またはＩ／Ｏの帯域がＩＯＰＳ閾値１’（１４０）または帯域閾値１’（１４５）を超えると、帯域制御部１３５は、現在の制御間隔でのＩ／Ｏの発行を停止することで、ゲスト計算機１０５のＩ／Ｏ回数と帯域を目標とする閾値以内に制限することが可能となる。
【００７５】
＜閾値の更新＞
次に、上記ステップ５０４で行われるＩＯＰＳ閾値２００（１４０）と、帯域閾値２０５（１４５）の演算について図６を参照しながら説明する。
【００７６】
図６は、仮想計算機システムで行われる閾値更新処理の一例を示すシーケンス図である。この処理はハイパーバイザ１７０のブートを契機に開始し、その後、所定の制御間隔（１０msec）ごとに繰り返して実行される。以下では、ゲスト計算機１０５−１に割り当てられた仮想ＨＢＡ３０３−１の閾値更新の一例を示すが、他の仮想ＨＢＡ３０３−２〜３０３−ｎの閾値更新についても同様に行えば良い。なお、他の仮想ＨＢＡ３０３−２〜３０３−ｎの閾値更新は、以下の各ステップで実施してもよい。あるいは、仮想ＨＢＡ３０３−１〜３０３−ｎの閾値更新のタイミングをずらして、以下のステップ６０１〜６０７を各仮想ＨＢＡ３０３毎に実行しても良い。
【００７７】
この処理は、ハイパーバイザ１７０の閾値計算部１８５が、ＨＢＡ２１０からＩＯＰＳカウンタ１（２３５−１）および帯域カウンタ１（２４０−１）の値を受信し、ＩＯＰＳ閾値１（２００−１）および帯域閾値１（２０５−１）を演算し、ゲスト計算機１（１０５−１）に閾値の更新完了を通知する処理である。この通知により、仮想ドライバ１３０の帯域制御部１３５は、ゲスト計算機１０５−１のＩＯＰＳ値１’（１５０）および帯域値１’（１５５）をリセットする。
【００７８】
まず、ハイパーバイザ１７０の閾値計算部１８５が、ＨＢＡ２１０に対してＩＯＰＳカウンタ１（２３５−１）と帯域カウンタ１（２４０−１）の読み出しを要求する（ステップ６０１）。
【００７９】
次に、ＨＢＡ２０１は、要求されたＩＯＰＳカウンタ１（２３５−１）と帯域カウンタ１（２４０−１）の値を閾値計算部１８５へ送信する（ステップ６０２）。ＨＢＡ２０１は、読み出しが完了したＩＯＰＳカウンタ１（２３５−１）と帯域カウンタ１（２４０−１）の値を０にリセットする。
【００８０】
閾値計算部１８５は、受信したＩＯＰＳカウンタ１（２３５−１）の値をＩＯＰＳ値１（１９０−１）に格納し、受信した帯域カウンタ１（２４０−１）の値を帯域値１（１９５−１）に格納する（ステップ６０３）。
【００８１】
閾値計算部１８５は、閾値更新ルール１８６を参照し、更新対象の仮想ＨＢＡ３０３−１を割り当てたゲスト計算機１０５−１の閾値の更新ルールを取得する。閾値の更新ルール１８６２が「維持」であれば、閾値計算部１８５は、ＩＯＰＳ閾値１（２００−１）と帯域閾値１（２０５−１）を維持する。なお、「維持」の場合は、ＩＯＰＳ閾値１（２００−１）と帯域閾値１（２０５−１）の増分値を、それぞれ０としてもよい。
【００８２】
一方、閾値の更新ルール１８６２が「増大」で、かつ、前記図５のステップ５０４で、仮想ドライバ１３０から閾値を超えた通知を受けたゲスト計算機１０５であれば、閾値計算部１８５は、ＩＯＰＳ閾値１（２００−１）と帯域閾値１（２０５−１）にそれぞれ所定の増分値を加算して更新する（ステップ６０４）。なお、所定の増分値は、ＩＯＰＳ閾値１（２００−１）の増分値と、帯域閾値１（２０５−１）の増分値がそれぞれ予め設定されている。また、これらの増分値を閾値更新ルール１８６に格納するようにしてもよい。
【００８３】
更に、閾値計算部１８５は、ＩＯＰＳ閾値１（２００−１）および帯域閾値１（２０５−１）の更新が完了したことを、ゲスト計算機１０５−１で稼働する仮想ドライバ１３０の帯域制御部１３５に通知する。
【００８４】
帯域制御部１３５は、ハイパーバイザ１７０から閾値更新通知の受信を契機に、ハイパーバイザ１７０からＩＯＰＳ閾値１（２００−１）を読み出して、ＩＯＰＳ閾値１’（１４０）に格納する。次に、帯域制御部１３５は、ハイパーバイザ１７０から帯域閾値１（２０５−１）を読み出し、帯域閾値１’（１４５）に格納する。
【００８５】
その後、ハイパーバイザ１７０からの閾値更新通知の受信を契機として、帯域制御部１３５は、仮想ドライバ１３０で保持していたＩＯＰＳ値１’（１５０）および帯域値１’（１５５）をリセットする（ステップ６０５）。さらに、帯域制御部１３５は、ＳＣＳＩ Ｉ／Ｏキュー１６０に滞留しているＩ／Ｏがある場合は、該Ｉ／Ｏのデキューを再開（図５のステップ５０４、５０３、５０５）する。
【００８６】
最後に、閾値計算部１８５は、閾値更新のタイマを起動し（ステップ６０６）、このタイマがステップ６０７でタイムアウトした際に、図中のステップ６０１から再度、次の制御間隔の閾値の更新処理を実行する。
【００８７】
以上の処理により、ハイパーバイザ１７０では閾値計算部１８５が、ＨＢＡ２１０のカウント回路２３０によって測定されたＩＯＰＳカウンタ１（２３５−１）の値および帯域カウンタ１（２４０−１）の値と、閾値更新ルール１８６に基づいて、ＩＯＰＳ閾値１（２００−１）および帯域閾値１（２０５−１）を更新する。この結果、閾値計算部１８５は、ゲスト計算機１０５の仮想ＨＢＡ３０３ごとのＩＯＰＳ閾値１’（１４０−１）および帯域閾値１’（１４５−１）を更新する。
【００８８】
さらに、仮想ドライバ１３０の帯域制御部１３５がＩＯＰＳ閾値１’（１４０）および帯域閾値１’（１４５）をハイパーバイザ１７０から取得して更新する。帯域制御部１３５は、更新されたＩＯＰＳ閾値１’（１４０）および帯域閾値１’（１４５）に基づいて帯域制御を実施する。これにより、制御間隔あたりのデータ送受信量に基づく帯域制御を実現できる。
【００８９】
また、本発明では、ＨＢＡ２１０が仮想ＨＢＡ３０３毎に帯域とＩ／Ｏ回数を測定し、ハイパーバイザ１７０が制御間隔ごとに帯域閾値とＩ／Ｏ回数の閾値を更新してゲスト計算機１０５に通知し、ゲスト計算機１０５の仮想ドライバ１３０が制御間隔ごとにＩ／Ｏ回数と帯域（データ転送量）の閾値を超えないように仮想ＨＢＡ３０３の帯域制御を行う。これにより、帯域の測定と閾値の算出及び帯域制御の実行を、ＨＢＡ２１０とハイパーバイザ１７０及びゲスト計算機１０５で分散したので、一箇所に負荷が集中するのを防ぐことが可能となる。
【００９０】
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【００９１】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【００９２】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【図１】
2014118969.tif 000003
【図２】
2014118969.tif 000004
【図３】
2014118969.tif 000005
【図４】
2014118969.tif 000006
【図５】
2014118969.tif 000007
【図６】
2014118969.tif 000008
【図７】
2014118969.tif 000009
【図８】
2014118969.tif 000010
【図９】
2014118969.tif 000011
【手続補正書】
【提出日】平成28年6月3日(2016.6.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサとメモリとを備えた計算機と、
前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムであって、
前記計算機は、
ストレージ装置に接続されるアダプタを有し、
前記アダプタは、
前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する転送処理部と、
前記データの転送量とＩ／Ｏ回数を前記仮想計算機毎に格納するカウンタと、を有し、
前記仮想計算機は、
前記ストレージ装置との間で送受信するデータを保持するキューと、
前記データの転送量とＩ／Ｏ回数を制御する帯域制御部と、
前記データの転送量を格納する帯域値と、前記Ｉ／Ｏ回数を格納するＩ／Ｏ回数値と、前記データの転送量の上限値を格納する帯域閾値と、前記Ｉ／Ｏ回数の上限値を格納するＩ／Ｏ回数閾値と、を有し、
前記仮想化部は、
前記アダプタのカウンタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算する閾値演算部を有し、
前記閾値演算部は、
所定の周期が経過する度に、前記アダプタから前記データの転送量とＩ／Ｏ回数を取得して、所定のルールに基づいて前記取得した前記データの転送量とＩ／Ｏ回数から、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知し、
前記帯域制御部は、
前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値以下で、かつ前記Ｉ／Ｏ回数値がＩ／Ｏ回数閾値以下であれば前記キューからデータを出力し、
前記閾値演算部の前記データの転送量の上限値と前記Ｉ／Ｏ回数の上限値の通知を受信したことに基づいて、前記仮想計算機の帯域値と、前記Ｉ／Ｏ回数値とをリセットすることを特徴とする仮想計算機システム。
【請求項２】
請求項１に記載の仮想計算機システムであって、
前記帯域制御部は、
前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値を超え、またはＩ／Ｏ回数値がＩ／Ｏ回数閾値を超える場合は、前記帯域値及び前記Ｉ／Ｏ回数閾値がリセットされるまでは前記キューからデータの出力を禁止することを特徴とする仮想計算機システム。
【請求項３】
請求項１に記載の仮想計算機システムであって、
前記所定のルールは、
前記仮想計算機ごとに予め設定された増分値を加算することを特徴とする仮想計算機システム。
【請求項４】
プロセッサとメモリとを備えた計算機と、前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムでデータ転送を制御する方法であって、
前記計算機は、ストレージ装置に接続されるアダプタを有し、
前記アダプタが、前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する第１のステップと、
前記仮想化部は、前記アダプタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知する第２のステップと、
前記仮想計算機が、前記ストレージ装置との間で送受信するデータをキューに保持する第３のステップと、
前記仮想計算機が、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を超えないように前記キューから出力するデータを制御する第４のステップと、
を含み、
前記第２のステップは、
前記仮想計算機は、所定の周期が経過する度に、前記アダプタから前記データの転送量とＩ／Ｏ回数を取得して、前記データの転送量を帯域値に格納し、前記Ｉ／Ｏ回数をＩ／Ｏ回数値に格納し、前記データの転送量の上限値を帯域閾値に格納し、前記Ｉ／Ｏ回数の上限値をＩ／Ｏ回数閾値に格納し、所定のルールに基づいて前記取得した前記データの転送量とＩ／Ｏ回数から、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知するステップと、
前記仮想計算機が、前記データの転送量の上限値と前記Ｉ／Ｏ回数の上限値の通知を受信したことに基づいて、前記仮想計算機の帯域値と、前記Ｉ／Ｏ回数値とをリセットするステップと、を含み、
前記第４のステップは、
前記仮想計算機が、前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値以下で、かつ前記Ｉ／Ｏ回数値がＩ／Ｏ回数閾値以下であれば前記キューからデータを出力することを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項５】
請求項４に記載の仮想計算機システムのデータ転送制御方法であって、
前記第４のステップは、
前記仮想計算機が、前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値を超え、またはＩ／Ｏ回数値がＩ／Ｏ回数閾値を超える場合は、前記帯域値及び前記Ｉ／Ｏ回数閾値がリセットされるまでは前記キューからデータの出力を禁止することを特徴とする仮想計算機システムのデータ転送制御方法。
【請求項６】
請求項４に記載の仮想計算機システムのデータ転送制御方法であって、
前記所定のルールは、
前記仮想計算機ごとに予め設定された増分値を加算することを特徴とする仮想計算機システムのデータ転送制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
本発明は、プロセッサとメモリとを備えた計算機と、前記計算機の資源を仮想化して１以上の仮想計算機に割り当てる仮想化部と、を備えた仮想計算機システムであって、前記計算機は、ストレージ装置に接続されるアダプタを有し、前記アダプタは、前記ストレージ装置との間でデータを送受信し、当該送受信したデータの転送量とＩ／Ｏ回数とを前記仮想計算機毎に測定する転送処理部と、前記データの転送量とＩ／Ｏ回数を前記仮想計算機毎に格納するカウンタと、を有し、前記仮想計算機は、前記ストレージ装置との間で送受信するデータを保持するキューと、前記データの転送量とＩ／Ｏ回数を制御する帯域制御部と、前記データの転送量を格納する帯域値と、前記Ｉ／Ｏ回数を格納するＩ／Ｏ回数値と、前記データの転送量の上限値を格納する帯域閾値と、前記Ｉ／Ｏ回数の上限値を格納するＩ／Ｏ回数閾値と、を有し、前記仮想化部は、前記アダプタのカウンタから取得した前記データの転送量とＩ／Ｏ回数に基づいて、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算する閾値演算部を有し、前記閾値演算部は、所定の周期が経過する度に、前記アダプタから前記データの転送量とＩ／Ｏ回数を取得して、所定のルールに基づいて前記取得した前記データの転送量とＩ／Ｏ回数から、前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機毎に演算し、当該演算した前記データの転送量の上限値と、前記Ｉ／Ｏ回数の上限値を前記仮想計算機に通知し、前記帯域制御部は、前記キューから出力する度にデータの転送量を前記帯域値に加算し、前記Ｉ／Ｏ回数を前記Ｉ／Ｏ回数値に加算して、前記帯域値が帯域閾値以下で、かつ前記Ｉ／Ｏ回数値がＩ／Ｏ回数閾値以下であれば前記キューからデータを出力し、前記閾値演算部の前記データの転送量の上限値と前記Ｉ／Ｏ回数の上限値の通知を受信したことに基づいて、前記仮想計算機の帯域値と、前記Ｉ／Ｏ回数値とをリセットする。
【国際調査報告】
2014118969.tif 000012
2014118969.tif 000013