基于cpu亲和力的虚拟cpu动态绑定方法

文档序号:6334554阅读:406来源:国知局
专利名称:基于cpu亲和力的虚拟cpu动态绑定方法
技术领域
本发明涉及计算机科学中的在多核和众核环境下的虚拟机领域,特别是基于CPU 亲和力的虚拟CPU的动态绑定方法。
背景技术
虚拟化技术是一种利用单个物理平台虚拟多个客户机操作系统(Guest OS)的技 术。随着虚拟化和多核以及众核技术的发展,同一平台上多服务器之间实现了透明化,同时 虚拟机监视器(Virtual Machine Monitor, VMM)在硬件管理上的不断优化,使得硬件资源 得以充分利用。多核和众核平台为虚拟化带来了性能提升、可靠性提高以及全新的应用模 式,同时以英特尔和AMD为代表的硬件级别的虚拟化技术能够支持效率更高、性能更优化 的本机虚拟化能力。多核与众核技术的兴起,为虚拟化技术的发展带来了新的机遇和挑战。 XeruKVM以及VMware作为当前主流虚拟化技术,在服务器整合、资源优化、能量控制等方面 具有一定贡献。随着虚拟化技术应用的广泛,云计算和高性能计算已经逐步在采取相应的 虚拟化技术。其中,Xen作为当前流行的开源项目已经在虚拟化的实现上有较大的共享。同 时虚拟化技术还在虚拟集群领域也有着广阔的利用前景。在上述应用场景中,由于多核处理器和多处理器的广泛应用,如何合理的分配使 用CPU资源是调度面临严重的问题。虚拟化技术使得客户机操作系统不可直接访问硬件 资源,以CPU资源为例,虚拟机监控器需要向客户机操作系统提供虚拟CPU (Virtual CPU, VCPU),使得其系统内的调度器完成调度。因此,对于运行在上层虚拟机的进程来说,其执行 过程经过了两次调度。第一次是虚拟机操作系统本身的调度器,该算法可有效分析进程特 性并进行相应的高效调度;第二次是虚拟机监视器的调度器,负责整合多客户机操作系统 间的CPU资源的分配,由于其调度单位为虚拟CPU,对虚拟机操作系统的进程信息不可知, 因此基于下层硬件资源的公平分配方式使得某些进程不能得到有效执行。以Xen虚拟机默 认的Credit调度器为例,尽管其在对称多处理器(Symmetrical Multi-Processors, SMP) 平台下具有较高的适应性,可有效提高CPU利用率,但是由于其调度单位为虚拟CPU,缺乏 对虚拟CPU内的进程属性的认知,因此在客户机操作系统的调度器针对进程属性的调度策 略,无法在虚拟机监视器这一层的调度器中实现。特别是对于CPU密集型的多线程进程,由 于其频繁访问内存中的数据使得CPU 二级缓存的命中率成为其执行效率的瓶颈,而Credit 调度器在调度时不对虚拟CPU进行客户机操作系统的区分,以及无法获取其进程特性,因 此这种情况下的盲目调度将较大的降低CPU 二级缓存命中率,从而影响系统整体效率。传统的CPU亲和力分为硬亲和力和软亲和力,硬亲和力的进程主要是指由用户 或操作系统硬性绑定在某CPU队列中的进程,软亲和力是操作系统固有的亲和力特性,特 别是对于频繁读取数据的计算密集型进程而言,其在CPU之间的迁移会造成较大的性能开 销,而操作系统可有效防止这种开销。而在虚拟化环境下,虚拟机监视器中的调度器无法根 据虚拟CPU上进程的CPU亲和力特性进行调度优化,因此,一种从虚拟机监视器层获取客户 机操作系统进程信息并且采取相应策略的调度方法是十分必要的。

发明内容
本发明以实现虚拟机进程高效运行为目标,通过CPU亲和力的感知和虚拟CPU动 态绑定,设计并实现了基于CPU亲和力的虚拟CPU动态绑定方法,具体包括1.客户机操作系统中进程的CPU亲和力感知方法。首先,将客户机操作系统中的进程信息进行捕获,通过获取进程地址描述符,来获 取CPU硬亲和力信息;通过统计进程实际的CPU时间与CPU占用时间,获取CPU软亲和力信 肩、O其次,分析CPU硬亲和力信息和软亲和力信息,设定CPU亲和力系数值(Value ofAffinity Coefficient, VAC)。最后,修改Xen代码中虚拟CPU的数据结构,添加结构体PI (Process Information),用于存储所捕获进程的相关信息。2.虚拟CPU动态绑定方法 利用虚拟CPU中PI信息完成虚拟CPU绑定决策分析,分析过程包括对VAC的分析 和判定;制定虚拟CPU绑定策略,针对虚拟CPU中PI信息的分析结果,实现虚拟CPU的动态绑定。与现有技术相比较,本发明的创新之处在于针对客户机操作系统中正在执行的 进程,提出一种CPU亲和力系数的量化方法,用于标识该进程对CPU 二级缓存的依赖程度; 根据AC值,采取基于CPU亲和力的虚拟CPU绑定策略,从而保证CPU密集型进程所在CPU 访问二级缓存的命中率,提高进程执行效率。具体体现在1.本发明实现了在虚拟机监视器层对客户机操作系统的进程的捕获,通过统计该 进程所在虚拟CPU上的CPU实际使用情况和CPU占用情况,实现了一种CPU亲和力系数的
量化方法。2.本发明实现了一种基于上述CPU亲和力系数的虚拟CPU绑定方法,打破了在迁 移时优先选择CPU队头的虚拟CPU这一传统思想,而是在保持负载平衡的前提下,选择迁移 所造成的性能开销最小的虚拟CPU。


图1基于CPU亲和力的虚拟CPU动态绑定方法的体系结构图2CPU亲和力系数的捕获与量化流程3虚拟CPU动态绑定方法流程4虚拟CPU执行绑定决策的调度器与传统调度器在迁移时的对比图
具体实施例方式如图1所示,基于CPU亲和力的虚拟CPU动态绑定方法在虚拟机监控器(VMM)中 实现,分为客户机操作系统CPU亲和力感知引擎和虚拟CPU动态绑定器2个模块。客户机操作系统CPU亲和力感知引擎负责从客户机操作系统中获取即将得到执 行的进程的CPU亲和力信息,并采用量化的VAC (Value of Affinity Coefficient, CPU亲 和力系数值),向虚拟CPU动态绑定器模块提供该信息。包括CPU亲和力信息捕获、CPU亲
5和力信息分析和虚拟CPU信息修改三个部分。CPU亲和力信息捕获分为CPU硬亲和力捕获和CPU软亲和力信息捕获两部分。在 虚拟机中,进程切换需要更新CR3寄存器内容,而由于客户机操作系统没有修改CR3寄存器 的特权,因此这部分工作由虚拟机监视器来完成。如图2所示,在虚拟机监视器层通过捕获 CR3寄存器被修改这一时刻,立即读取进程描述符地址,通过虚拟地址到机器地址的转换, 读取即将执行的进程信息,利用CPU硬亲和力信息在进程结构体中的偏移量,来获取CPU的 硬亲和力信息。不同的Linux版本对应的该偏移量不同,因此该偏移量需要根据客户机操 作系统的内核版本进行调整。如果此时该进程对CPU硬亲和力进行了设定,即完成CPU硬亲 和力的捕获,无需再进行CPU软亲和力捕获过程;如果此时CPU硬亲和力信息为空,则在该 进程执行过程中,通过统计该进程的CPU实际使用情况来完成CPU软亲和力信息捕获。CPU 实际使用情况的统计方法通过在虚拟CPU数据结构中为每个执行的进程设定计时器。对于 I/O访问频繁的进程,在其执行时间内所消耗CPU时间较少;对于CPU密集的进程,其可充 分利用执行时间内的CPU资源。因此,通过统计该进程在本次调度周期内占有CPU时间与 实际使用的CPU时间,来提供CPU软亲和力信息。其中CPU执行时间指进程实际使用的CPU 时间,CPU占用时间指调度器调度给该进程的时间,CPU执行时间与CPU占用时间均针对在 一个调度周期内的相应统计数值。CPU的亲和力信息分析负责针对CPU亲和力信息捕获情况来设定VAC的数值。 VAC(Valueof Affinity Coefficient)指CPU亲和力系数值,其值被设定在
的闭区 间内。对于CPU硬亲和力信息不为空的情况,令VAC= 100 ;对于CPU硬亲和力信息为空的 情况,根据CPU亲和力捕获中统计的CPU执行时间来计算VAC的数值。具体公式为
/CPU执行时间、
¥AG = ---— * 100
Icpu占用时冏/虚拟CPU信息修改负责向虚拟CPU动态绑定器模块提供VAC信息。具体实现为, 通过修改Xen代码中虚拟CPU的数据结构,添加结构体PI (Process Information),该结构 用于存储当前VAC的值,同时还负责记录最近Is内的所有调度周期中的各个VAC数值,当 新进程到来尚未执行并且其硬亲和力信息为空时,由于无法计算此时的VAC,因此可通过计 算历史数据的平均值向虚拟CPU动态绑定器提供VAC信息。虚拟CPU动态绑定器模块通过客户机操作系统CPU亲和力感知引擎提供的CPU亲 和力信息,对虚拟CPU实现动态绑定。具体分为虚拟CPU绑定决策分析和虚拟CPU绑定策 略两部分。虚拟CPU绑定决策分析负责读取虚拟CPU中的PI信息,将VAC提取出来,通过VAC 的数值进行绑定决策判定。在VAC大于75时,判定为可绑定;在VAC小于等于75时,判定 为不绑定。通过实验分析,这种情况下,整体调度性能最优,因此选择此判定策略进行虚拟 CPU绑定决策分析。虚拟CPU的绑定策略负责根据虚拟CPU的绑定信息对相应的虚拟CPU进行绑定和 迁移。当虚拟CPU绑定决策分析结果为不绑定时,如果虚拟CPU处于绑定状态,则执行相应 解除绑定策略,如果虚拟CPU此时处于非绑定状态,则不进行任何绑定和迁移;当虚拟CPU 绑定决策分析结果为可绑定时,执行相应绑定策略。具体策略如下
6
(1)绑定到未发生虚拟CPU绑定的CPU上;(2)根据各CPU运转情况,绑定在负载较轻的CPU上;(3)各CPU负载较为均衡时,绑定在虚拟CPU所处队列对应的CPU上;(4)解除绑定时,虚拟CPU不迁移;(5)当虚拟CPU绑定数目等于CPU个数时,对于下次绑定之前,将VAC最低的虚拟 CPU的绑定解除;(6)空闲状态的虚拟CPU不进行任何绑定操作,当虚拟CPU从其它状态进入空闲状 态时,如果该虚拟CPU被绑定,则解除其绑定。虚拟CPU的迁移策略旨在减少CPU 二级缓存的失效率,提高CPU利用效率。因此 对于VAC较高的虚拟CPU,其频繁的访问CPU 二级缓存突显绑定的必要性。策略(1)通过 防止两个VAC较高的虚拟CPU在同一 CPU队列中,从而避免两个虚拟CPU轮流执行而导致 CPU 二级缓存的频繁失效;策略(2)通过在绑定时考虑负载情况,从而保证了 CPU之间的负 载平衡;策略(3)在负载平衡均衡时,避免迁移的开销,优先将虚拟CPU绑定在本地队列中; 策略(4)通过在解除绑定时避免虚拟CPU迁移从而进一步减少了迁移开销;策略(5)保证 了任意时刻虚拟CPU绑定的数量不大于CPU数量,结合策略(1)避免了多个绑定虚拟CPU 在同一 CPU队列从而带来的CPU 二级缓存频繁失效问题,并进一步保证了负载平衡。策略 (6)考虑到虚拟CPU的状态转换时的绑定解除问题,确保了空闲的虚拟CPU不会绑定。根据以上策略,虚拟CPU动态绑定流程如图3所示。首先根据虚拟CPU绑定决策分 析结果来判定该虚拟CPU是否需要绑定。如果该虚拟CPU不可绑定,那么继续判断该虚拟 CPU是否已经被绑定,如果是,则解除其绑定并结束,如果否,则直接结束。如果该虚拟CPU 可绑定,则继续判断该虚拟CPU是否已经绑定。如果是,则直接结束,如果否,则从所有的 CPU队列中选择没有绑定虚拟CPU的CPU,并将此类型的CPU数目分为三种情况数目等于 0,这表明所有CPU存在虚拟CPU绑定的情况,按照策略,选择VAC值最小的虚拟CPU,并解除 其绑定,然后将需要绑定的该虚拟CPU绑定至解除绑定的虚拟CPU所在的CPU队列上并结 束;数目等于1,则直接绑定在该CPU上并结束;数目大于1,则根据CPU队列中虚拟CPU个 数,选择虚拟CPU个数最少的CPU队列,如果虚拟CPU个数最少的CPU队列有多个的情况, 则首先判定虚拟CPU所在CPU是否处于其中,如果是,则直接绑定到该CPU队列中并结束, 如果否,按照CPU的id优先选择id小的CPU,然后将虚拟CPU绑定到该队列中并结束,如果 虚拟CPU个数最少的CPU队列只有一个,则直接将虚拟CPU绑定到该队列中并结束。以上过程在调度每个虚拟CPU时执行,每个调度周期执行一次。另外,由于调度期 间调度器只针对非空闲的虚拟CPU进行调度,因此为保证策略(6)的执行,在虚拟CPU进入 空闲状态时,进行判定,对于处于绑定状态的虚拟CPU,解除绑定;对于非绑定的虚拟CPU, 不进行额外操作。图4是基于CPU亲和力的虚拟CPU动态绑定方法与传统的调度方法在迁移时的 区别对比。传统的调度策略(图4中的A)在迁移时选择其它CPU的队列中的第一个虚拟 CPU ;通过本发明中的两个模块进行判定并绑定了虚拟CPU Y. 1之后当需要迁移(图4中的 B)时,优先选择未绑定的虚拟CPU,如图4B中的虚拟CPU X. 1。
权利要求
一种多核/众核平台下的基于CPU亲和力的虚拟CPU动态绑定方法,其特征在于包括以下步骤(1)客户机操作系统CPU亲和力感知引擎从客户机操作系统中获取即将执行的进程的CPU亲和力信息,并用CPU亲和力系数值VAC量化该CPU亲和力信息,向虚拟CPU动态绑定器提供该VAC值,具体包括CPU亲和力信息捕获、CPU亲和力信息分析和虚拟CPU信息修改三个步骤,其中1)CPU亲和力信息捕获包括CPU硬亲和力信息捕获和CPU软亲和力信息捕获通过捕获CR3寄存器被修改这一时刻,立即读取进程描述符地址,并通过虚拟地址到机器地址的转换,读取即将执行的进程信息,利用CPU硬亲和力信息在进程结构体中的偏移量,来获取CPU的硬亲和力信息,如果此时该进程对CPU硬亲和力进行了设定,即CPU硬亲和力信息不为空,那么CPU硬亲和力信息捕获完成,如果此时CPU硬亲和力信息为空,则进行CPU软亲和力信息捕获,CPU软亲和力信息是通过在进程执行过程中统计该进程的CPU实际利用情况来完成的,具体包括CPU执行时间和CPU占用时间,其中CPU执行时间指进程实际使用的CPU时间,CPU占用时间指调度器调度给该进程的时间,CPU执行时间与CPU占用时间均针对在一个调度周期内的相应统计数值;2)CPU的亲和力信息分析中针对CPU亲和力信息捕获情况来设定VAC的数值,对于CPU硬亲和力信息不为空的情况,令VAC=100,对于CPU硬亲和力信息为空的情况,根据以下公式来计算VAC的数值3)虚拟CPU信息修改中向虚拟CPU动态绑定器提供VAC信息,存储当前VAC的值,同时还记录1秒内的调度周期的各个VAC数值,当新进程到来尚未执行并且其硬亲和力信息为空时,通过计算历史数据的平均值向虚拟CPU动态绑定器提供VAC信息;(2)虚拟CPU动态绑定器通过客户机操作系统CPU亲和力感知引擎提供的CPU亲和力信息,对虚拟CPU实现动态绑定,具体包括虚拟CPU绑定决策分析和执行虚拟CPU绑定策略两个步骤,其中1)虚拟CPU绑定决策分析中,读取VAC值,通过VAC的数值进行绑定决策判定在VAC大于75时,判定为可绑定,在VAC小于等于75时,判定为不绑定;2)执行虚拟CPU的绑定策略中,根据虚拟CPU的绑定决策分析结果对相应的虚拟CPU进行绑定和迁移,当虚拟CPU绑定决策分析结果为不绑定时,如果虚拟CPU处于绑定状态,则执行相应解除绑定策略,如果虚拟CPU此时处于非绑定状态,则不进行任何绑定和迁移;当虚拟CPU绑定决策分析结果为可绑定时,执行相应绑定策略。FSA00000321403700011.tif
2.如权利要求1所述的方法,其特征在于,VAC的取值区间为
的闭区间,VAC 值越大代表CPU亲和力程度越高。
3.如权利要求1所述的方法,其特征在于,客户机操作系统CPU亲和力感知引擎在统计 进程的CPU实际利用情况时,通过统计该进程在本次调度周期内时实际使用的CPU时间和 调度器调度给该进程的CPU时间来完成。
4.如权利要求1所述的方法,其特征在于,虚拟CPU动态绑定器中虚拟CPU的绑定策略 具体为1)绑定到未发生虚拟CPU绑定的CPU上;2)根据各CPU运转情况,绑定在负载较轻的CPU上;3)各CPU负载较为均衡时,绑定在虚拟CPU所处队列对应的CPU上;4)解除绑定时,虚拟CPU不迁移;5)当虚拟CPU绑定数目等于CPU个数时,对于下次绑定之前,将VAC最低的虚拟CPU的 绑定解除;6)空闲状态的虚拟CPU不进行任何绑定操作,当虚拟CPU从其它状态进入空闲状态时, 如果该虚拟CPU被绑定,则解除其绑定。
5.如权利要求1所述的方法,其特征在于,客户机操作系统是Linux。
6.如权利要求1所述的方法,其特征在于,虚拟机监视器是Xen。
7.一种系统,其执行如权利要求1所述的方法步骤。
全文摘要
一种在多核/众核平台下的基于CPU亲和力的虚拟CPU动态绑定方法,其包括客户操作系统CPU亲和力感知引擎和虚拟CPU动态绑定器两个模块。客户操作系统CPU亲和力感知引擎从Guest OS中获取即将得到执行的进程的CPU亲和力信息,并采用量化的VAC(Valueof Affinity Coefficient,CPU亲和力系数值),向虚拟CPU动态绑定器提供该信息;虚拟CPU动态绑定器模块通过客户操作系统CPU亲和力感知引擎提供的CPU亲和力信息,执行相应策略,实现对虚拟CPU实现动态绑定。
文档编号G06F9/455GK101976201SQ20101052210
公开日2011年2月16日 申请日期2010年10月22日 优先权日2010年10月22日
发明者李智, 白跃彬 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1