Xen的调度分析 (一) ——概览

最近实验室在做Xen虚拟机的分析。我阅读了一些资料,整理了一下。

本文主要讲Xen的调度算法。

Xen作为虚拟机管理层,需要对各个VM进行调度,调度通过将各个VM上的VCPU轮流加载到PCPU上来进行。

Xen加载调度策略的过程如下:

调度器运行的主要过程:

Do_schedule是如何运行的?

•在 scheduler 结构中,由 do_schedule 指向的函数非常重要。当需要做出一个调度 决定时(比如:VCPU 时间片用完,外部发生了一个中断信号等),该函数就会被调用,上下文切换也就发生了。这个函数做的主要任务就是决定哪个 VCPU 是下一个要运行的 VCPU,以及下一个 VCPU 将要运行多长时间;完成这个任务的最常用的 方法就是维护一个 VCPU 的运行队列,从这个 VCPU 运行队列的队首中取出下一个 要运行的 VCPU。由于 do_scheduler 经常会被调用,所以这个函数必须短,且高效。 在选好下一个要运行的 VCPU 以后,我们要决定让这个 VCPU 运行在当前物理 CPU 上。该物理 CPU 的 ID 可以通过宏 smp_processor_id()来获得。调度算法会为相关物理 CPU 保留对应的信息。通常,调度算法会维护一个以 CPU ID 为索引的数组。 调度算法决定函数 do_schedule 何时会被调用。每当一个域用完 Xen 分配给它的 时间片后,函数do_scheduler会被调用,函数do_schedule 同时决定下一个do_schedule 在何时会被调用(因为 do_schedule 会返回本次选中的 VCPU 运行的时间);当一个 域主动让出本来属于这个域的时间片时,函数 do_schedule 也会被调用。Xen 还会周 期性的给 VCPU 发送一个虚拟时钟中断(VIRQ_TIMER),每当一个域运行了 10ms 后,该域的 VCPU 就会收到这个中断。
 
Credit调度算法简介:
•为每一个guest操作系统设置一个二元数组,包括权重weight和上限cap。各个系统的权重weight所占的比例代表该系统可以占用CPU时间片的比例, 上限cap决定该系统可以占用CPU时间的上限值。
•将每一个虚拟CPU(VCPU)分到两个队列,under和over队列。Under队列负责按照weight权重正常调度,但是每次调度后都减小信任值credit。信任值为负的任务被移入over队列, 不再进行调度。若所有的虚拟CPU都处于over队列时,调度算法调整所有的credit为其加上最初的credit值,然后把虚拟CPU重新加入到under队列。如此反复。
 
 
 
这星期大概了解了一下基本的运行过程,接下来是对credit算法进行深入的分析。
posted @ 2016-04-05 14:57  linanwx  阅读(1644)  评论(0编辑  收藏  举报