设为首页 收藏本站
查看: 1251|回复: 0

[经验分享] xen credit scheduler and policy

[复制链接]

尚未签到

发表于 2015-4-13 13:40:17 | 显示全部楼层 |阅读模式
  最近在研究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的基本原理就差不多说完了,后续一些细节点慢慢再补充
  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-56703-1-1.html 上篇帖子: XEN中ACM模块编译注意事项 下篇帖子: [zz]XEN虚拟CPU管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表