説明

割当方法、割当装置、および割当プログラム

【課題】命令要求元が要求する処理性能に対応した割当を行う。
【解決手段】割当装置101は、VM1から通知された描画命令をグラフィックカード110#1に送信する。さらに、割当装置101は、グラフィックカード110#2、グラフィックカード110#3に対して、複製された描画命令を送信する。送信後、割当装置101は、グラフィックカード110#1〜グラフィックカード110#3に対して、描画命令を実行した場合の使用率を計測する。計測後、割当装置101は、グラフィックカード110#1のGPU使用率となる40[%]より適切な使用率となったグラフィックカード110#3を特定し、描画命令の送信先をグラフィックカード110#1からグラフィックカード110#3に切り替える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、装置を割り当てる割当方法、割当装置、および割当プログラムに関する。
【背景技術】
【0002】
近年、クライアント側の実行環境を利用者が直接操作するクライアント端末ではなく、サーバ側に実行環境を移すクライアント仮想化ソリューションの市場規模が拡大している。仮想化技術を適用した例として、たとえば、クライアント端末が最低限の処理を行い、ほとんどの処理をサーバが行うシンクライアントシステムにて、クライアント端末の機能を仮想化し、1台のサーバに数十台のPC機能を集約するといった技術が開示されている。
【0003】
また、従来のシンクライアントシステムは、導入コストが高額であるため、小規模、かつ安価に導入可能なDaaS(Desktop−As−A−Service)システムが提供されてきている。DaaSシステムは、クラウド環境においてクライアント仮想化を適用し、サーバ上で動作する仮想マシンのOSのデスクトップ環境(以降、仮想デスクトップ環境と呼称する)をクライアント端末に提供するシステムである。
【0004】
DaaSシステムにおけるクライアント端末は、ネットワーク経由で仮想デスクトップ環境を利用することになる。このとき、サーバに接続されたグラフィックカードを仮想マシンに割り当てることで、仮想デスクトップ環境においても高速なグラフィック処理を行うことができる。これにより、クライアント端末の利用者は、CAD(Computer−Aided Design)、動画再生といった高速なグラフィック処理を伴うアプリケーションソフトウェア(以下、アプリと称する)をストレスなく利用することができる。
【0005】
たとえば、装置の割当に関する技術として、複数のGPU(Graphics Processing Unit)を搭載するコンピュータにおいて、複数の並列化モードを使用して負荷分散を行う技術が開示されている。また、装置への割当に関する技術として、複数のコアを有するマルチコアプロセッサシステムの例において、プロセスを実行状況に応じて動的に効率よくプロセッサコアに割り当てる技術が開示されている(たとえば、下記特許文献1、2を参照。)。なお、プロセスとは、CPU(Central Processing Unit)の処理するプログラムの実行単位である。
【0006】
また、他の割当に関する技術として、たとえば、ストレージシステムに接続するサーバの要求性能が、ストレージシステムのインターフェイスに対応するプロセッサの処理性能よりも高くならないように、サーバのプロセッサを選択する技術が開示されている。また、オペレータの操作したログデータを抽出し、再生する技術が存在する(たとえば、下記特許文献3、4を参照。)。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特表2007−512613号公報
【特許文献2】特開2008−90546号公報
【特許文献3】特開2005−321854号公報
【特許文献4】特開2007−140954号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
上述した従来技術を適用して、DaaSシステムにおけるサーバが仮想マシンにグラフィックカードを割り当てる場合、割り当てられたグラフィックカードの処理性能が仮想マシンの利用者が使用するアプリにとって高すぎる、または低すぎる場合がある。割り当てられたグラフィックカードの処理性能が命令要求元となる仮想マシンの利用者にとって高すぎる場合を想定する。このとき、該当の仮想マシン上で動作するアプリは要求を満足するため問題が発生しない。しかしながら、サーバが割り当てられるグラフィックカードには限りがあるため、他の仮想マシンが高処理性能のグラフィックカードを使用したい場合、既に高処理性能を有するグラフィックカードが割り当てられてしまっているという問題があった。
【0009】
本発明は、上述した従来技術による問題点を解消するため、命令要求元が要求する処理性能に対応した割当が行える割当方法、割当装置、および割当プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に処理に対する命令を送信し、複数の装置のうち処理を実行していない装置群に対して、命令を複製して送信し、命令を実行した場合の使用率を、いずれか一つの装置および装置群の各装置に対して計測し、いずれか一つの装置に対する使用率に基づいて、装置群のうち切替対象の装置を特定し、命令の送信先をいずれか一つの装置から切替対象の装置に切り替える割当方法、割当装置、および割当プログラムが提案される。
【発明の効果】
【0011】
本発明の一側面によれば、命令要求元が要求する処理性能に対応した割当が行えるという効果を奏する。
【図面の簡単な説明】
【0012】
【図1】図1は、実施の形態1にかかるDaaSシステム100の動作例を示す説明図である。
【図2】図2は、DaaSシステム100のハードウェア例を示すブロック図である。
【図3】図3は、割当装置101のソフトウェア例を示すブロック図である。
【図4】図4は、GPU管理テーブル301の記憶内容の一例を示す説明図である。
【図5】図5は、設定テーブル302とGPU仮割当テーブル303の記憶内容の一例を示す説明図である。
【図6】図6は、管理OS122の機能例を示すブロック図である。
【図7−1】図7−1は、グラフィックカード110の割当方法の一例を示す説明図(その1)である。
【図7−2】図7−2は、グラフィックカード110の割当方法の一例を示す説明図(その2)である。
【図8】図8は、GPU使用率の計測方法の一例を示す説明図である。
【図9】図9は、最適なグラフィックカード110の特定方法の他の例を示す説明図である。
【図10】図10は、グラフィックカード切替可能とするGPUコマンド流量の状態の一例を示す説明図である。
【図11】図11は、グラフィックカード切替可能とするVRAM112の状態の一例を示す説明図である。
【図12−1】図12−1は、管理OS122のグラフィックカード割当処理手順の一例を示すフローチャート(その1)である。
【図12−2】図12−2は、管理OS122のグラフィックカード割当処理手順の一例を示すフローチャート(その2)である。
【図12−3】図12−3は、管理OS122のグラフィックカード割当処理手順の一例を示すフローチャート(その3)である。
【図13−1】図13−1は、GPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その1)である。
【図13−2】図13−2は、GPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その2)である。
【図13−3】図13−3は、GPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その3)である。
【図13−4】図13−4は、GPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その4)である。
【図14】図14は、プロセス監視部322の処理手順の一例を示すフローチャートである。
【図15】図15は、GPU状態監視部323の処理手順の一例を示すフローチャートである。
【図16】図16は、GPUコマンド流量監視部324の処理手順の一例を示すフローチャートである。
【図17】図17は、GPU_VRAM監視部326の処理手順の一例を示すフローチャートである。
【図18】図18は、PV−bドライバ313の処理手順の一例を示すフローチャートである。
【図19】図19は、GPUコマンド解析部325の処理手順の一例を示すフローチャートである。
【図20−1】図20−1は、実施の形態2にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その1)である。
【図20−2】図20−2は、実施の形態2にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その2)である。
【図21−1】図21−1は、実施の形態3にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その1)である。
【図21−2】図21−2は、実施の形態3にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャート(その2)である。
【図22】図22は、利用者テーブル2201の記憶内容の一例を示す説明図である。
【図23−1】図23−1は、GPU管理部321のグラフィックカード割当準備処理手順の一例を示すフローチャート(その1)である。
【図23−2】図23−2は、GPU管理部321のグラフィックカード割当準備処理手順の一例を示すフローチャート(その2)である。
【図24】図24は、実施の形態5にかかる割当装置101のソフトウェア例を示すブロック図である。
【図25】図25は、コマンド保管テーブル2401の記憶内容の一例を示す説明図である。
【図26−1】図26−1は、GPU管理部321のGPU使用率計測処理手順の一例を示すフローチャート(その1)である。
【図26−2】図26−2は、GPU管理部321のGPU使用率計測処理手順の一例を示すフローチャート(その2)である。
【発明を実施するための形態】
【0013】
以下に添付図面を参照して、開示の割当方法、割当装置、および割当プログラムの実施の形態を詳細に説明する。
【0014】
(実施の形態1の説明)
図1は、実施の形態1にかかるDaaSシステム100の動作例を示す説明図である。DaaSシステム100は、サーバとなる割当装置101と端末装置102を含む。割当装置101と端末装置102は、ネットワーク103で接続されている。割当装置101は、端末装置102に仮想的なデスクトップ環境を提供する装置である。端末装置102は、利用者によって操作される端末であり、割当装置101が提供する仮想的なデスクトップ環境を利用する。
【0015】
また、割当装置101は、処理性能の異なる複数のグラフィックカード110#1〜グラフィックカード110#nを含む。nは2以上の整数である。グラフィックカード110#1〜グラフィックカード110#nは、割当装置101に直接接続されていてもよいし、または、割当装置101に接続された拡張BOXに接続されていてもよい。拡張BOXには、たとえば、4枚、8枚といったグラフィックカード110を接続することができる。
【0016】
グラフィックカード110は、絵や文字を画面に表示するための処理を行う。なお、グラフィックカード110は、GPU111と、VRAM(Video Random Access Memory)112を含む。たとえば、グラフィックカード110#1は、GPU111#1とVRAM112#1を含む。同様に、グラフィックカード110#2は、GPU111#2とVRAM112#2を含み、グラフィックカード110#3は、GPU111#3とVRAM112#3を含む。GPU111は、グラフィック処理を実行する。VRAM112は、GPU111によって処理された画像を保持するメモリである。
【0017】
端末装置102は、ディスプレイ113を含む。仮想デスクトップ環境によって、グラフィックカード110で生成されたVRAM112の画像が、ディスプレイ113に表示されることになる。
【0018】
また、割当装置101は、仮想マシンモニタ121を実行している。仮想マシンモニタ121は、コンピュータを仮想化し、複数のOSを実行できるように制御するソフトウェアである。図1の例では、仮想マシンモニタ121は、VM(Virtual Machine)1、管理OS122を稼働させる。
【0019】
VM1は、割当装置101で動作する仮想的なコンピュータである。たとえば、VM1は、割当装置101のハードウェア資源となる割当装置101内のCPU、メモリ、グラフィックカード110を仮想化し、仮想化された実行環境をVM上で実行されるソフトウェアに提供するソフトウェアである。また、図1でのVM1は、端末装置102に対応づけられており、端末装置102からの指示により、CAD、動画再生といったアプリを実行する。
【0020】
管理OS122は、割当装置101内の一部のハードウェアや仮想マシンを管理する機能を有する。たとえば、管理OS122は、VM1から描画命令を受け取ると、グラフィックカード110のうちいずれかのグラフィックカード110をVM1に割り当てる。
【0021】
前述したハードウェア、ソフトウェアを含む実施の形態1にかかる割当装置101は、VM1がグラフィックカード110を使用するアプリが起動すると、アプリから送信された描画命令をグラフィックカード110#1〜グラフィックカード110#3に出力する。図1の例では、送信された描画命令が、円を描く描画命令と三角形を描く描画命令であると想定する。
【0022】
グラフィックカード110#1〜グラフィックカード110#3は、描画命令にしたがって、VRAM112#1〜VRAM112#3に画像を生成する。このとき、管理OS122は、VRAM112#1〜VRAM112#3の画像のうちのいずれか一つを端末装置102に送信する。たとえば、管理OS122は、VRAM112#1の画像を端末装置102に送信する。
【0023】
続けて、管理OS122は、画像生成中のグラフィックカード110の使用率を計測する。グラフィックカード110の使用率は、グラフィックカード110内のGPU111の使用率となる。なお、GPU111の使用率とは、GPU111の処理能力が使用されている割合を示している。たとえば、使用率が0[%]であれば、GPU111は、処理を全く行っていない状態であり、使用率が100[%]であれば、GPU111は、GPU111の処理能力と等しい処理量を実行している。
【0024】
図1の例では、グラフィックカード110#1は、GPU使用率が40[%]であり、処理性能が高くアプリが要求する処理能力以上に余力がある状態である。グラフィックカード110#2は、GPU使用率が100[%]であり、処理性能が低く三角形の描画が行えておらずアプリが要求する処理能力を満たさない状態である。グラフィックカード110#3は、GPU使用率が85[%]であり、アプリが要求する処理能力を満たす状態に当てはまる。なお、アプリが要求する処理能力としては、管理OS122は、たとえば、使用率が80[%]〜90[%]の範囲をアプリが要求する処理能力として指定することができる。
【0025】
このとき、管理OS122は、アプリが要求する処理能力を満たすグラフィックカード110として、グラフィックカード110#3を特定し、VM1に割り当てる。これにより、割当装置101は、命令送信元が要求する処理能力に適したグラフィックカード110の割当が行える。
【0026】
(DaaSシステム100のハードウェア)
図2は、DaaSシステム100のハードウェア例を示すブロック図である。図2において、割当装置101は、CPU201#1、CPU201#2と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を含む。また、割当装置101は、補助記憶装置として、HDD(Hard Disk Drive)204を含む。また、割当装置101は、NIC(Network Interface Card)205と、リモート接続カード206#1〜リモート接続カード206#nと、グラフィックカード110と、を含む。また、各部はバス207によってそれぞれ接続されている。
【0027】
ここで、CPU201#1、CPU201#2は、割当装置101の全体の制御を司る。また、割当装置101は、3つ以上のCPUを含んでいてもよい。このように、実施の形態1にかかる割当装置101は、マルチコアプロセッサシステムの形態をとってもよい。なお、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
【0028】
また、実施の形態1にかかる割当装置101は、コアが1つ搭載されたシングルコアプロセッサシステムであってもよい。また、CPU201#1、CPU201#2は、キャッシュメモリを有していてもよい。
【0029】
ROM202は、ブートプログラムなどのプログラムを記憶している。また、ROM202は、実施の形態1にかかる割当プログラム208を記憶していてもよい。RAM203は、CPU201#1、CPU201#2のワークエリアとして使用される。HDD204は、CPU201の制御にしたがって書き込まれたデータを記憶する。また、割当プログラム208は、HDD204に記憶されていてもよい。
【0030】
NIC205は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク103に接続され、ネットワーク103を介して端末装置102等の他の装置に接続される。
【0031】
リモート接続カード206は、PC over IPにしたがって、端末装置102に画面情報を送信するカードである。具体的に、リモート接続カード206は、グラフィックカード110からの出力を、画面情報として入力し、PC over IPにしたがって暗号化する。続けて、リモート接続カード206は、暗号化したデータをネットワーク103を介して端末装置102に送信する。端末装置102は、受信したデータを変換し、画面情報に復号してディスプレイ113に表示する。なお、リモート接続カード206とグラフィックカード110は、1対1で存在している。
【0032】
また、端末装置102は、CPU211と、ROM212と、RAM213と、HDD214と、NIC215と、キーボード216と、マウス217と、ディスプレイ113と、を含む。また、各部は、バス218で接続されている。なお、CPU211〜NIC215に関しては、CPU201〜NIC205と同様であるため、説明を省略する。
【0033】
キーボード216は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード216は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス217は、カーソルの移動や範囲選択、あるいはウインドウの移動やサイズの変更などを行う。また、マウス217は、ポインティングデバイスとして同様に機能を含むものであれば、トラックボールやジョイスティックなどであってもよい。
【0034】
ディスプレイ113は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ113は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0035】
図3は、割当装置101のソフトウェア例を示すブロック図である。なお、割当装置101は、各ソフトウェアからアクセスされるテーブルとして、GPU管理テーブル301と、設定テーブル302と、GPU仮割当テーブル303と、にアクセス可能である。また、GPU管理テーブル301〜GPU仮割当テーブル303は、ROM202、RAM203、HDD204などといった記憶装置に記憶されている。また、割当装置101は、管理OS122と各VMの間でデータを送受信可能とする共有メモリ304にアクセス可能である。
【0036】
また、割当装置101は、グラフィックデバイス用準仮想化フロントエンドドライバ(以下、「PV−fドライバ」と略す)311と、ゲストOS312と、準仮想化バックエンドドライバ(以下、「PV−bドライバ」と略す)313と、グラフィックカード用ドライバ314を含む。
【0037】
さらに、割当装置101は、GPU管理部321と、プロセス監視部322と、GPU状態監視部323、GPUコマンド流量監視部324、GPUコマンド解析部325、GPU_VRAM監視部326、VM管理部327、とを含む。
【0038】
GPU管理テーブル301は、グラフィックカード110の割当状態等の情報を格納するテーブルである。なお、GPU管理テーブル301の詳細は、図4で後述する。設定テーブル302は、グラフィックカード110の割当数や各機能部で参照される閾値を格納するテーブルである。なお、設定テーブル302の詳細は、図5で後述する。GPU仮割当テーブル303は、仮想マシン起動時に本割当、仮割当するグラフィックカード110を決定するためのテーブルである。なお、GPU仮割当テーブル303の詳細は、図6で後述する。
【0039】
PV−fドライバ311は、VM上で実行されており、アプリからのグラフィック処理を受信し、グラフィック処理のコマンドを管理OS122に送信する。以下、グラフィック処理のコマンドをGPUコマンドと称する。アプリからのグラフィック処理とは、OpenGLやDirectX等といった3Dグラフィック処理である。
【0040】
ゲストOS312は、VM上で実行されているOSである。たとえば、ゲストOS312は、アプリ315が使用するライブラリ、API(Application Programming Interface)などを提供する。
【0041】
PV−bドライバ313は、管理OS122上で実行されており、GPUコマンドを複製し、複製したGPUコマンドを同時に複数のグラフィックカード用ドライバ314に通知する。また、PV−bドライバ313は、GPU管理部321が最適なグラフィックカード110を特定した場合、グラフィック処理の複製元のコマンドの送信先を特定したグラフィックカード110に切り替える。
【0042】
グラフィックカード用ドライバ314#1〜グラフィックカード用ドライバ314#nは、管理OS122上で実行されており、グラフィックカード110#1〜グラフィックカード110#nを制御するデバイスドライバである。
【0043】
アプリ315は、VM上で起動されているプロセスである。なお、プロセスとは、CPUの処理するプログラムの実行単位である。たとえば、アプリ315は、グラフィックカード110#1〜グラフィックカード110#nに対してOpenGLやDirectX等の3Dグラフィック処理を行うアプリである。
【0044】
また、アプリ315は、グラフィックカード110#1〜グラフィックカード110#nに対して画像処理以外の汎用的な処理の実行を要求するアプリであってもよい。なお、GPUの演算資源を画像処理以外の目的に使用する技術として、GPGPU(General Purpose computing on GPU)といった技術が開示されている。なお、以下の説明では、GPU111がGPGPUとして使用される命令も、GPUコマンドに含まれるものとして扱う。
【0045】
GPU管理部321は、管理OS122上で実行されており、最適なグラフィックカード110を特定し、特定されたグラフィックカード110をVMに割り当てる。プロセス監視部322は、VM上で実行されており、アプリ315によってグラフィックカード110へのアクセスが発生したかを監視する。
【0046】
GPU状態監視部323は、管理OS122上で実行しており、監視対象となるグラフィックカード110のGPU使用率を計測する。たとえば、GPU状態監視部323は、GPU使用率を取得可能なAPIを呼び出すことで、GPU使用率を参照する。また、GPU状態監視部323、GPU使用率を取得可能なAPIが提供されていない場合に、グラフィックカード110の温度、PV−bドライバ313のキューなどを参照することで、GPU使用率を計測してもよい。
【0047】
GPUコマンド流量監視部324は、管理OS122上で実行しており、PV−bドライバ313を経由したGPUコマンドの流量を計数する。GPUコマンド解析部325は、PV−bドライバ313を通過したGPUコマンドを解析する。解析内容としては、GPUコマンド解析部325は、GPUコマンドのフォーマットにしたがって、PV−bドライバ313を通過したGPUコマンドの処理種別を取得する。GPUコマンド解析部325は、たとえば、PV−bドライバ313を通過したGPUコマンドが、描画を開始するコマンドであったり、三角形を描画するコマンドであったりすることを解析によって取得する。
【0048】
GPU_VRAM監視部326は、グラフィックカード110のVRAM112の更新量を監視する。たとえば、GPU_VRAM監視部326は、最適なグラフィックカード110が特定された後、切替前のグラフィックカード110のVRAM112と切替後のグラフィックカード110のVRAM112の更新量を監視する。
【0049】
VM管理部327は、割当装置101で実行中のVMを管理する機能を有する。たとえば、VM管理部327は、現在実行中のVMの識別情報を取得したり、VMを起動したり終了したりする。
【0050】
図4は、GPU管理テーブル301の記憶内容の一例を示す説明図である。GPU管理テーブル301は、グラフィックカードID、GPU割当先情報、GPU性能情報、GPU割当状態という4つのフィールドを含む。グラフィックカードIDフィールドには、グラフィックカード110#1〜グラフィックカード110#nを一意に識別可能な識別子が格納される。図4の説明にて、グラフィックカードIDフィールドによって特定されたグラフィックカード110を、対象グラフィックカード110として説明する。
【0051】
GPU割当先情報フィールドには、対象グラフィックカード110の割当先となる仮想マシンの識別情報が格納される。GPU性能情報フィールドには、対象グラフィックカード110に含まれるGPU111の処理情報が格納される。なお、性能情報はベンチマークソフトで計測した結果やグラフィックカード110のカタログ値等で表される。また、GPU性能情報フィールドには、特定のGPUコマンドを実行した場合のGPU使用率が格納されていてもよい。
【0052】
GPU割当状態フィールドには、対象グラフィックカード110の仮想マシンへの割当状態として、未割当、本割当、仮割当、割当予定、解放予定という5つの状態のうちいずれか一つの状態が格納される。未割当状態は、対象グラフィックカード110がどの仮想マシンにも割り当てられていない状態を示す。本割当状態は、仮想マシンが対象グラフィックカード110を現在使用している状態を示す。仮割当状態は、対象グラフィックカード110が最適なグラフィックカード110を特定する際の候補となっている状態を示す。
【0053】
割当予定状態は、対象グラフィックカード110が最適なグラフィックカード110として特定され、本割当状態になるまでの状態を示す。解放予定状態は、対象グラフィックカード110が仮割当状態であったときに、最適なグラフィックカード110として特定されず、いつでも解放できる状態を表している。なお、解放予定状態のグラフィックカード110は、割当予定状態のグラフィックカード110が本割当状態となった際に、未割当状態となる。
【0054】
以下、説明を簡略化するため、グラフィックカード110#1をGPU−1、グラフィックカード110#2をGPU−2、…、グラフィックカード110#nをGPU−nと呼称する。
【0055】
たとえば、図4の例では、VM1には、本割当状態としてGPU性能情報が500[GFLOPS](FLOPS:Floating point number Operations Per Second)のGPU−4が割り当てられており、仮割当状態としてGPU性能情報が100[GFLOPS]のGPU−1が割り当てられている。また、VM2には、割当予定状態としてGPU性能情報が200[GFLOPS]のGPU−2が割り当てられている。また、VM2には、解放予定状態としてGPU性能情報が800[GFLOPS]のGPU−5と、GPU性能情報が1[TFLOPS]のGPU−nと、が割り当てられている。
【0056】
図5は、設定テーブル302とGPU仮割当テーブル303の記憶内容の一例を示す説明図である。設定テーブル302は、GPU仮割当数、GPU仮割当テーブル303へのアドレス、GPU使用率、コマンド流量閾値、VRAM更新量閾値、という5つのフィールドを含む。GPU仮割当数フィールドには、本割当のグラフィックカード110以外に仮割当として割り当てるグラフィックカード110の数が格納される。GPU仮割当テーブル303へのアドレスフィールドには、GPU仮割当テーブル303へのアドレスが格納される。
【0057】
GPU使用率フィールドは、利用者にとって最適なグラフィックカード110であると判断するための閾値が格納される。GPU使用率フィールドは、さらに下限値と上限値というサブフィールドを含む。下限値フィールドが閾値の下限値を格納し、上限値フィールドが閾値の上限値を格納する。
【0058】
コマンド流量閾値フィールドには、グラフィックカード110の切替が可能と判断するための閾値が格納される。コマンド流量閾値フィールドは、さらにコマンド流量とアイドル時間というサブフィールドを含む。コマンド流量フィールドは、監視時間に流れるコマンド数が閾値以下の場合にグラフィックカード110が切替可能であると判断するための設定値が格納される。コマンド流量フィールドは、さらにコマンド数と監視時間というサブフィールドを含む。コマンド数フィールドが監視時間内の閾値を格納し、監視時間フィールドが、監視時間を格納する。アイドル時間フィールドは、アイドル時間の間、コマンド流量が0である場合に切替可能であると判断するための設定値が格納される。
【0059】
VRAM更新量閾値フィールドには、グラフィックカード110の切替が可能と判断するための閾値が格納される。VRAM更新量閾値フィールドは、さらに、同一GPUと切替先というサブフィールドを含む。同一GPUフィールドは、本割当のグラフィックカード110において、前回監視時よりVRAM112の更新量が閾値以下の場合に切替先グラフィックカード110のVRAM112との比較を実施可能か判断するための閾値が格納される。切替先フィールドは、切替元のVRAM112と切替先のVRAM112との差分が閾値以下の場合に、グラフィックカード110を切替可能なタイミングであると判断するための設定であり、切替可能とする閾値が格納される。
【0060】
たとえば、図5に示す設定テーブル302では、GPU仮割当数フィールドから、グラフィックカード110の仮割当数が2であることを示している。続けて、設定テーブル302は、GPU仮割当テーブル303が0x10000000に格納されていることを示している。また、CPU使用率フィールドから、対象のグラフィックカード110のCPU使用率が80[%]から90[%]の間である場合に、管理OS122が最適なグラフィックカード110として特定することを示している。
【0061】
また、コマンド流量フィールドから、監視時間3[秒]以内のコマンド数が5つ以下である場合、管理OS122がグラフィックカード110を切替可能と判断することを示している。また、アイドル時間フィールドから、5000[ミリ秒]のコマンド流量が0である場合、管理OS122がグラフィックカード110を切替可能と判断することを示している。
【0062】
また、グラフィックカード110が切替可能と判断された後、同一GPUフィールドから、切替元のVRAM112の更新量が500[ピクセル]以下である場合、管理OS122が切替先のVRAM112と比較が可能な状態と判断することを示している。また、切替先フィールドから、切替元のVRAM112と切替先のVRAM112との差分が100[ピクセル]以下である場合、管理OS122がグラフィックカード110を切替可能なタイミングと判断することを示している。
【0063】
次に、GPU仮割当テーブル303は、パターン番号、本割当GPU、仮割当GPU1、仮割当GPU2という4つのフィールドを含む。パターン番号フィールドには、本割当GPUを一意に特定する番号が格納される。本割当GPUフィールドには、VMから指定されたグラフィックカード110の識別情報が格納される。仮割当GPU1フィールド、仮割当GPU2フィールドには、本割当GPUに対応する仮割当GPU1、仮割当GPU2が格納される。
【0064】
たとえば、図5では、本割当GPUがGPU−1である場合、管理OS122は、パターン番号1を指定し、仮割当GPUとして、GPU−3、GPU−4を選択する。同様に、本割当GPUがGPU−2であった場合、管理OS122は、パターン番号2を指定し、仮割当GPUとして、GPU−4、GPU−9が選択される。図5に登録されているパターン番号3〜パターン番号nについても同様の選択方法が行われる。また、前述した図4で示したGPU管理テーブル301は、GPU−4が本割当GPUであるため、パターン番号4を指定し、仮割当GPUとして、GPU−1とGPU−7が選択されている。
【0065】
また、VMからグラフィックカード110が指定されない場合、管理OS122は、GPU管理テーブル301から、GPU割当状態が未割当となるグラフィックカード110を探索し、本割当GPUとして指定する。以降、管理OS122は、VMがグラフィックカード110を指定した方法と同様に仮割当GPUを選択する。
【0066】
また、仮割当GPU1フィールドのグラフィックカード110は、本割当GPUに格納されるグラフィックカード110より処理性能が低いグラフィックカード110であってもよい。さらに、仮割当GPU2フィールドのグラフィックカード110は、本割当GPUに格納されるグラフィックカード110より処理性能が高いグラフィックカード110であってもよい。この条件により、グラフィックカード割当処理が実行された場合、始めに本割当となるグラフィックカードの処理性能が高い場合であっても低い場合であっても、より適切なグラフィックカードに切り替わることができる。
【0067】
(管理OS122の機能)
図6は、管理OS122の機能例を示すブロック図である。管理OS122は、決定部600と、複製部601と、送信部602と、送信部603と、送信部604と、計測部605と、特定部606と、切替部607と、判断部608と、判断部609と、を含む。この制御部となる機能(決定部600〜判断部609)は、記憶装置に記憶されたプログラムをCPU201が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、HDD204などである。
【0068】
また、決定部600〜送信部604、切替部607はPV−bドライバ313に含まれ、計測部605はGPU状態監視部323に含まれ、特定部606はGPU管理部321に含まれる。また、判断部608はGPUコマンド解析部325に含まれ、判断部609はGPU_VRAM監視部326に含まれる。
【0069】
決定部600は、いずれか一つの装置に応じて、複数の装置のうち処理を実行していない装置群のうち、最適な装置に特定される候補となる装置を決定する機能を有する。たとえば、決定部600は、本割当状態であるGPU−1に応じて、GPU−2、GPU−3を最適な装置に特定される候補に決定する。なお、最適な装置に特定される候補となった、GPU−2、GPU−3は、仮割当状態となる。なお、決定された情報は、GPU管理テーブル301に保存される。
【0070】
複製部601は、PV−fドライバ311から通知された命令を複製する機能を有する。命令とは、グラフィックカード110に対するGPUコマンドである。たとえば、複製部601は、描画開始するGPUコマンド、三角形を描画するGPUコマンド等を複製する。なお、複製されたGPUコマンドは、割当装置101のキャッシュメモリ、RAM203等に記憶される。
【0071】
送信部602は、同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に処理に対する命令を送信する機能を有する。なお、複数の装置とは、GPU−1〜GPU−nである。たとえば、送信部602は、いずれか一つの装置として、本割当状態であるGPU−1にGPUコマンドを送信する。また、具体的には、送信部602は、GPU−1に対応するグラフィックカード用ドライバ314#1にGPUコマンドを送信する。
【0072】
送信部603、送信部604は、決定部600によって決定された最適な装置に特定される候補となる装置に対して、複製部601によって複製された命令を送信する機能を有する。たとえば、送信部603は、GPU−1〜GPU−nのうち、決定部600によって仮割当状態のグラフィックカード110に決定された、GPU−2に複製されたGPUコマンドを送信する。また、送信部604は、GPU−3に複製されたGPUコマンドを送信する。
【0073】
また、仮割当状態となったグラフィックカード110群は、本割当状態となったグラフィックカード110より処理性能が低いグラフィックカード110および処理性能が高いグラフィックカード110が含まれてもよい。たとえば、GPU−1の処理性能が200[GFLOPS]であり、GPU−2の処理性能が300[GFLOPS]であり、GPU−3の処理性能が400[GFLOPS]であり、GPU−4の処理性能が500[GFLOPS]である場合を想定する。このとき、いずれか一つの装置として、GPU−2が指定された場合、送信部603、送信部604は、GPU−2より処理性能が低いGPU−1と、GPU−2より処理性能が高いGPU−3またはGPU−4と、に対して複製された命令を送信する。
【0074】
また、本割当状態または仮割当状態のグラフィックカード110群の処理性能は、等間隔となってもよい。さらに、本割当状態または仮割当状態のグラフィックカード110群内の中間の処理性能となるグラフィックカード110が、本割当状態のグラフィックカード110となってもよい。
【0075】
計測部605は、命令を実行した場合の使用率を、いずれか一つの装置および装置群の各装置に対して計測する機能を有する。たとえば、計測部605は、GPU−1〜GPU−3に対して、GPUコマンドを実行した場合の使用率を計測する。具体的な使用率の計測方法としては、たとえば、グラフィックカード110のAPIを利用した計測方法や、APIが提供されていない場合、グラフィックカード110の温度を用いた計測方法がある。詳しくは、図8にて後述する。なお、計測された使用率は、割当装置101のキャッシュメモリ、RAM203等に記憶される。
【0076】
特定部606は、いずれか一つの装置に対する使用率に基づいて、装置群のうち切替対象の装置を特定する機能を有する。具体的には、特定部606は、使用率が100%未満であり、いずれか一つの装置に対する使用率より高い使用率となった装置を切替対象の装置として特定してもよい。たとえば、GPU−1のGPU使用率が40[%]であり、GPU−2のGPU使用率が100[%]であり、GPU−3のGPU使用率が85[%]である場合を想定する。このとき、特定部606は、GPU−3を切替対象の装置として特定する。
【0077】
また、特定部606は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値と所定の下限値との間となる装置を、切替対象の装置に特定してもよい。所定の上限値とは、設定テーブル302の上限値フィールドの値となり、所定の下限値とは、設定テーブル302の下限値フィールドの値となる。たとえば、所定の上限値が90[%]であり、所定の下限値が80[%]であり、GPU−1のGPU使用率が40[%]であり、GPU−2のGPU使用率が87[%]であり、GPU−3のGPU使用率が85[%]である場合を想定する。このとき、特定部606は、GPU−2、GPU−3のいずれか一方を切替対象の装置として特定する。
【0078】
また、特定部606は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ使用率が最も高い装置を、切替対象の装置に特定してもよい。たとえば、所定の上限値が90[%]であり、GPU−1のGPU使用率が40[%]であり、GPU−2のGPU使用率が87[%]であり、GPU−3のGPU使用率が85[%]である場合を想定する。このとき、特定部606は、GPU−2を切替対象の装置として特定する。
【0079】
また、特定部606は、いずれか一つの装置に対する使用率と装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ処理性能が最も低い装置を、切替対象の装置に特定してもよい。たとえば、所定の上限値が90[%]であり、GPU−1のGPU使用率が40[%]であり、GPU−2のGPU使用率が87[%]であり、GPU−3のGPU使用率が85[%]であることを想定する。さらに、GPU−1の処理性能が400[GFLOPS]であり、GPU−2の処理性能が300[GFLOPS]であり、GPU−3の処理性能が200[GFLOPS]であることを想定する。このとき、特定部606は、GPU−3を切替対象の装置として特定する。なお、特定された切替対象の装置の識別情報は、割当装置101のキャッシュメモリ、RAM203等に記憶される。
【0080】
切替部607は、命令の送信先をいずれか一つの装置から切替対象の装置に切り替える機能を有する。たとえば、切替部607は、複製前のオリジナルとなるGPUコマンドを、グラフィックカード110#1からグラフィックカード110#3に切り替える。また、切替部607は、判断部608によって命令の単位時間当たりの送信数が所定数以下である場合、切り替えてもよい。さらに、切替部607は、判断部609によって命令による更新量が所定量以下である場合、切り替えてもよい。さらに、切替部607は、判断部609によって差分が所定の閾値以下である場合、切り替えてもよい。
【0081】
判断部608は、命令の単位時間当たりの送信数が所定数以下であるか否かを判断する機能を有する。単位時間当たりの所定数は、(設定テーブル302のコマンド数/設定テーブル302の監視時間)を算出することにより取得できる。なお、判断結果は、割当装置101のキャッシュメモリ、RAM203等に記憶される。
【0082】
判断部609は、いずれか一つの装置内の画像記憶領域において、命令による更新量が所定量以下であるか否かを判断する機能を有する。なお、画像記憶領域とは、VRAM112である。また、所定量とは、設定テーブル302の同一GPUフィールドの値となる。たとえば、判断部609は、いずれか一つの装置のVRAM112の更新量が500[ピクセル]以下であるかを判断する。
【0083】
また、判断部609は、いずれか一つの装置内の画像記憶領域と切替対象の装置内の画像記憶領域との差分が所定の閾値以下であるか否かを判断してもよい。なお、所定の閾値とは、設定テーブル302の切替先フィールドの値である。たとえば、いずれか一つの装置がGPU−1であり、切替対象の装置がGPU−3となった場合を想定する。このとき、判断部609は、GPU−1とGPU−3のVRAM112の差分が100[ピクセル]以下であるかを判断する。なお、判断結果は、割当装置101のキャッシュメモリ、RAM203等に記憶される。
【0084】
以上、割当装置101は、GPU管理テーブル301〜GPU仮割当テーブル303にアクセスして、最適なグラフィックカード110を割り当てる。割当方法の一連の動作を、図7−1、図7−2にて説明する。
【0085】
図7−1、図7−2は、グラフィックカード110の割当方法の一例を示す説明図である。図7−1、図7−2では、符号701〜符号704にて示す説明図にて、複数のグラフィックカード110のうち、最適なグラフィックカード110を割り当てる方法を説明する。符号701で示す説明図は、複数のグラフィックカード110のうち、割当候補のグラフィックカード110を選択する方法を説明する。次に、符号702で示す説明図では、割当候補のグラフィックカード110に、アプリからのグラフィックカード110へのアクセスを複製した状態を説明する。
【0086】
続けて、符号703で示す説明図は、アクセスを複製することによって変化するグラフィックカード110の使用率から割当予定のグラフィックカード110を特定する方法を説明する。最後に、符号704で示す説明図は、割当元のグラフィックカード110から割当予定のグラフィックカード110への切替タイミングについて説明する。
【0087】
符号701で示す割当装置101は、複数のグラフィックカード110のうち、割当候補のグラフィックカード110を選択している。具体的には、割当装置101内で、ID:GPU−1が指定されてVM1が起動された場合、GPU管理部321は、GPU仮割当テーブル303を参照して、GPU−1のGPU割当状態を本割当に、GPU−3とGPU−4のGPU割当状態を仮割当に設定する。なお、GPU仮割当テーブル303の参照方法は、図6にて記述した方法となる。なお、GPUコマンドを受け付けた場合、管理OS122は、本割当状態であるGPU−1にGPUコマンドを通知する。
【0088】
次に、符号702で示す割当装置101は、割当候補のグラフィックカード110に、GPUコマンドを複製している状態である。具体的には、VM1にてグラフィックカード110にアクセスするアプリ705が起動されると、PV−fドライバ311は、GPUコマンドをPV−bドライバ313に通知する。PV−bドライバ313は、GPUコマンドを複製して、GPU割当状態が本割当であるGPU−1、仮割当であるGPU−3、GPU−4に出力する。
【0089】
続けて、符号703で示す割当装置101は、複製されたGPUコマンドの実行による割当候補のグラフィックカード110の使用率を計測している。具体的に、GPU状態監視部323は、GPU−1のGPU使用率を40[%]、GPU−3のGPU使用率を100[%]、GPU−4のGPU使用率を85[%]と計測する。なお、GPU使用率の計測方法については、図8にて後述する。
【0090】
計測された割当候補のグラフィックカード110の使用率から、GPU管理部321は、設定テーブル302を参照して、最適なグラフィックカード110を選択する。符号703の例では、図5に示した設定テーブル302のGPU使用率フィールドの下限値80[%]と上限値90[%]の間の使用率となる、GPU−4を、最適なグラフィックカード110として特定する。
【0091】
なお、最適なグラフィックカード110の特定方法は、前述の閾値から特定する方法以外に、PV−bドライバ313内のキューを監視する方法が存在する。PV−bドライバ313内のキューを監視して最適なグラフィックカード110を特定する方法については、図9にて後述する。特定した結果、GPU管理部321は、GPU−4のGPU割当状態を割当予定に設定し、GPU−3のGPU割当状態を解放予定に設定する。
【0092】
最後に、符号704で示す割当装置101は、割当元となるGPU−1から割当先となるGPU−4への切替タイミングを示している。具体的に、GPUコマンド流量監視部324は、コマンド流量を監視し、設定テーブル302で設定されている閾値より少なくなった場合に、VRAM112の比較が可能な状態であると判断する。なお、具体的なグラフィックカード切替可能とするGPUコマンド流量の状態の一例については、図10にて後述する。
【0093】
続けて、GPU_VRAM監視部326は、設定テーブル302で設定されている閾値よりVRAM112の更新量が少なくなった場合に、GPU−1のVRAM112のデータを、GPU−4のVRAM112にコピーする。なお、具体的なグラフィックカード切替可能とするVRAM112の状態の一例については、図11にて後述する。コピー後、GPU管理部321は、GPU−4のGPU割当状態を本割当に設定し、GPU−1とGPU−3のGPU割当状態を未割当に設定する。
【0094】
以降、図8にてGPU使用率の計測方法の一例の説明を行い、図9にて最適なグラフィックカード110の特定方法の他の例の説明を行う。また、図10にてグラフィックカード切替可能とするGPUコマンド流量の状態の一例の説明を行い、図11にて、グラフィックカード切替可能とするVRAM112の状態の一例について説明を行う。
【0095】
図8は、GPU使用率の計測方法の一例を示す説明図である。GPU状態監視部323は、グラフィックカード用ドライバにGPU使用率を取得可能なAPIが用意されている場合、GPU使用率を取得するAPIを利用する。また、GPU使用率の計測方法の他の例として、本実施の形態1にかかる割当装置101は、GPU111の限界温度と、現在のGPU111の温度とから計測する。この場合、割当装置101は、グラフィックカード110のGPU111の限界温度を記憶するテーブルをROM202等に記憶しておく。
【0096】
図8に示すGPU限界温度テーブル801は、グラフィックカードID、限界温度という2つのフィールドを含む。グラフィックカードIDフィールドには、グラフィックカード110の識別情報が格納される。限界温度フィールドには、グラフィックカードIDフィールドに格納されたグラフィックカード110のGPU111の限界温度が格納される。なお、GPU限界温度テーブル801は、設定テーブル302に含まれていてもよい。
【0097】
図8では、たとえば、GPU−1は、限界温度が85[℃]であることを示している。同様に、GPU−2〜GPU−nに対する限界温度がGPU限界温度テーブル801に格納されている。
【0098】
次に、符号802内で示す計算式を用いて、計測された現在のグラフィックカード110の温度とGPU限界温度テーブル801を参照してGPU使用率を算出する方法について説明する。GPU状態監視部323は、下記(1)式によって、GPU使用率を算出する。
【0099】
GPU使用率=現在のGPU温度/限界温度×100 …(1)
【0100】
たとえば、GPU−1の現在の温度が80[℃]であれば、GPU状態監視部323は、GPU−1のGPU使用率を(1)式より、以下のように計測する。
【0101】
GPU使用率=80/85×100≒94[%]
【0102】
また、GPU状態監視部323は、(1)式に関して、常温を基準にして算出してもよい。たとえば、GPU状態監視部323は、下記(2)式のようにGPU使用率を算出してもよい。
【0103】
GPU使用率=(現在のGPU温度−常温)/(限界温度−常温)×100 …(2)
【0104】
(2)式は、負荷による温度上昇分に対する使用率を算出することができる。
【0105】
図9は、最適なグラフィックカード110の特定方法の他の例を示す説明図である。図9では、PV−bドライバ313内のキューを監視して最適なグラフィックカード110を特定する方法を説明する。なお、図9では、符号901で示す説明図による特定方法と、符号902で示す説明図による特定方法との2つの特定方法を示す。
【0106】
符号901で示す説明図は、PV−bドライバ313内のキューの残量とGPU使用率によって最適なグラフィックカード110を特定する方法を示している。表903は、GPU割当状態が本割当であるグラフィックカード110と、GPU割当状態が仮割当である3枚のグラフィックカード110とのキュー残量とGPU使用率を示している。GPU管理部321は、キュー残量が0であり、かつ、GPU使用率が最も高い93[%]となる、仮割当GPU3を最適なグラフィックカード110であると特定する。
【0107】
また、符号902で示す説明図は、PV−bドライバ313内のキューの残量とGPU性能情報によって最適なグラフィックカード110を特定する方法を示している。表904は、GPU割当状態が本割当であるグラフィックカード110と、GPU割当状態が仮割当である4枚のグラフィックカード110とのキュー残量とGPU性能情報を示している。GPU管理部321は、キュー残量が0であり、かつ、GPU性能情報が最も低い300[MFLOPS]となる、仮割当GPU1を最適なグラフィックカード110であると特定する。
【0108】
図10は、グラフィックカード切替可能とするGPUコマンド流量の状態の一例を示す説明図である。図10では、符号1001で示す説明図にて、GPUコマンドの例を示し、符号1002で示す説明図にて、グラフィックカード切替可能とするGPUコマンド流量の状態の一例を示す。初めに、GPUコマンドは、仮想マシン上のプロセスからのアクセスが、PV−fドライバ311によってGPUコマンドに変換されることで発生する。発生したGPUコマンドに関して、PV−fドライバ311が、PV−bドライバ313に通知する。
【0109】
次に、符号1001で示す説明図にて、GPUコマンドの例を示す。符号1001で示す説明図では、GPUコマンドのフォーマット1003と、ソースコード1004でのGPUコマンドが発行される例と、GPUコマンドが発行された際のフォーマット1003の具体的な値が示されている。
【0110】
GPUコマンドは、GPUコマンドのフォーマット1003に従った形式となる。フォーマット1003は、コマンドフィールドと、戻り値フィールドと、引数フィールドを含む。たとえば、ソースコード1004は、三角形を描画するソースコードを示している。ソースコード1004がコンパイルされ、仮想マシン上のプロセスにて実行された場合、GPUコマンドは、符号1005のような値をとる。
【0111】
たとえば、コマンドフィールドには、三角形描画を示す識別子が格納される。具体的に、三角形描画を示す識別子は、ソースコード1004で示されている“D3DPT_TRIANGLELIST”であってもよい。続けて、戻り値フィールドには、変数retの値が格納される。引数フィールドには、D3DVERTEX型の配列のポインタであるptが格納される。
【0112】
続けて、符号1002で示す説明図にて、GPUコマンド流量の判断方法の一例を示す。たとえば、GPUコマンド流量監視部324がGPUコマンド流量の判断の所定の閾値として、監視時間3秒間にGPUコマンド数が5つ以下、すなわち、単位時間当たりのGPUコマンド数が5/3≒1.7であるときに、切替可能であると判断すると想定する。なお、監視時間とGPUコマンド数について、GPUコマンド流量監視部324が設定テーブル302のコマンド流量フィールドから取得する。また、符号1002で示す説明図では、GPUコマンド流量が多い状態である状態1006と、GPUコマンド流量が少ない状態である状態1007を示している。
【0113】
状態1006では、10秒で49個のGPUコマンドがPV−bドライバ313を通過している状態である。状態1006における単位時間当たりのGPUコマンド数は、49/10=4.9>1.7となり、所定の閾値より多いため、切替不可の状態となる。状態1007では、10秒で7個のGPUコマンドがPV−bドライバ313を通過している状態である。状態1007における単位時間当たりのGPUコマンド数は、7/10=0.7≦1.7となり、所定の閾値以下のため、切替可能の状態となる。
【0114】
図11は、グラフィックカード切替可能とするVRAM112の状態の一例を示す説明図である。ディスプレイ113に表示される画面の内容は、切替先グラフィックカード110上のVRAM112に書き込まれている。グラフィックカード110を切り替えた際、表示データが動画データであったりすると、場面が飛んだり、または巻き戻ったりする可能性が高い。このような状態を避けるため、GPU_VRAM監視部326は、符号1101に示す条件1、条件2を同時に満たす場合に、グラフィックカード切替可能としている。
【0115】
条件1は、切替元のグラフィックカード110にて、VRAM112の更新量が500[ピクセル]以下の場合である。条件1を満たす場合、GPU_VRAM監視部326は、画面が頻繁に更新されていない状態であることが判断できる。なお、条件1の閾値である500[ピクセル]について、GPU_VRAM監視部326は、設定テーブル302の同一GPUフィールドから取得する。
【0116】
条件2は、切替元のグラフィックカード110のVRAM112と切替先のグラフィックカード110のVRAM112との差分が100[ピクセル]以下の場合である。条件2を確認する理由として、各グラフィックカードは、処理性能が異なるため、一方のグラフィックカードでは描画が完了しているが、他方のグラフィックカードでは描画が完了していない場合もあり得る。切替元のVRAM112と切替先のVRAM112の差分が小さく、条件2を満たす場合、GPU_VRAM監視部326は、切替時に画面内容が大きく変更しない状態であると判断できる。なお、条件2の閾値である100[ピクセル]について、GPU_VRAM監視部326は、設定テーブル302の切替先フィールドから取得する。
【0117】
条件1と条件2が満たされる場合の例を、符号1102で示す説明図にて説明する。符号1102で示す説明図では、時刻t1〜時刻t5にて、切替元グラフィックカードのVRAM112の状態と切替先グラフィックカードのVRAM112の状態を表示している。図11では、説明の簡略化のため、VRAM112に、切替元を示す記号“_src”、切替先を示す記号“_dst”、時刻t1〜時刻t5のいずれかの時刻txを示す記号“_tx”を用いて説明を行う。
【0118】
時刻t2にて、GPU_VRAM監視部326は、VRAM112_src_t2とVRAM112_src_t1を比較して、更新量が500[ピクセル]以下か否かを判断する。時刻t2でのVRAM112_srcの更新量は9000[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の比較不可能であると判断する。
【0119】
次に、時刻t3にて、GPU_VRAM監視部326は、VRAM112_src_t3とVRAM112_src_t2を比較して、更新量が500[ピクセル]以下か否かを判断する。時刻t3でのVRAM112_srcの更新量は480[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の比較可能であると判断する。続けて、GPU_VRAM監視部326は、VRAM112_src_t3とVRAM112_dst_t3を比較して、差分が100[ピクセル]以下か否かを判断する。時刻t3での差分は1800[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の切替不可能であると判断する。
【0120】
続けて、時刻t4にて、GPU_VRAM監視部326は、VRAM112_src_t4とVRAM112_src_t3を比較して、更新量が500[ピクセル]以下か否かを判断する。時刻t4でのVRAM112_srcの更新量は100[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の比較可能であると判断する。続けて、GPU_VRAM監視部326は、VRAM112_src_t4とVRAM112_dst_t4を比較して、差分が100[ピクセル]以下か否かを判断する。時刻t4での差分は500[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の切替不可能であると判断する。
【0121】
最後に、時刻t5にて、GPU_VRAM監視部326は、VRAM112_src_t5とVRAM112_src_t4を比較して、更新量が500[ピクセル]以下か否かを判断する。時刻t5でのVRAM112_srcの更新量は36[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の比較可能であると判断する。続けて、GPU_VRAM監視部326は、VRAM112_src_t5とVRAM112_dst_t5を比較して、差分が100[ピクセル]以下か否かを判断する。時刻t5での差分は90[ピクセル]となるため、GPU_VRAM監視部326は、グラフィックカード間の切替可能であると判断する。したがって、GPU_VRAM監視部326は、時刻t5にてグラフィックカード間の切替可能であると判断する。
【0122】
続けて、図12〜図19で、図7で説明した動作を行うフローチャートを説明する。図12で示すフローチャートは、管理OS122が行うグラフィックカード割当処理のフローチャートを示しており、図13〜図19で示すフローチャートは、各機能部が行うフローチャートを示している。なお、図12〜図19では、VM1が指定するグラフィックカードはID:GPU−1であることを想定する。
【0123】
図12−1、図12−2、図12−3は、管理OS122のグラフィックカード割当処理手順の一例を示すフローチャートである。初めに、図12−1で示すフローチャートの説明を行う。管理OS122は、GPU管理部321を起動し(ステップS1201)、指定されたGPU−1を割り当ててVM1を起動する(ステップS1202)。起動後、管理OS122は、GPU管理テーブル301内の、GPU−1のレコードのGPU割当状態フィールドを、未割当から本割当に変更する(ステップS1203)。変更後、管理OS122は、GPU仮割当テーブル303のうち、指定されたGPU−1が本割当GPUフィールドに格納されているレコードを選択する(ステップS1204)。
【0124】
選択後、管理OS122は、GPU管理テーブル301のうち、選択されたレコードの仮割当GPUフィールドに対応するグラフィックカード110のGPU割当状態フィールドを、未割当から仮割当に変更する(ステップS1205)。なお、GPU仮割当テーブル303の仮割当GPUフィールドが図5で示したように複数ある場合、各仮割当GPUフィールドに対応するGPUのGPU割当状態を未割当から仮割当に変更する。たとえば、図12では、GPU−1が指定されているため、管理OS122は、仮割当GPU1フィールドに格納されたGPU−3の割当状態と、仮割当GPU1フィールドに格納されたGPU−4の割当状態とを、未割当から仮割当に変更する。
【0125】
変更後、管理OS122は、VM1がグラフィックカード110を使用するプロセスを起動したか否かを判断する(ステップS1206)。起動していない場合(ステップS1206:No)、管理OS122は、一定時間後に再びステップS1206の処理を実行する。起動した場合(ステップS1206:Yes)、管理OS122は、GPU状態監視部323に監視開始を通知する(ステップS1207)。通知後、管理OS122は、GPU管理部321に監視開始を通知し(ステップS1208)、PV−bドライバ313に複製開始を通知する(ステップS1209)。
【0126】
通知後、管理OS122は、一定時間経過したか否かを判断する(ステップS1210)。一定時間経過していない場合(ステップS1210:No)、管理OS122は、再びステップS1210の処理を実行する。一定時間経過した場合(ステップS1210:Yes)、管理OS122は、GPU状態監視部323に監視停止を通知する(ステップS1211)。通知後、管理OS122は、ステップS1212の処理に移行する。
【0127】
次に、図12−2で示すフローチャートの説明を行う。管理OS122は、GPU管理テーブル301のレコードを参照し、GPU割当先情報フィールドにVM1が格納されているグラフィックカード110のGPU使用率をGPU状態監視部323から取得し、GPU管理部321に通知する(ステップS1212)。管理OS122は、GPU使用率より、設定テーブル302のGPU使用率フィールドを参照して、最適なグラフィックカード110としてGPU−xを特定する(ステップS1213)。なお、具体的なグラフィックカード110の特定方法は、図7、図9で説明した方法となる。
【0128】
選択後、管理OS122は、GPU−xがGPU−1か否かを判断する(ステップS1214)。GPU−xがGPU−1である場合(ステップS1214:Yes)、管理OS122は、GPU管理テーブル301のうち、GPU割当先情報フィールドにVM1が格納され、かつ仮割当状態となるレコードのGPU割当状態フィールドを、仮割当から未割当に変更する(ステップS1215)。
【0129】
GPU−xがGPU−1でない場合(ステップS1214:No)、管理OS122は、GPU管理テーブル301内の、GPU−xのレコードのGPU割当状態フィールドを、仮割当から割当予定に変更する(ステップS1216)。なお、切替元のグラフィックカード110がGPU−1となり、切替先のグラフィックカード110がGPU−xとなる。続けて、または、管理OS122は、GPU管理テーブル301内の、GPU−1およびGPU−x以外のレコードのGPU割当状態フィールドを、仮割当から解放予定に変更する(ステップS1217)。変更後、ステップS1225:No、またはステップS1226:Noのルートを経由した場合、管理OS122は、GPUコマンド流量監視部324に監視開始を通知する(ステップS1218)。
【0130】
通知後、管理OS122は、GPU−1がグラフィック出力を行っているか否かを判断する(ステップS1219)。グラフィック出力を行っている場合(ステップS1219:Yes)、管理OS122は、GPU_VRAM監視部326に監視開始を通知する(ステップS1220)。通知後、またはグラフィック出力を行っていない場合(ステップS1219:No)、管理OS122は、ステップS1221の処理に移行する。なお、グラフィック出力を行っていない場合として、たとえば、VM上のプロセスがGPU111をGPGPUとして使用している場合である。
【0131】
最後に、図12−3で示すフローチャートの説明を行う。管理OS122は、設定テーブル302の監視時間フィールドに格納された時間の経過まで待機する(ステップS1221)。時間経過後、管理OS122は、コマンド流量が設定テーブル302のコマンド数フィールドの値以下か否かを判断する(ステップS1222)。コマンド流量がコマンド数フィールドの値より多い場合(ステップS1222:No)、管理OS122は、ステップS1221の処理に移行する。コマンド流量がコマンド数フィールドの値以下である場合(ステップS1222:Yes)、管理OS122は、GPUコマンド流量監視部324に監視停止を通知する(ステップS1223)。
【0132】
通知後、管理OS122は、GPU−1がグラフィック出力を行っているか否かを判断する(ステップS1224)。グラフィック出力を行っている場合(ステップS1224:Yes)、管理OS122は、GPU−1のVRAM更新量が設定テーブル302の同一GPUフィールドの値以下か否かを判断する(ステップS1225)。VRAM更新量が同一GPUフィールドの値より大きい場合(ステップS1225:No)、管理OS122は、ステップS1218の処理に移行する。
【0133】
VRAM更新量が同一GPUフィールドの値以下である場合(ステップS1225:Yes)、管理OS122は、続けて、GPU−1とGPU−xのVRAM112の差分が、設定テーブル302の切替先フィールドの値以下か否かを判断する(ステップS1226)。差分が切替先フィールドの値より大きい場合(ステップS1226:No)、管理OS122は、ステップS1218の処理に移行する。
【0134】
差分が切替先フィールドの値以下の場合(ステップS1226:Yes)、管理OS122は、GPU_VRAM監視部326に監視停止を通知する(ステップS1227)。通知後、管理OS122は、GPU−1とGPU−xのVRAMの差分が0であるか否かを判断する(ステップS1228)。差分が0でない場合(ステップS1228:No)、管理OS122は、差分をGPU−xのVRAM112にコピーする(ステップS1229)。
【0135】
コピー後、または差分が0である場合(ステップS1228:Yes)、またはグラフィック出力を行っていない場合(ステップS1224:No)、管理OS122は、PV−bドライバ313のコマンド送信先をGPU−xに設定する(ステップS1230)。設定後、管理OS122は、PV−bドライバ313に複製停止を通知する(ステップS1231)。通知後、管理OS122は、GPU−xのレコードのGPU割当状態フィールドを割当予定から本割当に変更する(ステップS1232)。
【0136】
続けて、管理OS122は、GPU管理テーブル301のGPU割当先情報がVM1であるレコードのうち、GPU−x以外のレコードのGPU割当状態フィールドを未割当に変更する(ステップS1233)。変更後、管理OS122は、管理OS122のグラフィックカード割当処理を終了する。
【0137】
図13−1、図13−2、図13−3、図13−4は、GPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャートである。初めに、図13−1で示すフローチャートの説明を行う。GPU管理部321は、指定されたGPU−1を割り当てて監視対象VMとなるVM1を起動する(ステップS1301)。起動後、GPU管理部321は、GPU管理テーブル301内の、GPU−1のレコードのGPU割当状態フィールドを、未割当から本割当に変更する(ステップS1302)。
【0138】
変更後、GPU管理部321は、GPU仮割当テーブル303のうち、指定されたGPU−1が本割当GPUフィールドに格納されているレコードを選択する(ステップS1303)。選択後、GPU管理部321は、GPU管理テーブル301のうち、選択されたレコードの仮割当GPUフィールドに対応するグラフィックカード110のGPU割当状態フィールドを、未割当から仮割当に変更する(ステップS1304)。
【0139】
変更後、GPU管理部321は、GPU状態監視部323から監視開始を受け付けたか否かを判断する(ステップS1305)。監視開始を受け付けていない場合(ステップS1305:No)、GPU管理部321は、一定時間経過後、ステップS1305の処理を実行する。監視開始を受け付けている場合(ステップS1305:Yes)、GPU管理部321は、PV−bドライバ313に複製開始を通知する(ステップS1306)。
【0140】
通知後、または、ステップS1315:Noとなった後、GPU管理部321は、監視対象VMが停止したか否かを判断する(ステップS1307)。停止した場合(ステップS1307:Yes)、GPU管理部321は、GPU管理テーブル301のGPU割当先情報が監視対象VMであるレコードのGPU割当状態を、未割当に設定する(ステップS1308)。設定後、GPU管理部321は、GPU状態監視部323に監視停止を通知する(ステップS1309)。通知後、GPU管理部321は、PV−bドライバ313に複製停止を通知し(ステップS1310)、GPU管理部321のグラフィックカード割当処理を終了する。監視対象VMが停止していない場合(ステップS1307:No)、GPU管理部321は、ステップS1311の処理に移行する。
【0141】
次に、図13−2に示すフローチャートの説明を行う。GPU管理部321は、GPUコマンド解析部325よりプロセス終了を受け付けたか否かを判断する(ステップS1311)。プロセス終了を受け付けた場合(ステップS1311:Yes)、GPU管理部321は、GPU状態監視部323にGPU使用率取得依頼と監視停止を通知する(ステップS1312)。通知後、またはプロセス終了を受け付けていない場合(ステップS1311:No)、GPU管理部321は、GPUコマンド解析部325よりグラフィックカード110の解放依頼を受け付けたか否かを判断する(ステップS1313)。
【0142】
グラフィックカード110の解放依頼を受け付けた場合(ステップS1313:Yes)、GPU管理部321は、GPU管理テーブル301のうち、依頼を受けたグラフィックカード110のGPU割当状態フィールドを仮割当から解放予定に変更する(ステップS1314)。変更後、またはグラフィックカード110の解放依頼を受け付けていない場合(ステップS1313:No)、GPU管理部321は、GPU状態監視部323よりGPU使用率を受け付けたか否かを判断する(ステップS1315)。GPU使用率を受け付けていない場合(ステップS1315:No)、GPU管理部321は、ステップS1307の処理に移行する。
【0143】
GPU使用率を受け付けている場合(ステップS1315:Yes)、GPU管理部321は、GPU使用率より、設定テーブル302のGPU使用率フィールドを参照して、最適なグラフィックカード110としてGPU−xを特定する(ステップS1316)。
【0144】
以降、ステップS1317〜ステップS1337の処理について、図12−2、図12−3で示したステップS1214〜ステップS1233の処理の実行主体を管理OS122からGPU管理部321に変更した状態とほぼ等しいため、説明を省略する。
【0145】
具体的には、ステップS1317〜ステップS1320が、ステップS1214〜ステップS1217の処理に対応し、ステップS1322〜ステップS1326が、ステップS1218〜ステップS1222の処理に対応する。さらに、ステップS1335〜ステップS1337が、ステップS1231〜ステップS1233の処理に対応する。以下の説明では、処理内容が異なる、ステップS1321、ステップS1327、ステップS1333について説明を行う。
【0146】
図13−3で示すフローチャートにて、ステップS1320の処理終了後、GPU管理部321は、GPUコマンド解析部325よりプロセス終了を受け付けたか否かを判断する(ステップS1321)。受け付けていない場合(ステップS1321:No)、GPU管理部321は、ステップS1322の処理に移行する。受け付けている場合(ステップS1321:Yes)、GPU管理部321は、ステップS1323の処理に移行する。
【0147】
図13−4で示すフローチャートにて、ステップS1326の処理終了後、GPU管理部321は、GPUコマンド解析部325よりプロセス終了を受け付けたか否かを判断する(ステップS1327)。受け付けていない場合(ステップS1327:No)、GPU管理部321は、GPUコマンド流量監視部324に監視停止を通知する(ステップS1328)。通知後、または受け付けている場合(ステップS1327:Yes)、GPU管理部321は、GPU−1がグラフィック出力を行っているか否かを判断する(ステップS1329)。グラフィック出力を行っていない場合(ステップS1329:No)、GPU管理部321は、ステップS1334の処理に移行する。
【0148】
グラフィック出力を行っている場合(ステップS1329:Yes)、GPU管理部321は、GPU_VRAM監視部326から切替可能判断結果を受け取り(ステップS1330)、切替可能判断結果が切替可能か否かを判断する(ステップS1331)。切替可能である場合(ステップS1331:Yes)、GPU管理部321は、GPU_VRAM監視部326に監視停止を通知し(ステップS1332)、GPU_VRAM監視部326にVRAM112の差分のコピー依頼を通知する(ステップS1333)。通知後、GPU管理部321は、PV−bドライバ313に、コマンド送信先をGPU−xに設定するコマンド送信先切替を通知し(ステップS1334)、ステップS1335の処理に移行する。切替不可能である場合(ステップS1331:No)、GPU管理部321は、ステップS1322の処理に移行する。
【0149】
図14は、プロセス監視部322の処理手順の一例を示すフローチャートである。プロセス監視部322は、PV−fドライバ311を監視し(ステップS1401)、グラフィックカード110へのアクセス要求があったか否かを判断する(ステップS1402)。グラフィックカード110へのアクセス要求がない場合(ステップS1402:No)、プロセス監視部322は、一定時間後、ステップS1402の処理を実行する。
【0150】
グラフィックカード110へのアクセス要求がある場合(ステップS1402:Yes)、プロセス監視部322は、GPU状態監視部323に監視開始を通知し(ステップS1403)、プロセスが終了したか否かを判断する(ステップS1404)。プロセスが終了していない場合(ステップS1404:No)、プロセス監視部322は、続けて、一定時間経過したか否かを判断する(ステップS1405)。一定時間経過していない場合(ステップS1405:No)、プロセス監視部322は、ステップS1404の処理に移行する。一定時間経過している場合(ステップS1405:Yes)、またはプロセスが終了している場合(ステップS1404:Yes)、プロセス監視部322は、GPU状態監視部323に監視停止を通知し(ステップS1406)、プロセス監視部322の処理を終了する。
【0151】
図15は、GPU状態監視部323の処理手順の一例を示すフローチャートである。GPU状態監視部323は、プロセス監視部322から監視開始を受け付けたか否かを判断する(ステップS1501)。監視開始を受け付けていない場合(ステップS1501:No)、GPU状態監視部323は、一定時間後ステップS1501の処理を実行する。監視開始を受け付けている場合(ステップS1501:Yes)、GPU状態監視部323は、GPU管理部321に監視開始を通知する(ステップS1502)。通知後、GPU状態監視部323は、GPU使用率を計測し(ステップS1503)、監視対象VMが停止したか否かを判断する(ステップS1504)。なお、具体的なGPUの計測方法は、図8で説明した方法となる。また、計測対象となるグラフィックカード110は、GPU割当状態が、仮割当、本割当となっているグラフィックカード110でよい。
【0152】
監視対象VMが停止していない場合(ステップS1504:No)、GPU状態監視部323は、GPU管理部321またはプロセス監視部322から監視停止を受け付けたか否かを判断する(ステップS1505)。監視停止を受け付けていない場合(ステップS1505:No)、GPU状態監視部323は、ステップS1503の処理に移行する。監視停止を受け付けている場合(ステップS1505:Yes)、GPU状態監視部323は、GPU使用率をGPU管理部321に通知する(ステップS1506)。通知後、GPU状態監視部323は、処理を終了する。また、監視対象VMが停止した場合(ステップS1504:Yes)、GPU状態監視部323は、GPU状態監視部323の処理を終了する。
【0153】
図16は、GPUコマンド流量監視部324の処理手順の一例を示すフローチャートである。GPUコマンド流量監視部324は、GPU管理部321から監視開始を受け付けたか否かを判断する(ステップS1601)。監視開始を受け付けていない場合(ステップS1601:No)、GPUコマンド流量監視部324は、一定時間後にステップS1601の処理を実行する。監視開始を受け付けている場合(ステップS1601:Yes)、GPUコマンド流量監視部324は、PV−bドライバ313を通過するコマンドを計数する(ステップS1602)。
【0154】
計数後、GPUコマンド流量監視部324は、GPU管理部321から監視停止を受け付けたか否かを判断する(ステップS1603)。監視停止を受け付けていない場合(ステップS1603:No)、GPUコマンド流量監視部324は、ステップS1602の処理に移行する。監視停止を受け付けている場合(ステップS1603:Yes)、GPUコマンド流量監視部324は、GPUコマンド流量監視部324の処理を終了する。
【0155】
図17は、GPU_VRAM監視部326の処理手順の一例を示すフローチャートである。GPU_VRAM監視部326は、GPU管理部321から監視開始を受け付けたか否かを判断する(ステップS1701)。監視開始を受け付けていない場合(ステップS1701:No)、GPU_VRAM監視部326は、一定時間後にステップS1701の処理を実行する。監視開始を受け付けている場合(ステップS1701:Yes)、GPU_VRAM監視部326は、切替前のグラフィックカード110のVRAM112の更新量を取得する(ステップS1702)。GPU_VRAM監視部326は、取得した更新量が設定テーブル302の同一GPUフィールドの値以下か否かを判断する(ステップS1703)。
【0156】
更新量が同一GPUフィールドの値以下の場合(ステップS1703:Yes)、GPU_VRAM監視部326は、続けて、切替元と切替先のグラフィックカード110のVRAM112の差分が、設定テーブル302の切替先フィールドの値以下か否かを判断する(ステップS1704)。なお、切替元のグラフィックカード110のGPU割当状態は、本割当状態となっており、切替先のグラフィックカード110のGPU割当状態は、割当予定状態となっている。差分が切替先フィールドの値以下である場合(ステップS1704:Yes)、GPU_VRAM監視部326は、切替可能判断結果を切替可能としてGPU管理部321に通知する(ステップS1705)。
【0157】
更新量が同一GPUフィールドの値より大きい(ステップS1703:No)、または差分が切替先フィールドの値より大きい場合(ステップS1704:No)、GPU_VRAM監視部326は、切替可能判断結果が切替不可能としてGPU管理部321に通知する(ステップS1706)。通知後、GPU_VRAM監視部326は、ステップS1702の処理に移行する。
【0158】
切替可能を通知後、GPU_VRAM監視部326は、GPU管理部321から監視停止を受け付けたか否かを判断する(ステップS1707)。監視停止を受け付けていない場合(ステップS1707:No)、GPU_VRAM監視部326は、一定時間経過後、ステップS1707の処理を実行する。監視停止を受け付けた場合(ステップS1707:Yes)、GPU_VRAM監視部326は、続けて、GPU管理部321からVRAM112の差分のコピー依頼を受け付けたか否かを判断する(ステップS1708)。差分のコピー依頼を受け付けていない場合(ステップS1708:No)、GPU_VRAM監視部326は、一定時間経過後、ステップS1708の処理を実行する。
【0159】
差分のコピー依頼を受け付けた場合(ステップS1708:Yes)、GPU_VRAM監視部326は、切替元と切替先のグラフィックカード110のVRAM112の差分が0か否かを判断する(ステップS1709)。差分が0でない場合(ステップS1709:No)、GPU_VRAM監視部326は、差分を切替先のグラフィックカード110のVRAM112にコピーし(ステップS1710)、GPU_VRAM監視部326の処理を終了する。差分が0である場合(ステップS1709:Yes)、GPU_VRAM監視部326は、処理を終了する。
【0160】
図18は、PV−bドライバ313の処理手順の一例を示すフローチャートである。PV−bドライバ313は、GPU管理部321から複製開始を受け付けたかを否かを判断する(ステップS1801)。複製開始を受け付けていない場合(ステップS1801:No)、PV−bドライバ313は、一定時間経過後、ステップS1801の処理を実行する。複製開始を受け付けている場合(ステップS1801:Yes)、PV−bドライバ313は、GPUコマンド解析部325を起動する(ステップS1802)。
【0161】
起動後、PV−bドライバ313は、GPUコマンドを複製する(ステップS1803)。具体的な複製処理としては、たとえば、PV−bドライバ313は、受信したGPUコマンドを複製対象となるグラフィックカード用ドライバ314の記憶領域にコピーする。PV−bドライバ313は、本割当状態のグラフィックカード110に複製元のGPUコマンドを送信する(ステップS1804)。
【0162】
送信後、PV−bドライバ313は、仮割当状態、または、割当予定状態のグラフィックカード110に複製されたGPUコマンドを送信する(ステップS1805)。送信後、PV−bドライバ313は、GPU管理部321よりコマンド送信先切替を受け付けたか否かを判断する(ステップS1806)。コマンド送信先切替を受け付けていない場合(ステップS1806:No)、PV−bドライバ313は、続けて、GPU管理部321から複製停止を受け付けたか否かを判断する(ステップS1807)。
【0163】
複製停止を受け付けていない場合(ステップS1807:No)、PV−bドライバ313は、ステップS1803の処理に移行する。また、コマンド送信先切替を受け付けた場合(ステップS1806:Yes)、PV−bドライバ313は、GPUコマンドの送信先を切替先のグラフィックカード110に設定する(ステップS1808)。続けて、PV−bドライバ313は、GPUコマンド書込先および参照先のVRAM112を切替先のグラフィックカード110のVRAM112に設定する(ステップS1809)。
【0164】
設定後、または複製停止を受け付けている場合(ステップS1807:Yes)、PV−bドライバ313は、GPUコマンド解析部325を停止させる(ステップS1810)。停止後、PV−bドライバ313は、GPUコマンドの複製を停止し(ステップS1811)、PV−bドライバ313の処理を終了する。
【0165】
図19は、GPUコマンド解析部325の処理手順の一例を示すフローチャートである。GPUコマンド解析部325は、PV−bドライバ313から起動される。GPUコマンド解析部325は、GPUコマンドの解析を開始する(ステップS1901)。なお、具体的な解析方法とは、受け付けたGPUコマンドに対して、図10で示したフォーマット1003の各フィールドの値を取得することである。
【0166】
解析開始後、GPUコマンド解析部325は、高負荷またはメモリ使用量が多いGPUコマンドを受け付けたか否かを判断する(ステップS1902)。なお、高負荷なGPUコマンドとは、たとえば、テクスチャフィルタリングの一つである異方性フィルタリングや、陰影処理等があげられる。また、メモリ使用量の多いGPUコマンドとしては、たとえば、テクスチャ処理等があげられる。
【0167】
高負荷またはメモリ使用量が多いGPUコマンドを受け付けた場合(ステップS1902:Yes)、GPUコマンド解析部325は、GPU使用率を取得する(ステップS1903)。取得後、GPUコマンド解析部325は、GPU使用率が設定テーブル302の上限値フィールドの値以上となるグラフィックカード110が存在するか否かを判断する(ステップS1904)。GPU使用率が上限値フィールドの値となるグラフィックカード110が存在した場合(ステップS1904:Yes)、GPUコマンド解析部325は、該当のグラフィックカード110について、GPUコマンドの複製、配信を停止する(ステップS1905)。停止後、GPUコマンド解析部325は、GPU管理部321に該当のグラフィックカード110の解放依頼を通知し(ステップS1906)、ステップS1902の処理に移行する。
【0168】
GPU使用率が上限値フィールドの値以上のグラフィックカード110が存在しない場合(ステップS1904:No)、GPUコマンド解析部325は、ステップS1902の処理に移行する。なお、GPUコマンド解析部325は、ステップS1903の処理終了後、ステップS1904〜ステップS1906の処理を行わずに、ステップS1902の処理に移行してもよい。GPUコマンド解析部325は、ステップS1904〜ステップS1906の処理を行うことで、高負荷となってしまっているグラフィックカード110を、最適なグラフィックカードの特定処理が行われる前に解放することができる。
【0169】
高負荷またはメモリ使用量が多いGPUコマンドを受け付けていない場合(ステップS1902:No)、GPUコマンド解析部325は、GPU使用終了コマンドを受け付けたか否かを判断する(ステップS1907)。GPU使用終了コマンドを受け付けていない場合(ステップS1907:No)、GPUコマンド解析部325は、ステップS1902の処理に移行する。GPU使用終了コマンドを受け付けた場合(ステップS1907:Yes)、GPUコマンド解析部325は、GPUコマンドの複製を停止する(ステップS1908)。停止後、GPUコマンド解析部325は、GPU管理部321にプロセス終了を通知し(ステップS1909)、GPUコマンド解析部325の処理を終了する。
【0170】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、処理未実行のグラフィックカードに命令を複製し、命令送信先のグラフィックカードから適切な使用率となるグラフィックカードに命令の送信先を切り替える。これにより、割当装置は、命令送信元が要求する処理能力に適したグラフィックカードの割当が行える。したがって、割当装置は、処理性能が高すぎるグラフィックカード、または低すぎるグラフィックカードを割り当てずに済み、高処理性能を要求するVMが実行した場合でも、高処理性能のグラフィックカードが既に使用されてしまっているという状態を減らすことができる。
【0171】
また、割当装置は、使用率が所定の上限値と所定の下限値の間となるグラフィックカードを適切なグラフィックカードとして特定してもよい。これにより、割当装置は、VMが要求した処理性能に対して適切な装置を割り当てることができる。
【0172】
また、割当装置は、使用率が所定の上限値未満であり、かつ使用率が最も高いグラフィックカードを適切なグラフィックカードとして特定してもよい。これにより、割当装置は、VMが要求した処理性能を満足するグラフィックカードのうち、最も処理性能が低いグラフィックカードを割り当てることができる。
【0173】
また、割当装置は、使用率が所定の上限値未満であり、かつ処理性能が最も低いグラフィックカードを適切なグラフィックカードとして特定してもよい。たとえば、割当装置は、キューに命令が貯まっている場合、アプリが要求する能力より処理性能が足りていない状態である。さらに、処理性能は静的な情報であるため、割当装置は、温度情報が取得できない等、使用率を計測できないグラフィックカードを割り当てる場合であっても本実施の形態を適用することができる。
【0174】
また、割当装置は、適切なグラフィックカードが特定された場合、特定されなかった残余のグラフィックカードに対して、命令の複製を停止してもよい。これにより、割当装置は、特定されなかったグラフィックカードを解放でき、割当装置内の負荷を減少させることができる。さらに、解放されたグラフィックカードは、他のVMからの割当要求に応答することができる。
【0175】
また、複製した命令を送信するグラフィックカード群は、命令送信先のグラフィックカードより処理性能が低いグラフィックカードを含み、さらに、処理性能が高いグラフィックカードも含んでもよい。これにより、割当装置は、命令送信先のグラフィックカードが、処理性能が高すぎるグラフィックカード、または処理性能が低すぎるグラフィックカードのいずれであっても、より適切なグラフィックカードを特定することができる。
【0176】
また、割当装置は、命令の単位時間当たりの送信数が所定数以下である場合、命令の送信先を切り替えてもよい。命令の単位時間当たりの送信数が多すぎる場合に切替を行うと、切替前と切替先のグラフィックカードで処理済みの命令数の差分が大きくなる。この時点で切替を行うと、差分の反映に時間がかかり、利用者にとっては処理が止まったように感じられる可能性がある。したがって、割当装置は、命令の単位時間当たりの送信数が所定数以下の場合に切り替えることで、利用者に違和感なく切替を行うことができる。
【0177】
また、割当装置は、グラフィックカード以外の装置に対して割当処理を実行してもよい。たとえば、割当装置は、処理性能が異なる複数のDSP(Digital Signal Processor)に接続可能である場合、複数のDSPに対して割当処理を実行してもよい。
【0178】
また、割当装置は、切替元のグラフィックカード内のVRAMの更新量が所定量以下である場合に、切替を行ってもよい。VRAMの更新量が多い状態で、切替を行うと、たとえば、VM上のプロセスが動画再生ソフトウェアであれば、場面が飛んだり、巻き戻ったりする可能性が発生する。したがって、割当装置は、VRAMの更新量が所定量以下である場合に切替を行うことで、利用者に違和感なく切替を行うことができる。
【0179】
また、割当装置は、切替元と切替先のグラフィックカード内のVRAMの差分が所定の閾値以下である場合に、切替を行ってもよい。差分が大きい状態で、割当装置が切替を行うと、差分のコピー処理に時間がかかり、利用者にとっては処理が止まったように感じられる可能性がある。したがって、割当装置は、VRAMの差分が所定の閾値以下である場合に切替を行うことで、利用者に違和感なく切替を行うことができる。
【0180】
(実施の形態2の説明)
実施の形態2にかかる割当装置101は、監視対象VMに仮割当状態、または解放予定状態として割り当てられているグラフィックカード110が、監視対象VM以外の他のVMから本割当として割当通知を受け付けた場合について説明する。このとき、GPU管理部321は、GPUコマンドの複製および、GPU使用率の計測を停止する。なお、実施の形態2にかかる割当装置101の説明では、実施の形態1にかかる割当装置101からの変更について説明を行う。
【0181】
また、実施の形態2にかかる割当装置101のハードウェアは、図2で示した実施の形態1にかかる割当装置101のハードウェアと等しいため、説明を省略する。また、実施の形態2にかかる割当装置101のソフトウェアは、GPU管理部321以外の機能は同じ機能を有するため、説明を省略する。
【0182】
図20−1、図20−2は、実施の形態2にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャートである。実施の形態2にかかるGPU管理部321のグラフィックカード割当処理は、実施の形態1にかかるGPU管理部321のグラフィックカード割当処理に2箇所の変更を行うことで対応できる。1箇所目の変更点は、図20−1で示すように、ステップS1307:NoとステップS1311の間への、ステップS2001〜ステップS2004の追加である。2箇所目の変更点は、図20−2で示すように、ステップS1324とステップS1325の間への、ステップS2011〜ステップS2014の追加と、さらにステップS1326:Noの移行先の変更である。
【0183】
図20−1で示すフローチャートにて、ステップS1307:Noを経由した場合、GPU管理部321は、監視対象VM以外の他のVMからグラフィックカード割当通知を受け付けたか否かを判断する(ステップS2001)。以下、図20−1、図20−2の説明において、割当通知を受け付けたグラフィックカード110を、該当のグラフィックカード110と呼称する。割当通知を受け付けた場合(ステップS2001:Yes)、GPU管理部321は、該当のグラフィックカード110が、GPU管理テーブル301のGPU割当先情報フィールドが監視対象VMに設定されているグラフィックカード110か否かを判断する(ステップS2002)。
【0184】
監視対象VMに設定されているグラフィックカード110である場合(ステップS2002:Yes)、GPU管理部321は、該当のグラフィックカード110が、GPU割当状態フィールドが仮割当状態のグラフィックカード110であるか否かを判断する(ステップS2003)。仮割当状態である場合(ステップS2003:Yes)、GPU管理部321は、該当のグラフィックカード110のGPU割当状態フィールドを未割当に変更し(ステップS2004)、ステップS1311の処理に移行する。
【0185】
なお、GPU割当状態が未割当となったことで、該当のグラフィックカード110は、GPU状態監視部323の処理のステップS1503における計測対象から外れることになるため、GPU使用率の計測がされなくなる。同様に、該当のグラフィックカード110は、PV−bドライバ313の処理のステップS1805における複製されたGPUコマンドの送信先から外れるため、GPUコマンドが配信されなくなる。
【0186】
割当通知を受け付けていない場合(ステップS2001:No)、GPU管理部321は、ステップS1311の処理に移行する。監視対象VMとなるグラフィックカード110でない場合(ステップS2002:No)、仮割当状態のグラフィックカード110でない場合(ステップS2003:No)、GPU管理部321は、ステップS1311の処理に移行する。
【0187】
次に、図20−2で示すフローチャートにて、ステップS1323:Noを経由後、またはステップS1324の処理後、GPU管理部321は、ステップS2011〜ステップS2013の処理を行う。ここで、ステップS2011、ステップS2012の処理は、ステップS2001、ステップS2002の処理と等しいため、説明を省略する。ステップS2002:Yesを経由した場合、GPU管理部321は、該当のグラフィックカード110が、GPU割当状態フィールドが解放予定状態のグラフィックカード110であるか否かを判断する(ステップS2013)。解放予定状態である場合(ステップS2013:Yes)、GPU管理部321は、該当のグラフィックカード110のGPU割当状態フィールドを未割当に変更し(ステップS2014)、ステップS1325の処理に移行する。
【0188】
ステップS2011:No、ステップS2012:No、または、解放予定状態でない場合(ステップS2013:No)、GPU管理部321は、ステップS1325の処理に移行する。ステップS1326:Noとなった場合、GPU管理部321は、ステップS2011の処理に移行する。
【0189】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、他のVMから本割当として割当通知を受け付けた場合、該当のグラフィックカードに対して行っていたグラフィックカード割当処理を停止する。これにより、割当装置は、他のVMのグラフィックカード割当を妨害することなく、グラフィックカード割当処理を実行することができる。
【0190】
(実施の形態3の説明)
実施の形態3にかかる割当装置101は、複数のVMに対するグラフィックカード割当処理が同時に起こった場合について説明する。同時に起こった場合、GPU使用率を測定すると、グラフィックカード110にアクセスするプロセスが本来のパフォーマンスを発揮できず、正確なGPU使用率を測定することができなくなる場合が存在する。したがって、実施の形態3にかかる割当装置101は、グラフィックカード割当処理が同時に起こった場合、CPU使用率の低い物理CPUに、監視対象VMを割り当てる。また、実施の形態3にかかる割当装置101の説明では、実施の形態1にかかる割当装置101からの変更について説明を行う。なお、実施の形態2にかかる割当装置101に対しても、実施の形態3を適用することが可能である。
【0191】
また、実施の形態3にかかる割当装置101のハードウェアは、図2で示した実施の形態1にかかる割当装置101のハードウェアと等しいため、説明を省略する。また、実施の形態3にかかる割当装置101のソフトウェアは、GPU管理部321以外の機能は同じ機能を有するため、説明を省略する。
【0192】
図21−1、図21−2は、実施の形態3にかかるGPU管理部321のグラフィックカード割当処理手順の一例を示すフローチャートである。実施の形態3にかかるGPU管理部321のグラフィックカード割当処理は、図13に示したGPU管理部321のグラフィックカード割当処理に2箇所の変更点を行うことで対応できる。1箇所目の変更点は、図21−1で示すように、ステップS1305:YesとステップS1306の間への、ステップS2101〜ステップS2104の追加である。2箇所目の変更点は、図21−2で示すように、ステップS1335の処理とステップS1336の処理の間への、ステップS2101、ステップS2102の追加である。
【0193】
図21−1に示すフローチャートにて、ステップS1305:Yesを経由した場合、GPU管理部321は、監視対象VM以外の他のVMがグラフィックカード割当処理を実行中か否かを判断する(ステップS2101)。他のVMがグラフィックカード割当処理を実行中である場合(ステップS2101:Yes)、GPU管理部321は、割当可能かつCPU使用率が所定の閾値以下の物理CPUが存在するか否かを判断する(ステップS2102)。なお、所定の閾値は、設定テーブル302のフィールドとして登録されていてもよい。たとえば、所定の閾値として、CPU使用率が10[%]以下であるか否かを判断する。
【0194】
また、CPU使用率は、CPUの単位時間あたりの実行時間の比率を負荷量として算出する。また、別の算出方法としては、CPUに割り当てられている処理数に基づいて算出してもよい。または、CPUに割り当てられている処理に付与されている処理量情報の合計を、CPUの負荷量として算出してもよい。なお、処理量情報は、事前に各処理を計測しておく。
【0195】
CPU使用率が所定の閾値以下となる物理CPUが存在しない場合(ステップS2102:No)、GPU管理部321は、元々割り当てられていた仮想CPUのCPU使用率が所定の閾値以下となったか否かを判断する(ステップS2103)。仮想CPUのCPU使用率が所定の閾値より大きい場合(ステップS2103:No)、GPU管理部321は、ステップS2102の処理に移行する。仮想CPUのCPU使用率が所定の閾値以下である場合(ステップS2103:Yes)、GPU管理部321は、ステップS1306の処理に移行する。
【0196】
CPU使用率が所定の閾値以下の物理CPUが存在する場合(ステップS2102:Yes)、GPU管理部321は、発見した物理CPUに監視対象VMを割り当てる(ステップS2104)。割当後、GPU管理部321は、元々割り当てられていた仮想CPUをオフライン状態に設定し(ステップS2105)、ステップS1306の処理に移行する。なお、仮想CPUは、オフライン状態になると、VMから使用できなくなる。他のVMがグラフィックカード割当処理を実行中でない場合(ステップS2101:No)、GPU管理部321は、ステップS1306の処理に移行する。
【0197】
次に、図21−2に示すフローチャートにて、ステップS1335の処理後、GPU管理部321は、物理CPUに監視対象VMを割り当てたか否かを判断する(ステップS2111)。物理CPUに監視対象VMを割り当てた場合(ステップS2111:Yes)、GPU管理部321は、元々割り当てられていた仮想CPUをオンライン状態に設定する(ステップS2112)。なお、仮想CPUは、オンライン状態になることで、VMから使用できるようになる。設定後、GPU管理部321は、物理CPUを解放する(ステップS2113)。
【0198】
解放後、GPU管理部321は、ステップS1336の処理に移行する。また、物理CPUに監視対象VMを割り当てていない場合(ステップS2111:No)、GPU管理部321は、ステップS1336の処理に移行する。
【0199】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、他VMによってグラフィックカード割当処理が実行中であった場合、負荷の低いCPUに対象のVMを割り当てる。これにより、割当装置は、グラフィックカード割当処理を本来のパフォーマンスで実行することができる。
【0200】
(実施の形態4の説明)
実施の形態4にかかる割当装置101は、過去に特定したグラフィックカード110を記憶する利用者テーブル2201にアクセスする場合について説明を行う。利用者の操作によって起動されたVMが、過去にグラフィックカード110を割り当てて起動したことがある場合、割当装置101は、過去に特定したグラフィックカード110を再度割り当てる処理を行う。また、実施の形態4にかかる割当装置101の説明では、実施の形態1にかかる割当装置101からの変更について説明を行う。なお、実施の形態2、または実施の形態3にかかる割当装置101に対しても、実施の形態4を適用することが可能である。
【0201】
実施の形態4にかかる割当装置101の説明については、初めに利用者テーブル2201の記憶内容を説明した後、グラフィックカード割当処理の前に行われるグラフィックカード割当準備処理の説明を行う。
【0202】
また、実施の形態4にかかる割当装置101のハードウェアは、図2で示した実施の形態1にかかる割当装置101のハードウェアと等しいため、説明を省略する。また、実施の形態4にかかる割当装置101のソフトウェアは、GPU管理部321にグラフィックカード割当準備処理が追加されており、GPU管理部321のグラフィックカード割当処理について変更はないため、説明を省略する。また、他の機能部も、決定部600、複製部601を除いて実施の形態1と同じ機能を有するため、説明を省略する。
【0203】
実施の形態4にかかる決定部600は、最適な装置に特定される候補となる装置を、PV−fドライバ311から通知された命令が使用するメモリ使用量に応じた数分決定する。なお、メモリ使用量は、利用者テーブル2201に格納されている。たとえば、GPU仮割当数フィールドの値が2である状態を想定する。このとき、決定部600は、メモリ使用量が所定の上限値以上であれば、たとえば、GPU仮割当数を2−1=1に決定し、1つのグラフィックカード110を候補の装置として決定する。また、決定部600は、メモリ使用量が所定の下限値以下であれば、たとえば、GPU仮割当数を2+1=3に決定し、3つのグラフィックカード110を候補の装置として決定する。
【0204】
実施の形態4にかかる複製部601は、最適な装置に特定される候補となる装置数分、命令を複製する。たとえば、GPU仮割当数フィールドの値が2である状態を想定する。このとき、複製部601は、GPU仮割当数=1であれば、オリジナルの命令に対して1つの命令を複製する。また、複製部601は、GPU仮割当数=3であれば、オリジナルの命令に対して3つの命令を複製する。
【0205】
図22は、利用者テーブル2201の記憶内容の一例を示す説明図である。利用者テーブル2201は、利用者ID、パスワード、VMID、グラフィックカードID、メモリ使用量という5つのフィールドを含む。利用者IDフィールドには、利用者の識別情報が格納される。パスワードフィールドには、利用者IDフィールドに格納された利用者のパスワードが格納される。VMIDフィールドには、利用者によって利用されたVMの識別情報が格納される。グラフィックカードIDフィールドには、前回割り当てられたグラフィックカードの識別情報が格納される。なお、VMが起動されても必ずしもグラフィックカードが使用されるとは限らない。グラフィックカードが使用されなかった場合、グラフィックカードIDフィールドとメモリ使用量フィールドは、空欄となる。
【0206】
メモリ使用量フィールドには、前回のGPUコマンドの実行により使用したメモリの使用量が格納される。また、メモリ使用量フィールドは、さらに、平均値、最大値というサブフィールドを含む。平均値フィールドは、前回使用したメモリの平均使用量が格納される。最大値フィールドは、前回使用したメモリの最大使用量が格納される。
【0207】
たとえば、図22で示す利用者−Aは、パスワードがパスワード−Aであり、利用VMがVM1であることを示す。また、利用VM1に前回割り当てられたグラフィックカードがGPU−3であり、メモリ使用量が平均で1.5[Mバイト]であり、最大が1.8[Mバイト]となる。
【0208】
図23−1、図23−2は、GPU管理部321のグラフィックカード割当準備処理手順の一例を示すフローチャートである。GPU管理部321は、VM管理部327から、割当候補のグラフィックカード特定依頼を受け付けたか否かを判断する(ステップS2301)。グラフィックカード特定依頼を受け付けていない場合(ステップS2301:No)、GPU管理部321は、一定時間経過後、ステップS2301の処理を実行する。
【0209】
グラフィックカード特定依頼を受け付けた場合(ステップS2301:Yes)、GPU管理部321は、VM管理部327より利用者IDを取得する(ステップS2302)。取得後、GPU管理部321は、利用者テーブル2201のうち、利用者IDフィールドに取得した利用者IDと一致するレコードが存在するか否かを判断する(ステップS2303)。
【0210】
レコードが存在する場合(ステップS2303:Yes)、GPU管理部321は、発見したレコードのグラフィックカードIDフィールドに格納されたグラフィックカード110の識別情報を取得する(ステップS2304)。なお、発見したレコードのグラフィックカードIDフィールドにグラフィックカード110の識別情報が格納されていない場合も存在する。このとき、GPU管理部321は、レコードが存在しなかったとしてステップS2303:Noのルートを実行してもよい。
【0211】
取得後、GPU管理部321は、GPU管理テーブル301を参照して、取得したグラフィックカード110が他のVMによって割り当てられているか否かを判断する(ステップS2305)。他のVMによって割り当てられていない場合(ステップS2305:No)、GPU管理部321は、取得したグラフィックカード110のGPU割当状態を本割当に設定する(ステップS2306)。他のVMによって割り当てられている場合(ステップS2305:Yes)、GPU管理部321は、GPU管理テーブル301のGPU性能情報フィールドを参照して、値が近く、かつ未割当状態であるグラフィックカード110のGPU割当状態を本割当に設定する(ステップS2307)。
【0212】
ステップS2306、ステップS2307にて本割当のグラフィックカード110を設定後、GPU管理部321は、発見したレコードのメモリ使用量フィールドに基づいて、仮割当を行うグラフィックカードの数を決定する(ステップS2308)。
【0213】
具体的な仮割当数の決定方法として、GPU管理部321は、所定の閾値となる上限値および下限値を用意しておく。これらの値は、設定テーブル302のフィールドとして格納されていてもよい。この状態で、GPU管理部321は、メモリ使用量フィールドの値が、上限値以上であれば仮割当数を設定テーブル302のGPU仮割当数フィールドの値−1、下限値以下であれば仮割当数をGPU仮割当数フィールドの値+1、として決定してもよい。
【0214】
仮に、発見されたレコードのVMが、テクスチャ処理のように大量のメモリを使用するGPUコマンドを頻繁に発行するVMであった場合、仮割当枚数が多いと、メモリにアクセスが増大し、バス207の帯域を占有してしまう恐れがある。したがって、GPU管理部321は、メモリ使用量が多い利用者の場合仮割当枚数を減らすことで、他の利用者への影響を与えないようにすることができる。
【0215】
決定後、GPU管理部321は、GPU仮割当テーブル303のうち、本割当に設定されたグラフィックカード110が本割当GPUフィールドに格納されているレコードを選択する(ステップS2309)。選択後、GPU管理部321は、選択されたレコードの仮割当GPUフィールド群から、決定された数のグラフィックカード110のGPU割当状態を仮割当に設定し(ステップS2310)、ステップS2314の処理に移行する。なお、決定された数が仮割当GPUフィールド群の数より多い場合、GPU管理部321は、仮割当GPUフィールド群全てのグラフィックカード110のGPU割当状態を仮割当に設定してもよい。または、GPU管理部321は、GPU割当状態が未割当となっているグラフィックカード110が存在すれば、存在したグラフィックカード110を仮割当に設定してもよい。
【0216】
レコードが存在しない場合(ステップS2303:No)、GPU管理部321は、GPU仮割当テーブル303のうち、いずれか一つのレコードを選択する(ステップS2311)。具体的な選択方法として、たとえば、GPU管理部321は、GPU仮割当テーブル303の先頭のレコードから順に、次の条件で検索し、当てはまったレコードを選択してもよい。具体的な条件とは、たとえば、本割当GPUフィールド、仮割当GPU1フィールド、仮割当GPU2フィールドに格納されている3つのグラフィックカードが全て未割当である場合である。
【0217】
選択後、GPU管理部321は、選択したレコードの本割当GPUフィールドに格納されているグラフィックカード110のGPU割当状態を本割当に設定する(ステップS2312)。設定後、GPU管理部321は、選択されたレコードの仮割当GPUフィールド群から、GPU仮割当数フィールドの値のグラフィックカード110のGPU割当状態を仮割当に設定し(ステップS2313)、ステップS2314の処理に移行する。
【0218】
次に図23−2で示すフローチャートにて、GPU管理部321は、GPUコマンド解析部325にメモリ使用量の計測開始を通知する(ステップS2314)。なお、メモリ使用量の計測開始を受け取ったGPUコマンド解析部325は、グラフィックカードがメモリにアクセスした場合に、メモリ使用量を記憶しておく。通知後、GPU管理部321は、グラフィックカード割当処理を実行する(ステップS2315)。また、実行されるグラフィックカード割当処理は、実施の形態1〜実施の形態3で示したいずれか一つのグラフィックカード割当処理となる。なお、グラフィックカード割当処理にて、ステップS1302〜ステップS1304の処理は既に実行済みであるため、行わなくてよい。
【0219】
グラフィックカード割当処理終了後、GPU管理部321は、GPUコマンド解析部325からGPUコマンドのメモリ使用量を取得する(ステップS2316)。取得後、GPU管理部321は、利用者テーブル2201のうち、利用者IDフィールドに取得した利用者IDと一致するレコードを選択する(ステップS2317)。なお、レコードが存在しなかった場合、GPU管理部321は、新たなレコードを生成し、利用者テーブル2201に追加する。このとき、GPU管理部321は、生成したレコードの利用者IDフィールド、パスワードフィールド、VMIDフィールドをVM管理部327から取得し格納する。
【0220】
取得後、GPU管理部321は、利用者テーブル2201のグラフィックカード割当処理で特定されたグラフィックカード110の識別情報を選択したレコードのグラフィックカードIDフィールドに格納する(ステップS2318)。続けて、GPU管理部321は、取得したGPUコマンドのメモリ使用量を選択したレコードのメモリ使用量フィールドに格納し(ステップS2319)、グラフィックカード割当準備処理を終了する。
【0221】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、前回割り当てたグラフィックカードの情報を用いてグラフィックカード割当処理を実行する。これにより、割当装置は、グラフィックカード割当処理内で、グラフィックカードが切り替わる可能性を減らすことができる。
【0222】
また、割当装置は、命令が使用するメモリ使用量に応じた装置数となる装置群に対して、前記命令を複製して送信してもよい。たとえば、割当装置は、メモリ使用量が多いときに、装置群を少なくしてもよい。これにより、割当装置は、メモリ使用量が多い場合、仮割当されるグラフィックカードの枚数を減らし、メモリアクセスに伴うバスの占有を避けることができる。また、割当装置は、メモリ使用量が少ない場合、仮割当されるグラフィックカードの枚数を増やしてもよい。これにより、割当装置は、多くのグラフィックカードを仮割当とするため、より適切なグラフィックカードを発見しやすくなる。
【0223】
(実施の形態5の説明)
実施の形態5にかかる割当装置101は、GPU管理テーブル301のGPU性能情報に、計測したGPU使用率を反映する例について説明を行う。また、実施の形態5にかかる割当装置101の説明では、実施の形態1にかかる割当装置101を基にして説明を行う。なお、実施の形態2、実施の形態3、または実施の形態4にかかる割当装置101に対しても、実施の形態5を適用することが可能である。
【0224】
実施の形態5にかかる割当装置101の説明については、ソフトウェア例と、コマンド保管テーブル2401の記憶内容を説明した後、全てのグラフィックカード110についてGPU使用率を計測する、GPU使用率計測処理の説明を行う。
【0225】
また、実施の形態5にかかる割当装置101のハードウェアは、図2で示した実施の形態1にかかる割当装置101のハードウェアと等しいため、説明を省略する。また、実施の形態5にかかる割当装置101のソフトウェアは、GPU管理部321にグラフィックカード割当準備処理が追加されており、GPU管理部321のグラフィックカード割当処理について変更はないため、説明を省略する。また、他の機能部も、実施の形態1と同じ機能を有するため、説明を省略する。
【0226】
図24は、実施の形態5にかかる割当装置101のソフトウェア例を示すブロック図である。なお、実施の形態5にかかる割当装置101は、実施の形態1にかかる割当装置101がアクセス可能なテーブル群に加え、さらに、コマンド保管テーブル2401にアクセス可能である。
【0227】
コマンド保管テーブル2401は、VMから通知されたGPUコマンドを格納するテーブルである。具体的に、GPU管理部321がグラフィックカード割当処理を実行した際に、Pv−bドライバ313が、VMから通知されたGPUコマンドをコマンド保管テーブル2401に格納する。また、この時に、GPU状態監視部323は、計測したGPU使用率についてもコマンド保管テーブル2401に格納する。続けて、GPU管理部321は、コマンド保管テーブル2401にアクセスしてGPU使用率計測処理を実行する。
【0228】
図25は、コマンド保管テーブル2401の記憶内容の一例を示す説明図である。コマンド保管テーブル2401は、コマンドリスト、GPU使用率という2つのフィールドを含む。コマンドリストフィールドには、GPUコマンドが格納されたコマンドリストへのアドレスが格納される。GPU使用率フィールドには、コマンドリストフィールドに格納されたGPUコマンドを実行した際のGPU使用率が格納される。GPU使用率フィールドは、サブフィールドとして、GPU−1〜GPU−nのGPU使用率を格納するサブフィールドを含む。
【0229】
たとえば、図25で示すコマンド保管テーブル2401は、コマンドリスト2501へのアドレスが0x10002000であることを示している。さらに、コマンド保管テーブル2401は、コマンドリスト2501を実行した際のGPU使用率が、GPU−1:82.3[%]、GPU−2:27.9[%]、GPU−3:96.4[%]であることを示している。なお、GPU−nに関しては未計測である。また、図25で示すコマンドリスト2501は、グラフィックカード110の初期化を行った後に、ウインドウを生成し、三角形の描画を行うGPUコマンド群が格納されている。
【0230】
図26にて、GPU管理部321が、GPU使用率記録処理を実行する。なお、GPU使用率記録処理で用いるGPUコマンド群は、GPUコマンド解析部325の処理となるステップS1803にて、複製対象となるGPUコマンドである。GPUコマンド解析部325は、複製対象となるGPUコマンドをコマンドリスト2501に格納する。
【0231】
図26−1、図26−2は、GPU管理部321のGPU使用率計測処理手順の一例を示すフローチャートである。なお、GPU使用率計測処理を行う場合、グラフィックカード割当処理が実行された際に本割当状態、または仮割当状態であったグラフィックカードに対するGPU使用率フィールドには値が格納されている。したがって、GPU使用率計測処理は、本割当状態、または仮割当状態であったグラフィックカード110以外のグラフィックカード110に対してGPU使用率を計測すればよい。
【0232】
GPU管理部321は、コマンドリスト2501に格納されたGPUコマンドを複製対象として、PV−bドライバ313に複製開始を通知する(ステップS2601)。通知後、GPU管理部321は、コマンドリスト2501に対応するGPU使用率が未計測であり、GPU割当状態が未割当、または解放予定のグラフィックカード110が存在するか否かを判断する(ステップS2602)。GPU使用率が未計測であり、未割当、または解放予定のグラフィックカード110が存在しない場合(ステップS2602:No)、GPU管理部321は、一定時間経過後にステップS2602の処理を実行する。これにより、本割当、仮割当、割当予定状態のグラフィックカードに関しては、割当が解放した後に、GPU使用率を計測することができる。
【0233】
以下、図26−1、図26−2の説明において、GPU使用率が未計測であり、未割当、または解放予定のグラフィックカード110を、該当のグラフィックカード110と呼称する。該当のグラフィックカード110が存在する場合(ステップS2602:Yes)、GPU管理部321は、PV−bドライバ313に該当のグラフィックカード110へのGPUコマンド配信開始を通知する(ステップS2603)。なお、GPUコマンド配信開始を受け付けたPV−bドライバ313は、ステップS1805の処理にて、該当のグラフィックカード110に複製されたGPUコマンドを送信する。
【0234】
続けて、GPU管理部321は、GPU状態監視部323に該当の対象グラフィックカード110の監視開始を通知する(ステップS2604)。なお、監視開始を受け付けたGPU状態監視部323は、ステップS1503の処理にて、該当のグラフィックカード110のGPU使用率を計測する。
【0235】
通知後、GPU管理部321は、監視対象VM以外の他のVMから該当のグラフィックカード110への割当通知を受け付けたか否かを判断する(ステップS2605)。他のVMからの割当通知を受け付けた場合(ステップS2605:Yes)、GPU管理部321は、GPU状態監視部323に該当のグラフィックカード110の監視停止を通知する(ステップS2606)。通知後、GPU管理部321は、PV−bドライバ313に該当GPUのコマンド配信停止を通知し(ステップS2607)、ステップS2602の処理に移行する。他のVMからの割当通知を受け付けていない場合(ステップS2605:No)、GPU管理部321は、ステップS2608の処理に移行する。
【0236】
次に図26−2で示すフローチャートにて、GPU管理部321は、該当のグラフィックカード110のGPU使用率の計測が完了したか否かを判断する(ステップS2608)。GPU使用率の計測が完了していない場合(ステップS2608:No)、GPU管理部321は、一定時間経過後にステップS2608の処理に移行する。GPU使用率の計測が完了している場合(ステップS2608:Yes)、GPU管理部321は、該当のグラフィックカード110のGPU使用率をコマンド保管テーブル2401のGPU使用率フィールドに設定する(ステップS2609)。
【0237】
設定後、GPU管理部321は、全てのグラフィックカード110についてGPU使用率の計測が完了したか否かを判断する(ステップS2610)。計測が完了していない場合(ステップS2610:No)、GPU管理部321は、ステップS2602の処理に移行する。計測が完了している場合(ステップS2610:Yes)、GPU管理部321は、GPU管理テーブル301のGPU性能情報フィールドに、コマンド保管テーブル2401のGPU使用率フィールドの値を反映する(ステップS2611)。
【0238】
なお、具体的な反映方法として、GPU性能情報フィールドに値が格納されていない場合、GPU管理部321は、コマンド保管テーブル2401のGPU使用率フィールドの値を格納する。また、GPU性能情報フィールドに値が格納されている場合、GPU管理部321は、たとえば、GPU性能情報フィールドの値とGPU使用率フィールドの値との平均値をGPU性能情報フィールドに格納してもよい。
【0239】
反映後、GPU管理部321は、GPU状態監視部323に該当のグラフィックカード110の監視停止を通知する(ステップS2612)。通知後、GPU管理部321は、PV−bドライバ313に該当GPUのコマンド配信停止を通知し(ステップS2613)、GPU使用率計測処理を終了する。
【0240】
以上説明したように、割当方法、割当装置、および割当プログラムによれば、実際に送信された命令を、全てのグラフィックカードに送信し、GPU使用率を計測する。これにより、割当装置は、より正確なグラフィックカードの処理性能を得ることができる。
【0241】
なお、本実施の形態で説明した割当方法は、予め用意された割当プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【0242】
110 グラフィックカード
122 管理OS
313 PV−bドライバ
314 グラフィックカード用ドライバ
321 GPU管理部
323 GPU状態監視部
324 GPUコマンド流量監視部
326 GPU_VRAM監視部
600 決定部
601 複製部
602、603、604 送信部
605 計測部
606 特定部
607 切替部
608、609 判断部

【特許請求の範囲】
【請求項1】
コンピュータが、
同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信し、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信し、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測し、
前記いずれか一つの装置に対する使用率に基づいて、前記装置群のうち切替対象の装置を特定し、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する割当方法。
【請求項2】
前記いずれか一つの装置に対する使用率と前記装置群の各装置の使用率とのうち、所定の上限値と所定の下限値との間となる装置を、前記切替対象の装置に特定する、
処理を実行する請求項1に記載の割当方法。
【請求項3】
前記いずれか一つの装置に対する使用率と前記装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ使用率が最も高い装置を、前記切替対象の装置に特定する、
処理を実行する請求項1に記載の割当方法。
【請求項4】
前記いずれか一つの装置に対する使用率と前記装置群の各装置の使用率とのうち、所定の上限値未満であり、かつ前記処理性能が最も低い装置を、前記切替対象の装置に特定する、
処理を実行する請求項1に記載の割当方法。
【請求項5】
前記装置群のうち、前記切替対象の装置以外となる残余の装置に対して、命令の複製を停止する、
処理を実行する請求項1〜4のいずれか一つに記載の割当方法。
【請求項6】
前記複数の装置のうち、前記処理を実行中でなく前記いずれか一つの装置より処理性能が低い装置および前記処理を実行中でなく前記いずれか一つの装置より処理性能が高い装置を含む前記装置群に対して、前記命令を複製して送信する、
処理を実行する請求項1〜5のいずれか一つに記載の割当方法。
【請求項7】
前記命令の単位時間当たりの送信数が所定数以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項1〜6のいずれか一つに記載の割当方法。
【請求項8】
前記命令が使用するメモリ使用量に応じた装置数となる前記装置群に対して、前記命令を複製して送信する、
処理を実行する請求項1〜7のいずれか一つに記載の割当方法。
【請求項9】
前記装置が画像処理装置であり、前記命令が描画命令であることを特徴とする請求項1〜8のいずれか一つに記載の割当方法。
【請求項10】
前記いずれか一つの装置内の画像記憶領域において、前記命令による更新量が所定量以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項9に記載の割当方法。
【請求項11】
前記いずれか一つの装置内の画像記憶領域と前記切替対象の装置内の画像記憶領域との差分が所定の閾値以下である場合、前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行する請求項9または10に記載の割当方法。
【請求項12】
同一の処理を実行可能であり処理性能が異なる複数の装置と、
前記複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信する第1の送信部と、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信する第2の送信部と、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測する計測部と、
前記いずれか一つの装置に対する使用率に基づいて、前記装置群のうち切替対象の装置を特定する特定部と、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える切替部と、
を備えることを特徴とする割当装置。
【請求項13】
コンピュータに、
同一の処理を実行可能であり処理性能が異なる複数の装置のうち、いずれか一つの装置に前記処理に対する命令を送信し、
前記複数の装置のうち前記処理を実行していない装置群に対して、前記命令を複製して送信し、
前記命令を実行した場合の使用率を、前記いずれか一つの装置および装置群の各装置に対して計測し、
前記いずれか一つの装置に対する使用率に基づいて、前記装置群のうち切替対象の装置を特定し、
前記命令の送信先を前記いずれか一つの装置から前記切替対象の装置に切り替える、
処理を実行させる割当プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7−1】
image rotate

【図7−2】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12−1】
image rotate

【図12−2】
image rotate

【図12−3】
image rotate

【図13−1】
image rotate

【図13−2】
image rotate

【図13−3】
image rotate

【図13−4】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20−1】
image rotate

【図20−2】
image rotate

【図21−1】
image rotate

【図21−2】
image rotate

【図22】
image rotate

【図23−1】
image rotate

【図23−2】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26−1】
image rotate

【図26−2】
image rotate