JP4854710B2 - 仮想計算機システム及びネットワークデバイス共有方法 - Google Patents

仮想計算機システム及びネットワークデバイス共有方法 Download PDF

Info

Publication number
JP4854710B2
JP4854710B2 JP2008163686A JP2008163686A JP4854710B2 JP 4854710 B2 JP4854710 B2 JP 4854710B2 JP 2008163686 A JP2008163686 A JP 2008163686A JP 2008163686 A JP2008163686 A JP 2008163686A JP 4854710 B2 JP4854710 B2 JP 4854710B2
Authority
JP
Japan
Prior art keywords
guest
master
network device
transmission
oss
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008163686A
Other languages
English (en)
Other versions
JP2010003257A (ja
Inventor
雅陽 高山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Solutions Corp filed Critical Toshiba Corp
Priority to JP2008163686A priority Critical patent/JP4854710B2/ja
Publication of JP2010003257A publication Critical patent/JP2010003257A/ja
Application granted granted Critical
Publication of JP4854710B2 publication Critical patent/JP4854710B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Description

本発明は、CPU及びメモリを含む物理計算機上で動作する仮想計算機マネージャによって提供される仮想計算機実行環境で複数のゲストOSが動作する仮想計算機システムに係り、特に、単一のネットワークデバイスを当該複数のゲストOSから共有するのに好適な、仮想計算機システム及びネットワークデバイス共有方法に関する
近年、パーソナルコンピュータのような計算機システムにおいて、仮想計算機(Virtual Machine:VM)の技術を応用した研究や開発が行われている。また、仮想計算機システムを実現するための商用のアプリケーションプログラムが実際に広く利用されている。また、メインフレームにおいて古くからハードウェア(HW)で構成された仮想計算機支援機構を用いた仮想計算機システムも存在する。
一般に、パーソナルコンピュータのような計算機(物理計算機、実計算機)は、CPU(実CPU)及びメモリ(実メモリ)を含むHW(実HW)で構成されている。この実HWで構成される物理計算機(物理環境)上でハイパバイザOS(オペレーティングシステム)である仮想計算機マネージャ(Virtual Machine Manager:VMM)が動作する。そして、以下に述べるように、VMMの提供する仮想計算機環境のもとで複数のゲストOSが動作をする(特許文献1参照)。
VMMは、実CPU、実メモリ及び物理計算機に付属した各種の実入出力デバイス(ディスクドライブ等)のような物理資源の管理を行い、それらを仮想化して仮想計算機(VM)を構築する。つまりVMMは、物理計算機が有する実CPU、実メモリ及び実入出力デバイスを時間的、空間(領域)的に、複数の仮想計算機のそれぞれ仮想CPU、仮想メモリ及び仮想入出力デバイスとして割り当てることによって、当該複数の仮想計算機が同時に動作可能な環境(仮想計算機環境)を構築する。
複数の仮想計算機(が動作する仮想計算機環境)にはそれぞれゲストOSがロードされる。各仮想計算機にロードされたゲストOSは、当該仮想計算機内の仮想CPUによって実行される。つまり、各仮想計算機(が動作する仮想計算機環境)では、ゲストOSが動作する。このようにVMMは、実CPU、実メモリ及び実入出力装置のような物理資源を各ゲストOSに割り当てることによって、当該各ゲストOSが同時に動作できる環境を提供し、仮想計算機システムの管理を行う。
さて、上記実入出力装置の1つとしてネットワークデバイス(実ネットワークデバイス)が知られている。また、ゲストOSがネットワークデバイスを使用する仕組みとして、以下に挙げる仕組みが従来から知られている。
第1は、VMMが仮想ネットワークデバイスを構築して仮想計算機環境に提供することにより、実ネットワークデバイスの管理をVMMが完全に行う仕組み(第1の仕組み)である
第2は、1つのゲストOSがマスターとなって実ネットワークデバイスを管理し、他のゲストOSと外部との通信が、マスターとなるゲストOSを経由して行われる仕組み(第2の仕組み)である。
第3は、ゲストOSが自身のデバイスドライバによって直接に実ネットワークデバイスを管理する仕組み(第3の仕組み)である。
特開2006−039763号公報
しかしながら、上記第1乃至第3の仕組みは、それぞれ次のような問題を有している。
第1の仕組みの問題は、仮想ネットワークデバイスを提供するためにVMM内にドライバを実装しなければならない点である。第1の仕組みの問題はまた、VMMが複雑になり実装のコストも増大する点にもある。また第1の仕組みの問題は更に、状況によっては、ネットワークデバイスの故障に引きずられてVMMの動作環境が機能しなくなり、加えて、本来は影響を受けないはずの仮想計算機環境までが機能しなくなり、結果としてVMM自体の信頼性が低下する点にもある。
第2の仕組みの問題は、ネットワークデバイスを介してのデータ転送に用いられるバッファ(DMAバッファ領域)のデータを、マスターゲストOS及びその他のゲストOSの仮想メモリ空間相互間でコピーする必要があるため、オーバヘッドを招いて十分なスループットが得られない点にある。また、第2の仕組みの問題は更に、マスターゲストOSが動作不能に陥れば、他のゲストOSが通信することができなくなる点にもある。
第3の仕組みの問題は、デバイスドライバが、他のゲストOSが同じネットワークデバイスを使用することを考慮して作られていないことに起因する。つまり第3の仕組みの問題は、複数のゲストOS(で動作する第3の仕組み)のそれぞれでデバイスドライバが動作するために、複数のゲストOS間の排他の仕組みがなく複数のゲストOSでネットワークデバイスを共有するのが困難である点にある。そのため、一般には1つのネットワークデバイスは1つのゲストOSしか使用することができない。また、VMMは、どのゲストOSにネットワークデバイスを管理させるか(見せるか)を決定する機能を持たなければならない。
本発明は上記事情を考慮してなされたものでその目的は、ネットワークデバイスを介してのデータ転送に用いられるバッファのデータのコピーによるオーバヘッドを招くことなく、複数のゲストOSがネットワークデバイスを共有できる仮想計算機システム及びネットワークデバイス共有方法を提供することにある。
本発明の1つの観点によれば、CPU、メモリ及びネットワークデバイスを含む物理計算機上で動作する仮想計算機マネージャによって提供される仮想計算機実行環境で複数のゲストOSが動作する仮想計算機システムが提供される。この仮想計算機システムは、前記複数のゲストOS上でそれぞれ動作する複数のネットワークデバイスドライバであって、自身が動作するゲストOSがマスター権を有するマスターゲストOSである場合、前記ネットワークデバイスからの割り込みを処理する複数のネットワークデバイスドライバと、前記メモリに確保される共有メモリ領域を用いて前記仮想計算機マネージャによって構築され、前記複数のゲストOS及び前記複数のネットワークデバイスドライバからアクセス可能な共有メモリであって、前記ネットワークデバイスによってネットワークから受信された受信データを一時格納すると共に、前記複数のゲストOSのいずれかから転送された送信データを一時格納するためのバッファが確保された共有メモリとを具備し、前記複数のネットワークデバイスドライバの各々は、自身が動作するゲストOSが前記マスターゲストOSである場合、前記受信データが前記バッファに格納されたことを通知するための前記ネットワークデバイスからの受信完了割り込みに応じて、当該受信データを当該受信データの宛先のゲストOSによって受信させる受信処理手段と、自身が動作するゲストOSが前記マスターゲストOSである場合、当該マスターゲストOSからの送信要求または当該マスターゲストOS以外のゲストOSからの送信要求割り込みに応じて、前記バッファに格納された前記送信データを前記ネットワークデバイスによって前記ネットワークへ送信させる送信処理手段とを含むことを特徴とする。
本発明によれば、マスターゲストOSとその他のゲストOSとが協調することによってネットワークデバイスを共有する仕組みを適用しながら、メモリに確保される共有メモリ領域を用いて構築される、各ゲストOS及び各ネットワークデバイスドライバからアクセス可能な共有メモリに、ネットワークデバイスを介して送受信されるデータを一時格納するためのバッファを配置することにより、当該バッファのデータのコピーによるオーバヘッドを招くことなく、各ゲストOSがネットワークデバイスを共有できる。
以下、本発明の実施の形態につき図面を参照して説明する。
図1は本発明の一実施形態に係る仮想計算機システムの構成を示すブロック図である。図1に示す仮想計算機システムは、物理計算機(実計算機)1を用いて実現される。物理計算機1は、仮想計算機環境を提供するのに用いられるハードウェア(HW)10を備えている。HW10は、HW資源(物理資源)であるCPU(実CPU)11、メモリ(実メモリ)12及びネットワークデバイス(実ネットワークデバイス)13を含む。なお、図1では、ディスクドライブのような、物理計算機1に付属する、ネットワークデバイス13以外の入出力デバイスは省略されている。
ネットワークデバイス13は、物理計算機1の外部のネットワーク2に接続されている。ネットワークデバイス13は、ネットワーク2を介して物理計算機1と外部の物理デバイスとの間の通信を行う。
物理計算機1(のHW10)上では、仮想計算機マネージャ(VMM)20が動作する。VMM20は、仮想計算機システムの管理を行い、仮想計算機が動作する環境(仮想計算機環境)を構築する。更に具体的に述べるならば、VMM20は、物理計算機1のHW10を構成するCPU11、メモリ12及び、ネットワークデバイス13を含む各種の入出力デバイスのような物理資源(ハードウェアリソース)を制御すると共に当該物理資源の時間的、領域的な配分を管理することにより、複数の仮想計算機、例えば3台の仮想計算機30-1,30-2,30-3が動作する仮想計算機環境(仮想計算機実行環境)を構築する。
仮想計算機30-1,30-2,30-3上では、それぞれゲストOS31-1(#1),31-2(#2),31-3(#3)が動作する。更に具体的に述べるならば、ゲストOS31-1〜31-3は、それぞれ仮想計算機30-1〜30-3にロードされて、当該仮想計算機30-1〜30-3内の仮想CPUによって実行される。ゲストOS31-1,31-2,31-3は固有の識別子(ゲストOS識別子)を有する。本実施形態においてゲストOS31-1,31-2,31-3のゲストOS識別子は、それぞれ、1,2,3であるものとする。
VMM20はまた、ゲストOS31-1〜31-3(の後述するドライバ310-1〜310-3)からアクセス(参照/書き込み)可能な共有メモリ32を構築する。共有メモリ32は、HW10に含まれているメモリ12の記憶領域の一部(共有メモリ領域)32を用いて構築される仮想化されたメモリである。VMM20は、ゲストOS31-1〜31-3の間の通知のために割り込みを発生させるインタフェース(ゲストOS間割り込み配信インタフェース)を当該ゲストOS31-1〜31-3に提供する。
ゲストOS31-1,31-2,31-3には、それぞれネットワークデバイスドライバ(以下、ドライバと略称する)310-1,310-2,310-3が付加されている。ドライバ310-1〜310-3は、それぞれ、ネットワークデバイス13をゲストOS31-1〜31-3が使用可能とするためのデバイスドライバであり、当該ゲストOS31-1〜31-3の一部として当該ゲストOS31-1〜31-3上で動作する。つまりゲストOS31-1〜31-3は、それぞれドライバ310-1〜310-3を含む。
ゲストOS31-1〜31-3は、それぞれがマスター(マスターゲストOS)となる機能を持つ。ドライバ310-1〜310-3は、それぞれゲストOS31-1〜31-3がマスターとして動作する場合、自身もマスターとして動作する。本実施形態において、ドライバ310-1,310-2,310-3は同等の機能を持つ。但し、ドライバ310-1〜310-3の間で本発明に直接関係しない一部の機能が異なっていても構わない。例えば、ドライバ310-1〜310-3のうちのいずれかで、マスターとなる機能が制限されていても構わない。
ドライバ310-i(i=1,2,3)は、HW(ハードウェア)割り込みハンドラ311及びSW(ソフトウェア)割り込みハンドラ312の2種類の割り込みハンドラを有する。HW割り込みハンドラ311は、ネットワークデバイス13によって発生される割り込み(HW割り込み)を処理する。SW割り込みハンドラ312は、ゲストOS間割り込み配信インタフェースによって発生される割り込み(ゲストOS31-1〜31-3の間の通知のための割り込み)を処理する。
ドライバ310-iは更に、open(オープン)処理部313、close(クローズ)処理部314、送信処理部315、受信処理部316、エラー割り込み処理部317、マスター権移行処理部318、ゲストOS排除処理部319を有する。マスター権移行処理部318は、マスター権委譲処理部318a及びマスター権取得処理部318bを含む。これらの各処理部の機能については後述する。
図2は、図1に示される共有メモリ32における領域の割り当て例を示す。共有メモリ32は、物理レジスタマップ領域321、特殊処理ステータス領域322、ゲストOS情報領域323及びDMAバッファ領域324を含む。共有メモリ32はまた、送信ディスクリプタチェーン領域325、受信ディスクリプタチェーン領域326及び他共有情報領域327を含む。
物理レジスタマップ領域321は、ネットワークデバイス13に所属する物理レジスタの群をマップした領域である。物理レジスタマップ領域321によってマップされる物理レジスタの群は、初期化処理で設定が必要なレジスタ、及び割り込み要因レジスタを含む。物理レジスタマップ領域321にアクセスすることによって物理レジスタがアクセスされる。
特殊処理ステータス領域322は、ドライバ310-iが行うべき特殊な処理(特殊処理)が発生しているかを示すステータスを格納するのに用いられる。本実施形態において、特殊処理ステータス領域322を用いてステータスが管理される特殊処理は、共有メモリ32を初期化する処理、ネットワークの物理的切断(ネットワークケーブル抜けなどへの対応)処理、ネットワークの物理的接続処理を含む。これらの特殊処理は、共有メモリ32内の情報を使用して各ドライバ310-iで進めることができる処理であり、各ドライバ310-iで重複して実行されても問題の生じない処理である。本実施形態において、特殊処理ステータス領域322は、予め定められた特殊処理毎に、その処理が発生しているかをビットの状態で示すビットマップを格納する。ドライバ310-iは、ある特殊処理が発生しているかを確認するには、特殊処理ステータス領域322(に格納されているビットマップ)内の当該特殊処理に対応するビットを参照すればよい。
ゲストOS情報領域323は、ネットワークデバイス13を使用している全てのゲストOSの情報と、マスターゲストOS情報とを格納するのに用いられる。ゲストOSの情報(ゲストOS情報)は、ゲストOS識別子、SW割り込み番号及びSW割り込み要因情報を含む。
ゲストOS識別子は、ネットワークデバイス13を現在使用しているゲストOSの識別子を示す。
SW割り込み番号は、ゲストOS識別子で示されるゲストOSに対して他のゲストOSから、ゲストOS間の通知機能(ゲストOS間割り込み配信インタフェース)によって割り込みを発生させる場合の割り込み配信先のゲストOSのSW割り込みハンドラ312を示す。
SW割り込み要因情報は、上記割り込みを発生させる場合の通知内容を表す情報。SW割り込み要因情報は例えばビットマップから構成される。配信先のゲストOSは、配信元のゲストOS(ゲストOS識別子で示されるゲストOS)のゲストOS間割り込み配信インタフェースから送信されたビットマップ形式のSW割り込み要因情報(の各ビットの状態)を参照することにより通知内容を判断する。
ゲストOS情報は更に、付加的な情報として、タイムスタンプ、通信回数統計情報、ゲストOS優先度及びネットワークアドレスを含む。
タイムスタンプは、ゲストOS識別子で示されるゲストOSの最終動作時刻を示す。
通信回数統計情報は、直近の通信回数を示す統計情報である。本実施形態において、通信回数統計情報には、1ディスクリプタチェーンサイクルの期間にゲストOSの使用したディスクリプタの数が用いられる。ディスクリプタチェーンサイクルについては後述する。
ゲストOS優先度は、ゲストOS識別子で示されるゲストOSの実行優先度を示す。つまりゲストOS優先度は、VMM20が、ディスパッチされるべきゲストOSを選択する際に選定の基準(指標)とする値である。本実施形態では、ゲストOS優先度の値が大きいゲストOSほど、優先的にCPU11(CPU時間)が割り当てられる。
ネットワークアドレスは、ネットワーク2を介しての通信のためにゲストOS識別子で示されるゲストOSに割り当てられる、IP(Internet Protocol)アドレスのようなネットワークアドレスである。
マスターゲストOS情報は、マスタとして動作している(つまりマスター権を有している)ゲストOS(マスターゲストOS)を示す。ここでは、マスターゲストOS情報として、マスターゲストOSのゲストOS識別子が用いられる。
なお、図2に示されるゲストOS情報領域323には、便宜的に、ゲストOS識別子が「1」のゲストOS(つまりゲストOS31-1)のゲストOS情報のみが格納されている状態が示されている。しかし、ゲストOS情報領域323には、ネットワークデバイス13を共有する他のゲストOS31-2,31-3のゲストOS情報も格納されているものとする。
DMAバッファ領域324は、ネットワークデバイス13が送受信データのDMA(Direct Memory Access)転送に使用するデータバッファ(以下、DMAバッファと称する)324aのための領域である。
送信ディスクリプタチェーン領域325は、送信ディスクリプタチェーン325aを格納するのに用いられる。送信ディスクリプタチェーン325aは、DMAバッファ324a内の領域(へのリンク)及びHW仕様に基づいた送信ディスクリプタを管理するためのディスクリプタ管理構造を有する。送信ディスクリプタチェーン325aに含まれる各送信ディスクリプタは、チェーンでリンクされている順にサイクリックに利用される。送信ディスクリプタチェーン325aを一巡するサイクルをディスクリプタチェーンサイクルと呼ぶ。
図3は、送信ディスクリプタチェーン325aの一例を示す。図3の例では、送信ディスクリプタチェーン325aは、送信ディスクリプタ325-1〜325-10を含む。本実施形態において送信ディスクリプタ325-1〜325-10はリング状のチェーンによりリンクされている。送信ディスクリプタ325-j(j=1〜10)は、ステータス部3251、ポインタ部3252及び利用ゲストOS情報部(図示せず)を含む。
ポインタ部3252は、送信されるべきデータが設定(格納)されているDMAバッファ324a内の領域を指し示すポインタを格納する。利用ゲストOS情報部は、当該利用ゲストOS情報部を含む送信ディスクリプタ325-jが、いずれのゲストOSによって参照(使用)中であるかを示す情報(例えばゲストOS識別子)を格納する。
ステータス部3251は、送信ディスクリプタ325-jのステータスを示す。送信ディスクリプタ325-jの取り得るステータスは、例えば、「empty」、「not ready」、「ready」及び「dma」の4種類である。
「empty」は、送信ディスクリプタ325-jが未使用の状態にあることを示す。
「not ready」は、送信ディスクリプタ325-jがデータ送信のために使用予定である(使用が予約されている)が、まだ送信されるべきデータの設定が終わっていない状態にあることを示す。
「ready」は、送信ディスクリプタ325-jがデータ送信のために使用予定であり、且つ送信されるべきデータの設定も終了している状態にあることを示す。
「dma」は送信ディスクリプタ325-jのポインタ部3252で指定されるデータの送信のためのDMA転送が実行中であることを示す。
送信ディスクリプタチェーン325aは、送信中先頭ポインタ、送信前先頭ポインタ及び空き先頭ポインタの3種類のポインタで管理される。これらのポインタは、任意の時点において、
送信中先頭ポインタ≦送信前先頭ポインタ≦空き先頭ポインタ
のような不等号で示される順番の位置関係(大きいほうが進行方向)にある送信ディスクリプタを指し示す。
送信中先頭ポインタの指し示す位置から送信前先頭ポインタの指し示す位置の直前までには、ステータスが「dma」の送信ディスクリプタのみが存在する。図3の例では、送信ディスクリプタ325-3,325-4が、これに該当する。
送信前先頭ポインタの指し示す位置から空き先頭ポインタの指し示す位置の直前までには、ステータスが「ready」の送信ディスクリプタとステータスが「not ready」の送信ディスクリプタとが混在し得る。図3の例では、送信ディスクリプタ325-5〜325-9が、これに該当する。
空き先頭ポインタから先には、ステータスが「empty」の送信ディスクリプタのみが存在する。図3の例では、送信ディスクリプタ325-10,325-1,325-2が、これに該当する。
これら3種類のポインタは、ネットワークデバイス13によって操作される。
再び図2を参照すると、受信ディスクリプタチェーン領域326は、受信ディスクリプタチェーンを格納するのに用いられる。受信ディスクリプタチェーンは、DMAバッファ324a内の領域(へのリンク)及びHW仕様に基づいた受信ディスクリプタを管理するためのディスクリプタ管理構造を有する。受信ディスクリプタチェーンに含まれる各受信ディスクリプタは、送信ディスクリプタチェーン325aに含まれる上記各送信ディスクリプタと同様に、チェーンでリンクされている順にサイクリックに利用される。この受信ディスクリプタチェーンを一巡するサイクルもディスクリプタチェーンサイクルと呼ばれる。
図4は、受信ディスクリプタチェーンの一例を示す。図4の例では、受信ディスクリプタチェーンは、受信ディスクリプタ326-1〜326-10を含む。本実施形態において受信ディスクリプタ326-1〜326-10はリング状のチェーンによりリンクされている。受信ディスクリプタ326-j(j=1〜10)は、送信ディスクリプタ325-jと同様に、ステータス部3261、ポインタ部3262及び利用ゲストOS情報部(図示せず)を含む。
ポインタ部3262は、受信されるべきデータが設定されているDMAバッファ324a内の領域を指し示すポインタを格納する。利用ゲストOS情報部は、当該利用ゲストOS情報部を含む受信ディスクリプタ326-jが、いずれのゲストOSによって参照(使用)中であるかを示す情報(ゲストOS識別子)を格納する。
ステータス部3261は、受信ディスクリプタ326-jのステータスを示す。受信ディスクリプタ326-jの取り得るステータスは、例えば、「empty」、「received」及び「dma」の3種類である。
「empty」は、受信ディスクリプタ326-jが未使用の状態にあることを示す。
「received」は、受信ディスクリプタ326-jのポインタ部3262で指定されるDMAバッファ324a内の領域にデータを受信済みであるが、その旨をゲストOSが認識していない状態にあることを示す。
「dma」は、受信ディスクリプタ326-jのポインタ部3262で指定されるDMAバッファ324a内の領域に受信データを一時格納するためのDMA転送が実行中であることを示す。
受信ディスクリプタチェーンは、受信中先頭ポインタ、DMA中先頭ポインタ及び空き先頭ポインタの3種類のポインタで管理される。これらのポインタは、任意の時点において、
受信中先頭ポインタ≦DMA中先頭ポインタ≦空き先頭ポインタ
のような不等号で示される順番の位置関係(大きいほうが進行方向)にある受信ディスクリプタを指し示す。受信中先頭ポインタの指し示す位置からDMA中先頭ポインタの指し示す位置の直前までには、ステータスが「received」の受信ディスクリプタと「empty」の受信ディスクリプタとが混在する。図4の例では、受信ディスクリプタ326-3,326-4が、これに該当する。
DMA中先頭ポインタの指し示す位置から空き先頭ポインタの指し示す位置の直前までには、ステータスが「dma」の受信ディスクリプタのみが存在する。図4の例では、受信ディスクリプタ326-5,326-6が、これに該当する。
空き先頭ポインタから先には、ステータスが「empty」の受信ディスクリプタのみが存在する。図4の例では、受信ディスクリプタ326-7〜326-10,326-1,326-2が、これに該当する。
これら3種類のポインタは、ネットワークデバイス13によって操作される。
他共有情報領域327は、各ゲストOS31-i(i=1,2,3)のドライバ310-i間で共有すべき情報、例えば特殊処理で使用する必要がある情報を格納するのに用いられる。
次に、上述の構成の仮想計算機システムの特徴について説明する。
まず、図1の仮想計算機システムでは、ネットワークデバイス13を共有するゲストOS31-1〜31-3上でそれぞれドライバ310-1〜310-3が動作する。ドライバ310-1〜310-3の1つはマスターとして動作して、DMA処理や、DMA処理のためのネットワークデバイス13からの割り込みに対する処理など、当該ネットワークデバイス13の管理の主要な部分を取り扱う。
図1の仮想計算機システムの特徴は、ゲストOS31-1〜31-3上でそれぞれ動作するドライバ310-1〜310-3に共通して必要となる情報、及びゲストOS31-1〜31-3に固有のゲストOS情報のうち必要な部分を相互参照できるようにした点にある。この相互参照を可能とするために、VMM20によってゲストOS31-1〜31-3に提供される共有メモリ32が使用される。ゲストOS31-1〜31-3のそれぞれドライバ310-1〜310-3は共有メモリ32にアクセスする。
共有メモリ32は、HW10に含まれているメモリ12に確保された共有メモリ領域120を用いて構築される仮想化されたメモリである。このため、共有メモリ32へのアクセスは、物理的にはメモリ12内の共有メモリ領域120へのアクセスによって実現される。
本実施形態ではまた、DMAバッファ324aも共有メモリ32に配置される。これにより、DMAバッファ324aも各ゲストOS31-1〜31-3から直接参照(アクセス)することが可能となり、従来は大きな問題であったデータコピーに伴うオーバヘッドを後述するように削減することができる。
また本実施形態では、マスターとなるゲストOSを変更可能とする仕組み、つまりマスターゲストOSが機能しなくなっても他のゲストOSがネットワークデバイス13を使用し続けることを可能とする仕組みが提供される。本実施形態では更に、効率的なネットワークデバイス13の使用を支援する仕組みも提供される。
以下、上述の特徴を有する仮想計算機システムにおけるゲストOSのドライバを中心とする動作について、「open(オープン)処理」、「送信処理」、「受信処理」及び「エラー割り込み処理」を例に順次説明する。
[open処理]
まず、ゲストOSのドライバ(のopen処理部313)がネットワークデバイス13の使用を開始する際に実行する「open処理(ドライバのopen処理)」の手順について、当該ドライバがゲストOS31-1のドライバ310-1である場合を例に、図5のフローチャートを参照して説明する。
今、ゲストOS31-1から当該ゲストOS31-1のドライバ310-1に対して、「open要求」が与えられたものとする。するとドライバ310-1は、共有メモリ32の領域を探して、当該共有メモリ32の領域が存在するかを判定する(ステップS1)。
もし、ステップS1の判定がYesであるならば、ドライバ310-1は、マスターとなっている別のゲストOSのドライバからの要求によって共有メモリ32の領域が確保されているとしてステップS8に進む。
これに対し、ステップS1の判定がNoであるならば、ドライバ310-1はVMM20に依頼して、共有メモリ32の領域を確保する(ステップS2)。つまりドライバ310-1は、VMM20により、HW10に含まれているメモリ12の記憶領域の一部を共有メモリ領域120として確保させることにより、共有メモリ32(仮想化された共有メモリメモリ)を構築させる。
次にドライバ310-1は、共有メモリ32を初期化するための初期化処理を行う(ステップS3)。この初期化処理は、共有メモリ32における領域321〜327の割り当て、物理レジスタマップ領域321に物理レジスタの群(ネットワークデバイス13に所属する物理レジスタの群)をマップする処理を含む。また、上記初期化処理は、特殊処理ステータス領域322に当該初期化処理が進行中であることを示すステータスを記録する処理を含む。ここでは、初期化処理が進行中であるかを示すビットがオンされる。以降、ドライバ310-1は、初期化処理の進捗状況を、例えば予め定められたタイミング毎に記録する。
またドライバ310-1は、ネットワークデバイス13を初期化する(ステップS4)。次にドライバ310-1は、ネットワークデバイス13からの割り込み(HW割り込み)の配信先を自身に設定する(ステップS5)。
次にドライバ310-1は、共有メモリ32のゲストOS情報領域323に、自身を含む(自身が動作している)ゲストOS31-1のゲストOS情報を書き込む(ステップS6)。即ちドライバ310-1は、ゲストOS31-1のゲストOS識別子、SW割り込みハンドラ312が使用するSW割り込み番号等を含む、ゲストOS31-1のゲストOS情報を、ゲストOS情報領域323に書き込む。また、ステップS6においてドライバ310-1は、マスターゲストOSがゲストOS31-1であることを示すマスターゲストOS情報をゲストOS情報領域323に登録する。そしてドライバ310-1は、共有メモリ32の特殊処理ステータス領域322に初期化処理が終了したことを記録して(ステップS7)、「open処理」を終了する。
一方、ステップS1の判定がYesの場合、ドライバ310-1は、マスターとなっている別のゲストOSのドライバからの要求によって構築された共有メモリ32の特殊処理ステータス領域322を参照して当該別のゲストOSのドライバによる初期化処理(ステップS2〜S7)の進捗状況を確認し、当該初期化処理が継続していれば、当該初期化処理が終了するまで待つ(ステップS8)。そして初期化処理が終了すると、ドライバ310-1は、共有メモリ32のゲストOS情報領域323にゲストOS31-1に固有のゲストOS情報(自身のゲストOS情報)を書き込んで(ステップS9)、「open処理」を終了する。
[送信処理]
次に、ゲストOSのドライバ(の送信処理部315)がネットワークデバイス13を通じてパケットをネットワーク2に送信する際に実行される「送信処理」の手順について、当該ドライバがゲストOS31-1のドライバ310-1である場合を例に、図6のフローチャートを参照して説明する。この「送信処理」において実行されるネットワークデバイス13へのパケットデータの転送には、DMAが用いられる。
今、ゲストOS31-1から当該ゲストOS31-1のドライバ310-1に対して、「送信要求」が与えられたものとする。するとドライバ310-1は、共有メモリ32の送信ディスクリプタチェーン領域325における送信ディスクリプタチェーン325aから、空き先頭ポインタの指し示す送信ディスクリプタを先頭とする、送信に必要な数の送信ディスクリプタ325-j(図3の例では、送信ディスクリプタ325-jは送信ディスクリプタ325-10を含む)を確保する(ステップS11)。
次にドライバ310-1は、確保した送信ディスクリプタ325-jのステータス(ステータス部3251に設定されているステータス情報の示すステータス)を「empty」から「not ready」に変更すると共に、確保した送信ディスクリプタ325-jの数だけ空き先頭ポインタを更新する(ステップS12)。つまりドライバ310-1は、確保した送信ディスクリプタ325-jの数だけ空き先頭ポインタの指し示す位置を移動する。
次にドライバ310-1は、確保した送信ディスクリプタ325-jを(当該ドライバ310-1を含む)ゲストOS31-1が使用していることを示す情報を、当該ディスクリプタ325-jに追加する。上記ステップS11〜S13は、各ゲストOSのドライバ間で排他的に実行される必要がある。この制御には、共有メモリを使用する際に従来から用いられる一般的な排他制御手法が適用可能である。この排他制御については、以降の手順でも同様の条件が必要となる箇所があるが、説明を省略する。
次にドライバ310-1は、ゲストOS31-1から要求されたパケットの送信のために、次のように送信ディスクリプタ325-jの準備を行う(ステップS14)。まずドライバ310-1は、送信ディスクリプタ325-jのポインタ部3252に格納されているポインタに基づいて共有メモリ32上のDMAバッファ324a内の領域に直接アクセスすることにより、送信されるべきパケットのデータを書き込む。ドライバ310-1は、このデータの書き込み(つまり送信の準備)が完了した送信ディスクリプタ325-jのステータスを「not ready」から「ready」に変更する。
本実施形態おいて、DMA転送はマスターゲストOSが管理する。そこでドライバ310-1は、当該ドライバ310-1を含む(当該ドライバ310-1動作している)ゲストOS31-1がマスターゲストOSであるかを判定する(ステップS15)。
もし、ゲストOS31-1がマスターゲストOSでないならば(ステップS15がNo)、ドライバ310-1はマスターゲストOS(のドライバ)にSW割り込みによる通知を行って、送信のためのDMA転送を要求する(ステップS16)。即ちドライバ310-1はマスターゲストOS(のドライバ)に、送信のためのDMA要求の割り込み(送信DMA要求割り込み)を行う。マスターゲストOS(のドライバ)への割り込み配信先は、共有メモリ32のゲストOS情報領域323を参照することによって知ることができる。ドライバ310-1は、ステップS16を実行すると、送信処理を終了する。
上述のように、本実施形態では、ゲストOS間の通知にSW割り込みが使用される。しかし、VMM20が提供するゲストOS間の通知手段であれば、SW割り込み以外の手段を用いても構わない。本実施形態では、複数の用途でゲストOS間の通知にSW割り込みが使用される。そこで本実施形態では、割り込み配信先が用途別に設定され、また、割り込み要因を示す仮想の割り込み要因レジスタが共有メモリ32内に配置される構成とすることによって、割り込み要因の種別を対象のゲストOSが認識できるようになっているものとする。
一方、ステップS15で、ドライバ310-1を含むゲストOS31-1がマスターゲストOSであると判定された場合、つまり送信要求元のゲストOS31-1がマスターゲストOSである場合(ステップS15がYes)、ドライバ310-1はステップS17に進む。また、ゲストOS31-1がマスターゲストOSであり、且つ当該ゲストOS31-1に、他のゲストOSからの送信要求に従って当該他のゲストOSのドライバから送信DMA要求割り込み(送信要求割り込み)が入った場合にも、ドライバ310-1はステップS17に進む。
ステップS17においてドライバ310-1は、ネットワークデバイス13に対するDMA処理を開始する。具体的には、ドライバ310-1は、送信前先頭ポインタで指し示される送信ディスクリプタチェーン325a内の位置からステータスが「ready」である連続する送信ディスクリプタの分だけ、ネットワークデバイス13に対してDMA要求を発行する。ここで、複数のゲストOSが送信ディスクリプタを確保して送信のための準備中である可能性もあるため、送信前先頭ポインタの指し示す位置から空き先頭ポインタの指し示す位置の直前までには、ステータスが「not ready」の送信ディスクリプタとステータスが「ready」の送信ディスクリプタとが混在している可能性がある。ステップS17においてドライバ310-1は、DMA処理が開始された送信ディスクリプタのステータスを「dma」に変更し、送信前先頭ポインタを当該DMA処理が開始された送信ディスクリプタの数の分だけ進める。
ドライバ310-1からのDMA要求に応じてネットワークデバイス13によって実行されるDMA転送が終了すると、当該ネットワークデバイス13からドライバ310-1(マスターゲストOS31-1のドライバ310-1)に、DMA転送終了(DMA終了)がHW割り込みによって通知される。ドライバ310-1は、このDMA終了のHW割り込みに応じて、送信中先頭ポインタの指し示す位置から始まる送信終了した送信ディスクリプタのステータスを「empty」に変更し、変更の対象となった送信ディスクリプタの数の分だけ、当該送信中先頭ポインタを更新する(ステップS18)。このステップS18においてドライバ310-1は、変更の対象となった各送信ディスクリプタの利用ゲストOS情報部に格納されている、当該ディスクリプタを参照(使用)中のゲストOSを示す情報をクリアする。
ドライバ310-1(マスターゲストOS31-1のドライバ310-1)は、ステップS18を実行すると、空き先頭ポインタと送信前先頭ポインタとが一致しているかを判定する(ステップS19)。もし、空き先頭ポインタと送信前先頭ポインタとが一致していなければ(ステップS19がNo)、ドライバ310-1は、DMA要求が未発行の送信ディスクリプタがあるはずであると判断する。この場合、ドライバ310-1は、ネットワークデバイス13に対して再びDMA要求を発行するために、ステップS17に戻る。
これに対し、空き先頭ポインタと送信前先頭ポインタとが一致しているならば(ステップS19がYes)、ドライバ310-1は、DMA要求が未発行の送信ディスクリプタがないとして送信処理を終了する。
[受信処理]
次に、ゲストOSのドライバ(の受信処理部316)がネットワークデバイス13を通じてパケットを受信する際に実行される「受信処理」の手順について、当該ドライバがゲストOS31-1のドライバ310-1である場合を例に、図7のフローチャートを参照して説明する。
ネットワークデバイス13は、ネットワーク2から自身が受信すべきパケットを検知すると、空きの受信ディスクリプタ326-jのポインタ部3252で指定されるDMAバッファ324a内の領域へ検知されたパケットをDMA転送する動作(受信DMA動作)を開始する(ステップS21)。DMAバッファ324a内の領域の使用順序は例えばHWを用いた設定によって予め指定することができる。本実施形態では、DMAバッファ324a内の領域の使用順序は、受信ディスクリプタチェーンの順番通りになるよう設定されている。
さて、ネットワークデバイス13による上述の受信DMA動作(ステップS21)が完了したものとする。即ち、ネットワークデバイス13がネットワーク2からパケットを受信し、その受信されたパケットを、受信ディスクリプタチェーンに従って空きの受信ディスクリプタ326-jのポインタ部3252で指定されるDMAバッファ324a内の領域へDMA転送する受信DMA動作(ステップS21)が完了したものとする。この場合、ネットワークデバイス13はマスターゲストOSにHW割り込みを発行する(ステップS22)。ここでは、マスターゲストOSはゲストOS31-1であるものとする。
マスターゲストOS31-1のドライバ310-1は、ネットワークデバイス13からのHW割り込みを受け付けると、DMA中先頭ポインタの指し示す受信ディスクリプタチェーンの位置から、受信DMA(受信データを一時格納するためのDMA転送)が完了した受信ディスクリプタ326-jを調べる(ステップS23)。このステップS23においてドライバ310-1は、受信DMAが完了した受信ディスクリプタ326-jのステータスを「empty」から「received」に更新すると共に、DMA中先頭ポインタを更新する。また、ステップS23においてドライバ310-1は、受信DMAが完了した受信ディスクリプタ326-jの内容(受信ディスクリプタ326-jで示される受信データ)を必要としているゲストOSを特定する。即ちドライバ310-1は、ゲストOS情報領域323に格納されている各ゲストOSのゲストOS情報の中から、受信パケットに含まれている宛先ネットワークアドレスに一致するネットワークアドレスを含むゲストOS情報を選択し、当該選択されたゲストOS情報に含まれているゲストOS識別子から上述の受信ディスクリプタ326-jの内容を必要とするゲストOSを特定する。
ドライバ310-1は、受信DMAが完了した受信ディスクリプタ326-jをいずれのゲストOSが参照すべきかを示す情報を、当該受信ディスクリプタ326-jの利用ゲストOS情報部に設定する。もし、ネットワークデバイス13によってネットワーク2から受信されたパケットがブロードキャストパケットのような、複数のゲストOSによって参照されるべきパケットである場合、当該複数のゲストOSの情報が、該当する受信ディスクリプタ326-jの利用ゲストOS情報部に設定される。
ゲストOS31-1のドライバ310-1は、受信ディスクリプタ326-jの情報を必要とするゲストOSに対して、受信DMAの完了をSW割り込みによって通知する(ステップS24)。ここで、ドライバ310-1からのSW割り込みを受けたゲストOSがゲストOS31-2及び31-3であるものとする。
ゲストOS31-1からのSW割り込みを受けたゲストOS31-2及び31-3のそれぞれドライバ310-2及び310-3は、自身に割り当てられた受信ディスクリプタ326-jを参照して受信に必要な処理を行う(ステップS25)。この受信に必要な処理は、受信ディスクリプタ326-jのポインタ部3262によって指し示されるDMAバッファ324a内の領域のデータを、ゲストOS31-2及び及び31-3に固有の記憶領域に転送する処理を含む。ドライバ310-2及び310-3は、受信に必要な処理を完了して、受信ディスクリプタ326-jを参照する必要がなくなると、当該ディスクリプタ326-jからそれぞれゲストOS31-2及び31-3に関する情報を削除する。
マスターゲストOS31-1のドライバ310-1は、受信ディスクリプタ326-jから当該ディスクリプタ326-jを参照すべきゲストOS31-2及び31-3に関する情報が全て削除されると、当該ディスクリプタ326-jのステータスを「received」から「empty」に更新する(ステップS26)。つまりドライバ310-1は、受信ディスクリプタ326-jを参照する必要のあった全てのゲストOSにとって、もはや当該ディスクリプタ326-jを参照する必要がなくなると、当該ディスクリプタ326-jのステータスを「empty」に更新する。ステップS26においてドライバ310-1は、受信中先頭ポインタの指し示す受信ディスクリプタ326-jのステータスが「empty」に更新されたならば、当該受信中先頭ポインタを1受信ディスクリプタ分だけ進める。
[エラー割り込み処理]
次に、ネットワークデバイス13での動作でエラーが発生した場合に実行される「エラー割り込み処理」の手順について、ゲストOS31-1がマスターゲストOSである場合を例に、図8のフローチャートを参照して説明する。
今、ネットワークデバイス13での動作でエラーが発生したものとする。この場合、ネットワークデバイス13はマスターゲストOS31-1のドライバ310-1にエラー発生を通知するためのHW割り込みを発行する(ステップS30)。
ドライバ310-1(のHW割り込みハンドラ311)は、ネットワークデバイス13からHW割り込み(ステップS30)を受けると、共有メモリ32の物理レジスタマップ領域321にマップされた、当該HW割り込みの要因を示す割り込み要因レジスタ(例えば当該ネットワークデバイス13のエラーステータスを示すエラーステータスレジスタ)を参照することによって当該HW割り込みの要因となったエラーの種類を識別する(ステップS31)。このステップS31においてドライバ310-1(のエラー割り込み処理部317)は、識別されたエラーに対応する処理(エラー処理)が必要ならば、共有メモリ32の特殊処理ステータス領域322に格納されているビットマップ中の当該エラー処理に対応するビットを、エラー処理が開始されていることを示す状態に設定する。つまりドライバ310-1(マスターゲストOS31-1のドライバ310-1)は特殊処理ステータス領域322に、識別されたエラーに対応する処理(エラー処理)が開始されていることを示すステータス(特殊処理ステータス)を設定する(ステップS31)。
次にマスターゲストOS31-1のドライバ310-1(のエラー割り込み処理部317)は、他のゲストOS31-2及び31-3のそれぞれドライバ310-2及び310-3に対し、エラー処理を開始したことを、SW割り込みを使用して通知する(ステップS32)。その後、マスターゲストOS31-1のドライバ310-1は、エラー処理が終了すると、共有メモリ32の特殊処理ステータス領域322に格納されているビットマップ中の当該処理に対応するビットの状態を、処理が行われていないことを示す状態に切り替える。つまりドライバ310-1は、特殊処理ステータス領域322に設定されている、エラー処理が開始されていることを示すステータスを解除する(ステップS33)。
一方、マスターゲストOS31-1以外のゲストOS31-2及び31-3のそれぞれドライバ310-2及び310-3(のエラー割り込み処理部317)は、ドライバ310-1からエラー処理の開始を通知するSW割り込み(ステップS32)を受けると、現在実行中の処理を中断または中止するために必要な処理を、当該エラーの種類に応じて行う(ステップS41)。
次にドライバ310-2及び310-3は、それぞれ共有メモリ32の特殊処理ステータス領域322のステータスを監視し、エラー処理が開始されていることを示すステータスが解除されていることを確認したならば、つまりエラー処理が終了したことを確認したならば、通常の処理に復帰する(ステップS42)。
以上、本実施形態において適用される、ゲストOS31-i(i=1,2,3)のドライバ310-i(に設けられたopen処理部313、送信処理部315、受信処理部316及びエラー割り込み処理部317)が有する4つの基本的な機能、つまり「open処理機能」、「送信処理機能」、「受信処理機能」及び「エラー割り込み処理機能」について詳述した。これらの機能、特に「送信処理機能」及び「受信処理機能」により、DMAバッファのデータのコピーによるオーバヘッドを除くことができる。
さて本実施形態では、ドライバ310-iに、「マスター権の委譲処理機能」及び「マスター権の取得処理機能」(をそれぞれ有するマスター権委譲処理部318a及びマスター権取得処理部318b)が追加されている。以下、「マスター権の委譲処理」及び「マスター権の取得処理」について順次説明する。
[マスター権の委譲処理]
「マスター権の委譲処理」とは、マスターゲストOSが自律的に、マスター権を他のゲストOSへと移すための処理である。以下、「マスター権の委譲処理」について、ゲストOS31-1がマスターゲストOSである場合を例に、図9のフローチャートを参照して説明する。
マスターゲストOS31-1のドライバ310-1(のマスター権委譲処理部318a)は、マスター権の委譲が必要となった場合、現在ネットワークデバイス13を共有している他のゲストOSの中から、マスター権が委譲されるべきゲストOSを1つ選択する(ステップS51)。ここでは、ゲストOS31-2が選択されたものとする。ステップS51において、マスターゲストOS31-1のドライバ310-1は、SW割り込みを使用して、マスターゲストOS31-1以外の全てのゲストOS(ここでは、ゲストOS31-2及び32-3)に、ゲストOS31-1からゲストOS31-2へのマスターゲストOS変更を通知する。
SW割り込みによってマスターゲストOS変更の通知を受けたゲストOSのうち、マスター権が委譲されるゲストOS31-2のドライバ310-2は、共有メモリ32のゲストOS情報領域323のマスターゲストOSに関連する情報を当該ゲストOS31-2を示すように更新する(ステップS52)。
マスターゲストOS変更の通知を受けたゲストOSのうち、マスター権が委譲されるゲストOS(新マスターゲストOS)31-2のドライバ310-2は、ネットワークデバイス13からのHW割り込み先がゲストOS31-2(ドライバ310-2)自身になるように設定を変更する(ステップS61)。もし、マスターゲストOS変更を通知したゲストOS(旧マスターゲストOS)31-1が特殊処理を実行中であったならば、新マスターゲストOS31-2は、共有メモリ32の特殊処理ステータス領域322を参照して当該特殊処理を途中から引き継ぐ(ステップS62)。
[マスター権の取得処理]
「マスター権の取得処理」とは、マスター以外のゲストOSが自身へマスター権を移すための処理、つまりマスター以外のゲストOSがマスター権を取得するための処理である。以下、「マスター権の取得処理」について、ゲストOS31-1がマスターゲストOSであり、ゲストOS31-2がマスター権を取得しようとするゲストOSである場合を例に、図10のフローチャートを参照して説明する。
ゲストOS31-2のドライバ310-2(のマスター権取得処理部318b)は、当該ゲストOS31-2がマスター権を取得しようとする場合、その旨を当該ゲストOS31-2以外の、マスターゲストOS31-1を含む全てのゲストOS(ここでは、ゲストOS31-1及び32-3)に対してSW割り込みを使用して通知する(ステップS71)。この通知により、ゲストOS31-2以外のゲストOSでのマスターゲストOSに関する処理が抑止され、ゲストOS31-2はマスター権を排他的に取得することが可能となる。
ゲストOS31-2のドライバ310-2はステップS71を実行すると、共有メモリ32のゲストOS情報領域323のマスターゲストOS情報を当該ゲストOS31-2を示すように更新する(ステップS72)。これによりゲストOS31-2はマスター権を取得して、新たにマスターゲストOS(新マスターゲストOS)となる。
ゲストOS31-2のドライバ310-2は、ネットワークデバイス13からのHW割り込み先がゲストOS31-2自身になるように設定を変更する(ステップS73)。
もし、ゲストOS(新マスターゲストOS)31-2がマスター権を取得するまでマスターであったゲストOS(旧マスターゲストOS)31-1が特殊処理を実行中であったならば、新マスターゲストOS31-2は、共有メモリ32の特殊処理ステータス領域322を参照して当該特殊処理を途中から引き継ぐ(ステップS74)。
[close処理]
本実施形態では、ゲストOSのドライバ(のclose処理部314)がネットワークデバイス13の使用を終了する際に実行される「close処理(ドライバのclose処理)」で、上述の「マスター権の委譲処理」が利用される。以下、この「close(クローズ)処理」の手順について、ゲストOS31-1のドライバ310-1がネットワークデバイス13の使用を終了する場合を例に、図11のフローチャートを参照して説明する。
今、ゲストOS31-1から当該ゲストOS31-1のドライバ310-1に対して、「close要求」が与えられたものとする。するとドライバ310-1(のclose処理部314)は、当該ドライバ310-1を含むゲストOS31-1がマスターゲストOSであるかを判定する(ステップS81)。もし、ゲストOS31-1がマスターゲストOSでないならば(ステップS81がNo)、ドライバ310-1は後述するステップS84に進む。
一方、ゲストOS31-1がマスターゲストOSであるならば(ステップS81がYes)、ドライバ310-1は、他にネットワークデバイス13を共有しているゲストOS(他のゲストOS)が存在するかを判定する(ステップS82)。
もし、ステップS82の判定がYesであるならば、即ちゲストOS31-1がマスターゲストOSで、且つ他にネットワークデバイス13を共有しているゲストOSがあるならば、当該ゲストOS31-1のドライバ310-1(のclose処理部314)は(マスター権委譲処理部318aを用いて)上述の「マスター権の委譲処理」を行う(ステップS83)。そしてドライバ310-1はステップS84に進む。
ステップS84においてドライバ310-1(旧マスターゲストOS31-1のドライバ310-1)は、共有メモリ32から当該ドライバ310-1を含むゲストOS(旧マスターゲストOS)31-1に関連する情報を削除する。このステップS84での処理は、ドライバ310-1が確保・参照していた各ディスクリプタの解放を含む。ドライバ310-1はステップS84を実行すると、「close処理」を終了する。
一方、ステップS82の判定がNoであるならば、即ちゲストOS31-1がマスターゲストOSで、且つ他にネットワークデバイス13を共有しているゲストOSがないならば、当該ゲストOS31-1のドライバ310-1は、ネットワークデバイス13を停止させるための処理(ネットワークデバイス終了処理)を行う(ステップS85)。そしてドライバ310-1は、VMM20により共有メモリ32(共有メモリ領域120)を解放させて(ステップS86)、「close処理」を終了する。
このような「close処理」により、たとえマスターゲストOSのドライバがcloseされても、つまりマスターゲストOSがネットワークデバイス13の使用を終了しても、他のゲストOSで運用を続けることが可能となる。
<相互監視に基づいたゲストOSの排除>
本実施形態のように複数のゲストOSのドライバ(ネットワークデバイスドライバ)が協調して動作する場合、次のような問題が生じる可能性がある。例えば、あるゲストOSが「panic」或いは「hang」と呼ばれるような動作不能な状態に陥った場合に、ネットワークデバイス13のHW仕様によってはそのゲストOSが使用しているディスクリプタの処理が進まなくなって、結果として送受信の処理を進めなくなる可能性がある。また、マスターゲストOSが動作不能になった場合は、通信自体を行うことができなくなってしまう。
そこで本実施形態では、ゲストOS31-1〜31-3が正常に動作しているかを、当該ゲストOS31-1〜31-3のドライバ310-1〜310-3が相互に監視する仕組みと、正常に動作していないと判断されたゲストOSをネットワークデバイス13の共有状態から強制的に排除する仕組みとが用意される。この2つの仕組みにより、ゲストOS(例えばマスターゲストOS)が動作不能になっても、残りのゲストOSによって運用が続けられる。
正常に動作していないゲストOSを検出する手法は種々考えられる。ここでは以下に示す簡単な検出手法が適用されるものとする。
まず、共有メモリ32(共有メモリ領域120)に、ゲストOS31-1〜31-3に共通のカウンタ(カウンタ領域)が用意される。
ゲストOS31-1〜31-3のドライバ310-1〜310-3は、それぞれ特定のタイミングで上記共通のカウンタをカウントアップし、そのカウントアップ後の当該カウンタの値(カウンタ値)を、共有メモリ32のゲストOS情報領域323に格納される自身のゲストOS情報内に保持する。なお、上記特定のタイミングを、ゲストOS内のタイマで管理しても良いし、通信時における特定の処理の機会としても良い。
ゲストOS31-1〜31-3のドライバ310-1〜310-3は、それぞれ他のゲストOSによって当該他のゲストOSのゲストOS情報に保持されているカウンタ値(つまり他のゲストOSのカウンタ値)を監視する。そしてドライバ310-1〜310-3は、他のゲストOSのカウンタ値と共通のカウンタの値との差が閾値を超えていたなら、当該他のゲストOSにSW割り込みを配信する。なお、上記の監視のタイミングを、ゲストOS内のタイマで管理しても良いし、通信時における特定の処理の機会としても良い。
ドライバ310-1〜310-3は、SW割り込みの配信先のゲストOSが当該SW割り込みに反応(例えば上記共通のカウンタのカウントアップ)できなければ、そのゲストOSは正常に動作していない、異常ゲストOSであると判断する。
[ゲストOS排除処理]
以下、正常に動作していないと判断された異常ゲストOSを(ネットワークデバイス13を共有する状態から)排除するための「ゲストOS排除処理」の手順について、図12のフローチャートを参照して説明する。
今、ゲストOS31-2のドライバ310-2(のゲストOS排除処理部319)が、例えばゲストOS31-1を、正常に動作していない異常ゲストOS(つまり排除されるべきゲストOS)として検出したものとする(ステップS91)。異常ゲストOS31-1を検出したドライバ310-2は、当該異常ゲストOS31-1がマスターゲストOSであるかを当該異常ゲストOS31-1のゲストOS情報に基づいて判定する(ステップS92)。
もし、異常ゲストOS31-1がマスターゲストOSでないならば(ステップS92がNo)、当該異常ゲストOS31-1を検出したドライバ310-2は後述するステップS94に進む。これに対して異常ゲストOS31-1がマスターゲストOSであるならば(ステップS92がYes)、当該異常ゲストOS31-1を検出したドライバ310-2が(マスター権取得処理部318bを用いて)上述の「マスター権の取得処理」を行う(ステップS93)。ドライバ310-2はステップS93を実行するとステップS94に進む。
ステップS94においてドライバ310-2は、排除されるべき異常ゲストOS31-1に、その旨をSW割り込みを使用して通知する(ステップS94)。この通知は、異常ゲストOS31-1(正常に動作していないと判断された異常ゲストOS)が動作不能状態から復帰した場合に、ネットワークデバイス13を共有する状態から排除されているにもかかわらずに自身が当該ネットワークデバイス13を使用しているものとして誤動作しないように知らせるために行われる。
次にドライバ310-2は、共有メモリ32から異常ゲストOS31-1に関連する情報を削除する(ステップS95)。このステップS95での処理は、異常ゲストOS31-1のドライバ310-1が確保・参照していた各ディスクリプタの解放を含む。ドライバ310-2は、ステップS95の実行により、異常ゲストOS31-1をネットワークデバイス13を共有する状態から強制的に排除すると、「ゲストOS排除処理」を終了する。
さて、排除されたゲストOS31-1のドライバ310-1が復帰したものとする。そして、復帰したドライバ310-1が、ドライバ310-2からのSW割り込み(ステップS94)によって当該ドライバ310-1を含むゲストOS31-1が排除されたことが認識できたものとする。この場合、ドライバ310-1は、ゲストOS31-1の排除に対応した後処理、例えばゲストOS31-1をエラー扱いとする処理を行う(ステップS100)。
<動的なマスター権の移行>
上述の説明では、マスター権の移行は、マスターゲストOSの終了や、マスターゲストOSに異常が発生した際に特別に行われる。しかし、マスターゲストOSが正常稼動中でも、動作効率の向上のために、動的にマスター権を移行することも可能である。このような動作効率向上のためのマスター権移行の例を以下に列挙する。
(1)最も通信回数の多いゲストOSがマスターとなる。この場合、通信の際のマスターゲストOSとその他のゲストOSとの間の通知やディスパッチによるオーバヘッドを軽減することができる。通信回数に関しては、共有メモリ32-1〜321-2のゲストOS情報領域323に格納されるゲストOS情報に含まれている通信回数統計情報を利用すれば良い。
(2)ディスパッチ機会(時間)の最も多いゲストOS(つまりディスパッチ機会の最も多いゲストOS)がマスターとなる。各ゲストOSのディスパッチ機会(時間)の情報を取得するには、当該各ゲストOSのディスパッチポリシ(スケジュール)を当該ゲストOS自身が把握すれば良い。本実施形態においてVMM20は、ゲストOS31-1〜31-3のディスパッチポリシを提供する手段を有している。ゲストOS31-1〜31-3のそれぞれドライバ310-1〜310-3(のマスター権移行処理部318)は、この手段を利用して、ゲストOS31-1〜31-3のディスパッチポリシを把握する。ディスパッチポリシを提供する手段は、例えばゲストOS31-1〜31-3にCPU11(CPU時間)を割り当てるための、VMM20に設けられたスケジューラまたはディスパッチャに含まれているものとする。ここでは、ディスパッチポリシを提供する手段は、ゲストOS31-1〜31-3のディスパッチ時間の比率を指定するディスパッチ指定手段である。
(3)各ゲストOSに予め優先度(ゲストOS優先度)を付与し、稼働中のゲストOSの中で最も優先度が高いゲストOSがマスターとなる。各ゲストOSの優先度は、例えば、システムの構築者のようなユーザの指定によって、ネットワーク2に接続されたクライアント端末から付与されるものとする。各ゲストOSの優先度は、前述のように、共有メモリ32-1〜321-2のゲストOS情報領域323に格納されるゲストOS情報に含まれている。
[通信回数の多いゲストOSへのマスター権の移行処理]
次に上記(1)に対応した「通信回数の多いゲストOSへのマスター権の移行処理」について説明する。
本実施形態では、マスターゲストOS以外のゲストOSが通信を行う度に、マスターゲストOS自身が通信を行う場合と比較して、マスターゲストOSへの割り込み通知とディスパッチによるオーバヘッドが発生する。したがって、より通信回数の多いゲストOSがマスターゲストOSとなる方が、システム全体のオーバヘッドが少なくなり、通信のスループットが良くなることが期待される。
本実施形態では、通信回数の判断に、各ゲストOSが使用したディスクリプタの数が使用される。ここでは通信回数の判断に、送信ディスクリプタチェーン325a(における送信ディスクリプタ325-j)が使用されるものとする。しかし通信回数の判断に、受信ディスクリプタチェーン(における受信ディスクリプタ326-j)を用いても良い。また、通信回数をより高精度に判断するために、両ディスクリプタチェーン(におけるディスクリプタ325-j及び326-j)を用いても構わない。
マスター権を移行するかを判定するのに、「最も多くディスクリプタを使用したゲストOSをマスターゲストOSとする」ような簡単な手法が考えられる。この手法を適用した場合、マスター権の移行処理が頻発する可能性がある。また、マスター権の移行処理自体がオーバヘッドとなる可能性もある。
そこで本実施形態では、マスター権の移行処理が頻発するのを防ぐために、以下に挙げる2つの条件に基づきマスター権を移行するかが判定される。
1a)マスターゲストOS以外のある1つのゲストOSの通信回数が著しく多い場合:
ディスクリプタチェーンに含まれるディスクリプタ数の一定割合以上(例えば1/2以上)を、ある1つのゲストOSが使用していた場合が、これに該当する。
1b)マスターゲストOSの通信回数が著しく少ない場合:
N個のゲストOSがネットワークデバイス13を共有しているものとすると、ディスクリプタチェーンに含まれるディスクリプタの数の一定割合未満、例えば1/(2N)個未満しか、マスターゲストOSが使用していなかった場合が、これに該当する。
以下、上述の2つの条件に基づいて行われる「通信回数の多いゲストOSへのマスター権の移行処理」の手順について、ゲストOS31-1がマスターゲストOSである場合を例に、図13のフローチャートを参照して説明する。
マスターゲストOS31-1のドライバ310-1(のマスター権移行処理部318)は、当該マスターゲストOS31-1からの送信要求、または他のゲストOS(ゲストOS31-2または31-3)からのDMA要求割り込みに応じて送信処理が行われる際に、共有メモリ32内にある該当するゲストOS(送信要求元またはDMA要求割り込み元のゲストOS)の通信回数の統計情報を更新する(ステップS111)。
次にマスターゲストOS31-1のドライバ310-1は、通信回数の統計情報によって示されるゲストOS31-1〜31-3の通信回数の合計zが、予め定められた一定個数、例えば1200個に達したかを判定する(ステップS112)。もし、上記zが1200個に達したならば(ステップS112がYes)、ドライバ310-1は通信回数の調査を次のように行う。なお、調査を行うタイミングが、例えば一定時間毎のように、zの数以外の別のタイミングであっても構わない。
まずマスターゲストOS31-1のドライバ310-1は、マスターゲストOS31-1以外のゲストOS、つまりゲストOS31-2及び31-3の通信回数の統計情報を調査し、当該ゲストOS31-2及び31-3の中に、ディスクリプタ使用数(通信回数)bが上記一定個数(1200個)の一定割合以上、例えば1/2以上(つまり600個以上)のゲストOSが存在するかを判定する(ステップS113)。もし、bが600個以上のゲストOSが見つかれば(ステップS113がYes)、ドライバ310-1(のマスター権移行処理部318に含まれているマスター権委譲処理部318a)は、そのゲストOSにマスター権を委譲するための前述の「マスター権委譲処理」を行う(ステップS114)。そしてドライバ310-1は、後述するステップS116に進む。
一方、bが600個以上のゲストOSが見つからないならば(ステップS113がNo)、マスターゲストOS31-1のドライバ310-1は、当該マスターゲストOS31-1の通信回数の統計情報を調査し、当該マスターゲストOS31-1のディスクリプタ使用数(通信回数)aが上記一定個数(1200個)の一定割合未満、例えば1/(2N)未満(Nが3の場合、200個未満)であるかを判定する(ステップS115)。
もし、マスターゲストOS31-1のディスクリプタ使用数が1200の1/(2N)未満であれば(ステップS115がYes)、当該マスターゲストOS31-1のドライバ310-1はステップS114に進む。このステップS114においてマスターゲストOS31-1のドライバ310-1(のマスター権移行処理部318に含まれているマスター権委譲処理部318a)は、当該ゲストOS31-1を除くゲストOS31-2及び31-3のうち、最もディスクリプタ使用数の多いゲストOSにマスター権を委譲するための前述の「マスター権委譲処理」を行う(ステップS114)。そしてドライバ310-1は、ステップS116に進む。
ステップS116においてドライバ310-1は、共有メモリ32内にあるゲストOS31-1〜31-3の通信回数(ディスクリプタ使用数)の統計情報をクリアする。
次に、上記「通信回数の多いゲストOSへのマスター権の移行処理」の具体例(例1乃至3)について説明する。ここでは、ゲストOS31-1、ゲストOS31-2及びゲストOS31-3を、それぞれゲストOS#1、ゲストOS#2及びゲストOS#3と表現する。また、ステップS112が実行される時点において、ゲストOS#1がマスターゲストOSであり、送信ディスクリプタチェーン325aのディスクリプタ数の合計が1200であるものとする。
(例1)
ゲストOS#1のディスクリプタ使用数:400
ゲストOS#2のディスクリプタ使用数:700
ゲストOS#3のディスクリプタ使用数:100
例1では、ステップS113の判定条件にゲストOS#2が合致する。この場合、ゲストOS#1からゲストOS#2にマスター権が移行される。
(例2)
ゲストOS#1のディスクリプタ使用数:100
ゲストOS#2のディスクリプタ使用数:500
ゲストOS#3のディスクリプタ使用数:600
例2では、ステップS113の判定条件に合致するゲストOSは存在しない。ここでは、マスターゲストOS#1のディスクリプタ使用数は、1200/(3×2)、つまり200よりも少ない。したがって、マスターゲストOS#1のディスクリプタ使用数(通信数)は、ステップS115の判定条件に合致する。この場合、残りのゲストOSのうち、最もディスクリプタ使用数の多いゲストOS#3にマスター権が移行される。
(例3)
ゲストOS#1のディスクリプタ使用数:300
ゲストOS#2のディスクリプタ使用数:500
ゲストOS#3のディスクリプタ使用数:400
例3では、ステップS113の判定条件に合致するゲストOSは存在しない。また、マスターゲストOS#1のディスクリプタ使用数は、ステップS115の判定条件に合致しない。この場合、ゲストOS#2のディスクリプタ使用数は最も多いものの、当該ゲストOS#2へのマスター権の移行は行われない。これにより、マスター権の移行処理が頻発するのが防止される。
[ディスパッチ機会の多いゲストOSへマスター権の移行処理]
次に、上記(2)に対応した「ディスパッチ機会の多いゲストOSへのマスター権の移行処理」について説明する。
ディスパッチされる機会(または時間)が最も多いゲストOSがマスター権を持つと、その分だけネットワークデバイス13へのアクセスや特殊処理を行う機会が増える。このため、結果としてスループットが向上する可能性がある。
そこで本実施形態では、ゲストOS31-1〜31-3のそれぞれドライバ310-1〜310-3は、VMM20が有するディスパッチ指定手段を利用して、ゲストOS31-1〜31-3のディスパッチ時間の比率を把握する。
ゲストOS31-1〜31-3のドライバ310-1〜310-3は、当該ゲストOS31-1〜31-3のディスパッチ時間の比率に基づき、当該ドライバのopen時における「マスター権の取得処理」及び当該ドライバのclose時における「マスター権の委譲処理」を次のように実行する。なお、マスターゲストOSはゲストOS31-1であるものとする。またマスターゲストOS以外のゲストOS31-2またはゲストOS31-3をゲストOS31-k(kは2または3)と表現するものとする。
(ドライバのopen時)
ゲストOS31-kのドライバ310-kのopen時において、マスターゲストOS31-1よりも当該ゲストOS31-kのディスパッチ時間の比率の設定が大きいものとする。この場合、ゲストOS31-kのドライバ310-kは、マスター権の取得処理を行う。
(ドライバのclose時)
マスターゲストOS31-1のドライバ310-1のclose時において、他のゲストOSの中でゲストOS31-kのディスパッチ時間の比率の設定が最も大きいものとする。この場合、マスターゲストOS31-1のドライバ310-1は、自身のclose時に、ゲストOS31-kへマスター権を委譲する。
なお、ディスパッチ時間に代えて、ディスパッチ機会(回数)を用いても良い。
[優先度の高いゲストOSへのマスター権の移行処理]
次に上記(3)に対応した「優先度の高いゲストOSへのマスター権の移行処理」について説明する。
前述のように、ゲストOS31-1〜31-3の優先度(ゲストOS優先度)は、VMM20が、ディスパッチされるべきゲストOSを選択する際に選定の基準とする値である。このため優先度が高いゲストOSほど、当該ゲストOSへのディスパッチの機会が多く、CPU割当時間が多くなると想定される。したがって、ゲストOS31-1〜31-3の優先度は、当該ゲストOS31-1〜31-3のディスパッチのされやすさの指標(つまりディスパッチされる時間もしくは回数の指標)であるといえる。このため、ゲストOS31-1〜31-3のディスパッチ時間の比率に代えて、当該ゲストOS31-1〜31-3の優先度を用いることも可能である。
そこでゲストOS31-1〜31-3のドライバ310-1〜310-3は、共有メモリ32のゲストOS情報領域323に格納されているゲストOS情報に含まれているゲストOS優先度に基づいて、当該ドライバのopen時における「マスター権の取得処理」及び当該ドライバのclose時における「マスター権の委譲処理」を次のように実行する。なお、マスターゲストOSはゲストOS31-1であるものとする。またマスターゲストOS以外のゲストOS31-2またはゲストOS31-3をゲストOS31-k(kは2または3)と表現するものとする。
(ドライバのopen時)
ゲストOS31-kのドライバ310-kのopen時において、マスターゲストOS31-1よりも当該ゲストOS31-kの優先度が高いものとする。この場合、ゲストOS31-kのドライバ310-kは、マスター権の取得処理を行う。
(ドライバのclose時)
マスターゲストOS31-1のドライバ310-1のclose時において、他のゲストOSの中でゲストOS31-kの優先度が最も高いものとする。この場合、マスターゲストOS31-1のドライバ310-1は、自身のclose時に、ゲストOS31-kへマスター権を委譲する。
[ゲストOSの優先度の変更時おけるマスター権の移行処理]
ゲストOS31-1〜31-3の優先度は、例えばVMM20によって変更され、その変更がVMM20からゲストOS31-1〜31-3に通知されるものとする。またゲストOS31-1〜31-3の優先度は、当該ゲストOS31-1〜31-3からVMM20への要求によっても変更されるものとする。
以下、「ゲストOSの優先度の変更時おける(優先度の高いゲストOSへの)マスター権の移行処理」について、ゲストOS31-1の優先度が変更された場合を例に、図14のフローチャートを参照して説明する。
今、ゲストOS31-1のドライバ310-1(のマスター権移行処理部318)が、当該ゲストOS31-1の優先度(ゲストOS優先度)がVMM20によって変更されたことを、当該VMM20からの通知によって検出したものとする。するとゲストOS31-1のドライバ310-1は、共有メモリ32のゲストOS情報領域323に格納されているゲストOS情報に含まれている当該ゲストOS31-1のゲストOS優先度を当該変更後の優先度に更新する(ステップS121)。なお、ゲストOS31-1のドライバ310-1が上記ゲストOS情報領域323に格納されているゲストOS情報を例えば定期的に参照することにより、当該ゲストOS31-1のゲストOS優先度が変更されたことを検出しても良い。
次にゲストOS31-1のドライバ310-1は、当該ゲストOS31-1がマスターゲストOSであるかを判定する(ステップS122)。もし、ゲストOS31-1がマスターゲストOSであるならば(ステップS122がYes)、当該ゲストOS31-1のドライバ310-1は、当該ゲストOS31-1の優先度が下がったかを判定する(ステップS123)。
もし、ゲストOS31-1の優先度が下がってないならば(ステップS123がNo)、当該ゲストOS31-1のドライバ310-1は何もせずにマスター権の移行処理を終了する。
これに対し、ゲストOS31-1の優先度が下がったならば(ステップS123がYes)、当該ゲストOS31-1のドライバ310-1は、共有メモリ32のゲストOS情報領域323に格納されているゲストOS情報に基づき、当該ゲストOS31-1(つまりマスターゲストOS)よりも優先度の高いゲストOSが存在するかを判定する(ステップS124)
もし、ゲストOS31-1(マスターゲストOS)よりも優先度の高いゲストOSが存在しないならば(ステップS124がNo)、当該ゲストOS31-1のドライバ310-1は何もせずにマスター権の移行処理を終了する。
これに対し、ゲストOS31-1(マスターゲストOS)よりも優先度の高いゲストOSが存在するならば(ステップS124がYes)、当該ゲストOS31-1のドライバ310-1(のマスター権移行処理部318に含まれているマスター権委譲処理部318a)は、当該ゲストOS31-1(マスターゲストOS)よりも優先度の高いゲストOSのうち最も優先度の高いゲストOSにマスター権を委譲して(ステップS125)、マスター権の移行処理を終了する。即ちゲストOS31-1のドライバ310-1は、当該ゲストOS31-1がマスターゲストOSであり、且つ当該ゲストOS31-1の優先度が下がって他のゲストOSの優先度のほうが高くなっていれば、「マスター権委譲処理」を行う。
一方、ゲストOS31-1がマスターゲストOSでない場合(ステップS122がNo)にも、ドライバ310-1は、当該ゲストOS31-1の優先度が下がったかを判定する(ステップS126)。
もし、ゲストOS31-1の優先度が下がったならば(ステップS126がYes)、当該ゲストOS31-1のドライバ310-1は何もせずにマスター権の移行処理を終了する。
これに対し、ゲストOS31-1の優先度が下がってないならば(ステップS126がNo)、当該ゲストOS31-1のドライバ310-1は、当該ゲストOS31-1の優先度が上がってマスターゲストOSの優先度よりも高くなったかを判定する(ステップS127)。
もし、ゲストOS31-1の優先度がマスターゲストOSの優先度よりも依然として低いならば(ステップS127のNo)、当該ゲストOS31-1のドライバ310-1は何もせずにマスター権の移行処理を終了する。
これに対し、ゲストOS31-1の優先度がマスターゲストOSの優先度よりも高くなったならば(ステップS127のYes)、当該ゲストOS31-1のドライバ310-1(のマスター権移行処理部318に含まれているマスター権取得処理部318b)はマスター権を取得して(ステップS128)、マスター権の移行処理を終了する。即ちゲストOS31-1のドライバ310-1は、当該ゲストOS31-1がマスターゲストOSでなく、且つ当該ゲストOS31-1の優先度が上がってマスターゲストOSの優先度よりも高くなっていれば、「マスター権取得処理」を行う。
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
本発明の一実施形態に係る仮想計算機システムの構成を示すブロック図。 図1に示される共有メモリにおける領域の割り当て例を示す図。 図2に示される送信ディスクリプタチェーン領域に格納される送信ディスクリプタチェーンの一例を示す図。 図2に示される受信ディスクリプタチェーン領域に格納される受信ディスクリプタチェーンの一例を示す図。 同実施形態における「open処理」の手順を示すフローチャート。 同実施形態における「送信処理」の手順を示すフローチャート。 同実施形態における「受信処理」の手順を示すフローチャート。 同実施形態における「エラー割り込み処理」の手順を示すフローチャート。 同実施形態における「マスター権の委譲処理」の手順を示すフローチャート。 同実施形態における「マスター権の取得処理」の手順を示すフローチャート。 同実施形態における「close処理」の手順を示すフローチャート。 同実施形態における「ゲストOS排除処理」の手順を示すフローチャート。 同実施形態における「通信回数の多いゲストOSへのマスター権の移行処理」の手順を示すフローチャート。 同実施形態における「ゲストOSの優先度の変更時おけるマスター権の移行処理」の手順を示すフローチャート。
符号の説明
1…物理計算機、2…ネットワーク、10…HW(ハードウェア)、11…CPU、12…メモリ、13…ネットワークデバイス、20…VMM(仮想計算機マネージャ)、30-1〜30-3…仮想計算機、31-1〜31-3…ゲストOS、32…共有メモリ、120…共有メモリ領域、310-1〜310-3…ネットワークデバイスドライバ、311…HW割り込みハンドラ、312…SW割り込みハンドラ、313…open処理部、314…close処理部、315…送信処理部、316…受信処理部、317…エラー割り込み処理部、318…マスター権移行処理部、318a…マスター権委譲処理部、318b…マスター権取得処理部、319…ゲストOS排除処理部、321…物理レジスタマップ領域、322…特殊処理ステータス領域、323…ゲストOS情報領域、324…DMAバッファ領域、324a…DMAバッファ、325…送信ディスクリプタチェーン領域、325a…送信ディスクリプタチェーン、325-1〜325-10…送信ディスクリプタ、326…受信ディスクリプタチェーン領域、326a…受信ディスクリプタチェーン、326-1〜326-10…受信ディスクリプタ、327…他共有情報領域。

Claims (8)

  1. CPU、メモリ及びネットワークデバイスを含む物理計算機上で動作して、複数のゲストOSが動作可能な複数の仮想計算機から構成される仮想計算機実行環境を構築する仮想計算機マネージャであって、前記メモリ内に共有メモリ領域を確保して、当該共有メモリ領域が仮想化された、前記複数のゲストOS及び前記複数のネットワークデバイスドライバ手段からアクセス可能な共有メモリであって、前記ネットワークデバイスによってネットワークから受信された受信データを一時格納すると共に、前記複数のゲストOSのいずれかから転送された送信データを一時格納するためのバッファ、及びマスター権を有するマスターゲストOSとして動作するゲストOSを示すマスターゲストOS情報を登録するためのゲストOS情報領域を含む共有メモリを構築する仮想計算機マネージャと、
    記複数のゲストOS上でそれぞれ動作する複数のネットワークデバイスドライバ手段を具備し、
    前記複数のネットワークデバイスドライバ手段の各々は、
    自身が動作するゲストOSから前記ネットワークデバイスの使用を開始するためのオープン要求を受けた際に、前記メモリ内に前記共有メモリ領域が存在するかを判定し、前記共有メモリ領域が存在しないならば、前記仮想計算機マネージャによって、前記メモリ内に前記共有メモリ領域を確保させて、前記共有メモリ領域が仮想化された前記共有メモリを構築させ、しかる後に前記共有メモリの前記ゲストOS情報領域に、自身が動作するゲストOSを前記マスターゲストOSとして示す前記マスターゲストOS情報を格納することによって、前記自身が動作するゲストOSを前記マスターゲストOSとして前記共有メモリに登録するオープン処理手段と、
    前記自身が動作するゲストOSが前記共有メモリに前記マスターゲストOSとして登録されている第1の状態で、前記ネットワークに送信された前記送信データが前記ネットワークデバイスによって前記受信データとして前記バッファに格納された結果、前記受信データが前記バッファに格納されたことを通知するための前記ネットワークデバイスからの受信完了割り込みを受信した場合、当該受信データを当該受信データの宛先のゲストOSによって受信させる受信処理手段と、
    前記第1の状態で、前記自身が動作するゲストOSからの送信要求を受信した場合、当該マスターゲストOSからの送信データを前記バッファに格納し、しかる後に当該バッファに格納された前記送信データを前記ネットワークデバイスによって前記ネットワークへ送信させ、前記自身が動作するゲストOSとは別のゲストOSが前記共有メモリに前記マスターゲストOSとして登録されている第2の状態で、前記自身が動作するゲストOSからの送信要求を受信した場合、前記自身が動作するゲストOSからの送信データを前記バッファに格納し、しかる後に前記マスターゲストOSに当該送信データの送信のための送信要求割り込みを発行し、前記第1の状態で、前記自身が動作するゲストOS以外のゲストOSから前記送信要求割り込みを受信した場合、前記バッファに格納された前記自身が動作するゲストOS以外のゲストOSからの送信データを前記ネットワークデバイスによって前記ネットワークへ送信させる送信処理手段とを含む
    ことを特徴とする仮想計算機システム。
  2. 前記仮想計算機マネージャは、ディスパッチスケジュールに従って前記複数のゲストOSに前記CPUを割り当て、
    前記共有メモリは、データ送信を管理するための複数の送信ディスクリプタから構成される送信ディスクリプタチェーン及びデータ受信を管理するための複数の受信ディスクリプタから構成される受信ディスクリプタチェーンを格納するディスクリプタチェーン領域を含み、
    前記ゲストOS情報領域は、前記複数のゲストOSの各々がデータ送信のために使用した前記送信ディスクリプタの総数、及び前記複数のゲストOSがデータ受信のために使用した前記受信ディスクリプタの総数の少なくとも一方を、前記複数のゲストOSの各々の通信回数として格納し、且つ前記仮想計算機マネージャによって変更可能な前記複数のゲストOSの各々の優先度を格納し、
    前記複数のネットワークデバイスドライバ手段の各々は、前記第1の状態で、前記自身が動作するゲストOSから前記ネットワークデバイスの使用を終了するためのクローズ要求を受けた場合、前記複数のゲストOSのうち前記自身が動作しているゲストOS以外の残りのゲストOSの前記ゲストOS情報領域に格納されている通信回数、または前記仮想計算機マネージャが提供する前記ディスパッチスケジュールの示す、前記残りのゲストOSに前記CPUが割り当てられる時間もしくは回数、または前記残りのゲストOSの前記ゲストOS情報領域に格納されている優先度に基づき、前記通信回数が最も多い、または前記CPUが割り当てられる時間もしくは回数が最も多い、または前記優先度が最も高いゲストOSを特定し、前記ゲストOS情報領域に格納されている前記マスターゲストOS情報を前記特定されたゲストOSを示すように更新することにより、前記特定されたゲストOSに前記マスター権を委譲するマスター権委譲手段を含む
    請求項記載の仮想計算機システム。
  3. 前記共有メモリは、データ送信を管理するための複数の送信ディスクリプタから構成される送信ディスクリプタチェーン及びデータ受信を管理するための複数の受信ディスクリプタから構成される受信ディスクリプタチェーンを格納するディスクリプタチェーン領域を含み、
    前記ゲストOS情報領域は、前記複数のゲストOSの各々がデータ送信のために使用した前記送信ディスクリプタの総数、及び前記複数のゲストOSがデータ受信のために使用した前記受信ディスクリプタの総数の少なくとも一方を、前記複数のゲストOSの各々の通信回数として格納し、
    前記複数のネットワークデバイスドライバ手段の各々は、前記第1の状態で、前記ゲストOS情報領域に格納されている前記複数のゲストOSの前記通信回数の合計が第1の閾値以上となった場合、前記複数のゲストOSのうち前記通信回数が最も多いゲストOSを前記マスターゲストOSとして最適なゲストOSであると決定し、決定されたゲストOSが前記自身が動作するゲストOS以外のゲストOSであるならば、前記ゲストOS情報領域に格納されている前記マスターゲストOS情報を前記決定されたゲストOSを示すように更新することにより、前記決定されたゲストOSに前記マスター権を委譲し、且つ前記ゲストOS情報領域に格納されている前記複数のゲストOSの前記通信回数をクリアするマスター権委譲手段を含む求項記載の仮想計算機システム。
  4. 前記マスター権委譲手段は、記合計が前記第1の閾値以上となっても前記第1の閾値に対する前記マスターゲストOSの通信回数の割合が第2の閾値未満の場合、前記マスター権の委譲を抑止する請求項記載の仮想計算機システム。
  5. CPU、メモリ及びネットワークデバイスを含む物理計算機上で動作する仮想計算機マネージャによって提供される仮想計算機実行環境内の複数の仮想計算機上で複数のゲストOSが動作する仮想計算機システムにおいて、前記ネットワークデバイスを前記複数のゲストOSで共有させるネットワークデバイス共有方法であって、
    前記複数のゲストOS上でそれぞれ動作する複数のネットワークデバイスドライバ手段のうちのいずれかのネットワークデバイスドライバ手段が、当該ネットワークデバイスドライバ手段が動作するゲストOSから前記ネットワークデバイスの使用を開始するためのオープン要求を受けた際に、前記メモリ内に共有メモリ領域が存在するかを判定するステップと、
    前記共有メモリ領域が存在しない場合、前記オープン要求を受けたネットワークデバイスドライバ手段が、前記仮想計算機マネージャによって、前記メモリ内に前記共有メモリ領域を確保させて、前記共有メモリ領域が仮想化された、前記複数のゲストOS及び前記複数のネットワークデバイスドライバ手段からアクセス可能な共有メモリであって、前記ネットワークデバイスによってネットワークから受信された受信データを一時格納すると共に、前記複数のゲストOSのいずれかから転送された送信データを一時格納するためのバッファ、及びマスター権を有するマスターゲストOSとして動作するゲストOSを示すマスターゲストOS情報を登録するためのゲストOS情報領域を含む共有メモリを構築させるためのステップと、
    前記共有メモリが構築された場合、前記オープン要求を受けたネットワークデバイスドライバ手段が、前記共有メモリの前記ゲストOS情報領域に、自身が動作するゲストOSを前記マスターゲストOSとして示す前記マスターゲストOS情報を格納することによって、前記自身が動作するゲストOSを前記マスターゲストOSとして前記共有メモリに登録するステップと、
    前記ネットワークに送信された前記送信データが前記ネットワークデバイスによって前記受信データとして前記バッファに格納された結果、前記複数のゲストOSのうちの前記共有メモリに前記マスターゲストOSとして登録されているゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記受信データが前記バッファに格納されたことを通知するための前記ネットワークデバイスからの受信完了割り込みを受信した場合、当該受信データを当該受信データの宛先のゲストOSによって受信させるステップと、
    前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記マスターゲストOSからの送信要求を受信した場合、当該マスターゲストOSからの送信データを前記バッファに格納し、しかる後に当該バッファに格納された前記送信データを前記ネットワークデバイスによって前記ネットワークへ送信させるステップと
    前記複数のゲストOSのうちの前記マスターゲストOS以外のゲストOS上で動作する前記ネットワークデバイスドライバ手段が、自身が動作するゲストOSからの送信要求を受信した場合、当該ゲストOSからの送信データを前記バッファに格納し、しかる後に前記マスターゲストOSに当該送信データの送信のための送信要求割り込みを発行するステップと、
    前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記マスターゲストOS以外のゲストOSから前記送信要求割り込みを受信した場合、前記バッファに格納された当該ゲストOSからの送信データを前記ネットワークデバイスによって前記ネットワークへ送信させるステップと
    を具備することを特徴とするネットワークデバイス共有方法。
  6. 前記仮想計算機マネージャは、ディスパッチスケジュールに従って前記複数のゲストOSに前記CPUを割り当て、
    前記共有メモリは、データ送信を管理するための複数の送信ディスクリプタから構成される送信ディスクリプタチェーン及びデータ受信を管理するための複数の受信ディスクリプタから構成される受信ディスクリプタチェーンを格納するディスクリプタチェーン領域を含み、
    前記ゲストOS情報領域は、前記複数のゲストOSの各々がデータ送信のために使用した前記送信ディスクリプタの総数、及び前記複数のゲストOSがデータ受信のために使用した前記受信ディスクリプタの総数の少なくとも一方を、前記複数のゲストOSの各々の通信回数として格納し、且つ前記仮想計算機マネージャによって変更可能な前記複数のゲストOSの各々の優先度を格納し、
    前記ネットワークデバイス共有方法は、
    前記複数のネットワークデバイスドライバ手段のうち、前記マスターゲストOS上で動作するネットワークデバイスドライバ手段が、自身が動作しているゲストOSから前記ネットワークデバイスの使用を終了するためのクローズ要求を受けた場合に、前記複数のゲストOSのうち前記自身が動作しているゲストOS以外の残りのゲストOSの前記ゲストOS情報領域に格納されている通信回数、または前記仮想計算機マネージャが提供する前記ディスパッチスケジュールの示す、前記残りのゲストOSに前記CPUが割り当てられる時間もしくは回数、または前記残りのゲストOSの前記ゲストOS情報領域に格納されている優先度に基づき、前記通信回数が最も多い、または前記CPUが割り当てられる時間もしくは回数が最も多い、または前記優先度が最も高いゲストOSを特定し、前記ゲストOS情報領域に格納されている前記マスターゲストOS情報を前記特定されたゲストOSを示すように更新することにより、前記特定されたゲストOSに前記マスター権を委譲するステップを更に具備することを特徴とする請求項5記載のネットワークデバイス共有方法。
  7. 前記共有メモリは、データ送信を管理するための複数の送信ディスクリプタから構成される送信ディスクリプタチェーン及びデータ受信を管理するための複数の受信ディスクリプタから構成される受信ディスクリプタチェーンを格納するディスクリプタチェーン領域を含み、
    前記ゲストOS情報領域は、前記複数のゲストOSの各々がデータ送信のために使用した前記送信ディスクリプタの総数、及び前記複数のゲストOSがデータ受信のために使用した前記受信ディスクリプタの総数の少なくとも一方を、前記複数のゲストOSの各々の通信回数として格納し、
    前記ネットワークデバイス共有方法は、
    前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記ゲストOS情報領域に格納されている前記複数のゲストOSの前記通信回数の合計が第1の閾値以上となったかを判定するステップと、
    前記合計が第1の閾値以上となった場合、前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記複数のゲストOSのうち前記通信回数が最も多いゲストOSを前記マスターゲストOSとして最適なゲストOSであると決定し、決定されたゲストOSが前記マスターゲストOS以外のゲストOSであるならば、前記ゲストOS情報領域に格納されている前記マスターゲストOS情報を前記決定されたゲストOSを示すように更新することにより、前記決定されたゲストOSに前記マスター権を委譲し、且つ前記ゲストOS情報領域に格納されている前記複数のゲストOSの前記通信回数をクリアするステップ
    を更に具備することを特徴とする請求項記載のネットワークデバイス共有方法。
  8. 前記合計が第1の閾値以上となった場合、前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記第1の閾値に対する前記マスターゲストOSの通信回数の割合が第2の閾値未満であることを判定するステップと、
    記第1の閾値に対する前記マスターゲストOSの通信回数の割合が第2の閾値未満である場合、前記マスターゲストOS上で動作する前記ネットワークデバイスドライバ手段が、前記マスター権の委譲を抑止するステップと
    を更に具備することを特徴とする請求項7記載のネットワークデバイス共有方法。
JP2008163686A 2008-06-23 2008-06-23 仮想計算機システム及びネットワークデバイス共有方法 Expired - Fee Related JP4854710B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008163686A JP4854710B2 (ja) 2008-06-23 2008-06-23 仮想計算機システム及びネットワークデバイス共有方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008163686A JP4854710B2 (ja) 2008-06-23 2008-06-23 仮想計算機システム及びネットワークデバイス共有方法

Publications (2)

Publication Number Publication Date
JP2010003257A JP2010003257A (ja) 2010-01-07
JP4854710B2 true JP4854710B2 (ja) 2012-01-18

Family

ID=41584901

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008163686A Expired - Fee Related JP4854710B2 (ja) 2008-06-23 2008-06-23 仮想計算機システム及びネットワークデバイス共有方法

Country Status (1)

Country Link
JP (1) JP4854710B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7034890B2 (ja) 2018-11-12 2022-03-14 鹿島建設株式会社 杭体の打設方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8402190B2 (en) 2008-12-02 2013-03-19 International Business Machines Corporation Network adaptor optimization and interrupt reduction
US20100223419A1 (en) * 2009-03-02 2010-09-02 International Business Machines Corporation Copy circumvention in a virtual network environment
US8739177B2 (en) * 2010-06-21 2014-05-27 Intel Corporation Method for network interface sharing among multiple virtual machines
KR101751936B1 (ko) 2011-12-15 2017-07-12 한국전자통신연구원 호스트 기반 단말 가상화 환경에서 공유 메모리를 이용한 입출력 디바이스 가상화 장치 및 방법
JP2020503609A (ja) * 2016-12-27 2020-01-30 深▲せん▼前海達闥雲端智能科技有限公司Cloudminds (Shenzhen) Robotics Systems Co., Ltd. マルチオペレーティングシステム用のメモリアクセス方法、装置及び電子設備
JP6777050B2 (ja) 2017-09-21 2020-10-28 株式会社デンソー 仮想化システム、仮想化プログラム、及び、記憶媒体
JP7083717B2 (ja) * 2018-07-23 2022-06-13 ルネサスエレクトロニクス株式会社 半導体装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07225694A (ja) * 1994-02-09 1995-08-22 Hitachi Ltd 仮想計算機システム
JP2003202999A (ja) * 2002-01-08 2003-07-18 Hitachi Ltd 仮想計算機システム
US20030145122A1 (en) * 2002-01-30 2003-07-31 International Business Machines Corporation Apparatus and method of allowing multiple partitions of a partitioned computer system to use a single network adapter
US20050132367A1 (en) * 2003-12-16 2005-06-16 Vijay Tewari Method, apparatus and system for proxying, aggregating and optimizing virtual machine information for network-based management
WO2007082097A2 (en) * 2006-01-12 2007-07-19 Broadcom Israel R & D Method and system for protocol offload and direct i/o with i/o sharing in a virtualized network environment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7034890B2 (ja) 2018-11-12 2022-03-14 鹿島建設株式会社 杭体の打設方法

Also Published As

Publication number Publication date
JP2010003257A (ja) 2010-01-07

Similar Documents

Publication Publication Date Title
JP4854710B2 (ja) 仮想計算機システム及びネットワークデバイス共有方法
US10268597B2 (en) VM inter-process communication
US8279878B2 (en) Method for configuring virtual network and network system
US8725913B2 (en) Numa I/O framework
US8645755B2 (en) Enhanced error handling for self-virtualizing input/output device in logically-partitioned data processing system
US8291412B2 (en) Method of checking a possibility of executing a virtual machine
CN104871493B (zh) 用于高性能计算网络中的通信信道故障切换的方法和设备
JP4982971B2 (ja) 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7979869B2 (en) Method and system for performing I/O operations using a hypervisor
US9110717B2 (en) Managing use of lease resources allocated on fallover in a high availability computing environment
US9411636B1 (en) Multi-tasking real-time kernel threads used in multi-threaded network processing
US20050251806A1 (en) Enhancement of real-time operating system functionality using a hypervisor
US8635318B1 (en) Message broadcast protocol which handles configuration changes in a cluster of virtual servers
JP2008146566A (ja) 計算機、仮想デバイスの制御方法およびそのプログラム
US8918561B2 (en) Hardware resource arbiter for logical partitions
JP2001331333A (ja) 計算機システム及び計算機システムの制御方法
JP2010003061A (ja) 計算機システム及びそのi/o構成変更方法
US7640549B2 (en) System and method for efficiently exchanging data among processes
US20110320602A1 (en) Discovery of logical images at storage area network endpoints
US8141084B2 (en) Managing preemption in a parallel computing system
CN101470596B (zh) 虚拟化环境中的音频子系统共享
US8139595B2 (en) Packet transfer in a virtual partitioned environment
US9772961B2 (en) Computer system, a system management module and method of bidirectionally interchanging data via module according to the IPMI standard

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100525

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100817

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101018

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110614

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110810

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111004

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111025

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141104

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees