JP2022534977A - 入出力メモリ管理ユニットレジスタのコピーのゲストオペレーティングシステムへの提供 - Google Patents

入出力メモリ管理ユニットレジスタのコピーのゲストオペレーティングシステムへの提供 Download PDF

Info

Publication number
JP2022534977A
JP2022534977A JP2021570831A JP2021570831A JP2022534977A JP 2022534977 A JP2022534977 A JP 2022534977A JP 2021570831 A JP2021570831 A JP 2021570831A JP 2021570831 A JP2021570831 A JP 2021570831A JP 2022534977 A JP2022534977 A JP 2022534977A
Authority
JP
Japan
Prior art keywords
iommu
operating system
guest operating
mmio
guest
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.)
Granted
Application number
JP2021570831A
Other languages
English (en)
Other versions
JP7564830B2 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2022534977A publication Critical patent/JP2022534977A/ja
Application granted granted Critical
Publication of JP7564830B2 publication Critical patent/JP7564830B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

電子デバイスは、ゲストオペレーティングシステムを実行するプロセッサと、入出力管理ユニット(IOMMU)と、IOMMUバッキングストアを記憶するメインメモリと、を備える。IOMMUバッキングストアは、サポートされているゲストオペレーティングシステムのセット内の各ゲストオペレーティングシステムのIOMMUメモリマップ入出力(MMIO)レジスタのセットの個別のコピーを含む。IOMMUは、ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信する。IOMMUは、ゲストオペレーティングシステムに関連付けられたIOMMUバッキングストア内の所定のIOMMU MMIOレジスタのコピー内のデータへの対応するアクセスを実行する。【選択図】図7

Description

(関連技術)
一部の電子デバイス(例えば、サーバやデスクトップコンピュータ等)は、入出力(IO)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化は、電子デバイス上又は電子デバイス内の中間エンティティが、電子デバイス上で実行中のソフトウェアのインスタンス(例えば、アプリケーションプログラム等)に対して、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるというような錯覚を与えるが、実際には、中間エンティティが、ソフトウェアのインスタンスが行うアクセスをインターセプト/リダイレクト又は他の方法で補助することを含む。例えば、一般的な中間エンティティの1つに「仮想マシン」がある。仮想マシンは、電子デバイスハードウェアを抽象化し、電子デバイスハードウェアへの既知のインタフェースをエミュレート又は提示するソフトウェアエンティティであり、それによって、ソフトウェアのインスタンスが様々なタイプ及び構成の電子デバイス上で実行することが可能になる。電子デバイスハードウェアの構成は、ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある。一部の電子デバイスでは、仮想マシンは、「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。ゲストオペレーティングシステムは、生産性アプリケーション、データベース等のソフトウェアの他のインスタンスを実行するための環境を提供する。
一部の電子デバイスでは、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化すること、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視及び支援すること、仮想マシンを終了又はクローズすること等を行うことができる。図1は、仮想マシン及びハイパーバイザを示すブロック図である。図1に見られるように、3つの仮想マシン(VM)100があり、その各々の下で、ゲストオペレーティングシステム(ゲストOS)102、データベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)104が実行される。仮想マシン100は、ハイパーバイザ106と通信し、ハイパーバイザ106は、ホストオペレーティングシステム(ホストOS)108と仮想マシン100との間をインタフェースする。ホストオペレーティングシステム108は、電子デバイスハードウェア110とハイパーバイザ106との間のインタフェースを提供する。さらに、ハイパーバイザ106は、仮想マシン100と入出力管理ユニット(IOMMU)112との間のインタフェースを提供し、IOMMU112は、IOデバイスハードウェア114のメモリ管理ユニット及びコントローラとして機能する。
ハイパーバイザによって実行される動作は、電子デバイスハードウェアとゲストオペレーティングシステム(より広義には仮想マシン)との通信の処理を含む。例えば、ハイパーバイザは、ゲストオペレーティングシステムと入出力管理ユニット(IOMMU)との間の通信を翻訳し、リダイレクトし、又は、他の方法で支援し得る。ハイパーバイザによって処理される通信には、IOMMUによるペリフェラルページリクエスト(PPR)ログ及びイベントログの書き込み、並びに、ゲストオペレーティングシステムによるコマンドバッファの書き込み等の通信が含まれる。PPRログ、イベントログ及びコマンドバッファの書き込みについては、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00で詳しく説明されており、その全体が参照により本明細書に援用される。
図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宛ての通信を記憶するために用いられるメモリ内の構造(例えば、リスト、テーブル等)である。また、要素は、IOMMU112内のIOMMUメモリマップド入出力(MMIO)ポインタ/ステータスレジスタ(REGS)214を含み、これは、様々なIOMMU112構造へのポインタ及びIOMMU112に関連するステータス情報を記憶するためのIOMMU112内のレジスタのセットである。
動作中、例としてコマンドを用いると、ゲストオペレーティングシステム102は、IOMMU112宛てのコマンドをゲストコマンドバッファ202に(すなわち、ゲストオペレーティングシステム102からのコマンドが記憶されるメモリ内のバッファの次の利用可能な位置に)書き込む。図2の点線で示すように、ハイパーバイザ106は、ゲストオペレーティングシステムのゲストコマンドバッファ202への書き込みを検出し、コマンドを取得及び処理して(例えば、コマンド内のゲストドメインID及び/又はゲストデバイスIDを対応するホストドメインID及び/又はデバイスIDで置き換える等)、処理したコマンドをIOMMUコマンドバッファ210に記憶する。また、ハイパーバイザ106は、IOMMUコマンドバッファ210のIOMMU MMIOポインタ/ステータスレジスタ214内のテールポインタを更新して、新たに書き込まれたコマンドを示す(例えば、IOMMUコマンドバッファ210の次の位置へのテールポインタをインクリメントする)。次に、IOMMU112は、コマンドバッファヘッドポインタを使用して、IOMMUコマンドバッファ210からコマンドを取り出し、コマンドを実行し、これにより、IOMMU112は、対応するアクションを実行する。ハイパーバイザ106は、IOMMU112がIOMMU周辺ページリクエストログ208及びIOMMUイベントログ212に書き込むために同様の操作を実行する(例えば、ホストデバイスIDをゲストデバイスIDに置き換える等)。メモリの読み出し及び書き込み、ポインタの更新、並びに、ハイパーバイザ106によって実行される他の操作はレイテンシが長いため、ハイパーバイザ106を使用してゲストオペレーティングシステム102とIOMMU112との間に介入すると、通信の処理が遅れるだけでなく、プロセッサがビジー状態になり、電子デバイスのメモリバスにトラフィックが追加される。
仮想マシン及びハイパーバイザを示すブロック図である。 ハイパーバイザによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。 いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。 いくつかの実施形態による、電子デバイスを示すブロック図である。 いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図である。 いくつかの実施形態による、IOMMU MMIOレジスタのゲストコピーに記憶された値を示すブロック図である。 いくつかの実施形態による、IOMMUによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。 いくつかの実施形態による、ゲストオペレーティングシステムに代わってIOMMUがIOMMUバッキングストア内のIOMMU MMIOレジスタのコピーにアクセスするプロセスを示すフローチャートである。 いくつかの実施形態による、ゲストオペレーティングシステムがIOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに書き込み、IOMMUが読み出すプロセスを示すフローチャートである。 いくつかの実施形態による、IOMMUがIOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに書き込み、ゲストオペレーティングシステムが読み出すプロセスを示すフローチャートである。
図面及び説明を通じて、同様の符号は同じ図面要素を指す。
以下の説明は、当業者が、記載された実施形態を製造及び使用することを可能にするために示され、特定の用途及びその要件に照らして提供される。記載された実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的原理は、他の実施形態及び用途に適用されてもよい。したがって、記載された実施形態は、示された実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
(用語)
以下の説明では、様々な用語が実施形態を説明するために用いられる。以下は、これらの用語の簡略化された一般的な説明である。この用語は、明確且つ簡潔にするために、本明細書に記載されていない重要な追加特徴を有していてもよく、したがって、この説明は用語を限定することを意図していないことに留意されたい。
機能ブロック:機能ブロックは、集積回路要素、ディスクリート回路要素等のように、相互に関連する1つ以上の回路要素のグループ、集合、及び/又は、セットを指す。回路要素は、回路要素が少なくとも1つの特性を共有するという点で「相互に関連」している。例えば、相互に関連している回路要素は、特定の集積回路チップ又はその一部に含まれ、その上に組み立てられ、又は、他の方法で結合され得、所定の機能(計算又は処理機能、メモリ機能等)の性能に関与し得、共通の制御要素及び/又は共通のクロックによって制御され得る等である。機能ブロックは、単一の回路要素(例えば、単一の集積回路論理ゲート)から数百万又は数十億の回路要素(例えば、集積回路メモリ)に至るまでの任意の数の回路要素を含むことができる。
(仮想化、仮想マシン及びハイパーバイザ)
記載された実施形態は、メモリ、入出力(IO)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化は、一般に、電子デバイス上又は電子デバイス内の中間エンティティが、電子デバイス上で実行中のソフトウェアのインスタンスに対して、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるというような錯覚を与えるが、実際には、中間エンティティが、ソフトウェアのインスタンスが行うアクセスをインターセプト/リダイレクト又は他の方法で補助することを含む。例えば、ソフトウェアのインスタンスは、中間エンティティによって、電子デバイスの実際のデバイスレジスタ、メモリ位置等としてソフトウェアのインスタンスに出現するが中間エンティティによって示される単なるコピーである電子デバイスレジスタ、メモリ位置、電子デバイス設定、及び、他の機能ブロックのセットを用いて提示され得る。この場合、中間エンティティは、電子デバイスハードウェアのコピーのアクセスを受信、傍受(インターセプト)又は他の方法で取得し、ソフトウェアのインスタンスに代わって実際の電子デバイスハードウェアと対応する相互作用を行う。電子デバイスハードウェアの仮想化は、様々な電子デバイスが様々な構成の電子デバイスハードウェア、電子デバイスハードウェアの様々なアドレス、位置又は識別子等を用いることを可能にし、ソフトウェアのインスタンスが、電子デバイスハードウェアへの同一のインタフェースを用いて中間エンティティを介して示される等の多くの利点がある。さらに、中間エンティティは、ソフトウェアの所定のインスタンスによる電子デバイスハードウェアのアクセスを許可するかブロックするかを決定することができ、したがって、電子デバイスハードウェアの仮想化により、電子デバイスハードウェア(又は、その一部)及び/又は電子デバイス上で実行中のソフトウェアのインスタンスの保護を可能にする。上述したようにアクセスを制御することによって、中間エンティティは、ソフトウェアのいくつかのインスタンス間で電子デバイスハードウェアを共有し、及び/又は、ソフトウェアの個々のインスタンスに、電子デバイスハードウェアの一部への排他的アクセスを提供することができる。
記載された実施形態では、中間エンティティは、「仮想マシン」を含む。仮想マシンは、電子デバイスハードウェアを抽象化し、実際の又はエミュレートされた電子デバイスハードウェアへの既知のインタフェースをソフトウェアのインスタンスに示すソフトウェアエンティティである。ハードウェアを抽象化することによって、ソフトウェアのインスタンスが、様々なタイプ及び構成の電子デバイスハードウェア(ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある)上で実行されることを可能にする。記載された実施形態では、仮想マシンは、「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。ゲストオペレーティングシステムは、アプリケーション、データベース等の他のソフトウェアプログラムを実行するための環境を提供する。
記載された実施形態では、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化すること、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視及び支援すること、仮想マシンを終了又はクローズすること等を行い得る。図3は、いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。図3に見られるように、3つの仮想マシン(VM)300があり、これらの各々の下で、ゲストオペレーティングシステム(ゲストOS)302及びデータベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)304が実行される。仮想マシン300は、ハイパーバイザ306と通信し、ハイパーバイザ306は、ホストオペレーティングシステム(ホストOS)308と仮想マシン300との間をインタフェースする。ホストオペレーティングシステム308は、電子デバイスハードウェア310とハイパーバイザ306との間のインタフェースを提供する。既存の電子デバイスについて図1に示したものとは異なり、図3において、IOMMU312は、ハイパーバイザ306が介在することなく、ゲストオペレーティングシステム302とIOデバイスハードウェア314との間を直接インタフェースする(IOMMU312とゲストオペレーティングシステム302との間の太い線で示されるように)。したがって、既存の電子デバイスとは異なり、記載された実施形態では、ハイパーバイザ306は、本明細書で説明するように、ゲストオペレーティングシステム302とIOMMU312との間の通信を処理するための動作の少なくとも一部の実行に関与しない。しかしながら、ハイパーバイザ306とIOMMU312との間の線で示すように、IOMMU312とハイパーバイザ306との間で特定の通信が行われることに留意されたい。さらに、いくつかの実施形態では、ホストオペレーティングシステム308が存在せず、ハイパーバイザ306が電子デバイスハードウェア310とより直接的に通信することに留意されたい。
(概要)
記載された実施形態では、電子デバイスは、プロセッサと、メモリ(例えば、メインメモリ)と、いくつかの入出力(IO)デバイス(例えば、ネットワークインタフェースデバイス、ディスクコントローラ等)と、プロセッサとIOデバイスとの間をインタフェースする入出力メモリ管理ユニット(IOMMU)と、を含む。プロセッサは、ハイパーバイザ、1つ以上の仮想マシン、及び、仮想マシンにおけるゲストオペレーティングシステムを実行する。各ゲストオペレーティングシステムは、そのゲストオペレーティングシステムがアクセスするデータ及び情報を記憶するために予約されたメモリのゲスト部分(例えば、連続若しくは非連続の領域又はメモリのブロック)が割り当てられる。記載された実施形態では、IOMMUは、ゲストオペレーティングシステムとIOMMUとの間の通信を処理するための動作を実行する。
ゲストオペレーティングシステムとIOMMUとの間の通信を処理する一環として、既存のシステムのように特定のバッファとログの単一のIOMMUコピーを使用する代わりに、IOMMUは、メモリの対応するゲスト部分にある各ゲストオペレーティングシステムのバッファとログに直接アクセスする。つまり、IOMMUは、既存のシステムのIOMMU(及び、ハイパーバイザ)によって維持されているバッファとログのコピーの代わりに、各ゲストオペレーティングシステムによって使用されるバッファとログの個別のコピーにアクセスする。例えば、いくつかの実施形態では、各ゲストオペレーティングシステムは、メモリの対応するゲスト部分において、コマンドバッファ、イベントログ及び/又は周辺ページリクエスト(PPR)ログを含むバッファ及びログを維持する。また、IOMMUは、メモリのゲストオペレーティングシステムの部分にある各ゲストオペレーティングシステムのバッファ及びログから情報を読み取り、情報をバッファやログに書き込む。例えば、IOMMUは、メモリの特定のゲストオペレーティングシステムのゲスト部分にある特定のゲストオペレーティングシステムのコマンドバッファからコマンドを読み取ることができる。
IOMMUがバッファとログの単一コピーを使用する既存のシステムでは、IOMMUは、バッファとログに関する情報を記憶するために使用されるIOMMUメモリマップ入出力(MMIO)レジスタのセットを維持する。例えば、IOMMU MMIOレジスタは、ポインタのセット(例えば、各ログやバッファのヘッドポインタ及び/又はテールポインタ等)や、バッファとログ用の制御値(例えば、各ログやバッファのサイズインジケータ及び/又は構成値等)等の情報を含む。説明する実施形態では、IOMMUは、メモリの異なるゲスト部分(すなわち、異なるメモリアドレスで、場合によっては異なる制御値で)のバッファ及びログに別々にアクセスするので、IOMMU MMIOレジスタの単一のセットは不十分である。したがって、説明する実施形態では、IOMMUは、メモリの対応するゲスト部分のバッファ及びログにアクセスするために使用される、ゲストオペレーティングシステム毎のIOMMU MMIOレジスタのセットの個別のコピーを備える。言い換えると、いくつかの実施形態では、N個のゲストオペレーティングシステムがシステムによってサポートされる場合、IOMMUは、IOMMU MMIOレジスタ(すなわち、バッファ及びログのポインタ及び制御値のセット)のN個のコピーを、ゲストオペレーティングシステム毎に1つ備える。
考えられる全てのゲストオペレーティングシステム(非常に大きくなる可能性がある)のバッファとログを追跡するために必要なレジスタの数が多いため、IOMMU MMIOレジスタの個別のコピーは、IOMMUに物理的に存在しない。代わりに、ゲストオペレーティングシステム用のIOMMU MMIOレジスタのセットの個別のコピーが、IOMMUのデータと情報を記憶するために予約されているメインメモリの一部であるIOMMUバッキングストアに記憶される。記載された実施形態では、IOMMUは、IOMMU MMIOレジスタを「仮想化」するか、ゲストオペレーティングシステム(及び、場合によってはハイパーバイザ等の他のエンティティ)に、ゲストオペレーティングシステムが指定されたIOMMU MMIOアドレスを介してIOMMU MMIOレジスタにアクセスできるように示す。ただし、IOMMU MMIOアドレスにはレジスタがない。代わりに、IOMMUは、ゲストオペレーティングシステムによるIOMMU MMIOアドレスのIOMMU MMIOレジスタへのアクセスをインターセプトし、IOMMU MMIOレジスタのアクセスをIOMMUバッキングストア内の対応する位置にリダイレクトする。例えば、いくつかの実施形態では、IOMMU MMIOアドレスは、通信をIOMMUバッキングストア内のIOMMUレジスタのコピーにマッピングするために使用される、IOMMUインタフェース/アパーチャ内のIOMMUによって提供されるアドレスの特定の範囲からのアドレスを含む。
いくつかの実施形態では、動作中、IOMMUは、ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信する。例えば、メモリの対応するゲスト部分にあるゲストオペレーティングシステムのコマンドバッファにコマンドを書き込んだ後に、ゲストオペレーティングシステムは、メモリ書き込みを送信して、IOMMUによって受信されるコマンドバッファテールポインタを更新することができる。IOMMUは、ゲストオペレーティングシステムに関連するIOMMUバッキングストア内の所定のIOMMU MMIOレジスタのコピー内のデータへの対応するアクセスを実行する。例を続けると、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムのコマンドバッファテールポインタレジスタのコピーに、更新されたデータ(例えば、コマンドバッファテールポインタの新しいアドレス)を書き込むことができる。いくつかの実施形態では、ゲストオペレーティングシステムがIOMMU MMIOレジスタのコピーにアクセスすることに加えて、IOMMU自体がバッキングストア内のIOMMU MMIOレジスタのコピーを更新する。例えば、いくつかの実施形態では、IOMMUは、先入れ先出しの順序でゲストコマンドバッファからのコマンドを処理した後に、ゲストオペレーティングシステムのコマンドバッファヘッドポインタ(及び/又は、他のコマンドバッファ値)を更新することができる。
いくつかの実施形態では、IOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに関連するアドレスの仮想化により、様々なエンティティが、IOMMU MMIOレジスタのコピーがIOMMUバッキングストアにある物理アドレス IOMMU MMIOレジスタのコピーが配置されている物理アドレスを計算、変換又は他の方法で決定するための操作を実行する。これらの実施形態のいくつかでは、所定のゲストオペレーティングシステムは、対応するゲスト仮想アドレスを使用してIOMMU MMIOレジスタにアクセスし、これは、所定のゲストオペレーティングシステムによって生成又は提供されるIOMMU MMIOレジスタのローカルアドレスである。ゲスト仮想アドレスは、プロセッサのメモリ管理ユニット(MMU)によって(例えば、1つ以上のページテーブルを使用して)IOMMU MMIOアドレスに変換される。つまり、IOMMU MMIOレジスタのゲストコピーをマップするために使用される範囲のIOMMUのMMIOアパーチャ/インタフェース内にあるシステム物理アドレスに変換される。IOMMU MMIOアドレスは、多数のゲストオペレーティングシステムで使用されるように仮想化されているため、IOMMUは、次に、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタの所定のコピーのアドレスを決定する。このプロセスでは、IOMMUは、先ず、所定のゲストオペレーティングシステムの識別子と、MMUによって提供されるシステム物理アドレスと、に基づいて、アルゴリズム、テーブル等を使用して、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのIOMMU仮想アドレスを計算する。次に、IOMMUは、1つ以上のページテーブルを使用して、IOMMU仮想アドレスをシステム物理アドレスに変換し、この場合、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーがIOMMUバッキングストアに記憶される。
いくつかの実施形態では、ゲストオペレーティングシステムによって、IOMMU MMIOレジスタ内のデータの更新を検出すると、IOMMUは、1つ以上の対応する処理操作を実行する。例えば、いくつかの実施形態では、ゲストオペレーティングシステムが、対応するIOMMU MMIOレジスタ内のそのゲストオペレーティングシステムのコマンドバッファテールポインタ(すなわち、バッキングストア内のそのコピー)を更新したことを検出することに応じて、IOMMUは、ゲストオペレーティングシステムのコマンドバッファからコマンドを取り出し、コマンドを処理する。
いくつかの実施形態では、ハイパーバイザは、IOMMUバッキングストアに記憶されたゲストオペレーティングシステム用のIOMMU MMIOレジスタのセットの個別のコピーに含まれていない特定のIOMMU MMIOレジスタをエミュレートする。例えば、いくつかの実施形態では、ハイパーバイザは、IOMMUのIOMMU制御MMIOレジスタ、変換テーブルベースアドレスMMIOレジスタ等をエミュレートする。これらの実施形態では、ハイパーバイザは、エミュレートされたIOMMU MMIOレジスタのゲストオペレーティングシステムアクセスをインターセプトし、IOMMUを介して対応するアクセスを実行する。
いくつかの実施形態では、IOMMUは、IOMMU MMIOレジスタのいくつかの個別のセットからのIOMMU MMIOレジスタのコピーからの情報のコピーを、IOMMUのローカルキャッシュメモリに記憶する。例えば、IOMMUは、各々のゲストオペレーティングシステムの個々のIOMMU MMIOレジスタから最近使用された値又は頻繁に使用された値のコピーを記憶する場合がある。
IOMMUは、メモリのゲスト部分のバッファとログにアクセスするために使用されるIOMMU MMIOレジスタのセットの個別のコピーを提供することによって、メモリのゲスト部分のバッファとログに直接アクセスできるようにする。これは、既存のシステムと同様に、IOMMUが、バッファとログのアクセスを処理するためにハイパーバイザに依存する必要がないということを意味する。これらの操作をハイパーバイザ(ソフトウェアで実装)からIOMMU(ハードウェアで実装)に移すことで、操作が高速化され、必要なメモリシステム帯域幅が少なくなり、プロセッサの計算機能ブロックへの負荷が少なくなり、電子デバイスの全体的なパフォーマンスが向上する。電子デバイスのパフォーマンスの向上が、ユーザの満足度を高めることにつながる。
(電子デバイス)
図4は、いくつかの実施形態による、電子デバイス400を示すブロック図である。図4に見られるように、電子デバイス400は、プロセッサ402と、メモリ404と、大容量記憶装置406と、入出力(IO)デバイス408~412と、入出力(IO)ハブ414と、メモリコントローラ416と、を含む。
プロセッサ402は、電子デバイス400において計算動作を実行する機能ブロックである。プロセッサ402は、2つのコア418~420を含み、これらの各々は、中央処理装置(CPU)コア、グラフィックスプロセッシングユニット(GPU)コア、組み込みプロセッサ、特定用途向け集積回路(ASIC)、及び/又は、他の計算機構等の1つ以上の計算メカニズムを含む。また、プロセッサ402は、メモリ管理ユニット(MMU)422を含み、これは、アドレス変換に関連する動作(例えば、ページテーブルウォーク、変換ルックアサイドバッファルックアップ等)、コア418~420によるメモリアクセスのためのメモリアクセス保護等を実行する機能ブロックである。
メモリ404は、電子デバイス400内のメモリ(例えば、「メイン」メモリ)の動作を実行する機能ブロックである。メモリ404は、ダイナミックランダムアクセスメモリ(DRAM)、ダブルデータレート同期DRAM(DDR SDRAM)、及び/又は、電子デバイス400内の他の機能ブロックによって用いられるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上のメモリ回路と、メモリ回路に記憶されたデータ及び命令のアクセス(例えば、読み取り、書き込み、チェック、削除、無効化等)を処理する制御回路と、を含む。
大容量記憶装置406は、電子デバイス400の他の機能ブロックによって用いられるデータ及び命令を記憶するための大容量不揮発性記憶要素の動作を実行する機能ブロック及び/又はデバイスである。大容量記憶装置406は、大容量半導体メモリ(例えば、フラッシュメモリ等)、ディスクドライブ(ハードドライブ等)、光学ドライブ等であってもよく、又は、これらを含むことができる。大容量記憶装置406に記憶されたデータ及び命令のコピーは、電子デバイス400内の他の機能ブロックによって用いられるために、取得されメモリ404に記憶される。例えば、いくつかの実施形態において、データ及び/又は命令は、所定のサイズ(例えば、4kB、2MB等)のブロック又は「ページ」で大容量記憶装置406から取得され、ページは、他の機能ブロックによるアクセスのためにメモリ404に記憶される。さらに、ページは、メモリ404内の利用可能な位置に新たに生成され得る(例えば、計算結果を記憶するために)。
IOデバイス408~412は、対応するIO動作を実行する機能ブロック及び/又はデバイスである。IOデバイス408~412の各々によって実行されるIO動作の特定の性質は、IOデバイスの性質に依存する。例えば、IOデバイス408~412は、ヒューマンインタフェースデバイス、ネットワークインタフェースデバイス、オーディオ/ビジュアル処理又は提供デバイス、GPU、センサデバイス、ディスクコントローラ、ペリフェラルコンポーネントインタフェース(PCI)デバイス、ユニバーサルシリアルバス(USB)デバイス等を含むことができ、各IOデバイスは、人間からの入力(例えば、キーボード、マウス等)の受信、ネットワーク上でのデータの受信又は送信等の関連する動作を実行する。IOデバイス408~412は、データ及び/又は命令を、電子デバイス400の他の機能ブロックに提供するか、これらからデータ及び/又は命令を消費する。例えば、いくつかの実施形態では、IOデバイス408~412は、ゲストメモリ428内のメモリページ内のデータ(つまり、所定のゲストオペレーティングシステム用に予約されているメモリの一部)にアクセス(すなわち、読み取り、書き込み、無効化等)する。
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(登録商標)との間)の関連する通信をインタフェースし、変換又は翻訳する。
IOハブ414は、IOMMU424を含み、IOMMU424は、IOデバイス408~412がメモリ404内のデータ及び/又は命令にアクセスすることを可能とする動作を実行し、プロセッサ402(及び、それによって実行されるゲストオペレーティングシステム)と通信する等の機能ブロックである。これらの実施形態では、データ及び命令がメモリ404においてIOデバイス(例えば、IOデバイス408)によってアクセスされる場合、IOデバイスは、メモリアクセスリクエスト(例えば、直接メモリアクセスリクエスト又はDMA)をIOMMU424に送信する。次に、IOMMU424は、メモリアクセスリクエストを満たすために、対応するリクエストをメモリ404に送信する。例えば、いくつかの実施形態では、メモリアクセスリクエストに基づいてデータが取得される場合、IOMMU424は、メモリ404(又は、データがメモリ404に存在しない場合には大容量記憶装置406)からデータを取得し、データを、リクエストしているIOデバイスに転送する。いくつかの実施形態では、IOMMU424は、ページテーブル、変換ルックアサイドバッファ、及び/又は、IOデバイス408~412によって用いられる「仮想」若しくはローカルメモリアドレスを、データが実際に位置するメモリ404の物理アドレスに変換するために用いられる他の機能ブロックを含む。
記載された実施形態では、IOMMU424は、仮想マシン内のコア418~420によって実行されるゲストオペレーティングシステムと通信し、その逆も同様である。例えば、いくつかの実施形態では、IOMMU424(又は、IOMMU424を介したIOデバイス408~412)は、イベント及びペリフェラルページリクエスト(PPR)をゲストオペレーティングシステムに通信する。これらの実施形態では、IOMMU424は、IOページフォールト(IOデバイス408~412に代わってページテーブルウォークに対して)、IOMMU424ハードウェアエラー等のイベントを、メモリ404内の共有ゲストイベントログを介してゲストオペレーティングシステムに報告する。さらに、これらの実施形態では、IOMMU424は、メモリ404内の共有ゲストPPRログを介して、メモリページ提供動作のために(すなわち、ゲストオペレーティングシステムによってアクセス可能な、メモリ404におけるページに関する動作を実行するために)、PPRを、周知のアドレス変換サービス又はATS規格を用いる周辺機器(IOデバイス)からゲストオペレーティングシステムに転送する。別の例として、いくつかの実施形態では、ゲストオペレーティングシステムは、コマンドをIOMMU424に通信する。これらの実施形態では、ゲストオペレーティングシステムは、メモリ404内の共有ゲストコマンドバッファを介して、完了待機(IOMMU424が続行する前に、前のコマンドを完了させるコマンドバリアとして機能する)、デバイステーブルエントリの無効化、IOMMU424変換ルックアサイドバッファエントリの無効化等のコマンドをIOMMU424に発行して、IOMMU424及び/又はIOデバイス408~412を制御する。
いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムへのインタフェースを提供し、このインタフェースは、IOMMU424と通信するために用いられるメモリマップ位置、レジスタ等を含む。例えば、いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムが値を書き込むことができるメモリマップド入出力(MMIO)メモリロケーションのセットを提供し、値がIOMMU424によって受信されるようにする。いくつかの実施形態では、インタフェースが仮想化される。すなわち、メモリ位置、レジスタ等は、ゲストオペレーティングシステムによって想定されるように、値を記憶するために用いられず、代わりに、IOMMU424によって単に提示されるのみである。これらの実施形態では、IOMMU424は、ゲストオペレーティングシステムからインタフェースを介して値を受信し得るが、ゲストオペレーティングシステム(例えば、IOMMU MMIOアドレス等にアドレス指定される)毎に、メモリ位置、レジスタ等の値の別々のコピーを記憶するために、IOMMUバッキングストア426及び/又はメモリ404内の他の位置を用いる。ゲストオペレーティングシステム及び他のエンティティ(例えば、プロセッサ402等)と通信するためにIOMMU424によってアクセスされるメモリについては、以下により詳細に説明する。
いくつかの実施形態では、図4に示されていないが、IOMMU424は、IOMMU424のデータ又は情報のコピーを記憶するために使用されるローカルキャッシュメモリを含む。例えば、いくつかの実施形態では、キャッシュメモリは、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタの値のセット及び/又はそこからの個々の値等のように、IOMMUバッキングストア426からの最近使用され又は頻繁に使用されるデータのコピーを記憶するために使用される。キャッシュメモリは、IOMMUバッキングストア426よりも小さいため、IOMMUバッキングストア426に記憶されたデータ及び情報の一部(及び、おそらくはごく一部)を記憶するための容量(すなわち、メモリ位置)のみを有し得る。
ゲストメモリ428は、ゲストオペレーティングシステムによって用いられるデータ及び情報を記憶するために、対応するゲストオペレーティングシステムによって用いられるメモリ404の一部(例えば、1つ以上の連続又は非連続のページ又はメモリのブロック)である。一般に、ゲストメモリ428は、ゲストオペレーティングシステム及び/又は他のエンティティによって用いられる任意の形式のデータ及び情報を記憶するために、ゲストオペレーティングシステム及び/又は他のエンティティによって用いることができる。いくつかの実施形態では、ゲストメモリ428が保護され、特定のエンティティのみがゲストメモリ428にアクセスすることが許可されている。例えば、対応するゲストオペレーティングシステム、ハイパーバイザ、セキュリティプロセッサ、及び/又は、電子デバイス400内のオペレーティングシステムは、ゲストメモリ428のアクセスを、対応するゲストオペレーティングシステム並びに指定された他のデバイス及び/又は機能ブロックに制限することによって、ゲストメモリ428を「保護」することができる。いくつかの実施形態では、ゲストメモリ428は、暗号化されるか、さもなければ、望ましくないエンティティによってアクセス不能にされる。いくつかの実施形態では、ゲストメモリ428は、ゲストイベントログ、ゲストペリフェラルページリクエスト(PPR)ログ、及び、ゲストコマンドバッファを記憶するために用いられ、ゲストコマンドバッファは、ゲストオペレーティングシステムとIOMMUとの間で通信するために用いられるデータ構造(例えばテーブル、リスト等)である。ゲストイベントログ、ゲストペリフェラルページリクエスト(PPR)ログ、及び、ゲストコマンドバッファについては、以下により詳細に説明する。
いくつかの実施形態では、通信経路は、要素間の矢印線で示すように、電子デバイス400の様々な機能ブロック(プロセッサ402、メモリコントローラ416、メモリ404等)の間で結合される。通信経路には、1つ以上のバス、ワイヤ、ガイド、及び/又は、場合によってはコントローラ、ファブリック要素(スイッチ、ルータ等)、回路要素等とともに他の接続部が含まれる。通信経路は、コマンド、データ、制御信号、及び/又は、他の情報を機能ブロック間でルーティングするために用いられる。例えば、いくつかの実施形態において、コヒーレントバスファブリック又は相互接続部は、IOハブ414、プロセッサ402(例えば、MMU422)、メモリ404間で結合される。電子デバイス400内の一部の通信経路は、明確にするために図4に示されていないことに留意されたい。
いくつかの実施形態において、図3の電子デバイスハードウェア310は、プロセッサ402及びメモリ404等の機能ブロック及びデバイスを含み、IOデバイスハードウェア314は、IOデバイス408~412等の機能ブロック及びデバイスを含む。これらの実施形態では、図3のIOMMU312及び図4のIOMMU424は、同じ動作の少なくとも一部を実行する。
電子デバイス400は、特定の数及び構成の要素(例えば、プロセッサ402、メモリ404等の機能ブロック及びデバイス)及び通信経路を用いて示される。しかしながら、電子デバイス400は、例示の目的で簡略化されており、いくつかの実施形態では、電子デバイス400は、異なる数又は構成の要素及び/又は通信経路が存在する。例えば、電子デバイス400は、電力サブシステム、ディスプレイ等を含み得る。一般に、電子デバイス400は、本明細書で記載された動作を実行するのに十分な要素及び通信経路を含む。
電子デバイス400は、計算動作を実行する任意の電子デバイスとすることができ、又は、それに含まれ得る。例えば、電子デバイス400は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、スマートフォン、サーバ、人工知能装置、仮想若しくは拡張現実装置、ネットワーク機器、玩具、音響映像機器、家庭用電気製品、コントローラ、乗り物等、及び/又は、これらの組み合わせ等の電子デバイスであってもよいし、これに含まれ得る。
(IOMMUによってアクセスされるメモリの一部)
いくつかの実施形態では、IOMMUは、本明細書に記載される動作を実行するために、メモリ(例えば、メモリ404)の異なる部分におけるデータ及び情報にアクセスする。これらの実施形態のいくつかにおいて、メモリの一部は、IOMMUバッキングストア(例えば、IOMMUバッキングストア426)、ゲストメモリ(例えば、ゲストメモリ428)、及び/又は、ハイパーバイザメモリを含む。図5は、いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図である。図5は一例として示されているが、いくつかの実施形態では、メモリ及び/又はメモリの異なる部分は、異なるタイプ及び/又は構成の情報を記憶する。一般に、メモリは、本明細書で記載された動作を可能にするのに十分な情報を含む。
図5に見られるように、IOMMUバッキングストア500は、ID変換テーブル502を含む。一般に、ID変換テーブル502は、ゲストオペレーティングシステムからIOMMUへの通信においてゲストドメインID及び/又はデバイスIDを、ホストドメインID及び/又はデバイスIDに翻訳又は変換するために、又は、その逆にIOMMUからゲストオペレーティングシステムへの通信のために、IOMMUによって用いられる情報を含む。ドメインID及びデバイスIDは、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00でより詳しく説明されており、上述したように参照によって本明細書に援用される。
いくつかの実施形態では、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)でルックアップを実行して、対応する翻訳又は変換を取得する。
IOMMUバッキングストア500は、ゲストコントロール508も含む。一般に、ゲストコントロール508は、電子デバイスにおけるゲストオペレーティングシステムのためのインタフェースレジスタ及び制御レジスタに記憶され又はそこからの値のコピーを含む。ゲストコントロール508は、サポートされているゲストオペレーティングシステム毎に、IOMMUとそのゲストオペレーティングシステムとの間の相互作用を制御するゲストインタフェースレジスタ及び/又はゲストオペレーティングシステム制御レジスタ(又は、少なくともその中の値)のコピーを含む。例えば、ゲストコントロール508は、ゲストオペレーティングシステム毎に、ゲストオペレーティングシステムに対するドメインID及び/又はデバイスIDマッピングをIOMMUに通信するために用いられるマップ制御レジスタを含み得る。
IOMMUバッキングストア500は、ゲストメモリマップド入出力(MMIO)510をさらに含む。一般に、ゲストMMIO510は、メモリ404のゲスト部分(例えば、ゲストメモリ428)におけるゲストオペレーティングシステムに対するバッファ及びログ(例えば、ゲストコマンドバッファ、ゲストイベントログ及びゲストPPRログ)にアクセスするために用いられるポインタ及び制御情報を含む。より具体的には、ゲストMMIO510は、サポートされているゲストオペレーティングシステム毎に、メモリ404のゲスト部分におけるバッファ及びログのアクセスを制御するために使用される値のコピーを含む。例えば、いくつかの実施形態では、IOMMUは、2ゲストオペレーティングシステムをサポートする(相互作用、通信を処理等することができる)。ここで、N=10、16、又は、別の値であり、ゲストMMIO510は、値の最大2のコピーを含み、各々はサポートされているゲストオペレーティングシステムに対するものである。記載された実施形態では、アクセスを制御するために用いられる値は、既存のデバイスのIOMMU MMIOレジスタに記憶されている値と同様であるが、値の別々のセットが、サポートされているゲストオペレーティングシステムごとに保持され、メモリ404のゲストオペレーティングシステムのゲスト部分を指す(既存のデバイスでのIOMMUにおける単一のコピーではない)。
図6は、いくつかの実施形態による、ゲストMMIO510に記憶された値を示すブロック図である。図6の例では、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタの単一の完全なセットの値が、単一の完全な値のセットの上下にある2つの隣接するIOMMU MMIOレジスタのセットの一部の値とともに示されている。図6は、上述したように、いくつかの実施形態では、IOMMUバッキングストア426が、所定のゲストオペレーティングシステムに関連付けられた値の各セットである複数の個別の値のセットを含むことを説明するために、このように示されている。図6は例として示されており、いくつかの実施形態では、ゲストMMIO510は、異なる値又は異なる構成の値を記憶する。一般に、ゲストMMIO510及び/又は別のエンティティは、本明細書で説明しているように、メモリのゲスト部分にてバッファ及びログにアクセスするのに十分な情報を記憶する。
ゲストMMIO510の値の各セットの値は、通常、ゲストコマンド(CMD)バッファ、ゲストイベントログ及びゲストオペレーティングシステムのゲストPPRログに関連付けられた値にグループ化できる。ゲストコマンドバッファの場合、値には、コマンドテールポインタ600が含まれ、これは、メモリ404の対応するゲスト部分におけるゲストコマンドバッファの終了、テール若しくは最近書き込まれたエントリを示すポインタ又は他の参照である。言い換えれば、コマンドテールポインタ600は、メモリアドレス等のポインタ又は参照(例えば、メモリ404のゲスト部分の物理アドレスのビットの一部又は全て)を保持しており、これは、テール又はコマンドバッファの最後に書き込まれたエントリが何処にあるかを示す。ゲストコマンドバッファの値には、コマンドヘッドポインタ602も含まれ、これは、コマンドバッファのヘッド又はベース、すなわち、コマンドバッファが開始する場所、及び/又は、メモリ404の対応するゲスト部分のバッファリングされたコマンドが開始する場所を示すポインタ又は他の参照である。ゲストコマンドバッファの値には、コマンド長604がさらに含まれ、これは、エントリ数やバイト数等のように、コマンドバッファの現在のサイズ又は最大サイズを示す値である。ゲストコマンドバッファの値は、ゲストオペレーティングシステム及び/又はメモリ404の対応するゲスト部分のコマンドバッファの構成を示すいくつかのビット(又は、それらの組み合わせ)を含むビットのセット又はシーケンスであるコマンド制御606をさらに含む。例えば、いくつかの実施形態では、コマンド制御606は、特定のコマンドバッファ関連の割り込みが有効であるかどうか、コマンドバッファリング又は処理が有効(又は、無効/停止)であるかどうか、何れのタイプのコマンドが存在するか又は存在できるかを示すビットを含む。例えば、いくつかの実施形態では、コマンド制御606は、参照により本明細書に組み込まれる、AMD I/O Virtualization Technology (IOMMU) Specification, rev. 3.00に記載されているものと同様のコマンドバッファの制御値を含み、これは、上記のように、CmdWaitInt、CmdBufRun、CmdWaitInteEn、CmdBufEn、及び/又は、他の値等がある。
いくつかの実施形態では、コマンドバッファは、コマンドヘッドポインタ602を使用して、読み取られるコマンドバッファ、及び/又は、コマンドバッファの最後/最後に追加されたエントリ/位置を示すコマンドテールポインタ600を示す(コマンドバッファに1つのコマンドのみが記憶されている場合には、同じエントリ/位置にすることができる)ことにより、リングバッファとして実装される。これらの実施形態では、コマンドがエントリから読み取られて処理されると、コマンドヘッドポインタ602及びコマンドテールポインタ600が同じエントリ又は隣接するエントリを示すまで、コマンドヘッドポインタ602が1つのエントリだけ進められる。これらの実施形態のいくつかでは、コマンド長604は、コマンドバッファの最大長を記憶する。ポインタを使用してリングバッファを実装することは、当技術分野で一般的に知られており、したがって、本明細書では詳細に説明しない。
イベントログの場合、ゲストMMIO510の値、すなわち、イベントテールポインタ608、イベントヘッドポインタ610、イベント長612及びイベント制御614は、メモリ404の対応するゲスト部分のイベントログへのアクセス用に値が使用されるが、コマンドバッファについて上述したものと機能が類似している。同じことがPPRログにも当てはまり、ゲストMMIO510の値、つまりPPRテールポインタ616、PPRヘッドポインタ618、PPR長さ620及びPPR制御622は、コマンドバッファについて上述したものと機能が類似しているが、これらの値は、メモリ404の対応するゲスト部分のPPRログへのアクセスに使用される。
いくつかの実施形態では、サポートされている数より少ない数のゲストオペレーティングシステム(及び、場合によってははるかに少ない数)が、任意の時点で電子デバイス400において実行されてもよく、したがって、これらの実施形態では、IOMMUバッキングストア500は、ゲストMMIO510等を記憶するための十分なスペースを含むように動的に調整される。つまり、ゲストオペレーティングシステムが初期化されると、ハイパーバイザ及び/又は別のエンティティは、ゲストオペレーティングシステム用のIOMMU MMIOレジスタの値を記憶するためにIOMMUバッキングストア500(つまりゲストMMIO510)のスペースを割り当て、追加又はアクティブ化することができる。
いくつかの実施形態では、ハイパーバイザは、IOMMUバッキングストア500に対して少なくともいくつかの初期化操作を実行する。例えば、いくつかの実施形態では、ハイパーバイザは、IOMMUバッキングストアを記憶するために、メモリ、例えば、メモリの連続又は分散したページを、メモリ404に割り当てる。上記のように、メモリ404は、データ及び情報を記憶するために様々な機能ブロック(例えば、コア418~420等)によって使用される電子デバイス400内の汎用メモリであり、IOMMU内の単なるローカルメモリではない。したがって、この動作は、IOMMUバッキングストアを記憶するために、ハイパーバイザが電子デバイス400の「メイン」メモリ内にスペースを割り当てることを含む。別の例として、いくつかの実施形態では、ハイパーバイザは、IOMMUを介して、各アクティブゲストオペレーティングシステムのバッキングストア内のIOMMU MMIOレジスタのコピーに初期値を書き込む。したがって、ハイパーバイザは、ゲストオペレーティングシステムの起動時等に、IOMMUバッキングストアのIOMMU MMIOレジスタの各々のコピーに各アクティブゲストオペレーティングシステムのポインタの初期値と制御値を書き込む。
いくつかの実施形態では、利用可能なIOMMU MMIOレジスタのサブセットのみが、IOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに含まれる。これらの実施形態では、他のレジスタがIOMMU自体によって提供されてもよい。例えば、いくつかの実施形態では、IOMMU制御値(例えば、IOMMUの有効化/無効化等)、ページテーブルのベースアドレス等を記憶するIOMMU内のレジスタは、IOMMUによって提供される。一般に、ゲストオペレーティングシステムのメモリの一部のバッファ及びログへのアクセスに使用されないIOMMU MMIOレジスタはコピーとして表示されないが、代わりに、各レジスタの単一のコピーがIOMMUによって提供される。これらの実施形態のいくつかでは、ハイパーバイザは、ゲストオペレーティングシステム用にこれらのIOMMUレジスタをエミュレートするが、アクセスは、IOMMU内のレジスタ用にIOMMUによって受信され、処理される。
図5に戻ると、ゲストメモリ512は、ゲストオペレーティングシステムに対するゲストイベントログ514、ゲストペリフェラルページリクエスト(PPR)ログ516、及び、ゲストコマンドバッファ518を含む。一般に、ゲストイベントログ514、ゲストPPRログ516及びゲストコマンドバッファ518は、IOMMU及び/又はゲストオペレーティングシステムによってアクセスするための、対応するイベント、PPRリクエスト及びコマンドを記憶するために用いられるメモリ構造(例えば、リスト、テーブル、バッファ等)である。動作中、IOMMUは、ゲストメモリ512のゲストイベントログ514及びゲストPPRログ516の対応するログを介して、ゲストオペレーティングシステムにイベント及びPPRを通信する。さらに、ゲストオペレーティングシステムは、ゲストメモリ512のゲストコマンドバッファ518の対応するコマンドバッファを介して、IOMMUにコマンドを通信する。
いくつかの実施形態では、電子デバイス400でアクティブな各ゲストオペレーティングシステムは、そのゲストオペレーティングシステムによって用いられ、IOMMUによってアクセス可能なゲストイベントログ、ペリフェラルページリクエストログ及びゲストコマンドバッファを含む、メモリの対応する別々のゲストの部分(すなわち、メモリ404におけるいくつかのページ)に関連する。このことは、図5に、ゲストメモリ512の後ろの追加のゲストメモリ520~522として示されている。
ハイパーバイザメモリ524は、デバイステーブル526を含む。一般に、デバイステーブル526は、電子デバイスに関連及び/又は結合するデバイス(実際の/物理的なデバイス又は仮想デバイスであり得る)に関するデバイス関連情報が記憶されるテーブルである。デバイステーブル526は、エントリのセットを含み、各エントリは、ページテーブル及び割り込みテーブルへのポインタ、制御及び構成値、機能インジケータ、モードインジケータ、ドメインID、セキュリティ情報及び設定等のように、対応するデバイスに関する情報を記憶するのに使用可能である。さらに、記載された実施形態では、既存のデバイステーブルとは異なり、デバイステーブル526の各エントリは、デバイスID及びデバイスと通信する、関与する、又は、他の方法で関連するゲストオペレーティングシステムのゲスト識別子を含む。動作中、デバイスに関する情報を決定するためにデバイステーブルを用いることに加えて、IOMMUは、デバイスID及び/又はゲスト識別子を使用して、ゲストデバイスIDをホストデバイスIDに翻訳又は変換する。
いくつかの実施形態では、IOMMUバッキングストア500、ゲストメモリ512及びハイパーバイザメモリ524の一部/又は全ては、連続的ではなく、その代わりに、メモリの異なる領域又は位置に記憶される。例えば、ゲストイベントログ514のベースアドレス(したがって、ゲストイベントログ自体)は、ゲストPPRログ516から離れたメモリ内に配置され得る。したがって、ゲストイベントログ514は、図5に示すように、ゲストPPRログ516に隣接しない場合がある。
いくつかの実施形態では、IOMMUは、IOMMUによってアクセスされるメモリにおける様々なデータ及び情報のメモリ内の位置へのポインタ、その参照、及び/又は、その他の指標を含むプライベートアドレスマップを含む。例えば、IOMMUプライベートアドレスマップは、ゲストイベントログ514、ゲストPPRログ516等に対するメモリ内のベースアドレスへのポインタを含み得る。これらの実施形態では、メモリにおけるデータ及び情報にアクセスする前に、IOMMUは、データ及び情報の位置についてプライベートアドレスマップでルックアップを実行し、また、使用前にこれらのアドレスのページテーブル等を使用して変換を実行し得る。
いくつかの実施形態では、IOMMUバッキングストア500及び/又はその一部(制御ビット等)は、IOMMUを介して(例えば、IOMMUにリクエストを送信することによって)電子デバイス400の他のエンティティによってアクセスされるか、他のエンティティによってアクセスすることができない。例えば、IOMMUバッキングストア500におけるデータ及び情報の少なくとも一部は、他のエンティティによって、対応するIOMMU MMIOレジスタへの書き込み及びそこからの読み取りを介してアクセスされ得る。
(IOMMUとゲストオペレーティングシステムの通信)
記載された実施形態では、IOMMU(例えば、IOMMU424)は、IOMMU(又は、それによってサービスされるIOデバイス)とゲストオペレーティングシステムとの間の通信を処理する。図7は、いくつかの実施形態による、IOMMU702によって処理される、ゲストオペレーティングシステム700とIOMMU702との間の通信を示すブロック図である。図7には、いくつかの要素が特定の構成で示されているが、他の実施形態では、異なる数又は構成の要素を用いる。一般に、記載された実施形態では、IOMMU702は、本明細書に記載された動作を可能にするのに十分な要素を含むか、それらにアクセスする。図7では、いくつかの要素が点線/点状で示されている。これらの要素は、メモリに(例えば、IOMMUバッキングストア500に、ゲストメモリ512に等)記憶され、IOMMU702、ゲストオペレーティングシステム700及び/又は他のエンティティによって典型的なメモリアクセス技術を用いてアクセスされるログ、バッファ等である。いくつかの実施形態では、ゲストオペレーティングシステム700、IOMMU702及びハイパーバイザ704は、図3のゲストオペレーティングシステム302、IOMMU312及びハイパーバイザ306と同様に構成されるが、これは必須要件ではない。
図7に見られるように、既存システムについて図2に示すものとは異なり、記載された実施形態では、IOMMU702とゲストオペレーティングシステム700は、互いにより直接的に通信する。言い換えれば、IOMMU702とゲストオペレーティングシステム700は、メモリの(すなわちゲストオペレーティングシステム700に対するメモリのゲスト部分(例えば、ゲストメモリ428)の)ゲストイベントログ514、ゲストPPRログ516及びゲストコマンドバッファ(BUFF)518を介して互いに通信する。さらに、ゲストオペレーティングシステム700及びIOMMU702は、ゲストコントロール508及びゲストMMIO510を用いて、通信の実行方法を指示する。例えば、いくつかの実施形態では、IOMMU702は、ゲストMMIO510におけるポインタを用いて、ゲストオペレーティングシステム700に対するゲストイベントログ514、ゲストコマンドバッファ518及びゲストPPRログ516のメモリにおける位置を決定する。ハイパーバイザ704は、これらの通信を完了するための動作の一部又は全てに介入せず、それ以外の方法で関与しない。例えば、ハイパーバイザ704は、これらの通信に対するドメインID及びデバイスIDの変換、ゲストMMIO510のポインタへのアクセス、並びに/又は、メモリのゲスト部分のバッファ及びログへのアクセス等の動作を実行しない。代わりに、IOMMU702がこれらの動作を実行する。IOMMU702は、ドメインID及びデバイスIDを変換し、ゲストMMIO510等から情報を取得するので、記載された実施形態は、ゲストオペレーティングシステム700とIOMMU702との間の通信の少なくとも一部を処理するためにハイパーバイザ704を用いることを回避する。このことは、通信がより迅速に完了することを意味し、プロセッサ402及びメモリ404等への負荷が軽減される。
動作中、例としてコマンドを用いると、ゲストオペレーティングシステム700は、invalidate_IOMMU_pagesコマンドをゲストコマンドバッファ518に書き込み、このコマンドにより、IOMMU702は、コマンドのドメインIDによって指定されるように、IOMMU変換キャッシュのエントリの範囲を無効化させる。言い換えると、ゲストオペレーティングシステムは、メモリの対応するゲスト部分にメモリ書き込みを実行して、ゲストコマンドバッファ518の次のオープン/利用可能なエントリを、invalidate_IOMMU_pagesコマンドに対するデータ(すなわち、コマンドを表すビット)を含めるように更新する。次に、ゲストオペレーティングシステム700は、書き込みコマンドをIOMMUに送信して、対応するIOMMU MMIOレジスタのコマンドバッファテールポインタ(例えば、コマンドテールポインタ600)を更新(例えば、進める、インクリメントする等)して、ゲストオペレーティングシステム700がコマンドバッファにコマンドを書き込んだことを示す。IOMMU702は、コマンドバッファテールポインタのゲストオペレーティングシステム700の書き込みを、例えば、対応するゲストコマンドバッファにおけるアドレスへの書き込みの監視、バッファテールポインタの値の変化の検出、ゲストオペレーティングシステム700からの書き込みコマンドの受信等を介して検出する。コマンドバッファテールポインタの書き込みを検出すると、IOMMU702は、コマンドバッファヘッドポインタ(例えば、コマンドヘッドポインタ602)の値を用いて、メモリのゲスト部分のコマンドバッファから次のコマンドを取得し、コマンドを処理する準備(例えば、コマンドでゲストドメインIDに関連付けられているホストドメインIDを置き換える等)をする。次に、IOMMU702は、コマンドを処理する。これにより、IOMMU702は、ホストドメインIDによって示されるIOMMU702の変換キャッシュにおけるエントリの範囲を無効化する。IOMMU702は、ゲストPPRログ516及びゲストイベントログ514へのIOMMU702書き込みに対して少なくともいくつかの同様の操作を実行するが、逆に、IOMMU702がこれらのログを書き込み、ゲストオペレーティングシステム700がログを読み取る。
ハイパーバイザ704は、ゲストドメインIDのホストドメインIDへの変換等のゲストオペレーティングシステム700とIOMMU702との間の通信の特定の部分に関与しないが、ハイパーバイザ704とゲストオペレーティングシステム700及び/又はIOMMU702は、ゲストオペレーティングシステム700とIOMMU702との間の通信に関連する通信を別々に交換してもよく、又は、ハイパーバイザ704は、それ以外の方法で、通信がゲストオペレーティングシステム700及び/又はIOMMU702によって適切に処理されることを確実にすることに関与してもよい。例えば、ハイパーバイザ704は、直接(例えば、通信を介して)又は間接的に(例えば、スヌーピングメモリアクセスを介して)、IOMMU702又はゲストオペレーティングシステム700が指定された操作(例えば、バッファ又はログへの書き込み)を実行したと判断し、ゲストオペレーティングシステム700及び/又はIOMMU702への割り込みのシグナリング、フラグとして機能する共有メモリ位置の更新等の操作を実行することができる。上記のように、ハイパーバイザ704は、IOMMUバッキングストア等を初期化することもできる。
(IOMMU MMIOレジスタ値を使用するためのプロセス)
記載された実施形態では、IOMMU(例えば、IOMMU702)は、IOMMU MMIOレジスタの仮想コピーをゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム700)に提供するための動作を実行する。上記のように、動作は、ゲストオペレーティングシステムに代わって、IOMMUバッキングストアに記憶されているIOMMU MMIOレジスタの対応するコピーへアクセスすることを含む。図8は、いくつかの実施形態による、ゲストオペレーティングシステムに代わって、IOMMUがIOMMUバッキングストア内のIOMMU MMIOレジスタのコピーにアクセスするプロセスを示すフローチャートである。図8に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実施される動作は、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作を含む。
IOMMU MMIOレジスタのコピーにアクセスするために図8に示す動作は、一般的な範囲であり、様々なタイプのアクセス、例えば、読み取り、書き込み、無効化等に関連している。図9~図10に示す具体的な例は、図9でゲストオペレーティングシステムがIOMMU MMIOレジスタのコピーを書き込むことと、図10でゲストオペレーティングシステムがIOMMU MMIOレジスタのコピーを読み取ることと、を含む。
図8の動作は、IOMMUが、ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信すると、開始する(ステップ800)。アクセスは、IOMMU MMIOレジスタ内のデータの読み取りである可能性があり、したがって、通信は、読み取りリクエスト、IOMMU MMIOレジスタ内のデータの書き込みであり、したがって、通信は、書き込みリクエスト、及び/又は、無効化等の他のアクセスである。例えば、IOMMUは、コマンドバッファテールポインタを初期化又は更新するために、特定のデータをコマンドバッファテールポインタ(コマンドテールポインタ600等)に書き込むことをリクエストする通信をゲストオペレーティングシステムから受信する場合がある。
IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムに関連付けられた所定のIOMMU MMIOレジスタのコピー内のデータへの対応するアクセスを実行する(ステップ802)。IOMMUはIOMMU MMIOレジスタを仮想化する。つまり、ゲストオペレーティングシステムがIOMMU内の実際のMMIOレジスタにアクセスしているように見せかけるゲストオペレーティングシステム(及び、他のエンティティ)を示しているが、IOMMUは、実際には、サポートされている各ゲストオペレーティングシステムのIOMMUバッキングストア内に記憶されているIOMMU MMIOレジスタの個別のコピーを使用することを想起されたい。したがって、この操作は、IOMMUがバッキングストアでアクセスするIOMMU MMIOレジスタのコピーを決定し、アクセスを実行することを含む。
図9は、いくつかの実施形態による、ゲストオペレーティングシステムが、IOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに書き込み、それをIOMMUが読み取るプロセスを示すフローチャートである。図9に示す動作は、いくつかの実施形態によって実施される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実施される動作は、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作を含む。
図9の動作は、ゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム700)が、メモリ(例えば、ゲストメモリ428)のゲスト部分のコマンドバッファ(例えば、ゲストコマンドバッファ518)にコマンドを書き込むときに開始する(ステップ900)。例えば、いくつかの実施形態では、ゲストコマンドバッファは、いくつかのエントリを含むメモリのゲスト部分の循環バッファであり、この動作は、ゲストオペレーティングシステムがコマンド(すなわち、コマンドを表すビットのシーケンス)をゲストコマンドバッファの次に使用可能なエントリに書き込むことを含む。
ゲストオペレーティングシステムは、IOMMU(IOMMU702等)による処理を必要とするコマンドをゲストコマンドバッファに追加したため、ゲストオペレーティングシステムは、IOMMUにコマンドを通知する。より具体的には、ゲストオペレーティングシステムは、コマンドバッファテールポインタを更新するための書き込みリクエストを送信し、書き込みリクエストは、コマンドバッファテールポインタが記憶されているIOMMU MMIOレジスタのゲスト仮想アドレスに向けられる(ステップ902)。記載された実施形態では、ゲストオペレーティングシステムは、IOMMU MMIOレジスタにアクセスするために、ローカル又は「仮想」アドレスを使用する(実際のIOMMUアドレスを認識しない場合がある)。ゲスト仮想アドレスは、ゲストオペレーティングシステムを実行するプロセッサのメモリ管理ユニット(MMU)によって、MMIOレジスタが配置されているIOMMUのシステム物理アドレス(つまり、IOMMU MMIOアドレス)に変換される(例えば、ゲストオペレーティングシステム等のページテーブルウォークのページテーブルを実行することによって)。上記のように、IOMMUは、IOMMU MMIOレジスタを仮想化するため、MMUが使用するシステム物理アドレスは、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーが配置されているアドレスではなく、MMIOレジスタのアクセスとしてIOMMUによって認識されるIOMMUのインタフェース/アパーチャのアドレスである。したがって、MMUでの変換に続いて、MMUは、ゲスト仮想アドレスに関連付けられたIOMMU MMIOアドレス(すなわち、システム物理アドレス)でIOMMUに書き込みリクエストを転送する(ステップ904)。
IOMMU MMIOアドレスは、ゲストオペレーティングシステムからアクセスリクエストを受信するためにIOMMUによって提供される単なるアドレスであるため、IOMMUは、書き込みリクエストに基づいて、ゲストオペレーティングシステムのコマンドバッファテールポインタのコピーが記憶されるメモリ内の物理アドレスを決定するための変換も実行する(ステップ906)。この動作中、IOMMUは、ゲストオペレーティングシステムのIDを使用して、IOMMUバッキングストアでアクセスされるIOMMU MMIOレジスタのコピー、メモリ内の物理アドレスを決定する。このプロセスでは、IOMMUは、先ず、ゲストオペレーティングシステムの識別子とMMUによって提供されるシステム物理アドレスに基づいて、アルゴリズム、テーブル等を使用して、ゲストオペレーティングシステム用にIOMMU MMIOレジスタのコピーのIOMMU仮想アドレスを計算する。次に、IOMMUは、1つ以上のページテーブルを使用して、IOMMU仮想アドレスをシステム物理アドレスに変換し、この場合、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーがIOMMUバッキングストアに記憶される。
次に、IOMMUは、書き込みリクエストからのデータをメモリ内の物理アドレスに記憶し、それによって、ゲストオペレーティングシステムのコマンドバッファテールポインタのコピーを更新する(ステップ908)。言い換えると、IOMMUは、コマンドバッファテールポインタの更新されたアドレスの1つ以上のビット、エントリ識別子、実行カウント等のデータを、ゲストオペレーティングシステムが関連付けられたコマンドバッファテールポインタのコピーがIOMMUバッキングストアに保存されているメモリ位置に記憶する。この更新により、コマンドバッファテールポインタは、コマンドがゲストコマンドバッファに書き込まれたことを直接的又は間接的に示し、したがって、IOMMUによる処理を待機している。いくつかの実施形態では、IOMMU、ゲストオペレーティングシステム、及び/又は、別のエンティティは、コマンドがゲストコマンドバッファで処理を待機していること、又は、ゲストオペレーティングシステムがコマンドを提供したことを示すために、他のポインタ又はインジケータを設定する。例えば、いくつかの実施形態では、IOMMUは、サポートされるゲストオペレーティングシステム毎に1つのコマンド待機ビットのセットを含み、コマンド待機ビットは、コマンドがゲストコマンドバッファでの処理の待機中であることを示すために、ゲストオペレーティングシステムに対してセット(又は、クリア)される。
IOMMUは、書き込みリクエストの検出(又は、コマンドが処理を待機していると判断する)に基づいて、コマンドバッファヘッドポインタ(例えば、コマンドヘッドポインタ602)のコピーからのデータを使用して、ゲストコマンドバッファ内のコマンドを処理するための1つ以上の後続の動作を実行する(ステップ910)。例えば、いくつかの実施形態では、コマンドバッファヘッドポインタのコピーの値は、ゲストコマンドバッファの次のエントリが配置され、IOMMUが直接的又は間接的にアドレスを使用するメモリのゲスト部分の位置のアドレスを記憶し、コマンドを処理する前に、ゲストコマンドバッファからコマンドを取得する。
図10は、いくつかの実施形態による、IOMMUが、IOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに書き込み、それをゲストオペレーティングシステムが読み取るプロセスを示すフローチャートである。図10に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実施される動作は、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作を含む。
図10の動作は、IOMMU(例えば、IOMMU702)が、ゲストオペレーティングシステム(例えば、ゲストメモリ428)のメモリのゲスト部分のゲストイベントログ(例えば、ゲストイベントログ514)にイベントを書き込むときに開始する(ステップ1000)。例えば、いくつかの実施形態では、ゲストイベントログは、いくつかのエントリを含むメモリのゲスト部分の循環バッファであり、この操作は、IOMMUがイベント(すなわち、イベントを表すビットのシーケンス)をゲストイベントログの次に使用可能なエントリに書き込むことを含む。
いくつかの実施形態では、簡潔にするために図10に示されていないが、IOMMUは、最初に、イベントログテールポインタのコピー及び/又はIOMMUバッキングストア内のゲストオペレーティングシステムに関連付けられたIOMMU MMIOポインタの他のコピーから、ゲストイベントログに関する情報を取得する。次に、IOMMUは、この情報を使用してステップ1000を実行する。例えば、いくつかの実施形態では、IOMMUは、イベントをゲストイベントログに書き込むために、IOMMUバッキングストア内のゲストオペレーティングシステムのイベントログテールポインタのコピーから取得されたゲストイベントログ(又は、その中の利用可能なエントリ)の位置の直接的又は間接的な指標(例えば、物理アドレス等)を使用する。ゲストイベントログに関する情報を取得するために、いくつかの実施形態では、IOMMUは、ステップ1002と同様の方法で、イベントログテールポインタのコピー及び/又はIOMMU MMIOポインタの他のコピーの物理アドレスを決定し、その後、情報を取得するために物理アドレスを使用する。
IOMMUは、ゲストオペレーティングシステムによる処理を必要とするイベントをゲストイベントログに追加したため、ゲストオペレーティングシステムにイベントを通知する。いくつかの実施形態では、ゲストオペレーティングシステムに通知することは、IOMMUバッキングストア内のゲストオペレーティングシステムのイベントログテールポインタのコピーを更新することと、ゲストオペレーティングシステムに割り込みを送信してゲストオペレーティングシステムに通知することと、の両方を含む。したがって、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムのイベントログテールポインタのコピーの物理アドレスを決定する(ステップ1002)。この動作中、IOMMUは、IOMMU MMIOレジスタの何れのコピーがIOMMUバッキングストアでアクセスされるかを示すゲストオペレーティングシステムのIDと、1つ以上のIOMMUプライベートアドレステーブル及び/又はページテーブルを使用して、物理メモリ内のアドレスを決定する。次に、IOMMUは、物理アドレスに、ゲストオペレーティングシステムのイベントログテールポインタのコピーを更新するデータを記憶する(ステップ1004)。言い換えると、IOMMUは、イベントログテールポインタの更新されたアドレスの1つ以上のビット、エントリ識別子、実行カウント等のデータを、ゲストオペレーティングシステムに関連付けられたイベントログテールポインタのコピーがIOMMUバッキングストアに保存されるメモリ位置に記憶する。この更新により、イベントログテールポインタは、イベントがイベントログに書き込まれたこと、したがって、ゲストオペレーティングシステムによる処理を待機していること、を直接的又は間接的に示す。
また、IOMMUは、ゲストオペレーティングシステムに割り込みを送信し、割り込みは、イベントがゲストイベントログで待機していることを示す(ステップ1006)。この動作では、IOMMUは、ゲストオペレーティングシステムに関連付けられた仮想の高度なプログラマブル割り込みコントローラ(vAPIC)等を介して、IOMMUとゲストオペレーティングシステムとの間で割り込みが渡される割り込みメカニズムを使用することができる。
割り込みの受信に応じて、ゲストオペレーティングシステムは、イベントログヘッドポインタ(例えば、イベントヘッドポインタ610)からデータを読み取るための読み取りリクエストをIOMMUに送信し、読み取りリクエストは、イベントログヘッドポインタが記憶されているIOMMUMMIOレジスタのゲスト仮想アドレスに送信される(ステップ1008)。記載された実施形態では、ゲストオペレーティングシステムは、IOMMU MMIOレジスタにアクセスするためにローカル又は「仮想」アドレスを使用する(実際の及び/又は仮想IOMMUアドレスを認識しない場合がある)。ゲスト仮想アドレスは、ゲストオペレーティングシステムを実行するプロセッサのメモリ管理ユニット(MMU)によって、MMIOレジスタが配置されているIOMMUのシステム物理アドレス(つまり、IOMMU MMIOアドレス)に変換される(例えば、ゲストオペレーティングシステム等のページテーブルウォークのページテーブルを実行することによって)。上記のように、IOMMUがIOMMU MMIOレジスタを仮想化するため、MMUが使用するシステム物理アドレスは、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーが配置されているアドレスではなく、MMIOレジスタのアクセスとしてIOMMUによって認識されるIOMMUのインタフェース/アパーチャのアドレスである。したがって、MMUでの変換に続いて、MMUは、ゲスト仮想アドレスに関連付けられたIOMMU MMIOアドレス(すなわち、システム物理アドレス)でIOMMUに読み取りリクエストを転送する(ステップ1010)。
IOMMU MMIOアドレスは、ゲストオペレーティングシステムからのアクセスリクエストを受信するためにIOMMUによって提供される単なるアドレスであるため、IOMMUは、読み取りリクエストに基づいて、ゲストオペレーティングシステムのイベントログヘッドポインタのコピーが保存されるメモリ内の物理アドレスを決定するための変換も実行する(ステップ1012)。この動作中、IOMMUは、IOMMU MMIOレジスタの何れのコピーがIOMMUバッキングストアでアクセスされるかを示すゲストオペレーティングシステムのIDを使用して、メモリ内の物理アドレスを決定する。このプロセスでは、IOMMUは、先ず、ゲストオペレーティングシステムの識別子とMMUによって提供されるシステム物理アドレスに基づいて、アルゴリズム、テーブル等を使用して、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのIOMMU仮想アドレスを計算する。次に、IOMMUは、1つ以上のページテーブルを使用して、IOMMU仮想アドレスを、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーがIOMMUバッキングストアに記憶されているシステム物理アドレスに変換する。
次に、IOMMUは、メモリ内の物理アドレスのメモリ位置から、読み取りリクエストのためのデータを読み取る(ステップ1014)。言い換えると、IOMMUは、ゲストオペレーティングシステムに関連付けられているイベントログヘッドポインタのコピーがIOMMUバッキングストアに保存されているメモリ位置において、イベントログヘッドポインタのアドレスの1ビット以上、エントリ識別子、実行カウント等のデータを読み出す。イベントログヘッドポインタは、ゲストオペレーティングシステムによる処理を待機しているゲストイベントログに書き込まれる次のイベントを直接的又は間接的に示す。いくつかの実施形態では、IOMMU、ゲストオペレーティングシステム、及び/又は、別のエンティティは、イベントがゲストイベントログで処理を待機していること又はIOMMUがイベントを提供したことを示すために、他のポインタ又はインジケータを設定する。例えば、いくつかの実施形態では、ゲストオペレーティングシステム及び/又はハイパーバイザは、サポートされたゲストオペレーティングシステム毎に1つのイベント待機ビットのセットを含み、ゲストオペレーティングシステムに対しイベント待機ビットが設定(又は、クリア)されて、イベントがゲストイベントログでの処理を待機していることを示す。
イベントログヘッドポインタからデータを読み取った後、IOMMUは、そのデータをゲストオペレーティングシステムに返信する(ステップ1016)。次に、ゲストオペレーティングシステムは、ゲストイベントログ内のイベントを処理するための1つ以上の後続の動作を実行するために、データを使用する(ステップ1018)。例えば、いくつかの実施形態では、ゲストオペレーティングシステムのイベントログヘッドポインタのコピーは、イベントログのエントリが配置されているメモリのゲスト部分内の位置のアドレスを記憶し、ゲストオペレーティングシステムは、イベントを処理する前に、そのアドレスを直接的又は間接的に使用して、ゲストイベントログからイベントを取得する。
いくつかの実施形態では、電子デバイス(例えば、電子デバイス400及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書で説明する動作の一部又は全てを実行する。より具体的には、電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み出し、説明した動作を実行する際にコードを実行し及び/又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(例えば、eDRAM、RAM、SRAM、DRAM、DDR4 SDRAM等)、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等)を含む揮発性メモリ及び/又は不揮発性メモリを含むことができるが、これらに限定されない。
いくつかの実施形態では、1つ以上のハードウェアモジュールは、本明細書に説明される動作を実行する。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)チップ、ニューラルネットワークプロセッサ若しくはアクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ(GPU)/グラフィックスコア、パイプライン、加速処理ユニット(APU)、スパース性監視装置、機能ブロック、及び/又は、他のプログラマブルロジックデバイスを含めることができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(プログラムコード、ファームウェア等)を実行することによって動作を実行するように構成された1つ以上の汎用回路を含む。
いくつかの実施形態では、本明細書で説明する構造及びメカニズム(例えば、電子デバイス400、IOMMU424、及び/又は、これらの一部)の一部又は全てを表すデータ構造は、電子デバイスによって読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用することができるデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶されている。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ツールにより読み出されてもよく、合成ツールは、記述を合成して、上述した構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを、合成ライブラリから生成することができる。次に、ネットリストは、配置され、ルーティングされ、マスクに適用される幾何学形状を記述するデータセットが生成され得る。次いで、上述した構造及びメカニズムに対応する1つ以上の半導体回路(例えば、集積回路)を製造するために、様々な半導体製造ステップでマスクが使用され得る。或いは、コンピュータアクセス可能記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット又はグラフィックデータシステム(GDS)IIデータであってもよい。
本明細書では、変数又は不特定の値(すなわち、値の特定のインスタンスを持たない、値の一般的な説明)は、N等の文字で表されている。同様の文字が本説明の他の箇所で使用され得るが、本明細書で使用されるように、各場合における変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値の一部又は全てに対して、異なる変数量及び値が存在してもよい。言い換えると、この説明において変数及び不特定値を表すために使用されるN及び他の文字は、必ずしも互いに関連するわけではない。
本明細書で使用される「等(et cetra)」又は「等(etc.)」という表現は、「及び/又は」のケース、すなわち、「等」が関連するリスト内の要素のうち「少なくとも1つ」に相当するものを提示することを意図している。例えば、「電子デバイスは、第1の動作、第2の動作等を実行する」という文において、電子デバイスは、第1の動作、第2の動作、及び、他の動作のうち少なくとも1つを実行する。さらに、「等」に関連するリスト内の要素は、一組の実施例の中の単なる例であり、実施例の少なくともいくつかは、いくつかの実施形態では現れない場合がある。
実施形態の上記の説明は、例示及び説明のためにのみ提示されている。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを、意図していない。したがって、当業者は、多くの変更及び変形が明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。

Claims (22)

  1. 電子デバイスであって、
    ゲストオペレーティングシステムを実行するプロセッサと、
    入出力メモリ管理ユニット(IOMMU)と、
    IOMMUバッキングストアを記憶するメインメモリであって、前記IOMMUバッキングストアは、サポートされているゲストオペレーティングシステムのセット内のゲストオペレーティングシステム毎のIOMMUメモリマップ入出力(MMIO)レジスタのセットの個別のコピーを含む、メインメモリと、を備え、
    前記IOMMUは、
    前記ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信することと、
    前記ゲストオペレーティングシステムに関連付けられた前記IOMMUバッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータへの対応するアクセスを実行することと、
    を行うように構成されている、
    電子デバイス。
  2. 前記ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信することは、
    前記プロセッサのメモリ管理ユニット(MMU)から前記通信を受信することであって、前記MMUは、前記ゲストオペレーティングシステムから前記通信を受信し、前記所定のIOMMU MMIOレジスタに関連付けられたIOMMU MMIOアドレスで前記IOMMUに前記通信を転送する、ことを含む、
    請求項1の電子デバイス。
  3. 前記データにアクセスすることは、前記所定のIOMMU MMIOレジスタにデータを記憶することを含み、
    前記IOMMUは、
    前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記IOMMU MMIOアドレスに基づいて、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを、前記物理アドレスに記憶することと、
    を行うように構成されている、
    請求項2の電子デバイス。
  4. 前記IOMMUは、
    前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを記憶することを引き起こす通信を検出することと、
    前記通信の検出に応じて、前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピーからのデータを使用して、1つ以上の後続の処理操作を実行することと、
    を行うように構成されている、
    請求項3の電子デバイス。
  5. 前記データにアクセスすることは、前記所定のIOMMU MMIOレジスタからデータを読み取ることを含み、
    前記IOMMUは、
    前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記IOMMU MMIOアドレスに基づいて、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを前記物理アドレスから読み取ることと、
    前記データを前記ゲストオペレーティングシステムに戻すことと、
    を行うように構成されている、
    請求項2の電子デバイス。
  6. 前記IOMMUは、前記バッキングストア内の前記所定のIOMMU MMIOレジスタ内の情報を、
    前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを、前記物理アドレスに記憶することと、
    によって更新するように構成されている、
    請求項1の電子デバイス。
  7. 前記バッキングストア内の前記IOMMU MMIOレジスタのセットの各コピーは、
    ゲストオペレーティングシステム毎に、
    ゲストオペレーティングシステムのバッファ及びログのポインタと、
    ゲストオペレーティングシステムの前記バッファ及びログに関連する制御フィールドと、
    を記憶するためのメモリ位置を含む、
    請求項1の電子デバイス。
  8. 前記プロセッサはハイパーバイザを実行し、
    前記ハイパーバイザは、
    前記IOMMUバッキングストアの初期化操作中に、前記IOMMUバッキングストアの記憶に使用される前記メインメモリ内の連続又は分散したメモリページを割り当てる、
    請求項1の電子デバイス。
  9. 前記ハイパーバイザは、
    前記ゲストオペレーティングシステムについて、前記バッキングストア内の前記ゲストオペレーティングシステムの対応するIOMMU MMIOレジスタのセットに含まれない少なくともいくつかのIOMMU MMIOレジスタをエミュレートし、
    前記IOMMUを介して、エミュレートされたIOMMU MMIOレジスタの情報にアクセスする、
    請求項8の電子デバイス。
  10. 前記ハイパーバイザによってエミュレートされる前記IOMMU MMIOレジスタは、変換テーブルベースアドレス及びIOMMU制御レジスタを含む、
    請求項9の電子デバイス。
  11. 前記IOMMU内のキャッシュメモリを備え、
    前記IOMMUは、前記IOMMU MMIOレジスタのセットの各々のコピーの一部から、前記IOMMU MMIOレジスタ内の情報のコピーをキャッシュする、
    請求項1の電子デバイス。
  12. ゲストオペレーティングシステムを実行するプロセッサと、入出力メモリ管理ユニット(IOMMU)と、IOMMUバッキングストアを記憶するメインメモリと、を備える電子デバイスのゲストオペレーティングシステムに対して、前記IOMMUレジスタのコピーを提供する方法であって、
    前記IOMMUバッキングストアは、サポートされているゲストオペレーティングシステムのセット内のゲストオペレーティングシステム毎のIOMMUメモリマップ入出力(MMIO)レジスタのセットの個別のコピーを含み、
    前記方法は、
    前記IOMMUが、前記ゲストオペレーティングシステムから、所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信することと、
    前記IOMMUが、前記ゲストオペレーティングシステムに関連付けられた前記IOMMUバッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータへの対応するアクセスを実行することと、を含む、
    方法。
  13. 前記ゲストオペレーティングシステムから、前記所定のIOMMU MMIOレジスタ内のデータにアクセスする通信を受信することは、
    前記プロセッサのメモリ管理ユニット(MMU)から前記通信を受信することであって、前記MMUは、前記ゲストオペレーティングシステムから前記通信を受信し、前記所定のIOMMU MMIOレジスタに関連付けられたIOMMU MMIOアドレスで前記IOMMUに前記通信を転送する、ことを含む、
    請求項12の方法。
  14. 前記データにアクセスすることは、前記所定のIOMMU MMIOレジスタにデータを記憶することを含み、
    前記方法は、
    前記IOMMUが、前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記IOMMU MMIOアドレスに基づいて、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記IOMMUが、前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを、前記物理アドレスに記憶することと、を含む、
    請求項13の方法。
  15. 前記IOMMUが、前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを記憶することを引き起こす通信を検出することと、
    前記通信の検出に応じて、前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピーからのデータを使用して、1つ以上の後続の処理操作を実行することと、を含む、
    請求項14の方法。
  16. 前記データにアクセスすることは、前記所定のIOMMU MMIOレジスタからデータを読み取ることを含み、
    前記方法は、
    前記IOMMUが、前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記IOMMU MMIOアドレスに基づいて、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記IOMMUが、前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを前記物理アドレスから読み取ることと、
    前記IOMMUが、前記データを前記ゲストオペレーティングシステムに戻すことと、を含む、
    請求項13の電子デバイス。
  17. 前記IOMMUが、前記バッキングストア内の前記所定のIOMMU MMIOレジスタ内の情報を、
    前記ゲストオペレーティングシステムに関連付けられたドメイン識別子と1つ以上の変換テーブルとを使用して、前記所定のIOMMU MMIOレジスタのコピーが配置されている前記IOMMUバッキングストア内の物理アドレスを決定することと、
    前記ゲストオペレーティングシステムに関連付けられた前記バッキングストア内の前記所定のIOMMU MMIOレジスタのコピー内のデータを、前記物理アドレスに記憶することと、
    によって更新することを含む、
    請求項12の方法。
  18. 前記バッキングストア内の前記IOMMU MMIOレジスタのセットの各コピーは、
    ゲストオペレーティングシステム毎に、
    ゲストオペレーティングシステムのバッファ及びログのポインタと、
    ゲストオペレーティングシステムの前記バッファ及びログに関連する制御フィールドと、
    を記憶するためのメモリ位置を含む、
    請求項12の電子デバイス。
  19. 前記プロセッサはハイパーバイザを実行し、
    前記方法は、
    前記ハイパーバイザが、前記IOMMUバッキングストアの初期化操作中に、前記IOMMUバッキングストアの記憶に使用される前記メインメモリ内の連続又は分散したメモリページを割り当てることを含む、
    請求項12の方法。
  20. 前記ハイパーバイザが、前記ゲストオペレーティングシステムについて、前記バッキングストア内の前記ゲストオペレーティングシステムの対応するIOMMU MMIOレジスタのセットに含まれない少なくともいくつかのIOMMU MMIOレジスタをエミュレートすることと、
    前記ハイパーバイザが、前記IOMMUを介して、エミュレートされたIOMMU MMIOレジスタの情報にアクセスすることと、を含む、
    請求項19の方法。
  21. 前記ハイパーバイザによってエミュレートされる前記IOMMU MMIOレジスタは、変換テーブルベースアドレス及びIOMMU制御レジスタを含む、
    請求項20の方法。
  22. 前記IOMMUがキャッシュメモリを備え、
    前記方法は、
    前記ハイパーバイザが、前記IOMMU MMIOレジスタのセットの各々のコピーの一部から、前記IOMMU MMIOレジスタ内の情報のコピーをキャッシュすることを含む、
    請求項12の方法。
JP2021570831A 2019-05-27 2020-05-25 入出力メモリ管理ユニットレジスタのコピーのゲストオペレーティングシステムへの提供 Active JP7564830B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/423,077 2019-05-27
US16/423,077 US10909053B2 (en) 2019-05-27 2019-05-27 Providing copies of input-output memory management unit registers to guest operating systems
PCT/US2020/034455 WO2020243043A1 (en) 2019-05-27 2020-05-25 Providing copies of input-output memory management unit registers to guest operating systems

Publications (2)

Publication Number Publication Date
JP2022534977A true JP2022534977A (ja) 2022-08-04
JP7564830B2 JP7564830B2 (ja) 2024-10-09

Family

ID=73549697

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021570831A Active JP7564830B2 (ja) 2019-05-27 2020-05-25 入出力メモリ管理ユニットレジスタのコピーのゲストオペレーティングシステムへの提供

Country Status (6)

Country Link
US (2) US10909053B2 (ja)
EP (1) EP3977286A4 (ja)
JP (1) JP7564830B2 (ja)
KR (1) KR20220001016A (ja)
CN (1) CN113906389A (ja)
WO (1) WO2020243043A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10380039B2 (en) * 2017-04-07 2019-08-13 Intel Corporation Apparatus and method for memory management in a graphics processing environment
US11301402B2 (en) * 2020-04-30 2022-04-12 Red Hat, Inc. Non-interrupting portable page request interface
US12020053B2 (en) 2021-03-29 2024-06-25 Red Hat, Inc. Exposing untrusted devices to virtual machines

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7035963B2 (en) * 2000-12-27 2006-04-25 Intel Corporation Method for resolving address space conflicts between a virtual machine monitor and a guest operating system
JP4346850B2 (ja) 2001-01-23 2009-10-21 インターナショナル・ビジネス・マシーンズ・コーポレーション Osイメージごとに論理分割された論理分割データ処理システム
JP4322232B2 (ja) * 2005-06-14 2009-08-26 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US8291180B2 (en) * 2008-03-20 2012-10-16 Vmware, Inc. Loose synchronization of virtual disks
US9535849B2 (en) 2009-07-24 2017-01-03 Advanced Micro Devices, Inc. IOMMU using two-level address translation for I/O and computation offload devices on a peripheral interconnect
US8386745B2 (en) * 2009-07-24 2013-02-26 Advanced Micro Devices, Inc. I/O memory management unit including multilevel address translation for I/O and computation offload
US8347294B2 (en) * 2009-10-14 2013-01-01 Oracle International Corporation Automated administration using composites of atomic operations
US8635385B2 (en) 2010-07-16 2014-01-21 Advanced Micro Devices, Inc. Mechanism to handle peripheral page faults
US20120167082A1 (en) 2010-12-23 2012-06-28 Sanjay Kumar Direct sharing of smart devices through virtualization
US8719464B2 (en) 2011-11-30 2014-05-06 Advanced Micro Device, Inc. Efficient memory and resource management
US9424199B2 (en) 2012-08-29 2016-08-23 Advanced Micro Devices, Inc. Virtual input/output memory management unit within a guest virtual machine
US9134954B2 (en) * 2012-09-10 2015-09-15 Qualcomm Incorporated GPU memory buffer pre-fetch and pre-back signaling to avoid page-fault
US20160077981A1 (en) * 2014-09-12 2016-03-17 Advanced Micro Devices, Inc. Method and Apparatus for Efficient User-Level IO in a Virtualized System
CN106155933B (zh) 2016-07-06 2019-02-05 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass-through相结合的虚拟机内存共享方法
US10459850B2 (en) * 2016-09-20 2019-10-29 Advanced Micro Devices, Inc. System and method for virtualized process isolation including preventing a kernel from accessing user address space
US10013199B2 (en) 2016-11-15 2018-07-03 Red Hat Israel, Ltd. Translation bypass by host IOMMU for systems with virtual IOMMU
WO2018176360A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Scalable interrupt virtualization for input/output devices
US10140148B1 (en) 2017-08-30 2018-11-27 Red Hat Israel, Ltd. Copy based IOMMU emulation for out-of-process emulated devices

Also Published As

Publication number Publication date
WO2020243043A1 (en) 2020-12-03
EP3977286A4 (en) 2023-06-14
US20220269621A1 (en) 2022-08-25
US10909053B2 (en) 2021-02-02
CN113906389A (zh) 2022-01-07
JP7564830B2 (ja) 2024-10-09
KR20220001016A (ko) 2022-01-04
EP3977286A1 (en) 2022-04-06
US20200379927A1 (en) 2020-12-03

Similar Documents

Publication Publication Date Title
US7613898B2 (en) Virtualizing an IOMMU
US11907542B2 (en) Virtualized-in-hardware input output memory management
US7383374B2 (en) Method and apparatus for managing virtual addresses
KR101179341B1 (ko) 메모리 액세스 데이터 구조에 기초하는 직접 캐시 액세스트랜잭션의 수행
US11042495B2 (en) Providing interrupts from an input-output memory management unit to guest operating systems
JP7564830B2 (ja) 入出力メモリ管理ユニットレジスタのコピーのゲストオペレーティングシステムへの提供
CA2800632C (en) Enable/disable adapters of a computing environment
JP2015526829A (ja) ゲスト仮想マシン内の仮想入出力メモリ管理ユニット
JP2022536689A (ja) 入出力メモリ管理ユニットによるゲストオペレーティングシステムのバッファとログへのアクセス
JP7520843B2 (ja) 入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換
JP2024503259A (ja) 入出力デバイスによってアクセス可能なメモリのページの移行

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230427

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240416

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240507

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240807

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: 20240903

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240927

R150 Certificate of patent or registration of utility model

Ref document number: 7564830

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150