由输入输出存储器管理单元进行的域标识符和装置标识符转译的制作方法

专利2022-05-09  15




背景技术:

相关技术

一些电子装置(例如,服务器或台式计算机等)支持诸如输入输出(io)装置等的电子装置硬件的“虚拟化”。虚拟化涉及电子装置之上或之中的中间实体,从而向电子装置上执行的软件实例(例如,应用程序等)提供当实际上中间实体拦截/重定向或以其他方式协助软件实例进行的访问时软件实例能够直接访问电子装置硬件的错觉。举例来说,一个常见的中间实体是“虚拟机”。虚拟机是抽象电子装置硬件并仿真或呈现电子装置硬件的已知接口的软件实体,从而使软件实例能够在各种类型和布置的底层电子装置硬件上执行——可能包括将与软件实例以其他方式不兼容的电子装置硬件。在一些电子装置中,虚拟机支持执行一个或多个操作系统实例,称为“访客”操作系统。访客操作系统反过来提供用于执行其他软件实例(诸如生产力应用程序、数据库等)的环境。

在一些电子装置中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可以启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;终止或关闭虚拟机等。图1呈现了示出虚拟机和管理程序的框图。如图1中可见,存在三个虚拟机(vm)100,在每个虚拟机下执行访客操作系统(访客os)102和一个或多个程序(prgrms)104,诸如数据库、软件应用程序等。虚拟机100与管理程序106通信,所述管理程序联接在主机操作系统(主机os)108与虚拟机100之间。主机操作系统108提供电子装置硬件114与管理程序106之间的接口。此外,管理程序106联接在输入输出管理单元(iommu)112与虚拟机100之间,所述iommu用作io装置硬件114的存储器管理单元和控制器。

管理程序执行的操作包括处理电子装置硬件与访客操作系统(或更广泛地说,虚拟机)之间的通信。举例来说,管理程序可以转译、重定向或以其他方式协助访客操作系统与输入输出管理单元(iommu)之间的通信。管理程序处理的通信包括诸如iommu的外围页面请求(ppr)日志和事件日志写入以及访客操作系统的命令缓冲区写入的通信。ppr日志、事件日志和命令缓冲区写入在2016年12月的amdi/o虚拟化技术(iommu)规范,修订版3.00中进行了详细描述,该规范的全部内容以引用的方式并入本文中。

图2呈现了示出由管理程序处理的访客操作系统与iommu之间的通信的框图。在图2中,许多元素以点状显示;这些元素是存储在存储器(例如,电子装置的主存储器)中并因此通过典型的存储器访问技术访问的日志、缓冲区等。图2中的元素与访客操作系统102、管理程序106和iommu112一起包括访客外围页面请求(ppr)日志200、访客命令缓冲区(cmdbuf)202和访客事件日志204,它们是存储器中用于存储来自和去往访客操作系统102的通信的结构(例如,列表、表格等)。此外,元素包括访客指针(ptrs)/状态寄存器(regs)206,它们是存储器中的一组位置,用于存储指向访客操作系统结构的指针和与访客操作系统相关联的状态信息。元素还包括iommu外围页面请求日志208、iommu命令缓冲区210和iommu事件日志212,它们是存储器中的用于存储来自和去往iommu112的通信的结构(例如,列表、表格等)。元素还包括iommu112中的iommu存储器映射的输入输出(mmio)指针/状态寄存器(regs)214,它们是iommu112中的一组寄存器,用于存储指向各种iommu112结构的指针和与iommu112相关联的状态信息。

在操作中,并且使用命令作为示例,访客操作系统102将去往iommu112的命令写入到访客命令缓冲区202(即,写入到存储器的缓冲区中的下一个可用位置,其中存储有来自访客操作系统102的命令)。由于访客操作系统102在命令中使用与iommu112使用的“主机”域标识符(域id)和/或装置标识符(装置id)不同的“访客”域id和/或装置id,因此iommu112将不可能标识正确的装置和/或域(域id和装置id在本文别处描述,但通常从电子装置中的一组装置中标识特定装置或标识保护域,这是一种对装置进行分组以执行存储器访问的机制)。使用命令而不转译或转换访客域id和/或装置id可能因此使得命令不被iommu112正确地处理,这可能导致电子装置中的错误。因此,管理程序106(如图2中的虚线所示)拦截访客操作系统对访客命令缓冲区202的写入,在管理程序数据结构中查找从访客域id和/或访客域id到主机域id和/或装置id的映射,用对应主机域id和/或装置id替换命令中的访客域id和/或访客装置id,并将更新的命令存储在iommu命令缓冲区210中。然后,iommu112从iommu命令缓冲区210检索命令并执行命令,这使得iommu112执行对应动作。管理程序106至少执行一些类似操作:iommu112写入到iommu外围页面请求日志208和iommu事件日志212(但是用访客装置id替换主机装置id等)、访客指针/状态寄存器206的访问以及iommummio指针/状态寄存器214的访问。由于管理程序106执行的存储器读写、映射的查找以及其他操作的延迟较长,因此使用管理程序106介入在访客操作系统102与iommu112之间会导致处理通信的延迟,并使得处理器忙碌并在电子装置的存储器总线上增加流量。

附图说明

图1呈现了示出虚拟机和管理程序的框图。

图2呈现了示出由管理程序处理的访客操作系统与iommu之间的通信的框图。

图3呈现示出了根据一些实施方案的虚拟机和管理程序的框图。

图4呈现示出了根据一些实施方案的电子装置的框图。

图5呈现示出了根据一些实施方案的iommu访问的存储器部分的框图。

图6呈现示出了根据一些实施方案的由iommu处理的访客操作系统与iommu之间的通信的框图。

图7呈现示出了根据一些实施方案的用于在iommu中处理来自访客操作系统的通信的过程的流程图。

图8呈现示出了根据一些实施方案的用于在iommu中处理来自输入输出(io)装置的去往访客操作系统的通信的过程的流程图。

图9呈现示出了根据一些实施方案的用于在iommu中生成去往访客操作系统的通信的过程的流程图。

图10呈现示出了根据一些实施方案的用于配置iommu以转译域id和装置id的过程的流程图。

在整个附图和描述中,相同附图标记指代相同的附图元件。

具体实施方式

呈现以下描述以使本领域的任何技术人员能够制造和使用所描述的实施方案,并且在特定应用及其要求的上下文中提供以下描述。对所描述的实施方案的各种修改对于本领域技术人员来说将是明显的,并且可将本文中定义的一般原理应用于其他实施方案和应用。因此,所描述的实施方案不限于所示的实施方案,而是要被赋予与本文中公开的原理和特征一致的最宽范围。

术语

在以下描述中,使用各种术语来描述实施方案。以下是这些术语之一的简化且一般描述。注意,该术语可具有重要的附加方面,为了清楚和简洁起见,本文中没有列举所述附加方面,并且因此所述描述并不旨在限制所述术语。

功能块:功能块是指一个或多个相互关联的电路元件(例如集成电路元件、分立电路元件等)的组、集合和/或集。电路元件是“相互关联的”,因为电路元件共享至少一种性质。举例来说,相互关联的电路元件可包括在特定的集成电路芯片或其一部分中、制造在特定的集成电路芯片或其一部分上或以其他方式耦合到特定的集成电路芯片或其一部分,可牵涉到给定功能(计算或处理功能、存储器功能等)的执行,可由公共控制元件和/或公共块来控制等。功能块可包括任意数量的电路元件,从单个电路元件(例如,单个集成电路逻辑门)到数百万或数十亿的电路元件(例如,集成电路存储器)。

虚拟化、虚拟机和管理程序

所描述的实施方案支持诸如存储器、输入输出(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与iommu312之间的通信的至少一些操作,如本文所述。然而,注意,某些通信发生在iommu312与管理程序306之间,如管理程序306与iommu312之间的线所示。此外,注意,在一些情况下,主机操作系统308不存在并且管理程序306更直接地与电子装置硬件310通信。

域标识符和装置标识符

在所描述的实施方案中,电子装置使用域标识符(域id)和装置标识符(装置id)来标识输入输出(io)装置以进行诸如页表遍历、中断重新映射、装置访问、事件报告等操作。举例来说,电子装置中的输入输出存储器管理单元(iommu)可以使用域id和/或装置id来确定处理器(或在其上执行的软件)与io装置之间通信的源或目的地,确定用于io装置的地址转译的页表,向处理器报告由特定io装置触发或发生在特定io装置处的事件等。域id是标识io装置所属保护域的数值。一个或多个io装置可以属于一个给定保护域,并且每个保护域中包括的io装置对于存储器中的页面可能具有同一组地址映射(即,使用相同的页表)和访问权限。装置id是一个数字标识符,其包括或基于信息生成诸如标识io装置所在的接口总线的总线标识符、在电子装置中的多个装置间标识io装置的装置编号、以及标识io装置执行的功能的功能编号。域id和装置id在2016年12月的amdi/o虚拟化技术(iommu)规范,修订版3.00中进行了详细描述,其如以上所述以引用方式并入本文。

在一些实施方案中,上述虚拟化的一个效果是访客操作系统和诸如iommu或io装置之类的电子装置硬件可以使用域id和/或装置id的不同值。在这些实施方案中,访客操作系统可以使用由访客操作系统选择、确定或编程到访客操作系统中的域id和/或装置id的“本地”或“访客”值,并且电子装置硬件可以使用由电子装置硬件选择、确定或编程到电子装置硬件的域id和/或装置id的“系统”或“主机”值。因为域id和装置id的值不同,访客操作系统与电子装置硬件之间的通信涉及处理通信(即,转译和/或以其他方式协助通信)的一个或多个实体。与现有系统不同,在所描述的实施方案中,管理程序不转译和/或以其他方式协助通信。相反,并且如本文所述,iommu包括用于在没有管理程序介入的情况下转译和/或以其他方式协助通信的机制。在一些实施方案中,虽然管理程序不涉及转译和/或协助通信,但是管理程序可以帮助设置或配置iommu以处理通信。

综述

在所描述的实施方案中,电子装置包括处理器、存储器和多个输入输出(io)装置(例如,网络接口装置、磁盘控制器等)。电子装置还包括联接在处理器与io装置之间的输入输出存储器管理单元(iommu)。电子装置中的处理器执行管理程序、一个或多个虚拟机以及在虚拟机中的访客操作系统。iommu执行操作以处理访客操作系统与iommu和io装置之间的通信。更具体地,iommu将来自访客操作系统的通信中的访客域id和访客装置id转译为主机域id和主机装置id,然后在iommu和/或io装置中处理所述通信。此外,iommu将来自io装置的通信中的主机域id和/或主机装置id转译为访客域id和/或访客装置id,并生成包括访客域id和/或访客装置id的通信,然后将所述通信发送到访客操作系统进行处理。

由iommu处理的上述通信包括访客操作系统与iommu和io装置之间的各种形式/类型的通信。通常,所描述的实施方案中的iommu可以在访客操作系统与iommu和io装置之间的任何通信中执行域id和/或装置id的转译或转换。作为从访客操作系统到iommu的通信的示例,在一些实施方案中,访客操作系统将命令写入到由iommu提供的命令缓冲区中。iommu在处理来自命令缓冲区的命令时,从所述命令中获取访客域id和/或装置id,并使用id转译表查找对应主机域id和/或装置id。然后,iommu在进一步处理命令之前用主机域id和/或装置id替换访客域id和/或装置id。作为从iommu到访客操作系统的通信的示例,在一些实施方案中,iommu将外围页面请求(ppr)写入到访客操作系统的页面请求中断日志。在将ppr写入到日志之前,iommu从ppr中获取主机装置id(或基于源io装置确定主机装置id)并使用源io装置的装置表条目来查找相关联的访客装置id。然后,iommu用访客装置id替换主机装置id,然后将ppr存储在访客操作系统的外围页面请求日志中。作为从iommu到访客操作系统的通信的另一个示例,在一些实施方案中,当生成去往访客操作系统的(例如,关于事件等的)通信时,iommu使用id转译表和/或装置表来确定要包括在通信中的访客域id和/或装置id,并且因此不包括iommu生成的通信中的主机域id和/或装置id。

在一些实施方案中,上述id转译表和/或装置表由管理程序或另一软件或硬件实体(例如,操作系统等)填充/配置和/或更新,以包括要由iommu用于处理通信的信息。举例来说,在一些实施方案中,管理程序向iommu传送访客域id和/或装置id与主机域id和/或装置id之间的映射,并且iommu将映射写入到id转译表。在这些实施方案中,iommu包括或提供一个或多个存储器映射的输入输出(mmio)寄存器(或存储器中的对应存储器位置),每个映射被依次写入其中,直到iommu已接收并存储来自管理程序的所有映射。

在一些实施方案中,iommu不在内部存储id转译表和/或装置映射表的至少一部分。在这些实施方案中,iommu将一些或全部id转译表和/或装置表存储到存储器(例如,主存储器)或另一个后备存储器。在这些实施方案中,iommu包括一个或多个私有存储器转译表或列表,其中存储了id转译表(例如,基地址、长度等)和/或装置表在存储器或后备存储器中的位置。

通过如上所述处理访客操作系统与iommu之间的通信,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(ddrsdram)和/或用于存储由电子装置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访问(即,读取、写入、使无效等)存储器404中的存储器页面中的数据,这些页面对于访客操作系统是私有的。

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包括iommu424,它是一个功能块,执行用于使io装置408-412能够访问存储器404中的数据和/或指令的操作、与处理器402通信等。在这些实施方案中,当存储器404中的io装置(例如,io装置408)要访问数据和指令时,io装置向iommu424发送存储器访问请求(例如,直接存储器访问请求或dma)。然后,iommu424向存储器404发送对应请求以满足存储器访问请求。举例来说,在一些实施方案中,如果要基于存储器访问请求检索数据,则iommu424从存储器404(或大容量存储装置406,如果数据不存在于存储器404中)获取数据并将数据转发到请求io装置。在一些实施方案中,iommu424包括页表、转译后备缓冲区和/或用于将io装置408-412使用的“虚拟”或本地存储器地址转译成数据实际上所在的存储器404中的物理地址的其他功能块。

在所描述的实施方案中,iommu424与由虚拟机中的核心418-420执行的访客操作系统通信,反之亦然。举例来说,在一些实施方案中,iommu424(或经由iommu424的io装置408-412)将事件和外围页面请求(ppr)传送到访客操作系统。在这些实施方案中,iommu424经由存储器404中的共享访客事件日志向访客操作系统报告诸如非法装置表条目、io页面错误(代表io装置408-412的页表遍历)、iommu424硬件错误等事件。此外,在这些实施方案中,iommu424向访客操作系统转发来自外围装置(io装置)的ppr,所述ppr被配置为经由存储器404中的共享访客ppr日志使用众所周知的地址转译服务或ats标准进行存储器页面服务操作(即,执行对存储器404中的可由访客操作系统访问的页面上的或与其相关联的操作)。作为另一个示例,在一些实施方案中,访客操作系统将命令传送到iommu424。在这些实施方案中,访客操作系统经由存储器404中的共享访客命令缓冲区向iommu424发出命令以控制iommu424和/或io装置408-412,诸如完成等待(其用作强制较早的命令在iommu424进行之前完成的命令屏障)、装置表条目失效、iommu424转译后备缓冲区条目失效等。如本文所述,iommu424将通信中的访客域id和/或装置id转译为主机域id和/或装置id,反之亦然。

在一些实施方案中,iommu424提供到访客操作系统的接口,所述接口包括用于与iommu424通信的存储器映射的位置、寄存器等。举例来说,在一些实施方案中,iommu424提供一组存储器映射的输入输出(mmio)存储器位置,访客操作系统可以向其写入值,以便iommu424将接收到所述值。在一些实施方案中,接口被虚拟化,因为如访客操作系统所假定的,存储器位置、寄存器等未被用于存储值,而是简单地呈现为由iommu424使用。在这些实施方案中,iommu424可以经由接口从访客操作系统接收值,但是使用后备存储区426和/或存储器404中的其他位置来将所述值的单独副本存储在每个访客操作系统的存储器位置、寄存器等中。下面更详细地描述了由iommu424访问以与访客操作系统和其他实体(例如,处理器402等)通信的存储器。

访客存储器428是存储器404(例如,存储器的一个或多个页面)的一部分,所述部分被对应访客操作系统(例如,访客操作系统302)用于存储将由访客操作系统使用的数据和信息。通常,访客操作系统可以使用访客存储器428来存储由访客操作系统和/或其他实体使用的任何形式的数据和信息。在一些实施方案中,访客存储器428受到保护,以便仅允许某些实体访问访客存储器428。在一些实施方案中,访客存储器428用于存储诸如访客事件日志、访客外围页面请求(ppr)日志和访客命令缓冲区之类的结构,它们是用于访客操作系统与iommu之间的通信的数据结构(例如,表格、列表等)。下面更详细地描述了访客事件日志、访客外围页面请求(ppr)日志和访客命令缓冲区。

在一些实施方案中,通信路径耦合在电子装置400中的各种功能块(处理器402、存储器控制器416、存储器404等)之间,如元件之间的箭头线所示。通信路径包括一条或多条总线、电线、导线和/或其他可能与控制器、结构元件(交换机、路由器等)、电路元件等一起的连接。通信路径用于路由命令、数据、控制信号和/或功能块之间的其他信息。举例来说,在一些实施方案中,相干总线结构或互连耦合在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用于将从访客操作系统到iommu的通信(或相反,从iommu到访客操作系统的通信)中的访客域id和/或装置id转译或转换为主机域id和/或装置id的信息。在一些实施方案中,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的映射控制寄存器。作为另一个示例,对于每个访客操作系统,访客控制508可以包括命令控制寄存器、事件控制寄存器和ppr控制寄存器,所述寄存器指示该访客如何与命令缓冲区、事件日志和ppr日志交互,和/或如何以其他方式配置该访客。

iommu后备存储区500还包括访客存储器映射的输入输出(mmio)510。通常,访客mmio510包括用于访问存储器404的访客部分(例如,访客存储器428)中的访客操作系统的缓冲区和日志(例如,访客命令缓冲区、访客事件日志和访客ppr日志)的指针和控制信息。更具体地,对于每个支持的访客操作系统,访客mmio510包括用于进行/控制对存储器404的访客部分中的缓冲区和日志的访问的值的单独副本。举例来说,在一些实施方案中,iommu支持(可以与之交互、处理其通信等)2n个访客操作系统,其中n=10、16或其他值,并且因此访客mmio510包括值的多达2n个副本,每个支持的访客操作系统都有一个。在所描述的实施方案中,用于控制访问的值类似于存储在现有装置中的iommummio寄存器中的值,但是为每个支持的访客操作系统保留单独的一组值,指的是该访客操作系统的存储器404的访客部分(而不是现有装置的iommu中的单个副本)。举例来说,在一些实施方案中,对于每个支持的访客操作系统,访客mmio510包括命令、事件和ppr头和/或尾指针(所述指针指示存储器的对应访客部分中的访客命令缓冲区、访客事件日志和访客ppr日志的位置)以及控制寄存器(其中的位控制或标识该访客操作系统的针对命令、事件和ppr的功能和配置)。

访客存储器512包括访客事件日志514、访客外围页面请求(ppr)日志516和访客操作系统的访客命令缓冲区518。通常,访客事件日志514、访客外围页面请求日志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中的至少一些数据和信息可以由其他实体经由对iommu中或与iommu相关联的对应(并由iommu保护的)存储器映射的输入输出寄存器的写入和读取来访问。

iommu和访客操作系统通信

在所描述的实施方案中,iommu(例如,iommu424)转译或转换iommu(或由此服务的io装置)与访客操作系统之间的通信中的域id和装置id。图6呈现示出了根据一些实施方案的由iommu602处理的访客操作系统600与iommu602之间的通信的框图。尽管在图6中以特定布置示出了多个元件,但是其他实施方案使用不同数量或布置的元件。通常,在所描述的实施方案中,iommu602包括或访问足够的元件以实现本文描述的操作。在图6中,许多元件显示为点状;这些元件是存储在存储器中(例如,在iommu后备存储区500中、在访客存储器512等中)并由iommu602、访客操作系统600和/或使用典型存储器访问技术的其他实体访问的日志、缓冲区等。在一些实施方案中,访客操作系统600、iommu602和管理程序604以与图3中的访客操作系统302、iommu312和管理程序306类似的方式组织,但这不是必需的。

如图6中可见,并且与针对现有系统的图2所示的不同,在所描述的实施方案中,iommu602和访客操作系统600彼此更直接地通信。换句话说,iommu602和访客操作系统600经由存储器中(即,访客操作系统600的存储器的访客部分(例如,访客存储器428))的访客事件日志514、访客ppr日志516和访客命令缓冲区(buff)518彼此通信。此外,访客操作系统600和iommu602使用访客控制508和访客mmio510来规定如何执行通信。举例来说,在一些实施方案中,iommu602使用访客mmio510中的指针来确定访客操作系统600的访客事件日志514、访客命令缓冲区518和客户ppr日志516在存储器中的位置。管理程序604不介入并且不以其他方式参与用于完成这些通信的一些或全部操作。举例来说,管理程序604不执行诸如为这些通信转译域id和装置id、访问访客mmio510中的指针和/或访问存储器的访客部分中的缓冲区和日志之类的操作。相反,iommu602执行这些操作。由于iommu602转译域id和装置id并从访客mmio510等获取信息,所描述的实施方案避免使用管理程序604来处理访客操作系统600与iommu602之间的至少部分通信,这可能意味着通信更快地完成,导致处理器402和存储器404等的负载更少。

在操作中,以命令为例,访客操作系统600将invalidate_iommu_pages命令写入到访客命令缓冲区518,所述命令导致iommu602使iommu转译高速缓存中的一系列条目无效,如命令中的域id所指定。换句话说,访客操作系统在存储器的对应访客部分中执行存储器写入以更新访客命令缓冲区518中的下一打开/可用条目以包括针对invalidate_iommu_pages命令的数据(即,代表命令的位)。然后,访客操作系统600向iommu发送写入命令以更新(例如,推进、增加等)对应iommummio寄存器中的命令缓冲区尾指针以指示访客操作系统600将命令写入到命令缓冲区。iommu602检测访客操作系统600对命令缓冲区尾指针的写入,例如通过监听对对应访客命令缓冲区中的地址的写入、检测缓冲区尾指针的值的变化、接收来自访客操作系统600的写入命令等。在检测到命令缓冲区尾指针的写入时,iommu602使用命令缓冲区尾指针的值来从存储器的访客部分中的命令缓冲区检索命令。因为访客操作系统600在命令中使用的访客域id可能与iommu602使用的主机域id不同,如果iommu602在没有首先转译域id的情况下使用命令,iommu602可能使不正确的条目范围无效。iommu602因此使用id转译表(例如,id转译表502)确定与命令中的访客域id相关联的主机域id。iommu接下来从访客命令缓冲区518检索命令并且用主机域id替换命令中的访客域id。然后,iommu602处理命令,从而导致iommu602使其转译高速缓存中由主机域id指示的条目范围无效。iommu602至少对iommu602写入到访客ppr日志516和访客事件日志514执行一些类似的操作——诸如在来自io装置的ppr请求中用访客装置id替换主机装置id或将访客域id和/或装置id置于事件中。

尽管管理程序604不参与访客域id到主机域id的转译,但是管理程序604和访客操作系统600和/或iommu602可以单独交换与访客操作系统600和iommu602之间的通信相关联的通信,或者管理程序604可以其他方式参与确保访客操作系统600和/或iommu602正确地处理通信。举例来说,管理程序604可以直接(通过通信)或间接(通过监听存储器访问)确定访客操作系统600正在进行通信(例如,写入到命令缓冲区)并且可以执行诸如向访客操作系统600和/或iommu602发送中断信号、更新用作标志的共享存储器位置等的操作。

在iommu中转译域id和装置id的过程

图7呈现示出了根据一些实施方案的用于在iommu(例如,iommu424)中处理来自访客操作系统的通信的过程的流程图。更具体地,图7呈现了用于在处理iommu中的通信之前将来自访客操作系统的通信中的访客域id和/或装置id转译为主机域id和/或装置id的操作。注意,图7所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。

图7所示的操作适用于在iommu中从具有访客域id和/或装置id的访客操作系统接收的任何通信。举例来说,iommu可以在命令缓冲区中(例如,在访客存储器512中的访客命令缓冲区518内)接收命令。通常,iommu可以在来自访客操作系统的各种形式的通信中将访客域id和/或装置id转译为主机域id和/或装置id。

当iommu从访客操作系统(例如,访客操作系统600)接收到包括访客域id和/或访客装置id的通信时,图7的操作开始(步骤700)。如上所述,并且作为虚拟化的效果,访客操作系统使用一组域id和装置id,所述域id和装置id可以部分或完全不同于电子装置(或“主机”)硬件(诸如iommu和/或io装置)使用的一组域id和装置id。(域id和/或装置id有可能可以部分或全部匹配,但这种可能性很小,特别是在包括大量io装置、虚拟装置、域等的电子装置中)。从iommu和其他电子装置硬件的角度来看,从访客操作系统接收的通信因此可能包括不正确的域id和/或装置id。

然后,iommu使用id转译表(例如,id转译表502)中的相应条目确定与访客域id相关联的主机域id和/或与访客装置id相关联的主机装置id(步骤702)。举例来说,iommu可以使用访客域id在id转译表中查找对应主机域id。注意,在一些实施方案中,id转译表包括单独的域id映射和装置id映射表(例如,域id映射表504和装置id映射表506)——并且由iommu相应地执行查找。

iommu接下来在通信中用主机域id替换访客域id和/或用主机装置id替换访客装置id(步骤704)。对于该操作,iommu可以更改通信本身,即通过将更新的位写入到通信。替代地,iommu可以用主机域id和/或装置id的值写入或设置内部寄存器、存储器位置等,从而为后续处理通信预设或准备iommu。

然后,iommu处理通信(步骤706)。对于该操作,iommu执行与处理特定通信相关联的典型操作,尽管是在如步骤704所述替换访客域id和/或装置id之后。举例来说,如果通信是命令,则iommu可以处理所述命令。

图8呈现示出了根据一些实施方案的用于在iommu(例如,iommu424)中处理来自输入输出(io)装置的去往访客操作系统的通信的过程的流程图。更具体地,图8呈现了用于在将来自io装置的通信转发到访客操作系统之前将所述通信中的主机装置id转译为访客装置id的操作。注意,图8所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。

图8所示的操作适用于在iommu中从具有主机装置id的io装置接收的任何通信。举例来说,iommu可以从io装置接收外围页面请求(ppr)。通常,iommu可以在来自io装置的各种形式的通信中将主机装置id转译为访客装置id。此外,虽然图8仅限于io装置(包括通信中的主机装置id),可以对来自io装置的通信中的主机域id执行类似的操作——即在此类通信中将主机域id转译为访客域id。

当iommu从io装置(例如,io装置408)中接收到包括主机装置id的通信时,图8中的操作开始(步骤800)。如上所述,并且作为虚拟化的效果,io装置使用一组装置id,所述装置id可以部分或完全不同于访客操作系统使用的一组装置id。从访客操作系统的角度来看,从iommu中的io装置接收的通信因此可能包括不正确的装置id。

然后,iommu使用装置表(例如,装置表526)中的条目确定与主机装置id相关联的访客装置id(步骤802)。举例来说,iommu可以使用主机装置id在装置表中查找对应访客装置id。

iommu接下来在通信中用访客装置id替换主机装置id(步骤804)。对于该操作,在一些实施方案中,iommu更改通信本身,即通过将更新的位写入到通信。替代地,在一些实施方案中,iommu用访客域id的值写入或设置内部寄存器、存储器位置等——从而向访客操作系统指示访客装置id并使访客操作系统为处理通信做准备。

然后,iommu将通信转发到访客操作系统(步骤806)。对于该操作,在一些实施方案中,iommu通过将通信存储在诸如对应访客存储器中的ppr日志之类的存储器位置中来转发通信。iommu还可向访客操作系统发信号或指示通信已准备好由访客操作系统处理。访客操作系统随后处理通信,即执行与处理特定通信相关联的典型操作。

图9呈现示出了根据一些实施方案的用于在iommu(例如,iommu424)中生成去往访客操作系统的通信的过程的流程图。更具体地,图9呈现了用于在将来自iommu的通信发送到访客操作系统之前将对应访客装置id和/或域id包括在所述通信中的操作。注意,图9所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。

图9所示的操作适用于由iommu生成的包括访客域id和/或装置id并且去往访客操作系统的任何通信。举例来说,iommu可以基于事件(例如,硬件故障、页面错误等)的发生生成用于向访客操作系统报告所述事件的通信。通常,iommu可以在去往访客操作系统的各种形式的通信中包括访客域id和/或装置id。

当iommu生成去往访客操作系统的通信时,图9中的操作开始(步骤900)。如上所述,并且作为虚拟化的效果,iommu使用一组域id和装置id,所述域id和装置id可以部分或完全不同于访客操作系统使用的一组域id和装置id。从访客操作系统的角度来看,iommu使用iommu的域id和装置id视图生成的通信因此可能包括不正确的域id和装置id。当生成通信时,iommu使用id转译表(例如,id转译表502)中的相应条目确定对应io装置的访客操作系统使用的访客装置id和/或域id(步骤902)。举例来说,iommu使用针对对应io装置的主机装置id来在id转译表中查找对应访客域id和/或装置id。iommu接下来将访客域id和/或装置id置于通信中(步骤904)。对于该操作,在一些实施方案中,iommu将对应位写入到通信,诸如在通信内保存域id和/或装置id的记录的字段中。

然后,iommu将通信转发到访客操作系统(步骤906)。对于该操作,在一些实施方案中,iommu通过将通信存储在诸如对应访客存储器中的事件日志之类的存储器位置中来转发通信。iommu还可向访客操作系统发信号或指示通信已准备好由访客操作系统处理。访客操作系统随后处理通信,即执行与处理特定通信相关联的典型操作。

配置iommu以转译装置id和域id的过程

图10呈现示出了根据一些实施方案的用于配置iommu(例如,iommu424)以转译域id和装置id的过程的流程图。更具体地,图10呈现了用于在id转译表中设置条目以指示主机域id和/或装置id与访客域id和/或装置id之间的映射的操作。注意,图10所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的顺序执行的操作和/或由不同的实体或功能块执行的操作。举例来说,虽然管理程序被描述为执行图10中的某些操作,但是在替代实施方案中,另一个实体(例如,虚拟机、电子装置操作系统、访客操作系统、软件应用程序等)执行操作。

当iommu从管理程序接收到指示与主机域id相关联的访客域id或与主机装置id相关联的访客装置id的通信时,图10中的操作开始(步骤1000)。举例来说,在一些实施方案中,管理程序向由iommu提供的mmio位置写入关于域id或装置id之间的关联的信息,并且iommu检测到对mmio位置的写入和/或从管理程序接收到已写入到mmio位置的指示。然后,iommu更新id转译表(例如,id转译表502)中的条目以包括指示访客域id映射到主机域id或访客装置id映射到主机装置id的信息(步骤1002)。

在一些实施方案中,iommu接收并且管理程序发送指示由访客操作系统识别的每个访客域id和/或装置id以及对应主机域id和/或装置id的通信。举例来说,在一些实施方案中,在启动时或在另一时间,管理程序循环通过访客操作系统识别的所有访客域id和/或装置id,确定到主机域id和/或装置id的映射,并且传送关于每个域id或装置id配对/映射的信息。

在一些实施方案中,电子装置(例如,电子装置400和/或其某一部分)使用存储在非暂时性计算机可读存储介质上的代码和/或数据来执行本文中描述的操作中的一些或全部。更具体地,当执行所描述的操作时,电子装置从计算机可读存储介质读取代码和/或数据并且执行代码和/或使用数据。计算机可读存储介质可以是存储代码和/或数据以供电子装置使用的任何装置、介质或其组合。举例来说,计算机可读存储介质可包括但不限于易失性和/或非易失性存储器,包括闪存、随机存取存储器(例如,edram、ram、sram、dram、ddr4sdram等)、只读存储器(rom)和/或磁性或光学存储介质(例如,磁盘驱动器、磁带、cd、dvd等)。

在一些实施方案中,一个或多个硬件模块执行本文中描述的操作。举例来说,硬件模块可包括但不限于一个或多个处理器/核心/中央处理单元(cpu)、专用集成电路(asic)芯片、神经网络处理器或加速器、现场可编程门阵列(fpga)、计算单元、嵌入式处理器、图形处理器(gpu)/图形核心、流水线、加速处理单元(apu)、高速缓存/高速缓存控制器、存储器/存储器控制器、功能块和/或其他可编程逻辑装置。当此类硬件模块被激活时,硬件模块执行操作中的一些或全部。在一些实施方案中,硬件模块包括一个或多个通用电路,所述通用电路通过执行指令(程序代码、固件等)以执行操作来配置。

在一些实施方案中,表示本文中描述的结构和机制中的一些或全部的数据结构(例如,电子装置400、iommu424和/或其某一部分)存储在非暂时性计算机可读存储介质上,所述非暂时性计算机可读存储介质包括可由电子装置读取并且直接地或间接地使用以制造包括所述结构和机制的硬件的数据库或其他数据结构。举例来说,数据结构可以是采用高级设计语言(hdl)(例如verilog或vhdl)的硬件功能的行为级描述或寄存器传送级(rtl)描述。所述描述可由综合工具读取,所述综合工具可综合所述描述以产生网表,所述网表包括来自综合库中的门/电路元件的清单,所述清单表示包括上述结构和机制的硬件的功能。然后,可放置并且路由所述网表以产生描述要应用于掩模的几何形状的数据集。然后,可在各种半导体制造步骤中使用掩模以产生与上述结构和机制相对应的一个或多个半导体电路(例如,集成电路)。替代地,计算机可访问的存储介质上的数据库可以是网表(带有或没有综合库)或数据集(根据需要),或图形数据系统(gds)ii数据。

在本说明书中,变量或未指定值(即,在没有值的特定实例的情况下对值的一般描述)由例如n的字母表示。如本文所使用,尽管在本说明书中可能在不同位置使用类似的字母,但是每种情况下的变量和未指定值不一定相同,即,可能有不同的变量量和值旨在用于一般变量和未指定值中的一些或全部。换句话说,在本说明书中,n和用于表示变量和未指定值的任何其他字母不一定彼此相关。

如本文所使用的表达“等(etcetera)”或“等(etc.)”旨在呈现一者和/或情况,即,清单中的与“等”相关联的元素中的“至少一个”的等同物。例如,在语句“电子装置执行第一操作、第二操作等等”中,电子装置执行第一操作、第二操作和其他操作中的至少一个。此外,与“等”相关联的列表中的元素仅仅是示例集中的示例,且示例中的至少一些可能不会出现在一些实施方案中。

仅出于说明和描述的目的给出了实施方案的先前描述。所述先前描述不意图是详尽的或将实施方案限于公开的形式。相应地,许多修改和变化对本领域的从业人员来说将是显而易见的。另外,以上公开并不意图限制实施方案。实施方案的范围由所附权利要求限定。

转载请注明原文地址:https://doc.8miu.com/read-350450.html

最新回复(0)