向访客操作系统提供输入输出存储器管理单元寄存器副本的制作方法

专利检索2022-05-11  1


向访客操作系统提供输入输出存储器管理单元寄存器副本


背景技术:

1.相关技术
2.一些电子装置(例如,服务器或台式计算机等)支持诸如输入输出(io)装置等的电子装置硬件的“虚拟化”。虚拟化涉及电子装置之上或之中的中间实体,从而向电子装置上执行的软件实例(例如,应用程序等)提供当实际上中间实体拦截/重定向或以其他方式协助软件实例进行的访问时软件实例能够直接访问电子装置硬件的错觉。举例来说,一个常见的中间实体是“虚拟机”。虚拟机是抽象电子装置硬件并仿真或呈现电子装置硬件的已知接口的软件实体,从而使软件实例能够在各种类型和布置的底层电子装置硬件上执行——可能包括将与软件实例以其他方式不兼容的电子装置硬件。在一些电子装置中,虚拟机支持执行一个或多个操作系统实例,称为“访客”操作系统。访客操作系统反过来提供用于执行其他软件实例(诸如生产力应用程序、数据库等)的环境。
3.在一些电子装置中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可以启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;终止或关闭虚拟机等。图1呈现了示出虚拟机和管理程序的框图。如图1中可见,存在三个虚拟机(vm)100,在每个虚拟机下执行访客操作系统(访客os)102和一个或多个程序(prgrms)104,诸如数据库、软件应用程序等。虚拟机100与管理程序106通信,所述管理程序联接在主机操作系统(主机os)108与虚拟机100之间。主机操作系统108提供电子装置硬件110与管理程序106之间的接口。此外,管理程序106联接在虚拟机100与输入输出管理单元(iommu)112之间,其中iommu 112用作io装置硬件114的存储器管理单元和控制器。
4.管理程序执行的操作包括处理电子装置硬件与访客操作系统(或更广泛地说,虚拟机)之间的通信。举例来说,管理程序可以转译、重定向或以其他方式协助访客操作系统与输入输出管理单元(iommu)之间的通信。管理程序处理的通信包括诸如iommu的外围页面请求(ppr)日志和事件日志写入以及访客操作系统的命令缓冲区写入的通信。ppr日志、事件日志和命令缓冲区写入在2016年12月的amd i/o虚拟化技术(iommu)规范,修订版3.00中进行了详细描述,该规范的全部内容以引用的方式并入本文中。
5.图2呈现了示出由管理程序处理的访客操作系统与iommu之间的通信的框图。在图2中,许多元素以点状显示;这些元素是存储在存储器(例如,电子装置的主存储器)中并因此通过典型的存储器访问技术访问的日志、缓冲区等。图2中的元素与访客操作系统102、管理程序106和iommu 112一起包括访客外围页面请求(ppr)日志200、访客命令缓冲区(cmd buf)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相关联的状态信息。
6.在操作中,并且使用命令作为示例,访客操作系统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之间会导致处理通信的延迟,并使得处理器忙碌并在电子装置的存储器总线上增加流量。
附图说明
7.图1呈现了示出虚拟机和管理程序的框图。
8.图2呈现了示出由管理程序处理的访客操作系统与iommu之间的通信的框图。
9.图3呈现示出了根据一些实施方案的虚拟机和管理程序的框图。
10.图4呈现示出了根据一些实施方案的电子装置的框图。
11.图5呈现示出了根据一些实施方案的iommu访问的存储器部分的框图。
12.图6呈现示出了根据一些实施方案的存储在iommu mmio寄存器的访客副本中的值的框图。
13.图7呈现示出了根据一些实施方案的由iommu处理的访客操作系统与iommu之间的通信的框图。
14.图8呈现示出了根据一些实施方案的iommu代表访客操作系统访问iommu后备存储区中的iommu mmio寄存器的副本的过程。
15.图9呈现示出了根据一些实施方案的访客操作系统写入到iommu后备存储区中的iommu mmio寄存器的副本并由iommu从其中进行读取的过程的流程图。
16.图10呈现示出了根据一些实施方案的iommu写入到iommu后备存储区中的iommu mmio寄存器的副本并由访客操作系统从其中进行读取的过程的流程图。
17.在整个附图和描述中,相同附图标记指代相同的附图元件。
具体实施方式
18.呈现以下描述以使本领域的任何技术人员能够制造和使用所描述的实施方案,并且在特定应用及其要求的上下文中提供以下描述。对所描述的实施方案的各种修改对于本领域技术人员来说将是明显的,并且可将本文中定义的一般原理应用于其他实施方案和应用。因此,所描述的实施方案不限于所示的实施方案,而是要被赋予与本文中公开的原理和特征一致的最宽范围。
312直接联接在访客操作系统302与io装置硬件314之间,而无需管理程序306介入(如iommu 312与访客操作系统302之间的较粗线所示)。因此,与现有电子装置不同,在所描述的实施方案中,管理程序306不负责执行用于处理访客操作系统302与iommu 312之间的通信的至少一些操作,如本文所述。然而,注意,某些通信发生在iommu 312与管理程序306之间,如管理程序306与iommu 312之间的线所示。此外,注意,在一些实施方案中,主机操作系统308不存在并且管理程序306更直接地与电子装置硬件310通信。
26.综述
27.在所描述的实施方案中,电子装置包括处理器、存储器(例如,主存储器)、多个输入输出(io)装置(例如,网络接口装置、磁盘控制器等)以及联接在处理器与io装置之间的输入输出存储器管理单元(iommu)。处理器执行管理程序、一个或多个虚拟机以及在虚拟机中的访客操作系统。访客操作系统中的每个访客操作系统被分配有存储器的访客部分(例如,存储器的连续或不连续区域或块),所述访客部分被保留用于存储将由该访客操作系统访问的数据和信息。在所描述的实施方案中,iommu执行操作以处理访客操作系统与iommu之间的通信。
28.作为处理访客操作系统与iommu之间通信的一部分,与在现有系统中使用某些缓冲区和日志的单个iommu副本不同,iommu直接访问存储器的对应访客部分中的每个访客操作系统的缓冲区和日志。换句话说,iommu访问的不是现有系统中由iommu(和管理程序)维护的缓冲区和日志的副本,而是访客操作系统中的每个访客操作系统使用的缓冲区和日志的单个副本。举例来说,在一些实施方案中,每个访客操作系统在存储器的对应访客部分中维护缓冲区和日志,包括命令缓冲区、事件日志和/或外围页面请求(ppr)日志,并且iommu直接从每个访客操作系统的存储器部分中针对该访客操作系统的缓冲区和日志中读取信息和/或将信息写入其中。举例来说,iommu可以从针对给定访客操作系统的存储器访客部分中的给定访客操作系统的命令缓冲区中读取命令。
29.在iommu使用缓冲区和日志的单个副本的现有系统中,iommu维护用于存储关于缓冲区和日志的信息的iommu存储器映射的输入输出(mmio)寄存器集。举例来说,iommu mmio寄存器包括诸如缓冲区和日志的一组指针(例如,每个日志或缓冲区的头和/或尾指针等)和控制值(例如,每个日志或缓冲区的大小指示符和/或配置值等)之类的信息。由于在所描述的实施方案中,iommu分别访问存储器的不同访客部分(即,在不同的存储器地址处并且可能具有不同的控制值)中的缓冲区和日志,因此单组iommu mmio寄存器是不够的。因此,在所描述的实施方案中,iommu设置有针对每个访客操作系统的iommu mmio寄存器集的单独副本,所述单独副本用于访问存储器的对应访客部分中的缓冲区和日志。换句话说,在一些实施方案中,如果系统支持n个访客操作系统,则iommu设置有iommu mmio寄存器的n个副本(即,缓冲区和日志的一组指针和控制值),每个访客操作系统一个副本。
30.由于跟踪所有可能的访客操作系统的缓冲区和日志所需的寄存器数量(可能非常大),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寄存器的副本。
31.在一些实施方案中,在操作期间,iommu从访客操作系统接收访问给定iommu mmio寄存器中的数据的通信。例如,在已将命令写入到存储器的对应访客部分中该访客操作系统的命令缓冲区之后,访客操作系统可以传输存储器写入以更新由iommu接收的命令缓冲区尾指针。iommu然后执行对与访客操作系统相关联的iommu后备存储区中的给定iommu mmio寄存器的副本中的数据的对应访问。继续本示例,iommu可以将更新的数据(例如,命令缓冲区尾指针的新地址)写入到iommu后备存储区中针对访客操作系统的命令缓冲区尾指针寄存器的副本。除了访客操作系统访问iommu mmio寄存器的副本之外,在一些实施方案中,iommu本身更新后备存储区中的iommu mmio寄存器的副本。举例来说,在一些实施方案中,iommu可以在已按先进先出顺序处理来自访客命令缓冲区的命令之后更新针对访客操作系统的命令缓冲区头指针(和/或其他命令缓冲区值)。
32.在一些实施方案中,由于与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寄存器的副本的系统物理地址。
33.在一些实施方案中,当访客操作系统检测到iommu mmio寄存器中的数据更新时,iommu执行一个或多个对应处理操作。例如,在一些实施方案中,响应于检测到访客操作系统已更新对应iommu mmio寄存器中该访客操作系统的命令缓冲区尾指针(即,其在后备存储区中的副本),iommu从该访客操作系统的命令缓冲区中检索命令并处理命令。
34.在一些实施方案中,管理程序模拟某些iommu mmio寄存器,这些寄存器不包括在针对存储在iommu后备存储区中的访客操作系统的iommu mmio寄存器集的单独副本中。例如,在一些实施方案中,管理程序模拟iommu的iommu控制mmio寄存器、转译表基地址mmio寄存器等。在这些实施方案中,管理程序拦截访客操作系统对模拟iommu mmio寄存器的访问,并经由iommu执行对应访问。
35.在一些实施方案中,iommu在iommu中的本地高速缓存存储器中存储来自一些单独iommu mmio寄存器集的iommu mmio寄存器的副本的信息的副本。例如,iommu可以为相应访客操作系统存储来自各个iommu mmio寄存器的最近使用或经常使用的值的副本。
36.通过提供用于访问存储器的访客部分中的缓冲区和日志的iommu mmio寄存器集的单独副本,iommu使得能够直接访问存储器的访客部分中的缓冲区和日志。这意味着与现有系统一样,iommu没有义务依赖管理程序来处理对缓冲区和日志的访问。将这些操作从管理程序(以软件实现)移至iommu(以硬件实现)加快了操作速度,需要更少的存储器系统带宽,并减少处理器中计算功能块的负载,这改善了电子装置的整体性能。电子装置性能的改善带来更高的用户满意度。
37.电子装置
38.图4呈现示出了根据一些实施方案的电子装置400的框图。如图4中可见,电子装置400包括处理器402、存储器404、大容量存储装置406、输入输出(io)装置408-412、输入输出(io)集线器414和存储器控制器416。
39.处理器402是在电子装置400中执行计算操作的功能块。处理器402包括两个核心418-420,每个核心包括一个或多个计算机制,诸如中央处理单元(cpu)核心、图形处理单元(gpu)核心、嵌入式处理器、专用集成电路(asic)和/或其他计算机制。处理器402还包括存储器管理单元(mmu)422,其是执行与地址转译(例如,页表遍历、转译后备缓冲区查找等)、存储器访问保护等相关联的操作的功能块,以由核心418-420进行存储器访问。
40.存储器404是执行电子装置400中的存储器(例如,“主”存储器)的操作的功能块。存储器404包括:存储器电路,诸如动态随机存取存储器(dram)、双倍数据速率同步dram(ddr sdram)和/或用于存储由电子装置400中的其他功能块使用的数据和指令的其他类型的存储器电路中的一个或多个;以及控制电路,所述控制电路用于处理对存储在存储器电路中的数据和指令的访问(例如,读取、写入、检查、删除、使无效等)。
41.大容量存储装置406是功能块和/或装置,其执行高容量非易失性存储元件的操作以存储数据和指令以供电子装置400中的其他功能块使用。大容量存储装置406可以是或包括高容量半导体存储器(例如,闪存等)、磁盘驱动器(硬盘驱动器等)、光驱等。获取存储在大容量存储装置406中的数据和指令的副本并将其存储在存储器404中以供电子装置400中的其他功能块使用。举例来说,在一些实施方案中,以给定大小(例如,4kb、2mb等)的块或“页面”从大容量存储装置406中检索数据和/或指令并且将页面存储在存储器404中以供其他功能块访问。此外,可以在存储器404中的可用位置(例如,用于存储计算结果等)处新创建页面。
42.io装置408-412是执行对应io操作的功能块和/或装置。由io装置408-412中的每一个执行的io操作的特定性质取决于io装置的性质。举例来说,io装置408-412可以包括人机接口装置、网络接口装置、音频/视觉处理或提供装置、gpu、传感器装置、磁盘控制器、外围部件接口(pci)装置、通用串行总线(usb)装置等,并且每个io装置执行相关联的操作,诸如接收来自人的输入(例如,键盘、鼠标等)、在网络上接收或发送数据等。io装置408-412向电子装置400中的其他功能块提供数据和/或指令或消耗来自其的数据和/或指令。举例来说,在一些实施方案中,io装置408-412访问(即,读取、写入、使无效等)访客存储器428中的存储器页面中的数据(即,存储器的为给定访客操作系统保留的部分)。
43.io集线器414是执行输入输出集线器的操作的功能块,所述输入输出集线器联接在io装置408-412与电子装置400中的其他功能块(例如,处理器402、存储器404等)之间。由io集线器414执行的操作包括用于确保以下的操作:去往io装置408-412的通信到达预期io
装置、来自io装置408-412的通信正确到达其他功能块、防止io装置408-412对其他功能块进行的不被允许的访问,以及反之亦然等。在一些实施方案中,io集线器414联接在使用不同通信标准的总线之间(诸如在外围部件接口高速(pcie)总线与hypertransport之间等),因此转换或转译相关联通信。
44.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中的物理地址的其他功能块。
45.在所描述的实施方案中,iommu 424与由虚拟机中的核心418-420执行的访客操作系统通信,反之亦然。举例来说,在一些实施方案中,iommu 424(或经由iommu 424的io装置408-412)将事件和外围页面请求(ppr)传送到访客操作系统。在这些实施方案中,iommu 424经由存储器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转译后备缓冲区条目失效等。
46.在一些实施方案中,iommu 424提供到访客操作系统的接口,所述接口包括用于与iommu 424通信的存储器映射的位置、寄存器等。举例来说,在一些实施方案中,iommu 424提供存储器映射的输入输出(mmio)存储器位置集,访客操作系统可以向其写入值,以便iommu 424将接收到所述值。在一些实施方案中,接口被虚拟化,因为如访客操作系统所假定的,存储器位置、寄存器等未被用于存储值,而是简单地由iommu 424呈现。在这些实施方案中,iommu 424可以经由接口从访客操作系统(例如,寻址到iommu mmio地址等)接收值,但是使用iommu后备存储区426和/或存储器404中的其他位置来将所述值的单独副本存储在每个访客操作系统的存储器位置、寄存器等中。下面更详细地描述了由iommu 424访问以与访客操作系统和其他实体(例如,处理器402等)通信的存储器。
47.在一些实施方案中,虽然未在图4中示出,iommu 424包括用于存储iommu 424的数据或信息的副本的本地高速缓存存储器。例如,在一些实施方案中,高速缓存存储器用于存储来自iommu后备存储区426的最近使用或经常使用的数据的副本,诸如给定访客操作系统的iommu mmio寄存器的值集和/或其中的各个值。高速缓存存储器小于iommu后备存储区426,并且因此可能仅具有用于存储iommu后备存储区426中存储的数据和信息的一部分(并
且可能是一小部分)的容量(即,存储器位置)。
48.访客存储器428是存储器404(例如,存储器的一个或多个连续或非连续页面或块)的一部分,所述部分被对应访客操作系统用于存储将由访客操作系统使用的数据和信息。通常,访客操作系统和/或其他实体可以使用访客存储器428来存储由访客操作系统和/或其他实体使用的任何形式的数据和信息。在一些实施方案中,访客存储器428受到保护并且仅允许某些实体访问访客存储器428。例如,电子装置400中的对应访客操作系统、管理程序、安全处理器和/或操作系统可以通过将对访客存储器428的访问限制到对应访客操作系统和指定的其他装置和/或功能块来“保护”访客存储器428。在一些实施方案中,访客存储器428被加密或以其他方式使得不可被不希望的实体访问。在一些实施方案中,访客存储器428用于存储访客事件日志、访客外围页面请求(ppr)日志和访客命令缓冲区,它们是用于访客操作系统与iommu之间的通信的数据结构(例如,表格、列表等)。下面更详细地描述了访客事件日志、访客外围页面请求(ppr)日志和访客命令缓冲区。
49.在一些实施方案中,通信路径耦合在电子装置400中的各种功能块(处理器402、存储器控制器416、存储器404等)之间,如元件之间的箭头线所示。通信路径包括一条或多条总线、电线、导线和/或其他可能与控制器、结构元件(交换机、路由器等)、电路元件等一起的连接。通信路径用于路由命令、数据、控制信号和/或功能块之间的其他信息。举例来说,在一些实施方案中,相干总线结构或互连耦合在io集线器414、处理器402(例如,mmu 422)和存储器404之间。注意,为清楚起见,电子装置400中的一些通信路径未在图4中示出。
50.在一些实施方案中,图3中的电子装置硬件310包括诸如处理器402和存储器404的功能块和装置,并且io装置硬件314包括诸如io装置408-412的功能块和装置。在这些实施方案中,图3中的iommu 312和图4中的iommu 424至少执行一些相同的操作。
51.电子装置400被示为使用特定数量和布置的元件(例如,诸如处理器402、存储器404等的功能块和装置)和通信路径。然而,为了说明的目的简化了电子装置400,在一些实施方案中,电子装置400中存在不同数量或布置的元件和/或通信路径。举例来说,电子装置400可以包括电源子系统、显示器等。通常,电子装置400包括足够的元件和通信路径以执行本文描述的操作。
52.电子装置400可以是或可被包括在执行计算操作的任何电子装置中。举例来说,电子装置400可以是或可以被包括在电子装置中,诸如台式计算机、膝上型计算机、可穿戴电子装置、平板计算机、智能电话、服务器、人工智能设备、虚拟或增强现实装备、网络器械、玩具、视听装备、家用电器、控制器、车辆等和/或其组合。
53.iommu访问的存储器部分
54.在一些实施方案中,iommu访问存储器(例如,存储器404)的不同部分中的数据和信息以便执行本文描述的操作。在这些实施方案的一些中,存储器的所述部分包括iommu后备存储区(例如,iommu后备存储区426)、访客存储器(例如,访客存储器428)和/或管理程序存储器。图5呈现示出了根据一些实施方案的iommu访问的存储器部分的框图。虽然图5作为示例呈现,但是在一些实施方案中,存储器和/或存储器的不同部分存储不同类型和/或布置的信息。通常,存储器包括足够的信息来实现本文描述的操作。
55.如图5中可见,iommu后备存储区500包括id转译表502。通常,id转译表502包括iommu用于将从访客操作系统到iommu的通信(或相反,从iommu到访客操作系统的通信)中
的访客域id和/或装置id转译或转换为主机域id和/或装置id的信息。域id和装置id在2016年12月的amd i/o虚拟化技术(iommu)规范,修订版3.00中进行了详细描述,其如以上所述以引用方式并入本文。
56.在一些实施方案中,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)中执行查找以获取对应转译或转换。
57.iommu后备存储区500还包括访客控制508。通常,访客控制508包括存储在电子装置中的访客操作系统的接口寄存器和控制寄存器中或来自其的值的副本。对于每个支持的访客操作系统,访客控制508包括控制iommu与该访客操作系统之间的交互的访客接口寄存器和/或访客操作系统控制寄存器(或至少其中的值)的副本。举例来说,对于每个访客操作系统,访客控制508可以包括用于将访客操作系统的域id和/或装置id映射传送到iommu的映射控制寄存器。
58.iommu后备存储区500还包括访客存储器映射的输入输出(mmio)510。通常,访客mmio 510包括用于访问存储器404的访客部分(例如,访客存储器428)中的访客操作系统的缓冲区和日志(例如,访客命令缓冲区、访客事件日志和访客ppr日志)的指针和控制信息。更具体地,对于每个支持的访客操作系统,访客mmio 510包括用于控制对存储器404的访客部分中的缓冲区和日志的访问的值的副本。举例来说,在一些实施方案中,iommu支持(可以与之交互、处理其通信等)2n个访客操作系统,其中n=10、16或其他值,并且因此访客mmio 510包括值的多达2n个副本,每个支持的访客操作系统都有一个。在所描述的实施方案中,用于控制访问的值类似于存储在现有装置中的iommu mmio寄存器中的值,但是为每个支持的访客操作系统保留单独的值集,指的是该访客操作系统的存储器404的访客部分(而不是现有装置中的iommu中的单个副本)。
59.图6呈现示出了根据一些实施方案的存储在访客mmio 510中的值的框图。对于图6中的示例,示出了给定访客操作系统的单个完整iommu mmio寄存器集的值以及单个完整值集之上和之下的两个相邻iommu mmio寄存器集的部分的值。以这种方式示出图6以说明,如上所述,在一些实施方案中,iommu后备存储区426包括多个单独的值集,每个值集与给定的访客操作系统相关联。虽然图6作为示例呈现,但是在一些实施方案中,访客mmio 510存储不同的值或不同排列的值。通常,访客mmio 510和/或另一实体存储足够的信息以访问如本文所述的存储器的访客部分中的缓冲区和日志。
60.访客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和/或其他值。
61.在一些实施方案中,通过使用命令头指针602指向待读取的命令缓冲区中的下一条目/位置以及使用命令尾指针600指示命令缓冲区中最后/最近添加的条目/位置(当命令缓冲区中仅存储一个命令时,它们可以是同一条目/位置),命令缓冲区被实现为环形缓冲区。在这些实施方案中,随着从条目中读取命令并对其进行处理,命令头指针602前进一个条目,直到命令头指针602和命令尾指针600指示相同的条目或相邻的条目。在这些实施方案的一些中,命令长度604存储命令缓冲区的最大长度。使用指针来实现环形缓冲区在本领域中是公知的,因此本文不再详细描述。
62.对于事件日志,访客mmio 510中的值(即事件尾指针608、事件头指针610、事件长度612和事件控制614)在功能上类似于上文针对命令缓冲区描述的那些值,但是这些值用于访问存储器404的对应访客部分中的事件日志。ppr日志也是如此,因为访客mmio 510中的值(即ppr尾指针616、ppr头指针618、ppr长度620和ppr控制622)在功能上类似于上文针对命令缓冲区描述的那些值,但是这些值用于访问存储器404的对应访客部分中的ppr日志。
63.在一些实施方案中,在任何给定时间在电子装置400中执行的访客操作系统的数量可能少于所支持的数量(并且可能少很多)——并且因此,在这些实施方案中,iommu后备存储区500被动态地调整为包括足够的空间用于存储访客mmio 510等。换句话说,当访客操作系统被初始化时,管理程序和/或另一实体可以分配、追加或激活iommu后备存储区500中(即,访客mmio 510中)的空间用于存储访客操作系统的iommu mmio寄存器值。
64.在一些实施方案中,管理程序至少执行针对iommu后备存储区500的一些初始化操作。例如,在一些实施方案中,管理程序在存储器404中分配用于存储iommu后备存储区的存储器,例如连续或分散的存储器页面。如上所述,存储器404是电子装置400中被各种功能块(例如,核心418-420等)用于存储数据和信息的通用存储器——并且不仅仅是iommu中的本地存储器。因此,该操作涉及管理程序在电子装置400的“主”存储器中分配用于存储iommu后备存储区的空间。作为另一示例,在一些实施方案中,管理程序经由iommu将初始值写入到每个活动访客操作系统的后备存储区中的iommu mmio寄存器的副本中。因此,管理程序将每个活动访客操作系统的指针的初始值和控制值写入到iommu后备存储区中的iommu mmio寄存器的对应副本中,诸如在访客操作系统启动时。
65.在一些实施方案中,在iommu后备存储区中的iommu mmio寄存器的副本中仅包括可用iommu mmio寄存器子集。在这些实施方案中,iommu本身可以提供其他寄存器。例如,在
一些实施方案中,iommu中存储iommu控制值(例如,iommu启用/禁用等)、页表基地址等的寄存器由iommu提供。通常,不用于访问访客操作系统的存储器部分中的缓冲区和日志的iommu mmio寄存器不会作为副本呈现,而是由iommu提供每个寄存器的单个副本。在这些实施方案的一些中,管理程序为访客操作系统模拟这些iommu寄存器,但是对iommu中寄存器的访问由iommu接收并在iommu中处理。
66.返回图5,访客存储器512包括访客事件日志514、访客外围页面请求(ppr)日志516和访客操作系统的访客命令缓冲区518。通常,访客事件日志514、访客ppr日志516和访客命令缓冲区518是用于存储供iommu和/或访客操作系统访问的对应事件、ppr请求和命令的存储器结构(例如,列表、表格、缓冲区等)。在操作中,iommu经由访客存储器512中的访客事件日志514和访客ppr日志516中的对应日志来向访客操作系统传送事件和ppr。此外,访客操作系统经由访客存储器512中的访客命令缓冲区518中的对应命令缓冲区向iommu传送命令。
67.在一些实施方案中,在电子装置400中活动的每个访客操作系统与存储器的对应单独访客部分(即,存储器404中的多个页面)相关联,所述单独访客部分包括该访客操作系统使用并可由iommu访问的访客事件日志、外围页面请求日志和访客命令缓冲区。这在图5中示出为在访客存储器512后面的附加访客存储器520-522。
68.管理程序存储器524包括装置表526。通常,装置表526是一个表,所述表中存储与电子装置相关联和/或耦合到电子装置的装置(可以是实际/物理装置或虚拟装置)的装置相关信息。装置表526包括一组条目,每个条目可用于存储关于对应装置的信息,诸如指向页表和中断表的指针、控制和配置值、功能指示符、模式指示符、域id、安全信息和设置等。此外,在所描述的实施方案中——并且与现有装置表中不同——装置表526中的每个条目包括装置id和与装置通信、向其负责或以其他方式与其相关联的访客操作系统的访客标识符。在操作中,除了使用装置表来确定关于装置的信息之外,iommu还使用装置id和/或访客标识符来将访客装置id转译或转换为主机装置id。
69.在一些实施方案中,iommu后备存储区500、访客存储器512和管理程序存储器524中的一些或全部和/或其部分不是连续的,而是存储在存储器的不同区域或位置中。举例来说,访客事件日志514的基地址(以及因此访客事件日志本身)可以位于存储器中远离访客ppr日志516。因此,访客事件日志514可能不是如图5所示的紧邻访客ppr日志516。
70.在一些实施方案中,iommu包括私有地址图,所述私有地址图包括对在存储器中由iommu访问的各种数据和信息在存储器中的位置的指针、引用和/或其他指示。举例来说,iommu私有地址图可以包括指向存储器中针对访客事件日志514、访客ppr日志516等的基地址的指针。在这些实施方案中,在访问存储器中的数据和信息之前,iommu在私有地址图中查找数据和信息的位置——并且还可以使用页表等在使用之前对这些地址进行转译。
71.在一些实施方案中,iommu后备存储区500和/或其部分(控制位等)被电子装置400中的其他实体经由iommu访问(例如,通过向iommu发送请求)或者不可由其他实体访问。举例来说,iommu后备存储区500中的至少一些数据和信息可以由其他实体经由对对应iommu mmio寄存器的写入和读取来访问。
72.iommu和访客操作系统通信
73.在所描述的实施方案中,iommu(例如,iommu 424)处理iommu(或由其服务的io装
置)与访客操作系统之间的通信。图7呈现示出了根据一些实施方案的由iommu 702处理的访客操作系统700与iommu 702之间的通信的框图。尽管在图7中以特定布置示出了多个元件,但是其他实施方案使用不同数量或布置的元件。通常,在所描述的实施方案中,iommu 702包括或访问足够的元件以实现本文描述的操作。在图7中,许多元件显示为点状;这些元件是存储在存储器中(例如,在iommu后备存储区500中、在访客存储器512等中)并由iommu 702、访客操作系统700和/或使用典型存储器访问技术的其他实体访问的日志、缓冲区等。在一些实施方案中,访客操作系统700、iommu 702和管理程序704以与图3中的访客操作系统302、iommu 312和管理程序306类似的方式组织,但这不是必需的。
74.如图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等的负载更少。
75.在操作中,以命令为例,访客操作系统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读取日志。
76.尽管管理程序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后备存储区等。
77.使用iommu mmio寄存器值的过程
78.在所描述的实施方案中,iommu(例如,iommu 702)执行用于向访客操作系统(例如,访客操作系统700)提供iommu mmio寄存器的虚拟副本的操作。如上所述,这些操作包括代表访客操作系统访问存储在iommu后备存储区中的iommu mmio寄存器的对应副本。图8呈现示出了根据一些实施方案的iommu代表访客操作系统访问iommu后备存储区中的iommu mmio寄存器的副本的过程。注意,图8所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
79.图8所示的用于访问iommu mmio寄存器的副本的操作在范围内是普遍的并且涉及各种类型的访问,例如读取、写入、失效等。图9至图10中呈现了更具体的示例,包括访客操作系统写入图9中的iommu mmio寄存器的副本并且访客操作系统读取图10中的iommu mmio寄存器的副本。
80.图8中的操作开始于iommu从访客操作系统接收访问给定iommu mmio寄存器中的数据的通信(步骤800)。访问可以是读取iommu mmio寄存器中的数据并且因此通信是读取请求,将数据写入iommu mmio寄存器中并且因此通信是写入请求,和/或另一种访问,诸如失效等。例如,iommu可以从访客操作系统接收请求将特定数据写入命令缓冲区尾指针(例如,命令尾指针600)以便初始化或以其他方式更新命令缓冲区尾指针的通信。
81.iommu然后执行对与iommu后备存储区中的访客操作系统相关联的给定iommu mmio寄存器的副本中的数据的对应访问(步骤802)。回想一下,iommu虚拟化了iommu mmio寄存器,即向访客操作系统(和其他实体)呈现访客操作系统正在访问iommu中的实际mmio寄存器的错觉,但iommu实际上使用每个支持的访客操作系统的iommu后备存储区中存储的iommu mmio寄存器的单独副本。因此,该操作涉及iommu确定将在后备存储区中访问iommu mmio寄存器的哪个副本,然后进行访问。
82.图9呈现示出了根据一些实施方案的访客操作系统写入到iommu后备存储区中的iommu mmio寄存器的副本并由iommu从其中进行读取的过程的流程图。注意,图9所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
83.图9中的操作开始于访客操作系统(例如,访客操作系统700)将命令写入到存储器的访客部分(例如,访客存储器428)中的命令缓冲区(例如,访客命令缓冲器区518)时(步骤900)。例如,在一些实施方案中,访客命令缓冲区是存储器访客部分中包括多个条目的环形缓冲区,并且该操作涉及访客操作系统将命令(即,表示命令的位序列)写入到访客命令缓冲区中的下一可用条目。
84.因为访客操作系统已将需要由iommu(例如,iommu 702)处理的命令添加到访客命令缓冲区,所以访客操作系统将所述命令通知给iommu。更具体地,访客操作系统发送用于
更新命令缓冲区尾指针的写入请求,所述写入请求指向存储命令缓冲区尾指针的iommu mmio寄存器的访客虚拟地址(步骤902)。在所描述的实施方案中,访客操作系统使用本地或“虚拟”地址来访问iommu mmio寄存器(并且可能不知道实际的iommu地址)。访客虚拟地址由执行访客操作系统的处理器中的存储器管理单元(mmu)转译为mmio寄存器所在的iommu中的系统物理地址(即iommu mmio地址)(例如,通过在访客操作系统的页表中执行页表遍历等)。如上所述,iommu虚拟化了iommu mmio寄存器,所以mmu使用的系统物理地址不是访客操作系统的iommu mmio寄存器的副本所在的地址,而是接口/孔径中被iommu识别为对mmio寄存器的访问的iommu的地址。因此,在mmu中的转译之后,mmu将写入请求转发到与访客虚拟地址相关联的iommu mmio地址(即,系统物理地址)处的iommu(步骤904)。
85.因为iommu mmio地址只是iommu提供的用于接收来自访客操作系统的访问请求的地址,所以iommu也会进行转译以基于写入请求确定存储器中存储访客操作系统的命令缓冲区尾指针的副本的物理地址(步骤906)。在该操作期间,iommu使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在iommu后备存储区中访问iommu mmio寄存器的哪个副本。对于该过程,iommu首先基于访客操作系统的标识符和mmu提供的系统物理地址,使用算法、表格等为访客操作系统的iommu mmio寄存器的副本计算iommu虚拟地址。iommu然后使用一个或多个页表将iommu虚拟地址转译为iommu后备存储区中存储访客操作系统的iommu mmio寄存器的副本的系统物理地址。
86.iommu然后在存储器中的物理地址处存储来自写入请求的数据,从而更新访客操作系统的命令缓冲区尾指针的副本(步骤908)。换句话说,iommu将诸如命令缓冲区尾指针的更新地址的一位或多位、条目标识符、运行计数等数据存储在iommu后备存储区中存储与访客操作系统相关联的命令缓冲区尾指针的副本的存储器位置中。更新导致命令缓冲区尾指针直接或间接指示命令已写入到访客命令缓冲区,并且因此正在等待iommu处理。在一些实施方案中,iommu、访客操作系统和/或另一实体还设置其他指针或指示符以指示命令在访客命令缓冲区中正等待处理或访客操作系统提供了命令。例如,在一些实施方案中,iommu包括一组命令等待位,每个支持的访客操作系统一个位,并且为访客操作系统设置(或清除)了命令等待位以指示命令在访客命令缓冲区中正等待处理。
87.基于检测到写入请求(或以其他方式确定命令正在等待处理),iommu使用来自命令缓冲区头指针(例如,命令头指针602)的副本的数据来执行一个或多个后续操作以处理访客命令缓冲区中的命令(步骤910)。例如,在一些实施方案中,命令缓冲区头指针的副本中的值存储存储器的访客部分中访客命令缓冲区的下一条目所在的位置的地址,并且iommu直接或间接使用所述地址来在处理命令之前从访客命令缓冲区获取命令。
88.图10呈现示出了根据一些实施方案的iommu写入到iommu后备存储区中的iommu mmio寄存器的副本并由访客操作系统从其中进行读取的过程的流程图。注意,图10所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。
89.图10中的操作开始于iommu(例如,iommu 702)将事件写入到访客操作系统(例如,访客存储器428)的存储器的访客部分中的访客事件日志(例如,访客事件日志514)时(步骤1000)。例如,在一些实施方案中,访客事件日志是存储器访客部分中包括多个条目的环形缓冲区,并且该操作涉及iommu将事件(即,表示事件的位序列)写入到访客事件日志中的下
一可用条目。
90.在一些实施方案中,虽然为简洁起见在图10中未示出,但是iommu首先从与iommu后备存储区中的访客操作系统相关联的事件日志尾指针的副本和/或iommu mmio指针的其他副本中获取关于访客事件日志的信息。iommu然后使用所述信息执行步骤1000。例如,在一些实施方案中,iommu使用从iommu后备存储区中访客操作系统的事件日志尾指针的副本获取的访客事件日志(或其中的可用条目)的位置的直接或间接指示(例如,物理地址等)来将事件写入到访客事件日志。为了获取关于访客事件日志的信息,在一些实施方案中,iommu以类似于步骤1002的方式确定事件日志尾指针的副本和/或iommu mmio指针的其他副本的物理地址,然后使用物理地址来获取信息。
91.因为iommu已将事件添加到需要访客操作系统处理的访客事件日志,所以iommu将所述事件通知给访客操作系统。在一些实施方案中,通知访客操作系统包括更新iommu后备存储区中访客操作系统的事件日志尾指针的副本以及向访客操作系统发送中断以通知访客操作系统。因此,iommu确定iommu后备存储区中访客操作系统的事件日志尾指针的副本的物理地址(步骤1002)。在该操作期间,iommu使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在iommu后备存储区中访问iommu mmio寄存器的哪个副本以及一个或多个iommu私有地址表和/或页表。iommu然后在物理地址处存储数据,从而更新访客操作系统的事件日志尾指针的副本(步骤1004)。换句话说,iommu将诸如事件日志尾指针的更新地址的一位或多位、条目标识符、运行计数等数据存储在iommu后备存储区中存储与访客操作系统相关联的事件日志尾指针的副本的存储器位置中。更新导致事件日志尾指针直接或间接指示事件已写入到事件日志,并且因此正在等待访客操作系统处理。
92.iommu还向访客操作系统发送中断,所述中断指示访客事件日志中有事件正在等待(步骤1006)。对于该操作,iommu可以使用中断机制,通过所述机制在iommu与访客操作系统之间诸如经由与访客操作系统相关联的虚拟高级可编程中断控制器(vapic)传递中断。
93.响应于接收到中断,访客操作系统向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)。
94.因为iommu mmio地址只是iommu提供的用于接收来自访客操作系统的访问请求的地址,所以iommu也会进行转译以基于读取请求确定存储器中存储访客操作系统的事件日志头指针的副本的物理地址(步骤1012)。在该操作期间,iommu使用访客操作系统的标识来确定存储器中的物理地址,所述标识规定在iommu后备存储区中访问iommu mmio寄存器的哪个副本。对于该过程,iommu首先基于访客操作系统的标识符和mmu提供的系统物理地址,使用算法、表格等为访客操作系统的iommu mmio寄存器的副本计算iommu虚拟地址。iommu
然后使用一个或多个页表将iommu虚拟地址转译为iommu后备存储区中存储访客操作系统的iommu mmio寄存器的副本的系统物理地址。
95.iommu然后从存储器中物理地址处的存储器位置读取针对读取请求的数据(步骤1014)。换句话说,iommu读取iommu后备存储区中存储与访客操作系统相关联的事件日志头指针的副本的存储器位置中的诸如事件日志头指针的地址的一位或多位、条目标识符、运行计数等数据。事件日志头指针直接或间接指示写入到访客事件日志的正在等待访客操作系统处理的下一事件。在一些实施方案中,iommu、访客操作系统和/或另一实体还设置其他指针或指示符以指示访客事件日志中有事件正在等待处理或iommu提供了事件。例如,在一些实施方案中,访客操作系统和/或管理程序包括一组事件等待位,每个支持的访客操作系统一个位,并且为访客操作系统设置(或清除)了事件等待位以指示访客事件日志中有事件正在等待处理。
96.从事件日志头指针读取所述数据后,iommu将所述数据返回到访客操作系统(步骤1016)。访客操作系统然后使用所述数据来执行一个或多个后续操作,以处理访客事件日志中的事件(步骤1018)。例如,在一些实施方案中,访客操作系统的事件日志头指针的副本存储存储器的访客部分中事件日志的条目所在的位置的地址,并且访客操作系统直接或间接使用所述地址来在处理事件之前从访客事件日志获取事件。
97.在一些实施方案中,电子装置(例如,电子装置400和/或其某一部分)使用存储在非暂时性计算机可读存储介质上的代码和/或数据来执行本文中描述的操作中的一些或全部。更具体地,当执行所描述的操作时,电子装置从计算机可读存储介质读取代码和/或数据并且执行代码和/或使用数据。计算机可读存储介质可以是存储代码和/或数据以供电子装置使用的任何装置、介质或其组合。举例来说,计算机可读存储介质可包括但不限于易失性和/或非易失性存储器,包括闪存、随机存取存储器(例如,edram、ram、sram、dram、ddr4sdram等)、只读存储器(rom)和/或磁性或光学存储介质(例如,磁盘驱动器、磁带、cd、dvd等)。
98.在一些实施方案中,一个或多个硬件模块执行本文中描述的操作。举例来说,硬件模块可包括但不限于一个或多个处理器/核心/中央处理单元(cpu)、专用集成电路(asic)芯片、神经网络处理器或加速器、现场可编程门阵列(fpga)、计算单元、嵌入式处理器、图形处理器(gpu)/图形核心、流水线、加速处理单元(apu)、高速缓存/高速缓存控制器、存储器/存储器控制器、功能块和/或其他可编程逻辑装置。当此类硬件模块被激活时,硬件模块执行操作中的一些或全部。在一些实施方案中,硬件模块包括一个或多个通用电路,所述通用电路通过执行指令(程序代码、固件等)以执行操作来配置。
99.在一些实施方案中,表示本文中描述的结构和机制中的一些或全部的数据结构(例如,电子装置400、iommu 424和/或其某一部分)存储在非暂时性计算机可读存储介质上,所述非暂时性计算机可读存储介质包括可由电子装置读取并且直接地或间接地使用以制造包括所述结构和机制的硬件的数据库或其他数据结构。举例来说,数据结构可以是采用高级设计语言(hdl)(例如verilog或vhdl)的硬件功能的行为级描述或寄存器传送级(rtl)描述。所述描述可由综合工具读取,所述综合工具可综合所述描述以产生网表,所述网表包括来自综合库中的门/电路元件的清单,所述清单表示包括上述结构和机制的硬件的功能。然后,可放置并且路由所述网表以产生描述要应用于掩模的几何形状的数据集。然
后,可在各种半导体制造步骤中使用掩模以产生与上述结构和机制相对应的一个或多个半导体电路(例如,集成电路)。替代地,计算机可存取的存储介质上的数据库可以是网表(带有或没有综合库)或数据集(根据需要),或图形数据系统(gds)ii数据。
100.在本说明书中,变量或未指定值(即,在没有值的特定实例的情况下对值的一般描述)由例如n的字母表示。如本文所使用,尽管在本说明书中的不同位置可能使用相似的字母,但是在每种情况下变量和未指定值不一定相同,可能有不同的变量的量和值旨在用于一般变量和未指定值中的一些或全部。换句话说,在本说明书中,n和用于表示变量和未指定值的任何其他字母不一定彼此相关。
101.如本文所使用的表达“等(et cetera)”或“等(etc.)”旨在呈现一者和/或情况,即,清单中的与等相关联的元素中的“至少一个”的等同物。例如,在语句“电子装置执行第一操作、第二操作等等”中,电子装置执行第一操作、第二操作和其他操作中的至少一个。此外,与等相关联的列表中的元素仅仅是示例集中的示例-且示例中的至少一些可能不会出现在一些实施方案中。
102.仅出于说明和描述的目的给出了实施方案的先前描述。所述先前描述不意图是详尽的或将实施方案限于公开的形式。相应地,许多修改和变化对本领域的从业人员来说将是显而易见的。另外,以上公开不意在限制实施方案。实施方案的范围由所附权利要求限定。
转载请注明原文地址:https://win.8miu.com/read-950407.html

最新回复(0)