用于硬件虚拟化的方法和装置

文档序号:1510328 发布日期:2020-02-07 浏览:15次 >En<

阅读说明:本技术 用于硬件虚拟化的方法和装置 ([db:专利名称-en]) 是由 蒋晓维 于 2018-06-15 设计创作,主要内容包括:提供了一种用于在虚拟机中操作输入/输出(I/O)接口的装置。该装置被配置为:将存储设备的第一部分映射到I/O接口的配置空间;获取第一映射表,其将一组主机空间虚拟地址映射到与该存储设备的该第一部分相关联的第一组物理地址;获取第二映射表,其将与虚拟机可访问的存储设备的第二部分相关联的第二组物理地址映射到一组主机空间虚拟地址;生成第三映射表,其将该第二组物理地址映射到该第一组物理地址;以及将该第三映射表提供给在该虚拟机中运行的设备驱动器,以使得该设备驱动器能够访问该I/O接口的该配置空间。([db:摘要-en])

用于硬件虚拟化的方法和装置

技术领域

本申请涉及计算机架构领域,尤其涉及用于虚拟化的方法和装置。

背景技术

虚拟化通常是指一种在多个软件应用之间逻辑划分系统资源的方法。在虚拟化环境中,将创建一个或多个虚拟机。虚拟机可以像计算机系统仿真器一样运行,并且可以执行一组软件指令。通常,虚拟机操作软件堆栈,该软件堆栈包括客户操作系统以及在操作系统上运行的一个或多个客户软件应用。客户操作系统提供可以与管理程序中托管的后端驱动器进行通信的软件前端驱动器,以访问一组物理资源。管理程序还可通过例如管理对系统资源的访问权限,在虚拟机和提供请求的资源的系统之间传输访问请求和请求的资源等来管理物理资源的访问。

发明内容

本申请的实施例提供了一种用于在虚拟机中操作输入/输出(input/output,I/O)接口的装置,该装置包括一个或多个存储设备,其存储一组指令;以及一个或多个硬件处理器,其被配置为执行该一组指令以:将该一个或多个存储设备的第一部分映射到I/O接口的配置空间;获取第一映射表,其将一组主机空间虚拟地址映射到与该一个或多个存储设备的该第一部分相关联的第一组物理地址;获取第二映射表,其将与该一个或多个存储设备的第二部分相关联的第二组物理地址映射到该一组主机空间虚拟地址,其中,该一个或多个存储设备的该第二部分可由虚拟机访问;生成第三映射表,其将该第二组物理地址映射到该第一组物理地址;以及将该第三映射表提供给在该虚拟机中运行的设备驱动器,其中,该第三映射表使得该设备驱动器能够访问该I/O接口的该配置空间。

本申请的实施例还提供了一种用于在虚拟机中操作I/O接口的方法,该方法包括:将存储设备的第一部分映射到I/O接口的配置空间;获取第一映射表,其将一组主机空间虚拟地址映射到与该存储设备的该第一部分相关联的第一组物理地址;获取第二映射表,其将与该存储设备的第二部分相关联的第二组物理地址映射到该一组主机空间虚拟地址,其中,该存储设备的该第二部分可由虚拟机访问;生成第三映射表,其将该第二组物理地址映射到该第一组物理地址;以及将该第三映射表提供给在该虚拟机中运行的设备驱动器,其中,该第三映射表使得该设备驱动器能够访问该I/O接口的该配置空间。

本申请的实施例还提供了一种非暂时性计算机可读介质,其存储可由装置的一个或多个处理器执行一种用于在虚拟机中操作I/O接口的方法的指令,该方法包括:将存储设备的第一部分映射到I/O接口的配置空间;获取第一映射表,其将一组主机空间虚拟地址映射到与该存储设备的该第一部分相关联的第一组物理地址;获取第二映射表,其将与该存储设备的第二部分相关联的第二组物理地址映射到该一组主机空间虚拟地址,其中,该存储设备的该第二部分可由虚拟机访问;生成第三映射表,其将该第二组物理地址映射到该第一组物理地址;以及将该第三映射表提供给在该虚拟机中运行的设备驱动器,其中,该第三映射表使得该设备驱动器能够访问该I/O接口的该配置空间。

所公开的实施例的其他目的和优点将在下面的描述中部分地阐述,并且部分地从该描述中将变得显而易见,或者可以通过实施例的实施而获知。所公开的实施例的目的和优点可以通过权利要求中阐述的要素和组合来实现和获取。

应当理解,前面的一般性描述以及下面的详细描述都仅仅是示例性和说明性的,并且不限制所要求保护的所公开的实施例。

附图说明

图1A-1B是示出了在其中可以使用本申请的实施例的示例性虚拟化环境的图。

图2A-2C是示出了根据本申请的实施例的管理程序和I/O接口的示例性组件的示例性组件的图。

图3是示出了根据本申请的实施例的提供对硬件设备的虚拟机访问的示例性方法的流程图。

图4是示出了根据本申请的实施例的利用虚拟机操作硬件设备的示例性方法的流程图。

图5是示出了根据本申请的实施例的利用虚拟机操作硬件设备的另一示例性方法的流程图。

图6是示出了在其上可以实现本文描述的实施例的示例性计算机系统的框图。

具体实施方式

现在将详细参考示例性实施例,其示例在附图中示出。以下描述参考附图,其中除非另外表示,不同附图中的相同数字表示相同或相似的元件。在示例性实施例的以下描述中阐述的实施方式并不代表根据本发明的所有实施方式。相反,它们仅是与如所附权利要求中所述的根据本发明的方面的装置和方法的示例。

本申请的实施例提供了一种用于提供一个或多个虚拟化计算环境的装置。装置与能够执行一组功能的硬件系统通信耦合。硬件系统包括配置空间,其包括一组硬件寄存器和存储设备,并且存储用于配置一组功能的性能的一组配置数据。装置与存储设备中的主机空间相关联,并且存储映射表,其将虚拟机可访问的一组虚拟存储器地址经由主机空间映射到配置空间。映射表使得虚拟机上运行的软件应用能够通过对一组虚拟存储器地址执行一个或多个存储器读/写操作直接访问硬件系统。

通过提供对硬件系统的直接访问,本申请的实施例使得在虚拟机上运行的软件应用能够更有效地访问由硬件系统提供的资源。作为结果,可以提高软件应用的性能以及在其中软件应用运行的虚拟化环境的性能。此外,虚拟机可以操作能够访问硬件系统的通用和标准设备驱动器。作为结果,还可以更有效地执行虚拟化环境的部署和维护。

现在参考图1A,其示出了在其中可以使用本申请的实施例的示例性虚拟化环境100。如图1A所示,虚拟化环境100包括主机102和主机104。主机102可以经由网络103与用户设备106a和用户设备106b通信耦合,而主机104也可以经由网络103与用户设备108a和108b通信耦合。主机102和104中的每一个可以是服务器,并且可以向用户设备106a,106b,108a和108b提供虚拟化计算和联网资源。例如,主机102和104操作聊天消息收发软件应用,其在用户设备106a和108a之间提供聊天消息收发会话。主机102和104还操作IP话音(Voice-over-IP,VoIP)软件应用,其在用户设备106b和108b之间提供VoIP会话。用户可以登录到主机102和104,以经由用户设备访问聊天消息收发软件应用和VoIP软件应用。主机102和104可以通过例如允许用户设备106a和108a访问聊天消息收发软件应用而非VoIP软件应用来提供虚拟化环境。此外,主机102和104还允许用户设备106b和108b访问VoIP软件应用,而非聊天消息收发软件应用。

如图1A所示,主机102和104分别进一步包括网络接口110和网络接口112。网络接口110和112可以被配置为通过网络114提供分组数据传输,以根据预定的网络协议支持聊天消息收发会话和VoIP会话。预定的网络协议例如为传输控制协议(TransmissionControl Protocol/Internet Protocol,TCP/IP)、实时传送协议(Real-Time TransportProtocol,RTP)以及RTP控制协议(RTP Control Prtocol,RTCP)等。网络接口110和112分别还包括输入/输出(Input/Output,I/O)接口110a和I/O接口112a。网络接口110和112可以经由I/O接口分别与主机102和104的其他组件连接。I/O接口可以基于并行接口(例如,***组件互连(Peripheral Component Interconnect,PCI))、串行接口(例如,***组件互高速(Peripheral Component Interconnect Express,PCIe))等。作为说明性示例,网络接口110和112可以是经由PCIe接口连接到主机102和104的PCIe网络接口卡(networkinterface card,NIC)。

为了向用户设备106a和106b提供用于访问I/O接口110a(以及由网络接口110提供的网络资源)的虚拟化环境,主机102托管(host)虚拟机120、虚拟机122以及管理程序124,其管理虚拟机120和122对I/O接口110a的访问。类似地,为了向用户设备108a和108b提供用于访问I/O接口112a(以及由网络接口112提供的物理资源)的虚拟化环境,主机104还托管虚拟机140、虚拟机142和管理程序144,其管理虚拟机140和142对I/O接口112a的访问。

每个虚拟机都运行客户软件堆栈,以向用户设备提供对I/O接口的访问。例如,虚拟机120可以操作客户软件堆栈126,虚拟机122可以操作客户软件堆栈128,虚拟机140可以操作客户软件堆栈146,而虚拟机142可以操作客户软件堆栈148。每个客户软件堆栈都可以包括客户操作系统以及一个或多个软件应用,其在客户操作系统之上运行以访问I/O接口和网络接口。例如,上述聊天消息收发软件应用可以包括在客户软件堆栈126和146中,而上述VoIP软件应用可以包括在客户软件堆栈128和148中。

客户软件堆栈126、128、146和148中的每一个还包括能够访问I/O接口110a或112a的设备驱动器。设备驱动器可以是通用驱动器,其是客户操作系统的标准构建的一部分。设备驱动器可以是例如虚拟I/O(VirtI/O)前端驱动器。客户软件堆栈中包括的客户操作系统可以是例如MicrosoftTM WindowsTM(微软视窗)、UbuntuTM(人性)、Red HatTM EnterpriseLinuxTM(红帽子企业版,RHEL),等。如下所讨论的,管理程序(例如,管理程序124、管理程序144等)可以是类型1或者类型2的管理程序,并且可以管理设备驱动器对I/O接口的访问,进而可以管理包括设备驱动器的客户软件堆栈对I/O接口的访问。例如,管理程序124可以控制聊天消息收发应用(在虚拟机120中运行)和VoIP应用(在虚拟机122中运行)中的哪个可以使用I/O接口110a(和网络接口110)通过网络114传输数据。同样,管理程序144也可以控制聊天消息收发应用(在虚拟机140中运行)和VoIP应用(在虚拟机142中运行)中的哪个可以使用I/O接口112a(和网络接口112)通过网络114传输数据。

主机102和104中的每一个分别包括存储设备150和存储设备160。前述虚拟机、客户软件堆栈和管理程序可以是存储在存储设备150和160中的软件代码,并且由一个或多个硬件处理器(图1A中未示出)执行,以为用户设备提供前述虚拟化环境,以及聊天消息收发会话和VoIP会话。存储设备150和160中的每一个还提供当在主机102和104上运行时由虚拟机,客户软件堆栈和管理程序使用的以及由I/O接口使用的存储器空间。

在一些实施例中,存储设备150和160中的每一个可以包括被指定为主机空间的区域以及被指定为客户空间的一个或多个区域。管理程序和I/O接口可以访问主机空间,而虚拟机和客户软件堆栈可以访问客户空间。可以为每个虚拟机分配一个客户空间,并且在不同虚拟机上运行的软件应用彼此隔离。例如,如图1B所示,存储设备150可以包括客户空间152a、客户空间152b和主机空间154。可以将客户空间152a分配给虚拟机120(以及客户软件堆栈126),可以将客户空间152b分配给虚拟机122(以及客户软件堆栈128),而可以将主机空间154分配给管理程序124以及I/O接口110a。尽管未在图1B中示出,应当理解,存储设备160也可以包括分配给虚拟机140和148的一组客户空间,以及分配给管理程序144和I/O接口112a的主机空间。

主机空间154还包括I/O空间154b。I/O空间154b可以与I/O接口110a的一组硬件寄存器耦合,作为存储器映射的I/O方案的一部分。利用存储器映射的I/O方案,物理连接到一组硬件寄存器和I/O接口(例如I/O接口110a)的存储设备的数据总线也可以物理连接到主机的存储设备(例如,主机102的存储设备150)。利用这样的布置,可以通过对I/O空间154b的存储器写/读操作来访问I/O接口110a的硬件寄存器和存储设备。I/O接口110a的硬件寄存器可以存储配置信息,包括例如I/O接口的标识符、访问控制信息、用于访问I/O接口的一组存储器地址等。

在I/O接口110a是PCIe接口的情况下,配置寄存器可以包括例如设备标识寄存器(Device Identification Register,DIR)、基地址寄存器(Base Address Registers,BAR),通知寄存器(Notify Register)等。BAR寄存器可以存储例如与可经由I/O空间154b访问的I/O接口110a的存储设备相关联的一组物理地址。通知寄存器可以存储例如由设备驱动器提供的通知,以在I/O接口110a开始操作。如将在下面更详细地讨论的,设备驱动器可以对I/O空间154b执行存储器写/读操作,以将配置信息存储到硬件寄存器,并且将其他操作信息存储到I/O接口11a的存储设备,以控制I/O接口110a执行一个或多个操作。

在一些实施例中,管理程序可以允许在客户空间中操作的设备驱动器直接访问分配给I/O接口的配置空间,以配置I/O接口以执行操作。管理程序可以创建并存储存储器映射表,其将客户空间中的一组虚拟地址(可由设备驱动器访问)映射到配置空间中的一组物理地址。基于该映射,设备驱动器可以通过对客户空间虚拟地址执行存储器读/写操作,将数据存储在配置空间,以控制和/或配置I/O接口以执行操作。

作为说明性示例,在虚拟机120中运行的设备驱动器可以从客户软件堆栈126的聊天消息收发应用接收分组传输请求。设备驱动器可以基于存储器映射表识别配置空间中的位置,并且将与分组传输请求有关的数据写入配置空间。该数据可以包括例如到I/O接口110a的通知以准备分组传输,以及与分组传输有关的信息(例如,实际有效载荷数据,或存储有效载荷数据的一组存储器地址,数据是用于传输或者从网络接收,等)。I/O接口110a可以监视配置空间,并且在检测到通知时,获取有效载荷数据,然后将有效载荷数据提供给网络接口110以通过网络114执行分组传输。网络接口110完成分组传输之后,它还可以将分组传输的完成通知给管理程序124(例如,通过引发中断)。管理程序124可以将中断路由到虚拟机120的设备驱动器,以便设备驱动器可以处理下一个分组传输。

现在参考图2A,其示出了根据本申请的实施例的图1A的管理程序124和I/O接口110a的示例性组件。如图2A所示,管理程序124包括主机驱动器202、虚拟机创建模块204、虚拟化控制器206和存储器转换模块208。此外,I/O接口110a包括虚拟化模块210,其与在客户软件堆栈126中操作的设备驱动器126a(例如,Virt1/O前端驱动器)连接(interface)。尽管未在图2A中示出,可以理解的是,图1A的管理程序124可以包括与管理程序124类似的组件,并且I/O接口112a可以包括与I/O接口110a类似的组件。

主机驱动器202通过例如为I/O空间154b分配主机空间154的一部分来处理资源分配,主机驱动器202可以执行或合并软件例程(例如,mmap)以执行存储器映射的I/O操作,以获取存储设备150中的一组物理地址,其被映射到I/O接口112a的硬件寄存器和存储设备。然后,主机驱动器202可以在主机空间154内创建I/O空间154b,并且生成一组I/O空间物理地址。

虚拟机创建模块204处理虚拟机创建,其可以包括例如将存储设备150的一部分分配给客户空间(例如,客户空间152a),并且将所分配的部分提供给创建的虚拟机(例如,虚拟机120),然后其可以使用分配的存储器空间存储和执行相关联的客户软件堆栈。虚拟机创建模块204还创建一组映射到客户空间物理地址的虚拟地址,并且在从虚拟机接收请求时将客户空间虚拟地址提供给虚拟机。虚拟机创建模块204还创建从虚拟化控制器206接收到的另一组虚拟存储器地址到虚拟机120可访问的一组客户空间物理地址之间的映射。该映射允许虚拟化控制器206对客户空间执行读/写存储器操作,因此虚拟化控制器206可以监视和/或控制客户软件堆栈126在客户空间中执行的存储器操作。

虚拟化控制器206可以协调主机驱动器202和虚拟机创建模块204的操作,以还生成一组客户空间物理地址与一组I/O空间物理地址之间的映射,以允许虚拟机的设备驱动器直接访问I/O接口。作为说明性示例,如图2A所示,虚拟化控制器206可以经由通信220调用主机驱动器202以将主机空间154的一部分分配给I/O空间154b。然后,主机驱动器202可以经由通信222与I/O接口110a交换数据,并且将I/O空间154b映射到I/O接口110a的配置空间。例如,主机驱动器202可以接收I/O接口110a的存储设备的物理地址,以及关于I/O接口110a的配置寄存器的寻址的信息,作为通信222的一部分。在创建I/O空间154b的物理地址与I/O接口110a的物理存储器地址和配置寄存器之间的映射之后,主机驱动器202还可以经由通信222将映射信息发送到I/O接口110a,因此,I/O接口110a也可以访问I/O空间154b。然后,主机驱动器202通过通信224将一组可用于访问I/O接口110a的I/O空间物理地址返回给虚拟化控制器206。然后,虚拟化控制器206生成映射到从主机驱动器202接收的一组I/O空间物理地址的一组虚拟地址(可由虚拟化控制器206访问)。然后,虚拟化控制器206经由通信226调用虚拟机创建模块204以创建虚拟机(例如,虚拟机120)。然后,虚拟机创建模块204分配客户空间152a,并且在一组客户空间物理地址(与客户空间152a关联)与虚拟化控制器206可访问的一组虚拟地址之间创建另一个映射。

基于主机驱动器202、虚拟机创建模块204和虚拟化控制器206之间的操作,可以在一组客户空间虚拟地址与一组I/O空间物理地址之间创建映射。该映射允许虚拟机(及其中运行的设备驱动器)直接访问I/O接口的配置寄存器。图2B示出了映射的示例。如图2B所示,在虚拟机创建模块204创建虚拟机120之后,将客户空间虚拟地址232映射到客户空间物理存储器地址234(在客户空间152a内)。客户空间物理存储器地址234也映射到可由虚拟化控制器206访问的主机空间虚拟地址236。主机空间虚拟地址236也映射到由主机驱动器202提供的I/O空间物理地址238。基于这些映射(其可以采用映射表的形式),可以在客户空间虚拟地址232与I/O空间物理地址238之间形成直接映射240。存储器转换模块208可以通过例如存储将客户空间虚拟地址232映射到I/O空间物理地址238的映射表来存储直接映射240。

在一些实施例中,映射表可以采用例如扩展页面表(Extended Page Table,EPT)的形式。虚拟化控制器206可以包括快速仿真器(Quick Emulator,QEMU)的组件,而虚拟机创建模块204也可以包括基于内核的虚拟机(kernel-based virtual machine,KVM)的组件,并且可以提供对EPT的访问。利用KVM,可以基于VM_Exit事件更新EPT。例如,在创建虚拟机120之后,设备驱动器126a尝试访问尚未分配或尚未映射到I/O空间物理地址的客户空间虚拟存储器地址时,可能会出现EPT故障。EPT故障可能导致虚拟机120的退出事件(例如,VM_exit事件),这又可以引发KVM在客户空间存储器虚拟地址(由设备驱动器访问)到已映射到I/O物理空间地址的客户空间物理地址之间创建映射。映射的创建可以导致客户空间虚拟地址与I/O空间物理地址之间新的直接映射。然后,KVM可以更新EPT以包括新的直接映射。在重新启动虚拟机120之后,设备驱动器126a随后可以访问EPT以获取直接映射,并且通过对映射到I/O空间的客户空间虚拟地址执行存储器读/写操作来访问I/O空间。

尽管图2A将存储器转换模块208描绘为管理程序124的一部分,但是应当理解,存储器转换模块208也可以是与管理程序124分离的组件。此外,存储器转换模块208也可以由输入输出存储器管理单元(input-output memorymanagement unit,IOMMU)访问。

再次参考图2A,设备驱动器126a可以经由通信242从存储器转换模块208获取直接映射。基于直接映射,设备驱动器126a可以获取映射到一组I/O空间物理地址的一组客户空间虚拟地址。设备驱动器126a可以对一组客户空间虚拟地址执行存储器写操作,以在I/O空间154b处存储一组配置数据244。配置数据244也将被虚拟化模块210接收。基于配置数据,虚拟化模块210可以控制网络接口110执行一个或多个操作,例如控制网络接口110向网络114发送数据,提供从网络114接收的数据等。

现将参考图2C,其示出了网络接口110的示例性组件,该网络接口如上所述,包括I/O接口110a。如图2C所示,I/O接口110a包括虚拟化模块210,其包括硬件寄存器250、存储设备260和后端模块270。存储设备260还存储任务队列280。I/O接口110a还包括与后端模块270连接的I/O接口核心逻辑290。后端模块270还与网络接口核心逻辑295连接。I/O接口110a的这些组件可以是设计用于与其他组件(例如,集成电路的一部分)或执行相关功能的特定功能的程序的一部分(存储在计算机可读介质上)一起使用的封装功能硬件单元。这些组件可以由连接的逻辑单元(例如门和触发器)组成,和/或可以由可编程单元(例如可编程门阵列或处理器)组成。

硬件寄存器250可以包括例如用于配置I/O接口110a的操作的一组配置寄存器。在I/O接口110a是PCIe接口的情况下,配置寄存器可以包括例如设备标识寄存器(DIR)、基地址寄存器(BAR)、通知寄存器等。任务队列280可以存储与将由I/O接口110a(和网络接口110)执行的一组任务相关的信息。存储的信息可以包括例如操作的类型(例如,是否用于向网络114传输数据包,用于从网络114接收数据包等),用于存储数据(在将数据发送到网络114的情况下)或者用于检索数据(在从网络114接收数据的情况下)的一组客户虚拟地址,以及与操作相关联的虚拟机标识符。在一些实施例中,任务队列280可以被配置为虚拟队列(Virtqueue)、VRING表等。

如上所述,硬件寄存器250和任务队列280都可以由在虚拟机中操作的设备驱动器(例如,设备驱动器126a)经由I/O空间154b映射和访问。设备驱动器可以通过访问映射到BAR寄存器的I/O空间154b的部分来从BAR寄存器获取存储器映射信息,以获取映射到存储设备260中存储了任务队列280的位置的一组主机空间物理地址。然后,设备驱动器可以向存储器转换模块208提交请求,以将主机空间物理地址转换为一组客户空间虚拟地址,并且通过对该一组客户空间虚拟地址执行存储器读操作来访问任务队列280。设备驱动器还可以向存储器转换模块208提交存储器转换请求,以获取一组客户空间虚拟存储器地址以访问硬件寄存器250。

后端模块270可以与硬件寄存器250、任务队列280、I/O接口核心逻辑290和网络接口核心逻辑295连接,以处理上述数据分组发送或接收任务。为了进行数据分组发送任务,设备驱动器可以通过在任务队列中***新的数据分组发送任务来更新任务队列280。该任务还与一组客户空间虚拟地址相关联,其中存储了要发送的数据。如上所述,客户空间虚拟地址可以被映射到I/O空间154a,并且在虚拟机120中运行的设备驱动器可以通过使用映射到I/O空间154a的客户空间虚拟地址执行存储器写操作来直接将数据存储在I/O空间154a中。在将数据存储在I/O空间154a中之后,设备驱动器还可以访问硬件寄存器250(经由I/O空间154a)并且写入通知寄存器,以通知后端模块关于数据分组发送任务。

在通知寄存器处检测到写活动之后,后端模块270可以从任务队列280中检索新的数据分组发送任务,并且获取与该任务相关联的一组客户空间虚拟地址。后端模块270可以向存储器转换模块208提交请求(例如,经由IOMMU),以将客户空间虚拟地址转换为例如一组I/O空间物理地址(例如,I/O空间154b)。基于转换后的I/O空间物理地址,后端模块270可以执行存储器读操作,以获取要从虚拟机120发送的数据。后端模块270可以将数据提供给I/O接口核心逻辑290以进行其他处理(例如,执行8b/10b编码等),然后将处理后的数据提供给网络接口核心逻辑295。然后,网络接口核心逻辑295可以基于处理后的数据生成数据分组,并且将数据分组释放到网络114。在从网络接口核心逻辑295接收到数据分组发送已经完成的通知之后,后端模块270可以通知在虚拟机120中操作的设备驱动(例如,通过引发中断)有关该完成。可以将通知直接发送到虚拟机120(例如,通过将与中断有关的数据写入虚拟机可访问的客户存储空间)或虚拟化控制器206,其随后将与中断有关的数据写入客户存储器空间,以通知设备驱动器有关该完成。

另一方面,为了处理数据分组接收,后端模块270可以从网络接口核心逻辑295接收从接收到的数据分组中提取的数据。后端模块270可以从任务队列280确定在队列的顶部存在未决数据分组接收任务,以及接收到的数据分组是针对该未决数据分组接收任务的。后端模块270还可以从任务队列280获取与待处理数据分组接收任务关联的一组客户空间虚拟地址,并且向IOMMU提交请求,以将客户空间虚拟地址转换为I/O空间154b中的一组I/O空间物理地址。后端模块270还可以将接收到的分组数据提供给I/O接口核心逻辑290进行其他处理(例如,执行8b/10b解码等),然后使用一组I/O空间物理地址执行存储器写操作,以将处理后的数据存储在I/O空间154b中。后端模块270还可以通过例如引发中断来通知虚拟机120中操作的设备驱动器(例如,设备驱动器126a)有关接收的分组数据。接收到通知后,设备驱动器可以从队列280的顶部的待处理数据分组接收任务获取客户空间虚拟地址,并且执行存储器读操作,以获取接收到的分组数据。

现将参考图3,其示出了根据本申请的实施例的提供对硬件设备的虚拟机访问的示例性方法300。该方法可以由例如管理程序124结合图2A的客户软件堆栈126和虚拟化模块210来执行。

在初始启动之后,在步骤302中,虚拟化控制器206指示主机驱动器202分配可由管理程序124访问的存储设备150的一部分(例如,主机空间154),并且将分配的存储设备150的一部分映射到硬件寄存器和I/O接口110a的存储设备。在从虚拟化控制器206接收到指令之后,在步骤304中,主机驱动器202分配映射到I/O接口110a的I/O空间(例如,I/O空间154a),并且返回一组I/O空间物理地址。在接收到映射到硬件寄存器和I/O接口110a的存储设备的一组物理地址之后,在步骤306中,虚拟化控制器206生成虚拟化控制器可访问的一组虚拟地址集,并且将一组虚拟地址映射到从主机驱动器202接收的一组物理地址。然后,在步骤308中,虚拟化控制器206将一组主机空间虚拟地址提供给虚拟机创建模块204,并且指示虚拟机创建模块204创建虚拟机。

在步骤310中,虚拟机创建模块204从存储设备150分配客户空间(例如,客户空间152a),并且创建一组客户空间物理存储器地址(与客户空间152a相关联)与一组主机空间虚拟地址(从虚拟化控制器206接收并且映射到I/O空间154a)之间的映射。在步骤312,基于从虚拟化控制器206接收的一组虚拟地址与I/O空间物理地址之间的映射,虚拟机创建模块204还创建一组客户空间物理存储器地址与I/O空间物理地址之间的映射。在步骤314中,虚拟机创建模块204可以生成一组客户空间虚拟地址,这些客户空间虚拟地址映射到已经映射到I/O空间物理地址的一组客户空间物理地址,并且创建或者更新包括一组客户空间虚拟地址与I/O空间物理地址之间的直接映射的扩展页表(EPT)。

客户空间虚拟地址的生成可以是由于虚拟机尝试访问不存在或尚未映射到I/O空间的客户空间虚拟地址而引起的事件(例如VM_exit)。EPT可以存储在例如存储器转换模块208中。基于EPT的直接映射,在虚拟机中运行的设备驱动器可以通过执行一个或多个存储器读/写操作来访问硬件寄存器和I/O接口110a的存储设备,以控制I/O接口。

现将参考图4,其示出了根据本申请的实施例的,利用虚拟机操作硬件设备的示例性方法400。该方法可以由例如在图1A的虚拟机120和I/O接口110a中操作的设备驱动器126a执行。

在初始启动之后,在步骤402中,设备驱动器(例如,设备驱动器126a)可以从作为客户软件堆栈126的一部分的软件应用接收数据分组传输请求。在步骤404中,设备驱动器查阅EPT并且获取映射到I/O空间物理地址的一组客户空间虚拟地址。在步骤406,设备驱动器对客户空间虚拟地址执行存储器写操作,以存储要发送的数据。然后,在步骤408中,设备驱动器执行存储器写操作以将新的数据分组发送任务添加到任务队列280。存储器写操作包括,例如,将新的数据发送任务与存储要发送的数据的一组客户空间虚拟地址相关联。在步骤410中,设备驱动器还写入I/O接口110a的通知寄存器,以通知接口有关新的数据分组发送任务。设备驱动器基于客户空间虚拟地址与EPT中存储的I/O空间物理地址之间的直接映射,访问任务队列280和(硬件寄存器250的)通知寄存器。

在检测到对通知寄存器的写入之后,在步骤412中,后端模块270可以从任务队列280中检索新的数据分组发送任务,并且获取与该任务相关联的一组客户空间虚拟地址。后端模块270可以向存储器转换模块208提交请求(例如,经由IOMMU),以将客户空间虚拟地址转换为例如一组I/O空间物理地址(例如,I/O空间154b)。在步骤414中,基于转换的I/O空间物理地址,后端模块270可以执行存储器读操作以获取要从虚拟机120发送的数据,并且将该数据提供给网络接口以进行发送。在从网络接口接收到数据分组发送已经完成的通知之后,在步骤416中,后端模块270可以通知虚拟机120中运行的设备驱动有关该完成。通知可以采用中断的形式。

现将参考图5,其示出了与根据本申请的实施例的利用虚拟机执行网络分组接收的示例性方法500。该方法可以由例如在虚拟机120中操作的设备驱动器和图1A的I/O接口110a来执行。

在初始启动之后,在步骤502,后端模块270从网络接口接收从接收到的数据分组中提取的数据。在步骤504中,后端模块270可以从任务队列280获取与待处理数据分组接收任务相关联的一组客户空间虚拟地址。在步骤506中,后端模块270可以将客户空间虚拟地址转换为一组I/O空间物理地址(例如,在I/O空间154b中)。可以通过例如向IOMMU提交请求来执行转换。在步骤508中,后端模块270可以使用一组I/O空间物理地址来执行存储器写操作,以将数据存储在I/O空间中。在步骤510中,后端模块270可以通知虚拟机120中操作的设备驱动器(例如,通过引发中断)有关接收的分组数据。在步骤512中,一旦接收到该通知,设备驱动器可以从队列280中的待处理数据分组接收任务中获取客户空间虚拟地址。然后,在步骤514中,设备驱动器执行存储器读操作以获取接收到的分组数据,并且将接收到的分组数据提供给客户软件堆栈126。

图6是示例性计算机系统600的框图,利用该示例性计算机系统600可以实现本文描述的实施例。计算机系统600包括总线602或用于通信信息的其他通信机制,以及与总线602耦合以处理信息的一个或多个硬件处理器604(为简单起见而表示为处理器604)。硬件处理器604可以是例如一个或微处理器。

计算机系统600还包括耦合到总线602的主存储器606,例如随机存取存储器(random access memory,RAM)或其他动态存储设备,其用于存储信息和将由处理器604执行的指令。主存储器606还可以用于在执行要由处理器604执行的指令期间存储临时变量或其他中间信息。这样的指令在被存储在处理器604可访问的非暂时性存储介质中之后,将计算机系统600渲染成专用于执行指令中指定的操作的专用机器。

计算机系统600还包括耦合到总线602的只读存储器(read only memory,ROM)608或其他静态存储设备,用于存储用于处理器604的静态信息和指令。提供诸如磁盘、光盘或USB拇指驱动器(闪存驱动器)等的存储设备610,并且将其耦合到总线602以存储信息和指令。

计算机系统600可以经由总线602耦合到显示器612,例如阴极射线管(cathoderay tube,CRT)、液晶显示器(liquid crystal display,LCD)或触摸屏,用于向计算机用户显示信息。包括字母数字和其他键(key)的输入设备614耦合到总线602,用于将信息和命令选择通信给处理器604。用户输入设备的另一种类型是光标控制616,例如鼠标、轨迹球或光标方向键,用于将方向信息和命令选择通信给处理器604并且用于控制显示器612上的光标移动。输入设备通常在两个轴(第一轴(例如,x)和第二轴(例如,y))上具有两个自由度,从而允许该设备指定平面中的位置。在一些实施例中,可以经由在没有光标的情况下接收触摸屏上的触摸来实现与光标控制相同的方向信息和命令选择。

计算系统600可以包括实现图形用户界面(graphical user interface,GUI)的用户界面模块,其可以被存储在大容量存储设备中作为由一个或多个计算设备执行的可执行软件代码。该模块和其他模块可以通过示例的方式包括组件(例如软件组件、面向对象的软件组件、类组件和任务组件)、处理、功能、字段、过程、子例程、程序代码段、驱动器、固件、微码、电路、数据、数据库、数据结构、表、数组和变量。这些模块可以包括例如图2A的管理程序124的组件。

计算机系统600可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,其与计算机系统结合使计算机系统600成为或编程为专用机器。根据一些实施例,响应于处理器604执行包含在主存储器606中的一个或多个指令的一个或多个序列,计算机系统600执行本文所述的操作、功能、技术和其他特征。可以从诸如存储设备610之类的另一存储介质将这样的指令读入主存储器606。执行包含在主存储器606中的指令序列使处理器604执行本文所述的方法步骤(例如,图3-5的方法300-500)。在替代实施例中,可以使用硬连线电路代替软件指令或与软件指令结合使用。

本文使用的术语“非暂时性介质”是指存储使机器以特定方式运行的数据和/或指令的任何非暂时性介质。这样的非暂时性介质可以包括非易失性介质和/或易失性介质。非易失性介质可以包括例如光盘或磁盘,例如存储设备610。易失性介质可以包括动态存储器,例如主存储器606。非暂时性介质包括例如软盘、柔性盘(flexible disk)、硬盘、固态驱动器、磁带或任何其他磁数据存储介质、CD-ROM、任何其他光学数据存储介质、任何有空的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、闪存、寄存器、高速缓存、任何其他存储芯片或盒带以及其网络版本的图案。

非暂时性介质不同于传输介质,但可以与传输介质结合使用。传输介质可以参与在存储介质之间传输信息。例如,传输介质可以包括同轴电缆、铜线和光纤,包括构成总线602的线。传输介质也可以采用声波或光波的形式,例如在无线电波和红外数据通信期间生成的声波或光波。

各种形式的介质可以涉及将一个或多个指令的一个或多个序列传送给处理器604用于执行。例如,指令最初可以承载在远程计算机的磁盘或固态驱动器上。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统600本地的调制解调器可以在电话线上接收数据,并且使用红外发射器将数据转换为红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路可以将数据放置在总线602上。总线602将数据传送到主存储器606,处理器604从其中检索并执行指令。由主存储器606接收的指令可以可选地在处理器604执行之前或之后存储在存储设备610上。

计算机系统600还可以包括耦合到总线602的通信接口618。通信接口618可以提供耦合到可以连接到局域网622的网络链路620的双向数据通信。例如,通信接口618可以是集成服务数字网络(integrated services digital network,ISDN)卡、电缆调制解调器、卫星调制解调器或调制解调器,以提供到对应类型的电话线的数据通信连接。作为另一个示例,通信接口618可以是局域网(local area network,LAN)卡,以提供到兼容LAN的数据通信连接。无线链接也可以实现。在任何这样的实现中,通信接口618可以发送和接收电、电磁或光信号,其携带表示各种类型的信息的数字数据流。

网络链路620通常可以通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路620可以提供通过局域网622到主机计算机624或由互联网服务提供商(InternetService Provider,ISP)626操作的数据设备的连接。ISP 626可以依次通过现在通常称为“因特网(Internet)”628的全球分组数据通信网络提供数据通信服务。局域网622和因特网628都使用携带数字数据流的电、电磁或光信号。通过各种网络的信号和在网络链路320上并通过通信接口618的信号可以携带传输到计算机系统600和来自计算机系统600的数字数据,这些信号可以是传输介质的示例形式。

计算机系统600可以通过网络、网络链路620和通信接口618发送消息并接收数据,包括程序代码。在因特网示例中,服务器630可以通过因特网628、ISP 626、局域网622和通信接口618发送针对应用程序的请求的代码。

接收到的代码可以在接收到时由处理器604执行,和/或存储在存储设备610或其他非易失性存储器中,以供以后执行。在一些实施例中,服务器630可以提供用于在显示器上显示的信息。

通过考虑本文公开的本发明的说明书和实践,本发明的其他实施方式对于本领域技术人员将是显而易见的。本申请旨在覆盖遵循本发明的一般原理的本发明的任何变型、使用或改编,并且包括在本领域的已知或惯常实践之内的与本申请的偏离。说明书和示例仅被认为是示例性的,本发明的真实范围和精神由所附权利要求书指示。

应当理解,本发明不限于上面所描述的并且在附图中示出的确切构造,并且在不脱离本发明的范围的情况下可以进行各种修改和改变。旨在本发明的范围应仅由所附权利要求书限制。

25页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:地址转译数据无效化

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类