◆刘 健 王马龙
基于负载特征的虚拟机动态迁移决策算法
◆刘 健 王马龙
(四川大学(成都)计算机科学与技术学院 四川 610065)
虚拟机动态迁移算法要求在不中断对外实时服务的条件下迁移虚拟机资源,同时要求宕机时间非常短、迁移操作对用户透明。要达到迁移算法的目标,在不同的应用场景下选择合适的迁移算法至关重要。本文提出一种虚拟机动态迁移决策算法,通过分析不同虚拟机动态迁移算法的性能,基于虚拟机负载特征,决策出最优迁移性能的算法。实验结果表明,该算法能够针对不同的负载类型准确地选择最优的迁移算法,相对主流的预拷贝迁移算法能够有效减少迁移时间和停机时间。
虚拟机动态迁移;负载特征;决策算法;云计算
作为虚拟化的关键技术之一,虚拟机动态迁移能够改善系统性能、提高资源配置灵活性,在数据中心和云计算中被应用于很多重要方面,包括负载均衡、在线维护、主动容错和资源优化与电源管理。
当前,主流的虚拟化平台xen和KVM中虚拟机动态迁移算法都是基于内存预拷贝算法,国内外学者通过对迁移算法的研究和改进提出了一系列的迁移算法,这些算法有各自的适用场景和优缺点,选择不同的迁移算法对迁移性能的影响是巨大的。本文提出一种虚拟机动态迁移决策算法,意在通过不同的虚拟机负载情况决策得到最优的迁移算法,提高迁移性能。
虚拟机动态迁移主要迁移三类资源:内存和CPU状态、网络连接和虚拟设备状态、存储。当前,动态迁移的研究与应用主要集中在局域网环境,网络连接的迁移通过ARP广播实现,虚拟机磁盘空间由NAS等共享存储设备提供,用以避免迁移庞大的磁盘数据。因此,局域网环境中,虚拟机动态迁移主要考虑的问题是内存和CPU状态的迁移。
Clark0等人提出并实现了预拷贝(Pre-copy)算法。Pre-copy算法具有可靠性,适合Idle型虚拟机的迁移。但是,在迁移CPU密集型、内存密集型或网络密集型虚拟机时,由于Pre-copy算法采用迭代复制的方式传送内存页,在迁移过程中需要传送大量的数据,因此产生较高的网络开销,导致虚拟机服务性能下降,进而延长停机时间和总迁移时间,甚至导致服务中断。为了解决预拷贝算法的不足,文献提出并实现了一种混合内存复制迁移(HMDC)算法。相对Pre-copy算法,HMDC算法避免了内存迭代拷贝,减少了总迁移数据量和对网络带宽的占用,在停机时间内只复制脏内存页面位图,减少了虚拟机停机时间。但是HDMC算法通过缺页中断从源主机请求内存页,对虚拟机应用程序的性能造成一定损失。文献中基于CR/TR-Motion算法提出了一种结合CPU调度的快速虚拟机动态迁移(FMC)算法。CR/TR-Motion算法降低了迁移过程中的数据传输量,对网络密集型和低带宽环境尤其适合。但是,CR/TR-Motion算法要求日志重现速率比日志生成速率快。在迁移计算密集型虚拟机时,FMC算法采用了限制CPU的方法降低日志的生成速率来获得较低的总迁移时间。同时,在多处理器或多核环境下通过CR/TR-Motion进行动态迁移需要通过VCPU热插拔技术的特殊处理,对虚拟机应用性能造成了一定的影响。
评价一个迁移算法的优劣有四个性能参数,迁移总时间、迁移停机时间、迁移数据量和对虚拟机应用程序的影响程度。前三者可以通过具体的实验测得数据,后者可以通过分析迁移算法的过程给予一般的程度评价。Pre-copy算法由于运行在log-dirty的影子内存模式下采用迭代传送复制的方法传输内存,在迁移虚拟机时会通过占用CPU和内存的方式对虚拟机应用程序造成影响,但相对HMDC算法则要小很多。当虚拟机在目标主机端恢复执行后HMDC算法会通过缺页错误从源主机获取内存页数据,对虚拟机应用程序的影响较大。CR/TR-Motion 算法带来的性能开销主要来自于对日志时间的记录和回放,但相对其他两种算法开销较小。然而,在迁移多核或多处理器的虚拟机时,CR/TR-Motion算法需要通过VCPU热插拔技术处理,这对虚拟机应用程序的影响是很大的。FMC算法基于CR/TR-Motion算法在迁移计算密集型虚拟机时更要通过限制CPU的方法来减少总迁移时间。综上所述,迁移算法对虚拟应用程序的影响程度为:FMC算法大于CR/TR-Motion算法大于HMDC算法大于Pre-copy算法。各种迁移算法的性能分析如表1所示。
表1迁移算法性能分析表
算法迁移总时间停机时间迁移数据量对应用程序影响适宜迁移负载类型 Pre-copy长内存密集型较长,其他较短大较小Idle型 HMDC长短小一般内存密集型 CR/TR-MotionCPU密集型较长,其他较短短小较大网络密集型,内存密集型 FMC较长短小大计算密集型
本文将预拷贝(Pre-copy)算法、混合内存复制(HMDC)算法、CR/TR-Motion算法以及FMC算法这四种较优的迁移算法纳入到动态迁移决策算法框架中,动态迁移决策算法框架如图1所示。决策算法的具体步骤如下:
(1)提取虚拟机的负载特征。基于OpenStack云平台的Ceilometer监控组件提取要迁移虚拟机的最近3个时刻的负载数据,包括CPU使用率、内存使用量、网络流入速率、网络流出速率,取其平均值进行数据处理获得负载特征。
(2)根据经验确定负载特征的临界值,负载特征包括CPU利用率、内存利用率和网络带宽利用率。
(3)用负载类型和决策因子作为参数,根据迁移性能表计算不同负载类型的迁移代价,选择迁移代价最小的迁移算法作为决策算法的迁移算法迁移虚拟机。
(4)迁移过程中统计该次迁移的迁移总时间、停机时间和迁移数据量,并反馈给迁移性能表,迁移性能表更新数据,算法完成。
图1虚拟机动态迁移决策算法框架
迁移性能表与迁移代价:
虚拟机动态迁移决策算法的核心在于如何准确预测要迁移虚拟机的迁移代价。由于迁移算法大多会占用虚拟机操作系统的CPU资源和内存资源,因此采用模拟迁移算法的过程来估计虚拟的迁移代价是不准确的,本文采用迁移决策因子和迁移性能表来预测不同迁移算法的迁移代价。迁移决策因子为一个向量:
本文根据每种负载类型的多次迁移结果,取平均值,依据Pre-copy算法为基准,将迁移过程中的迁移总时间、停机时间和迁移数据量归一化得到迁移性能表,根据不同算法的实现原理,本文以Pre-copy算法为基准,将缺页中断处理的HDMC算法,和限制CPU的CR/TR-Motion和FMC算法对应用程序的影响程度分别量化为1.3,1.5,1.6。如表2所示:
表2迁移性能表
负载类型算法类型总迁移时间停机时间迁移数据量影响程度 计算型负载Pre-copy1111 HMDC0.6220.1330.9361.3 CR/TR-Motion0.6970.1790.8461.5 FMC0.6670.1490.8061.6 内存型负载Pre-copy1111 HMDC0.5770.0140.7781.3 CR/TR-Motion0.7960.2350.7731.5 FMC0.8080.2270.7621.6 网络型负载Pre-copy1111 HMDC0.8230.2260.8031.3 CR/TR-Motion0.4640.2480.6991.5 FMC0.4410.2630.6891.6 Idle型负载Pre-copy1111 HMDC0.9070.2670.9451.3 CR/TR-Motion0.8990.3730.9271.5 FMC0.8700.3570.9261.6
针对某一负载类型,本文定义迁移代价值为算法的量化因子与迁移决策因子权重的乘积之和,迁移代价值为:,其中A为当前负载类型的迁移性能矩阵,如:
实验的架构图如图2所示。三台主机均采用相同的配置如下表所示。
表3 配置表
图2实验架构图
实验选择了四种负载,Daily Use、UnixBench、Memtester、以及Netperf,分别代表Idle型、计算密集型、内存密集型和网络密集型虚拟机负载,分别利用Pre-copy算法、HMDC算法、CR/TR-Motion算法和FMC算法进行迁移,运行这些应用的虚拟机都配置1GB内存,2个vcpu,可用带宽为1000Mbit/sec。
我们分别指定迁移决策因子为migration_facotr=(0,1,0,0)、migration_factor=(1,0,0,0)和migration_factor=(0,0,1,0),只考虑迁移停机时间、停机时间和迁移数据量。迁移性能的结果分别如图3、图4和图5所示。可以看到决策算法总是能选择较优的算法执行迁移过程,消耗的性能也是较小的。
图3不同迁移算法对不同负载类型虚拟机造成的停机时间
图4不同迁移算法对不同负载类型虚拟造成的总迁移时间
图5不同迁移算法对不同负载类型虚拟机造成的迁移总数据量
运行Linpack应用的虚拟机既是内存密集型又是CPU密集型,假设迁移时需要考虑迁移总时间、停机时间、迁移数据量和对应用程序的影响程度,设置器迁移决策因子migration_factor=(0.4,0.3,0.15,0.15),利用决策算法进行判定后选择了HMDC算法进行迁移,迁移的性能结果如图6所示,各性能指标为以最小值为基准的规格化后结果。在计算型中计算各个算法的迁移代价,最小的迁移代价为C=0.4*0.622+0.3*0.133+0.15* 0.936+0.15*1.3=0.6241,在内存密集型中计算各个算法的迁移代价,最小的迁移代价为C=0.4*0.577+0.3*0.014+0.15* 0.778+0.15*1.3=0.5467。因此选择HMDC算法迁移该虚拟机可以获得较小的迁移代价和较优的迁移性能。
图6不同迁移算法迁移运行Linpack虚拟机的性能消耗
特定的虚拟机动态迁移算法大多由某一解决问题出发点而设计,故此其适用的应用场景会有所不同。本文通过分析不同迁移算法的执行过程与特性,提出了一种基于负载特征的虚拟机动态迁移决策算法,为不同负载类型的虚拟机迁移寻找合适的迁移算法。其核心有两点,其一:如何准确地判定虚拟机的负载类型,本文基于最近相似原则,根据最近时刻虚拟机的负载特征决策出当前虚拟机的负载类型。其二:如何准确地预测每一台虚拟机迁移的代价,由于迁移代价与众多因素息息相关,如云平台物理机器的性能、网络的吞吐量、虚拟机的负载类型、迁移算法对虚拟机CPU、内存、网络资源的消耗等,因此通过初始获得的参数去模拟动态迁移代价是较不准确的。本文利用迁移性能表可以量化迁移算法的方法,用多次试验的后验结果估计迁移代价,并通过以后每次的迁移结果学习改进迁移性能表中的因子。随着迁移次数的增多,迁移性能表会更加收敛和准确。
[1]常德成,徐高潮.虚拟机动态迁移方法[J].计算机应用研究,2013.
[2]CLARK C,FRASER k,HAND S.Live Migration of Virtual Machines[M].USA:ACM,2005.
[3]邹潇,姚立红等.基于脏页率的虚拟机动态内存迁移[J].通信技术,2013.
[4]赵佳.虚拟机动态迁移的关键问题研究[D].吉林大学,2013.
[5]刘海坤.虚拟机在线迁移性能优化关键技术研究[D].华中科技大学,2012.
[6]廖国龙.面向业务特征的虚拟动态迁移研究[D].四川大学,2016.
国家重点研发计划(2016yfb00604,2016yfb00605),国家自然科学基金项目(61572334)。