最近在研究xen的vcpu 调度和cpu qos策略,现在默认的scheduler是credit, 对应的代码是sched_credit.c

xen支持好几种控制策略,效果最好的当选pin, 灵活性最好的是weight, 控制和灵活兼备的就是cap,据说人家amazon在06年推ecu的时候就是用了类似的技术。

pin的实现比较好了解,也就是set affinity,个人对cap,weight的实现比较感兴趣,这两者应该是类似,好了,开始聊下代码

xen里面首先有个总的调度函数schedule(),这是SCHEDULE_SOFTIRQ的中断处理函数,主动触发调度的方式就是raise_softirq,每个pcpu有个timer,里面就是定期raise_softirq。

schedule里面主要的事情就是调用具体实现sched_credit里面的do_schedule来挑选下一个next任务,之后对prev和next的vcpu state进行更新,prev根据当前的状态,更新成blocked,runnable,offline, next更新成running, 再调用context_switch函数来完成真正一些寄存器的保存和切换

sched_credit的do_schedule是由csched_schedule实现的,这里面会先去取当前cpu 的runq的下一个任务,取出来之后判断下当前的pri,如果是over,那表示它的credit已经用完了,不能被run了,需要重新挑一个出来,如果大于over,表示可以run, 就会从runq里面摘出来。

每个pcpu还有一个timer,csched_tick, 它会计算当前vcpu使用了多少credit之类的accounting, 并把每个runq重新排序

当然还少不了一个主timer csched_acct, 定期去计算当前活动dom的活动vcpu里面的credit值,根据一定的策略如weight和cap来决定每个vcpu最后分到的credit值,如果当前credit小于0,那么表示credit不够了,优先级要降低,prio设置成over,如果有设置cap,那么会pause住,等到后面有credit再唤醒。如果credit > 0那么,优先级就提高了,prio设置为under, 如果之前因为cap而被pause的,这个时候可以unpause起来,最后通知说,我需要runq重新排序

中间weight和cap对于credit计算的影响如下:

首先有个CSCHED_CREDITS_PER_ACCT表示这次调度里面每个pcpu能够分配的credit绝对值

credit_total=n core * CSCHED_CREDITS_PER_ACCT

然后有个当前credit_fair会根据你的weight所占的比例来决定你的credit

credit_peak表示你的活动cpu数 * CSCHED_CREDITS_PER_ACCT,这就是你的vcpu能够达到的上限,也就是独占物理cpu

credit_cap根据你的cap来决定你拥有多少物理cpu的能力,cap * CSCHED_CREDITS_PER_ACCT

如果有cap, 那么creadit_cap < credit_peak时,credit_peak=credit_cap,也就是说你的上线由你的credit_cap决定

最后在credit_peak和credit_fair里面取最小的那个值作为整个domain的credit

再把domain的credit除以当前domain活动的cpu数,就变成domain的vcpu的credit

至此xen credit scheduler的基本原理就差不多说完了,后续一些细节点慢慢再补充

xen credit scheduler and policy的更多相关文章

  1. 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事

    在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...

  2. 【转】Kubernetes scheduler学习笔记

    简介 Kubernetes是一个强大的编排工具,可以用来很方便的管理许多台机器,为了使机器的资源利用率提高,同时也尽可能的把压力分摊到各个机器上,这个职责就是由scheduler来完成的. Kuber ...

  3. Openvswitch手册(6): QoS

    这一节我们看QoS,Qos的设置往往是和flow中的policy一起使用的 Open vSwitch QoS capabilities 1 Interface rate limiting 2 Port ...

  4. 《k8s-1.13版本源码分析》-调度器初始化

    源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ...

  5. Scoring and Modeling—— Underwriting and Loan Approval Process

    https://www.fdic.gov/regulations/examinations/credit_card/ch8.html Types of Scoring FICO Scores    V ...

  6. kube-scheduler源码分析

    kubernetes集群三步安装 kube-scheduler源码分析 关于源码编译 我嫌弃官方提供的编译脚本太麻烦,所以用了更简单粗暴的方式编译k8s代码,当然官方脚本在编译所有项目或者夸平台编译以 ...

  7. kube-scheduler源码分析(1)-初始化与启动分析

    kube-scheduler源码分析(1)-初始化与启动分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作 ...

  8. AndroidStudio3.0无法打开Android Device Monitor的解决办法(An error has occurred on Android Device Monitor)

    ---恢复内容开始--- 打开monitor时出现 An error has occurred. See the log file... ------------------------------- ...

  9. Hypervisor scheduler

    Techniques for configuring a hypervisor scheduler to make use of cache topology of processors and ph ...

随机推荐

  1. C++单元测试2

    这里再对上一篇<C++单元测试>进行技巧补充. 我们知道对动态链接库(lib和dll)的测试是比较简单的,我这里主要对需要注意的地方说明一下. 1.建议单独创建单元测试解决方案(不是创建项 ...

  2. HDU 题目分类

    转载自新浪博客,, http://blog.sina.com.cn/s/blog_71ded6bf0100tuya.html 基础题: 1000.1001.1004.1005.1008.1012.10 ...

  3. Fatal error: Uncaught SoapFault exception

    Warning: SoapClient::SoapClient() expects parameter 2 to be array, boolean given in  login\login.php ...

  4. js 中的流程控制—while和do while

    while语句: while(exp){  }如果为true ,执行代码块里的语句,如果为false,跳出循环 <script> var i =1 ; while (i<10){ / ...

  5. css格式化排版

    1,文字排版--字体 语法: body{font-family:"Microsoft Yahei";} 这里注意不要设置不常用的字体,因为如果用户本地电脑上如果没有安装你设置的字体 ...

  6. js烟花特效

    <!DOCTYPE html><html><head><style>body{background:#000;margin:0;}canvas{curs ...

  7. LightOj_1284 Lights inside 3D Grid

    题目链接 题意: 给一个X * Y * Z 的立方体, 每个单位立方体内都有一盏灯, 初始状态是灭的, 你每次操作如下: 1)选择一个点(x1, y1, z1)     再选择一个点(x2, y2, ...

  8. Arduino从基础到实践第三章练习题

    先写在这里,还没经过测试. 1. LED两端往中间移动,到中间后向两边返回. // adr301.ino , , , , , , , , , }; ); ; ; unsigned long chang ...

  9. 百度统计js被劫持用来DDOS Github

    今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗: malicious javascript detected on this d ...

  10. Delphi实现HTMLWebBrowser实现HTML界面

    HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash.声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护.另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件.当然, ...