纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

教你解决Linux进程调度组调度及带宽控制

5月1日 观潮阁投稿
  说明:Kernel版本:4。14ARM64处理器,ContexA53,双核使用工具:SourceInsight3。5,Visio1。概述
  组调度(taskgroup)是使用Linuxcgroup(controlgroup)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。比如,看一个实际的例子:A和B两个用户使用同一台机器,A用户16个进程,B用户2个进程,如果按照进程的个数来分配CPU资源,显然A用户会占据大量的CPU时间,这对于B用户是不公平的。组调度就可以解决这个问题,分别将A、B用户进程划分成组,并将两组的权重设置成占比50即可。
  带宽(bandwidth)控制,是用于控制用户组(taskgroup)的CPU带宽,通过设置每个用户组的限额值,可以调整CPU的调度分配。在给定周期内,当用户组消耗CPU的时间超过了限额值,该用户组内的任务将会受到限制。
  由于组调度和带宽控制紧密联系,因此本文将探讨这两个主题,本文的讨论都基于CFS调度器,开始吧。2。taskgroup组调度,在内核中是通过structtaskgroup来组织的,taskgroup本身支持cfs组调度和rt组调度,本文主要分析cfs组调度。CFS调度器管理的是schedentity调度实体,taskstruct(代表进程)和taskgroup(代表进程组)中分别包含schedentity,进而来参与调度;
  关于组调度的相关数据结构,组织如下:
  内核维护了一个全局链表taskgroups,创建的taskgroup会添加到这个链表中;内核定义了roottaskgroup全局结构,充当taskgroup的根节点,以它为根构建树状结构;structtaskgroup的子节点,会加入到父节点的siblings链表中;每个structtaskgroup会分配运行队列数组和调度实体数组(以CFS为例,RT调度类似),其中数组的个数为系统CPU的个数,也就是为每个CPU都分配了运行队列和调度实体;
  对应到实际的运行中,如下:
  structcfsrq包含了红黑树结构,schedentity调度实体参与调度时,都会挂入到红黑树中,taskstruct和taskgroup都属于被调度对象;taskgroup会为每个CPU再维护一个cfsrq,这个cfsrq用于组织挂在这个任务组上的任务以及子任务组,参考图中的GroupA;调度器在调度的时候,比如调用picknexttaskfair时,会从遍历队列,选择schedentity,如果发现schedentity对应的是taskgroup,则会继续往下选择;由于schedentity结构中存在parent指针,指向它的父结构,因此,系统的运行也能从下而上的进行遍历操作,通常使用函数walktgtreefrom进行遍历;
  更多linux内核视频教程文档资料免费领取后台私信【内核】自行获取。
  2。2taskgroup权重进程或进程组都有权重的概念,调度器会根据权重来分配CPU的时间。进程组的权重设置,可以通过sys文件系统进行设置,比如操作sysfscgoupcpuA
  调用流程如下图:
  schedgroupsetshares来完成最终的设置;taskgroup为每个CPU都分配了一个schedentity,针对当前schedentity设置更新完后,往上对schedentityparent设置更新,直到根节点;shares的值计算与load相关,因此也需要调用updateloadavg进行更新计算;
  看一下实际的效果图吧:
  写节点操作可以通过echoXXXsysfscgroupcpuABcpu。橙色的线代表传入参数指向的对象;紫色的线代表每次更新涉及到的对象,包括三个部分;处理完schedentity后,继续按同样的流程处理3。cfsbandwidth
  先看一下sysfscgroupcpu下的内容吧:
  有两个关键的字段:cfsperiodus和cfsquotaus,这两个与cfsbandwidth息息相关;period表示周期,quota表示限额,也就是在period期间内,用户组的CPU限额为quota值,当超过这个值的时候,用户组将会被限制运行(throttle),等到下一个周期开始被解除限制(unthrottle);
  来一张图直观理解一下:
  在每个周期内限制在quota的配额下,超过了就throttle,下一个周期重新开始;3。1数据结构
  内核中使用structcfsbandwidth来描述带宽,该结构包含在structtaskgroup中。此外,structcfsrq中也有与带宽控制相关的字段。还是来看一下代码吧:structcfsbandwidth{ifdefCONFIGCFSBANDWIDTHu64quota,s64u64intidle,structhrtimerperiodtimer,statisticsintnrperiods,u64endif};period:周期值;quota:限额值;runtime:记录限额剩余时间,会使用quota值来周期性赋值;hierarchicalquota:层级管理任务组的限额比率;runtimeexpires:每个周期的到期时间;idle:空闲状态,不需要运行时分配;periodactive:周期性计时已经启动;periodtimer:高精度周期性定时器,用于重新填充运行时间消耗;slacktimer:延迟定时器,在任务出列时,将剩余的运行时间返回到全局池里;throttledcfsrq:限流运行队列列表;nrperiodsnrthrottledthrottledtime:统计值;
  structcfsrq结构中相关字段如下:structcfsrq{。。。ifdefCONFIGCFSBANDWIDTHu64s64u64throttledclock,u64intthrottled,endifCONFIGCFSBANDWIDTH。。。}runtimeenabled:周期计时器使能;runtimeexpires:周期计时器到期时间;runtimeremaining:剩余的运行时间;3。2流程分析3。2。1初始化流程
  先看一下初始化的操作,初始化函数initcfsbandwidth本身比较简单,完成的工作就是将structcfsbandwidth结构体进程初始化。
  注册两个高精度定时器:periodtimer和periodtimer定时器,用于在时间到期时重新填充关联的任务组的限额,并在适当的时候unthrottlecfs运行队列;slacktimer定时器,slackperiod周期默认为5ms,在该定时器函数中也会调用distributecfsruntime从全局运行时间中分配startcfsbandwidth和startcfsslackbandwidth分别用于启动定时器运行,其中可以看出在dequeueentity的时候会去利用slacktimer,将运行队列的剩余时间返回给tgcfsb这个unthrottlecfsrq函数,会将throttledlist中的对应cfsrq删除,并且从下往上遍历任务组,针对每个任务组调用tgunthrottleup处理,最后也会根据cfsrq对应的schedentity从下往上遍历处理,如果schedentity不在运行队列上,那就重新enqueueentity以便参与调度运行,这个也就完成了解除限制的操作;
  doschedcfsperiodtimer函数与doschedcfsslacktimer()函数都调用了distrbutecfsruntime(),该函数用于分发tgcfsb的全局运行时间runtime,用于在该taskgroup中平衡各个CPU上的cfsrq的运行时间runtime,来一张示意图:
  系统中两个CPU,因此taskgroup针对每个cpu都维护了一个cfsrq,这些cfsrq来共享该taskgroup的限额运行时间;CPU0上的运行时间,浅黄色模块表示超额了,那么在下一个周期的定时器点上会进行弥补处理;3。2。2用户设置流程
  用户可以通过操作sys中的节点来进行设置:
  操作sysfscgroupcpu下的cfsquotauscfsperiodus节点,最终会调用到tgsetcfsbandwidth函数;tgsetcfsbandwidth会从roottaskgroup根节点开始,遍历组调度树,并逐个设置限额比率;更新cfsbandwidth的runtime信息;如果使能了cfsbandwidth功能,则启动带宽定时器;遍历taskgroup中的每个cfsrq队列,设置runtimeremaining值,如果cfsrq队列限流了,则需要进行解除限流操作;3。2。3throttle限流操作
  cfsrq运行队列被限制,是在throttlecfsrq函数中实现的,其中调用关系如下图:
  调度实体schedentity入列时,进行检测是否运行时间已经达到限额,达到则进行限制处理;picknexttaskfairputprevtaskfair在选择任务调度时,也需要进行检测判断;3。2。4总结
  总体来说,带宽控制的原理就是通过taskgroup中的cfsbandwidth来管理一个全局的时间池,分配给属于这个任务组的运行队列,当超过限额的时候则限制队列的调度。同时,cfsbandwidth维护两个定时器,一个用于周期性的填充限额并进行时间分发处理,一个用于将未用完的时间再返回到时间池中,大抵如此。
  首页内核技术中文网构建全国最权威的内核技术交流分享论坛
  转载地址:教你解决Linux进程调度组调度及带宽控制圈点内核技术中文网构建全国最权威的内核技术交流分享论坛
投诉 评论 转载

教你解决Linux进程调度组调度及带宽控制说明:Kernel版本:4。14ARM64处理器,ContexA53,双核使用工具:SourceInsight3。5,Visio1。概述组调度(taskgroup)是使用……左手书卷气右手烟火味千年台州府城焕发生机兴善门下,紫阳街前,一派热闹景象。国庆长假伊始,今年新晋国家5A级旅游景区的浙江临海市台州府城文化旅游区吸引大量游客,前来感受千年古城文化韵味与人间烟火味的交融。浙江临海……长沙至内罗毕航线增至每周2班中新网长沙4月16日电(陈中凯曹弋远)4月16日凌晨1时2分,中国南方航空公司(以下简称南航)CZ6043长沙至内罗毕航班在长沙机场起飞,前往内罗毕乔莫肯雅塔机场。即日起,长沙……图解丨聊聊人造太阳做这个很难,也很燃!还记得《流浪地球》里的行星发动机吗?还记得《三体》里的可控核聚变吗?嗯,这些科幻有望一步步成为现实!4月12日有人造太阳之称的全……南美洲的哑巴民族,4万族人无人能言,吃毒蛇毒虫却安然无恙大千世界无奇不有,这个世界远比我们想象的要精彩的很多,我们想要了解世界的变化与发展,必须要切实的去感受,借助于国家的经济实力的稳步增长,让我们拥有机会走出国门看一看。绝大……前中超球员看出队友参与赌球但对此也无能为力据《中国新闻周刊》的最新报道称,有前中超球员向他们透露,虽然知道身边有队友参与了赌球,但自己对此也无能为力。此前有多方媒体消息称,近期大批球员因涉嫌参与赌球被公安机关带走……赵敏黎姿37岁嫁残疾丈夫,41岁生三胎,如今她怎样了?2009年,香港女演员黎姿哭着找到富豪马廷强:您能不能借给我一点钱?马廷强点点头:只要你答应我一个条件,想借多少钱都没问题。听到此话,黎姿内心不由得一颤,有些害怕。……恩比德暗讽哈登,76人矛盾加剧,美媒爆1换7交易,公牛预组三NBA常规赛正在如火如荼进行中,各支球队都在为季后赛席位而厮杀。76人在交易截止日前压哨引援哈登后,一度度过了一段甜蜜期,但随着比赛的深入,哈登的软肋不断暴露,令球队再度陷入泥……高度近视会不会遗传?父母高度近视,孩子会继承吗?高度近视的父母更容易把近视遗传给孩子?这是真的吗?高度近视的父母容易把近视遗传给孩子?这是真的,因为父母是高度近视,孩子发生近视的几率比普通人要高。而且,如果父母的……国乒阻击张本智和兄妹,梁靖崑与林诗栋会师男单决赛林诗栋守住上半区,与梁靖崑会师决赛。图WTT世界乒联新京报讯(首席记者孙海光)3月4日晚,WTT(世界乒乓球职业大联盟)球星挑战赛印度果阿站结束男女单打半决赛争夺,梁靖崑……NatalieLee是俄罗斯模特和有影响力的人NatalieLee是俄罗斯模特和有影响力的人1999年2月17日出生于俄罗斯莫斯科,她身高170厘米,体重50公斤,体型三围342535。NatalieLee,她……别再抄原神了刚好离《原神》上线过了一代产品的研发周期,能看到今年不断有模仿《原神》的产品出现,比较典型的一例,是某非开放世界产品套用了元素反应的战斗机制,导致核心玩法体验错位;另一例则是某……
切莫因为万一而意外女生在职场不好混?娱乐圈就能给你答案!靳东黄磊赵丽颖热血传奇百区美腿法师,轻型盔甲无限妖娆,魔5小手镯更是极品微增的iPhone,竟成了苹果最后一块遮羞布高糖高脂高盐伤脑筋,这种健康饮食方式最有益于大脑NBA詹皇续约前曾考察其他球队但没能让他下决心转队张艺谋儿子被耶鲁录取冲上热搜!揭秘名校光环下的陷阱谢娜为了扮嫩挺拼的,当了妈还穿开叉到腿根的裙子,好在卫衣遮羞山路上汽车一体化压铸专题研究降本增效,一体化压铸方兴未艾红太阳光电巧借天光为国争光智能制造在长沙系列报道之五和负能量的朋友闹掰两个月以后,我的变化
冬季养生第一果活血降脂好帮手小班教案我爱冬季孩子咳嗽老不好的原因很可能是慢性咽炎【歌词】心酸的情歌(粤)(演唱会版)歌手:巫启贤热议聚热点网 商场如战场中国成为最大赢家,100个国家行动开始,美国赏饭真香2022年上半年全国新能源并网消纳情况简单招赶走困扰上班族的后背疼痛借问暑气何日消黄冈是哪里的(黄冈市移动手机号段)吉林一女子嫌身上有生长纹,花4000元做美容却无效白花钱还遭

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形