CN104503838A - 一种虚拟cpu调度方法 - Google Patents
一种虚拟cpu调度方法 Download PDFInfo
- Publication number
- CN104503838A CN104503838A CN201410676265.3A CN201410676265A CN104503838A CN 104503838 A CN104503838 A CN 104503838A CN 201410676265 A CN201410676265 A CN 201410676265A CN 104503838 A CN104503838 A CN 104503838A
- Authority
- CN
- China
- Prior art keywords
- cpu
- virtual
- load
- physical
- physical cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
一种虚拟CPU调度方法,属于计算机虚拟化技术领域,解决无法及时响应I/O处理、负载特性得不到满足及现有调度算法中负载均衡策略过于简单的问题。本发明包括调度初始化步骤、***虚拟CPU运行队列步骤、虚拟CPU运行步骤、负载均衡步骤、更新信用值与***负载步骤、重新分配信用值步骤、重新分配物理CPU步骤和更改虚拟机类型步骤。本发明将虚拟机分为三类,对不同类型负载进行了动态隔离,绑定到两组不同类型负载的物理CPU上运行,对运行不同类型负载的虚拟CPU给予不同的时间片,提高了运行效率并保证I/O性能;本发明重新设计了负载均衡策略,除了保证不同类型负载的隔离外,选择迁移开销最小的策略,解决了现有调度算法负载均衡策略过于简单的问题。
Description
技术领域
本发明属于计算机虚拟化技术领域,具体涉及一种虚拟CPU调度方法,通过设置多种类型的虚拟机来满足各类应用需求,并且动态地负载隔离以及优化的负载均衡策略大大的提升了整个虚拟化平台的性能。
背景技术
当前,计算机性能无论是在CPU、内存或者网络方面都有了质的提升,在一个服务器上运行一个操作***的传统计算机架构,无法很好的利用这些优势,导致计算机的利用率很不理想,根据市场调研公司国际数据公司(International Data Corporation,IDC)的报告,在IT企业典型的数据中心,基础物理架构的平均利用率只有10%到15%,大部分计算机资源没有得到充分利用;其次,随着能耗以及维护问题得到越来越多人的关注,虚拟化技术开始得到学术界以及工业界的关注。
在计算机领域,虚拟化通常是指计算机软件在一个虚拟平台上而不是真实的物理机上运行。虚拟化技术允许一个计算机平台同时运行多个操作***,并且其应用程在彼此独立的环境中运行而互不影响,在保证了安全性和隔离性的同时,显著提高计算机的工作效率。现代计算机为虚拟化技术提供了强大的支持,保证在一台物理机器上运行的多台虚拟机均可获得足够的性能,并在各个虚拟机中运行单独的操作***实例,因此,越来越多的厂商开始将自己的服务以及应用移植到虚拟化平台下运行。经过多年的发展,CPU虚拟化与内存虚拟化技术已日趋成熟,而I/O虚拟化技术的发展却相对滞后,因为安全性的考虑,虚拟机的I/O操作需要虚拟机监控器(虚拟化抽象层)的干预,同时虚拟机之间对I/O资源的竞争以及I/O响应延时始终制约着I/O性能的提升,影响了虚拟化平台的整体性能,也限制了虚拟化技术的进一步推广应用。因此,如何提高虚拟机的I/O性能成为当前虚拟化技术的研究重点之一。
目前,提升虚拟机I/O性能主要有两种方式,一种方式是减少虚拟机监控器的干预,虚拟机监控器的介入会影响虚拟机的正常运行,发生上下文切换,造成巨大的开销;另一种方式是优化虚拟CPU的调度,让虚拟机能得到更快的响应。目前主流的虚拟CPU调度算法注重的是让虚拟机按比例公平共享计算机资源,不能保证实时性,响应时间要求较高的应用中,事件的响应延迟与其所处虚拟CPU队列位置密切相关,这样不但延时不稳定,并且一旦处于较后的位置就要忍受极大的延时。2008年,Diego Ongaro等人在《Scheduling I/O in Virtual Machine Monitors》(见ACM SIGPLAN/SIGOPS Conferenceon Virtual Execution Environments,2008)一文中提出在虚拟化平台Xen的信用值调度方法中添加突发(BOOST)状态,当虚拟CPU在阻滞状态被I/O事件唤醒时,则进入突发状态,引起一次虚拟CPU调度,在该次调度中,处于突发状态的虚拟CPU抢占物理CPU,处理I/O事件,但即便是突发机制也只在虚拟CPU被唤醒时才有用,一旦有其它应用能持续消耗虚拟CPU的时间片,虚拟CPU便不会阻滞,因此对于大多数的I/O型任务仍然存在响应延时的问题。2012年,Cong Xu,Sahan Gamage等人在《vSlicer:Latency-Aware Virtual Machine Scheduling via Differentiated-Frequency CPU Slicing》(见The 21st international symposium on High-Performance Parallel and Distributed Computing,2012)一文中提出了采用不同长度的CPU时间片来运行不同类型负载的虚拟机,为运行I/O型负载的虚拟机分配较短的CPU时间片,为运行计算型负载的虚拟机分配较长的CPU时间片,如此便可以降低运行I/O型负载的虚拟机的等待时间并增加其被调度的频率,提升I/O性能。但是该方法仍然存在下述问题:(a)运行I/O型负载的虚拟CPU与运行计算型负载的虚拟CPU在同一虚拟CPU运行队列中时,前者受后者的影响大,一旦等待一个计算型负载的虚拟CPU运行就会有很大的延时,因此,这种方法只能一定程度上降低延时;(b)一个虚拟机只有一种固定的CPU时间片,因此只能运行单类型的负载,无法满足在一个虚拟机内同时高效运行计算型负载以及I/O型负载的需求。2013年,Cong Xu,Sahan Gamage等人在《vTurbo:Accelerating Virtual Machine I/OProcessing Using Designated Turbo-Sliced Core》(见USENIX Annual Technical Conference,2013)一文提出了进一步的改善方案,专门从物理CPU中分出一个物理核用于处理I/O事件,并在虚拟机原有的虚拟CPU基础上,再多为其分配一个虚拟CPU,该虚拟CPU专用于运行I/O负载,并由专门分配的物理核进行调度。该方案消除了计算型负载对I/O处理的影响,进一步的提升了I/O性能,但是仍然存在一些不足:(a)静态的物理CPU资源分配,当***不同类型的负载比重相差很大时会造成资源利用率很低;(b)虚拟机具有两种类型的虚拟CPU,运行单类型的负载时,无法将虚拟CPU性能发挥到极致。随着多核处理器的流行,目前虚拟CPU调度算法中的负载均衡策略也被认为太过于简单,仅仅遍历***中的物理CPU,并寻找队列中非空闲虚拟CPU进行迁移,没有考虑到迁移的开销与进一步提升性能。在现今的高速应用中,对带宽和I/O延时的要求是相当高的,例如在IT企业数据中心被广泛使用的以太网光纤通道,对于此类对响应延迟要求高的应用,现有的虚拟CPU调度算法并不适用。
为了清楚地理解本发明,以下对本发明中所使用的术语进行解释:
物理CPU(Physical Central Processing Unit,PCPU):计算机***中真实的处理器单元;一个计算机***可以有多个物理CPU,计算机***通过物理CPU位图来标记、管理各物理CPU。
物理CPU调度结构:在调度算法中,每一个物理CPU都有一个对应的物理CPU调度结构,保存该物理CPU上的虚拟CPU运行队列、定时触发的次级计时器等。如果是***中第一个初始化的物理CPU调度结构,需要将该物理CPU标记为主物理CPU,并为其设置主计时器。
物理CPU位图:为一个整型数组,数组中每一位代表中计算机的一个物理CPU,通过对物理CPU位图中的某位执行置1操作来标记指定的物理CPU。
I/O位图:对物理CPU位图用户所定义的一个物理CPU位图类型,对I/O位图中的某位执行置1操作来标记那些专用于调度运行I/O负载虚拟CPU的物理CPU,通过亲和性设置函数来建立运行I/O负载虚拟CPU与I/O位图中置1位物理CPU的亲和性。
计算位图:对物理CPU位图用户所定义的一个物理CPU位图类型,对计算位图中的某位执行置1操作来标记那些专用于调度运行计算型负载虚拟CPU的物理CPU,通过亲和性设置函数来建立运行计算型负载虚拟CPU与计算位图中置1位物理CPU的亲和性。
虚拟CPU与物理CPU的亲和性(affinity):指在虚拟化平台中,存在多个物理CPU的情况下,可以通过***定义的亲和性设置函数对某一个或多个虚拟CPU指定可运行的物理CPU,保证该一个或多个虚拟CPU不会迁移到指定以外的物理CPU上运行。对于设置了亲和性的虚拟CPU,其数据结构中的亲和性变量中对应的物理CPU的位会置1,对于未设置亲和性的虚拟CPU,其数据结构中的亲和性变量所有位均为1,表示可以在所有物理CPU上调度。
虚拟机(Virtual Machine):指通过软件模拟的具有完整硬件***功能的、运行在一个完全隔离环境中的完整计算机***。
虚拟机调度结构:在调度算法中,每一个虚拟机都有一个对应的虚拟机调度结构,保存其虚拟CPU数目,虚拟CPU链表,虚拟机信用值权重等信息。
虚拟CPU链表:每一个虚拟机都具有一个虚拟CPU链表,管理该虚拟机所具有的虚拟CPU。虚拟CPU链表中的虚拟CPU的数目即为该虚拟机所分配的虚拟CPU数目,依据虚拟CPU编号排序。
虚拟CPU(VCPU):虚拟化平台分配给虚拟机的CPU。
空闲虚拟CPU(IDLE VCPU):用来占位的虚拟CPU,不完成实际工作,具有最低的优先级-3,在每个物理CPU的虚拟CPU运行队列上均有一个空闲虚拟CPU。
虚拟CPU调度结构:在调度算法中,每一个虚拟CPU都有一个对应的虚拟CPU调度结构,保存其信用值、优先级,所属的虚拟机等信息。
虚拟CPU运行队列:每个物理CPU具有一个虚拟CPU运行队列,由在该物理CPU上运行的虚拟CPU按照优先级从高到低的顺序组成;虚拟CPU的优先级值从高到低为-1、-2、-3,分别表示其可被调度、不可被调度、仅用于占位;
多核处理器架构:在现今的多核处理器架构中,一台主机往往存在多个物理封装(socket),每一个物理封装中又封装了多个物理核(core),采用超线程技术后,每一个物理核(core)又包括多个物理CPU,同一物理封装中的各物理核能够共享三级缓存;同一物理核中的物理CPU能够共享二级缓存;这样的缓存结构可以大幅的提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高***性能。
虚拟化平台:是让多个虚拟机可以在一套物理硬件上安全运行的软硬件***,目前提供虚拟化平台的公司有:微软,思杰,威睿等。
Xen:是英国剑桥大学计算机实验室开发的一种虚拟化平台,它和虚拟机密切结合,占用资源少,以高性能、占用资源少著称。
虚拟机监控器(Virtual Machine Monitor,VMM):运行在基础物理服务器和操作***之间的虚拟化抽象层,可允许多个操作***和应用共享硬件,虚拟机监控器为每台I/O设备建立相应的I/O请求队列。
信用值(credit):credit调度算法中的核心变量,决定虚拟CPU的优先级以及能获得的CPU时间片长度,其值域为-300~300,只有当虚拟CPU的信用值大于0时,该虚拟CPU才可以得到调度,每一次调度虚拟CPU都会消耗10×时间片长度的信用值额度,当虚拟CPU的信用值额度小于或等于0时,则需等待下一次信用值分配。
I/O型负载:以I/O操作为主的应用程序,CPU负担很轻,通常只运行很短的时间,需要的是更为频繁的响应。
计算型负载:以CPU操作为主的应用程序,通常CPU负载达到100%,需要的是降低调度频率并且尽量长的运行时间。
混合型负载:运行环境中同时有以I/O操作为主的应用程序和以CPU操作为主的应用程序,往往以CPU操作为主的应用程序会接近100%的占用CPU资源,而以I/O操作为主的应用程序还没有用完时间片就被阻塞,因此在这种环境中要给以I/O操作为主的应用程序更高的优先级,增加其调度频率。
以太网光纤通道:将光纤通道映射到以太网,可以将光纤通道信息***以太网信息包内,从而让服务器和存储设备之间的光纤通道请求和数据可以通过以太网连接来传输,而无需专门的光纤通道结构。
发明内容
本发明提供一种虚拟CPU调度方法,用于多处理机虚拟化环境,解决在虚拟化环境中I/O处理无法得到及时响应、负载特性得不到满足以及当前主流调度算法中负载均衡策略过于简单的的问题。
本发明所提供的一种虚拟CPU调度方法,包括调度初始化步骤、***虚拟CPU运行队列步骤、虚拟CPU运行步骤、负载均衡步骤、更新信用值与***负载步骤、重新分配信用值步骤、重新分配物理CPU步骤和更改虚拟机类型步骤,其特征在于:
(1)调度初始化步骤:为每个物理CPU创建物理CPU调度结构:为主物理CPU设置主计时器和调节计时器,其它物理CPU设置次级计时器;为每个虚拟机创建虚拟机调度结构:初始化虚拟机信用值权重,设定虚拟机类型;为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:初始化每个虚拟CPU的负载变量、I/O任务紧迫程度,为每个虚拟CPU分配信用值;初始化I/O位图Ab和计算位图Ac,Ab中的物理CPU专用于调度运行I/O型负载的虚拟CPU,Ac中的物理CPU专用于调度运行计算型负载的虚拟CPU,它们是互补的物理CPU位图;初始化全局的I/O负载变量Lb以及计算负载变量Lc,Lb和Lc分别记录***中运行I/O型负载以及计算型负载的虚拟CPU所消耗的信用值资源;设置每个虚拟CPU的优先级;
(2)***虚拟CPU运行队列步骤:如果当前虚拟CPU运行计算型负载,则直接***虚拟CPU运行队列中同一优先级的所有虚拟CPU之后;如果当前虚拟CPU运行I/O型负载,则按其优先级依序***虚拟CPU运行队列,对于优先级相等的虚拟CPU,则根据I/O紧迫程度从大到小排序;
(3)虚拟CPU运行步骤:如果当前物理CPU的队首虚拟CPU信用值小于或等于0,则触发负载均衡,转步骤(4);否则运行队首虚拟CPU,如果当前物理CPU为主物理CPU,运行过程中,次级计时器到时间,转步骤(5),主计时器到时间,转步骤(6),调节计时器到时间,转步骤(7),用户发出修改虚拟机类型命令,执行步骤(8);当前物理CPU为非主物理CPU,运行过程中,次级计时器到时间,转步骤(5),用户发出修改虚拟机类型命令,执行步骤(8);虚拟CPU达到运行时间后转步骤(2),重新***队列;
(4)负载均衡步骤:判断当前物理CPU在I/O位图中对应位是否为1,是则将I/O位图置1位的非空闲物理CPU作为目标CPU组,否则将计算位图置1位的非空闲物理CPU作为目标CPU组;然后从目标物理CPU组中选择迁移最优的物理CPU作为迁移的目标物理CPU,如果未找到迁移最优的物理CPU则放弃本次负载均衡;
找到目标物理CPU后,再判断当前物理CPU在I/O位图中对应位是否为1,是则将目标物理CPU的虚拟CPU运行队列中I/O任务最急迫的虚拟CPU作为目标虚拟CPU,否则将目标物理CPU的虚拟CPU运行队列中历史负载最接近目标物理CPU与当前物理CPU历史负载的差值一半的虚拟CPU作为目标虚拟CPU,将目标虚拟CPU从原队列中删除并***当前物理CPU的虚拟CPU队列队首;转回步骤(3);
(5)更新信用值与***负载步骤:更新当前虚拟CPU的信用值、负载变量,并更新相关物理CPU的历史负载变量,判断运行当前虚拟CPU的物理CPU在I/O位图中对应位值是否为1,是则更新其I/O任务紧迫变量以及全局的I/O负载变量,转回步骤(3);否则更新全局的计算负载变量;转回步骤(3);
(6)重新分配信用值步骤:根据当前虚拟CPU的信用值判定优先级,重新计算每个虚拟CPU分配的信用值额度,并更新所有虚拟CPU的信用值,判断更新后虚拟CPU的信用值是否从非正变为正,是则更改其优先级,转回步骤(3);否则有关虚拟CPU的优先级不改变,直接转回步骤(3);
(7)重新分配物理CPU步骤:根据全局I/O负载变量及计算负载变量分别计算运行I/O负载的物理CPU数目和运行计算型负载的物理CPU数目;并根据计算出的物理CPU数目修改对应的I/O位图和计算位图,重新建立虚拟CPU与物理CPU之间的亲和性;将I/O负载变量及计算负载变量清0,并更新所有虚拟CPU的I/O任务紧迫程度变量,转回步骤(3);
(8)更改虚拟机类型步骤:读取用户命令,根据其中的虚拟机ID、虚拟机类型Q以及虚拟CPU数目Xi,读取原虚拟机类型Si,根据虚拟机类型Q和原虚拟机类型Si,重新建立虚拟机的各虚拟CPU与I/O位图或计算位图的亲和性,并修改虚拟机类型变量,转回步骤(3)。
所述的虚拟CPU调度方法,其进一步特征在于:
(1)调度初始化步骤,包括如下子步骤:
(1.1)为每个物理CPU创建物理CPU调度结构:
判断是否为第一个物理CPU创建物理CPU调度结构,是则进行子步骤(1.2);否则转子步骤(1.3);
(1.2)将第一个物理CPU标记为主物理CPU,并为其设置主计时器和调节计时器,主计时器周期T主=30~100ms,为10ms的整数倍,同时为T次的整数倍,调节计时器周期T调=1200~3000ms,为T主的整数倍,转子步骤(1.3);
(1.3)设置次级计时器,次级计时器周期T次为(1~3)×10ms;将该物理CPU的历史负载变量Hp初始化为0;历史负载变量Hp记录在该物理CPU上运行的虚拟CPU所消耗掉的所有信用值总和,物理CPU序数p=1~G,G为***中的物理CPU个数,G=1~64;
(1.4)为每个虚拟机创建虚拟机调度结构:
在各个虚拟机的虚拟机调度结构中,将对应虚拟机信用值权重Wi初始化为256,对应虚拟机类型Si设定为0,并将其虚拟CPU链表初始化为空;
其中,虚拟机序数i=1~V,V为用户创建的虚拟机个数,V=1~100;Si为0表示计算型负载,Si为1表示I/O型负载,Si为2表示混合型负载,混合型负载为计算型和I/O型负载相当的负载;
(1.5)为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:
将虚拟CPU加入所属虚拟机的虚拟CPU链表中;
将每个虚拟CPU的负载变量Hij初始化为0,
将每个虚拟CPU的I/O任务紧迫程度变量Iij初始化为0,Iij=0~1,Iij值越大表示I/O任务越紧迫,Iij=0,表示没有I/O负载;
并为每个虚拟CPU分配信用值,其中第i个虚拟机的第j个虚拟CPU的信用值Cij=G×10×T主×Wi/(WT×Mi);
其中,***总权重
虚拟机中虚拟CPU的序数j=1~Mi,Mi为第i个虚拟机的虚拟CPU个数,由用户设定,为小于G的整数;
(1.6)将I/O位图Ab和计算位图Ac初始化:
建立I/O位图Ab和计算位图Ac,将Ab中的各位初始化为全0,Ac中的各位初始化为全1,表示***默认初始化运行计算型负载;
(1.7)初始化时,所有虚拟CPU默认运行计算型负载,建立各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(1.8)设置全局的I/O负载变量Lb以及计算负载变量Lc,将Lb和Lc均初始化为0;
(1.9)将各虚拟CPU的优先级Pij初始化为-1,表示其可被调度;
(2)***虚拟CPU运行队列步骤,包括如下子步骤:
(2.1)判断当前虚拟CPU是否与计算位图Ac设置亲和性,是则表示该虚拟CPU运行计算型负载,进行子步骤(2.2),否则表示该虚拟CPU运行I/O型负载,转子步骤(2.3),
(2.2)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较的虚拟CPU之前,否则顺序往后比较,直至虚拟CPU运行队列队尾;***完成后,转步骤(3);
(2.3)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(2.4)比较当前虚拟CPU的优先级Pij是否等于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则进行子步骤(2.5),否则顺序往后比较,直至虚拟CPU运行队列队尾,***完成后,转步骤(3);
(2.5)比较当前虚拟CPU的Iij值是否大于虚拟CPU运行队列中的虚拟CPU的Iij值,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则顺序往后,比较当前虚拟CPU的优先级Pij是否大于进行比较的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(3)虚拟CPU运行步骤,包括如下子步骤:
(3.1)在当前物理CPU的虚拟CPU运行队列中,判断队首虚拟CPU信用值Cij是否大于0,是则进行子步骤(3.2);否则触发负载均衡策略,转步骤(4);
(3.2)判断虚拟CPU运行队列中队首虚拟CPU亲和性设置的目标物理CPU组是否为Ab位图中置1位所代表的物理CPU,是则表明其运行I/O型负载,设置其运行时间片长度Ts=1ms~5ms;否则表明其运行计算型负载,设置其运行时间片长度Ts=30ms~100ms;
(3.3)将所述队首虚拟CPU从所在虚拟CPU运行队列中删除;
(3.4)判断当前物理CPU是否为主物理CPU,是则进行子步骤(3.5);否则进行子步骤(3.8);
(3.5)在主物理CPU上运行所述队首虚拟CPU,主物理CPU的次级计时器、主计时器和调节计时器同时计时;同时监控用户是否发出修改虚拟机类型命令,是则执行步骤(8);否则进行子步骤(3.6);
(3.6)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.7);否则将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.7)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5);当主计时器经历了时间T主,则主计时器复位,转步骤(6);当调节计时器经历了时间T调,则调节计时器复位,转步骤(7);如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.8)在当前物理CPU上运行所述队首虚拟CPU,当前物理CPU的次级计时器计时;同时监控用户是否修改虚拟机类型,是则执行步骤(8);否则进行子步骤(3.9);
(3.9)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.10);否则将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(3.10)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5),如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(4)负载均衡步骤,包括如下子步骤:
(4.1)选择进行负载均衡的物理CPU组:判断当前物理CPU在I/O位图Ab中对应位是否为1,是则表示该物理CPU的虚拟CPU运行队列上运行的是I/O型负载,将I/O位图Ab中置1位的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);否则表示该物理CPU队列上运行的是计算型负载,将计算位图Ac中置1位的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);
(4.2)从目标物理CPU组中选择迁移最优的物理CPU:在相应的Ab或Ac中,遍历所述目标物理CPU组,判断是否找到与当前物理CPU在同一个物理核上的非空闲物理CPU,是则将其作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.3);
(4.3)在相应的Ab或Ac中,重新遍历目标物理CPU组,判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则进行子步骤(4.4),否则转子步骤(4.5);
(4.4)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp,是则将该物理CPU作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.5);
(4.5)在相应目标物理CPU组中,顺序向后判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则转子步骤(4.4),否则转子步骤(4.6);
(4.6)重新遍历目标物理CPU组,判断是否找到与当前物理CPU在不同物理封装上的非空闲物理CPU,是则进行子步骤(4.7),否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.7)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp的两倍,是则将该非空闲物理CPU作为迁移的目标物理CPU,转子步骤(4.8);否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.8)在目标物理CPU上选择合适的虚拟CPU进行转移:
判断当前物理CPU在I/O位图Ab中对应位是否为1,是则遍历目标物理CPU的虚拟CPU运行队列,将其中Iij值最大的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);否则遍历目标物理CPU的虚拟CPU运行队列,找到Hij最接近目标物理CPU的Hp与触发负载均衡的物理CPU的Hp差值一半的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);
(4.9)将迁移的目标虚拟CPU从目标物理CPU的虚拟CPU运行队列上移除并***到当前物理CPU的虚拟CPU运行队列的队首,转子步骤(3.2);
(5)更新信用值与***负载步骤,包括如下子步骤:
(5.1)更新当前虚拟CPU的信用值Cij:将Cij-10×T1的值赋予Cij;
更新当前虚拟CPU的负载变量Hij:将Hij+10×T1的值赋予Hij;
更新运行当前虚拟CPU的物理CPU的历史负载变量Hp:将Hp+10×T1的值赋予Hp;
一个虚拟CPU运行1ms消耗的信用值额度为10,T1为当前虚拟CPU从上次开始运行至今经历的时间,单位为ms;
(5.2)判断运行当前虚拟CPU的物理CPU在I/O位图Ab中对应位值是否为1,是则表示运行了I/O任务,更新其Iij,将Iij-1/(10×T1)的值赋予Iij,进行子步骤(5.3);否则直接进行子步骤(5.3);
(5.3)根据当前虚拟CPU运行负载的类型,将其消耗掉的信用值累加到***负载中:判断运行当前虚拟CPU的物理CPU在位图Ab中对应位值是否为1,是则更新全局的I/O负载变量Lb,将Lb+10×T1的值赋予Lb,转子步骤(3.4);否则更新全局的计算负载变量Lc,将Lc+10×T1的值赋予Lc,转子步骤(3.4);
(6)重新分配信用值步骤,包括如下子步骤:
(6.1)判断当前虚拟CPU信用值是否大于0,是则进行子步骤(6.2);否则将当前虚拟CPU的优先级Pij设置成-2,表示无法再调度,进行子步骤(6.2);
(6.2)为每个虚拟机的虚拟CPU新分配信用值NCij:
NCij=G×T主×10×Wi/(WT×Mi);
其中NCij为第i个虚拟机的第j个虚拟CPU新得到的信用值;
(6.3)更新各虚拟CPU的信用值Cij:
将NCij+Cij的值赋予Cij,
判断是否Cij>0且Pij值为-2,是则将有关虚拟CPU的优先级Pij更改为-1,转子步骤(3.4),否则有关虚拟CPU的优先级Pij不改变,直接转子步骤(3.4);
(7)重新分配物理CPU步骤,包括如下子步骤:
(7.1)计算相应物理CPU数目;
运行I/O型负载的物理CPU数目N(Ab):
N(Ab)=(Lb/(Lb+Lc))×G;
运行计算型负载的物理CPU数目N(Ac):
N(Ac)=G-N(Ab);
(7.2)判断I/O位图Ab中置1位的物理CPU数目是否小于N(Ab),是则进行子步骤(7.3),否则转子步骤(7.4);
(7.3)从运行计算型负载的物理CPU中转移差值数目的物理CPU来运行I/O型负载:令Y=N(Ab)—I/O位图Ab中置1位的物理CPU数目,将I/O位图Ab中前Y个为0的位均置1,并将计算位图Ac中对应位清0,转子步骤(7.6);
(7.4)判断I/O位图Ab中置1位的物理CPU数目是否等于N(Ab),是则转子步骤(7.7);否则进行子步骤(7.5);
(7.5)从运行I/O型负载的物理CPU中转移差值数目的物理CPU来运行计算型负载:令Y=I/O位图Ab中置1位的物理CPU数目—N(Ab),将I/O位图Ab中前Y个置1位均清0,并将计算位图Ac中对应位置1,转子步骤(7.6);
(7.6)重新设置虚拟CPU亲和性:重新建立运行I/O型负载的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性;
重新建立运行计算型负载的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(7.7)将I/O负载变量Lb及计算负载变量Lc清0,并更新所有虚拟CPU的I/O任务紧迫程度变量Iij:将1/Hij的值赋予Iij,转子步骤(3.4);
(8)更改虚拟机类型步骤,包括如下子步骤:
(8.1)根据用户发出的修改虚拟机类型命令,读取其中的虚拟机ID、虚拟机类型Q以及虚拟CPU数目Xi,根据虚拟机ID,在其虚拟机调度结构中读取其虚拟机类型Si;
所述修改虚拟机类型命令包括虚拟机ID字段、虚拟机类型字段和虚拟CPU数目字段,虚拟机ID字段给出待修改类型的虚拟机ID;虚拟机类型字段给出待修改的虚拟机类型Q,Q为0表示计算型负载,Q为1表示I/O型负载,Q为2表示混合型负载;虚拟CPU数目字段给出混合型虚拟机中用于运行I/O负载的虚拟CPU数目,仅当Q=2时该字段才有效;
(8.2)判断是否Q=0,是则进行子步骤(8.3),否则进行子步骤(8.6);
(8.3)判断是否Si=0,是则保持虚拟机类型Si不变,转子步骤(3.5);否则判断是否Si=1,是则进行子步骤(8.4),否则进行子步骤(8.5);
(8.4)判定Si=1,表示将运行I/O型负载的虚拟机转变为计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.5)判定Si=2,表示将运行混合型负载的虚拟机转变为运行计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立其各个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.6)判断是否Q=1,是则进行子步骤(8.7),否则进行子步骤(8.11);
(8.7)判断是否Si=0,是则进行步骤(8.8),否则进行子步骤(8.9);
(8.8)表示将运行计算型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.9)判断是否Si=1,是则保持虚拟机类型Si不变,转子步骤(3.5);否则进行子步骤(8.10);
(8.10)判定Si=2,表示将运行混合型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立其各虚拟CPU与I/O位图Ai中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.11)判定Q=2,判断是否Si=0,是则进行子步骤(8.12),否则进行子步骤(8.13);
(8.12)判定Si=0,表示将运行计算型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中前Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机中前Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.13)判断是否Si=1,是则进行子步骤(8.14),否则进行子步骤(8.15);
(8.14)判定Si=1,表示将运行I/O型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中后Mi-Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机中后Mi-Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.15)判定Si=2,保持虚拟机类型Si不变,转子步骤(3.5)。
所述调度初始化步骤、重新分配物理CPU步骤和更改虚拟机类型步骤中,建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,可以通过***定义的设置亲和性函数;
解除各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,可以通过***定义的设置亲和性函数,重新建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性。
在现有调度算法中,注重的是将物理CPU资源公平的分给每个虚拟CPU,但这种公平仅仅是表面上的,因为不同的负载对运行环境的需求不一样,I/O型负载通常执行时间短,但是希望低延时与高频率的调度,按照现行的调度算法,运行I/O型负载的虚拟CPU很容易因为陷入排队等待而导致很高的延时。
本发明为了满足不同应用需求并保证I/O性能,对虚拟机进行分类,延时敏感型的虚拟机专门运行I/O型负载;非延时敏感型的虚拟机专门运行计算型负载;混合型虚拟机,同时运行多类负载。为运行计算型负载的虚拟机分配较长的时间片,减少环境切换的开销;为运行I/O型负载的虚拟机分配较短的时间片,获得较高的调度频率;对于混合型负载的虚拟机,需要同时兼顾两种负载的特点,则进行内部的虚拟CPU划分,对运行I/O型负载的虚拟CPU设定短时间片,对运行计算型负载的虚拟CPU设定正常时间片,让其可高效运行。为了不让计算型负载影响I/O性能,本发明进行了动态负载隔离,将物理CPU分成了两组,一组调度运行I/O负载的虚拟CPU,一组调度运行计算型负载的虚拟CPU,分组的依据为I/O型负载和计算型负载所占***总负载的权重,根据调节计时器每隔一定周期重新调整物理CPU的分组,在负载隔离的前提下保证了***具有很好的灵活性。为了解决当前虚拟CPU调算无法体现出I/O任务的紧迫程度的问题,本发明为虚拟CPU增加了一个I/O任务的紧迫程度指标,让紧急的I/O事件可以得到优先的处理;本发明也考虑到了现有虚拟CPU调度算法负载均衡策略过于简单的问题,根据本发明中物理CPU、虚拟机以及虚拟CPU的调度结构重新设计了一套负载均衡策略,考虑到物理CPU的层次结构,依次在同一物理核、同一物理封装以及不同物理封装中选择迁移最优的目标物理CPU,除了保证不同类型负载的隔离性外,选择迁移开销最小的策略,在选择迁移的目标虚拟CPU时也根据负载类型而不同,对于计算型负载,选择迁移后物理CPU运行队列负载相当的方案;对于I/O型负载,选择I/O任务最紧迫的虚拟CPU迁移,来保证I/O性能。
附图说明
图1为本发明的流程示意图;
图2为***虚拟CPU运行队列步骤流程框图;
图3为虚拟CPU运行步骤流程框图;
图4为负载均衡步骤流程框图;
图5为重新分配物理CPU步骤流程框图;
图6为更改虚拟机类型步骤流程框图。
具体实施方式
下面结合附图和具体实施例对本发明进一步说明。
如图1所示,本发明包括调度初始化步骤、***虚拟CPU运行队列步骤、虚拟CPU运行步骤、负载均衡步骤、更新信用值与***负载步骤、重新分配信用值步骤、重新分配物理CPU步骤和更改虚拟机类型步骤;
(1)调度初始化步骤:为每个物理CPU创建物理CPU调度结构:为主物理CPU设置主计时器和调节计时器,其它物理CPU设置次级计时器;为每个虚拟机创建虚拟机调度结构:初始化虚拟机信用值权重,设定虚拟机类型;为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:初始化每个虚拟CPU的负载变量、I/O任务紧迫程度,为每个虚拟CPU分配信用值;初始化I/O位图Ab和计算位图Ac,Ab中的物理CPU专用于调度运行I/O型负载的虚拟CPU,Ac中的物理CPU专用于调度运行计算型负载的虚拟CPU,它们是互补的物理CPU位图;初始化全局的I/O负载变量Lb以及计算负载变量Lc,Lb和Lc分别记录***中运行I/O型负载以及计算型负载的虚拟CPU所消耗的信用值资源;设置每个虚拟CPU的优先级;
(2)***虚拟CPU运行队列步骤:如果当前虚拟CPU运行计算型负载,则直接***虚拟CPU运行队列中同一优先级的所有虚拟CPU之后;如果当前虚拟CPU运行I/O型负载,则按其优先级依序***虚拟CPU运行队列,对于优先级相等的虚拟CPU,则根据I/O紧迫程度从大到小排序;
(3)虚拟CPU运行步骤:如果当前物理CPU的队首虚拟CPU信用值小于或等于0,则触发负载均衡,转步骤(4);否则运行队首虚拟CPU,如果当前物理CPU为主物理CPU,运行过程中,次级计时器到时间,转步骤(5),主计时器到时间,转步骤(6),调节计时器到时间,转步骤(7),用户发出修改虚拟机类型命令,执行步骤(8);当前物理CPU为非主物理CPU,运行过程中,次级计时器到时间,转步骤(5),用户发出修改虚拟机类型命令,执行步骤(8);虚拟CPU达到运行时间后转步骤(2),重新***队列;
(4)负载均衡步骤:判断当前物理CPU在I/O位图中对应位是否为1,是则将I/O位图置1位的非空闲物理CPU作为目标CPU组,否则将计算位图置1位的非空闲物理CPU作为目标CPU组;然后从目标物理CPU组中选择迁移最优的物理CPU作为迁移的目标物理CPU,如果未找到迁移最优的物理CPU则放弃本次负载均衡;
找到目标物理CPU后,再判断当前物理CPU在I/O位图中对应位是否为1,是则将目标物理CPU的虚拟CPU运行队列中I/O任务最急迫的虚拟CPU作为目标虚拟CPU,否则将目标物理CPU的虚拟CPU运行队列中历史负载最接近目标物理CPU与当前物理CPU历史负载的差值一半的虚拟CPU作为目标虚拟CPU,将目标虚拟CPU从原队列中删除并***当前物理CPU的虚拟CPU队列队首;转回步骤(3);
(5)更新信用值与***负载步骤:更新当前虚拟CPU的信用值、负载变量,并更新相关物理CPU的历史负载变量,判断运行当前虚拟CPU的物理CPU在I/O位图中对应位值是否为1,是则更新其I/O任务紧迫变量以及全局的I/O负载变量,转回步骤(3);否则更新全局的计算负载变量;转回步骤(3);
(6)重新分配信用值步骤:根据当前虚拟CPU的信用值判定优先级,重新计算每个虚拟CPU分配的信用值额度,并更新所有虚拟CPU的信用值,判断更新后虚拟CPU的信用值是否从非正变为正,是则更改其优先级,转回步骤(3);否则有关虚拟CPU的优先级不改变,直接转回步骤(3);
(7)重新分配物理CPU步骤:根据全局I/O负载变量及计算负载变量分别计算运行I/O负载的物理CPU数目和运行计算型负载的物理CPU数目;并根据计算出的物理CPU数目修改对应的I/O位图和计算位图,重新建立虚拟CPU与物理CPU之间的亲和性;将I/O负载变量及计算负载变量清0,并更新所有虚拟CPU的I/O任务紧迫程度变量,转回步骤(3);
(8)更改虚拟机类型步骤:读取用户命令,根据其中的虚拟机ID、虚拟机类型Q以及虚拟CPU数目Xi,读取原虚拟机类型Si,根据虚拟机类型Q和原虚拟机类型Si,重新建立虚拟机的各虚拟CPU与I/O位图或计算位图的亲和性,并修改虚拟机类型变量,转回步骤(3)。
本发明的实施例应用背景为:主机具有两个物理封装,每个物理封装中有四个物理核,开启超线程。每个物理核含有两个物理CPU,实验平台操作***为CentOS-6.4,虚拟机监控程序为Xen-4.2.0,内核版本为Linux-3.2.0,主机运行16个虚拟机,每个虚拟机4个虚拟CPU,虚拟机操作***为CentOS-6.4,内核版本为Linux-3.2.0。
本发明的实施例,包括调度初始化步骤、***虚拟CPU运行队列步骤、虚拟CPU运行步骤、负载均衡步骤、更新信用值与***负载步骤、重新分配信用值步骤、重新分配物理CPU步骤和更改虚拟机类型步骤:
(1)调度初始化步骤,包括如下子步骤:
(1.1)为每个物理CPU创建物理CPU调度结构:
判断是否为第一个物理CPU创建物理CPU调度结构,是则进行子步骤(1.2);否则转子步骤(1.3);
(1.2)将第一个物理CPU标记为主物理CPU,并为其设置主计时器和调节计时器,主计时器周期T主=30ms,调节计时器周期T调=1200ms,转子步骤(1.3);
(1.3)设置次级计时器,次级计时器周期T次为10ms;将该物理CPU的历史负载变量Hp初始化为0;p=1~16;
(1.4)为每个虚拟机创建虚拟机调度结构:
在各个虚拟机的虚拟机调度结构中,将对应虚拟机信用值权重Wi初始化为256,对应虚拟机类型Si设定为0,并将其虚拟CPU链表初始化为空;
其中,虚拟机序数i=1~16;
(1.5)为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:
将虚拟CPU加入所属虚拟机的虚拟CPU链表中;
将每个虚拟CPU的负载变量Hij初始化为0,
将每个虚拟CPU的I/O任务紧迫程度变量Iij初始化为0,表示没有I/O负载;
并为每个虚拟CPU分配信用值,其中第i个虚拟机的第j个虚拟CPU的信用值Cij=16×10×30×256/(WT×Mi)=75;其中,***总权重WT=16384,
虚拟机中虚拟CPU的序数j=1~Mi,Mi=4,为第i个虚拟机的虚拟CPU个数;
(1.6)将I/O位图Ab和计算位图Ac初始化:
建立I/O位图Ab和计算位图Ac,它们是互补的物理CPU位图,将Ab中的各位初始化为全0,Ac中的各位初始化为全1,表示***默认初始化运行计算型负载;
(1.7)初始化时,所有虚拟CPU默认运行计算型负载,建立各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(1.8)设置全局的I/O负载变量Lb以及计算负载变量Lc,将Lb和Lc均初始化为0;
(1.9)将各虚拟CPU的优先级Pij初始化为-1,表示其可被调度;
(2)如图2所示,***虚拟CPU运行队列步骤,包括如下子步骤:
(2.1)判断当前虚拟CPU是否与计算位图Ac设置亲和性,是则表示该虚拟CPU运行计算型负载,进行子步骤(2.2),否则表示该虚拟CPU运行I/O型负载,转子步骤(2.3),
(2.2)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较的虚拟CPU之前,否则顺序往后比较,直至虚拟CPU运行队列队尾;***完成后,转步骤(3);
(2.3)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(2.4)比较当前虚拟CPU的优先级Pij是否等于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则进行子步骤(2.5),否则顺序往后比较,直至虚拟CPU运行队列队尾,***完成后,转步骤(3);
(2.5)比较当前虚拟CPU的Iij值是否大于虚拟CPU运行队列中的虚拟CPU的Iij值,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则顺序往后,比较当前虚拟CPU的优先级Pij是否大于进行比较的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(3)如图3所示,虚拟CPU运行步骤,包括如下子步骤:
(3.1)在当前物理CPU的虚拟CPU运行队列中,判断队首虚拟CPU信用值Cij是否大于0,是则进行子步骤(3.2);否则触发负载均衡策略,转步骤(4);
(3.2)判断虚拟CPU运行队列中队首虚拟CPU亲和性设置的目标物理CPU组是否为Ab位图中置1位所代表的物理CPU,是则表明其运行I/O型负载,设置其运行时间片长度Ts=1ms;否则表明其运行计算型负载,设置其运行时间片长度Ts=30ms;
(3.3)将所述队首虚拟CPU从所在虚拟CPU运行队列中删除;
(3.4)判断当前物理CPU是否为主物理CPU,是则进行子步骤(3.5);否则进行子步骤(3.8);
(3.5)在主物理CPU上运行所述队首虚拟CPU,主物理CPU的次级计时器、主计时器和调节计时器同时计时;同时监控用户是否发出修改虚拟机类型命令,是则执行步骤(8);否则进行子步骤(3.6);
(3.6)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.7);否则将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.7)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5);当主计时器经历了时间T主,则主计时器复位,转步骤(6);当调节计时器经历了时间T调,则调节计时器复位,转步骤(7);如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.8)在当前物理CPU上运行所述队首虚拟CPU,当前物理CPU的次级计时器计时;同时监控用户是否修改虚拟机类型,是则执行步骤(8);否则进行子步骤(3.9);
(3.9)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.10);否则将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(3.10)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5),如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(4)如图4所示,负载均衡步骤,包括如下子步骤:
(4.1)选择进行负载均衡的物理CPU组:判断当前物理CPU在I/O位图Ab中对应位是否为1,是则将I/O位图Ab中的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);否则将计算位图Ac中的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);
(4.2)从目标物理CPU组中选择迁移最优的物理CPU:在相应的Ab或Ac中,遍历所述目标物理CPU组,判断是否找到与当前物理CPU在同一个物理核上的非空闲物理CPU,是则将其作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.3);
(4.3)在相应的Ab或Ac中,重新遍历目标物理CPU组,判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则进行子步骤(4.4),否则转子步骤(4.5);
(4.4)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp,是则将该物理CPU作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.5);
(4.5)在相应目标物理CPU组中,顺序向后判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则转子步骤(4.4),否则转子步骤(4.6);
(4.6)重新遍历目标物理CPU组,判断是否找到与当前物理CPU在不同物理封装上的非空闲物理CPU,是则进行子步骤(4.7),否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.7)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp的两倍,是则将该非空闲物理CPU作为迁移的目标物理CPU,转子步骤(4.8);否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.8)在目标物理CPU上选择合适的虚拟CPU进行转移:
判断当前物理CPU在I/O位图Ab中对应位是否为1,是则遍历目标物理CPU的虚拟CPU运行队列,将其中Iij值最大的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);否则遍历目标物理CPU的虚拟CPU运行队列,找到Hij最接近目标物理CPU的Hp与触发负载均衡的物理CPU的Hp差值一半的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);
(4.9)将迁移的目标虚拟CPU从目标物理CPU的虚拟CPU运行队列上移除并***到当前物理CPU的虚拟CPU运行队列的队首,转子步骤(3.2);
(5)更新信用值与***负载步骤,包括如下子步骤:
(5.1)更新当前虚拟CPU的信用值Cij:将Cij-10×T1的值赋予Cij;
更新当前虚拟CPU的负载变量Hij:将Hij+10×T1的值赋予Hij;
更新运行当前虚拟CPU的物理CPU的历史负载变量Hp:将Hp+10×T1的值赋予Hp;
(5.2)判断运行当前虚拟CPU的物理CPU在I/O位图Ab中对应位值是否为1,是则更新其Iij,将Iij-1/(10×T1)的值赋予Iij,进行子步骤(5.3);否则直接进行子步骤(5.3);
(5.3)根据当前虚拟CPU运行负载的类型,将其消耗掉的信用值累加到***负载中:判断运行当前虚拟CPU的物理CPU在位图Ab中对应位值是否为1,是则更新全局的I/O负载变量Lb,将Lb+10×T1的值赋予Lb,转子步骤(3.4);否则更新全局的计算负载变量Lc,将Lc+10×T1的值赋予Lc,转子步骤(3.4);
(6)重新分配信用值步骤,包括如下子步骤:
(6.1)判断当前虚拟CPU信用值是否大于0,是则进行子步骤(6.2);否则将当前虚拟CPU的优先级Pij设置成-2,表示无法再调度,进行子步骤(6.2);
(6.2)为每个虚拟机的虚拟CPU新分配信用值NCij,NCij=75;
其中NCij为第i个虚拟机的第j个虚拟CPU新得到的信用值;
(6.3)更新各虚拟CPU的信用值Cij:
将NCij+Cij的值赋予Cij,
判断是否Cij>0且Pij值为-2,是则将有关虚拟CPU的优先级Pij更改为-1,转子步骤(3.4),否则有关虚拟CPU的优先级Pij不改变,直接转子步骤(3.4);
(7)如图5所示,重新分配物理CPU步骤,包括如下子步骤:
(7.1)计算相应物理CPU数目;
运行I/O型负载的物理CPU数目N(Ab):
N(Ab)=(Lb/(Lb+Lc))×16;
运行计算型负载的物理CPU数目N(Ac):
N(Ac)=16-N(Ab);
(7.2)判断I/O位图Ab中置1位的物理CPU数目是否小于N(Ab),是则进行子步骤(7.3),否则转子步骤(7.4);
(7.3)从运行计算型负载的物理CPU中转移差值数目的物理CPU来运行I/O型负载:令Y=N(Ab)—I/O位图Ab中置1位的物理CPU数目,将I/O位图Ab中前Y个为0的位均置1,并将计算位图Ac中对应位清0,转子步骤(7.6);
(7.4)判断I/O位图Ab中置1位的物理CPU数目是否等于N(Ab),是则转子步骤(7.7);否则进行子步骤(7.5);
(7.5)从运行I/O型负载的物理CPU中转移差值数目的物理CPU来运行计算型负载:令Y=I/O位图Ab中置1位的物理CPU数目—N(Ab),将I/O位图Ab中前Y个置1位均清0,并将计算位图Ac中对应位置1,转子步骤(7.6);
(7.6)重新设置虚拟CPU亲和性:重新建立运行I/O型负载的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性;
重新建立运行计算型负载的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(7.7)将I/O负载变量Lb及计算负载变量Lc清0,并更新所有虚拟CPU的I/O任务紧迫程度变量Iij:将1/Hij的值赋予Iij,转子步骤(3.4);
(8)如图6所示,更改虚拟机类型步骤,包括如下子步骤:
(8.1)根据用户发出的修改虚拟机类型命令,读取其中的虚拟机ID、虚拟机类型Q以及虚拟CPU字段Xi,根据虚拟机ID,在其虚拟机调度结构中读取其虚拟机类型Si;
(8.2)判断是否Q=0,是则进行子步骤(8.3),否则进行子步骤(8.6);
(8.3)判断是否Si=0,是则保持虚拟机类型Si不变,转子步骤(3.5);否则判断是否Si=1,是则进行子步骤(8.4),否则进行子步骤(8.5);
(8.4)判定Si=1,表示将运行I/O型负载的虚拟机转变为计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.5)判定Si=2,表示将运行混合型负载的虚拟机转变为运行计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立其各个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.6)判断是否Q=1,是则进行子步骤(8.7),否则进行子步骤(8.11);
(8.7)判断是否Si=0,是则进行步骤(8.8),否则进行子步骤(8.9);
(8.8)表示将运行计算型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.9)判断是否Si=1,是则保持虚拟机类型Si不变,转子步骤(3.5);否则进行子步骤(8.10);
(8.10)判定Si=2,表示将运行混合型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立其各虚拟CPU与I/O位图Ai中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.11)判定Q=2,判断是否Si=0,是则进行子步骤(8.12),否则进行子步骤(8.13);
(8.12)判定Si=0,表示将运行计算型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中前Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机中前Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.13)判断是否Si=1,是则进行子步骤(8.14),否则进行子步骤(8.15);
(8.14)判定Si=1,表示将运行I/O型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中后Mi-Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机中后Mi-Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.15)判定Si=2,保持虚拟机类型Si不变,转子步骤(3.5)。
本实施例中,所述调度初始化步骤、重新分配物理CPU步骤和更改虚拟机类型步骤中,建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,通过***定义的设置亲和性函数int vcpu_set_affinity(struct vcpu*v,const cpumask_t*affinity),其中参数struct vcpu*v为需要设置亲和性的虚拟CPU指针,cpumask_t*affinity为设置亲和性的目标物理CPU位图指针;
解除各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,通过***定义的设置亲和性函数int vcpu_set_affinity(struct vcpu*v,const cpumask_t*affinity),重新建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性,其中参数struct vcpu*v为需要重新设置亲和性的虚拟CPU指针,cpumask_t*affinity为设置亲和性的目标物理CPU位图指针。
Claims (3)
1.一种虚拟CPU调度方法,包括调度初始化步骤、***虚拟CPU运行队列步骤、虚拟CPU运行步骤、负载均衡步骤、更新信用值与***负载步骤、重新分配信用值步骤、重新分配物理CPU步骤和更改虚拟机类型步骤,其特征在于:
(1)调度初始化步骤:为每个物理CPU创建物理CPU调度结构:为主物理CPU设置主计时器和调节计时器,其它物理CPU设置次级计时器;为每个虚拟机创建虚拟机调度结构:初始化虚拟机信用值权重,设定虚拟机类型;为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:初始化每个虚拟CPU的负载变量、I/O任务紧迫程度,为每个虚拟CPU分配信用值;初始化I/O位图Ab和计算位图Ac,Ab中的物理CPU专用于调度运行I/O型负载的虚拟CPU,Ac中的物理CPU专用于调度运行计算型负载的虚拟CPU,它们是互补的物理CPU位图;初始化全局的I/O负载变量Lb以及计算负载变量Lc,Lb和Lc分别记录***中运行I/O型负载以及计算型负载的虚拟CPU所消耗的信用值资源;设置每个虚拟CPU的优先级;
(2)***虚拟CPU运行队列步骤:如果当前虚拟CPU运行计算型负载,则直接***虚拟CPU运行队列中同一优先级的所有虚拟CPU之后;如果当前虚拟CPU运行I/O型负载,则按其优先级依序***虚拟CPU运行队列,对于优先级相等的虚拟CPU,则根据I/O紧迫程度从大到小排序;
(3)虚拟CPU运行步骤:如果当前物理CPU的队首虚拟CPU信用值小于或等于0,则触发负载均衡,转步骤(4);否则运行队首虚拟CPU,如果当前物理CPU为主物理CPU,运行过程中,次级计时器到时间,转步骤(5),主计时器到时间,转步骤(6),调节计时器到时间,转步骤(7),用户发出修改虚拟机类型命令,执行步骤(8);当前物理CPU为非主物理CPU,运行过程中,次级计时器到时间,转步骤(5),用户发出修改虚拟机类型命令,执行步骤(8);虚拟CPU达到运行时间后转步骤(2),重新***队列;
(4)负载均衡步骤:判断当前物理CPU在I/O位图中对应位是否为1,是则将I/O位图置1位的非空闲物理CPU作为目标CPU组,否则将计算位图置1位的非空闲物理CPU作为目标CPU组;然后从目标物理CPU组中选择迁移最优的物理CPU作为迁移的目标物理CPU,如果未找到迁移最优的物理CPU则放弃本次负载均衡;
找到目标物理CPU后,再判断当前物理CPU在I/O位图中对应位是否为1,是则将目标物理CPU的虚拟CPU运行队列中I/O任务最急迫的虚拟CPU作为目标虚拟CPU,否则将目标物理CPU的虚拟CPU运行队列中历史负载最接近目标物理CPU与当前物理CPU历史负载的差值一半的虚拟CPU作为目标虚拟CPU,将目标虚拟CPU从原队列中删除并***当前物理CPU的虚拟CPU队列队首;转回步骤(3);
(5)更新信用值与***负载步骤:更新当前虚拟CPU的信用值、负载变量,并更新相关物理CPU的历史负载变量,判断运行当前虚拟CPU的物理CPU在I/O位图中对应位值是否为1,是则更新其I/O任务紧迫变量以及全局的I/O负载变量,转回步骤(3);否则更新全局的计算负载变量;转回步骤(3);
(6)重新分配信用值步骤:根据当前虚拟CPU的信用值判定优先级,重新计算每个虚拟CPU分配的信用值额度,并更新所有虚拟CPU的信用值,判断更新后虚拟CPU的信用值是否从非正变为正,是则更改其优先级,转回步骤(3);否则有关虚拟CPU的优先级不改变,直接转回步骤(3);
(7)重新分配物理CPU步骤:根据全局I/O负载变量及计算负载变量分别计算运行I/O负载的物理CPU数目和运行计算型负载的物理CPU数目;并根据计算出的物理CPU数目修改对应的I/O位图和计算位图,重新建立虚拟CPU与物理CPU之间的亲和性;将I/O负载变量及计算负载变量清0,并更新所有虚拟CPU的I/O任务紧迫程度变量,转回步骤(3);
(8)更改虚拟机类型步骤:读取用户命令,根据其中的虚拟机ID、虚拟机类型Q以及虚拟CPU数目Xi,读取原虚拟机类型Si,根据虚拟机类型Q和原虚拟机类型Si,重新建立虚拟机的各虚拟CPU与I/O位图或计算位图的亲和性,并修改虚拟机类型变量,转回步骤(3)。
2.如权利要求1所述的虚拟CPU调度方法,其特征在于:
(1)调度初始化步骤,包括如下子步骤:
(1.1)为每个物理CPU创建物理CPU调度结构:
判断是否为第一个物理CPU创建物理CPU调度结构,是则进行子步骤(1.2);否则转子步骤(1.3);
(1.2)将第一个物理CPU标记为主物理CPU,并为其设置主计时器和调节计时器,主计时器周期T主=30~100ms,为10ms的整数倍,同时为T次的整数倍,调节计时器周期T调=1200~3000ms,为T主的整数倍,转子步骤(1.3);
(1.3)设置次级计时器,次级计时器周期T次为(1~3)×10ms;将该物理CPU的历史负载变量Hp初始化为0;历史负载变量Hp记录在该物理CPU上运行的虚拟CPU所消耗掉的所有信用值总和,物理CPU序数p=1~G,G为***中的物理CPU个数,G=1~64;
(1.4)为每个虚拟机创建虚拟机调度结构:
在各个虚拟机的虚拟机调度结构中,将对应虚拟机信用值权重Wi初始化为256,对应虚拟机类型Si设定为0,并将其虚拟CPU链表初始化为空;
其中,虚拟机序数i=1~V,V为用户创建的虚拟机个数,V=1~100;Si为0表示计算型负载,Si为1表示I/O型负载,Si为2表示混合型负载,混合型负载为计算型和I/O型负载相当的负载;
(1.5)为每个虚拟机的虚拟CPU初始化虚拟CPU调度结构:
将虚拟CPU加入所属虚拟机的虚拟CPU链表中;
将每个虚拟CPU的负载变量Hij初始化为0,
将每个虚拟CPU的I/O任务紧迫程度变量Iij初始化为0,Iij=0~1,Iij值越大表示I/O任务越紧迫,Iij=0,表示没有I/O负载;
并为每个虚拟CPU分配信用值,其中第i个虚拟机的第j个虚拟CPU的信用值Cij=G×10×T主×Wi/(WT×Mi);
其中,***总权重
虚拟机中虚拟CPU的序数j=1~Mi,Mi为第i个虚拟机的虚拟CPU个数,由用户设定,为小于G的整数;
(1.6)将I/O位图Ab和计算位图Ac初始化:
建立I/O位图Ab和计算位图Ac,将Ab中的各位初始化为全0,Ac中的各位初始化为全1,表示***默认初始化运行计算型负载;
(1.7)初始化时,所有虚拟CPU默认运行计算型负载,建立各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(1.8)设置全局的I/O负载变量Lb以及计算负载变量Lc,将Lb和Lc均初始化为0;
(1.9)将各虚拟CPU的优先级Pij初始化为-1,表示其可被调度;
(2)***虚拟CPU运行队列步骤,包括如下子步骤:
(2.1)判断当前虚拟CPU是否与计算位图Ac设置亲和性,是则表示该虚拟CPU运行计算型负载,进行子步骤(2.2),否则表示该虚拟CPU运行I/O型负载,转子步骤(2.3),
(2.2)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较的虚拟CPU之前,否则顺序往后比较,直至虚拟CPU运行队列队尾;***完成后,转步骤(3);
(2.3)从当前物理CPU的虚拟CPU运行队列队首开始,比较当前虚拟CPU的优先级Pij是否大于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(2.4)比较当前虚拟CPU的优先级Pij是否等于虚拟CPU运行队列中的虚拟CPU优先级Pij,是则进行子步骤(2.5),否则顺序往后比较,直至虚拟CPU运行队列队尾,***完成后,转步骤(3);
(2.5)比较当前虚拟CPU的Iij值是否大于虚拟CPU运行队列中的虚拟CPU的Iij值,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则顺序往后,比较当前虚拟CPU的优先级Pij是否大于进行比较的虚拟CPU优先级Pij,是则将当前虚拟CPU***虚拟CPU运行队列中进行比较虚拟CPU之前并转步骤(3);否则进行子步骤(2.4);
(3)虚拟CPU运行步骤,包括如下子步骤:
(3.1)在当前物理CPU的虚拟CPU运行队列中,判断队首虚拟CPU信用值Cij是否大于0,是则进行子步骤(3.2);否则触发负载均衡策略,转步骤(4);
(3.2)判断虚拟CPU运行队列中队首虚拟CPU亲和性设置的目标物理CPU组是否为Ab位图中置1位所代表的物理CPU,是则表明其运行I/O型负载,设置其运行时间片长度Ts=1ms~5ms;否则表明其运行计算型负载,设置其运行时间片长度Ts=30ms~100ms;
(3.3)将所述队首虚拟CPU从所在虚拟CPU运行队列中删除;
(3.4)判断当前物理CPU是否为主物理CPU,是则进行子步骤(3.5);否则进行子步骤(3.8);
(3.5)在主物理CPU上运行所述队首虚拟CPU,主物理CPU的次级计时器、主计时器和调节计时器同时计时;同时监控用户是否发出修改虚拟机类型命令,是则执行步骤(8);否则进行子步骤(3.6);
(3.6)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.7);否则将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.7)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5);当主计时器经历了时间T主,则主计时器复位,转步骤(6);当调节计时器经历了时间T调,则调节计时器复位,转步骤(7);如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从主物理CPU上移除,转步骤(2);
(3.8)在当前物理CPU上运行所述队首虚拟CPU,当前物理CPU的次级计时器计时;同时监控用户是否修改虚拟机类型,是则执行步骤(8);否则进行子步骤(3.9);
(3.9)判断该队首虚拟CPU的运行时间是否小于Ts,是则进行子步骤(3.10);否则将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(3.10)当次级计时器经历了时间T次,则次级计时器复位,转步骤(5),如果在Ts时间内没有触发任何计时器,虚拟CPU持续运行时间Ts,将该队首虚拟CPU从当前物理CPU上移除,转步骤(2);
(4)负载均衡步骤,包括如下子步骤:
(4.1)选择进行负载均衡的物理CPU组:判断当前物理CPU在I/O位图Ab中对应位是否为1,是则表示该物理CPU的虚拟CPU运行队列上运行的是I/O型负载,将I/O位图Ab中置1位的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);否则表示该物理CPU队列上运行的是计算型负载,将计算位图Ac中置1位的非空闲物理CPU作为可进行负载均衡的目标物理CPU组,进行子步骤(4.2);
(4.2)从目标物理CPU组中选择迁移最优的物理CPU:在相应的Ab或Ac中,遍历所述目标物理CPU组,判断是否找到与当前物理CPU在同一个物理核上的非空闲物理CPU,是则将其作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.3);
(4.3)在相应的Ab或Ac中,重新遍历目标物理CPU组,判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则进行子步骤(4.4),否则转子步骤(4.5);
(4.4)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp,是则将该物理CPU作为迁移的目标物理CPU,转子步骤(4.8),否则转子步骤(4.5);
(4.5)在相应目标物理CPU组中,顺序向后判断是否找到与当前物理CPU在同一个物理封装中的非空闲物理CPU,是则转子步骤(4.4),否则转子步骤(4.6);
(4.6)重新遍历目标物理CPU组,判断是否找到与当前物理CPU在不同物理封装上的非空闲物理CPU,是则进行子步骤(4.7),否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.7)判断该非空闲物理CPU的Hp是否大于当前物理CPU的Hp的两倍,是则将该非空闲物理CPU作为迁移的目标物理CPU,转子步骤(4.8);否则将当前物理CPU标记为空闲,运行空闲的虚拟CPU,转子步骤(3.4);
(4.8)在目标物理CPU上选择合适的虚拟CPU进行转移:
判断当前物理CPU在I/O位图Ab中对应位是否为1,是则遍历目标物理CPU的虚拟CPU运行队列,将其中Iij值最大的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);否则遍历目标物理CPU的虚拟CPU运行队列,找到Hij最接近目标物理CPU的Hp与触发负载均衡的物理CPU的Hp差值一半的虚拟CPU作为迁移的目标虚拟CPU,转子步骤(4.9);
(4.9)将迁移的目标虚拟CPU从目标物理CPU的虚拟CPU运行队列上移除并***到当前物理CPU的虚拟CPU运行队列的队首,转子步骤(3.2);
(5)更新信用值与***负载步骤,包括如下子步骤:
(5.1)更新当前虚拟CPU的信用值Cij:将Cij-10×T1的值赋予Cij;
更新当前虚拟CPU的负载变量Hij:将Hij+10×T1的值赋予Hij;
更新运行当前虚拟CPU的物理CPU的历史负载变量Hp:将Hp+10×T1的值赋予Hp;
一个虚拟CPU运行1ms消耗的信用值额度为10,T1为当前虚拟CPU从上次开始运行至今经历的时间,单位为ms;
(5.2)判断运行当前虚拟CPU的物理CPU在I/O位图Ab中对应位值是否为1,是则表示运行了I/O任务,更新其Iij,将Iij-1/(10×T1)的值赋予Iij,进行子步骤(5.3);否则直接进行子步骤(5.3);
(5.3)根据当前虚拟CPU运行负载的类型,将其消耗掉的信用值累加到***负载中:判断运行当前虚拟CPU的物理CPU在位图Ab中对应位值是否为1,是则更新全局的I/O负载变量Lb,将Lb+10×T1的值赋予Lb,转子步骤(3.4);否则更新全局的计算负载变量Lc,将Lc+10×T1的值赋予Lc,转子步骤(3.4);
(6)重新分配信用值步骤,包括如下子步骤:
(6.1)判断当前虚拟CPU信用值是否大于0,是则进行子步骤(6.2);否则将当前虚拟CPU的优先级Pij设置成-2,表示无法再调度,进行子步骤(6.2);
(6.2)为每个虚拟机的虚拟CPU新分配信用值NCij:
NCij=G×T主×10×Wi/(WT×Mi);
其中NCij为第i个虚拟机的第j个虚拟CPU新得到的信用值;
(6.3)更新各虚拟CPU的信用值Cij:
将NCij+Cij的值赋予Cij,
判断是否Cij>0且Pij值为-2,是则将有关虚拟CPU的优先级Pij更改为-1,转子步骤(3.4),否则有关虚拟CPU的优先级Pij不改变,直接转子步骤(3.4);
(7)重新分配物理CPU步骤,包括如下子步骤:
(7.1)计算相应物理CPU数目;
运行I/O型负载的物理CPU数目N(Ab):
N(Ab)=(Lb/(Lb+Lc))×G;
运行计算型负载的物理CPU数目N(Ac):
N(Ac)=G-N(Ab);
(7.2)判断I/O位图Ab中置1位的物理CPU数目是否小于N(Ab),是则进行子步骤(7.3),否则转子步骤(7.4);
(7.3)从运行计算型负载的物理CPU中转移差值数目的物理CPU来运行I/O型负载:令Y=N(Ab)—I/O位图Ab中置1位的物理CPU数目,将I/O位图Ab中前Y个为0的位均置1,并将计算位图Ac中对应位清0,转子步骤(7.6);
(7.4)判断I/O位图Ab中置1位的物理CPU数目是否等于N(Ab),是则转子步骤(7.7);否则进行子步骤(7.5);
(7.5)从运行I/O型负载的物理CPU中转移差值数目的物理CPU来运行计算型负载:令Y=I/O位图Ab中置1位的物理CPU数目—N(Ab),将I/O位图Ab中前Y个置1位均清0,并将计算位图Ac中对应位置1,转子步骤(7.6);
(7.6)重新设置虚拟CPU亲和性:重新建立运行I/O型负载的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性;
重新建立运行计算型负载的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性;
(7.7)将I/O负载变量Lb及计算负载变量Lc清0,并更新所有虚拟CPU的I/O任务紧迫程度变量Iij:将1/Hij的值赋予Iij,转子步骤(3.4);
(8)更改虚拟机类型步骤,包括如下子步骤:
(8.1)根据用户发出的修改虚拟机类型命令,读取其中的虚拟机ID、虚拟机类型Q以及虚拟CPU数目Xi,根据虚拟机ID,在其虚拟机调度结构中读取其虚拟机类型Si;
所述修改虚拟机类型命令包括虚拟机ID字段、虚拟机类型字段和虚拟CPU数目字段,虚拟机ID字段给出待修改类型的虚拟机ID;虚拟机类型字段给出待修改的虚拟机类型Q,Q为0表示计算型负载,Q为1表示I/O型负载,Q为2表示混合型负载;虚拟CPU数目字段给出混合型虚拟机中用于运行I/O负载的虚拟CPU数目,仅当Q=2时该字段才有效;
(8.2)判断是否Q=0,是则进行子步骤(8.3),否则进行子步骤(8.6);
(8.3)判断是否Si=0,是则保持虚拟机类型Si不变,转子步骤(3.5);否则判断是否Si=1,是则进行子步骤(8.4),否则进行子步骤(8.5);
(8.4)判定Si=1,表示将运行I/O型负载的虚拟机转变为计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.5)判定Si=2,表示将运行混合型负载的虚拟机转变为运行计算型负载的虚拟机,解除其各虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立其各个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为0,转子步骤(3.5);
(8.6)判断是否Q=1,是则进行子步骤(8.7),否则进行子步骤(8.11);
(8.7)判断是否Si=0,是则进行步骤(8.8),否则进行子步骤(8.9);
(8.8)表示将运行计算型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机的所有虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.9)判断是否Si=1,是则保持虚拟机类型Si不变,转子步骤(3.5);否则进行子步骤(8.10);
(8.10)判定Si=2,表示将运行混合型负载的虚拟机转变为运行I/O型负载的虚拟机,解除其各虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立其各虚拟CPU与I/O位图Ai中置1位的物理CPU的亲和性,并且将Si修改为1,转子步骤(3.5);
(8.11)判定Q=2,判断是否Si=0,是则进行子步骤(8.12),否则进行子步骤(8.13);
(8.12)判定Si=0,表示将运行计算型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中前Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,重新建立该虚拟机中前Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.13)判断是否Si=1,是则进行子步骤(8.14),否则进行子步骤(8.15);
(8.14)判定Si=1,表示将运行I/O型负载的虚拟机转变为运行混合型负载的虚拟机,解除该虚拟机中后Mi-Xi个虚拟CPU与I/O位图Ab中置1位的物理CPU的亲和性,重新建立该虚拟机中后Mi-Xi个虚拟CPU与计算位图Ac中置1位的物理CPU的亲和性,并且将Si修改为2,转子步骤(3.5);
(8.15)判定Si=2,保持虚拟机类型Si不变,转子步骤(3.5)。
3.如权利要求2所述的虚拟CPU调度方法,其特征在于:
所述调度初始化步骤、重新分配物理CPU步骤和更改虚拟机类型步骤中,建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,通过***定义的设置亲和性函数;
解除各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性时,通过***定义的设置亲和性函数,重新建立各虚拟CPU与I/O位图Ab或者计算位图Ac中置1位的物理CPU的亲和性。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410676265.3A CN104503838B (zh) | 2014-11-23 | 2014-11-23 | 一种虚拟cpu调度方法 |
PCT/CN2014/094010 WO2016078178A1 (zh) | 2014-11-23 | 2014-12-17 | 一种虚拟cpu调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410676265.3A CN104503838B (zh) | 2014-11-23 | 2014-11-23 | 一种虚拟cpu调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104503838A true CN104503838A (zh) | 2015-04-08 |
CN104503838B CN104503838B (zh) | 2017-06-27 |
Family
ID=52945238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410676265.3A Active CN104503838B (zh) | 2014-11-23 | 2014-11-23 | 一种虚拟cpu调度方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104503838B (zh) |
WO (1) | WO2016078178A1 (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045667A (zh) * | 2015-07-13 | 2015-11-11 | 中国科学院计算技术研究所 | 一种用于虚拟机vCPU调度的资源池管理方法 |
CN105607950A (zh) * | 2015-10-30 | 2016-05-25 | 浪潮(北京)电子信息产业有限公司 | 一种虚拟机资源配置方法和装置 |
CN107506286A (zh) * | 2017-09-26 | 2017-12-22 | 郑州云海信息技术有限公司 | Cpu和内存块的自动上下线方法和*** |
CN107544843A (zh) * | 2017-08-28 | 2018-01-05 | 北京翼辉信息技术有限公司 | 一种分区***调度算法 |
CN108701046A (zh) * | 2015-12-23 | 2018-10-23 | 英特尔Ip公司 | 用于避免虚拟机之间的物理cpu争用的虚拟cpu合并 |
CN109062629A (zh) * | 2018-07-13 | 2018-12-21 | 成都泛美视界科技有限公司 | 一种飞行模拟软件的性能优化方法 |
CN109298972A (zh) * | 2018-09-06 | 2019-02-01 | 高盈量化云科技(深圳)有限公司 | 一种高可用策略引擎 |
CN109840135A (zh) * | 2019-01-30 | 2019-06-04 | 郑州云海信息技术有限公司 | 一种负载均衡方法、装置及电子设备 |
US10445100B2 (en) | 2016-06-09 | 2019-10-15 | International Business Machines Corporation | Broadcasting messages between execution slices for issued instructions indicating when execution results are ready |
CN111274024A (zh) * | 2019-03-19 | 2020-06-12 | 中标软件有限公司 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
CN111343275A (zh) * | 2020-03-02 | 2020-06-26 | 北京奇艺世纪科技有限公司 | 资源调度方法和*** |
CN111427673A (zh) * | 2020-03-16 | 2020-07-17 | 杭州迪普科技股份有限公司 | 一种负载均衡方法、装置及设备 |
CN112204523A (zh) * | 2018-05-30 | 2021-01-08 | 超威半导体公司 | 多内核波前调度程序 |
CN112988399A (zh) * | 2021-04-30 | 2021-06-18 | 成都网安科技发展有限公司 | 基于虚拟化技术的处理器调度方法和处理器调度装置 |
CN113032154A (zh) * | 2021-04-19 | 2021-06-25 | 深信服科技股份有限公司 | 一种虚拟cpu的调度方法、装置、电子设备及存储介质 |
CN113282366A (zh) * | 2021-04-02 | 2021-08-20 | 中国船舶重工集团公司第七研究院 | 一种面向嵌入式虚拟化环境下的虚拟机静态放置方法 |
US11954527B2 (en) | 2020-12-09 | 2024-04-09 | Industrial Technology Research Institute | Machine learning system and resource allocation method thereof |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753339B (zh) * | 2017-11-06 | 2023-04-28 | 阿里巴巴集团控股有限公司 | 资源配置方法和装置以及电子设备 |
CN108595249A (zh) * | 2018-05-02 | 2018-09-28 | 联想(北京)有限公司 | 一种虚拟机任务调度方法及电子设备 |
CN111459622B (zh) * | 2020-04-15 | 2023-10-13 | 腾讯科技(深圳)有限公司 | 调度虚拟cpu的方法、装置、计算机设备和存储介质 |
CN114675972B (zh) * | 2022-04-12 | 2024-07-05 | 浙江大学 | 基于积分算法的云网络资源弹性调度方法及*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087611A1 (en) * | 2000-12-28 | 2002-07-04 | Tsuyoshi Tanaka | Virtual computer system with dynamic resource reallocation |
CN102253857A (zh) * | 2011-06-24 | 2011-11-23 | 华中科技大学 | 一种多核环境下的Xen虚拟机调度控制方法 |
CN103049332A (zh) * | 2012-12-06 | 2013-04-17 | 华中科技大学 | 一种虚拟cpu调度方法 |
CN103678003A (zh) * | 2013-12-18 | 2014-03-26 | 华中科技大学 | 一种实时性增强的虚拟cpu调度方法 |
-
2014
- 2014-11-23 CN CN201410676265.3A patent/CN104503838B/zh active Active
- 2014-12-17 WO PCT/CN2014/094010 patent/WO2016078178A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087611A1 (en) * | 2000-12-28 | 2002-07-04 | Tsuyoshi Tanaka | Virtual computer system with dynamic resource reallocation |
CN102253857A (zh) * | 2011-06-24 | 2011-11-23 | 华中科技大学 | 一种多核环境下的Xen虚拟机调度控制方法 |
CN103049332A (zh) * | 2012-12-06 | 2013-04-17 | 华中科技大学 | 一种虚拟cpu调度方法 |
CN103678003A (zh) * | 2013-12-18 | 2014-03-26 | 华中科技大学 | 一种实时性增强的虚拟cpu调度方法 |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045667B (zh) * | 2015-07-13 | 2018-11-30 | 中国科学院计算技术研究所 | 一种用于虚拟机vCPU调度的资源池管理方法 |
CN105045667A (zh) * | 2015-07-13 | 2015-11-11 | 中国科学院计算技术研究所 | 一种用于虚拟机vCPU调度的资源池管理方法 |
CN105607950A (zh) * | 2015-10-30 | 2016-05-25 | 浪潮(北京)电子信息产业有限公司 | 一种虚拟机资源配置方法和装置 |
CN108701046A (zh) * | 2015-12-23 | 2018-10-23 | 英特尔Ip公司 | 用于避免虚拟机之间的物理cpu争用的虚拟cpu合并 |
CN108701046B (zh) * | 2015-12-23 | 2022-04-08 | 英特尔公司 | 用于避免虚拟机之间的物理cpu争用的虚拟cpu合并的方法、***、设备、装置和介质 |
US10445100B2 (en) | 2016-06-09 | 2019-10-15 | International Business Machines Corporation | Broadcasting messages between execution slices for issued instructions indicating when execution results are ready |
CN107544843A (zh) * | 2017-08-28 | 2018-01-05 | 北京翼辉信息技术有限公司 | 一种分区***调度算法 |
CN107506286A (zh) * | 2017-09-26 | 2017-12-22 | 郑州云海信息技术有限公司 | Cpu和内存块的自动上下线方法和*** |
CN112204523A (zh) * | 2018-05-30 | 2021-01-08 | 超威半导体公司 | 多内核波前调度程序 |
CN109062629A (zh) * | 2018-07-13 | 2018-12-21 | 成都泛美视界科技有限公司 | 一种飞行模拟软件的性能优化方法 |
CN109298972A (zh) * | 2018-09-06 | 2019-02-01 | 高盈量化云科技(深圳)有限公司 | 一种高可用策略引擎 |
CN109298972B (zh) * | 2018-09-06 | 2019-11-15 | 高盈量化云科技(深圳)有限公司 | 一种高可用策略引擎 |
CN109840135B (zh) * | 2019-01-30 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种负载均衡方法、装置及电子设备 |
CN109840135A (zh) * | 2019-01-30 | 2019-06-04 | 郑州云海信息技术有限公司 | 一种负载均衡方法、装置及电子设备 |
CN111274024A (zh) * | 2019-03-19 | 2020-06-12 | 中标软件有限公司 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
CN111274024B (zh) * | 2019-03-19 | 2023-05-30 | 中标软件有限公司 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
CN111343275A (zh) * | 2020-03-02 | 2020-06-26 | 北京奇艺世纪科技有限公司 | 资源调度方法和*** |
CN111343275B (zh) * | 2020-03-02 | 2022-09-30 | 北京奇艺世纪科技有限公司 | 资源调度方法和*** |
CN111427673B (zh) * | 2020-03-16 | 2023-04-07 | 杭州迪普科技股份有限公司 | 一种负载均衡方法、装置及设备 |
CN111427673A (zh) * | 2020-03-16 | 2020-07-17 | 杭州迪普科技股份有限公司 | 一种负载均衡方法、装置及设备 |
US11954527B2 (en) | 2020-12-09 | 2024-04-09 | Industrial Technology Research Institute | Machine learning system and resource allocation method thereof |
CN113282366A (zh) * | 2021-04-02 | 2021-08-20 | 中国船舶重工集团公司第七研究院 | 一种面向嵌入式虚拟化环境下的虚拟机静态放置方法 |
CN113032154A (zh) * | 2021-04-19 | 2021-06-25 | 深信服科技股份有限公司 | 一种虚拟cpu的调度方法、装置、电子设备及存储介质 |
CN113032154B (zh) * | 2021-04-19 | 2023-11-07 | 深信服科技股份有限公司 | 一种虚拟cpu的调度方法、装置、电子设备及存储介质 |
CN112988399B (zh) * | 2021-04-30 | 2021-07-20 | 成都网安科技发展有限公司 | 基于虚拟化技术的处理器调度方法和处理器调度装置 |
CN112988399A (zh) * | 2021-04-30 | 2021-06-18 | 成都网安科技发展有限公司 | 基于虚拟化技术的处理器调度方法和处理器调度装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2016078178A1 (zh) | 2016-05-26 |
CN104503838B (zh) | 2017-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104503838A (zh) | 一种虚拟cpu调度方法 | |
US9268394B2 (en) | Virtualized application power budgeting | |
CN103248659B (zh) | 一种云计算资源调度方法和*** | |
CN102253857B (zh) | 一种多核环境下的Xen虚拟机调度控制方法 | |
CN103297499B (zh) | 一种基于云平台的调度方法及*** | |
CN102521055B (zh) | 一种虚拟机资源分配方法及其*** | |
Aladwani | Types of task scheduling algorithms in cloud computing environment | |
Nguyen et al. | A hybrid scheduling algorithm for data intensive workloads in a mapreduce environment | |
CN113342477B (zh) | 一种容器组部署方法、装置、设备及存储介质 | |
US8694295B2 (en) | System and method for time virtualization in computer systems | |
CN106125888B (zh) | 云数据中心中基于虚拟机迁移的资源利用高效的节能方法 | |
US20160196157A1 (en) | Information processing system, management device, and method of controlling information processing system | |
Liang et al. | A low-power task scheduling algorithm for heterogeneous cloud computing | |
Sonkar et al. | A review on resource allocation and VM scheduling techniques and a model for efficient resource management in cloud computing environment | |
Sharma et al. | An improved task allocation strategy in cloud using modified k-means clustering technique | |
Wang et al. | Dependency-aware network adaptive scheduling of data-intensive parallel jobs | |
CN104917839A (zh) | 一种用于云计算环境下的负载均衡方法 | |
CN109815009A (zh) | 一种csp下的资源调度与优化方法 | |
Seth et al. | Dynamic threshold-based dynamic resource allocation using multiple VM migration for cloud computing systems | |
Li et al. | Energy-aware task scheduling optimization with deep reinforcement learning for large-scale heterogeneous systems | |
US20210390405A1 (en) | Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof | |
CN112612613B (zh) | 用于在虚拟分布式异构环境下实现多gpu调度的方法和*** | |
Gouasmi et al. | Cost-efficient distributed MapReduce job scheduling across cloud federation | |
KR20140125893A (ko) | 가상화된 매니코어 서버의 작업분배 시스템과 그 방법 및 기록매체 | |
Wang et al. | Container-based performance isolation for multi-tenant saas applications in micro-service architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |