Linux内核进程调度Deadline调度器的解析与实践

Linux进程管理:deadline调度器 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应。在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序。换句话说,当系统收到某个请求,会做出相应的动作以响应该请求,想要保证正确地响应该请求,一方面逻辑结果要正确,更重要的是需要在最后期限(deadline)内作出响应。如果系统未能在最后期限内进行响应,那么该系统就会产生错误或者缺陷。 阅读详情

目录

1 背景

2 Deadline调度器任务优先级的确定

3 Deadline调度器任务队列管理

4 Deadline调度器执行过程

5 Deadline调度器准入条件

6 Deadline调度器控制参数

7 Deadline调度器的使用方法


1 背景

在Linux操作系统中,进程调度负责在并发运行的进程之间,合理分配CPU资源,是Linux内核的核心功能之一。进程调度决定了系统的整体性能,合理的进程调度能够确保系统的响应速度,提供良好的用户体验,还能够实现资源的有效利用,充分发挥CPU的性能。

进程任务在运行过程中根据其特性有不同的要求,有的对吞吐量要求高,有的对延指标要求高,有的长时间占用CPU资源,有的长时间占用网络资源。Linux内核提供了多种调度器,以满足不同场景下的任务需求。主要有Deadline调度器、实时调度器、公平调度器等,本文主要解析Deadline调度器的原理和使用方式。

Deadline调度算法是实时调度算法的重要成员,核心原则是根据任务的截止时间来分配优先级。截止时间越早,任务优先级越高,就越优先被调度执行。该算法的实现机制精巧。当系统中有新任务到达,调度器会依据任务的截止时间设置调度顺序。调度器维护一个按截止时间排序的任务队列,每次调度时,从队列头部选取截止时间最早的任务执行。在执行过程中,若有新任务加入且其截止时间比当前执行任务更早,调度器会立即暂停当前任务,执行新任务。

Deadline调度算法适合实时性要求高、任务数量多的场景。在工业自动化中、自动驾驶、多媒体实时播放、音视频流处理、交通、医疗等领域都有着极高的应用场景。Deadline调度算法也面临挑战,系统过载时,无法保证所有任务按时完成。

管理人员在使用Deadline算法时需要合理的规划调度器的使用,结合准入控制机制,合理拒绝无法按时执行的任务、设置任务截止时间不合理的任务。为了避免进程使用Deadline调度时过载,Deadline调度器有一个准入机制,在任务配置好了period、runtime和deadline参数之后并准备加入到系统的时候,Deadline调度器会对该任务进行评估,只有评估通过的进程才允许添加到调度队列中,否则会被拒绝。

Deadline调度器任务优先级的确定

Deadline调度器判断任务重要性的标准就是任务的截止时间。任务创建时,调度器会获取其截止时间信息,并将其作为优先级分配的核心依据。类似于快递包裹上标着“限时30分钟送达”时,自然会被快递处理人员赋予高优先级。

2 Deadline调度器任务优先级的确定

Deadline调度器判断任务重要性的标准就是任务的截止时间。任务创建时,调度器会获取其截止时间信息,并将其作为优先级分配的核心依据。类似于快递包裹上标着“限时30分钟送达”时,自然会被快递处理人员赋予高优先级。

3 Deadline调度器任务队列管理

Deadline调度器存在一个或者多个按照任务截止时间进行排序任务队列,任务创建时,会根据其截止时间插入到合适位置;当任务执行完毕或被移除时,队列会重新调整,确保截止时间顺序不变。

4 Deadline调度器执行过程

Deadline调度器从任务队列头部选取任务,将CPU资源分配给任务并执行。在任务执行期间,调度器时刻监控是否有优先级更高的任务,如果有调度器会立即触发抢占机制。Deadline调度器通常采用抢占式调度策略,以应对突发的紧急任务。

5 Deadline调度器准入条件

为保证任务能够在规定的时间内完成。Deadline调度器使用带宽来判断。带宽的判断方法如下:

每个任务通过 任务deadline(scheduling deadline)与任务剩余的运行时间(remaining runtime)来描述任务使用时间的情况。当任务被唤醒时,系统会对该任务做以下校验:

  1. 校验任务是否已经错过了当前deadline(scheduling deadline < now);
  2. 校验带宽是否溢出,即在当前period中,CPU是否已经无法满足该任务的带宽要求(remaining runtime / (scheduling deadline - now) > runtime / period)。

如果二者都不成立,则说明该任务状态良好,否则则说明该任务已经无法在当前period内按时完成了,需要将其往后顺移。调度器会对其状态做如下修改(scheduling deadline = now + deadline remaining runtime = runtime)。

当 remaining runtime <= 0 时,任务已经没法在deadline完成,此时该任务的状态会被设置为throttled, 调度器将暂停对其进行调度。调度器会重新设置调度时间。

6 Deadline调度器控制参数

Deadline调度器专注于队任务截止时间有要求的实时任务,满足任务的时间期限要求,确保任务在截止时间之前完成执行。Deadline调度器采用最早截止时间优先(EDF,Earliest Deadline First)算法和恒定带宽服务器(CBS,Constant Bandwidth Server)算法来确定任务的执行顺序和调度行为。可以用在工业控制系统、航空航天、金融交易系统等对时间精度要求极高的领域,够为这些关键系统提供稳定可靠的时间保障。

Deadline调度器主要有三个控制参数:runtime,period,deadline。Runtime表示任务在一个周期内的运行时间;period标识运行周期的长短;deadline表示任务在运行周期内最晚完成的时间。可以通过chrt指令设置这三个参数。如

chrt -d --sched-runtime 5000000 --sched-deadline 10000000 \ --sched-period 16666666 0 test_deadline

-d参数表示设置的调度策略是Deadline调度器。0为优先级占位符,chrt命令所需,deadline调度器并不使用,其它的对应runtime、deadline和period,单位都是纳秒。通过这样的配置,在每16毫秒的周期内,分配给该任务5毫秒的CPU运行时间,而且这个5毫秒的CPU时间会在10毫秒内的截止时间之前完成。

7 Deadline调度器的使用方法

为进程设置Deadline调度器的时候,需要合理规划当前进行的调度能力。如果使用实时调度进程数量少于CPU核心数量,可以简单的设置进程的调度器就可以了;如果使用实时调度进程数量多于CPU的核心数量,就需要管理人员合理的规划实时进程运行的CPU位置,必要时可以联合cpuset机制完成调度策略的设置。

启动进程的时候设置进程使用Deadline调度器

检测该进程是否使用Deadline调度器

通过sched_setattr函数设置进程为使用Deadline调度器

struct sched_attr attr;

unsigned int flags = 0;

attr.sched_policy = SCHED_DEADLINE;

attr.sched_runtime = 10 * 1000 * 1000;

attr.sched_period = attr.sched_deadline = 30 * 1000 * 1000;

sched_setattr(0, &attr, flags);

linux内核之块设备四---deadline调度算法 总体来讲,deadline算法对request进行了优先权控制调度,主要表现在如下几个方面: 1)读写请求分离,读请求具有高优先调度权,除非写请求即将被饿死的时候,才会去调度处理写请求。这种处理可以保证读请求的延迟时间最小化。 2)对请求的顺序批量处理。对那些地址临近的顺序化请求,deadline给予了高优先级处理权。例如一个写请求得到调度后,其临近的request会在紧接着的调度过程 阅读详情

相关推荐

linux线程调度策略

对于一个autogroup内的进程,其CPU时钟周期为autogroup(相对于其他autogroups)的nice值和进程的nice值(相对于其他进程)的产物(相反的,对于不同会话(如,不同的终端窗口,这些任务都绑定到不同的autogroups)中绑定了唯一的CPU的2个进程,修改一个会话中的进程的nice值不会影响其他会话中的进程的调度。nice值的取值范围根据UNIX系统的不同而不同。在当前的实现下,两个进程的nice差值中,每单位的nice差值对CFS调度的影响因子为1.25 (参见。

m0_74282605的博客 912

deadline调度器

内核调度器-deadline

chensong_2000的博客 1999

Linux scheduler 调度器 (一)

stop 调度器是优先级最高的调度器,stop调度器只供内核使用,该调度器只调度一个内核任务,即migration线程,其他任务不能把自己的调度器设置为stop,该调度器通过migration线程实现任务迁移、负载均衡、cpu热插拔等紧急任务。不同的特性的任务需要通过不同的调度策略来调度,各个任务需要根据自己的任务特性来设置对应的调度策略,从而也就选择了对应的调度器来调度该任务。属于非实时调度策略,优先级最低的任务,比 nice 19 的普通任务的优先级还低,相当于 nice 20的普通任务。

linux_research的博客 2161

进程线程(四) Deadline调度、实时性和多核负载均衡

Linux Deadline调度器(全新内容) Linux为什么不是硬实时的 preempt-rt对Linux实时性的改造 多核下负载均衡 中断负载均衡、RPS软中断负载均衡

只有自己觉到悟到的,才是自己的。 2912

53、深入了解 CPU 调度器:可视化与内核调度类解析

本文深入解析了Linux系统中的CPU调度器,介绍了使用perf工具进行进程/线程运行情况的可视化方法,包括命令行和图形化两种实践方式。同时,文章详细阐述了Linux内核中模块化调度类的设计原理,包括Stop-task、Deadline、RT、CFS和Idle五种调度类的特点及其适用场景。通过合理选择调度策略和调整参数,可有效优化系统性能和应用实时性。

m2n3b4v5c6的博客 71

Vivado安装教程:多版本共存的配置技巧

详解Vivado安装教程中的多版本共存配置技巧,帮助用户在同一系统中管理不同版本的Vivado开发环境,提升开发效率与兼容性,适用于需要切换版本的FPGA开发者。

weixin_35257663的博客 1775

Linux 内核中的进程调度:从 CFS 到实时调度

Linux 内核中的进程调度是一个核心组件,它负责分配 CPU 时间给不同的进程和线程。进程调度的设计思路与企业管理中的资源调度有着密切的联系,它通过资源分配、优先级管理、负载均衡和公平性等机制,为系统的高效运行提供了保障。工作也要流程化,进程调度就像是系统中的资源调度工具,它确保了 CPU 时间的合理分配和使用。在实际应用中,我们需要选择合适的调度策略,合理设置进程优先级,优化负载均衡,监控调度性能,以实现系统的最佳性能。

jiang_style的博客 3302

3D打印机之Marlin固件配置

一、Marlin固件必要配置 打开Configuration.h文件,使用VS code的搜索功能来修改下面的参数。 配置波特率 #define BAUDRATE 250000 配置串口波特率,一般不修改。上位机的波特率要和这个一致才能正常通讯。 2. 配置主板类型 第 134 行 #define MOTHERBOARD BOARD_MKS_GEN_L 找到 boards.h 这个文件打开,就可以看到支持的主板类型。3d打印机主控板类型非常多,每个板子硬件连接都可能不同,所以这个参数必须要跟你自己的板子

acktomas的博客 2万+

Linux 内核中的 CPU 调度优化:从 CFS 到实时调度

Linux 内核中的 CPU 调度优化是提高系统性能的关键之一,它涉及到调度策略、优先级管理、负载均衡等多个方面。CPU 调度优化的设计思路与企业管理中的资源调度有着密切的联系,它通过资源分配、优先级管理、负载均衡和响应速度等机制,为系统的高效运行提供了保障。工作也要流程化,CPU 调度优化就像是系统中的资源调度工具,它确保了 CPU 时间的合理分配和使用。在实际应用中,我们需要选择合适的调度策略,合理设置进程优先级,优化负载均衡,监控 CPU 使用情况,以实现系统的最佳性能。

jiang_style的博客 4157

用Arduino和FS-i6X遥控器,从零开始打造你的第一只仿生扑翼蝴蝶(附完整代码解析)

本文详细介绍了如何利用Arduino和FS-i6X遥控器从零开始制作仿生扑翼蝴蝶,包括硬件准备、电路连接、代码解析和调试技巧。通过完整的代码示例和参数说明,帮助读者快速掌握仿生机器人的制作要点,实现蝴蝶的自然飞行效果。

weixin_28727975的博客 309

QGIS效率提升神器:qgis_mcp插件+VSCode联合工作流配置全解析

本文详细解析了如何通过配置qgis_mcp插件与VSCode的联合工作流,实现语音控制和代码自动化来大幅提升QGIS操作效率。该方案将自然语言交互与现代编辑器生态结合,为地理信息专业人士构建了智能、高效的全新工作模式,彻底改变传统GIS操作方式。

weixin_29228203的博客 191

Linux内核中的进程调度器详解

进程调度器是Linux内核中负责分配CPU时间的核心组件,它决定了系统中各个进程的执行顺序和优先级。一个好的调度器能够充分利用CPU资源,提高系统的响应速度和吞吐量。本文将深入探讨Linux内核中的进程调度器,包括其原理、实现和调优。

jiang_style的博客 3194

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

Linux 内核 Block IO 调度器

Linux块设备IO调度器是内核块层的核心组件,负责优化块设备的读写性能。它通过请求合并、重排和延时调度来匹配不同存储硬件的特性:HDD注重寻道优化,SSD侧重并行IO。内核提供多种调度器:noop适用于SSD/NVMe,deadline/mq-deadline适合HDD,bfq保证多进程公平性,kyber专为SSD设计。现代内核采用blk-mq多队列架构提升并发性能。配置时需根据硬件特性选择:HDD用mq-deadline,SSD用noop/kyber,多进程场景用bfq。

tangzhangyin的专栏 1193

利用dddd_trainer训练通用验证码识别模型

博文介绍了使用dddd_trainer工具训练自定义验证码识别模型的过程,详细展示了从环境搭建、数据集准备到模型训练的全流程。

九月镇灵将的博客 1033

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 762
上一篇: KeyarchOS(KOS, 浪潮信息云峦操作系统)| 服务器重启黑屏问题专题:nouveau 驱动冲突解决方案
下一篇: KeyarchOS(浪潮信息云峦操作系统,KOS) | SPECCPU在RSICV环境下的适配和测试问题整理
KeyarchOS
博客等级 码龄3年 1312粉丝 339原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值