用于直接分配的设备的虚拟化操作的制作方法

文档序号:20921602发布日期:2020-05-29 14:13阅读:309来源:国知局
用于直接分配的设备的虚拟化操作的制作方法



背景技术:

在很多形式的计算机虚拟化中,由于许多已知的优点,机器或系统虚拟化已经变得很普遍。系统虚拟化涉及抽象计算机的硬件资源,并且将计算机呈现为虚拟机。被称为管理程序(hypervisor)或虚拟机监测器(vmm)的软件层直接运行在计算机的硬件上。管理程序通过虚拟机(vm)管理对计算机的硬件的访问,这些vm也称为分区、域或访客(guest)。每个vm是能够托管其自己的访客操作系统的软件环境或构造。管理程序管理vm对计算机的硬件、特别是处理硬件和存储器的共享。访客操作系统与计算机硬件之间的软件管理程序层的存在对访客操作系统几乎是透明的。

用于机器虚拟化的正在开发中的技术是将硬件设备直接分配给vm的能力。该技术(称为直接设备分配(dda))允许虚拟化层(“具体实施方式”中讨论的术语)将硬件设备移交给vm并且然后vm直接使用硬件设备而无需实质性(如果有的话)参与虚拟化层以访问和使用硬件设备。也就是说,硬件设备由vm使用,而无需虚拟化层进行虚拟化抽象或映射,并且在一些情况下,即使虚拟化层已经暂停vm或尚未调度cpu时间用于vm,主机和其他vm也都不使用硬件设备。

尽管dda为vm提供了快速的性能,但是存在只有本发明人才意识到的一些缺点。大多数机器虚拟化系统具有控制vm的执行状态的功能。用于控制vm状态的典型操作包括暂停、保存、恢复、迁移等。这样的操作在云环境中特别有用。云提供商可能需要对租户或访客透明地改变vm的状态。例如,主机可能需要对主机/虚拟化软件进行安全更新。正如只有发明人才意识到的,不同于通知租户或客户需要保存或关闭vm才允许重新启动主机,云提供商偏好能够透明地挂起租户的vm,使得主机能够被更新和重新启动,而不会显著干扰租户的vm的操作并且也不需要租户采取任何措施。尽管从理论上讲虚拟化系统可以保留或暂停由管理程序虚拟化的vm的硬件状态(参见例如美国专利公开2014/0157264),但是虚拟化系统不可能在管理程序的权限范围之外在直接分配给vm的硬件上执行这样的操作。也就是说,由于直接分配的设备归vm所有,因此无法在直接分配有硬件的vm上执行用于控制vm状态的操作。

需要使得机器虚拟化系统能够控制vm的状态并且,其考虑了直接分配给vm的硬件的存在。



技术实现要素:

包括以下发明内容仅是为了介绍下面的具体实施方式中讨论的一些概念。该概述不是全面的,并非旨在描述由最后提出的权利要求书阐明的所要求保护的主题的范围。

实施例涉及实现对已经直接分配有硬件设备的虚拟机(vm)的状态操纵。管理程序利用访客操作系统来管理vm的执行。管理程序将物理的(非虚拟的)硬件设备直接分配给vm,使得vm拥有硬件设备的排他使用并且访客操作系统使用物理硬件设备,而无需管理程序进行虚拟化抽象/映射。当需要暂停、挂起、恢复或以类似方式操纵vm时,管理程序与vm通信以引起访客操作系统执行对硬件设备来说可能是必要的任何操作。管理程序和vm/访客可以通过各种机制进行通信,诸如与访客驱动程序通信的主机驱动程序、由计算机的硬件总线支持的虚拟总线服务、虚拟总线通道等。

下面参考结合附图考虑的以下具体实施方式来解释许多附带特征。

附图说明

根据参考附图阅读的以下就同时实施方式,将能够更好地理解本说明书,其中在附图中,相似的附图标记用于指示相似的部分。

图1示出了包括已知类型的管理程序的示例虚拟化环境。

图2示出了用于促进具有直接分配的硬件设备的vm上进行状态操作的一般过程。

图3示出了vm和虚拟化层如何协作以使得vm上的状态操作能够在直接分配的硬件上执行。

图4示出了适用于某些类型的硬件设备的实施例。

图5示出了与图4相对应的过程。

图6示出了由驱动程序之间的通信执行的暂停操作的示例。

图7示出了可以在其上实现上述实施例的计算设备的细节。

具体实施方式

图1示出了包括已知类型的管理程序100的示例虚拟化环境。计算机102具有硬件104,包括中央处理单元(cpu)106、存储器108、网络接口卡(nic)110、非易失性存储装置112、以及未示出的其他组件,诸如总线、显示器和/或显示适配器等。管理程序100管理和促进虚拟机(vm)114、116的执行。每个虚拟机114、116通常已经对设备进行虚拟化,包括其中存储有访客/主机操作系统118、120的虚拟盘。管理程序100与在特权vm116中执行的主机操作系统120协作,提供机器或系统虚拟化。

虚拟化的任务可以以已知方式在管理程序100与主机操作系统120之间被分布。在某些情况下,主机操作系统120可能仅包含最少的虚拟化元素,诸如用于管理管理程序100的工具和用户界面。在其他情况下,主机操作系统120可能包括以下一项或多项:设备虚拟化管理、vm间通信设施、运行设备驱动程序、启动或停止其他vm。在一些实施例中,虚拟化可能主要发生在管理程序内核(或插入到现成的内核(stockkernel)的虚拟化模块)内,并且不存在特权vm116。

图2示出了用于促进对已经直接分配有硬件设备的vm进行执行状态操作的一般过程。假设主机计算机具有虚拟化层(以下称为“管理程序”)、vm114和直接可分配给vm的硬件设备。硬件设备可以是任何类型的设备,包括图形处理单元(gpu)、诸如固态驱动程序(ssd)等的存储设备、nic等。硬件设备可以是本地附接到主机102的物理总线的设备(例如,外围连接接口(pci)或pci-e)、经由数据网络可访问的设备等。

在步骤140,管理程序100将硬件设备直接分配给vm114。如下面参考图3所描述的,这可以涉及诸如向vm114提供设备的标识符以及注册设备与vm114的关联等步骤。在步骤142,vm114的访客操作系统118通过将设备并入其设备管理堆栈中(例如将设备连接到其虚拟总线)来对设备分配进行响应。在步骤144,在硬件设备已经被附接到vm114并且vm114直接使用硬件设备之后,虚拟化层指示vm执行诸如暂停、保存、恢复等的状态操作。该请求可以以下面描述的不同方式而被呈现和实现。例如,可以在虚拟总线上向vm发送适当的信号,该虚拟总线提供管理程序与vm之间的通信。在步骤146,vm的访客操作系统通过在直接分配的硬件设备上执行相关状态操作来对来自虚拟化层的信号进行响应。

图3示出了vm114和虚拟化层160如何协作以使得对vm114的状态操作在直接分配的硬件上被执行。虚拟化层160是i型管理程序或虚拟化内核模块以及可能的其他特权组件(诸如主机操作系统120)的任何组合。虚拟化层可以包括灵活的设备管理器162。如果存在,则灵活的设备管理器162处理标签跟踪硬件设备到vm的直接分配。尽管直接分配的硬件设备是由vm使用的,而不是由主机使用的,但是主机或虚拟化层160仍然需要知道哪些硬件已经被直接分配,使得其可以避免与已经分配给其的vm发生冲突。因此,灵活的设备管理器162可以维持设备映射164以跟踪哪些硬件设备已经被分配给哪些vm。

初始地,虚拟化层160将硬件设备166分配给vm114。执行分配过程165(阶段a)。选择硬件设备166,并且从硬件设备166获取设备标识符(id)。灵活的设备管理器162将条目168添加到设备映射164。新条目168包括设备id和vm114的id。条目168指示硬件设备166被直接分配并且指示其被分配给哪个vm。作为分配过程166的一部分,灵活的设备管理器162经由处理管理程序vm和vm-vm通信的虚拟总线的通道169与vm114通信。灵活的设备管理器162将设备id发送给vm。虚拟化层160还采取步骤以将硬件设备166分配给vm,例如向vm的虚拟计算机总线发信号通知新设备可用,这允许访客操作系统添加硬件设备166。

响应于来自虚拟化层的直接分配信号或消息,vm114执行附接过程170(阶段b)。实际上,vm和访客操作系统以添加设备的常规方式来添加硬件设备;将设备添加到虚拟计算机总线(例如,虚拟外围设备连接接口(pci))设备树,根据需要设置设备驱动程序,等等。然后,访客操作系统就能够直接和排他性地访问和使用硬件设备166。

一旦vm和访客操作系统已经开始使用直接分配的硬件设备166,出于各种原因,将需要vm状态管理操作。执行状态操作(诸如暂停、保存、恢复和迁移vm)是公知的,并且对于vm在管理计算资源时扮演的角色是至关重要的。然而,如在背景技术中所讨论的,这样的操作对于直接分配有设备的vm是不实际的。

当需要vm状态操作时,状态操作过程172(阶段c)在虚拟化层开始。状态操作可以以多种方式被发起。网络控制器或云结构可以向主机发送消息以指示要在哪个vm上执行哪个操作。主机可以基于用户命令或触发事件来发起操作。在任何情况下,虚拟化层本身可以作为vm状态操作的一部分来执行各种功能。被虚拟化以用于目标vm的硬件的这样的先前已知的功能包括保存或注水目标vm的存储器以及捕获或恢复目标的cpu状态,仅举几例。由虚拟化层执行的新的状态管理功能是检查目标vm是否具有直接分配的设备。可以在设备映射164中搜索目标vm的id;它的存在表明目标vm已经直接分配有硬件,并且因此其他步骤将要被执行。然后,虚拟化层经由虚拟总线通道169向vm发送消息。该消息至少指示要执行的操作的类型;例如,保存状态,恢复/加载状态,暂停,改变电源状态,等等。可选地,消息(或相关消息)包括来自与目标vm相关联的任何硬件设备的设备映射164的标识符。是否需要向vm标识直接附接的硬件设备可以取决于vm或访客操作系统是否能够标识直接附接的设备。如果访客能够这样做,则虚拟化层仅指示要被执行的状态操作的类型就足够了。

目标vm通过执行设备状态改变过程174来对来自虚拟化层和通道169的状态操作信号进行响应。如果来自虚拟化层的消息包括硬件设备的id,则访客操作系统可以使用该id以标识设备。如果访客操作系统能够标识直接附接的硬件,则可以省略来自虚拟化层的设备id。访客操作系统可以通过其连接方式、安装方式或其他标志来识别直接分配的硬件设备。访客操作系统通过与硬件设备进行普通协作所使用的相同通信路径来与目标硬件设备进行通信,例如通过包括设备驱动程序、虚拟pci连接等的设备/存储堆栈。

由访客操作系统调用的硬件设备的功能将取决于单个设备和要执行的操作的类型。一些类型的硬件设备可以具有虚拟化支持,并且可以很容易执行一些功能,诸如暂停执行,将状态转储到存储器缓冲器,从存储器中恢复状态,同步到已知状态,同步设备的多个部分,等等。例如,符合虚拟化标准(诸如intelvt-d(tm))的设备将易于使用。符合功率标准(诸如acpi(高级配置和电源接口))的设备也可能很方便,因为可以输入某些电源状态以适应虚拟化操作,诸如暂停或挂起vm。这种支持的可用性和性质可以指定从虚拟化层传递给目标vm的请求的通信路径和内容。具有新的执行状态功能的新设备正在出现,并且也可以使用。直接可分配的设备还可以包括物理设备的单独可分配的物理部分。例如,一些网络接口可以分为多个子设备,每个子设备可以被直接分配。

图4示出了适用于一些类型的硬件设备的实施例。vm工作进程200由虚拟化层管理(例如,作为管理程序线程或主机操作系统中的线程)。vm工作进程200可以是虚拟化系统用来表示vm的任何类型的对象。初始地,主机侧的设备驱动程序向虚拟化层报告直接可分配硬件设备166的可用性。虚拟pci(vpci)服务202管理pci硬件204与vpci设备206之间的虚拟化映射。经由vpci服务202对pci硬件204的可访问性使得vm工作进程200能够将pci通信注入vpci设备206中。当vm工作进程200确定目标vm需要状态操作时,工作进程200为该vpci服务202制定消息,赋予其pci-vpci映射角色的该消息能够将pci通信注入vpci设备206中。对于vpci设备206,该请求看起来像任何其他pci消息一样。在一个实施例中,使用来自硬件设备166的记录的信息,由vpci服务202和/或vm工作进程200将请求寻址到硬件设备166。在另一实施例中,请求通过pci/vpci通道传递给负责硬件设备166的调度操作的硬件调度器208。硬件调度器208有助于避免与访客操作系统对硬件设备166的使用发生冲突。在任一种情况下,传递给硬件设备166的请求都将标识要被执行的操作的类型(例如,改变为诸如热或冷状态等特定电源状态)。

硬件设备166接收请求,尝试执行所请求的状态操作,并且然后通过同一通信路径输出返回值(例如,成功/失败代码)以及可能的其他返回数据。如果vm工作进程200接收回成功的指示,则vm工作进程200可以继续进行被引导到vm的执行状态的其他操作,例如,捕获或恢复存储器,虚拟cpu状态,执行实时迁移,等等。尽管硬件设备166在已经被直接分配时对于虚拟化层是不透明的,但是对硬件设备166的了解以及经由虚拟化总线与其通信的能力使得虚拟化层可以向硬件设备166发送指令。

图5示出了与图4相对应的过程。作为示例,硬件设备166将被假定为gpu。在步骤220,虚拟化层将物理gpu设备直接分配给vm。如上所述,直接分配可以使用主机的硬件总线(例如,pci)和虚拟化系统的虚拟总线(例如,vpci)来实现。对于目标vm和访客操作系统,所分配的gpu只是另一pci设备。

在步骤222,可能在vm工作进程的发起下,虚拟化层执行vm状态操作,在该示例中为暂停操作。在一个实施例中,虚拟化层保留对gpu向vm的分配的指示,并且在此基础上,虚拟化层使用pci/vpci路径向访客/vm注入请求。在另一实施例中,虚拟化层不知道目标vm是否已经直接分配有硬件,假设这是可能的,并且向目标vm发送盲请求。vm/访客接收盲通用操作请求(例如,暂停),如果不适用则将其忽略,或者如果适用则将其转换为给gpu的vpci请求,并且返回有关该请求是否被vm/访客接受的反馈。

在步骤224,硬件调度器(例如,图形调度器)通过在目标vm的vpci上发出gpu的电源状态改变来对请求进行操作。图形硬件调度器还可以使用其调度功能来暂停正在馈送给gpu的图形工作。在步骤226,gpu改变电源状态以执行暂停并且返回成功或失败代码,硬件调度器可以在步骤228将成功或失败代码推送给vm的vpci上,该代码在此由虚拟化层中的vpci服务被拦截并且传递给vm工作进程,然后,vm工作进程可以决定总体暂停操作是应当继续进行、被视为成功完成、还是由于失败而撤消。

调度访客对虚拟和/或物理硬件的访客使用的访客硬件调度器(例如,内核模块或服务)是主机对访客进行干预的有用点,因为调度器是异步控制的点;调度器是访问的仲裁程序,可能已经具有用于排队请求的队列,等等。因此,调度器可以进行各种操作,如隐藏已经被暂停、断电(热或冷)的直接分配的设备的不存在,或者以其他方式避免由于相关硬件设备的可能的暂时不可用而导致的故障。

图6示出了由驱动程序之间的通信执行的暂停操作的示例。驱动程序可以使用虚拟总线通道169(不要与vm的虚拟总线设备混淆)进行通信以进行vm到管理程序的通信。在该示例中,要在目标vm上执行的vm状态操作是将vm的状态保存到缓冲器。vm状态操作可能尤其需要保存直接附接的硬件设备的状态,该硬件设备可以连接到目标vm的vpci设备206。与上面的状态操作类似,vm工作进程200或vm的等效管理程序表示向灵活的设备管理器162发出保存请求。该请求指示请求的类型,并且还可以标识目标直接附接的硬件设备166。请求可以包括目标vm将在其中存储硬件设备166的硬件状态的存储器位置指针或存储地址。

在该示例中,在主机(虚拟化)侧存在主机驱动程序240,该主机驱动程序240可以被配置为驱动硬件设备166(尽管在设备直接附接到vm时实际上并未驱动它)。与硬件设备166兼容的同一驱动程序或另一访客驱动程序242通过vpci设备206与访客操作系统通信。驱动程序被设计为经由虚拟总线通道169彼此通信。当主机驱动程序240接收到保存硬件设备的状态的请求时,主机驱动程序240发信号通知访客驱动程序242。访客驱动程序242经由vpci设备206向硬件设备166发送请求,可能包括从虚拟化层接收的缓冲器位置。在步骤244,硬件设备166通过将其硬件状态存储到所提供的缓冲器并且提供沿着相同的通信路径返回的返回值来执行所请求的保存操作。可以使用相同的技术来实现其他类型的vm状态操作。例如,可以通过将硬件设备166的先前存储的状态的位置传递给vm/访客来执行状态恢复操作,硬件设备166使用该位置来恢复其先前恢复的状态并且恢复执行。

应当注意,虚拟总线是由虚拟化层提供以使得能够根据定义的命令(可能在主机侧和访客侧)进行灵活的消息传递的通用消息系统。示例包括微软的vm总线、xen的xenbus、vmware的vmci套接字,仅举几例。虚拟总线不应当与vm/访客的虚拟总线设备混淆。虚拟总线设备(例如,vpci设备)是驻留在访客中的模拟总线设备。虚拟总线设备可以依赖于虚拟化层的虚拟总线以与主机交换消息。此外,尽管虚拟总线可能很方便,但是可以利用任何主机访客通信路径,包括网络路径(主机可以将分组传输给访客,而访客中的代理可以处理经由网络分组接收的上述请求)、专用硬件门铃、主机和访客直接可访问的共享存储器页面等。

进一步关于术语,为了方便,在此使用术语“虚拟机”。该术语也被认为是指虚拟化“分区”以及与vm相同的其他等同物。

在到vm或访客操作系统的给定通道的情况下,存在管理程序可以控制其他类型的操作。在大多数情况下,即使可以直接分配设备,主机也仍然具有访问设备本身的能力。然而,无限制地这样做可能会干扰访客与设备的交互。即使由主机对设备进行简单的轮询也会造成问题。如果主机能够确保不会影响访客,则主机与设备的交互将不会有太大问题。例如,如果主机将相关vm置于足够的空闲状态(不关闭电源),诸如暂停vm的虚拟cpu,则主机将可能能够与设备进行交互而无需担心冲突。

图7示出了可以在其上实现上述实施例的计算设备102的细节。本文中的技术公开将满足程序员编写软件和/或配置可重新配置的处理硬件(例如,现场可编程门阵列(fpga))和/或设计专用集成电路(asic)等,以在计算设备220上运行以实现本文中描述的任何特征或实施例的需求。

计算设备102可以具有一个或多个显示器322、一个或多个网络接口324、以及存储硬件326和处理硬件328,它们可以是以下中的任何一个或多个的组合:中央处理单元、图形处理单元、模数转换器、总线芯片、fpga、asic、专用标准产品(assp)或复杂可编程逻辑器件(cpld)等。存储硬件326可以是磁性存储、静态存储器、易失性存储器、非易失性存储器、光学或磁性可读物等的任何组合。本文中使用的术语“存储装置”的含义并不是指信号或能量本身,而是指物理装置和物质的状态。计算设备102的硬件元件可以以机器计算领域中众所周知的方式进行协作。另外,输入设备可以与计算设备102集成或与计算设备102通信。计算设备102可以具有任何形状因数,或者可以在任何类型的包围设备中使用。计算设备102可以是手持设备的形式,诸如智能电话、平板计算机、游戏设备、服务器、机架安装或背板式机载计算机、片上系统等。

以上讨论的实施例和特征可以以被存储在易失性或非易失性计算机或设备可读存储硬件中的信息的形式来实现。这被认为至少包括硬件,诸如光存储装置(例如,光盘只读存储器(cd-rom))、磁性介质、闪存只读存储器(rom)、或将数字信息存储到其中以使得处理硬件228可以容易地获取它们的任何装置。所存储的信息可以采用以下形式:机器可执行指令(例如,编译的可执行二进制代码)、源代码、字节码、或者可以用于启用或配置计算设备以执行上面讨论的各种实施例的任何其他信息。这也被认为至少包括在执行实施例的程序的执行期间存储诸如中央处理器(cpu)指令等信息的易失性存储器(诸如随机存取存储器(ram)和/或虚拟存储器),以及存储允许加载或执行程序或可执行文件的信息的非易失性介质。可以在任何类型的计算设备上执行实施例和特征,包括便携式设备、工作站、服务器、移动无线设备等。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1