虚拟机(xen)中credit调度算法分析(1)

来源:互联网 发布:网络歌手2015排名榜 编辑:程序博客网 时间:2024/05/16 06:05

虚拟机(xen)中credit调度算法分析----schedule.c中调度部分的代码
杭州电子科技大学网格与服务计算实验室   周峰

    目前在XEN虚拟机中的调度算法有两种:一种的是SEDF,另一种是CREDIT。在这里只对CREDIT进行探讨,至于SEDF会留到后进行。首先我们来说说对调度的抽象层中的schedule.c文件中调度部分的代码. 在虚拟机xen中关于调度的代码是这样的:
void __init scheduler_init(void)

{   int i;
    open_softirq(SCHEDULE_SOFTIRQ, schedule); //打开/注册schedule这个软中断
    for_each_cpu ( i )
    {      //为每个cpu定一个定时器。在时间到后就调用回调函数s_time_fn, 并且在回调函数中调用产生软中断(设置bit),在cpu 发送vmexit后会检查软中断的mask位,如果发现某些位被置上后就会调用其中断回调函数。
        spin_lock_init(&per_cpu(schedule_data, i).schedule_lock);
        init_timer(&per_cpu(schedule_data, i).s_timer, s_timer_fn, NULL, i);
    }
    for ( i = 0; schedulers[i] != NULL; i++ )
    {
        ops = *schedulers[i];
        if ( strcmp(ops.opt_name, opt_sched) == 0 )
            break;
    }
    if ( schedulers[i] == NULL )
        printk("Could not find scheduler: %s/n", opt_sched);
    printk("Using scheduler: %s (%s)/n", ops.name, ops.opt_name);
    SCHED_OP(init);
}这里你可能有个疑问,既然存在两个不同的算法,那么我们怎么来定义使用哪一个算法呢?其实很简单,选择调度算法是用opt_sched字符数组来选择的!
/* opt_sched: scheduler - default to credit */
static char opt_sched[10] = "credit";
string_param("sched", opt_sched);
ps:这篇借鉴了联想研究院宋伟的文章,特此申明! 

 
原创粉丝点击