Xen中Credit调度算法分析

Xen虚拟化平台采用不同的调度算法,如Credit和Sedf,来公平分配物理CPU资源给虚拟机。Credit算法确保每个虚拟CPU(VCPU)能平等使用资源,通过信用值(credit)来衡量其优先级。每10毫秒,调度器响应中断,优先调度信用值最低(under状态)的VCPU。若30毫秒内VCPU未达到OVER状态,其调度会被暂停并重新计算信用值,确保资源均衡分配。
摘要由CSDN通过智能技术生成

调度简介

      Xen调度不同的虚拟机到处理器上运行,基本方法是虚拟机按时间片运行。Xen通过调度器实现,用户可以根据自己的需要实现不同的调度器,从而实现不同的调度策略。

     struct scheduler
     schedulers 数组
          {
             &sched_sedf_def,
             &sched_credit_def,
             NULL;
             }
     schedule函数 -调度核心
     task_slice,调度器通过返回一个这样的结构来确定下一个调度运行的虚拟机
     struct task_slice{
           struct vcpu *task;
           s_time_t     time;
     }
      static void shcedule(void){
           struct vcpu *prev=current;
           ...
           next_slice=ops.do_schedule(now);//咨询调度器得到下一个需要调度的VM;
           r_time=next_slice.time;
           next=next_slice.task;
           ...
           set_timer;
           context_switch(prev,next);
                 set_current(next);
                 ...
                  __context_switch();
                      ...
                      schedule_tail(next);//完成切换

      }
      static void __context_switch(void){
          struct cpu_user_regs *stack_regs=guest_cpu_user_regs();
          //保存现场
          //恢复现场

     }
     schedule_tail 函数完成最后的切换,HVM下是vmx_do_resume或svm_do_resume都要调用reset_stack_and_jump

     在虚拟机xen中主要有两中调度算法,一种是credit算法,另一种是sedf算法。Credit算法就是让每一个vcpu(虚拟cpu)都可以公平的使用物理cpu的资源。Sedf算法可以根据每个vcpu负载的大小动态的调整vcpu的优先级。


credit概述:

1.每个物理CPU下面都有一个虚拟CPU的运行队列

2.每个运行队列中的VCPU都有一个credit

3. credit表示VCPU的priority的价值

4.CPU调度的是最先入队的处于under状态下的VCPU

5.每10msec 为一个时间片,响应一次中断。如果被调度的VCPU的credit处于OVER状态那么它将不再被继续调度,重新计算credit值,调度后面的处于under状态下的第一个VCPU

6.如果进行了3个时间片也就是30msec时,原先的VCPU还是没有处于OVER状态,那么这个VCPU也将不被继续调度,credit值的重计算,同5后面的步骤

7.代码中VCPU的credit的计算公式 = credit –CSCHED_CREDITS_PER_TICK (100)+30msec/n(VCPU的数)

8.处于OVER状态的VCPU credit的值不被增加

任务的优先级次序:
1.CSCHED_PRI_TS_UNDER
2.CSCHED_PRI_TS_OVER
3.CSCHED_PRI_IDLE
static void csched_acct(void)计算任务优先级
{
    unsigned long flags;
    struct list_head *iter_vcpu, *next_vcpu;
    struct list_head *iter_sdom, *next_sdom;
    struct csched_vcpu *svc;
    struct csched_dom *sdom;
    uint32_t credit_total;
    uint32_t weight_total;
    uint32_t weight_left;
    uint32_t credit_fair;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值