用于虚拟机迁移的技术 背景技术 [0001] 虚拟化技术在计算中以及具体来说在云和数据中心计算中起重要作用。虚拟机(VM)实时迁移是虚拟化的有利特征,并且指的是在没有断开客户端或应用的情况下在不同物理机器之间移动正运行VM和全部所关联应用的过程。虚拟机的存储器、存储装置和网络连通性可从源(主)机器或节点被转移到目的地机器或节点。VM实时迁移的一般有益效果包括动态负荷平衡、增强服务器联合并且促进服务器维护的实现。 [0002] 当前VM实时迁移技术部分基于通过配置服务质量(QoS)策略以限制用于实时迁移的TCP业务来管理实时迁移的带宽的使用。这样做通常是为了确保网络业务不超过所设置限度。多层计算架构中的VM可具有逻辑上被分离的功能,其中各功能在资源访问、数据分隔和安全性方面可具有不同要求。例如,三层架构可包含表现层、应用或数据访问层以及数据库层。 [0003] 由于VM可在不同QoS要求下运行,所以VM实时迁移通常为最高级VM选择高级QoS(例如第3层),以便将数据迁移到具有可用资源的目的地节点。在许多情况下,高分层VM将因被归因于迁移过程的额外资源分配(例如CPU、网络带宽)而在迁移时间期间遭受显著性能损失。此外,脏存储器问题可使另外的资源分配问题在迁移过程期间发生。典型迁移战略包括预复制阶段和停止-复制阶段。在预复制存储器迁移阶段中,高级工具栈(例如Openstack)通常在VM仍在运行于源节点上时将所有存储器页面从源节点复制到目的地节点。如果一些存储器页面在这个过程期间被更新(变“脏”),则它们将被重新复制,直到进入停止-复制阶段。如果所选VM的可写工作集充分大,则迁移过程将保持把脏存储器页面迭代地复制到因过度停机时间而不能够满足服务要求的点,并且将阻止迁移过程进入停止-复制阶段,其中停止VM,并且将剩余存储器页面复制到目的地节点。 附图说明 [0004] 在附图中通过举例的方式而不是通过限制的方式来图示本文所述的概念。为了说明的简洁和清晰起见,图中所图示的元件不一定按比例来绘制。在认为适当的情况下,在附图之内已经重复参考标号,以指示对应或类似的元件。 [0005] 图1图示包括与源节点装置进行通信的多个迁移目的地节点装置、用于迁移虚拟机的系统的至少一个实施例的简化框图; 图2图示用于从图1的系统的源节点装置的迁移的多分层VM的环境的至少一个实施例的简化框图; 图3是可由图2的源节点装置的虚拟机监测器所运行、用于执行VM迁移的方法的至少一个实施例的简化流程图; 图4是可由图2的源节点的虚拟机监测器所运行、用于执行以识别用于迁移的VM的伪迁移过程的方法的至少一个实施例的简化流程图; 图5和图6是用于执行从图2的源节点到目的地节点的VM的迁移的方法的至少一个实施例的简化流程图; 图7是随VM迁移期间的VM的时间的预复制和停止-复制阶段期间的存储器转移数据块和迁移停机时间的简化图示;以及 图8是伪迁移过程期间的模拟存储器转移数据块的简化图示。 具体实施方式 [0006] 虽然本公开的概念可以容许各种修改和备选形式,但是其特定实施例在附图中通过举例的方式已经被示出,并且将在本文中被详细描述。然而,应当理解,不是意在将本公开的概念限制到所公开的具体形式,相反地,意在以涵盖与本公开和所附权利要求相一致的所有修改、等效物和备选方案。 [0007] 说明书中提到“一个实施例”、“实施例”、“说明性实施例”等指示所述的实施例可包括具体特征、结构或特性,但是每一个实施例可以一定或可以不一定包括那个具体特征、结构或特性。此外,这类词语不一定指的是同一实施例。另外,在结合实施例来描述具体特征、结构或特性时,无论是否明确被描述,均认为结合其他实施例来实现这种特征、结构或特性是在本领域的技术人员的知识范围之内的。此外,应当理解,采取“A、B和C中的至少一个”的形式的列表中所包含的项能够表示(A)、(B)、(C)、(A和B)、(A和C)、(B和C)或者(A、B和C)。类似地,采取“A、B或C中的至少一个”的形式所列示的项能够表示(A)、(B)、(C)、(A和B)、(A和C)、(B和C)或者(A、B和C)。 [0008] 在一些情况下,所公开的实施例可通过硬件、固件、软件或者它们的任何有形实施组合来实现。所公开的实施例还可被实现为由一个或多个非暂时机器可读(例如计算机可读)存储介质所携带或者其上所存储的指令,其可由一个或多个处理器来读取和运行。机器可读存储介质可体现为用于存储或传送采取由机器可读形式的信息的任何存储装置、机制或其他物理结构(例如易失性和非易失性存储器、媒体光盘或者其他媒体装置)。 [0009] 在附图中,一些结构或方法特征可按照特定布置和/或排序来示出。然而,应当理解,这类特定布置和/或排序可以不作要求。更确切的说,在一些实施例中,这类特征可按照与说明性附图中所示不同的方式和/或顺序来布置。此外,具体附图中包含结构或方法特征不是意味着要暗示在所有实施例中都要求这种特征,而是在一些实施例中可以不包含这种特征或者可与其他特征相结合。 [0010] 现在参照图1,在说明性实施例中,用于迁移虚拟机(VM)的系统100包括一个或多个目的地节点106-112和至少一个源节点104,其各可以能够使用分组交换或其他适当通信通过网络112相互通信。在使用中,源节点104配置成选择用于到目的地节点106-112的任一个或者源节点104本身(即,源节点104在一些实施例中也可以是目的地节点)的其他区域的迁移的一个或多个VM。要这样做,如以下更详细所论述,源节点104可识别用于迁移的较低分层VM集合,同时使较高分层VM留在源节点104上的适当位置,使得避免或减轻实时迁移性能损失对较高分层VM的影响。源节点104随后基于较低分层VM的每个的所关联静态或动态工作集的分析从用于迁移的较低分层VM的子集中选择VM。VM的静态工作集是如基于静态信息、例如历史或已知信息所识别的VM的工作集。要基于所关联静态工作集来选择VM,源节点 104可基于每个VM的已知或历史工作负荷特性来确定较低分层VM的每个的静态工作集。源节点104然后可选择具有静态工作集(其指示在所提出迁移期间对源节点104的资源的最小影响)的VM。例如,静态工作集可识别或者来指示执行每个VM的迁移所需的存储器、时间或其他资源的量。通过选择具有如静态工作集所限定的最小资源影响的较低分层VM,迁移对源节点104和系统100的性能的影响整体上可被降低,如下所论述。 [0011] 备选地,源节点104可基于与VM所关联的动态工作集来选择用于可能迁移的VM。要这样做,源节点104可通过执行讨论中的较低分层VM(或者对全部所识别低分层VM)的伪迁移,来确定各较低分层VM的动态工作集。VM的动态工作集是如使用以下所论述的伪迁移过程基于所识别的VM的工作集,其识别具体时间间隔期间的对应VM的工作集。在如以下更详细所论述的伪迁移过程期间,模拟所关联VM的存储器页面的转移,以识别在时间中的那个点在所关联VM的实时迁移期间可能发生的脏页面的数量级。也就是说,源节点104分析所关联VM的实时迁移的可能影响,而无需实际转移所关联VM的存储器页面。伪迁移过程可被应用于所识别的较低分层VM的任何一个或多个,并且可周期地(例如每隔5分钟运行5秒)或者有选择地(例如在资源利用高于预定阈值时被激活,表明实时迁移将要发生)来应用,使得能够查明当前影响等级(即,脏页面计数的可能数量)。源节点104然后可选择具有动态工作集(其指示如由伪迁移过程所确定在所提出迁移期间对源节点104的资源的最小影响)的VM,并且在需要时继续进行所选VM的实时迁移。 [0012] 图1的源节点104可体现为能够执行本文所述功能的任何类型的计算装置。例如,源节点104非限制性地可体现为服务器、计算机、台式计算机、个人计算机(PC)、平板计算机、膝上型计算机、笔记本计算机、服务器计算机、移动计算装置、智能电话、蜂窝电话、手机、消息传递装置、工作站、网络设备、万维网设备、分布式计算系统、多处理器系统、基于处理器的系统、消费者电子装置、数字电视装置、机顶盒和/或配置成存储和访问数据并且还配置成执行通过网络的数字数据迁移的任何其他计算装置。 [0013] 在图1的说明性实施例中,源节点104包括处理器120、I/O子系统122、存储器124、数据存储装置126和通信电路系统140,其可包含网络接口控制器(NIC)连同用于实现源节点104与一个或多个其他外部电子装置和/或系统之间的通信的任何数量的装置和电路系统。处理器120可体现为能够执行本文所述功能的任何类型的处理器。例如,处理器120可体现为单核或多核(一个或多个)处理器、数字信号处理器、微控制器或者其他处理器或处理/控制电路。类似地,存储器124可体现为当前已知或者未来所开发的并且能够执行本文所述功能的任何类型或数量的易失性或者非易失性存储器或数据存储装置。在操作中,存储器 124可存储目的地节点106的操作期间所使用的各种数据和软件,例如操作系统、应用、程序、资料库和驱动程序。在一些实施例中,存储器124和/或数据存储装置126其中已经存储一个或多个应用程序,以及处理器120可操作以运行一个或多个应用程序,并且控制显示屏幕在其上显示对应图形信息。当然,在其他实施例中,源节点104可包括其他或附加组件,例如数字设备和/或计算机中常见的那些组件(例如各种输入/输出装置)。 [0014] 在说明性实施例中,存储器124经由一个或多个通信链路(即,点对点链路、总线链路、导线、线缆、光导、印刷电路板迹线等)在通信上被耦合到处理器120。存储器124还可经由I/O子系统122(其可体现为电路系统和/或组件,以促进与处理器120、存储器124和源节点104的其他组件的输入/输出操作)在通信上被耦合到处理器120。例如,I/O子系统122可体现为或者以其他方式包括存储控制器集线器、输入/输出控制集线器、固件装置、通信链路(即,点对点链路、总线链路、导线、线缆、光导、印刷电路板迹线等)和/或促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统122可形成芯片上系统(SoC)的部分,并且连同处理器120、存储器124和源节点104的其他组件一起被结合在单个集成电路芯片上。 [0015] 源节点104的通信电路系统140可体现为任何类型的通信电路、装置或者它们的集合,其能够实现源节点104与其他计算装置之间经由一个或多个通信网络(例如局域网、个人区域网络、广域网、蜂窝网络、全球网络(例如因特网)等)的通信。通信电路系统140可配置成使用任何一个或多个通信技术(例如无线或有线通信)及所关联协议(例如以太网、Wi-Fi®、WiMAX等)来实行这种通信。通信电路系统170可包括或者以其他方式在通信上被耦合到端口或通信接口。端口可配置成将源节点104在通信上耦合到任何数量的其他计算装置和/或网络(例如物理或逻辑网络)。 [0016] 在一些实施例中,源节点104也可包括一个或多个外围装置128。外围装置128也可包括显示器连同所关联图形电路,以及在一些实施例中还可包括键盘、鼠标、音频处理电路系统(包括例如放大电路系统和一个或多个扬声器)和/或其他输入/输出装置、接口装置和/或外围装置。 [0017] 图1的系统100也包括如上所论述的一个或多个目的地节点106-110。目的地节点 106-110的每个可与源节点104类似地来配置。如从图1所能够看到的,目的地节点106包括处理器150、I/O子系统152、存储器154、数据存储装置156和通信电路系统170,其可包含网络接口控制器(NIC)连同用于实现目的地节点106与一个或多个其他外部电子装置和/或系统之间的通信的任何数量的装置和电路系统。处理器150可体现为能够执行本文所述功能的任何类型的处理器。在说明性实施例中,存储器154经由一个或多个通信链路(即,点对点链路、总线链路、导线、线缆、光导、印刷电路板迹线等)在通信上被耦合到处理器150。存储器154也可经由I/O子系统152(其可体现为电路系统和/或组件,以促进与处理器150、存储器154和目的地节点106的其他组件的输入/输出操作)在通信上被耦合到处理器150。 [0018] 目的地节点106的通信电路系统170可体现为任何类型的通信电路、装置或者它们的集合,其能够实现目的地节点106与其他计算装置之间经由一个或多个通信网络(例如局域网、个人区域网络、广域网、蜂窝网络、全球网络(例如因特网)等)的通信。通信电路系统 170可配置成使用任何一个或多个通信技术(例如无线或有线通信)及所关联协议(例如以太网、Wi-Fi®、WiMAX等)来实行这种通信。通信电路系统170可包括或者以其他方式在通信上被耦合到端口或通信接口。端口可配置成将目的地节点106在通信上耦合到任何数量的其他计算装置和/或网络(例如物理或逻辑网络)。 [0019] 在所图示实施例中,目的地节点106-110与源节点104之间的通信经由网络112进行。在实施例中,网络112可表示有线和/或无线网络,并且可以是或者包括例如局域网(LAN)、个人区域网络(PAN)、存储区域网络(SAN)、主干网络、全球区域网络(GAN)、广域网(WAN)或者例如内联网、外联网或因特网等的任何这类计算机网络的集合(即,各种应用或服务运行于其上的被互连的网络的全球系统,包括例如环球网)。一般地,目的地节点106的通信电路系统170和源节点104的通信电路系统140可配置成使用通信协议的任何一个或多个或者组合以相互进行通信,例如诸如有线网络通信协议(例如TCP/IP)、无线网络通信协议(例如Wi Wi-Fi®、WiMAX)、蜂窝通信协议(例如宽带码分多址(W-CDMA))和/或其他通信协议。因此,网络112可包括任何数量的附加装置(例如附加计算机、路由器和开关),以促进目的地节点106与源节点104之间的通信。 [0020] 本领域的技术人员应当理解,术语“源节点”和“目的地节点”的使用仅为了便于说明并且用于提供数据迁移的参考点。作为示例,数据迁移可配置成将信息从源节点104迁移到目的地节点106和/或目的地节点106-112的任一个。然而,取决于系统100的配置,数据迁移可配置成将信息从目的地节点106迁移到源节点104,在这种情况下,目的地节点106可被看作是“源节点”,而源节点104可被看作是“目的地节点”。类似地,在另一个示例中,在将数据从目的地节点106迁移到目的地节点108时,目的地节点106可被看作是“源节点”,而目的地节点108可被看作是“目的地节点”。此外,数据迁移可在同一节点(例如源节点104)内发生,在这种情况下,该节点是“源节点”以及“目的地节点”两者。 [0021] 现在参照图2,网络节点(例如源节点104或目的地节点106)的说明性环境200包括虚拟机监测器160、工作在多分层环境(例如第1层-第3层)中的多个VM(162-168)以及迁移模块250。在一些说明性实施例中,虚拟机监测器160可体现为计算机软件、固件或硬件,其创建、控制和/或运行源节点104和/或目的地节点106-112的任一个中的VM。在使用中,虚拟机监测器160可作为主机器进行操作,以及每个VM(162-168)可作为客户机器进行操作。虚拟机监测器160可提供具有虚拟操作平台的客户操作系统,并且管理客户操作系统的运行。 在一些说明性实施例中,多种操作系统的多个实例可共享虚拟化硬件资源。虚拟机监测器 160可体现为本机管理程序(类型1),并且直接运行于主机硬件上,来控制硬件并且来管理客户操作系统。作为替代或补充,虚拟机监测器160可与其他计算机程序相似,运行于操作系统(类型2)上。 [0022] 在一些说明性实施例中,VM 162-168可配置成模拟计算机系统功能,并且基于真实或假设计算机的计算机架构和功能进行操作。VM 162-168可配置为系统虚拟机(或“完全虚拟化VM”),以提供用于完整操作系统的运行所需的作为目标的真实机器和一定水平的功能性的完整替代。作为替代或补充,VM 162-168可配置为过程虚拟机,其被设计成通过提供分离出来的和平台无关程序执行环境来运行单个计算机程序。在一些说明性实施例中,VM 162-168的虚拟化可基于本机运行,从而允许底层原始硬件的直接虚拟化,并且提供相同架构的多个实例,真实机器可基于此并且能够运行完整操作系统。在其他说明性实施例中,VM 162-168可模拟不同架构,并且允许为另一个CPU或架构所编写的软件应用和操作系统的执行。在另外的说明性实施例中,VM 162-168可基于操作系统级虚拟化,以允许计算机的资源能够经由对多个所隔离用户空间实例(或“容器”)的内核支持来划分。 [0023] 在图2的说明性实施例中,VM1 162和VM3 166均在最低层1 (202)下起作用,而VM2 164在较低层2 (204)中起作用,以及VM4 168在最高层3 (206)下起作用。在这个示例中,VM4 168可完全被加载有高性能计算(HPC)应用,其密集更新大范围的存储器页面。VM1 162、VM2 164和VM3 166具有要更低的多的存储器利用,尽管它们可同时消耗其他系统资源(例如CPU、外部装置等)。在这种情形中,可要求迁移,使得VM4 168仍能够满足其第3层服务要求。相应地,环境200配置成使得VM从最低(例如VM1、VM3)到较低(例如VM2)层选择(例如,如果最低层VM不能够被迁移)来迁移到另一个机器,而不是迁移最高分层VM(例如VM4),如以下更详细所论述。 [0024] 迁移模块250控制VM从源节点104的迁移。迁移模块250可体现为固件、软件、硬件或者其组合。例如,环境200的迁移模块250和其他组件可形成源节点104的处理器120、I/O子系统122、SoC或其他硬件组件的部分或者以其他方式由其来建立。因此,在一些实施例中,环境200的模块的任何一个或多个可体现为电路或者电气装置的集合(例如迁移电路等)。此外,在一些实施例中,迁移模块250的部分可体现为被建立于源节点104上的高级工具栈(例如OpenStack)的部分。 [0025] 迁移模块250配置成识别用于可能迁移的较低或最低分层VM的集合,并且基于与所识别的较低或最低分层VM的每个所关联的静态和/或动态工作集从所识别集合中选择VM。在图2的说明性示例中,由于VM1 162和VM3 166均处于最低层(第1层),所以迁移模块 250将选择具有工作集(其指示对可能迁移的最小资源影响)的第1层VM。如上所论述,可通过收集VM的历史工作负荷特性并且将它们存储在数据库中,静态地得到每个VM的工作集信息。在说明性实施例中,工作集限定一个或多个过程所需以供给定时间间隔中使用的存储器量。类似地,在说明性实施例中,可写工作集(WWS)限定在预复制阶段期间连续被更新的存储器页面的某个集合,因此它不能够在预复制阶段成功地被迁移。例如,如果VM3 166专用于运行存储器密集应用(例如SPECjbb),则工作集将是高的,这又将VM3 166标记为对迁移知识数据库中的实时迁移不适合/不被推荐。 [0026] 如上所论述,迁移模块250备选地可基于其动态工作集(其通过对所识别的较低或最低层(图2的示例中的第1层或第2层)的每个VM实现伪迁移过程来确定)来选择或识别用于迁移的VM。在伪迁移期间,模拟实时迁移的预复制阶段以产生模拟脏页面日志,其可被更新,好像VM经受真实实时迁移。监测在脏页面日志中所识别的脏页面的数量,清除脏页面日志,并且在任何所识别的已更新存储器页面上重复所模拟预复制阶段。通过这种方式,脏页面的可能总数量、可能所需迭代的总次数以及执行所关联VM的实时迁移所需的整体可能带宽可相对于同一较低层的其他VM来确定和分析。脏页面日志可体现为能够记录脏存储器页面(即,已经被修改的存储器页面)的识别码的任何类型的数据结构。 [0027] 现在参照图3,在使用中,源节点104(例如迁移模块250)可运行用于执行源节点 104上包含所宿的VM的迁移的方法300。方法300开始于框302,其中源节点104确定是否准备VM迁移。例如,源节点可周期地准备VM迁移(例如周期地监测较低或最低层VM的静态和/或动态工作集),或者响应这种标准或事件(例如源节点104的利用达到阈值水平)而准备VM迁移。无论如何,如果源节点104确定准备VM迁移,则方法300进行到框304。在框304中,源节点 104识别每个所宿VM的当前层(例如图2中所图示实施例的第1层-第3层)。随后,在框306中,源节点104基于与每个VM所关联的层来识别用于可能迁移的所宿VM的集合。所宿VM的集合可包括一个或多个VM。例如,在框308中,源节点104选择较低或最低可用层的每个VM(例如图2的第1层VM 162和166)。当然,在一些实施例中,最低层的VM可能不适合于迁移。在这类实施例中,源节点104可选择适合于VM迁移的最低层的VM,并且可基于方法300的结果(例如基于每个VM的所确定动态工作集)随时间细化这种选择。因此,工作在较低或最低层的VM被识别并且最初被选择成排除在工作在较高层的VM(例如图2的VM 164和168)之外。通过这种方式,允许较高分层VM在没有服务中断的情况下继续操作,这可允许这类VM实现与较高层所关联的预期服务。 [0028] 随后,在框310中,源节点104确定是基于与每个VM所关联的动态工作集还是基于与每个VM所关联的静态工作集来选择用于迁移的VM。如果源节点104确定基于每个VM的动态工作集来选择VM,则方法300进行到框312。在框312中,源节点102基于与每个VM所关联的动态工作集来选择较低或最低层VM的集合的VM。要这样做,源节点104在框314中通过对较低或最低层VM的每个来应用伪迁移过程以确定较低或最低层VM的每个VM的动态工作集。以下在图4中图示出和针对图4论述伪迁移方法400的说明性实施例。应当理解,虽然伪迁移过程的应用在图3中图示为在框312中进行,但是源节点104可对所识别的较低或最低分层VM的任何一个或多个周期地、不时地或者有选择地运行伪迁移方法。例如,源节点104可与方法300的剩余框的执行并行地对在框306中所识别的较低或最低分层VM的每个来运行伪迁移方法,使得从用于所关联的较低或最低分层VM的每个的伪迁移方法所生成的动态工作集信息在框312中是可用的。例如,如上所论述,源节点104可每隔五分钟或者响应源节点104的利用达到参考阈值而运行伪迁移方法。因此,应当理解,以下针对图4所论述的伪迁移方法400可与图4的方法300的运行异步地来执行。 [0029] 随后,在框316中,源节点104选择对源节点104具有最小资源影响(如通过其所关联动态工作集来限定)的VM以用于可能迁移。也就是说,源节点104识别较低或最低层VM的集合的VM的哪一个动态工作集提供因所关联VM的迁移引起的最小资源影响的指示(例如根据存储器资源、迁移时间、迁移迭代的次数、所识别脏页面的数量等)。因此,源节点104在框 316中选择可能对源节点104的平台具有最小影响的VM,这可增加任何后续实时迁移的效率,和/或降低工作在源节点104上的较高层VM的性能损失。在源节点104基于动态工作集已经选择用于可能迁移的VM之后,方法300进行到框324,其中源节点104确定是否执行实时迁移,如以下更详细所论述。 [0030] 回到框310来参照,如果源节点104改为确定基于每个VM的静态工作集来选择VM,则方法300进行到框318。在框318中,源节点102基于与每个VM所关联的静态工作集来选择较低或最低层VM的集合的VM。要这样做,源节点104在框320中基于静态信息来确定较低或最低层VM的集合的每个VM的工作集。这种静态信息可包括但不限于所关联VM的已知或历史工作负荷特性,其可随时间被记录在所关联数据库中。随后,在框322中,源节点104选择对源节点104具有最小资源影响(如通过其所关联静态工作集来限定)的VM以用于可能迁移。 也就是说,源节点104识别较低或最低层VM的集合的VM的哪一个静态工作集提供因所关联VM的迁移引起的最低资源影响的指示(例如根据存储器资源、迁移时间、迁移迭代的次数、所识别脏页面的数量等)。因此,源节点104在框322中选择可能对源节点104的平台具有最小影响的VM。 [0031] 在源节点104在框312中基于所关联动态工作集或者在框318中基于所关联静态工作集已经选择用于可能迁移的VM之后,方法300进行到框324。在框324中,源节点104确定是否执行所选VM的实时迁移。也就是说,在一些实施例中,源节点104可运行方法300,以识别在准备VM迁移中的优选VM(即,在所提出迁移期间具有最小资源影响的最低分层VM),而无需在那个时间实际执行实时迁移。如果源节点104确定执行实时迁移,则方法300进行到框 324。在框324中,源节点104执行所选VM的实时迁移。要这样做,源节点104可运行方法500,以执行实时迁移,如以下在图5和图6中所图示和针对图5和图6所论述。 [0032] 然而,如果源节点104在框3244中确定不执行实时迁移,则方法300绕回到框302,其中源节点104再次确定是否准备VM迁移。通过这种方式,源节点104可周期地、有选择地或者连续更新用于迁移的所选VM,预计在未来的某点执行实时迁移。 [0033] 现在参照图4,如以上所论述,源节点104(例如迁移模块250)可周期地或有选择地运行用于对一个或多个所选VM执行伪迁移过程的方法400,以确定所关联VM的动态工作集。 方法400开始于框402,其中源节点104确定是否对所选VM执行伪迁移。如上所论述,源节点 104可对所识别的较低或最低分层VM的任何一个或多个周期地或者有选择地执行伪迁移。 [0034] 如果源节点104确定执行伪迁移,则方法400进行到框404,其中源节点104为所选VM的伪迁移分配资源。例如,在框406中,源节点104可分配VM的迁移的带宽。此外,在框408中,源节点104可确定与待被转移VM所关联的存储器页面的初始数量。通常,源节点104可将待被转移存储器页面的初始数量设置成所选VM的整个客户存储器页面。 [0035] 随后,在框410中,源节点104接通所选VM的日志脏模式。如上所论述,日志脏模式使源节点(例如迁移模块250)能够记录、指示或者以其他方式识别在迁移过程期间已经被修改的那些存储器页面,这可要求另一遍以成功转移(在实时迁移中)。在框412中,源节点 104模拟所选VM的存储器页面的转移。也就是说,源节点104在框412中模拟实时迁移过程,而无需实际转移所选VM的存储器页面。在框412的迁移过程的模拟期间,所启用脏日志模式使源节点104在框414中采用对所限定参考时间周期的所识别“脏存储器页面”来更新脏页面日志(例如位图或其他日志记录数据结构)。也就是说,源节点104通过监测和记录在所监测参考时间周期期间所修改的那些存储器页面,来模拟存储器页面的转移,而无需实际执行存储器页面的任何转移。说明性地,参考时间周期被设置成与待被转移存储器页面的数量(其可随时间而改变)除以所分配带宽相等或者否则相似的时间周期。当然,在其他实施例中可使用其他参考周期。 [0036] 在框412中的存储器页面的所模拟转移完成之后,源节点104从脏页面日志来确定或检索“脏”存储器页面的总数量。在框418中,源节点104将后续转移的存储器页面的数量设置成所识别“脏”存储器页面的数量。随后,在框420中,源节点104清除脏页面日志,并且确定是否再次对所选VM执行伪迁移。如果不是的话,则方法400进行到框424,其中对所选VM禁用日志脏模式。然而,如果源节点104确定重复存储器页面的转移的模拟(例如存在多于阈值的多个脏存储器页面),则方法400绕回到框412,以便对已更新的先前“脏”存储器页面重复存储器页面的转移。也就是说,源节点104可重复地模拟存储器页面的转移,直到没有“脏”存储器页面被识别。通过这种方式,源节点104能够确定在时间中的那个具体点完全转移所选VM所需的存储器页面转移迭代的可能次数。当然,附加动态工作集信息也可从方法 400来得到,例如在所选VM的实时迁移期间可能发生的“脏”存储器页面的可能总数量、执行这种实时迁移的一般资源要求等。此外,如以上针对图3所论述,源节点104可利用这种动态工作集信息来选择用于实时迁移的VM。 [0037] 现在参照图5和图6,在使用中,源节点104(例如迁移模块250)可运行方法500,以执行所选VM的实时迁移。方法500可例如作为方法300的框324的部分来运行。方法500开始于框502,其中源节点104确定是否执行所选VM的迁移。如上所论述,源节点104可响应任何适当标准(例如处理器120利用达到阈值水平)而确定执行迁移。无论如何,如果源节点104确定执行实时迁移,则方法500进行到框504,其中源节点104为所选VM的实时迁移分配资源。例如,在框506中,源节点104可分配VM的迁移的带宽。另外,在框508中,源节点104可确定与待被转移VM所关联的存储器页面的初始数量。如上所论述,源节点104可将待被转移存储器页面的初始数量设置成所选VM的整个客户存储器页面。 [0038] 随后,在框510中,源节点104接通所选VM的日志脏模式。在框512中,源节点104向预期目的地(例如目的地节点106-112)转移所选VM的存储器页面。在框512中的存储器页面的转移完成之后,源节点104在框514中从脏页面日志来确定或检索“脏”存储器页面的总数量。在框516中,源节点104将后续转移的存储器页面设置成所识别“脏”存储器页面。随后,在框518中,源节点104清除脏页面日志。 [0039] 在框520中,源节点104确定所识别“脏”存储器页面的数量是否大于阈值参考。如果是的话,则方法500绕回到框512,其中所识别“脏”存储器页面再次被转移到目的地节点。 但是,如果所识别“脏”存储器页面的数量小于阈值参考,则方法500进行到图6的框522(即,实时迁移的停止-复制阶段)。在框522中,挂起所识别VM,以及向目的地节点转移任何剩余数据(例如残余脏存储器页面)。除了存储器页面之外,也可转移其他数据、例如CPU和装置状态。随后,在框524中,目标VM在目的地节点上被唤醒,以完成实时迁移。在框526中,禁用日志脏模式,以及从源节点104去除所选VM。 [0040] 现在参照图7,示出真实迁移开销图的示例。图7的开销图可以是用作说明真实迁移过程的、例如图5和图6的方法500的说明性实施例。在预复制阶段开始时,进行位图更新 702(或者其他日志记录数据结构),之后接着第一轮的转移(“第1轮”)期间的页面704的存储器转移。如果所收集脏页面超过预定阈值,则进行另一个位图更新706,之后接着第二轮(“第2轮”)中的存储器转移608。该过程可重复到最后一轮(“第n轮”),其中在完成位图更新 710和存储器转移712之后,存在充分小的数量的脏页面以允许真实迁移过程进入停止-复制阶段(例如参见图6),其中当挂起或停止VM时示出迁移停机时间开销714。 [0041] 现在参照图8,示出伪迁移开销图的示例。图8的开销图可以是用作说明伪迁移过程的、例如图4的方法400的说明性实施例。伪迁移开始于模拟预复制阶段,其中进行位图更新802,之后接着第一轮的转移(“第1轮”)期间的页面804的所模拟存储器转移。在收集脏页面之后,以及如果伪迁移控制维持为活动的,则进行另一个位图更新806,之后接着第二轮(“第2轮”)中的另一个所模拟存储器转移808。该过程可重复到停用伪迁移控制(例如通过时间的到期或者特征的存在/不存在),其中在停用之前,执行最后一轮(“第n轮”),其中完成最后位图更新810和所模拟存储器转移812。本领域的技术人员能够理解,来自真实实时迁移(例如704、708和712)的存储器转移等待时间引起过度开销,并且还将受到更新(“脏”)页面量以及被分配给迁移过程的网络带宽所影响。由于当前所公开的伪迁移机制只更新脏位图过程并且模拟存储器转移,并且因此没有显著促成开销。 [0042] 示例 下面提供本文所公开技术的说明性示例。技术的实施例可包括以下所述示例的任一个或多个以及它们的任何组合。 [0043] 示例1包括用于管理到目的地节点的虚拟机的迁移的源节点,源节点包含:虚拟机监测器,在多个服务质量层的对应层建立多个虚拟机的各虚拟机,其中多个服务质量层包括最高层和至少一个较低层;以及迁移模块,(i) 基于与各虚拟机所关联的层来识别多个虚拟机的虚拟机的集合,其中虚拟机的集合的各虚拟机具有与其所关联的至少一个较低层,(ii) 对虚拟机的集合的虚拟机的每个执行伪迁移,其中执行伪迁移包含模拟对应实时迁移的预复制阶段,以确定对应虚拟机的动态工作集,以及(iii) 基于与虚拟机的集合的各虚拟机所关联的动态工作集来选择用于实时迁移的虚拟机的集合的虚拟机。 [0044] 示例2包括示例1的主题,并且识别虚拟机的集合包含选择具有与其所关联的最低层的多个虚拟机的那些虚拟机。 [0045] 示例3包括示例1和2中的任一项的主题,并且其中执行伪迁移包含模拟对应虚拟机的存储器页面的转移;响应存储器页面的转移的模拟而识别与对应虚拟机所关联的脏存储器页面的数量。 [0046] 示例4包括示例1-3中的任一项的主题,并且其中识别脏存储器页面的数量包含提供脏页面日志中的各脏存储器页面的指示。 [0047] 示例5包括示例1-4中的任一项的主题,并且其中动态工作集包含脏存储器页面的数量。 [0048] 示例6包括示例1-5中的任一项的主题,并且其中选择虚拟机包含选择具有与其所关联的最小数量的脏存储器页面的虚拟机的集合的虚拟机。 [0049] 示例7包括示例1-6中的任一项的主题,并且其中模拟存储器页面的转移包含模拟参考时间周期的存储器页面的转移。 [0050] 示例8包括示例1-7中的任一项的主题,并且其中迁移模块还模拟已经被识别为脏存储器页面的对应虚拟机的存储器页面的后续转移;以及响应存储器页面的后续转移而更新与虚拟机所关联的脏存储器页面的数量。 [0051] 示例9包括示例1-8中的任一项的主题,并且其中模拟存储器页面的转移包含基于所识别脏存储器页面来执行存储器页面的转移的模拟的多次迭代,以及其中迁移模块还对对应虚拟机的模拟的总迭代次数进行计数,其中选择虚拟机包含基于与虚拟机的集合的各虚拟机所关联的模拟的总迭代次数来选择虚拟机的集合的虚拟机。 [0052] 示例10包括示例1-9中的任一项的主题,并且其中执行伪迁移包含接通日志脏模式,以便记录在对应实时迁移的预复制阶段的模拟期间已经被修改的存储器页面的识别码。 [0053] 示例11包括示例1-10中的任一项的主题,并且其中执行伪迁移包含对虚拟机的集合的每个虚拟机周期地执行伪迁移。 [0054] 示例12包括示例1-11中的任一项的主题,并且其中执行伪迁移包含响应计算装置的参考事件的存在或者不存在而对虚拟机的集合的虚拟机的每个执行伪迁移。 [0055] 示例3包括示例1-12中的任一项的主题,并且其中参考事件包含计算装置中的硬件资源利用等级。 [0056] 示例14包括示例1-13中的任一项的主题,并且其中参考事件包含虚拟化装置队列的大小。 [0057] 示例15包括示例1-14中的任一项的主题,并且其中选择虚拟机包含响应通过动态工作集所识别、迁移虚拟机所需的资源量低于参考量而选择虚拟机的集合的虚拟机。 [0058] 示例16包括示例1-15中的任一项的主题,并且其中选择虚拟机包含响应通过动态工作集所识别、迁移虚拟机所需的资源量高于参考量而选择虚拟机的集合的虚拟机。 [0059] 示例17包括示例1-16中的任一项的主题,并且其中迁移模块还基于与虚拟机的集合的各虚拟机所关联的静态工作集来选择用于实时迁移的虚拟机的集合的虚拟机。 [0060] 示例18包括示例1-17中的任一项的主题,并且其中各虚拟机的动态工作集包含计算装置的一个或多个过程所需以供对应虚拟机在给定时间间隔中使用的存储器量。 [0061] 示例19包括示例1-18中的任一项的主题,并且其中各虚拟机的动态工作集至少部分基于从所模拟预复制阶段的每个所确定的脏页面的总量。 [0062] 示例20包括用于管理从源节点到目的地节点的虚拟机的迁移的方法,该方法包含:由源节点在多个服务质量层的对应层建立多个虚拟机的各虚拟机,其中多个服务质量层包括最高层和至少一个较低层;由源节点基于与各虚拟机所关联的层来识别多个虚拟机的虚拟机的集合,其中虚拟机的集合的各虚拟机具有与其所关联的至少一个较低层;由源节点对虚拟机的集合的每个虚拟机执行伪迁移,其中执行伪迁移包含模拟对应实时迁移的预复制阶段,以确定对应虚拟机的动态工作集;以及由源节点基于与虚拟机的集合的各虚拟机所关联的动态工作集来选择用于实时迁移的虚拟机的集合的虚拟机。 [0063] 示例21包括示例20的主题,并且其中识别虚拟机的集合包含选择具有与其所关联的最低层的多个虚拟机的那些虚拟机。 [0064] 示例22包括示例20和21中的任一项的主题,并且其中执行伪迁移包含模拟对应虚拟机的存储器页面的转移;响应存储器页面的转移的模拟而识别与对应虚拟机所关联的脏存储器页面的数量。 [0065] 示例23包括示例20-22中的任一项的主题,并且其中识别脏存储器页面的数量包含提供脏页面日志中的各脏存储器页面的指示。 [0066] 示例24包括示例20-23中的任一项的主题,并且其中动态工作集包含脏存储器页面的数量。 [0067] 示例25包括示例20-24中的任一项的主题,并且其中选择虚拟机包含选择具有与其所关联的最小数量的脏存储器页面的虚拟机的集合的虚拟机。 [0068] 示例26包括示例20-25中的任一项的主题,并且其中模拟存储器页面的转移包含模拟参考时间周期的存储器页面的转移。 [0069] 示例27包括示例20-26中的任一项的主题,并且还包括:模拟已经被识别为脏存储器页面的对应虚拟机的存储器页面的后续转移;以及响应存储器页面的后续转移而更新与虚拟机所关联的脏存储器页面的数量。 [0070] 示例28包括示例20-27中的任一项的主题,并且其中模拟存储器页面的转移包含基于所识别脏存储器页面来执行存储器页面的转移的模拟的多次迭代,并且还包含对对应虚拟机的模拟的总迭代次数进行计数,其中选择虚拟机包含基于与虚拟机的集合的各虚拟机所关联的模拟的总迭代次数来选择虚拟机的集合的虚拟机。 [0071] 示例29包括示例20-28中的任一项的主题,并且其中执行伪迁移包含接通日志脏模式,以便记录在对应实时迁移的预复制阶段的模拟期间已经被修改的存储器页面的识别码。 [0072] 示例30包括示例20-29中的任一项的主题,并且其中执行伪迁移包含对虚拟机的集合的虚拟机的每个周期地执行伪迁移。 [0073] 示例31包括示例20-30中的任一项的主题,并且其中执行伪迁移包含响应计算装置的参考事件的存在或者不存在而对虚拟机的集合的虚拟机的每个执行伪迁移。 [0074] 示例32包括示例20-31中的任一项的主题,并且其中参考事件包含计算装置中的硬件资源利用等级。 [0075] 示例33包括示例20-32中的任一项的主题,并且其中参考事件包含虚拟化装置队列的大小。 [0076] 示例34包括示例20-33中的任一项的主题,并且其中选择虚拟机包含响应通过动态工作集所识别、迁移虚拟机所需的资源量低于参考量而选择虚拟机的集合的虚拟机。 [0077] 示例35包括示例20-34中的任一项的主题,并且其中选择虚拟机包含响应通过动态工作集所识别、迁移虚拟机所需的资源量高于参考量而选择虚拟机的集合的虚拟机。 [0078] 示例36包括示例20-35中的任一项的主题,并且还包括由源节点基于与虚拟机的集合的各虚拟机所关联的静态工作集来选择用于实时迁移的虚拟机的集合的虚拟机。 [0079] 示例37包括示例20-36中的任一项的主题,并且其中各虚拟机的动态工作集包含计算装置的一个或多个过程所需以供对应虚拟机在给定时间间隔中使用的存储器量。 [0080] 示例38包括示例20-37中的任一项的主题,并且其中各虚拟机的动态工作集至少部分基于从所模拟预复制阶段的每个所确定的脏页面的总量。 [0081] 示例39包括包含其上所存储的多个指令的一个或多个机器可读介质,指令响应由计算装置运行而使源节点执行示例20-38中的任一项的方法。 [0082] 示例40包括用于管理到目的地节点的虚拟机的迁移的源节点,源节点包含:用于在多个服务质量层的对应层建立多个虚拟机的各虚拟机的部件,其中多个服务质量层包括最高层和至少一个较低层;用于基于与各虚拟机所关联的层来识别多个虚拟机的虚拟机的集合的部件,其中虚拟机的集合的各虚拟机具有与其所关联的至少一个较低层;用于对虚拟机的集合的虚拟机的每个执行伪迁移的部件,其中执行伪迁移包含模拟对应实时迁移的预复制阶段,以确定对应虚拟机的动态工作集;以及用于基于与虚拟机的集合的各虚拟机所关联的动态工作集来选择用于实时迁移的虚拟机的集合的虚拟机的部件。 [0083] 示例41包括示例40的主题,并且其中用于执行伪迁移的部件包含:用于模拟对应虚拟机的存储器页面的转移的部件;用于响应存储器页面的转移的模拟而识别与虚拟机所关联的脏存储器页面的数量的部件。 [0084] 示例42包括示例40和41中的任一项的主题,并且其中用于识别脏存储器页面的数量的部件包含用于提供脏页面日志中的各脏存储器页面的指示的部件。 [0085] 示例43包括示例40-42中的任一项的主题,并且其中动态工作集包含脏存储器页面的数量。 [0086] 示例44包括示例40-43中的任一项的主题,并且其中用于选择虚拟机的部件包含用于选择具有与其所关联的最小数量的脏存储器页面的虚拟机的集合的虚拟机的部件。 [0087] 示例45包括示例40-44中的任一项的主题,并且其中用于模拟存储器页面的转移的部件包含用于模拟参考时间周期的存储器页面的转移的部件。 [0088] 示例46包括示例40-45中的任一项的主题,并且还包括:用于模拟已经被识别为脏存储器页面的对应虚拟机的存储器页面的后续转移的部件;以及用于响应存储器页面的后续转移而更新与虚拟机所关联的脏存储器页面的数量的部件。 [0089] 示例47包括示例40-46中的任一项的主题,并且其中用于模拟存储器页面的转移的部件包含用于基于所识别脏存储器页面来执行存储器页面的转移的模拟的多次迭代的部件,并且还包含用于对对应虚拟机的模拟的总迭代次数进行计数的部件,其中用于选择虚拟机的部件包含用于基于与虚拟机的集合的各虚拟机关联的模拟的总迭代次数来选择虚拟机的集合的虚拟机的部件。