发明名称 一种基于内核虚拟机调度策略的实现方法
摘要 一种基于内核虚拟机调度策略的实现方法,该方法有两大步骤:步骤一:将Linux进程分为普通进程,虚拟机进程和实时进程,使虚拟机进程的优先级介于普通进程和实时进程之间,并为其提供特殊的调度算法;步骤二:根据虚拟机中业务的需求,将其分为计算密集型和I/O密集型;动态调整各虚拟机的资源,使虚拟机更好的适应其客户操作系统中业务的需求;该方法使内核虚拟机在调度过程中得到了优先调度,多虚拟机时能够公平对待各个虚拟机,并能够根据虚拟机中的业务需求动态调整虚拟机资源,很好的满足了内核虚拟机的调度需求。它在计算机虚拟机调度器技术领域里具有实用价值和广阔地应用前景。
申请公布号 CN101894047A 申请公布日期 2010.11.24
申请号 CN201010208491.0 申请日期 2010.06.24
申请人 北京航空航天大学 发明人 丁涛;郝沁汾;张冰;董翰飞
分类号 G06F9/50(2006.01)I;G06F9/455(2006.01)I 主分类号 G06F9/50(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种基于内核虚拟机调度策略的实现方法,其特征在于:该方法具体步骤如下:步骤一:将计算机操作系统即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的值分别对每一个虚拟机进程的优先级进行调整,以便使各个虚拟机进程在新一轮调度中能够更好的满足业务的需求,达到自适应调整的能力。
地址 100191 北京市海淀区学院路37号北航计算机学院