(57)【特許請求の範囲】
【請求項１】
ゲストオペレーティングシステムの上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化手段を備え、
前記初期化手段は、前記デバイスドライバがポールモードドライバの場合、前記インタフェースを前記ポールモードドライバに適応したインタフェースとして初期化し、前記デバイスドライバがvirtioドライバの場合、前記インタフェースを前記virtioドライバに適応したインタフェースとして初期化する準仮想化ネットワークデバイス。
【請求項２】
前記初期化手段は、前記ゲストオペレーティングシステムからの通知に基づき、前記デバイスドライバがポールモードドライバであるかvirtioドライバであるかを判定する判定手段を有し、前記判定手段による判定結果に応じた初期化を実行する請求項１に記載の準仮想化ネットワークデバイス。
【請求項３】
前記ポールモードドライバに適応したインタフェースにおいては、前記ポールモードドライバを通じた高速パケット通信アプリケーションからのポーリングに応じてパケット通信を処理し、
前記virtioドライバに適応したインタフェースにおいては、パケット受信時およびパケット送信完了時に前記virtioドライバに割込みを行いながら、ネットワークスタックを介して通常アプリケーションとのパケット通信を処理する請求項１または２に記載の準仮想化ネットワークデバイス。
【請求項４】
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置であって、
前記ホストオペレーティングシステム上で動作し、前記仮想マシンを形成するプロセッサエミュレータと、
前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化手段を備えた準仮想化ネットワークデバイスと、
を備え、
前記仮想マシンは、virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンと、ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとを備えた情報処理装置。
【請求項５】
前記初期化手段は、前記ゲストオペレーティングシステムからの通知に基づき、前記デバイスドライバがポールモードドライバであるかvirtioドライバであるかを判定する判定手段を有し、前記判定手段による判定結果に応じた初期化を実行する請求項４に記載の情報処理装置。
【請求項６】
前記デバイスドライバがポールモードドライバと判定されれば前記第２仮想マシンが形成され、前記デバイスドライバがvirtioドライバと判定されれば前記第１仮想マシンが形成される請求項５に記載の情報処理装置。
【請求項７】
前記初期化手段により前記デバイスドライバがポールモードドライバと判定して実行された初期化が成功しなかった場合、前記第１仮想マシンが形成される請求項６に記載の情報処理装置。
【請求項８】
前記第２仮想マシンにおいては、前記ポールモードドライバを通じた前記高速パケット通信アプリケーションからのポーリングに応じてパケット通信を処理し、
前記第１仮想マシンにおいては、パケット受信時およびパケット送信完了時に前記virtioドライバに割込みを行いながら、ネットワークスタックを介して通常アプリケーションとのパケット通信を処理する請求項４乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置の制御方法であって、
前記ホストオペレーティングシステム上で動作するプロセッサエミュレータが、前記仮想マシンを形成する仮想マシン形成ステップと、
準仮想化ネットワークデバイスの初期化手段が、前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化ステップと、
を含み、
前記初期化ステップにおいてvirtioドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンとして動作し、前記初期化ステップにおいてポールモードドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとして動作する情報処理装置の制御方法。
【請求項１０】
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置の制御プログラムであって、
前記ホストオペレーティングシステム上で動作するプロセッサエミュレータが、前記仮想マシンを形成する仮想マシン形成ステップと、
前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化ステップと、
をコンピュータに実行させ、
前記初期化ステップにおいてvirtioドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンとして動作し、前記初期化ステップにおいてポールモードドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとして動作するようコンピュータに実行させる情報処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、準仮想化ネットワークデバイス、情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
上記技術分野において、特許文献１には、仮想制御プログラムが、仮想ネットワークデバイスを提供することが開示されている。また、仮想デバイスドライバと物理デバイスドライバとを介してデータ流通が行われるように、仮想制御プログラムが、仮想デバイスドライバと物理デバイスドライバとを接続させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−９３９１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記文献に記載の技術では、ゲストオペレーティングシステム上のデバイスドライバに対して準仮想化ネットワークデバイスが対応できなかったので、デバイスドライバに適応しない準仮想化ネットワークデバイスを使用できなかった。
【０００５】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明に係る準仮想化ネットワークデバイスは、
ゲストオペレーティングシステムの上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化手段を備え、
前記初期化手段は、前記デバイスドライバがポールモードドライバの場合、前記インタフェースを前記ポールモードドライバに適応したインタフェースとして初期化し、前記デバイスドライバがvirtioドライバの場合、前記インタフェースを前記virtioドライバに適応したインタフェースとして初期化する。
【０００７】
上記目的を達成するため、本発明に係る情報処理装置は、
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置であって、
前記ホストオペレーティングシステム上で動作し、前記仮想マシンを形成するプロセッサエミュレータと、
前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化手段を備えた準仮想化ネットワークデバイスと、
を備え、
前記仮想マシンは、virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンと、ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとを備えた。
【０００８】
上記目的を達成するため、本発明に係る情報処理装置の制御方法は、
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置の制御方法であって、
前記ホストオペレーティングシステム上で動作するプロセッサエミュレータが、前記仮想マシンを形成する仮想マシン形成ステップと、
準仮想化ネットワークデバイスの初期化手段が、前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化ステップと、
を含み、
前記初期化ステップにおいてvirtioドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンとして動作し、前記初期化ステップにおいてポールモードドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとして動作する。
【０００９】
上記目的を達成するため、本発明に係る情報処理装置の制御プログラムは、
ホストオペレーティングシステム上で動作する仮想マシンと、前記仮想マシン上で動作するゲストオペレーティングシステムとを有する情報処理装置の制御プログラムであって、
前記ホストオペレーティングシステム上で動作するプロセッサエミュレータが、前記仮想マシンを形成する仮想マシン形成ステップと、
前記ゲストオペレーティングシステム上で動作するアプリケーションが用いるデバイスドライバに応じて、前記デバイスドライバとのインタフェースを初期化する初期化ステップと、
をコンピュータに実行させ、
前記初期化ステップにおいてvirtioドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記virtioドライバを用いる通常アプリケーションを備えた第１仮想マシンとして動作し、前記初期化ステップにおいてポールモードドライバとのインタフェースが初期化されると、前記形成された仮想マシンが前記ポールモードドライバを用いる高速パケット通信アプリケーションを備えた第２仮想マシンとして動作するようコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、ゲストオペレーティングシステム上のデバイスドライバに対して準仮想化ネットワークデバイスが対応できるので、デバイスドライバに適応しない準仮想化ネットワークデバイスを使用することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１実施形態に係る準仮想化ネットワークデバイスの構成を説明するためのブロック図である。
【図２】本発明の第１実施形態に係る準仮想化ネットワークデバイスの初期化処理手順を説明するためのフローチャートである。
【図３】本発明の第２実施形態に係る情報処理装置の機能構成を説明するためのブロック図である。
【図４】本発明の第３実施形態に係る情報処理装置の機能構成を説明するためのブロック図である。
【図５】本発明の第３実施形態に係るvirtioデバイスの要部構成を説明するための図である。
【図６】本発明の第３実施形態におけるvirtioドライバ接続時のvirtioデバイスの動作を説明するための図である。
【図７】本発明の第３実施形態におけるポールモードドライバ接続時のvirtioデバイスの動作を説明するための図である。
【図８】本発明の第３実施形態に係る情報処理装置におけるvirtioデバイスの初期化処理手順を説明するためのフローチャートである。
【図９】本発明の第３実施形態に係る情報処理装置における通常アプリケーションのパケット受信処理手順を説明するための図である。
【図１０】本発明の第３実施形態に係る情報処理装置における通常アプリケーションのパケット送信処理手順を説明するための図である。
【図１１】本発明の第３実施形態に係る情報処理装置における高速パケット通信アプリケーションのパケット送受信処理手順を説明するための図である。
【発明を実施するための形態】
【００１２】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素はあくまで例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【００１３】
［第１実施形態］
本発明の第１実施形態としての準仮想化ネットワークデバイスについて、図１を参照して説明する。準仮想化ネットワークデバイス１００は、初期化部１０１を備えている。
【００１４】
初期化部１０１は、仮想マシン上で動作するゲストオペレーティングシステムの上で動作するアプリケーションが有するデバイスドライバの種類に適応したデバイスとして動作するように準仮想化ネットワークデバイス１００のインタフェースを初期化する。
【００１５】
次に、準仮想化ネットワークデバイス１００の初期化処理手順について図２を参照して説明する。
【００１６】
準仮想化ネットワークデバイス１００の初期化部１０１は、ステップＳ２０１において、ゲストオペレーティングシステムからデバイスドライバの種類の通知を受ける。次いで、ステップＳ２０３において、初期化部１０１は、デバイスドライバの種類に応じて準仮想化ネットワークデバイス１００のインタフェースを初期化して動作させる。
【００１７】
本実施形態によれば、初期化部１０１はアプリケーションが有するデバイスドライバの種類に適応したデバイスとして動作するように準仮想化ネットワークデバイス１００のインタフェースを初期化する。
【００１８】
したがって、ゲストオペレーティングシステムに備わるデバイスドライバに適応したデバイスとして準仮想化ネットワークデバイス１００を使用することができる。
【００１９】
［第２実施形態］
本発明の第２実施形態としての情報処理装置３００について、図３を参照して説明する。情報処理装置３００は、ハードウェア３０１を備えている。さらに、ハードウェア３０１上にはホストオペレーティングシステム３０２が動作し、ホストオペレーティングシステム３０２上には仮想スイッチ３２１と仮想マシン３０３が動作している。
【００２０】
仮想スイッチ３２１は、ハードウェア３０１に物理的ネットワークカードが接続された場合、この物理的ネットワークカードを通してネットワーク通信が可能である。
【００２１】
仮想マシン３０３は、仮想スイッチ３２１と接続するプロセッサエミュレータ３３１と、準仮想化ネットワークデバイス３３２とを備えている。
【００２２】
さらに、仮想マシン３０３上には、ゲストオペレーティングシステム３０４が動作し、ゲストオペレーティングシステム３０４上にはデバイスドライバ３５１を有するアプリケーション３０５が動作している。
【００２３】
また、準仮想化ネットワークデバイス３３２は、プロセッサエミュレータ３３１によって提供されたものであり、初期化部３３３を備えている。
【００２４】
初期化部３３３は、ゲストオペレーティングシステム３０４上で動作するアプリケーション３０５が有するデバイスドライバ３５１の種類に関してゲストオペレーティングシステム３０４から通知を受ける。そして、このデバイスドライバ３５１に適応したデバイスとして動作するように準仮想化ネットワークデバイス３３２のインタフェースを初期化する。これにより、準仮想化ネットワークデバイス３３２は、アプリケーション３０５が有するデバイスドライバ３５１に適応したデバイスとして動作する。
【００２５】
本実施形態によれば、アプリケーション３０５が有するデバイスドライバ３５１に適応したデバイスとして準仮想化ネットワークデバイス３３２を使用することができる。
【００２６】
したがって、アプリケーション３０５は、ゲストオペレーティングシステム３０４と仮想マシン３０３とを通してホストオペレーティングシステム３０２上の仮想スイッチ３２１の動作制御を行なうことができる。
【００２７】
なお、ホストオペレーティングシステム３０２上に２つ以上の仮想マシンが存在する場合は、それぞれの仮想マシンの準仮想化ネットワークデバイスを用いて、異なる仮想マシン上のアプリケーション間の通信を行なうことも可能である。
【００２８】
［第３実施形態］
次に本発明の第３実施形態に係る情報処理装置について、図４乃至図８を用いて説明する。
【００２９】
《前提技術》
ＳＤＮ（Software-Defined Networking）と呼ばれるソフトウェアでネットワークを制御する技術が注目されている。さらに、ＮＦＶ（Network Function Virtualization）と呼ばれるネットワーク機能を仮想化して、サービスの柔軟性を上げる技術が注目されている。汎用サーバを利用して、特定用途向けハードウェアを減らし、構成を簡略化して運用を容易にすることができる。これらの要素技術として仮想化が利用される。
【００３０】
サーバの仮想化においてKVM/qemu（Kernel-based Virtual Machine／qemu）に代表される仮想マシンモニタが、入出力機器のエミュレーションを行っている。仮想化におけるネットワークカードの標準的なエミュレーションデバイスとしてvirtioデバイスが存在する。virtioデバイスは仮想マシンで動作するゲストオペレーティングシステムにとって、一般的なＰＣＩ（Peripheral Component Interconnect）デバイスに見える。このため、ゲストオペレーティングシステムとして使用される多くのオペレーティングシステムがvirtioデバイスのデバイスドライバを提供している。
【００３１】
サーバの仮想化がデータセンタなどで一般化していくなかで、ファイアウォールやＤＰＩ（Deep Packet Inspection）のような大量のパケットを扱うネットワークサービスにおいて、高速なパケット通信が求められている。
【００３２】
ネットワークのパケット通信性能はサーバ仮想化において大きな課題となっている。ＰＣＩパススルーあるいはＳＲ−ＩＯＶ（Single Root I/O Virtualization）パススルー技術などを用いて物理デバイスをゲストオペレーティングシステムに直接扱わせることで、物理環境とほぼ同等の性能を得ることができる。しかし、仮想化を用いたメリットである柔軟性が失われてしまう。
【００３３】
一方、汎用サーバにおいて高速にパケット通信を行うためのアプリケーションを作成する開発キットであるＤＰＤＫ（Data Plane Development Kit）が注目されている。
【００３４】
ＤＰＤＫではポールモードドライバと呼ばれる機構を利用して、デバイスアクセスのレイテンシ（latency）を削減し、高速パケット通信を実現している。このため、高速なパケット通信アプリケーションはＤＰＤＫを利用して作成されるようになってきている。また、仮想化技術を用いたサービス柔軟性と運用の簡易化が進む中、ＤＰＤＫを用いる高速パケット通信アプリケーションの適用が求められている。
【００３５】
ゲストオペレーティングシステムでＤＰＤＫを利用して、ネットワークのパケット通信性能を確保しようとした場合、virtioデバイスでは高速なパケット通信を行うことが困難となっている。すなわち、virtioデバイスは一般的なＰＣＩデバイスをエミュレーションしている。このため、ドライバからのデバイスアクセスの際に、ホストオペレーティングシステムによるエミュレーションが入ることで、オーバヘッド（間接的あるいは付加的な処理の大きさ）が大きくなり、高速なパケット通信を行うことが困難となっている。
【００３６】
高速なパケット通信を実現するため、ＤＰＤＫのポールモードドライバの動作に合わせた特殊なデバイスを仮想マシンに実装する案もある。しかし、このような特殊なデバイスは、そのデバイス専用のドライバをもったゲストオペレーティングシステムのみがアクセスできるものとなり、一般的なサーバアプリケーションで利用されるゲストオペレーティングシステムにとっては使えないデバイスとなる。そのため、デプロイ（deploy）するサービスのアプリケーションにおけるゲストオペレーティングシステムに合わせて仮想マシンの種別を変更することが必要となり、管理が煩雑となる。
【００３７】
《本実施形態の説明》
図４は、本実施形態に係る情報処理装置の機能構成を説明するためのブロック図である。図において情報処理装置４００は、物理ネットワークインタフェースカード（ＮＩＣ：Network Interface Card）４１１を搭載したハードウェア４０１を備えている。物理ＮＩＣ４１１は、ハードウェア４０１に接続され、図示せぬネットワークとの間でパケットを送受信する。
【００３８】
ハードウェア４０１上ではホストオペレーティングシステム４０２が動作している。さらに、ホストオペレーティングシステム４０２上には、仮想スイッチ４２１と２つの仮想マシン（ＶＭ：Virtual Machine）４０３、４０４が動作している。なお、本実施形態ではホストオペレーティングシステム４０２としてLinux（登録商標）を使用している。
【００３９】
仮想マシン４０３、４０４のそれぞれは、KVM/qemuで実現されており、qemu４３１、４４１を有すると共に、qemu４３１、４４１によって提供される準仮想化ネットワークデバイスとしてのvirtioデバイス４３３、４４３を備えている。
【００４０】
また、仮想マシン４０３、４０４のvirtioデバイス４３３、４４３はqemu４３１、４４１が提供するvhost-userバックエンド機能４３２、４４２と仮想スイッチ４２１が提供するvhost-user４２２とを通して、仮想スイッチ４２１と接続されている。これにより、virtioデバイス４３３、４４３は仮想スイッチ４２１を介して物理ＮＩＣ４１１を利用し、外部のネットワークを介して通信可能となっている。
【００４１】
virtioデバイス４３３、４４３は、仮想マシン４０３、４０４上で動作するゲストオペレーティングシステム４０５、４０６の上で動作するアプリケーション４０７、４０８が有するデバイスドライバと接続するときに用いる初期化部４３４、４４４を備えている。
【００４２】
ゲストオペレーティングシステム４０５上には、virtioドライバ４７１を有する通常アプリケーション４０７が動作している。
【００４３】
ゲストオペレーティングシステム４０６上には、ＤＰＤＫ４８１のポールモードドライバ４８２を有する高速パケット通信アプリケーション４０８が動作している。なお、本実施形態においては、高速パケット通信アプリケーション４０８は、ＤＰＤＫを用いて作成されたものである。
【００４４】
仮想マシン４０３上で動作している通常アプリケーション４０７は、virtioドライバ４７１を用いて、virtioデバイス４３３と仮想スイッチ４２１と物理ＮＩＣ４１１とを通じてネットワーク通信を行う。
【００４５】
仮想マシン４０４上で動作している高速パケット通信アプリケーション４０８は、ポールモードドライバ４８２を用いて、virtioデバイス４４３と仮想スイッチ４２１と物理ＮＩＣ４１１とを通じてネットワーク通信を行う。
【００４６】
図５はvirtioデバイス４３３、４４３の要部構成を説明するための図である。図５に示すように、virtioデバイス４３３、４４３は初期化部４３４、４４４とvirtioドライバ用インタフェース５０１とポールモードドライバ用インタフェース５０２とを備えている。初期化部４３４、４４４は判定部５３５、５４５を有している。さらに、virtioドライバ用インタフェース５０１はＰＣＩレジスタ５１１を有している。
【００４７】
仮想マシン４０３上で動作するゲストオペレーティングシステム４０５において、virtioデバイス４３３はＰＣＩデバイスとして認識され、virtioドライバ４７１によって認識されて制御することができる。
【００４８】
すなわち、ゲストオペレーティングシステム４０５はvirtioデバイス４３３に対してＰＣＩデバイスとして動作するようにvirtioデバイス４３３の初期化部４３４の判定部５３５に通知する。初期化部４３４がvirtioデバイス４３３を初期化することにより、図６に示すように、virtioドライバ４７１は、virtioデバイス４３３に対して、virtioドライバ用インタフェース５０１のＰＣＩレジスタ５１１とメモリ６０２とを介して要求を行なうことができる。また、virtioデバイス４３３の処理完了通知はＣＰＵ（Central Processing Unit）６０１への割り込みを通じてvirtioドライバ４７１に伝えられる。パケットを送信する際は、メモリ６０２におかれたパケットを送信するようにＰＣＩレジスタ５１１に送信命令を書き込む。virtioデバイス４３３はパケット送信が完了すると、ＣＰＵ６０１に割り込みをかけ、virtioドライバ４７１はＰＣＩレジスタ５１１とメモリ６０２とを使って送信完了を確認する。パケット受信の際は、virtioデバイス４３３がメモリ６０２にパケット情報を書き込み、ＣＰＵ６０１へ割り込みをかける。virtioドライバ４７１は割り込みに対応して、メモリ６０２上のパケット情報を確認して、新たなパケットのためのメモリ領域をＰＣＩレジスタ５１１を通じて設定する。
【００４９】
一方、仮想マシン４０４上で動作するゲストオペレーティングシステム４０６において、virtioデバイス４４３はＰＣＩデバイスとして認識される。しかし、高速パケット通信アプリケーション４０８は、ＤＰＤＫ４８１のポールモードドライバ４８２を用いてvirtioデバイス４４３へポールモード専用のインタフェースでのアクセスを行う。これにより、virtioデバイス４４３におけるオーバヘッドを取り除き、高速パケット通信アプリケーション４０８が高速なパケット通信を行なうことができる。
【００５０】
すなわち、ゲストオペレーティングシステム４０６はvirtioデバイス４４３に対してポールモードドライバ４８２に適応したデバイスとして動作するようにvirtioデバイス４４３の初期化部４４４の判定部５４５に通知する。これにより、初期化部４４４によってvirtioデバイス４４３が初期化され、図７に示すように、ポールモードドライバ４８２による動作時は、全てメモリ７０２上で完結するように動作させる。つまり、メモリ７０２上に送受信それぞれのパケット操作領域を確保して動作する。パケット送信時は送信領域にパケットを書き込む。ポールモード動作時のvirtioデバイス４４３は、ポールモードドライバ用インタフェース５０２を用いてメモリ６０２上の送信領域を常にチェックしており、送信パケットが積まれたら、送信処理を行う。また、virtioデバイス４４３はパケットを受信した際に、メモリ７０２上の受信領域にパケットを書き込む。ポールモードドライバ４８２は常に受信領域をポーリングによりチェックするようにアプリケーションが作られている。このため、ポールモードドライバ４８２は、ポーリングによって受信パケットが存在することを見つけて、パケットを受信する。
【００５１】
したがって、高速パケット通信アプリケーション４０８は、virtioデバイス４４３を用いて仮想化のオーバヘッドが削減された高速通信を行うことができる。
【００５２】
次に、本実施形態に係る情報処理装置４００におけるvirtioデバイス４３３、４４３の初期化処理手順を図８に示すフローチャートを参照して説明する。
【００５３】
ステップＳ８０１において、システム管理者が仮想マシン（ＶＭ：Virtual Machine）４０３、４０４を作成する。ステップＳ８０３において、ゲストオペレーティングシステム４０５、４０６を起動すると、ステップＳ８０５において、ゲストオペレーティングシステム４０５、４０６はvirtioデバイス４３３、４４３のプローブを行なう。このプローブの結果、ゲストオペレーティングシステム４０５は通常アプリケーション４０７が有するドライバの種類を判別し、virtioドライバ４７１に適応するようにvirtioデバイス４３３に要求する。また、ゲストオペレーティングシステム４０６は高速パケット通信アプリケーション４０８が有するドライバの種類を判別し、ポールモードドライバ４８２に適応するようにvirtioデバイス４４３に要求する。
【００５４】
この後、virtioデバイス４３３、４４３は初期化を開始する。ステップＳ８０７において、仮想マシン４０３、４０４に備わるvirtioデバイス４３３、４４３の初期化部４３４、４４４は、アプリケーション４０７、４０８が有するデバイスドライバがＤＰＤＫのポールモードドライバであるか否かを判定する。
【００５５】
ステップＳ８０７の判定の結果、ＤＰＤＫのポールモードドライバである場合は、ステップＳ８０９において、初期化部４３４、４４４は、virtioデバイス４３３、４４３をポールモードドライバに適応したデバイスとして初期化する。この後、ステップＳ８１１において、初期化部４３４、４４４は、初期化が成功したか否かを判定し、初期化が成功しない場合はステップＳ８１３の処理に移行し、初期化が成功した場合は処理を終了する。
【００５６】
ステップＳ８０７の判定の結果、ＤＰＤＫのポールモードドライバでない場合は、ステップＳ８１３において、初期化部４３４、４４４は、virtioデバイス４３３、４４３を標準的なvirtioデバイスとして初期化する。これにより、virtioデバイス４３３、４４３は、標準的なvirtioデバイスとして動作する。
【００５７】
本実施形態では、通常アプリケーション４０７が有するデバイスドライバはvirtioドライバ４７１であるので、初期化部４３４は、virtioデバイス４３３を標準的なvirtioデバイスとして初期化して動作させる。一方、高速パケット通信アプリケーション４０８が有するデバイスドライバはＤＰＤＫ４８１のポールモードドライバ４８２であるので、初期化部４４４は、virtioデバイス４４３をポールモードドライバに適応したデバイスとして初期化して動作させる。なお、virtioデバイス４４３の初期化部４４４は、virtioデバイス４４３をポールモードドライバに適応したデバイスとして初期化できなかった場合、標準的なvirtioデバイスとして初期化する。これにより、virtioデバイス４４３を標準的なvirtioデバイスとして動作させる。この場合、高速パケット通信アプリケーション４０８は、オーバヘッドは大きくなるが、virtioデバイス４４３を使用することができる。このため、通常アプリケーション用と高速パケット通信アプリケーション用とのそれぞれに対応して提供する仮想マシンを分ける必要がなくなる。
【００５８】
次に、通常アプリケーション４０７がパケット通信を行なう場合の処理手順を図９を参照して説明する。
【００５９】
通常アプリケーション４０７はネットワークスタック９０１を通して仮想マシン４０３の外部と通信する。
【００６０】
図９は通常アプリケーション４０７がパケットを受信する場合の処理手順を説明する図である。通常アプリケーション４０７がパケットを受信する場合は、virtioデバイス４３３においてパケットを受信すると、virtioデバイス４３３は、virtioドライバ４７１に割り込みを使って、パケットの受信を通知する。virtioドライバ４７１は、パケット受信の割り込みに対応して、パケットデータを受け取る。このパケットデータは、ネットワークスタック９０１で処理された後に、通常アプリケーション４０７に渡される。
【００６１】
図１０は、通常アプリケーション４０７がパケットを送信する場合の処理手順を説明する図である。通常アプリケーション４０７がパケットを送信する場合は、通常アプリケーション４０７がネットワークスタック９０１に送信データを渡す。そして、ネットワークスタック９０１はパケットを構築し、virtioドライバ４７１に渡す。virtioドライバ４７１はvirtioデバイス４３３にパケット送信指示を行う。virtioデバイス４３３がパケット送信を完了すると、virtioデバイス４３３は、virtioドライバ４７１に送信完了割り込みを行い、データ送信が完了する。
【００６２】
次に、高速パケット通信アプリケーション４０８がパケット通信を行なう場合の処理手順を説明する。図１１は、高速パケット通信アプリケーション４０８がパケット通信を行なう場合の処理手順を説明する図である。
【００６３】
高速パケット通信アプリケーション４０８はＤＰＤＫ４８１のポールモードドライバ４８２を通じてvirtioデバイス４４３を操作する。ＤＰＤＫ４８１においては、パケット受信処理はポーリング動作になる。すなわち、高速パケット通信アプリケーション４０８はポールモードドライバ４８２を通じてvirtioデバイス４４３から直接データを取りこむ。取り込むべきデータがvirtioデバイス４４３上に存在しない場合は、高速パケット通信アプリケーション４０８は何もせずに次の処理に進む。パケットを送信する場合は、高速パケット通信アプリケーション４０８は、ポールモードドライバ４８２を通じてvirtioデバイス４４３の送信ディスクリプタをチェックして空きがあればパケット送信を行う。送信ディスクリプタに空きがなければ、高速パケット通信アプリケーション４０８は何もせずに次の処理に進む。
【００６４】
なお、本実施形態ではホストオペレーティングシステム４０２としてLinux（登録商標）を用いたがこれに限定されることはない。また、本実施形態では高速パケット通信アプリケーション４０８およびポールモードドライバ４８２をＤＰＤＫ４８１を用いて作成したものとしたが、これに限定されることはない。さらに、本実施形態では、準仮想化デバイスをvirtioとし、プロセッサエミュレータをqemuとしたがこれに限定されることはない。
【００６５】
［他の実施形態］
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
【００６６】
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体（non-transitory computer readable medium）は本発明の範疇に含まれる。
【図１】
0006548010.tif 000002
【図２】
0006548010.tif 000003
【図３】
0006548010.tif 000004
【図４】
0006548010.tif 000005
【図５】
0006548010.tif 000006
【図６】
0006548010.tif 000007
【図７】
0006548010.tif 000008
【図８】
0006548010.tif 000009
【図９】
0006548010.tif 000010
【図１０】
0006548010.tif 000011
【図１１】
0006548010.tif 000012