(57)【特許請求の範囲】
【請求項１】
コンピュータが、
同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信し、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信し、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測し、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とに基づいて、前記装置群のうち切替対象の装置を特定し、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する割当方法。
【請求項２】
前記特定する処理は、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とのうち、所定の上限値と所定の下限値との間となる装置を、前記切替対象の装置に特定する、
処理を実行する請求項１に記載の割当方法。
【請求項３】
前記特定する処理は、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ使用率が最も高い装置を、前記切替対象の装置に特定する、
処理を実行する請求項１に記載の割当方法。
【請求項４】
前記特定する処理は、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ前記処理性能が最も低い装置を、前記切替対象の装置に特定する、
処理を実行する請求項１に記載の割当方法。
【請求項５】
前記コンピュータが、
前記装置群のうち、前記切替対象の装置以外となる残余の装置に対して、命令の複製を停止する、
処理を実行する請求項１〜４のいずれか一つに記載の割当方法。
【請求項６】
前記命令を複製して送信する処理は、
前記複数の装置のうち、前記処理を実行中でなく前記いずれか一つの装置より処理性能が低い装置および前記処理を実行中でなく前記いずれか一つの装置より処理性能が高い装置を含む前記装置群に対して、前記命令を複製して送信する、
処理を実行する請求項１〜５のいずれか一つに記載の割当方法。
【請求項７】
前記切り替える処理は、
前記命令の単位時間当たりの送信数が所定数以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項１〜６のいずれか一つに記載の割当方法。
【請求項８】
前記命令を複製して送信する処理は、
前記命令が使用するメモリ使用量に応じた装置数となる前記装置群に対して、前記命令を複製して送信する、
処理を実行する請求項１〜７のいずれか一つに記載の割当方法。
【請求項９】
前記装置が画像処理装置であり、前記命令が描画命令であることを特徴とする請求項１〜８のいずれか一つに記載の割当方法。
【請求項１０】
前記切り替える処理は、
前記いずれか一つの装置内の画像記憶領域において、前記命令による更新量が所定量以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項９に記載の割当方法。
【請求項１１】
前記切り替える処理は、
前記いずれか一つの装置内の画像記憶領域と前記切替対象の装置内の画像記憶領域との差分が所定の閾値以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項９または１０に記載の割当方法。
【請求項１２】
同一の処理を実行可能であり処理性能が異なる複数の装置と、
前記複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信する第１の送信部と、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信する第２の送信部と、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測する計測部と、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とに基づいて、前記装置群のうち切替対象の装置を特定する特定部と、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える切替部と、
を備えることを特徴とする割当装置。
【請求項１３】
コンピュータに、
同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信し、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信し、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測し、
前記いずれか一つの装置の使用率と前記装置群の各装置の使用率とに基づいて、前記装置群のうち切替対象の装置を特定し、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行させる割当プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置を割り当てる割当方法、割当装置、および割当プログラムに関する。
【背景技術】
【０００２】
近年、クライアント側の実行環境を利用者が直接操作するクライアント端末ではなく、サーバ側に実行環境を移すクライアント仮想化ソリューションの市場規模が拡大している。仮想化技術を適用した例として、たとえば、クライアント端末が最低限の処理を行い、ほとんどの処理をサーバが行うシンクライアントシステムにて、クライアント端末の機能を仮想化し、１台のサーバに数十台のＰＣ機能を集約するといった技術が開示されている。
【０００３】
また、従来のシンクライアントシステムは、導入コストが高額であるため、小規模、かつ安価に導入可能なＤａａＳ（Ｄｅｓｋｔｏｐ−Ａｓ−Ａ−Ｓｅｒｖｉｃｅ）システムが提供されてきている。ＤａａＳシステムは、クラウド環境においてクライアント仮想化を適用し、サーバ上で動作する仮想マシンのＯＳのデスクトップ環境（以降、仮想デスクトップ環境と呼称する）をクライアント端末に提供するシステムである。
【０００４】
ＤａａＳシステムにおけるクライアント端末は、ネットワーク経由で仮想デスクトップ環境を利用することになる。このとき、サーバに接続されたグラフィックカードを仮想マシンに割り当てることで、仮想デスクトップ環境においても高速なグラフィック処理を行うことができる。これにより、クライアント端末の利用者は、ＣＡＤ（Ｃｏｍｐｕｔｅｒ−Ａｉｄｅｄ  Ｄｅｓｉｇｎ）、動画再生といった高速なグラフィック処理を伴うアプリケーションソフトウェア（以下、アプリと称する）をストレスなく利用することができる。
【０００５】
たとえば、装置の割当に関する技術として、複数のＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を搭載するコンピュータにおいて、複数の並列化モードを使用して負荷分散を行う技術が開示されている。また、装置への割当に関する技術として、複数のコアを有するマルチコアプロセッサシステムの例において、プロセスを実行状況に応じて動的に効率よくプロセッサコアに割り当てる技術が開示されている（たとえば、下記特許文献１、２を参照。）。なお、プロセスとは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理するプログラムの実行単位である。
【０００６】
また、他の割当に関する技術として、たとえば、ストレージシステムに接続するサーバの要求性能が、ストレージシステムのインターフェイスに対応するプロセッサの処理性能よりも高くならないように、サーバのプロセッサを選択する技術が開示されている。また、オペレータの操作したログデータを抽出し、再生する技術が存在する（たとえば、下記特許文献３、４を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００７−５１２６１３号公報
【特許文献２】特開２００８−９０５４６号公報
【特許文献３】特開２００５−３２１８５４号公報
【特許文献４】特開２００７−１４０９５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述した従来技術を適用して、ＤａａＳシステムにおけるサーバが仮想マシンにグラフィックカードを割り当てる場合、割り当てられたグラフィックカードの処理性能が仮想マシンの利用者が使用するアプリにとって高すぎる、または低すぎる場合がある。割り当てられたグラフィックカードの処理性能が命令要求元となる仮想マシンの利用者にとって高すぎる場合を想定する。このとき、該当の仮想マシン上で動作するアプリは要求を満足するため問題が発生しない。しかしながら、サーバが割り当てられるグラフィックカードには限りがあるため、他の仮想マシンが高処理性能のグラフィックカードを使用したい場合、既に高処理性能を有するグラフィックカードが割り当てられてしまっているという問題があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、命令要求元が要求する処理性能に対応した割当が行える割当方法、割当装置、および割当プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に処理に対する命令を送信し、複数の装置のうち処理を実行していない装置群に対して、命令を複製して送信し、命令を実行した場合の使用率を、いずれか一つの装置および装置群の各装置に対して計測し、いずれか一つの装置に対する使用率に基づいて、装置群のうち切替対象の装置を特定し、命令の送信先をいずれか一つの装置から切替対象の装置に切り替える割当方法、割当装置、および割当プログラムが提案される。
【発明の効果】
【００１１】
本発明の一側面によれば、命令要求元が要求する処理性能に対応した割当が行えるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態１にかかるＤａａＳシステム１００の動作例を示す説明図である。
【図２】図２は、ＤａａＳシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、割当装置１０１のソフトウェア例を示すブロック図である。
【図４】図４は、ＧＰＵ管理テーブル３０１の記憶内容の一例を示す説明図である。
【図５】図５は、設定テーブル３０２とＧＰＵ仮割当テーブル３０３の記憶内容の一例を示す説明図である。
【図６】図６は、管理ＯＳ１２２の機能例を示すブロック図である。
【図７−１】図７−１は、グラフィックカード１１０の割当方法の一例を示す説明図（その１）である。
【図７−２】図７−２は、グラフィックカード１１０の割当方法の一例を示す説明図（その２）である。
【図８】図８は、ＧＰＵ使用率の計測方法の一例を示す説明図である。
【図９】図９は、最適なグラフィックカード１１０の特定方法の他の例を示す説明図である。
【図１０】図１０は、グラフィックカード切替可能とするＧＰＵコマンド流量の状態の一例を示す説明図である。
【図１１】図１１は、グラフィックカード切替可能とするＶＲＡＭ１１２の状態の一例を示す説明図である。
【図１２−１】図１２−１は、管理ＯＳ１２２のグラフィックカード割当処理手順の一例を示すフローチャート（その１）である。
【図１２−２】図１２−２は、管理ＯＳ１２２のグラフィックカード割当処理手順の一例を示すフローチャート（その２）である。
【図１２−３】図１２−３は、管理ＯＳ１２２のグラフィックカード割当処理手順の一例を示すフローチャート（その３）である。
【図１３−１】図１３−１は、ＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その１）である。
【図１３−２】図１３−２は、ＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その２）である。
【図１３−３】図１３−３は、ＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その３）である。
【図１３−４】図１３−４は、ＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その４）である。
【図１４】図１４は、プロセス監視部３２２の処理手順の一例を示すフローチャートである。
【図１５】図１５は、ＧＰＵ状態監視部３２３の処理手順の一例を示すフローチャートである。
【図１６】図１６は、ＧＰＵコマンド流量監視部３２４の処理手順の一例を示すフローチャートである。
【図１７】図１７は、ＧＰＵ＿ＶＲＡＭ監視部３２６の処理手順の一例を示すフローチャートである。
【図１８】図１８は、ＰＶ−ｂドライバ３１３の処理手順の一例を示すフローチャートである。
【図１９】図１９は、ＧＰＵコマンド解析部３２５の処理手順の一例を示すフローチャートである。
【図２０−１】図２０−１は、実施の形態２にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その１）である。
【図２０−２】図２０−２は、実施の形態２にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その２）である。
【図２１−１】図２１−１は、実施の形態３にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その１）である。
【図２１−２】図２１−２は、実施の形態３にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャート（その２）である。
【図２２】図２２は、利用者テーブル２２０１の記憶内容の一例を示す説明図である。
【図２３−１】図２３−１は、ＧＰＵ管理部３２１のグラフィックカード割当準備処理手順の一例を示すフローチャート（その１）である。
【図２３−２】図２３−２は、ＧＰＵ管理部３２１のグラフィックカード割当準備処理手順の一例を示すフローチャート（その２）である。
【図２４】図２４は、実施の形態５にかかる割当装置１０１のソフトウェア例を示すブロック図である。
【図２５】図２５は、コマンド保管テーブル２４０１の記憶内容の一例を示す説明図である。
【図２６−１】図２６−１は、ＧＰＵ管理部３２１のＧＰＵ使用率計測処理手順の一例を示すフローチャート（その１）である。
【図２６−２】図２６−２は、ＧＰＵ管理部３２１のＧＰＵ使用率計測処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、開示の割当方法、割当装置、および割当プログラムの実施の形態を詳細に説明する。
【００１４】
（実施の形態１の説明）
図１は、実施の形態１にかかるＤａａＳシステム１００の動作例を示す説明図である。ＤａａＳシステム１００は、サーバとなる割当装置１０１と端末装置１０２を含む。割当装置１０１と端末装置１０２は、ネットワーク１０３で接続されている。割当装置１０１は、端末装置１０２に仮想的なデスクトップ環境を提供する装置である。端末装置１０２は、利用者によって操作される端末であり、割当装置１０１が提供する仮想的なデスクトップ環境を利用する。
【００１５】
また、割当装置１０１は、処理性能の異なる複数のグラフィックカード１１０＃１〜グラフィックカード１１０＃ｎを含む。ｎは２以上の整数である。グラフィックカード１１０＃１〜グラフィックカード１１０＃ｎは、割当装置１０１に直接接続されていてもよいし、または、割当装置１０１に接続された拡張ＢＯＸに接続されていてもよい。拡張ＢＯＸには、たとえば、４枚、８枚といったグラフィックカード１１０を接続することができる。
【００１６】
グラフィックカード１１０は、絵や文字を画面に表示するための処理を行う。なお、グラフィックカード１１０は、ＧＰＵ１１１と、ＶＲＡＭ（Ｖｉｄｅｏ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１２を含む。たとえば、グラフィックカード１１０＃１は、ＧＰＵ１１１＃１とＶＲＡＭ１１２＃１を含む。同様に、グラフィックカード１１０＃２は、ＧＰＵ１１１＃２とＶＲＡＭ１１２＃２を含み、グラフィックカード１１０＃３は、ＧＰＵ１１１＃３とＶＲＡＭ１１２＃３を含む。ＧＰＵ１１１は、グラフィック処理を実行する。ＶＲＡＭ１１２は、ＧＰＵ１１１によって処理された画像を保持するメモリである。
【００１７】
端末装置１０２は、ディスプレイ１１３を含む。仮想デスクトップ環境によって、グラフィックカード１１０で生成されたＶＲＡＭ１１２の画像が、ディスプレイ１１３に表示されることになる。
【００１８】
また、割当装置１０１は、仮想マシンモニタ１２１を実行している。仮想マシンモニタ１２１は、コンピュータを仮想化し、複数のＯＳを実行できるように制御するソフトウェアである。図１の例では、仮想マシンモニタ１２１は、ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）１、管理ＯＳ１２２を稼働させる。
【００１９】
ＶＭ１は、割当装置１０１で動作する仮想的なコンピュータである。たとえば、ＶＭ１は、割当装置１０１のハードウェア資源となる割当装置１０１内のＣＰＵ、メモリ、グラフィックカード１１０を仮想化し、仮想化された実行環境をＶＭ上で実行されるソフトウェアに提供するソフトウェアである。また、図１でのＶＭ１は、端末装置１０２に対応づけられており、端末装置１０２からの指示により、ＣＡＤ、動画再生といったアプリを実行する。
【００２０】
管理ＯＳ１２２は、割当装置１０１内の一部のハードウェアや仮想マシンを管理する機能を有する。たとえば、管理ＯＳ１２２は、ＶＭ１から描画命令を受け取ると、グラフィックカード１１０のうちいずれかのグラフィックカード１１０をＶＭ１に割り当てる。
【００２１】
前述したハードウェア、ソフトウェアを含む実施の形態１にかかる割当装置１０１は、ＶＭ１がグラフィックカード１１０を使用するアプリが起動すると、アプリから送信された描画命令をグラフィックカード１１０＃１〜グラフィックカード１１０＃３に出力する。図１の例では、送信された描画命令が、円を描く描画命令と三角形を描く描画命令であると想定する。
【００２２】
グラフィックカード１１０＃１〜グラフィックカード１１０＃３は、描画命令にしたがって、ＶＲＡＭ１１２＃１〜ＶＲＡＭ１１２＃３に画像を生成する。このとき、管理ＯＳ１２２は、ＶＲＡＭ１１２＃１〜ＶＲＡＭ１１２＃３の画像のうちのいずれか一つを端末装置１０２に送信する。たとえば、管理ＯＳ１２２は、ＶＲＡＭ１１２＃１の画像を端末装置１０２に送信する。
【００２３】
続けて、管理ＯＳ１２２は、画像生成中のグラフィックカード１１０の使用率を計測する。グラフィックカード１１０の使用率は、グラフィックカード１１０内のＧＰＵ１１１の使用率となる。なお、ＧＰＵ１１１の使用率とは、ＧＰＵ１１１の処理能力が使用されている割合を示している。たとえば、使用率が０［％］であれば、ＧＰＵ１１１は、処理を全く行っていない状態であり、使用率が１００［％］であれば、ＧＰＵ１１１は、ＧＰＵ１１１の処理能力と等しい処理量を実行している。
【００２４】
図１の例では、グラフィックカード１１０＃１は、ＧＰＵ使用率が４０［％］であり、処理性能が高くアプリが要求する処理能力以上に余力がある状態である。グラフィックカード１１０＃２は、ＧＰＵ使用率が１００［％］であり、処理性能が低く三角形の描画が行えておらずアプリが要求する処理能力を満たさない状態である。グラフィックカード１１０＃３は、ＧＰＵ使用率が８５［％］であり、アプリが要求する処理能力を満たす状態に当てはまる。なお、アプリが要求する処理能力としては、管理ＯＳ１２２は、たとえば、使用率が８０［％］〜９０［％］の範囲をアプリが要求する処理能力として指定することができる。
【００２５】
このとき、管理ＯＳ１２２は、アプリが要求する処理能力を満たすグラフィックカード１１０として、グラフィックカード１１０＃３を特定し、ＶＭ１に割り当てる。これにより、割当装置１０１は、命令送信元が要求する処理能力に適したグラフィックカード１１０の割当が行える。
【００２６】
（ＤａａＳシステム１００のハードウェア）
図２は、ＤａａＳシステム１００のハードウェア例を示すブロック図である。図２において、割当装置１０１は、ＣＰＵ２０１＃１、ＣＰＵ２０１＃２と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、割当装置１０１は、補助記憶装置として、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２０４を含む。また、割当装置１０１は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）２０５と、リモート接続カード２０６＃１〜リモート接続カード２０６＃ｎと、グラフィックカード１１０と、を含む。また、各部はバス２０７によってそれぞれ接続されている。
【００２７】
ここで、ＣＰＵ２０１＃１、ＣＰＵ２０１＃２は、割当装置１０１の全体の制御を司る。また、割当装置１０１は、３つ以上のＣＰＵを含んでいてもよい。このように、実施の形態１にかかる割当装置１０１は、マルチコアプロセッサシステムの形態をとってもよい。なお、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００２８】
また、実施の形態１にかかる割当装置１０１は、コアが１つ搭載されたシングルコアプロセッサシステムであってもよい。また、ＣＰＵ２０１＃１、ＣＰＵ２０１＃２は、キャッシュメモリを有していてもよい。
【００２９】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。また、ＲＯＭ２０２は、実施の形態１にかかる割当プログラム２０８を記憶していてもよい。ＲＡＭ２０３は、ＣＰＵ２０１＃１、ＣＰＵ２０１＃２のワークエリアとして使用される。ＨＤＤ２０４は、ＣＰＵ２０１の制御にしたがって書き込まれたデータを記憶する。また、割当プログラム２０８は、ＨＤＤ２０４に記憶されていてもよい。
【００３０】
ＮＩＣ２０５は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１０３に接続され、ネットワーク１０３を介して端末装置１０２等の他の装置に接続される。
【００３１】
リモート接続カード２０６は、ＰＣ  ｏｖｅｒ  ＩＰにしたがって、端末装置１０２に画面情報を送信するカードである。具体的に、リモート接続カード２０６は、グラフィックカード１１０からの出力を、画面情報として入力し、ＰＣ  ｏｖｅｒ  ＩＰにしたがって暗号化する。続けて、リモート接続カード２０６は、暗号化したデータをネットワーク１０３を介して端末装置１０２に送信する。端末装置１０２は、受信したデータを変換し、画面情報に復号してディスプレイ１１３に表示する。なお、リモート接続カード２０６とグラフィックカード１１０は、１対１で存在している。
【００３２】
また、端末装置１０２は、ＣＰＵ２１１と、ＲＯＭ２１２と、ＲＡＭ２１３と、ＨＤＤ２１４と、ＮＩＣ２１５と、キーボード２１６と、マウス２１７と、ディスプレイ１１３と、を含む。また、各部は、バス２１８で接続されている。なお、ＣＰＵ２１１〜ＮＩＣ２１５に関しては、ＣＰＵ２０１〜ＮＩＣ２０５と同様であるため、説明を省略する。
【００３３】
キーボード２１６は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２１６は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１７は、カーソルの移動や範囲選択、あるいはウインドウの移動やサイズの変更などを行う。また、マウス２１７は、ポインティングデバイスとして同様に機能を含むものであれば、トラックボールやジョイスティックなどであってもよい。
【００３４】
ディスプレイ１１３は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ１１３は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３５】
図３は、割当装置１０１のソフトウェア例を示すブロック図である。なお、割当装置１０１は、各ソフトウェアからアクセスされるテーブルとして、ＧＰＵ管理テーブル３０１と、設定テーブル３０２と、ＧＰＵ仮割当テーブル３０３と、にアクセス可能である。また、ＧＰＵ管理テーブル３０１〜ＧＰＵ仮割当テーブル３０３は、ＲＯＭ２０２、ＲＡＭ２０３、ＨＤＤ２０４などといった記憶装置に記憶されている。また、割当装置１０１は、管理ＯＳ１２２と各ＶＭの間でデータを送受信可能とする共有メモリ３０４にアクセス可能である。
【００３６】
また、割当装置１０１は、グラフィックデバイス用準仮想化フロントエンドドライバ（以下、「ＰＶ−ｆドライバ」と略す）３１１と、ゲストＯＳ３１２と、準仮想化バックエンドドライバ（以下、「ＰＶ−ｂドライバ」と略す）３１３と、グラフィックカード用ドライバ３１４を含む。
【００３７】
さらに、割当装置１０１は、ＧＰＵ管理部３２１と、プロセス監視部３２２と、ＧＰＵ状態監視部３２３、ＧＰＵコマンド流量監視部３２４、ＧＰＵコマンド解析部３２５、ＧＰＵ＿ＶＲＡＭ監視部３２６、ＶＭ管理部３２７、とを含む。
【００３８】
ＧＰＵ管理テーブル３０１は、グラフィックカード１１０の割当状態等の情報を格納するテーブルである。なお、ＧＰＵ管理テーブル３０１の詳細は、図４で後述する。設定テーブル３０２は、グラフィックカード１１０の割当数や各機能部で参照される閾値を格納するテーブルである。なお、設定テーブル３０２の詳細は、図５で後述する。ＧＰＵ仮割当テーブル３０３は、仮想マシン起動時に本割当、仮割当するグラフィックカード１１０を決定するためのテーブルである。なお、ＧＰＵ仮割当テーブル３０３の詳細は、図６で後述する。
【００３９】
ＰＶ−ｆドライバ３１１は、ＶＭ上で実行されており、アプリからのグラフィック処理を受信し、グラフィック処理のコマンドを管理ＯＳ１２２に送信する。以下、グラフィック処理のコマンドをＧＰＵコマンドと称する。アプリからのグラフィック処理とは、ＯｐｅｎＧＬやＤｉｒｅｃｔＸ等といった３Ｄグラフィック処理である。
【００４０】
ゲストＯＳ３１２は、ＶＭ上で実行されているＯＳである。たとえば、ゲストＯＳ３１２は、アプリ３１５が使用するライブラリ、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）などを提供する。
【００４１】
ＰＶ−ｂドライバ３１３は、管理ＯＳ１２２上で実行されており、ＧＰＵコマンドを複製し、複製したＧＰＵコマンドを同時に複数のグラフィックカード用ドライバ３１４に通知する。また、ＰＶ−ｂドライバ３１３は、ＧＰＵ管理部３２１が最適なグラフィックカード１１０を特定した場合、グラフィック処理の複製元のコマンドの送信先を特定したグラフィックカード１１０に切り替える。
【００４２】
グラフィックカード用ドライバ３１４＃１〜グラフィックカード用ドライバ３１４＃ｎは、管理ＯＳ１２２上で実行されており、グラフィックカード１１０＃１〜グラフィックカード１１０＃ｎを制御するデバイスドライバである。
【００４３】
アプリ３１５は、ＶＭ上で起動されているプロセスである。なお、プロセスとは、ＣＰＵの処理するプログラムの実行単位である。たとえば、アプリ３１５は、グラフィックカード１１０＃１〜グラフィックカード１１０＃ｎに対してＯｐｅｎＧＬやＤｉｒｅｃｔＸ等の３Ｄグラフィック処理を行うアプリである。
【００４４】
また、アプリ３１５は、グラフィックカード１１０＃１〜グラフィックカード１１０＃ｎに対して画像処理以外の汎用的な処理の実行を要求するアプリであってもよい。なお、ＧＰＵの演算資源を画像処理以外の目的に使用する技術として、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｏｎ  ＧＰＵ）といった技術が開示されている。なお、以下の説明では、ＧＰＵ１１１がＧＰＧＰＵとして使用される命令も、ＧＰＵコマンドに含まれるものとして扱う。
【００４５】
ＧＰＵ管理部３２１は、管理ＯＳ１２２上で実行されており、最適なグラフィックカード１１０を特定し、特定されたグラフィックカード１１０をＶＭに割り当てる。プロセス監視部３２２は、ＶＭ上で実行されており、アプリ３１５によってグラフィックカード１１０へのアクセスが発生したかを監視する。
【００４６】
ＧＰＵ状態監視部３２３は、管理ＯＳ１２２上で実行しており、監視対象となるグラフィックカード１１０のＧＰＵ使用率を計測する。たとえば、ＧＰＵ状態監視部３２３は、ＧＰＵ使用率を取得可能なＡＰＩを呼び出すことで、ＧＰＵ使用率を参照する。また、ＧＰＵ状態監視部３２３、ＧＰＵ使用率を取得可能なＡＰＩが提供されていない場合に、グラフィックカード１１０の温度、ＰＶ−ｂドライバ３１３のキューなどを参照することで、ＧＰＵ使用率を計測してもよい。
【００４７】
ＧＰＵコマンド流量監視部３２４は、管理ＯＳ１２２上で実行しており、ＰＶ−ｂドライバ３１３を経由したＧＰＵコマンドの流量を計数する。ＧＰＵコマンド解析部３２５は、ＰＶ−ｂドライバ３１３を通過したＧＰＵコマンドを解析する。解析内容としては、ＧＰＵコマンド解析部３２５は、ＧＰＵコマンドのフォーマットにしたがって、ＰＶ−ｂドライバ３１３を通過したＧＰＵコマンドの処理種別を取得する。ＧＰＵコマンド解析部３２５は、たとえば、ＰＶ−ｂドライバ３１３を通過したＧＰＵコマンドが、描画を開始するコマンドであったり、三角形を描画するコマンドであったりすることを解析によって取得する。
【００４８】
ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード１１０のＶＲＡＭ１１２の更新量を監視する。たとえば、ＧＰＵ＿ＶＲＡＭ監視部３２６は、最適なグラフィックカード１１０が特定された後、切替前のグラフィックカード１１０のＶＲＡＭ１１２と切替後のグラフィックカード１１０のＶＲＡＭ１１２の更新量を監視する。
【００４９】
ＶＭ管理部３２７は、割当装置１０１で実行中のＶＭを管理する機能を有する。たとえば、ＶＭ管理部３２７は、現在実行中のＶＭの識別情報を取得したり、ＶＭを起動したり終了したりする。
【００５０】
図４は、ＧＰＵ管理テーブル３０１の記憶内容の一例を示す説明図である。ＧＰＵ管理テーブル３０１は、グラフィックカードＩＤ、ＧＰＵ割当先情報、ＧＰＵ性能情報、ＧＰＵ割当状態という４つのフィールドを含む。グラフィックカードＩＤフィールドには、グラフィックカード１１０＃１〜グラフィックカード１１０＃ｎを一意に識別可能な識別子が格納される。図４の説明にて、グラフィックカードＩＤフィールドによって特定されたグラフィックカード１１０を、対象グラフィックカード１１０として説明する。
【００５１】
ＧＰＵ割当先情報フィールドには、対象グラフィックカード１１０の割当先となる仮想マシンの識別情報が格納される。ＧＰＵ性能情報フィールドには、対象グラフィックカード１１０に含まれるＧＰＵ１１１の処理情報が格納される。なお、性能情報はベンチマークソフトで計測した結果やグラフィックカード１１０のカタログ値等で表される。また、ＧＰＵ性能情報フィールドには、特定のＧＰＵコマンドを実行した場合のＧＰＵ使用率が格納されていてもよい。
【００５２】
ＧＰＵ割当状態フィールドには、対象グラフィックカード１１０の仮想マシンへの割当状態として、未割当、本割当、仮割当、割当予定、解放予定という５つの状態のうちいずれか一つの状態が格納される。未割当状態は、対象グラフィックカード１１０がどの仮想マシンにも割り当てられていない状態を示す。本割当状態は、仮想マシンが対象グラフィックカード１１０を現在使用している状態を示す。仮割当状態は、対象グラフィックカード１１０が最適なグラフィックカード１１０を特定する際の候補となっている状態を示す。
【００５３】
割当予定状態は、対象グラフィックカード１１０が最適なグラフィックカード１１０として特定され、本割当状態になるまでの状態を示す。解放予定状態は、対象グラフィックカード１１０が仮割当状態であったときに、最適なグラフィックカード１１０として特定されず、いつでも解放できる状態を表している。なお、解放予定状態のグラフィックカード１１０は、割当予定状態のグラフィックカード１１０が本割当状態となった際に、未割当状態となる。
【００５４】
以下、説明を簡略化するため、グラフィックカード１１０＃１をＧＰＵ−１、グラフィックカード１１０＃２をＧＰＵ−２、…、グラフィックカード１１０＃ｎをＧＰＵ−ｎと呼称する。
【００５５】
たとえば、図４の例では、ＶＭ１には、本割当状態としてＧＰＵ性能情報が５００［ＧＦＬＯＰＳ］（ＦＬＯＰＳ：Ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｎｕｍｂｅｒ  Ｏｐｅｒａｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ）のＧＰＵ−４が割り当てられており、仮割当状態としてＧＰＵ性能情報が１００［ＧＦＬＯＰＳ］のＧＰＵ−１が割り当てられている。また、ＶＭ２には、割当予定状態としてＧＰＵ性能情報が２００［ＧＦＬＯＰＳ］のＧＰＵ−２が割り当てられている。また、ＶＭ２には、解放予定状態としてＧＰＵ性能情報が８００［ＧＦＬＯＰＳ］のＧＰＵ−５と、ＧＰＵ性能情報が１［ＴＦＬＯＰＳ］のＧＰＵ−ｎと、が割り当てられている。
【００５６】
図５は、設定テーブル３０２とＧＰＵ仮割当テーブル３０３の記憶内容の一例を示す説明図である。設定テーブル３０２は、ＧＰＵ仮割当数、ＧＰＵ仮割当テーブル３０３へのアドレス、ＧＰＵ使用率、コマンド流量閾値、ＶＲＡＭ更新量閾値、という５つのフィールドを含む。ＧＰＵ仮割当数フィールドには、本割当のグラフィックカード１１０以外に仮割当として割り当てるグラフィックカード１１０の数が格納される。ＧＰＵ仮割当テーブル３０３へのアドレスフィールドには、ＧＰＵ仮割当テーブル３０３へのアドレスが格納される。
【００５７】
ＧＰＵ使用率フィールドは、利用者にとって最適なグラフィックカード１１０であると判断するための閾値が格納される。ＧＰＵ使用率フィールドは、さらに下限値と上限値というサブフィールドを含む。下限値フィールドが閾値の下限値を格納し、上限値フィールドが閾値の上限値を格納する。
【００５８】
コマンド流量閾値フィールドには、グラフィックカード１１０の切替が可能と判断するための閾値が格納される。コマンド流量閾値フィールドは、さらにコマンド流量とアイドル時間というサブフィールドを含む。コマンド流量フィールドは、監視時間に流れるコマンド数が閾値以下の場合にグラフィックカード１１０が切替可能であると判断するための設定値が格納される。コマンド流量フィールドは、さらにコマンド数と監視時間というサブフィールドを含む。コマンド数フィールドが監視時間内の閾値を格納し、監視時間フィールドが、監視時間を格納する。アイドル時間フィールドは、アイドル時間の間、コマンド流量が０である場合に切替可能であると判断するための設定値が格納される。
【００５９】
ＶＲＡＭ更新量閾値フィールドには、グラフィックカード１１０の切替が可能と判断するための閾値が格納される。ＶＲＡＭ更新量閾値フィールドは、さらに、同一ＧＰＵと切替先というサブフィールドを含む。同一ＧＰＵフィールドは、本割当のグラフィックカード１１０において、前回監視時よりＶＲＡＭ１１２の更新量が閾値以下の場合に切替先グラフィックカード１１０のＶＲＡＭ１１２との比較を実施可能か判断するための閾値が格納される。切替先フィールドは、切替元のＶＲＡＭ１１２と切替先のＶＲＡＭ１１２との差分が閾値以下の場合に、グラフィックカード１１０を切替可能なタイミングであると判断するための設定であり、切替可能とする閾値が格納される。
【００６０】
たとえば、図５に示す設定テーブル３０２では、ＧＰＵ仮割当数フィールドから、グラフィックカード１１０の仮割当数が２であることを示している。続けて、設定テーブル３０２は、ＧＰＵ仮割当テーブル３０３が０ｘ１０００００００に格納されていることを示している。また、ＣＰＵ使用率フィールドから、対象のグラフィックカード１１０のＣＰＵ使用率が８０［％］から９０［％］の間である場合に、管理ＯＳ１２２が最適なグラフィックカード１１０として特定することを示している。
【００６１】
また、コマンド流量フィールドから、監視時間３［秒］以内のコマンド数が５つ以下である場合、管理ＯＳ１２２がグラフィックカード１１０を切替可能と判断することを示している。また、アイドル時間フィールドから、５０００［ミリ秒］のコマンド流量が０である場合、管理ＯＳ１２２がグラフィックカード１１０を切替可能と判断することを示している。
【００６２】
また、グラフィックカード１１０が切替可能と判断された後、同一ＧＰＵフィールドから、切替元のＶＲＡＭ１１２の更新量が５００［ピクセル］以下である場合、管理ＯＳ１２２が切替先のＶＲＡＭ１１２と比較が可能な状態と判断することを示している。また、切替先フィールドから、切替元のＶＲＡＭ１１２と切替先のＶＲＡＭ１１２との差分が１００［ピクセル］以下である場合、管理ＯＳ１２２がグラフィックカード１１０を切替可能なタイミングと判断することを示している。
【００６３】
次に、ＧＰＵ仮割当テーブル３０３は、パターン番号、本割当ＧＰＵ、仮割当ＧＰＵ１、仮割当ＧＰＵ２という４つのフィールドを含む。パターン番号フィールドには、本割当ＧＰＵを一意に特定する番号が格納される。本割当ＧＰＵフィールドには、ＶＭから指定されたグラフィックカード１１０の識別情報が格納される。仮割当ＧＰＵ１フィールド、仮割当ＧＰＵ２フィールドには、本割当ＧＰＵに対応する仮割当ＧＰＵ１、仮割当ＧＰＵ２が格納される。
【００６４】
たとえば、図５では、本割当ＧＰＵがＧＰＵ−１である場合、管理ＯＳ１２２は、パターン番号１を指定し、仮割当ＧＰＵとして、ＧＰＵ−３、ＧＰＵ−４を選択する。同様に、本割当ＧＰＵがＧＰＵ−２であった場合、管理ＯＳ１２２は、パターン番号２を指定し、仮割当ＧＰＵとして、ＧＰＵ−４、ＧＰＵ−９が選択される。図５に登録されているパターン番号３〜パターン番号ｎについても同様の選択方法が行われる。また、前述した図４で示したＧＰＵ管理テーブル３０１は、ＧＰＵ−４が本割当ＧＰＵであるため、パターン番号４を指定し、仮割当ＧＰＵとして、ＧＰＵ−１とＧＰＵ−７が選択されている。
【００６５】
また、ＶＭからグラフィックカード１１０が指定されない場合、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１から、ＧＰＵ割当状態が未割当となるグラフィックカード１１０を探索し、本割当ＧＰＵとして指定する。以降、管理ＯＳ１２２は、ＶＭがグラフィックカード１１０を指定した方法と同様に仮割当ＧＰＵを選択する。
【００６６】
また、仮割当ＧＰＵ１フィールドのグラフィックカード１１０は、本割当ＧＰＵに格納されるグラフィックカード１１０より処理性能が低いグラフィックカード１１０であってもよい。さらに、仮割当ＧＰＵ２フィールドのグラフィックカード１１０は、本割当ＧＰＵに格納されるグラフィックカード１１０より処理性能が高いグラフィックカード１１０であってもよい。この条件により、グラフィックカード割当処理が実行された場合、始めに本割当となるグラフィックカードの処理性能が高い場合であっても低い場合であっても、より適切なグラフィックカードに切り替わることができる。
【００６７】
（管理ＯＳ１２２の機能）
図６は、管理ＯＳ１２２の機能例を示すブロック図である。管理ＯＳ１２２は、決定部６００と、複製部６０１と、送信部６０２と、送信部６０３と、送信部６０４と、計測部６０５と、特定部６０６と、切替部６０７と、判断部６０８と、判断部６０９と、を含む。この制御部となる機能（決定部６００〜判断部６０９）は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤＤ２０４などである。
【００６８】
また、決定部６００〜送信部６０４、切替部６０７はＰＶ−ｂドライバ３１３に含まれ、計測部６０５はＧＰＵ状態監視部３２３に含まれ、特定部６０６はＧＰＵ管理部３２１に含まれる。また、判断部６０８はＧＰＵコマンド解析部３２５に含まれ、判断部６０９はＧＰＵ＿ＶＲＡＭ監視部３２６に含まれる。
【００６９】
決定部６００は、いずれか一つの装置に応じて、複数の装置のうち処理を実行していない装置群のうち、最適な装置に特定される候補となる装置を決定する機能を有する。たとえば、決定部６００は、本割当状態であるＧＰＵ−１に応じて、ＧＰＵ−２、ＧＰＵ−３を最適な装置に特定される候補に決定する。なお、最適な装置に特定される候補となった、ＧＰＵ−２、ＧＰＵ−３は、仮割当状態となる。なお、決定された情報は、ＧＰＵ管理テーブル３０１に保存される。
【００７０】
複製部６０１は、ＰＶ−ｆドライバ３１１から通知された命令を複製する機能を有する。命令とは、グラフィックカード１１０に対するＧＰＵコマンドである。たとえば、複製部６０１は、描画開始するＧＰＵコマンド、三角形を描画するＧＰＵコマンド等を複製する。なお、複製されたＧＰＵコマンドは、割当装置１０１のキャッシュメモリ、ＲＡＭ２０３等に記憶される。
【００７１】
送信部６０２は、同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に処理に対する命令を送信する機能を有する。なお、複数の装置とは、ＧＰＵ−１〜ＧＰＵ−ｎである。たとえば、送信部６０２は、いずれか一つの装置として、本割当状態であるＧＰＵ−１にＧＰＵコマンドを送信する。また、具体的には、送信部６０２は、ＧＰＵ−１に対応するグラフィックカード用ドライバ３１４＃１にＧＰＵコマンドを送信する。
【００７２】
送信部６０３、送信部６０４は、決定部６００によって決定された最適な装置に特定される候補となる装置に対して、複製部６０１によって複製された命令を送信する機能を有する。たとえば、送信部６０３は、ＧＰＵ−１〜ＧＰＵ−ｎのうち、決定部６００によって仮割当状態のグラフィックカード１１０に決定された、ＧＰＵ−２に複製されたＧＰＵコマンドを送信する。また、送信部６０４は、ＧＰＵ−３に複製されたＧＰＵコマンドを送信する。
【００７３】
また、仮割当状態となったグラフィックカード１１０群は、本割当状態となったグラフィックカード１１０より処理性能が低いグラフィックカード１１０および処理性能が高いグラフィックカード１１０が含まれてもよい。たとえば、ＧＰＵ−１の処理性能が２００［ＧＦＬＯＰＳ］であり、ＧＰＵ−２の処理性能が３００［ＧＦＬＯＰＳ］であり、ＧＰＵ−３の処理性能が４００［ＧＦＬＯＰＳ］であり、ＧＰＵ−４の処理性能が５００［ＧＦＬＯＰＳ］である場合を想定する。このとき、いずれか一つの装置として、ＧＰＵ−２が指定された場合、送信部６０３、送信部６０４は、ＧＰＵ−２より処理性能が低いＧＰＵ−１と、ＧＰＵ−２より処理性能が高いＧＰＵ−３またはＧＰＵ−４と、に対して複製された命令を送信する。
【００７４】
また、本割当状態または仮割当状態のグラフィックカード１１０群の処理性能は、等間隔となってもよい。さらに、本割当状態または仮割当状態のグラフィックカード１１０群内の中間の処理性能となるグラフィックカード１１０が、本割当状態のグラフィックカード１１０となってもよい。
【００７５】
計測部６０５は、命令を実行した場合の使用率を、いずれか一つの装置および装置群の各装置に対して計測する機能を有する。たとえば、計測部６０５は、ＧＰＵ−１〜ＧＰＵ−３に対して、ＧＰＵコマンドを実行した場合の使用率を計測する。具体的な使用率の計測方法としては、たとえば、グラフィックカード１１０のＡＰＩを利用した計測方法や、ＡＰＩが提供されていない場合、グラフィックカード１１０の温度を用いた計測方法がある。詳しくは、図８にて後述する。なお、計測された使用率は、割当装置１０１のキャッシュメモリ、ＲＡＭ２０３等に記憶される。
【００７６】
特定部６０６は、いずれか一つの装置に対する使用率に基づいて、装置群のうち切替対象の装置を特定する機能を有する。具体的には、特定部６０６は、使用率が１００％未満であり、いずれか一つの装置に対する使用率より高い使用率となった装置を切替対象の装置として特定してもよい。たとえば、ＧＰＵ−１のＧＰＵ使用率が４０［％］であり、ＧＰＵ−２のＧＰＵ使用率が１００［％］であり、ＧＰＵ−３のＧＰＵ使用率が８５［％］である場合を想定する。このとき、特定部６０６は、ＧＰＵ−３を切替対象の装置として特定する。
【００７７】
また、特定部６０６は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値と所定の下限値との間となる装置を、切替対象の装置に特定してもよい。所定の上限値とは、設定テーブル３０２の上限値フィールドの値となり、所定の下限値とは、設定テーブル３０２の下限値フィールドの値となる。たとえば、所定の上限値が９０［％］であり、所定の下限値が８０［％］であり、ＧＰＵ−１のＧＰＵ使用率が４０［％］であり、ＧＰＵ−２のＧＰＵ使用率が８７［％］であり、ＧＰＵ−３のＧＰＵ使用率が８５［％］である場合を想定する。このとき、特定部６０６は、ＧＰＵ−２、ＧＰＵ−３のいずれか一方を切替対象の装置として特定する。
【００７８】
また、特定部６０６は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ使用率が最も高い装置を、切替対象の装置に特定してもよい。たとえば、所定の上限値が９０［％］であり、ＧＰＵ−１のＧＰＵ使用率が４０［％］であり、ＧＰＵ−２のＧＰＵ使用率が８７［％］であり、ＧＰＵ−３のＧＰＵ使用率が８５［％］である場合を想定する。このとき、特定部６０６は、ＧＰＵ−２を切替対象の装置として特定する。
【００７９】
また、特定部６０６は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ処理性能が最も低い装置を、切替対象の装置に特定してもよい。たとえば、所定の上限値が９０［％］であり、ＧＰＵ−１のＧＰＵ使用率が４０［％］であり、ＧＰＵ−２のＧＰＵ使用率が８７［％］であり、ＧＰＵ−３のＧＰＵ使用率が８５［％］であることを想定する。さらに、ＧＰＵ−１の処理性能が４００［ＧＦＬＯＰＳ］であり、ＧＰＵ−２の処理性能が３００［ＧＦＬＯＰＳ］であり、ＧＰＵ−３の処理性能が２００［ＧＦＬＯＰＳ］であることを想定する。このとき、特定部６０６は、ＧＰＵ−３を切替対象の装置として特定する。なお、特定された切替対象の装置の識別情報は、割当装置１０１のキャッシュメモリ、ＲＡＭ２０３等に記憶される。
【００８０】
切替部６０７は、命令の送信先をいずれか一つの装置から切替対象の装置に切り替える機能を有する。たとえば、切替部６０７は、複製前のオリジナルとなるＧＰＵコマンドを、グラフィックカード１１０＃１からグラフィックカード１１０＃３に切り替える。また、切替部６０７は、判断部６０８によって命令の単位時間当たりの送信数が所定数以下である場合、切り替えてもよい。さらに、切替部６０７は、判断部６０９によって命令による更新量が所定量以下である場合、切り替えてもよい。さらに、切替部６０７は、判断部６０９によって差分が所定の閾値以下である場合、切り替えてもよい。
【００８１】
判断部６０８は、命令の単位時間当たりの送信数が所定数以下であるか否かを判断する機能を有する。単位時間当たりの所定数は、（設定テーブル３０２のコマンド数／設定テーブル３０２の監視時間）を算出することにより取得できる。なお、判断結果は、割当装置１０１のキャッシュメモリ、ＲＡＭ２０３等に記憶される。
【００８２】
判断部６０９は、いずれか一つの装置内の画像記憶領域において、命令による更新量が所定量以下であるか否かを判断する機能を有する。なお、画像記憶領域とは、ＶＲＡＭ１１２である。また、所定量とは、設定テーブル３０２の同一ＧＰＵフィールドの値となる。たとえば、判断部６０９は、いずれか一つの装置のＶＲＡＭ１１２の更新量が５００［ピクセル］以下であるかを判断する。
【００８３】
また、判断部６０９は、いずれか一つの装置内の画像記憶領域と切替対象の装置内の画像記憶領域との差分が所定の閾値以下であるか否かを判断してもよい。なお、所定の閾値とは、設定テーブル３０２の切替先フィールドの値である。たとえば、いずれか一つの装置がＧＰＵ−１であり、切替対象の装置がＧＰＵ−３となった場合を想定する。このとき、判断部６０９は、ＧＰＵ−１とＧＰＵ−３のＶＲＡＭ１１２の差分が１００［ピクセル］以下であるかを判断する。なお、判断結果は、割当装置１０１のキャッシュメモリ、ＲＡＭ２０３等に記憶される。
【００８４】
以上、割当装置１０１は、ＧＰＵ管理テーブル３０１〜ＧＰＵ仮割当テーブル３０３にアクセスして、最適なグラフィックカード１１０を割り当てる。割当方法の一連の動作を、図７−１、図７−２にて説明する。
【００８５】
図７−１、図７−２は、グラフィックカード１１０の割当方法の一例を示す説明図である。図７−１、図７−２では、符号７０１〜符号７０４にて示す説明図にて、複数のグラフィックカード１１０のうち、最適なグラフィックカード１１０を割り当てる方法を説明する。符号７０１で示す説明図は、複数のグラフィックカード１１０のうち、割当候補のグラフィックカード１１０を選択する方法を説明する。次に、符号７０２で示す説明図では、割当候補のグラフィックカード１１０に、アプリからのグラフィックカード１１０へのアクセスを複製した状態を説明する。
【００８６】
続けて、符号７０３で示す説明図は、アクセスを複製することによって変化するグラフィックカード１１０の使用率から割当予定のグラフィックカード１１０を特定する方法を説明する。最後に、符号７０４で示す説明図は、割当元のグラフィックカード１１０から割当予定のグラフィックカード１１０への切替タイミングについて説明する。
【００８７】
符号７０１で示す割当装置１０１は、複数のグラフィックカード１１０のうち、割当候補のグラフィックカード１１０を選択している。具体的には、割当装置１０１内で、ＩＤ：ＧＰＵ−１が指定されてＶＭ１が起動された場合、ＧＰＵ管理部３２１は、ＧＰＵ仮割当テーブル３０３を参照して、ＧＰＵ−１のＧＰＵ割当状態を本割当に、ＧＰＵ−３とＧＰＵ−４のＧＰＵ割当状態を仮割当に設定する。なお、ＧＰＵ仮割当テーブル３０３の参照方法は、図６にて記述した方法となる。なお、ＧＰＵコマンドを受け付けた場合、管理ＯＳ１２２は、本割当状態であるＧＰＵ−１にＧＰＵコマンドを通知する。
【００８８】
次に、符号７０２で示す割当装置１０１は、割当候補のグラフィックカード１１０に、ＧＰＵコマンドを複製している状態である。具体的には、ＶＭ１にてグラフィックカード１１０にアクセスするアプリ７０５が起動されると、ＰＶ−ｆドライバ３１１は、ＧＰＵコマンドをＰＶ−ｂドライバ３１３に通知する。ＰＶ−ｂドライバ３１３は、ＧＰＵコマンドを複製して、ＧＰＵ割当状態が本割当であるＧＰＵ−１、仮割当であるＧＰＵ−３、ＧＰＵ−４に出力する。
【００８９】
続けて、符号７０３で示す割当装置１０１は、複製されたＧＰＵコマンドの実行による割当候補のグラフィックカード１１０の使用率を計測している。具体的に、ＧＰＵ状態監視部３２３は、ＧＰＵ−１のＧＰＵ使用率を４０［％］、ＧＰＵ−３のＧＰＵ使用率を１００［％］、ＧＰＵ−４のＧＰＵ使用率を８５［％］と計測する。なお、ＧＰＵ使用率の計測方法については、図８にて後述する。
【００９０】
計測された割当候補のグラフィックカード１１０の使用率から、ＧＰＵ管理部３２１は、設定テーブル３０２を参照して、最適なグラフィックカード１１０を選択する。符号７０３の例では、図５に示した設定テーブル３０２のＧＰＵ使用率フィールドの下限値８０［％］と上限値９０［％］の間の使用率となる、ＧＰＵ−４を、最適なグラフィックカード１１０として特定する。
【００９１】
なお、最適なグラフィックカード１１０の特定方法は、前述の閾値から特定する方法以外に、ＰＶ−ｂドライバ３１３内のキューを監視する方法が存在する。ＰＶ−ｂドライバ３１３内のキューを監視して最適なグラフィックカード１１０を特定する方法については、図９にて後述する。特定した結果、ＧＰＵ管理部３２１は、ＧＰＵ−４のＧＰＵ割当状態を割当予定に設定し、ＧＰＵ−３のＧＰＵ割当状態を解放予定に設定する。
【００９２】
最後に、符号７０４で示す割当装置１０１は、割当元となるＧＰＵ−１から割当先となるＧＰＵ−４への切替タイミングを示している。具体的に、ＧＰＵコマンド流量監視部３２４は、コマンド流量を監視し、設定テーブル３０２で設定されている閾値より少なくなった場合に、ＶＲＡＭ１１２の比較が可能な状態であると判断する。なお、具体的なグラフィックカード切替可能とするＧＰＵコマンド流量の状態の一例については、図１０にて後述する。
【００９３】
続けて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、設定テーブル３０２で設定されている閾値よりＶＲＡＭ１１２の更新量が少なくなった場合に、ＧＰＵ−１のＶＲＡＭ１１２のデータを、ＧＰＵ−４のＶＲＡＭ１１２にコピーする。なお、具体的なグラフィックカード切替可能とするＶＲＡＭ１１２の状態の一例については、図１１にて後述する。コピー後、ＧＰＵ管理部３２１は、ＧＰＵ−４のＧＰＵ割当状態を本割当に設定し、ＧＰＵ−１とＧＰＵ−３のＧＰＵ割当状態を未割当に設定する。
【００９４】
以降、図８にてＧＰＵ使用率の計測方法の一例の説明を行い、図９にて最適なグラフィックカード１１０の特定方法の他の例の説明を行う。また、図１０にてグラフィックカード切替可能とするＧＰＵコマンド流量の状態の一例の説明を行い、図１１にて、グラフィックカード切替可能とするＶＲＡＭ１１２の状態の一例について説明を行う。
【００９５】
図８は、ＧＰＵ使用率の計測方法の一例を示す説明図である。ＧＰＵ状態監視部３２３は、グラフィックカード用ドライバにＧＰＵ使用率を取得可能なＡＰＩが用意されている場合、ＧＰＵ使用率を取得するＡＰＩを利用する。また、ＧＰＵ使用率の計測方法の他の例として、本実施の形態１にかかる割当装置１０１は、ＧＰＵ１１１の限界温度と、現在のＧＰＵ１１１の温度とから計測する。この場合、割当装置１０１は、グラフィックカード１１０のＧＰＵ１１１の限界温度を記憶するテーブルをＲＯＭ２０２等に記憶しておく。
【００９６】
図８に示すＧＰＵ限界温度テーブル８０１は、グラフィックカードＩＤ、限界温度という２つのフィールドを含む。グラフィックカードＩＤフィールドには、グラフィックカード１１０の識別情報が格納される。限界温度フィールドには、グラフィックカードＩＤフィールドに格納されたグラフィックカード１１０のＧＰＵ１１１の限界温度が格納される。なお、ＧＰＵ限界温度テーブル８０１は、設定テーブル３０２に含まれていてもよい。
【００９７】
図８では、たとえば、ＧＰＵ−１は、限界温度が８５［℃］であることを示している。同様に、ＧＰＵ−２〜ＧＰＵ−ｎに対する限界温度がＧＰＵ限界温度テーブル８０１に格納されている。
【００９８】
次に、符号８０２内で示す計算式を用いて、計測された現在のグラフィックカード１１０の温度とＧＰＵ限界温度テーブル８０１を参照してＧＰＵ使用率を算出する方法について説明する。ＧＰＵ状態監視部３２３は、下記（１）式によって、ＧＰＵ使用率を算出する。
【００９９】
ＧＰＵ使用率＝現在のＧＰＵ温度／限界温度×１００  …（１）
【０１００】
たとえば、ＧＰＵ−１の現在の温度が８０［℃］であれば、ＧＰＵ状態監視部３２３は、ＧＰＵ−１のＧＰＵ使用率を（１）式より、以下のように計測する。
【０１０１】
ＧＰＵ使用率＝８０／８５×１００≒９４［％］
【０１０２】
また、ＧＰＵ状態監視部３２３は、（１）式に関して、常温を基準にして算出してもよい。たとえば、ＧＰＵ状態監視部３２３は、下記（２）式のようにＧＰＵ使用率を算出してもよい。
【０１０３】
ＧＰＵ使用率＝（現在のＧＰＵ温度−常温）／（限界温度−常温）×１００  …（２）
【０１０４】
（２）式は、負荷による温度上昇分に対する使用率を算出することができる。
【０１０５】
図９は、最適なグラフィックカード１１０の特定方法の他の例を示す説明図である。図９では、ＰＶ−ｂドライバ３１３内のキューを監視して最適なグラフィックカード１１０を特定する方法を説明する。なお、図９では、符号９０１で示す説明図による特定方法と、符号９０２で示す説明図による特定方法との２つの特定方法を示す。
【０１０６】
符号９０１で示す説明図は、ＰＶ−ｂドライバ３１３内のキューの残量とＧＰＵ使用率によって最適なグラフィックカード１１０を特定する方法を示している。表９０３は、ＧＰＵ割当状態が本割当であるグラフィックカード１１０と、ＧＰＵ割当状態が仮割当である３枚のグラフィックカード１１０とのキュー残量とＧＰＵ使用率を示している。ＧＰＵ管理部３２１は、キュー残量が０であり、かつ、ＧＰＵ使用率が最も高い９３［％］となる、仮割当ＧＰＵ３を最適なグラフィックカード１１０であると特定する。
【０１０７】
また、符号９０２で示す説明図は、ＰＶ−ｂドライバ３１３内のキューの残量とＧＰＵ性能情報によって最適なグラフィックカード１１０を特定する方法を示している。表９０４は、ＧＰＵ割当状態が本割当であるグラフィックカード１１０と、ＧＰＵ割当状態が仮割当である４枚のグラフィックカード１１０とのキュー残量とＧＰＵ性能情報を示している。ＧＰＵ管理部３２１は、キュー残量が０であり、かつ、ＧＰＵ性能情報が最も低い３００［ＭＦＬＯＰＳ］となる、仮割当ＧＰＵ１を最適なグラフィックカード１１０であると特定する。
【０１０８】
図１０は、グラフィックカード切替可能とするＧＰＵコマンド流量の状態の一例を示す説明図である。図１０では、符号１００１で示す説明図にて、ＧＰＵコマンドの例を示し、符号１００２で示す説明図にて、グラフィックカード切替可能とするＧＰＵコマンド流量の状態の一例を示す。初めに、ＧＰＵコマンドは、仮想マシン上のプロセスからのアクセスが、ＰＶ−ｆドライバ３１１によってＧＰＵコマンドに変換されることで発生する。発生したＧＰＵコマンドに関して、ＰＶ−ｆドライバ３１１が、ＰＶ−ｂドライバ３１３に通知する。
【０１０９】
次に、符号１００１で示す説明図にて、ＧＰＵコマンドの例を示す。符号１００１で示す説明図では、ＧＰＵコマンドのフォーマット１００３と、ソースコード１００４でのＧＰＵコマンドが発行される例と、ＧＰＵコマンドが発行された際のフォーマット１００３の具体的な値が示されている。
【０１１０】
ＧＰＵコマンドは、ＧＰＵコマンドのフォーマット１００３に従った形式となる。フォーマット１００３は、コマンドフィールドと、戻り値フィールドと、引数フィールドを含む。たとえば、ソースコード１００４は、三角形を描画するソースコードを示している。ソースコード１００４がコンパイルされ、仮想マシン上のプロセスにて実行された場合、ＧＰＵコマンドは、符号１００５のような値をとる。
【０１１１】
たとえば、コマンドフィールドには、三角形描画を示す識別子が格納される。具体的に、三角形描画を示す識別子は、ソースコード１００４で示されている“Ｄ３ＤＰＴ＿ＴＲＩＡＮＧＬＥＬＩＳＴ”であってもよい。続けて、戻り値フィールドには、変数ｒｅｔの値が格納される。引数フィールドには、Ｄ３ＤＶＥＲＴＥＸ型の配列のポインタであるｐｔが格納される。
【０１１２】
続けて、符号１００２で示す説明図にて、ＧＰＵコマンド流量の判断方法の一例を示す。たとえば、ＧＰＵコマンド流量監視部３２４がＧＰＵコマンド流量の判断の所定の閾値として、監視時間３秒間にＧＰＵコマンド数が５つ以下、すなわち、単位時間当たりのＧＰＵコマンド数が５／３≒１．７であるときに、切替可能であると判断すると想定する。なお、監視時間とＧＰＵコマンド数について、ＧＰＵコマンド流量監視部３２４が設定テーブル３０２のコマンド流量フィールドから取得する。また、符号１００２で示す説明図では、ＧＰＵコマンド流量が多い状態である状態１００６と、ＧＰＵコマンド流量が少ない状態である状態１００７を示している。
【０１１３】
状態１００６では、１０秒で４９個のＧＰＵコマンドがＰＶ−ｂドライバ３１３を通過している状態である。状態１００６における単位時間当たりのＧＰＵコマンド数は、４９／１０＝４．９＞１．７となり、所定の閾値より多いため、切替不可の状態となる。状態１００７では、１０秒で７個のＧＰＵコマンドがＰＶ−ｂドライバ３１３を通過している状態である。状態１００７における単位時間当たりのＧＰＵコマンド数は、７／１０＝０．７≦１．７となり、所定の閾値以下のため、切替可能の状態となる。
【０１１４】
図１１は、グラフィックカード切替可能とするＶＲＡＭ１１２の状態の一例を示す説明図である。ディスプレイ１１３に表示される画面の内容は、切替先グラフィックカード１１０上のＶＲＡＭ１１２に書き込まれている。グラフィックカード１１０を切り替えた際、表示データが動画データであったりすると、場面が飛んだり、または巻き戻ったりする可能性が高い。このような状態を避けるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、符号１１０１に示す条件１、条件２を同時に満たす場合に、グラフィックカード切替可能としている。
【０１１５】
条件１は、切替元のグラフィックカード１１０にて、ＶＲＡＭ１１２の更新量が５００［ピクセル］以下の場合である。条件１を満たす場合、ＧＰＵ＿ＶＲＡＭ監視部３２６は、画面が頻繁に更新されていない状態であることが判断できる。なお、条件１の閾値である５００［ピクセル］について、ＧＰＵ＿ＶＲＡＭ監視部３２６は、設定テーブル３０２の同一ＧＰＵフィールドから取得する。
【０１１６】
条件２は、切替元のグラフィックカード１１０のＶＲＡＭ１１２と切替先のグラフィックカード１１０のＶＲＡＭ１１２との差分が１００［ピクセル］以下の場合である。条件２を確認する理由として、各グラフィックカードは、処理性能が異なるため、一方のグラフィックカードでは描画が完了しているが、他方のグラフィックカードでは描画が完了していない場合もあり得る。切替元のＶＲＡＭ１１２と切替先のＶＲＡＭ１１２の差分が小さく、条件２を満たす場合、ＧＰＵ＿ＶＲＡＭ監視部３２６は、切替時に画面内容が大きく変更しない状態であると判断できる。なお、条件２の閾値である１００［ピクセル］について、ＧＰＵ＿ＶＲＡＭ監視部３２６は、設定テーブル３０２の切替先フィールドから取得する。
【０１１７】
条件１と条件２が満たされる場合の例を、符号１１０２で示す説明図にて説明する。符号１１０２で示す説明図では、時刻ｔ１〜時刻ｔ５にて、切替元グラフィックカードのＶＲＡＭ１１２の状態と切替先グラフィックカードのＶＲＡＭ１１２の状態を表示している。図１１では、説明の簡略化のため、ＶＲＡＭ１１２に、切替元を示す記号“＿ｓｒｃ”、切替先を示す記号“＿ｄｓｔ”、時刻ｔ１〜時刻ｔ５のいずれかの時刻ｔｘを示す記号“＿ｔｘ”を用いて説明を行う。
【０１１８】
時刻ｔ２にて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ２とＶＲＡＭ１１２＿ｓｒｃ＿ｔ１を比較して、更新量が５００［ピクセル］以下か否かを判断する。時刻ｔ２でのＶＲＡＭ１１２＿ｓｒｃの更新量は９０００［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の比較不可能であると判断する。
【０１１９】
次に、時刻ｔ３にて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ３とＶＲＡＭ１１２＿ｓｒｃ＿ｔ２を比較して、更新量が５００［ピクセル］以下か否かを判断する。時刻ｔ３でのＶＲＡＭ１１２＿ｓｒｃの更新量は４８０［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の比較可能であると判断する。続けて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ３とＶＲＡＭ１１２＿ｄｓｔ＿ｔ３を比較して、差分が１００［ピクセル］以下か否かを判断する。時刻ｔ３での差分は１８００［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の切替不可能であると判断する。
【０１２０】
続けて、時刻ｔ４にて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ４とＶＲＡＭ１１２＿ｓｒｃ＿ｔ３を比較して、更新量が５００［ピクセル］以下か否かを判断する。時刻ｔ４でのＶＲＡＭ１１２＿ｓｒｃの更新量は１００［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の比較可能であると判断する。続けて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ４とＶＲＡＭ１１２＿ｄｓｔ＿ｔ４を比較して、差分が１００［ピクセル］以下か否かを判断する。時刻ｔ４での差分は５００［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の切替不可能であると判断する。
【０１２１】
最後に、時刻ｔ５にて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ５とＶＲＡＭ１１２＿ｓｒｃ＿ｔ４を比較して、更新量が５００［ピクセル］以下か否かを判断する。時刻ｔ５でのＶＲＡＭ１１２＿ｓｒｃの更新量は３６［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の比較可能であると判断する。続けて、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＶＲＡＭ１１２＿ｓｒｃ＿ｔ５とＶＲＡＭ１１２＿ｄｓｔ＿ｔ５を比較して、差分が１００［ピクセル］以下か否かを判断する。時刻ｔ５での差分は９０［ピクセル］となるため、ＧＰＵ＿ＶＲＡＭ監視部３２６は、グラフィックカード間の切替可能であると判断する。したがって、ＧＰＵ＿ＶＲＡＭ監視部３２６は、時刻ｔ５にてグラフィックカード間の切替可能であると判断する。
【０１２２】
続けて、図１２〜図１９で、図７で説明した動作を行うフローチャートを説明する。図１２で示すフローチャートは、管理ＯＳ１２２が行うグラフィックカード割当処理のフローチャートを示しており、図１３〜図１９で示すフローチャートは、各機能部が行うフローチャートを示している。なお、図１２〜図１９では、ＶＭ１が指定するグラフィックカードはＩＤ：ＧＰＵ−１であることを想定する。
【０１２３】
図１２−１、図１２−２、図１２−３は、管理ＯＳ１２２のグラフィックカード割当処理手順の一例を示すフローチャートである。初めに、図１２−１で示すフローチャートの説明を行う。管理ＯＳ１２２は、ＧＰＵ管理部３２１を起動し（ステップＳ１２０１）、指定されたＧＰＵ−１を割り当ててＶＭ１を起動する（ステップＳ１２０２）。起動後、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１内の、ＧＰＵ−１のレコードのＧＰＵ割当状態フィールドを、未割当から本割当に変更する（ステップＳ１２０３）。変更後、管理ＯＳ１２２は、ＧＰＵ仮割当テーブル３０３のうち、指定されたＧＰＵ−１が本割当ＧＰＵフィールドに格納されているレコードを選択する（ステップＳ１２０４）。
【０１２４】
選択後、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１のうち、選択されたレコードの仮割当ＧＰＵフィールドに対応するグラフィックカード１１０のＧＰＵ割当状態フィールドを、未割当から仮割当に変更する（ステップＳ１２０５）。なお、ＧＰＵ仮割当テーブル３０３の仮割当ＧＰＵフィールドが図５で示したように複数ある場合、各仮割当ＧＰＵフィールドに対応するＧＰＵのＧＰＵ割当状態を未割当から仮割当に変更する。たとえば、図１２では、ＧＰＵ−１が指定されているため、管理ＯＳ１２２は、仮割当ＧＰＵ１フィールドに格納されたＧＰＵ−３の割当状態と、仮割当ＧＰＵ１フィールドに格納されたＧＰＵ−４の割当状態とを、未割当から仮割当に変更する。
【０１２５】
変更後、管理ＯＳ１２２は、ＶＭ１がグラフィックカード１１０を使用するプロセスを起動したか否かを判断する（ステップＳ１２０６）。起動していない場合（ステップＳ１２０６：Ｎｏ）、管理ＯＳ１２２は、一定時間後に再びステップＳ１２０６の処理を実行する。起動した場合（ステップＳ１２０６：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ状態監視部３２３に監視開始を通知する（ステップＳ１２０７）。通知後、管理ＯＳ１２２は、ＧＰＵ管理部３２１に監視開始を通知し（ステップＳ１２０８）、ＰＶ−ｂドライバ３１３に複製開始を通知する（ステップＳ１２０９）。
【０１２６】
通知後、管理ＯＳ１２２は、一定時間経過したか否かを判断する（ステップＳ１２１０）。一定時間経過していない場合（ステップＳ１２１０：Ｎｏ）、管理ＯＳ１２２は、再びステップＳ１２１０の処理を実行する。一定時間経過した場合（ステップＳ１２１０：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ状態監視部３２３に監視停止を通知する（ステップＳ１２１１）。通知後、管理ＯＳ１２２は、ステップＳ１２１２の処理に移行する。
【０１２７】
次に、図１２−２で示すフローチャートの説明を行う。管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１のレコードを参照し、ＧＰＵ割当先情報フィールドにＶＭ１が格納されているグラフィックカード１１０のＧＰＵ使用率をＧＰＵ状態監視部３２３から取得し、ＧＰＵ管理部３２１に通知する（ステップＳ１２１２）。管理ＯＳ１２２は、ＧＰＵ使用率より、設定テーブル３０２のＧＰＵ使用率フィールドを参照して、最適なグラフィックカード１１０としてＧＰＵ−ｘを特定する（ステップＳ１２１３）。なお、具体的なグラフィックカード１１０の特定方法は、図７、図９で説明した方法となる。
【０１２８】
選択後、管理ＯＳ１２２は、ＧＰＵ−ｘがＧＰＵ−１か否かを判断する（ステップＳ１２１４）。ＧＰＵ−ｘがＧＰＵ−１である場合（ステップＳ１２１４：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１のうち、ＧＰＵ割当先情報フィールドにＶＭ１が格納され、かつ仮割当状態となるレコードのＧＰＵ割当状態フィールドを、仮割当から未割当に変更する（ステップＳ１２１５）。
【０１２９】
ＧＰＵ−ｘがＧＰＵ−１でない場合（ステップＳ１２１４：Ｎｏ）、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１内の、ＧＰＵ−ｘのレコードのＧＰＵ割当状態フィールドを、仮割当から割当予定に変更する（ステップＳ１２１６）。なお、切替元のグラフィックカード１１０がＧＰＵ−１となり、切替先のグラフィックカード１１０がＧＰＵ−ｘとなる。続けて、または、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１内の、ＧＰＵ−１およびＧＰＵ−ｘ以外のレコードのＧＰＵ割当状態フィールドを、仮割当から解放予定に変更する（ステップＳ１２１７）。変更後、ステップＳ１２２５：Ｎｏ、またはステップＳ１２２６：Ｎｏのルートを経由した場合、管理ＯＳ１２２は、ＧＰＵコマンド流量監視部３２４に監視開始を通知する（ステップＳ１２１８）。
【０１３０】
通知後、管理ＯＳ１２２は、ＧＰＵ−１がグラフィック出力を行っているか否かを判断する（ステップＳ１２１９）。グラフィック出力を行っている場合（ステップＳ１２１９：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ＿ＶＲＡＭ監視部３２６に監視開始を通知する（ステップＳ１２２０）。通知後、またはグラフィック出力を行っていない場合（ステップＳ１２１９：Ｎｏ）、管理ＯＳ１２２は、ステップＳ１２２１の処理に移行する。なお、グラフィック出力を行っていない場合として、たとえば、ＶＭ上のプロセスがＧＰＵ１１１をＧＰＧＰＵとして使用している場合である。
【０１３１】
最後に、図１２−３で示すフローチャートの説明を行う。管理ＯＳ１２２は、設定テーブル３０２の監視時間フィールドに格納された時間の経過まで待機する（ステップＳ１２２１）。時間経過後、管理ＯＳ１２２は、コマンド流量が設定テーブル３０２のコマンド数フィールドの値以下か否かを判断する（ステップＳ１２２２）。コマンド流量がコマンド数フィールドの値より多い場合（ステップＳ１２２２：Ｎｏ）、管理ＯＳ１２２は、ステップＳ１２２１の処理に移行する。コマンド流量がコマンド数フィールドの値以下である場合（ステップＳ１２２２：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵコマンド流量監視部３２４に監視停止を通知する（ステップＳ１２２３）。
【０１３２】
通知後、管理ＯＳ１２２は、ＧＰＵ−１がグラフィック出力を行っているか否かを判断する（ステップＳ１２２４）。グラフィック出力を行っている場合（ステップＳ１２２４：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ−１のＶＲＡＭ更新量が設定テーブル３０２の同一ＧＰＵフィールドの値以下か否かを判断する（ステップＳ１２２５）。ＶＲＡＭ更新量が同一ＧＰＵフィールドの値より大きい場合（ステップＳ１２２５：Ｎｏ）、管理ＯＳ１２２は、ステップＳ１２１８の処理に移行する。
【０１３３】
ＶＲＡＭ更新量が同一ＧＰＵフィールドの値以下である場合（ステップＳ１２２５：Ｙｅｓ）、管理ＯＳ１２２は、続けて、ＧＰＵ−１とＧＰＵ−ｘのＶＲＡＭ１１２の差分が、設定テーブル３０２の切替先フィールドの値以下か否かを判断する（ステップＳ１２２６）。差分が切替先フィールドの値より大きい場合（ステップＳ１２２６：Ｎｏ）、管理ＯＳ１２２は、ステップＳ１２１８の処理に移行する。
【０１３４】
差分が切替先フィールドの値以下の場合（ステップＳ１２２６：Ｙｅｓ）、管理ＯＳ１２２は、ＧＰＵ＿ＶＲＡＭ監視部３２６に監視停止を通知する（ステップＳ１２２７）。通知後、管理ＯＳ１２２は、ＧＰＵ−１とＧＰＵ−ｘのＶＲＡＭの差分が０であるか否かを判断する（ステップＳ１２２８）。差分が０でない場合（ステップＳ１２２８：Ｎｏ）、管理ＯＳ１２２は、差分をＧＰＵ−ｘのＶＲＡＭ１１２にコピーする（ステップＳ１２２９）。
【０１３５】
コピー後、または差分が０である場合（ステップＳ１２２８：Ｙｅｓ）、またはグラフィック出力を行っていない場合（ステップＳ１２２４：Ｎｏ）、管理ＯＳ１２２は、ＰＶ−ｂドライバ３１３のコマンド送信先をＧＰＵ−ｘに設定する（ステップＳ１２３０）。設定後、管理ＯＳ１２２は、ＰＶ−ｂドライバ３１３に複製停止を通知する（ステップＳ１２３１）。通知後、管理ＯＳ１２２は、ＧＰＵ−ｘのレコードのＧＰＵ割当状態フィールドを割当予定から本割当に変更する（ステップＳ１２３２）。
【０１３６】
続けて、管理ＯＳ１２２は、ＧＰＵ管理テーブル３０１のＧＰＵ割当先情報がＶＭ１であるレコードのうち、ＧＰＵ−ｘ以外のレコードのＧＰＵ割当状態フィールドを未割当に変更する（ステップＳ１２３３）。変更後、管理ＯＳ１２２は、管理ＯＳ１２２のグラフィックカード割当処理を終了する。
【０１３７】
図１３−１、図１３−２、図１３−３、図１３−４は、ＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャートである。初めに、図１３−１で示すフローチャートの説明を行う。ＧＰＵ管理部３２１は、指定されたＧＰＵ−１を割り当てて監視対象ＶＭとなるＶＭ１を起動する（ステップＳ１３０１）。起動後、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１内の、ＧＰＵ−１のレコードのＧＰＵ割当状態フィールドを、未割当から本割当に変更する（ステップＳ１３０２）。
【０１３８】
変更後、ＧＰＵ管理部３２１は、ＧＰＵ仮割当テーブル３０３のうち、指定されたＧＰＵ−１が本割当ＧＰＵフィールドに格納されているレコードを選択する（ステップＳ１３０３）。選択後、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１のうち、選択されたレコードの仮割当ＧＰＵフィールドに対応するグラフィックカード１１０のＧＰＵ割当状態フィールドを、未割当から仮割当に変更する（ステップＳ１３０４）。
【０１３９】
変更後、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３から監視開始を受け付けたか否かを判断する（ステップＳ１３０５）。監視開始を受け付けていない場合（ステップＳ１３０５：Ｎｏ）、ＧＰＵ管理部３２１は、一定時間経過後、ステップＳ１３０５の処理を実行する。監視開始を受け付けている場合（ステップＳ１３０５：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に複製開始を通知する（ステップＳ１３０６）。
【０１４０】
通知後、または、ステップＳ１３１５：Ｎｏとなった後、ＧＰＵ管理部３２１は、監視対象ＶＭが停止したか否かを判断する（ステップＳ１３０７）。停止した場合（ステップＳ１３０７：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１のＧＰＵ割当先情報が監視対象ＶＭであるレコードのＧＰＵ割当状態を、未割当に設定する（ステップＳ１３０８）。設定後、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３に監視停止を通知する（ステップＳ１３０９）。通知後、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に複製停止を通知し（ステップＳ１３１０）、ＧＰＵ管理部３２１のグラフィックカード割当処理を終了する。監視対象ＶＭが停止していない場合（ステップＳ１３０７：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３１１の処理に移行する。
【０１４１】
次に、図１３−２に示すフローチャートの説明を行う。ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５よりプロセス終了を受け付けたか否かを判断する（ステップＳ１３１１）。プロセス終了を受け付けた場合（ステップＳ１３１１：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３にＧＰＵ使用率取得依頼と監視停止を通知する（ステップＳ１３１２）。通知後、またはプロセス終了を受け付けていない場合（ステップＳ１３１１：Ｎｏ）、ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５よりグラフィックカード１１０の解放依頼を受け付けたか否かを判断する（ステップＳ１３１３）。
【０１４２】
グラフィックカード１１０の解放依頼を受け付けた場合（ステップＳ１３１３：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１のうち、依頼を受けたグラフィックカード１１０のＧＰＵ割当状態フィールドを仮割当から解放予定に変更する（ステップＳ１３１４）。変更後、またはグラフィックカード１１０の解放依頼を受け付けていない場合（ステップＳ１３１３：Ｎｏ）、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３よりＧＰＵ使用率を受け付けたか否かを判断する（ステップＳ１３１５）。ＧＰＵ使用率を受け付けていない場合（ステップＳ１３１５：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３０７の処理に移行する。
【０１４３】
ＧＰＵ使用率を受け付けている場合（ステップＳ１３１５：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ使用率より、設定テーブル３０２のＧＰＵ使用率フィールドを参照して、最適なグラフィックカード１１０としてＧＰＵ−ｘを特定する（ステップＳ１３１６）。
【０１４４】
以降、ステップＳ１３１７〜ステップＳ１３３７の処理について、図１２−２、図１２−３で示したステップＳ１２１４〜ステップＳ１２３３の処理の実行主体を管理ＯＳ１２２からＧＰＵ管理部３２１に変更した状態とほぼ等しいため、説明を省略する。
【０１４５】
具体的には、ステップＳ１３１７〜ステップＳ１３２０が、ステップＳ１２１４〜ステップＳ１２１７の処理に対応し、ステップＳ１３２２〜ステップＳ１３２６が、ステップＳ１２１８〜ステップＳ１２２２の処理に対応する。さらに、ステップＳ１３３５〜ステップＳ１３３７が、ステップＳ１２３１〜ステップＳ１２３３の処理に対応する。以下の説明では、処理内容が異なる、ステップＳ１３２１、ステップＳ１３２７、ステップＳ１３３３について説明を行う。
【０１４６】
図１３−３で示すフローチャートにて、ステップＳ１３２０の処理終了後、ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５よりプロセス終了を受け付けたか否かを判断する（ステップＳ１３２１）。受け付けていない場合（ステップＳ１３２１：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３２２の処理に移行する。受け付けている場合（ステップＳ１３２１：Ｙｅｓ）、ＧＰＵ管理部３２１は、ステップＳ１３２３の処理に移行する。
【０１４７】
図１３−４で示すフローチャートにて、ステップＳ１３２６の処理終了後、ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５よりプロセス終了を受け付けたか否かを判断する（ステップＳ１３２７）。受け付けていない場合（ステップＳ１３２７：Ｎｏ）、ＧＰＵ管理部３２１は、ＧＰＵコマンド流量監視部３２４に監視停止を通知する（ステップＳ１３２８）。通知後、または受け付けている場合（ステップＳ１３２７：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ−１がグラフィック出力を行っているか否かを判断する（ステップＳ１３２９）。グラフィック出力を行っていない場合（ステップＳ１３２９：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３３４の処理に移行する。
【０１４８】
グラフィック出力を行っている場合（ステップＳ１３２９：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ＿ＶＲＡＭ監視部３２６から切替可能判断結果を受け取り（ステップＳ１３３０）、切替可能判断結果が切替可能か否かを判断する（ステップＳ１３３１）。切替可能である場合（ステップＳ１３３１：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ＿ＶＲＡＭ監視部３２６に監視停止を通知し（ステップＳ１３３２）、ＧＰＵ＿ＶＲＡＭ監視部３２６にＶＲＡＭ１１２の差分のコピー依頼を通知する（ステップＳ１３３３）。通知後、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に、コマンド送信先をＧＰＵ−ｘに設定するコマンド送信先切替を通知し（ステップＳ１３３４）、ステップＳ１３３５の処理に移行する。切替不可能である場合（ステップＳ１３３１：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３２２の処理に移行する。
【０１４９】
図１４は、プロセス監視部３２２の処理手順の一例を示すフローチャートである。プロセス監視部３２２は、ＰＶ−ｆドライバ３１１を監視し（ステップＳ１４０１）、グラフィックカード１１０へのアクセス要求があったか否かを判断する（ステップＳ１４０２）。グラフィックカード１１０へのアクセス要求がない場合（ステップＳ１４０２：Ｎｏ）、プロセス監視部３２２は、一定時間後、ステップＳ１４０２の処理を実行する。
【０１５０】
グラフィックカード１１０へのアクセス要求がある場合（ステップＳ１４０２：Ｙｅｓ）、プロセス監視部３２２は、ＧＰＵ状態監視部３２３に監視開始を通知し（ステップＳ１４０３）、プロセスが終了したか否かを判断する（ステップＳ１４０４）。プロセスが終了していない場合（ステップＳ１４０４：Ｎｏ）、プロセス監視部３２２は、続けて、一定時間経過したか否かを判断する（ステップＳ１４０５）。一定時間経過していない場合（ステップＳ１４０５：Ｎｏ）、プロセス監視部３２２は、ステップＳ１４０４の処理に移行する。一定時間経過している場合（ステップＳ１４０５：Ｙｅｓ）、またはプロセスが終了している場合（ステップＳ１４０４：Ｙｅｓ）、プロセス監視部３２２は、ＧＰＵ状態監視部３２３に監視停止を通知し（ステップＳ１４０６）、プロセス監視部３２２の処理を終了する。
【０１５１】
図１５は、ＧＰＵ状態監視部３２３の処理手順の一例を示すフローチャートである。ＧＰＵ状態監視部３２３は、プロセス監視部３２２から監視開始を受け付けたか否かを判断する（ステップＳ１５０１）。監視開始を受け付けていない場合（ステップＳ１５０１：Ｎｏ）、ＧＰＵ状態監視部３２３は、一定時間後ステップＳ１５０１の処理を実行する。監視開始を受け付けている場合（ステップＳ１５０１：Ｙｅｓ）、ＧＰＵ状態監視部３２３は、ＧＰＵ管理部３２１に監視開始を通知する（ステップＳ１５０２）。通知後、ＧＰＵ状態監視部３２３は、ＧＰＵ使用率を計測し（ステップＳ１５０３）、監視対象ＶＭが停止したか否かを判断する（ステップＳ１５０４）。なお、具体的なＧＰＵの計測方法は、図８で説明した方法となる。また、計測対象となるグラフィックカード１１０は、ＧＰＵ割当状態が、仮割当、本割当となっているグラフィックカード１１０でよい。
【０１５２】
監視対象ＶＭが停止していない場合（ステップＳ１５０４：Ｎｏ）、ＧＰＵ状態監視部３２３は、ＧＰＵ管理部３２１またはプロセス監視部３２２から監視停止を受け付けたか否かを判断する（ステップＳ１５０５）。監視停止を受け付けていない場合（ステップＳ１５０５：Ｎｏ）、ＧＰＵ状態監視部３２３は、ステップＳ１５０３の処理に移行する。監視停止を受け付けている場合（ステップＳ１５０５：Ｙｅｓ）、ＧＰＵ状態監視部３２３は、ＧＰＵ使用率をＧＰＵ管理部３２１に通知する（ステップＳ１５０６）。通知後、ＧＰＵ状態監視部３２３は、処理を終了する。また、監視対象ＶＭが停止した場合（ステップＳ１５０４：Ｙｅｓ）、ＧＰＵ状態監視部３２３は、ＧＰＵ状態監視部３２３の処理を終了する。
【０１５３】
図１６は、ＧＰＵコマンド流量監視部３２４の処理手順の一例を示すフローチャートである。ＧＰＵコマンド流量監視部３２４は、ＧＰＵ管理部３２１から監視開始を受け付けたか否かを判断する（ステップＳ１６０１）。監視開始を受け付けていない場合（ステップＳ１６０１：Ｎｏ）、ＧＰＵコマンド流量監視部３２４は、一定時間後にステップＳ１６０１の処理を実行する。監視開始を受け付けている場合（ステップＳ１６０１：Ｙｅｓ）、ＧＰＵコマンド流量監視部３２４は、ＰＶ−ｂドライバ３１３を通過するコマンドを計数する（ステップＳ１６０２）。
【０１５４】
計数後、ＧＰＵコマンド流量監視部３２４は、ＧＰＵ管理部３２１から監視停止を受け付けたか否かを判断する（ステップＳ１６０３）。監視停止を受け付けていない場合（ステップＳ１６０３：Ｎｏ）、ＧＰＵコマンド流量監視部３２４は、ステップＳ１６０２の処理に移行する。監視停止を受け付けている場合（ステップＳ１６０３：Ｙｅｓ）、ＧＰＵコマンド流量監視部３２４は、ＧＰＵコマンド流量監視部３２４の処理を終了する。
【０１５５】
図１７は、ＧＰＵ＿ＶＲＡＭ監視部３２６の処理手順の一例を示すフローチャートである。ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＧＰＵ管理部３２１から監視開始を受け付けたか否かを判断する（ステップＳ１７０１）。監視開始を受け付けていない場合（ステップＳ１７０１：Ｎｏ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、一定時間後にステップＳ１７０１の処理を実行する。監視開始を受け付けている場合（ステップＳ１７０１：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、切替前のグラフィックカード１１０のＶＲＡＭ１１２の更新量を取得する（ステップＳ１７０２）。ＧＰＵ＿ＶＲＡＭ監視部３２６は、取得した更新量が設定テーブル３０２の同一ＧＰＵフィールドの値以下か否かを判断する（ステップＳ１７０３）。
【０１５６】
更新量が同一ＧＰＵフィールドの値以下の場合（ステップＳ１７０３：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、続けて、切替元と切替先のグラフィックカード１１０のＶＲＡＭ１１２の差分が、設定テーブル３０２の切替先フィールドの値以下か否かを判断する（ステップＳ１７０４）。なお、切替元のグラフィックカード１１０のＧＰＵ割当状態は、本割当状態となっており、切替先のグラフィックカード１１０のＧＰＵ割当状態は、割当予定状態となっている。差分が切替先フィールドの値以下である場合（ステップＳ１７０４：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、切替可能判断結果を切替可能としてＧＰＵ管理部３２１に通知する（ステップＳ１７０５）。
【０１５７】
更新量が同一ＧＰＵフィールドの値より大きい（ステップＳ１７０３：Ｎｏ）、または差分が切替先フィールドの値より大きい場合（ステップＳ１７０４：Ｎｏ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、切替可能判断結果が切替不可能としてＧＰＵ管理部３２１に通知する（ステップＳ１７０６）。通知後、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ステップＳ１７０２の処理に移行する。
【０１５８】
切替可能を通知後、ＧＰＵ＿ＶＲＡＭ監視部３２６は、ＧＰＵ管理部３２１から監視停止を受け付けたか否かを判断する（ステップＳ１７０７）。監視停止を受け付けていない場合（ステップＳ１７０７：Ｎｏ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、一定時間経過後、ステップＳ１７０７の処理を実行する。監視停止を受け付けた場合（ステップＳ１７０７：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、続けて、ＧＰＵ管理部３２１からＶＲＡＭ１１２の差分のコピー依頼を受け付けたか否かを判断する（ステップＳ１７０８）。差分のコピー依頼を受け付けていない場合（ステップＳ１７０８：Ｎｏ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、一定時間経過後、ステップＳ１７０８の処理を実行する。
【０１５９】
差分のコピー依頼を受け付けた場合（ステップＳ１７０８：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、切替元と切替先のグラフィックカード１１０のＶＲＡＭ１１２の差分が０か否かを判断する（ステップＳ１７０９）。差分が０でない場合（ステップＳ１７０９：Ｎｏ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、差分を切替先のグラフィックカード１１０のＶＲＡＭ１１２にコピーし（ステップＳ１７１０）、ＧＰＵ＿ＶＲＡＭ監視部３２６の処理を終了する。差分が０である場合（ステップＳ１７０９：Ｙｅｓ）、ＧＰＵ＿ＶＲＡＭ監視部３２６は、処理を終了する。
【０１６０】
図１８は、ＰＶ−ｂドライバ３１３の処理手順の一例を示すフローチャートである。ＰＶ−ｂドライバ３１３は、ＧＰＵ管理部３２１から複製開始を受け付けたかを否かを判断する（ステップＳ１８０１）。複製開始を受け付けていない場合（ステップＳ１８０１：Ｎｏ）、ＰＶ−ｂドライバ３１３は、一定時間経過後、ステップＳ１８０１の処理を実行する。複製開始を受け付けている場合（ステップＳ１８０１：Ｙｅｓ）、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンド解析部３２５を起動する（ステップＳ１８０２）。
【０１６１】
起動後、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンドを複製する（ステップＳ１８０３）。具体的な複製処理としては、たとえば、ＰＶ−ｂドライバ３１３は、受信したＧＰＵコマンドを複製対象となるグラフィックカード用ドライバ３１４の記憶領域にコピーする。ＰＶ−ｂドライバ３１３は、本割当状態のグラフィックカード１１０に複製元のＧＰＵコマンドを送信する（ステップＳ１８０４）。
【０１６２】
送信後、ＰＶ−ｂドライバ３１３は、仮割当状態、または、割当予定状態のグラフィックカード１１０に複製されたＧＰＵコマンドを送信する（ステップＳ１８０５）。送信後、ＰＶ−ｂドライバ３１３は、ＧＰＵ管理部３２１よりコマンド送信先切替を受け付けたか否かを判断する（ステップＳ１８０６）。コマンド送信先切替を受け付けていない場合（ステップＳ１８０６：Ｎｏ）、ＰＶ−ｂドライバ３１３は、続けて、ＧＰＵ管理部３２１から複製停止を受け付けたか否かを判断する（ステップＳ１８０７）。
【０１６３】
複製停止を受け付けていない場合（ステップＳ１８０７：Ｎｏ）、ＰＶ−ｂドライバ３１３は、ステップＳ１８０３の処理に移行する。また、コマンド送信先切替を受け付けた場合（ステップＳ１８０６：Ｙｅｓ）、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンドの送信先を切替先のグラフィックカード１１０に設定する（ステップＳ１８０８）。続けて、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンド書込先および参照先のＶＲＡＭ１１２を切替先のグラフィックカード１１０のＶＲＡＭ１１２に設定する（ステップＳ１８０９）。
【０１６４】
設定後、または複製停止を受け付けている場合（ステップＳ１８０７：Ｙｅｓ）、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンド解析部３２５を停止させる（ステップＳ１８１０）。停止後、ＰＶ−ｂドライバ３１３は、ＧＰＵコマンドの複製を停止し（ステップＳ１８１１）、ＰＶ−ｂドライバ３１３の処理を終了する。
【０１６５】
図１９は、ＧＰＵコマンド解析部３２５の処理手順の一例を示すフローチャートである。ＧＰＵコマンド解析部３２５は、ＰＶ−ｂドライバ３１３から起動される。ＧＰＵコマンド解析部３２５は、ＧＰＵコマンドの解析を開始する（ステップＳ１９０１）。なお、具体的な解析方法とは、受け付けたＧＰＵコマンドに対して、図１０で示したフォーマット１００３の各フィールドの値を取得することである。
【０１６６】
解析開始後、ＧＰＵコマンド解析部３２５は、高負荷またはメモリ使用量が多いＧＰＵコマンドを受け付けたか否かを判断する（ステップＳ１９０２）。なお、高負荷なＧＰＵコマンドとは、たとえば、テクスチャフィルタリングの一つである異方性フィルタリングや、陰影処理等があげられる。また、メモリ使用量の多いＧＰＵコマンドとしては、たとえば、テクスチャ処理等があげられる。
【０１６７】
高負荷またはメモリ使用量が多いＧＰＵコマンドを受け付けた場合（ステップＳ１９０２：Ｙｅｓ）、ＧＰＵコマンド解析部３２５は、ＧＰＵ使用率を取得する（ステップＳ１９０３）。取得後、ＧＰＵコマンド解析部３２５は、ＧＰＵ使用率が設定テーブル３０２の上限値フィールドの値以上となるグラフィックカード１１０が存在するか否かを判断する（ステップＳ１９０４）。ＧＰＵ使用率が上限値フィールドの値となるグラフィックカード１１０が存在した場合（ステップＳ１９０４：Ｙｅｓ）、ＧＰＵコマンド解析部３２５は、該当のグラフィックカード１１０について、ＧＰＵコマンドの複製、配信を停止する（ステップＳ１９０５）。停止後、ＧＰＵコマンド解析部３２５は、ＧＰＵ管理部３２１に該当のグラフィックカード１１０の解放依頼を通知し（ステップＳ１９０６）、ステップＳ１９０２の処理に移行する。
【０１６８】
ＧＰＵ使用率が上限値フィールドの値以上のグラフィックカード１１０が存在しない場合（ステップＳ１９０４：Ｎｏ）、ＧＰＵコマンド解析部３２５は、ステップＳ１９０２の処理に移行する。なお、ＧＰＵコマンド解析部３２５は、ステップＳ１９０３の処理終了後、ステップＳ１９０４〜ステップＳ１９０６の処理を行わずに、ステップＳ１９０２の処理に移行してもよい。ＧＰＵコマンド解析部３２５は、ステップＳ１９０４〜ステップＳ１９０６の処理を行うことで、高負荷となってしまっているグラフィックカード１１０を、最適なグラフィックカードの特定処理が行われる前に解放することができる。
【０１６９】
高負荷またはメモリ使用量が多いＧＰＵコマンドを受け付けていない場合（ステップＳ１９０２：Ｎｏ）、ＧＰＵコマンド解析部３２５は、ＧＰＵ使用終了コマンドを受け付けたか否かを判断する（ステップＳ１９０７）。ＧＰＵ使用終了コマンドを受け付けていない場合（ステップＳ１９０７：Ｎｏ）、ＧＰＵコマンド解析部３２５は、ステップＳ１９０２の処理に移行する。ＧＰＵ使用終了コマンドを受け付けた場合（ステップＳ１９０７：Ｙｅｓ）、ＧＰＵコマンド解析部３２５は、ＧＰＵコマンドの複製を停止する（ステップＳ１９０８）。停止後、ＧＰＵコマンド解析部３２５は、ＧＰＵ管理部３２１にプロセス終了を通知し（ステップＳ１９０９）、ＧＰＵコマンド解析部３２５の処理を終了する。
【０１７０】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、処理未実行のグラフィックカードに命令を複製し、命令送信先のグラフィックカードから適切な使用率となるグラフィックカードに命令の送信先を切り替える。これにより、割当装置は、命令送信元が要求する処理能力に適したグラフィックカードの割当が行える。したがって、割当装置は、処理性能が高すぎるグラフィックカード、または低すぎるグラフィックカードを割り当てずに済み、高処理性能を要求するＶＭが実行した場合でも、高処理性能のグラフィックカードが既に使用されてしまっているという状態を減らすことができる。
【０１７１】
また、割当装置は、使用率が所定の上限値と所定の下限値の間となるグラフィックカードを適切なグラフィックカードとして特定してもよい。これにより、割当装置は、ＶＭが要求した処理性能に対して適切な装置を割り当てることができる。
【０１７２】
また、割当装置は、使用率が所定の上限値未満であり、かつ使用率が最も高いグラフィックカードを適切なグラフィックカードとして特定してもよい。これにより、割当装置は、ＶＭが要求した処理性能を満足するグラフィックカードのうち、最も処理性能が低いグラフィックカードを割り当てることができる。
【０１７３】
また、割当装置は、使用率が所定の上限値未満であり、かつ処理性能が最も低いグラフィックカードを適切なグラフィックカードとして特定してもよい。たとえば、割当装置は、キューに命令が貯まっている場合、アプリが要求する能力より処理性能が足りていない状態である。さらに、処理性能は静的な情報であるため、割当装置は、温度情報が取得できない等、使用率を計測できないグラフィックカードを割り当てる場合であっても本実施の形態を適用することができる。
【０１７４】
また、割当装置は、適切なグラフィックカードが特定された場合、特定されなかった残余のグラフィックカードに対して、命令の複製を停止してもよい。これにより、割当装置は、特定されなかったグラフィックカードを解放でき、割当装置内の負荷を減少させることができる。さらに、解放されたグラフィックカードは、他のＶＭからの割当要求に応答することができる。
【０１７５】
また、複製した命令を送信するグラフィックカード群は、命令送信先のグラフィックカードより処理性能が低いグラフィックカードを含み、さらに、処理性能が高いグラフィックカードも含んでもよい。これにより、割当装置は、命令送信先のグラフィックカードが、処理性能が高すぎるグラフィックカード、または処理性能が低すぎるグラフィックカードのいずれであっても、より適切なグラフィックカードを特定することができる。
【０１７６】
また、割当装置は、命令の単位時間当たりの送信数が所定数以下である場合、命令の送信先を切り替えてもよい。命令の単位時間当たりの送信数が多すぎる場合に切替を行うと、切替前と切替先のグラフィックカードで処理済みの命令数の差分が大きくなる。この時点で切替を行うと、差分の反映に時間がかかり、利用者にとっては処理が止まったように感じられる可能性がある。したがって、割当装置は、命令の単位時間当たりの送信数が所定数以下の場合に切り替えることで、利用者に違和感なく切替を行うことができる。
【０１７７】
また、割当装置は、グラフィックカード以外の装置に対して割当処理を実行してもよい。たとえば、割当装置は、処理性能が異なる複数のＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）に接続可能である場合、複数のＤＳＰに対して割当処理を実行してもよい。
【０１７８】
また、割当装置は、切替元のグラフィックカード内のＶＲＡＭの更新量が所定量以下である場合に、切替を行ってもよい。ＶＲＡＭの更新量が多い状態で、切替を行うと、たとえば、ＶＭ上のプロセスが動画再生ソフトウェアであれば、場面が飛んだり、巻き戻ったりする可能性が発生する。したがって、割当装置は、ＶＲＡＭの更新量が所定量以下である場合に切替を行うことで、利用者に違和感なく切替を行うことができる。
【０１７９】
また、割当装置は、切替元と切替先のグラフィックカード内のＶＲＡＭの差分が所定の閾値以下である場合に、切替を行ってもよい。差分が大きい状態で、割当装置が切替を行うと、差分のコピー処理に時間がかかり、利用者にとっては処理が止まったように感じられる可能性がある。したがって、割当装置は、ＶＲＡＭの差分が所定の閾値以下である場合に切替を行うことで、利用者に違和感なく切替を行うことができる。
【０１８０】
（実施の形態２の説明）
実施の形態２にかかる割当装置１０１は、監視対象ＶＭに仮割当状態、または解放予定状態として割り当てられているグラフィックカード１１０が、監視対象ＶＭ以外の他のＶＭから本割当として割当通知を受け付けた場合について説明する。このとき、ＧＰＵ管理部３２１は、ＧＰＵコマンドの複製および、ＧＰＵ使用率の計測を停止する。なお、実施の形態２にかかる割当装置１０１の説明では、実施の形態１にかかる割当装置１０１からの変更について説明を行う。
【０１８１】
また、実施の形態２にかかる割当装置１０１のハードウェアは、図２で示した実施の形態１にかかる割当装置１０１のハードウェアと等しいため、説明を省略する。また、実施の形態２にかかる割当装置１０１のソフトウェアは、ＧＰＵ管理部３２１以外の機能は同じ機能を有するため、説明を省略する。
【０１８２】
図２０−１、図２０−２は、実施の形態２にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャートである。実施の形態２にかかるＧＰＵ管理部３２１のグラフィックカード割当処理は、実施の形態１にかかるＧＰＵ管理部３２１のグラフィックカード割当処理に２箇所の変更を行うことで対応できる。１箇所目の変更点は、図２０−１で示すように、ステップＳ１３０７：ＮｏとステップＳ１３１１の間への、ステップＳ２００１〜ステップＳ２００４の追加である。２箇所目の変更点は、図２０−２で示すように、ステップＳ１３２４とステップＳ１３２５の間への、ステップＳ２０１１〜ステップＳ２０１４の追加と、さらにステップＳ１３２６：Ｎｏの移行先の変更である。
【０１８３】
図２０−１で示すフローチャートにて、ステップＳ１３０７：Ｎｏを経由した場合、ＧＰＵ管理部３２１は、監視対象ＶＭ以外の他のＶＭからグラフィックカード割当通知を受け付けたか否かを判断する（ステップＳ２００１）。以下、図２０−１、図２０−２の説明において、割当通知を受け付けたグラフィックカード１１０を、該当のグラフィックカード１１０と呼称する。割当通知を受け付けた場合（ステップＳ２００１：Ｙｅｓ）、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０が、ＧＰＵ管理テーブル３０１のＧＰＵ割当先情報フィールドが監視対象ＶＭに設定されているグラフィックカード１１０か否かを判断する（ステップＳ２００２）。
【０１８４】
監視対象ＶＭに設定されているグラフィックカード１１０である場合（ステップＳ２００２：Ｙｅｓ）、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０が、ＧＰＵ割当状態フィールドが仮割当状態のグラフィックカード１１０であるか否かを判断する（ステップＳ２００３）。仮割当状態である場合（ステップＳ２００３：Ｙｅｓ）、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０のＧＰＵ割当状態フィールドを未割当に変更し（ステップＳ２００４）、ステップＳ１３１１の処理に移行する。
【０１８５】
なお、ＧＰＵ割当状態が未割当となったことで、該当のグラフィックカード１１０は、ＧＰＵ状態監視部３２３の処理のステップＳ１５０３における計測対象から外れることになるため、ＧＰＵ使用率の計測がされなくなる。同様に、該当のグラフィックカード１１０は、ＰＶ−ｂドライバ３１３の処理のステップＳ１８０５における複製されたＧＰＵコマンドの送信先から外れるため、ＧＰＵコマンドが配信されなくなる。
【０１８６】
割当通知を受け付けていない場合（ステップＳ２００１：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３１１の処理に移行する。監視対象ＶＭとなるグラフィックカード１１０でない場合（ステップＳ２００２：Ｎｏ）、仮割当状態のグラフィックカード１１０でない場合（ステップＳ２００３：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３１１の処理に移行する。
【０１８７】
次に、図２０−２で示すフローチャートにて、ステップＳ１３２３：Ｎｏを経由後、またはステップＳ１３２４の処理後、ＧＰＵ管理部３２１は、ステップＳ２０１１〜ステップＳ２０１３の処理を行う。ここで、ステップＳ２０１１、ステップＳ２０１２の処理は、ステップＳ２００１、ステップＳ２００２の処理と等しいため、説明を省略する。ステップＳ２００２：Ｙｅｓを経由した場合、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０が、ＧＰＵ割当状態フィールドが解放予定状態のグラフィックカード１１０であるか否かを判断する（ステップＳ２０１３）。解放予定状態である場合（ステップＳ２０１３：Ｙｅｓ）、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０のＧＰＵ割当状態フィールドを未割当に変更し（ステップＳ２０１４）、ステップＳ１３２５の処理に移行する。
【０１８８】
ステップＳ２０１１：Ｎｏ、ステップＳ２０１２：Ｎｏ、または、解放予定状態でない場合（ステップＳ２０１３：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３２５の処理に移行する。ステップＳ１３２６：Ｎｏとなった場合、ＧＰＵ管理部３２１は、ステップＳ２０１１の処理に移行する。
【０１８９】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、他のＶＭから本割当として割当通知を受け付けた場合、該当のグラフィックカードに対して行っていたグラフィックカード割当処理を停止する。これにより、割当装置は、他のＶＭのグラフィックカード割当を妨害することなく、グラフィックカード割当処理を実行することができる。
【０１９０】
（実施の形態３の説明）
実施の形態３にかかる割当装置１０１は、複数のＶＭに対するグラフィックカード割当処理が同時に起こった場合について説明する。同時に起こった場合、ＧＰＵ使用率を測定すると、グラフィックカード１１０にアクセスするプロセスが本来のパフォーマンスを発揮できず、正確なＧＰＵ使用率を測定することができなくなる場合が存在する。したがって、実施の形態３にかかる割当装置１０１は、グラフィックカード割当処理が同時に起こった場合、ＣＰＵ使用率の低い物理ＣＰＵに、監視対象ＶＭを割り当てる。また、実施の形態３にかかる割当装置１０１の説明では、実施の形態１にかかる割当装置１０１からの変更について説明を行う。なお、実施の形態２にかかる割当装置１０１に対しても、実施の形態３を適用することが可能である。
【０１９１】
また、実施の形態３にかかる割当装置１０１のハードウェアは、図２で示した実施の形態１にかかる割当装置１０１のハードウェアと等しいため、説明を省略する。また、実施の形態３にかかる割当装置１０１のソフトウェアは、ＧＰＵ管理部３２１以外の機能は同じ機能を有するため、説明を省略する。
【０１９２】
図２１−１、図２１−２は、実施の形態３にかかるＧＰＵ管理部３２１のグラフィックカード割当処理手順の一例を示すフローチャートである。実施の形態３にかかるＧＰＵ管理部３２１のグラフィックカード割当処理は、図１３に示したＧＰＵ管理部３２１のグラフィックカード割当処理に２箇所の変更点を行うことで対応できる。１箇所目の変更点は、図２１−１で示すように、ステップＳ１３０５：ＹｅｓとステップＳ１３０６の間への、ステップＳ２１０１〜ステップＳ２１０４の追加である。２箇所目の変更点は、図２１−２で示すように、ステップＳ１３３５の処理とステップＳ１３３６の処理の間への、ステップＳ２１０１、ステップＳ２１０２の追加である。
【０１９３】
図２１−１に示すフローチャートにて、ステップＳ１３０５：Ｙｅｓを経由した場合、ＧＰＵ管理部３２１は、監視対象ＶＭ以外の他のＶＭがグラフィックカード割当処理を実行中か否かを判断する（ステップＳ２１０１）。他のＶＭがグラフィックカード割当処理を実行中である場合（ステップＳ２１０１：Ｙｅｓ）、ＧＰＵ管理部３２１は、割当可能かつＣＰＵ使用率が所定の閾値以下の物理ＣＰＵが存在するか否かを判断する（ステップＳ２１０２）。なお、所定の閾値は、設定テーブル３０２のフィールドとして登録されていてもよい。たとえば、所定の閾値として、ＣＰＵ使用率が１０［％］以下であるか否かを判断する。
【０１９４】
また、ＣＰＵ使用率は、ＣＰＵの単位時間あたりの実行時間の比率を負荷量として算出する。また、別の算出方法としては、ＣＰＵに割り当てられている処理数に基づいて算出してもよい。または、ＣＰＵに割り当てられている処理に付与されている処理量情報の合計を、ＣＰＵの負荷量として算出してもよい。なお、処理量情報は、事前に各処理を計測しておく。
【０１９５】
ＣＰＵ使用率が所定の閾値以下となる物理ＣＰＵが存在しない場合（ステップＳ２１０２：Ｎｏ）、ＧＰＵ管理部３２１は、元々割り当てられていた仮想ＣＰＵのＣＰＵ使用率が所定の閾値以下となったか否かを判断する（ステップＳ２１０３）。仮想ＣＰＵのＣＰＵ使用率が所定の閾値より大きい場合（ステップＳ２１０３：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ２１０２の処理に移行する。仮想ＣＰＵのＣＰＵ使用率が所定の閾値以下である場合（ステップＳ２１０３：Ｙｅｓ）、ＧＰＵ管理部３２１は、ステップＳ１３０６の処理に移行する。
【０１９６】
ＣＰＵ使用率が所定の閾値以下の物理ＣＰＵが存在する場合（ステップＳ２１０２：Ｙｅｓ）、ＧＰＵ管理部３２１は、発見した物理ＣＰＵに監視対象ＶＭを割り当てる（ステップＳ２１０４）。割当後、ＧＰＵ管理部３２１は、元々割り当てられていた仮想ＣＰＵをオフライン状態に設定し（ステップＳ２１０５）、ステップＳ１３０６の処理に移行する。なお、仮想ＣＰＵは、オフライン状態になると、ＶＭから使用できなくなる。他のＶＭがグラフィックカード割当処理を実行中でない場合（ステップＳ２１０１：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３０６の処理に移行する。
【０１９７】
次に、図２１−２に示すフローチャートにて、ステップＳ１３３５の処理後、ＧＰＵ管理部３２１は、物理ＣＰＵに監視対象ＶＭを割り当てたか否かを判断する（ステップＳ２１１１）。物理ＣＰＵに監視対象ＶＭを割り当てた場合（ステップＳ２１１１：Ｙｅｓ）、ＧＰＵ管理部３２１は、元々割り当てられていた仮想ＣＰＵをオンライン状態に設定する（ステップＳ２１１２）。なお、仮想ＣＰＵは、オンライン状態になることで、ＶＭから使用できるようになる。設定後、ＧＰＵ管理部３２１は、物理ＣＰＵを解放する（ステップＳ２１１３）。
【０１９８】
解放後、ＧＰＵ管理部３２１は、ステップＳ１３３６の処理に移行する。また、物理ＣＰＵに監視対象ＶＭを割り当てていない場合（ステップＳ２１１１：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ１３３６の処理に移行する。
【０１９９】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、他ＶＭによってグラフィックカード割当処理が実行中であった場合、負荷の低いＣＰＵに対象のＶＭを割り当てる。これにより、割当装置は、グラフィックカード割当処理を本来のパフォーマンスで実行することができる。
【０２００】
（実施の形態４の説明）
実施の形態４にかかる割当装置１０１は、過去に特定したグラフィックカード１１０を記憶する利用者テーブル２２０１にアクセスする場合について説明を行う。利用者の操作によって起動されたＶＭが、過去にグラフィックカード１１０を割り当てて起動したことがある場合、割当装置１０１は、過去に特定したグラフィックカード１１０を再度割り当てる処理を行う。また、実施の形態４にかかる割当装置１０１の説明では、実施の形態１にかかる割当装置１０１からの変更について説明を行う。なお、実施の形態２、または実施の形態３にかかる割当装置１０１に対しても、実施の形態４を適用することが可能である。
【０２０１】
実施の形態４にかかる割当装置１０１の説明については、初めに利用者テーブル２２０１の記憶内容を説明した後、グラフィックカード割当処理の前に行われるグラフィックカード割当準備処理の説明を行う。
【０２０２】
また、実施の形態４にかかる割当装置１０１のハードウェアは、図２で示した実施の形態１にかかる割当装置１０１のハードウェアと等しいため、説明を省略する。また、実施の形態４にかかる割当装置１０１のソフトウェアは、ＧＰＵ管理部３２１にグラフィックカード割当準備処理が追加されており、ＧＰＵ管理部３２１のグラフィックカード割当処理について変更はないため、説明を省略する。また、他の機能部も、決定部６００、複製部６０１を除いて実施の形態１と同じ機能を有するため、説明を省略する。
【０２０３】
実施の形態４にかかる決定部６００は、最適な装置に特定される候補となる装置を、ＰＶ−ｆドライバ３１１から通知された命令が使用するメモリ使用量に応じた数分決定する。なお、メモリ使用量は、利用者テーブル２２０１に格納されている。たとえば、ＧＰＵ仮割当数フィールドの値が２である状態を想定する。このとき、決定部６００は、メモリ使用量が所定の上限値以上であれば、たとえば、ＧＰＵ仮割当数を２−１＝１に決定し、１つのグラフィックカード１１０を候補の装置として決定する。また、決定部６００は、メモリ使用量が所定の下限値以下であれば、たとえば、ＧＰＵ仮割当数を２＋１＝３に決定し、３つのグラフィックカード１１０を候補の装置として決定する。
【０２０４】
実施の形態４にかかる複製部６０１は、最適な装置に特定される候補となる装置数分、命令を複製する。たとえば、ＧＰＵ仮割当数フィールドの値が２である状態を想定する。このとき、複製部６０１は、ＧＰＵ仮割当数＝１であれば、オリジナルの命令に対して１つの命令を複製する。また、複製部６０１は、ＧＰＵ仮割当数＝３であれば、オリジナルの命令に対して３つの命令を複製する。
【０２０５】
図２２は、利用者テーブル２２０１の記憶内容の一例を示す説明図である。利用者テーブル２２０１は、利用者ＩＤ、パスワード、ＶＭＩＤ、グラフィックカードＩＤ、メモリ使用量という５つのフィールドを含む。利用者ＩＤフィールドには、利用者の識別情報が格納される。パスワードフィールドには、利用者ＩＤフィールドに格納された利用者のパスワードが格納される。ＶＭＩＤフィールドには、利用者によって利用されたＶＭの識別情報が格納される。グラフィックカードＩＤフィールドには、前回割り当てられたグラフィックカードの識別情報が格納される。なお、ＶＭが起動されても必ずしもグラフィックカードが使用されるとは限らない。グラフィックカードが使用されなかった場合、グラフィックカードＩＤフィールドとメモリ使用量フィールドは、空欄となる。
【０２０６】
メモリ使用量フィールドには、前回のＧＰＵコマンドの実行により使用したメモリの使用量が格納される。また、メモリ使用量フィールドは、さらに、平均値、最大値というサブフィールドを含む。平均値フィールドは、前回使用したメモリの平均使用量が格納される。最大値フィールドは、前回使用したメモリの最大使用量が格納される。
【０２０７】
たとえば、図２２で示す利用者−Ａは、パスワードがパスワード−Ａであり、利用ＶＭがＶＭ１であることを示す。また、利用ＶＭ１に前回割り当てられたグラフィックカードがＧＰＵ−３であり、メモリ使用量が平均で１．５［Ｍバイト］であり、最大が１．８［Ｍバイト］となる。
【０２０８】
図２３−１、図２３−２は、ＧＰＵ管理部３２１のグラフィックカード割当準備処理手順の一例を示すフローチャートである。ＧＰＵ管理部３２１は、ＶＭ管理部３２７から、割当候補のグラフィックカード特定依頼を受け付けたか否かを判断する（ステップＳ２３０１）。グラフィックカード特定依頼を受け付けていない場合（ステップＳ２３０１：Ｎｏ）、ＧＰＵ管理部３２１は、一定時間経過後、ステップＳ２３０１の処理を実行する。
【０２０９】
グラフィックカード特定依頼を受け付けた場合（ステップＳ２３０１：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＶＭ管理部３２７より利用者ＩＤを取得する（ステップＳ２３０２）。取得後、ＧＰＵ管理部３２１は、利用者テーブル２２０１のうち、利用者ＩＤフィールドに取得した利用者ＩＤと一致するレコードが存在するか否かを判断する（ステップＳ２３０３）。
【０２１０】
レコードが存在する場合（ステップＳ２３０３：Ｙｅｓ）、ＧＰＵ管理部３２１は、発見したレコードのグラフィックカードＩＤフィールドに格納されたグラフィックカード１１０の識別情報を取得する（ステップＳ２３０４）。なお、発見したレコードのグラフィックカードＩＤフィールドにグラフィックカード１１０の識別情報が格納されていない場合も存在する。このとき、ＧＰＵ管理部３２１は、レコードが存在しなかったとしてステップＳ２３０３：Ｎｏのルートを実行してもよい。
【０２１１】
取得後、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１を参照して、取得したグラフィックカード１１０が他のＶＭによって割り当てられているか否かを判断する（ステップＳ２３０５）。他のＶＭによって割り当てられていない場合（ステップＳ２３０５：Ｎｏ）、ＧＰＵ管理部３２１は、取得したグラフィックカード１１０のＧＰＵ割当状態を本割当に設定する（ステップＳ２３０６）。他のＶＭによって割り当てられている場合（ステップＳ２３０５：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１のＧＰＵ性能情報フィールドを参照して、値が近く、かつ未割当状態であるグラフィックカード１１０のＧＰＵ割当状態を本割当に設定する（ステップＳ２３０７）。
【０２１２】
ステップＳ２３０６、ステップＳ２３０７にて本割当のグラフィックカード１１０を設定後、ＧＰＵ管理部３２１は、発見したレコードのメモリ使用量フィールドに基づいて、仮割当を行うグラフィックカードの数を決定する（ステップＳ２３０８）。
【０２１３】
具体的な仮割当数の決定方法として、ＧＰＵ管理部３２１は、所定の閾値となる上限値および下限値を用意しておく。これらの値は、設定テーブル３０２のフィールドとして格納されていてもよい。この状態で、ＧＰＵ管理部３２１は、メモリ使用量フィールドの値が、上限値以上であれば仮割当数を設定テーブル３０２のＧＰＵ仮割当数フィールドの値−１、下限値以下であれば仮割当数をＧＰＵ仮割当数フィールドの値＋１、として決定してもよい。
【０２１４】
仮に、発見されたレコードのＶＭが、テクスチャ処理のように大量のメモリを使用するＧＰＵコマンドを頻繁に発行するＶＭであった場合、仮割当枚数が多いと、メモリにアクセスが増大し、バス２０７の帯域を占有してしまう恐れがある。したがって、ＧＰＵ管理部３２１は、メモリ使用量が多い利用者の場合仮割当枚数を減らすことで、他の利用者への影響を与えないようにすることができる。
【０２１５】
決定後、ＧＰＵ管理部３２１は、ＧＰＵ仮割当テーブル３０３のうち、本割当に設定されたグラフィックカード１１０が本割当ＧＰＵフィールドに格納されているレコードを選択する（ステップＳ２３０９）。選択後、ＧＰＵ管理部３２１は、選択されたレコードの仮割当ＧＰＵフィールド群から、決定された数のグラフィックカード１１０のＧＰＵ割当状態を仮割当に設定し（ステップＳ２３１０）、ステップＳ２３１４の処理に移行する。なお、決定された数が仮割当ＧＰＵフィールド群の数より多い場合、ＧＰＵ管理部３２１は、仮割当ＧＰＵフィールド群全てのグラフィックカード１１０のＧＰＵ割当状態を仮割当に設定してもよい。または、ＧＰＵ管理部３２１は、ＧＰＵ割当状態が未割当となっているグラフィックカード１１０が存在すれば、存在したグラフィックカード１１０を仮割当に設定してもよい。
【０２１６】
レコードが存在しない場合（ステップＳ２３０３：Ｎｏ）、ＧＰＵ管理部３２１は、ＧＰＵ仮割当テーブル３０３のうち、いずれか一つのレコードを選択する（ステップＳ２３１１）。具体的な選択方法として、たとえば、ＧＰＵ管理部３２１は、ＧＰＵ仮割当テーブル３０３の先頭のレコードから順に、次の条件で検索し、当てはまったレコードを選択してもよい。具体的な条件とは、たとえば、本割当ＧＰＵフィールド、仮割当ＧＰＵ１フィールド、仮割当ＧＰＵ２フィールドに格納されている３つのグラフィックカードが全て未割当である場合である。
【０２１７】
選択後、ＧＰＵ管理部３２１は、選択したレコードの本割当ＧＰＵフィールドに格納されているグラフィックカード１１０のＧＰＵ割当状態を本割当に設定する（ステップＳ２３１２）。設定後、ＧＰＵ管理部３２１は、選択されたレコードの仮割当ＧＰＵフィールド群から、ＧＰＵ仮割当数フィールドの値のグラフィックカード１１０のＧＰＵ割当状態を仮割当に設定し（ステップＳ２３１３）、ステップＳ２３１４の処理に移行する。
【０２１８】
次に図２３−２で示すフローチャートにて、ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５にメモリ使用量の計測開始を通知する（ステップＳ２３１４）。なお、メモリ使用量の計測開始を受け取ったＧＰＵコマンド解析部３２５は、グラフィックカードがメモリにアクセスした場合に、メモリ使用量を記憶しておく。通知後、ＧＰＵ管理部３２１は、グラフィックカード割当処理を実行する（ステップＳ２３１５）。また、実行されるグラフィックカード割当処理は、実施の形態１〜実施の形態３で示したいずれか一つのグラフィックカード割当処理となる。なお、グラフィックカード割当処理にて、ステップＳ１３０２〜ステップＳ１３０４の処理は既に実行済みであるため、行わなくてよい。
【０２１９】
グラフィックカード割当処理終了後、ＧＰＵ管理部３２１は、ＧＰＵコマンド解析部３２５からＧＰＵコマンドのメモリ使用量を取得する（ステップＳ２３１６）。取得後、ＧＰＵ管理部３２１は、利用者テーブル２２０１のうち、利用者ＩＤフィールドに取得した利用者ＩＤと一致するレコードを選択する（ステップＳ２３１７）。なお、レコードが存在しなかった場合、ＧＰＵ管理部３２１は、新たなレコードを生成し、利用者テーブル２２０１に追加する。このとき、ＧＰＵ管理部３２１は、生成したレコードの利用者ＩＤフィールド、パスワードフィールド、ＶＭＩＤフィールドをＶＭ管理部３２７から取得し格納する。
【０２２０】
取得後、ＧＰＵ管理部３２１は、利用者テーブル２２０１のグラフィックカード割当処理で特定されたグラフィックカード１１０の識別情報を選択したレコードのグラフィックカードＩＤフィールドに格納する（ステップＳ２３１８）。続けて、ＧＰＵ管理部３２１は、取得したＧＰＵコマンドのメモリ使用量を選択したレコードのメモリ使用量フィールドに格納し（ステップＳ２３１９）、グラフィックカード割当準備処理を終了する。
【０２２１】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、前回割り当てたグラフィックカードの情報を用いてグラフィックカード割当処理を実行する。これにより、割当装置は、グラフィックカード割当処理内で、グラフィックカードが切り替わる可能性を減らすことができる。
【０２２２】
また、割当装置は、命令が使用するメモリ使用量に応じた装置数となる装置群に対して、前記命令を複製して送信してもよい。たとえば、割当装置は、メモリ使用量が多いときに、装置群を少なくしてもよい。これにより、割当装置は、メモリ使用量が多い場合、仮割当されるグラフィックカードの枚数を減らし、メモリアクセスに伴うバスの占有を避けることができる。また、割当装置は、メモリ使用量が少ない場合、仮割当されるグラフィックカードの枚数を増やしてもよい。これにより、割当装置は、多くのグラフィックカードを仮割当とするため、より適切なグラフィックカードを発見しやすくなる。
【０２２３】
（実施の形態５の説明）
実施の形態５にかかる割当装置１０１は、ＧＰＵ管理テーブル３０１のＧＰＵ性能情報に、計測したＧＰＵ使用率を反映する例について説明を行う。また、実施の形態５にかかる割当装置１０１の説明では、実施の形態１にかかる割当装置１０１を基にして説明を行う。なお、実施の形態２、実施の形態３、または実施の形態４にかかる割当装置１０１に対しても、実施の形態５を適用することが可能である。
【０２２４】
実施の形態５にかかる割当装置１０１の説明については、ソフトウェア例と、コマンド保管テーブル２４０１の記憶内容を説明した後、全てのグラフィックカード１１０についてＧＰＵ使用率を計測する、ＧＰＵ使用率計測処理の説明を行う。
【０２２５】
また、実施の形態５にかかる割当装置１０１のハードウェアは、図２で示した実施の形態１にかかる割当装置１０１のハードウェアと等しいため、説明を省略する。また、実施の形態５にかかる割当装置１０１のソフトウェアは、ＧＰＵ管理部３２１にグラフィックカード割当準備処理が追加されており、ＧＰＵ管理部３２１のグラフィックカード割当処理について変更はないため、説明を省略する。また、他の機能部も、実施の形態１と同じ機能を有するため、説明を省略する。
【０２２６】
図２４は、実施の形態５にかかる割当装置１０１のソフトウェア例を示すブロック図である。なお、実施の形態５にかかる割当装置１０１は、実施の形態１にかかる割当装置１０１がアクセス可能なテーブル群に加え、さらに、コマンド保管テーブル２４０１にアクセス可能である。
【０２２７】
コマンド保管テーブル２４０１は、ＶＭから通知されたＧＰＵコマンドを格納するテーブルである。具体的に、ＧＰＵ管理部３２１がグラフィックカード割当処理を実行した際に、Ｐｖ−ｂドライバ３１３が、ＶＭから通知されたＧＰＵコマンドをコマンド保管テーブル２４０１に格納する。また、この時に、ＧＰＵ状態監視部３２３は、計測したＧＰＵ使用率についてもコマンド保管テーブル２４０１に格納する。続けて、ＧＰＵ管理部３２１は、コマンド保管テーブル２４０１にアクセスしてＧＰＵ使用率計測処理を実行する。
【０２２８】
図２５は、コマンド保管テーブル２４０１の記憶内容の一例を示す説明図である。コマンド保管テーブル２４０１は、コマンドリスト、ＧＰＵ使用率という２つのフィールドを含む。コマンドリストフィールドには、ＧＰＵコマンドが格納されたコマンドリストへのアドレスが格納される。ＧＰＵ使用率フィールドには、コマンドリストフィールドに格納されたＧＰＵコマンドを実行した際のＧＰＵ使用率が格納される。ＧＰＵ使用率フィールドは、サブフィールドとして、ＧＰＵ−１〜ＧＰＵ−ｎのＧＰＵ使用率を格納するサブフィールドを含む。
【０２２９】
たとえば、図２５で示すコマンド保管テーブル２４０１は、コマンドリスト２５０１へのアドレスが０ｘ１０００２０００であることを示している。さらに、コマンド保管テーブル２４０１は、コマンドリスト２５０１を実行した際のＧＰＵ使用率が、ＧＰＵ−１：８２．３［％］、ＧＰＵ−２：２７．９［％］、ＧＰＵ−３：９６．４［％］であることを示している。なお、ＧＰＵ−ｎに関しては未計測である。また、図２５で示すコマンドリスト２５０１は、グラフィックカード１１０の初期化を行った後に、ウインドウを生成し、三角形の描画を行うＧＰＵコマンド群が格納されている。
【０２３０】
図２６にて、ＧＰＵ管理部３２１が、ＧＰＵ使用率記録処理を実行する。なお、ＧＰＵ使用率記録処理で用いるＧＰＵコマンド群は、ＧＰＵコマンド解析部３２５の処理となるステップＳ１８０３にて、複製対象となるＧＰＵコマンドである。ＧＰＵコマンド解析部３２５は、複製対象となるＧＰＵコマンドをコマンドリスト２５０１に格納する。
【０２３１】
図２６−１、図２６−２は、ＧＰＵ管理部３２１のＧＰＵ使用率計測処理手順の一例を示すフローチャートである。なお、ＧＰＵ使用率計測処理を行う場合、グラフィックカード割当処理が実行された際に本割当状態、または仮割当状態であったグラフィックカードに対するＧＰＵ使用率フィールドには値が格納されている。したがって、ＧＰＵ使用率計測処理は、本割当状態、または仮割当状態であったグラフィックカード１１０以外のグラフィックカード１１０に対してＧＰＵ使用率を計測すればよい。
【０２３２】
ＧＰＵ管理部３２１は、コマンドリスト２５０１に格納されたＧＰＵコマンドを複製対象として、ＰＶ−ｂドライバ３１３に複製開始を通知する（ステップＳ２６０１）。通知後、ＧＰＵ管理部３２１は、コマンドリスト２５０１に対応するＧＰＵ使用率が未計測であり、ＧＰＵ割当状態が未割当、または解放予定のグラフィックカード１１０が存在するか否かを判断する（ステップＳ２６０２）。ＧＰＵ使用率が未計測であり、未割当、または解放予定のグラフィックカード１１０が存在しない場合（ステップＳ２６０２：Ｎｏ）、ＧＰＵ管理部３２１は、一定時間経過後にステップＳ２６０２の処理を実行する。これにより、本割当、仮割当、割当予定状態のグラフィックカードに関しては、割当が解放した後に、ＧＰＵ使用率を計測することができる。
【０２３３】
以下、図２６−１、図２６−２の説明において、ＧＰＵ使用率が未計測であり、未割当、または解放予定のグラフィックカード１１０を、該当のグラフィックカード１１０と呼称する。該当のグラフィックカード１１０が存在する場合（ステップＳ２６０２：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に該当のグラフィックカード１１０へのＧＰＵコマンド配信開始を通知する（ステップＳ２６０３）。なお、ＧＰＵコマンド配信開始を受け付けたＰＶ−ｂドライバ３１３は、ステップＳ１８０５の処理にて、該当のグラフィックカード１１０に複製されたＧＰＵコマンドを送信する。
【０２３４】
続けて、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３に該当の対象グラフィックカード１１０の監視開始を通知する（ステップＳ２６０４）。なお、監視開始を受け付けたＧＰＵ状態監視部３２３は、ステップＳ１５０３の処理にて、該当のグラフィックカード１１０のＧＰＵ使用率を計測する。
【０２３５】
通知後、ＧＰＵ管理部３２１は、監視対象ＶＭ以外の他のＶＭから該当のグラフィックカード１１０への割当通知を受け付けたか否かを判断する（ステップＳ２６０５）。他のＶＭからの割当通知を受け付けた場合（ステップＳ２６０５：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３に該当のグラフィックカード１１０の監視停止を通知する（ステップＳ２６０６）。通知後、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に該当ＧＰＵのコマンド配信停止を通知し（ステップＳ２６０７）、ステップＳ２６０２の処理に移行する。他のＶＭからの割当通知を受け付けていない場合（ステップＳ２６０５：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ２６０８の処理に移行する。
【０２３６】
次に図２６−２で示すフローチャートにて、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０のＧＰＵ使用率の計測が完了したか否かを判断する（ステップＳ２６０８）。ＧＰＵ使用率の計測が完了していない場合（ステップＳ２６０８：Ｎｏ）、ＧＰＵ管理部３２１は、一定時間経過後にステップＳ２６０８の処理に移行する。ＧＰＵ使用率の計測が完了している場合（ステップＳ２６０８：Ｙｅｓ）、ＧＰＵ管理部３２１は、該当のグラフィックカード１１０のＧＰＵ使用率をコマンド保管テーブル２４０１のＧＰＵ使用率フィールドに設定する（ステップＳ２６０９）。
【０２３７】
設定後、ＧＰＵ管理部３２１は、全てのグラフィックカード１１０についてＧＰＵ使用率の計測が完了したか否かを判断する（ステップＳ２６１０）。計測が完了していない場合（ステップＳ２６１０：Ｎｏ）、ＧＰＵ管理部３２１は、ステップＳ２６０２の処理に移行する。計測が完了している場合（ステップＳ２６１０：Ｙｅｓ）、ＧＰＵ管理部３２１は、ＧＰＵ管理テーブル３０１のＧＰＵ性能情報フィールドに、コマンド保管テーブル２４０１のＧＰＵ使用率フィールドの値を反映する（ステップＳ２６１１）。
【０２３８】
なお、具体的な反映方法として、ＧＰＵ性能情報フィールドに値が格納されていない場合、ＧＰＵ管理部３２１は、コマンド保管テーブル２４０１のＧＰＵ使用率フィールドの値を格納する。また、ＧＰＵ性能情報フィールドに値が格納されている場合、ＧＰＵ管理部３２１は、たとえば、ＧＰＵ性能情報フィールドの値とＧＰＵ使用率フィールドの値との平均値をＧＰＵ性能情報フィールドに格納してもよい。
【０２３９】
反映後、ＧＰＵ管理部３２１は、ＧＰＵ状態監視部３２３に該当のグラフィックカード１１０の監視停止を通知する（ステップＳ２６１２）。通知後、ＧＰＵ管理部３２１は、ＰＶ−ｂドライバ３１３に該当ＧＰＵのコマンド配信停止を通知し（ステップＳ２６１３）、ＧＰＵ使用率計測処理を終了する。
【０２４０】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、実際に送信された命令を、全てのグラフィックカードに送信し、ＧＰＵ使用率を計測する。これにより、割当装置は、より正確なグラフィックカードの処理性能を得ることができる。
【０２４１】
なお、本実施の形態で説明した割当方法は、予め用意された割当プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０２４２】
１１０  グラフィックカード
１２２  管理ＯＳ
３１３  ＰＶ−ｂドライバ
３１４  グラフィックカード用ドライバ
３２１  ＧＰＵ管理部
３２３  ＧＰＵ状態監視部
３２４  ＧＰＵコマンド流量監視部
３２６  ＧＰＵ＿ＶＲＡＭ監視部
６００  決定部
６０１  複製部
６０２、６０３、６０４  送信部
６０５  計測部
６０６  特定部
６０７  切替部
６０８、６０９  判断部
【図１】
0005699755.tif 000002
【図２】
0005699755.tif 000003
【図３】
0005699755.tif 000004
【図４】
0005699755.tif 000005
【図５】
0005699755.tif 000006
【図６】
0005699755.tif 000007
【図７−１】
0005699755.tif 000008
【図７−２】
0005699755.tif 000009
【図８】
0005699755.tif 000010
【図９】
0005699755.tif 000011
【図１０】
0005699755.tif 000012
【図１１】
0005699755.tif 000013
【図１２−１】
0005699755.tif 000014
【図１２−２】
0005699755.tif 000015
【図１２−３】
0005699755.tif 000016
【図１３−１】
0005699755.tif 000017
【図１３−２】
0005699755.tif 000018
【図１３−３】
0005699755.tif 000019
【図１３−４】
0005699755.tif 000020
【図１４】
0005699755.tif 000021
【図１５】
0005699755.tif 000022
【図１６】
0005699755.tif 000023
【図１７】
0005699755.tif 000024
【図１８】
0005699755.tif 000025
【図１９】
0005699755.tif 000026
【図２０−１】
0005699755.tif 000027
【図２０−２】
0005699755.tif 000028
【図２１−１】
0005699755.tif 000029
【図２１−２】
0005699755.tif 000030
【図２２】
0005699755.tif 000031
【図２３−１】
0005699755.tif 000032
【図２３−２】
0005699755.tif 000033
【図２４】
0005699755.tif 000034
【図２５】
0005699755.tif 000035
【図２６−１】
0005699755.tif 000036
【図２６−２】
0005699755.tif 000037