(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-01
(45)【発行日】2023-02-09
(54)【発明の名称】ハードウェア仮想化のための方法及び装置
(51)【国際特許分類】
G06F 13/10 20060101AFI20230202BHJP
G06F 13/14 20060101ALI20230202BHJP
G06F 12/109 20160101ALI20230202BHJP
【FI】
G06F13/10 330C
G06F13/10 330B
G06F13/14 320H
G06F12/109 110
(21)【出願番号】P 2019566337
(86)(22)【出願日】2018-06-15
(86)【国際出願番号】 US2018037863
(87)【国際公開番号】W WO2018232310
(87)【国際公開日】2018-12-20
【審査請求日】2021-05-27
(32)【優先日】2017-06-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】511050697
【氏名又は名称】アリババ グループ ホウルディング リミテッド
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ジャン,シャオウェイ
【審査官】田名網 忠雄
(56)【参考文献】
【文献】国際公開第2016/056140(WO,A1)
【文献】特開2001-051900(JP,A)
【文献】米国特許出願公開第2016/0246730(US,A1)
【文献】米国特許出願公開第2008/0022068(US,A1)
【文献】米国特許出願公開第2016/0026567(US,A1)
【文献】特開2016-197360(JP,A)
【文献】特開2013-235464(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10-13/14
G06F 12/109
(57)【特許請求の範囲】
【請求項1】
仮想マシンの入出力(I/O)インターフェースを操作する装置であって、
一組の命令を格納する1つ又は複数のメモリデバイスと;
1つ又は複数のハードウェアプロセッサとを含み、前記1つ又は複数のハードウェアプロセッサは、前記一組の命令を実行して、前記装置に、
一組のホスト空間仮想アドレスを前記1つ又は複数のメモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得することと;
前記1つ又は複数のメモリデバイスの第2の部分に関連する第2の組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、前記1つ又は複数のメモリデバイスの前記第2の部分は仮想マシンによりアクセス可能である、ことと;
前記第2の組の物理アドレスを前記第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成することと;
前記仮想マシンで動作するデバイスドライバが前記第3のマッピングテーブルを用いて前記第1の組の物理アドレスへアクセスできるように、前記第3のマッピングテーブルを
前記デバイスドライバへ提供することと
を行わせるように構成される、装置。
【請求項2】
前記1つ又は複数のハードウェアプロセッサはさらに、前記1つ又は複数のメモリデバイスの前記第1の部分をI/Oインターフェースの配置空間へマッピングするように構成され、
前記第3のマッピングテーブルは前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項1に記載の装置。
【請求項3】
前記1つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、仮想化コントローラ及びホストドライバを提供するように構成され;
前記一組のホスト空間仮想アドレスの前記第1の組の物理アドレスへの前記マッピングは前記仮想化コントローラにより行われ;
前記I/Oインターフェースの前記配置空間への前記1つ又は複数のメモリデバイスの前記第1の部分の前記マッピングは、前記仮想化コントローラからインディケーションを受信した後に前記ホストドライバにより行われる、請求項2に記載の装置。
【請求項4】
前記1つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、前記装置に、
一組のゲスト空間仮想アドレスを前記第2の組の物理アドレスへマッピングすることと;
前記一組のゲスト空間仮想アドレスを前記第1の組の物理アドレスへさらにマッピングするために前記第3のマッピングテーブルを更新することと;
前記更新された第3のマッピングテーブルを前記デバイスドライバへ提供することと
を行わせるように構成され、
前記更新された第3のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して1つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項2又は3に記載の装置。
【請求項5】
前記配置空間はタスクキューを格納し;
前記1つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、前記装置に、
前記一組のゲスト空間仮想アドレスの第1のゲスト空間仮想アドレスにおける第2のハードウェアインターフェースへ送信されるべき第1のデータを前記デバイスドライバにより格納することと;
前記タスクキューにおける前記第1のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと;
前記第1のゲスト空間仮想アドレス及び前記更新された第3のマッピングテーブルを使用して第1のハードウェアインターフェースに前記第1のデータを取り出させるために、前記デバイスドライバにより、前記更新された第3のマッピングテーブルに基づき、通知を前記第1のハードウェアインターフェースの前記配置空間内に格納することと
を行わせるように構成される、請求項4に記載の装置。
【請求項6】
前記配置空間はタスクキューを格納し;
前記1つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、前記装置に、
第2のデータが第2のハードウェアインターフェースから受信されるという通知を第1のハードウェアインターフェースから前記デバイスドライバにより受信することと;
前記通知の受信に応答して、前記タスクキューから前記第2のデータに関連する第2のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと;
前記第2のゲスト空間仮想アドレス及び前記第3のマッピングテーブルを使用して前記第2のデータを前記デバイスドライバにより取り出すことと
を行わせるように構成される、請求項4に記載の装置。
【請求項7】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項1乃至6のいずれか一項に記載の装置。
【請求項8】
前記仮想化コントローラはQEMUである、
請求項3に記載の装置。
【請求項9】
前記タスクキューはVRINGテーブル又はVirtqueueの少なくとも1つを含む、請求項5に記載の装置。
【請求項10】
コンピュータデバイスにより実行される、仮想マシンの入出力(I/O)インターフェースを操作する方法であって、
一組のホスト空間仮想アドレスを
メモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得することと;
前記メモリデバイスの第2の部分に関連する
第2の組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、前記メモリデバイスの前記第2の部分は仮想マシンによりアクセス可能である、取得することと;
前記第2の組の物理アドレスを前記第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成することと;
前記仮想マシンで動作するデバイスドライバが前記第3のマッピングテーブルを用いて前記第1の組の物理アドレスへアクセスできるように、前記第3のマッピングテーブルを
前記デバイスドライバへ提供することと、を含む方法。
【請求項11】
メモリデバイスの前記第1の部分をI/Oインターフェースの配置空間へマッピングすることをさらに含み、
前記第3のマッピングテーブルは前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項10に記載の方法。
【請求項12】
前記コンピュータデバイスは、仮想化コントローラ及びホストドライバを提供するように構成され;
前記一組のホスト空間仮想アドレスの前記第1の組の物理アドレスへの前記マッピングは
前記仮想化コントローラにより行われ;
前記I/Oインターフェースの前記配置空間への前記メモリデバイスの前記第1の部分の前記マッピングは前記仮想化コントローラからインディケーションを受信した後に
前記ホストドライバにより行われる、請求項11に記載の方法。
【請求項13】
一組のゲスト空間仮想アドレスを前記第2の組の物理アドレスへマッピングすることと;
前記一組のゲスト空間仮想アドレスを前記第1の組の物理アドレスへさらにマッピングするために前記第3のマッピングテーブルを更新することと;
前記更新された第3のマッピングテーブルを前記デバイスドライバへ提供することとをさらに含み、
前記更新された第3のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して1つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項11又は12に記載の方法。
【請求項14】
前記配置空間はタスクキューを格納し、前記方法はさらに、
前記一組のゲスト空間仮想アドレスの第1のゲスト空間仮想アドレスにおける第2のハードウェアインターフェースへ送信されるべき第1のデータを前記デバイスドライバにより格納することと;
前記タスクキューにおける前記第1のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと;
前記第1のゲスト空間仮想アドレス及び前記更新された第3のマッピングテーブルを使用して第1のハードウェアインターフェースに前記第1のデータを取り出させるために、前記デバイスドライバにより、前記更新された第3のマッピングテーブルに基づき、通知を前記第1のハードウェアインターフェースの前記配置空間内に格納することとを含む、請求項13に記載の方法。
【請求項15】
前記配置空間はタスクキューを格納し、前記方法はさらに、
第2のデータが第2のハードウェアインターフェースから受信されるという通知を第1のハードウェアインターフェースから前記デバイスドライバにより受信することと;
前記通知の受信に応答して、前記タスクキューから前記第2のデータに関連する第2のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと;
前記第2のゲスト空間仮想アドレス及び前記第3のマッピングテーブルを使用して前記第2のデータを前記デバイスドライバにより取り出すこととを含む、請求項13に記載の方法。
【請求項16】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項10乃至15のいずれか一項に記載の方法。
【請求項17】
命令を格納する非一時的コンピュータ可読媒体であって、前記命令は、仮想マシンの入出力(I/O)インターフェースを操作する方法を行うために、装置の1つ又は複数のプロセッサにより実行可能であり、前記方法は、
一組のホスト空間仮想アドレスを
メモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得することと;
前記メモリデバイスの第2の部分に関連する第2の組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、前記メモリデバイスの前記第2の部分は仮想マシンによりアクセス可能である、取得することと;
前記第2の組の物理アドレスを前記第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成することと;
前記仮想マシンで動作するデバイスドライバが前記第3のマッピングテーブルを用いて前記第1の組の物理アドレスへアクセスできるように、前記第3のマッピングテーブルを
前記デバイスドライバへ提供することと、を含む、非一時的コンピュータ可読媒体。
【請求項18】
前記方法はさらに、メモリデバイスの前記第1の部分をI/Oインターフェースの配置空間へマッピングすることを含み、
前記第3のマッピングテーブルは、前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項17に記載の非一時的コンピュータ可読媒体。
【請求項19】
前記一組のホスト空間仮想アドレスの前記第1の組の物理アドレスへの前記マッピングは仮想化コントローラにより行われ;
前記I/Oインターフェースの前記配置空間への前記メモリデバイスの前記第1の部分の前記マッピングは、前記仮想化コントローラからインディケーションを受信した後にホストドライバにより行われる、請求項18に記載の非一時的コンピュータ可読媒体。
【請求項20】
一組の命令をさらに含み、前記一組の命令は、前記装置の前記1つ又は複数のプロセッサにより、前記装置にさらに:
一組のゲスト空間仮想アドレスを前記第2の組の物理アドレスへマッピングすることと;
前記一組のゲスト空間仮想アドレスを前記第1の組の物理アドレスへさらにマッピングするために前記第3のマッピングテーブルを更新することと;
前記更新された第3のマッピングテーブルを前記デバイスドライバへ提供することと
を行わせるように、実行可能であり、
前記更新された第3のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して1つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記I/Oインターフェースの前記配置空間へアクセスできるようにする、請求項18又は19に記載の非一時的コンピュータ可読媒体。
【請求項21】
前記配置空間はタスクキューを格納し、前記方法はさらに、
前記一組のゲスト空間仮想アドレスの第1のゲスト空間仮想アドレスにおける第2のハードウェアインターフェースへ送信されるべき第1のデータを前記デバイスドライバにより格納することと;
前記タスクキューにおける前記第1のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと;
前記第1のゲスト空間仮想アドレス及び前記更新された第3のマッピングテーブルを使用して第1のハードウェアインターフェースに前記第1のデータを取り出させるために、前記デバイスドライバにより、前記更新された第3のマッピングテーブルに基づき、通知を前記第1のハードウェアインターフェースの前記配置空間内に格納することとを含む、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項22】
前記配置空間はタスクキューを格納し、前記方法はさらに、
第2のデータが第2のハードウェアインターフェースから受信されるという通知を第1のハードウェアインターフェースから前記デバイスドライバにより受信することと;
前記通知の受信に応答して、前記タスクキューから前記第2のデータに関連する第2のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと;
前記第2のゲスト空間仮想アドレス及び前記第3のマッピングテーブルを使用して前記第2のデータを前記デバイスドライバにより取り出すこととを含む、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項23】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項17乃至22のいずれか一項に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
[001] 本開示は、一般的にはコンピュータアーキテクチャの分野に関し、より具体的には仮想化のための方法及び装置に関する。
【背景技術】
【0002】
背景
[002] 仮想化は、複数のソフトウェアアプリケーション間でシステム資源を論理的に分割する方法を一般的には指す。仮想環境では、1つ又は複数の仮想マシンが生成される。仮想マシンは、コンピュータシステムエミュレータのように動作し得、一組のソフトウェア命令を実行し得る。通常、仮想マシンは、ゲストオペレーティングシステムを含むソフトウェアスタックと、オペレーティングシステムの上で走る1つ又は複数のゲストソフトウェアアプリケーションとを操作する。ゲストオペレーティングシステムは、一組の物理資源へアクセスするために、ハイパーバイザにおいてホストされるバックエンドドライバと通信し得るソフトウェアフロントエンドドライバを提供する。ハイパーバイザはまた、例えばシステム資源へのアクセス権を管理することにより物理資源のアクセスを規制し得、アクセス要求及び要求資源などを、仮想マシンと、要求資源などを提供するシステムとの間で伝達する。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
[003] 本開示の実施形態は、仮想マシンの入出力(I/O)インターフェースを操作する装置を提供する、本装置は、一組の命令を格納する1つ又は複数のメモリデバイスと、1つ又は複数のハードウェアプロセッサとを含む。1つ又は複数のハードウェアプロセッサは、一組の命令を実行して、1つ又は複数のメモリデバイスの第1の部分をI/Oインターフェースの配置空間へマッピングすることと;一組のホスト空間仮想アドレスを1つ又は複数のメモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得することと;1つ又は複数のメモリデバイスの第2の部分に関連する第2の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、1つ又は複数のメモリデバイスの第2の部分は仮想マシンによりアクセス可能である、ことと;第2の組の物理アドレスを第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成することと;第3のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することと、を行うように構成され、第3のマッピングテーブルはデバイスドライバがI/Oインターフェースの配置空間へアクセスできるようにする。
【0004】
[004] 本開示の実施形態はまた、仮想マシンの入出力(I/O)インターフェースを操作する方法を提供する。本方法は、メモリデバイスの第1の部分をI/Oインターフェースの配置空間へマッピングすること;一組のホスト空間仮想アドレスをメモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得すること;メモリデバイスの第2の部分に関連する第2の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、メモリデバイスの第2の部分は仮想マシンによりアクセス可能である、取得すること;第2の組の物理アドレスを第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成すること;及び第3のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することであって、第3のマッピングテーブルはデバイスドライバがI/Oインターフェースの配置空間へアクセスできるようにする、提供することを含む。
【0005】
[005] 本開示の実施形態はまた、命令を格納する非一時的コンピュータ可読媒体を提供する。当該命令は、仮想マシンの入出力(I/O)インターフェースを操作する方法を行うために装置の1つ又は複数のプロセッサにより実行可能であり、当該方法は、メモリデバイスの第1の部分をI/Oインターフェースの配置空間へマッピングすること;一組のホスト空間仮想アドレスをメモリデバイスの第1の部分に関連する第1の組の物理アドレスへマッピングする第1のマッピングテーブルを取得すること;メモリデバイスの第2の部分に関連する第2の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第2のマッピングテーブルを取得することであって、メモリデバイスの第2の部分は仮想マシンによりアクセス可能である、取得すること;第2の組の物理アドレスを第1の組の物理アドレスへマッピングする第3のマッピングテーブルを生成すること;及び第3のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することであって、第3のマッピングテーブルはデバイスドライバがI/Oインターフェースの配置空間へアクセスできるようにする、提供することを含む。
【0006】
[006] 開示された実施形態の追加の目的及び利点は、以下の明細書に部分的に記載され、この明細書から部分的に明らかになる、又は実施形態の実行により学習され得る。開示実施形態の目的と利点は添付の特許請求の範囲に記載される要素及びその組み合わせにより実現され達成され得る。
【0007】
[007] これまで述べた概要と以下の詳細説明との両方は、請求されるように、例示的且つ説明目的のためだけものであるということと、開示実施形態に限定されるものではないということとを理解すべきである。
【図面の簡単な説明】
【0008】
図面の簡単な説明
【
図1A】[008]本開示の実施形態が使用され得る例示的仮想環境を示す線図である。
【
図1B】[008]本開示の実施形態が使用され得る例示的仮想環境を示す線図である。
【
図2A】[009]本開示の実施形態と整合するハイパーバイザ及びI/Oインターフェースの例示的部品の例示的部品を示す線図である。
【
図2B】[009]本開示の実施形態と整合するハイパーバイザ及びI/Oインターフェースの例示的部品の例示的部品を示す線図である。
【
図2C】[009]本開示の実施形態と整合するハイパーバイザ及びI/Oインターフェースの例示的部品の例示的部品を示す線図である。
【
図3】[010]本開示の実施形態と整合する仮想マシンにハードウェアデバイスへのアクセスを提供する例示的方法を示すフロー図である。
【
図4】[011]本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する例示的方法を示すフロー図である。
【
図5】[012]本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する別の例示的方法を示すフロー図である。
【
図6】[013]本明細書で説明される実施形態がその上で実施され得る例示的コンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0009】
発明の詳細な説明
[014] 添付図面に示される例示的実施形態を次に詳細に参照する。以下の説明は、特記しない限り、様々な図面内の同じ参照符号が同じ又は同様な要素を表す添付図面を参照する。例示的実施形態の以下の説明において記載される実施形態は本発明によるすべての実施形態を表すとは限らない。その代りに、これらは、添付の特許請求の範囲に記載される本発明に関係する態様に整合する装置及び方法の一例に過ぎない。
【0010】
[015] 本開示の実施形態は、1つ又は複数の仮想コンピュータ環境を提供する装置を提供する。本装置は、一組の機能を行うことができるハードウェアシステムと通信可能に結合される。ハードウェアシステムは、一組のハードウェアレジスタとメモリデバイスとを含む配置空間(configuration space)であって、一組の機能の性能を構成するための一組の構成データを格納する配置空間を含む。本装置は、メモリデバイスのホスト空間に関連付けられ、仮想マシンへアクセス可能な一組の仮想記憶アドレスを、ホスト空間を介し配置空間へマッピングする、マッピングテーブルを格納する。マッピングテーブルは、1つ又は複数のメモリ読み取り/書き込み操作を一組の仮想記憶アドレスに対し行うことにより、仮想マシン上で動作するソフトウェアアプリケーションがハードウェアシステムへ直接アクセスできるようにする。
【0011】
[016] ハードウェアシステムへの直接アクセスを提供することにより、本開示の実施形態は、仮想マシン上で動作するソフトウェアアプリケーションがハードウェアシステムにより提供される資源へより効率的にアクセスできるようにする。この結果、ソフトウェアアプリケーションが動作する仮想環境の性能だけでなく、ソフトウェアアプリケーションの性能も改善し得る。さらに、仮想マシンは、ハードウェアシステムへアクセスすることができる汎用及び標準デバイスドライバを操作し得る。この結果、仮想環境の配備及び維持もまたより効率的に行われ得る。
【0012】
[017] 本開示の実施形態が使用され得る仮想環境100を示す
図1Aを次に参照する。
図1Aに示すように、仮想環境100はホストマシン102及びホストマシン104を含む。ホストマシン102はネットワーク103を介しユーザデバイス106a及びユーザデバイス106bと通信可能に結合され得、一方、ホストマシン104もまたネットワーク103を介しユーザデバイス108a、108bと通信可能に結合され得る。ホストマシン102、104のそれぞれは、サーバであり得、仮想コンピュータ資源及びネットワーク資源をユーザデバイス106a、106b、108a、108bへ提供し得る。例えば、ホストマシン102、104は、ユーザデバイス106a、108a間のチャットメッセージングセッションを提供するチャットメッセージングソフトウェアアプリケーションを操作する。ホストマシン102、104はまた、ユーザデバイス106b、108b間のボイスオーバーIP(VoIP:Voice-over-IP)セッションを提供するVoIPソフトウェアアプリケーションを操作する。ユーザは、ユーザデバイスを介しチャットメッセージングソフトウェアアプリケーション及びVoIPソフトウェアアプリケーションへアクセスするためにホストマシン102、104にログインし得る。ホストマシン102、104は、例えばユーザデバイス106a、108aがVoIPソフトウェアアプリケーションではなくチャットメッセージングソフトウェアアプリケーションへアクセスすることを許容することにより仮想環境を提供し得る。さらに、ホストマシン102、104はまた、ユーザデバイス106b、108bがチャットメッセージングソフトウェアアプリケーションではなくVoIPソフトウェアアプリケーションへアクセスすることを許可する。
【0013】
[018]
図1Aに示すように、ホストマシン102、104はそれぞれさらに、ネットワークインターフェース110、ネットワークインターフェース112を含む。ネットワークインターフェース110、112は、伝送コントロールプロトコル/インターネットプロトコル(TCP/IP:Transmission Control Protocol/Internet Protocol)、リアルタイムトランスポートプロトコル(RTP:Real-Time Transport Protocol)、RTPコントロールプロトコル(RTCP:RTP Control Protocol)などの所定ネットワークプロトコルに従ってチャットメッセージングセッション及びVoIPセッションを支援するために、パケット化されたデータ送信をネットワーク114上で提供するように構成され得る。ネットワークインターフェース110、112の両方はそれぞれI/O(入出力)インターフェース110a、I/Oインターフェース112aを含む。ネットワークインターフェース110、112はI/Oインターフェースを介しホストマシン102、104それぞれの他のコンポーネントとインターフェースし得る。I/Oインターフェースはパラレルインターフェース(例えばペリフェラルコンポーネントインターコネクト(PCI:Peripheral Component Interconnect))、シリアルインターフェース(例えばペリフェラルコンポーネントインターコネクトエクスプレス(PCIe:Peripheral Component Interconnect Express))などに基づき得る。例示的例として、ネットワークインターフェース110、112は、PCIeインターフェースを介しホストマシン102、104へ接続されるPCIeネットワークインターフェースカード(NIC:network interface card)であり得る。
【0014】
[019] I/Oインターフェース110a(及びネットワークインターフェース110により提供されるネットワーク資源)へアクセスするための仮想環境をユーザデバイス106a、106bへ提供するために、ホストマシン102は、仮想マシン120、仮想マシン122、及び仮想マシン120、122によるI/Oインターフェース110aのアクセスを規制するハイパーバイザ124をホストする。同様に、I/Oインターフェース112a(及びネットワークインターフェース112により提供される物理資源)へアクセスするための仮想環境をユーザデバイス108a、108bへ提供するために、ホストマシン104もまた、仮想マシン140、仮想マシン142、及び仮想マシン140、142によるI/Oインターフェース112aへのアクセスを規制するハイパーバイザ144をホストする。
【0015】
[020] 仮想マシンのそれぞれは、ユーザデバイスにI/Oインターフェースへのアクセスを提供するようにゲストソフトウェアスタックを操作する。例えば、仮想マシン120はゲストソフトウェアスタック126を操作し得、仮想マシン122はゲストソフトウェアスタック128を操作し得、仮想マシン140はゲストソフトウェアスタック146を操作し得、一方、仮想マシン142はゲストソフトウェアスタック148を操作し得る。ゲストソフトウェアスタックのそれぞれは、I/Oインターフェース及びネットワークインターフェースへアクセスするためにゲストオペレーティングシステムの上で動作する1つ又は複数のソフトウェアアプリケーションだけでなくゲストオペレーティングシステムも含み得る。例えば、前述のチャットメッセージングソフトウェアアプリケーションはゲストソフトウェアスタック126、146に含まれ得、一方、前述のVoIPソフトウェアアプリケーションはゲストソフトウェアスタック128、148に含まれ得る。
【0016】
[021] ゲストソフトウェアスタック126、128、146、148のそれぞれもまた、I/Oインターフェース110a又は112aへアクセスすることができるデバイスドライバを含む。デバイスドライバは、ゲストオペレーティングシステムの標準ビルドの一部である汎用ドライバであり得る。デバイスドライバは例えばVirtI/Oフロントエンドドライバであり得る。ゲストソフトウェアスタックに含まれるゲストオペレーティングシステムは例えばMicrosoft(登録商標) Windows(登録商標)、Ubuntu(登録商標)、Red Hat(登録商標) Enterprise Linux(登録商標)(RHEL)などであり得る。以下に論述されるように、ハイパーバイザ(例えばハイパーバイザ124、ハイパーバイザ144など)は、タイプ1又はタイプ2ハイパーバイザであり得、デバイスドライバによるI/Oインターフェースのアクセスを規制し得、ひいてはデバイスドライバを含むゲストソフトウェアスタックによるI/Oインターフェースのアクセスを規制し得る。例えば、ハイパーバイザ124は、チャットメッセージングアプリケーション(仮想マシン120で動作する)とVoIPアプリケーション(仮想マシン122で動作する)のどちらがネットワーク114上でデータを送信するためにI/Oインターフェース110a(及びネットワークインターフェース110)を使用し得るかを制御し得る。同様に、ハイパーバイザ144もまたネットワーク114上でデータを送信するためにチャットメッセージングアプリケーション(仮想マシン140で動作する)とVoIPアプリケーション(仮想マシン142で動作する)のどちらがI/Oインターフェース112a(及びネットワークインターフェース112)を使用し得るかを制御し得る。
【0017】
[022] ホストマシン102、104のそれぞれはメモリデバイス150、メモリデバイス160をそれぞれ含む。前述の仮想マシン、ゲストソフトウェアスタック及びハイパーバイザは、ユーザデバイスのチャットメッセージングセッション及びVoIPセッションだけでなく前述の仮想環境も提供するためにメモリデバイス150、160に格納され1つ又は複数のハードウェアプロセッサ(
図1Aに図示せず)により実行されるソフトウェアコードであり得る。メモリデバイス150、160のそれぞれはまた、ホストマシン102、104上で動作する際に仮想マシン、ゲストソフトウェアスタック、及びハイパーバイザにより並びにI/Oインターフェースにより使用されるメモリ空間を提供する。
【0018】
[023] いくつかの実施形態では、メモリデバイス150、160のそれぞれは、ホスト空間として表される領域と、ゲスト空間として表される1つ又は複数の領域とを含み得る。ホスト空間は、ハイパーバイザ及びI/Oインターフェースによりアクセス可能であり、一方、ゲスト空間は、仮想マシン及びゲストソフトウェアスタックによりアクセス可能である。各仮想マシンにはゲスト空間が割り当てられ得、様々な仮想マシン上で走るソフトウェアアプリケーション同士は互いに絶縁される。例えば、
図1Bを参照すると、メモリデバイス150はゲスト空間152a、ゲスト空間152b及びホスト空間154を含み得る。ゲスト空間152aは仮想マシン120(及びゲストソフトウェアスタック126)へ割り当てられ得、ゲスト空間152bは仮想マシン122(及びゲストソフトウェアスタック128)へ割り当てられ得、一方、ホスト空間154はハイパーバイザ124及びI/Oインターフェース110aへ割り当てられ得る。
図1Bに示されないが、メモリデバイス160もまた、仮想マシン140、148へ割り当てられる一組のゲスト空間並びにハイパーバイザ144及びI/Oインターフェース112aへ割り当てられるホスト空間を含み得るということが理解される。
【0019】
[024] ホスト空間154はさらにI/O空間154bを含む。I/O空間154bはメモリマップI/O方式の一部としてI/Oインターフェース110aの一組のハードウェアレジスタと結合され得る。メモリマップI/O方式により、I/Oインターフェース(例えばI/Oインターフェース110a)の一組のハードウェアレジスタ及びメモリデバイスへ物理的に接続されるデータバスもまたホストマシンのメモリデバイス(例えばホストマシン102のメモリデバイス150)へ物理的に接続され得る。このような配置により、I/Oインターフェース110aのハードウェアレジスタ及びメモリデバイスは、I/O空間154bに対するメモリ書き込み/読み取り動作によりアクセスされ得る。I/Oインターフェース110aのハードウェアレジスタは、例えばI/Oインターフェースの識別子、アクセス制御情報、I/Oインターフェースへアクセスするための一組のメモリアドレスなどを含む構成情報を格納し得る。
【0020】
[025] I/Oインターフェース110aがPCIeインターフェースである場合、構成レジスタは例えばデバイス識別レジスタ(DIR:Device Identification Register)、ベースアドレスレジスタ(BAR:Base Address Register)、通知レジスタなどを含み得る。BARレジスタは、例えばI/O空間154bを介しアクセス可能なI/Oインターフェース110aのメモリデバイスに関連する一組の物理アドレスを格納し得る。通知レジスタは、I/Oインターフェース110aにおいて操作を開始するために例えばデバイスドライバにより提供される通知を格納し得る。以下に詳細に論述されるように、デバイスドライバは、構成情報をハードウェアレジスタへ格納し、他の操作情報をI/Oインターフェース110aのメモリデバイスへ格納し、及びI/Oインターフェース110aを制御して1つ又は複数の操作を行うために、メモリ書き込み/読み出し操作をI/O空間154bに対し行い得る。
【0021】
[026] いくつかの実施形態では、ハイパーバイザは、ゲスト空間内で動作するデバイスドライバが、I/Oインターフェースへ割り当てられた配置空間へ直接アクセスすることと、I/Oインターフェースを構成して操作を行うこととを許容し得る。ハイパーバイザは、デバイスドライバによりアクセス可能であるゲスト空間内の一組の仮想アドレスを配置空間内の一組の物理アドレスへマッピングするメモリマッピングテーブルを生成し格納し得る。このマッピングに基づき、デバイスドライバは、I/Oインターフェースを制御及び/又は構成して操作を行うために、メモリ読み取り/書き込み操作をゲスト空間仮想アドレスに対して行うことによりデータを配置空間に格納し得る。
【0022】
[027] 例示として、仮想マシン120内で動作するデバイスドライバは、ゲストソフトウェアスタック126のチャットメッセージングアプリケーションからパケット送信要求を受信し得る。デバイスドライバは、配置空間内の位置をメモリマッピングテーブルに基づき識別し、パケット送信要求に関係するデータを配置空間内に書き込み得る。データは、例えばパケット送信の準備をするためのI/Oインターフェース110aへの通知とパケット送信に関係する情報(例えば、データが送信のためのものかネットワークから受信されたかに関わらず、実際のペイロードデータ、又はペイロードデータが格納される一組のメモリアドレス)とを含み得る。I/Oインターフェース110aは、配置空間を監視し得、通知を検知すると、ペイロードデータを取得し、次にネットワーク114上でパケット送信を行うためにペイロードデータをネットワークインターフェース110へ提供し得る。ネットワークインターフェース110がパケット送信を完了した後、I/Oインターフェース110aはまた、パケット送信の完了に関してハイパーバイザ124に(例えば割り込みをかけることにより)通知し得る。ハイパーバイザ124は、デバイスドライバが次のパケット送信に対処し得るように、割り込みを仮想マシン120のデバイスドライバへルーティングし得る。
【0023】
[028] 次に、本開示の実施形態と整合する
図1Aのハイパーバイザ124及びI/Oインターフェース110aの例示的コンポーネントを示す
図2Aを参照する。
図2Aに示すように、ハイパーバイザ124は、ホストドライバ202、仮想マシン生成モジュール204、仮想化コントローラ206及びメモリ翻訳モジュール208を含む。さらに、I/Oインターフェース110aは、ゲストソフトウェアスタック126内で動作するデバイスドライバ126a(例えばVirtI/Oフロントエンドドライバ)とインターフェースする仮想化モジュール210を含む。
図2Aには示さないが、
図1Aのハイパーバイザ124は、ハイパーバイザ124と同様なコンポーネントを含み得、I/Oインターフェース112aは、I/Oインターフェース110aと同様なコンポーネントを含み得るということが理解される。
【0024】
[029] ホストドライバ202は、例えばホスト空間154の一部分をI/O空間154bに割り振ることにより資源割り振りに対処する。ホストドライバ202は、I/Oインターフェース112aのハードウェアレジスタ及びメモリデバイスへマッピングされるメモリデバイス150内の一組の物理アドレスを取得するために、ソフトウェアルーチン(例えばmmap)を実行又は取り込み、メモリマップI/O操作を行い得る。次に、ホストドライバ202は、I/O空間154bをホスト空間154内に生成し、一組のI/O空間物理アドレスを生成し得る。
【0025】
[030] 仮想マシン生成モジュール204は、例えばメモリデバイス150の一部分をゲスト空間(例えばゲスト空間152a)へ割り振ることと、割り振られた部分を、生成された仮想マシン(例えば仮想マシン120)へ提供することとを含み得る、仮想マシン生成に対処し、次に、仮想マシンは、割り振られたメモリ空間を使用して関連ゲストソフトウェアスタックを格納及び実行し得る。仮想マシン生成モジュール204はまた、ゲスト空間物理アドレスへマッピングされる一組の仮想アドレスを生成し、仮想マシンから要求が受信されると、ゲスト空間仮想アドレスを仮想マシンへ提供する。仮想マシン生成モジュール204はまた、仮想化コントローラ206から受信される別の一組の仮想記憶アドレスと仮想マシン120へアクセス可能な一組のゲスト空間物理アドレスとの間のマッピングを生成する。マッピングは、仮想化コントローラ206が読み取り/書き込みメモリ操作をゲスト空間に対し行うことを可能にし、したがって、仮想化コントローラ206は、ゲスト空間内のゲストソフトウェアスタック126により行われるメモリ操作を制御及び/又は監視し得る。
【0026】
[031] 仮想化コントローラ206は、仮想マシンのデバイスドライバがI/Oインターフェースへ直接アクセスすることを許容すべく、一組のゲスト空間物理アドレスと一組のI/O空間物理アドレスとの間のマッピングを生成するために、ホストドライバ202の操作と仮想マシン生成モジュール204の操作とを連携させ得る。例示として、
図2Aに示すように、仮想化コントローラ206は、通信220を介し、ホスト空間154の一部分をI/O空間154bに割り振るために、ホストドライバ202を呼び出し得る。次に、ホストドライバ202は、通信222を介しデータをI/Oインターフェース110aと交換し、I/O空間154bをI/Oインターフェース110aの配置空間へマッピングし得る。例えば、ホストドライバ202は、通信222の一部として、I/Oインターフェース110aの構成レジスタのアドレス指定に関する情報と、I/Oインターフェース110aのメモリデバイスの物理アドレスとを受信し得る。I/O空間154bの物理アドレスとI/Oインターフェース110aの物理メモリアドレス及び構成レジスタとの間のマッピングを生成した後、ホストドライバ202はまた、I/Oインターフェース110aもまたI/O空間154bへアクセスし得るように、マッピング情報を、通信222を介しI/Oインターフェース110aへ送信し得る。次に、ホストドライバ202は、I/Oインターフェース110aへアクセスするために使用され得る一組のI/O空間物理アドレスを、通信224を介し仮想化コントローラ206へ戻し得る。次に、仮想化コントローラ206は、ホストドライバ202から受信される一組のI/O空間物理アドレスへマッピングされる(仮想化コントローラ206によりアクセス可能な)一組の仮想アドレスを生成する。次に、仮想化コントローラ206は、仮想マシン(例えば仮想マシン120)を生成するために、通信226を介し仮想マシン生成モジュール204を呼び出す。次に、仮想マシン生成モジュール204は、ゲスト空間152aを割り振り、(ゲスト空間152aに関連する)一組のゲスト空間物理アドレスと、仮想化コントローラ206によりアクセス可能な一組の仮想アドレスとの間の別のマッピングを生成する。
【0027】
[032] ホストドライバ202、仮想マシン生成モジュール204、及び仮想化コントローラ206間の操作に基づき、マッピングが、一組のゲスト空間仮想アドレスと一組のI/O空間物理アドレスとの間で生成され得る。マッピングは、仮想マシン(及びその中で動作するデバイスドライバ)がI/Oインターフェースの構成レジスタへ直接アクセスすることを可能にする。マッピングの例が
図2Bに示される。
図2Bに示すように、ゲスト空間仮想アドレス232は、仮想マシン生成モジュール204が仮想マシン120を生成した後に、ゲスト空間物理メモリアドレス234(ゲスト空間152a内の)へマッピングされる。ゲスト空間物理メモリアドレス234もまた、仮想化コントローラ206によりアクセス可能なホスト空間仮想アドレス236へマッピングされる。ホスト空間仮想アドレス236もまた、ホストドライバ202により提供されるI/O空間物理アドレス238へマッピングされる。これらのマッピング(マッピングテーブルの形式のものであり得る)に基づき、ゲスト空間仮想アドレス232とI/O空間物理アドレス238との間の直接マッピング240が形成され得る。メモリ翻訳モジュール208は、例えばゲスト空間仮想アドレス232をI/O空間物理アドレス238へマッピングするマッピングテーブルを格納することにより、直接マッピング240を格納し得る。
【0028】
[033] いくつかの実施形態では、マッピングテーブルは、例えば拡張ページテーブル(EPT:Extended Page Table)の形式のものであり得る。仮想化コントローラ206は、クイックエミュレータ(QEMU:Quick Emulator)のコンポーネントを含み得、一方、仮想マシン生成モジュール204もまた、カーネルベース仮想マシン(KVM:kernel-based virtual machine)のコンポーネントを含み得、EPTへのアクセスを与え得る。KVMにより、EPTはVM_Exit事象に基づき更新され得る。例えば、仮想マシン120が生成され、デバイスドライバ126aが、I/O空間物理アドレスへ未だ割り振られていない又は未だマッピングされていないかのいずれかのゲスト空間仮想記憶アドレスへアクセスしようとした後、EPT故障が生じ得る。EPT故障は、仮想マシン120のイグジット事象(例えばVM_exit事象)に繋がり得、イグジット事象はKVMに、ゲスト空間メモリ仮想アドレス(デバイスドライバによりアクセスされている)とI/O物理的空間アドレスへマッピングされたゲスト空間物理アドレスとの間のマッピングを生成させ得る。マッピングの生成は、ゲスト空間仮想アドレスとI/O空間物理アドレスとの間の新しい直接マッピングを生じ得る。次に、KVMは、新しい直接マッピングを含むようにEPTを更新し得る。仮想マシン120を再起動した後、デバイスドライバ126aは、直接マッピングを取得するためにEPTへアクセスし、I/O空間へマッピングされるゲスト空間仮想アドレスに対しメモリ読み取り/書き込み動作を行うことにより、I/O空間へアクセスし得る。
【0029】
[034]
図2Aはメモリ翻訳モジュール208をハイパーバイザ124の一部として描いているが、メモリ翻訳モジュール208がハイパーバイザ124とは別のコンポーネントであり得るということが理解される。さらに、メモリ翻訳モジュール208はまた、入出力メモリ管理ユニット(IOMMU:input-output memory management unit)によりアクセスされ得る。
【0030】
[035]
図2Aに戻って参照すると、デバイスドライバ126aは、通信242を介しメモリ翻訳モジュール208から直接マッピングを取得し得る。直接マッピングに基づき、デバイスドライバ126aは、一組のI/O空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを取得し得る。デバイスドライバ126aは、I/O空間154bにおいて一組の構成データ244を格納するために、メモリ書き込み操作を一組のゲスト空間仮想アドレスに対し行い得る。構成データ244もまた仮想化モジュール210により受信されることになる。構成データに基づき、仮想化モジュール210は、1つ又は複数の操作(例えばデータをネットワーク114へ送信するようにネットワークインターフェース110を制御する操作、ネットワーク114から受信されるデータを提供するようにネットワークインターフェース110を制御する操作など)を行うようにネットワークインターフェース110を制御し得る。
【0031】
[036] 上に説明したようなI/Oインターフェース110aを含むネットワークインターフェース110の例示的コンポーネントを示す
図2Cを次に参照する。
図2Cに示すように、I/Oインターフェース110aは、ハードウェアレジスタ250、メモリデバイス260、及びバックエンドモジュール270を含む仮想化モジュール210を含む。メモリデバイス260はさらにタスクキュー280を格納する。I/Oインターフェース110aはさらに、バックエンドモジュール270とインターフェースするI/Oインターフェースコア論理290を含む。バックエンドモジュール270はまた、ネットワークインターフェースコア論理295とインターフェースする。I/Oインターフェース110aのこれらのコンポーネントは、他のコンポーネント(例えば集積回路の一部分)と共に使用するように設計されたパッケージ化機能ハードウェアユニット又は関連機能のうちの特定機能を行うプログラム(コンピュータ可読媒体上に格納される)の一部であり得る。これらのコンポーネントは、ゲート及びフリップフロップなどの接続論理ユニットで構成され得る、及び/又はプログラマブルゲートアレイ又はプロセッサなどのプログラム可能ユニットで構成され得る。
【0032】
[037] ハードウェアレジスタ250は、例えばI/Oインターフェース110aの動作を構成するための一組の構成レジスタを含み得る。I/Oインターフェース110aがPCIeインターフェースである場合、構成レジスタは、例えばデバイス識別レジスタ(DIR:Device Identification Register)、ベースアドレスレジスタ(BAR:Base Address Register)、通知レジスタなどを含み得る。タスクキュー280は、I/Oインターフェース110a(及びネットワークインターフェース110)により行われる一組のタスクに関係する情報を格納し得る。格納される情報は、例えば操作のタイプ(例えば、ネットワーク114へのデータパケットの送信のためのもの又はネットワーク114からのデータパケットの受信のためのものなど)、データを格納する(データがネットワーク114へ送信される場合)又はデータを取り出す(データがネットワーク114から受信される場合)ための一組のゲスト空間仮想アドレス、及び操作に関連する仮想マシン識別子を含み得る。いくつかの実施形態では、タスクキュー280はVirtqueue、VRINGテーブルなどとして構成され得る。
【0033】
[038] 上に論述したように、ハードウェアレジスタ250とタスクキュー280との両方は、I/O空間154bを介し仮想マシン(例えばデバイスドライバ126a)で動作するデバイスドライバによりマッピングされ、アクセス可能であり得る。デバイスドライバは、タスクキュー280が格納されるメモリデバイス260の位置へマッピングされる一組のホスト空間物理アドレスを取得するために、BARレジスタへマッピングされるI/O空間154bの一部分へアクセスすることにより、BARレジスタからメモリマッピング情報を取得し得る。次に、デバイスドライバは、ホスト空間物理アドレスを一組のゲスト空間仮想アドレスへ翻訳する要求をメモリ翻訳モジュール208へ提出し、次に、メモリ読み出し操作を一組のゲスト空間仮想アドレスに対し行うことにより、タスクキュー280へアクセスし得る。デバイスドライバはまた、ハードウェアレジスタ250へアクセスすべく一組のゲスト空間仮想記憶アドレスを取得するために、メモリ翻訳要求をメモリ翻訳モジュール208へ提出し得る。
【0034】
[039] バックエンドモジュール270は、前述のデータパケット送信又は受信タスクに対処するために、ハードウェアレジスタ250、タスクキュー280、I/Oインターフェースコア論理290、及びネットワークインターフェースコア論理295とインターフェースし得る。データパケット送信タスクを進めるために、デバイスドライバは、新しいデータパケット送信タスクをタスクキューに挿入することにより、タスクキュー280を更新し得る。タスクはまた、送信されるデータが格納される一組のゲスト空間仮想アドレスに関連付けられる。上に論述したように、ゲスト空間仮想アドレスは、I/O空間154bへマッピングされ得、仮想マシン120で動作するデバイスドライバは、I/O空間154bへマッピングされるゲスト空間仮想アドレスを使用してメモリ書き込み操作を行うことにより、データをI/O空間154b内に直接格納し得る。データをI/O空間154b内に格納した後、デバイスドライバはまた、データパケット送信タスクについてバックエンドモジュールに通知するために、ハードウェアレジスタ250(I/O空間154bを介し)へアクセスし、通知レジスタに書き込み得る。
【0035】
[040] 通知レジスタにおける書き込み活動を検出した後、バックエンドモジュール270は、タスクキュー280から新しいデータパケット送信タスクを取り出し、このタスクに関連する一組のゲスト空間仮想アドレスを取得し得る。バックエンドモジュール270は、ゲスト空間仮想アドレスを例えば一組のI/O空間物理アドレス(例えばI/O空間154bの)へ翻訳する要求を、メモリ翻訳モジュール208(例えばIOMMUを介し)へ提出し得る。翻訳されたI/O空間物理アドレスに基づき、バックエンドモジュール270は、仮想マシン120から送信されるデータを取得するために、メモリ読み出し操作を行い得る。バックエンドモジュール270は、このデータを追加処理のために(例えば8b/10b符号化などを行うために)I/Oインターフェースコア論理290へ提供し、次に、処理されたデータをネットワークインターフェースコア論理295へ提供し得る。次に、ネットワークインターフェースコア論理295は、処理されたデータに基づきデータパケットを生成し、このデータパケットをネットワーク114へリリースし得る。データパケット送信が完了したという通知をネットワークインターフェースコア論理295から受信した後、バックエンドモジュール270は、仮想マシン120で動作するデバイスドライバに、この完了について(例えば割り込みをかけることにより)通知し得る。通知は、仮想マシン120へ(例えば、割り込みに関係するデータを、仮想マシンによりアクセス可能なゲストメモリ空間へ書き込むことにより)又は仮想化コントローラ206へ直接送信され得、次に、仮想マシン120又は仮想化コントローラ206は、完了についてデバイスドライバに通知するために、割り込みに関係するデータをゲストメモリ空間へ書き込む。
【0036】
[041] 他方で、データパケット受信に対処するために、バックエンドモジュール270は、ネットワークインターフェースコア論理295から受信されたデータパケットから抽出されるデータを受信し得る。バックエンドモジュール270は、タスクキュー280から、未決データパケット受信タスクがキューの最上部に存在するということと、受信されたデータパケットが当該未決データパケット受信タスクのためのものであるということとを判断し得る。バックエンドモジュール270はまた、タスクキュー280から未決データパケット受信タスクに関連する一組のゲスト空間仮想アドレスを取得し、次に、このゲスト空間仮想アドレスをI/O空間154bの一組のI/O空間物理アドレスへ翻訳する要求を、IOMMUへ提出し得る。バックエンドモジュール270はまた、追加処理のために(例えば8b/10b復号化などを行うために)、受信されたパケットデータをI/Oインターフェースコア論理290へ提供し、次に、処理されたデータをI/O空間154b内に格納するために、一組のI/O空間物理アドレスを使用してメモリ書き込み操作を行い得る。バックエンドモジュール270はまた、受信されたパケットデータについて、仮想マシン120で動作するデバイスドライバ(例えばデバイスドライバ126a)に(例えば割り込みをかけることにより)通知し得る。通知が受信されると、デバイスドライバは、キュー280の最上部における未決データパケット受信タスクからゲスト空間仮想アドレスを取得し得、受信されたパケットデータを取得するために、メモリ読み出し操作を行い得る。
【0037】
[042] 本開示の実施形態と整合するハードウェアデバイスへの仮想マシンアクセスを提供する例示的方法300を示す
図3が次に参照される。本方法は、例えば
図2Aのゲストソフトウェアスタック126及び仮想化モジュール210と併せてハイパーバイザ124により行われ得る。
【0038】
[043] 初期開始後、工程302において、仮想化コントローラ206は、ハイパーバイザ124によりアクセス可能なメモリデバイス150(例えばホスト空間154)の一部分を割り振り、このメモリデバイス150の割り振られた部分をI/Oインターフェース110aのハードウェアレジスタ及びメモリデバイスとへマッピングするように、ホストドライバ202に指示する。仮想化コントローラ206から指示を受信した後、工程304において、ホストドライバ202は、I/Oインターフェース110aへマッピングされるI/O空間(例えばI/O空間154b)を割り振り、一組のI/O空間物理アドレスを戻す。I/Oインターフェース110aのハードウェアレジスタ及びメモリデバイスへマッピングされる一組の物理アドレスを受信した後、工程306において、仮想化コントローラ206は、仮想化コントローラによりアクセス可能な一組の仮想アドレスを生成し、この一組の仮想アドレスを、ホストドライバ202から受信される一組の物理アドレスへマッピングする。次に、工程308において、仮想化コントローラ206は、一組のホスト空間仮想アドレスを仮想マシン生成モジュール204へ提供し、仮想マシンを生成するように仮想マシン生成モジュール204に指示する。
【0039】
[044] 工程310において、仮想マシン生成モジュール204は、メモリデバイス150からゲスト空間(例えばゲスト空間152a)を割り振り、一組のゲスト空間物理メモリアドレス(ゲスト空間152aに関連する)と一組のホスト空間仮想アドレス(仮想化コントローラ206から受信され、I/O空間154bへマッピングされる)との間のマッピングを生成する。工程312において、仮想化コントローラ206から受信される一組の仮想アドレスとI/O空間物理アドレスとの間のマッピングに基づき、仮想マシン生成モジュール204はまた、一組のゲスト空間物理メモリアドレスとI/O空間物理アドレスとの間のマッピングを生成する。工程314において、仮想マシン生成モジュール204は、I/O空間物理アドレスへ既にマッピングされた一組のゲスト空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを生成し、一組のゲスト空間仮想アドレスとI/O空間物理アドレスとの間の直接マッピングを含む拡張ページテーブル(EPT)を生成又は更新し得る。
【0040】
[045] ゲスト空間仮想アドレスの生成は、存在しない又はI/O空間へ未だマッピングされていないゲスト空間仮想アドレスへアクセスしようとする仮想マシンにより引き起こされる事象(例えばVM_exit)に起因し得る。EPTは例えばメモリ翻訳モジュール208内に格納され得る。EPTの直接マッピングに基づき、仮想マシンで動作するデバイスドライバは、I/Oインターフェースの操作を制御するために1つ又は複数のメモリ読み取り/書き込み操作を行うことにより、I/Oインターフェース110aのハードウェアレジスタ及びメモリデバイスへアクセスし得る。
【0041】
[046] 本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する例示的方法400を示す
図4を次に参照する。本方法は、例えば
図1Aの仮想マシン120で動作するデバイスドライバ126aとI/Oインターフェース110aとにより行われ得る。
【0042】
[047] 初期開始後、工程402において、デバイスドライバ(例えばデバイスドライバ126a)は、ゲストソフトウェアスタック126の一部であるソフトウェアアプリケーションからデータパケット送信要求を受信し得る。工程404において、デバイスドライバはEPTを調べ、I/O空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを取得する。工程406において、デバイスドライバは、送信対象データを格納するために、メモリ書き込み操作をゲスト空間仮想アドレスに対し行う。次に、工程408において、デバイスドライバは、新しいデータパケット送信タスクをタスクキュー280へ追加するために、メモリ書き込み操作を行う。メモリ書き込み操作は、例えば新しいデータ送信タスクと、送信対象データを格納する一組のゲスト空間仮想アドレスとを関連付けることを含む。工程410において、デバイスドライバはさらに、新しいデータパケット送信タスクについてインターフェースに通知するために、I/Oインターフェース110aの通知レジスタへ書き込む。デバイスドライバは、EPT内に格納されたゲスト空間仮想アドレスとI/O空間物理アドレスとの間の直接マッピングに基づき、タスクキュー280と通知レジスタ(ハードウェアレジスタ250の)とへアクセスする。
【0043】
[048] 通知レジスタへの書き込みを検出した後、工程412において、バックエンドモジュール270は、タスクキュー280から新しいデータパケット送信タスクを取り出し、このタスクに関連する一組のゲスト空間仮想アドレスを取得し得る。バックエンドモジュール270は、ゲスト空間仮想アドレスを例えば一組のI/O空間物理アドレス(例えばI/O空間154bの)へ翻訳する要求を、メモリ翻訳モジュール208(例えばIOMMUを介し)へ提出し得る。工程414において、翻訳されたI/O空間物理アドレスに基づき、バックエンドモジュール270は、仮想マシン120から送信されるデータを取得するためにメモリ読み出し操作を行い、送信のためにこのデータをネットワークインターフェースへ提供し得る。データパケット送信が完了したという通知をネットワークインターフェースから受信した後、工程416において、バックエンドモジュール270は、仮想マシン120で動作するデバイスドライバに、この完了について通知し得る。通知は割り込みの形式のものであり得る。
【0044】
[049] 本開示の実施形態と整合する仮想マシンによりネットワークパケット受信を行う例示的方法500を示す
図5を次に参照する。本方法は、例えば
図1Aの仮想マシン120で動作するデバイスドライバとI/Oインターフェース110aとにより行われ得る。
【0045】
[050] 初期開始後、工程502において、バックエンドモジュール270は、受信されたデータパケットから抽出されるデータを、ネットワークインターフェースから受信する。工程504において、バックエンドモジュール270は、未決データパケット受信タスクに関連する一組のゲスト空間仮想アドレスを、タスクキュー280から取得し得る。工程506において、バックエンドモジュール270は、ゲスト空間仮想アドレスを一組のI/O空間物理アドレス(例えばI/O空間154bの)へ翻訳し得る。この翻訳は、例えば要求をIOMMUへ提出することにより行われ得る。工程508において、バックエンドモジュール270は、データをI/O空間内に格納するために一組のI/O空間物理アドレスを使用して、メモリ書き込み操作を行い得る。工程510において、バックエンドモジュール270は、受信されたパケットデータについて、仮想マシン120で動作するデバイスドライバに(例えば割り込みをかけることにより)通知し得る。通知を受信すると、工程512において、デバイスドライバは、キュー280内の未決データパケット受信タスクからゲスト空間仮想アドレスを取得し得る。次に、工程514において、デバイスドライバは、受信されたパケットデータを取得するためにメモリ読み出し操作を行い、受信されたパケットデータをゲストソフトウェアスタック126へ提供し得る。
【0046】
[051]
図6は、本明細書で説明された実施形態がこれにより実施され得る例示的コンピュータシステム600のブロック図である。コンピュータシステム600は、情報を伝達するためのバス602又は他の通信機構と、情報を処理するための、バス602と結合された1つ又は複数のハードウェアプロセッサ604(簡潔さの目的のためにプロセッサ604として示される)とを含む。ハードウェアプロセッサ604は例えば1つ又は複数のマイクロプロセッサであり得る。
【0047】
[052] コンピュータシステム600はまた、情報と、プロセッサ604により実行される命令とを格納するための、バス602へ結合されるランダムアクセスメモリ(RAM)又は他のダイナミック記憶デバイスなどのメインメモリ606を含む。メインメモリ606はまた、プロセッサ604により実行される命令の実行中に一時変数又は他の中間情報を格納するために使用され得る。このような命令は、プロセッサ604にアクセス可能な非一時的記憶媒体内に格納された後、コンピュータシステム600を、命令で規定される操作を行うようにカスタム化された専用マシンに変える。
【0048】
[053] コンピュータシステム600はさらに、プロセッサ604のための静的情報及び命令を格納するための、バス602へ結合された読み取り専用メモリ(ROM)608又は他のスタティック記憶デバイスを含む。磁気ディスク、光ディスク又はUSBメモリ(フラッシュドライブ)などの記憶デバイス610が、情報及び命令を格納するために設けられ、バス602へ結合される。
【0049】
[054] コンピュータシステム600は、情報をコンピュータユーザへ表示するための陰極線管(CRT:cathode ray tube)、液晶ディスプレイ(LCD:liquid crystal display)、又はタッチスクリーンなどのディスプレイ612に、バス602を介し結合され得る。英数字キー及び他のキーを含む入力デバイス614が、情報及び命令選択をプロセッサ604へ伝達するために、バス602へ結合される。別のタイプのユーザ入力装置は、方向情報及び命令選択をプロセッサ604に伝達するため及びディスプレイ612上のカーソル移動を制御するための、マウス、トラックボール又はカーソル方向キーなどのカーソル制御器616である。入力デバイスは通常、第1の軸(例えばx)及び第2の軸(例えばy)の2つの軸内の2つの自由度(デバイスが面内の位置を規定することを許容する)を有する。いくつかの実施形態では、カーソル制御器としての同じ方向情報及び命令選択は、カーソルの無いタッチスクリーン上のタッチを受信することを介し実施され得る。
【0050】
[055] コンピュータシステム600は、1つ又は複数のコンピュータデバイスにより実行される実行可能ソフトウェアコードとして大容量記憶デバイス内に格納され得るグラフィックユーザインターフェース(GUI)を実現するために、ユーザインターフェースモジュールを含み得る。このモジュール及び他のモジュールは、一例として、ソフトウェアコンポーネント、オブジェクト指向ソフトウェアコンポーネント、クラスコンポーネント及びタスクコンポーネントなどのコンポーネント、処理、機能、フィールド、手順、サブルーチン、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路系、データ、データベース、データ構造、テーブル、アレイ、及び変数を含み得る。モジュールは、例えば
図2Aのハイパーバイザ124のコンポーネントを含み得る。
【0051】
[056] コンピュータシステム600は、コンピュータシステム600と組み合わせてコンピュータシステム600を専用マシンにさせる又はプログラムするカスタム化ハードワイヤード論理、1つ又は複数のASIC又はFPGA、ファームウェア、及び/又はプログラム論理を使用して、本明細書で説明された技術を実施し得る。いくつかの実施形態によると、本明細書で説明された操作、機能、技術、及び他の特徴は、メインメモリ606に含まれる1つ又は複数の命令の1つ又は複数のシーケンスを実行するプロセッサ604に応答して、コンピュータシステム600により行われる。このような命令は、記憶デバイス610などの別の記憶媒体からメインメモリ606へ読み出され得る。メインメモリ606に含まれる一連の命令の実行は、本明細書で説明する方法工程(例えば
図3~5の方法300~500)をプロセッサ604に行わせる。代替実施態様では、ハードワイヤード回路系が、ソフトウェア命令の代わりに又はソフトウェア命令と組み合わせて使用され得る。
【0052】
[057] 本明細書で使用される用語「非一時的媒体」は、マシンを特別なやり方で動作させるデータ及び/又は命令を格納する任意の非一時的媒体を指す。このような非一時的媒体は、不揮発性媒体及び/又は揮発性媒体を含み得る。不揮発性媒体は、例えば記憶デバイス610などの光又は磁気ディスクを含み得る。揮発性媒体は、メインメモリ606などのダイナミックメモリを含み得る。非一時的媒体は、例えばフロッピーディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、又は任意の他の磁気データ記憶媒体、CD-ROM、任意の他の光データ記憶媒体、パターン又は孔を有する任意の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、NVRAM、フラッシュメモリ、レジスタ、キャッシュ、任意の他のメモリチップ、又はカートリッジ、及びこれらのネットワークバージョンを含む。
【0053】
[058] 非一時的媒体は伝送媒体とは異なるがそれと併せて使用され得る。伝送媒体は記憶媒体間で情報を転送することに関与し得る。例えば、伝送媒体は、バス602を含むワイヤを含む同軸ケーブル、銅線及びファイバーオプティクスを含み得る。伝送媒体はまた、電波及び赤外線データ通信中に生成されるものなど音響又は光波の形式をとり得る。
【0054】
[059] 様々な形式の媒体が、実行のために1つ又は複数の命令の1つ又は複数のシーケンスをプロセッサ604へ搬送することに関与され得る。例えば、命令は当初、リモートコンピュータの磁気ディスク又はソリッドステートドライブ上に搬送され得る。リモートコンピュータは、命令をダイナミックメモリ内にロードし、次にモデムを使用することにより命令を電話線上で送信し得る。コンピュータシステム600にローカルなモデムは、データを電話線上で受信し、次にこのデータを赤外線信号に変換するために赤外線送信機を使用し得る。赤外線検出機は赤外線信号で搬送されるデータを受信し得、適切な回路系がデータをバス602上に置き得る。バス602は、プロセッサ604が命令を取り出し実行するメインメモリ606へ、データを搬送する。メインメモリ606により受信される命令は任意選択的に、プロセッサ604による実行の前又は後のいずれかに記憶デバイス610上に格納され得る。
【0055】
[060] コンピュータシステム600はまた、バス602へ結合される通信インターフェース618を含み得る。通信インターフェース618は、ローカルネットワーク622へ接続され得るネットワークリンク620と結合する双方向データ通信を提供し得る。例えば、通信インターフェース618は、対応するタイプの電話線へデータ通信接続を提供するサービス総合デジタル網(ISDN:integrated services digital network)カード、ケーブルモデム、衛星モデム又はモデムであり得る。別の例として、通信インターフェース618は、データ通信接続を適合LANへ提供するローカルエリアネットワーク(LAN)カードであり得る。無線リンクもまた実装される。任意のこのような実施形態では、通信インターフェース618は、様々なタイプの情報を表すディジタルデータストリームを搬送する電気的、電磁的、又は光学的信号を送受信し得る。
【0056】
[061] ネットワークリンク620は通常、1つ又は複数のネットワークを介しデータ通信を他のデータ装置へ提供し得る。例えば、ネットワークリンク620は、接続を、ローカルネットワーク622を介しホストコンピュータ624へ又はインターネットサービスプロバイダ(ISP:Internet Service Provider)626により操作されるデータ機器へ提供し得る。次に、ISP626は、「インターネット」628と今日一般的に呼ばれる世界的パケットデータ通信ネットワークを介しデータ通信サービスを提供し得る。ローカルネットワーク622とインターネット628との両方はディジタルデータストリームを搬送する電気的、電磁又は光学的信号を使用する。ディジタルデータをコンピュータシステム600へ/から搬送する様々なネットワークを介した信号並びにネットワークリンク320上の及び通信インターフェース618を介した信号は、伝送媒体の例示的形式のものであり得る。
【0057】
[062] コンピュータシステム600は、ネットワーク、ネットワークリンク620、及び通信インターフェース618を介し、メッセージを送信し、データ(プログラムコードを含む)を受信し得る。インターネットの例では、サーバ630は、インターネット628、ISP626、ローカルネットワーク622、及び通信インターフェース618を介しアプリケーションプログラムの要求コードを送信し得る。
【0058】
[063] 受信コードは、後の実行のために記憶デバイス610又は他の不揮発性記憶装置内に受信及び/又は格納されると、プロセッサ604により実行され得る。いくつかの実施形態では、サーバ630はディスプレイ上に表示される情報を提供し得る。
【0059】
[064] 本発明の他の実施形態は、本明細書の考察と本明細書において開示された本発明の実行から当業者にとって明白となる。本出願は、その一般原理に従う本発明の任意の変形形態、使用又は適応化並びに当該技術領域において公知な又は習慣的やり方に入るような本開示からの逸脱を含む本発明の任意の変形形態、使用又は適応化もカバーするように意図されている。本明細書及び例は例示的にすぎないと考えられるように意図されており、本発明の真の範囲及び精神は以下の特許請求範囲により示される。
【0060】
[065] 本発明は上に説明され添附図面に示された正確な構造に限定されないということと、様々な修正及び変更が特許請求の範囲から逸脱することなくなされ得るということとが理解されよう。本発明の範囲は添付の特許請求の範囲だけにより限定されるべきであるように意図されている。