一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问的制作方法

2022-02-24 18:58:47 来源:中国专利 TAG:

输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问


背景技术:

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

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献