CN114207596A - 将中断从输入-输出存储器管理单元提供到访客操作系统 - Google Patents

将中断从输入-输出存储器管理单元提供到访客操作系统 Download PDF

Info

Publication number
CN114207596A
CN114207596A CN202080054952.5A CN202080054952A CN114207596A CN 114207596 A CN114207596 A CN 114207596A CN 202080054952 A CN202080054952 A CN 202080054952A CN 114207596 A CN114207596 A CN 114207596A
Authority
CN
China
Prior art keywords
interrupt
iommu
operating system
guest operating
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
Application number
CN202080054952.5A
Other languages
English (en)
Inventor
玛吉·陈
菲利普·恩杰
保罗·布林策
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of CN114207596A publication Critical patent/CN114207596A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45545Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Abstract

一种电子装置包括:处理器,所述处理器执行访客操作系统;存储器,所述存储器具有访客部分,所述访客部分保留用于存储将由所述访客操作系统访问的数据和信息;以及输入‑输出存储器管理单元(IOMMU)。所述IOMMU执行用于将中断用信号传达给所述访客操作系统的操作。对于这些操作,所述IOMMU从中断重映射表中与所述访客操作系统相关联的条目获取所述存储器的所述访客部分中用于所述访客操作系统的虚拟高级可编程中断控制器(APIC)后备页面中的位置。然后,所述IOMMU将关于所述中断的信息写入所述虚拟APIC后备页面中的所述位置。接下来,所述IOMMU将所述中断的指示传达给所述访客操作系统。

Description

将中断从输入-输出存储器管理单元提供到访客操作系统
背景技术
相关技术
一些电子装置(例如,服务器或台式计算机等)支持诸如输入-输出(IO)装置等的电子装置硬件的“虚拟化”。虚拟化涉及:在实际上电子装置之上或之中的中间实体拦截/重定向或以其他方式协助在电子装置上执行的软件实例(例如,应用程序等)进行的访问时,中间实体向软件实例提供软件实例能够直接访问电子装置硬件的错觉。一种常见的中间实体是“虚拟机”。虚拟机是软件实体,其将电子装置硬件抽象化并仿真或呈现到电子装置硬件的已知接口,从而使得软件实例能够在各种类型和布置的底层电子装置硬件(可能地包括软件实例原本将与其不兼容的电子装置硬件)上执行。在一些电子装置中,虚拟机支持执行一个或多个操作系统实例(称为“访客”操作系统)。访客操作系统反过来提供用于执行其他软件实例(诸如生产力应用程序、数据库等)的环境。
在一些电子装置中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;终止或关闭虚拟机等。图1呈现示出虚拟机和管理程序的框图。如在图1中可见,存在三个虚拟机(VM)100,在每个虚拟机下执行访客操作系统(访客OS)102和一个或多个程序(PRGRM)104,诸如数据库、软件应用程序等。虚拟机100与管理程序106通信,所述管理程序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中,多个元素被示出为带点的/点刻的;这些元素是存储在存储器(例如,电子装置的主存储器)中并且因此通过典型存储器访问技术访问的日志、缓冲区等。连同访客操作系统102、管理程序106和IOMMU 112,图2中的元素包括访客外围页面请求(PPR)日志200、访客命令缓冲区(CMD BUF)202和访客事件日志204,它们是存储器中用于存储访客操作系统102和电子装置中的其他实体的数据和信息的结构(例如,列表、表格等)。此外,元素包括访客指针(PTR)/状态寄存器(REG)206,它们是存储器中用于存储指向访客操作系统结构的指针和与访客操作系统相关联的状态信息的一组位置。元素还包括IOMMU外围页面请求(PPR)日志208、IOMMU命令缓冲区210和IOMMU事件日志212,它们是存储器中用于存储来自和去往IOMMU 112的通信的结构(例如,列表、表格等)。元素另外包括IOMMU 112中的IOMMU存储器映射的输入-输出(MMIO)指针/状态寄存器(REG)214,它们是IOMMU 112中用于存储指向各种IOMMU 112结构的指针和与IOMMU 112相关联的状态信息的一组寄存器。元素还包括虚拟高级可编程中断控制器(APIC)后备页面216和访客中断日志218,它们是用于通过管理程序106将关于源自IOMMU的中断的信息从IOMMU传达给访客操作系统的结构。
在操作中,并且使用命令作为示例,访客操作系统102将去往IOMMU 112的命令写入到访客命令缓冲区202(即,写入到存储器中存储来自访客操作系统102的命令的缓冲区中的下一可用位置)。如图2中的虚线所示,管理程序106检测访客操作系统到访客命令缓冲区202的写入,获取并处理命令(例如,将命令中的访客域ID和/或访客装置ID替换成对应的主机域ID和/或装置ID等),并且将处理过的命令存储在IOMMU命令缓冲区210中。管理程序106还更新IOMMU MMIO指针/状态寄存器214中用于IOMMU命令缓冲区210的尾指针以指示新写入的命令(例如,将尾指针递增到IOMMU命令缓冲区210中的下一位置)。然后,IOMMU 112使用尾指针(和/或其他指针)从IOMMU命令缓冲区210检索命令并执行命令,这致使IOMMU112执行对应动作。管理程序106针对IOMMU 112到IOMMU外围页面请求日志208和IOMMU事件日志212的写入执行类似操作(例如,将主机装置ID替换成访客装置ID等)。由于由管理程序106执行的存储器读写、指针的更新以及其他操作的时延较长,因此使用管理程序106介入访客操作系统102与IOMMU 112之间导致处理通信的延迟,并且致使处理器忙碌并增加电子装置的存储器总线上的流量。
在操作中,IOMMU 112将源自IOMMU的中断诸如基于时间、故障或错误的中断直接传达给访客操作系统102。更具体地,IOMMU 112通过管理程序106将中断传达给访客操作系统102—而不是将中断直接传达给访客操作系统102。为了将中断传达给访客操作系统102,IOMMU 112将中断用信号传达给管理程序106。然后,管理程序106将关于中断的信息写入虚拟APIC后备页面216中,并且将中断的发生用信号传达给访客操作系统102。例如,管理程序106可设置与虚拟APIC后备页面216中的中断相关联的一个或多个中断请求寄存器位,然后断言门铃信号或写入共享存储器位置以将中断的发生用信号传达给访客操作系统102。在接收到来自管理程序106的信号时,访客操作系统102从虚拟APIC后备页面216获取关于中断的信息,并且处理中断。在一些电子装置中,在中断发生时,访客操作系统102可能处于非活动状态(例如,在另一访客操作系统执行时关断)。在此情况下,管理程序106将关于中断的信息添加到访客中断日志218,所述信息将在访客操作系统102返回到活动状态时用于处理中断。与其他类型的通信一样,依赖于管理程序106作为用于中断处理的接口导致较长的中断处理时间、较多的存储器总线流量等。
附图说明
图1呈现示出虚拟机和管理程序的框图。
图2呈现示出由管理程序处置的访客操作系统与IOMMU之间的通信的框图。
图3呈现示出根据一些实施方案的虚拟机和管理程序的框图。
图4呈现示出根据一些实施方案的电子装置的框图。
图5呈现示出根据一些实施方案的由IOMMU访问的存储器的部分的框图。
图6呈现示出根据一些实施方案的存储在IOMMU MMIO寄存器的访客副本中的值的框图。
图7呈现示出根据一些实施方案的由IOMMU处置的访客操作系统与IOMMU之间的通信的框图。
图8呈现示出根据一些实施方案的在其间IOMMU将中断用信号传达给访客操作系统的过程的流程图。
图9呈现示出根据一些实施方案的中断重映射表中的查找的框图。
贯穿附图和描述,相同附图标记指代相同附图元件。
具体实施方式
呈现以下描述以使得本领域的任何技术人员能够制造和使用所描述实施方案,并且在特定应用及其要求的上下文中提供以下描述。对所描述实施方案的各种修改对于本领域技术人员来说将是显而易见的,并且本文定义的一般原理可应用于其他实施方案和应用。因此,所描述实施方案不限于所示实施方案,而是被赋予与本文所公开的原理和特征一致的最宽范围。
术语
在以下描述中,使用各种术语来描述实施方案。以下是对这些术语之一的简化且一般的描述。注意,此术语可具有重要的附加方面,为了清楚和简洁起见,本文中没有列举所述附加方面,并且因此所述描述并不意图限制所述术语。
功能块:功能块是指一个或多个相互关联的电路元件(诸如集成电路元件、分立电路元件等)的组、集合和/或集。电路元件是“相互关联的”,因为电路元件共享至少一种性质。例如,相互关联的电路元件可包括在特定的集成电路芯片或其一部分中、制造在特定的集成电路芯片或其一部分上或以其他方式耦接到特定的集成电路芯片或其一部分,可涉及给定功能(计算或处理功能、存储器功能等)的执行,可由公共控制元件和/或公共块来控制等。功能块可包括任意数量的电路元件,从单个电路元件(例如,单个集成电路逻辑门)到数百万或数十亿的电路元件(例如,集成电路存储器)。
虚拟化、虚拟机和管理程序
所描述实施方案支持诸如存储器、输入-输出(IO)装置等的电子装置硬件的“虚拟化”。虚拟化通常涉及:当实际上电子装置之上或之中的中间实体拦截/重定向、转译或以其他方式协助在电子装置上执行的软件实例进行的访问时,中间实体向软件实例提供软件实例能够直接访问电子装置硬件的错觉。例如,中间实体可向软件实例呈现一组电子装置寄存器、存储器位置、电子装置设置和其他功能块,它们在软件实例看来是电子装置的实际的装置寄存器、存储器位置等,但只是由中间实体呈现的副本。在这种情况下,中间实体接收、拦截或以其他方式获取对电子装置硬件的副本的访问,并代表软件实例与实际的电子装置硬件进行对应交互。电子装置硬件虚拟化有许多好处,诸如使得不同的电子装置能够使用不同的电子装置硬件布置、不同的电子装置硬件地址、位置或标识符等,而软件实例经由中间实体呈现有相同的与电子装置硬件的接口。此外,中间实体可确定是允许还是阻止给定软件实例对电子装置硬件的访问,并且因此电子装置硬件的虚拟化实现对电子装置硬件(或其部分)和/或在电子装置上执行的软件实例的保护。通过如上所述控制访问,中间实体可在多个软件实例之间共享电子装置硬件和/或向单独软件实例提供对电子装置硬件的部分的独占访问。
在所描述实施方案中,中间实体包括“虚拟机”。虚拟机是软件实体,其将电子装置硬件抽象化并向软件实例呈现到实际或仿真电子装置硬件的已知接口。将硬件抽象化使得软件实例能够在各种类型和布置的底层电子装置硬件(可能地包括软件实例原本将与其不兼容的电子装置硬件)上执行。在所描述实施方案中,虚拟机支持执行一个或多个操作系统实例(称为“访客”操作系统)。访客操作系统反过来提供用于执行其他软件程序(诸如应用程序、数据库等)的环境。
在所描述实施方案中,虚拟机由称为管理程序的软件实体管理和控制。管理程序可启动或初始化虚拟机;控制、监测和协助虚拟机对电子装置硬件的访问;初始化虚拟机或访客操作系统所使用的数据结构、表格等;终止或关闭虚拟机等。图3呈现示出根据一些实施方案的虚拟机和管理程序的框图。如在图3中可见,存在三个虚拟机(VM)300,在每个虚拟机下执行访客操作系统(访客OS)302和一个或多个程序(PRGRM)304,诸如数据库、软件应用程序等。虚拟机300与管理程序306通信,所述管理程序306接口连接在主机操作系统(主机OS)308与虚拟机300之间。主机操作系统308提供电子装置硬件310与管理程序306之间的接口。与图1中针对现有电子装置所示的不同,在图3中,IOMMU 312直接接口连接在访客操作系统302与IO装置硬件314之间,而无需管理程序306介入(如IOMMU 312与访客操作系统302之间的较粗线所示)。因此,与现有电子装置中不同,在所描述实施方案中,管理程序306不负责执行用于处置访客操作系统302与IOMMU 312之间的通信的至少一些操作,如本文所述。然而,注意,某些通信发生在IOMMU 312与管理程序306之间,如管理程序306与IOMMU312之间的线所示。此外,注意,在一些实施方案中,主机操作系统308不存在并且管理程序306更直接地与电子装置硬件310通信。
综述
在所描述实施方案中,电子装置包括处理器、存储器(例如,主存储器)、多个输入-输出(IO)装置(例如,网络接口装置、磁盘控制器等)以及接口连接在处理器与IO装置之间的输入-输出存储器管理单元(IOMMU)。处理器执行管理程序、一个或多个虚拟机并且在虚拟机中执行访客操作系统。访客操作系统中的每一个被分配有存储器的访客部分(连续或非连续区域或内存块),所述访客部分保留用于存储将由访客操作系统访问的数据和信息。在所描述实施方案中,IOMMU执行用于处置访客操作系统与IOMMU之间的通信的操作,且反之亦然。
在一些实施方案中,作为用于处置访客操作系统与IOMMU之间的通信的操作的一部分,IOMMU将关于中断的信息直接传达给访客操作系统。换句话说,IOMMU执行用于向访客操作系统用信号通知源自IOMMU的中断(其可由IOMMU本身或基于IO装置或其他实体的活动生成)正在等待访客操作系统处理或处置的操作。在从IOMMU接收到关于中断的信息之后,访客操作系统执行用于处理或处置源自IOMMU的中断的操作。如本文所使用地将关于源自IOMMU的中断的信息“直接地”从IOMMU传达给访客操作系统,意味着对于活动/运行中访客操作系统,在无需管理程序参与的情况下执行用于传达关于中断的信息的操作。然而,管理程序可处置将关于源自IOMMU的中断的信息传达给非活动操作系统的一些操作。
在一些实施方案中,IOMMU通过存储器的访客部分中的相应虚拟高级可编程中断控制器(APIC)后备页面将关于源自IOMMU的中断的信息传达给访客操作系统。通常,每个虚拟APIC后备页面是用于虚拟化电子装置中用于对应访客操作系统的APIC功能块的存储器部分(例如,一个或多个4kB的存储器页面)。虚拟APIC后备页面包括多个位置(例如,条目、部分等),管理程序和其他实体使用这些位置来仿真APIC功能块的寄存器、存储器位置、控制值等,以使得访客操作系统能够接收和处理或处置中断。APIC、APIC的虚拟化和虚拟APIC后备页面在例如2018年9月的AMD64架构程序员手册第2卷:系统编程,修订版3.30中有所描述描述,所述手册以引用方式整体并入本文。在一些实施方案中,除了先前已知的中断控制和通信位置之外,每个访客操作系统的虚拟APIC后备页面还包括专用于和用于存储关于指定源自IOMMU的中断的信息的一个或多个位置。例如,在一些实施方案中,用于每个访客操作系统的虚拟APIC后备页面包括用于可由所述访客操作系统处理的每种不同类型的源自IOMMU的中断的单独位置(例如,条目、部分等)。又如,在一些实施方案中,每个访客操作系统的虚拟APIC后备页面包括用于可由所述访客操作系统处理的所有不同类型的源自IOMMU的中断的单个组合位置。
在一些实施方案中,IOMMU使用中断重映射表来确定虚拟APIC后备页面中要将关于中断的信息写入其中以用于将中断用信号传达给访客操作系统的位置。通常,中断重映射表是存储在存储器中的表格,所述表格包括多个条目,每个条目用于存储存储器中要将关于指定中断的信息存储在其中的位置的标识符(例如,地址、偏移等)。中断重映射表在例如2016年12月的AMD I/O虚拟化技术(IOMMU)规范,修订版3.00中有所详细描述,所述规范如以上所述以引用方式并入本文。在这些实施方案中,除了中断重映射表中的先前已知的条目之外,中断重映射表还包括用于存储用于每个访客操作系统的虚拟APIC后备页面中的上述位置的标识符的条目。
在一些实施方案,在操作期间,当IOMMU遇到去往给定访客操作系统的源自IOMMU的中断时,IOMMU从中断重映射表获取用于给定访客操作的虚拟APIC后备页面中要将关于中断的信息写入其中的位置的标识符。然后,IOMMU使用标识符将关于中断的信息写入用于给定访客操作系统的虚拟APIC后备页面中的所述位置中。IOMMU还将中断的指示传达给给定访客操作系统,所述指示致使给定访客操作系统从虚拟APIC后备页面中的所述位置检索关于中断的信息,并处理或处置中断。在一些实施方案中,用于将中断的指示传达给给定访客操作系统的机制取决于访客操作系统的活动/非活动状态—即,处理器当前是在执行给定访客操作系统还是用暂时处于非活动状态的给定访客操作系统执行另一任务。以下更详细地描述这些机制。
通过让IOMMU将关于源自IOMMU的中断的信息写入用于访客操作系统的虚拟APIC后备页面并将中断的指示传达给访客操作系统,从而将中断直接传达给访客操作系统,所描述实施方案避免了如现有系统中所存在的对于依赖于管理程序来处理源自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,所述MMU 422是执行与地址转译(例如,页表遍历、转译后备缓冲区查找等)、存储器访问保护等相关联的操作以由核418-420进行存储器访问的功能块。处理器402另外包括高级可编程中断控制器(APIC)430,所述APIC 430是执行处理器402中的与中断处理相关联的操作的功能块。APIC是本领域中已知的,因此并不详细描述。在一些实施方案中,APIC 430被虚拟化用于访客操作系统和如本领域中已知或本文所述的仿真的功能。
存储器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中的存储器页面中的数据(即,存储器的为给定访客操作系统保留的部分)。
在一些实施方案中,IOMMU 424监视由IO装置408-412发起的操作,例如对存储器404的直接存储器访问(DMA)的请求、对核418-420的中断、外围页面请求等。基于由IO装置408-412发起的操作,IOMMU 424可确定要将中断用信号传达给管理程序和/或访客操作系统(例如,传达给管理程序和/或访客操作系统中的适当驱动程序)。例如,IOMMU 424可能遇到转译DMA地址的错误,可能写入PPR日志请求等,并且可能确定将要将中断用信号传达给管理程序和/或访客操作系统。这些中断中的一些或全部使用本文描述的操作进行处理。
IO集线器414是执行输入-输出集线器的操作的功能块,所述输入-输出集线器接口连接在IO装置408-412与电子装置400中的其他功能块(例如,处理器402、存储器404等)之间。由IO集线器414执行的操作包括用于确保以下项的操作:去往IO装置408-412的通信到达预期IO装置、来自IO装置408-412的通信正确到达其他功能块、防止IO装置408-412对其他功能块进行的不被允许的访问,以及反之亦然等。在一些实施方案中,IO集线器414接口连接在使用不同通信标准的总线之间(诸如在外围部件接口高速(PCIe)总线与HyperTransport
Figure BDA0003493518530000121
之间等),并且因此转换或转译相关联通信。
IO集线器414包括IOMMU 424,所述IOMMU 424是执行用于使得IO装置408-412能够访问存储器404中的数据和/或指令的操作、与处理器402(以及由此执行的访客操作系统)通信等的功能块。在这些实施方案中,当IO装置(例如,IO装置408)要在存储器404中访问数据和指令时,IO装置向IOMMU 424发送存储器访问请求(例如,直接存储器访问请求或DMA)。然后,IOMMU 424向存储器404发送对应请求以满足存储器访问请求。例如,在一些实施方案中,如果要基于存储器访问请求检索数据,则IOMMU 424从存储器404(或大容量存储装置406,如果数据不存在于存储器404中)获取数据并将数据转发到请求IO装置。在一些实施方案中,IOMMU 424包括页表、转译后备缓冲区和/或用于将由IO装置408-412使用的“虚拟”或本地存储器地址转译成存储器404中数据实际上所在的物理地址的其他功能块。此外,当电子装置400中的另一功能块和/或装置要访问IO装置(例如,与IO装置通信或从其检索数据)时,IOMMU 424接口连接在功能块和/或装置之间以诸如通过转发通信、控制值、数据等来实现访问。
在所描述实施方案中,IOMMU 424与由虚拟机中的核418-420执行的访客操作系统通信,反之亦然。例如,在一些实施方案中,IOMMU 424(或IO装置408-412通过IOMMU 424)将事件和外围页面请求(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转译后备缓冲区条目失效等。再如,IOMMU 424向访客操作系统传达关于源自IOMMU的中断(诸如外围页面请求中断、基于事件的中断、基于指令完成的中断(例如,完成等待中断、完成等待同步中断等)等)的信息。如以下更详细描述的,IOMMU 424使用虚拟APIC后备页面将关于中断的信息传达给访客操作系统。
在一些实施方案中,IOMMU 424提供到访客操作系统的接口,所述接口包括用于与IOMMU 424通信的存储器映射的位置、寄存器等。例如,在一些实施方案中,IOMMU 424提供访客操作系统可向其写入值以使得IOMMU 424将接收到所述值的一组存储器映射的输入-输出(MMIO)存储器位置。在一些实施方案中,接口是虚拟化的,因为如访客操作系统所假定的,存储器位置、寄存器等不是用于存储值的,而是简单地由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之间的通信的数据结构(例如,表格、列表等)。此外,在一些实施方案中,访客存储器428用于存储由管理程序和其他实体用于使得访客操作系统能够接收和处理/处置中断的虚拟APIC后备页面(例如,一个或多个N字节的存储器块)。以下更详细描述访客事件日志、访客外围页面请求(PPR)日志、访客命令缓冲区和虚拟APIC后备页面。
管理程序存储器432是存储器的一部分(例如,存储器的一个或多个连续或不连续页面或块),所述部分由管理程序用于存储将由管理程序和/或其他实体使用的数据和信息。通常,管理程序存储器432可由管理程序和/或其他实体用于存储将由管理程序和/或其他实体使用的各种形式的数据和信息。例如,在一些实施方案中,管理程序存储器432包括数据和/或信息,诸如装置表、中断重映射表等。虽然管理程序存储器432被描述为“管理程序”存储器,但在一些实施方案中,管理程序存储器432可由系统中的各种其他实体访问—并且仅包括存储通过管理程序初始化、维护和/或访问的数据和/或信息的存储器区域或位置。在一些实施方案中,被显示和描述为管理程序存储器432的事物的至少一些仅仅是存储在系统存储器中并且可由管理程序和/或其他实体自由读取和可能地自由写入的数据和/或信息。
在一些实施方案中,通信路径耦接在电子装置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(例如,IOMMU 424)执行用于将源自IOMMU的中断用信号传达给访客操作系统的操作。用信号传达给访客操作系统的中断是“源自IOMMU的”,因为中断是由IOMMU生成的。例如,IOMMU可生成中断,以便向访客操作系统通知在IOMMU中遇到、执行或发生的事件,诸如故障或错误、访客操作系统日志或缓冲区写入等。又如,IOMMU可生成中断,以便向访客操作系统通知由IO装置发起的操作和/或在处理由IO装置发起的操作时发生的错误或故障。通常,在所描述实施方案中,IOMMU可使用所描述机构(即,虚拟APIC后备页面等)将任何类型的中断用信号传达给访客操作系统。换句话说,“源自IOMMU的”中断可以是或包括可从IOMMU传达给访客操作系统的任何中断。
由IOMMU访问的存储器部分
在一些实施方案中,IOMMU访问存储器(例如,存储器404)的不同部分中的数据和信息以便执行本文描述的操作和其他操作。在这些实施方案中的一些中,存储器部分包括IOMMU后备存储区(例如,IOMMU后备存储区426)、访客存储器(例如,访客存储器428)和/或管理程序存储器。图5呈现示出根据一些实施方案的由IOMMU访问的存储器部分的框图。虽然图5作为示例呈现,但在一些实施方案中,存储器和/或存储器的不同部分存储不同类型和/或布置的信息。通常,存储器包括足够的信息来实现本文描述的操作。
如在图5中可见,IOMMU后备存储区500包括ID转译表502。通常,ID转译表502包括由IOMMU用于将从访客操作系统到IOMMU的通信中的访客域ID和/或装置ID转译或转换为主机域ID和/或装置ID(或对于从IOMMU到访客操作系统的通信,则反过来)的信息。域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,所述命令尾指针600是指示存储器404的对应访客部分中的访客命令缓冲区的结束、尾部或最近写入条目的指针或其他引用。换句话说,命令尾指针600保存指示命令缓冲区的尾部或最近写入条目的位置的指针或引用,诸如存储器地址,例如,存储器404的访客部分中的物理地址的一些或所有位。访客命令缓冲区的值还包括命令头指针602,所述命令头指针602是指示命令缓冲区的头或基(即在存储器404的对应访客部分中命令缓冲区开始和/或缓冲的命令开始的位置)的指针或其他引用。访客命令缓冲区的值还包括命令长度604,所述命令长度604是指示命令缓冲区的当前大小或最大大小的值,诸如条目数或字节数。访客命令缓冲区的值还包括命令控制606,所述命令控制606是位集或序列,其包括指示访客操作系统的配置和/或存储器404的对应访客部分中的命令缓冲区的多个位(或其组合)。例如,在一些实施方案中,命令控制606包括指示以下项的位:是否启用某些命令缓冲区相关的中断、是否启用(或禁用/暂停)命令缓冲或处理、命令缓冲区中存在或允许存在什么类型的命令等。例如,在一些实施方案中,命令控制606包括与AMD I/O虚拟化技术(IOMMU)规范,修订版3.00(所述规范如上所述以引用方式并入本文)中描述的那些类似的用于命令缓冲区的控制值,诸如CmdWaitInt、CmdBufRun、CmdWaitInteEn、CmdBufEn和/或其他值。
对于事件日志,访客MMIO 510中的值(即,事件尾指针608、事件头指针610、事件长度612和事件控制614)在功能上类似于以上针对命令缓冲区所述的那些值,虽然这些值用于访问存储器404的对应访客部分中的事件日志。对于PPR日志也是如此,因为访客MMIO510中的值(即,PPR尾指针616、PPR头指针618、PPR长度620和PPR控制622)在功能上类似于以上针对命令缓冲区所述的那些值,虽然这些值用于访问存储器404的对应访客部分中的PPR日志。
在一些实施方案中,在任何给定时间在电子装置400中可正在执行少于所支持数量的访客操作系统(并且可能少得多)。在这些实施方案中的一些中,IOMMU后备存储区500动态地调整为包括足够的空间来存储访客MMIO 510等。换句话说,在访客操作系统初始化/活动时,管理程序和/或另一实体可再IOMMU后备存储区500中(即,访客MMIO 510中)分配、附加或激活空间,以用于存储访客操作系统的IOMMU MMIO寄存器值。在这些实施方案中的一些中,IOMMU后备存储区500不具有为电子装置400中尚不存在(即,尚未初始化)的虚拟机分配的另外的空/未使用空间。
在一些实施方案中,管理程序针对IOMMU后备存储区500执行至少一些初始化操作。例如,在一些实施方案中,管理程序在存储器404中分配存储器(例如,连续或分散的存储器页面)以用于存储IOMMU后备存储区。如上所述,存储器404是电子装置400中由各种功能块(例如,核418-420等)用于存储数据和信息的通用存储器—并且不仅仅是IOMMU中的本地存储器。因此,此操作涉及管理程序在电子装置400的“主”存储器中分配空间以用于存储IOMMU后备存储区。又如,在一些实施方案中,针对每个活动访客操作系统,管理程序通过IOMMU将初始值写入后备存储区中的IOMMU MMIO寄存器的副本中。因此,管理程序将用于每个活动访客操作系统的指针的初始值和控制值写入IOMMU后备存储区中的IOMMU MMIO寄存器的相应副本中,诸如当访客操作系统启动时。
在一些实施方案中,IOMMU后备存储区中的IOMMU MMIO寄存器的副本中仅包括可用IOMMU MMIO寄存器的子集。在这些实施方案中,其他寄存器可由IOMMU自身提供。例如,在一些实施方案中,IOMMU中存储IOMMU控制值(例如,IOMMU启用/禁用等)、页表基地址等的寄存器由IOMMU提供。通常,不用于访问用于访客操作系统的存储器部分中的缓冲区和日志的IOMMU MMIO寄存器不作为副本呈现,而是由IOMMU提供每个寄存器的单个副本。在这些实施方案中的一些中,管理程序为访客操作系统仿真这些IOMMU寄存器,但对于IOMMU中的寄存器,访问由IOMMU接收并在IOMMU中处置。
参考图5,访客存储器512包括用于访客操作系统的访客事件日志514、访客外围页面请求(PPR)日志516、访客命令缓冲区518和虚拟APIC后备页面520。通常,访客事件日志514、访客PPR日志516、访客命令缓冲区518和虚拟APIC后备页面520是存储器中用于存储对应的事件、PPR请求、命令以及关于中断和/或用于处理或处置中断的信息以供IOMMU和/或访客操作系统访问的结构(例如,列表、表格、缓冲区等)。例如,访客事件日志514可以是包括多个条目(例如,24个、50个等)的表或环形缓冲区,每个条目用于保存表示将由对应访客操作系统处理的在IOMMU中发生的特定事件的信息(例如,位模式)。又如,虚拟APIC后备页面可以是存储器中的表或列表,其包括APIC虚拟化副本中寄存器或存储器位置的值以及由IOMMU针对源自IOMMU的中断提供的值。在操作中,IOMMU通过访客存储器512中的访客事件日志514和访客PPR日志516中的对应日志来向访客操作系统传达事件和PPR。此外,访客操作系统通过访客存储器512中的访客命令缓冲区518中的对应命令缓冲区向IOMMU传达命令。IOMMU和/或其他实体还通过虚拟APIC后备页面520将关于中断的信息传达给访客操作系统。
如在图5中可见,虚拟APIC后备页面520包括虚拟APIC值522,所述虚拟APIC值522包括用于仿真对应访客操作系统的虚拟化APIC的值,诸如中断命令寄存器(ICR)、中断请求寄存器(IRR)、服务中寄存器(ISR)、中断结束(EOI)等的值。这些值和与之相关联的功能在本领域中是已知的,并且在例如2018年9月的AMD64架构程序员手册第2卷:系统编程,修订版3.30中有所描述,所述手册如上所述以引用方式并入本文。
虚拟APIC后备页面520还包括IOMMU值524,所述IOMMU值524是由IOMMU用于将关于源自IOMMU的中断的信息传达给对应访客操作系统的值—并且不存在于现有电子装置中。在一些实施方案中,IOMMU值524包括用于将关于每种所允许类型的源自IOMMU的中断的信息传达给对应访客操作系统的单独值。因此,在这些实施方案中,如果存在N种类型的源自IOMMU的中断,则IOMMU值524中将存在N个值。在一些实施方案中,IOMMU值524包括用于将关于所有类型的源自IOMMU的中断的信息传达给对应访客操作系统的单个值。通常,IOMMU值524中的信息足以向对应访客操作系统传达相应源自IOMMU的中断的类型、参数和/或其他特性。例如,在一些实施方案中,每个源自IOMMU的中断可由多位值表征或表示,所述多位值包括一个或多个中断标识符、一个或多个源/目的地标识符、一个或多个控制值、一个或多个目标值、和/或其他值。
虽然在虚拟APIC后备页面520中示出某些值,但在一些实施方案中,虚拟APIC后备页面520包括不同的值和/或不同排列的值。虚拟APIC后备页面520通常包括足够的值来执行本文描述的操作。
在一些实施方案中,电子装置400中的每个活动访客操作系统与存储器的对应单独访客部分(即,存储器404中的多个页面)相关联,所述对应单独访客部分包括由所述访客操作系统使用并且可由IOMMU访问的访客事件日志、外围页面请求日志、访客命令缓冲区和虚拟APIC后备页面。这在图5中示出为位于访客存储器512后面的另外的访客存储器526-528。
管理程序存储器530包括装置表532、中断重映射表534和访客中断日志536。通常,装置表532是其中存储电子装置中的、与电子装置相关联和/或耦接到电子装置的装置(其可以是实际/物理装置或虚拟装置)的装置相关信息的表。装置表532包括一组条目,每个条目可用于存储关于对应装置的信息,诸如指向页表和中断重映射表的指针、控制和配置值、容量指示符、模式指示符、域ID、安全信息和设置等。此外,在所描述实施方案中(并且与在现有装置表中不同),装置表532中的每个条目包括装置ID和与装置通信、对其负责或以其他方式与之相关联的访客操作系统的访客标识符。在操作中,除了使用装置表来确定关于装置的信息之外,IOMMU还使用装置ID和/或访客标识符来将访客装置ID转译或转换为主机装置ID。IOMMU还使用与IOMMU相关联的装置表条目中的中断重映射表根指针来确定存储器中存储中断重映射表534的位置(例如,地址和/或偏移)。
中断重映射表534是与IOMMU相关联的表,所述表包括多个条目,所述多个条目用于将标识符(例如,地址、指针、偏移和/或其他引用)存储到存储器中将针对电子装置400中的各种实体写入关于中断的信息的位置。例如,在一些实施方案中,中断重映射表534包括存储器的相应访客部分中用于访客操作系统的虚拟APIC后备页面中将针对一种或多种类型的源自IOMMU的中断写入中断信息的位置的标识符。当将中断用信号传达给给定访客操作系统时,IOMMU在中断重映射表中执行查找,以确定存储器的对应访客部分中的虚拟APIC后备页面中要写入关于中断的信息的位置。
访客中断日志536是由IOMMU(和可能的其他实体)用于存储关于去往访客操作系统的中断的信息的表、缓冲区和/或其他结构。当去往给定访客操作系统的源自IOMMU的中断无法使用如本文所述的虚拟APIC后备页面直接传达给给定访客操作系统时,IOMMU将关于中断的信息写入访客中断日志536并向管理程序用信号传达:中断正在等待给定访客操作系统处理。然后,管理程序从访客中断日志536获取关于中断的信息并且与给定访客操作系统交互以使得给定访客操作系统能够处理中断。
在一些实施方案中,访客操作系统被配置或设计来支持通过如本文所述的对应虚拟APIC后备页面从IOMMU接收源自IOMMU的中断。例如,访客操作系统可包括用于从IOMMU接收源自IOMMU的中断的程序代码、例程、方法和/或其他机制(而其他访客操作系统可不包括)。又如,访客操作系统可包括将访客操作系统配置来从(或不从)IOMMU接收源自IOMMU的中断的一个或多个软件开关或控制值。在这些实施方案中,每个访客操作系统与指示访客操作系统是否可通过对应虚拟APIC后备页面从IOMMU接收中断的一个或多个配置指示符(例如,位、字节等)相关联。再如,电子装置、管理程序和/或电子装置中的另一实体可禁止关于中断的信息从IOMMU到一个或多个(并且可能地所有)访客操作系统的直接传达。当IOMMU出于这些原因中的一个或多个而无法通过对应虚拟APIC后备页面向访客操作系统发送源自IOMMU的中断时,IOMMU使用如上所述的访客中断日志536将中断传达给给定访客操作系统系统。
在一些实施方案中,IOMMU后备存储区500、访客存储器512和管理程序存储器530和/或它们的部分中的一些或全部不是连续的,而是存储在存储器的不同区域或位置中。例如,访客事件日志514的基地址(并且因此访客事件日志本身)可在存储器中远离访客PPR日志516处。因此,访客事件日志514可能不如图5所示地紧邻访客PPR日志516。
在一些实施方案中,IOMMU包括私有地址映射,所述私有地址映射包括指向要由IOMMU访问的存储器中的各种数据和信息在存储器中的位置的指针、引用和/或其他指示。例如,在一些实施方案中,IOMMU私有地址映射包括指向用于访客操作系统的IOMMU MMIO寄存器的单独副本和/或IOMMU后备存储区500中的IOMMU MMIO寄存器的副本集的起始点/基地址的指针或引用。在这些实施方案中,在访问存储器中的数据和信息之前,IOMMU针对数据和信息的位置在私有地址映射中执行查找。
在一些实施方案中,IOMMU后备存储区500和/或其部分(控制位等)由电子装置400中的其他实体通过IOMMU(例如,通过向IOMMU发送请求)访问或者不可由其他实体访问。例如,IOMMU后备存储区500中的至少一些数据和信息可由其他实体通过对对应IOMMU MMIO寄存器的写入和读取来访问。
IOMMU和访客操作系统通信
在所描述实施方案中,IOMMU(例如,IOMMU 424)处置IOMMU(或由此服务的IO装置)与访客操作系统之间的通信。图7呈现示出根据一些实施方案的由IOMMU 702处置的访客操作系统700与IOMMU 702之间的通信的框图。虽然在图7中以特定布置示出多个元件,但其他实施方案使用不同数量或布置的元件。通常,在所描述实施方案中,IOMMU 702包括或访问足够的元件以实现本文描述的操作。在图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和虚拟APIC后备页面520彼此通信。此外,访客操作系统700和IOMMU 702使用访客控制508和访客MMIO 510来规定如何执行通信。例如,在一些实施方案中,IOMMU 702使用访客MMIO 510中的指针来确定用于访客操作系统700的访客事件日志514、访客命令缓冲区518和访客PPR日志516在存储器中的位置。IOMMU还使用中断重映射表(例如,中断重映射表534)来确定存储器中的虚拟APIC后备页面520中关于源自IOMMU的中断的信息要写入其中的位置。管理程序704并不介入并且不以其他方式参与用于完成这些通信的一些或所有操作。例如,管理程序704不执行诸如转译这些通信的域ID和装置ID、访问访客MMIO 510中的指针、将指定源自IOMMU的中断传达给访客操作系统、和/或访问存储器的访客部分中的缓冲区和日志的操作。相反,IOMMU 702执行这些操作。由于IOMMU 702转译域ID和装置ID、访问访客缓冲区和日志、将指定源自IOMMU的中断传达给访客操作系统等,因此所描述实施方案避免使用管理程序704来处理访客操作系统700与IOMMU 702之间的通信的至少一部分,这可意味着通信更快地完成,导致处理器402和存储器404上的负载更少等。
在操作中,使用命令作为示例,访客操作系统700将invalidate_IOMMU_pages命令写入访客命令缓冲区518。命令在由IOMMU 702处理时致使IOMMU 702使IOMMU转译高速缓存中如由命令中的域ID指定的一系列条目无效。换句话说,访客操作系统在存储器的对应访客部分中执行存储器写入以将访客命令缓冲区518中的下一打开/可用条目更新为包括invalidate_IOMMU_pages命令的信息(即,代表命令的位)。然后,访客操作系统700向IOMMU发送写入命令以更新(例如,推进等)对应IOMMU MMIO寄存器中的命令缓冲区尾指针(例如,命令尾指针600)以指示:访客操作系统700已将命令写入命令缓冲区。IOMMU 702检测访客操作系统700对命令缓冲区尾指针的写入,例如通过监听到对应访客命令缓冲区中的地址的写入、检测缓冲区尾指针的值的变化、接收来自访客操作系统700的写入命令等。在检测到命令缓冲区尾指针的写入时,IOMMU 702使用命令缓冲区尾指针的值来从存储器的访客部分中的命令缓冲区检索命令,并且准备所述命令以用于处理(例如,替换与命令中的访客域ID相关联的主机域ID等)。然后,IOMMU 702处理命令,从而致使IOMMU 702使IOMMU 702的转译高速缓存中由主机域ID指示的一系列条目无效。IOMMU 702针对IOMMU 702到访客PPR日志516和访客事件日志514的写入执行至少一些类似操作,虽然相反,因为IOMMU 702通常写入这些日志并且访客操作系统700读取日志。
在操作中,IOMMU 702遇到或经历导致将由访客操作系统700处理或处置的源自IOMMU的中断的条件。然后,IOMMU 702在中断重映射表中执行查找以确定虚拟APIC后备页面520中要写入关于中断的信息的位置。接下来,IOMMU 702将关于中断的信息写入虚拟APIC后备页面520中的所述位置并将中断的指示传达给访客操作系统700。然后,访客操作系统700从虚拟APIC后备页面520中的所述位置获取关于中断的信息并且使用关于中断的信息来处理或处置中断。
在一些实施方案中,当访客操作系统700不能直接(即,通过如本文所述的虚拟APIC后备页面520)从IOMMU 702接收关于中断的信息时,IOMMU 702使用访客中断日志536通过管理程序704将关于中断的信息传达给访客操作系统系统700。例如,访客操作系统700可能无法通过虚拟APIC后备页面520从IOMMU 702接收中断,或者可能出于安全原因等被配置来不从IOMMU 702接收中断。在一些实施方案中,IOMMU 702优先使用虚拟APIC后备页面520将关于中断的信息直接传达给访客操作系统700,并且仅使用访客中断日志536/管理程序704作为辅助/回退选项。
虽然管理程序704不参与访客操作系统700与IOMMU 702之间的通信的某些部分(例如,访客域ID到主机域ID的转译),但管理程序704和访客操作系统700和/或IOMMU 702可单独地交换与访客操作系统700与IOMMU 702之间的通信相关联的通信,或者管理程序704可以其他方式参与确保由访客操作系统700和/或IOMMU 702正确地处置通信。如上所述,管理程序704还可初始化或更新IOMMU后备存储区、中断重映射表等。
用于将中断从IOMMU用信号传达给访客操作系统的过程
在所描述实施方案中,IOMMU(例如,IOMMU 702)执行用于将中断用信号传达给访客操作系统(例如,访客操作系统700)的操作。例如,在一些实施方案中,IOMMU向访客操作系统用信号通知源自IOMMU的中断(诸如在IOMMU中或基于来自IO装置的中断生成的中断)。IOMMU将中断“直接”用信号传达给访客操作系统,因为IOMMU本身使用典型存储器访问操作将关于中断的信息写入每个访客操作系统的存储器部分中的虚拟APIC后备页面中的指定位置—而无需管理程序参与或处理存储器访问操作。然后,IOMMU将中断的指示传达给访客操作系统,以便致使访客操作系统处理或处置中断。图8呈现示出根据一些实施方案的在其间IOMMU将中断用信号传达给访客操作系统的过程的流程图。注意,图8所示的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同次序执行的操作和/或由不同的实体或功能块执行的操作。
图8中的操作在IOMMU生成关于中断的信息时开始(步骤800)。对于这个操作,IOMMU通过检测IOMMU中的指定事件、错误等并创建对应信息来在内部生成关于中断的信息,或者通过从IO装置(或其他实体)接收中断、事件、错误等的指示并创建关于中断的对应信息来生成关于中断的信息。例如,IOMMU本身可将数据写入与访客操作系统相关联的缓冲区或日志,然后生成关于中断的信息,所述信息将传达给访客操作系统以通知访客操作系统:缓冲区或日志中的数据有待进行处理或处置。
由IOMMU生成的关于中断的信息的具体格式取决于中断本身的格式、访客操作系统的配置等。例如,在一些实施方案中,关于中断的信息包括指定信息和/或根据信息信号中断(MSI)标准或协议进行格式化。通常,信息包括至少中断的标识或表示,并且可包括中断、IOMMU、IO装置、导致中断的事件或错误等的其他特性和/或特征。
然后,IOMMU从中断重映射表中与访客操作系统相关联的条目获取存储器的访客部分中用于访客操作系统的虚拟APIC后备页面中的位置(步骤802)。应记得,虚拟APIC后备页面是存储器用于存储关于将由访客操作系统处理的中断的信息以及用于以其他方式虚拟化/仿真电子装置400中的APIC的部分。虚拟APIC后备页面包括用于存储关于源自IOMMU的中断的信息以供访客操作系统处理或处置的一个或多个位置(例如,条目、部分等)。对于步骤802中的操作,在一些实施方案中,IOMMU使用在初始化时(例如,通过系统硬件、操作系统等)分配给访客操作系统的访客操作系统标识符(ID)(诸如系统装置标识符)来在中断重映射表中执行查找。图9呈现示出根据一些实施方案的中断重映射表中的查找的框图。虽然图9中示出中断重映射表和操作的特定布置,但在一些实施方案中,使用重新映射表和/或操作的其他布置。通常,在所描述实施方案中,IOMMU使用中断重映射表来确定用于访客操作系统的虚拟APIC后备页面中要写入关于中断的信息的位置。
对于图9所示的实施方案,中断重映射表被划分为包括一级(LEVEL-1)中断重映射表906和中断重映射表908的子表的分级结构。将中断重映射表划分为子表的分级结构可使得能够更有效地搜索中断重映射表、将其存储在存储器中、对其进行操作等。虽然中断重映射表的这种布置作为示例呈现,但在一些实施方案中,中断重映射表包括更多子表或者被实现为单个表。通常,中断重映射表包括足够的信息来实现本文描述的操作。
对于中断重映射表中的查找,IOMMU使用访客操作系统标识符900的第一部分(例如,M位访客操作系统标识符900的前N位,其中N<M)以及从用于IOMMU的装置表条目902获取的中断表根指针904来确定一级中断表906中的特定条目。一级中断表906中的条目存储用于中断重映射表908的根/基指针。IOMMU使用根/基指针和访客操作系统标识符900的第二部分(例如,作为偏移或引用)来确定中断重映射表908中的条目。从中断重映射表908中的条目,IOMMU检索虚拟APIC后备页面910中关于中断的信息将被存储到其中的位置的标识符(例如,地址、偏移等)。
在一些实施方案中,IOMMU能够将关于两种或更多种不同类型的中断的信息传达给访客操作系统。例如,在一些实施方案中,中断类型包括事件通知中断、外围页面请求中断、故障或错误中断等。在这些实施方案中,用于每个访客操作系统的虚拟APIC后备页面包括用于源自IOMMU的中断的两个或多个位置,每个位置用于存储关于一种或多种不同类型的中断的信息。对于上述中断重映射表中的查找,除了访客操作系统标识符之外,IOMMU还可使用类型指示符(例如,一位或多位等)以便针对给定中断类型访问重映射表中的对应条目。
回到图8,在获取虚拟APIC后备页面中的所述位置(步骤802)之后,IOMMU将关于中断的信息写入虚拟APIC后备页面中的所述位置(步骤804)。对于此操作,IOMMU将至少中断的标识符写入虚拟APIC后备页面中的所述位置,并且可写入关于中断、IOMMU和/或IO装置等的一个或多个特性或特征的另外的信息。例如,在一些实施方案中,虚拟APIC后备页面中的所述位置仅包括单个位,所述位被设置来指示已经发生中断,并且因此访客操作系统应例如通过执行指定中断处置程序代码、执行一个或多个操作等来处理或处置中断。又如,在一些实施方案中,虚拟APIC后备页面中的所述位置包括多个位或字节,这些位或字节可用于存储标识中断的信息以及关于中断的特性或特征的其他信息。在这些实施方案中,访客操作系统将从虚拟APIC后备页面检索关于中断的信息并且使用关于中断的信息来处理或处置中断。
接下来,IOMMU将中断的指示传达给访客操作系统(步骤806)。对于此操作,IOMMU通知访客操作系统:中断正在等待处理或处置,即关于中断的信息存在于用于访客操作系统的虚拟APIC后备页面中的所述位置中。例如,在一些实施方案中,当访客操作系统是“活动的”时,即当访客操作系统的程序代码当前正由电子装置中的处理器核(例如,核418)执行(并且访客操作系统系统未暂停或以其他方式未在被执行以有利于其他程序代码)时,传达中断包括从IOMMU向正在执行的处理器核发送对应信号。例如,发送信号可包括以下中的一者或多者:写入共享邮箱存储器位置、在指定信号线上断言信号、在通信总线上向处理器核发送数据包等。又如,在一些实施方案中,当访客操作系统是“非活动的”时,即当访客操作系统的程序代码当前未被处理器核执行时(并且访客操作系统暂停或以其他方式未在被执行以支持其他程序代码)时,传达中断包括将条目添加到访客虚拟APIC日志,所述日志是将由访客操作系统处理或处置的待决中断的记录。然后,IOMMU通过共享邮箱存储器位置向处理器发送将条目添加到访客虚拟APIC日志、在指定信号线上断言信号等的指示。然后,管理程序触发访客操作系统来在重新激活访客操作系统时处理或处置来自虚拟APIC后备页面的中断—并且可专门地重新激活访客操作系统以处理或处置中断。
然后,访客操作系统从虚拟APIC后备页面中的所述位置获取关于中断的信息(步骤808)并且使用关于中断的信息来处理或处置中断(步骤810)。对于此操作,访客操作系统通过一次或多次存储器读取从虚拟APIC后备页面中的所述位置检索信息。然后,访客操作系统通过以下方式来处理或处置中断:执行中断处置程序代码、执行对应操作、终止一个或多个操作、通知正在执行访客操作系统的处理器核中断的发生、将中断的发生用信号传达给管理程序或操作系统等。
未从IOMMU直接传达给访客操作系统的中断
如上所述,IOMMU使用用于访客操作系统的虚拟APIC后备页面来将源自IOMMU的中断直接用信号传达给访客操作系统(即,无需管理程序协助写入虚拟APIC后备页面等)。然而,在一些情况下,不允许将源自IOMMU的中断从IOMMU直接传达给访客操作系统。例如,出于安全原因、效率等,访客操作系统可(例如,使用软件开关、配置值等)被配置来不从IOMMU直接接受源自IOMMU的中断。在此类情况下,IOMMU使用不同的机制来将源自IOMMU的中断用信号传达给访客操作系统。例如,在一些实施方案中,当IOMMU无法将源自IOMMU的中断直接传达给访客操作系统时,IOMMU使用中间中断传达机制来通过中间实体将源自IOMMU的中断间接地用信号传达给访客操作系统。
在一些实施方案中,IOMMU用于将中断用信号传达给访客操作系统的中间实体是或包括访客中断日志。访客中断日志是其中存储有关中断的信息以供访客操作系统在管理程序(和/或其他实体)协助下进行最终处理的表、缓冲区等。在操作期间,在确定给定访客操作系统无法从IOMMU直接接受源自IOMMU的中断之后,IOMMU将关于中断的信息写入用于给定访客操作系统的访客中断日志中。然后,IOMMU向管理程序用信号传达:信息已写入访客中断日志和/或管理程序检测到对访客中断日志的写入,这致使管理程序将中断转发或以其他方式传达给访客操作系统(例如,通过将中断写入用于访客操作系统的虚拟APIC后备页面)。然后,给定访客操作系统处理中断。
在一些实施方案中,电子装置(例如,电子装置400和/或其某一部分)使用存储在非暂时性计算机可读存储介质上的代码和/或数据来执行本文所描述操作中的一些或全部。更具体地,当执行所描述操作时,电子装置从计算机可读存储介质读取代码和/或数据并且执行代码和/或使用数据。计算机可读存储介质可以是存储代码和/或数据以供电子装置使用的任何装置、介质或其组合。例如,计算机可读存储介质可包括但不限于易失性和/或非易失性存储器,包括闪存存储器、随机存取存储器(例如,eDRAM、RAM、SRAM、DRAM、DDR4、SDRAM等)、只读存储器(ROM)和/或磁性或光学存储介质(例如,磁盘驱动器、磁带、CD、DVD等)。
在一些实施方案中,一个或多个硬件模块执行本文描述的操作。例如,硬件模块可包括但不限于一个或多个处理器/核/中央处理单元(CPU)、专用集成电路(ASIC)芯片、神经网络处理器或加速器、现场可编程门阵列(FPGA)、计算单元、嵌入式处理器、图形处理器(GPU)/图形核、管线、加速处理单元(APU)、高速缓存/高速缓存控制器、存储器/存储器控制器、功能块、和/或其他可编程逻辑装置。当此类硬件模块被激活时,硬件模块执行操作中的一些或全部。在一些实施方案中,硬件模块包括一个或多个通用电路,所述一个或多个通用电路通过执行指令(程序代码、固件等)以执行操作来配置。
在一些实施方案中,表示本文描述的结构和机构(例如,电子装置400、IOMMU 424和/或其某一部分)中的一些或全部的数据结构存储在非暂时性计算机可读存储介质上,所述数据结构包括可由电子装置读取并且直接地或间接地用于制造包括所述结构和机构的硬件的数据库或其他数据结构。例如,数据结构可以是采用高级设计语言(HDL)(例如Verilog或VHDL)对硬件功能性的行为级描述或寄存器传输级(RTL)描述。所述描述可由综合工具读取,所述综合工具可综合所述描述以产生网表,所述网表包括来自综合库的门/电路元件的列表,所述列表表示包括上述结构和机构的硬件的功能性。然后,可放置并且路由网表以产生描述要应用于掩模的几何形状的数据集。然后,可在各种半导体制造步骤中使用掩模以产生与上述结构和机构对应的一个或多个半导体电路(例如,集成电路)。替代地,计算机可存取存储介质上的数据库可以是网表(具有或没有综合库)或数据集(根据需要),或图形数据系统(GDS)II数据。
在本说明书中,变量或未指定值(即,在没有值的特定实例的情况下对值的一般描述)由诸如N的字母表示。如本文所使用,虽然在本说明书中的不同位置可能使用相似的字母,但是在每种情况下变量和未指定值不一定相同,可能有不同的变量的量和值旨在用于一般变量和未指定值中的一些或全部。换句话说,在本说明书中,N和用于表示变量和未指定值的任何其他字母不一定彼此相关。
如本文所使用的表达“等(etcetera)”或“等(etc.)”意图呈现一者和/或情况,即,列表中的与等相关联的元素中的“至少一者”的等效物。例如,在语句“电子装置执行第一操作、第二操作等”中,电子装置执行第一操作、第二操作和其他操作中的至少一个。此外,与等相关联的列表中的元素仅仅是示例集中的示例—并且示例中的至少一些可能不会出现在一些实施方案中。
仅出于说明和描述的目的给出实施方案的先前描述。所述先前描述不意图是详尽的或将实施方案限于所公开的形式。因此,许多修改和变化对本领域的从业人员来说将是显而易见的。另外,以上公开内容不意图限制实施方案。实施方案的范围由所附权利要求限定。

Claims (24)

1.一种电子装置,其包括:
处理器,所述处理器执行访客操作系统;
存储器,所述存储器具有访客部分,所述访客部分保留用于存储将由所述访客操作系统访问的数据和信息;以及
输入-输出存储器管理单元(IOMMU),所述IOMMU被配置来:
通过以下方式将中断用信号传达给所述访客操作系统:
从中断重映射表中与所述访客操作系统相关联的条目获取所述存储器的所述访客部分中用于所述访客操作系统的虚拟高级可编程中断控制器(APIC)后备页面中的位置;
将关于所述中断的信息写入所述虚拟APIC后备页面中的所述位置;以及
将所述中断的指示传达给所述访客操作系统。
2.如权利要求1所述的电子装置,其中,当从所述中断重映射表中的所述条目获取所述虚拟APIC后备页面中的所述位置时,所述IOMMU被配置来:
从与所述IOMMU相关联的装置表条目获取所述中断重映射表的基地址;
使用所述基地址和访客操作系统标识符(ID)来确定所述中断重映射表中的所述条目;并且
从所述中断重映射表中的所述条目检索所述虚拟APIC后备页面中的所述位置的地址。
3.如权利要求2所述的电子装置,其中:
所述存储器的所述访客部分中的所述虚拟APIC后备页面包括多个位置,所述多个位置之中的每个位置与不同类型的中断相关联,并且所述中断重映射表包括用于存储所述多个位置中的每个位置的指示符的单独条目;并且
当从所述中断重映射表条目获取所述虚拟APIC后备页面中的所述位置时,所述IOMMU被配置来:
连同所述基地址和所述访客操作系统ID使用所述中断的类型来确定所述中断重映射表中的所述条目。
4.如权利要求2所述的电子装置,其中:
所述中断重映射表包括至少两个子表的分级结构,所述子表的分级结构中除了最终子表之外的每个子表包括所述分级结构中下一子表的标识符,并且所述最终子表包括所述虚拟APIC后备页面中的所述位置的所述地址;并且
当使用所述基地址和访客操作系统ID来确定所述中断重映射表中的所述条目时,所述IOMMU被配置来使用所述基地址和/或所述访客操作系统ID的对应部分来遍历所述子表的分级结构直到所述最终子表。
5.如权利要求1所述的电子装置,其中所述IOMMU进一步被配置来:
确定是否允许将所述中断从所述IOMMU直接传达给所述访客操作系统;并且
当允许直接传达所述中断时,将所述中断用信号传达给所述访客操作系统;并且
当不允许直接传达所述中断时,使用一个或多个中间中断传达机构将所述中断间接地用信号传达给所述访客操作系统。
6.如权利要求5所述的电子装置,其中,当确定是否允许直接传达所述中断时,所述IOMMU被配置来:
检查与所述IOMMU相关联的装置表条目中的一个或多个设置以确定:
IOMMU中断传达是否被启用;和/或
所述访客操作系统是否被配置来从所述IOMMU接收中断。
7.如权利要求5所述的电子装置,其中所述一个或多个中间中断传达机构包括访客中断日志,并且所述IOMMU进一步被配置来:
将关于所述中断的信息存储在所述访客中断日志中;
其中由所述处理器执行的管理程序检测或被通知所述IOMMU将关于所述中断的所述信息存储在所述访客中断日志中,并且将所述中断指示给所述访客操作系统。
8.如权利要求1所述的电子装置,其中所述处理器执行管理程序,所述管理程序通过以下方式来初始化和维持所述中断重映射表:将所述存储器的相应访客部分中用于访客操作系统的虚拟APIC后备页面中的位置的标识符存储在所述中断重映射表中的对应条目中。
9.如权利要求1所述的电子装置,其中将所述中断的所述指示传达给所述访客操作系统包括:
当所述访客操作系统当前活动时:
将中断用信号传达给所述处理器。
10.如权利要求1所述的电子装置,其中将所述中断的所述指示传达给所述访客操作系统包括:
当所述访客操作系统当前不活动时:
将条目添加到访客虚拟APIC日志;以及
向所述处理器发送将所述条目添加到所述访客虚拟APIC日志的指示。
11.如权利要求1所述的电子装置,其中,基于代表所述访客操作系统接收所述中断的所述指示,所述处理器被配置来通过以下方式为所述访客操作系统处理所述中断:
从所述虚拟APIC后备页面中的所述位置获取关于所述中断的所述信息;以及
使用关于所述中断的所述信息来处理或处置所述中断。
12.如权利要求1所述的电子装置,其中所述中断是源自IOMMU的中断。
13.一种用于在电子装置中用信号传达中断的方法,所述电子装置包括:处理器,所述处理器执行访客操作系统;存储器,所述存储器具有访客部分,所述访客部分保留用于存储将由所述访客操作系统访问的数据和信息;以及输入-输出存储器管理单元(IOMMU),所述方法包括:
由所述IOMMU通过以下方式将中断用信号传达给所述访客操作系统:
由所述IOMMU从中断重映射表中与所述访客操作系统相关联的条目获取所述存储器的所述访客部分中用于所述访客操作系统的虚拟高级可编程中断控制器(APIC)后备页面中的位置;
由所述IOMMU将关于所述中断的信息写入所述虚拟APIC后备页面中的所述位置;以及
由所述IOMMU将所述中断的指示传达给所述访客操作系统。
14.如权利要求13所述的方法,其中从所述中断重映射表中的所述条目获取所述虚拟APIC后备页面中的所述位置包括:
由所述IOMMU从与所述IOMMU相关联的装置表条目获取所述中断重映射表的基地址;
由所述IOMMU使用所述基地址和访客操作系统标识符(ID)来确定所述中断重映射表中的所述条目;以及
由所述IOMMU从所述中断重映射表中的所述条目检索所述虚拟APIC后备页面中的所述位置的地址。
15.如权利要求14所述的方法,其中:
所述存储器的所述访客部分中的所述虚拟APIC后备页面包括多个位置,所述多个位置之中的每个位置与不同类型的中断相关联,并且所述中断重映射表包括用于存储所述多个位置中的每个位置的指示符的单独条目;并且
从所述中断重映射表条目获取所述虚拟APIC后备页面中的所述位置包括:
由所述IOMMU连同所述基地址和所述访客操作系统ID使用所述中断的类型来确定所述中断重映射表中的所述条目。
16.如权利要求14所述的方法,其中:
所述中断重映射表包括至少两个子表的分级结构,所述子表的分级结构中除了最终子表之外的每个子表包括所述分级结构中下一子表的标识符,并且所述最终子表包括所述虚拟APIC后备页面中的所述位置的所述地址;并且
使用所述基地址和访客操作系统ID来确定所述中断重映射表中的所述条目包括:
由所述IOMMU使用所述基地址和/或所述访客操作系统ID的对应部分来遍历所述子表的分级结构直到所述最终子表。
17.如权利要求13所述的方法,其还包括:
由所述IOMMU确定是否允许将所述中断从所述IOMMU直接传达给所述访客操作系统;以及
当允许直接传达所述中断时,由所述IOMMU将所述中断用信号传达给所述访客操作系统;并且
当不允许直接传达所述中断时,由所述IOMMU使用一个或多个中间中断传达机构将所述中断间接地用信号传达给所述访客操作系统。
18.如权利要求17所述的方法,其中确定是否允许直接传达所述中断包括:
由所述IOMMU检查与所述IOMMU相关联的装置表条目中的一个或多个设置以确定:
IOMMU中断传达是否被启用;和/或
所述访客操作系统是否被配置来从所述IOMMU接收中断。
19.如权利要求17所述的方法,其中所述一个或多个中间中断传达机构包括访客中断日志,并且所述方法还包括:
由所述IOMMU将关于所述中断的信息存储在所述访客中断日志中;
其中由所述处理器执行的管理程序检测或被通知所述IOMMU将关于所述中断的所述信息存储在所述访客中断日志中,并且将所述中断指示给所述访客操作系统。
20.如权利要求13所述的方法,其中所述处理器执行管理程序,并且所述方法还包括:
由所述管理程序通过以下方式来初始化和维持所述中断重映射表:将所述存储器的相应访客部分中用于访客操作系统的虚拟APIC后备页面中的位置的标识符存储在所述中断重映射表中的对应条目中。
21.如权利要求13所述的方法,其中将所述中断的所述指示传达给所述访客操作系统包括:
当所述访客操作系统当前活动时:
由所述IOMMU将中断用信号传达给所述处理器。
22.如权利要求13所述的方法,其中将所述中断的所述指示传达给所述访客操作系统包括:
当所述访客操作系统当前不活动时:
由所述IOMMU将条目添加到访客虚拟APIC日志;以及
由所述IOMMU向所述处理器发送将所述条目添加到所述访客虚拟APIC日志的指示。
23.如权利要求13所述的方法,其中,基于代表所述访客操作系统接收所述中断的所述指示,所述处理器被配置来通过以下方式为所述访客操作系统处理所述中断:
从所述虚拟APIC后备页面中的所述位置获取关于所述中断的所述信息;以及
使用关于所述中断的所述信息来处理或处置所述中断。
24.如权利要求13所述的方法,其中所述中断是源自IOMMU的中断。
CN202080054952.5A 2019-09-20 2020-09-20 将中断从输入-输出存储器管理单元提供到访客操作系统 Pending CN114207596A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/578,165 US11042495B2 (en) 2019-09-20 2019-09-20 Providing interrupts from an input-output memory management unit to guest operating systems
US16/578,165 2019-09-20
PCT/US2020/051706 WO2021055908A1 (en) 2019-09-20 2020-09-20 Providing interrupts from an input-output memory management unit to guest operating systems

Publications (1)

Publication Number Publication Date
CN114207596A true CN114207596A (zh) 2022-03-18

Family

ID=74880941

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080054952.5A Pending CN114207596A (zh) 2019-09-20 2020-09-20 将中断从输入-输出存储器管理单元提供到访客操作系统

Country Status (6)

Country Link
US (1) US11042495B2 (zh)
EP (1) EP4031965A4 (zh)
JP (1) JP2022548470A (zh)
KR (1) KR20220061983A (zh)
CN (1) CN114207596A (zh)
WO (1) WO2021055908A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11829791B2 (en) * 2019-12-06 2023-11-28 Microsoft Technology Licensing, Llc Providing device abstractions to applications inside a virtual machine
US20230134657A1 (en) * 2021-11-04 2023-05-04 Intel Corporation User-level interrupts in virtual machines

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1991808A (zh) * 2005-12-30 2007-07-04 英特尔公司 用于访客访问存储器映射的设备的方法和装置
US20080114916A1 (en) * 2006-11-13 2008-05-15 Hummel Mark D Filtering and Remapping Interrupts
US20110197003A1 (en) * 2010-02-05 2011-08-11 Serebrin Benjamin C Interrupt Virtualization
US20130145051A1 (en) * 2011-12-02 2013-06-06 Andrew Kegel Direct Device Assignment
CN104321749A (zh) * 2012-03-29 2015-01-28 英特尔公司 用于管理虚拟化环境中的中断的体系结构和方法
CN104685479A (zh) * 2012-08-29 2015-06-03 超威半导体公司 客户虚拟机内的虚拟输入/输出存储器管理单元

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4460195B2 (ja) * 2001-08-06 2010-05-12 株式会社日立製作所 パケット転送装置およびルーティング制御装置
US7613898B2 (en) * 2006-01-17 2009-11-03 Globalfoundries Inc. Virtualizing an IOMMU
US8234432B2 (en) * 2009-01-26 2012-07-31 Advanced Micro Devices, Inc. Memory structure to store interrupt state for inactive guests
US8774213B2 (en) * 2011-03-30 2014-07-08 Amazon Technologies, Inc. Frameworks and interfaces for offload device-based packet processing
US9910689B2 (en) * 2013-11-26 2018-03-06 Dynavisor, Inc. Dynamic single root I/O virtualization (SR-IOV) processes system calls request to devices attached to host
US9772868B2 (en) * 2014-09-16 2017-09-26 Industrial Technology Research Institute Method and system for handling interrupts in a virtualized environment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1991808A (zh) * 2005-12-30 2007-07-04 英特尔公司 用于访客访问存储器映射的设备的方法和装置
US20080114916A1 (en) * 2006-11-13 2008-05-15 Hummel Mark D Filtering and Remapping Interrupts
US20110197003A1 (en) * 2010-02-05 2011-08-11 Serebrin Benjamin C Interrupt Virtualization
US20130145051A1 (en) * 2011-12-02 2013-06-06 Andrew Kegel Direct Device Assignment
CN104321749A (zh) * 2012-03-29 2015-01-28 英特尔公司 用于管理虚拟化环境中的中断的体系结构和方法
CN104685479A (zh) * 2012-08-29 2015-06-03 超威半导体公司 客户虚拟机内的虚拟输入/输出存储器管理单元

Also Published As

Publication number Publication date
EP4031965A1 (en) 2022-07-27
JP2022548470A (ja) 2022-11-21
US11042495B2 (en) 2021-06-22
US20210089480A1 (en) 2021-03-25
KR20220061983A (ko) 2022-05-13
EP4031965A4 (en) 2023-09-27
WO2021055908A1 (en) 2021-03-25

Similar Documents

Publication Publication Date Title
US7613898B2 (en) Virtualizing an IOMMU
KR101179341B1 (ko) 메모리 액세스 데이터 구조에 기초하는 직접 캐시 액세스트랜잭션의 수행
CA2800623C (en) Controlling a rate at which adapter interruption requests are processed
US10713083B2 (en) Efficient virtual I/O address translation
CA2800632C (en) Enable/disable adapters of a computing environment
TW200413917A (en) Method and system of managing virtualized physical memory in a multi-processor system
CN114207596A (zh) 将中断从输入-输出存储器管理单元提供到访客操作系统
US20220269621A1 (en) Providing Copies of Input-Output Memory Management Unit Registers to Guest Operating Systems
CN114080587A (zh) 输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问
US11494211B2 (en) Domain identifier and device identifier translation by an input-output memory management unit
KR20180041037A (ko) 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
JP2024503259A (ja) 入出力デバイスによってアクセス可能なメモリのページの移行
US20220244981A1 (en) Non-interrupting portable page request interface
US9798479B2 (en) Relocatable and resizable tables in a computing device
TW201342061A (zh) 用於增加虛擬記憶體效能之電腦可讀儲存媒體、設備及電腦實施方法

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