CN113282408B - 一种提高数据密集型应用实时性的cpu调度方法 - Google Patents
一种提高数据密集型应用实时性的cpu调度方法 Download PDFInfo
- Publication number
- CN113282408B CN113282408B CN202110499170.9A CN202110499170A CN113282408B CN 113282408 B CN113282408 B CN 113282408B CN 202110499170 A CN202110499170 A CN 202110499170A CN 113282408 B CN113282408 B CN 113282408B
- Authority
- CN
- China
- Prior art keywords
- data
- cpu
- priority
- utilization rate
- time
- 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
- 238000000034 method Methods 0.000 title claims abstract description 270
- 238000004364 calculation method Methods 0.000 claims description 16
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种提高数据密集型应用实时性的CPU调度方法。该方法包括:采集模块周期性的收集进程的资源使用快照;计算模块和分类模块通过分析应用的资源使用快照判断应用是否属于数据密集型应用,并设置进程的标志位;CPU调度算法通过标志位判断当前进程是否属于数据密集型应用,并对数据密集型应用进程的优先级进行调整;CPU调度算法根据优先级调整进程在就绪队列中的位置;统计当前应用进程的内存资源使用情况,以实现进程优先级的动态更新。本发明能有效提高计算机系统对数据密集型应用提供的实时性。
Description
技术领域
本发明涉及计算机操作系统的CPU调度技术领域,尤其涉及一种可以提高数据密集型应用实时性的CPU调度方法。
背景技术
大数据时代下,数据密集型应用的实时性对于挖掘数据价值显得尤其重要;由于实时数据在数据总量中占据越来越高的比例,如果不能对这些数据进行及时的处理,这部分数据的价值就会变得非常低。从操作系统层面出发,CPU调度方法会决定应用的实时性表现。
目前主流的服务器系统上使用的调度方法是完全公平调度器(CFS),作为通用场景下的一种典型CPU调度方法,CFS的主要目标是在运行的任务之间公平地共享CPU资源。对于不同优先级的进程,CFS会根据各个进程的权重来分配运行时间,并且记录下每个进程的虚拟运行时间,在调度时总是选择虚拟运行时间最少的进程来运行。作为一种通用场景下的调度算法,CFS将关注点放在了如何在不同的进程之间公平地分配CPU资源,无法有效感知数据密集型应用,导致无法满足数据密集型应用高实时性的需求。
发明内容
由于当前的操作系统CPU调度算法没有针对数据密集型应用做出特殊处理,导致系统不能为数据密集型应用提供良好的实时性,进而充分利用数据的价值,因此本发明提出一种用于提高数据密集型应用实时性的CPU调度方法。
本发明实现的用于提高数据密集型应用实时性的CPU调度方法主要分为四个模块:
(1)采集模块
该模块的功能是通过周期性地访问当前系统下进程的进程描述符,收集进程的资源使用快照。
(2)计算模块
该模块的功能是根据收集到的一系列资源使用快照,计算得到进程的CPU利用率和IO资源利用率;并根据当前系统负载情况,计算得到进程CPU利用率阈值和I/O资源利用率阈值。
(3)分类模块
该模块的功能是根据计算得到的进程CPU利用率和进程IO资源利用率,分别与进程CPU利用率阈值和I/O资源利用率阈值进行比较,判断进程是否属于数据密集型应用,并将分类结果保存到进程的进程描述符中。
(4)调度模块
该模块的功能是针对数据密集型应用做出特殊处理,通过提高数据密集型应用的优先级,并在每次进程时间片消耗完后,结合进程IO资源和内存资源使用对进程优先级进行动态更新。从而使数据密集型应用能够相对更早的获得CPU资源运行结束,提高数据密集型应用的实时性。
该方法包括如下步骤:
步骤1:采集模块通过周期性地访问进程的进程描述符,收集进程的资源使用快照,其中包括进程的CPU使用时间、读取的字节数和写入的字节数等。
步骤2:计算模块通过分析进程资源使用快照,根据进程的CPU使用时间和读取、写入的字节数分别计算得到进程CPU利用率、IO资源利用率;同时根据当时系统负载情况,计算得到进程CPU利用率阈值和进程IO资源利用率阈值。
步骤3:分类模块通过判断当前进程的CPU利用率是否大于进程CPU利用率阈值和当前进程的IO资源利用率是否大于进程IO资源利用率阈值,得出该进程是否属于数据密集型应用,并将进程类型信息保存到进程描述符的新增标志位字段data_intensive中。
步骤4:调度模块每次从进程就绪队列中选出优先级最高的进程执行,并跟踪该进程,统计进程对IO资源和内存资源的使用情况。
步骤5:进程分配的时间片到期后,调度模块通过标志位判断当前进程是否属于数据密集型应用。对于非数据密集型应用,保持进程优先级不变;对于数据密集型应用,CPU调度算法根据进程的IO资源使用和内存资源使用来更新进程的优先级,并根据新的优先级将进程重新放入到就绪队列中。
步骤6:重复执行步骤4、5,直到所有进程执行完毕。
本发明的有益效果:
本发明针对现有CPU调度方法存在无法对数据密集型应用提供良好实时性的问题,提出了一种可以提高数据密集型应用实时性的CPU调度方法。该方法通过周期性的收集进程的资源使用快照,并通过计算模块和分类模块自动对应用进行分类,通过提高数据密集型应用优先级并基于内存、IO资源使用动态更新优先级的策略,从而影响调度器的调度行为,最终让调度器优先调度数据密集型应用,提高该类应用的实时性。
附图说明
图1为本发明提供的一种提高数据密集型应用实时性的CPU调度方法的模型组件结构图;
图2为本发明提供的一种提高数据密集型应用实时性的CPU调度方法的计算模块工作示意图;
图3为本发明提供的一种提高数据密集型应用实时性的CPU调度方法的组织就绪进程的数据结构;
图4为本发明提供的一种提高数据密集型应用实时性的CPU调度方法的调度策略;
图5为本发明提供的一种提高数据密集型应用实时性的CPU调度方法的流程示意图。
具体实施方式
以下结合附图对本发明作进一步说明。
本发明提供了一种提高数据密集型应用实时性的CPU调度方法,如附图1所示,该方法主要包括四个组件:
(1)采集模块
采集模块的主要工作是周期性地访问进程的进程描述符,收集进程的资源使用快照。收集到的资源使用快照将会交由计算模块进行进一步的计算处理。进程的进程描述符是Linux内核用于管理进程的一种数据结构,包含了一个进程所需的所有信息,在内核中通过task_struct结构体来描述。采集模块收集的进程资源使用快照内容包括进程的CPU使用时间和IO资源使用两部分。其中进程CPU使用时间对应进程描述符的utime和stime字段,utime字段记录了进程在用户态下运行的时间,stime记录了进程在内核态下运行的时间,两个字段的单位都为jiffies。进程IO资源使用对应进程描述符的ioac字段,该字段的rchar值和wchar值分别记录了读取的字节数和写入的字节数。采集信息的预设时间间隔被设置为1秒,在内核中的表示为time_interval=CONFIG_HZ jiffies
(2)计算模块
计算模块的主要工作是通过分析进程资源使用快照,计算得到进程的CPU利用率和IO资源利用率;同时根据当前系统负载情况,计算得到进程CPU利用率阈值和进程IO资源利用率阈值。
第一部分的计算内容包括进程的CPU利用率和进程的IO资源利用率。关于进程的CPU利用率计算,通过读取资源使用快照,解析其中的utime和stime,将(utime+stime)减去上一个资源快照中这两项的和(lastutime+laststime),作为该进程在time_interval秒内占用CPU的时间,同时总的CPU时间为time_interval*CONFIG_HZ,所以该进程的CPU利用率计算公式为:processCPUUsed=((utime+stime)-(lastutime+laststime))/(time_interval*config_HZ)
关于进程的IO资源利用率计算,通过读取资源使用快照,解析其中的rchar和wchar,将(rchar+wchar)减去上一个资源快照中这两项的和(lastrchar+lastwchar),作为该进程在time_interval秒内IO数据量,所以该进程的IO资源利用率计算公式为:
processIOUsed=((rchar+wchar)-(lastrchar+lastwchar))/time_interval
第二部分的计算内容是根据当前系统负载情况,计算得到进程的CPU利用率阈值和进程的IO资源利用率阈值。这两个阈值的计算都需要获得当前系统下运行进程的数量(task_count)。进程的CPU利用率阈值计算公式为:
processCPUUsedThreshold=1/task_count
关于进程的IO资源利用率阈值计算,首先需要对当前设备进行读写速率的压力测试。采用Linux dd命令,每次写入(读取)4KB,一共写入300000次,得到系统读写带宽的量化指标(disk_bandwidth);进程的IO资源利用率阈值计算公式为:
processIOUsedThreshold=disk_bandwidth/task_count
附图2为信息计算模块的工作示意图。
(3)分类模块
分类模块的主要工作是通过比较进程的资源使用率和当前系统负载下的进程资源使用率阈值,对进程进行自动分类。分类的结果可以由进程的CPU利用率和进程的IO资源利用率综合分析得到,包括两个方面:一是判断进程的CPU利用率是否高于进程CPU利用率阈值;二是判断进程的IO资源利用率是否高于进程IO资源利用率阈值;如果同时满足,则说明该进程属于数据密集型应用。分类模块在判断完成后,会将判断结果,即进程类型信息保存到进程描述符的新增标志位字段data_intensive中。0表示该进程不属于数据密集型应用,1表示该进程属于数据密集型应用。进程是否属于数据密集型应用的判断公式为:
data_intensive=(processCPUUsed>processCPUUsedThreshold)&&(processIOUsed>processIOUsedThreshold)
(4)调度模块
调度模块的主要工作是能够根据应用程序的类型信息,针对数据密集型应用做出优先级的动态调整,以便数据密集型应用能够更早的获得CPU资源,达到提高实时性的目的。在本模块中将会介绍提高数据密集型应用实时性的CPU调度方法的具体细节。
如附图3所示,本发明中提出的CPU调度方法通过使用优先队列来组织所有处于就绪状态的进程。该优先队列为每种优先级维护了一个进程链表,所有就绪进程会被放入对应优先级的链表中,同时维护一个bitmap,用来标记每个优先级对应的进程链表是否存在进程。当调度器需要获得下一个任务时,首先会在常数时间内查找到bitmap中第一个被设置为1的位,然后在该优先级对应的进程链表中选择第一个进程来执行。
下面给出的是进程入队,进程出队和选择下一个进程的算法描述。
如附图4所示,本发明中提出的CPU调度方法是基于Round-robin算法优化而来的。该调度方法的调度策略包括以下步骤:
步骤1:CPU调度程序从就绪队列中选择一个优先级最高的进程。结合附图3给出的就绪队列数据结构,该CPU调度程序总是会从优先级最高的进程链表中挑选第一个节点。
步骤2:执行进程。投入运行的进程将获得CPU资源,按照指令顺序执行。本方法中的时间片设置为5ms。
步骤3:每当一个时间片到期时,将会判断当前运行的进程是否执行结束。如果该进程执行结束,将会把该进程从就绪队列中移除;如果进程还没有执行结束,将会进行下一步的操作。
步骤4:判断当前运行的进程是否属于数据密集型应用。通过对进程的进程描述符中的data_intensive字段进行判断,得到该进程的应用类型信息。如果该进程不属于数据密集型应用,那么保持该进程的优先级不变,并将进程重新加入就绪队列;如果该进程属于数据密集型应用,那么将会进行下一步的操作。
步骤5:对于该数据密集型应用对应的进程,当这个进程第一次获得CPU时间片投入运行结束后,会将该进程的优先级提高一个固定的增量。在本方法中,这个增量被设置为2。第一层的优先级调整结束后,数据密集型应用对应的进程相比较于非数据密集型应用对应的进程会有更高的优先级,高优先级可以帮助该类进程更早的获得CPU以提高实时性。
第二层的优先级调整基于高内存占用进程优先的策略,会根据每个时间片内该进程使用的内存大小来进一步调整进程的优先级。RSS的含义是常驻内存集,它表示该进程分配的内存大小,可以通过mm_struct结构体的rss字段获得,通过比较当前时间片的RSS值和上个时间片的RSS值,得出该进程使用内存的大小是增加还是减少。如果该进程使用的内存大小增加,那么将进程的优先级提高一个单位;如果进程使用的内存大小减少,那么将进程的优先级降低一个单位。在第二层优先级策略调整下,高内存占用的进程会更早的执行结束,有助于缓解系统内存压力。
步骤6:完成优先级更新后,进程将会重新入队。每当进程执行一个时间片后,进程的优先级会根据这个时间片的内存使用情况进行更新。入队时会按照新的优先级加入到对应的链表尾部,等待下一次被调度。
步骤7:重复步骤1-6。通过时间片轮转的方式将每个可执行进程轮流分配给CPU。
本发明的具体步骤是,见图5:
步骤1:采集模块通过周期性地访问进程的进程描述符,收集进程的资源使用快照,其中包括进程的CPU使用时间、读取的字节数和写入的字节数等
步骤2:计算模块通过分析进程资源使用快照,根据进程的CPU使用时间和读取、写入的字节数分别计算得到进程CPU利用率、IO资源利用率;同时根据当时系统负载情况,计算得到进程CPU利用率阈值和进程IO资源利用率阈值
步骤3:分类模块通过判断当前进程的CPU利用率是否大于进程CPU利用率阈值和当前进程的IO资源利用率是否大于进程IO资源利用率阈值,得出该进程是否属于数据密集型应用,并将进程类型信息保存到进程描述符的新增标志位字段data_intensive中
步骤4:调度模块每次从进程就绪队列中选出优先级最高的进程执行,并跟踪该进程,统计进程对IO资源和内存资源的使用情况
步骤5:进程分配的时间片到期后,调度模块通过标志位判断当前进程是否属于数据密集型应用。对于非数据密集型应用,保持进程优先级不变;对于数据密集型应用,CPU调度算法根据进程的IO资源使用和内存资源使用来更新进程的优先级,并根据新的优先级将进程重新放入到就绪队列中。
步骤6:重复执行步骤4、5,直到所有进程执行完毕。
Claims (4)
1.一种提高数据密集型应用实时性的CPU调度方法,其特征在于该方法包括如下步骤:
步骤1:采集模块通过周期性地访问进程的进程描述符,收集进程的资源使用快照,其中包括进程的CPU使用时间、读取的字节数和写入的字节数;
步骤2:计算模块通过分析进程资源使用快照,根据进程的CPU使用时间和读取、写入的字节数分别计算得到进程CPU利用率、IO资源利用率;同时根据当时系统负载情况,计算得到进程CPU利用率阈值和进程IO资源利用率阈值;
步骤3:分类模块通过判断当前进程的CPU利用率是否大于进程CPU利用率阈值和当前进程的IO资源利用率是否大于进程IO资源利用率阈值,得出该进程是否属于数据密集型应用,并将进程类型信息保存到进程描述符的新增标志位字段data_intensive中;
步骤4:调度模块每次从进程就绪队列中选出优先级最高的进程执行,并跟踪该进程,统计进程对IO资源和内存资源的使用情况;
步骤5:进程分配的时间片到期后,调度模块通过标志位判断当前进程是否属于数据密集型应用;对于非数据密集型应用,保持进程优先级不变;对于数据密集型应用,CPU调度算法根据进程的IO资源使用和内存资源使用来更新进程的优先级,并根据新的优先级将进程重新放入到就绪队列中;
步骤6:重复执行步骤4、5,直到所有进程执行完毕。
2.根据权利要求1所述的一种提高数据密集型应用实时性的CPU调度方法,其特征在于:所述的数据密集型应用同时满足当前进程的CPU利用率大于进程CPU利用率阈值和当前进程的IO资源利用率大于进程IO资源利用率阈值。
3.根据权利要求1所述的一种提高数据密集型应用实时性的CPU调度方法,其特征在于:步骤5中所述的CPU调度算法具体是:
步骤5-1:从就绪队列中选择一个优先级最高的进程;
步骤5-2:执行进程,投入运行的进程将获得CPU资源,按照指令顺序执行;
步骤5-3:每当一个时间片到期时,判断当前运行的进程是否执行结束;如果该进程执行结束,把该进程从就绪队列中移除;如果进程还没有执行结束,将会进行下一步的操作;
步骤5-4:判断当前运行的进程是否属于数据密集型应用;通过对进程的进程描述符中的data_intensive字段进行判断,得到该进程的应用类型信息;如果该进程不属于数据密集型应用,那么保持该进程的优先级不变,并将进程重新加入就绪队列;如果该进程属于数据密集型应用,那么执行步骤5-5;
步骤5-5:对于该数据密集型应用对应的进程,当这个进程第一次获得CPU时间片投入运行结束后,将该进程的优先级提高一个固定的增量;第一层的优先级调整结束后,进入第二层的优先级调整;
步骤5-6:完成优先级更新后,进程将会重新入队;每当进程执行一个时间片后,进程的优先级根据这个时间片的内存使用情况进行更新;入队时会按照新的优先级加入到对应的链表尾部,等待下一次被调度;
步骤5-7:重复步骤5-1至5-6;通过时间片轮转的方式将每个可执行进程轮流分配给CPU。
4.根据权利要求3所述的一种提高数据密集型应用实时性的CPU调度方法,其特征在于:所述的第二层的优先级调整是根据每个时间片内进程使用的内存大小来进一步调整进程的优先级,具体是:通过比较当前时间片的RSS值和上个时间片的RSS值,得出进程使用内存的大小是增加还是减少;如果该进程使用的内存大小增加,那么将进程的优先级提高一个单位;如果进程使用的内存大小减少,那么将进程的优先级降低一个单位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110499170.9A CN113282408B (zh) | 2021-05-08 | 2021-05-08 | 一种提高数据密集型应用实时性的cpu调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110499170.9A CN113282408B (zh) | 2021-05-08 | 2021-05-08 | 一种提高数据密集型应用实时性的cpu调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113282408A CN113282408A (zh) | 2021-08-20 |
CN113282408B true CN113282408B (zh) | 2024-04-05 |
Family
ID=77278202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110499170.9A Active CN113282408B (zh) | 2021-05-08 | 2021-05-08 | 一种提高数据密集型应用实时性的cpu调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113282408B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204938A (zh) * | 2015-11-02 | 2015-12-30 | 重庆大学 | 一种内存访问的数据密集型进程调度方法 |
CN106293941A (zh) * | 2016-08-09 | 2017-01-04 | 上海新炬网络信息技术有限公司 | 一种数据库系统资源的分配方法 |
CN110362411A (zh) * | 2019-07-25 | 2019-10-22 | 哈尔滨工业大学 | 一种基于Xen系统的CPU资源调度方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9483187B2 (en) * | 2014-09-30 | 2016-11-01 | Nimble Storage, Inc. | Quality of service implementation in a networked storage system with hierarchical schedulers |
US9747659B2 (en) * | 2015-06-07 | 2017-08-29 | Apple Inc. | Starvation free scheduling of prioritized workloads on the GPU |
-
2021
- 2021-05-08 CN CN202110499170.9A patent/CN113282408B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204938A (zh) * | 2015-11-02 | 2015-12-30 | 重庆大学 | 一种内存访问的数据密集型进程调度方法 |
CN106293941A (zh) * | 2016-08-09 | 2017-01-04 | 上海新炬网络信息技术有限公司 | 一种数据库系统资源的分配方法 |
CN110362411A (zh) * | 2019-07-25 | 2019-10-22 | 哈尔滨工业大学 | 一种基于Xen系统的CPU资源调度方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113282408A (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9317393B2 (en) | Memory leak detection using transient workload detection and clustering | |
US8869160B2 (en) | Goal oriented performance management of workload utilizing accelerators | |
US9182923B2 (en) | Controlling throughput of processing units associated with different load types in storage system | |
CN102541460B (zh) | 一种多磁盘场景下的磁盘管理方法和设备 | |
US8683472B2 (en) | Adjusting thread priority to optimize computer system performance and the utilization of computer system resources | |
KR101475746B1 (ko) | 멀티-스레드 애플리케이션의 성능을 분석하는 방법 및 시스템 | |
KR101356033B1 (ko) | 하이브리드 주메모리 시스템 및 이를 위한 태스크 스케줄링 방법 | |
CN109005130B (zh) | 网络资源配置调度方法和装置 | |
EP2396730A1 (en) | Devices and methods for optimizing data-parallel processing in multi-core computing systems | |
CN107273200B (zh) | 一种针对异构存储的任务调度方法 | |
US20220195434A1 (en) | Oversubscription scheduling | |
Yang et al. | Performance-aware speculative resource oversubscription for large-scale clusters | |
US9996470B2 (en) | Workload management in a global recycle queue infrastructure | |
CN116225686A (zh) | 面向混合内存架构的cpu调度方法和系统 | |
Liang et al. | CruiseDB: An LSM-tree key-value store with both better tail throughput and tail latency | |
Tripathy et al. | Fuzzy fairness controller for NVMe SSDs | |
CN116244085A (zh) | Kubernetes集群容器组调度方法、装置及介质 | |
Yi et al. | {MT^ 2}: Memory Bandwidth Regulation on Hybrid {NVM/DRAM} Platforms | |
CN113282408B (zh) | 一种提高数据密集型应用实时性的cpu调度方法 | |
CN113687943A (zh) | 一种动态调整磁盘调度策略的方法、装置及设备 | |
CN116360921A (zh) | 一种面向电力物联网的云平台资源优化调度方法及系统 | |
CN113268342B (zh) | 一种面向边缘i/o密集型应用的混合cpu调度方法 | |
CN114067917A (zh) | 基于调优参数的gatk超级计算机系统 | |
CN111208943B (zh) | 存储系统的io压力调度系统 | |
CN113626162A (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 |