(57)【要約】【課題】準仮想化ＯＳ内の時間の進み方を途中で変更しても変更直前の時刻と変更直後の時刻との連続性を維持する。【解決手段】ハイパーバイザ１１０が、準仮想化ＯＳ１３１の論理時間の進行速度を変更する際に、準仮想化ＯＳ１３１が時刻算出に用いる基準時刻とそのときのカウンタ１０３の値である基準カウンタ値を変更後の進行速度に対応させて更新して、新たな基準時刻と新たな基準カウンタ値を指定し、以降は、準仮想化ＯＳ１３１は、新たな基準時刻と新たな基準カウンタ値とを用いて現在の時刻を算出する。このため、準仮想化ＯＳ内の時間の進行速度を途中で変更しても変更直前の時刻と変更直後の時刻との連続性を維持することができる。【選択図】図１
2014174863.tif 000002
【特許請求の範囲】
【請求項１】
準仮想化された準仮想化ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、ハイパーバイザとを備え、
ハードウェア資源として、前記準仮想化ＯＳと前記ハイパーバイザとを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置と、前記ＣＰＵの動作クロック周期に基づいてカウンタ値を更新するフリーランカウンタとを備える、
準仮想化方式の仮想計算機システムであって、
前記ハイパーバイザは、前記ＣＰＵによって実行されて、
実時間とは時間の進行速度が異なる論理時間での時刻をカウンタ値から算出する際に用いられる、論理時間での基準の時刻を基準時刻として指定し、
前記基準時刻を指定した時点のカウンタ値である基準カウンタ値を特定し、
前記論理時間での時刻をカウンタ値から算出するための係数値を指定し、
前記記憶装置は、
前記基準時刻と、前記基準カウンタ値と、前記係数値とを記憶し、
前記準仮想化ＯＳは、前記ＣＰＵによって実行されて、
前記記憶装置から、前記基準時刻と、前記基準カウンタ値と、前記係数値とを読み出し、
前記カウンタから、現在のカウンタ値を読み出し、
前記基準時刻と、前記基準カウンタ値と、前記係数値と、現在のカウンタ値とを用いて、前記論理時間での現在の時刻を算出し、
前記ハイパーバイザは、
前記仮想計算機システムに、前記係数値の変更を要求する変更要求が入力された場合に、
前記記憶装置から、前記基準時刻と、前記基準カウンタ値と、前記係数値とを読み出し、
前記フリーランカウンタから、現在のカウンタ値を読み出し、
現在のカウンタ値から前記基準カウンタ値を減算し、減算値に変更前の係数値を乗算し、乗算値を前記基準時刻に加算し、加算値を新たな基準時刻として指定し、
現在のカウンタ値を新たな基準カウンタ値として指定し、
変更後の係数値を新たな係数値として指定し、
前記記憶装置は、
前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値とを記憶し、
前記準仮想化ＯＳは、
前記仮想計算機システムに前記係数値の変更要求が入力された後は、
前記記憶装置から、前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値とを読み出し、
前記フリーランカウンタから、現在のカウンタ値を読み出し、
前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値と、現在のカウンタ値とを用いて、前記論理時間での現在の時刻を算出することを特徴とする仮想計算機システム。
【請求項２】
前記仮想計算機システムは、
ハードウェア資源として、タイマーを備え、  前記準仮想化ＯＳは、
前記ハイパーバイザに対して、前記ハイパーバイザにより呼び出される前記準仮想化ＯＳ内の関数をコールバック関数として指定するとともに、コールバック関数の呼び出しタイミングを前記論理時間にて指定し、
前記ハイパーバイザは、
前記係数値を用いて、前記準仮想化ＯＳにより指定された前記呼び出しタイミングに対応する、実時間での時刻をタイマー通知時刻として算出し、
前記タイマー通知時刻が到来した際に前記タイマーから通知されるように前記タイマーに前記タイマー通知時刻を設定し、
前記タイマーからの通知があった際に、前記準仮想化ＯＳにより指定されたコールバック関数を呼び出すことを特徴とする請求項１に記載の仮想計算機システム。
【請求項３】
前記ハイパーバイザは、
前記論理時間における前記呼び出しタイミングまでの時間を前記係数値で除算し、除算値を実時間での現在時刻に加算し、加算値を前記タイマー通知時刻とすることを特徴とする請求項２に記載の仮想計算機システム。
【請求項４】
前記ハイパーバイザは、
前記タイマーに前記タイマー通知時刻を設定した後であって前記タイマーからの通知がある前に、前記仮想計算機システムに、前記係数値の変更を要求する変更要求が入力された場合に、
前記記憶装置から、前記係数値を読み出し、
前記タイマー通知時刻から実時間での現在時刻を減算し、減算値に変更前の係数値を乗算し、乗算値を変更後の係数値で除算し、除算値を実時間での現在時刻に加算し、加算値を新たなタイマー通知時刻とし、
前記新たなタイマー通知時刻が到来した際に前記タイマーから通知されるように前記タイマーに前記新たなタイマー通知時刻を設定し、
前記タイマーからの通知があった際に、前記準仮想化ＯＳにより指定されたコールバック関数を呼び出すことを特徴とする請求項３に記載の仮想計算機システム。
【請求項５】
前記仮想計算機システムは、
前記ＣＰＵによって実行されて、前記準仮想化ＯＳを管理する管理用ＯＳを備え、
前記ハイパーバイザは、
前記仮想計算機システムに前記変更要求が入力された場合に、
前記新たな係数値を前記管理用ＯＳには反映させないことを特徴とする請求項１に記載の仮想計算機システム。
【請求項６】
前記仮想計算機システムは、
前記ＣＰＵによって実行されて、前記準仮想化ＯＳを管理する管理用ＯＳを備え、
前記ハイパーバイザは、
前記管理用ＯＳ内の関数を呼び出すためのタイマー通知時刻が前記タイマーに設定されている場合に、前記仮想計算機システムに前記変更要求が入力されても、前記管理用ＯＳ内の関数に対しては新たなタイマー通知時刻の計算及び設定を行わないことを特徴とする請求項４に記載の仮想計算機システム。
【請求項７】
前記管理用ＯＳが、
ハイパーバイザコールを発行して、前記係数値の変更要求を前記ハイパーバイザに通知することを特徴とする請求項５又は６に記載の仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実時間とは時間の進行速度が異なる論理時間における時間の進行を管理する技術に関する。
【背景技術】
【０００２】
計算機における時間進行を、実時間での進行よりも速めることにより、例えば実時間で１ヶ月分の時間経過に相当する試験を数日間で実現する方法が提案されている。
従来の時間進行制御方式は、加速係数を用いてタイマーからＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）へのタイマー割り込みの間隔を短縮し、さらに加速係数に応じた時刻の補正により、時間進行の加速を行っていた（例えば、特許文献１、特許文献２）。
また、１台の計算機上で複数のソフトウェアプラットフォームを動作させ、それぞれのソフトウェアプラットフォームで時間進行の加速を行う方法も提案されている（例えば、特許文献３）。
また、仮想計算機を実行するための支援機能を備えたＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）として、例えばＩｎｔｅｌ（登録商標）社製のＩＡ−３２ＣＰＵがあり、各物理ＣＰＵへのタイマー割り込み機能（非特許文献１）、フリーランカウンタ機能（非特許文献２）、仮想化支援機能（非特許文献３）がある。
タイマー割込み間隔を元にＯＳ内の時間を算出する場合、時間の粒度はタイマー周期の間隔より細かくならない。
例えば、１０ミリ秒周期のタイマー割込み回数を元に時間を算出している場合は、１０ミリ秒よりも短いミリ秒単位の時間を算出することができない。
そこで、例えばＣＰＵのコアクロックの周期のように、タイマー割込みよりさらに細かい周期でカウントアップするフリーランカウンタのカウントアップ周期を元に、時間を算出することも行われる。
この場合でも、フリーランカウンタのカウントアップ周期から時間を算出するためのパラメータを変えることにより、時間を加速する事は可能である。
計算機ハードウェアを忠実に模擬する仮想化（完全仮想化）の場合は、ハイパーバイザ（あるいは仮想マシンモニタとも呼ぶ）が、タイマーのエミュレーション処理で設定されたタイマー割込み時間に対し時間の加速割合にしたがって短縮させて仮想計算機に割り込みを上げる、あるいはフリーランカウンタの値を加速割合にしたがって増加させた値を返すことで対応可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１−３０９１３６号公報
【特許文献２】特開２００４−３８３５０号公報
【特許文献３】特開平９−１７１４５８号公報
【非特許文献】
【０００４】
【非特許文献１】「Ｉｎｔｅｌ（登録商標）  ７  Ｓｅｒｉｅｓ／Ｃ２１６  Ｃｈｉｐｓｅｔ  Ｆａｍｉｌｙ  Ｐｌａｔｆｏｒｍ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ  （ＰＣＨ）  Ｄａｔａｓｈｅｅｔ」、Ｉｎｔｅｌ（登録商標）  Ｃｏｒｐｏｒａｔｉｏｎ、Ｏｒｄｅｒ  Ｎｕｍｂｅｒ：  ３２６７７６−００３、Ｊｕｎｅ  ２０１２、「５．７  ８２５４  Ｔｉｍｅｒｓ」
【非特許文献２】「Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ」、「Ｖｏｌｕｍｅ  ３（３Ａ，３Ｂ  ＆  ３Ｃ）：  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ」、Ｉｎｔｅｌ（登録商標）  Ｃｏｒｐｏｒａｔｉｏｎ、Ｏｒｄｅｒ  Ｎｕｍｂｅｒ：  ３２５３８４−０４４ＵＳ、Ａｕｇｕｓｔ  ２０１２、「１７．１３  ＴＩＭＥ−ＳＴＡＭＰ  ＣＯＵＮＴＥＲ」、Ｏｒｄｅｒ  Ｎｕｍｂｅｒ：  ３２５３８４−０４４ＵＳ
【非特許文献３】「Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ」、「Ｖｏｌｕｍｅ  ３（３Ａ，３Ｂ  ＆  ３Ｃ）：  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ」、Ｉｎｔｅｌ（登録商標）  Ｃｏｒｐｏｒａｔｉｏｎ、Ｏｒｄｅｒ  Ｎｕｍｂｅｒ：  ３２５３８４−０４４ＵＳ、Ａｕｇｕｓｔ  ２０１２、「ＣＨＡＰＴＥＲ  ２４  ＶＩＲＴＵＡＬ−ＭＡＣＨＩＮＥ  ＣＯＮＴＲＯＬ  ＳＴＲＵＣＴＵＲＥＳ」、Ｏｒｄｅｒ  Ｎｕｍｂｅｒ：  ３２５３８４−０４４ＵＳ
【発明の概要】
【発明が解決しようとする課題】
【０００５】
計算機仮想化においては、Ｈ／Ｗ（ハードウェア）の動作を忠実にエミュレーションする完全仮想化と、ゲストＯＳに対して仮想化に適した改造を行いエミュレーションオーバーヘッドの削減する準仮想化の方式がある。
時間に関連する仮想Ｈ／Ｗ処理では、フリーランカウンタおよびタイマーの準仮想化がこれに関連する。
タイマーの準仮想化に関しては、タイマーのハードウェアをエミュレーションするのではなく、ハイパーバイザに対して設定時間後にゲストＯＳの関数をコールバックするよう設定を行い、コールバック関数内でタイマー割込み発生時に行う処理を実行する。
また、フリーランタイマについては、物理フリーランカウンタから読み出したデータと、ハイパーバイザから渡されるデータを元に、ゲストＯＳが時間を算出する。
ハイパーバイザから渡されるデータは、物理フリーランカウンタの値を時間に換算するためのパラメータ、およびフリーランカウンタから時刻を求める際に基準となるフリーランカウンタ値とそのときの時刻のパラメータからなる。
【０００６】
このようなフリーランカウンタ値を元にした時間の算出を準仮想化した場合、ハイパーバイザにおいてゲストＯＳの時間加速を行うには、フリーランカウンタの値を時間に換算するためのパラメータを変更する必要がある。
しかし、単純にこのパラメータを書き換えるだけでは、途中で時間の加速割合を変更した場合に、変更直前の時刻と変更直後の時刻でゲストＯＳ上の時間が連続しなくなるという課題が発生する。
【０００７】
この発明はこうした課題を解決することを主な目的としており、準仮想化ＯＳ内の時間の進行速度を途中で変更しても変更直前の時刻と変更直後の時刻との連続性を維持することを主な目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る仮想計算機システムは、
準仮想化された準仮想化ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、ハイパーバイザとを備え、
ハードウェア資源として、前記準仮想化ＯＳと前記ハイパーバイザとを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置と、前記ＣＰＵの動作クロック周期に基づいてカウンタ値を更新するフリーランカウンタとを備える、
準仮想化方式の仮想計算機システムであって、
前記ハイパーバイザは、前記ＣＰＵによって実行されて、
実時間とは時間の進行速度が異なる論理時間での時刻をカウンタ値から算出する際に用いられる、論理時間での基準の時刻を基準時刻として指定し、
前記基準時刻を指定した時点のカウンタ値である基準カウンタ値を特定し、
前記論理時間での時刻をカウンタ値から算出するための係数値を指定し、
前記記憶装置は、
前記基準時刻と、前記基準カウンタ値と、前記係数値とを記憶し、
前記準仮想化ＯＳは、前記ＣＰＵによって実行されて、
前記記憶装置から、前記基準時刻と、前記基準カウンタ値と、前記係数値とを読み出し、
前記カウンタから、現在のカウンタ値を読み出し、
前記基準時刻と、前記基準カウンタ値と、前記係数値と、現在のカウンタ値とを用いて、前記論理時間での現在の時刻を算出し、
前記ハイパーバイザは、
前記仮想計算機システムに、前記係数値の変更を要求する変更要求が入力された場合に、
前記記憶装置から、前記基準時刻と、前記基準カウンタ値と、前記係数値とを読み出し、
前記フリーランカウンタから、現在のカウンタ値を読み出し、
現在のカウンタ値から前記基準カウンタ値を減算し、減算値に変更前の係数値を乗算し、乗算値を前記基準時刻に加算し、加算値を新たな基準時刻として指定し、
現在のカウンタ値を新たな基準カウンタ値として指定し、
変更後の係数値を新たな係数値として指定し、
前記記憶装置は、
前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値とを記憶し、
前記準仮想化ＯＳは、
前記仮想計算機システムに前記係数値の変更要求が入力された後は、
前記記憶装置から、前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値とを読み出し、
前記フリーランカウンタから、現在のカウンタ値を読み出し、
前記新たな基準時刻と、前記新たな基準カウンタ値と、前記新たな係数値と、現在のカウンタ値とを用いて、前記論理時間での現在の時刻を算出することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ハイパーバイザが、準仮想化ＯＳの論理時間の進行速度を変更する際に、準仮想化ＯＳが時刻算出に用いる基準時刻とそのときのフリーランカウンタの値である基準カウンタ値を変更後の進行速度に対応させて更新して、新たな基準時刻と新たな基準カウンタ値を指定し、以降は、準仮想化ＯＳは、新たな基準時刻と新たな基準カウンタ値とを用いて現在の時刻を算出する。
このため、準仮想化ＯＳ内の時間の進行速度を途中で変更しても変更直前の時刻と変更直後の時刻との連続性を維持することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係る物理計算機の構成例を示す図。
【図２】実施の形態１に係る仮想計算機管理データの例を示す図。
【図３】実施の形態１に係るタイマーデータの例を示す図。
【図４】実施の形態１に係る仮想計算機起動時の時刻仮想化処理を示すフローチャート図。
【図５】実施の形態１に係る時刻算出処理を示すフローチャート図。
【図６】実施の形態１に係るタイマー設定処理を示すフローチャート図。
【図７】実施の形態１に係る時間加速割合設定処理を示すフローチャート図。
【発明を実施するための形態】
【００１１】
実施の形態１．
本実施の形態では、タイマー割込みよりさらに細かい周期である、ＣＰＵのコアクロック周期（動作クロック周期）に基づいてカウントアップするフリーランカウンタを用い、フリーランカウンタのカウントアップ周期を元に論理時間における現在時刻を算出する構成を説明する。
そして、本実施の形態では、フリーランカウンタのカウントアップ周期から論理時間上の時刻を算出するためのパラメータを変えることにより、論理時間上の時間を加速することができる。
【００１２】
計算機を仮想化した場合は、ハイパーバイザ（あるいは仮想マシンモニタとも呼ぶ）が、タイマーのエミュレーション処理で設定されたタイマー割込み時間に対し時間の加速割合に従って短縮させて仮想計算機に割り込みを上げる、あるいはフリーランカウンタの値を加速割合にしたがって増加させた値を返すことで対応可能である。
【００１３】
計算機仮想化においては、ハードウェア（Ｈ／Ｗとも表記する）の動作を忠実にエミュレーションする完全仮想化と、ゲストＯＳに対して仮想化に適した改造を行い、エミュレーションオーバーヘッドを削減する準仮想化の方式がある。
時間に関連する仮想Ｈ／Ｗ処理では、フリーランカウンタおよびタイマーの準仮想化がこれに関連する。
タイマーの準仮想化に関しては、タイマーのハードウェアをエミュレーションするのではなく、ハイパーバイザに対して設定時間後にゲストＯＳの関数をコールバックするよう設定を行い、コールバック関数内でタイマー割込み発生時に行う処理を実行する。
また、フリーランカウンタについては、物理フリーランカウンタから読み出したデータと、ハイパーバイザから渡されるデータを元に、ゲストＯＳが論理時間における時刻を算出する。
ハイパーバイザから渡されるデータは、物理フリーランカウンタのカウンタ値を論理時間上の時刻に換算するためのパラメータ、および物理フリーランカウンタのカウンタ値から論理時間上の時刻を求める際に基準となるフリーランカウンタ値とそのときの時刻のパラメータからなる。
【００１４】
このようなフリーランカウンタ値を元にした時間の算出を準仮想化した場合、ハイパーバイザにおいてゲストＯＳの時間加速を行うには、フリーランカウンタの値を時間に換算するためのパラメータを変更する必要がある。
しかし、単純にこのパラメータを書き換えるだけでは、論理時間が進行している途中で時間の加速割合を変更した場合に、変更直前の時刻と変更直後の時刻でゲストＯＳ上の時間が連続しなくなるという事態が発生する。
【００１５】
本実施の形態では、準仮想化方式の仮想計算機システムにおいて、（１）フリーランカウンタのカウンタ値を用いて、論理時間における時間の進行を微細な粒度で管理する方式、（２）論理時間が進行している途中で論理時間の進行を加速させても、論理時間上の時間の進行が不連続にならない方式を説明する。
【００１６】
図１は、本実施の形態に係る時間進行制御方式のブロック図である。
【００１７】
図１において、物理計算機１００は、ハードウェア資源として、ＣＰＵ１０１、タイマー１０２、フリーランカウンタ１０３（以下、単にカウンタ１０３とも表記する）、ディスクやネットワークのコントローラ１０４などを備える。
そして、物理計算機１００は、これらのハードウェア資源を用いて、ハイパーバイザ１１０、管理用仮想計算機１２０、仮想計算機１３０を実行する。
なお、図１に示す物理計算機１００は、仮想計算機システムの例に相当する。
【００１８】
タイマー１０２は、設定した時間経過後に割り込みを発生させるＨ／Ｗで、例えば非特許文献１に記したものである。
【００１９】
フリーランカウンタ１０３は、ソフトウェアの動作に関わらず絶えず一定速度でカウントアップするカウンタで、例えば非特許文献２に記したものである。
前述のように、フリーランカウンタ１０３は、ＣＰＵの動作クロック周期に基づいてカウンタ値を更新する。
「ＣＰＵの動作クロック周期に基づいてカウンタ値を更新する」とは、ＣＰＵの動作クロック周期と同期してカウンタ値を更新する場合や、ＣＰＵの動作クロック周期の２倍、１０倍等の長さの間隔でカウンタ値を更新する場合を含む。
【００２０】
コントローラ１０４は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などのネットワークやハードディスク装置との間でデータを受け渡しするためのコントローラである。
【００２１】
仮想計算機１３０は、物理計算機１００上でハイパーバイザ１１０（あるいはＶＭモニターとも呼ばれる）によって制御される一つ以上の仮想的な計算機である。
【００２２】
準仮想化ＯＳ１３１は、仮想計算機１３０上で実行されるＯＳで、仮想計算機として動作させるための改造（準仮想化と呼ぶ）をしたものである。
準仮想化では、ハイパーバイザ１１０に対する呼び出し（ハイパーバイザコール）を行うことにより、仮想化処理を実現する。
【００２３】
時刻算出処理部１３２は準仮想化ＯＳ１３１内で論理時間における時刻を求める。
【００２４】
タイマー処理部１３３は、準仮想化ＯＳ１３１内でタイマーを設定する。
より具体的には、タイマー処理部１３３は、ハイパーバイザ１１０に対してハイパーバイザコールにより指定した時間経過後に準仮想化ＯＳ１３１内の関数をコールバックするよう設定する。
【００２５】
管理用仮想計算機１２０は、ハイパーバイザ１１０に対してハイパーバイザコールを発行して、仮想計算機１３０の作成、消去などの管理、およびコントローラ１０４を制御して、物理ディスク、物理ネットワークへのアクセスを行う。
【００２６】
時間加速割合設定コマンド１２１は、利用者が仮想計算機１３０の時間加速割合を設定するために使用するコマンドである。
【００２７】
管理用ＯＳ１２２は、管理用仮想計算機の上で実行するＯＳである。
【００２８】
時間加速割合設定ドライバ１２３は、時間加速割合設定コマンド１２１から渡される時間加速割合を、ハイパーバイザコールによりハイパーバイザ１１０に渡すためのドライバである。
【００２９】
ハイパーバイザ１１０は、仮想計算機１３０を管理し、ＣＰＵやメモリ等の物理リソースの割り当て、ハイパーバイザコールの受け付けを行う。
【００３０】
時間加速設定処理部１１１は、時間加速割合設定ドライバ１２３から渡された時間加速割合を元に、仮想計算機管理データ１４０の時間に関連するデータの更新、タイマーデータ１６０の更新、時間加速割合１５０の設定を行う。
【００３１】
時刻仮想化処理部１１２は、ハイパーバイザ１１０内で、時刻を準仮想化するための処理を行う。
より具体的には、時刻仮想化処理部１１２は、ハイパーバイザ１１０が仮想計算機１３０を起動した場合などに呼び出され、仮想計算機管理データ１４０の時間関連のデータの設定を行う。
【００３２】
タイマー仮想化処理部１１３は、仮想計算機１３０からハイパーバイザコールによりタイマーを設定する。
より具体的には、タイマー仮想化処理部１１３は、タイマーデータ１６０のデータの設定とタイマー１０２の設定を行う。
【００３３】
記憶装置１０５は、データやプログラムを記憶するハードウェアであり、図１では記憶装置１０５に格納されている時間関連データの一例を示している。
【００３４】
仮想計算機管理データ１４０は、ハイパーバイザ１１０が仮想計算機１３０を管理するためのデータを保持し、例えば仮想計算機１３０が使用しているＣＰＵ、メモリに関連する情報を保持する。
仮想計算機１３０上で時間を管理するための情報もここに含む。
【００３５】
時間加速割合１５０は、仮想計算機１３０での論理時間の進行を、実際の時間（実時間）の進行の何倍にするかを保持するデータである。
時間加速を行っていない場合は予め１が設定されている。
【００３６】
タイマーデータ１６０は、タイマー仮想化処理部１１３が準仮想化ＯＳ１３１にタイマー通知を行うために管理するデータである。
【００３７】
本実施の形態では、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である主記憶装置及び磁気ディスク装置やフラッシュメモリ等の二次記憶装置をまとめて、記憶装置１０５としている。
ハイパーバイザ１１０、管理用仮想計算機１２０及び仮想計算機１３０のプログラムコードは、例えば、二次記憶装置に記憶されており、実行の際に主記憶装置にロードされ、ＣＰＵ１０１により主記憶装置から読み込まれ、実行される。
また、ハイパーバイザ１１０、管理用仮想計算機１２０及び仮想計算機１３０の実行により得られたパラメータ、情報、データ、数値等が記憶装置１０５やＣＰＵ１０１内のレジスタに記憶される。
また、物理計算機１００には、入出力装置や通信装置を含む各種のデバイスが装備されていてもよい。
【００３８】
以下では、ハイパーバイザ１１０、管理用仮想計算機１２０、仮想計算機１３０及びこれらの要素が「〜する」という説明を行うが、これらの説明は、「ＣＰＵ１０１が〜する」と同義である。
つまり、本明細書では、ソフトウェアが動作主体として記述されていても、その記述は、ＣＰＵ１０１によるプログラムの実行により処理が行われていることを表している。
【００３９】
図２は実施の形態１における仮想計算機管理データ１４０の具体例を示す。
仮想計算機管理データ１４０は、時間管理に関連するデータを保持する。
【００４０】
図２において、時間換算乗数１４１は、カウンタ１０３の増分値を論理時間に換算する場合の乗数である。
例えば、カウンタ１０３が２ＧＨｚの速さでカウントアップする場合、時間換算乗数１４１が１／２であればナノ秒単位の時間に換算される。
【００４１】
基準時間におけるカウンタ値１４３には、あるタイミングにおけるカウンタ１０３の値を格納する。
より具体的には、基準時間におけるカウンタ値１４３は、後述の基準時間１４２を指定した時点でのカウンタ１０３のカウンタ値であり、基準カウンタ値の例に相当する。
【００４２】
基準時間１４２は、基準時間におけるカウンタ値１４３に値を設定したときの仮想計算機１３０内の論理時間における時刻を表すデータを格納する。
例えば仮想計算機１３０を起動してからの時間をナノ秒単位で設定する。
基準時間１４２は、論理時間での時刻をカウンタ１０３のカウンタ値から算出する際に用いられる、論理時間での基準の時刻であり、基準時刻の例に相当する。
基準時間１４２および基準時間におけるカウンタ値１４３は、任意のタイミングで設定してよい。
【００４３】
図３は実施の形態１におけるタイマーデータ１６０の内容を示す図である。
タイマー通知時刻１６１は、準仮想化ＯＳ１３１内のタイマー処理部１３３からタイマー通知を要求された時刻に対応する実時間における時刻を格納する。
コールバック関数１６２は、タイマー通知としてハイパーバイザ１１０が呼び出す準仮想化ＯＳ１３１内の関数である。
【００４４】
次に動作について説明する。
図４は仮想計算機１３０を起動したときの時刻仮想化処理部１１２の動作を示すフローチャートである。
ハイパーバイザ１１０が仮想計算機１３０を起動する際、この処理を実行する。
【００４５】
Ｓ４０１において、時刻仮想化処理部１１２は、起動する仮想計算機１３０に対応する仮想計算機管理データ１４０に対して、Ｓ４０２以後に示す設定処理を行う。
【００４６】
Ｓ４０２において、時刻仮想化処理部１１２は、時間換算乗数１４１を設定する。
この値は、予め求めておいた時間加速を行わない場合の時間換算乗数の値に、時間加速割合１５０の値を乗じたものを設定する。
ただし、管理用仮想計算機１２０の場合は、時間加速割合は常に１として算出する。
なお、時間換算乗数１４１は、論理時間での時刻をカウンタ値から算出するため値であり、係数値の例に相当する。
【００４７】
Ｓ４０３において、時刻仮想化処理部１１２は、基準時間１４２に仮想計算機の時間算出の基準となる時刻（論理時間における時刻）を設定する。
この基準時間とは、例えば仮想計算機を起動した時を０とする、あるいは特定の日時を０として、そこから現在までの時間を例えばナノ秒単位で表した値などである。
【００４８】
Ｓ４０４において、時刻仮想化処理部１１２は、基準時間１４２を設定したときのカウンタ１０３のカウンタ値を基準時間におけるカウンタ値１４３として設定する。
【００４９】
図５は、準仮想化ＯＳ１３１の中で時刻算出処理部１３２が時刻を算出する場合の動作を示すフローチャートである。
【００５０】
Ｓ５０１において、時刻算出処理部１３２がアプリケーションプログラムから現在時刻を求めるシステムコールの発行などにより、呼び出される。
【００５１】
Ｓ５０２において、時刻算出処理部１３２は、現在のカウンタ１０３の値、自仮想計算機の管理データ１４０の中の時間換算乗数１４１、基準時間１４２、基準時間におけるカウンタ値１４３を読み出す。
【００５２】
Ｓ５０３において、時刻算出処理部１３２は、Ｓ５０２で読み出した現在のカウンタ１０３の値から基準時間におけるカウンタ値１４３を減算し、減算値に時間換算乗数１４１を乗算し、得られた値を基準時間１４２に加算し、得られた結果を論理時間における現在時刻として呼び出し元に返す。
【００５３】
図６は、準仮想化ＯＳ１３１の中でタイマー処理部１３３がタイマーの設定を行う場合の動作を示すフローチャートである。
【００５４】
Ｓ６０１において、アプリケーションプログラムがシステムコールを用いてタイマーを設定する、あるいは準仮想化ＯＳ１３１内の処理によりタイマーを設定することにより、タイマー処理部１３３が呼び出される。
【００５５】
Ｓ６０２において、タイマー処理部１３３は、ハイパーバイザ１１０に対してハイパーバイザコールを行い、コールバック関数の呼び出しタイミングを指定する。
すなわち、タイマー処理部１３３は、指定した経過時間後に指定した関数をコールバックするよう設定する。
なお、タイマー処理部１３３は、コールバック関数の呼び出しタイミングを、論理時間上の時間で指定する。
【００５６】
Ｓ６０３において、ハイパーバイザコールによりタイマー仮想化処理部１１３が呼び出され、タイマー仮想化処理部１１３は、タイマー処理部１３３により指定された経過時間後の実時間上の時刻を算出し、タイマーデータ１６０にその時刻をタイマー通知時刻１６１として、また、タイマー処理部１３３により指定されたコールバック関数をコールバック関数１６２に設定する。
タイマー通知時刻を算出する際には、Ｓ６０２で渡された経過時間を時間加速割合１５０により除算しておく。
ただし、管理用仮想計算機１２０の場合は、時間加速割合は常に１として算出する。
【００５７】
Ｓ６０４において、タイマー仮想化処理部１１３は、タイマー通知時刻１６１の中から最も近い将来に通知時刻が来るものを選び、タイマー１０２にその時刻に到達したら割込みを発生させるよう設定する。
【００５８】
Ｓ６０５において、Ｓ６０４において設定した時刻に到達してタイマー１０２から割込みが入ってきたら、タイマー仮想化処理部１１３は、タイマーデータ１６０の中から現在時刻以前のタイマー通知時刻１６１のものを選び出し、それに該当するコールバック関数１６２を呼び出す。
Ｓ６０６において、タイマー仮想化処理部１１３は、Ｓ６０５で処理したタイマー通知時刻１６１とコールバック関数１６２のエントリを削除する。
【００５９】
図７は、時間加速割合を変更する場合の動作を示すフローチャートである。
【００６０】
Ｓ７０１において、利用者が、時間加速割合設定コマンド１２１を用いて、時間加速割合の変更要求として、変更後の時間加速割合を設定する。
【００６１】
Ｓ７０２において、時間加速割合設定コマンド１２１は、システムコールを管理用ＯＳ１２２に対して発行し、管理用ＯＳ１２２の中の時間加速割合設定ドライバ１２３に変更後の時間加速割合を伝える。
【００６２】
Ｓ７０３において、時間加速割合設定ドライバ１２３は、ハイパーバイザコールをハイパーバイザ１１０に対して発行し、変更後の時間加速割合を時間加速設定処理部１１１に伝える。
【００６３】
Ｓ７０４において、時間加速設定処理部１１１は、各仮想計算機管理データ１４０に対して、カウンタ１０３の現在の値から基準時間におけるカウンタ値１４３の値を減算し、減算値に時間換算乗数１４１の値を乗算し、乗算値を基準時間１４２に加算し、その値を新たな基準時間１４２として設定する。
そして、カウンタ１０３の現在の値を、新たに、基準時間におけるカウンタ値１４３に設定する。
【００６４】
Ｓ７０５において、時間加速設定処理部１１１は、各仮想計算機管理データ１４０に対して、時間加速しない場合の時間換算乗数の値にＳ７０３で渡された時間加速割合１５０を乗じた値を、新たな時間換算乗数１４１の値として設定する。
ただし、管理用仮想計算機１２０の場合は、時間加速割合は常に１として算出する。
【００６５】
Ｓ７０６において、時間加速設定処理部１１１は、各タイマー通知時刻１６１から実時間での現在時刻を減算し、得られた値を変更前の時間加速割合１５０で乗算し（論理時間上の残り時間に戻す）、それをＳ７０３で渡された時間加速割合で除算し（実時間に変換する）、除算値に現在時刻（実時間）を加算したものを、新たなタイマー通知時刻１６１として設定する。
ただし、管理用仮想計算機１２０の場合は、時間加速割合は常に１として算出する。
【００６６】
Ｓ７０７において、時間加速設定処理部１１１は、各仮想計算機管理データ１４０に対して、時間加速割合１５０の値をＳ７０３で渡された値に設定する。
【００６７】
Ｓ７０４で設定された基準時間１４２、基準時間におけるカウンタ値１４３、Ｓ７０５で設定された時間換算乗数１４１、Ｓ７０７で設定された時間加速割合１５０の値が記憶装置１０５で記憶され、図５の処理が行われる場合には、Ｓ７０４で設定された基準時間１４２、基準時間におけるカウンタ値１４３、Ｓ７０５で設定された時間換算乗数１４１が用いられる。
【００６８】
以上のように、時間加速割合を変更する際に、準仮想化ＯＳが使用する時間算出に用いるパラメータである基準時間とそのときのカウンタの値を更新し、時間換算乗数を時間加速割合に合わせて更新し、タイマーデータのタイマー通知時刻を時間加速割合に合わせて更新しているので、仮想計算機の起動後に途中で時間加速割合を変更しても、準仮想化ＯＳ内での時間の進行に支障がない。
また、仮想計算機上のＯＳを変更すること無く実現できる。
さらに、物理計算機上で動作している複数の仮想計算機を同時に時間加速することが可能である。
なお、管理用仮想計算機を時間加速の対象外とすることができるので、物理Ｉ／Ｏに対するタイムアウト制御に関して時間加速による影響を排除することが可能である。
【００６９】
以上、本実施の形態では、以下の手段を備えた、準仮想化方式の仮想計算機システムを説明した。
（ａ）管理用仮想計算機から、準仮想化したＯＳの時間進行の加速割合を設定する手段
（ｂ）ハイパーバイザ内で、準仮想化したＯＳの時間の進行を加速する手段
（ｃ）ハイパーバイザ内で、準仮想化したＯＳのタイマー処理を加速する手段
【００７０】
また、上記の（ｂ）ハイパーバイザ内の準仮想化したＯＳの時間進行を加速する手段では、ハイパーバイザ内の時間加速設定処理において、準仮想化したＯＳに渡す時間算出に用いるパラメータを、時間加速割合設定変更時に時間加速割合に応じて更新することを説明した。
【００７１】
また、上記の時間算出に用いるパラメータの更新では、管理用仮想計算機に対しては時間加速割合を反映させないことを説明した。
【００７２】
また、上記の（ｃ）準仮想化したＯＳのタイマー処理を加速する手段では、ハイパーバイザ内の時間加速設定処理において、ハイパーバイザが管理するタイマーのデータを、時間加速割合に応じて更新することを説明した。
【００７３】
また、上記のタイマーのデータの更新では、管理用仮想計算機に対しては時間加速割合を反映させないことを説明した。
【００７４】
また、上記の（ａ）時間進行の加速割合を設定する手段では、管理用計算機内のコマンドが、管理用ＯＳ内のドライバに対して加速割合を指定し、管理用ＯＳ内のドライバがハイパーバイザコールを発行してハイパーバイザ内の時間加速設定処理に加速割合を指定することを説明した。
【００７５】
以上、本発明の実施の形態について説明したが、本実施の形態で説明した機能、処理を部分的に実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００７６】
１００  物理計算機、１０１  ＣＰＵ、１０２  タイマー、１０３  カウンタ、１０４  コントローラ、１０５  記憶装置、１１０  ハイパーバイザ、１１１  時間加速設定処理部、１１２  時刻仮想化処理部、１１３  タイマー仮想化処理部、１２０  管理用仮想計算機、１２１  時間加速割合設定コマンド、１２２  管理用ＯＳ、１２３  時間加速割合設定ドライバ、１３０  仮想計算機、１３１  準仮想化ＯＳ、１３２  時刻算出処理部、１３３  タイマー処理部、１４０  仮想計算機管理データ、１５０  時間加速割合、１６０  タイマーデータ。
【図１】
2014174863.tif 000003
【図２】
2014174863.tif 000004
【図３】
2014174863.tif 000005
【図４】
2014174863.tif 000006
【図５】
2014174863.tif 000007
【図６】
2014174863.tif 000008
【図７】
2014174863.tif 000009