(57)【特許請求の範囲】
【請求項１】
メモリと、前記メモリ上に展開されたプログラムを実行するプロセッサと、を備え、前
記プロセッサによって、ＯＳ上に複数の仮想マシンを動作させる仮想化計算機であって、
前記プロセッサは、
各仮想マシンの処理実行時の所定の命令を検出する実マシン命令検出処理と、
前記実マシン命令検出処理によって命令を検出した複数の前記仮想マシンのうち、同期
すべき前記仮想マシンからの命令を同時に実行させる命令実行処理と、を実行し、
前記プロセッサはさらに、
前記実マシン命令検出処理によって第１の仮想マシンからの命令を検出すると、所定の
時間タイマを設定する命令要求実行処理と、
設定された前記タイマの時間が経過すると、前記第１の仮想マシンと同期すべき第２の
仮想マシンからの命令が検出されているかを確認する命令比較処理と、とを実行し、
前記第２の仮想マシンからの命令が検出されていた場合には、前記命令実行処理では、
前記第１の仮想マシン、及び、前記第２の仮想マシンからの命令を同時に実行させることを特徴とする仮想計算機システム。
【請求項２】
請求項１において、
前記メモリには、前記命令要求実行処理によって書き込まれるテーブルであって、いず
れの前記仮想マシンからの命令を検出したかを記憶する仮想マシン状態管理テーブルが記
憶され、
前記命令比較処理では、前記仮想マシン状態管理テーブルを参照して、前記第１の仮想
マシンと同期すべき第２の仮想マシンからの命令が検出されているかを確認することを特
徴とする仮想計算機システム。
【請求項３】
請求項２において、
前記命令比較処理では、前記タイマの時間が経過した際に、前記第２の仮想マシンから
の命令が検出されていなかった場合には、前記仮想マシン状態管理テーブルに前記第２の
仮想マシンが非同期であることを書き込むことを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関する。
【背景技術】
【０００２】
クライアントやサーバは、従来より、実マシン（物理マシン）に各々構築され、実ネットワークによって実マシン間で通信経路を確立する構成であった。そのような実マシンの構成に対し信頼性を向上させる提案がなされている。
【０００３】
現在では、仮想環境制御技術により同じ実マシンに複数の仮想マシン環境を設ける事ができる様になった。その他、仮想環境における制御技術では、例えば特許文献２に複数の仮想マシンから実マシンの環境を配送する機能や、仮想的な実マシン環境を仮想マシンに提供する技術、また仮想的デバイスをメモリ上に構築し、実マシン環境を介さないような通信方式も提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】ＵＳ  ２０１１／０２４６９８９  Ａ１
【発明の概要】
【発明が解決しようとする課題】
【０００５】
仮想化技術を使用する事により、実マシン上に複数の仮想マシンを構築・稼動させる事ができるようになった。又、仮想化技術を導入する事で実マシンを複数台購入するのに比べて、はるかに安価にシステムを構築できるため、仮想化技術の市場のニーズも増加してきている。
【０００６】
往来の制御システムでは、外部ネットワークや共用システムには接続されていなかったが、近年、制御システムと他システムが連携する事により、更なる事業の効率化が進む傾向にあり、システムの大規模化が進んでいる。このように参照データを、参照したいときに、参照したいだけ参照できるといったシステム可視化（ビッグデータへの対応）のニーズが増してきている中で、オンライン中のマシンへの影響を考慮すると、ログ収集やログの送付における負荷は無害とは言えず、更に、マシンの停止を必要とするメモリのダンプ情報の収集や、オンラインマシンを直接使用したデバッグ・解析は、オンラインマシンで許容できるものではないといった課題がある。
【０００７】
ここで、実マシン上で稼動する複数の仮想マシンの業務の同期実行を可能とすることができれば、オンラインの仮想マシンと全く同じ動作をさせている１台の仮想マシンを保守用として活用する事ができ、今まで仮想マシン１台では不可能だったメモリのダンプ情報収集や、オンライン中の実機解析・デバッグ、大容量のログ収集・送付等をオンラインへの影響を意識せずに、任意のタイミングで行える。
【０００８】
しかし、特許文献１のような従来の仮想化技術では、仮想化ゲストには、同じ仮想化ゲストとの処理を同期させる手段は持ち合わせていないため、複数の仮想マシンの処理を同期実行させることができなかった。  そこで本発明では、複数の仮想マシンの処理を同期実行させる仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、代表的な本発明の仮想計算機システムの一つは、メモリと、前記メモリ上に展開されたプログラムを実行するプロセッサと、を備え、前記プロセッサによって、ＯＳ上に複数の仮想マシンを動作させる仮想化計算機であって、前記プロセッサは、各仮想マシンの処理実行時の所定の命令を検出する実マシン命令検出処理と、前記実マシン命令検出処理によって命令を検出した複数の前記仮想マシンのうち、同期すべき前記仮想マシンからの命令を同時に実行させる命令実行処理と、を実行することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数の仮想マシンの処理を同期実行させる仮想計算機システムを提供することができる。
【００１１】
これによって、仮想化マシンがオンラインで作業中の場合も、同期実行させている仮想化ゲストを調査・解析用として扱える事で、今よりも、もっと詳しい情報の取得や任意のタイミングでの解析やデータ収集等を行う事が可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明に係る仮想化マシン実行調整手段の構成図である。
【図２】図１における命令フック処理の動作を示すフローチャートである。
【図３】図１における命令フック処理挿入部の動作を示すフローチャートである。
【図４】図１における命令要求実行部の動作を示すフローチャートである。
【図５】図１における仮想マシン状態を管理するテーブルである。
【図６】図１における命令実行ハンドラの動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明を実施する形態の例について、図面を用いて説明する。
【００１４】
本実施例の仮想計算機システムは、複数の仮想マシンが実行する処理（命令）を実マシンで検知するインターフェースと、検知した命令を実マシンにて管理するインターフェースを提供する。又、複数の仮想マシンから検知（管理）した処理（命令）を、実マシンで調整し、複数仮想化ゲストに同タイミングで処理（命令）を実行させるインターフェースを提供する。
【００１５】
尚、以下の実施例において、同一の構造部を持ち、同一の符号を付した部分は、原則として同一の動作を行うため、重複する説明を省略した。
【００１６】
図１は、本実施例における仮想化ゲスト調整方式の実施形態である。
【００１７】
仮想化サーバーシステム６００は、実マシン１００を備えており、これらはＬＡＮ４００及び５００により、外部システムと連結している。
【００１８】
物理マシンである実マシン１００は、仮想マシンを稼動させる実マシンの構成の一例である。
【００１９】
実マシン１００は、プロセッサ２５０と、メモリ２００と、外部システムと通信を行う通信インターフェース２６１Ａ、及び２６１Ｂと、ディスクのドライバであるディスクインターフェース２６０を有している。マシン１００のメモリ２００には、実マシン用オペレーティングシステム２３０を有している。ただし、オペレーティングシステムを有しない場合もある。
【００２０】
メモリ２００には、仮想マシンごとに設けられた仮想マシン用の論理区画である仮想マシン用論理区画２０１Ａ，Ｂ、実マシンのメモリ区画２０７、仮想マシンの命令をフックする仮想マシン命令フック区画２３０、仮想マシンの命令のフックに伴い所定のタイマが設定される命令実行タイマ区画２３０、仮想マシンの命令実行を調整する命令実行ハンドラ区画２４０、を有し、これらが、実行マシン用オペレーティングシステム２３０上で動作している。
【００２１】
実マシンメモリ区画２０７には、同期仮想マシン管理テーブル２０８を有し、仮想マシン命令フック区画２２０には，命令要求を実行する命令要求実行部２２１、仮想マシンの命令を管理する命令管理部２２２を有する。  また、命令実行タイマ区画２３０には、命令実行ハンドラをタイマ起動要求にて行う命令実行タイマ部２３１を有し，命令実行ハンドラ区画２４０には、仮想マシンの命令比較を行う命令比較部２４１，複数仮想マシンに同タイミングで命令実行を行う命令実行部２４２を有する。
【００２２】
これら制御部、ならびに、処理部等をプロセッサ２５０で実行する事で各処理を行なう。
【００２３】
メモリ２００の、仮想マシン２０２Ａ’を動作させるための仮想マシン用論理区画２０１Ａには、命令をフックする処理部２０６Ａ、仮想マシンの命令をフックするための仕組みを挿入する命令フック処理挿入部２０３Ａ、仮想マシンを元の関数（命令）に戻るための戻りアドレスを格納する戻りアドレス格納部２０７Ａ、仮想マシン用オペレーティングシステム２０４Ａ、仮想マシン２０２Ａ’用のデバイスドライバである仮想デバイスドライバ２０５Ａを有する。
【００２４】
また、第二の仮想マシン用論理区画２０１Ｂについても、第一の仮想マシン用論理区画２０１Ａの構造であるため説明を省略する。
【００２５】
以下、説明を簡単にするために、実マシンについては、各制御部及び処理部の処理はメモリ上に展開されるプログラムによって実現するが、これらは各プログラムをプロセッサ２５０が実行する事で実現される各処理部を処理の主体として説明する。
【００２６】
次に仮想化環境の、実マシンが仮想マシンの命令を検出・操作し、複数仮想マシンで同期とりながら命令を実行するまでの実施例を下記に述べる。
【００２７】
図２は命令フック処理部２０６Ａ、実マシン命令検出部２２２の処理を示す図である。
【００２８】
ここでは、仮想マシンにて実行する命令を、実マシンにてフックできるようにする仕組みについて例をあげて説明する。
【００２９】
仮想マシン２０２Ａ’の、命令フック処理部２０６Ａでは、仮想マシン２０２Ａ’で実行される命令を検出し、（Ｓ３０１）、仮想マシンの元の関数（命令）に戻るための戻りアドレスを、戻りアドレスを格納部２０７Ａに設定する。次に、命令を実行する（Ｓ３０２）、次回実行するアドレスを、元（フック前）のアドレスに戻す処理に書き換える次回実行アドレス書き換える（Ｓ３０３）。
【００３０】
又、実マシン命令検出部２２２は、仮想マシンの命令を実マシンで検出し、命令要求実行部２２１を起動するための仕組みである。実マシンメモリ検出部２２２で実施している命令フック処理（Ｓ３５１）では、例として仮想化機能である特権命令のフック処理（ｖｍ＿ｅｎｔｒｙ）を応用する事とする。仮想化機能である特権命令フック処理とは、仮想マシン上の命令の内、特権命令やセンシティブ命令を実マシンでフックする処理がすでに存在しており、本機能を応用すれば、特権命令だけでなく任意（全）命令を実マシンにてフックする事は容易である。
命令フック処理（Ｓ３５１）で仮想マシンの命令をフックできた場合、命令要求実行処理２２１の起動をおこなう（Ｓ３５２）。命令要求実行処理２２１の内容は図４の説明にて詳細説明する。
【００３１】
図３は命令フック処理挿入部２０３Ａの処理を示す図である。
【００３２】
ここでは、仮想マシンの命令フック処理２０６を、ユーザプログラム（業務）に事前に組込み、命令を実マシンへフックさせるための準備を行っている。
【００３３】
命令フック処理挿入部２０３Ａでは、仮想マシン２０２Ａで作成されたユーザプログラム（業務）に対して、命令フック処理２０６Ａを組み込むため、ユーザ作成プログラムと命令フック処理２０６Ａプログラムのリンケージ処理を行い（Ｓ３１１）、実行体を生成する（Ｓ３１２）。
【００３４】
図４は、命令要求実行部２２１の処理を示す図である。
【００３５】
本処理部は、図２で示したように、実マシン命令検出処理２２２によって、起動される。
【００３６】
命令要求実行部２２１が目的とする事は、任意の仮想マシンから命令の実行要求があった事や、戻りアドレスの情報を管理し、任意の時間後に仮想マシンの命令を同期実行させるための処理を時間（タイマ）起動する事である。
【００３７】
命令要求実行部２２１では、フックした仮想マシンを認識し、図５の仮想マシン状態管理テーブル２０８の命令実行要求２８３に１を設定する（Ｓ３２１）。ここでは１を設定する事は要求があった事を意味する事とする。続けて、図５の仮想マシン状態管理テーブル２０８の戻りアドレス２８５を設定する（Ｓ３２２）。設定が終わると、他に命令実行要求がない場合には（Ｓ３２２でＹＥＳ）、命令実行タイマ部に、タイマ起動要求を行う（Ｓ３２４）。
【００３８】
ただし、同じ命令要求で他の仮想マシンが既に命令実行要求２８３を行ってる状態の時は、タイマ起動要求は行わない（Ｓ３２３でＮＯ）。これは最初にフックした仮想マシンをベース任意の時間までの間に、同じ仮想マシンからの要求が揃うかという比較を行っているためである。
【００３９】
タイマ起動要求を受けた命令実行タイマ部２３１、タイマの起動要求を行う（Ｓ３３１）。ここで、起動される処理は、図６にて詳細に説明する命令実行ハンドラ処理部２４１によって実行される。  図５は仮想マシン管理テーブル２０８を示す図である。
ここでは本テーブルは命令種別２８１の数だけ存在し、対象仮想マシン名称を管理するエリアと２８２、命令実行要求の有無を管理するエリアと２８３、仮想マシンの同期状態を管理するエリア２８４と、仮想マシンへの戻りアドレス２０５によって構成されるものとする。本例では、命令実行要求が有の場合には「１」、無しの場合には「０」が設定される。
【００４０】
図６は命令実行ハンドラ区画２４０内の処理を示す図である。
【００４１】
命令実行ハンドラ処理区画２４０は、命令実行タイマ処理２３０のタイマ処理から呼ばれる処理を実行する。この命令実行ハンドラ処理２４０が呼ばれるという事は、最初の仮想マシンの命令実行要求を受けてから、任意の時間が経過した事を意味する。すなわち、命令実行タイマ部２３１によって設定された時間が経過すると、命令実行ハンドラ区画２４０内の処理が起動される。
【００４２】
本処理部では、この時、他に命令実行要求を受けている仮想マシンが何台存在するか確認し、その中で命令実行要求がある仮称マシン（同期している仮想マシン）に同時に命令を実行させる事を目的とする。
【００４３】
命令実行ハンドラ処理区画２４０内の命令比較部２４１は、最初に図５の仮想マシン管理テーブル２０８を参照し、各仮想マシンの命令実行要求２８３が届いている事を確認する（Ｓ３４１）。もし、命令実行要求が届いていない場合（Ｓ３４１でＹＥＳ）、同期対象外として仮想マシン同期状態２８４をＡＳＹＮＣ（非同期）に設定する事とする（Ｓ３４２）。（一度の比較で非同期としたくない場合は、各仮想マシン毎に非同期カウンタ等を設け、任意の回数非同期となる場合は、業務の同期がとれていない状態をみなし、非同期とするなどの処理を作りこんでもいい）
次に、命令実行ハンドラ処理区画２４０内の命令実行部２４２は、図５の仮想マシン管理テーブル２０８を参照し、各仮想マシンの中でＳＹＮＣ（同期）状態の仮想マシンだけ選定し（Ｓ３４３）、選定した仮想マシンに同時に命令を実行する（Ｓ３４４）。これによって、各仮想マシン間で命令の同期を取ることを可能とする。
【００４４】
又、仮想化マシンに命令を実行させる手段は、ここでは例としてｖｘ＿ｅｘｉｔの機能を使用する事とする。（本機能は実マシンから仮想化マシンに対して命令を実行させる手段である）
また、上記実施例に加えて、実マシン、仮想マシン環境の障害かを記録する領域を有する事もできる。さらには、実マシン・仮想マシン環境の障害を切り分けて特定の仮想マシンに通知する処理部を加えることもできる。
【００４５】
以上により、仮想環境の実マシン上で動作する複数の仮想マシンの処理を、各々の仮想マシンで実行する前に、実マシンが検知・管理し、更に、実行すべき処理とタイミングを実マシンが操作する事で、複数の仮想マシンの処理の同期を可能にできる
このように、仮想マシンの命令実行タイミングを調整して同期させ、実マシン上で稼働する仮想マシンの業務の同期実行を可能とさせる事で、１台を保守用として活用することができる。これによって、今まで仮想マシン１台では不可能だったオンラインマシンのメモリのダンプ情報収集や、オンラインマシンでの実機解析・デバック、大容量のログ収集・送付等をメインのオンライマシンへの影響を意識せずに、任意のタイミングで実行できる。
【００４６】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【符号の説明】
【００４７】
６００仮想化サーバーシステム、１００実マシン、メモリ２００、２０１Ａ仮想マシン用論理区画、２０２Ａ’仮想マシン、２０７Ａ戻りアドレス格納部、２０６Ａ命令フック処理部、２０３Ａ命令フック処理挿入部、２０４Ａ仮想マシン用オペレーティングシステム、２０５Ａ仮想デバイスドライバ、２０７実マシンメモリ区画、２０８仮想マシン状態管理テーブル、２２０仮想マシン命令フック区画、２２１命令要求実行部、２２２実マシン命令検出部、２３０命令実行タイマ区画、２３１命令実行タイマ部、２４０命令実行ハンドラ区画、２４１命令比較部、２４２命令実行部、２３０実マシン用オペレーティングシステム、２５０プロセッサ、２６０ディスクインターフェース、２６１Ａ通信インターフェース、２６２Ａ通信インターフェース、４００  ５００  ＬＡＮ
【図１】
0006568791.tif 000002
【図２】
0006568791.tif 000003
【図３】
0006568791.tif 000004
【図４】
0006568791.tif 000005
【図５】
0006568791.tif 000006
【図６】
0006568791.tif 000007