专利名称:对虚拟化环境中的中断结束消息的懒惰处理的制作方法
对虚拟化环境中的中断结束消息的懒惰处理背景计算机行业正趋向于硬件层面的越来越多的虚拟化。在这些环境中,操作系统运 行在虚拟机监控程序或管理程序之上,访客操作系统与计算机硬件的交互由虚拟化层来仲 裁。这允许多个访客操作系统(0 在单个计算机上同时运行,使得有可能在同一物理机器 上运行多个工作负荷。每个工作负荷可以在一个不同的访客操作系统上执行,在访客操作 系统之间具有强有力的隔离。这对于信息技术(IT)部门或者需要运行多个工作负荷或多 个服务器应用的任何运算来说特别有利。允许多个访客操作系统在单个计算机上运行可以通过以安全但有效的方式向每 个访客操作系统分配硬件资源来实现。传统上,管理程序通过把硬件设备作为虚拟硬件设 备暴露给每个访客操作系统个来分配硬件资源。一些物理硬件设备是通过仲裁对物理硬件 设备的直接访问来虚拟化的。其他物理硬件设备通过拦截对底层设备的请求、并且经由相 关方式使用底层硬件设备来实现所请求的功能来虚拟化。仍然有其他物理硬件设备被完全 地仿真。根据实现虚拟硬件设备所需的干预和仿真量,在虚拟硬件设备上执行功能的增加 的成本会显著的变化。尽管仲裁对物理硬件设备的访问会将计算成本提高一个适当的百分 比,对物理硬件设备进行软件仿真将会非常昂贵。例如,当一访客操作系统访问一虚拟硬盘以读取数据块时,管理程序会拦截功能 调用。管理程序可以通过允许对硬盘的直接访问,或者通过从包含虚拟化硬盘的内容的文 件中读取数据块从而实现该功能。这两种程度的管理程序干预会适度地增加完成功能调用 所需的系统资源。另一方面,对诸如高级可编程中断控制器(APIC)这样的硬件设备进行虚 拟化会要求访问物理APIC所需的许多倍的系统资源。概述本发明描述了能够把来自访客操作系统的中断结束(EOI)消息懒惰地传送至管 理程序中执行的输入/输出高级可编程中断控制器(I/O APIC)虚拟化模块的技术。懒惰 传送EOI需要对存储器进行写操作以指示EOI出现,允许I/0APIC虚拟化模块稍后读取存 储器。一些实现采用了在管理程序和访客操作系统间共享的存储器页以便在运行访客操作 系统的虚拟化CPU上发生EOI时进行懒惰传送。一些实现还可以采用共享存储器页以便使 管理程序在可以懒惰传送EOI时传送至访客操作系统。一些实现使用在受启发的EOI处理 机上执行的受启发的访客操作系统,根据管理程序所给予的指示来处理EOI消息。因此,这 些技术使管理程序能处理许多EOI消息,而无须产生管理程序拦截和仿真访客操作系统所 产生的EOI消息的不必要代价。附图简述参考附图来描述具体实施方式
。在附图中,附图标记中最左边的数字标识该附图 标记首次出现的附图。在不同附图中使用相同的附图标记指示相似或相同的项。
图1描述了说明性的环境,其中可由管理程序所仿真的虚拟I/O APIC来懒惰地评 估虚拟CPU所生成的EOI。图2描述了用于接收中断请求并且把中断请求转发至CPU的说明性的虚拟I/OAPICo图3描述了用于确定何时产生拦截以处理Ε0Ι、以及何时懒惰地处理EOI的说明性 的过程。图4-5描述了用于在APIC处接收中断请求、把请求发送至CPU、从CPU接收与中断 相对应的Ε0Ι、以及处理EOI的说明性的过程。图6-8描述了用于确定管理程序何时能确定EOI必需立即被发送至I/0APIC虚拟 化模块的附加说明性过程。图9描述了说明性的边缘触发的和电平触发的中断。图10描述了用于确定EOI消息是否应被发送至虚拟应用程序编程接口(API)的 说明性的过程。详细描述概览本发明针对能够把来自访客操作系统的中断结束(EOI)消息懒惰地传送至输入/ 输出高级可编程中断控制器(I/O APIC)虚拟化模块的技术。这些技术使访客操作系统能 够准确地且更有效地处理中断请求,而无须不必要地使管理程序俘获和拦截EOI通信。这 些技术可以使用共享存储器页来便于管理程序和访客操作系统间的通信。通过使用共享存 储器页,管理程序能够在EOI必需被立即发送至管理程序时、或者在EOI可以被管理程序懒 惰地检取时传送至访客操作系统。并且,当管理程序指示EOI可以被懒惰地处理时,以及当 执行访客操作系统的虚拟化CPU发布一 EOI时,访客操作系统可以使用共享存储器来指示 已经出现了 Ε0Ι。管理程序可以在为其他原因执行时检验此指示,节省了俘获和拦截EOI的 立即传输的代价。题为“说明性虚拟化操作环境”的第一节阐述了可启用这些和其他动作的环境。 接着是“说明性的虚拟化I/O APIC环境和中断处理过程”一节,描述了可怎样处理虚拟I/ 0 APIC所接收到的中断。题为“中断的说明性处理”的第三节描述了在处理中断时虚拟I/ 0 APIC可采用的说明性步骤。题为“确定何时把EOI立即传送至管理程序”的第四节描述 了管理程序向访客操作系统指示EOI消息应当被立即发送至管理程序的条件。题为“图形 中断表示”的第五节描述了两种常见类型的中断。该简要介绍是为方便读者理解而提供的,且并不旨在限制权利要求以及以上各节 的范围。 说明性虚拟化操作环境以下讨论描述了说明性虚拟操作环境以帮助读者理解可采用各种技术的各方面 的某些方式。以下描述的环境仅构成一个示例且并非旨在将这些技术的应用限于任一个特 定操作环境。可使用其它环境而不背离所要求保护的主题的精神和范围。图1描述了包括用户104所操作的计算机设备102在内的一种这样的虚拟化环境 100。尽管描述为服务器计算机,计算设备102也可以是台式机、便携式计算机或者任何其 他的计算设备。在一种实现中,计算设备102可以在管理程序112(也称为虚拟机管理器) 上同时执行根操作系统106、访客操作系统108和访客操作系统110。这些操作系统可以是 Microsoft Windows 、Linux 、Sun Solaris 或其他任何操作系统中的任何版本。此外 或者可替代的,访客操作系统可以单独在计算设备102上执行。
在一种实现中,管理程序112在与计算设备102耦合的物理硬件设备上直接执 行,管理和分配这些物理硬件设备。此外或者可替代的,根操作系统106可以拥有与计算 设备102耦合的物理硬件设备。在一种实现中,计算设备102包括与物理存储器118耦合 的物理中央处理单元(CPU) 114。物理CPU 114可以包括物理本地高级可编程中断控制器 (APIC) 116,并且可以耦合至物理输入/输出高级可编程中断控制器(I/O APIC)122。硬件设备可以请求CPU 114中断其当前的执行以便为中断硬件设备提供服务。传 统上,有两种类型的中断电平触发的中断和边缘触发的中断。边缘触发的中断是所谓的 “激发和遗忘中断”,其中中断设备通过在其线路上断言正电压来把边缘触发的中断发送至 I/O APIC,然后立即去除线路上的断言。该电压变化产生了一个边缘,APIC将其解释为中 断。一旦发送了中断,从设备到APIC的线路就保持去除断言。电平触发的中断也通过在把 中断设备连接至APIC的线路上断言正电压来发起。不像边缘触发的中断,当发送电平触发 的中断时,中断设备并不去除线路上的断言,直到中断设备接收到始发自CPU的表示中断 已被处理的指示。这样,令CPU发送EOI的一个目的在于向中断设备发信号通知中断已完 成,因此断言设备可以去除其线路上的断言。电平触发的中断用在一些总线上,例如PCI总 线,使得在处理期间不会丢失中断。如果第一边缘与第二边缘重叠,则边缘触发的中断可能 丢失,在这种情况下,第二边缘不会被接收I/O APIC所见。物理I/O APIC 122可以从诸如硬盘驱动器IM或串行端口 124、1沈这样的硬件设 备接收中断信号。例如,硬盘驱动器1 可以使用中断来向物理CPU114指示异步DMA转移 已完成。在该情况下,硬盘驱动器124向物理I/O APIC122发送中断,以请求物理CPU 114 执行与硬盘驱动器1 相关联的中断请求处理机。物理I/O APIC 122然后可以中断物理 CPU 114,使物理CPU 114保存当前的执行上下文,并且开始执行与硬盘驱动器1 相关联 的中断请求处理机。物理I/O APIC 122可以有许多引脚,在其上接收到中断请求信号。在一种实现 中,物理I/O APIC 122可以有255个引脚,每个引脚对应于从0到255的一个向量,然而可 以构想具有不同引脚数的I/O APIC。在一种实现中,操作系统向每个硬件设备分配一个向 量,和具有较低优先级的设备相比,具有较高优先级的设备被分配到较大编号的向量。在一 种实现中,来自硬件设备的中断请求由被分配至该硬件设备的向量来识别。I/O APIC的操 作在以下图2中更详细地描述。此外或者可替代的,I/O APIC提供了处理器间的中断(IPI)。物理I/O APIC122 可以为物理CPU 114提供把中断发送至另一 CPU的机制,也许作为多处理器系统的一部分。 为了执行IPI,CPU对中断控制寄存器(ICR)进行写操作,后者转而把中断发送至目标处理 器。此外或者可替代的,物理CPU 114可以经由ICR为其自己请求中断。在一种实现中,物理CPU 114可以包含物理本地APIC 116。物理本地APICl 16可 以包含255个引脚,每个引脚对应于0-255间的一个向量。在其他实施例中,可以构想不同 数量的引脚,一般与物理I/O APIC 122所包含的引脚数相对应。物理本地APIC 116可以 从物理I/O APIC 122接收消息以及把消息发送至物理I/O APIC 122。在一种实现中,管理程序112可以对与计算设备102耦合的物理设备进行虚拟化, 把虚拟硬件设备呈现给管理程序112之上执行的每个访客操作系统。在一种实现中,虚拟 硬件设备提供与它们的非虚拟对应物相同或几乎相同的功能。在一种实现中,根操作系统106拥有计算设备102内包含的全部物理硬件设备,例如物理CPU 114、物理存储器118、物 理I/O APIC 122、硬盘驱动器IM和串行端口 124、126。在该实施例中,根操作系统106向 其他访客操作系统提供虚拟硬件设备。此外或者可替代的,管理程序112可以拥有计算设 备102内包含的全部物理硬件设备,并且向访客操作系统108和110提供虚拟硬件设备。在一种实现中,根操作系统106把虚拟CPU 128提供给访客操作系统108,把虚拟 CPU 134提供给访客操作系统110。虚拟CPU 1 和虚拟CPU 134可以分别包括虚拟本地 APIC 130和虚拟本地APIC 123。在一个实施例中,虚拟CPU 1 和虚拟CPU 134是薄型包 装的虚拟设备,使访客操作系统能直接访问底层的物理CPU 114。在一种实施例中,虚拟本 地APIC 130和虚拟本地APIC123可以在根操作系统106中用软件来仿真。由于仿真性质, 和由物理本地APICl 16执行时相比,在虚拟本地APIC 130和123处接收和处理中断会显著 地增加代价。此外或者可替代的,存储器虚拟化模块136可以向每个访客操作系统提供一虚拟 存储器,比如与访客操作系统108相关联的虚拟存储器138以及和访客操作系统110相关 联的虚拟存储器140。虚拟CPU 1 和虚拟CPU 134的每一个可以分别耦合至虚拟APIC 142和虚拟APIC 144。与虚拟本地APIC类似,虚拟I/O APIC可由I/O APIC虚拟化模块 154在根操作系统106中或管理程序112中仿真。在一种实现中,硬件设备所产生的中断被虚拟I/O APIC 142接收,被转发至虚拟 本地APIC 130、并由虚拟CPU 1 处理。在接收到中断后,虚拟CPU 1 将其执行上下文改 变为与中断相关联的服务例程。在一种实现中,该服务例程可以通过与发送该中断的设备 进行通信来负责处理中断。一旦虚拟CPU 1 已经完成执行服务例程,虚拟CPU 1 就用 中断结束确认(EOI)来通知虚拟I/O APIC 1 它已完成中断。在传统的计算机上,像物理CPU 114这样的CPU经由存储器映射的I/O页120来 把EOI消息发送至物理I/O APIC 122。在传统的计算机上,存储器映射的I/O页120通过 向看似存储器页但实际上是与物理I/O APIC 122通信的手段的部分进行写操作,从而允许 物理CPU 114与物理I/O APIC 118通信。在虚拟化的环境中,多个虚拟CPU的每一个可以 访问不同的虚拟存储器,每个虚拟存储器都以单个物理存储器118为支持。如果允许多个 虚拟CPU同时访问物理I/O APIC 122,那么物理I/O APIC 122并因此整个计算设备102将 会崩溃。为了防止这一点,I/O APIC虚拟化模块IM在存储器映射的I/O页148和存储器 映射的I/O页150上安装存储器拦截模块146,使得虚拟CPU与物理I/0APIC 120通信的任 何企图都会被俘获至I/O APIC虚拟化模块154。然后,APIC虚拟化软件巧4可以在根操作 系统106或者管理程序的上下文中执行,用软件来仿真物理APIC。例如,虚拟CPU 1 可以通过向存储器映射的I/O页148进行写操作来发出自中 断。虚拟CPU 1 可以被编程以预期向该页存储器的写操作会传送至物理I/O APIC 122。 相反,要被物理I/O APIC 122所接收的存储器操作被根操作系统106中执行的I/O APIC 虚拟化模块巧4俘获。于是,I/O APIC虚拟化模块巧4可以仿真物理I/O APIC 122。在自 中断的情况下,I/O APIC虚拟化模块巧4可以直接调用至管理程序112内,以便向虚拟本 地APIC 130发出中断,虚拟本地APIC 130也是用软件仿真的。在该情况下,无须使用物理 I/O中断122或物理本地中断116,就能处理虚拟CPU 1 所发出的自中断。在另一个实施例中,虚拟CPU 1 可以向诸如虚拟CPU 134这样的多处理器(MP)系统中的一个或所有处理器发出处理器间中断(IPI)。在该情况下,根操作系统106中的存 储器拦截模块146俘获了指向物理I/O APIC 122的指令。与上述自中断的处理类似,I/O APIC虚拟化模块巧4可以调用至管理程序内,以便向虚拟本地APIC 123发出中断。在一种实现中,虚拟I/O APIC 142所接收到的中断可以触发存储器拦截模块146 中的拦截。然后,I/O APIC虚拟化模块巧4可以处理接收到的中断,仿真虚拟I/O APIC 142。这些拦截可经常发生,有时每秒几万次。虚拟I/O APIC142所接收和处理的每一个中 断可以跟随一个EOI,所述EOI从虚拟CPU 1 被发送至虚拟I/O APIC 142。在本机系统 上,EOI并不昂贵——物理CPU 144仅与物理I/O APIC 122对话。然而,在虚拟化环境中, 除了执行拦截所需的CPU周期之外,可能还需要几千个物理CPU周期来在I/O APIC虚拟化 模块154中仿真EOI。在一种实现中,管理程序112将一片信息放入共享页152,指示访客操作系统108 是应该还是不应该向虚拟I/O APIC 142发送Ε0Ι。如果管理程序112告知访客操作系统 108发送Ε0Ι,访客操作系统108就会通过向存储器映射的I/O页148进行写操作而同时试 图与虚拟I/O APIC 142通信,从而产生拦截。另一方面,如果管理程序112经由共享存储 器152告知访客操作系统108要懒惰地处理EOI,那么访客操作系统108可不产生拦截,而 是可向共享页152进行写操作,指示EOI出现。一旦访客操作系统108通过在共享存储器152中设置一标记来指示已出现Ε0Ι,管 理程序112就会稍后读取共享存储器152以确定是否生成过EOI。如果管理程序112确定 虚拟CPU 128已生成EOI,它就通知I/O APIC虚拟化模块154,后者会如图2所述地更新其 状态。在该实施例中,EOI已出现的事实被发送至I/O APIC虚拟化模块154,后者实现虚拟 I/O APIC 142而无须不必要地产生潜在的耗时的拦截。说明性的虚拟化I/O APIC环境和中断处理过程图2描述了说明性的I/O APIC环境200。管理程序202运行在物理计算机硬件 之上,使访客操作系统204能够在虚拟CPU 206上执行。虚拟I/O APIC 208显示出多个引 脚210 (a)、210 (b)、... 210 (η),这些引脚可以连接至像虚拟串行端口 232和虚拟网络卡234 这样的硬件设备。访客操作系统204可以向每个硬件设备分配优先级,或向量。在一种实 现中,虚拟I/O APIC 208有255个引脚,访客操作系统可以向硬件设备分配从0(最低优先 级)到255(最高优先级)的优先级。在一个实施例中,虚拟串行端口 232被分配到优先级 0,而虚拟网络卡234被分配到优先级3。虚拟I/O APIC 208可以与包含虚拟本地APIC 214的虚拟CPU 202耦合。在一种 实现中,虚拟CPU 202可以连接至虚拟存储器216,后者包含共享页218和存储器映射的I/ 0页214。此外,虚拟存储器216可以包括虚拟串行端口中断服务例程218、222(a)以及虚 拟网络卡中断服务例程218、222(b)。虚拟I/O APIC 208可以包括两个寄存器,每个寄存器为每一个引脚210包含一个 位。在一种实现中,两个寄存器的每一个均包含256位。一个寄存器可以是中断请求寄存 器(IRR) 224,它包含位2282 (a)、...2^228(n)。另一个寄存器可以是中断服务寄存器 (ISR) 226,它包含位230 (a)、...230 (η)。在一种实现中,可以在引脚210 (a)上由虚拟I/O APIC 208从虚拟串行端口 232接收到中断。在一种实现中,把和接收到中断的引脚210 (a) 相对应的位2282^(a)设为1,指示中断已被接收。然后可把中断转发至位于虚拟CPU 206上的虚拟本地APIC 214,虚拟本地APIC 214于是可“中断”虚拟CPU 206的执行。一旦虚拟本地APIC 214已“中断” 了虚拟CPU 206,虚拟CPU 206就可向虚拟I/O APIC 208确认它已接收到中断,使虚拟I/O APIC 208通过将位2282 (b)的值设为0来清 除该位。虚拟I/O APIC 208也可以在和接收到中断的引脚相对应的ISR 230中设置该位。 在该情况下,位230(a)可以被设置为1。一旦清除了位228 228 (a)并设置了位230 (a),虚 拟CPU 206就处在处理中断的过程中。在虚拟CPU 206处理中断时,第二中断可由虚拟I/ 0 APIC 208在引脚210 (a)上接收到。在接收到中断后,虚拟CPU 206可以保存其当前的执行环境,即其寄存器的当前 状态,然后调用与中断相关联的虚拟串行端口中断服务例程218 222(a)。一旦虚拟CPU 206已完成执行虚拟串行端口中断服务例程218222(a),虚拟CPU 206就通过向存储器映射 的I/O页148进行写操作来通知虚拟I/0APIC 208,使得由管理程序202进行拦截。在一种 实现中,该通知包括中断结束确认,即Ε0Ι。EOI通知虚拟I/O APIC 208:虚拟CPU 206已完 成处理最高优先级,因此已完成最近完成的待处理的中断。响应于Ε0Ι,虚拟I/O APIC 208 清除ISR中的最高优先级位。在上面的例子中,虚拟I/O APIC 208可以清除位230(b)。在一个实施例中,访客操作系统204可以从管理程序202设置的标记中推断是要 立即发送EOI还是要懒惰地评估EOI。管理程序202可以根据虚拟I/0APIC 203的状态来 确定是否必需要立即发送Ε0Ι。下面描述了必需立即发送EOI的三种说明性的情况。在一种情况中,两个设备可以向虚拟I/O APIC 203发送中断。例如,网络卡234和 串行端口 232可以在同一个时钟周期期间分别发送中断向量X和中断向量Y。在一种实现 中,中断向量Y的优先级大于中断向量X的优先级。在一种实现中,虚拟I/O APIC 208可 以在IRR 224中把和中断X相对应的位设置为1,并且还在IRR 224中把和中断Y相对应的 位设置为1。然后,在每一个时钟周期,虚拟I/O APIC 208可以确定IRR 2M寄存器中设置 的最高数字的位。然后,虚拟I/O APIC 208经由虚拟本地APIC 214,用最高优先级中断Y 来中断CPU。一旦虚拟CPU 206确认了对中断Y的接收后,虚拟I/O APIC 208就把和Y相 对应的ISR位设置为1,并且把和Y相对应的IRR位设置为0,表示Y正在被虚拟CPU 203 处理。继续该情况,中断向量X持续等待较高优先级的中断Y结束,并且会继续等待,直 到虚拟CPU 206向虚拟I/O APIC 208表示Y已完成。如果中断Y是虚拟I/O APIC 203中 待处理的唯一中断,那么管理程序202就会经由共享页218表示访客操作系统可以懒惰地 评估Ε0Ι。然而,由于中断X正在等待被处理,因此懒惰地更新EOI会延迟中断X被处理的 时间,使系统性能降级。因此,当管理程序202经由I/O APIC虚拟化模块巧4检测到虚拟 I/O APIC 203处存在待处理的第二个、较低优先级的中断时,管理程序202会经由共享页 218表示虚拟CPU 206所生成的任何EOI必须被立即发送。当第一个中断正在被虚拟CPU 206处理并且第二个、较高优先级的中断被虚拟I/ 0 APIC 203接收到时,会出现另一种常见的情况。在该情况中,虚拟I/O APIC 208使用ISR 寄存器2 来维持虚拟CPU 206上执行的嵌套中断处理机的栈。例如,如果中断X正在被 虚拟CPU 206处理,并且虚拟I/O APIC 208接收到中断Y,Y的优先级高于X的优先级,那 么虚拟I/O APIC 208就会用中断Y来中断CPU。在虚拟CPU 206完成执行X的服务请求处理机之前,中断Y会完全地中断X的服务请求处理机的执行。X的服务请求处理机位于服务请求处理机的栈上。一旦两个中断请 求X和Y都已被发送至虚拟CPU 206,那么与这些中断相关联的IRR位就会被设为0,而与 中断相关联的ISR位会被设为1,指示两个中断都已被发送至虚拟CPU 206。在一个实施例 中,共享页206可以包含单个位来指示EOI是否已出现。由于有两个待处理的中断,并且仅 有一位信息,管理程序202将不可能确定是一个还是两个中断生成了 Ε0Ι。因此,访客操作 系统204被配置成在两个中断中的第一个完成时发送Ε0Ι。继续该例,一旦中断Y的服务请求处理机完成,由于ISR 226中设置了至少两个 位,因此虚拟CPU 206就会将EOI返回至虚拟化的I/O APIC 208。虚拟化的I/O APIC 208 会清除与中断Y相关联的ISR位,CPU会继续处理中断X的服务请求处理机。在处理了中 断Y的EOI后,虚拟I/O APIC 208会重新区分优先级,并且确定在虚拟CPU 206处仅有一 个中断待处理。相应地,管理程序会设置共享页218中的位,表示访客操作系统可以懒惰地 评估EOI。电平触发的中断包括第三种情况,其中要求访客操作系统立即把EOI发送至管理 程序供处理。由于触发中断的硬件设备会比必要时间更长地继续断言其线路,因此就被阻 止发出下一个中断,所以电平触发的中断可不被懒惰地评估。结果,管理程序202会要求立 即发送与电平触发的中断相关联的Ε0Ι,在管理程序中产生拦截,因此使中断设备能去除其 线路上的断言。中断的说明性处理图3描述了用于确定何时产生拦截以处理Ε0Ι、以及何时懒惰地处理EOI的说明性 的过程。过程300从步骤302开始,其中从诸如虚拟网络卡234这样的虚拟硬件设备接收 中断请求。与此同时,在步骤304,把中断发送至虚拟CPU206待处理。在一个实施例中,所 接收到的中断是目前在虚拟I/O APIC 203处待处理的唯一中断,而目前没有中断正在被虚 拟CPU 206处理。然后,在步骤306,虚拟CPU 206产生EOI并将EOI发送至访客操作系统 204。在步骤308,访客操作系统204通过读取共享页218来确定NoEOIRequired位是否被 设为1。如果是,访客操作系统就通过设置共享页218中的EOIOccurred位来进行响应。稍 后,当管理程序202因某些原因而执行时,管理程序202可以读取共享页218并且确定EOI 出现。在一个实现中,I/O APIC虚拟化模块巧4通过清除与在步骤302中从虚拟I/O APIC 203的ISR寄存器接收到的中断相关联的位,从而对EOI的出现进行处理。另一方面,如果 清除了 NoECHRequired位,或者未设置,那么访客操作系统204会产生Ε0Ι,使管理程序202 拦截EOI并立即对其进行处理。图4描述了用于确定传统的、物理I/O APIC如何对中断的接收进行响应的说明性 过程400。过程400在步骤402开始,从诸如串行端口 1241 这样的物理硬件设备接收中 断请求。中断可以是边缘触发的中断或电平触发的中断。然后在步骤404,把和接收到中断 的引脚相关联的中断请求寄存器(IRR)位设为1。如果中断是边缘触发的中断,串行端口 124 1 就会去除发送中断的线路上的断言。另一方面,如果中断是电平触发的中断,串行 端口 1 就会继续断言该线路,直到向串行端口 1241 通知CPU已经完成了中断的处理。 在步骤406,APIC确定被设为1的最高优先级IRR位是否具有比被设为1的最高优先级ISR 位更高的优先级。在许多情况下,不会设置ISR中的任何位,因此目标CPU —般很快地处理 中断,减少了在处理另一个中断时接收到一个中断的可能性。在另一情况中,已经在处理的
11中断具有比刚刚接收到的中断更高的优先级。在该情况下,接收到的中断必需等待较高优 先级的中断完成,如步骤408所示。在步骤410,最高优先级IRR位的优先级高于最高优先级ISR位的优先级,使I/O APIC把接收到的中断发送至CPU。在步骤412,APIC更新与接收到的中断相关联的IRR和 ISR寄存器,把IRR中的位设为0,把ISR中的位设为1。这些位表示中断在APIC中不再待 处理(IRR位=0),中断正在被CPU执行(ISR位=1)。图5描述了用于确定传统的、物理APIC如何对从物理CPU接收到EOI进行响应的 说明性过程500。过程500从步骤502开始,从CPU接收大到EOI。EOI可以指示由CPU处 理的最高优先级中断已经完成。然后在步骤504,通过把与接收到的EOI相关联的位设置为 0来清除该位。在一种实现中,由于CPU将总是以中断的优先级顺序来执行中断,因此I/O APIC清除最高优先级位。在一种实现中,I/O APIC然后会对任何待处理的中断重新区分优 先级,把次高优先级的中断发送至CPU供处理。然后在步骤506,确定对其接收到EOI的中断是边缘触发的中断还是电平触发的 中断。在步骤508,当EOI所响应于的中断是边缘触发的中断时,APIC完成对EOI的处理。 然而,当中断是电平触发的中断时,执行步骤510,I/O APIC向断言中断的设备通知中断请 求已经完成,并且设备可以向I/O APIC去除其线路断言。确定何时把EOI立即传送至管理程序图6描述了一说明性过程600,它示出虚拟CPU 128所产生的EOI可被直接传送至 管理程序112并且不被懒惰更新的一种条件。过程600在步骤602开始,在虚拟I/0APIC 142处接收到具有第一优先级的第一中断。应当注意,虚拟I/O APIC 142可以用管理程 序112或根操作系统106以软件进行仿真,并且仅暴露给访客操作系统108供执行。在步 骤604,第一中断可被注入到虚拟化的CPU 1 内。然后在步骤606,虚拟I/O APIC 142可 以接收优先级比第一中断的优先级低的第二中断,第二中断是在第一中断正在被虚拟CPU 128处理时被接收到的。然后在步骤608,管理程序112可以清除存储在共享页152中的 NoEOIRequired标志。清除NoECHRequired标志向访客操作系统108表示,一旦虚拟CPU 128完成了对中断的处理,访客操作系统108就应当把EOI发送至管理程序,产生拦截。由 于较低优先级的中断仅仅会在I/O APIC虚拟化模块IM处接收到EOI时被注入,因此应 当立即发送Ε0Ι。在该情况下,懒惰地更新虚拟I/O APIC 142会不必要地延迟对较低优先 级中断的处理。然后在步骤610,I/O APIC虚拟化模块IM接收在第一中断完成时产生的 E0L·在一种实现中,虚拟I/O APIC 142可以清除与第一中断相关联的ISR位,记录该中断 已完成处理。然后在步骤612,虚拟I/O APIC 142可响应于接收到EOI而把第二中断注入 到虚拟化的CPU 128内。然后在步骤614,由于不再有待处理的中断,因此管理程序112可 以把NoEOIRequired位设为1。图7描述了一说明性过程700,它示出虚拟CPU 128所产生的EOI可被直接传送 至管理程序112并且不被懒惰更新的另一种条件。过程700在步骤702开始,在虚拟I/O APIC 142处接收到具有第一优先级的第一中断。在步骤704,第一中断被注入到虚拟化的 CPU 1 内。然后在步骤706,虚拟I/O APIC 142可以接收优先级比第一中断的优先级高 的第二中断,第二中断是在第一中断正在被虚拟CPU 1 处理时被接收到的。然后在步骤 708,管理程序112可以通过把存储在共享页152中的NoECHRequired标志设为0,从而清除该标志。清除NoECHRequired标志向访客操作系统108表示一旦虚拟CPU 128完成了对中 断的处理,访客操作系统108就应当把EOI发送至管理程序,产生拦截。由于虚拟CPU 128 会有两个待处理中断完成,因此EOI应当被立即发送,但是共享页152可能仅能在一个位中 存储EOI是否被处理。因此,为了确保EOI对于每个中断都被虚拟I/O APIC 142处理,访客 操作系统必须把所产生的第一个EOI发送至管理程序112,产生拦截。然后在步骤710,虚 拟I/O APIC 142可以把第二个、较高优先级的中断注入到虚拟CPU 1 内。虚拟CPU 128 可以立即处理第二中断,延迟第一中断的完成,直到第二中断自身已经完成。在步骤712,虚 拟CPU 1 可以在完成第二中断时发送Ε0Ι。该EOI可以被立即发送至管理程序,触发拦 截。然后在步骤714,由于现在只有一个待处理的中断,因此I/O APIC虚拟化模块IM可以 通过把NoECHRequired位设为1从而响应接收到的EOI,并且它可以被懒惰地评估。图8描述了一说明性过程800,它示出虚拟CPU 104所产生的EOI可被直接传送 至管理程序112并且不被懒惰更新的另一种条件。过程800在步骤802开始,在虚拟I/O APIC 142接收电平触发的中断。在步骤804,管理程序112可以把NoECHRequired位设为 0,指示访客操作系统108必须为该电平触发的中断发送Ε0Ι。然后在步骤806,管理程序 112内的I/O APIC虚拟化模块巧4可以经由拦截从访客操作系统108接收Ε0Ι。然后,管 理程序可以把NoECHRequired位设为1,指示随后的电平触发的EOI可以被懒惰地评估。图形中断表示图9描述了说明性的边缘触发的和电平触发的中断900。在一种实现中,边缘触发 的中断902从诸如硬盘驱动器IM这样的硬件设备被发送至诸如虚拟I/O APIC 142这样 的虚拟I/O APIC。在一种实现中,另一个边缘触发的中断904可以在同一线路上被发送,造 成边缘重叠906。由于对于到虚拟I/O APIC 142,线路被一致地断言,虚拟I/O APIC 142 会将重叠的边缘触发的中断902和904视为单个边缘触发的中断。通过在线路上进行断言直到硬盘驱动器IM接收到中断完成的指示,电平触发的 中断908可以从硬盘驱动器IM被传送至虚拟I/O APIC 142。图10描述了用于确定是否要懒惰地处理EOI的说明性过程1000。过程1000从 步骤1002开始,接收具有第一优先级的第一中断服务请求。在一个实施例中,中断在虚拟 I/O APIC 142处被接收到。在步骤1004,接收到的中断可以被发送至CPU。在一个实施例 中,CPU是虚拟CPU 128。然后在步骤1006,从CPU接收到中断结束(EOI)确认。CPU可以 在对接收到的中断处理完成时发送Ε0Ι。然后在步骤1008,访客操作系统确定是否要懒惰 地发送EOI,或者是否要立即发送EOI,使管理程序拦截EOI确认。在一个实施例中,立即发 送EOI会使管理程序拦截和处理EOI。然后在步骤1010,当EOI要被懒惰地处理时,访客操 作系统可以对共享存储器页进行写操作。在步骤1012,当EOI不要被懒惰地处理时,访客操 作系统可以调用管理程序来直接发送Ε0Ι。此外,以上所述的任何方法的任何动作都可由处理器或其它计算设备基于存储在 一个或多个计算机可读介质上的指令来实现。计算机可读介质可以是能适当由管理程序、 访客操作系统和/或I/O APIC虚拟化模块任何可用的介质。计算机可读介质包括以用于 储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现 的易失性和非易失性,可移动和不可移动的介质。计算机可读介质包括但不限于,RAM、R0M、 EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由管理程序、访客操作 系统和/或I/O APIC虚拟化模块访问的任何其它介质。上述中的任意组合也应包括在计 算机可读介质的范围之内。Mlt尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权 利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为 实现权利要求的示例形式公开的。
权利要求
1.一个或多个存储计算机可执行指令的计算机可读介质,所述计算机可执行指令当在 一个或多个处理器上执行时执行以下动作,包括从管理程序接收中断服务请求; 把所述中断服务请求发送至中央处理单元(CPU); 从所述CPU接收中断结束(EOI)确认; 确定是否满足处理标准;如果满足所述标准则把一值写入与所述管理程序共享的存储器;以及 如果不满足所述标准则把所述EOI发送至所述管理程序。
2.如权利要求1所述的一个或多个计算机可读介质,其特征在于,被写入所述存储器 的值包括一位。
3.如权利要求1所述的一个或多个计算机可读介质,其特征在于,把所述EOI发送至所 述管理程序包括对存储器映射的页的写操作,其中,运行在所述管理程序内的存储器拦截 模块俘获所述对存储器映射的页的写操作。
4.如权利要求1所述的一个或多个计算机可读介质,其特征在于,与所述管理程序共 享的存储器包括被同步地映射到访客操作系统虚拟存储器页和管理程序虚拟存储器页的 物理存储器页。
5.如权利要求1所述的一个或多个计算机可读介质,其特征在于,把所述值写入所述 存储器能够延迟处理所述EOI,直到所述管理程序因为除处理EOI以外的原因开始执行。
6.如权利要求1所述的一个或多个计算机可读介质,其特征在于,所述确定是否满足 处理标准的动作还包括 从共享存储器读取指示是否能够懒惰地处理EOI的值。
7.如权利要求6所述的一个或多个计算机可读介质,其特征在于,所述共享存储器与 管理程序共享,所述管理程序在共享存储器内表示在接收到的中断包括电平触发的中断时 EOI不能被懒惰地评估。
8.如权利要求6所述的一个或多个计算机可读介质,其特征在于,所述共享存储器与 管理程序共享,所述管理程序在共享存储器内表示在以下情况时EOI不能被懒惰地评估在接收到第一中断以后接收到的第二中断包括比第一中断的优先级低的优先级;以及 所述CPU正在处理所述第一中断。
9.如权利要求6所述的一个或多个计算机可读介质,其特征在于,所述共享存储器与 管理程序共享,所述管理程序在共享存储器内表示在以下情况时EOI不能被懒惰地评估在接收到第一中断以后接收到的第二中断包括比第一中断的优先级高的优先级;以及 所述CPU正在处理所述第一中断。
10.一种方法,包括 接收中断;分析与虚拟CPU相关联的虚拟高级可编程中断控制器(APIC)以确定是否满足标准; 当访客操作系统能懒惰地处理EOI确认时,把与访客操作系统共享的存储器的值设置 成指示访客操作性能懒惰地处理EOI ;以及否则把与所述访客操作系统共享的存储器的值设置成指示访客操作系统不能懒惰地 处理EOI。
11.如权利要求10所述的方法,其特征在于,当所述中断包括边缘触发的中断时,所述 访客操作系统能懒惰地处理所述EOI。
12.如权利要求10所述的方法,其特征在于,所述中断包括第一中断,其中所述访客操 作系统被被配置成在以下情况时不懒惰地处理EOI确认在接收到第一中断以后接收到的第二中断包括比第一中断的优先级低的优先级;以及 所述虚拟CPU正在处理所述第一中断。
13.如权利要求10所述的方法,其特征在于,所述中断包括第一中断,其中所述访客操 作系统被被配置成在以下情况时不懒惰地处理EOI确认在接收到第一中断以后接收到的第二中断包括比第一中断的优先级高的优先级;以及 所述虚拟CPU正在处理所述第二中断。
14.如权利要求10所述的方法,其特征在于,当所述中断包括边缘触发的中断并且所 述中断是唯一被处理的中断时,所述访客操作系统能懒惰地处理EOI确认。
15.如权利要求10所述的方法,其特征在于,还包括 从所述访客操作系统直接接收EOI。
16.如权利要求10所述的方法,其特征在于,还包括检取存储在与访客操作系统共享的存储器中的表示是否出现EOI的值,该值是以响应 于EOI以外的方式被检取的。
17.如权利要求10所述的方法,其特征在于,一存储器拦截模块被安装在存储器的页 上,所述存储器的页包括由所述虚拟CPU用来与物理APIC通信的存储器映射的I/O页。
18.一种计算机系统,包括 一个或多个处理器;能由所述一个或多个处理器访问的存储器;存储在存储器中并且能够在所述一个或多个处理器上执行的管理程序,用于接收中断服务请求,确定是否满足第一处理标准;当满足所述第一处理标准时在共享存储器中设置表示所述EOI能被懒惰地评估的值, 如果不满足所述第一处理标准则在共享存储器中设置表示所述EOI必须在中断完成 时被传送至所述管理程序的值,以及把所述中断服务请求发送至执行访客操作系统的虚拟CPU ;以及 存储在存储器中并且能够在所述一个或多个处理器上执行的访客操作系统的懒惰中 断结束(EOI)处理模块,用于从所述虚拟CPU接收表示所述中断服务请求已经执行的Ε0Ι, 确定是否满足第二处理标准,如果不满足所述第二处理标准则把所述EOI发送至所述管理程序, 在所述共享存储器中设置表示所述EOI已出现的值,以便在不满足所述第二处理标准 时所述管理程序能稍后响应于所述EOI。
19.如权利要求18所述的计算机系统,其特征在于,对所述中断服务请求的中断结束 (EOI)确认能在以下情况时被懒惰地评估所述中断不是电平触发的中断,以及所述中断是唯一的活动中断。
20.如权利要求18所述的计算机系统,其特征在于,所述中断是自中断,使得所述管理 程序把所述自中断传送至与所述虚拟CPU相关联的虚拟本地APIC。
全文摘要
本发明的技术能够通过减少从虚拟中央处理单元(CPU)被发送至虚拟高级可编程中断控制器(APIC)的中断结束(EOI)消息数量,减少管理程序所执行的拦截数量。运行在虚拟CPU上的访客操作系统的EOI路径被改变,留下表示EOI已出现的标记。稍后,管理程序检查该标记并且懒惰地更新虚拟APIC状态。
文档编号G06F9/44GK102067083SQ200980123600
公开日2011年5月18日 申请日期2009年6月25日 优先权日2008年6月27日
发明者S·甘吉利 申请人:微软公司