一种虚拟功能的动态调度方法

文档序号:6383472阅读:155来源:国知局
专利名称:一种虚拟功能的动态调度方法
技术领域
本发明属于计算机虚拟化领域,具体涉及一种虚拟功能的动态调度方法,用于支持设备直接分配方式的虚拟机平台,对单根输入输出虚拟化标准(SR-1OV)的网卡所提供的虚拟功能进行动态调度。
背景技术
随着科技的进步,虚拟化技术应用范围越来越广。虚拟化技术可以分为CPU虚拟化、内存虚拟化和I/o虚拟化。目前,CPU虚拟化和内存虚拟化技术已经比较成熟,而I/O虚拟化的性能有待提闻。虚拟机使用的I/O设备分为两类,软件模拟的I/O设备和通过设备直接分配方式分配的I/o设备。软件模拟的I/O设备包括泛虚拟化方式模拟的设备和完全虚拟化方式模拟的设备。设备直接分配方式分配的I/o设备包括物理设备和支持单根输入输出虚拟化标准的设备的虚拟功能。软件模拟I/O设备方式具有扩展性好的优点,但是该方式下所有的I/O操作需要被虚拟机监控器捕获再执行,增加了虚拟机切换次数,频繁的上下文切换以及I/o路径的增长,使得这种方式I/o性能较差。使用设备直接分配方式分配物理设备是将硬件平台的物理设备分配给某一个虚拟机独占使用,而其他的虚拟机不能够使用。这种方式虽然性能较好,但是可扩展性差,资源的利用率较低。互连外围设备专业组(PC1-SIG)公布的新标准单根输入输出虚拟化,旨在将一个高速外设部件互连标准(PC1-E)物理功能抽象成多个虚拟功能,并能将虚拟功能分配给虚拟机直接使用。相比于软件模拟I/O设备方式,其I/O性能提高;相比于使用设备直接分配方式分配物理设备,在略微影响I/O性能的前提下,提高了可扩展性,为将基于以太网光纤通道等对IO性能要求较高的一类应用部署到虚拟机中提供了基础。然而单根输入输出虚拟化标准的设备依然存在一些问题1、可扩展性不足,一个遵循单根输入输出虚拟化标准的设备能够创建的虚拟功能个数受到硬件资源的限制。2、对虚拟功能的使用缺乏灵活性,当分配虚拟功能给一个虚拟机之后,虚拟功能就一直由该虚拟机占用。其使用与虚拟机的I/O中断次数、睡眠时间变化无关,可能会降低设备的利用率。为了清楚地理解本发明,以下对本发明中所使用的术语进行解释单根输入输出虚拟化标准(SR-1OV,Single Root I/O Virtualization):互连外围设备专业组(PC1-SIG, Peripheral Component InterconnectSpecial Interest Group)公布的设备虚拟化标准,遵循该标准的设备具备单根输入输出虚拟化功能,可以让物理设备成为共享设备。外设互联标准(PCI,Peripheral Component Interconnect)一种连接电子计算机主板和外部设备的总线标准。
高速外设部件互连标准(PCI Express,简称PC1-E):是电脑总线外设互联标准的一种,它沿用了现有的外设互联标准编程概念及通讯标准,但基于更快的串行通信系统。物理功能(PF, Physical Function):在高速外设部件互连标准中,物理设备(Physical Device)也叫做物理功能;本发明指支持单根输入输出虚拟化标准的物理设备。虚拟功能(VF, Virtual Function也称为虚拟设备)物理功能遵循单根输入输出虚拟化标准创建虚拟功能,并共享一个或者多个物理资源,虚拟机可以直接使用虚拟功能。虚拟机(VM, Virtual Machine):指通过软件模拟的、具有完整硬件系统功能的、运打在Iv完全隔尚环境中的完整计算机系统。虚拟机监控器(VMM,Virtual Machine Monitor 也称为 Hypervisor)一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用软件共享硬件。设备直接分配虚拟机监控器直接分配设备给虚拟机,虚拟机内的设备驱动程序可直接访问设备,只需要经过少量虚拟机监控器的管理。泛虚拟化(Paravirtualization): —种向虚拟机提供与底层硬件类似但不相同的软件接口技术。物理网卡(NIC, Network Interface Controller也称为网络接口控制器)是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,本发明采用遵循单根输入输出虚拟化标准的物理网卡。虚拟网卡(VNIC,VirtualNetwork Interface Controller):虚拟化平台中,通过软件模拟出来的提供给虚拟机使用的网络接口控制器。完全虚拟化(Full virtualization):一种能够模拟完整的硬件环境的虚拟化技术。

发明内容
本发明提供一种虚拟功能的动态调度方法,解决单根输入输出虚拟化标准的网卡所提供的虚拟功能使用中可扩展性不足、灵活性差的问题,以提高所述网卡的利用率。本发明所提供的一种虚拟功能的动态调度方法,包括下述步骤(I)初始化步骤,顺序包括下述子步骤(1.1)用户创建配置文件,在配置文件中输入要保证带宽的各虚拟机名称和带宽值,其中带宽值为要求保证的虚拟机带宽值;(1.2)用户启用物理网卡的单根输入输出虚拟化功能,创建物理网卡的虚拟功倉泛;(2)创建队列步骤,顺序包括下述子步骤(2.1)分别创建第一队列、第二队列和第三队列用于保存虚拟机信息,各队列由节点组成,每个节点包含虚拟机名称、I/o优先级值、带宽值、虚拟功能数,其中1/0优先级值为对应虚拟机名称的虚拟机的I/O优先级;带宽值在第一队列的各节点中为对应虚拟机名称的虚拟机所要保证的带宽,在第二队列和第三队列中,各节点带宽值均为O ;虚拟功能数在第一队列的各节点中为对应虚拟机名称的虚拟机所需要的虚拟功能数目,在第二队列的各节点中为1,在第三队列的各节点中为O ;第一队列按照虚拟机加入顺序保存具有带宽保证的虚拟机,第二队列按照虚拟机的I/o优先级值从大到小的顺序保存没有带宽保证但已使用虚拟功能的虚拟机,第三队列按照虚拟机的I/o优先级值从大到小的顺序保存没有带宽保证且未使用虚拟功能的虚拟机;(2. 2)创建虚拟功能队列用于保存虚拟功能信息,该队列由节点组成,每个节点包括编号、使用情况、虚拟机名称,其中编号为虚拟功能编号,使用情况为该编号虚拟功能使用情况,虚拟机名称为使用该编号虚拟功能的虚拟机名称;将各虚拟功能按编号值从小到大的顺序保存到虚拟功能队列各节点中,同时将各节点中的使用情况设置成未使用,虚拟机名称为空;(2. 3)将变量E设置为总虚拟功能数,将变量B设置为O ;变量E为未使用的虚拟功能数目,变量B为第一队列中所有虚拟机已经使用的虚拟功能总数;(3)虚拟机分类步骤,顺序包括下述子步骤(3.1)判断虚拟机监控器中是否存在虚拟机,是则进行子步骤(3. 2),否则转步骤(9);(3. 2)将虚拟机监控器中所有的虚拟机按其在虚拟机监控器中的顺序依次加入到第三队列的各节点中,并初始化节点,将各节点的I/O优先级值、带宽值、虚拟功能数设置为O ;(3. 3)获取配置文件中所有虚拟机名称,使用每一个虚拟机名称查找第三队列,将与该虚拟机名称相同的节点从第三队列移除,依次加入第一队列,同时修改相应节点带宽值和虚拟功能数,将带宽值修改为配置文件中该虚拟机的带宽值,将虚拟功能数按照下式计算并修改虚拟功能数=带宽值X虚拟功能总数/物理网卡带宽;(3. 4)启动定时器,将其时间长度设置为6 12小时;(4)分配虚拟功能步骤,顺序包括下述子步骤(4.1)判断第一队列是否为空,是则转子步骤(4. 6),否则获取第一队列中的第一个节点,进行子步骤(4.2);(4. 2)判断是否(B+C) > A,是则转子步骤(4. 5),否则进行子步骤(4. 3);其中,变量A =虚拟功能总数/4,变量C为当前节点的虚拟功能数; (4. 3)顺序将虚拟功能队列中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列当前节点对应的虚拟机,将虚拟功能队列中对应这C个节点的虚拟机名称修改为第一队列当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E =E-C,置 B = B+C ;(4.4)判断是否为第一队列最后一个节点,是则转子步骤(4. 6),否则获取第一队列下一个节点,转子步骤(4.2);(4. 5)将第一队列中当前节点以及其后的节点对应的虚拟机关闭,并将这些虚拟机从第一队列和配置文件中移除;(4. 6)计算第二队列中、第三队列中各节点的I/O优先级值并排序从虚拟机监控器中获取第二队列中、第三队列中各节点对应的虚拟机的I/O中断次数、睡眠时间;按照下式计算第二队列中、第三队列中所有节点的I/o优先级值I/O优先级值=I/O中断次数XP+睡眠时间X (1-P),P为40% 60% ;
将结果保存到第二队列、第三队列相应节点的I/O优先级值中,按照I/O优先级值从大到小的顺序对第二队列、第三队列排序;(4.7)判断是否第三队列为空,是则转步骤(9),否则获取第三队列第一个节点,进行子步骤(4. 8);(4. 8)判断是否E > A,是则进行子步骤(4. 9),否则转步骤(9);(4. 9)将该节点从第三队列移除,并按照从大到小的顺序根据其I/O优先级值将其加入第二队列,将虚拟功能队列中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列中加入节点对应的虚拟机,将虚拟功能队列中相应节点的虚拟机名称修改为第二队列中加入节点的虚拟机名称,将虚拟功能队列中相应节点的使用情况设置为已使用,置E = E-1,转子步骤(4. 7);(5)判断唤醒步骤判断是否有唤醒信号,是则进行子步骤(5.1);否则转步骤(9),所述唤醒信号为虚拟机增加信号、虚拟机减少信号、定时完成信号之一;唤醒信号包含类型和虚拟机名称,虚拟机增加信号类型为增加虚拟机、虚拟机名称为新增虚拟机的名称;虚拟机减少信号类型为减少虚拟机、虚拟机名称为减少的虚拟机的名称;定时完成信号类型为定时完成,虚拟机名称为空;(5.1)计算第二队列中、第三队列中各节点的I/O优先级值并排序,其方式与子步骤(4. 6)相同;(5. 2)判断唤醒信号是否为虚拟机增加信号,是则转步骤(6),否则进行子步骤(5. 3);(5. 3)判断唤醒信号是否为虚拟机减少信号,是则转步骤(7),否则转步骤(8);(6)虚拟机增加步骤,包括下述子步骤(6.1)根据虚拟机名称在虚拟机监控器中查询是否存在该虚拟机,是则进行子步骤(6. 2),否则转步骤(9);(6. 2)读取配置文件,判断所述虚拟机名称是否存在配置文件中,是则进行子步骤(6. 3),否则转子步骤(6.9);(6. 3)将所述虚拟机名称的虚拟机加入到第一队列队末节点,同时修改相应节点带宽值和虚拟功能数,将带宽值修改为配置文件中该虚拟机的带宽值,将虚拟功能数按照下式计算并修改虚拟功能数=带宽值X虚拟功能总数/物理网卡带宽;(6. 4)判断是否(B+C) > A,是则进行子步骤(6. 5),否则转子步骤(6. 6);(6. 5)关闭新加入第一队列的虚拟机,将其从第一队列和配置文件中删除,转步骤
(8);(6. 6)判断是否C > (E-A),是则进行子步骤(6. 7),否则转子步骤(6. 8);(6. 7)剥离第二队列队末的(C-(E-A))个节点对应的虚拟机的虚拟功能,并将这些虚拟功能分配给新加入第一队列的虚拟机,将虚拟功能队列中这些虚拟功能对应节点的虚拟机名称修改为第一队列新加入节点的虚拟机名称;将第二队列队末的(C-(E-A))个节点从第二队列移除,并将这些节点按照从大到小的顺序根据其I/O优先级值将其加入第三队列;顺序将虚拟功能队列中(E-A)个使用情况为未使用的节点所对应的虚拟功能分配给第一队列新加入节点的虚拟机,将虚拟功能队列中对应这(E-A)个节点的虚拟机名称修改为第一队列新加入节点的虚拟机名称,对应这(E-A)个节点的使用情况设置为已使用,置E = A, B = B+C,转步骤(8);(6. 8)顺序将虚拟功能队列中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列当前节点的虚拟机,将虚拟功能队列中对应这C个节点的虚拟机名称修改为第一队列当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E = E-C,置B = B+C,转步骤(8);(6. 9)将新增虚拟机加入第三队列队首节点,并将该节点的I/O优先级值设置为第三队列中第二个节点的I/o优先级值,将该节点的带宽值、虚拟功能数设置为0,转步骤
(8);(7)虚拟机减少步骤,包括下述子步骤(7.1)根据虚拟机名称在第一队列查询是否存在相应节点,是则转子步骤(7. 3),否则进行子步骤(7. 2);(7. 2)根据虚拟机名称在第二队列查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转子步骤(7. 5),否则转子步骤(7.4);(7.3)将节点从第一队列移除,置B = B-N,转子步骤(7. 5),N为所述虚拟机名称对应的虚拟机的虚拟功能数;(7. 4)根据虚拟机名称在第三队列查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转步骤(8),否则转步骤(9);(7. 5)遍历虚拟功能队列,将所述虚拟机名称对应的节点的使用情况修改为未使用,置 E = E+N;(7.6)判断第三队列是否为空,是则转步骤(8),否则获取第三队列第一个节点,进行子步骤(7. 7);(7. 7)将该节点从第三队列移除,并按照从大到小的顺序根据其I/O优先级值将其加入第二队列,将虚拟功能队列中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列中插入的节点所对应虚拟机,将虚拟功能队列中相应节点的虚拟机名称修改为第二队列中插入节点的虚拟机名称,将虚拟功能队列中相应节点的使用情况设置为已使用,置 E = E-LN = N-1 ;(7. 8)判断N是否为0,是则转步骤(8),否则转子步骤(7. 6);(8)动态调整步骤,顺序包括下述子步骤(8.1)判断第二队列队队末节点的I/O优先级值是否大于第三队列队首节点的I/O优先级值,是则进行子步骤(8. 2),否则转子步骤(8. 3)。(8. 2)将第三队列中队首的节点从第三队列移除,再按照从大到小的顺序根据其I/o优先级值将其加入第二队列;再将第二队列列末的节点从第二队列移除,按照从大到小的顺序根据其I/o优先级值将其加入第三队列并剥离其虚拟功能,将剥离的虚拟功能分配给新加入第二队列的节点对应的虚拟机,修改虚拟功能队列中这个虚拟功能节点的虚拟机名称,转子步骤(8.1);(8. 3)将虚拟机监控器中所有虚拟机的I/O中断次数和睡眠时间设置为0,将定时器时间长度设置为6 12小时,转步骤(9);
(9)休眠步骤休眠O. 5 2分钟之后,转步骤(5)。现有虚拟功能调度方法为静态分配,其中虚拟功能由用户进行分配,虚拟功能被分配给某虚拟机之后,一直由该虚拟机使用直到用户剥离虚拟功能或者关闭虚拟机。相比于使用虚拟功能,I/o优先级值大的虚拟机不使用虚拟功能时I/O性能会差。对于I/O优先级值小的虚拟机,使用虚拟功能不能够带来较大的性能提升,而虚拟功能的利用也不充分。理想情况为,虚拟功能总是被I/o优先级值大的虚拟机使用。本发明设置3个队列,对第一队列进行带宽保证,对于第二队列和第三队列的虚拟机,根据一段时间内虚拟机的I/o中断次数和睡眠时间,动态调度虚拟功能。虚拟功能的使用分为三种情况第一种情况虚拟功能被分配给要保证带宽的虚拟机,第二种情况虚拟功能被分配给没有带宽保证的虚拟机使用,第三种情况虚拟功能不进行分配以保证剩余虚拟机使用。通过保证不进行分配虚拟功能的数目不低于一个下限,动态分配其他的虚拟功能,从而使第一队列虚拟机的性能能够满足需求,使第二队列虚拟机具有较好性能。本发明在一段时间内,通过统计虚拟机I/o中断次数和睡眠时间来动态调度虚拟功能,保证了虚拟功能由I/o优先级值大的虚拟机使用,提高了 I/O优先级值大的虚拟机的网络性能,也充分利用了硬件。


图1为本发明流程示意图;图2为分配虚拟功能步骤示意图;图3为虚拟机增加步骤示意图;图4为虚拟机减少步骤示意图。
具体实施例方式下面结合附图和实施例对本发明进一步说明。以下实施例的应用环境为12个虚拟机hi hl2按照标号从小到大的顺序存在于虚拟机监控器中;英特尔82599网卡带宽为10000Mb。实施例1,虚拟机增加,包括如下步骤(I)初始化步骤,顺序包括下述子步骤(1.1)用户创建配置文件a,在配置文件a中输入要保证带宽的虚拟机名称hi和带宽值600Mb,要保证带宽的虚拟机名称h2和带宽值1200Mb ;(1. 2)用户启用英特尔82599网卡的单根输入输出虚拟化功能,在该网卡上创建16个虚拟功能;(2)创建队列步骤,顺序包括下述子步骤(2.1)分别创建第一队列Q1、第二队列Q2和第三队列Q3用于保存虚拟机信息,各队列由节点组成,每个节点包含虚拟机名称、I/o优先级值、带宽值、虚拟功能数;(2. 2)创建虚拟功能队列V,该队列由节点组成,每个节点包括编号、使用情况、虚拟机名称;将16个虚拟功能按照编号值从小到大的顺序保存到虚拟功能队列V的各节点中,同时将各节点中的使用情况设置成未使用,虚拟机名称为空;
(2. 3)将变量E设置为16,将变量B设置为O ;(3)虚拟机分类步骤,顺序包括下述子步骤(3.1)判断虚拟机监控器中是否存在虚拟机,是则进行子步骤(3. 2),否则转步骤
(9),本实施例进行子步骤(3.2);(3. 2)将虚拟机监控器中所有的虚拟机hi hl2按其在虚拟机监控器中的顺序依次加入到第三队列Q3的各节点中,将第三队列Q3中12个节点的I/O优先级值、带宽值、虚拟功能数均设置为O ;(3. 3)获取配置文件a中所有虚拟机名称hi和h2,使用虚拟机名称hl、h2查找第三队列Q3,将其中与虚拟机名称hl、h2相同的节点从第三队列Q3移除,依次加入第一队列Ql,同时将hi对应节点的带宽值修改为600Mb,虚拟功能数为I ;将112对应节点的带宽值修改为1200Mb,虚拟功能数为2 ;上述虚拟功能数按照下式计算虚拟功能数=带宽值X虚拟功能总数(16)/物理网卡带宽(10000Mb);(3. 4)启动定时器,将其时间长度设置为8小时;(4)分配虚拟功能步骤,顺序包括下述子步骤(4.1)判断第一队列Ql是否为空,是则转子步骤(4. 6),否则获取第一队列Ql中的第一个节点,进行子步骤(4. 2),本实施例获取第一队列Ql中hi对应的节点,进行子步骤(4. 2);(4. 2)判断是否(B+C) >A,是则转子步骤(4. 5),否则进行子步骤(4. 3),本实施例中,B = 0,变量C对于hi为1、对于h2为2 ;变量A = 4,因此进行子步骤(4.3);(4. 3)顺序将虚拟功能队列V中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列Ql当前节点的虚拟机,将虚拟功能队列V中对应这C个节点的虚拟机名称修改为第一队列Ql当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E = E-C,置 B = B+C ;(处理hi后E为15,B为1,虚拟功能队列V中第一个节点的虚拟机名称为hl,使用情况设置为已使用;处理h2后E为13,B为3,虚拟功能队列V中第二个节点和第三个节点的虚拟机名称修改为h2,使用情况设置为已使用;)(4.4)判断是否为第一队列Ql最后一个节点,是则转子步骤(4. 6),否则获取第一队列Ql下一个节点,转子步骤(4. 2);(4. 5)将第一队列Ql中当前节点以及其后的节点对应的虚拟机关闭,并将这些虚拟机从第一队列Ql和配置文件a中移除,转子步骤(4. 6);(4. 6)计算第二队列Q2中、第三队列Q3中各节点的I/O优先级值并排序从虚拟机监控器中获取第二队列Q2中、第三队列Q3中各节点对应的虚拟机的I/O中断次数、睡眠时间;按照下式计算第二队列Q2中、第三队列Q3中所有节点的I/O优先级值I/O优先级值=I/O中断次数XP+睡眠时间X(1-P),P为50% ;将结果保存到第二队列Q2、第三队列Q3相应节点的I/O优先级值中,按照I/O优先级值从大到小的顺序对第二队列Q2、第三队列Q3排序;第三队列Q3中从队首开始各节点的虚拟机名称、I/O优先级值依次为h5 91、h6 83、h9 74、h8 70、h4 65、h3 58、hl0 50、h7 47、hll 30、hl2 10 ;(4. 7)判断是否第三队列Q3为空,是则转步骤(9),否则获取第三队列Q3第一个节点,进行子步骤(4.8);(4. 8)判断是否E > A,是则进行子步骤(4. 9),否则转步骤(9);(4. 9)将该节点从第三队列Q3移除,并按照从大到小的顺序根据其I/O优先级值将其插入第二队列Q2,将虚拟功能队列V中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列Q2中插入节点对应虚拟机,将虚拟功能队列V中相应节点的虚拟机名称修改为第二队列Q2中插入节点的虚拟机名称,将虚拟功能队列V中相应节点的使用情况设置为已使用,置E = E-1,转子步骤(4. 7);从第二队列Q2队首开始各节点的虚拟机名称依次为h5、h6、h9、h8、h4、h3、hlO、h7、hi I ;从第三队列Q3队首开始各节点的虚拟机名称依次为hl2 ;E为4 ;虚拟功能队列V中从第四个节点开始到第十二节点对应的虚拟机名称为h5、h6、h9、h8、h4、h3、hl0、h7、hll,
使用情况均设置为已使用。(5)判断唤醒步骤判断是否有唤醒信号,是则进行子步骤(5.1);否则转步骤
(9);本实施例有唤醒信号,为虚拟机增加信号类型为增加虚拟机、虚拟机名称为新增虚拟机的名称hl3 ;(用户创建虚拟机hl3,在配置文件a中输入要保证带宽的虚拟机名称hl3和带宽值500Mb ;)(5.1)计算第二队列Q2、第三队列Q3中各节点的I/O优先级值并排序,其方式与子步骤(4. 6)相同;从第二队列Q2队首开始各节点的虚拟机名称、I/O优先级值依次为h9200、hll 186、h4 150、h8 105、h5 83、h3 79、hl069、h7 55、h6 32 ;从第三队列 Q3 队首开始各节点的虚拟机名称、I/O优先级值依次为hl2 59 ;(5.2)判断唤醒信号是否为虚拟机增加信号,是则转步骤(6),否则进行子步骤(5. 3),本实施例转步骤(6);(5. 3)判断唤醒信号是否为虚拟机减少信号,是则转步骤(7),否则转步骤⑶;(6)虚拟机增加步骤,包括下述子步骤(6.1)根据hl3在虚拟机监控器中查询是否存在该虚拟机,是则进行子步骤(6. 2),否则转步骤(9);本实施例转子步骤(6.2);(6.2)读取配置文件a,判断hl3是否存在配置文件a中,是则进行子步骤(6.3),否则转子步骤(6. 9);本实施例转子步骤(6. 3);(6. 3)将虚拟机hl3加入到第一队列Ql队末节点,同时修改相应节点带宽值为500Mb,修改虚拟功能数为I ;进行子步骤(6.4);(6. 4)判断是否(B+C) > A,是则进行子步骤(6. 5),否则转子步骤(6. 6);本实施例 B = 3, C = LA = 4,转子步骤(6. 6);(6. 5)关闭新加入第一队列Ql的虚拟机,将其从第一队列Ql和配置文件a中删除,转步骤⑶;(6.6)判断是否0 (E-A),是则进行子步骤(6. 7),否则转子步骤(6.8),本实施例C = I, E = 4, A = 4,进行子步骤(6. 7);(6. 7)剥离第二队列Q2队末的(C-(E-A))个节点对应的虚拟机的虚拟功能,并将这些虚拟功能分配给hl3,将虚拟功能队列V中这些虚拟功能对应节点的虚拟机名称修改为hl3 ;将第二队列Q2队末的(C-(E-A))个从第二队列Q2移除,并将这些节点对应的虚拟机按照从大到小顺序根据其I/O优先级值将其加入第三队列Q3相应节点;顺序将虚拟功能队列V中(E-A)个使用情况为未使用的节点所对应的虚拟功能分配给hl3,将虚拟功能队列V中对应这(E-A)个节点的虚拟机名称修改为hl3,对应这(E-A)个节点的使用情况设置为已使用,置E = A,B = B+C,转步骤⑶;其中(C-(E-A)) = 1,(E-A) = O ;从第二队列Q2队首开始节点的虚拟机名称依次为h9、hll、h4、h8、h5、h3、hl0、h7 ;从第三队列Q3队首开始节点的虚拟机名称依次为hl2、h6 ;虚拟功能队列V中h6对应的节点的虚拟机名称修改为hl3 ;(6. 8)顺序将虚拟功能队列V中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列Ql当前节点的虚拟机,将虚拟功能队列V中对应这C个节点的虚拟机名称修改为第一队列Ql当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E = E-C,置 B = B+C,转步骤(8);(6. 9)将新增虚拟机加入第三队列Q3队首节点,并将该节点的I/O优先级值设置为第三队列Q3中第二个节点的I/O优先级值,将该节点的带宽值、虚拟功能数设置为0,转步骤⑶;(8)动态调整步骤,顺序包括下述子步骤(8.1)判断第二队列Q2队末节点的I/O优先级值是否大于第三队列Q3队首节点的I/o优先级值,是则进行子步骤(8. 2),否则转子步骤(8.3);本实施例进行子步骤(8. 2);(8. 2)将第三队列Q3队首的节点从第三队列Q3移除,再按照从大到小的顺序根据其I/O优先级值将其加入第二队列Q2 ;再将第二队列Q2列末的节点从第二队列Q2移除,按照从大到小的顺序根据其I/O优先级值将其加入第三队列Q3并剥离其虚拟功能,将剥离的虚拟功能分配给新加入第二队列Q2的节点对应的虚拟机,修改虚拟功能队列V中这个虚拟功能节点的虚拟机名称,转子步骤(8.1);从第二队列Q2队首开始节点的虚拟机名称依次为h9、hll、h4、h8、h5、h3、hlO、hl2 ;从第三队列Q3队首开始节点的虚拟机名称依次为h7、h6 ;虚拟功能队列V中h7对应的节点的虚拟机名称修改为hl2 ;(8. 3)将虚拟机监控器中所有虚拟机的I/O中断次数和睡眠时间设置为0,将定时器时间长度设置为8小时,转步骤(9);(9)休眠步骤休眠I分钟之后,转步骤(5)。实施例2,虚拟机减少,包括如下步骤步骤(I)、⑵、⑶、(4)与实施例1相同。(5)判断唤醒步骤判断是否有唤醒信号,是则进行子步骤(5.1);否则转步骤
(9);本实施例有唤醒信号,为虚拟机减少信号,类型为减少虚拟机、虚拟机名称为h2 ;(此时用户关闭虚拟机h2);(5.1)计算第二队列Q2中、第三队列Q3中各节点的I/O优先级值并排序,其方式与子步骤(4. 6)相同;从第二队列Q2队首开始各节点的虚拟机名称、I/O优先级值依次为h8 300、h9 256、h42 24、h6 198、hll 175、h5148、h7 103、hl2 93、h3 84 ;从第三队列 Q3队首开始各节点的虚拟机名称、I/o优先级值依次为hlO 71 ;(5. 2)判断唤醒信号是否为虚拟机增加信号,是则转步骤(6),否则进行子步骤(5. 3);本实施例转子步骤(5. 3);(5. 3)判断唤醒信号是否为虚拟机减少信号,是则转步骤(7),否则转步骤(8);本实施例转步骤(7);(7)虚拟机减少步骤,包括下述子步骤(7.1)根据h2在第一队列Ql查询是否存在相应节点,是则转子步骤(7. 3),否则进行子步骤(7. 2);本实施例转子步骤(7. 3);(7. 2)根据虚拟机名称在第二队列Q2查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转子步骤(7. 5),否则进行子步骤(7.4);(7. 3)将h2对应的节点从第一队列Ql移除,置B = B-N, (B = I, N = 2)转子步骤(7. 5);(7. 4)根据虚拟机名称在第三队列Q3查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转步骤(8),否则转步骤(9);(7. 5)遍历虚拟功能队列V,将h2对应的节点的使用情况修改为未使用,置E = 6 ;(7. 6)判断第三队列Q3是否为空,是则转步骤(8),否则获取第三队列Q3第一个节点,进行子步骤(7.7);(7. 7)将该节点从第三队列Q3移除,并按照从大到小的顺序根据其I/O优先级值将其加入第二队列Q2,将虚拟功能队列V中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列Q2中插入的节点所对应虚拟机,将虚拟功能队列V中相应节点的虚拟机名称修改为第二队列Q2中插入节点的虚拟机名称,将虚拟功能队列V中相应节点的使用情况设置为已使用,置E = E-1,N = N-1 ;(7.8)判断N是否为0,是则转步骤(8),否则转子步骤(7.6);从第一队列Ql队首开始各节点的虚拟机名称依次为hl,从第二队列Q2队首开始各节点的虚拟机名称依次为 h8、h9、h4、h6、hll、h5、h7、hl2、h3、hl0 ;E = 5, B = I, N = O ;虚拟功能队列V中h2对应的第一个节点的虚拟机名称修改为hl0,h2对应的第二个节点的使用情况修改为未使用,转步骤(8);(8)动态调整步骤,顺序包括下述子步骤(8.1)判断第二队列Q2队队末节点的I/O优先级值是否大于第三队列Q3队首节点的I/o优先级值,是则转子步骤(8. 2),否则转子步骤(8.3);本实施例转子步骤(8.3);(8. 2)将第三队列Q3中队首的节点从第三队列Q3移除,再按照从大到小的顺序根据其I/o优先级值将其加入第二队列Q2 ;再将第二队列Q2列末的节点从第二队列Q2移除,按照从大到小的顺序根据其I/O优先级值将其加入第三队列Q3并剥离其虚拟功能,将剥离的虚拟功能分配给新加入第二队列Q2的节点对应的虚拟机,修改虚拟功能队列V中这个虚拟功能节点的虚拟机名称,转子步骤(8.1);(8. 3)将虚拟机监控器中所有虚拟机的I/O中断次数和睡眠时间设置为0,将定时器时间长度设置为8小时,转步骤(9);(9)休眠步骤休眠I分钟之后,转步骤(5)。
权利要求
1.一种虚拟功能的动态调度方法,包括下述步骤 (1)初始化步骤,顺序包括下述子步骤 (1.1)用户创建配置文件,在配置文件中输入要保证带宽的各虚拟机名称和带宽值,其中带宽值为要求保证的虚拟机带宽值; (1. 2)用户启用物理网卡的单根输入输出虚拟化功能,创建物理网卡的虚拟功能; (2)创建队列步骤,顺序包括下述子步骤 (2.1)分别创建第一队列、第二队列和第三队列用于保存虚拟机信息,各队列由节点组成,每个节点包含虚拟机名称、I/O优先级值、带宽值、虚拟功能数,其中I/O优先级值为对应虚拟机名称的虚拟机的I/O优先级;带宽值在第一队列的各节点中为对应虚拟机名称的虚拟机所要保证的带宽,在第二队列和第三队列中,各节点带宽值均为O ;虚拟功能数在第一队列的各节点中为对应虚拟机名称的虚拟机所需要的虚拟功能数目,在第二队列的各节点中为1,在第三队列的各节点中为O ;第一队列按照虚拟机加入顺序保存具有带宽保证的虚拟机,第二队列按照虚拟机的I/O优先级值从大到小的顺序保存没有带宽保证但已使用虚拟功能的虚拟机,第三队列按照虚拟机的I/O优先级值从大到小的顺序保存没有带宽保证且未使用虚拟功能的虚拟机; (2. 2)创建虚拟功能队列用于保存虚拟功能信息,该队列由节点组成,每个节点包括编号、使用情况、虚拟机名称,其中编号为虚拟功能编号,使用情况为该编号虚拟功能使用情况,虚拟机名称为使用该编号虚拟功能的虚拟机名称; 将各虚拟功能按编号值从小到大的顺序保存到虚拟功能队列各节点中,同时将各节点中的使用情况设置成未使用,虚拟机名称为空; (2. 3)将变量E设置为总虚拟功能数,将变量B设置为O ;变量E为未使用的虚拟功能数目,变量B为第一队列中所有虚拟机已经使用的虚拟功能总数; (3)虚拟机分类步骤,顺序包括下述子步骤(3.1)判断虚拟机监控器中是否存在虚拟机,是则进行子步骤(3. 2),否则转步骤(9);(3. 2)将虚拟机监控器中所有的虚拟机按其在虚拟机监控器中的顺序依次加入到第三队列的各节点中,并初始化节点,将各节点的I/O优先级值、带宽值、虚拟功能数设置为O ; (3. 3)获取配置文件中所有虚拟机名称,使用每一个虚拟机名称查找第三队列,将与该虚拟机名称相同的节点从第三队列移除,依次加入第一队列,同时修改相应节点带宽值和虚拟功能数,将带宽值修改为配置文件中该虚拟机的带宽值,将虚拟功能数按照下式计算并修改 虚拟功能数=带宽值X虚拟功能总数/物理网卡带宽; (3. 4)启动定时器,将其时间长度设置为6 12小时; (4)分配虚拟功能步骤,顺序包括下述子步骤 (4.1)判断第一队列是否为空,是则转子步骤(4. 6),否则获取第一队列中的第一个节点,进行子步骤(4.2); (4. 2)判断是否(B+C) > A,是则转子步骤(4. 5),否则进行子步骤(4. 3); 其中,变量A =虚拟功能总数/4,变量C为当前节点的虚拟功能数; (4. 3)顺序将虚拟功能队列中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列当前节点对应的虚拟机,将虚拟功能队列中对应这C个节点的虚拟机名称修改为第一队列当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E = E-C,置B = B+C ; (4. 4)判断是否为第一队列最后一个节点,是则转子步骤(4. 6),否则获取第一队列下一个节点,转子步骤(4.2); (4. 5)将第一队列中当前节点以及其后的节点对应的虚拟机关闭,并将这些虚拟机从第一队列和配置文件中移除; (4. 6)计算第二队列中、第三队列中各节点的I/O优先级值并排序 从虚拟机监控器中获取第二队列中、第三队列中各节点对应的虚拟机的I/O中断次数、睡眠时间;按照下式计算第二队列中、第三队列中所有节点的I/O优先级值 I/o优先级值=I/O中断次数XP+睡眠时间X (1-P),P为40% 60% ; 将结果保存到第二队列、第三队列相应节点的I/O优先级值中,按照I/O优先级值从大到小的顺序对第二队列、第三队列排序; (4. 7)判断是否第三队列为空,是则转步骤(9),否则获取第三队列第一个节点,进行子步骤(4. 8); (4. 8)判断是否E > A,是则进行子步骤(4. 9),否则转步骤(9); (4. 9)将该节点从第三队列移除,并按照从大到小的顺序根据其I/O优先级值将其加入第二队列,将虚拟功能队列中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列中加入节点对应的虚拟机,将虚拟功能队列中相应节点的虚拟机名称修改为第二队列中加入节点的虚拟机名称,将虚拟功能队列中相应节点的使用情况设置为已使用,置E=E-1,转子步骤(4. 7); (5)判断唤醒步骤判断是否有唤醒信号,是则进行子步骤(5.1);否则转步骤(9),所述唤醒信号为虚拟机增加信号、虚拟机减少信号、定时完成信号之一;唤醒信号包含类型和虚拟机名称,虚拟机增加信号类型为增加虚拟机、虚拟机名称为新增虚拟机的名称;虚拟机减少信号类型为减少虚拟机、虚拟机名称为减少的虚拟机的名称;定时完成信号类型为定时完成,虚拟机名称为空; (5.1)计算第二队列中、第三队列中各节点的I/O优先级值并排序,其方式与子步骤(4. 6)相同; (5.2)判断唤醒信号是否为虚拟机增加信号,是则转步骤(6),否则进行子步骤(5.3); (5.3)判断唤醒信号是否为虚拟机减少信号,是则转步骤(7),否则转步骤(8); (6)虚拟机增加步骤,包括下述子步骤 (6.1)根据虚拟机名称在虚拟机监控器中查询是否存在该虚拟机,是则进行子步骤(6. 2),否则转步骤(9); (6. 2)读取配置文件,判断所述虚拟机名称是否存在配置文件中,是则进行子步骤(6. 3),否则转子步骤(6.9); (6. 3)将所述虚拟机名称的虚拟机加入到第一队列队末节点,同时修改相应节点带宽值和虚拟功能数,将带宽值修改为配置文件中该虚拟机的带宽值,将虚拟功能数按照下式计算并修改 虚拟功能数=带宽值X虚拟功能总数/物理网卡带宽; (6. 4)判断是否(B+C) > A,是则进行子步骤(6. 5),否则转子步骤(6. 6);(6. 5)关闭新加入第一队列的虚拟机,将其从第一队列和配置文件中删除,转步骤(8); (6. 6)判断是否C > (E-A),是则进行子步骤(6. 7),否则转子步骤(6. 8); (6. 7)剥离第二队列队末的(C-(E-A))个节点对应的虚拟机的虚拟功能,并将这些虚拟功能分配给新加入第一队列的虚拟机,将虚拟功能队列中这些虚拟功能对应节点的虚拟机名称修改为第一队列新加入节点的虚拟机名称;将第二队列队末的(C-(E-A))个节点从第二队列移除,并将这些节点按照从大到小的顺序根据其I/O优先级值将其加入第三队列; 顺序将虚拟功能队列中(E-A)个使用情况为未使用的节点所对应的虚拟功能分配给第一队列新加入节点的虚拟机,将虚拟功能队列中对应这(E-A)个节点的虚拟机名称修改为第一队列新加入节点的虚拟机名称,对应这(E-A)个节点的使用情况设置为已使用,置E=A,B = B+C,转步骤(8); (6. 8)顺序将虚拟功能队列中C个使用情况为未使用的节点所对应的虚拟功能分配给第一队列当前节点的虚拟机,将虚拟功能队列中对应这C个节点的虚拟机名称修改为第一队列当前节点的虚拟机名称,对应这C个节点的使用情况设置为已使用,置E = E-C,置B =B+C,转步骤(8); (6. 9)将新增虚拟机加入第三队列队首节点,并将该节点的I/O优先级值设置为第三队列中第二个节点的I/O优先级值,将该节点的带宽值、虚拟功能数设置为O,转步骤(8); (7)虚拟机减少步骤,包括下述子步骤 (7.1)根据虚拟机名称在第一队列查询是否存在相应节点,是则转子步骤(7. 3),否则进行子步骤(7. 2); (7. 2)根据虚拟机名称在第二队列查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转子步骤(7. 5),否则转子步骤(7.4); (7. 3)将节点从第一队列移除,置B = B-N,转子步骤(7. 5),N为所述虚拟机名称对应的虚拟机的虚拟功能数; (7. 4)根据虚拟机名称在第三队列查询是否存在相应节点,是则将所述虚拟机对应的节点移除,转步骤(8),否则转步骤(9); (7. 5)遍历虚拟功能队列,将所述虚拟机名称对应的节点的使用情况修改为未使用,置E = E+N ; (7. 6)判断第三队列是否为空,是则转步骤(8),否则获取第三队列第一个节点,进行子步骤(7. 7); (7. 7)将该节点从第三队列移除,并按照从大到小的顺序根据其I/O优先级值将其加入第二队列,将虚拟功能队列中第一个使用情况为未使用的节点所对应的虚拟功能分配给第二队列中插入的节点所对应虚拟机,将虚拟功能队列中相应节点的虚拟机名称修改为第二队列中插入节点的虚拟机名称,将虚拟功能队列中相应节点的使用情况设置为已使用,置 E = E-1, N = N-15 (7.8)判断N是否为O,是则转步骤(8),否则转子步骤(7.6); (8)动态调整步骤, 顺序包括下述子步骤 (8.1)判断第二队列队队末节点的I/O优先级值是否大于第三队列队首节点的I/O优先级值,是则进行子步骤(8. 2),否则转子步骤(8. 3)。
(8. 2)将第三队列中队首的节点从第三队列移除,再按照从大到小的顺序根据其I/O优先级值将其加入第二队列;再将第二队列列末的节点从第二队列移除,按照从大到小的顺序根据其I/O优先级值将其加入第三队列并剥离其虚拟功能,将剥离的虚拟功能分配给新加入第二队列的节点对应的虚拟机,修改虚拟功能队列中这个虚拟功能节点的虚拟机名称,转子步骤(8.1); (8. 3)将虚拟机监控器中所有虚拟机的I/O中断次数和睡眠时间设置为O,将定时器时间长度设置为6 12小时,转步骤(9); (9)休眠步骤休眠O. 5 2分钟之后,转步骤(5)。
全文摘要
一种虚拟功能的动态调度方法,属于计算机虚拟化领域,解决单根输入输出虚拟化标准的网卡所提供的虚拟功能使用中可扩展性不足、灵活性差的问题,以提高所述网卡的利用率。本发明包括初始化步骤、创建队列步骤、虚拟机分类步骤、分配虚拟功能步骤、判断唤醒步骤、虚拟机增加步骤、虚拟机减少步骤、动态调整步骤和休眠步骤。本发明在一段时间内,通过统计虚拟机I/O中断次数和睡眠时间,对单根输入输出虚拟化标准(SR-IOV)的网卡所提供的虚拟功能进行动态调度,保证了虚拟功能由I/O优先级值大的虚拟机使用,提高了其网络性能,充分利用了硬件,用于支持设备直接分配方式的虚拟机平台。
文档编号G06F9/455GK103049331SQ20121052155
公开日2013年4月17日 申请日期2012年12月6日 优先权日2012年12月6日
发明者童薇, 冯丹, 刘景宁, 李宇, 张炬 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1