CN113906389A - 向访客操作系统提供输入输出存储器管理单元寄存器副本 - Google Patents
向访客操作系统提供输入输出存储器管理单元寄存器副本 Download PDFInfo
- Publication number
- CN113906389A CN113906389A CN202080039910.4A CN202080039910A CN113906389A CN 113906389 A CN113906389 A CN 113906389A CN 202080039910 A CN202080039910 A CN 202080039910A CN 113906389 A CN113906389 A CN 113906389A
- Authority
- CN
- China
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/151—Emulated 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寄存器的副本中的数据的对应访问。
Description
背景技术
相关技术
一些电子装置(例如,服务器或台式计算机等)支持诸如输入输出(IO)装置等的电子装置硬件的“虚拟化”。虚拟化涉及电子装置之上或之中的中间实体,从而向电子装置上执行的软件实例(例如,应用程序等)提供当实际上中间实体拦截/重定向或以其他方式协助软件实例进行的访问时软件实例能够直接访问电子装置硬件的错觉。举例来说,一个常见的中间实体是“虚拟机”。虚拟机是抽象电子装置硬件并仿真或呈现电子装置硬件的已知接口的软件实体,从而使软件实例能够在各种类型和布置的底层电子装置硬件上执行——可能包括将与软件实例以其他方式不兼容的电子装置硬件。在一些电子装置中,虚拟机支持执行一个或多个操作系统实例,称为“访客”操作系统。访客操作系统反过来提供用于执行其他软件实例(诸如生产力应用程序、数据库等)的环境。
在一些电子装置中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可以启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;终止或关闭虚拟机等。图1呈现了示出虚拟机和管理程序的框图。如图1中可见,存在三个虚拟机(VM)100,在每个虚拟机下执行访客操作系统(访客OS)102和一个或多个程序(PRGRMS)104,诸如数据库、软件应用程序等。虚拟机100与管理程序106通信,所述管理程序联接在主机操作系统(主机OS)108与虚拟机100之间。主机操作系统108提供电子装置硬件110与管理程序106之间的接口。此外,管理程序106联接在虚拟机100与输入输出管理单元(IOMMU)112之间,其中IOMMU 112用作IO装置硬件114的存储器管理单元和控制器。
管理程序执行的操作包括处理电子装置硬件与访客操作系统(或更广泛地说,虚拟机)之间的通信。举例来说,管理程序可以转译、重定向或以其他方式协助访客操作系统与输入输出管理单元(IOMMU)之间的通信。管理程序处理的通信包括诸如IOMMU的外围页面请求(PPR)日志和事件日志写入以及访客操作系统的命令缓冲区写入的通信。PPR日志、事件日志和命令缓冲区写入在2016年12月的AMD I/O虚拟化技术(IOMMU)规范,修订版3.00中进行了详细描述,该规范的全部内容以引用的方式并入本文中。
图2呈现了示出由管理程序处理的访客操作系统与IOMMU之间的通信的框图。在图2中,许多元素以点状显示;这些元素是存储在存储器(例如,电子装置的主存储器)中并因此通过典型的存储器访问技术访问的日志、缓冲区等。图2中的元素与访客操作系统102、管理程序106和IOMMU 112一起包括访客外围页面请求(PPR)日志200、访客命令缓冲区(CMDBUF)202和访客事件日志204,它们是存储器中用于存储来自和去往访客操作系统102的通信的结构(例如,列表、表格等)。此外,元素包括访客指针(PTRS)/状态寄存器(REGS)206,它们是存储器中的一组位置,用于存储指向访客操作系统结构的指针和与访客操作系统相关联的状态信息。元素还包括IOMMU外围页面请求日志208、IOMMU命令缓冲区210和IOMMU事件日志212,它们是存储器中的用于存储来自和去往IOMMU 112的通信的结构(例如,列表、表格等)。元素还包括IOMMU 112中的IOMMU存储器映射的输入输出(MMIO)指针/状态寄存器(REGS)214,它们是IOMMU 112中的一组寄存器,用于存储指向各种IOMMU 112结构的指针和与IOMMU 112相关联的状态信息。
在操作中,并且使用命令作为示例,访客操作系统102将去往IOMMU 112的命令写入到访客命令缓冲区202(即,写入到存储器的缓冲区中的下一个可用位置,其中存储有来自访客操作系统102的命令)。管理程序106(如图2中的虚线所示)检测访客操作系统对访客命令缓冲区202的写入,获取和处理命令(例如,用对应主机域ID和/或装置ID替换命令中的访客域ID和/或访客装置ID等),并将处理的命令存储在IOMMU命令缓冲区210中。管理程序106还为IOMMU命令缓冲区210更新IOMMU MMIO指针/状态寄存器214中的尾指针,以指示新写入的命令(例如,将尾指针增量到IOMMU命令缓冲区210中的下一位置)。然后,IOMMU 112使用命令缓冲区头指针从IOMMU命令缓冲区210检索命令并执行命令,这使得IOMMU 112执行对应动作。管理程序106执行类似操作:IOMMU 112写入到IOMMU外围页面请求日志208和IOMMU事件日志212(例如,用访客装置ID替换主机装置ID等)。由于管理程序106执行的存储器读写、指针的更新以及其他操作的延迟较长,因此使用管理程序106介入在访客操作系统102与IOMMU 112之间会导致处理通信的延迟,并使得处理器忙碌并在电子装置的存储器总线上增加流量。
附图说明
图1呈现了示出虚拟机和管理程序的框图。
图2呈现了示出由管理程序处理的访客操作系统与IOMMU之间的通信的框图。
图3呈现示出了根据一些实施方案的虚拟机和管理程序的框图。
图4呈现示出了根据一些实施方案的电子装置的框图。
图5呈现示出了根据一些实施方案的IOMMU访问的存储器部分的框图。
图6呈现示出了根据一些实施方案的存储在IOMMU MMIO寄存器的访客副本中的值的框图。
图7呈现示出了根据一些实施方案的由IOMMU处理的访客操作系统与IOMMU之间的通信的框图。
图8呈现示出了根据一些实施方案的IOMMU代表访客操作系统访问IOMMU后备存储区中的IOMMU MMIO寄存器的副本的过程。
图9呈现示出了根据一些实施方案的访客操作系统写入到IOMMU后备存储区中的IOMMU MMIO寄存器的副本并由IOMMU从其中进行读取的过程的流程图。
图10呈现示出了根据一些实施方案的IOMMU写入到IOMMU后备存储区中的IOMMUMMIO寄存器的副本并由访客操作系统从其中进行读取的过程的流程图。
在整个附图和描述中,相同附图标记指代相同的附图元件。
具体实施方式
呈现以下描述以使本领域的任何技术人员能够制造和使用所描述的实施方案,并且在特定应用及其要求的上下文中提供以下描述。对所描述的实施方案的各种修改对于本领域技术人员来说将是明显的,并且可将本文中定义的一般原理应用于其他实施方案和应用。因此,所描述的实施方案不限于所示的实施方案,而是要被赋予与本文中公开的原理和特征一致的最宽范围。
术语
在以下描述中,使用各种术语来描述实施方案。以下是这些术语之一的简化且一般描述。注意,该术语可具有重要的附加方面,为了清楚和简洁起见,本文中没有列举所述附加方面,并且因此所述描述并不旨在限制所述术语。
功能块:功能块是指一个或多个相互关联的电路元件(例如集成电路元件、分立电路元件等)的组、集合和/或集。电路元件是“相互关联的”,因为电路元件共享至少一种性质。举例来说,相互关联的电路元件可包括在特定的集成电路芯片或其一部分中、制造在特定的集成电路芯片或其一部分上或以其他方式耦合到特定的集成电路芯片或其一部分,可牵涉到给定功能(计算或处理功能、存储器功能等)的执行,可由公共控制元件和/或公共块来控制等。功能块可包括任意数量的电路元件,从单个电路元件(例如,单个集成电路逻辑门)到数百万或数十亿的电路元件(例如,集成电路存储器)。
虚拟化、虚拟机和管理程序
所描述的实施方案支持诸如存储器、输入输出(IO)装置等的电子装置硬件的“虚拟化”。虚拟化通常涉及电子装置之上或之中的中间实体,从而向电子装置上执行的软件实例提供当实际上中间实体拦截/重定向、转译或以其他方式协助软件实例进行的访问时软件实例能够直接访问电子装置硬件的错觉。举例来说,中间实体可以向软件实例呈现一组电子装置寄存器、存储器位置、电子装置设置和其他功能块,所述功能块在软件实例看来是电子装置的实际装置寄存器、存储器位置等,而只是由中间实体呈现的副本。在这种情况下,中间实体接收、拦截或以其他方式获取对电子装置硬件的副本的访问,并代表软件实例与实际的电子装置硬件进行对应交互。电子装置硬件的虚拟化有许多好处,诸如使不同的电子装置能够使用电子装置硬件的不同布置、电子装置硬件的不同地址、位置或标识符等,而软件实例则经由中间实体具有与电子装置硬件相同的接口。此外,中间实体可以确定是允许还是阻止给定软件实例对电子装置硬件的访问,并且因此电子装置硬件的虚拟化实现对电子装置硬件(或其部分)和/或在电子装置上执行的软件实例的保护。通过如上所述控制访问,中间实体可以在多个软件实例之间共享电子装置硬件和/或向各个软件实例提供对电子装置硬件的部分的独占访问。
在所描述的实施方案中,中间实体包括“虚拟机”。虚拟机是抽象电子装置硬件并向软件实例呈现到实际或仿真电子装置硬件的已知接口的软件实体。抽象硬件使软件实例能够在各种类型和布置的底层电子装置硬件上执行——可能包括将与软件实例以其他方式不兼容的电子装置硬件。在所描述的实施方案中,虚拟机支持执行一个或多个操作系统实例,称为“访客”操作系统。访客操作系统反过来提供用于执行其他软件程序(诸如应用程序、数据库等)的环境。
在所描述的实施方案中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可以启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;终止或关闭虚拟机等。图3呈现示出了根据一些实施方案的虚拟机和管理程序的框图。如图3中可见,存在三个虚拟机(VM)300,在每个虚拟机下执行访客操作系统(访客OS)302和一个或多个程序(PRGRMS)304,诸如数据库、软件应用程序等。虚拟机300与管理程序306通信,所述管理程序联接在主机操作系统(主机OS)308与虚拟机300之间。主机操作系统308提供电子装置硬件310与管理程序306之间的接口。与针对现有电子装置的图1中所示的不同,在图3中,IOMMU312直接联接在访客操作系统302与IO装置硬件314之间,而无需管理程序306介入(如IOMMU312与访客操作系统302之间的较粗线所示)。因此,与现有电子装置不同,在所描述的实施方案中,管理程序306不负责执行用于处理访客操作系统302与IOMMU 312之间的通信的至少一些操作,如本文所述。然而,注意,某些通信发生在IOMMU 312与管理程序306之间,如管理程序306与IOMMU 312之间的线所示。此外,注意,在一些实施方案中,主机操作系统308不存在并且管理程序306更直接地与电子装置硬件310通信。
综述
在所描述的实施方案中,电子装置包括处理器、存储器(例如,主存储器)、多个输入输出(IO)装置(例如,网络接口装置、磁盘控制器等)以及联接在处理器与IO装置之间的输入输出存储器管理单元(IOMMU)。处理器执行管理程序、一个或多个虚拟机以及在虚拟机中的访客操作系统。访客操作系统中的每个访客操作系统被分配有存储器的访客部分(例如,存储器的连续或不连续区域或块),所述访客部分被保留用于存储将由该访客操作系统访问的数据和信息。在所描述的实施方案中,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个副本(即,缓冲区和日志的一组指针和控制值),每个访客操作系统一个副本。
由于跟踪所有可能的访客操作系统的缓冲区和日志所需的寄存器数量(可能非常大),IOMMU MMIO寄存器的单独副本并不实际存在于IOMMU中。相反,访客操作系统的IOMMUMMIO寄存器集的单独副本存储在IOMMU后备存储区中,所述后备存储区是主存储器的保留用于存储IOMMU的数据和信息的一部分。在所描述的实施方案中,IOMMU“虚拟化”IOMMUMMIO寄存器,或向访客操作系统(以及可能的其他实体,例如管理程序等)呈现访客操作系统能够经由指定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后备存储区中的给定IOMMUMMIO寄存器的副本中的数据的对应访问。继续本示例,IOMMU可以将更新的数据(例如,命令缓冲区尾指针的新地址)写入到IOMMU后备存储区中针对访客操作系统的命令缓冲区尾指针寄存器的副本。除了访客操作系统访问IOMMU MMIO寄存器的副本之外,在一些实施方案中,IOMMU本身更新后备存储区中的IOMMU MMIO寄存器的副本。举例来说,在一些实施方案中,IOMMU可以在已按先进先出顺序处理来自访客命令缓冲区的命令之后更新针对访客操作系统的命令缓冲区头指针(和/或其他命令缓冲区值)。
在一些实施方案中,由于与IOMMU后备存储区中的IOMMU MMIO寄存器的副本相关联的地址的虚拟化,各种实体执行用于计算、转译或以其他方式确定IOMMU MMIO寄存器的副本在IOMMU后备存储区中所在的物理地址的操作。在这些实施方案的一些中,给定访客操作系统使用对应访客虚拟地址访问IOMMU MMIO寄存器,所述地址是由给定访客操作系统生成或提供给给定访客操作系统的IOMMU MMIO寄存器的本地地址。访客虚拟地址由处理器中的存储器管理单元(MMU)(例如,使用一个或多个页表)转译为IOMMU MMIO地址——即,转译为系统物理地址,所述系统物理地址落入IOMMU的MMIO孔径/接口内在用于映射IOMMU MMIO寄存器的访客副本的范围内。由于IOMMU MMIO地址已被虚拟化以便用于多个访客操作系统,因此IOMMU接下来为给定访客操作系统确定IOMMU MMIO寄存器的特定副本的地址。对于该过程,IOMMU首先基于给定访客操作系统的标识符和MMU提供的系统物理地址,使用算法、表格等为给定访客操作系统的IOMMU MMIO寄存器的副本计算IOMMU虚拟地址。IOMMU然后使用一个或多个页表将IOMMU虚拟地址转译为IOMMU后备存储区中存储给定访客操作系统的IOMMU MMIO寄存器的副本的系统物理地址。
在一些实施方案中,当访客操作系统检测到IOMMU MMIO寄存器中的数据更新时,IOMMU执行一个或多个对应处理操作。例如,在一些实施方案中,响应于检测到访客操作系统已更新对应IOMMU MMIO寄存器中该访客操作系统的命令缓冲区尾指针(即,其在后备存储区中的副本),IOMMU从该访客操作系统的命令缓冲区中检索命令并处理命令。
在一些实施方案中,管理程序模拟某些IOMMU MMIO寄存器,这些寄存器不包括在针对存储在IOMMU后备存储区中的访客操作系统的IOMMU MMIO寄存器集的单独副本中。例如,在一些实施方案中,管理程序模拟IOMMU的IOMMU控制MMIO寄存器、转译表基地址MMIO寄存器等。在这些实施方案中,管理程序拦截访客操作系统对模拟IOMMU MMIO寄存器的访问,并经由IOMMU执行对应访问。
在一些实施方案中,IOMMU在IOMMU中的本地高速缓存存储器中存储来自一些单独IOMMU MMIO寄存器集的IOMMU MMIO寄存器的副本的信息的副本。例如,IOMMU可以为相应访客操作系统存储来自各个IOMMU MMIO寄存器的最近使用或经常使用的值的副本。
通过提供用于访问存储器的访客部分中的缓冲区和日志的IOMMU MMIO寄存器集的单独副本,IOMMU使得能够直接访问存储器的访客部分中的缓冲区和日志。这意味着与现有系统一样,IOMMU没有义务依赖管理程序来处理对缓冲区和日志的访问。将这些操作从管理程序(以软件实现)移至IOMMU(以硬件实现)加快了操作速度,需要更少的存储器系统带宽,并减少处理器中计算功能块的负载,这改善了电子装置的整体性能。电子装置性能的改善带来更高的用户满意度。
电子装置
图4呈现示出了根据一些实施方案的电子装置400的框图。如图4中可见,电子装置400包括处理器402、存储器404、大容量存储装置406、输入输出(IO)装置408-412、输入输出(IO)集线器414和存储器控制器416。
处理器402是在电子装置400中执行计算操作的功能块。处理器402包括两个核心418-420,每个核心包括一个或多个计算机制,诸如中央处理单元(CPU)核心、图形处理单元(GPU)核心、嵌入式处理器、专用集成电路(ASIC)和/或其他计算机制。处理器402还包括存储器管理单元(MMU)422,其是执行与地址转译(例如,页表遍历、转译后备缓冲区查找等)、存储器访问保护等相关联的操作的功能块,以由核心418-420进行存储器访问。
存储器404是执行电子装置400中的存储器(例如,“主”存储器)的操作的功能块。存储器404包括:存储器电路,诸如动态随机存取存储器(DRAM)、双倍数据速率同步DRAM(DDR SDRAM)和/或用于存储由电子装置400中的其他功能块使用的数据和指令的其他类型的存储器电路中的一个或多个;以及控制电路,所述控制电路用于处理对存储在存储器电路中的数据和指令的访问(例如,读取、写入、检查、删除、使无效等)。
大容量存储装置406是功能块和/或装置,其执行高容量非易失性存储元件的操作以存储数据和指令以供电子装置400中的其他功能块使用。大容量存储装置406可以是或包括高容量半导体存储器(例如,闪存等)、磁盘驱动器(硬盘驱动器等)、光驱等。获取存储在大容量存储装置406中的数据和指令的副本并将其存储在存储器404中以供电子装置400中的其他功能块使用。举例来说,在一些实施方案中,以给定大小(例如,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之间等),因此转换或转译相关联通信。
IO集线器414包括IOMMU 424,它是一个功能块,其执行用于使IO装置408-412能够访问存储器404中的数据和/或指令的操作、与处理器402(以及由其执行的访客操作系统)通信等。在这些实施方案中,当存储器404中的IO装置(例如,IO装置408)要访问数据和指令时,IO装置向IOMMU 424发送存储器访问请求(例如,直接存储器访问请求或DMA)。然后,IOMMU 424向存储器404发送对应请求以满足存储器访问请求。举例来说,在一些实施方案中,如果要基于存储器访问请求检索数据,则IOMMU 424从存储器404(或大容量存储装置406,如果数据不存在于存储器404中)获取数据并将数据转发到请求IO装置。在一些实施方案中,IOMMU 424包括页表、转译后备缓冲区和/或用于将IO装置408-412使用的“虚拟”或本地存储器地址转译成数据实际上所在的存储器404中的物理地址的其他功能块。
在所描述的实施方案中,IOMMU 424与由虚拟机中的核心418-420执行的访客操作系统通信,反之亦然。举例来说,在一些实施方案中,IOMMU 424(或经由IOMMU 424的IO装置408-412)将事件和外围页面请求(PPR)传送到访客操作系统。在这些实施方案中,IOMMU424经由存储器404中的共享访客事件日志向访客操作系统报告诸如IO页面错误(代表IO装置408-412的页表遍历)、IOMMU 424硬件错误等事件。此外,在这些实施方案中,IOMMU 424向访客操作系统转发来自外围装置(IO装置)的PPR,所述PPR经由存储器404中的共享访客PPR日志使用众所周知的地址转译服务或ATS标准进行存储器页面服务操作(即,执行对存储器404中的可由访客操作系统访问的页面上的或与其相关联的操作)。作为另一个示例,在一些实施方案中,访客操作系统将命令传送到IOMMU 424。在这些实施方案中,访客操作系统经由存储器404中的共享访客命令缓冲区向IOMMU 424发出命令以控制IOMMU 424和/或IO装置408-412,诸如完成等待(其用作强制较早的命令在IOMMU 424进行之前完成的命令屏障)、装置表条目失效、IOMMU 424转译后备缓冲区条目失效等。
在一些实施方案中,IOMMU 424提供到访客操作系统的接口,所述接口包括用于与IOMMU 424通信的存储器映射的位置、寄存器等。举例来说,在一些实施方案中,IOMMU 424提供存储器映射的输入输出(MMIO)存储器位置集,访客操作系统可以向其写入值,以便IOMMU 424将接收到所述值。在一些实施方案中,接口被虚拟化,因为如访客操作系统所假定的,存储器位置、寄存器等未被用于存储值,而是简单地由IOMMU 424呈现。在这些实施方案中,IOMMU 424可以经由接口从访客操作系统(例如,寻址到IOMMU MMIO地址等)接收值,但是使用IOMMU后备存储区426和/或存储器404中的其他位置来将所述值的单独副本存储在每个访客操作系统的存储器位置、寄存器等中。下面更详细地描述了由IOMMU 424访问以与访客操作系统和其他实体(例如,处理器402等)通信的存储器。
在一些实施方案中,虽然未在图4中示出,IOMMU 424包括用于存储IOMMU 424的数据或信息的副本的本地高速缓存存储器。例如,在一些实施方案中,高速缓存存储器用于存储来自IOMMU后备存储区426的最近使用或经常使用的数据的副本,诸如给定访客操作系统的IOMMU MMIO寄存器的值集和/或其中的各个值。高速缓存存储器小于IOMMU后备存储区426,并且因此可能仅具有用于存储IOMMU后备存储区426中存储的数据和信息的一部分(并且可能是一小部分)的容量(即,存储器位置)。
访客存储器428是存储器404(例如,存储器的一个或多个连续或非连续页面或块)的一部分,所述部分被对应访客操作系统用于存储将由访客操作系统使用的数据和信息。通常,访客操作系统和/或其他实体可以使用访客存储器428来存储由访客操作系统和/或其他实体使用的任何形式的数据和信息。在一些实施方案中,访客存储器428受到保护并且仅允许某些实体访问访客存储器428。例如,电子装置400中的对应访客操作系统、管理程序、安全处理器和/或操作系统可以通过将对访客存储器428的访问限制到对应访客操作系统和指定的其他装置和/或功能块来“保护”访客存储器428。在一些实施方案中,访客存储器428被加密或以其他方式使得不可被不希望的实体访问。在一些实施方案中,访客存储器428用于存储访客事件日志、访客外围页面请求(PPR)日志和访客命令缓冲区,它们是用于访客操作系统与IOMMU之间的通信的数据结构(例如,表格、列表等)。下面更详细地描述了访客事件日志、访客外围页面请求(PPR)日志和访客命令缓冲区。
在一些实施方案中,通信路径耦合在电子装置400中的各种功能块(处理器402、存储器控制器416、存储器404等)之间,如元件之间的箭头线所示。通信路径包括一条或多条总线、电线、导线和/或其他可能与控制器、结构元件(交换机、路由器等)、电路元件等一起的连接。通信路径用于路由命令、数据、控制信号和/或功能块之间的其他信息。举例来说,在一些实施方案中,相干总线结构或互连耦合在IO集线器414、处理器402(例如,MMU 422)和存储器404之间。注意,为清楚起见,电子装置400中的一些通信路径未在图4中示出。
在一些实施方案中,图3中的电子装置硬件310包括诸如处理器402和存储器404的功能块和装置,并且IO装置硬件314包括诸如IO装置408-412的功能块和装置。在这些实施方案中,图3中的IOMMU 312和图4中的IOMMU 424至少执行一些相同的操作。
电子装置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用于将从访客操作系统到IOMMU的通信(或相反,从IOMMU到访客操作系统的通信)中的访客域ID和/或装置ID转译或转换为主机域ID和/或装置ID的信息。域ID和装置ID在2016年12月的AMD I/O虚拟化技术(IOMMU)规范,修订版3.00中进行了详细描述,其如以上所述以引用方式并入本文。
在一些实施方案中,ID转译表502分别包括针对域ID的表(显示为域ID映射表504)和针对装置ID的表(显示为装置ID映射表506),但是并不需要单独的表(并且因此所有的转译可以被包括在单个表中)。域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。通常,访客MMIO 510包括用于访问存储器404的访客部分(例如,访客存储器428)中的访客操作系统的缓冲区和日志(例如,访客命令缓冲区、访客事件日志和访客PPR日志)的指针和控制信息。更具体地,对于每个支持的访客操作系统,访客MMIO 510包括用于控制对存储器404的访客部分中的缓冲区和日志的访问的值的副本。举例来说,在一些实施方案中,IOMMU支持(可以与之交互、处理其通信等)2N个访客操作系统,其中N=10、16或其他值,并且因此访客MMIO510包括值的多达2N个副本,每个支持的访客操作系统都有一个。在所描述的实施方案中,用于控制访问的值类似于存储在现有装置中的IOMMU MMIO寄存器中的值,但是为每个支持的访客操作系统保留单独的值集,指的是该访客操作系统的存储器404的访客部分(而不是现有装置中的IOMMU中的单个副本)。
图6呈现示出了根据一些实施方案的存储在访客MMIO 510中的值的框图。对于图6中的示例,示出了给定访客操作系统的单个完整IOMMU MMIO寄存器集的值以及单个完整值集之上和之下的两个相邻IOMMU MMIO寄存器集的部分的值。以这种方式示出图6以说明,如上所述,在一些实施方案中,IOMMU后备存储区426包括多个单独的值集,每个值集与给定的访客操作系统相关联。虽然图6作为示例呈现,但是在一些实施方案中,访客MMIO 510存储不同的值或不同排列的值。通常,访客MMIO 510和/或另一实体存储足够的信息以访问如本文所述的存储器的访客部分中的缓冲区和日志。
访客MMIO 510中的每个值集中的值通常可以分组为与访客命令(CMD)缓冲区、访客事件日志和访客操作系统的访客PPR日志相关联的值。对于访客命令缓冲区,值包括命令尾指针600,它是指示存储器404的对应访客部分中访客命令缓冲区的结束、末尾或最近写入条目的指针或其他引用。换句话说,命令尾指针600保存指示命令缓冲区的末尾或最近写入条目所在位置的诸如存储器地址之类的指针或引用,例如存储器404的访客部分中物理地址的一些或所有位。访客命令缓冲区的值还包括命令头指针602,它是指示命令缓冲区的头或基的指针或其他引用,即存储器404的对应访客部分中命令缓冲区开始的位置和/或缓冲的命令开始的位置。访客命令缓冲区的值还包括命令长度604,它是指示命令缓冲区的当前大小或最大大小的值,诸如条目数或字节数。访客命令缓冲区的值还包括命令控制606,它是位集或位序列,所述位集或位序列包括指示访客操作系统和/或存储器404的对应访客部分中的命令缓冲区的配置的多个位(或其组合)。举例来说,在一些实施方案中,命令控制606包括位,所述位指示是否启用某些与命令缓冲区相关的中断、是否启用(或禁用/暂停)命令缓冲或处理、什么类型的命令存在或被允许存在于命令缓冲区中等。举例来说,在一些实施方案中,命令控制606包括与在AMD I/O虚拟化技术(IOMMU)规范修订版3.00中描述的那些类似的命令缓冲区的控制值,所述规范如上所述通过引用并入本文——诸如CmdWaitInt、CmdBufRun、CmdWaitInteEn、CmdBufEn和/或其他值。
在一些实施方案中,通过使用命令头指针602指向待读取的命令缓冲区中的下一条目/位置以及使用命令尾指针600指示命令缓冲区中最后/最近添加的条目/位置(当命令缓冲区中仅存储一个命令时,它们可以是同一条目/位置),命令缓冲区被实现为环形缓冲区。在这些实施方案中,随着从条目中读取命令并对其进行处理,命令头指针602前进一个条目,直到命令头指针602和命令尾指针600指示相同的条目或相邻的条目。在这些实施方案的一些中,命令长度604存储命令缓冲区的最大长度。使用指针来实现环形缓冲区在本领域中是公知的,因此本文不再详细描述。
对于事件日志,访客MMIO 510中的值(即事件尾指针608、事件头指针610、事件长度612和事件控制614)在功能上类似于上文针对命令缓冲区描述的那些值,但是这些值用于访问存储器404的对应访客部分中的事件日志。PPR日志也是如此,因为访客MMIO 510中的值(即PPR尾指针616、PPR头指针618、PPR长度620和PPR控制622)在功能上类似于上文针对命令缓冲区描述的那些值,但是这些值用于访问存储器404的对应访客部分中的PPR日志。
在一些实施方案中,在任何给定时间在电子装置400中执行的访客操作系统的数量可能少于所支持的数量(并且可能少很多)——并且因此,在这些实施方案中,IOMMU后备存储区500被动态地调整为包括足够的空间用于存储访客MMIO 510等。换句话说,当访客操作系统被初始化时,管理程序和/或另一实体可以分配、追加或激活IOMMU后备存储区500中(即,访客MMIO 510中)的空间用于存储访客操作系统的IOMMU MMIO寄存器值。
在一些实施方案中,管理程序至少执行针对IOMMU后备存储区500的一些初始化操作。例如,在一些实施方案中,管理程序在存储器404中分配用于存储IOMMU后备存储区的存储器,例如连续或分散的存储器页面。如上所述,存储器404是电子装置400中被各种功能块(例如,核心418-420等)用于存储数据和信息的通用存储器——并且不仅仅是IOMMU中的本地存储器。因此,该操作涉及管理程序在电子装置400的“主”存储器中分配用于存储IOMMU后备存储区的空间。作为另一示例,在一些实施方案中,管理程序经由IOMMU将初始值写入到每个活动访客操作系统的后备存储区中的IOMMU MMIO寄存器的副本中。因此,管理程序将每个活动访客操作系统的指针的初始值和控制值写入到IOMMU后备存储区中的IOMMUMMIO寄存器的对应副本中,诸如在访客操作系统启动时。
在一些实施方案中,在IOMMU后备存储区中的IOMMU MMIO寄存器的副本中仅包括可用IOMMU MMIO寄存器子集。在这些实施方案中,IOMMU本身可以提供其他寄存器。例如,在一些实施方案中,IOMMU中存储IOMMU控制值(例如,IOMMU启用/禁用等)、页表基地址等的寄存器由IOMMU提供。通常,不用于访问访客操作系统的存储器部分中的缓冲区和日志的IOMMU MMIO寄存器不会作为副本呈现,而是由IOMMU提供每个寄存器的单个副本。在这些实施方案的一些中,管理程序为访客操作系统模拟这些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中活动的每个访客操作系统与存储器的对应单独访客部分(即,存储器404中的多个页面)相关联,所述单独访客部分包括该访客操作系统使用并可由IOMMU访问的访客事件日志、外围页面请求日志和访客命令缓冲区。这在图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和/或其部分(控制位等)被电子装置400中的其他实体经由IOMMU访问(例如,通过向IOMMU发送请求)或者不可由其他实体访问。举例来说,IOMMU后备存储区500中的至少一些数据和信息可以由其他实体经由对对应IOMMUMMIO寄存器的写入和读取来访问。
IOMMU和访客操作系统通信
在所描述的实施方案中,IOMMU(例如,IOMMU 424)处理IOMMU(或由其服务的IO装置)与访客操作系统之间的通信。图7呈现示出了根据一些实施方案的由IOMMU 702处理的访客操作系统700与IOMMU 702之间的通信的框图。尽管在图7中以特定布置示出了多个元件,但是其他实施方案使用不同数量或布置的元件。通常,在所描述的实施方案中,IOMMU702包括或访问足够的元件以实现本文描述的操作。在图7中,许多元件显示为点状;这些元件是存储在存储器中(例如,在IOMMU后备存储区500中、在访客存储器512等中)并由IOMMU702、访客操作系统700和/或使用典型存储器访问技术的其他实体访问的日志、缓冲区等。在一些实施方案中,访客操作系统700、IOMMU 702和管理程序704以与图3中的访客操作系统302、IOMMU 312和管理程序306类似的方式组织,但这不是必需的。
如图7中可见,并且与针对现有系统的图2所示的不同,在所描述的实施方案中,IOMMU 702和访客操作系统700彼此更直接地通信。换句话说,IOMMU 702和访客操作系统700经由存储器中(即,访客操作系统700的存储器的访客部分(例如,访客存储器428))的访客事件日志514、访客PPR日志516和访客命令缓冲区(BUFF)518彼此通信。此外,访客操作系统700和IOMMU 702使用访客控制508和访客MMIO 510来规定如何执行通信。举例来说,在一些实施方案中,IOMMU 702使用访客MMIO 510中的指针来确定访客操作系统700的访客事件日志514、访客命令缓冲区518和访客PPR日志516在存储器中的位置。管理程序704不介入并且不以其他方式参与用于完成这些通信的一些或全部操作。举例来说,管理程序704不执行诸如为这些通信转译域ID和装置ID、访问访客MMIO 510中的指针和/或访问存储器的访客部分中的缓冲区和日志之类的操作。相反,IOMMU 702执行这些操作。由于IOMMU 702转译域ID和装置ID并从访客MMIO 510等获取信息,所描述的实施方案避免使用管理程序704来处理访客操作系统700与IOMMU 702之间的至少部分通信,这可能意味着通信更快地完成,导致处理器402和存储器404等的负载更少。
在操作中,以命令为例,访客操作系统700将invalidate_IOMM U_pages命令写入到访客命令缓冲区518,所述命令导致IOMMU 702使IOMMU转译高速缓存中的一系列条目无效,如命令中的域ID所指定。换句话说,访客操作系统在存储器的对应访客部分中执行存储器写入以更新访客命令缓冲区518中的下一打开/可用条目以包括针对invalidate_IOMMU_pages命令的数据(即,表示命令的位)。然后,访客操作系统700向IOMMU发送写入命令以更新(例如,推进、增加等)对应IOMMU MMIO寄存器中的命令缓冲区尾指针(例如,命令尾指针600)以指示访客操作系统700将命令写入到命令缓冲区。IOM MU 702检测访客操作系统700对命令缓冲区尾指针的写入,例如通过监听对对应访客命令缓冲区中的地址的写入、检测缓冲区尾指针的值的变化、接收来自访客操作系统700的写入命令等。在检测到命令缓冲区尾指针的写入时,IOMMU 702使用命令缓冲区头指针的值(例如,命令头指针602)来从存储器的访客部分中的命令缓冲区检索下一命令,并为处理命令做好准备(例如,替换与命令中的访客域ID相关联的主机域ID等)。然后,IOMMU 702处理命令,从而导致IOMM U 702使IOMMU 702的转译高速缓存中由主机域ID指示的一系列条目无效。IOMMU 702至少执行一些类似的操作:将IOMMU 702写入到访客PPR日志516和访客事件日志514,尽管是相反的,因为IOMMU 702写入这些日志并且访客操作系统700读取日志。
尽管管理程序704不参与访客操作系统700与IOMMU 702之间的通信的某些部分,例如访客域ID到主机域ID的转译,但是管理程序704和访客操作系统700和/或IOMMU 702可以单独交换与访客操作系统700与IOMMU 702之间的通信相关联的通信,或者管理程序704可以其他方式参与确保访客操作系统700和/或IOMMU 702正确地处理通信。举例来说,管理程序704可以直接(例如,通过通信)或间接(例如,通过监听存储器访问)确定IOMMU 702或访客操作系统700已执行指定操作(例如,写入到缓冲区或日志)并且可以执行诸如向访客操作系统700和/或IOMMU 702发送中断信号、更新用作标志的共享存储器位置等的操作。如上所述,管理程序704还可以初始化IOMMU后备存储区等。
使用IOMMU
MMIO寄存器值的过程
在所描述的实施方案中,IOMMU(例如,IOMMU 702)执行用于向访客操作系统(例如,访客操作系统700)提供IOMMU MMIO寄存器的虚拟副本的操作。如上所述,这些操作包括代表访客操作系统访问存储在IOMMU后备存储区中的IOMMU MMIO寄存器的对应副本。图8呈现示出了根据一些实施方案的IOMMU代表访客操作系统访问IOMMU后备存储区中的IOMMUMMIO寄存器的副本的过程。注意,图8所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
图8所示的用于访问IOMMU MMIO寄存器的副本的操作在范围内是普遍的并且涉及各种类型的访问,例如读取、写入、失效等。图9至图10中呈现了更具体的示例,包括访客操作系统写入图9中的IOMMU MMIO寄存器的副本并且访客操作系统读取图10中的IOMMU MMIO寄存器的副本。
图8中的操作开始于IOMMU从访客操作系统接收访问给定IOMMU MMIO寄存器中的数据的通信(步骤800)。访问可以是读取IOMMU MMIO寄存器中的数据并且因此通信是读取请求,将数据写入IOMMU MMIO寄存器中并且因此通信是写入请求,和/或另一种访问,诸如失效等。例如,IOMMU可以从访客操作系统接收请求将特定数据写入命令缓冲区尾指针(例如,命令尾指针600)以便初始化或以其他方式更新命令缓冲区尾指针的通信。
IOMMU然后执行对与IOMMU后备存储区中的访客操作系统相关联的给定IOMMUMMIO寄存器的副本中的数据的对应访问(步骤802)。回想一下,IOMMU虚拟化了IOMMU MMIO寄存器,即向访客操作系统(和其他实体)呈现访客操作系统正在访问IOMMU中的实际MMIO寄存器的错觉,但IOMMU实际上使用每个支持的访客操作系统的IOMMU后备存储区中存储的IOMMU MMIO寄存器的单独副本。因此,该操作涉及IOMMU确定将在后备存储区中访问IOMMUMMIO寄存器的哪个副本,然后进行访问。
图9呈现示出了根据一些实施方案的访客操作系统写入到IOMMU后备存储区中的IOMMU MMIO寄存器的副本并由IOMMU从其中进行读取的过程的流程图。注意,图9所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
图9中的操作开始于访客操作系统(例如,访客操作系统700)将命令写入到存储器的访客部分(例如,访客存储器428)中的命令缓冲区(例如,访客命令缓冲器区518)时(步骤900)。例如,在一些实施方案中,访客命令缓冲区是存储器访客部分中包括多个条目的环形缓冲区,并且该操作涉及访客操作系统将命令(即,表示命令的位序列)写入到访客命令缓冲区中的下一可用条目。
因为访客操作系统已将需要由IOMMU(例如,IOMMU 702)处理的命令添加到访客命令缓冲区,所以访客操作系统将所述命令通知给IOMMU。更具体地,访客操作系统发送用于更新命令缓冲区尾指针的写入请求,所述写入请求指向存储命令缓冲区尾指针的IOMMUMMIO寄存器的访客虚拟地址(步骤902)。在所描述的实施方案中,访客操作系统使用本地或“虚拟”地址来访问IOMMU MMIO寄存器(并且可能不知道实际的IOMMU地址)。访客虚拟地址由执行访客操作系统的处理器中的存储器管理单元(MMU)转译为MMIO寄存器所在的IOMMU中的系统物理地址(即IOMMU MMIO地址)(例如,通过在访客操作系统的页表中执行页表遍历等)。如上所述,IOMMU虚拟化了IOMMU MMIO寄存器,所以MMU使用的系统物理地址不是访客操作系统的IOMMU MMIO寄存器的副本所在的地址,而是接口/孔径中被IOMMU识别为对MMIO寄存器的访问的IOMMU的地址。因此,在MMU中的转译之后,MMU将写入请求转发到与访客虚拟地址相关联的IOMMU MMIO地址(即,系统物理地址)处的IOMMU(步骤904)。
因为IOMMU MMIO地址只是IOMMU提供的用于接收来自访客操作系统的访问请求的地址,所以IOMMU也会进行转译以基于写入请求确定存储器中存储访客操作系统的命令缓冲区尾指针的副本的物理地址(步骤906)。在该操作期间,IOMMU使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在IOMMU后备存储区中访问IOMMU MMIO寄存器的哪个副本。对于该过程,IOMMU首先基于访客操作系统的标识符和MMU提供的系统物理地址,使用算法、表格等为访客操作系统的IOMMU MMIO寄存器的副本计算IOMMU虚拟地址。IOMMU然后使用一个或多个页表将IOMMU虚拟地址转译为IOMMU后备存储区中存储访客操作系统的IOMMU MMIO寄存器的副本的系统物理地址。
IOMMU然后在存储器中的物理地址处存储来自写入请求的数据,从而更新访客操作系统的命令缓冲区尾指针的副本(步骤908)。换句话说,IOMMU将诸如命令缓冲区尾指针的更新地址的一位或多位、条目标识符、运行计数等数据存储在IOMMU后备存储区中存储与访客操作系统相关联的命令缓冲区尾指针的副本的存储器位置中。更新导致命令缓冲区尾指针直接或间接指示命令已写入到访客命令缓冲区,并且因此正在等待IOMMU处理。在一些实施方案中,IOMMU、访客操作系统和/或另一实体还设置其他指针或指示符以指示命令在访客命令缓冲区中正等待处理或访客操作系统提供了命令。例如,在一些实施方案中,IOMMU包括一组命令等待位,每个支持的访客操作系统一个位,并且为访客操作系统设置(或清除)了命令等待位以指示命令在访客命令缓冲区中正等待处理。
基于检测到写入请求(或以其他方式确定命令正在等待处理),IOMMU使用来自命令缓冲区头指针(例如,命令头指针602)的副本的数据来执行一个或多个后续操作以处理访客命令缓冲区中的命令(步骤910)。例如,在一些实施方案中,命令缓冲区头指针的副本中的值存储存储器的访客部分中访客命令缓冲区的下一条目所在的位置的地址,并且IOMMU直接或间接使用所述地址来在处理命令之前从访客命令缓冲区获取命令。
图10呈现示出了根据一些实施方案的IOMMU写入到IOMMU后备存储区中的IOMMUMMIO寄存器的副本并由访客操作系统从其中进行读取的过程的流程图。注意,图10所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
图10中的操作开始于IOMMU(例如,IOMMU 702)将事件写入到访客操作系统(例如,访客存储器428)的存储器的访客部分中的访客事件日志(例如,访客事件日志514)时(步骤1000)。例如,在一些实施方案中,访客事件日志是存储器访客部分中包括多个条目的环形缓冲区,并且该操作涉及IOMMU将事件(即,表示事件的位序列)写入到访客事件日志中的下一可用条目。
在一些实施方案中,虽然为简洁起见在图10中未示出,但是IOMMU首先从与IOMMU后备存储区中的访客操作系统相关联的事件日志尾指针的副本和/或IOMMU MMIO指针的其他副本中获取关于访客事件日志的信息。IOMMU然后使用所述信息执行步骤1000。例如,在一些实施方案中,IOMMU使用从IOMMU后备存储区中访客操作系统的事件日志尾指针的副本获取的访客事件日志(或其中的可用条目)的位置的直接或间接指示(例如,物理地址等)来将事件写入到访客事件日志。为了获取关于访客事件日志的信息,在一些实施方案中,IOMMU以类似于步骤1002的方式确定事件日志尾指针的副本和/或IOMMU MMIO指针的其他副本的物理地址,然后使用物理地址来获取信息。
因为IOMMU已将事件添加到需要访客操作系统处理的访客事件日志,所以IOMMU将所述事件通知给访客操作系统。在一些实施方案中,通知访客操作系统包括更新IOMMU后备存储区中访客操作系统的事件日志尾指针的副本以及向访客操作系统发送中断以通知访客操作系统。因此,IOMMU确定IOMMU后备存储区中访客操作系统的事件日志尾指针的副本的物理地址(步骤1002)。在该操作期间,IOMMU使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在IOMMU后备存储区中访问IOMMU MMIO寄存器的哪个副本以及一个或多个IOMMU私有地址表和/或页表。IOMMU然后在物理地址处存储数据,从而更新访客操作系统的事件日志尾指针的副本(步骤1004)。换句话说,IOMMU将诸如事件日志尾指针的更新地址的一位或多位、条目标识符、运行计数等数据存储在IOMMU后备存储区中存储与访客操作系统相关联的事件日志尾指针的副本的存储器位置中。更新导致事件日志尾指针直接或间接指示事件已写入到事件日志,并且因此正在等待访客操作系统处理。
IOMMU还向访客操作系统发送中断,所述中断指示访客事件日志中有事件正在等待(步骤1006)。对于该操作,IOMMU可以使用中断机制,通过所述机制在IOMMU与访客操作系统之间诸如经由与访客操作系统相关联的虚拟高级可编程中断控制器(vAPIC)传递中断。
响应于接收到中断,访客操作系统向IOMMU发送从事件日志头指针(例如事件头指针610)读取数据的读取请求,所述读取请求指向IOMMU MMIO寄存器的存储事件日志头指针的访客虚拟地址(步骤1008)。在所描述的实施方案中,访客操作系统使用本地或“虚拟”地址来访问IOMMU MMIO寄存器(并且可能不知道实际和/或虚拟的IOMMU地址)。访客虚拟地址由执行访客操作系统的处理器中的存储器管理单元(MMU)转译为MMIO寄存器所在的IOMMU中的系统物理地址(即IOMMU MMIO地址)(例如,通过在访客操作系统的页表中执行页表遍历等)。如上所述,IOMMU虚拟化了IOMMU MMIO寄存器,所以MMU使用的系统物理地址不是访客操作系统的IOMMU MMIO寄存器的副本所在的地址,而是接口/孔径中被IOMMU识别为对MMIO寄存器的访问的IOMMU的地址。因此,在MMU中的转译之后,MMU将读取请求转发到与访客虚拟地址相关联的IOMMU MMIO地址(即,系统物理地址)处的IOMMU(步骤1010)。
因为IOMMU MMIO地址只是IOMMU提供的用于接收来自访客操作系统的访问请求的地址,所以IOMMU也会进行转译以基于读取请求确定存储器中存储访客操作系统的事件日志头指针的副本的物理地址(步骤1012)。在该操作期间,IOMMU使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在IOMMU后备存储区中访问IOMMU MMIO寄存器的哪个副本。对于该过程,IOMMU首先基于访客操作系统的标识符和MMU提供的系统物理地址,使用算法、表格等为访客操作系统的IOMMU MMIO寄存器的副本计算IOMMU虚拟地址。IOMMU然后使用一个或多个页表将IOMMU虚拟地址转译为IOMMU后备存储区中存储访客操作系统的IOMMU MMIO寄存器的副本的系统物理地址。
IOMMU然后从存储器中物理地址处的存储器位置读取针对读取请求的数据(步骤1014)。换句话说,IOMMU读取IOMMU后备存储区中存储与访客操作系统相关联的事件日志头指针的副本的存储器位置中的诸如事件日志头指针的地址的一位或多位、条目标识符、运行计数等数据。事件日志头指针直接或间接指示写入到访客事件日志的正在等待访客操作系统处理的下一事件。在一些实施方案中,IOMMU、访客操作系统和/或另一实体还设置其他指针或指示符以指示访客事件日志中有事件正在等待处理或IOMMU提供了事件。例如,在一些实施方案中,访客操作系统和/或管理程序包括一组事件等待位,每个支持的访客操作系统一个位,并且为访客操作系统设置(或清除)了事件等待位以指示访客事件日志中有事件正在等待处理。
从事件日志头指针读取所述数据后,IOMMU将所述数据返回到访客操作系统(步骤1016)。访客操作系统然后使用所述数据来执行一个或多个后续操作,以处理访客事件日志中的事件(步骤1018)。例如,在一些实施方案中,访客操作系统的事件日志头指针的副本存储存储器的访客部分中事件日志的条目所在的位置的地址,并且访客操作系统直接或间接使用所述地址来在处理事件之前从访客事件日志获取事件。
在一些实施方案中,电子装置(例如,电子装置400和/或其某一部分)使用存储在非暂时性计算机可读存储介质上的代码和/或数据来执行本文中描述的操作中的一些或全部。更具体地,当执行所描述的操作时,电子装置从计算机可读存储介质读取代码和/或数据并且执行代码和/或使用数据。计算机可读存储介质可以是存储代码和/或数据以供电子装置使用的任何装置、介质或其组合。举例来说,计算机可读存储介质可包括但不限于易失性和/或非易失性存储器,包括闪存、随机存取存储器(例如,eDRAM、RAM、SRAM、DRAM、DDR4SDRAM等)、只读存储器(ROM)和/或磁性或光学存储介质(例如,磁盘驱动器、磁带、CD、DVD等)。
在一些实施方案中,一个或多个硬件模块执行本文中描述的操作。举例来说,硬件模块可包括但不限于一个或多个处理器/核心/中央处理单元(CPU)、专用集成电路(ASIC)芯片、神经网络处理器或加速器、现场可编程门阵列(FPGA)、计算单元、嵌入式处理器、图形处理器(GPU)/图形核心、流水线、加速处理单元(APU)、高速缓存/高速缓存控制器、存储器/存储器控制器、功能块和/或其他可编程逻辑装置。当此类硬件模块被激活时,硬件模块执行操作中的一些或全部。在一些实施方案中,硬件模块包括一个或多个通用电路,所述通用电路通过执行指令(程序代码、固件等)以执行操作来配置。
在一些实施方案中,表示本文中描述的结构和机制中的一些或全部的数据结构(例如,电子装置400、IOMMU 424和/或其某一部分)存储在非暂时性计算机可读存储介质上,所述非暂时性计算机可读存储介质包括可由电子装置读取并且直接地或间接地使用以制造包括所述结构和机制的硬件的数据库或其他数据结构。举例来说,数据结构可以是采用高级设计语言(HDL)(例如Verilog或VHDL)的硬件功能的行为级描述或寄存器传送级(RTL)描述。所述描述可由综合工具读取,所述综合工具可综合所述描述以产生网表,所述网表包括来自综合库中的门/电路元件的清单,所述清单表示包括上述结构和机制的硬件的功能。然后,可放置并且路由所述网表以产生描述要应用于掩模的几何形状的数据集。然后,可在各种半导体制造步骤中使用掩模以产生与上述结构和机制相对应的一个或多个半导体电路(例如,集成电路)。替代地,计算机可存取的存储介质上的数据库可以是网表(带有或没有综合库)或数据集(根据需要),或图形数据系统(GDS)II数据。
在本说明书中,变量或未指定值(即,在没有值的特定实例的情况下对值的一般描述)由例如N的字母表示。如本文所使用,尽管在本说明书中的不同位置可能使用相似的字母,但是在每种情况下变量和未指定值不一定相同,可能有不同的变量的量和值旨在用于一般变量和未指定值中的一些或全部。换句话说,在本说明书中,N和用于表示变量和未指定值的任何其他字母不一定彼此相关。
如本文所使用的表达“等(et cetera)”或“等(etc.)”旨在呈现一者和/或情况,即,清单中的与等相关联的元素中的“至少一个”的等同物。例如,在语句“电子装置执行第一操作、第二操作等等”中,电子装置执行第一操作、第二操作和其他操作中的至少一个。此外,与等相关联的列表中的元素仅仅是示例集中的示例-且示例中的至少一些可能不会出现在一些实施方案中。
仅出于说明和描述的目的给出了实施方案的先前描述。所述先前描述不意图是详尽的或将实施方案限于公开的形式。相应地,许多修改和变化对本领域的从业人员来说将是显而易见的。另外,以上公开不意在限制实施方案。实施方案的范围由所附权利要求限定。
Claims (22)
1.一种电子装置,其包括:
处理器,所述处理器执行访客操作系统;
输入输出存储器管理单元(IOMMU);以及
主存储器,所述主存储器存储IOMMU后备存储区,所述IOMMU后备存储区包括针对支持的访客操作系统集中的每个访客操作系统的IOMMU存储器映射的输入输出(MMIO)寄存器集的单独副本;
其中所述IOMMU被配置为:
从所述访客操作系统接收访问给定IOMMU MMIO寄存器中的数据的通信;并且
执行对与所述访客操作系统相关联的所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的副本中的所述数据的对应访问。
2.根据权利要求1所述的电子装置,其中从所述访客操作系统接收访问所述给定IOMMUMMIO寄存器中的数据的所述通信包括:
从所述处理器的存储器管理单元(MMU)接收所述通信,所述MMU已从所述访客操作系统接收到所述通信并将所述通信转发到与所述给定IOMMU MMIO寄存器相关联的IOMMU MMIO地址处的所述IOMMU。
3.根据权利要求2所述的电子装置,其中访问所述数据涉及将数据存储在所述给定IOMMU MMIO寄存器中,并且其中所述IOMMU还被配置为:
使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以基于所述IOMMUMMIO地址确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;并且
在所述物理地址处将所述给定IOMMU MMIO寄存器的所述副本中的所述数据存储在与所述访客操作系统相关联的所述后备存储区中。
4.根据权利要求3所述的电子装置,其中所述IOMMU还被配置为:
检测使得所述给定IOMMU MMIO寄存器的所述副本中的所述数据存储在所述后备存储区中的所述通信;并且
响应于检测到所述通信,使用来自所述后备存储区中所述给定IOMMU MMIO寄存器的所述副本的所述数据执行一个或多个后续处理操作。
5.根据权利要求2所述的电子装置,其中访问所述数据涉及从所述给定IOMMU MMIO寄存器读取数据,并且其中所述IOMMU还被配置为:
使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以基于所述IOMMUMMIO地址确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;
从所述物理地址读取与所述访客操作系统相关联的所述后备存储区中所述给定IOMMUMMIO寄存器的所述副本中的所述数据;并且
将所述数据返回到所述访客操作系统。
6.根据权利要求1所述的电子装置,其中所述IOMMU还被配置为通过以下方式更新所述后备存储区中所述给定IOMMU MMIO寄存器中的信息:
使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;并且
在所述物理地址处将所述给定IOMMU MMIO寄存器的所述副本中的数据存储在与所述访客操作系统相关联的所述后备存储区中。
7.根据权利要求1所述的电子装置,其中所述后备存储区中的所述IOMMU MMIO寄存器集的每个副本包括用于存储相应访客操作系统的以下各项的存储器位置:
所述访客操作系统的缓冲区和日志的指针;以及
与所述访客操作系统的所述缓冲区和日志相关联的控制字段。
8.根据权利要求1所述的电子装置,其中所述处理器还执行管理程序,所述管理程序:
在针对所述IOMMU后备存储区的初始化操作期间,分配所述主存储器中用于存储所述IOMMU后备存储区的连续或分散的存储器页面。
9.根据权利要求8所述的电子装置,其中所述管理程序还针对所述访客操作系统模拟至少一些IOMMU MMIO寄存器,所述至少一些IOMMU MMIO寄存器未包括在所述后备存储区中的所述访客操作系统的对应IOMMU MMIO寄存器集中;并且
经由所述IOMMU访问模拟IOMMU MMIO寄存器中的信息。
10.根据权利要求9所述的电子装置,其中所述管理程序模拟的所述IOMMU MMIO寄存器包括转译表基地址和IOMMU控制寄存器。
11.根据权利要求1所述的电子装置,其还包括所述IOMMU中的高速缓存存储器,其中所述IOMMU:
从所述IOMMU MMIO寄存器集的所述单独副本中的一些中对IOMMU MMIO寄存器中的信息的副本进行高速缓存。
12.一种用于向电子装置中的访客操作系统提供输入输出存储器管理单元(IOMMU)寄存器的副本的方法,所述电子装置包括执行访客操作系统的处理器、所述IOMMU和存储IOMMU后备存储区的主存储器,其中所述IOMMU后备存储区包括针对支持的访客操作系统集中的每个访客操作系统的IOMMU存储器映射的输入输出(MMIO)寄存器集的单独副本,并且其中所述方法包括:
由所述IOMMU从所述访客操作系统接收访问给定IOMMU MMIO寄存器中的数据的通信;以及
由所述IOMMU执行对与所述访客操作系统相关联的所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的副本中的所述数据的对应访问。
13.根据权利要求12所述的方法,其中从所述访客操作系统接收访问所述给定IOMMUMMIO寄存器中的数据的所述通信包括:
从所述处理器的存储器管理单元(MMU)接收所述通信,所述MMU已从所述访客操作系统接收到所述通信并将所述通信转发到与所述给定IOMMU MMIO寄存器相关联的IOMMU MMIO地址处的所述IOMMU。
14.根据权利要求13所述的方法,其中访问所述数据涉及将数据存储在所述给定IOMMUMMIO寄存器中,并且所述方法还包括:
由所述IOMMU使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以基于所述IOMMU MMIO地址确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;以及
由所述IOMMU在所述物理地址处将所述给定IOMMU MMIO寄存器的所述副本中的所述数据存储在与所述访客操作系统相关联的所述后备存储区中。
15.根据权利要求14所述的方法,其还包括:
由所述IOMMU检测使得所述给定IOMMU MMIO寄存器的所述副本中的所述数据存储在所述后备存储区中的所述通信;以及
响应于检测到所述通信,使用来自所述后备存储区中所述给定IOMMU MMIO寄存器的所述副本的所述数据执行一个或多个后续处理操作。
16.根据权利要求13所述的方法,其中访问所述数据涉及从所述给定IOMMU MMIO寄存器读取数据,并且所述方法还包括:
由所述IOMMU使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以基于所述IOMMU MMIO地址确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;
由所述IOMMU从所述物理地址读取与所述访客操作系统相关联的所述后备存储区中所述给定IOMMU MMIO寄存器的所述副本中的所述数据;以及
由所述IOMMU将所述数据返回到所述访客操作系统。
17.根据权利要求12所述的方法,其还包括:
由所述IOMMU通过以下方式更新所述后备存储区中所述给定IOMMU MMIO寄存器中的信息:
使用与所述访客操作系统相关联的域标识符和一个或多个转译表,以确定所述IOMMU后备存储区中所述给定IOMMU MMIO寄存器的所述副本所在的物理地址;并且
在所述物理地址处将所述给定IOMMU MMIO寄存器的所述副本中的数据存储在与所述访客操作系统相关联的所述后备存储区中。
18.根据权利要求12所述的方法,其中所述后备存储区中的所述IOMMU MMIO寄存器集的每个副本包括用于存储相应访客操作系统的以下各项的存储器位置:
所述访客操作系统的缓冲区和日志的指针;以及
与所述访客操作系统的所述缓冲区和日志相关联的控制字段。
19.根据权利要求12所述的方法,其中所述处理器执行管理程序,并且所述方法还包括:
由所述管理程序在针对所述IOMMU后备存储区的初始化操作期间,分配所述主存储器中用于存储所述IOMMU后备存储区的连续或分散的存储器页面。
20.根据权利要求19所述的方法,其还包括:
由所述管理程序针对所述访客操作系统模拟至少一些IOMMU MMIO寄存器,所述至少一些IOMMU MMIO寄存器未包括在所述后备存储区中的所述访客操作系统的对应IOMMU MMIO寄存器集中;以及
由所述IOMMU经由所述IOMMU访问模拟IOMMU MMIO寄存器中的信息。
21.根据权利要求20所述的方法,其中所述管理程序模拟的所述IOMMU MMIO寄存器包括转译表基地址和IOMMU控制寄存器。
22.根据权利要求12所述的方法,其还包括所述IOMMU中的高速缓存存储器,其中所述方法还包括:
由所述IOMMU从所述IOMMU MMIO寄存器集的所述单独副本中的一些中对IOMMU MMIO寄存器中的信息的副本进行高速缓存。
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 (1)
Publication Number | Publication Date |
---|---|
CN113906389A true CN113906389A (zh) | 2022-01-07 |
Family
ID=73549697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080039910.4A Pending CN113906389A (zh) | 2019-05-27 | 2020-05-25 | 向访客操作系统提供输入输出存储器管理单元寄存器副本 |
Country Status (6)
Country | Link |
---|---|
US (2) | US10909053B2 (zh) |
EP (1) | EP3977286A4 (zh) |
JP (1) | JP2022534977A (zh) |
KR (1) | KR20220001016A (zh) |
CN (1) | CN113906389A (zh) |
WO (1) | WO2020243043A1 (zh) |
Families Citing this family (3)
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 (10)
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 |
JP4322232B2 (ja) * | 2005-06-14 | 2009-08-26 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム |
US8291180B2 (en) * | 2008-03-20 | 2012-10-16 | Vmware, Inc. | Loose synchronization of virtual disks |
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 |
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 |
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 |
WO2018176360A1 (en) * | 2017-03-31 | 2018-10-04 | Intel Corporation | Scalable interrupt virtualization for input/output devices |
-
2019
- 2019-05-27 US US16/423,077 patent/US10909053B2/en active Active
-
2020
- 2020-05-25 JP JP2021570831A patent/JP2022534977A/ja active Pending
- 2020-05-25 CN CN202080039910.4A patent/CN113906389A/zh active Pending
- 2020-05-25 KR KR1020217042281A patent/KR20220001016A/ko unknown
- 2020-05-25 WO PCT/US2020/034455 patent/WO2020243043A1/en unknown
- 2020-05-25 EP EP20813757.0A patent/EP3977286A4/en active Pending
-
2021
- 2021-01-11 US US17/145,750 patent/US20220269621A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
JP2022534977A (ja) | 2022-08-04 |
WO2020243043A1 (en) | 2020-12-03 |
EP3977286A4 (en) | 2023-06-14 |
US20200379927A1 (en) | 2020-12-03 |
US10909053B2 (en) | 2021-02-02 |
EP3977286A1 (en) | 2022-04-06 |
KR20220001016A (ko) | 2022-01-04 |
US20220269621A1 (en) | 2022-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7882330B2 (en) | Virtualizing an IOMMU | |
US20240160353A1 (en) | Virtualized-in-hardware input output memory management | |
KR101179341B1 (ko) | 메모리 액세스 데이터 구조에 기초하는 직접 캐시 액세스트랜잭션의 수행 | |
US20220269621A1 (en) | Providing Copies of Input-Output Memory Management Unit Registers to Guest Operating Systems | |
CA2800632C (en) | Enable/disable adapters of a computing environment | |
US11194735B2 (en) | Technologies for flexible virtual function queue assignment | |
KR20220061983A (ko) | 입출력 메모리 관리 유닛으로부터 게스트 운영 시스템으로의 인터럽트 제공 | |
JP2024508882A (ja) | データ移動を容易にするために複数のアドレス空間をサポートする方法、システム及び装置 | |
EP3270293B1 (en) | Two stage command buffers to overlap iommu map and second tier memory reads | |
CN114080587A (zh) | 输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问 | |
JP7520843B2 (ja) | 入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換 | |
JP2024503259A (ja) | 入出力デバイスによってアクセス可能なメモリのページの移行 | |
KR20180041037A (ko) | 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법 | |
US12086447B2 (en) | Systems and methods for reducing instruction code memory footprint for multiple processes executed at a coprocessor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |