IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧 ▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

特許7520843入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換
<>
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図1
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図2
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図3
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図4
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図5
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図6
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図7
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図8
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図9
  • 特許-入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-12
(45)【発行日】2024-07-23
(54)【発明の名称】入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換
(51)【国際特許分類】
   G06F 13/10 20060101AFI20240716BHJP
   G06F 13/14 20060101ALI20240716BHJP
   G06F 12/1036 20160101ALI20240716BHJP
【FI】
G06F13/10 330C
G06F13/14 320Z
G06F12/1036 100
【請求項の数】 22
(21)【出願番号】P 2021535746
(86)(22)【出願日】2020-04-20
(65)【公表番号】
(43)【公表日】2022-06-24
(86)【国際出願番号】 US2020028994
(87)【国際公開番号】W WO2020219394
(87)【国際公開日】2020-10-29
【審査請求日】2023-03-22
(31)【優先権主張番号】16/390,663
(32)【優先日】2019-04-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(73)【特許権者】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マギー チャン
(72)【発明者】
【氏名】フィリップ ン
(72)【発明者】
【氏名】ポール ブリンザー
【審査官】田中 啓介
(56)【参考文献】
【文献】特表2015-500524(JP,A)
【文献】米国特許出願公開第2016/0077981(US,A1)
【文献】特表2012-515995(JP,A)
【文献】米国特許出願公開第2012/0072906(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/455-9/54
G06F12/08-12/128
G06F13/10-13/14
(57)【特許請求の範囲】
【請求項1】
ゲストオペレーティングシステム及びハイパーバイザを実行するプロセッサと、
入出力(IO)デバイスと、
入出力メモリ管理ユニット(IOMMU)と、を備え、
前記IOMMUは、
前記ゲストオペレーティングシステムから受信した通信において、前記通信をさらに処理する前に、ゲストドメイン識別子(ドメインID)を対応するホストドメインIDに置き換え、及び/又は、ゲストデバイス識別子(デバイスID)を対応するホストデバイスIDに置き換えることと、
前記IOデバイスから受信した通信において、前記通信を前記ゲストオペレーティングシステムに提供する前に、ホストデバイスIDをゲストデバイスIDに置き換えることと、
前記通信を前記ゲストオペレーティングシステムに提供する前に、ゲストドメインID及び/又はゲストデバイスIDを、前記IOMMUで生成され、前記ゲストオペレーティングシステムに宛てられた通信に配置することと、
によって、前記ハイパーバイザによる介入なしに、前記IOMMUと前記ゲストオペレーティングシステムとの間の通信を処理するように構成されている、
電子デバイス。
【請求項2】
前記IOMMUは、
前記ゲストオペレーティングシステムに対して、所定のゲストドメインIDが所定のホストドメインIDに関連付けられていること、又は、所定のゲストデバイスIDが所定のホストデバイスIDに関連付けられていることを示す通信を、前記ハイパーバイザから受信することと、
前記ゲストオペレーティングシステムに対して、前記所定のゲストドメインIDが前記所定のホストドメインIDに関連付けられていること、又は、前記所定のゲストデバイスIDが前記所定のホストデバイスIDに関連付けられていることを示す情報を含むように、ID変換テーブルのエントリを更新することと、
によって、前記IOMMUの前記ID変換テーブルを、前記ゲストオペレーティングシステムの情報を含むように更新するように構成されている、
請求項1の電子デバイス。
【請求項3】
前記IOMMUは、
前記ゲストオペレーティングシステムから受信した前記通信において、前記ID変換テーブルの各エントリから、前記ゲストドメインIDを置き換えるホストドメインID、及び/又は、前記ゲストデバイスIDを置き換えるホストデバイスIDを決定することによって、
前記ゲストオペレーティングシステムから受信した前記通信において、前記ゲストドメインIDを対応するホストドメインIDに置き換える場合に、及び/又は、前記ゲストデバイスIDを対応するホストデバイスIDに置き換える場合に、前記ID変換テーブルを用いるように構成されている、
請求項2の電子デバイス。
【請求項4】
前記IOMMUは、
前記ID変換テーブルの各エントリから、前記通信が関連するIOデバイスの前記ゲストオペレーティングシステムによって用いられる前記ゲストドメインID及び/又は前記ゲストデバイスIDを決定することによって、
前記IOMMUによって生成された前記通信において、前記ゲストドメインID及び/又は前記ゲストデバイスIDを配置する場合に、前記ID変換テーブルを用いるように構成されている、
請求項2の電子デバイス。
【請求項5】
前記IOMMUは、前記ゲストオペレーティングシステムによって用いられる所定のドメインID及び所定のデバイスID毎に、ゲストオペレーティングシステムの初期化動作中に前記ID変換テーブルを更新するために、対応する別の通信を前記ハイパーバイザから受信する、
請求項2の電子デバイス。
【請求項6】
前記IOMMUとは別のメモリをさらに備え、
前記IOMMUは、前記ID変換テーブルを更新する場合に、
前記IOMMUのメモリマップ入出力(MMIO)レジスタを介して前記ハイパーバイザから前記通信を受信することと、
IOMMプライベートアドレス変換テーブルを用いて、前記ID変換テーブルが記憶されている前記メモリ内のIOMMUバッキングストレージ領域内の位置を判別することと、
前記IOMMUバッキングストレージ領域内の前記ID変換テーブルを更新することと、
を行うように構成されている、
請求項2の電子デバイス。
【請求項7】
前記ゲストオペレーティングシステムから受信した前記通信は、前記IOMMU用のコマンドバッファに書き込まれる情報を含む、
請求項1の電子デバイス。
【請求項8】
前記ハイパーバイザは、
前記ゲストオペレーティングシステムについて、所定のゲストデバイスIDが所定のホストデバイスIDに関連することを判別することと、
デバイステーブルを、前記ゲストオペレーティングシステムの情報を含むように更新することであって、前記更新することは、前記ゲストデバイスID及び前記ゲストオペレーティングシステムの識別情報を含むように前記デバイステーブル内の対応するデバイスのエントリを更新することを含む、ことと、
を行うように構成されている、
請求項1の電子デバイス。
【請求項9】
前記IOMMUは、
前記デバイステーブルの各エントリから、前記IOデバイスから受信した通信においてホストデバイスIDを置き換えるためのゲストデバイスIDを決定することによって、
前記IOデバイスから受信した前記通信において、ホストデバイスIDをゲストデバイスIDに置き換える場合に、前記デバイステーブルを用いるように構成されている、
請求項8の電子デバイス。
【請求項10】
前記ハイパーバイザは、前記ゲストオペレーティングシステムによって用いられるデバイスID毎に、ゲストオペレーティングシステムの初期化動作中に前記デバイステーブルの対応する更新を行う、
請求項8の電子デバイス。
【請求項11】
前記IOデバイスから受信した前記通信は、前記ゲストオペレーティングシステムに対する周辺ページ要求(PPR)を含む、
請求項1の電子デバイス。
【請求項12】
ゲストオペレーティングシステム及びハイパーバイザを実行するプロセッサと、入出力(IO)デバイスと、入出力メモリ管理ユニット(IOMMU)と、を備える電子デバイスにおいて、前記IOMMUが、前記ハイパーバイザによる介入なしに、前記IOMMUと前記ゲストオペレーティングシステムとの間の通信を処理する方法であって、
前記IOMMUが、前記ゲストオペレーティングシステムから受信した通信において、前記通信をさらに処理する前に、ゲストドメイン識別子(ドメインID)を対応するホストドメインIDに置き換えること、及び/又は、ゲストデバイス識別子(デバイスID)を対応するホストデバイスIDに置き換えることと、
前記IOMMUが、前記IOデバイスから受信した通信において、前記通信を前記ゲストオペレーティングシステムに提供する前に、ホストデバイスIDをゲストデバイスIDに置き換えることと、
前記IOMMUが、前記通信を前記ゲストオペレーティングシステムに提供する前に、ゲストドメインID及び/又はゲストデバイスIDを、前記IOMMUで生成され、前記ゲストオペレーティングシステムに宛てられた通信に配置することと、を含む、
方法。
【請求項13】
前記ゲストオペレーティングシステムに対して、所定のゲストドメインIDが所定のホストドメインIDに関連付けられていること、又は、所定のゲストデバイスIDが所定のホストデバイスIDに関連付けられていることを示す通信を、前記ハイパーバイザから受信することと、
前記所定のゲストドメインIDが前記所定のホストドメインIDに関連付けられていること、又は、前記所定のゲストデバイスIDが前記所定のホストデバイスIDに関連付けられていることを示す情報を含むように、ID変換テーブルのエントリを更新することと、によって、
前記IOMMUが、前記ID変換テーブルを、前記ゲストオペレーティングシステムの情報を含むように更新することをさらに含む、
請求項12の方法。
【請求項14】
前記ゲストオペレーティングシステムから受信した前記通信において、前記ID変換テーブルの各エントリから、前記ゲストドメインIDを置き換えるホストドメインID、及び/又は、前記ゲストデバイスIDを置き換えるホストデバイスIDを決定することによって、
前記IOMMUが、前記ゲストオペレーティングシステムから受信した前記通信において、前記ゲストドメインIDを対応するホストドメインIDに置き換える場合に、及び/又は、前記ゲストデバイスIDを対応するホストデバイスIDに置き換える場合に、前記ID変換テーブルを用いることをさらに含む、
請求項13の方法。
【請求項15】
前記ID変換テーブルの各エントリから、前記通信が関連するIOデバイスの前記ゲストオペレーティングシステムによって用いられる前記ゲストドメインID及び/又は前記ゲストデバイスIDを決定することによって、
前記IOMMUが、前記IOMMUによって生成された前記通信において、前記ゲストドメインID及び/又は前記ゲストデバイスIDを配置する場合に、前記ID変換テーブルを用いることをさらに含む、
請求項13の方法。
【請求項16】
前記IOMMUが、前記ゲストオペレーティングシステムによって用いられる所定のドメインID及び所定のデバイスID毎に、ゲストオペレーティングシステムの初期化動作中に前記ID変換テーブルを更新するために、対応する別の通信を前記ハイパーバイザから受信することをさらに含む、
請求項13の方法。
【請求項17】
前記電子デバイスは、前記IOMMUとは別のメモリをさらに備え、
前記方法は、前記ID変換テーブルを更新する場合に、
前記IOMMUが、前記IOMMUのメモリマップ入出力(MMIO)レジスタを介して前記ハイパーバイザから前記通信を受信することと、
前記IOMMUが、IOMMUプライベートアドレス変換テーブルを用いて、前記ID変換テーブルが記憶されている前記メモリ内のIOMMUバッキングストレージ領域内の位置を判別することと、
前記IOMMUが、前記IOMMUバッキングストレージ領域内の前記ID変換テーブルを更新することと、を含む、
請求項13の方法。
【請求項18】
前記ゲストオペレーティングシステムから受信した前記通信は、前記IOMMU用のコマンドバッファに書き込まれる情報を含む、
請求項12の方法。
【請求項19】
前記ハイパーバイザが、前記ゲストオペレーティングシステムについて、所定のゲストデバイスIDが所定のホストデバイスIDに関連することを判別することと、
前記ハイパーバイザが、デバイステーブルを、前記ゲストオペレーティングシステムの情報を含むように更新することであって、前記更新することは、前記ゲストデバイスID及び前記ゲストオペレーティングシステムの識別情報を含むように前記デバイステーブル内の対応するデバイスのエントリを更新することを含む、ことと、をさらに含む、
請求項12の方法。
【請求項20】
前記デバイステーブルの各エントリから、前記IOデバイスから受信した通信においてホストデバイスIDを置き換えるためのゲストデバイスIDを決定することによって、
前記IOMMUが、前記IOデバイスから受信した前記通信において、ホストデバイスIDをゲストデバイスIDに置き換える場合に、前記デバイステーブルを用いることをさらに含む、
請求項19の方法。
【請求項21】
前記ハイパーバイザが、前記ゲストオペレーティングシステムによって用いられる所定のデバイスID毎に、ゲストオペレーティングシステムの初期化動作中に前記デバイステーブルの対応する更新を行うことをさらに含む、
請求項19の方法。
【請求項22】
前記IOデバイスから受信した前記通信は、前記ゲストオペレーティングシステムに対する周辺ページ要求(PPR)を含む、
請求項12の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術)
一部の電子デバイス(例えば、サーバ又はデスクトップコンピュータ等)は、入出力(IO)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化には、電子デバイス上又は電子デバイス内の中間エンティティ(intermediary entity)が関与し、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるという幻想を、電子デバイス上で実行されるソフトウェアのインスタンス(例えば、アプリケーションプログラム等)に提供する。実際には、中間エンティティは、ソフトウェアのインスタンスによって行われるアクセスをインターセプト/リダイレクトしたり、他の方法で支援したりする。例えば、一般的な中間エンティティの1つに「仮想マシン」がある。仮想マシンは、電子デバイスハードウェアを抽象化し、電子デバイスハードウェアへの既知のインターフェースをエミュレート又は提示するソフトウェアエンティティであり、それによって、ソフトウェアのインスタンスが、様々なタイプ及び構成の下位の電子デバイスハードウェア(ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある)上で実行することを可能にする。一部の電子デバイスでは、仮想マシンは、「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。ひいては、ゲストオペレーティングシステムは、生産性アプリケーション、データベース等のソフトウェアの他のインスタンスを実行するための環境を提供する。
【0002】
一部の電子デバイスでは、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化することができ、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視、支援することができ、仮想マシンを終了又はクローズすること等ができる。図1は、仮想マシン及びハイパーバイザを示すブロック図である。図1に示すように、3つの仮想マシン(VM)100があり、各々の下で、ゲストオペレーティングシステム(ゲストOS)102と、データベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)104と、を実行する。仮想マシン100は、ハイパーバイザ106と通信し、ハイパーバイザ106は、ホストオペレーティングシステム(ホストOS)108と仮想マシン100との間をインターフェースする。ホストオペレーティングシステム108は、電子デバイスハードウェア114とハイパーバイザ106との間のインターフェースを提供する。さらに、ハイパーバイザ106は、メモリ管理ユニット及びIOデバイスハードウェア114のコントローラとして機能する入出力管理ユニット(IOMMU)112と仮想マシン100との間をインターフェースする。
【0003】
ハイパーバイザによって実行される動作には、電子デバイスハードウェアとゲストオペレーティングシステム(又は、広義には仮想マシン)との間の通信の処理が含まれる。例えば、ハイパーバイザは、ゲストオペレーティングシステムと入出力管理ユニット(IOMMU)との間の通信を変換、リダイレクト、又は、他の方法で支援することができる。ハイパーバイザによって処理される通信には、IOMMUによる周辺ページ要求(PPR)ログ及びイベントログの書き込みや、ゲストオペレーティングシステムによるコマンドバッファの書き込み等の通信が含まれる。PPRログ、イベントログ及びコマンドバッファの書き込みについては、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00に詳細に記載されており、その全体は、言及することによって本明細書に援用される。
【0004】
図2は、ハイパーバイザによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。図2では、いくつかの要素が点線/点で示されており、これらの要素は、メモリ(例えば、電子デバイスにおけるメインメモリ)に記憶され、従って、典型的なメモリアクセス技術を介してアクセスされるログ、バッファ等である。図2の要素は、ゲストオペレーティングシステム102と、ハイパーバイザ106と、IOMMU112とともに、ゲスト周辺ページ要求(PPR)ログ200と、ゲストコマンドバッファ(CMD BUF)202と、ゲストイベントログ204と、を含み、これらは、ゲストオペレーティングシステム102からの通信及びゲストオペレーティングシステム102宛ての通信を記憶するために用いられるメモリ内の構造(例えば、リスト、テーブル等)である。さらに、これらの要素は、ゲストオペレーティングシステム構造へのポインタ及びゲストオペレーティングシステムに関連するステータス情報を記憶するためのメモリ内の位置のセットであるゲストポインタ(PTRS)/ステータスレジスタ(REGS)206を含む。さらに、これらの要素は、IOMMU周辺ページ要求ログ208と、IOMMUコマンドバッファ210と、IOMMUイベントログ212と、を含み、これらは、IOMMU112からの通信及びIOMMU112宛ての通信を記憶するために用いられるメモリ内の構造(例えば、リスト、テーブル等)である。また、これらの要素は、IOMMUメモリマップド入出力(MMIO)ポインタ/ステータスレジスタ(REGS)214をIOMMU112に含み、IOMMUメモリマップド入出力(MMIO)ポインタ/ステータスレジスタ(REGS)214は、様々なIOMMU112構造へのポインタ及びIOMMU112に関連するステータス情報を記憶するためのIOMMU112内のレジスタのセットである。
【0005】
動作中、例としてコマンドを用いると、ゲストオペレーティングシステム102は、IOMMU112宛てのコマンドをゲストコマンドバッファ202(すなわち、ゲストオペレーティングシステム102からのコマンドが記憶されるメモリ内のバッファの次の利用可能な位置)に書き込む。ゲストオペレーティングシステム102は、IOMMU112によって用いられる「ホスト」ドメインID及び/又はデバイスIDとは異なる「ゲスト」ドメイン識別子(ドメインID)及び/又はデバイス識別子(デバイスID)をコマンドにおいて使用するので、IOMMU112が、正しいデバイス及び/又はドメインを識別する可能性が低い(ドメインID及びデバイスIDは、本明細書の他の箇所で説明されているが、一般的に、電子デバイス内のデバイスのセットの中から特定のデバイスを識別するか、メモリアクセスを実行するためにデバイスをグループ化するメカニズムである保護ドメインを識別する)。したがって、ゲストドメインID及び/又はデバイスIDを翻訳又は変換せずにコマンドを用いると、コマンドが、IOMMU112によって不適切に処理される可能性があり、電子デバイスのエラーを引き起こす可能性がある。したがって、ハイパーバイザ106は、図2において点線で示すように、ゲストコマンドバッファ202へのゲストオペレーティングシステムの書き込みをインターセプトし、ハイパーバイザデータ構造において、ゲストドメインID及び/又はゲストドメインIDからホストドメインID及び/又はデバイスIDへのマッピングをルックアップし、コマンド内のゲストドメインID及び/又はゲストデバイスIDを、対応するホストドメインID及び/又はデバイスIDに置き換え、更新されたコマンドをIOMMUコマンドバッファ210に記憶する。次に、IOMMU112は、IOMMUコマンドバッファ210からコマンドを取得し、コマンドを実行する。これにより、IOMMU112は、対応するアクションを実行する。ハイパーバイザ106は、IOMMU112によるIOMMU周辺ページ要求ログ208及びIOMMUイベントログ212への書き込み(但し、ホストデバイスIDをゲストデバイスIDに置き換える)、ゲストポインタ/ステータスレジスタ206のアクセス、並びに、IOMMU MMIOポインタ/ステータスレジスタ214のアクセスに関する少なくともいくつかの同様の動作を実行する。メモリの読み書き、マッピングのルックアップ、及び、ハイパーバイザ106によって実行される他の動作は、レイテンシが比較的長いので、ハイパーバイザ106をゲストオペレーティングシステム102とIOMMU112との間に介在させて用いることにより、通信処理の遅延につながり、さらには、プロセッサをビジー状態にし、電子デバイスのメモリバスにトラフィックを加える。
【図面の簡単な説明】
【0006】
図1】仮想マシン及びハイパーバイザを示すブロック図である。
図2】ハイパーバイザによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。
図3】いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。
図4】いくつかの実施形態による、電子デバイスを示すブロック図である。
図5】いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図である。
図6】いくつかの実施形態による、IOMMUによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。
図7】いくつかの実施形態による、ゲストオペレーティングシステムからの通信をIOMMUにおいて処理するプロセスを示すフローチャートである。
図8】いくつかの実施形態による、ゲストオペレーティングシステム宛ての入出力(IO)デバイスからの通信をIOMMUにおいて処理するプロセスを示すフローチャートである。
図9】いくつかの実施形態による、ゲストオペレーティングシステム宛ての通信をIOMMUにおいて生成するプロセスを示すフローチャートである。
図10】いくつかの実施形態による、ドメインID及びデバイスIDを変換するようにIOMMUを構成するプロセスを示すフローチャートである。
【発明を実施するための形態】
【0007】
図面及び説明全体に亘って、同じ符号は、同一の図要素を指す。
【0008】
以下の説明は、当業者が、説明する実施形態を作成及び使用することを可能にするために提示され、特定の用途及びその要件に照らして提供される。説明する実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的な原理は、他の実施形態及び用途に適用されてもよい。したがって、説明する実施形態は、示された実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0009】
(用語)
以下の説明では、様々な用語が、実施形態を説明するために使用される。以下に、これらの用語のいくつかを簡単且つ一般的に説明する。用語は、明確さ及び簡潔さのために、本明細書に記載されていない重要な追加的態様を有してもよい。したがって、説明は、用語を限定することを意図しないことに留意されたい。
【0010】
機能ブロック:機能ブロックは、集積回路要素、ディスクリート回路要素等の1つ以上の相互に関連する回路要素のグループ、集合、及び/又は、セットを指す。回路要素は、回路要素が少なくとも1つの特性を共有するという点で「相互に関連」している。例えば、相互に関連する回路要素は、特定の集積回路チップ又はその一部に含まれていてもよいし、その上に製造されてもよいし、他の方法で結合されてもよいし、所定の機能(計算又は処理機能、メモリ機能等)の実行に関与してもよいし、共通の制御要素によって制御されてもよい。機能ブロックは、単一の回路要素(例えば、単一の集積回路論理ゲート)から数百万又は数十億の回路要素(例えば、集積回路メモリ)までの任意の数の回路要素を含むことができる。
【0011】
(仮想化、仮想マシン及びハイパーバイザ)
記載された実施形態は、メモリ、入出力(IO)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化は、一般に、電子デバイス上又は電子デバイス内の中間エンティティが関与し、中間エンティティは、実際に、ソフトウェアのインスタンスによって行われるアクセスをインターセプト/リダイレクト、変換又は他の方法で支援する場合に、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるという幻想を、電子デバイスで実行されるソフトウェアのインスタンスに提供する。例えば、ソフトウェアのインスタンスには電子デバイスの実際のデバイスレジスタ、メモリ位置等のように見えるが、中間エンティティによって提示される単なるコピーである電子デバイスレジスタ、メモリ位置、電子デバイス設定及び他の機能ブロックのセットが、中間エンティティによって提示されてもよい。この場合、中間エンティティは、電子デバイスハードウェアのコピーのアクセスを受信、インターセプト又は他の方法で取得し、ソフトウェアのインスタンスに代わって実際の電子デバイスハードウェアと対応する対話を行う。電子デバイスハードウェアの仮想化は、様々な電子デバイスが、電子デバイスハードウェアの様々な構成、様々なアドレス、位置又は識別子等を用いることを可能にする一方で、ソフトウェアのインスタンスには、中間エンティティを介して、電子デバイスハードウェアへの同じインターフェースが提供されるようにする等の多くの利点がある。さらに、中間エンティティは、ソフトウェアの所定のインスタンスによる電子デバイスハードウェアのアクセスを許可するかブロックするかを決定することができ、したがって、電子デバイスハードウェアの仮想化により、電子デバイスハードウェア(又は、その一部)及び/又は電子デバイス上で実行されるソフトウェアのインスタンスの保護を可能にする。上述したようにアクセスを制御することによって、中間エンティティは、ソフトウェアのいくつかのインスタンス間で電子デバイスハードウェアを共有し、及び/又は、ソフトウェアの個々のインスタンスに対して、電子デバイスハードウェアの一部への排他的アクセスを提供することができる。
【0012】
記載された実施形態では、中間エンティティは、「仮想マシン」を含む。仮想マシンは、電子デバイスハードウェアを抽象化し、実際の又はエミュレートされた電子デバイスハードウェアへの既知のインターフェースをソフトウェアのインスタンスに提示するソフトウェアエンティティである。ハードウェアを抽象化することによって、ソフトウェアのインスタンスが、様々なタイプ及び構成の下位の電子デバイスハードウェア(ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある)上で実行することを可能にする。記載された実施形態では、仮想マシンは、「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。ひいては、ゲストオペレーティングシステムは、アプリケーション、データベース等の他のソフトウェアプログラムを実行するための環境を提供する。
【0013】
記載された実施形態では、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化することができ、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視、支援することができ、仮想マシンを終了又はクローズする等することができる。図3は、いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。図3に示すように、3つの仮想マシン(VM)300があり、各々の下で、ゲストオペレーティングシステム(ゲストOS)302と、データベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)304と、を実行する。仮想マシン300は、ハイパーバイザ306と通信し、ハイパーバイザ306は、ホストオペレーティングシステム(ホストOS)308と仮想マシン300との間のインターフェースを提供する。ホストオペレーティングシステム308は、電子デバイスハードウェア310とハイパーバイザ306との間のインターフェースを提供する。既存の電子デバイスについて図1に示したものとは異なり、図3において、IOMMU312は、ハイパーバイザ306が介在することなく、(IOMMU312とゲストオペレーティングシステム302との間のより太い線によって示すように)ゲストオペレーティングシステム302とIOデバイスハードウェア314との間を直接インターフェースする。したがって、既存の電子デバイスとは異なり、記載された実施形態では、ハイパーバイザ306は、本明細書に記載するように、ゲストオペレーティングシステム302とIOMMU312との間の通信を処理するための動作の少なくとも一部の実行に関与しない。しかしながら、ハイパーバイザ306とIOMMU312との間の線で示すように、IOMMU312とハイパーバイザ306との間で特定の通信が発生することに留意されたい。さらに、場合によっては、ホストオペレーティングシステム308が存在せず、ハイパーバイザ306は、電子デバイスハードウェア310とより直接的に通信することに留意されたい。
【0014】
(ドメイン識別子及びデバイス識別子)
記載された実施形態では、電子デバイスは、ページテーブルウォーク、割り込み再マッピング、デバイスアクセス、イベントレポート等の動作のための入出力(IO)デバイスを識別するために、ドメイン識別子(ドメインID)及びデバイス識別子(デバイスID)を用いる。例えば、電子デバイスの入出力メモリ管理ユニット(IOMMU)は、ドメインID及び/又はデバイスIDを、プロセッサ(又は、その上で実行されるソフトウェア)とIOデバイスとの間の通信のソース又は宛先を決定するために、IOデバイスのアドレス変換に用いられるページテーブルを決定するために、特定のIOデバイスによってトリガされた又は特定のIOデバイスで発生したイベントをプロセッサに報告する等のために用いることができる。ドメインIDは、IOデバイスが属する保護ドメインを識別する数値である。1つ以上のIOデバイスは、所定の保護ドメインに属することができ、各保護ドメインに含まれるIOデバイスは、アドレスマッピングの同一のセット(すなわち、同一のページテーブル(複数可)を用いる)及びメモリ内のページに対するアクセス権を有することができる。デバイスIDは、IOデバイスが配置されているインターフェースバスを識別するバス識別子、電子デバイス内のいくつかのデバイスからIOデバイスを識別するデバイス番号、及び、IOデバイスによって実行される機能を識別する機能番号等の情報を含むか、これらに基づいて生成される数値識別子である。ドメインID及びデバイスIDは、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00でより詳細に説明されており、上述したように、言及することによって本明細書に援用される。
【0015】
いくつかの実施形態では、上述した仮想化の1つの効果は、ゲストオペレーティングシステム及び電子デバイスハードウェア(例えば、IOMMUやIOデバイス等)が、ドメインID及び/又はデバイスIDに対して異なる値を用いることができることである。これらの実施形態では、ゲストオペレーティングシステムは、ゲストオペレーティングシステムによって選択され、決定され、又は、プログラムされたドメインID及び/又はデバイスIDに対して「ローカル」又は「ゲスト」値を用いることができ、電子デバイスハードウェアは、電子デバイスハードウェアによって選択され、決定され、又は、プログラムされたドメインID及び/又はデバイスIDに対して「システム」又は「ホスト」値を用いることができる。ドメインID及びデバイスIDの値が異なるので、ゲストオペレーティングシステムと電子デバイスハードウェアとの間の通信には、通信を処理する(すなわち、通信を変換及び/又は他の方法で支援する)1つ以上のエンティティが関与する。既存のシステムとは異なり、記載された実施形態では、ハイパーバイザは、通信を変換及び/又は他の方法で支援しない。代わりに、本明細書に記載されるように、IOMMUは、ハイパーバイザによる介入なしに、通信を変換及び/又は他の方法で支援するためのメカニズムを含む。いくつかの実施形態では、ハイパーバイザは、通信の変換及び/又は他の方法での支援に関与しないが、ハイパーバイザは、IOMMUを、通信を処理するためにIOMMUのセットアップ又は構成を支援することができる。
【0016】
(概要)
記載された実施形態では、電子デバイスは、プロセッサと、メモリと、いくつかの入出力(IO)デバイス(例えば、ネットワークインターフェースデバイス、ディスクコントローラ等)と、を含む。また、電子デバイスは、プロセッサとIOデバイスとの間をインターフェースする入出力メモリ管理ユニット(IOMMU)も含む。電子デバイス内のプロセッサは、ハイパーバイザ、1つ以上の仮想マシン、及び、仮想マシンにおけるゲストオペレーティングシステムを実行する。IOMMUは、ゲストオペレーティングシステムとIOMMU及びIOデバイスとの間の通信を処理するための動作を実行する。より具体的には、IOMMUは、ゲストオペレーティングシステムからの通信におけるゲストドメインID及びゲストデバイスIDを、IOMMU及び/又はIOデバイスにおいて通信が処理される前に、ホストドメインID及びホストデバイスIDに変換する。さらに、IOMMUは、IOデバイスからの通信におけるホストドメインID及び/又はホストデバイスIDを、処理のためにゲストオペレーティングシステムに通信を送信する前に、ゲストドメインID及び/又はゲストデバイスIDに変換し、ゲストドメインID及び/又はゲストデバイスIDを含む通信を生成する。
【0017】
IOMMUによって処理される上記の通信には、ゲストオペレーティングシステムとIOMMU及びIOデバイスとの間の様々な形式/タイプの通信が含まれる。一般に、記載された実施形態におけるIOMMUは、ゲストオペレーティングシステムとIOMMU及びIOデバイスとの間の任意の通信において、ドメインID及び/又はデバイスIDの翻訳又は変換を実行することができる。ゲストオペレーティングシステムからIOMMUへの通信の一例として、いくつかの実施形態では、ゲストオペレーティングシステムは、コマンドを、IOMMUによって提供されるコマンドバッファに書き込む。IOMMUは、コマンドバッファからのコマンドを処理する間に、コマンドからゲストドメインID及び/又はデバイスIDを取得し、ID変換テーブルを用いて、対応するホストドメインID及び/又はデバイスIDをルックアップする。次に、IOMMUは、コマンドをさらに処理する前に、ゲストドメインID及び/又はデバイスIDをホストドメインID及び/又はデバイスIDに置き換える。IOMMUからゲストオペレーティングシステムへの通信の一例として、いくつかの実施形態では、IOMMUは、周辺ページ要求(PPR)を、ゲストオペレーティングシステムのページ要求割り込みログに書き込む。IOMMUは、PPRをログに書き込む前に、PPRからホストデバイスIDを取得し(又は、ホストデバイスIDをソースIOデバイスに基づいて決定し)、ソースIOデバイスのデバイステーブルエントリを用いて、関連するゲストデバイスIDをルックアップする。次に、IOMMUは、PPRをゲストオペレーティングシステムの周辺ページ要求ログに記憶する前に、ホストデバイスIDをゲストデバイスIDに置き換える。IOMMUからゲストオペレーティングシステムへの通信の別の例として、いくつかの実施形態では、ゲストオペレーティングシステム宛ての通信(例えば、イベント等に関する)を生成する場合、IOMMUは、ID変換テーブル及び/又はデバイステーブルを用いて、通信に含まれるゲストドメインID及び/又はデバイスIDを決定し、したがって、IOMMUによって生成される通信にはホストドメインID及び/又はデバイスIDが含まれない。
【0018】
いくつかの実施形態では、上記のID変換テーブル及び/又はデバイステーブルは、通信を処理するためにIOMMUによって用いられる情報を含むように、ハイパーバイザ又は別のソフトウェア若しくはハードウェアエンティティ(例えば、オペレーティングシステム等)によって入力/構成及び/又は更新される。例えば、いくつかの実施形態では、ハイパーバイザは、ゲストドメインID及び/又はデバイスIDとホストドメインID及び/又はデバイスIDとの間のマッピングをIOMMUに通信し、IOMMUは、マッピングをID変換テーブルに書き込む。これらの実施形態では、IOMMUは、IOMMUが全てのマッピングをハイパーバイザから受信して記憶するまで、各マッピングが順番に書き込まれる1つ以上のメモリマップド入出力(MMIO)レジスタ(又は、メモリ内の対応するメモリ位置)を含むか、提供する。
【0019】
いくつかの実施形態では、IOMMUは、ID変換テーブル及び/又はデバイスマッピングテーブルの少なくとも一部を内部に記憶しない。これらの実施形態では、IOMMUは、ID変換テーブル及び/又はデバイステーブルの一部又は全てをメモリ(例えば、メインメモリ)又は別のバッキングストアに記憶する。これらの実施形態では、IOMMUは、メモリ又はバッキングストア内のID変換テーブル(例えば、ベースアドレス、長さ等)及び/又はデバイステーブルの位置が記憶された1つ以上のプライベートメモリ変換テーブル又はリストを含む。
【0020】
上記のようにゲストオペレーティングシステムとIOMMUとの間の通信を処理することによって、IOMMUは、既存のデバイス内のハイパーバイザによって実行される動作を実行する。ソフトウェアに実装されているハイパーバイザからの動作を、ハードウェアに実装されているIOMMUに向けて削除することで、動作を、より少ない遅延及び低減されたプロセッサ動作で実行することが可能になり、これにより、IOMMU及びプロセッサのパフォーマンスを向上させるのに役立つ。これにより、電子デバイスのパフォーマンスを向上させることができ、ユーザの満足度を高めることにつながる。
【0021】
(電子デバイス)
図4は、いくつかの実施形態による、電子デバイス400を示すブロック図である。図4に示すように、電子デバイス400は、プロセッサ402と、メモリ404と、大容量記憶装置406と、入出力(IO)デバイス408~412と、入出力(IO)ハブ414と、メモリコントローラ416と、を含む。
【0022】
プロセッサ402は、電子デバイス400において計算動作を実行する機能ブロックである。プロセッサ402は、2つのコア418~420を含み、各コアは、中央処理装置(CPU)コア、グラフィックスプロセッシングユニット(GPU)コア、組み込みプロセッサ、特定用途向け集積回路(ASIC)、及び/又は、他の計算メカニズム等の1つ以上の計算メカニズムを含む。また、プロセッサ402は、メモリ管理ユニット(MMU)422も含み、これは、アドレス変換に関連する動作(例えば、ページテーブルウォーク、変換ルックアサイドバッファルックアップ等)、コア418~420によるメモリアクセスのためのメモリアクセス保護等を実行する機能ブロックである。
【0023】
メモリ404は、電子デバイス400内のメモリ(例えば、「メイン」メモリ)の動作を実行する機能ブロックである。メモリ404は、ダイナミックランダムアクセスメモリ(DRAM)、ダブルデータレート同期DRAM(DDR SDRAM)、及び/又は、電子デバイス400の他の機能ブロックによって用いられるデータ及び命令を記憶する他のタイプのメモリ回路等の1つ以上のメモリ回路と、メモリ回路に記憶されたデータ及び命令のアクセス(例えば、読み取り、書き込み、チェック、削除、無効化等)を処理する制御回路と、を含む。
【0024】
大容量記憶装置406は、電子デバイス400内の他の機能ブロックによって用いられるデータ及び命令を記憶するための大容量不揮発性記憶素子の動作を実行する機能ブロック及び/又はデバイスである。大容量記憶装置406は、大容量半導体メモリ(例えば、フラッシュメモリ等)、ディスクドライブ(ハードドライブ等)、光学ドライブ等であってもよいし、これらを含んでもよい。大容量記憶装置406に記憶されたデータ及び命令のコピーは、電子デバイス400の他の機能ブロックによって用いられるために取得され、メモリ404に記憶される。例えば、いくつかの実施形態において、データ及び/又は命令は、所定のサイズ(例えば、4kB、2MB等)のブロック又は「ページ」で大容量記憶装置406から取得され、ページは、他の機能ブロックによるアクセスのためにメモリ404に記憶される。さらに、ページは、メモリ404の利用可能な位置に新たに生成されてもよい(例えば、計算結果を記憶するため等)。
【0025】
IOデバイス408~412は、対応するIO動作を実行する機能ブロック及び/又はデバイスである。IOデバイス408~412の各々によって実行されるIO動作の特定の性質は、IOデバイスの性質に依存する。例えば、IOデバイス408~412は、ヒューマンインターフェースデバイス、ネットワークインターフェースデバイス、オーディオ/ビジュアル処理又は提供デバイス、GPU、センサデバイス、ディスクコントローラ、ペリフェラルコンポーネントインターフェース(PCI)デバイス、ユニバーサルシリアルバス(USB)デバイス等を含むことができ、各IOデバイスは、人間からの入力(例えば、キーボード、マウス等)の受信、ネットワーク上でのデータの受信又は送信等の関連する動作を実行する。IOデバイス408~412は、データ及び/又は命令を、電子デバイス400の他の機能ブロックに提供するか、それらからデータ及び/又は命令を消費する。例えば、いくつかの実施形態では、IOデバイス408~412は、ゲストオペレーティングシステム専用であるメモリ404内のメモリページ内のデータにアクセス(すなわち、読み取り、書き込み、無効化等)する。
【0026】
IOハブ414は、IOデバイス408~412と電子デバイス400の他の機能ブロック(例えば、プロセッサ402、メモリ404等)との間のインターフェースとなる入出力ハブの動作を実行する機能ブロックである。IOハブ414によって実行される動作には、IOデバイス408~412宛ての通信が目的のIOデバイスに到達すること、IOデバイス408~412からの通信が他の機能ブロックに適切に到達すること、他の機能ブロックがIOデバイス408~412による許容できないアクセスから保護されること及びその逆等を確実にするための動作が含まれる。いくつかの実施形態では、IOハブ414は、異なる通信規格を用いるバス間(例えば、ペリフェラルコンポーネントインターフェースエクスプレス(PCIe)バスとHyperTransport link(登録商標))の関連する通信をインターフェースし、したがって、変換する。
【0027】
IOハブ414は、IOデバイス408~412がメモリ404内のデータ及び/又は命令にアクセスすることを可能にする動作を実行する機能ブロックであるIOMMU424を含み、プロセッサ402と通信する。これらの実施形態では、メモリ404においてデータ及び命令がIOデバイス(例えば、IOデバイス408)によってアクセスされる場合、IOデバイスは、メモリアクセス要求(例えば、ダイレクトメモリアクセス要求又はDMA)をIOMMU424に送信する。次に、IOMMU424は、メモリアクセス要求を満たすために、対応する要求をメモリ404に送信する。例えば、いくつかの実施形態では、メモリアクセス要求に基づいてデータが取得される場合、IOMMU424は、メモリ404(又は、データがメモリ404に存在しない場合には大容量記憶装置406)からデータを取得し、データを、要求元のIOデバイスに転送する。いくつかの実施形態では、IOMMU424は、ページテーブル、変換ルックアサイドバッファ、及び/又は、IOデバイス408~412によって用いられる「仮想」若しくはローカルメモリアドレスを、データが実際に位置するメモリ404内の物理アドレスに変換するために用いられる他の機能ブロックを含む。
【0028】
記載された実施形態では、IOMMU424は、仮想マシンにおいてコア418~420によって実行されるゲストオペレーティングシステムと通信し、その逆も同様である。例えば、いくつかの実施形態では、IOMMU424(又は、IOMMU424を介したIOデバイス408~412)は、イベント及び周辺ページ要求(PPR)をゲストオペレーティングシステムに通信する。これらの実施形態では、IOMMU424は、誤ったデバイステーブルエントリ、IOページフォールト(IOデバイス408~412に代わってページテーブルウォークに対して)、IOMMU424ハードウェアエラー等のイベントを、メモリ404内の共有ゲストイベントログを介してゲストオペレーティングシステムに報告する。さらに、これらの実施形態では、IOMMU424は、PPRを、メモリ404内の共有ゲストPPRログを介して、周知のアドレス変換サービス、又は、メモリページサービス動作(すなわち、ゲストオペレーティングシステムによってアクセス可能なメモリ404内のページ上で動作を実行する又は当該ページに関連する動作を実行する)のためのATS標準を用いるように構成された周辺機器(IOデバイス)からゲストオペレーティングシステムに転送する。別の例として、いくつかの実施形態では、ゲストオペレーティングシステムは、コマンドをIOMMU424に通信する。これらの実施形態では、ゲストオペレーティングシステムは、コマンドをIOMMU424に発行して、IOMMU424及び/又はIOデバイス408~412を制御し、例えば、完了待ち(IOMMU424が続行する前に、前のコマンドを強制的に完了させるコマンドバリアとして機能する)、デバイステーブルエントリの無効化、IOMMU424変換ルックアサイドバッファエントリの無効化等を、メモリ404内の共有ゲストコマンドバッファを介して行う。本明細書に記載するように、IOMMU424は、通信においてゲストドメインID及び/又はデバイスIDをホストドメインID及び/又はデバイスIDに変換し、その逆も同様である。
【0029】
いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムへのインターフェースを提供し、このインターフェースは、IOMMU424と通信するために用いられるメモリマップ位置、レジスタ等を含む。例えば、いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムが値を書き込むことができ、その値がIOMMU424によって受信されるメモリマップ入出力(MMIO)メモリ位置のセットを提供する。いくつかの実施形態では、インターフェースが仮想化される。すなわち、メモリ位置、レジスタ等は、ゲストオペレーティングシステムによって想定されるように値を記憶するために用いられるのではなく、単にIOMMU424によって用いられるものとして提示される。これらの実施形態では、IOMMU424は、ゲストオペレーティングシステムからインターフェースを介して値を受信することができるが、バッキングストア426及び/又はメモリ404内の他の位置を用いて、ゲストオペレーティングシステム毎にメモリ位置、レジスタ等の別々のコピーを記憶する。ゲストオペレーティングシステム及び他のエンティティ(例えば、プロセッサ402等)と通信するためにIOMMU424によってアクセスされるメモリについては、以下により詳細に説明する。
【0030】
ゲストメモリ428は、ゲストオペレーティングシステムによって用いられるデータ及び情報を記憶するために、対応するゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム302)によって用いられるメモリ404の一部(例えば、メモリの1つ以上のページ)である。一般に、ゲストメモリ428は、ゲストオペレーティングシステム及び/又は他のエンティティによって用いられる任意の形式のデータ及び情報を記憶するために、ゲストオペレーティングシステムによって用いることができる。いくつかの実施形態では、ゲストメモリ428は、特定のエンティティのみがゲストメモリ428にアクセスできるように保護される。いくつかの実施形態では、ゲストメモリ428は、ゲストオペレーティングシステムとIOMMUとの間の通信のために用いられるデータ構造(例えばテーブル、リスト等)である、ゲストイベントログ、ゲスト周辺ページ要求(PPR)ログ及びゲストコマンドバッファ等の構造を記憶するために用いられる。ゲストイベントログ、ゲスト周辺ページ要求(PPR)ログ及びゲストコマンドバッファについては、以下により詳細に説明する。
【0031】
いくつかの実施形態では、通信経路は、要素間の矢印線で示すように、電子デバイス400の様々な機能ブロック(プロセッサ402、メモリコントローラ416、メモリ404等)の間で結合されている。通信経路は、1つ以上のバス、ワイヤ、ガイド、及び/又は、場合によってはコントローラ、ファブリック要素(スイッチ、ルータ等)、回路要素等と共に他の接続部を含む。通信経路は、コマンド、データ、制御信号及び/又は他の情報を機能ブロック間でルーティングするために用いられる。例えば、いくつかの実施形態において、コヒーレントバスファブリック又は相互接続は、IOハブ414、プロセッサ402(例えば、MMU422)、メモリ404間で結合される。電子デバイス400内のいくつかの通信経路は、明確にするために図4に示されていないことに留意されたい。
【0032】
いくつかの実施形態において、図3の電子デバイスハードウェア310は、プロセッサ402及びメモリ404等の機能ブロック及びデバイスを含み、IOデバイスハードウェア314は、IOデバイス408~412等の機能ブロック及びデバイスを含む。これらの実施形態では、図3のIOMMU312及び図4のIOMMU424は、同じ動作を実行する。
【0033】
電子デバイス400は、特定の数及び構成の要素(例えば、プロセッサ402、メモリ404等の機能ブロック及びデバイス)及び通信経路を用いて示されている。しかしながら、電子デバイス400は、説明のために簡略化されており、いくつかの実施形態では、異なる数又は構成の要素及び/又は通信経路が電子デバイス400に存在する。例えば、電子デバイス400は、電力サブシステム、ディスプレイ等を含むことができる。一般に、電子デバイス400は、本明細書に記載された動作を実行するのに十分な要素及び通信経路を含む。
【0034】
電子デバイス400は、計算動作を実行する任意の電子デバイスであってもよいし、それに含まれてもよい。例えば、電子デバイス400は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、スマートフォン、サーバ、人工知能装置、仮想又は拡張現実装置、ネットワーク機器、玩具、音響映像機器、家電製品、コントローラ、乗り物等、及び/又は、これらの組み合わせ等の電子デバイスであってもよいし、これらに含まれてもよい。
【0035】
(IOMMUによってアクセスされるメモリの一部)
いくつかの実施形態では、IOMMUは、本明細書に記載された動作を実行するために、メモリ(例えば、メモリ404)の異なる部分のデータ及び情報にアクセスする。これらの実施形態のいくつかにおいて、メモリの一部は、IOMMUバッキングストア(例えば、IOMMUバッキングストア426)、ゲストメモリ(例えば、ゲストメモリ428)、及び/又は、ハイパーバイザメモリを含む。図5は、いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図である。図5は、一例として示されているが、いくつかの実施形態では、メモリ及び/又はメモリの異なる部分は、異なるタイプ及び/又は構成の情報を記憶する。一般に、メモリは、本明細書に記載された動作を可能にするのに十分な情報を含む。
【0036】
図5に示すように、IOMMUバッキングストア500は、ID変換テーブル502を含む。一般に、ID変換テーブル502は、ゲストオペレーティングシステムからIOMMUへの通信においてゲストドメインID及び/又はデバイスIDをホストドメインID及び/又はデバイスIDに変換するために、又は、IOMMUからゲストオペレーティングシステムへの通信の場合にはその逆に変換するために、IOMMUによって用いられる情報を含む。いくつかの実施形態では、ID変換テーブル502は、ドメインIDマッピングテーブル504として示されるドメインID用のテーブルと、デバイスIDマッピングテーブル506として示されるデバイスID用のテーブルと、の別々のテーブルを含むが、別々のテーブルは必須ではない(したがって、全ての変換が単一のテーブルに含まれ得る)。ドメインIDマッピングテーブル504は、エントリのセットを含み、各エントリは、指定されたホストドメインIDに関連する又は関係するゲストドメインIDの識別又は指標を記憶するために用いられる。デバイスIDマッピングテーブル506は、エントリのセットを含み、各エントリは、指定されたホストデバイスIDに関連する又は関係するゲストデバイスIDの識別又は指標を記憶するために用いられる。動作中、ゲスト又はホストドメインID及び/又はデバイスIDが通信において変換される場合、IOMMUは、ID変換テーブル502(すなわち、ドメインIDマッピングテーブル504及び/又はデバイスIDマッピングテーブル506)でルックアップを実行して、対応する変換を取得する。
【0037】
また、IOMMUバッキングストア500は、ゲストコントロール508も含む。一般に、ゲストコントロール508は、電子デバイスにおけるゲストオペレーティングシステムのためのインターフェースレジスタ及び制御レジスタに記憶された又はそこからの値のコピーを含む。ゲストコントロール508は、サポートされているゲストオペレーティングシステム毎に、IOMMUとそのゲストオペレーティングシステムとの間の対話を制御するゲストインターフェースレジスタ及び/又はゲストオペレーティングシステム制御レジスタ(又は、少なくともその中の値)のコピーを含む。例えば、ゲストコントロール508は、ゲストオペレーティングシステム毎に、ゲストオペレーティングシステムに対するドメインID及び/又はデバイスIDマッピングをIOMMUに通信するために用いられるマップ制御レジスタを含むことができる。別の例として、ゲストコントロール508は、ゲストオペレーティングシステム毎に、コマンド制御レジスタ、イベント制御レジスタ、並びに、そのゲストがコマンドバッファ、イベントログ及びPPRログと相互作用する方法、及び/又は、ゲストがどのように構成されかを指示するPPR制御レジスタを含むことができる。
【0038】
また、IOMMUバッキングストア500は、ゲストメモリマップ入出力(MMIO)510も含む。一般に、ゲストMMIO510は、メモリ404のゲスト部分(例えば、ゲストメモリ428)におけるゲストオペレーティングシステムに対するバッファ及びログ(例えば、ゲストコマンドバッファ、ゲストイベントログ、ゲストPPRログ等)にアクセスするために用いられるポインタ及び制御情報を含む。より具体的には、ゲストMMIO510は、サポートされているゲストオペレーティングシステム毎に、メモリ404のゲスト部分におけるバッファ及びログのアクセスを生成/制御するために使用される値の別々のコピーを含む。例えば、いくつかの実施形態では、IOMMUは、2Nのゲストオペレーティングシステムをサポートする(対話、通信を処理等することができる)。ここで、N=10、16、又は、別の値であり、したがって、ゲストMMIO510は、値の最大2Nのコピーを含み、その各々は、サポートされているゲストオペレーティングシステムに対するものである。記載された実施形態では、アクセスを制御するために用いられる値は、既存のデバイスのIOMMU MMIOレジスタに記憶されている値と同様であるが、値の別々のセットが、サポートされているゲストオペレーティングシステム毎に保持され、そのゲストオペレーティングシステムのメモリ404のゲスト部分を指す(既存のデバイス内のIOMMU内の単一のコピーではない)。例えば、いくつかの実施形態では、ゲストMMIO510は、サポートされているゲストオペレーティングシステム毎に、メモリの対応するゲスト部分におけるゲストコマンドバッファ、ゲストイベントログ及びゲストPPRログの位置を示すコマンド、イベント、PPRのヘッド及び/又はテールポインタ、並びに、ビットが、コマンド、イベント、PPRに対するゲストオペレーティングシステムの機能及び構成を制御又は識別する制御レジスタを含む。
【0039】
ゲストメモリ512は、ゲストオペレーティングシステムに対するゲストイベントログ514、ゲスト周辺ページ要求(PPR)ログ516及びゲストコマンドバッファ518を含む。一般に、ゲストイベントログ514、ゲスト周辺ページ要求ログ516及びゲストコマンドバッファ518は、IOMMU及び/又はゲストオペレーティングシステムによるアクセスのための対応するイベント、PPRリクエスト、コマンドを記憶するために用いられるメモリ構造(例えば、リスト、テーブル、バッファ等)である。動作中、IOMMUは、ゲストメモリ512のゲストイベントログ514及びゲストPPRログ516の対応するログを介して、イベント及びPPRをゲストオペレーティングシステムに通信する。さらに、ゲストオペレーティングシステムは、ゲストメモリ512のゲストコマンドバッファ518の対応するコマンドバッファを介して、コマンドをIOMMUに通信する。いくつかの実施形態では、電子デバイス400でアクティブな各ゲストオペレーティングシステムは、そのゲストオペレーティングシステムによって用いられ、且つ、IOMMUによってアクセス可能なゲストイベントログ、周辺ページ要求ログ、ゲストコマンドバッファを含む、対応する別々のゲストメモリ(すなわち、メモリ404におけるいくつかのページ)に関連付けられている。このことは、ゲストメモリ512の後ろの追加のゲストメモリ520~522として図5に示されている。
【0040】
ハイパーバイザメモリ524は、デバイステーブル526を含む。一般に、デバイステーブル526は、電子デバイスに関連する及び/又は結合するデバイス(実際の/物理的なデバイス又は仮想デバイスであり得る)に関するデバイス関連情報が記憶されるテーブルである。デバイステーブル526は、エントリのセットを含み、各エントリは、ページテーブル及び割り込みテーブルへのポインタ、制御及び構成値、機能インジケータ、モードインジケータ、ドメインID、セキュリティ情報及び設定等のような、対応するデバイスに関する情報を記憶するのに使用可能である。さらに、記載された実施形態では、既存のデバイステーブルとは異なり、デバイステーブル526の各エントリは、デバイスID及びデバイスと通信するか、関与するか、又は、他の方法で関連付けられているゲストオペレーティングシステムのゲスト識別子を含む。動作中、IOMMUは、デバイスに関する情報を決定するためにデバイステーブルを用いることに加えて、デバイスID及び/又はゲスト識別子を、ゲストデバイスIDをホストデバイスIDに変換するために用いる。
【0041】
いくつかの実施形態では、IOMMUバッキングストア500、ゲストメモリ512、ハイパーバイザメモリ524のうちいくつか、及び/又は、それらの一部は、連続的ではなく、その代わりに、メモリの異なる領域又は位置に記憶される。例えば、ゲストイベントログ514のベースアドレス(及び、ひいてはゲストイベントログ自体)は、ゲストPPRログ516から離れたメモリ内に配置されてもよい。したがって、ゲストイベントログ514は、図5に示すように、ゲストPPRログ516に隣接しない場合がある。
【0042】
いくつかの実施形態では、IOMMUは、IOMMUによってアクセスされるメモリ内の様々なデータ及び情報のメモリ内の位置へのポインタ、参照、及び/又は、その他の指標を含むプライベートアドレスマップを含む。例えば、IOMMUプライベートアドレスマップは、ゲストイベントログ514、ゲストPPRログ516等に対するメモリ内のベースアドレスへのポインタを含むことができる。これらの実施形態では、IOMMUは、メモリ内のデータ及び情報にアクセスする前に、データ及び情報の位置についてプライベートアドレスマップ内でルックアップを実行する。
【0043】
いくつかの実施形態では、IOMMUバッキングストア500及び/又はその一部(制御ビット等)は、IOMMUを介して(例えば、IOMMUに要求を送信することによって)電子デバイス400の他のエンティティによってアクセスされる、又は、他のエンティティによってアクセス不能である。例えば、IOMMUバッキングストア500内のデータ及び情報の少なくとも一部は、他のエンティティによって、IOMMU内の又はIOMMUに関連する、対応する(IOMMUによって保護された)メモリマップ入出力レジスタへの書き込み及びそこからの読み取りを介してアクセスされてもよい。
【0044】
(IOMMUとゲストオペレーティングシステムの通信)
記載された実施形態では、IOMMU(例えば、IOMMU424)は、IOMMU(又は、それによってサービスされるIOデバイス)とゲストオペレーティングシステムとの間の通信において、ドメインID及びデバイスIDを翻訳又は変換する。図6は、いくつかの実施形態による、IOMMU602によって処理されるゲストオペレーティングシステム600とIOMMU602との間の通信を示すブロック図である。図6には、いくつかの要素が特定の構成で示されているが、他の実施形態では、異なる数又は構成の要素を用いる。一般に、記載された実施形態では、IOMMU602は、本明細書に記載された動作を可能にするのに十分な要素を含むか、それらにアクセスする。図6では、いくつかの要素が点線/点で示されている。これらの要素は、メモリ(例えば、IOMMUバッキングストア500、ゲストメモリ512等)に記憶されており、IOMMU602、ゲストオペレーティングシステム600、及び/又は、他のエンティティによって、典型的なメモリアクセス技術を用いてアクセスされるログ、バッファ等である。いくつかの実施形態では、ゲストオペレーティングシステム600、IOMMU602及びハイパーバイザ604は、図3のゲストオペレーティングシステム302、IOMMU312及びハイパーバイザ306と同様に構成されるが、これは必須要件ではない。
【0045】
図6に示すように、既存システムについて図2に示すものとは異なり、記載された実施形態では、IOMMU602及びゲストオペレーティングシステム600は、互いにより直接的に通信する。言い換えれば、IOMMU602及びゲストオペレーティングシステム600は、メモリ(すなわち、ゲストオペレーティングシステム600に対するメモリのゲスト部分(例えば、ゲストメモリ428))内のゲストイベントログ514、ゲストPPRログ516及びゲストコマンドバッファ(BUFF)518を介して互いに通信する。さらに、ゲストオペレーティングシステム600及びIOMMU602は、ゲストコントロール508及びゲストMMIO510を用いて、通信がどのように実行されるかを指示する。例えば、いくつかの実施形態では、IOMMU602は、ゲストMMIO510内のポインタを用いて、ゲストオペレーティングシステム600に対するゲストイベントログ514、ゲストコマンドバッファ518及びゲストPPRログ516のメモリ内の位置を決定する。ハイパーバイザ604は、これらの通信を完了するための動作の一部又は全てに介入せず、そうでなければ関与しない。例えば、ハイパーバイザ604は、これらの通信に対するドメインID及びデバイスIDの変換、ゲストMMIO510のポインタへのアクセス、並びに/又は、メモリのゲスト部分のバッファ及びログへのアクセス等の動作を実行しない。代わりに、IOMMU602は、これらの動作を実行する。IOMMU602は、ドメインID及びデバイスIDを変換し、ゲストMMIO510等から情報を取得するので、記載された実施形態は、ゲストオペレーティングシステム600とIOMMU602との間の通信の少なくとも一部を処理するためにハイパーバイザ604を用いることを回避する。このことは、通信がより迅速に完了することを意味し、プロセッサ402及びメモリ404等への負荷が軽減される。
【0046】
動作中、例としてコマンドを用いると、ゲストオペレーティングシステム600は、invalidate_IOMMU_pagesコマンドをゲストコマンドバッファ518に書き込み、コマンドにより、IOMMU602は、コマンドのドメインIDによって指定されるようなIOMMU変換キャッシュのエントリの範囲を無効化させる。言い換えると、ゲストオペレーティングシステムは、メモリの対応するゲスト部分にメモリ書き込みを実行して、ゲストコマンドバッファ518の次のオープン/利用可能なエントリを、invalidate_IOMMU_pagesコマンドに対するデータ(すなわち、コマンドを表すビット)を含めるように更新する。次に、ゲストオペレーティングシステム600は、書き込みコマンドをIOMMUに送信して、対応するIOMMU MMIOレジスタのコマンドバッファテールポインタを更新(例えば、進める、増加する等)して、ゲストオペレーティングシステム600がコマンドバッファにコマンドを書き込んだことを示す。IOMMU602は、コマンドバッファテールポインタのゲストオペレーティングシステム600の書き込みを、例えば、対応するゲストコマンドバッファ内のアドレスへの書き込みの監視、バッファテールポインタの値の変化の検出、ゲストオペレーティングシステム600からの書き込みコマンドの受信等を介して検出する。コマンドバッファテールポインタの書き込みを検出すると、IOMMU602は、コマンドバッファテールポインタの値を用いて、メモリのゲスト部分のコマンドバッファからコマンドを取得する。ゲストオペレーティングシステム600は、IOMMU602によって用いられるホストドメインIDと異なる可能性があるコマンドのゲストドメインIDを用いるので、IOMMU602が最初にドメインIDを変換せずにコマンドを用いた場合、IOMMU602は、誤った範囲のエントリを無効化し得る。したがって、IOMMU602は、ID変換テーブル(例えば、ID変換テーブル502)を用いて、コマンドのゲストドメインIDに関連するホストドメインIDを決定する。次に、IOMMUは、ゲストコマンドバッファ518からコマンドを取得し、コマンドのゲストドメインIDをホストドメインIDに置き換える。次に、IOMMU602は、コマンドを処理する。これにより、IOMMU602は、ホストドメインIDによって示される、その変換キャッシュ内のエントリの範囲を無効化する。IOMMU602は、ゲストPPRログ516及びゲストイベントログ514へのIOMMU602の書き込みについて、少なくともいくつかの同様の動作を行う。例えば、IOデバイスからのPPR要求内のホストデバイスIDをゲストデバイスIDに置き換えたり、ゲストドメインID及び/又はデバイスIDをイベントに配置する等である。
【0047】
ハイパーバイザ604は、ゲストドメインIDのホストドメインIDへの変換に関与しないが、ハイパーバイザ604とゲストオペレーティングシステム600及び/又はIOMMU602は、ゲストオペレーティングシステム600とIOMMU602との間の通信に関連する通信を別々に交換してもよく、ハイパーバイザ604は、それ以外の方法で、通信がゲストオペレーティングシステム600及び/又はIOMMU602によって適切に処理されることを確実にすることに関与してもよい。例えば、ハイパーバイザ604は、ゲストオペレーティングシステム600が通信を行っている(例えば、コマンドバッファに書き込んでいる)ことを直接的に(通信を介して)又は間接的に(メモリアクセスの監視を介して)判別することができ、ゲストオペレーティングシステム600及び/又はIOMMU602への割り込みのシグナリング、フラグとして機能する共有メモリ位置の更新等の動作を実行することができる。
【0048】
(IOMMUでドメインID及びデバイスIDを変換するプロセス)
図7は、いくつかの実施形態による、IOMMU(例えば、IOMMU424)でゲストオペレーティングシステムからの通信を処理するためのプロセスを示すフローチャートである。より具体的には、図7は、IOMMUで通信を処理する前に、ゲストオペレーティングシステムからの通信においてゲストドメインID及び/又はデバイスIDをホストドメインID及び/又はデバイスIDに変換する動作を示す。図7に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される動作には、異なる動作、異なる順序で実行される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実行される動作が含まれる。
【0049】
図7に示す動作は、ゲストドメインID及び/又はデバイスIDを有するゲストオペレーティングシステムからIOMMUで受信した任意の通信に適用される。例えば、IOMMUは、コマンドバッファ(例えば、ゲストメモリ512におけるゲストコマンドバッファ518内)のコマンドを受信することができる。一般に、IOMMUは、ゲストオペレーティングシステムからの様々な形式の通信においてゲストドメインID及び/又はデバイスIDをホストドメインID及び/又はデバイスIDに変換することができる。
【0050】
図7の動作は、IOMMUが、ゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム600)から、ゲストドメインID及び/又はゲストデバイスIDを含む通信を受信することで始まる(ステップ700)。上述したように、仮想化の効果として、ゲストオペレーティングシステムは、IOMMU及び/又はIOデバイス等の電子デバイス(又は、「ホスト」)ハードウェアによって使用されるドメインID及びデバイスIDのセットと部分的に又は完全に異なるドメインID及びデバイスIDのセットを用いる。(ドメインID及び/又はデバイスIDは、部分的に又は完全に一致する可能性があるが、特に多数のIOデバイス、仮想デバイス、ドメイン等を含む電子デバイスでは、その可能性が低くなる)。IOMMU及び他の電子デバイスハードウェアから見ると、ゲストオペレーティングシステムから受信した通信には、誤ったドメインID及び/又はデバイスIDが含まれる可能性がある。
【0051】
次に、IOMMUは、ID変換テーブル(例えば、ID変換テーブル502)の各エントリを用いて、ゲストドメインIDに関連するホストドメインID及び/又はゲストデバイスIDに関連するホストデバイスIDを決定する(ステップ702)。例えば、IOMMUは、ID変換テーブルにおいて、ゲストドメインIDを用いて、対応するホストドメインIDをルックアップすることができる。いくつかの実施形態において、ID変換テーブルは、別々のドメインIDマッピング及びデバイスIDマッピングテーブル(例えば、ドメインIDマッピングテーブル504及びデバイスIDマッピングテーブル506)を含み、ルックアップは、IOMMUによって適宜実行されることに留意されたい。
【0052】
次に、IOMMUは、通信において、ゲストドメインIDをホストドメインIDに、及び/又は、ゲストデバイスIDをホストデバイスIDに置き換える(ステップ704)。この動作について、IOMMUは、更新されたビットを通信に書き込むことによって、通信自体を変更し得る。或いは、IOMMUは、ホストドメインID及び/又はデバイスIDの値を内部レジスタ、メモリ位置等に書き込む又は設定することができ、それによって、通信のその後の処理のためにIOMMUをプリセット又は準備する。
【0053】
次に、IOMMUは通信を処理する(ステップ706)。この動作について、IOMMUは、ステップ704に関して説明したように、ゲストドメインID及び/又はデバイスIDを置き換えた後ではあるが、特定の通信の処理に関連する典型的な動作を実行する。例えば、通信がコマンドの場合、IOMMUはコマンドを処理することができる。
【0054】
図8は、いくつかの実施形態による、ゲストオペレーティングシステム宛ての入出力(IO)デバイスからの通信をIOMMU(例えばIOMMU424)において処理するプロセスを示すフローチャートである。より具体的には、図8は、通信をゲストオペレーティングシステムに転送する前に、IOデバイスからの通信内のホストデバイスIDをゲストデバイスIDに変換する動作を示す。図8に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される動作には、異なる動作、異なる順序で実行される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実行される動作が含まれる。
【0055】
図8に示す動作は、ホストデバイスIDを有するIOデバイスからIOMMUで受信した任意の通信に適用される。例えば、IOMMUは、IOデバイスから周辺ページ要求(PPR)を受信してもよい。一般に、IOMMUは、IOデバイスからの様々な形式の通信においてホストデバイスIDをゲストデバイスIDに変換することができる。さらに、図8は、通信におけるホストデバイスIDを含むIOデバイスに限定されているが、IOデバイスからの通信におけるホストドメインIDのために、すなわち、そのような通信内のホストドメインIDをゲストドメインIDに変換するために、同様の動作を実行することができる。
【0056】
図8の動作は、IOMMUが、IOデバイス(例えば、IOデバイス408)から、ホストデバイスIDを含む通信を受信することで開始する(ステップ800)。上述したように、仮想化の効果として、IOデバイスは、ゲストオペレーティングシステムによって用いられるデバイスIDのセットと部分的に又は完全に異なるデバイスIDのセットを用いる。ゲストオペレーティングシステムから見ると、IOMMUにおいてIOデバイスから受信した通信には、誤ったデバイスIDが含まれる可能性がある。
【0057】
次に、IOMMUは、デバイステーブル(例えば、デバイステーブル526)のエントリを用いて、ホストデバイスIDに関連するゲストデバイスIDを決定する(ステップ802)。例えば、IOMMUは、ホストデバイスIDを用いて、デバイステーブルにおいて、対応するゲストデバイスIDをルックアップすることができる。
【0058】
次に、IOMMUは、通信において、ホストデバイスIDをゲストデバイスIDに置き換える(ステップ804)。この動作について、いくつかの実施形態では、IOMMUは、更新されたビットを通信に書き込むことによって、通信自体を変更する。或いは、いくつかの実施形態では、IOMMUは、内部レジスタ、メモリ位置等を、ゲストドメインIDの値で書き込み又は設定し、それによって、ゲストデバイスIDをゲストオペレーティングシステムに示し、通信を処理するようにゲストオペレーティングシステムを準備する。
【0059】
次に、IOMMUは、通信をゲストオペレーティングシステムに転送する(ステップ806)。この動作について、いくつかの実施形態では、IOMMUは、対応するゲストメモリ内のPPRログ等のメモリ位置に通信を記憶することによって、通信を転送する。また、IOMMUは、通信がゲストオペレーティングシステムによって処理される準備ができていることをゲストオペレーティングシステムにシグナリング又は示すことができる。その後、ゲストオペレーティングシステムは、通信を処理する。すなわち、特定の通信の処理に関連する典型的な動作を実行する。
【0060】
図9は、いくつかの実施形態による、ゲストオペレーティングシステム宛ての通信をIOMMU(例えばIOMMU424)において生成するプロセスを示すフローチャートである。より具体的には、図9は、通信をゲストオペレーティングシステムに送信する前に、対応するゲストデバイスID及び/又はドメインIDをIOMMUからの通信に含めるための動作を示す。図9に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されることに留意されたい。他の実施形態によって実行される動作には、異なる動作、異なる順序で実行される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実行される動作が含まれる。
【0061】
図9に示す動作は、ゲストドメインID及び/又はデバイスIDを含み、ゲストオペレーティングシステム宛てとする、IOMMUによって生成される任意の通信に適用される。例えば、IOMMUは、イベント(例えば、ハードウェア障害、ページフォールト等)の発生に基づいて、ゲストオペレーティングシステムにイベントを報告するために通信を生成することができる。一般に、IOMMUは、ゲストオペレーティングシステム宛ての様々な形式の通信にゲストドメインID及び/又はデバイスIDを含めることができる。
【0062】
図9の動作は、IOMMUがゲストオペレーティングシステム宛ての通信を生成することで開始する(ステップ900)。上述したように、仮想化の効果として、IOMMUは、ゲストオペレーティングシステムによって用いられるドメインID及びデバイスIDのセットと部分的に又は完全に異なるドメインID及びデバイスIDのセットを用いる。ゲストオペレーティングシステムから見ると、ドメインID及びデバイスIDのIOMMUの表示(view)を用いてIOMMUによって生成された通信には、誤ったドメインID及びデバイスIDが含まれる可能性がある。通信を生成する場合、IOMMUは、ID変換テーブル(例えば、ID変換テーブル502)の各エントリを用いて、対応するIOデバイスに対してゲストオペレーティングシステムによって用いられるゲストデバイスID及び/又はドメインIDを決定する(ステップ902)。例えば、IOMMUは、対応するIOデバイスに対するホストデバイスIDを用いて、ID変換テーブルにおいて、対応するゲストドメインID及び/又はデバイスIDをルックアップする。次に、IOMMUは、ゲストドメインID及び/又はデバイスIDを通信に配置する(ステップ904)。この動作について、いくつかの実施形態では、IOMMUは、ドメインID及び/又はデバイスIDの記録を保持する通信内のフィールド等において、対応するビットを書き込む。
【0063】
次に、IOMMUは、通信をゲストオペレーティングシステムに転送する(ステップ906)。この動作について、いくつかの実施形態では、IOMMUは、通信をメモリ位置(例えば、対応するゲストメモリ内のイベントログ等)に記憶することによって、通信を転送する。また、IOMMUは、通信がゲストオペレーティングシステムによって処理される準備ができていることをゲストオペレーティングシステムにシグナリング又は示すことができる。その後、ゲストオペレーティングシステムは、通信を処理する。すなわち、特定の通信の処理に関連する典型的な動作を実行する。
【0064】
(デバイスID及びドメインIDを変換するようにIOMMUを構成するプロセス)
図10は、いくつかの実施形態による、ドメインID及びデバイスIDを変換するようにIOMMU(例えばIOMMU424)を構成するプロセスを示すフローチャートである。より具体的には、図10は、ホストドメインID及び/又はデバイスIDとゲストドメインID及び/又はデバイスIDとの間のマッピングを示すID変換テーブルのエントリを設定する動作を示す。図10に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されることに留意されたい。他の実施形態によって実行される動作には、異なる動作、異なる順序で実行される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実行される動作が含まれる。例えば、図10では、ハイパーバイザが特定の動作を実行するものとして記載されているが、代替の実施形態では、別のエンティティ(例えば、仮想マシン、電子デバイスオペレーティングシステム、ゲストオペレーティングシステム、ソフトウェアアプリケーション等)が動作を実行する。
【0065】
図10の動作は、IOMMUが、ハイパーバイザから、ホストドメインIDに関連するゲストドメインID、又は、ホストデバイスIDに関連するゲストデバイスIDを示す通信を受信することで開始する(ステップ1000)。例えば、いくつかの実施形態では、ハイパーバイザは、ドメインID又はデバイスID間の関連付けに関する情報を、IOMMUによって提供されるMMIO位置に書き込み、IOMMUは、MMIO位置への書き込みを検出し、及び/又は、MMIO位置が書き込まれたという指標をハイパーバイザから受信する。次に、IOMMUは、ID変換テーブル(例えば、ID変換テーブル502)のエントリを更新して、ゲストドメインIDがホストドメインIDにマッピングされていること、又は、ゲストデバイスIDがホストデバイスIDにマッピングされていることを示す情報を含める(ステップ1002)。
【0066】
いくつかの実施形態では、IOMMUは、ゲストオペレーティングシステムによって認識される各ゲストドメインID及び/又はデバイスID、並びに、対応するホストドメインID及び/又はデバイスIDを示す通信を受信し、ハイパーバイザが送信する。例えば、いくつかの実施形態では、起動時又は別の時点で、ハイパーバイザは、ゲストオペレーティングシステムによって認識される全てのゲストドメインID及び/又はデバイスIDを巡回し、ホストドメインID及び/又はデバイスIDへのマッピングを決定し、各ドメインID又はデバイスIDのペアリング/マッピングに関する情報を通信する。
【0067】
いくつかの実施形態では、電子デバイス(例えば、電子デバイス100及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書で説明する動作の一部又は全てを実行する。より具体的には、電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み出し、説明した動作を実行する際にコードを実行し及び/又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(例えば、eDRAM、RAM、SRAM、DRAM、DDR4 SDRAM等)、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等)を含む揮発性メモリ及び/又は不揮発性メモリを含むことができるが、これらに限定されない。
【0068】
いくつかの実施形態では、1つ以上のハードウェアモジュールが、本明細書で説明する動作を実行する。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理装置(CPU)、特定用途向け集積回路(ASIC)チップ、ニューラルネットワークプロセッサ若しくはアクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)、計算ユニット、組み込みプロセッサ、グラフィックプロセッサ(GPU)/グラフィックコア、パイプライン、加速処理ユニット(APU)、機能ブロック、コントローラ、圧縮・解凍機能ブロック、及び/又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(プログラムコード、ファームウェア等)を実行することによって動作を実行するように構成された1つ以上の汎用回路を含む。
【0069】
いくつかの実施形態では、本明細書で説明する構造及びメカニズム(例えば、電子デバイス400、IOMMU424、及び/又は、これらの一部)の一部又は全てを表すデータ構造は、データベース、又は、電子デバイスによって読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用することができる他のデータ構造を含む、非一時的なコンピュータ可読記憶媒体に記憶されている。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタトランスファレベル(RTL)記述であってもよい。記述は、合成ツールによって読み出されてもよく、合成ツールは、記述を合成して、上述した構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを、合成ライブラリから生成することができる。次に、ネットリストは、配置され、ルーティングされ、マスクに適用される幾何学的形状を記述するデータセットが生成され得る。次いで、上述した構造及びメカニズムに対応する1つ以上の半導体回路(例えば、集積回路)を製造するために、様々な半導体製造ステップでマスクが使用され得る。或いは、コンピュータアクセス可能記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット又はグラフィックデータシステム(GDS)IIデータであってもよい。
【0070】
この説明では、変数又は不特定の値(すなわち、値の特定のインスタンスを持たない、値の一般的な説明)は、N等の文字で表されている。同様の文字が本説明の他の箇所で使用され得るが、本明細書で使用されるように、各場合における変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値の一部又は全てに対して、異なる変数量及び値が存在してもよい。言い換えると、この説明において変数及び不特定値を表すために使用されるN及び他の文字は、必ずしも互いに関連するわけではない。
【0071】
本明細書で使用される「等(et cetra)」又は「等(etc.)」という表現は、「及び/又は」のケース、すなわち、「等」が関連するリスト内の要素のうち「少なくとも1つ」に相当するものを提示することを意図している。例えば、「電子デバイスは、第1の動作、第2の動作等を実行する」という文において、電子デバイスは、第1の動作、第2の動作、及び、他の動作のうち少なくとも1つを実行する。さらに、「等」に関連するリスト内の要素は、一組の実施例の中の単なる例であり、実施例の少なくともいくつかは、いくつかの実施形態では現れない場合がある。
【0072】
実施形態の上記の説明は、例示及び説明のためにのみ提示されている。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを、意図していない。したがって、当業者は、多くの変更及び変形が明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10