码迷,mamicode.com
首页 > 其他好文 > 详细

Xen的调度分析 (一)

时间:2016-04-05 16:04:03      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

最近实验室在做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算法进行深入的分析。

Xen的调度分析 (一)

标签:

原文地址:http://www.cnblogs.com/linanwx/p/5355107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!