(57)【要約】【課題】ライブマイグレーションの移動先における仮想マシンの障害の発生を抑制すること。【解決手段】情報処理装置１００は、ＶＭ１１０のライブマイグレーションの指示を受信したことに応じて、移動先装置１３０へのＶＭ１１０のライブマイグレーションを開始する。情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理については、ＦＰＧＡ１２０の代わりにエミュレータ１１１に実行させる。情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える。【選択図】図１
2018005576.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
動的に機能を定義可能なハードウェアの代用となるエミュレータが組み込まれた仮想マシンのライブマイグレーションの指示を受信したことに応じて、他のコンピュータへの前記仮想マシンのライブマイグレーションを開始し、
前記仮想マシンのライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される処理については前記エミュレータに実行させ、
前記進捗度合いが前記仮想マシンを実行するコンピュータを切り替える第２の条件を満たし、かつ、前記ハードウェアが前記仮想マシンについての処理を実行していなければ、前記仮想マシンを実行するコンピュータを前記他のコンピュータに切り替える、
処理を実行させることを特徴とするライブマイグレーションプログラム。
【請求項２】
前記コンピュータに、
前記進捗度合いが前記第１の条件を満たしていなければ、前記仮想マシンから前記ハードウェアに依頼される処理については前記ハードウェアに実行させる、
処理を実行させることを特徴とする請求項１に記載のライブマイグレーションプログラム。
【請求項３】
前記第１の条件は、前記仮想マシンに関する情報のうち前記他のコンピュータに転送した情報の割合が第１の閾値以上であるという条件である、ことを特徴とする請求項１または２に記載のライブマイグレーションプログラム。
【請求項４】
前記第１の条件は、前記仮想マシンに関する情報を前記他のコンピュータに転送完了するまでの残り時間が第１の閾値以下であるという条件である、ことを特徴とする請求項１または２に記載のライブマイグレーションプログラム。
【請求項５】
前記エミュレータに実行させる処理は、
前記ハードウェアが有する複数の機能のそれぞれに前記第１の条件を対応付けた対応情報を参照し、前記進捗度合いが前記複数の機能のいずれかに対応付けられた前記第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される前記いずれかの機能を用いた処理については前記エミュレータに実行させる、ことを特徴とする請求項１〜４のいずれか一つに記載のライブマイグレーションプログラム。
【請求項６】
前記コンピュータに、
前記複数の機能のそれぞれを用いた処理にかかる時間を計測し、計測した結果に基づいて前記対応情報を更新する、処理を実行させることを特徴とする請求項５に記載のライブマイグレーションプログラム。
【請求項７】
コンピュータが、
動的に機能を定義可能なハードウェアの代用となるエミュレータが組み込まれた仮想マシンのライブマイグレーションの指示を受信したことに応じて、他のコンピュータへの前記仮想マシンのライブマイグレーションを開始し、
前記仮想マシンのライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される処理については前記エミュレータに実行させ、
前記進捗度合いが前記仮想マシンを実行するコンピュータを切り替える第２の条件を満たし、かつ、前記ハードウェアが前記仮想マシンについての処理を実行していなければ、前記仮想マシンを実行するコンピュータを前記他のコンピュータに切り替える、
処理を実行することを特徴とするライブマイグレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ライブマイグレーションプログラム、およびライブマイグレーション方法に関する。
【背景技術】
【０００２】
従来、製造後に機能を定義または更新することが可能なＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）がある。また、仮想マシンを停止させる時間を抑えつつ仮想マシンをサーバ間で移動させるライブマイグレーションの技術がある。
【０００３】
関連する先行技術としては、例えば、仮想マシンと関連したメモリ位置を支持するハードウェアを支持メカニズムと交換するものがある。また、例えば、今後発生が予測されるトラフィック発生量が、最適値を超えた場合は、トラフィック発生量の処理に余裕がある最適な物理ハードウェアを選択して、選択した物理ハードウェアへ仮想マシンをライブマイグレーションする技術がある。また、例えば、測定された現在のリソース消費量よりも、算出されたマイグレーションさせた後のハードウェア資源のリソース消費量が小さければ、１または複数の仮想マシンを複数のハードウェア資源間においてマイグレーションさせる技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１２−５０４２９６号公報
【特許文献２】国際公開第２０１３／０３８５８５号
【特許文献３】特開２０１４−２０６８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、仮想マシンがＦＰＧＡを使用中にライブマイグレーションが行われると、移動先に送信された仮想マシンのステートにはＦＰＧＡのデータが含まれないため、移動先において仮想マシンがＦＰＧＡからのデータを取得できないための障害が発生することがある。
【０００６】
１つの側面では、本発明は、ライブマイグレーションの移動先における仮想マシンの障害の発生を抑制することができるライブマイグレーションプログラム、およびライブマイグレーション方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、動的に機能を定義可能なハードウェアの代用となるエミュレータが組み込まれた仮想マシンのライブマイグレーションの指示を受信したことに応じて、他のコンピュータへの前記仮想マシンのライブマイグレーションを開始し、前記仮想マシンのライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される処理については前記エミュレータに実行させ、前記進捗度合いが前記仮想マシンを実行するコンピュータを切り替える第２の条件を満たし、かつ、前記ハードウェアが前記仮想マシンについての処理を実行していなければ、前記仮想マシンを実行するコンピュータを前記他のコンピュータに切り替えるライブマイグレーションプログラム、およびライブマイグレーション方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、ライブマイグレーションの移動先における仮想マシンの障害の発生を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかるライブマイグレーション方法の一実施例を示す説明図である。
【図２】図２は、ライブマイグレーションシステム２００の一例を示す説明図である。
【図３】図３は、情報処理装置１００のハードウェア構成例を示すブロック図である。
【図４】図４は、実施例１におけるアクセラレータ表４００の記憶内容の一例を示す説明図である。
【図５】図５は、実施例１における格納先パス表５００の記憶内容の一例を示す説明図である。
【図６】図６は、実施例１におけるＦＰＧＡ実行状態表６００の記憶内容の一例を示す説明図である。
【図７】図７は、実施例１におけるＦＰＧＡ実行モード表７００の記憶内容の一例を示す説明図である。
【図８】図８は、実施例１における情報処理装置１００の機能的構成例を示すブロック図である。
【図９】図９は、実施例１における情報処理装置１００のモジュール構成例を示す説明図である。
【図１０】図１０は、実施例１における情報処理装置１００の動作の流れの一例を示す説明図（その１）である。
【図１１】図１１は、実施例１における情報処理装置１００の動作の流れの一例を示す説明図（その２）である。
【図１２】図１２は、実施例１における情報処理装置１００の動作の流れの一例を示す説明図（その３）である。
【図１３】図１３は、実施例１における情報処理装置１００の動作の流れの一例を示す説明図（その４）である。
【図１４】図１４は、実施例１におけるライブマイグレーションの流れの一例を示す説明図である。
【図１５】図１５は、実施例１におけるＶＭ起動処理手順の一例を示すフローチャートである。
【図１６】図１６は、実施例１におけるハードウェアアクセス処理手順の一例を示すフローチャートである。
【図１７】図１７は、実施例１におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。
【図１８】図１８は、実施例１におけるＬＭ実行処理手順の一例を示すフローチャートである。
【図１９】図１９は、実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容の一例を示す説明図である。
【図２０】図２０は、実施例２におけるモード切替タイミング表２０００の記憶内容の一例を示す説明図である。
【図２１】図２１は、実施例２における情報処理装置１００のモジュール構成例を示す説明図である。
【図２２】図２２は、実施例２におけるＶＭ起動処理手順の一例を示すフローチャートである。
【図２３】図２３は、実施例２におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。
【図２４】図２４は、実施例２におけるＬＭ実行処理手順の一例を示すフローチャートである。
【図２５】図２５は、実施例３における情報処理装置１００のモジュール構成例を示す説明図である。
【図２６】図２６は、実施例３におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかるライブマイグレーションプログラム、およびライブマイグレーション方法の実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかるライブマイグレーション方法の一実施例）
図１は、実施の形態にかかるライブマイグレーション方法の一実施例を示す説明図である。図１において、情報処理装置１００は、動的に機能を定義可能なハードウェアを有し、仮想マシンを実行するコンピュータである。情報処理装置１００の仮想環境は、ハイパーバイザ型の仮想環境であってもよいし、ホスト型の仮想環境であってもよい。
【００１２】
動的に機能を定義可能なハードウェアは、例えば、ＦＰＧＡである。ＦＰＧＡは、特定の処理に特化したハードウェアを実現可能であり、特定の処理をＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）よりも効率よく実行可能である。ＦＰＧＡは、例えば、アクセラレータを実現する。以下の説明では、仮想マシンを「ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）」と表記する場合がある。
【００１３】
ここで、ＶＭがＦＰＧＡを使用することにより、ＶＭの処理を効率化する場合が考えられる。例えば、ＶＭが、仮想ＦＰＧＡ（Ｖｉｒｔｕａｌ  ＦＰＧＡ）を有する場合がある。そして、仮想ＦＰＧＡは、アクセラレータを用いた処理についての依頼をＶＭから受け付けると、受け付けた依頼を情報処理装置１００が有するＦＰＧＡに転送することにより、情報処理装置１００が有するＦＰＧＡにアクセラレータを用いた処理を実行させる。
【００１４】
また、ＶＭを停止させる時間を抑えつつＶＭをサーバ間で移動させるライブマイグレーションの技術がある。例えば、移動元サーバが移動先サーバにＶＭのステートを転送し、移動元サーバがＶＭのステートを転送し終えたらＶＭを停止し、ＶＭの移動先サーバがＶＭを再開する。ステートとは、移動元サーバが有するメモリやレジスタの状態である。
【００１５】
しかしながら、ＶＭがＦＰＧＡを使用する場合に、ライブマイグレーションの技術が適用されると、移動先サーバにおいてＶＭに障害が発生する可能性がある。例えば、ライブマイグレーションの技術では、移動元サーバが移動先サーバにＶＭのステートについて転送することができても、移動元サーバがＣＰＵとは独立して動作しているＦＰＧＡのステートを転送することは困難である。
【００１６】
結果として、移動先サーバにおいて、ＶＭは、ＦＰＧＡの処理結果を取得することができず、その結果、障害が発生することがある。具体的には、移行先サーバにおいて、ＶＭは、ＦＰＧＡの処理結果を待ち続けることになり、エラーを発生することがある。また、移動先サーバにＦＰＧＡが存在しない場合がある。この場合、ＶＭは、存在しないＦＰＧＡに対して、アクセラレータを用いた処理についての依頼を出力してしまうことがあり、エラーを発生することがある。
【００１７】
そこで、本実施の形態では、ＶＭにＦＰＧＡのエミュレータを組み込み、ＦＰＧＡと、ＦＰＧＡのエミュレータとを、ＶＭに使い分けさせることにより、移動先のコンピュータにおけるＶＭの障害の発生を抑制するライブマイグレーション方法について説明する。
【００１８】
図１の例では、情報処理装置１００は、動的に機能を定義可能なハードウェアとしてＦＰＧＡ１２０を有し、ＶＭ１１０を実行している。ＶＭ１１０は、動的に機能を定義可能なハードウェアの代用となるエミュレータ１１１が組み込まれている。ＶＭ１１０は、例えば、ＦＰＧＡ１２０の代用となるエミュレータ１１１が組み込まれている。
【００１９】
エミュレータ１１１は、動的に機能を定義可能なハードウェアの代用となり、動的に機能を定義可能なハードウェアの動作を模擬するソフトウェアである。エミュレータ１１１は、例えば、ＦＰＧＡ１２０の代用となり、少なくともＦＰＧＡ１２０の動作の一部を模擬し、ＦＰＧＡ１２０の動作の一部と同様の動作を行う。また、エミュレータ１１１は、例えば、ＦＰＧＡ１２０のエラー動作を模擬してもよい。エミュレータ１１１は、具体的には、ＦＰＧＡ１２０が処理に失敗した際に出力するエラー応答と同様のエラー応答を出力する。
【００２０】
図１の例では、情報処理装置１００は、移動先装置１３０と通信可能に接続されている。移動先装置１３０は、情報処理装置１００が有するＦＰＧＡ１２０と同様のＦＰＧＡ１４０を有し、ライブマイグレーションによるＶＭ１１０の移動先となるコンピュータである。
【００２１】
（１−１）情報処理装置１００は、ＶＭ１１０のライブマイグレーションの指示を受信したことに応じて、他のコンピュータへのＶＭ１１０のライブマイグレーションを開始する。他のコンピュータは、例えば、移動先装置１３０である。情報処理装置１００は、例えば、移動先装置１３０にＶＭ１１０のステートを転送することにより、移動先装置１３０へのＶＭ１１０のステートのコピーを開始する。
【００２２】
（１−２）情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たすか否かを判定する。進捗度合いは、例えば、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合により表現される。進捗度合いは、例えば、ＶＭ１１０のステートを転送完了するまでの残り時間により表現されてもよい。第１の条件とは、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える契機となる条件である。第１の条件は、例えば、ＶＭ１１０のライブマイグレーションが実行中であるという条件である。第１の条件は、例えば、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が第１の閾値以上であるという条件であってもよい。そして、情報処理装置１００は、第１の条件を満たしていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理については、ＦＰＧＡ１２０の代わりにエミュレータ１１１に実行させる。
【００２３】
これによれば、情報処理装置１００は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。また、情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たす前には、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をＦＰＧＡ１２０に実行させ、ＶＭ１１０の性能低下を抑制することができる。
【００２４】
（１−３）情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第２の条件を満たすか否かを判定する。第２の条件とは、ＶＭ１１０のステートの転送を完了する契機となる条件である。第２の条件は、例えば、ＶＭ１１０を停止させ、ＶＭ１１０を実行するコンピュータを切り替える条件でもある。第２の条件は、例えば、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が第２の閾値以上であるという条件であってもよい。
【００２５】
そして、情報処理装置１００は、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを他のコンピュータに切り替える。情報処理装置１００は、例えば、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を停止してＶＭ１１０のステートの転送を完了し、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える。
【００２６】
これによれば、情報処理装置１００は、ＦＰＧＡ１２０が使用中ではないときにＶＭ１１０を実行するコンピュータを切り替えることができ、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０の処理結果を取得しなくてよいようにすることができる。これにより、情報処理装置１００は、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０から処理結果を取得することができずに障害を発生してしまうことがないようにして、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【００２７】
（ライブマイグレーションシステム２００の一例）
次に、図２を用いて、図１に示した情報処理装置１００を適用した、ライブマイグレーションシステム２００の一例について説明する。
【００２８】
図２は、ライブマイグレーションシステム２００の一例を示す説明図である。図２において、ライブマイグレーションシステム２００は、情報処理装置１００と、移動先装置１３０とを含む。ライブマイグレーションシステム２００において、情報処理装置１００と移動先装置１３０とは、有線または無線のネットワーク２１０を介して接続される。ネットワーク２１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【００２９】
情報処理装置１００は、例えば、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ノートＰＣなどである。移動先装置１３０は、ＦＰＧＡ１２０を有し、ライブマイグレーションによるＶＭ１１０の移動先となるコンピュータである。移動先装置１３０は、例えば、サーバ、ＰＣ、ノートＰＣなどである。移動先装置１３０も、情報処理装置１００としての機能を有していてもよい。
【００３０】
（情報処理装置１００のハードウェア構成例）
次に、図３を用いて、情報処理装置１００のハードウェア構成例について説明する。
【００３１】
図３は、情報処理装置１００のハードウェア構成例を示すブロック図である。図３において、情報処理装置１００は、ＣＰＵ３０１と、メモリ（Ｍｅｍｏｒｙ）３０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３と、ディスクドライブ３０４と、ＰＣＩＥ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）３０５と、ＦＰＧＡ１２０とを有する。また、各構成部は、バスによってそれぞれ接続される。
【００３２】
ここで、ＣＰＵ３０１は、情報処理装置１００の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。各種プログラムは、例えば、実施の形態にかかるライブマイグレーションプログラムなどを含む。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００３３】
Ｉ／Ｆ３０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータ（例えば、図２に示した移動先装置１３０）に接続される。そして、Ｉ／Ｆ３０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ３０３には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３４】
ディスクドライブ３０４は、ディスクを有し、ＣＰＵ３０１の制御に従ってディスクに対するデータのリード／ライトを制御する。ディスクドライブ３０４は、例えば、磁気ディスクドライブである。ディスクは、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発メモリである。ディスクは、例えば、磁気ディスク、光ディスクなどである。ＰＣＩＥ３０５と、ＦＰＧＡ１２０に接続され、ＦＰＧＡ１２０と内部のインターフェースを司り、ＦＰＧＡ１２０からのデータの入出力を制御する。ＦＰＧＡ１２０は、動的に機能を定義可能なハードウェアである。
【００３５】
情報処理装置１００は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、情報処理装置１００は、ディスクドライブ３０４の代わりに、ＳＳＤなどを有していてもよい。また、移動先装置１３０のハードウェア構成例は、図３に示した情報処理装置１００のハードウェア構成例と同様であるため、説明を省略する。
【００３６】
（ライブマイグレーションシステム２００における実施例１）
次に、図２に示したライブマイグレーションシステム２００における実施例１〜実施例３について説明する。実施例１は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いに応じて、ＦＰＧＡ１２０に処理を実行させるか、あるいは、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させるかを切り替える例である。
【００３７】
実施例２は、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理が用いるアクセラレータの種類ごとに異なるタイミングで、ＦＰＧＡ１２０に処理を実行させるか、あるいは、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させるかを切り替える例である。
【００３８】
実施例３は、実施例２と同様の例であり、実施例２におけるＦＰＧＡ１２０に処理を実行させるか、あるいは、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させるかを切り替えるタイミングを動的に変更する例である。以下の説明では、まず、実施例１について説明する。
【００３９】
（実施例１におけるアクセラレータ表４００の記憶内容）
まず、図４を用いて、情報処理装置１００によって記憶される、実施例１におけるアクセラレータ表４００の記憶内容の一例について説明する。アクセラレータ表４００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【００４０】
図４は、実施例１におけるアクセラレータ表４００の記憶内容の一例を示す説明図である。図４に示すように、アクセラレータ表４００は、Ｒｅｇｉｏｎと、ＡＣＣ  ＩＤとのフィールドを有する。アクセラレータ表４００は、アクセラレータごとに各フィールドに情報を設定することにより、アクセラレータ実装情報がレコードとして記憶される。
【００４１】
Ｒｅｇｉｏｎのフィールドには、レコードの番号が設定される。ＡＣＣ  ＩＤのフィールドには、アクセラレータを一意に特定する識別情報が設定される。このように、アクセラレータ表４００は、どんな種類のアクセラレータがＦＰＧＡ１２０によって実現されているかを管理することができる。そして、アクセラレータ表４００は、どんな種類のアクセラレータに対応するエミュレータ１１１をＶＭ１１０に組み込むことが好ましいかを判定可能にすることができる。
【００４２】
（実施例１における格納先パス表５００の記憶内容）
次に、図５を用いて、情報処理装置１００によって記憶される、実施例１における格納先パス表５００の記憶内容の一例について説明する。格納先パス表５００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【００４３】
図５は、実施例１における格納先パス表５００の記憶内容の一例を示す説明図である。図５に示すように、格納先パス表５００は、ＡＣＣ  ＩＤと、ｂｉｔｆｉｌｅ  ｐａｔｈとのフィールドを有する。格納先パス表５００は、アクセラレータごとに各フィールドに情報を設定することにより、格納先パス情報がレコードとして記憶される。
【００４４】
ＡＣＣ  ＩＤのフィールドには、アクセラレータを一意に特定する識別情報が設定される。ｂｉｔｆｉｌｅ  ｐａｔｈのフィールドには、アクセラレータを実現するためのエミュレータコードが格納された記憶領域へのパスが設定される。このように、格納先パス表５００は、どんな種類のアクセラレータのエミュレータコードが、どこの記憶領域に格納されているかを特定可能にすることができる。
【００４５】
（実施例１におけるＦＰＧＡ実行状態表６００の記憶内容）
次に、図６を用いて、情報処理装置１００によって記憶される、実施例１におけるＦＰＧＡ実行状態表６００の記憶内容の一例について説明する。ＦＰＧＡ実行状態表６００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【００４６】
図６は、実施例１におけるＦＰＧＡ実行状態表６００の記憶内容の一例を示す説明図である。図６に示すように、ＦＰＧＡ実行状態表６００は、ＡＣＣ  ＩＤと、ｅｘｅｃ  ｆｌａｇとのフィールドを有する。ＦＰＧＡ実行状態表６００は、アクセラレータごとに各フィールドに情報を設定することにより、実行状態情報がレコードとして記憶される。
【００４７】
ＡＣＣ  ＩＤのフィールドには、アクセラレータを一意に特定する識別情報が設定される。ｅｘｅｃ  ｆｌａｇのフィールドには、ＦＰＧＡ１２０が実現しているアクセラレータが、ＶＭ１１０についての処理を実行中であるか否かを示すｅｘｅｃ  ｆｌａｇが設定される。ｅｘｅｃ  ｆｌａｇは、例えば、処理を実行中であれば「１」であり、処理を実行中でなければ「０」である。このように、ＦＰＧＡ実行状態表６００は、ＶＭ１１０を実行するコンピュータを切り替えるときに、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行中であるか否かを判定可能にすることができる。
【００４８】
（実施例１におけるＦＰＧＡ実行モード表７００の記憶内容）
次に、図７を用いて、情報処理装置１００によって記憶される、実施例１におけるＦＰＧＡ実行モード表７００の記憶内容の一例について説明する。ＦＰＧＡ実行モード表７００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【００４９】
図７は、実施例１におけるＦＰＧＡ実行モード表７００の記憶内容の一例を示す説明図である。図７に示すように、ＦＰＧＡ実行モード表７００は、ＦＰＧＡ  ＩＤと、ｍｏｄｅとのフィールドを有する。ＦＰＧＡ実行モード表７００は、ＦＰＧＡ１２０について各フィールドに情報を設定することにより、実行モード情報がレコードとして記憶される。
【００５０】
ＦＰＧＡ  ＩＤのフィールドには、ＦＰＧＡ１２０を一意に特定する識別情報が設定される。ｍｏｄｅのフィールドには、ＶＭ１１０についての処理を、ＦＰＧＡ１２０が実現しているアクセラレータに実行させるか、ＦＰＧＡ１２０が実現しているアクセラレータに対応するエミュレータ１１１に実行させるかを示すｍｏｄｅが設定される。ｍｏｄｅは、例えば、アクセラレータに実行させる場合であれば「１」であり、エミュレータ１１１に実行させる場合であれば「０」である。このように、ＦＰＧＡ実行モード表７００は、ＶＭ１１０についての処理を、アクセラレータに実行させるか、エミュレータ１１１に実行させるかを判定可能にすることができる。
【００５１】
ここでは、ＦＰＧＡ実行モード表７００が、ＦＰＧＡ１２０について各フィールドに情報を設定することにより、実行モード情報をレコードとして記憶する場合について説明したが、これに限らない。例えば、ＦＰＧＡ実行モード表７００は、ＦＰＧＡ１２０が実現するアクセラレータごとに各フィールドに情報を設定することにより、アクセラレータごとの実行モード情報をレコードとして記憶してもよい。
【００５２】
これにより、ＦＰＧＡ実行モード表７００は、アクセラレータごとに、アクセラレータを用いたＶＭ１１０についての処理を、そのままアクセラレータに実行させるか、エミュレータ１１１に実行させるかを判定可能にすることができる。ＦＰＧＡ実行モード表７００が、ＦＰＧＡ１２０が実現しているアクセラレータごとに各フィールドに情報を設定する場合については、実施例２において説明する。
【００５３】
（実施例１における情報処理装置１００の機能的構成例）
次に、図８を用いて、実施例１における情報処理装置１００の機能的構成例について説明する。
【００５４】
図８は、実施例１における情報処理装置１００の機能的構成例を示すブロック図である。図８に示すように、情報処理装置１００は、ＶＭ起動部８０１と、ライブマイグレーション実行部８０２と、ＦＰＧＡアクセス処理部８０３とを含む構成である。以下の説明では、ライブマイグレーション実行部８０２を「ＬＭ（Ｌｉｖｅ  Ｍｉｇｒａｔｉｏｎ）実行部８０２」と表記する場合がある。
【００５５】
ＶＭ起動部８０１〜ＦＰＧＡアクセス処理部８０３は、制御部となる機能である。ＶＭ起動部８０１〜ＦＰＧＡアクセス処理部８０３は、具体的には、例えば、図３に示したメモリ３０２やディスクドライブ３０４などの記憶領域に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０３により、その機能を実現する。各機能部の処理結果は、例えば、メモリ３０２やディスクドライブ３０４などの記憶領域に記憶される。
【００５６】
ＶＭ起動部８０１は、ＶＭ１１０の起動時に、動的に機能を定義可能なハードウェアの代用となるエミュレータ１１１をＶＭ１１０に組み込む。動的に機能を定義可能なハードウェアとは、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）である。ＰＬＤは、例えば、ＦＰＧＡ１２０である。ＦＰＧＡ１２０は、特定の処理に特化したハードウェアを実現可能であり、特定の処理をＣＰＵよりも効率よく実行可能である。ＦＰＧＡ１２０は、例えば、ＶＭ１１０の動作を効率化するためのアクセラレータを実現する。
【００５７】
エミュレータ１１１は、動的に機能を定義可能なハードウェアの代用となり、動的に機能を定義可能なハードウェアの動作を模擬するソフトウェアである。エミュレータ１１１は、例えば、ＦＰＧＡ１２０の代用となり、少なくともＦＰＧＡ１２０の動作の一部を模擬し、ＦＰＧＡ１２０の動作の一部と同様の動作を行う。エミュレータ１１１は、具体的には、ＦＰＧＡ１２０が実現している１以上のアクセラレータのいずれかの動作を模擬し、いずれかのアクセラレータの動作と同様の動作を行う。ここで、エミュレータ１１１は、複数あってもよい。例えば、ＦＰＧＡ１２０が実現しているアクセラレータごとに対応するエミュレータ１１１があってもよい。
【００５８】
また、エミュレータ１１１は、例えば、ＦＰＧＡ１２０のダミー動作を模擬してもよい。エミュレータ１１１は、具体的には、ＦＰＧＡ１２０が実現している１以上のアクセラレータのいずれかに対応するダミーデータを出力する。このとき、エミュレータ１１１は、ダミーデータを出力するまでに、所定の時間待機してもよい。ダミーデータは、アクセラレータの作成者などによって、アクセラレータから出力されて別の処理に使用されたとしても、別の処理に問題を発生させないと判断されたデータである。ダミーデータは、アクセラレータの作成者などによって、アクセラレータから出力されたときに処理にエラーが発生したとＶＭが判定可能なように、設定されたデータであってもよい。
【００５９】
また、エミュレータ１１１は、例えば、ＦＰＧＡ１２０のエラー動作を模擬してもよい。エミュレータ１１１は、具体的には、ＦＰＧＡ１２０が実現している１以上のアクセラレータのいずれかが処理に失敗した際に出力するエラー応答と同様のエラー応答を出力する。このとき、エミュレータ１１１は、エラー応答を出力するまでに、所定の時間待機してもよい。また、エミュレータ１１１は、処理を実行せずに待機することによって、ＶＭに所定の時間が経過した後に処理を再実行させてもよい。
【００６０】
ＶＭ起動部８０１は、例えば、図４に示したアクセラレータ表４００を参照して、ＦＰＧＡ１２０が実現しているアクセラレータの種類を特定する。また、ＶＭ起動部８０１は、例えば、図５に示した格納先パス表５００を参照して、特定した種類のアクセラレータに対応するエミュレータ１１１をＶＭ１１０に組み込む。
【００６１】
ＶＭ起動部８０１は、具体的には、図４に示したアクセラレータ表４００を参照して、ＦＰＧＡ１２０が実現しているアクセラレータを一意に特定するＡＣＣ  ＩＤ「ＡＣＣ１、ＡＣＣ２」を読み出す。次に、ＶＭ起動部８０１は、図５に示した格納先パス表５００を参照して、ＡＣＣ  ＩＤ「ＡＣＣ１、ＡＣＣ２」に対応するｂｉｔｆｉｌｅ  ｐａｔｈ「／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ１、／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ２」を読み出す。
【００６２】
そして、ＶＭ起動部８０１は、ｂｉｔｆｉｌｅ  ｐａｔｈ「／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ１、／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ２」が示す記憶領域から、アクセラレータのエミュレータコードを読み出す。ＶＭ起動部８０１は、エミュレータコードをＩ／Ｏエミュレータコードに組み込み、Ｉ／Ｏエミュレータコードに基づいてＩ／Ｏエミュレータを起動する。これにより、ＶＭ起動部８０１は、Ｉ／Ｏエミュレータ９３０に、ＶＭコードを実行開始させることができる。
【００６３】
ＬＭ実行部８０２は、エミュレータ１１１が組み込まれたＶＭ１１０のライブマイグレーションの指示を受信したことに応じて、他のコンピュータへのＶＭ１１０のライブマイグレーションを開始する。他のコンピュータとは、情報処理装置１００が有するＦＰＧＡ１２０と同様のＦＰＧＡ１４０を有するコンピュータである。他のコンピュータは、例えば、図２に示した移動先装置１３０である。他のコンピュータは、例えば、情報処理装置１００が有するＦＰＧＡ１２０と同様のＦＰＧＡ１４０を有していなくてもよい。
【００６４】
ＬＭ実行部８０２は、例えば、移動先装置１３０にＶＭ１１０のステートを転送することにより、移動先装置１３０へのＶＭ１１０に関する情報のコピーを開始する。ＶＭ１１０に関する情報とは、ＶＭ１１０のステートである。ステートとは、情報処理装置１００が有するメモリやレジスタの状態である。ＬＭ実行部８０２は、具体的には、ＶＭ１１０のステートを移動先装置１３０にコピーし、コピー中にステートが変更された場合、ステートの差分をさらに移動先装置１３０にコピーする。これにより、ＬＭ実行部８０２は、ＶＭ１１０のステートを移動先装置１３０にコピーし、移動先装置１３０がＶＭ１１０を引き継ぎ可能にすることができる。
【００６５】
ＬＭ実行部８０２は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たすか否かを判定する。ＬＭ実行部８０２は、第１の条件を満たせば、ＶＭ１１０を、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える。
【００６６】
進捗度合いは、例えば、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合により表現される。進捗度合いは、例えば、ＶＭ１１０のステートを転送完了するまでの残り時間により表現されてもよい。第１の条件とは、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える契機となる条件である。第１の条件は、例えば、ライブマイグレーションが実行中であるという条件である。第１の条件は、例えば、ＶＭ１１０のステートのうち他のコンピュータに転送したステートの割合が所定の閾値以上であるという条件であってもよい。第１の条件は、例えば、ＶＭ１１０のステートを他のコンピュータに転送完了するまでの残り時間が所定の閾値以下であるという条件であってもよい。
【００６７】
ＬＭ実行部８０２は、例えば、ライブマイグレーションが開始されたことに応じて、ＶＭ１１０を、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える。ＬＭ実行部８０２は、具体的には、ライブマイグレーションが開始されたことに応じて、図７に示したＦＰＧＡ実行モード表７００のｍｏｄｅを、ハードウェア実行モードからエミュレータ実行モードに切り替える。
【００６８】
これにより、ＬＭ実行部８０２は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【００６９】
ＬＭ実行部８０２は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第２の条件を満たすか否かを判定する。また、ＬＭ実行部８０２は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定する。そして、ＬＭ実行部８０２は、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを他のコンピュータに切り替える。
【００７０】
第２の条件とは、ＶＭ１１０を実行するコンピュータを切り替える条件であって、ＶＭ１１０に関する情報の転送を完了する契機となる条件である。第２の条件は、例えば、ＶＭ１１０のステートのうち他のコンピュータに転送したステートの割合が所定の閾値以上であるという条件である。第２の条件は、ＶＭ１１０のステートを他のコンピュータに転送完了するまでの残り時間が所定の閾値以下であるという条件である。
【００７１】
ＬＭ実行部８０２は、例えば、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が所定の閾値以上である場合、第２の条件を満たすと判定する。また、ＬＭ実行部８０２は、図６に示したＦＰＧＡ実行状態表６００を参照して、ＦＰＧＡ１２０が実現しているアクセラレータが処理を実行していない場合、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していないと判定する。そして、ＬＭ実行部８０２は、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える。
【００７２】
これにより、ＬＭ実行部８０２は、ＦＰＧＡ１２０が使用中ではないときにＶＭ１１０を実行するコンピュータを切り替えることができ、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０の処理結果を取得しなくてよいようにすることができる。結果として、ＬＭ実行部８０２は、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０から処理結果を取得することができずに障害を発生してしまうことがないようにして、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【００７３】
ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはエミュレータ１１１に実行させる。ＦＰＧＡアクセス処理部８０３は、例えば、図７に示したＦＰＧＡ実行モード表７００のｍｏｄｅにエミュレータ実行モードが設定されていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはエミュレータ１１１に実行させる。
【００７４】
これにより、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないようにすることができる。具体的には、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【００７５】
ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていなければ、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはＦＰＧＡ１２０に実行させる。ＦＰＧＡアクセス処理部８０３は、例えば、図７に示したＦＰＧＡ実行モード表７００のｍｏｄｅにハードウェア実行モードが設定されていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはＦＰＧＡ１２０に実行させる。
【００７６】
これにより、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たす前には、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をそのままＦＰＧＡ１２０に実行させることができる。そして、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理を、ＦＰＧＡ１２０よりも処理の実行にかかる時間が比較的長くなりやすいエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０の性能低下を抑制することができる。
【００７７】
ＦＰＧＡアクセス処理部８０３は、ＦＰＧＡ１２０に処理を実行させる場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０に実行させる処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに「１」を設定する。その後、ＦＰＧＡアクセス処理部８０３は、ＦＰＧＡ１２０が処理を終了した場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０が終了した処理に用いられたアクセラレータに対応するｅｘｅｃ  ｆｌａｇを「０」に戻す。これにより、ＦＰＧＡアクセス処理部８０３は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定可能にすることができる。
【００７８】
（実施例１における情報処理装置１００のモジュール構成例）
次に、図９を用いて、図８に示した制御部となる機能を具体的に実現する、実施例１における情報処理装置１００のモジュール構成例について説明する。
【００７９】
図９は、実施例１における情報処理装置１００のモジュール構成例を示す説明図である。図９の例では、情報処理装置１００のハードウェア９００は、図３に示したＣＰＵ３０１やメモリ３０２と、ＦＰＧＡ１２０となどを有する。ＦＰＧＡ１２０は、ＡＣＣ  ＩＤ「ＡＣＣ１、ＡＣＣ２」などが割り当てられたアクセラレータ９０１，９０２などを実現している。ハードウェア９００において、ハイパーバイザ９１０が動作している。ハイパーバイザ９１０は、図４に示したアクセラレータ表４００や図５に示した格納先パス表５００などを有する。ハイパーバイザ９１０は、さらに、ＶＭ起動部９１１と、ＶＭ実行部９１２と、ホストドライバ９１３とを有する。
【００８０】
ハイパーバイザ９１０において、ＬＭ指示受付部９５０と、ＶＭ１１０とが動作している。ＶＭ１１０は、仮想ＦＰＧＡ９２０と、ユーザプロセス９２１と、ライブラリ９２２と、ゲストドライバ９２３とを有する。仮想ＦＰＧＡ９２０は、Ｉ／Ｏエミュレータ９３０を有する。Ｉ／Ｏエミュレータ９３０は、図６に示したＦＰＧＡ実行状態表６００と、図７に示したＦＰＧＡ実行モード表７００とを有する。Ｉ／Ｏエミュレータ９３０は、さらに、ＬＭ実行部９３１と、ＦＰＧＡアクセス処理部９３２と、エミュレータコード部９４０とを有する。
【００８１】
ＶＭ起動部９１１は、図４に示したアクセラレータ表４００や図５に示した格納先パス表５００などを参照して、ＶＭ１１０の起動時に、アクセラレータに対応するエミュレータ１１１をＶＭ１１０が有するＩ／Ｏエミュレータ９３０に組み込むことができる。ＶＭ起動部９１１は、例えば、図８に示したＶＭ起動部８０１に対応する。ＶＭ実行部９１２は、ＶＭコードを実行することができる。ホストドライバ９１３は、ＦＰＧＡ１２０へのアクセスを制御し、ＦＰＧＡ１２０に処理を実行させることができる。
【００８２】
ＬＭ指示受付部９５０は、ユーザからのライブマイグレーション要求の操作入力を受け付けて、ＬＭ実行部９３１にライブマイグレーション要求を送信することができる。ユーザプロセス９２１は、ＶＭ１１０のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が実行しているプロセスである。ライブラリ９２２は、ＶＭ１１０のＯＳが使用するプログラムである。ゲストドライバ９２３は、ＶＭ１１０のＯＳが使用するドライバである。
【００８３】
ＬＭ実行部９３１は、ライブマイグレーションを実行する。ＬＭ実行部９３１は、図６に示したＦＰＧＡ実行状態表６００を参照して、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していないときに、ＶＭ１１０を実行するコンピュータを切り替える。ＬＭ実行部９３１は、図８に示したＬＭ実行部８０２に対応する。
【００８４】
ＦＰＧＡアクセス処理部９３２は、図７に示したＦＰＧＡ実行モード表７００を参照して、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理について、アクセラレータ９０１，９０２などに実行させるか否かを切り替える。ＦＰＧＡアクセス処理部９３２は、図８に示したＦＰＧＡアクセス処理部８０３に対応する。エミュレータコード部９４０は、エミュレータコードに基づいてエミュレータ１１１を実行することができる。
【００８５】
（実施例１における情報処理装置１００の動作の流れの一例）
次に、図１０〜図１３を用いて、実施例１における情報処理装置１００の動作の流れの一例について説明する。
【００８６】
図１０〜図１３は、実施例１における情報処理装置１００の動作の流れの一例を示す説明図である。図１０は、具体的には、情報処理装置１００がＶＭ１１０を起動する動作の流れの一例を示す。図１０の例では、（１０−１）ＶＭ起動部９１１は、図４に示したアクセラレータ表４００を参照して、ＦＰＧＡ１２０が実現しているアクセラレータ９０１，９０２のＡＣＣ  ＩＤ「ＡＣＣ１、ＡＣＣ２」を読み出す。
【００８７】
（１０−２）ＶＭ起動部９１１は、図５に示した格納先パス表５００を参照して、読み出したＡＣＣ  ＩＤ「ＡＣＣ１、ＡＣＣ２」に対応するｂｉｔｆｉｌｅ  ｐａｔｈを読み出す。ＶＭ起動部９１１は、読み出したｂｉｔｆｉｌｅ  ｐａｔｈ「／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ１、／ｖａｒ／ｌｉｂ／ｂｉｔｆｉｌｅ／ａｃｃ２」が示す記憶領域から、アクセラレータ９０１，９０２に対応するエミュレータコードを読み出す。
【００８８】
ＶＭ起動部９１１は、読み出したアクセラレータ９０１，９０２に対応するエミュレータコード９４１，９４２を、Ｉ／Ｏエミュレータコードに組み込み、Ｉ／Ｏエミュレータコードに基づいてＩ／Ｏエミュレータ９３０を起動する。これにより、Ｉ／Ｏエミュレータ９３０が有するエミュレータコード部９４０は、アクセラレータ９０１，９０２に対応するエミュレータコード９４１，９４２を記憶することができる。
【００８９】
（１０−３）Ｉ／Ｏエミュレータ９３０は、起動されると、ＶＭ実行部９１２にシステムコールを発行することにより、ＶＭ実行部９１２にＶＭコードを実行させる。これにより、情報処理装置１００は、ＶＭ１１０を起動することができる。次に、図１１の説明に移行する。
【００９０】
図１１は、具体的には、情報処理装置１００がＦＰＧＡ１２０に処理を実行させる動作の流れの一例を示す。図１１の例では、（１１−１）ＦＰＧＡアクセス処理部９３２は、ＶＭ１１０からＦＰＧＡ１２０に依頼される、いずれかのアクセラレータを用いる処理を受け付ける。
【００９１】
（１１−２）ＦＰＧＡアクセス処理部９３２は、図７に示したＦＰＧＡ実行モード表７００を参照して、ハードウェア実行モードであるか、エミュレータ実行モードであるかを判定する。ここでは、ＦＰＧＡアクセス処理部９３２は、ハードウェア実行モードであると判定する。
【００９２】
（１１−３）ＦＰＧＡアクセス処理部９３２は、ハードウェア実行モードであると判定したため、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０に実行させる処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに「１」を設定する。
【００９３】
（１１−４）ＦＰＧＡアクセス処理部９３２は、いずれかのアクセラレータを用いる処理を、ＦＰＧＡ１２０に実行させる。ＦＰＧＡアクセス処理部９３２は、例えば、いずれかのアクセラレータを用いる処理について、ホストドライバ９１３を介してＦＰＧＡ１２０に対してシステムコールを発行する。ＦＰＧＡアクセス処理部９３２は、システムコールの完了などを待ち、ＦＰＧＡ１２０が処理を終了したことを検出する。
【００９４】
その後、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０が処理を終了した場合、処理結果を受け付けて、ＶＭ１１０に出力する。また、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０が処理を終了した場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０が終了した処理に用いられたアクセラレータに対応するｅｘｅｃ  ｆｌａｇを「０」に戻す。次に、図１２の説明に移行する。
【００９５】
図１２は、具体的には、情報処理装置１００がエミュレータに処理を実行させる動作の流れの一例を示す。図１２の例では、（１２−１）ＦＰＧＡアクセス処理部９３２は、ＶＭ１１０からＦＰＧＡ１２０に依頼される、いずれかのアクセラレータを用いる処理を受け付ける。
【００９６】
（１２−２）ＦＰＧＡアクセス処理部９３２は、図７に示したＦＰＧＡ実行モード表７００を参照して、ハードウェア実行モードであるか、エミュレータ実行モードであるかを判定する。ここでは、ＦＰＧＡアクセス処理部９３２は、エミュレータ実行モードであると判定する。
【００９７】
（１２−３）ＦＰＧＡアクセス処理部９３２は、エミュレータ実行モードであると判定したため、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理に用いられるアクセラレータを特定する。ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータに対応するエミュレータ１１１を用いて、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理が実行されるように、エミュレータコード部９４０に実行要求を送信する。
【００９８】
その後、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０が処理を終了した場合、処理結果を受け付けて、ＶＭ１１０に出力する。これにより、情報処理装置１００は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。次に、図１３の説明に移行する。
【００９９】
図１３は、具体的には、情報処理装置１００がライブマイグレーションを行う動作の流れの一例を示す。図１３の例では、（１３−１）ＬＭ指示受付部９５０は、ユーザ１３００からのライブマイグレーション要求の操作入力を受け付けて、ＬＭ実行部９３１にライブマイグレーション要求を送信する。ＬＭ実行部９３１は、ライブマイグレーション要求を受信する。
【０１００】
（１３−２）ＬＭ実行部９３１は、移動先装置１３０へのＶＭ１１０のステートの転送を開始することにより、移動先装置１３０へのＶＭ１１０のステートのコピーを開始する。ＬＭ実行部９３１は、転送中にステートが変更された場合、ステートの差分をさらに移動先装置１３０に転送する。
【０１０１】
（１３−３）ＬＭ実行部９３１は、ライブマイグレーションが開始されたことに応じて、ＶＭ１１０を、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える。ＬＭ実行部９３１は、具体的には、図７に示したＦＰＧＡ実行モード表７００のｍｏｄｅを、ハードウェア実行モードからエミュレータ実行モードに切り替える。
【０１０２】
これにより、ＬＭ実行部９３１は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【０１０３】
（１３−４）ＬＭ実行部９３１は、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が所定の閾値以上であるか否かを判定する。ＬＭ実行部９３１は、所定の閾値以上である場合、図６に示したＦＰＧＡ実行状態表６００を参照して、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定する。
【０１０４】
（１３−５）ＬＭ実行部９３１は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える。ＬＭ実行部９３１は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していれば、ＶＭ１１０を実行するコンピュータを切り替えずに所定の時間待機して（１３−４）に戻る。ＬＭ実行部９３１は、ライブマイグレーションの完了後、移動先装置１３０において、図７に示したＦＰＧＡ実行モード表７００のｍｏｄｅを、ハードウェア実行モードに戻す。
【０１０５】
これにより、ＬＭ実行部９３１は、ＦＰＧＡ１２０が使用中ではないときにＶＭ１１０を実行するコンピュータを切り替えることができ、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０の処理結果を取得しなくてよいようにすることができる。結果として、ＬＭ実行部９３１は、移動先装置１３０においてＶＭ１１０がＦＰＧＡ１２０から処理結果を取得することができずに障害を発生してしまうことがないようにして、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０１０６】
（実施例１におけるライブマイグレーションの流れの一例）
次に、図１４を用いて、実施例１におけるライブマイグレーションの流れの一例について説明する。
【０１０７】
図１４は、実施例１におけるライブマイグレーションの流れの一例を示す説明図である。図１４の例では、（１４−１）ユーザ１３００からの操作入力により、情報処理装置１００にライブマイグレーション要求が入力される。
【０１０８】
（１４−２）情報処理装置１００は、ＶＭ１１０のステートを移動先装置１３０に転送していく。情報処理装置１００は、転送中にステートが変更された場合、ステートの差分をさらに移動先装置１３０に転送する。このとき、情報処理装置１００は、転送中のいずれかのタイミングで、ＶＭ１１０を、ＦＰＧＡ１２０に処理を実行させる状態から、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させる状態に切り替える。
【０１０９】
（１４−３）情報処理装置１００は、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が所定の閾値以上であるか否かを判定する。情報処理装置１００は、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が所定の閾値以上である場合、図６に示したＦＰＧＡ実行状態表６００を参照して、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しなくなるまで待機する。
【０１１０】
（１４−４）情報処理装置１００は、ＶＭ１１０のステートのうち移動先装置１３０に転送したステートの割合が所定の閾値以上であり、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０の仮想ＣＰＵを停止する。
【０１１１】
（１４−５）情報処理装置１００は、ＶＭ１１０のステートのうち、まだ転送せずに残っているＶＭ１１０のステートがあれば、残っているＶＭ１１０のステートを移動先装置１３０に転送する。
【０１１２】
（１４−６）情報処理装置１００は、ＶＭ１１０の再開指示を、移動先装置１３０に送信する。
【０１１３】
（１４−７）情報処理装置１００は、ＶＭ１１０の再開指示を送信すると、自装置においてはＶＭ１１０を実行終了する。
【０１１４】
（１４−８）移動先装置１３０は、ＶＭ１１０の再開指示を受信すると、ＶＭ１１０の仮想ＣＰＵの実行を再開し、ＶＭ１１０を実行する。これにより、情報処理装置１００は、移動先装置１３０においてＶＭ１１０に障害が発生しないように、ライブマイグレーションを行うことができる。
【０１１５】
（実施例１におけるＶＭ起動処理手順の一例）
次に、図１５を用いて、実施例１におけるＶＭ起動処理手順の一例について説明する。
【０１１６】
図１５は、実施例１におけるＶＭ起動処理手順の一例を示すフローチャートである。図１５において、ＶＭ起動部９１１は、まだ読み出していないＡＣＣ  ＩＤをアクセラレータ表４００から読み出す（ステップＳ１５０１）。次に、ＶＭ起動部９１１は、読み出したＡＣＣ  ＩＤに対応するｂｉｔｆｉｌｅ  ｐａｔｈを格納先パス表５００から読み出して、読み出したｂｉｔｆｉｌｅ  ｐａｔｈに基づいてエミュレータコードを読み出す（ステップＳ１５０２）。
【０１１７】
そして、ＶＭ起動部９１１は、まだ読み出していないＡＣＣ  ＩＤがあるか否かを判定する（ステップＳ１５０３）。ここで、まだ読み出していないＡＣＣ  ＩＤがある場合（ステップＳ１５０３：Ｙｅｓ）、ＶＭ起動部９１１は、ステップＳ１５０１の処理に戻る。
【０１１８】
一方で、読み出していないＡＣＣ  ＩＤがない場合（ステップＳ１５０３：Ｎｏ）、ＶＭ起動部９１１は、読み出したエミュレータコードをＩ／Ｏエミュレータコードに組み込み、Ｉ／Ｏエミュレータ９３０を起動する（ステップＳ１５０４）。ここで、Ｉ／Ｏエミュレータ９３０は、ＶＭ実行部９１２にＶＭコードを実行開始させる（ステップＳ１５０５）。
【０１１９】
そして、ＶＭ起動部９１１は、ＦＰＧＡ実行モード表７００のｍｏｄｅを、ハードウェア実行モードに設定する（ステップＳ１５０６）。ＶＭ起動部９１１は、ＶＭ起動処理手順を終了する。これにより、ＶＭ起動部９１１は、エミュレータ１１１が組み込まれ、ライブマイグレーションが行われても移動先装置１３０において障害が発生しにくくなっているＶＭ１１０を起動することができる。
【０１２０】
（実施例１におけるハードウェアアクセス処理手順の一例）
次に、図１６を用いて、実施例１におけるハードウェアアクセス処理手順の一例について説明する。
【０１２１】
図１６は、実施例１におけるハードウェアアクセス処理手順の一例を示すフローチャートである。図１６において、ＶＭ１１０のドライバは、仮想ＦＰＧＡ９２０にアクセスする（ステップＳ１６０１）。ハイパーバイザ９１０は、ＶＭ  ＥＸＩＴを発生させて、Ｉ／Ｏをトラップする（ステップＳ１６０２）。ハイパーバイザ９１０は、Ｉ／Ｏエミュレータ９３０に処理を移行する（ステップＳ１６０３）。
【０１２２】
Ｉ／Ｏエミュレータ９３０のＦＰＧＡアクセス処理部９３２は、Ｉ／Ｏ先がＦＰＧＡ１２０であるか否かを判定する（ステップＳ１６０４）。ここで、ＦＰＧＡ１２０である場合（ステップＳ１６０４：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、図１７に示すＦＰＧＡアクセス処理を実行し（ステップＳ１６０５）、ステップＳ１６０７の処理に移行する。
【０１２３】
一方で、ＦＰＧＡ１２０ではない場合（ステップＳ１６０４：Ｎｏ）、ＦＰＧＡアクセス処理部９３２は、Ｉ／Ｏ先となるＦＰＧＡ１２０以外のハードウェアに対応するハードウェアエミュレーションを実行する（ステップＳ１６０６）。そして、ＦＰＧＡアクセス処理部９３２は、ステップＳ１６０７の処理に移行する。
【０１２４】
ステップＳ１６０７にて、ＦＰＧＡアクセス処理部９３２は、ＶＭ  ＥＮＴＲＹを発生させ、ＶＭ実行部９１２にＶＭコードを実行再開させる（ステップＳ１６０７）。そして、情報処理装置１００は、ハードウェアアクセス処理を終了する。これにより、情報処理装置１００は、ＦＰＧＡ１２０に処理を実行させるか、エミュレータ１１１に処理を実行させるかを判定可能になる。
【０１２５】
（実施例１におけるＦＰＧＡアクセス処理手順の一例）
次に、図１７を用いて、実施例１におけるＦＰＧＡアクセス処理手順の一例について説明する。
【０１２６】
図１７は、実施例１におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。図１７において、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行モード表７００のｍｏｄｅが、ハードウェア実行モードであるか否かを判定する（ステップＳ１７０１）。ここで、ハードウェア実行モードである場合（ステップＳ１７０１：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ１７０２の処理に移行する。
【０１２７】
ステップＳ１７０２にて、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行状態表６００の、処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中を示すフラグを設定する（ステップＳ１７０２）。次に、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０に対して、アクセラレータを用いた処理についての処理要求を発行する（ステップＳ１７０３）。そして、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ１７０４）。
【０１２８】
その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、ＦＰＧＡ実行状態表６００の、処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中ではないことを示すフラグを設定する（ステップＳ１７０５）。そして、ＦＰＧＡアクセス処理部９３２は、ステップＳ１７１０の処理に移行する。
【０１２９】
一方で、ハードウェア実行モードではない場合（ステップＳ１７０１：Ｎｏ）、ＦＰＧＡアクセス処理部９３２は、処理の内容から、処理に用いられるアクセラレータの種類を特定する（ステップＳ１７０６）。次に、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータコードがあるか否かを判定する（ステップＳ１７０７）。ここで、エミュレータコードがない場合（ステップＳ１７０７：Ｎｏ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ１７０１の処理に戻る。
【０１３０】
一方で、エミュレータコードがある場合（ステップＳ１７０７：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータ１１１に処理を実行させる（ステップＳ１７０８）。次に、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ１７０９）。その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、ステップＳ１７１０の処理に移行する。
【０１３１】
ステップＳ１７１０にて、ＦＰＧＡアクセス処理部９３２は、ＶＭ１１０のバッファに、アクセラレータを用いた処理についての実行結果をコピーする（ステップＳ１７１０）。そして、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡアクセス処理を終了する。これにより、情報処理装置１００は、ＦＰＧＡ１２０を用いて効率よく処理を行うことができる。また、情報処理装置１００は、ライブマイグレーションが行われても移動先装置１３０において障害が発生しない状態で、ＶＭ１１０を動作させることができる。
【０１３２】
（実施例１におけるＬＭ実行処理手順の一例）
次に、図１８を用いて、実施例１におけるＬＭ実行処理手順の一例について説明する。
【０１３３】
図１８は、実施例１におけるＬＭ実行処理手順の一例を示すフローチャートである。図１８において、ＬＭ実行部９３１は、ライブマイグレーション要求を受信する（ステップＳ１８０１）。次に、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分を移動先装置１３０に転送する（ステップＳ１８０２）。そして、ＬＭ実行部９３１は、ＶＭ１１０のステートの転送が、所定の割合まで完了したか否かを判定する（ステップＳ１８０３）。ここで、完了していない場合（ステップＳ１８０３：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ１８０２の処理に戻る。
【０１３４】
一方で、完了した場合（ステップＳ１８０３：Ｙｅｓ）、ＬＭ実行部９３１は、ＦＰＧＡ実行モード表７００のｍｏｄｅを、エミュレータ実行モードに設定する（ステップＳ１８０４）。次に、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分を移動先装置１３０に転送する（ステップＳ１８０５）。そして、ＬＭ実行部９３１は、ＶＭ１１０のステートの転送が、所定の割合まで完了したか否かを判定する（ステップＳ１８０６）。ここで、完了していない場合（ステップＳ１８０６：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ１８０５の処理に戻る。
【０１３５】
一方で、完了した場合（ステップＳ１８０６：Ｙｅｓ）、ＬＭ実行部９３１は、ＦＰＧＡ実行状態表６００に基づいて、実行中のアクセラレータがあるか否かを判定する（ステップＳ１８０７）。ここで、実行中のアクセラレータがある場合（ステップＳ１８０７：Ｙｅｓ）、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分を移動先装置１３０に転送する（ステップＳ１８０８）。
【０１３６】
次に、ＬＭ開始からタイムアウト時間が経過したか否かを判定する（ステップＳ１８０９）。ここで、タイムアウト時間が経過していない場合（ステップＳ１８０９：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ１８０７の処理に戻る。
【０１３７】
一方で、タイムアウト時間が経過している場合（ステップＳ１８０９：Ｙｅｓ）、ＬＭ実行部９３１は、ライブマイグレーションの失敗を通知し、ライブマイグレーションを中断し、ＶＭ１１０を再開する（ステップＳ１８１０）。そして、ＬＭ実行部９３１は、ステップＳ１８１２の処理に移行する。
【０１３８】
一方で、実行中のアクセラレータがない場合（ステップＳ１８０７：Ｎｏ）、ＬＭ実行部９３１は、ＶＭ１１０を一時停止し、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える（ステップＳ１８１１）。そして、ＬＭ実行部９３１は、ステップＳ１８１２の処理に移行する。
【０１３９】
ステップＳ１８１２にて、ＬＭ実行部９３１は、ＦＰＧＡ実行モード表７００のｍｏｄｅを、ハードウェア実行モードに設定する（ステップＳ１８１２）。そして、ＬＭ実行部９３１は、ＬＭ実行処理を終了する。これにより、情報処理装置１００は、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制するように、ライブマイグレーションを行うことができる。
【０１４０】
（ライブマイグレーションにおける実施例２）
次に、実施例２について説明する。実施例２は、上述したように、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理に用いるアクセラレータの種類ごとに異なるタイミングで、ＦＰＧＡ１２０に処理を実行させるか、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させるかを切り替える例である。
【０１４１】
（実施例２におけるアクセラレータ表４００の記憶内容）
実施例２におけるアクセラレータ表４００の記憶内容は、図４に示した実施例１におけるアクセラレータ表４００の記憶内容と同様であるため、説明を省略する。
【０１４２】
（実施例２における格納先パス表５００の記憶内容）
実施例２における格納先パス表５００の記憶内容は、図５に示した実施例１における格納先パス表５００の記憶内容と同様であるため、説明を省略する。
【０１４３】
（実施例２におけるＦＰＧＡ実行状態表６００の記憶内容）
実施例２におけるＦＰＧＡ実行状態表６００の記憶内容は、図６に示した実施例１におけるＦＰＧＡ実行状態表６００の記憶内容と同様であるため、説明を省略する。
【０１４４】
（実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容）
実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容は、図７に示した実施例１におけるＦＰＧＡ実行モード表７００とは異なり、ＦＰＧＡ１２０が実現しているアクセラレータごとに各フィールドに情報が設定されている記憶内容である。
【０１４５】
ここで、図１９を用いて、情報処理装置１００によって記憶される、実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容の一例について説明する。ＦＰＧＡ実行モード表１９００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【０１４６】
図１９は、実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容の一例を示す説明図である。図１９に示すように、ＦＰＧＡ実行モード表１９００は、ＡＣＣ  ＩＤと、ｍｏｄｅとのフィールドを有する。ＦＰＧＡ実行モード表１９００は、ＦＰＧＡ１２０が実現しているアクセラレータごとに各フィールドに情報を設定することにより、アクセラレータごとの実行モード情報がレコードとして記憶される。
【０１４７】
ＡＣＣ  ＩＤのフィールドには、ＦＰＧＡ１２０が実現しているアクセラレータを一意に特定する識別情報が設定される。ｍｏｄｅのフィールドには、ＶＭ１１０についての処理を、ＦＰＧＡ１２０が実現しているアクセラレータに実行させるか、ＦＰＧＡ１２０が実現しているアクセラレータに対応するエミュレータ１１１に実行させるかを示すｍｏｄｅが設定される。ｍｏｄｅは、例えば、アクセラレータに実行させる場合であれば「１」であり、エミュレータ１１１に実行させる場合であれば「０」である。このように、ＦＰＧＡ実行モード表１９００は、ＶＭ１１０についての処理を、アクセラレータに実行させるか、エミュレータ１１１に実行させるかを判定可能にすることができる。
【０１４８】
（実施例２におけるモード切替タイミング表２０００の記憶内容）
次に、図２０を用いて、情報処理装置１００によって記憶される、実施例２におけるモード切替タイミング表２０００の記憶内容の一例について説明する。モード切替タイミング表２０００は、例えば、図３に示した情報処理装置１００のメモリ３０２やディスクドライブ３０４などの記憶領域により実現される。
【０１４９】
図２０は、実施例２におけるモード切替タイミング表２０００の記憶内容の一例を示す説明図である。図２０に示すように、モード切替タイミング表２０００は、ＡＣＣ  ＩＤと、ｔｉｍｉｎｇとのフィールドを有する。モード切替タイミング表２０００は、ＦＰＧＡ１２０について各フィールドに情報を設定することにより、切替タイミング情報がレコードとして記憶される。
【０１５０】
ＡＣＣ  ＩＤのフィールドには、ＦＰＧＡ１２０が実現しているアクセラレータを一意に特定する識別情報が設定される。ｔｉｍｉｎｇのフィールドには、ＶＭ１１０についての処理を、アクセラレータに実行させるか、エミュレータ１１１に実行させるかを切り替える時機を示す切替タイミングが設定される。切替タイミングは、例えば、ライブマイグレーションが完了するまでの残り時間によって表現される。切替タイミングは、例えば、ＶＭ１１０のステートのうち、移動先装置１３０に転送されたＶＭ１１０のステートの割合によって表現されてもよい。このように、モード切替タイミング表２０００は、ＶＭ１１０についての処理を、アクセラレータに実行させるか、エミュレータ１１１に実行させるかを、いつ切り替えるかを特定可能にすることができる。
【０１５１】
（実施例２における情報処理装置１００の機能的構成例）
次に、実施例２における情報処理装置１００の機能的構成例について説明する。実施例２における情報処理装置１００の機能的構成例は、図８に示した実施例１における情報処理装置１００の機能的構成例と同様である。換言すれば、情報処理装置１００は、ＶＭ起動部８０１と、ＬＭ実行部８０２と、ＦＰＧＡアクセス処理部８０３とを含む構成である。
【０１５２】
ＶＭ起動部８０１は、実施例１と同様に、ＶＭ１１０の起動時に、動的に機能を定義可能なハードウェアの代用となるエミュレータ１１１をＶＭ１１０に組み込む。これにより、ＶＭ起動部８０１は、Ｉ／Ｏエミュレータ９３０に、ＶＭコードを実行開始させることができる。
【０１５３】
ＬＭ実行部８０２は、実施例１と同様に、エミュレータ１１１が組み込まれたＶＭ１１０のライブマイグレーションの指示を受信したことに応じて、他のコンピュータへのＶＭ１１０のライブマイグレーションを開始する。
【０１５４】
ＬＭ実行部８０２は、実施例１とは異なり、対応情報を参照し、動的に機能を定義可能なハードウェアが有する複数の機能のそれぞれについてＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たすか否かを判定する。機能とは、例えば、アクセラレータである。対応情報とは、動的に機能を定義可能なハードウェアが有する複数の機能のそれぞれに第１の条件を対応付けた情報である。対応情報は、例えば、図２０に示したモード切替タイミング表２０００である。
【０１５５】
ＶＭ実行部９１２は、例えば、ＶＭ１１０が実現しているアクセラレータごとに、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いがアクセラレータに対応する第１の条件を満たすか否かを判定する。そして、ＬＭ実行部８０２は、第１の条件を満たしたアクセラレータを用いた処理について、ＦＰＧＡ１２０が実現しているアクセラレータの代わりに、エミュレータ１１１に実行させるようにする。第１の条件は、例えば、図２０に示したモード切替タイミング表２０００に記憶された、アクセラレータごとの切替タイミングである。
【０１５６】
ＬＭ実行部８０２は、具体的には、図２０に示したモード切替タイミング表２０００を参照して、アクセラレータごとの切替タイミングを読み出す。ＬＭ実行部８０２は、アクセラレータごとに、読み出した切替タイミングが示す時機になったことに応じて、当該アクセラレータに対応するエミュレータ１１１に処理を実行させるようにする。
【０１５７】
ＬＭ実行部８０２は、より具体的には、アクセラレータごとに、読み出した切替タイミングが示す時機になったことに応じて、当該アクセラレータに対応する図１９に示したＦＰＧＡ実行モード表１９００のｍｏｄｅを、エミュレータ実行モードに切り替える。これにより、ＬＭ実行部８０２は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【０１５８】
ＬＭ実行部８０２は、実施例１と同様に、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第２の条件を満たすか否かを判定する。また、ＬＭ実行部８０２は、実施例１と同様に、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定する。そして、ＬＭ実行部８０２は、実施例１と同様に、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを他のコンピュータに切り替える。
【０１５９】
ＦＰＧＡアクセス処理部８０３は、実施例１とは異なり、データ転送にかかる進捗度合いが複数の機能のいずれかに対応付けられた第１の条件を満たしていれば、第１の条件を満たす機能を用いた処理についてはエミュレータ１１１に実行させる。
【０１６０】
ＦＰＧＡアクセス処理部８０３は、例えば、第１の条件を満たすアクセラレータを用いる処理についてはエミュレータ１１１に実行させる一方で、第１の条件を満たしていないアクセラレータを用いた処理についてはＦＰＧＡ１２０に実行させる。ＦＰＧＡアクセス処理部８０３は、具体的には、図１９に示したＦＰＧＡ実行モード表１９００のｍｏｄｅにエミュレータ実行モードが設定されたアクセラレータを用いた処理についてはエミュレータ１１１に実行させる。
【０１６１】
これにより、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないようにすることができる。具体的には、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【０１６２】
また、ＦＰＧＡアクセス処理部８０３は、例えば、図１９に示したＦＰＧＡ実行モード表１９００のｍｏｄｅにハードウェア実行モードが設定されたアクセラレータを用いた処理については、ＦＰＧＡ１２０が実現しているアクセラレータに実行させる。
【０１６３】
これにより、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たす前には、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をそのままＦＰＧＡ１２０に実行させることができる。そして、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理を、ＦＰＧＡ１２０よりも処理の実行にかかる時間が比較的長くなりやすいエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０の性能低下を抑制することができる。
【０１６４】
ＦＰＧＡアクセス処理部８０３は、実施例１と同様に、ＦＰＧＡ１２０に処理を実行させる場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０に実行させる処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに「１」を設定する。その後、ＦＰＧＡアクセス処理部８０３は、実施例１と同様に、ＦＰＧＡ１２０が処理を終了した場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０が終了した処理に用いられたアクセラレータに対応するｅｘｅｃ  ｆｌａｇを「０」に戻す。これにより、ＦＰＧＡアクセス処理部８０３は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定可能にすることができる。
【０１６５】
（実施例２における情報処理装置１００のモジュール構成例）
次に、図２１を用いて、実施例２における情報処理装置１００のモジュール構成例について説明する。
【０１６６】
図２１は、実施例２における情報処理装置１００のモジュール構成例を示す説明図である。実施例２における情報処理装置１００のモジュール構成例のうち、図９に示した実施例１における情報処理装置１００のモジュール構成例と同様の部分については説明を省略する。
【０１６７】
図２１の例では、ハイパーバイザ９１０は、さらに、切替タイミング格納部２１００を有する。Ｉ／Ｏエミュレータ９３０は、さらに、図１９に示したＦＰＧＡ実行モード表１９００と、図２０に示したモード切替タイミング表２０００とを有する。ＬＭ実行部９３１は、さらに、ＬＭ完了時間推計部２１１０を有する。
【０１６８】
切替タイミング格納部２１００は、ユーザ１３００からの操作入力などに基づいて、Ｉ／Ｏエミュレータ９３０が有する図２０に示したモード切替タイミング表２０００を更新することができる。ＬＭ完了時間推計部２１１０は、ライブマイグレーションが完了するまでの残り時間を算出することができる。
【０１６９】
（実施例２における情報処理装置１００の動作の流れの一例）
同じく、図２１を用いて、実施例２における情報処理装置１００の動作の流れの一例について説明する。具体的には、情報処理装置１００がライブマイグレーションを行う際に、アクセラレータごとに、ハードウェア実行モードと、エミュレータ実行モードとを切り替える動作の流れについて説明する。ここでは、ＬＭ実行部９３１は、移動先装置１３０へのＶＭ１１０のステートの転送を開始しているとする。
【０１７０】
（２１−１）ＬＭ実行部９３１は、図２０に示したモード切替タイミング表２０００を参照して、アクセラレータごとの切替タイミングを読み出す。また、ＬＭ実行部９３１は、移動先装置１３０へのＶＭ１１０のステートの転送を開始した後、所定の間隔で、ＬＭ完了時間推計部２１１０を用いてライブマイグレーションが完了するまでの残り時間を算出する。
【０１７１】
（２１−２）ＬＭ実行部９３１は、読み出したアクセラレータごとの切替タイミングと、算出した残り時間とを比較し、切替タイミング＞残り時間になったアクセラレータがあるか否かを判定する。ＬＭ実行部９３１は、切替タイミング＞残り時間になったアクセラレータがあるか否かを判定する。
【０１７２】
ＬＭ実行部９３１は、切替タイミング＞残り時間になったアクセラレータがあれば、図１９に示したＦＰＧＡ実行モード表１９００のうち、切替タイミング＞残り時間になったアクセラレータについてのｍｏｄｅを、エミュレータ実行モードに切り替える。これにより、ＬＭ実行部９３１は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【０１７３】
（実施例２におけるＶＭ起動処理手順の一例）
次に、図２２を用いて、実施例２におけるＶＭ起動処理手順の一例について説明する。
【０１７４】
図２２は、実施例２におけるＶＭ起動処理手順の一例を示すフローチャートである。図２２において、ＶＭ起動部９１１は、まだ読み出していないＡＣＣ  ＩＤをアクセラレータ表４００から読み出す（ステップＳ２２０１）。次に、ＶＭ起動部９１１は、読み出したＡＣＣ  ＩＤに対応するｂｉｔｆｉｌｅ  ｐａｔｈを読み出して、読み出したｂｉｔｆｉｌｅ  ｐａｔｈに基づいてエミュレータコードを読み出す（ステップＳ２２０２）。
【０１７５】
そして、ＶＭ起動部９１１は、読み出したＡＣＣ  ＩＤに対応する切替タイミングを、モード切替タイミング表２０００から読み出す（ステップＳ２２０３）。その後、ＶＭ起動部９１１は、まだ読み出していないＡＣＣ  ＩＤがあるか否かを判定する（ステップＳ２２０４）。ここで、まだ読み出していないＡＣＣ  ＩＤがある場合（ステップＳ２２０４：Ｙｅｓ）、ＶＭ起動部９１１は、ステップＳ２２０１の処理に戻る。
【０１７６】
一方で、読み出していないＡＣＣ  ＩＤがない場合（ステップＳ２２０４：Ｎｏ）、ＶＭ起動部９１１は、読み出したエミュレータコードをＩ／Ｏエミュレータコードに組み込み、Ｉ／Ｏエミュレータ９３０を起動する（ステップＳ２２０５）。次に、Ｉ／Ｏエミュレータ９３０は、ＶＭ実行部９１２にＶＭコードを実行開始させる（ステップＳ２２０６）。
【０１７７】
そして、ＶＭ起動部９１１は、ＦＰＧＡ実行モード表１９００のｍｏｄｅを、ハードウェア実行モードに設定する（ステップＳ２２０７）。ＶＭ起動部９１１は、ＶＭ起動処理手順を終了する。これにより、ＶＭ起動部９１１は、アクセラレータごとに対応するエミュレータ１１１が組み込まれ、ライブマイグレーションが行われても移動先装置１３０において障害が発生しにくくなっているＶＭ１１０を起動することができる。
【０１７８】
（実施例２におけるハードウェアアクセス処理手順の一例）
実施例２におけるハードウェアアクセス処理手順は、図１６に示した実施例１におけるハードウェアアクセス処理手順と同様であるため、説明を省略する。
【０１７９】
（実施例２におけるＦＰＧＡアクセス処理手順の一例）
次に、図２３を用いて、実施例２におけるＦＰＧＡアクセス処理手順の一例について説明する。
【０１８０】
図２３は、実施例２におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。図２３において、ＦＰＧＡアクセス処理部９３２は、処理の内容から、処理に用いられるアクセラレータの種類を特定する（ステップＳ２３０１）。ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行モード表１９００の、特定したアクセラレータの種類に対応するｍｏｄｅが、ハードウェア実行モードであるか否かを判定する（ステップＳ２３０２）。ここで、ハードウェア実行モードである場合（ステップＳ２３０２：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ２３０３の処理に移行する。
【０１８１】
ステップＳ２３０３にて、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行状態表６００の、処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中を示すフラグを設定する（ステップＳ２３０３）。次に、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０に対して、アクセラレータを用いた処理についての処理要求を発行する（ステップＳ２３０４）。そして、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ２３０５）。
【０１８２】
その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、ＦＰＧＡ実行状態表６００の、処理に用いたアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中ではないことを示すフラグを設定する（ステップＳ２３０６）。そして、ＦＰＧＡアクセス処理部９３２は、ステップＳ２３１０の処理に移行する。
【０１８３】
一方で、ハードウェア実行モードではない場合（ステップＳ２３０２：Ｎｏ）、次に、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータコードがあるか否かを判定する（ステップＳ２３０７）。ここで、エミュレータコードがない場合（ステップＳ２３０７：Ｎｏ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ２３０２の処理に戻る。
【０１８４】
一方で、エミュレータコードがある場合（ステップＳ２３０７：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータ１１１に処理を実行させる（ステップＳ２３０８）。次に、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ２３０９）。その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、ステップＳ２３１０の処理に移行する。
【０１８５】
ステップＳ２３１０にて、ＦＰＧＡアクセス処理部９３２は、ＶＭ１１０のバッファに、アクセラレータを用いた処理についての実行結果をコピーする（ステップＳ２３１０）。そして、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡアクセス処理を終了する。これにより、情報処理装置１００は、ＦＰＧＡ１２０を用いて効率よく処理を行うことができる。また、情報処理装置１００は、ライブマイグレーションが行われても移動先装置１３０において障害が発生しない状態で、ＶＭ１１０を動作させることができる。
【０１８６】
（実施例２におけるＬＭ実行処理手順の一例）
次に、図２４を用いて、実施例２におけるＬＭ実行処理手順の一例について説明する。
【０１８７】
図２４は、実施例２におけるＬＭ実行処理手順の一例を示すフローチャートである。図２４において、ＬＭ実行部９３１は、ライブマイグレーション要求を受信する（ステップＳ２４０１）。次に、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分を移動先装置１３０に転送する（ステップＳ２４０２）。そして、ＬＭ実行部９３１は、ライブマイグレーション完了までの残り時間を算出する（ステップＳ２４０３）。
【０１８８】
次に、ＬＭ実行部９３１は、いずれかのアクセラレータを選択する（ステップＳ２４０４）。そして、ＬＭ実行部９３１は、選択したアクセラレータの切替タイミング＞算出した残り時間であるか否かを判定する（ステップＳ２４０５）。ここで、切替タイミング＞残り時間ではない場合（ステップＳ２４０５：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ２４０７の処理に移行する。
【０１８９】
一方で、切替タイミング＞残り時間である場合（ステップＳ２４０５：Ｙｅｓ）、ＬＭ実行部９３１は、選択したアクセラレータについて、ＦＰＧＡ実行モード表１９００のｍｏｄｅをエミュレータ実行モードに設定する（ステップＳ２４０６）。次に、ＬＭ実行部９３１は、未選択のアクセラレータがあるか否かを判定する（ステップＳ２４０７）。ここで、未選択のアクセラレータがある場合（ステップＳ２４０７：Ｙｅｓ）、ＬＭ実行部９３１は、ステップＳ２４０４の処理に戻る。
【０１９０】
一方で、未選択のアクセラレータがない場合（ステップＳ２４０７：Ｎｏ）、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分が、コミットすべき状態まで転送されたか否かを判定する（ステップＳ２４０８）。コミットすべき状態は、例えば、ＶＭ１１０を実行するコンピュータを切り替えてよい状態である。ここで、転送されていない場合（ステップＳ２４０８：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ２４０２の処理に戻る。
【０１９１】
一方で、転送されている場合（ステップＳ２４０８：Ｙｅｓ）、ＬＭ実行部９３１は、ＦＰＧＡ実行状態表６００に基づいて、実行中のアクセラレータがあるか否かを判定する（ステップＳ２４０９）。ここで、実行中のアクセラレータがある場合（ステップＳ２４０９：Ｙｅｓ）、ＬＭ実行部９３１は、ＶＭ１１０のステートの差分を移動先装置１３０に転送する（ステップＳ２４１０）。
【０１９２】
次に、ＬＭ実行部９３１は、ＬＭ開始からタイムアウト時間が経過したか否かを判定する（ステップＳ２４１１）。ここで、タイムアウト時間が経過していない場合（ステップＳ２４１１：Ｎｏ）、ＬＭ実行部９３１は、ステップＳ２４０８の処理に戻る。
【０１９３】
一方で、タイムアウト時間が経過している場合（ステップＳ２４１１：Ｙｅｓ）、ＬＭ実行部９３１は、ライブマイグレーションの失敗を通知し、ライブマイグレーションを中断し、ＶＭ１１０を再開する（ステップＳ２４１２）。そして、ＬＭ実行部９３１は、ステップＳ２４１４の処理に移行する。
【０１９４】
一方で、実行中のアクセラレータがない場合（ステップＳ２４０９：Ｎｏ）、ＬＭ実行部９３１は、ＶＭ１１０を一時停止し、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替える（ステップＳ２４１３）。そして、ＬＭ実行部９３１は、ステップＳ２４１４の処理に移行する。
【０１９５】
ステップＳ２４１４にて、ＬＭ実行部９３１は、ＦＰＧＡ実行モード表１９００のｍｏｄｅを、ハードウェア実行モードに設定する（ステップＳ２４１４）。そして、ＬＭ実行部９３１は、ＬＭ実行処理を終了する。これにより、情報処理装置１００は、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制するように、ライブマイグレーションを行うことができる。
【０１９６】
（ライブマイグレーションシステム２００における実施例３）
次に、実施例３について説明する。実施例３は、上述したように、実施例２と同様の例であり、実施例２におけるＦＰＧＡ１２０に処理を実行させるか、あるいは、ＦＰＧＡ１２０のエミュレータ１１１に処理を実行させるかを切り替えるタイミングを動的に変更する例である。
【０１９７】
（実施例３におけるアクセラレータ表４００の記憶内容）
実施例３におけるアクセラレータ表４００の記憶内容は、図４に示した実施例１におけるアクセラレータ表４００の記憶内容と同様であるため、説明を省略する。
【０１９８】
（実施例３における格納先パス表５００の記憶内容）
実施例３における格納先パス表５００の記憶内容は、図５に示した実施例１における格納先パス表５００の記憶内容と同様であるため、説明を省略する。
【０１９９】
（実施例３におけるＦＰＧＡ実行状態表６００の記憶内容）
実施例３におけるＦＰＧＡ実行状態表６００の記憶内容は、図６に示した実施例１におけるＦＰＧＡ実行状態表６００の記憶内容と同様であるため、説明を省略する。
【０２００】
（実施例３におけるＦＰＧＡ実行モード表１９００の記憶内容）
実施例３におけるＦＰＧＡ実行モード表１９００の記憶内容は、図１９に示した実施例２におけるＦＰＧＡ実行モード表１９００の記憶内容と同様であるため、説明を省略する。
【０２０１】
（実施例３におけるモード切替タイミング表２０００の記憶内容）
実施例３におけるモード切替タイミング表２０００の記憶内容は、図２０に示した実施例２におけるモード切替タイミング表２０００の記憶内容と同様であるため、説明を省略する。
【０２０２】
（実施例３における情報処理装置１００の機能的構成例）
次に、実施例３における情報処理装置１００の機能的構成例について説明する。実施例３における情報処理装置１００の機能的構成例は、図８に示した実施例１における情報処理装置１００の機能的構成例と同様である。換言すれば、情報処理装置１００は、ＶＭ起動部８０１と、ＬＭ実行部８０２と、ＦＰＧＡアクセス処理部８０３とを含む構成である。
【０２０３】
ＶＭ起動部８０１は、実施例１と同様に、ＶＭ１１０の起動時に、動的に機能を定義可能なハードウェアの代用となるエミュレータ１１１をＶＭ１１０に組み込む。これにより、ＶＭ起動部８０１は、Ｉ／Ｏエミュレータ９３０に、ＶＭコードを実行開始させることができる。
【０２０４】
ＬＭ実行部８０２は、実施例１と同様に、エミュレータ１１１が組み込まれたＶＭ１１０のライブマイグレーションの指示を受信したことに応じて、他のコンピュータへのＶＭ１１０のライブマイグレーションを開始する。
【０２０５】
ＬＭ実行部８０２は、実施例２と同様に、ＶＭ１１０が実現しているアクセラレータごとに、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いがアクセラレータに対応する第１の条件を満たすか否かを判定する。ＬＭ実行部８０２は、実施例２と同様に、第１の条件を満たしたアクセラレータを用いた処理について、ＦＰＧＡ１２０が実現しているアクセラレータの代わりに、エミュレータ１１１に実行させるようにする。これにより、ＬＭ実行部８０２は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないように、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。
【０２０６】
ＬＭ実行部８０２は、実施例１と同様に、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第２の条件を満たすか否かを判定する。また、ＬＭ実行部８０２は、実施例１と同様に、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定する。そして、ＬＭ実行部８０２は、実施例１と同様に、第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを他のコンピュータに切り替える。
【０２０７】
ＦＰＧＡアクセス処理部８０３は、実施例２と同様に、第１の条件を満たすアクセラレータを用いる処理についてはエミュレータ１１１に実行させる一方で、第１の条件を満たしていないアクセラレータを用いた処理についてはＦＰＧＡ１２０に実行させる。これにより、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たす前には、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をそのままＦＰＧＡ１２０に実行させることができる。結果として、ＦＰＧＡアクセス処理部８０３は、ＶＭ１１０の性能低下を抑制することができる。
【０２０８】
ＦＰＧＡアクセス処理部８０３は、実施例１と同様に、ＦＰＧＡ１２０に処理を実行させる場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０に実行させる処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに「１」を設定する。その後、ＦＰＧＡアクセス処理部８０３は、実施例１と同様に、ＦＰＧＡ１２０が処理を終了した場合、図６に示したＦＰＧＡ実行状態表６００のうち、ＦＰＧＡ１２０が終了した処理に用いられたアクセラレータに対応するｅｘｅｃ  ｆｌａｇを「０」に戻す。これにより、ＦＰＧＡアクセス処理部８０３は、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行しているか否かを判定可能にすることができる。
【０２０９】
ＦＰＧＡアクセス処理部８０３は、実施例２に加えて、複数の機能のそれぞれを用いた処理にかかる時間を計測し、計測した結果に基づいて対応情報を更新してもよい。機能とは、例えば、アクセラレータである。対応情報とは、例えば、モード切替タイミング表２０００である。ＦＰＧＡアクセス処理部８０３は、例えば、ＦＰＧＡ１２０に処理を実行させた場合、処理にかかった時間を計測し、計測した時間に基づいて図２０に示したモード切替タイミング表２０００の切替タイミングを更新する。
【０２１０】
（実施例３における情報処理装置１００のモジュール構成例）
次に、図２５を用いて、実施例３における情報処理装置１００のモジュール構成例について説明する。
【０２１１】
図２５は、実施例３における情報処理装置１００のモジュール構成例を示す説明図である。実施例３における情報処理装置１００のモジュール構成例のうち、図２１に示した実施例２における情報処理装置１００のモジュール構成例と同様の部分については説明を省略する。
【０２１２】
図２５の例では、ＦＰＧＡアクセス処理部９３２は、さらに、タイミング更新部２５００を有する。タイミング更新部２５００は、アクセラレータを用いた処理にかかる時間を計測し、計測した結果に基づいて図２０に示したモード切替タイミング表２０００を更新することができる。
【０２１３】
（実施例３における情報処理装置１００の動作の流れの一例）
次に、実施例３における情報処理装置１００の動作の流れの一例について説明する。具体的には、情報処理装置１００がアクセラレータを用いた処理にかかる時間に基づいて図２０に示したモード切替タイミング表２０００を更新する動作の流れについて説明する。
【０２１４】
（２５−１）タイミング更新部２５００は、ＦＰＧＡ１２０が実現しているアクセラレータを用いた処理が実行された場合、アクセラレータを用いた処理にかかる時間を計測する。タイミング更新部２５００は、アクセラレータを用いた処理にかかる時間を計測すると、計測した時間に基づいて、図２０に示したモード切替タイミング表２０００のうち、処理に用いられたアクセラレータについての切替タイミングを更新する。
【０２１５】
ここで、例えば、計測した時間＞切替タイミングであれば、ＶＭ１１０を実行するコンピュータを切り替えるときに、ＦＰＧＡ１２０が使用中になってしまう可能性がある。このため、タイミング更新部２５００は、例えば、計測した時間＞切替タイミングであれば、図２０に示したモード切替タイミング表２０００のうち、処理に用いられたアクセラレータについての切替タイミングを、計測した時間で上書きする。
【０２１６】
（実施例３におけるＦＰＧＡアクセス処理手順の一例）
次に、図２６を用いて、実施例３におけるＦＰＧＡアクセス処理手順の一例について説明する。
【０２１７】
図２６は、実施例３におけるＦＰＧＡアクセス処理手順の一例を示すフローチャートである。図２６において、ＦＰＧＡアクセス処理部９３２は、処理の内容から、処理に用いられるアクセラレータの種類を特定する（ステップＳ２６０１）。ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行モード表１９００の、特定したアクセラレータの種類に対応するｍｏｄｅが、ハードウェア実行モードであるか否かを判定する（ステップＳ２６０２）。ここで、ハードウェア実行モードである場合（ステップＳ２６０２：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ２６０３の処理に移行する。
【０２１８】
ステップＳ２６０３にて、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行状態表６００の、処理に用いられるアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中を示すフラグを設定する（ステップＳ２６０３）。次に、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ１２０に対して、アクセラレータを用いた処理についての処理要求を発行する（ステップＳ２６０４）。ここで、ＦＰＧＡアクセス処理部９３２は、処理の開始時間を記録する（ステップＳ２６０５）。そして、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ２６０６）。
【０２１９】
その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、記録しておいた処理の開始時間に基づいて、処理の実行時間を算出する（ステップＳ２６０７）。次に、ＦＰＧＡアクセス処理部９３２は、算出した処理の実行時間に基づいて、モード切替タイミング表２０００の、特定したアクセラレータの種類に対応する切替タイミングを更新する（ステップＳ２６０８）。そして、ＦＰＧＡアクセス処理部９３２は、ＦＰＧＡ実行状態表６００の、処理に用いたアクセラレータに対応するｅｘｅｃ  ｆｌａｇに、実行中ではないことを示すフラグを設定し（ステップＳ２６０９）、ステップＳ２６１３の処理に移行する。
【０２２０】
一方で、ハードウェア実行モードではない場合（ステップＳ２６０２：Ｎｏ）、次に、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータコードがあるか否かを判定する（ステップＳ２６１０）。ここで、エミュレータコードがない場合（ステップＳ２６１０：Ｎｏ）、ＦＰＧＡアクセス処理部９３２は、ステップＳ２６０２の処理に戻る。
【０２２１】
一方で、エミュレータコードがある場合（ステップＳ２６１０：Ｙｅｓ）、ＦＰＧＡアクセス処理部９３２は、特定したアクセラレータの種類に対応するエミュレータ１１１に処理を実行させる（ステップＳ２６１１）。次に、ＦＰＧＡアクセス処理部９３２は、処理の完了を待つ（ステップＳ２６１２）。その後、ＦＰＧＡアクセス処理部９３２は、処理が完了すると、ステップＳ２６１３の処理に移行する。
【０２２２】
ステップＳ２６１３にて、ＦＰＧＡアクセス処理部９３２は、ＶＭ１１０のバッファに、アクセラレータを用いた処理についての実行結果をコピーする（ステップＳ２６１３）。これにより、情報処理装置１００は、実際にアクセラレータを用いた処理にかかる時間に基づいてＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中になる可能性を、より低減することができる。
【０２２３】
以上説明したように、情報処理装置１００によれば、ＦＰＧＡ１２０の代用となるエミュレータ１１１が組み込まれたＶＭ１１０の、移動先装置１３０へのライブマイグレーションを開始することができる。また、情報処理装置１００によれば、データ転送にかかる進捗度合いが第１の条件を満たしていれば、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはエミュレータ１１１に実行させるようにすることができる。また、情報処理装置１００によれば、データ転送にかかる進捗度合いが第２の条件を満たし、かつ、ＦＰＧＡ１２０がＶＭ１１０についての処理を実行していなければ、ＶＭ１１０を実行するコンピュータを移動先装置１３０に切り替えることができる。これにより、情報処理装置１００は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中にならないようにすることができる。具体的には、情報処理装置１００は、ＶＭ１１０を実行するコンピュータを切り替えるよりも前からＦＰＧＡ１２０を使用しないようにしておくことができる。そして、情報処理装置１００は、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２２４】
情報処理装置１００によれば、データ転送にかかる進捗度合いが第１の条件を満たしていなければ、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理についてはＦＰＧＡ１２０に実行させるようにすることができる。これにより、情報処理装置１００は、ＶＭ１１０のライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たす前には、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をそのままＦＰＧＡ１２０に実行させることができる。そして、情報処理装置１００は、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理を、ＦＰＧＡ１２０よりも処理の実行にかかる時間が比較的長くなりやすいエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、情報処理装置１００は、ＶＭ１１０の性能低下を抑制することができる。
【０２２５】
情報処理装置１００によれば、第１の条件として、ライブマイグレーションが実行中であるという条件を用いることができる。これにより、情報処理装置１００は、ＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中になる可能性を、より低減することができる。結果として、情報処理装置１００は、ライブマイグレーションの完了が遅延する可能性を低減することができ、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２２６】
情報処理装置１００によれば、第１の条件として、ＶＭ１１０に関する情報のうち移動先装置１３０に転送した情報の割合が第１の閾値以上であるという条件を用いることができる。これにより、情報処理装置１００は、ライブマイグレーションの実行中であっても、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、情報処理装置１００は、ＶＭ１１０の性能低下を抑制することができる。
【０２２７】
情報処理装置１００によれば、第１の条件として、ＶＭ１１０に関する情報を移動先装置１３０に転送完了するまでの残り時間が第１の閾値以下であるという条件を用いることができる。これにより、情報処理装置１００は、ライブマイグレーションの実行中であっても、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、情報処理装置１００は、ＶＭ１１０の性能低下を抑制することができる。
【０２２８】
情報処理装置１００によれば、ＦＰＧＡ１２０が有する複数のアクセラレータのそれぞれに第１の条件を対応付けた対応情報を参照することができる。そして、情報処理装置１００によれば、データ転送にかかる進捗度合いが複数のアクセラレータのいずれかに対応付けられた第１の条件を満たしていれば、第１の条件を満たしたアクセラレータを用いた処理についてはエミュレータ１１１に実行させることができる。これにより、情報処理装置１００は、アクセラレータごとに、当該アクセラレータを用いた処理をＦＰＧＡ１２０に実行させるか、エミュレータ１１１に実行させるかを切り替えることができる。そして、情報処理装置１００は、ライブマイグレーションの実行中であっても、ＶＭ１１０からＦＰＧＡ１２０に依頼される処理をエミュレータ１１１に実行させる回数の低減化を図ることができる。結果として、情報処理装置１００は、ＶＭ１１０の性能低下を抑制することができる。
【０２２９】
情報処理装置１００によれば、複数のアクセラレータのそれぞれを用いた処理にかかる時間を計測し、計測した結果に基づいて対応情報を更新することができる。これにより、情報処理装置１００は、実際にアクセラレータを用いた処理にかかる時間に基づいてＶＭ１１０を実行するコンピュータを切り替えるときにＦＰＧＡ１２０が使用中になる可能性を、より低減することができる。
【０２３０】
情報処理装置１００によれば、第２の条件として、ＶＭ１１０に関する情報のうち移動先装置１３０に転送した情報の割合が第２の閾値以上であるという条件を用いることができる。これにより、情報処理装置１００は、ライブマイグレーションを完了するタイミングを判定することができる。
【０２３１】
情報処理装置１００によれば、第２の条件として、ＶＭ１１０に関する情報を移動先装置１３０に転送完了するまでの残り時間が第２の閾値以下であるという条件を用いることができる。これにより、情報処理装置１００は、ライブマイグレーションを完了するタイミングを判定することができる。
【０２３２】
情報処理装置１００によれば、ＶＭ１１０の起動時に、ＶＭ１１０にエミュレータ１１１を組み込むことができる。これにより、情報処理装置１００は、ＶＭ１１０に、予めエミュレータ１１１が組み込まれていなくても、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２３３】
情報処理装置１００によれば、エミュレータ１１１として、ＦＰＧＡ１２０が実現している１以上のアクセラレータのいずれかに対応するダミーデータを出力するソフトウェアを用いることができる。これにより、情報処理装置１００は、アクセラレータの動作と同様の動作を行うことができるエミュレータ１１１がない場合であっても、ＶＭ１１０のライブマイグレーションを行う際に、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２３４】
情報処理装置１００によれば、エミュレータ１１１として、ダミーデータを出力するまでに、所定の時間待機するソフトウェアを用いることができる。これにより、情報処理装置１００は、ダミーデータを受信したＶＭ１１０が処理をエミュレータ１１１に再実行させようとして、エミュレータ１１１において処理が輻輳してしまうことを抑制することができる。
【０２３５】
情報処理装置１００によれば、エミュレータ１１１として、ＦＰＧＡ１２０が実現している１以上のアクセラレータのいずれかが処理に失敗した際に出力するエラー応答と同様のエラー応答を出力するソフトウェアを用いることができる。これにより、情報処理装置１００は、アクセラレータの動作と同様の動作を行うことができるエミュレータ１１１がない場合であっても、ＶＭ１１０のライブマイグレーションを行う際に、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２３６】
情報処理装置１００によれば、エミュレータ１１１として、エラー応答を出力するまでに、所定の時間待機するソフトウェアを用いることができる。これにより、情報処理装置１００は、エラー応答を受信したＶＭ１１０が処理をエミュレータ１１１に再実行させようとして、エミュレータ１１１において処理が輻輳してしまうことを抑制することができる。
【０２３７】
情報処理装置１００によれば、エミュレータ１１１として、処理を実行せずに待機するソフトウェアを用いることができる。これにより、情報処理装置１００は、ＶＭ１１０に所定の時間が経過した後に処理を再実行させるようにし、再実行の際にライブマイグレーションが完了していれば処理が正常に行われるようにすることができる。そして、情報処理装置１００は、アクセラレータの動作と同様の動作を行うことができるエミュレータ１１１がない場合であっても、ＶＭ１１０のライブマイグレーションを行う際に、移動先装置１３０におけるＶＭ１１０の障害の発生を抑制することができる。
【０２３８】
なお、本実施の形態で説明したライブマイグレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ライブマイグレーションプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ライブマイグレーションプログラムは、インターネット等のネットワークを介して配布してもよい。
【０２３９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２４０】
（付記１）コンピュータに、
動的に機能を定義可能なハードウェアの代用となるエミュレータが組み込まれた仮想マシンのライブマイグレーションの指示を受信したことに応じて、他のコンピュータへの前記仮想マシンのライブマイグレーションを開始し、
前記仮想マシンのライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される処理については前記エミュレータに実行させ、
前記進捗度合いが前記仮想マシンを実行するコンピュータを切り替える第２の条件を満たし、かつ、前記ハードウェアが前記仮想マシンについての処理を実行していなければ、前記仮想マシンを実行するコンピュータを前記他のコンピュータに切り替える、
処理を実行させることを特徴とするライブマイグレーションプログラム。
【０２４１】
（付記２）前記コンピュータに、
前記進捗度合いが前記第１の条件を満たしていなければ、前記仮想マシンから前記ハードウェアに依頼される処理については前記ハードウェアに実行させる、
処理を実行させることを特徴とする付記１に記載のライブマイグレーションプログラム。
【０２４２】
（付記３）前記第１の条件は、前記ライブマイグレーションが実行中であるという条件である、ことを特徴とする付記１または２に記載のライブマイグレーションプログラム。
【０２４３】
（付記４）前記第１の条件は、前記仮想マシンに関する情報のうち前記他のコンピュータに転送した情報の割合が第１の閾値以上であるという条件である、ことを特徴とする付記１または２に記載のライブマイグレーションプログラム。
【０２４４】
（付記５）前記第１の条件は、前記仮想マシンに関する情報を前記他のコンピュータに転送完了するまでの残り時間が第１の閾値以下であるという条件である、ことを特徴とする付記１または２に記載のライブマイグレーションプログラム。
【０２４５】
（付記６）前記エミュレータに実行させる処理は、
前記ハードウェアが有する複数の機能のそれぞれに前記第１の条件を対応付けた対応情報を参照し、前記進捗度合いが前記複数の機能のいずれかに対応付けられた前記第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される前記いずれかの機能を用いた処理については前記エミュレータに実行させる、ことを特徴とする付記１〜５のいずれか一つに記載のライブマイグレーションプログラム。
【０２４６】
（付記７）前記コンピュータに、
前記複数の機能のそれぞれを用いた処理にかかる時間を計測し、計測した結果に基づいて前記対応情報を更新する、処理を実行させることを特徴とする付記６に記載のライブマイグレーションプログラム。
【０２４７】
（付記８）前記第２の条件は、前記仮想マシンに関する情報のうち前記他のコンピュータに転送した情報の割合が第２の閾値以上であるという条件である、ことを特徴とする付記１〜７のいずれか一つに記載のライブマイグレーションプログラム。
【０２４８】
（付記９）前記第２の条件は、前記仮想マシンに関する情報を前記他のコンピュータに転送完了するまでの残り時間が第２の閾値以下であるという条件である、ことを特徴とする付記１〜７のいずれか一つに記載のライブマイグレーションプログラム。
【０２４９】
（付記１０）前記コンピュータに、
前記仮想マシンの起動時に、前記仮想マシンに前記エミュレータを組み込む、処理を実行させることを特徴とする付記１〜９のいずれか一つに記載のライブマイグレーションプログラム。
【０２５０】
（付記１１）コンピュータが、
動的に機能を定義可能なハードウェアの代用となるエミュレータが組み込まれた仮想マシンのライブマイグレーションの指示を受信したことに応じて、他のコンピュータへの前記仮想マシンのライブマイグレーションを開始し、
前記仮想マシンのライブマイグレーションのデータ転送にかかる進捗度合いが第１の条件を満たしていれば、前記仮想マシンから前記ハードウェアに依頼される処理については前記エミュレータに実行させ、
前記進捗度合いが前記仮想マシンを実行するコンピュータを切り替える第２の条件を満たし、かつ、前記ハードウェアが前記仮想マシンについての処理を実行していなければ、前記仮想マシンを実行するコンピュータを前記他のコンピュータに切り替える、
処理を実行することを特徴とするライブマイグレーション方法。
【符号の説明】
【０２５１】
１００  情報処理装置
１１０  ＶＭ
１１１  エミュレータ
１２０  ＦＰＧＡ
１３０  移動先装置
２００  ライブマイグレーションシステム
２１０  ネットワーク
３０１  ＣＰＵ
３０２  メモリ
３０３  Ｉ／Ｆ
３０４  ディスクドライブ
３０５  ＰＣＩＥ
４００  アクセラレータ表
５００  格納先パス表
６００  ＦＰＧＡ実行状態表
７００，１９００  ＦＰＧＡ実行モード表
８０１，９１１  ＶＭ起動部
８０２，９３１  ＬＭ実行部
８０３，９３２  ＦＰＧＡアクセス処理部
９００  ハードウェア
９０１，９０２  アクセラレータ
９１０  ハイパーバイザ
９１２  ＶＭ実行部
９１３  ホストドライバ
９２０  仮想ＦＰＧＡ
９２１  ユーザプロセス
９２２  ライブラリ
９２３  ゲストドライバ
９３０  Ｉ／Ｏエミュレータ
９４０  エミュレータコード部
９４１，９４２  エミュレータコード
９５０  ＬＭ指示受付部
１３００  ユーザ
２０００  モード切替タイミング表
２１００  切替タイミング格納部
２１１０  ＬＭ完了時間推計部
２５００  タイミング更新部
【図１】
2018005576.tif 000003
【図２】
2018005576.tif 000004
【図３】
2018005576.tif 000005
【図４】
2018005576.tif 000006
【図５】
2018005576.tif 000007
【図６】
2018005576.tif 000008
【図７】
2018005576.tif 000009
【図８】
2018005576.tif 000010
【図９】
2018005576.tif 000011
【図１０】
2018005576.tif 000012
【図１１】
2018005576.tif 000013
【図１２】
2018005576.tif 000014
【図１３】
2018005576.tif 000015
【図１４】
2018005576.tif 000016
【図１５】
2018005576.tif 000017
【図１６】
2018005576.tif 000018
【図１７】
2018005576.tif 000019
【図１８】
2018005576.tif 000020
【図１９】
2018005576.tif 000021
【図２０】
2018005576.tif 000022
【図２１】
2018005576.tif 000023
【図２２】
2018005576.tif 000024
【図２３】
2018005576.tif 000025
【図２４】
2018005576.tif 000026
【図２５】
2018005576.tif 000027
【図２６】
2018005576.tif 000028