法律状态公告日
法律状态信息
法律状态
2019-06-07
未缴年费专利权终止 IPC(主分类):G06F9/50 授权公告日:20131113 终止日期:20180624 申请日:20100624
专利权的终止
2017-09-15
专利权的转移 IPC(主分类):G06F9/50 登记生效日:20170825 变更前: 变更后: 申请日:20100624
专利申请权、专利权的转移
2017-04-05
文件的公告送达 IPC(主分类):G06F9/50 收件人:上海君是信息科技有限公司 文件名称:视为未提出通知书 申请日:20100624
文件的公告送达
2016-09-14
文件的公告送达 IPC(主分类):G06F9/50 收件人:上海君是信息科技有限公司 文件名称:视为未提出通知书 申请日:20100624
文件的公告送达
2015-07-08
专利权的转移 IPC(主分类):G06F9/50 变更前: 变更后: 登记生效日:20150618 申请日:20100624
专利申请权、专利权的转移
2013-11-13
授权
授权
2011-04-20
实质审查的生效 IPC(主分类):G06F9/50 申请日:20100624
实质审查的生效
2010-11-24
公开
公开
查看全部
(一)技术领域
本发明主要是涉及一种基于内核虚拟机(Kernel-based Virtual Machine,简称KVM)调度策略的实现方法,实现在Linux环境下协调内核虚拟机与系统进程间的资源竞争问题,使内核虚拟机能够达到更好的性能;在多虚拟机环境下,使各虚拟机之间能够更高效的利用系统资源,各虚拟机达到自适应调整。此外,基于内核虚拟机的调度策略通过减少虚拟机的切换次数,从而降低内核虚拟机的切换开销。属于计算机虚拟机调度器技术领域。
(二)背景技术
1、虚拟化技术
虚拟化技术出现于上世纪六七十年代,主要应用在大型机上,初衷是为了实现更高的设备利用率,使多个用户能够尽可能的利用大型机丰富的系统资源,节省成本。虚拟化技术通过软件手段对计算机中的重要的接口进行模拟和抽象,从而实现虚拟化软件。通常所说的虚拟化技术是指系统级的虚拟化技术,系统级虚拟化技术中的虚拟化软件称为虚拟机监控器(Virtual Machine Monitor,简称VMM),以虚拟指令集系统架构(ISA,Instructl/On System Architecture)为目标。系统级虚拟化的核心是构建虚拟机监视器,然后在其上创建虚拟机,将本来直接运行于实际硬件平台的操作系统放在虚拟机中运行,这样的操作系统称为客户操作系统(Guest OS),其中原本可直接运行的某些操作通过虚拟层来运行。通过虚拟机监控器可以在单个物理服务器上运行多个虚拟机,每个虚拟机封装一个客户操作系统,使得运行在各个客户操作系统中的程序具有很好的安全隔离性和可扩展性,实现服务整合,极大的提高了各种资源的利用率。
虚拟化技术将服务器逻辑的划分为一个主机,一个虚拟机监控器和多个虚拟机。虚拟机监控器负责对多个虚拟机进行资源分配和调度,使每个虚拟机能够公平的共享主机资源。
2、内核虚拟机及其现有的调度策略
内核虚拟机是一种开源的新型虚拟化解决方案,由KVM Driver和稍加修改过的Qemu两部分组成。KVM Driver加入到标准的Linux(计算机操作系统)内核中,被组织成标准的字符设备(/dev/kvm);稍加修改的Qemu通过一系列I/Octl系统调用访问这个字符设备从而创建和运行虚拟机。内核虚拟机将Linux进程划分为三种执行模式:内核模式,执行非I/O客户代码,虚拟机运行在这种模式下;内核模式,实现客户机的切换,处理由于I/O或特定指令引起的虚拟机退出,KVM Driver工作在此模式下;用户模式,模拟执行I/O指令,Qemu运行在此模式下。在这种模式下,每个虚拟机都是一个标准的Linux进程,通过Linux内核进行调度。
Linux内核通过进程控制块task_struct(进程在Linux内核中的表示方法)结构体中的policy值将进程分为普通进程和实时进程,并分别采用不同的调度策略。内核虚拟机进程属于普通进程,采用动态优先级时间片轮转调度算法:虚拟机进程创建时,task_struct结构体中的counter值被赋予priority的值,即初始计数器值,同时虚拟机进程被加入到处理器的可执行进程队列,等待Linux内核调度程序的调度。在某一时刻,虚拟机进程被Linux内核进程调度程序选中,获得处理器资源,虚拟机进程处于运行状态,其task_struct结构体中的counter域相应的减少,以给其他进程获得处理器资源的机会。虚拟机进程在运行完自身的时间片或因等待某种资源需要退出时,Linux内核调度程序立刻重新扫描系统中的进程调度队列,选择另一个处于可执行队列的进程获得处理器资源。虚拟机进程获得需要的系统资源后被重新加入到可执行队列中,等待处理器的下一轮调度。若虚拟机进程的task_struct结构体中的counter值在某一时刻减为0,且系统中还存在其他普通进程,则虚拟机进程需要等至所有普通进程的counter值都减为0后,Linux内核进程调度程序对所有普通进程的counter值进行重新赋值,进行新一轮的调度。
3、内核虚拟机现有调度策略的缺陷
KVM虚拟机完全利用Linux进程调度程序作为自己的调度器,从Linux内核角度来看,KVM虚拟机只不过是一个系统的普通进程,使得KVM虚拟机与Linux内核得到了完美的结合,充分利用了Linux内核的一切优点,使KVM虚拟机得到了较好的性能。
同时,KVM虚拟机所采有的Linux进程调度策略也存在许多局限性。首先,KVM虚拟机是一个普通的进程并由Linux内核统一调度,由于Linux系统中存在众多的系统进程,这些进程势必会与KVM虚拟机进程竞争系统资源,无论是CPU资源,内存资源,还是I/O设备资源。同时,Linux内核会保证系统中的各个进程都能得到运行的机会,调度算法会以一种公平的方式来调度各个进程。除此之外,Linux为了保证实时性,采用了抢占式调度方式,即在任何一个进程运行期间,一个实时性要求高的进程到来都会导致内核重新进行调度。在Linux内核看来,这是公平的,合理的,但对于KVM虚拟机来说,这确实不公平的。因为虚拟机本身就是一个操作系统,试想这样一种情况:KVM进程正在CPU上运行,此时里面运行了一个优先级较高的应用,某一时刻,Linux系统中到来一个优先级高于KVM虚拟机的进程,但它的优先级却低于KVM虚拟机中业务的优先级,此时Linux系统本身并意识不到这一点,因此Linux内核会剥夺KVM虚拟机的运行权,转去执行新到来的进程。这种情况下,不仅KVM虚拟机中的更高优先级的业务无法运行,而且导致了KVM进程的切换,这次本不应该的切换也增加了KVM进程的切换次数,从而增加了虚拟机的切换开销。
(三)发明内容
1、目的
本发明的目的是为了提供一种基于内核虚拟机调度策略的实现方法,它实现了在内核虚拟机环境下,更好的协调虚拟机进程和Linux系统进程的资源竞争问题,使虚拟机达到更好的性能;在多虚拟机环境下,各个虚拟机更高效的利用系统资源,并努力达到自适应调整;同时,基于内核虚拟机的调度策略考虑到了虚拟机进程的特殊性,减少了虚拟机与主机的切换次数,从而降低了虚拟机的切换开销。这样在物理服务器上部署一个或多个虚拟机,可以使运行在虚拟机内的客户操作系统更加高效、安全的运行业务程序,实现资源的整合,提高物理服务器的利用率。
2、技术方案
本发明一种基于内核虚拟机调度策略的实现方法,该方法具体步骤如下:
步骤一:将Linux进程分为普通进程,虚拟机进程和实时进程,使虚拟机进程的优先级介于普通进程和实时进程之间,并为其提供特殊的调度算法。具体实现步骤如下:
步骤1:标识内核虚拟机进程。在task_struct结构体中设置特殊标志,将KVM进程进行标识。为task_struct结构增加一个新的属性is_kvm(标识KVM进程的属性),并且它只有两种状态0和1,其中1代表该进程是KVM进程,0代表其他进程。该属性在进程被创建的时候赋值。在Linux内核执行调度程序时首先检测task_struct结构体中的is_kvm的值,如果是KVM进程,则采取特殊的调度策略,从而避免了和普通进程竞争系统资源的问题。
步骤2:设置专门的虚拟机就绪队列。将Linux进程就绪队列分为虚拟机进程就绪队列和普通进程就绪队列,分别通过两个指针进行访问。Linux内核进行进程调度时都会先检索虚拟机就绪队列,选择一个就绪的虚拟机进程运行,只有在虚拟机进程就绪队列为空,或是每个虚拟机进程的时间片为0时,再去调度普通进程就绪队列。在所有进程就绪队列的所有进程的时间片都为0时,再对所有进程赋以新的时间片,进行新一轮的调度。
步骤3:细分虚拟机就绪队列。将虚拟机就绪队列再细分为under队列(时间片未用完的虚拟机进程)和over队列(时间片已用完的虚拟机进程)。最开始所有的虚拟机就绪进程都在under队列,每个虚拟机具有相同的优先级,以保证每个虚拟机得到公平的对待。Linux内核每次从under队列的队首取一个就绪的虚拟机进程,使之成为下一个被调度的进程,该虚拟机进程的时间片随着运行时间而减小,当该虚拟机进程的运行时间达到且其时间片不为0时,将该虚拟机进程移到under队列的队尾,接着选择under队列的下一个队首进程投入运行。当某一个虚拟机进程的时间片减少为0时,便被放入到over队列。当under队列为空时,互换under队列和over队列的指针,并重新赋值所有虚拟机进程的初始时间片值,继续参与调度,周而复始。
步骤4:设置虚拟机进程为不可抢占进程。如果虚拟机进程在运行期间,由一个优先级更高的进程到来,此时并不是直接抢占虚拟机进程的运行权,而是将虚拟机进程的need_shed(标识进程是否需要执行调度程序的标识位)置位,待此虚拟机进程运行完毕让出处理器资源后,立即进行调度,以保证虚拟机进程在运行期间不可抢占。
步骤二:根据虚拟机中业务的需求,动态调整各虚拟机的资源,使虚拟机更好的适应其客户操作系统中业务的需求。具体实现步骤为:
步骤1:根据虚拟机中的业务需求,将其分为计算密集型和I/O密集型。task_struct结构体的sleep_avg域记录一个虚拟机进程的休眠时间和执行时间,当一个进程从休眠状态恢复到执行状态,sleep_avg会随其休眠时间的长短而增长,直到一个预定的阈值为止。相反,虚拟机进程每运行一个时钟节拍,sleep_avg就相应的减少,直到0为止。
步骤2:在进行重新计算优先级和时间片时,根据sleep_avg值对两种不同的虚拟机进行不同的奖惩。每一个虚拟机进程都有一个相同的初始优先级,当所有虚拟机进程的时间片用完时,需要重新计算优先级和时间片,此时根据sleep_avg的值分别对每一个虚拟机进程的优先级进行调整,以便使各个虚拟机进程在新一轮调度中能够更好的满足业务的需求,达到自适应调整的能力。
3优点及效果
本发明一种基于内核虚拟机调度策略的实现方法,其优点及效果是:
首先,该方法从进程级别将内核虚拟机进程和Linux进程区分开,并赋予其较普通进程更高的优先级,从而使虚拟机进程在与系统普通进程进行资源竞争时优先调度虚拟机进程。其次,在多虚拟机环境下,为每个虚拟机进程设置相同的初始优先级,保证每个虚拟机进程能够得到公平的对待,同时设置虚拟机进程为不可抢占式进程,保证虚拟机中业务的正常运行;为虚拟机进程设置专门的虚拟机调度队列,并将虚拟机就绪进程队列细分为under队列和over队列,缩短了调度程序调度虚拟机进程的时间,提高了多个虚拟机进程情况下的调度效率。最后,通过根据虚拟机中业务的实时需求来动态调整虚拟机资源,使虚拟机进程更好的满足其业务的需求。在内核虚拟机环境下,本发明提出了适合内核虚拟机自身特点的调度策略,因此具有很好的使用价值和应用前景。
(四)附图说明
图l系统总体调度框架图
图2系统总体调度流程示意图
图3内核虚拟机调度队列示意图
(五)具体实施方式
本发明按照图1所示的部署方式,在单个物理主机上同时运行一个或者多个内核虚拟机,然后由本发明的改进后Linux调度程序对所有内核虚拟机和普通Linux进程进行统一调度,并针对内核虚拟机进程采用特殊的调度队列和调度策略,实现各个内核虚拟机更高效地利用系统资源,减少了虚拟机的切换次数,降低了虚拟机的切换开销,从而提高了内核虚拟机的整体性能。
图2所示,为系统的总体调度流程图。当内核虚拟机作为一个Linux进程被创建后,将其标识为虚拟机进程,并加入到虚拟机就绪队列的under队列,由于设置虚拟机就绪队列的优先级比普通进程优先级高,若此时没有其他的虚拟机进程在运行,则立即剥夺正在运行的普通进程的运行权,获得处理器资源开始运行;在运行一段时间后,将此虚拟机进程移到虚拟机就绪队列队尾,调度其他的虚拟机进程运行;若某一时刻,虚拟机进程的时间片用完则加入到虚拟机就绪队列的over队列,继续调度其他虚拟机进程运行;若所有虚拟机进程的时间片用完,则根据上一时段内各虚拟机的运行情况对各虚拟机重新计算时间片,并再次加入到under队列,进行下一轮的调度。
图3所示,为内核虚拟机的调度队列示意图。本发明所实现的一种基于内核虚拟机的调度策略为虚拟机设置了专门的就绪队列,从而将内核虚拟机进程和系统的普通进程区分开来,为虚拟机提供了较普通进程更高的优先级,保证虚拟机在与普通进程进行资源竞争的时候能够优先获得资源,同时虚拟机就绪队列的进程采用公平的时间片轮转调度策略,保证了各虚拟机得到公平的处理;进一步将虚拟机就绪队列细分为under队列和over队列,就绪的虚拟机进程放到under队列,时间片用完的进程被移到over队列,只在under队列为空时,简单的将under队列和over队列调换,即可重新进行下一轮的调度,提高了虚拟机调度的效率;同时,在进行新一轮调度的同时,根据前一段时间内各虚拟机的运行情况对各个虚拟机的优先级和时间片进行重新调整,保证虚拟机更好的满足客户虚拟机对资源的要求。
本发明一种基于内核虚拟机调度策略的实现方法,该方法具体步骤如下:
步骤一:将Linux进程分为普通进程,虚拟机进程和实时进程,使虚拟机进程的优先级介于普通进程和实时进程之间,并为其提供特殊的调度算法。具体实现步骤如下:
步骤1:标识内核虚拟机进程。在task_struct结构体中设置特殊标志,将KVM进程进行标识。为task_struct结构增加一个新的属性is_kvm,并且它只有两种状态0和1,其中1代表该进程是KVM进程,0代表其他进程。该属性在进程被创建的时候赋值。在Linux内核执行调度程序时首先检测task_struct结构体中的is_kvm的值,如果是KVM进程,则采取特殊的调度策略,从而避免了和普通进程竞争系统资源的问题。
步骤2:设置专门的虚拟机就绪队列。将Linux进程就绪队列分为虚拟机进程就绪队列和普通进程就绪队列,分别通过两个指针进行访问。Linux内核进行进程调度时都会先检索虚拟机就绪队列,选择一个就绪的虚拟机进程运行,只有在虚拟机进程就绪队列为空,或是每个虚拟机进程的时间片为0时,再去调度普通进程就绪队列。在所有进程就绪队列的所有进程的时间片都为0时,再对所有进程赋以新的时间片,进行新一轮的调度。
步骤3:细分虚拟机就绪队列。将虚拟机就绪队列再细分为under队列和over队列,under队列中是时间片不为0的虚拟机进程,over队列中是时间片为0的虚拟机进程。最开始所有的虚拟机就绪进程都在under队列,每个虚拟机具有相同的优先级,以保证每个虚拟机得到公平的对待。Linux内核每次从under队列的队首取一个就绪的虚拟机进程,使之成为下一个被调度的进程,该虚拟机进程的时间片随着运行时间而减小,当该虚拟机进程的运行时间达到且其时间片不为0时,将该虚拟机进程移到under队列的队尾,接着选择under队列的下一个队首进程投入运行。当某一个虚拟机进程的时间片减少为0时,便被放入到over队列。当under队列为空时,互换under队列和over队列的指针,并重新赋值所有虚拟机进程的初始时间片值,继续参与调度,周而复始。
步骤4:设置虚拟机进程为不可抢占进程。如果虚拟机进程在运行期间,由一个优先级更高的进程到来,此时并不是直接抢占虚拟机进程的运行权,而是将虚拟机进程的need_shed置位,待此虚拟机进程运行完毕让出处理器资源后,立即进行调度,以保证虚拟机进程在运行期间不可抢占。
步骤二:根据虚拟机中业务的需求,动态调整各虚拟机的资源,使虚拟机更好的适应其客户操作系统中业务的需求。具体实现步骤为:
步骤1:根据虚拟机中的业务需求,将其分为计算密集型和I/O密集型。task_struct结构体的sleep_avg域记录一个虚拟机进程的休眠时间和执行时间,当一个进程从休眠状态恢复到执行状态,sleep_avg会随其休眠时间的长短而增长,直到一个预定的阈值为止。相反,虚拟机进程每运行一个时钟节拍,sleep_avg就相应的减少,直到0为止。
步骤2:在进行重新计算优先级和时间片时,根据sleep_avg值对两种不同的虚拟机进行不同的奖惩。每一个虚拟机进程都有一个相同的初始优先级,当所有虚拟机进程的时间片用完时,需要重新计算优先级和时间片,此时根据sleep_avg的值分别对每一个虚拟机进程的优先级进行调整,以便使各个虚拟机进程在新一轮调度中能够更好的满足业务的需求,达到自适应调整的能力。
机译: 基于配置信息(包括虚拟机的上下文信息),在分配给虚拟机的物理上分开的处理器上跨核心进行内核迁移
机译: 实现此方法的方法和设备生成和安装从管理程序的虚拟机的内核内存中的可执行代码
机译: 涉及硬件虚拟化功能的系统和方法,例如分离内核虚拟机管理程序,虚拟机管理程序,虚拟机管理程序上下文,虚拟机管理程序上下文,rootkit检测/预防和/或其他功能