次に、本発明の実施の形態について説明する。
<第1の実施形態>
まず、本発明の第1の実施形態について、図面を参照して詳細に説明する。
図1は、本実施形態の情報処理システム100の構成の例を表すブロック図である。
図1を参照すると、情報処理システム100は、仮想計算機管理装置1と、仮想計算機実行装置2と、端末装置3と、ユーザ管理装置4とを含む。情報処理装置100は、複数の端末装置3を含んでいてもよい。仮想計算機管理装置1と、仮想計算機実行装置2と、ユーザ管理装置4とは、互いに接続されている。端末装置3は、仮想計算機管理装置1及び仮想計算機実行装置2に接続されている。なお、仮想計算機管理装置1、仮想計算機実行装置2、及びユーザ管理装置4のいずれか2台以上が、同一の装置であってもよい。例えば、仮想計算機実行装置2が、仮想計算機管理装置1を含むことによって、仮想計算機管理装置1として動作してもよい。本発明の各実施形態の説明における、仮想計算機実行装置2及び仮想計算機実行装置2Aは、単に、実行装置とも表記される。
図2は、本実施形態の情報処理システム100Aの構成の例を表すブロック図である。情報処理システム100Aでは、仮想計算機実行装置2が、仮想計算機管理装置1及びユーザ管理装置4を含む。他の点では、情報処理システム100Aは、情報処理システム100と同じである。
仮想計算機管理装置1は、状態記憶部10と、要求受信部11と、不足特定部12と、選択部13と、優先順位決定部14と、出力部15とを含む。
仮想計算機実行装置2は、仮想計算機20を実行する仮想計算機実行部21と、退避部22と、仮想計算機記憶部23と、状態取得部24と、要求実行部25と、状態送信部26とを含む。
ユーザ管理装置4は、ログ記憶部40と、認証部41とを含む。
仮想計算機20は、仮想計算機実行装置2においてエミュレートされる仮想的なコンピュータである。仮想計算機20は、一般に、仮想機械あるいはバーチャルマシンとも呼ばれる。仮想計算機20がエミュレートされたPCである場合、仮想計算機20は、仮想PCとも呼ばれる。
仮想計算機実行部21は、仮想計算機20を実行する。すなわち、仮想計算機実行部21は、仮想計算機20をエミュレートする。仮想計算機実行部21は、例えば、仮想計算機実行装置21のプロセッサと、そのプロセッサが実行する、仮想計算機20を実現するための制御プログラムによって実現される。そのような仮想計算機実行部21は、一般に、ハイパーバイザと呼ばれる。
仮想計算機実行装置2において仮想計算機20が動作している場合、その仮想計算機20に対して、その仮想計算機20がコンピュータとして動作するために使用するメモリが、仮想計算機実行装置2のメモリから割り当てられる。
退避部22は、退避指示と、退避の対象である仮想計算機20の識別子とを受信すると、その仮想計算機20に対して、退避処理を行う。すなわち、退避部22は、その仮想計算機20に割り当てられているメモリにロードされているデータを、その仮想計算機20に関連付けて仮想計算機記憶部23に格納する。さらに、退避部22は、退避が行われた仮想計算機20に割り当てられていたメモリを解放する。退避処理は、例えば、以上の、仮想計算機実行装置2のメモリにロードされていた仮想計算機20のデータを仮想計算機記憶部23に格納し、その仮想計算機20に割り当てられていたメモリを解放する処理である。以下の説明において、仮想計算機20に対して退避処理を行うことを、「仮想計算機20を退避させる」とも表記することにする。
退避部22は、さらに、復帰指示と、復帰の対象である仮想計算機20の識別子とを受信すると、その仮想計算機20に対して復帰処理を行う。すなわち、退避部22は、まず、復帰の対象である仮想計算機20がコンピュータとして動作するために使用するメモリを、仮想計算機実行装置2のメモリにおいて確保する。そして、退避部22は、仮想計算機記憶部23に格納されている、復帰の対象である仮想計算機20のデータを、確保したメモリに再びロードする。復帰処理は、例えば、以上の、復帰の対象である仮想計算機20が使用するメモリを確保する処理と、その仮想計算機20のデータを確保したメモリにロードする処理である。以下の説明では、仮想計算機20に対して復帰処理を行うことを、「仮想計算機20を復帰させる」とも表記することにする。
仮想計算機記憶部23は、仮想計算機実行装置2のメモリにロードされていた仮想計算機20のデータを記憶する。以下の説明において、仮想計算機実行装置2のメモリにロードされていた仮想計算機20のデータを記憶することを、「仮想計算機20を記憶する」とも表記することにする。
状態取得部24は、さらに、仮想計算機実行装置2の未使用リソースの量を特定する。未使用リソースは、どの仮想計算機20にも割り当てられていない、いずれかの仮想計算機20に割り当てることができる仮想計算機実行装置2のリソースである。リソースは、例えば、メモリ、プロセッサ、ネットワーク帯域、ストレージなどである。状態取得部24は、未使用リソースの量を、例えば、仮想計算機実行部21から受信してもよい。そして、状態取得部24は、特定した未使用リソースの量を、状態送信部26に送信する。
要求実行部25は、退避させる仮想計算機20として選択部13が選択した仮想計算機20である選択仮想計算機の、識別子を受信する。要求実行部25は、退避指示と、受信した選択仮想計算機の識別子とを、退避部22に送信する。退避指示と、受信した選択仮想計算機の識別子と受信した退避部22は、選択仮想計算機を退避させる。選択仮想計算機がいずれかの端末装置3と接続されている場合、要求実行部25は、選択仮想計算機に、退避準備指示を送信してもよい。各仮想計算機20は、退避準備指示を受信した場合、端末装置3との接続を切断するよう設計されていればよい。
要求実行部25は、さらに、端末装置3の識別子と、端末装置3が送信した接続要求における接続先の仮想計算機20である接続先仮想計算機の識別子とを受信する。接続先仮想計算機が退避させられている場合、要求実行部25は、復帰指示と、接続先仮想計算機の識別子とを、退避部22に送信する。復帰指示と、接続先仮想計算機の識別子とを受信した退避部22は、接続先仮想計算機を復帰させる。
要求実行部25は、さらに、端末装置3と接続先仮想計算機とを接続する。要求実行部25は、例えば、接続要求を送信した端末装置3に、接続先仮想計算機の識別子を送信することによって、端末装置3と接続先仮想計算機とを接続すればよい。接続先仮想計算機の識別子を受信した端末装置3は、接続先仮想計算機に接続する。
状態送信部26は、状態取得部24が特定した、仮想計算機実行装置2の未使用リソースの量を、仮想計算機管理装置1の状態受信部16に送信する。
状態送信部26は、さらに、各仮想計算機20の状態を、仮想計算機管理装置1の状態受信部16に送信する。仮想計算機20の状態は、例えば、仮想計算機20の「接続状態」と、仮想計算機20の「場所」を含む。仮想計算機20の状態は、仮想計算機20の使用リソース量を含んでいてもよい。仮想計算機20の状態は、仮想計算機20の動作状態を含んでいてもよい。仮想計算機20の状態は、さらに、その仮想計算機20に関連付けられている「ユーザID(Identifier)」を含む。ただし、状態送信部26は、「ユーザID」を送信しなくてよい。「ユーザID」は、ユーザの識別子である。仮想計算機20にユーザIDが関連付けられているユーザは、例えば、その仮想計算機20が割り当てられているユーザである。以下の説明において、仮想計算機20にユーザのユーザIDが関連付けられていることを、「仮想計算機20にユーザが関連付けられている」とも表記することにする。なお、本実施形態では、一つの仮想計算機20とユーザは一対一で関連付けられている。しかし、一つの仮想計算機20に複数のユーザが関連付けられていてもよい。また、一人のユーザが複数の仮想計算機20に関連付けられていてもよい。
仮想計算機20の「接続状態」は、例えば、仮想計算機20とその仮想計算機20に関連付けられているユーザが使用する端末装置3との間の接続の状態を表す。仮想計算機20の接続状態は、例えば、「切断」、「接続」、あるいは「未使用」である。「切断」、「接続」、及び「未使用」は、あらかじめ定められた異なる値であればよい。「切断」は、仮想計算機20とその仮想計算機20に関連付けられているユーザが使用する端末装置3との間の接続が、切断されていることを表す。「接続」は、仮想計算機20とその仮想計算機20に関連付けられているユーザが使用する端末装置3との間が、接続されていることを表す。「未使用」は、仮想計算機20に関連付けられているユーザがいないことを表す。
例えば、端末装置3が仮想計算機20に接続した場合に、その仮想計算機20の接続状態は変化する。例えば、端末装置3が仮想計算機20に対する接続を切断した場合、その仮想計算機20の接続状態は変化する。また、例えば、要求実行部25が、端末装置3に接続されている仮想計算機20に、退避準備指示を送信した場合にも、その仮想計算機20の接続状態は変化する。
仮想計算機20の接続状態が変化した場合、例えば、接続状態が変化した仮想計算機20が、接続状態を、例えば状態取得部24に送信すればよい。状態取得部24は、いずれかの仮想計算機20から接続状態を受信した場合、その接続状態を送信した仮想計算機20に関連付けて、受信した接続状態を状態送信部26に送信すればよい。後述されるように、状態送信部26は、受信した、仮想計算機20に関連付けられた接続状態を、状態受信部16に送信する。仮想計算機20に関連付けられた接続状態を受信した状態受信部16は、状態記憶部10に格納されている、その仮想計算機20の接続状態を更新する。すなわち、仮想計算機20から接続状態を受信した状態取得部24は、状態送信部26及び状態受信部16を介して、状態記憶部10に格納されている、その仮想計算機20の接続状態を更新する。
仮想計算機20の「場所」は、仮想計算機20がコンピュータとして動作するために使用するメモリにロードされるデータが存在する場所を表す。仮想計算機20が退避させられていない場合、仮想計算機20がコンピュータとして動作するために使用するメモリにロードされるデータは、仮想計算機実行装置2のメモリに存在する。その場合、仮想計算機20の「場所」の値は、例えば「メモリ」である。仮想計算機20が退避させられている場合、仮想計算機20がコンピュータとして動作するために使用するメモリにロードされるデータは、仮想計算機記憶部23に格納されている。その場合、仮想計算機20の「場所」の値は、例えば「ディスク」である。このように、仮想計算機20の「場所」は、例えば、「メモリ」又は「ディスク」である。「メモリ」及び「ディスク」は、あらかじめ定められた互いに異なる値であればよい。
例えば退避部22が、仮想計算機20を退避させた場合及び仮想計算機20を復帰させた場合に、退避又は復帰が行われた仮想計算機20の「場所」を状態送信部26に送信すればよい。仮想計算機20の「場所」を受信した状態送信部26は、受信した、仮想計算機20の「場所」を、状態受信部16に送信する。後述されるように、仮想計算機20の「場所」を状態受信部16は、状態記憶部10に格納されている、その仮想計算機20の「場所」を更新する。
使用リソース量は、仮想計算機実行装置2のリソースのうち、その仮想計算機20が使用しているリソースの量である。仮想計算機実行装置2は、仮想計算機20が使用するリソースの量は、あらかじめ定められた複数の量のいずれかから選択するよう設定されていてもよい。その場合、あらかじめ定められた量を表す値のいずれかであればよい。
例えば、仮想計算機実行部21が、各仮想計算機20のリソース量を特定すればよい。仮想計算機実行部21は、特定した各仮想計算機20のリソース量を、状態取得部24に送信すればよい。そして、状態取得部24は、特定した各仮想計算機20のリソース量を、状態送信部26に送信すればよい。仮想計算機20のリソース量を受信した状態送信部26は、受信したリソース量を、そのリソース量のリソースを使用する仮想計算機20に関連付けて状態受信部16に送信すればよい。状態受信部16は、状態記憶部10に格納されている使用リソース量を更新すればよい。各仮想計算機20の使用リソース量は、あらかじめ定められていてもよい。その場合、例えば仮想計算機実行装置2の管理者が、各仮想計算機20の使用リソース量を、あらかじめ状態記憶部10に格納しておけばよい。
動作状態は、例えば、「アイドル状態」及び「処理中」である。動作状態は、例えば、仮想計算機20に接続されている端末装置3のユーザによる、その仮想計算機20に対する操作が、継続しているか否かを表す。「アイドル状態」は、例えば、所定時間以上仮想計算機20に対するユーザの操作が無いことを表す。「処理中」は、例えば、過去所定時間以内に仮想計算機20に対するユーザの操作があったことを表す。動作状態は、他の定義によって定められていてもよい。
例えば、仮想計算機実行部21が、各仮想計算機20の動作状態を特定すればよい。仮想計算機実行部21は、特定した各仮想計算機20の動作状態を、状態送信部26に送信すればよい。あるいは、状態取得部24が、各仮想計算機20から動作状態を取得してもよい。その場合、例えば各仮想計算機20が、状態取得部24に動作状態を送信すればよい。そして、状態取得部24が、各仮想計算機20の動作状態を、状態送信部26に送信すればよい。
次に、ユーザ管理装置4について説明する。
認証部41は、端末装置3が仮想計算機20に接続する場合に、例えば仮想計算機20からの要求に基づき、端末装置3を使用するユーザの認証を行う。認証部41は、ユーザが未使用であった仮想計算機20を使用し始める場合だけでなく、端末装置3が、接続が切断されている仮想計算機20に再接続する場合にも、ユーザの認証を行う。
そして、認証部41は、行った認証に関する記録、すなわち認証記録をログ記憶部40に格納する。認証記録は、例えば、認証が行われたユーザのユーザIDと認証が行われた時間情報を含む。時間情報は、例えば、日付、時間、曜日などを含んでいればよい。認証記録は、認証が行われた仮想計算機20の仮想計算機IDを含んでいてもよい。
認証の結果が成功であった場合、ユーザが使用する端末装置3は、仮想計算機20に接続する。従って、結果が成功であった認証に関する記録は、仮想計算機20に対する接続の記録である。認証部41は、認証の結果が成功であった場合にのみ、上述の認証記録を、ログ記憶部40に格納してもよい。あるいは、認証部41は、認証の結果をさらに含む、上述の認証記録を、ログ記憶部40に格納してもよい。
認証部41は、さらに、ユーザの認証が行われた後、そのユーザが使用する端末装置3と仮想計算機20との間の接続が切断された時刻を、ログ記憶部40に格納してもよい。その場合、端末装置3によって接続が切断された仮想計算機20は、例えば、接続を切断した端末装置3のユーザのユーザIDと切断が行われた時刻とを認証部41に送信すればよい。そして、認証部41は、例えば、受信したユーザID及び時刻と、そのユーザID及び時刻を送信した仮想計算機20の仮想計算機IDとに基づき、どの認証の結果に基づき行われた接続が切断されたか特定すればよい。認証部41は、特定した認証の認証記録として、接続が切断された時刻をログ記憶部40に格納すればよい。
ログ記憶部40は、上述の認証記録を記憶する。上述のように、結果が成功であった認証に関する記録は、仮想計算機20に対する接続の記録である。また、端末装置3が仮想計算機20に接続された場合、端末装置3のユーザは、仮想計算機20を利用する。従って、上述の認証記録は、ユーザによる仮想計算機20の利用記録でもある。認証記録が、認証が行われた時刻と、接続が切断された時刻とを含む場合、それらの時刻に基づきユーザが仮想計算機20を利用していた時間帯を特定することができる。
次に、仮想計算機管理装置1について説明する。
状態記憶部10は、各仮想計算機20の状態を、仮想計算機20の識別子である仮想計算機IDに関連付けて記憶する。状態記憶部10は、各仮想計算機20の状態を、各仮想計算機20の状態を含むテーブルである状態テーブルの形で記憶していてもよい。
前述のように、仮想計算機20の状態は、例えば、その仮想計算機20に関連付けられているユーザの識別子である「ユーザID」と、仮想計算機20の「接続状態」と、仮想計算機20の「場所」を含む。仮想計算機20の状態は、仮想計算機20の「使用リソース量」を含んでいてもよい。仮想計算機20の状態は、仮想計算機20の「動作状態」を含んでいてもよい。仮想計算機20の状態は、さらに、仮想計算機20の優先順位を含む。仮想計算機20の優先順位は、後述されるように、優先順位決定部14によって決定される。
図3は、状態記憶部10が記憶する状態テーブルの例を表す図である。図3に示す例では、状態テーブルは、仮想計算機IDと、ユーザIDと、接続状態と、使用リソース量と、動作状態と、場所と、優先順位とを含む。図3に示す例では、使用リソース量は、「高」と「低」の2つの状態値によって表される。その場合、それぞれの状態値は、リソースの種類及びリソースの量を表す数値の組み合わせ一つ以上に、関連付けられていればよい。
図4は、状態記憶部10が記憶する状態テーブルにおける使用リソース量の部分の例を表す図である。図4に示す例では、使用リソース量は、メモリの容量及びプロセッサの数によって表されている。使用リソース量は、例えば、メモリの容量だけによって表されていてもよい。
状態受信部16は、状態送信部26が送信する上述の各仮想計算機20の状態を受信する。状態受信部16は、受信した各仮想計算機20の状態を、状態記憶部10に格納する。状態受信部16は、前述の状態テーブルを更新すればよい。
状態受信部16は、さらに、状態送信部26から、仮想計算機実行装置2の状態を受信する。状態受信部16が受信する仮想計算機実行装置2の状態は、上述の、未使用リソースの量である。状態受信部16は未使用リソースの量を不足特定部12に送信する。
優先順位決定部14は、ログ記憶部40に格納されている、仮想計算機20に対して行われた接続の記録に基づき、各仮想計算機20の優先順位を決定する。優先順位決定部14は、仮想計算機20に対して決定した優先順位を、その仮想計算機20に関連付けて状態記憶部10に格納する。
前述のように、本実施形態では、仮想計算機20とユーザは、一対一に対応付けられている。そのため、優先順位決定部14は、ユーザに対して決定された優先順位を、そのユーザに関連付けられている仮想計算機20の優先順位にしてもよい。
その場合、優先順位決定部14は、まず、例えば仮想計算機20に対する接続の頻度に応じて、各ユーザの優先順位を決定すればよい。優先順位決定部14は、例えば、接続の頻度が多いユーザほど優先順位が高くなるように、各ユーザの優先順位を決定する。接続の頻度は、例えば、過去の一定期間において集計された、ユーザ毎の接続の回数である。接続の頻度は、例えば、過去の一定期間において曜日別に集計された、ユーザ毎の接続の回数であってもよい。接続の頻度は、例えば、過去の一定期間において時間帯別に集計された、ユーザ毎の接続の回数であってもよい。接続の頻度は、例えば、過去の一定期間において時間帯別に集計された、ユーザ毎の、ユーザが仮想計算機20を利用していた回数であってもよい。
そして、優先順位決定部14は、仮想計算機20の優先順位がその仮想計算機20に関連付けられているユーザの優先順位に等しくなるように、各仮想計算機20の優先順位を決定すればよい。
一方、情報処理システム100が、仮想計算機20とユーザが必ずしも一対一で関連付けられないよう設計されている場合もある。
そのような場合、優先順位決定部14は、例えば、過去の一定期間において仮想計算機20毎に集計された、仮想計算機20に対する接続の頻度に基づき、仮想計算機20の優先順位を決定すればよい。優先順位決定部14は、例えば、接続の頻度が多い仮想計算機20ほど優先順位が高くなるよう、各仮想計算機20の優先順位を決定すればよい。接続の頻度は、例えば、過去の一定期間において曜日別に集計された、仮想計算機20毎の接続の回数であってもよい。接続の頻度は、例えば、過去の一定期間において時間帯別に集計された、仮想計算機20毎の接続の回数であってもよい。接続の頻度は、例えば、過去の一定期間において時間帯別に集計された、仮想計算機20毎の、仮想計算機20を利用していたユーザの人数であってもよい。
優先順位が曜日によって異なる場合、優先順位決定部14は、曜日が変わるのに応じて優先順位を決定し、決定した優先順位を状態記憶部10に格納すればよい。優先順位が時間帯によって異なる場合、優先順位決定部14は、時間帯が変わるのに応じて優先順位を決定し、決定した優先順位を状態記憶部10に格納すればよい。
優先順位決定部14は、ユーザに対して決定された優先順位であるユーザ優先順位を、状態記憶部10に格納してもよい。
図5は、状態記憶部10に格納されるユーザ優先順位の例を表す図である。
優先順位決定部14は、さらに、ユーザ優先順位を決定する過程において集計した集計値などのユーザの接続に関するデータ値を、ユーザ優先順位を決定するために使用したデータ値を、状態記憶部10に格納してもよい。
図6は、状態記憶部10に格納される、ユーザの接続に関するデータ値の例を表す図である。図6に示す例では、状態記憶部10に格納されるデータ値は、ユーザ優先順位を決定する日の前の週における、各ユーザのログオンの有無と、各日のログオン回数とを含む。
要求受信部11は、端末装置3から、仮想計算機20に対する接続要求を受信する。要求受信部11は、受信した接続要求によって接続を要求された仮想計算機20である、接続先仮想計算機を特定する。接続情報は、接続先仮想計算機を特定できるデータ値を含んでいればよい。
接続先仮想計算機を特定できるデータ値は、例えば、ユーザIDであってもよい。その場合、要求受信部11は、例えば、接続要求に含まれるユーザIDに関連付けられている仮想計算機20を、接続先仮想計算機として特定する。この場合、接続要求に含まれるユーザIDに関連付けられている仮想計算機20が存在しなければ、要求受信部11は、例えば、未使用である仮想計算機20のいずれかを、接続先仮想計算機として選択する。その際、要求受信部11は、「場所」が「メモリ」である仮想計算機20から接続先仮想計算機を選択すればよい。「場所」が「メモリ」である仮想計算機20が存在しなければ、要求受信部11は、「場所」が「ディスク」である仮想計算機20から接続先仮想計算機を選択すればよい。
接続要求は、ユーザIDと仮想計算機IDの双方を含んでいてもよい。その場合、要求受信部11は、接続要求に含まれる仮想計算機IDによって特定される仮想計算機20を接続先仮想計算機として選択すればよい。接続要求に含まれる仮想計算機IDによって特定される仮想計算機20が存在しない場合、要求受信部11は、未使用である仮想計算機20のいずれかを、接続先仮想計算機として前述のように選択すればよい。
要求受信部11は、未使用である仮想計算機20のいずれかを接続先仮想計算機として選択した場合、ユーザIDを、選択した接続先仮想計算機に関連付けて、状態記憶部10に格納する。要求受信部11は、例えば、状態記憶部10に格納されている状態テーブルにおいて、選択した接続先仮想計算機に関連付けられているユーザIDを更新すればよい。
不足特定部12は、受信した未使用リソースの量と、状態記憶部10に格納されている、接続先仮想計算機の使用リソース量とに基づき、不足リソース量を特定する。不足リソース量は、接続先仮想計算機以外の各仮想計算機20のデータが存在する「場所」を変更せずに、接続先仮想計算機を動作させた場合に不足する、仮想計算機実行装置2のリソースの量である。例えば、接続先仮想計算機が退避させられている場合に、接続先仮想計算機を復帰させると、接続先仮想計算機が使用するリソースを新たに接続先仮想計算機にわりあてる必要がある。接続先仮想計算機の使用リソース量が、未使用リソース量より少ない場合、未使用リソースから接続先仮想計算機が使用するリソースを割り当てることができる。従って、不足リソース量はゼロである。一方、接続先仮想計算機の使用リソース量が、未使用リソース量より多い場合、接続先仮想計算機の使用リソース量から未使用リソース量を引いた量のリソースが不足する。接続先仮想計算機の「場所」が「メモリ」であれば、接続先仮想計算機は退避させられていない。従って、接続先仮想計算機を復帰させる必要はない。よって、接続先仮想計算機に新たにリソースを割り当てる必要はない。そのため、不足リソース量はゼロである。
選択部13は、不足リソース量がゼロでない場合、各仮想計算機20の優先順位に基づき、退避させる仮想計算機20を選択する。上述のように、選択部13によって選択される仮想計算機20が、選択仮想計算機と表記である。
選択部13は、仮想計算機20の接続状態や動作状態に基づき、選択仮想計算機の使用リソース量の合計が、不足リソース量を上回るように、「場所」が「メモリ」である仮想計算機20の中から1台以上の選択仮想計算機を選択すればよい。
選択部13は、仮想計算機20の接続状態や動作状態に基づき、各仮想計算機20に、状態順位を付与してもよい。そして、選択部13は、状態順位を更に使用して、選択仮想計算機を選択してもよい。状態順位は、例えば、仮想計算機20が退避された場合に、その仮想計算機20に関連付けられているユーザが受ける影響の大きさの程度を表す順位である。選択部13は、例えば下記の方法で、仮想計算機20に状態順位を付与してもよい。選択部13は、他の方法で、仮想計算機20に状態順位を付与してもよい。
例えば、仮想計算機20の接続状態が「未使用」である場合、その仮想計算機20に関連付けられているユーザは存在しない。従って、接続状態が「未使用」である仮想計算機20が退避されても、ユーザは影響を受けない。選択部13は、接続状態が「未使用」である仮想計算機20に、最も低い状態順位を付与すればよい。
接続状態が「接続」である仮想計算機20のユーザは、端末装置3を介して仮想計算機20において操作を継続している可能性がある。一方、接続状態が「切断」である仮想計算機20は端末装置3に接続されていない。そのため、接続状態が「切断」である仮想計算機20のユーザが、端末装置3を介して仮想計算機20において操作を継続している可能性はない。従って、仮想計算機20を退避させた場合におけるユーザの影響は、接続状態が「切断」である仮想計算機20と比べて、接続状態が「接続」である仮想計算機20の方が大きい。選択部13は、接続状態が「切断」である仮想計算機20に対して、接続状態が「接続」である仮想計算機20の状態順位より低い状態順位を付与すればよい。
また、動作状態が「処理中」である仮想計算機20のユーザは、仮想計算機20において操作を継続している。一方、動作状態が「アイドル状態」である仮想計算機20のユーザは、少なくとも所定時間以上、仮想計算機20において操作を行っていない。従って、仮想計算機20を退避させた場合におけるユーザの影響は、動作状態が「アイドル状態」である仮想計算機20と比べて、動作状態が「処理中」である仮想計算機20の方が大きい。選択部13は、動作状態が「アイドル状態」である仮想計算機20に対して、動作状態が「処理中」である仮想計算機20の状態順位より低い状態順位を付与すればよい。
選択部13は、場所が「メモリ」である仮想計算機20の中で、状態順位が最も低い仮想計算機20を選択の対象とする。そして、選択部13は、選択の対象である仮想計算機20から、例えば以下のように、選択仮想計算機を選択する。
選択部13は、選択の対象である仮想計算機20の中で最も優先順位が低い仮想計算機20を選択仮想計算機として選択する。最も優先順位が低い仮想計算機20が複数存在する場合、選択部13は、最も優先順位が低い仮想計算機20のうちいずれかを選択する。
既に選択されている選択仮想計算機の使用リソース量の合計が不足リソース量より大きい場合、選択部13は、選択仮想計算機の選択を終了する。既に選択されている選択仮想計算機の使用リソース量の合計が不足リソース量より小さい場合、選択部13は、選択の対象である仮想計算機20の中から、優先順位が低い順に、選択仮想計算機の選択を繰り返せばよい。
選択の対象である仮想計算機20を全て選択しても、選択されている選択仮想計算機の使用リソース量の合計が不足リソース量より小さい場合、選択部13は、選択の対象である仮想計算機20に、状態順位が2番目に低い仮想計算機20を追加する。選択部13は、新たな選択の対象である仮想計算機20から、選択仮想計算機を、上述のように選択する。
選択部13は、選択されている選択仮想計算機の使用リソース量の合計が不足リソース量より大きくなるまで、選択仮想計算機の選択と選択の対象である仮想計算機20の追加を繰り返せばよい。
上述のように状態順位が各仮想計算機20に付与されている場合、選択仮想計算機は、まず、接続状態が「未使用」であり、場所が「メモリ」である仮想計算機20から選択される。選択仮想計算機が更に選択される場合、選択仮想計算機は、次に、接続状態が「切断」であり、場所が「メモリ」である仮想計算機20から選択される。選択仮想計算機が更に選択される場合、選択仮想計算機は、次に、接続状態が「接続」であり、動作状態が「アイドル状態」であり、場所が「メモリ」である仮想計算機20から選択される。
選択部13は、他の方法で、選択仮想計算機を選択してもよい。
選択部13は、選択仮想計算機を選択した場合、選択仮想計算機の識別子を、出力部15に送信する。また、選択部13は、接続先仮想計算機の識別子を、出力部15に送信する。
出力部15は、選択仮想計算機の識別子を受信した場合、受信した選択仮想計算機の識別子を仮想計算機実行装置2の要求実行部25に送信する。また、出力部15は、接続要求を送信した端末装置3の識別子と、接続先仮想計算機の識別子とを、要求実行部25に送信する。
出力部15は、例えば選択仮想計算機の識別子に関連付けて、その選択仮想計算機が退避の対象であることを表すデータ値を、要求実行部25に送信してもよい。要求実行部25は、受信した仮想計算機20の識別子に、その仮想計算機20が退避の対象であることを表すデータ値が関連付けられている場合、その仮想計算機20は退避の対象である選択仮想計算機であると判定すればよい。出力部15は、接続先仮想計算機の識別子に関連付けて、その接続先仮想計算機が接続要求に基づく接続先であることを表すデータ値を、要求実行部25に送信してもよい。要求実行部25は、受信した仮想計算機20の識別子に、その仮想計算機20が接続要求に基づく接続先であることを表すデータ値であることを表すデータ値が関連付けられている場合、その仮想計算機20は接続先仮想計算機であると判定すればよい。
出力部15は、選択仮想計算機の識別子を、端末装置3の識別子に関連付けずに、要求実行部25に送信してもよい。出力部15は、接続先仮想計算機の識別子を、端末装置3の識別子に関連付けて、要求実行部25に送信してもよい。そして、要求実行部25は、受信した仮想計算機20の識別子に端末装置3の識別子に関連付けられていない場合、その仮想計算機20は選択仮想計算機であると判定すればよい。要求実行部25は、受信した仮想計算機20の識別子に端末装置3の識別子に関連付けられている場合、その仮想計算機20は接続先仮想計算機であると判定すればよい。そして、要求実行部25は、その識別子によって特定される端末装置3が、接続要求を送信した端末装置3であると認識すればよい。
なお、仮想計算機管理装置1と仮想計算機実行装置2とが同一の装置である場合、出力部15と、状態受信部16と、状態送信部26とは存在しなくてもよい。その場合、選択部13は、接続先仮想計算機の識別子と選択仮想計算機の識別子と端末装置3の識別子とを、出力部15ではなく要求実行部25に送信すればよい。また、退避部22、状態取得部24、及び仮想計算機実行部21は、各仮想計算機20の状態を、状態送信部26に送信する代わりに、状態記憶部10に書き込めばよい。さらに、状態取得部24は、未使用リソース量を、状態送信部26ではなく、不足特定部12に送信すればよい。
次に、本実施形態の仮想計算機管理装置1の動作について、図面を参照して詳細に説明する。
図7は、本実施形態の仮想計算機管理装置1の動作の例を表すフローチャートである。
まず、要求受信部11が、端末装置3から接続要求を受信する(ステップS101)。
要求受信部11は、受信した接続要求によって接続が要求された仮想計算機20である、接続先仮想計算機を特定する(ステップS102)。
選択部13は、特定された接続先仮想計算機が動作中であるか否かを判定する(ステップS103)。選択部13は、状態記憶部10に格納されている状態テーブルにおいて、接続先仮想計算機の「場所」が「メモリ」であれば、接続先仮想計算機が動作中であると判定すればよい。接続先仮想計算機の「場所」が「メモリ」である場合、接続先仮想計算機は退避させられていないので、端末装置3は、そのまま接続先仮想計算機にアクセスすることができる。
接続先仮想計算機が動作中である場合(ステップS103においてYes)、選択部13は、例えば出力部15を介して、接続先仮想計算機の識別子を、仮想計算機実行装置2に送信する(ステップS109)。
ステップS103において、選択部13は、状態記憶部10に格納されている状態テーブルにおいて、接続先仮想計算機の「場所」が「ディスク」であれば、接続先仮想計算機が動作中でないと判定すればよい。接続先仮想計算機の「場所」が「ディスク」である場合、接続先仮想計算機は退避させられている。その場合、端末装置3が接続先仮想計算機にアクセスするためには、接続先仮想計算機を復帰させる必要がある。
接続先仮想計算機が動作中でない場合(ステップS103においてNo)、不足特定部12は、例えば状態送信部26及び状態受信部16を介して、状態取得部24から、仮想計算機実行装置2の未使用リソース量を受信する(ステップS104)。
不足特定部12は、例えば、状態送信部26及び状態受信部16を介して、状態取得部24に未使用リソース量を要求すればよい。状態取得部24は、未使用リソース量の要求に応じて、未使用リソース量を取得し、取得した未使用リソース量を、例えば状態送信部26及び状態受信部16を介して、不足特定部12に送信すればよい。状態取得部24は、定期的に未使用リソース量を取得し、取得した未使用リソース量を、例えば状態送信部26及び状態受信部16を介して、不足特定部12に送信してもよい。
不足特定部12は、仮想計算機実行装置2が接続先仮想計算機を動作させるために不足するリソース量である、不足リソース量を特定する(ステップS105)。すなわち、不足特定部12は、仮想計算機実行装置2が、退避させられている接続先仮想計算機を復帰させた場合に不足する仮想計算機実行装置2のリソース量を特定する。
不足リソース量がゼロである場合、すなわち、リソースが不足しない場合(ステップS106においてNo)、仮想計算機管理装置1の動作は、ステップS109に進む。
不足リソース量がゼロでない場合、すなわち、リソースが不足する場合(ステップS106においてYes)、仮想計算機管理装置1の動作は、ステップS107に進む。
選択部13は、上述のようにして、不足リソース量と、動作中の仮想計算機20の優先順位とに基づき、退避させる仮想計算機20を、動作中の仮想計算機20から選択する(ステップS107)。前述のように、動作中の仮想計算機20は、退避させられていない仮想計算機20である。状態記憶部10が記憶する状態テーブルにおいて、動作中の仮想計算機20の「場所」は、「メモリ」である。前述のように、退避させる仮想計算機20として選択された仮想計算機20は、選択仮想計算機と表記される。
選択部13は、例えば出力部15を介して、選択された選択仮想計算機の識別子を、仮想計算機実行装置2に送信する(ステップS108)。
次に、端末装置3が仮想計算機管理装置1に接続要求を送信した場合における、本実施形態の仮想計算機実行装置2の動作について、図面を参照して詳細に説明する。
図8は、本実施形態の仮想計算機実行装置2の動作の例を表すフローチャートである。端末装置3が仮想計算機管理装置1に接続要求を送信した場合、仮想計算機管理装置1が選択仮想計算機を選択していれば、仮想計算機管理装置1は選択仮想計算機の識別子を送信する。仮想計算機管理装置1は、さらに、接続先仮想計算機の識別子と、接続要求を送信した端末装置3の識別子とを送信する。
まず、要求実行部25は、仮想計算機管理装置1の選択部13から、例えば出力部15を介して、選択仮想計算機の識別子を受信する(ステップS201)。
上述のように、仮想計算機実行装置2が接続先仮想計算機を動作させるために、動作中の仮想計算機20のいずれかを退避させる必要がある場合、仮想計算機管理装置1は、退避させる仮想計算機20として、選択仮想計算機を選択する。仮想計算機管理装置1が選択仮想計算機を選択していれば、仮想計算機管理装置1は選択仮想計算機の識別子を送信する。
動作中の仮想計算機20を退避させなくても接続先仮想計算機が動作する場合、仮想計算機管理装置1は、選択仮想計算機を選択しない。仮想計算機管理装置1が選択仮想計算機を選択していなければ、仮想計算機管理装置1は選択仮想計算機の識別子を送信しない。
要求実行部25が選択仮想計算機の識別子を受信しなかった場合(ステップS202においてNo)、仮想計算機実行装置2の動作は、ステップS204に進む。
要求実行部25が選択仮想計算機の識別子を受信した場合(ステップS202においてYes)、要求実行部25は、退避部22に、退避指示と選択仮想計算機の識別子とを送信する。
退避指示と選択仮想計算機の識別子とを受信した退避部22は、選択仮想計算機を仮想計算機記憶部23に退避させる(ステップS203)。仮想計算機実行装置2の動作は、ステップS203の後、ステップS204に進む。
ステップS204において、要求実行部25は、接続先仮想計算機の識別子と、端末装置3の識別子とを受信する(ステップS204)。
接続先仮想計算機が仮想計算機記憶部23に退避させられている場合(ステップS205においてYes)、要求実行部25は、退避部22に、復帰指示と接続先仮想計算機の識別子とを送信する。
復帰指示と接続先仮想計算機の識別子とを受信した退避部22は、接続先仮想計算機を復帰させる(ステップS206)。仮想計算機実行装置2の動作は、ステップS206の後、ステップS207に進む。
接続先仮想計算機が仮想計算機記憶部23に退避させられていない場合(ステップS205においてNo)、仮想計算機実行装置2の動作は、ステップS207に進む。
ステップS207において、要求実行部25は、接続要求を受信した端末装置3と接続先仮想計算機とを接続する(ステップS207)。
要求実行部25は、例えば、接続要求を受信した端末装置3に接続先仮想計算機の識別子を送信することによって、接続要求を受信した端末装置3と接続先仮想計算機とを接続すればよい。仮想計算機20の識別子を受信した端末装置3は、その仮想計算機20に接続すればよい。
次に、仮想計算機20について、図面を参照して詳細に説明する。
図9は、本実施形態の仮想計算機20の構成の例を表すブロック図である。図9を参照すると、仮想計算機20では、ゲストOS202が動作している。ゲストOS202は、仮想計算機20のOSである。また、仮想計算機20において、エージェント201が動作している。エージェント201は、ゲストOS202の制御下で動作するとソフトウェアソフトウェアである。仮想計算機20において、仮想計算機20を使用するユーザが起動したアプリケーションプログラムが動作していてもよい。エージェント201は、以下で述べるログオフ検出部203と、切断部204と、通知部205として動作する。
図10は、本実施形態の仮想計算機20の機能構成の例を表すブロック図である。図10には、さらに、仮想計算機管理装置1と、仮想計算機実行装置2と、端末装置3と、端末装置3が描かれている。ただし、図10では、状態記憶部10及び状態受信部16以外の仮想計算機管理装置1の構成要素は省略されている。さらに、仮想計算機20と、状態取得部24と、状態送信部26以外の仮想計算機実行装置2の構成要素は省略されている。
図10を参照すると、仮想計算機20は、ログオフ検出部203と、通信切断部204と、通知部205とを含む。
ログオフ検出部203は、端末装置3が仮想計算機20に送信するログオフ要求を検出する。
切断部204は、端末装置3が仮想計算機20に送信したログオフ要求が検出されると、仮想計算機20と端末装置3との間の接続を切断する。
通知部205は、仮想計算機20と端末装置3との間の接続が切断された場合、状態取得部24に対して、仮想計算機20と端末装置3との間の接続が切断されたことを通知する。
前述のように、仮想計算機20と端末装置3との間の接続が切断されたことを受信した状態取得部24は、状態送信部26及び状態受信部16を介して、状態記憶部10に格納されている、その仮想計算機20の接続状態を更新する。
図11は、本実施形態の仮想計算機20の機能構成の例を表すブロック図である。図11に示す例では、仮想計算機管理装置1は、仮想計算機実行装置2に含まれている。
仮想計算機管理装置1が仮想計算機実行装置2に含まれている場合、仮想計算機20と端末装置3との間の接続が切断されたことを受信した状態取得部24は、状態記憶部10に格納されている、その仮想計算機20の接続状態を、直接更新してもよい。
次に、仮想計算機20がログオフ要求を受信する際の、仮想計算機20の動作について、図面を参照して詳細に説明する。
図12は、ログオフ要求受信時における仮想計算機20の動作の例を表すフローチャートである。
まず、ログオフ検出部203が、端末装置3から送信されるログオフ要求を検出する(ステップS301)。ログオフ要求が検出されない場合(ステップS302においてNo)、ログオフ検出部203はログオフ要求の検出を継続する(ステップS301)。
ログオフ要求が検出された場合(ステップS302においてYes)、切断部204は、仮想計算機20と端末装置3との間の接続を切断する(ステップS303)。端末装置3がログオフ要求を送信しても、仮想計算機20はログオフの処理を行わない。
仮想計算機20と端末装置3との間の接続が切断されると、通知部205は、状態取得部24に対して、仮想計算機20と端末装置3との間の接続が切断されたことを通知する(ステップS304)。
仮想計算機20と端末装置3との間の接続が切断されたことを受信した状態取得部24は、状態送信部26及び状態受信部16を介して、状態記憶部10に格納されている、その仮想計算機20の接続状態を更新する。仮想計算機管理装置1が仮想計算機実行装置2に含まれている場合、仮想計算機20と端末装置3との間の接続が切断されたことを受信した状態取得部24は、状態記憶部10に格納されている、その仮想計算機20の接続状態を、直接更新してもよい。
以上で説明した本実施形態には、必要とするリソースが必ずしも同一でない仮想計算機20を実行する仮想計算機実行装置2がリソース不足になることなく、仮想計算機20へのログオン時における処理による負荷を削減することができるという効果がある。
その理由は、不足特定部12が、接続要求によって接続が要求された接続先仮想計算機が仮想計算機実行装置2において動作する場合に不足する、仮想計算機実行装置2のリソース量を算出するからである。そして、選択部13が、不足するリソース量と、仮想計算機20の優先順位に基づき、接続先仮想計算機が動作しても仮想計算機実行装置2がリソース不足にならないように退避させる仮想計算機20を選択するからである。
端末装置3を介して仮想計算機20を使用するユーザが、その仮想計算機20からログオフする代わりに、その仮想計算機20と端末装置3との間の接続を切断することができる。その場合、ユーザは仮想計算機20からログオフしていないので、ユーザが次にその仮想計算機20を使用する際、仮想計算機20はログオンに伴う処理を行う必要がない。すなわち、ログオン時における処理による負荷を削減することができる。
しかし、ユーザがログオンした状態で動作を続ける仮想計算機20が増加すると、仮想計算機20を実行する仮想計算機実行装置2のリソースが不足するおそれがある。
仮想計算機20を仮想計算機記憶部23に退避させる退避部22が、仮想計算機実行装置2のリソースが不足しないように仮想計算機20を退避させることができれば、仮想計算機実行装置2のリソースは不足しない。例えば、端末装置3が接続を要求した接続先仮想計算機が退避させられている場合、仮想計算機実行装置2の未使用リソースが不十分であれば、接続先仮想計算機を復帰させるとリソースが不足する。リソース不足を防ぐために、接続先仮想計算機を復帰させる代わりに、いずれかの仮想計算機20を退避させる場合、退避させる仮想計算機20が使用するリソースより接続先仮想計算機が使用するリソースが多ければ、リソースが不足するおそれがある。
一方、選択部13は、仮想計算機20を退避させずに仮想計算機実行装置2を復帰させることにより不足するリソースより、仮想計算機20を退避させることにより使用されなくなるリソースが多くなるよう、退避させる仮想計算機20を選択する。従って、選択部13が選択した選択仮想計算機を退避させることにより、退避させられている接続先仮想計算機を復帰させても、仮想計算機実行装置2のリソースは不足しない。その場合、仮想計算機20が使用するリソースの量が異なっていても、仮想計算機実行装置2のリソースは不足しない。
<第2の実施形態>
次に、本発明の第2の実施形態について、図面を参照して詳細に説明する。
図13は、本実施形態の仮想計算機管理装置1Aの構成を表す図である。
図13を参照すると、仮想計算機管理装置1Aは、仮想計算機記憶部23に仮想計算機20を退避させることができる仮想計算機実行装置2が実行する仮想計算機20に関して、当該仮想計算機20が使用するリソース量と、前記仮想計算機20の優先順位とを記憶する状態記憶部10と、前記仮想計算機10のうち接続先仮想計算機への接続要求を受信する要求受信部11と、前記仮想計算機実行装置2において検出された未使用リソース量と、前記仮想計算機記憶部23に退避させられている前記接続先仮想計算機が使用するリソース量とに基づき、前記接続先仮想計算機を復帰させた場合の不足リソース量を特定する不足特定部12と、前記優先順位に基づき、退避させられていない前記仮想計算機20から選択仮想計算機を、前記選択仮想計算機が使用する前記リソース量の合計が前記不足リソースより大きくなるように選択する選択部13と、を備える。前述のように、仮想計算機実行装置2は、単に「実行装置2」とも表記される。
以上で説明した本実施形態には、第1の実施形態と同じ効果がある。その理由は、第1の実施形態の効果が生じる理由と同じである。
仮想計算機管理装置1、仮想計算機管理装置1A、仮想計算機実行装置2、仮想計算機実行装置2Aは、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
図14は、仮想計算機管理装置1、仮想計算機管理装置1A、仮想計算機実行装置2、仮想計算機実行装置2Aを実現することができる、コンピュータ1000の構成の一例を表す図である。図14を参照すると、コンピュータ1000は、プロセッサ1001と、メモリ1002と、記憶装置1003と、I/O(Input/Output)インタフェース1004とを含む。また、コンピュータ1000は、記録媒体1005にアクセスすることができる。メモリ1002と記憶装置1003は、例えば、RAM(Random Access Memory)、ハードディスクなどの記憶装置である。記録媒体1005は、例えば、RAM、ハードディスクなどの記憶装置、ROM(Read Only Memory)、可搬記録媒体である。記憶装置1003が記録媒体1005であってもよい。プロセッサ1001は、メモリ1002と、記憶装置1003に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ1001は、I/Oインタフェース1004を介して、例えば、端末装置3や、ユーザ管理装置4にアクセスすることができる。プロセッサ1001は、記録媒体1005にアクセスすることができる。記録媒体1005には、コンピュータ1000を、仮想計算機管理装置1、仮想計算機管理装置1A、仮想計算機実行装置2、又は仮想計算機実行装置2Aとして動作させるプログラムが格納されている。
プロセッサ1001は、記録媒体1005に格納されている、コンピュータ1000を、仮想計算機管理装置1、仮想計算機管理装置1A、仮想計算機実行装置2、又は仮想計算機実行装置2Aとして動作させるプログラムを、メモリ1002にロードする。そして、プロセッサ1001が、メモリ1002にロードされたプログラムを実行することにより、コンピュータ1000は、仮想計算機管理装置1、仮想計算機管理装置1A、仮想計算機実行装置2、又は仮想計算機実行装置2Aとして動作する。
要求受信部11、不足特定部12、選択部13、優先順位決定部14、出力部15、仮想計算機実行部21、退避部22、状態取得部24、要求実行部25、状態送信部26は、例えば、プログラムを記憶する記録媒体1005からメモリ1002に読み込まれた、各部の機能を実現することができる専用のプログラムと、そのプログラムを実行するプロセッサ1001により実現することができる。また、状態記憶部10、仮想計算機記憶部23は、コンピュータ1000が含むメモリ1002やハードディスク装置等の記憶装置1003により実現することができる。あるいは、状態記憶部10、要求受信部11、不足特定部12、選択部13、優先順位決定部14、出力部15、仮想計算機実行部21、退避部22、仮想計算機記憶部23、状態取得部24、要求実行部25、状態送信部26の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。