CN111274024B - 基于cfs调度器的就绪队列平均负载优化方法及数据结构 - Google Patents
基于cfs调度器的就绪队列平均负载优化方法及数据结构 Download PDFInfo
- Publication number
- CN111274024B CN111274024B CN201910208005.6A CN201910208005A CN111274024B CN 111274024 B CN111274024 B CN 111274024B CN 201910208005 A CN201910208005 A CN 201910208005A CN 111274024 B CN111274024 B CN 111274024B
- Authority
- CN
- China
- Prior art keywords
- cfs
- ready queue
- data structure
- load
- avg
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及基于CFS调度器的就绪队列平均负载优化方法及数据结构,通过如下公式,更新整个CFS就绪队列的负载:load_avg_entire=runnable_avg_sum*weight/runnable_avg_period;load_avg_entire是整个CFS就绪队列的负载,runnable_avg_sum和runnable_avg_period分别是整个CFS就绪队列在可运行状态下和调度器中的总衰减累加时间,weight是整个CFS就绪队列的权重值。本发明对内核完全公平调度器进行了优化,使CFS就绪队列的平均负载数据结构更加实时准确,CPU之间的负载均衡分配更加合理。
Description
技术领域
本发明涉及虚拟机资源优化技术领域,具体涉及一种基于CFS调度器的就绪队列平均负载优化方法及数据结构。
背景技术
基于龙芯CPU的服务器和桌面产品已经越来越多的应用于政府、国防、公共卫生、金融等领域,龙芯作为国产第一款成熟的自主设计的大规模运算处理器,已经在我国专用领域占有较大的市场份额。龙芯CPU使用Linux内核作为通用操作系统,需要兼顾用户使用计算机的各类场景,在技术上需要面对各种类型的进程,包括实时进程、交互式进程、批处理进程等。对于桌面产品,系统的响应时间直接影响到用户的体验,如果系统响应过慢用户会明显感受到系统卡顿,由于龙芯CPU目前的性能与国际先进的CPU产品相比仍有明显的差距,如何通过内核机制提高人机交互的流程体验成为了一个急需要解决的问题。
当前龙芯平台Linux内核采用的完全公平调度算法,采用进程权重值的比重来量化实际运行时间,引入了虚拟运行时间的概念,每个进程的虚拟运行时间是实际运行时间相对nice值为0时的权重的比例值。优先级高且权重大的进程,其虚拟运行时间比真实时钟跑的慢,而CFS调度器认为每个进程的虚拟运行时间应当相等,总是选择虚拟运行时间跑的慢的进程,这样在“绝对公平”的前提下又保证了权重大的进程获得更多的实际运行时间。
不仅考虑权重,调度器还要跟踪每个进程调度实体的负载情况,该方法称为PELT。
PELT算法中有一个重要的变量runnable_load_avg,用于描述就绪队列基于可运行状态的总衰减累加时间(runnable time)和权重计算出来的平均负载,但是在当前内核代码中,一次更新只有一个调度实体的负载变化,而没有更新cfs_rq中所有调度实体的负载变化情况。如下表1所示,T1时刻更新调度实体sched_entity1的平均负载,sched_entity2及其他调度实体的平均负载没有更新,在T2时刻更新调度实体sched_entity2的平均负载,sched_entity1及其他调度实体的平均负载没有更新,这样会导致整个就绪队列的runnable_load_avg失真。
表1:现有的就绪队列中调度实体数据结构更新情况
T0时刻 | sched_entity1_old | sched_entity2_old | …… | sched_entityN_old |
T1时刻 | sched_entity1_new | sched_entity2_old | …… | sched_entityN_old |
T2时刻 | sched_entity1_old | sched_entity2_new | …… | sched_entityN_old |
发明内容
为解决现有技术存在的不足,本发明提供了一种基于CFS调度器的就绪队列平均负载优化方法,根据如下公式,更新整个CFS就绪队列的负载:
load_avg_entire=runnable_avg_sum*weight/runnable_avg_period;
其中,load_avg_entire是整个CFS就绪队列的负载,runnable_avg_sum是整个CFS就绪队列在可运行状态下的总衰减累加时间,runnable_avg_period是整个CFS就绪队列在调度器中的总衰减累加时间,weight是整个CFS就绪队列的权重值。
其中,所述CFS就绪队列在可运行状态下的总衰减累加时间和在调度器中的总衰减累加时间,通过每个进程更新周期中涉及到的三个时间间隔delta1、delta2及delta3获得,其中,delta1是与上一更新周期所计算的负载补齐1ms所需时间值,delta2是本次更新周期中多个完整的周期单位的时间值,delta3是本次更新周期中落在最后一个不完整周期单位的时间值。
其中,还包括根据整个CFS就绪队列的负载load_avg_entire,得到整个CFS就绪队列中,每个调度实体的数据结构,以使得每个调度实体的数据结构均得到更新。
其中,所述整个CFS就绪队列的负载,在如下三种情况下被启动更新程序:向CFS就绪队列中添加一个进程,从CFS就绪队列中删除一个进程,或者达到周期更新的时间。
本发明另外提供了一种基于CFS调度器的就绪队列数据结构,包括通用就绪队列数据结构、CFS就绪队列数据结构、调度实体数据结构以及负载数据结构,其中,
负载数据结构同时存在于调度实体数据结构及CFS就绪队列数据结构中,调度实体数据结构存在于CFS就绪队列数据结构中,CFS就绪队列数据结构存在于通用就绪队列数据结构中,并且,
所述通用就绪队列数据结构还包括实时就绪队列数据结构和时钟,时钟用于在预定时刻引发CFS就绪队列数据结构以及CFS就绪队列数据结构中相应的调度实体数据结构的更新操作。
其中,负载数据结构包括runnable_avg_sum、runnable_avg_period以及load_avg_entire/contrib,其中,runnable_avg_sum表示整个CFS就绪队列或相应的调度实体在可运行状态下的总衰减累加时间,runnable_avg_period表示整个CFS就绪队列或相应的调度实体在调度器中的总衰减累加时间,load_avg_entire/contrib表示整个CFS就绪队列或相应的调度实体的负载。
其中,所述调度实体数据结构还包括struct_load_weight及vruntime,其中,struct_load_weight表示调度实体的权重值,vruntime表示调度实体的虚拟运行时间。
本发明提供的基于CFS调度器的就绪队列平均负载优化方法及数据结构,对内核完全公平调度器进行了优化,使CFS就绪队列的平均负载数据结构更加实时准确,因而使CPU之间的负载均衡分配更加合理,完善了系统性能。
附图说明
图1:本发明的基于CFS调度器的就绪队列数据结构的结构示意图。
图2:本发明所采用的衰减累加时间的获取方法图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
图1显示本发明提供的基于CFS调度器的就绪队列数据结构中,通用就绪队列数据结构struct rp、CFS就绪队列数据结构struct cfs_rp、调度实体数据结构struct sched_entity以及负载数据结构struct sched_avg之间的关系。
图1中,struct rt_rq rt代表通用就绪队列中实时运行的程序的数据结构,clock代表时钟,用于以预定周期触发更新过程。
如图1所示,调度实体数据结构struct sched_entity中,有一个负载数据结构struct sched_avg,其用于描述进程的负载。负载数据结构struct sched_avg中,load_avg_contrib表示相应的进程的平均负载的贡献度,与三个因素相关:
(1)调度实体的权重值weight,也即图1中,调度实体数据结构中的struct load_weight;
(2)调度实体的可运行状态下的总衰减累加时间runnable_avg_sum;
(3)调度实体在调度器中的总衰减累加时间runnable_avg_period。
具体的确定公式为:
load_avg_contrib=runnable_avg_sum*weight/runnable_avg_period。
runnable_avg_sum越接近runnable_avg_period,则平均负载越大,表示该调度实体一直在占用CPU。在现有技术中,通过累加每个调度实体的load_avg_contrib,得到CFS就绪队列的负载runnable_load_avg,作为在做SMP负载均衡时判断CPU的负载状态的依据。
如上文所述,由于在已有的就绪队列负载更新过程中,每个更新周期仅更新其中一个调度实体的数据结构struct sched_entity/sched_entity,从而导致最终更新的就绪队列的负载runnable_load_avg并无法真正代表实际的就绪队列的负载。
因此,本发明的图1中,负载数据结构struct sched_avg同时存在于CFS就绪队列数据结构struct cfs_rp中,在每个更新周期中,通过load_avg_entire=runnable_avg_sum*weight/runnable_avg_period即可直接获得整个CFS就绪队列的负载,在此公式中,load_avg_entire表示整个CFS就绪队列的负载,runnable_avg_sum表示整个CFS就绪队列在可运行状态下的总衰减累加时间,runnable_avg_period表示整个CFS就绪队列在调度器中的总衰减累加时间,weight表示整个CFS就绪队列的权重值,其值由每个实体的权重值累积获得。
本发明在进行完全公平算法中,每次更新平均负载时更新整个就绪队列的平均负载,基于可运行时间的平均负载和基于执行时间内的平均负载都包括可运行时间和阻塞时间,同时考虑CPU频率因素。
进一步的,通过CFS就绪队列的负载load_avg_entire还可进一步得出每个更新后的调度实体数据结构,即如表2所示,为本发明的基于CFS调度器的就绪队列数据结构所得到的调度实体数据结构更新情况。
表2:本发明的就绪队列中调度实体数据结构更新情况
T0时刻 | sched_entity1_old | sched_entity2_old | …… | sched_entityN_old |
T1时刻 | sched_entity1_new | sched_entity2_new | …… | sched_entityN_new |
T2时刻 | sched_entity1_new | sched_entity2_new | …… | sched_entityN_new |
具体的优化理论基于如下分析过程:
weight*update(entity)=update(weight*entity);并且,
update(entity1)+update(entity2)=update(entity1+entity2);
由此可得出:
weight1*update(entity1)+weight2*update(entity2)=update(weight1*entity1+weight2*entity2)。
其中,weight是进程的权重,update为更新CFS就绪队列或调度实体中structsched_avg所记录的负载,在三种情况下触发:
(1)向就绪队列中添加一个进程,在CFS中就是enqueue_entity操作;
(2)从就绪队列中删除一个进程,在CFS中就是dequeue_entity操作;
(3)调度器tick,周期性调用更新负载信息。
图2为本发明所采用的衰减累加时间的获取方法,其中,delta=delta1+delta2+delta3之和是本次更新的时间差,时间按每个period1ms(1024us)为一个时间单位,delta1是与之前计算的负载补齐1ms,delta2是多个完整的时间周期的值,delta3是落在最后一个时间周期period内不能取整的值。delta数值依赖进程真实的运行时间,是总的运行时间,lastupdate time是进程上次更新的最后时间,now是进程更新的当前时间。
除当前period这个时间周期,之前的每个period周期都要进行相应的衰减计算,越靠前的时间周期衰减值越大,这是为了让平均负载的值更倾向于当前时间点的负载造成的影响。衰减系统定义为每增加32ms则衰减1/2。
本发明中,所谓的“进程调度”,指的是由于在计算机系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机资源。另外,系统进程也同样需要使用处理机。因此,属于操作系统功能之一的进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行的过程。
本发明中,所谓的“SMP”,是对称多处理结构,是指在一个计算机上汇集了一组处理器,各CPU之间共享内存子系统和总线结构。
本发明中,所谓的“完全公平调度算法(CFS)”,是Linux内核采用的一种进程调度算法,代替早期Linux内核中的O(1)和O(N)调度器。这种调度算法总是选择考虑了权重因素的虚拟运行时间最小的进程进行调度。
综上,本发明提供的基于CFS调度器的就绪队列平均负载优化方法及数据结构,基于目前Linux内核使用的完全公平调度算法的缺陷及PELT算法,对内核完全公平调度器作出了针对性的优化和改进,使CFS就绪队列的平均负载数据结构更加实时准确,因而使CPU之间的负载均衡分配更加科学合理,完善了系统性能,优化了内核的进程调度效率,更加绿色节能,从而能够提升系统性能和用户的交互体验,进而提升生产效率,且适用于龙芯各款CPU。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (6)
1.基于CFS调度器的就绪队列平均负载优化方法,其特征在于,根据如下公式,更新整个CFS就绪队列的负载:
load_avg_entire=runnable_avg_sum*weight/runnable_avg_period;
其中,load_avg_entire是整个CFS就绪队列的负载,runnable_avg_sum是整个CFS就绪队列在可运行状态下的总衰减累加时间,runnable_avg_period是整个CFS就绪队列在调度器中的总衰减累加时间,weight是整个CFS就绪队列的权重值;
所述CFS调度器的就绪队列数据结构包括通用就绪队列数据结构、CFS就绪队列数据结构、调度实体数据结构以及负载数据结构,其中,
负载数据结构同时存在于调度实体数据结构及CFS就绪队列数据结构中,调度实体数据结构存在于CFS就绪队列数据结构中,CFS就绪队列数据结构存在于通用就绪队列数据结构中,并且,
所述通用就绪队列数据结构还包括实时就绪队列数据结构和时钟,时钟用于在预定时刻引发CFS就绪队列数据结构以及CFS就绪队列数据结构中相应的调度实体数据结构的更新操作。
2.如权利要求1所述的基于CFS调度器的就绪队列平均负载优化方法,其特征在于:所述CFS就绪队列在可运行状态下的总衰减累加时间和在调度器中的总衰减累加时间,通过每个进程更新周期中涉及到的三个时间间隔delta1、delta2及delta3获得,其中,delta1是与上一更新周期所计算的负载补齐1ms所需时间值,delta2是本次更新周期中多个完整的周期单位的时间值,delta3是本次更新周期中落在最后一个不完整周期单位的时间值。
3.如权利要求1所述的基于CFS调度器的就绪队列平均负载优化方法,其特征在于:还包括根据整个CFS就绪队列的负载load_avg_entire,得到整个CFS就绪队列中,每个调度实体的数据结构,以使得每个调度实体的数据结构均得到更新。
4.如权利要求1所述的基于CFS调度器的就绪队列平均负载优化方法,其特征在于:所述整个CFS就绪队列的负载,在如下三种情况下被启动更新程序:向CFS就绪队列中添加一个进程,从CFS就绪队列中删除一个进程,或者达到周期更新的时间。
5.如权利要求1所述的基于CFS调度器的就绪队列平均负载优化方法,其特征在于:
负载数据结构包括runnable_avg_sum、runnable_avg_period以及load_avg_entire/contrib,其中,runnable_avg_sum表示整个CFS就绪队列或相应的调度实体在可运行状态下的总衰减累加时间,runnable_avg_period表示整个CFS就绪队列或相应的调度实体在调度器中的总衰减累加时间,load_avg_entire/contrib表示整个CFS就绪队列或相应的调度实体的负载。
6.如权利要求1所述的基于CFS调度器的就绪队列平均负载优化方法,其特征在于:
所述调度实体数据结构还包括struct_load_weight及vruntime,其中,struct_load_weight表示调度实体的权重值,vruntime表示调度实体的虚拟运行时间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910208005.6A CN111274024B (zh) | 2019-03-19 | 2019-03-19 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910208005.6A CN111274024B (zh) | 2019-03-19 | 2019-03-19 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111274024A CN111274024A (zh) | 2020-06-12 |
CN111274024B true CN111274024B (zh) | 2023-05-30 |
Family
ID=70998629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910208005.6A Active CN111274024B (zh) | 2019-03-19 | 2019-03-19 | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111274024B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113064677B (zh) * | 2021-02-23 | 2023-06-20 | 青岛海尔科技有限公司 | 应用运行方法及装置、存储介质及电子装置 |
CN117032993B (zh) * | 2023-10-08 | 2024-04-05 | 麒麟软件有限公司 | 任务调度方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4736318A (en) * | 1985-03-01 | 1988-04-05 | Wang Laboratories, Inc. | Data processing system having tunable operating system means |
CN1825288A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式sram操作系统进程多队列调度的实现方法 |
CN101266551A (zh) * | 2008-04-11 | 2008-09-17 | 浙江大学 | 一个在schedsim中模拟linux调度器的方法 |
CN104503838A (zh) * | 2014-11-23 | 2015-04-08 | 华中科技大学 | 一种虚拟cpu调度方法 |
CN105204938A (zh) * | 2015-11-02 | 2015-12-30 | 重庆大学 | 一种内存访问的数据密集型进程调度方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5050601B2 (ja) * | 2007-03-23 | 2012-10-17 | 日本電気株式会社 | ジョブへの資源割当方式、ジョブへの資源割当方法およびプログラム |
KR20120067825A (ko) * | 2010-12-16 | 2012-06-26 | 한국전자통신연구원 | 임베디드 리눅스를 위한 적응형 프로세스 스케쥴링 방법 |
US9311149B2 (en) * | 2012-12-21 | 2016-04-12 | International Business Machines Corporation | Processor provisioning by a middleware processing system |
WO2016195274A1 (en) * | 2015-06-01 | 2016-12-08 | Samsung Electronics Co., Ltd. | Method for scheduling entity in multi-core processor system |
-
2019
- 2019-03-19 CN CN201910208005.6A patent/CN111274024B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4736318A (en) * | 1985-03-01 | 1988-04-05 | Wang Laboratories, Inc. | Data processing system having tunable operating system means |
CN1825288A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式sram操作系统进程多队列调度的实现方法 |
CN101266551A (zh) * | 2008-04-11 | 2008-09-17 | 浙江大学 | 一个在schedsim中模拟linux调度器的方法 |
CN104503838A (zh) * | 2014-11-23 | 2015-04-08 | 华中科技大学 | 一种虚拟cpu调度方法 |
CN105204938A (zh) * | 2015-11-02 | 2015-12-30 | 重庆大学 | 一种内存访问的数据密集型进程调度方法 |
Non-Patent Citations (2)
Title |
---|
张文波 ; 姜月秋 ; 赵海 ; 宫义山 ; .一种实时任务可调度性预测研究.计算机工程.2007,(11),全文. * |
张莹 ; 李华 ; .一种虚拟机负载均衡调度算法.河南科技.2015,(12),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111274024A (zh) | 2020-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3640799B1 (en) | Determining an allocation of computing resources for a job | |
Yeung et al. | Horus: Interference-aware and prediction-based scheduling in deep learning systems | |
Chen et al. | Improving MapReduce performance using smart speculative execution strategy | |
Sandholm et al. | MapReduce optimization using regulated dynamic prioritization | |
CN107515663B (zh) | 调整中央处理器内核运行频率的方法和装置 | |
Downey | Predicting queue times on space-sharing parallel computers | |
Minet et al. | Analyzing traces from a google data center | |
Ouyang et al. | Straggler detection in parallel computing systems through dynamic threshold calculation | |
CN111274024B (zh) | 基于cfs调度器的就绪队列平均负载优化方法及数据结构 | |
EP2446357A1 (en) | High-throughput computing in a hybrid computing environment | |
US10216530B2 (en) | Method for mapping between virtual CPU and physical CPU and electronic device | |
Jeon et al. | TPC: Target-driven parallelism combining prediction and correction to reduce tail latency in interactive services | |
Maurya et al. | Deadline-constrained algorithms for scheduling of bag-of-tasks and workflows in cloud computing environments | |
CN111400010A (zh) | 任务调度方法及装置 | |
CN105045667B (zh) | 一种用于虚拟机vCPU调度的资源池管理方法 | |
CN106547607B (zh) | 一种虚拟机动态迁移方法和装置 | |
JP2011180894A (ja) | ジョブスケジューリングプログラム、ジョブスケジューリング装置、及びジョブスケジューリング方法 | |
CN114579284B (zh) | 任务调度方法及装置 | |
Zhou et al. | Improved carry-in workload estimation for global multiprocessor scheduling | |
CN108958919B (zh) | 一种云计算中有期限约束的多dag任务调度费用公平性评估方法 | |
Agung et al. | Preemptive parallel job scheduling for heterogeneous systems supporting urgent computing | |
US20200356410A1 (en) | Cpu scheduling methods based on relative time quantum for dual core environments | |
CN107423114B (zh) | 一种基于服务分类的虚拟机动态迁移方法 | |
CN106874102A (zh) | 基于容器工作性质的资源调度方法和装置 | |
CN116860419A (zh) | 一种服务器无感知数据分析的并行调度方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |