虚拟机环境中的输入/输出设备与物理存储器之间的直接存储器访问的制作方法

文档序号:6569145阅读:157来源:国知局
专利名称:虚拟机环境中的输入/输出设备与物理存储器之间的直接存储器访问的制作方法
技术领域
本发明一般地涉及虚拟机环境,其中客户操作系统在计算设备的虚拟机中运行,更具体地说,涉及此类虚拟机环境中的输入/输出(1/0)设备与存储器之间的直接存储器访问。
背景技术
以往,单个计算设备运行单个操作系统。例如,每个计算机用户都被 分配有他或她自己的客户端计算设备,并且计算设4^运行其中用户可以根 据需要运行应用程序的操作系统。同样,服务器计算设备运行可运行应用 程序的单个操作系统。但是,此类计算机体系结构具有缺点。首先,它成本高,因为无论是 否处于使用状态,每个计算设备都需要一整套处理器、存储器和输A/输出 d/o)设备以正常运行。其次,使用此类体系结构可能效率较低。在任何 给定时间,给定计算设备可能未执行工作,并且更确切地说处于闲置状态, 等待在工作负荷增加时执行任务。因此,已经开发一种技术,其中多个操作系统能够在单个计算设备中 运行,至少共享计算设备的存储器和处理器。此类技术被称为虚拟化。通过虚拟化, 一个给定计算设备具有多个虚拟机(VM)或VM环境,其中 客户操作系统在每个VM或VM环境中运行。因此,多个计算机用户的客 户操作系统可以同时在单个计算设备(例如单个服务器计算设备)上运行。 当工作负荷需求高时,可以实例化和运行更多的VM。当工作负荷低时, 可以暂停VM。一种类型的虛拟化技术被称为完全虚拟化。完全虚拟化具有能够与"现 成(off-the-shelf)"操作系统一起使用而无需对这些操作系统进行任何修改的优点。这对于基于x-86的操作系统(例如各种版本的Microsoft Windows⑧操作系统和各种版本的Linux操作系统)尤其有利。因此,可 以建立完全虚拟化的环境,其中Microsoft Windows⑧操作系统和/或Linux 操作系统的不同实例可以同时在同一计算设备的不同VM (相互隔离)中 运行,而不必修改操作系统。但是,完全虚拟化具有一个突出的缺点。在完全虚拟化中,通常将仿 真由VM环境中运行的客户操作系统对计算设备的I/O设备的I/O访问。 也就是说,客户操作系统并不直接访问1/Oi殳备,而是将来自操作系统的 1/0请求发送到VM管理器或系统管理程序,后者管理所有的IO请求,相 应地处理这些请求并根据需要将这些请求发送到I/O设备。因此,完全虚 拟化通常在IO期间导致性能降低,因为VM管理器必须代表所有VM来 监4见和仿真所有IO操作。另一种类型的虚拟化技术被称为准虚拟化。在准虚拟化中,操作系统 软件利用系统管理程序暴露的编程接口来执行IO和DMA操作。通常,在 准虚拟化的模型中,将创建特殊的分区或VM以管理所有IO。在准虚拟化 的模型中,通常存在极少(如果有)的仿真,从而实现了 "更瘦,,或更轻 量的系统管理程序。因此,准虛拟化具有比完全虚拟化提供显著更佳I/O 性能的优点。对于I/O性能至关重要的环境,准虚拟化可以是理想的解决 方案。但是,准虛拟化存在一个非常突出的缺点,即必须定制或完全重写客 户操作系统以便在准虚拟化的环境中运行。也就是说,"现成"操作系统 (例如各种版本的Microsoft Windows⑧操作系统和各种版本的Linux操作 系统)如果不进行显著和重要的修改,则无法在准虛拟化的环境中运行。在完全虚拟化的系统中,没有硬件帮助而纯粹以软件监视和仿真I/O 的相关开销相当可观。在这种情况下,硬件帮助指一组能够在VM中的单 个DMA设备与存储器之间进行安全地址转换的硬件转换表。当前,x86 处理器体系结构本身没有集成DMA转换功能。但是,某些基于x86的系 统确实包含能够转换或重新映射平台体系结构中使用的芯片组中的DMA地址空间的硬件特性。 发明内容本发明涉及虚拟机(VM)环境中的输入/输出(I/O)设备与物理存储 器之间的直接存储器访问(DMA)。本发明的一个实施例的计算设备包括 I/O设备、在计算设备的VM上运行的操作系统(OS )、用于在VM中运 行的I/O设备的设备驱动器、在计算设备中运行的VM管理器(VMM) 或系统管理程序、I/O转换硬件,以及用于在VM中运行的OS的硬件抽 象组件。I/O转换硬件用于在I/O设备与物理存储器之间将分配给OS的计 算设备的物理地址转换为机器地址。硬件抽象组件与VMM协同交互以便 能够通过I/O转换硬件从DMA I/O设备访问系统存储器。要指出的是,在此所述的1/0设备实际上集成了两个组件设备本身 (例如存^i殳备本身)和设备的I/O控制器(管理对设备进行的访问以及 从设备进行的访问)。I/O控制器管理对存储器和设备进行的DMA以及从 存储器和设备进行的DMA。在一个实施例中,实现两种基本的I/0访问方 法。首先,VM管理器使操作系统能够访问1/0控制器,并且因此允许操 作系统直接对控制器编程。其次,VM管理器利用1/0转换硬件以使I/0 控制器能够直接对分配给客户操作系统的存储器空间进行寻址。第一种类型的访问方法不依赖I/O转换硬件来使操作系统能够访问 1/0控制器,并且此类型的访问被称为编程的1/0 (与DMA相反),并且 此地址空间的转换由x86页表处理。相比之下,第二种访问方法使I/0控 制器能够直接读取和写入存储器,并且这是本发明的实施例提供的DMA 优点的关键所在。因此,1/0控制器实际上不是DMA操作的目标,而是DMA操作的发 起方,其中分配给操作系统的存储器和设备本身是目标。OS可以未经修改 便在计算设备的VM中运行,只是硬件抽象組件特别地能够与VMM协同 交互。也就是说,与需要对OS进行重要更改的准虚拟化的环境不同,本 发明的虚拟化环境不需要对OS进行重要更改。相反,只需要设计用于OS的新石更件抽象组件,并且几乎所有的OS (例如各种版本的Microsoft Windows⑧操作系统和各种版本的Linux搮作系统)都使第三方能够为其 未以其他方式更改的OS提供新的硬件抽象组件。换言之,虽然准虚拟化 环境需要对OS进行更改,但是本发明的虚拟化环境不需要对OS进行广 泛更改,而是只需要对硬件抽象组件进行更改,所述硬件抽象组件以相对 低的级别将访问局限于DMA硬件。本发明的另一个实施例的计算设备包括一个或多个I/O设备、 一个或 多个VM环境、I/O转换硬件以及VMM。每个VM环境包括OS、用于 1/0设备的设备驱动器,以及用于OS的硬件抽象组件。1/0转换硬件为在 每个VM环境的至少一个I/O设备与物理存储器之间的DMA将分配^ 个VM环境的OS的物理地址转换为I/O设备的机器地址。VMM管理VM 环境,并且能够允许在VM环境的至少一个I/O设备与存储器之间的 DMA,并且能够拒绝在VM环境的I/O设备与存储器之间的DMA。因此,某些VM环境的某些OS可以具有用于某些I/O i殳备的DMA, 并且其他VM环境的其他OS可能没有用于这些I/O设备的DMA。换言之, VMM根据每个OS允许用于给定I/O设备的设备驱动器以及给定OS的设 备驱动器是否允许在I/O设备之间进行DMA或对I/O设备进行虛拟化I/O 访问。通过这种方式,可以完全虛拟化本发明的至少某些实施例提供的虛 拟化环境,以使"现成"和未经修改的OS不需要新的硬件抽象组件便可 在此环境中运行。但是,可以不完全虛拟化相同的虚拟化环境,以使具有 此类新硬件抽象组件以及需要高I/O性能的OS可以进行DMA.因此,虛拟化环境可以支持"混合和匹配的"操作系统,其中某些操 作系统利用DMA而某些操作系统对这些I/O设备进行虚拟化I/O访问。 因此,本发明的至少某些实施例的虛拟化环境可以在每个OS和每个I/O 设备的基础上提供动态虛拟化,范围从实现最高兼容性的完全虚拟化到实 现最高性能的非完全虚拟化。提供的非完全虛拟化仍比准虚拟化更有利, 因为OS不必进行重要修改,而是只需要修改其硬件抽象组件。也就是说,m扭wdfc * & s丄"a 乂《 a i_ :士',在A 4、,4s本发明的一个实施例的一种方法用于在计算设备中运行的VM环境中 的计算设备的物理存储器与I/O设备之间的DMA。在计算设备中运行的 VMM将I/O转换硬件编程为将分配给VM环境的计算设备的物理地址转 换为VM的机器地址。因此,用于在VM环境中运行的I/O设备的设备驱 动器可以启动到ii/来自I/O设备的DMA,以便I/O转换硬件将设备驱动 器提供的物理地址转换为VM的物理存储器的机器地址,以及将所述机器 地址转换为所述物理地址。在本发明的另一个实施例的一种方法中,在计算设备的VM环境中运 行的设备驱动器调用也在VM环境中运行的硬件抽象组件以建立用于计算 设备的I/O设备的DMA。硬件抽象组件通过与计算设备中的VMM通信 来判断是否针对I/O设备启用DMA。如果未启用DMA,则VMM在VMM 的软件中仿真设备驱动器与1/0设备之间的所有I/0。如果启用DMA,则 VMM将计算设备的I/O转换硬件编程为将分配给VM环境的计算设备的 物理地址转换为VM的机器地址,以便能够在I/O设备与存储器之间发生 (非仿真的)DMA。通过阅读后面的详细说明以及通过参考附图,本发明的其他实施例、 方面和优点将变得显而易见。


在此参考的附图构成说明书的一部分。除非另行明确指明,否则附图例,并且未进行相反暗示。图1是根据本发明的实施例的用于在计算设备中实现虚拟机(VM)环境的计算机体系结构的示意图;图2是根据本发明的实施例的用于实现VM环境中来自计算设备的输 入/输出(I/O)设备的直接存储器访问(DMA)的计算设备体系结构的示意图;图3是根据本发明的实施例的用于在VM环境与I/O设备之间初始化 1/0访问(虚拟化的DMA或非虛拟的DMA)的方法的流程图;以及图4是根据本发明的实施例的用于在VM环境与1/0设备之间实现I/0 访问(虛拟化的DMA或非虚拟的DMA)的方法的流程图。
具体实施方式
在本发明的示例性实施例的以下详细说明中,参考了形成本说明一部 分的附图,并且其中通过示例的方式示出了其中可以实现本发明的特定示 例性实施例。这些实施例被充分详细地描述,以便使得本领域的技术人员 能够实现本发明。可以使用其他实施例并且可以在不偏离本发明的精神或 范围的情况下做出逻辑的、机械的更改和其他更改。因此,不应以限制的 意义来理解以下的详细说明,并且本发明的范围仅由所附的权利要求来限 定。图1示出了根据本发明的实施例的计算设备100。计算设备100包括虚拟机(VM)管理器102,以及多个虚拟机(VM) 104A、 104B.....104N(统称为VM104) 。 VM104也可以称为VM环境。VM 104相应地在操 作系统(OS) 106A、 106B..... 106N (统称为OS 106)中运行。每个VM 104都是一个虛拟化环境,可使相应的一个OS 106在其中运 行,就像正在讨论的OS是在计算设备100中运行的唯一 OS那样。通过 这种方式,在多个VM104中,多个OS106可以在计算设备100中运行。 即,VM 104是这样的VM环境其中对于VM 104中运行的软件,每个 VM 104都显示为传统的硬件环境,例如计算i殳备100的唯一硬件环境。VM管理器102管理VM 104。也就是说,VM管理器102允许管理单 独的VM 104,例如其启动、关闭和维护。当需要在计算设备100中运行 新的VM时,将在VM管理器102中启动它,并且当需要关闭现有VM时, 将在VM管理器102中关闭它。VM管理器102通常也称为系统管理程序。计算i殳备100包括硬件,例如一个或多个处理器108、存储器110,以 及输入/输出(1/0)设备112A、 112B、…、112M(统称为I/0设备112)。如本领域的技术人员可理解的,除了图1中示出的硬件以外或代替图1中示出的硬件,计算设备100还可以具有其他硬件。存储器110由VM 104 共享。存储器110可通过具有一系列物理存储器地址的物理地址空间来寻 址。在一个实施例中,每个VM 104都分配有一部分物理地址空间,以<更 为每个VM 104分配存储器110的一部分物理存储器地址。处理器108可以由VM 104共享,或者每个处理器108可以由单个VM 104使用。在一个实施例中,处理器108是x86处理器,并且因此通常不 是非常适于虚拟化的处理器。也就是说,x86处理器并非内在地是为虚拟 化而提供的处理器,并且因此没有特定于虚拟化的处理器命令或操作码。 因此,可以将本发明的实施例与并非为虚拟化而提供的处理器一起使用。 此类实施例可以在x86操作系统(例如各种版本的Microsoft Windows⑧操 作系统和各种版本的Linux操作系统)中实现。I/O设备112可以包括存储设备(例如盘驱动器设备)、通信设备(例 如网络适配器)、输出设备(例如显示设备及其连接的显示设备适配器), 以及本领域的技术人员可理解的其他类型的1/0设备。如随后将在详细说 明中更详细地描述的那样,在一个实施例中,每个I/0设备112可以专用 于或保留给一个VM 104,或者在另一个实施例中,它可由多个VM 104 共享。例如,具有存储设备接口适配器的给定存储设备可以专用于或保留 给一个VM 104,以便只有此VM才可以使用此存储设备,或者它可由多 个VM 104共享,以l更所有这些VM都可以使用此存#^殳备。此外,对于给定一个VM 104所访问的每个I/0设备112,正在讨论 的VM可以对此I/0设备具有两种不同类型之一的访问。首先,VM可以 对I/O设备进行虛拟化的I/O访问,例如对I/O i殳备进行的虛拟化直接存 储器访问(DMA)。在虛拟化访问中,来自VM的I/0请求以及来自I/O 设备的I/O响应通过VM管理器102。换言之,VM管理器102处理VM 与I/O设备之间的所有I/O访问,其中访问是虛拟化的。其次,VM可以与I/O设备进行DMA。在DMA中,来自VM的I/O 请求以及来自I/O设备的I/O响应不通过VM管理器102。确切地i兌,此类请求和响应直接从正在讨论的VM到正在讨论的I/O设备,以及直接从 正在讨论的I/O设备到正在讨论的VM。真正的DMA要比虚拟化的I/O 访问提供更佳的性能,但是确实需要专用的硬件抽象组件才能发生,而虚 拟化的I/O访问则不需要,如随后将在详细说明中更详细地描述的那样。 图2更详细地示出了根据本发明的实施例的计算设备100的一部分。 在图2中,仅示出单个VM 104A,以及示出单个I/0设备112A,作为所 有VM 104以及所有I/O设备112的代表。此外,为了说明方便和清晰, 图2中未示出处理器108和存储器110。但是,在图2的实施例中的计算 设备100中存在其他硬件,即I/O转换硬件216。现在说明图2的计算设 备100的各个组件,然后通过两种方法说明它们的运行以及相互联系的方 式。VM104A分为用户才莫式202和内核模式204。诸如应用程序206之类 的应用程序在用户模式202运行,而用于VM104A的OS 106A在内核模 式204中运行。可以将用户模式202和内核模式204视为VM 104A的两 种运行模式。在用户模式202中运行的应用程序仅可访问用户模式202中 提供的地址空间,这样当用户模式过程需要位于内核模式204中的数据时, 它将调用OS 106A提供的系统服务以获取此数据。用户模式202和内核才莫式204之间存在区别,以便可以为在内核模式 204中运行的关键系统过程提供一定量的保护或安全性,从而无法直接从 用户模式202中影响这些过程。因此,内核模式204包含VM 104A的内 核,其是VM 104A的基础部分,其中包括为在用户模式202中运行的应 用程序提供基本服务的OS 106A。例如,从用户模式202对I/O设备112A 进4亍的访问通过VM 104A的内核才莫式204完成。除了应用程序206之外,还示出了位于用户模式202中的代表性緩冲 区208。緩冲区208存储从应用程序206发送到I/O设备112A以及从I/O 设备112A发送到应用程序206的数据,其中在程序206与I/O设备112A 之间提供DMA。随后将在详细说明中更详细地描述此緩冲区208的使用。除了 OS 106A之外,内核模式204还包括用于OS 106A的硬件抽象组件210,以及用于I/0设备112A的设备驱动器212。硬件抽象组件210 在某些情况下可以被视为OS 106A的一部分。但是,硬件抽象组件210是 与OS 106A的其他组件分离的組件,并且相对于OS 106A其他部分处于 显著较低的级别。因此,可以说OS 106A未经修改,即使已修改硬件抽象 组件210也是如此,因为组件210已被才莫块化。硬件抽象组件210对用于OS 106A的计算设备100 (例如I/O设备 112A)的硬件进行抽象化。换言之,组件210对OS 106A隐藏与计算设备 100的硬件连接的细节。因此,组件210的功能类似于应用编程接口( API), 并由程序员用于编写与设备无关的应用程序。例如,程序员只需编写将数 据存储到存#^殳备的代码,而不必针对可能存在于计算设备100中的每种 特定类型的存^i殳备编写代码。在某些类型的操作系统(例如各种版本的 Microsoft Windows⑧操作系统)中,组件210被称为硬件抽象层。虽然硬件抽象组件210提供计算设备100的所有硬件的总体级别抽象, 但是设备驱动器212使OS 106A和应用程序206能够与特定硬件通信。设 备驱动器212专用于I/O设备112A,并且包含专门编写以便与I/O设备 112A通信的代码。设备驱动器是将操作系统链接到外围设备的程序例程。 因此,设备驱动器212包含与I/O设备112A连接所必需的精确机器语言。硬件抽象組件210和设备驱动器212共同运作以提供对I/O设备112A 的访问。如随后将在详细说明中更详细地描述的,可以说设备驱动器212 向石更件抽象组件210注册,并且通过这种方式向OS 106A并且从而向在 VM 104A的用户模式202中运行的应用程序206显示I/O设备112A。要 指出的是,硬件抽象组件210提供的设备驱动器212以及实际上最终VM 管理器102提供对I/O设备112A的DMA或虚拟化访问。此处VM管理器102包括-相关的特定组件,即VM内核214。 VM内 核214是VM管理器102的内核214,并且在此用于提供从VM管理器102 访问I/O设备112A的必需例程。此外,VM内核214提供用于在I/O设备 112A与VM 104A之间建立DMA,或用于提供从VM 104A对I/O设备 112A进行虚拟化I/O访问的必需例程。VM内核214通过设备驱动器212与硬件抽象组件210交互以为I/O 设备112A启用DMA,其中从I/O设备112A对VM 104A进行的此类DMA 已被授权。此外,如果此类DMA未被授权,则VM内核214将工作以便 虚拟化从VM 104A对I/O设备112A进行的I/O访问,可以将其视为常规 操作。可以理解为何虚拟化的I/0访问慢于非虚拟化的DMA,因为虚拟化 的I/O访问意味着所有从VM 104A进行的访问在继续到I/O设备112A之 前必须通过VM管理器102的VM内核214,并且因此所有此类I/O访问 首先在软件中净皮虚拟化。I/O转换硬件216将I/O设备112A的机器地址转换为计算设备100的 存储器110的物理地址,以及将所述物理地址转换为所述机器地址。这对 于从I/O设备112A对VM 104A进行的DMA而言是必需的。也就是说, I/O设备112A的机器地址包括专用于或保留给I/O设备112A的计算设备 100的地址空间。对于非VM环境中的常规DMA,可以通过使应用程序借 助设备驱动器直接与这些机器地址通信来实现DMA。但是,在与图2的实施例的VM环境类似的VM环境中,分配给VM 104A的地址空间可能不包括I/O设备112A的机器地址,而是包括计算设 备100的存储器110的一部分物理地址。因此,当授权设备驱动器212通 过硬件抽象组件210与VM内核214协同交互来对I/O设备112A进行DMA 时,从VM104A的角度看,此类DMA不是通过I/0设备112A的机器地 址而是通过相应的物理地址完成的。因此,当进行DMA时,1/0转换硬件216会即时将I/0设备112A的 机器地址转换为分配给VM 104A的物理地址。此类转换可以向上进行(从 VM 104A到I/O设备112A),向下进行(从I/O设备112A到VM 104A), 或者同时向上和向下进行。此类I/O转换硬件216的一个实例是可从位于 纽约阿蒙克的国际商业机器公司获得的I/O转换硬件,作为IBM的EXA 体系结构平台的一部分。因此,如通常那样,图2的实施例可以提供从VM 104A对I/0设备 112A进行的虛拟化I/O访问,并且其中此类I/O访问由VM内核214在软件中进行虚拟化,以^/或者可以提供从VM 104A中的I/O设备112A进行 的DMA。在后一种情况下,利用I/O转换硬件216以使OS 106A能够直 接从I/0设备112A启动DMA。因此,1/0转换硬件216有效地允许隔离 或包含的DMA,因为它控制了可以与OS 106A来回进行DMA的物理地 址范围或空间。利用硬件抽象组件210实现和隔离I/O转换接口以提供此 类DMA,这样OS106A本身不必被修改,而可以是"现成"OS。此外,VM内核214提供了一组最低限度的系统管理程序调用,使得 硬件抽象组件210调用VM内核214以判定是否为VM 104A授权DMA。 如果授权DMA,则组件210将通知设备驱动器212可以完成此类DMA, 并且VM内核214将I/O转换硬件216编程为将I/O设备112A的机器地 址正确转换为分配给VM 104A的物理地址,以及将所述物理地址正确转 换为所述机器地址。至少在这种意义下,石更件抽象组件210与VM内核214 交互协作以在VM 104A中的I/O设备112A与存储器之间提供DMA。因此,VM内核214提供混合虚拟化。首先,VM内核214可以针对 1/0设备112提供DMA,这样虽然不需要修改OS106A,但是必须编写或 修改硬件抽象组件210以便在设备驱动器212请求时利用此类DMA。其 次,VM内核214可以虚拟化对I/0设备112A进行的I/0访问,其中不必 重写或修改硬件抽象组件210。在一个实施例中,此类虛拟化的I/0访问 可以械^见为虚拟^:的DMA.图3示出了根据本发明的实施例的用于在VM 104A与I/O设备112A 之间初始化DMA(作为VM 104A中的OS 106A的更广泛初始化的一部分) 的方法300。 OS 106A如通常那样进行初始化(302 ),其中包括初始化硬 件抽象组件210以及用于1/0设备112A的设备驱动器212(对于OS 106A )。 在设备驱动器212的初始化期间(304),设备驱动器212尝试通过适当地 调用硬件抽象组件210以注册DMA来注册对I/O设备112A的DMA支持。 更具体地说,这可以被视为设备驱动器212调用石更件抽象组件210以建立 对I/O设备112A的访问。接下来,硬件抽象組件210调用VM内核214,更具体地说调用VM管理器102以判定OS 106A是否正在诸如VM 104A之类的VM环境中运 行(306 )。也就是说,只有硬件抽象组件210知道OS 106A正在VM 104A 中运行。OS 106A不知道它正在VM 104A中运行。这与准虚拟化环境截 然相反,在准虚拟化环境中OS被专门修改以知道它正在VM中运行。因 此,在本发明的实施例中,不必修改OS106A以在VM104A中运行,即 使其中在设备驱动器212与I/O设备112A之间提供DMA也是如此。因为 OS 106A实际上正在VM 104A中运行,所以VM管理器102 (即VM内 核214)将返回OS 106A正在VM环境中运行的事实。硬件抽象组件210接下来标识I/O设备112A,并调用VM内核214(更 具体地说调用VM管理器102)以判定是否为I/O设备112A启用DMA (308)。如本领域的技术人员可理解的,通过外围组件接口 (PCI)总线、 设备和/或功能来标识I/O设备112A。当组件210调用VM内核214以判 定是否为I/O设备112A启用DMA时,将向VM内核214提供此信息, 这样VM内核214也可以适当地标识组件210所查询的I/O设备112A。通 常这也可以被视为调用VM内核214以为i殳备驱动器212建立I/O设备 112A的DMA,如果为I/O设备112A启用(即授权或允许)DMA,则VM内核214 将4吏设备驱动器212和硬件访问组件210能够访问I/O设备112A的机器 地址(310)。通过访问已^皮分配给VM104A的相应物理地址来允许访问 I/O设备112A的机器地址。如已描述的,I/O转换硬件216将I/O设备112A 的机器地址转换为这些物理地址,以及将这些物理地址转换为所述机器地 址。通常,方法300的此部分310也可以净皮视为针对I/O设备112A启用 DMA。接下来,再次假设为1/Oi殳备112A启用DMA,则硬件抽象组件210 将构建用于记录通过设备驱动器212对I/O设备112A进行的DMA的表 (312)。这对于DMA而言是常规操作,如本领域的技术人员可理解的。 此处唯一的区别在于DMA在虚拟化环境中完成,在VM 104A中运行的设 备驱动器212与I/0设备112A之间完成。此外,如果为1/0设备112A启用了 DMA,则硬件抽象组件210向设备驱动器212返回已启用DMA( 314), 使得设备驱动器212可以接收来自I/O设备112A的DMA。但是,如果没有为I/O设备112A启用DMA,则VM管理器102的 VM内核214随后将虛拟化设备驱动器212与I/O设备112A之间的所有 I/O (316)。在本发明的一个实施例中,此类虚拟化在软件中完成并且可 以被视为虛拟化的DMA,因为此类"DMA"实际上是在软件中仿真的。 此类虚拟化I/O访问还可在尚未修改或编写硬件访问组件210以利用VM 104A的设备驱动器212与I/O设备112A之间的DMA的情况下完成。也 就是说,无论DMA是否被授权,"现成,,硬件访问组件210都可能不知 道访问VM内核214,因此始终向设备驱动器212返回未启用DMA,这样 由VM管理器102的VM内核214在软件中虛拟化对I/O设备112A进行的所有i/o访问。图4示出了根据本发明的实施例的用于在VM 104A与I/O设备112A 之间实际执行DMA的方法400,其中已经执行方法300的初始化。用户 模式应用程序206使用OS 106A提供的现有(即本机)I/O调用向I/O设 备112A发出I/0调用(402)。也就是说,应用程序206不必使用任何特 殊类型的I/0调用以实现对I/0设备112A进行的DMA。同样,OS106A 不必暴露任何特殊类型的I/O调用以允许对VM 104A中的I/O i殳备112A 进4亍DMA。确切地说,使用OS106A的标准I/O调用,这样不必修改OS 106A以实现对VM 104A中的I/O设备112A进行的DMA。接下来,与I/O设备112A关联的设备驱动器212执行;^L I/O准备 以完成对I/O设备112A进行的DMA (404 )。此类本才几I/O准备包括如 通常那样调用硬件抽象组件210,这样也不必修改设备驱动器212以利用 对VM 104A中的I/O设备112A进行的DMA。如本领域的技术人员可理 解的,完成组件210的调用以便在设备驱动器212中构建与要放置DMA 结果的緩冲区208对应的物理地址列表。硬件访问组件210又验证I/O设备112A是否实际启用DMA (406)。 例如,组件210可以参考先前构造的表(例如未在图3中具体示出的方法300的一部分),此表列出了已为其启用DMA的所有I/O设备。还可以通 过与VM管理器102通信而不是参考表来完成验证。要指出的是,即使未在VM 104A中启用DMA,硬件抽象组件210也 会准备所谓的^LDMA (408),其中由VM管理器102的VM内核214 在软件中虚拟化或仿真此类本机DMA。也就是说,组件210在它通常未 被专门编写以在本发明的实施例中的VM 104A提供DMA的情况下(如在 组件210未经修改并且为"现成"的情况下)准备DMA。在此类情况下, 硬件访问组件210如通常那样准备DMA,并且对于i殳备驱动器212而言 是常规操作,以便通过此方式最终由VM内核214仿真或虚拟化"DMA"。此类DMA准备在方法400的部分408中(即使其中无法提供实际 DMA)很重要,原因有两个。首先,它允许VM管理器102 (例如VM内 核214 )确定允许哪些VM 104实际接收来自I/O设备112A的DMA。换 言之,即使给定的VM未被允许实际接收来自I/O设备112A的DMA, VM仍能够通过VM管理器102中的虚拟化或仿真的DMA与I/O设备 112A通信。其次,它可以允许在本发明的实施例中使用未被特别修改以启 用来自1/0设备112A的实际DMA的硬件访问组件。再换言之,即使给定 的硬件访问组件无法利用对I/O设备112A进行的实际DMA,此组件是其 一部分的VM仍能够通过VM管理器102中以软件来虚拟化或仿真的DMA 与1/0设备112A通信。如果启用真正的DMA,则硬件抽象组件210将调用VM内核214 (410 )。在此调用中,硬件抽象组件210标识针对其完成DMA的I/O设 备112A。作为响应,VM管理器102的VM内核214^iiEI/0设备112A 的机器地址是否处于能够进行DMA的状态(412),如可以在方法300 (并 且未在图3中具体示出)中完成的那样。此外,VM内核214对I/0转换 硬件216编程。具体而言,VM内核214向硬件216指示分配给VM104A 的哪些物理地址与I/O设备112A的机器地址对应,使得I/O转换硬件216 能够将物理地址转换为机器地址,以及将机器地址转换为物理地址。VM 内核214最后向组件210指示!HiE I/O设备112A的机器地址以;Sj t I/O转换硬件216编程已成功完成。然后,硬件抽象组件210返回物理地址以供设备驱动器212用于DMA (414)。这些物理地址可以作为列表返回,并且用于或用作緩冲区208。 因此,设备驱动器212可以通过直接利用提供的物理地址写入I/O设备 112A来启动DMA (416)。然后,通过这些相同的物理地址启动从I/O设 备112A到緩沖区208的DMA (418 ) 。 I/O转换硬件216在部分416中向 上(从设备驱动器212到I/O设备112A),在部分418中向下(从I/O设 备112A到緩沖区208),或者同时向上和向下将I/0设备112A的物理地 址转换为机器地址。也就是说,部分416和418可以更具体地被称为VM 104A中的I/O设备112A与存储器之间的DMA。要指出的是,虽然已在此阐明和描述了特定实施例,但是本领域的技 术人员将理解,可以使用适于完成相同目的的任何布置代替示出的特定实 施例。因此,本申请旨在覆盖本发明的实施例的任何修改或变化。从而显 然地,本发明旨在仅由权利要求及其等同物来限定。
权利要求
1.一种计算设备,包括输入/输出(I/O)设备;客户操作系统(OS),其在所述计算设备的虚拟机(VM)上运行;设备驱动器,其用于在所述虚拟机上运行的所述I/O设备;虚拟机管理器(VMM),其在所述计算设备上运行;I/O转换硬件,其用于将分配给所述客户操作系统的所述计算设备的物理地址转换为所述I/O设备的机器地址;以及硬件抽象组件,其用于在所述虚拟机上运行的所述操作系统,所述硬件抽象组件与所述虚拟机管理器协同交互以使所述设备驱动器能够通过所述I/O转换硬件接收来自所述I/O设备的直接存储器访问(DMA)。
2. 如权利要求l中所迷的计算设备,其中所述虛拟机管理器包括虛拟 机内核,所述虚拟机内核与所述硬件抽象组件交互以使所述设备驱动器能 够通过所述I/O转换硬件从所述I/O设备进行直接存储器访问。
3. 如权利要求l中所述的计算设备,其中所述操作系统未经修改便在 所述计算设备的所述虛拟机上运行,只是所述硬件抽象组件能够与所述虛 拟机管理器协同交互以使所述设备驱动器能够从所述I/O设备进行直接存 储器访问。
4. 如权利要求l中所述的计算设备,其中所述虛拟机管理器能够允许 从所述I/O设备到所述设备驱动器的直接存储器访问以及拒绝从所述I/O 设备到所述设备驱动器的直接存储器访问。
5. 如权利要求4中所述的计算设备,其中所述虚拟机管理器通过在所 述虚拟机管理器的软件中虛拟化所述设备驱动器与所述I/O设备之间的所 有I/O来拒绝从所述I/O设备到所述设备驱动器的直接存储器访问。
6. 如权利要求l中所述的计算设备,其中所述I/0设4^被保留用于所 述计算设备的所述虛拟机并且无法对所述计算设备的其他虛拟机进行直接 存储器访问。
7.如权利要求l中所述的计算设备,其中所述计算设备的所述虚拟机 与所述计算设备的其他虛拟机共享所述I/O设备以便进行直接存储器访问。
8, 一种计算设备,包括 输入/输出(I/O)设备;在所述计算设备的虚拟机(VM)上运行的操作系统(OS); 用于在所述虚拟机上运行的所述I/O设备的设备驱动器; 在所述计算设备上运行的虚拟机管理器(VMM);1/0设备的机器地址的装置;以及用于与所述虚拟机管理器协同交互以使所述设备驱动器能够通过上述 用于将物理地址转换为机器地址的装置接收来自所述I/O设备的直接存储 器访问(DMA)的装置。
9. 如权利要求8中所述的计算设备,其中所述虚拟机管理器能够允许 从所述I/O设备到所述设备驱动器的直接存储器访问以及拒绝从所述I/O 设备到所述设备驱动器的直接存储器访问。
10. 如权利要求8中所述的计算设备,其中所述I/O设备被保留用于 所述计算设备的所述虛拟机并且无法对所述计算设备的其他虛拟机进行直 接存储器访问。
11. 如权利要求8中所述的计算设备,其中所述计算设备的所述虛拟 机与所述计算设备的其他虛拟机共享所述I/O设备以便进行直接存储器访问。
12. —种计算设备,包括 一个或多个输入/输出(1/0)设备; 一个或多个虛拟机(VM)环境,每个虚拟机环境包括 操作系统(OS);用于所述I/O设备的设备驱动器;以及 用于所述操作系统的硬件抽象組件;I/O转换硬件,其用于将分配给每个虚拟机环境的所述操作系统的物 理地址转换为所述I/O设备的机器地址,以便从至少一个所述I/O设备对 每个虛拟机环境的所述设备驱动器进行直接存储器访问(DMA);虛拟机管理器(VMM),其用于管理所述虚拟机环境,所述虚拟机 管理器能够允许从至少一个所述I/O设备到虚拟机环境的所述设备驱动器 的直接存储器访问以及拒绝从所述I/O设备到虚拟机环境的所述设备驱动 器的直接存储器访问。
13. 如权利要求12中所述的计算设备,其中所述虚拟机管理器通过与设备驱动器能够通过所述I/O转换硬件接收来自至少一个所述I/O设备的 直接存储器访问(DMA),来允许从至少一个所述I/0设备到虚拟机环境 的所述设备驱动器的直接存储器访问。
14. 如权利要求12中所述的计算设备,其中所述虚拟机管理器通过在 所述虛拟机管理器的软件中虚拟化所述设备驱动器与所述I/O设备之间的 所有I/O来拒绝从所述I/O设备到虚拟机环境的所述设备驱动器的直接存 储器访问。
15. 如权利要求12中所述的计算设备,其中所述虚拟机管理器包括虛 拟机内核,所述虚拟机内核与虛拟机环境的所述硬件抽象组件交互以使所 述i殳备驱动器能够通过所述I/O转换硬件从至少一个所述I/O设备进行直 接存储器访问。
16. 如权利要求12中所述的计算设备,其中虚拟机环境的所述操作系 统未经修改便在所述虚拟机环境中运行,只是所述硬件抽象组件能够与所 述虚拟机管理器协同交互以使所述设备驱动器能够从至少一个所述I/O设 备进行直接存储器访问。
17. 如权利要求12中所述的计算设备,其中每个I/0设备被保留用于 所述虚拟机环境中的一个虚拟机环境并且只能由为其保留所述I/O设备的 所述虚拟才几环境来访问。
18. 如权利要求12中所述的计算设备,其中所述I/0设备由所述虛拟机环境所共享,以便每个虚拟机环境都能够接收来自每个I/O设备的直接存储器访问。
19. 一种用于从计算设备的输"输出(1/OH殳备到在所述计算设备中 运行的虚拟机(VM)环境进行直接存储器访问(DMA)的方法,包括通过在所述计算设备上运行的虚拟机管理器(VMM),将I/O转换硬1/0设备的机器地址;以及从所述I/O设备对用于在所述虚拟机环境中运行的所述I/O设备的设 备驱动器进行直接存储器访问,以便所述I/O转换硬件将所述设备驱动器 提供的物理地址转换为所述I/O设备的机器地址,以及将所述机器地址转 换为所述物理地址。
20. 如权利要求19中所述的方法,初始地还包括由所述设备驱动器调用在所述虛拟机环境中运行的硬件抽象组件;以及由所述硬件抽象组件验证是否针对所述设备驱动器授权了直接存储器 访问,以便所述虚拟机管理器和所述硬件抽象组件协同交互以使所述设备驱 动器能够通过所述I/O转换硬件从所述I/O设备进行直接存储器访问。
21. 如权利要求20中所述的方法,其中所述硬件抽象组件用于在所述 虚拟机环境中运行的操作系统并且所述操作系统未经修改便在所述环境的 所述虛拟机中运行,只是所述硬件抽象组件能够与所述虚拟机管理器协同 交互以使所述设备驱动器能够接收来自所述I/O设备的直接存储器访问。
22. 如权利要求19中所述的方法,初始地还包括 由所述设备驱动器使用在所述虚拟机环境中运行的硬件抽象组件注册直接存储器访问;由所述硬件抽象组件调用所述虛拟机管理器以判定所述设备驱动器是 否正在所述虛拟机环境中运行;由所述硬件抽象组件调用所述虛拟机管理器以为所述设备驱动器建立与所述I/0设备的直接存储器访问;以及由所述虛拟机管理器启用从所述虚拟机环境对所述I/O设备的机器地 址的访问,以便所述虚拟机管理器和所述硬件抽象组件协同交互以使所述设备驱 动器能够通过所述I/O转换硬件接收来自所述I/O设备的直接存储器访问。
23. 如权利要求22中所述的方法,其中所述硬件抽象组件用于在所述 虚拟机环境中运行的操作系统并且所述操作系统未经修改便在所述环境的 所述虛拟机中运行,只是所述硬件抽象组件能够与所述虚拟机管理器协同 交互以使所述设备驱动器能够接收来自所述I/O设备的直接存储器访问。
24. —种方法,包括由在计算设备的虚拟机(VM)环境中运行的设备驱动器调用在所述 虚拟机环境中运行的硬件抽象组件,以建立所述设备驱动器对所述计算设 备的输入/输出(I/O )设备的访问;由所述硬件抽象组件通过与所述计算设备的虚拟机管理器(VMM) 通信来判定是否启用从所述I/O设备到所述设备驱动器的直接存储器访问 (DMA);如果未启用直接存储器访问,则所述虚拟机管理器在所述虛拟机管理 器的软件中虚拟化所述设备驱动器与所述I/O设备之间的所有I/O,以便 仿真所述设备驱动器与所述I/O设备之间的直接存储器访问;以及如果启用直接存储器访问,则所述虛拟机管理器将所述计算设备的I/O 转换硬件编程为将分配给所述虚拟机环境的所述计算设备的物理地址转换 为所述I/O设备的机器地址,以便能够在所述设备驱动器与所述I/O设备 之间进行直接存储器访问。
25. 如权利要求24中所述的方法,进一步包括,如果启用直接存储器 访问,则从所述I/0设备对所述设备驱动器进行直接存储器访问,以便1/0 转换表将所述设备驱动器提供的物理地址转换为所述I/O设备的机器地 址,以及将所述机器地址转换为所述物理地址。
26. 如权利要求24中所述的方法,初始地还包括由所述设备驱动器使用所述硬件抽象组件注册直接存储器访问;由所述硬件抽象组件调用所述虚拟机管理器以判定所述设备驱动器是 否正在所述虚拟机环境中运行;由所述硬件抽象组件调用所述虚拟机管理器以为所述设备驱动器建立 与所述I/0设备的直接存储器访问;以及如果针对所述虚拟机环境允许所述直接存储器访问的直接存储器访 问,则所述虛拟机管理器启用从所述虚拟机环境对所述I/O设备的机器地 址的访问。
27. 如权利要求24中所述的方法,其中所述硬件抽象组件用于在所述 虛拟机环境中运行的操作系统并且所述操作系统未经修改便在所述环境的 所述虛拟机中运行,只是所述硬件抽象组件能够与所述虛拟机管理器协同 交互以使所述设备驱动器能够接收来自所述I/O设备的直接存储器访问。
28. 如权利要求24中所述的方法,其中所述I/0设备被保留用于所述 虚拟机环境并且无法对所述计算设备的其他虚拟机环境进行直接存储器访 问。
29. 如权利要求24中所述的方法,其中所述虚拟机环境与所述计算设 备的其他虛拟机环境共享所述I/O设备以便进行直接存储器访问。
全文摘要
在虚拟机(VM)环境中的输入/输出(I/O)设备与存储器之间提供了直接存储器访问(DMA)。一种计算设备包括I/O设备、在所述计算设备的VM上运行的操作系统(OS)、用于所述I/O设备的设备驱动器、VM管理器(VMM)、I/O转换硬件,以及用于OS的硬件抽象组件。所述I/O转换硬件用于将分配给OS的计算设备的物理地址转换为所述I/O设备的机器地址。所述硬件抽象组件与所述VMM协同交互以使设备驱动器能够通过转换硬件在I/O设备与存储器之间启动DMA。所述OS可以未经修改便在所述计算设备的VM上运行,只是所述硬件抽象组件特别地能够与所述VMM协同交互以使所述设备驱动器能够接收来自所述I/O设备的DMA。
文档编号G06F9/455GK101278263SQ200680036546
公开日2008年10月1日 申请日期2006年10月4日 优先权日2005年10月8日
发明者J·L·伍德里奇, J·博策克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1