CN118093140A - 一种内核级时间触发调度方法及装置 - Google Patents
一种内核级时间触发调度方法及装置 Download PDFInfo
- Publication number
- CN118093140A CN118093140A CN202410381757.3A CN202410381757A CN118093140A CN 118093140 A CN118093140 A CN 118093140A CN 202410381757 A CN202410381757 A CN 202410381757A CN 118093140 A CN118093140 A CN 118093140A
- Authority
- CN
- China
- Prior art keywords
- core
- time
- time slot
- scheduler
- task
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000012546 transfer Methods 0.000 claims abstract description 54
- 230000001960 triggered effect Effects 0.000 claims description 42
- 230000006870 function Effects 0.000 claims description 23
- 238000005192 partition Methods 0.000 claims description 7
- 238000001514 detection method Methods 0.000 abstract description 9
- 230000008569 process Effects 0.000 description 22
- 101150087110 HCRT gene Proteins 0.000 description 8
- 102100037757 Orexin Human genes 0.000 description 8
- 230000004044 response Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000000737 periodic effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 239000000306 component Substances 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种内核级时间触发调度方法及装置,该方法为:调用时隙转移管理器向多个第一核心分配需运行的时隙任务,时隙转移管理器运行在第二核心上,第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,时间触发调度器的优先级高于截止期调度器,第二核心为未运行时间触发调度器的Linux内核;根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心;利用时间触发调度器,重新为目标核心分配需运行的时隙任务。在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种内核级时间触发调度方法及装置。
背景技术
随着计算机的发展,Linux操作系统被广泛使用,为提供更快速且可预测的响应时间,及为提供固定和动态优先级的实时调度机制,Linux操作系统通过时间触发机制不断改进。
但是实时应用领域对任务的响应时间有着极高的要求,现代应用程序具有更高的资源需求和较长的执行时间,这就可能使得实时调度变得更加复杂;而Linux内核在默认情况下并不保证实时性,无法提供现代应用程序所需要的检测级别。
发明内容
有鉴于此,本发明实施例提供一种内核级时间触发调度方法及装置,以提供现代应用程序所需要的检测级别。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开一种内核级时间触发调度方法,所述方法包括:
调用时隙转移管理器向多个第一核心分配需运行的时隙任务,所述时隙转移管理器运行在第二核心上,所述第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,所述时间触发调度器的优先级高于所述截止期调度器,所述第二核心为未运行所述时间触发调度器的Linux内核;
根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心;
利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务。
优选的,根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心,包括:
调用所述时间触发调度器中断所述第一核心当前运行的程序;
执行所述第一核心中预设定时器的回调函数,以比对当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID;
针对每一第一核心,确定所述第一核心是否携带用于指示重新调度的特定标记,其中,所述特定标记由所述预设定时器的回调函数在当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID不同时,添加至所述第一核心上;
若所述第一核心携带所述特定标记,确定所述第一核心为需重新调度的目标核心。
优选的,利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务,包括:
通过核心调度器从所述目标核心运行的所述时间触发调度器中获取时间触发调度类的时隙任务;
若能获取得到所述时间触发调度类的时隙任务,在所述目标核心上运行所述时间触发调度类的时隙任务;
若未能获取得到所述时间触发调度类的时隙任务,从所述目标核心运行的优先级低于所述时间触发调度器的其它调度器中获取其它类的时隙任务;
在所述目标核心上运行所述其它类的时隙任务。
优选的,调用时隙转移管理器向多个第一核心分配需运行的时隙任务,包括:
通过指定内存文件系统,将用户输入的任务调度需求传入时隙转移管理器,所述任务调度需求至少包含时隙任务的类别、优先级、属性和数量;
调用所述时隙转移管理器在第一核心启动时间触发调度器,并调用所述时隙转移管理器基于所述任务调度需求执行分区时隙移动算法,以向多个所述第一核心分配需运行的时隙任务。
优选的,调用所述时隙转移管理器在第一核心启动时间触发调度器之前,还包括:
调用所述时隙转移管理器在第二核心上设置定时器以在新时隙开始之前产生中断。
本发明实施例第二方面公开一种内核级时间触发调度装置,所述装置包括:
分配单元,用于调用时隙转移管理器向多个第一核心分配需运行的时隙任务,所述时隙转移管理器运行在第二核心上,所述第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,所述时间触发调度器的优先级高于所述截止期调度器,所述第二核心为未运行所述时间触发调度器的Linux内核;
确定单元,用于根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心;
调度单元,用于利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务。
优选的,所述确定单元包括:
中断子单元,用于调用所述时间触发调度器中断所述第一核心当前运行的程序;
比对子单元,用于执行所述第一核心中预设定时器的回调函数,以比对当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID;
确定子单元,用于针对每一第一核心,确定所述第一核心是否携带用于指示重新调度的特定标记,其中,所述特定标记由所述预设定时器的回调函数在当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID不同时,添加至所述第一核心上;若所述第一核心携带所述特定标记,确定所述第一核心为需重新调度的目标核心。
优选的,所述调度单元包括:
第一获取子单元,用于通过核心调度器从所述目标核心运行的所述时间触发调度器中获取时间触发调度类的时隙任务;
第一运行子单元,用于若能获取得到所述时间触发调度类的时隙任务,在所述目标核心上运行所述时间触发调度类的时隙任务;
第二获取子单元,用于若未能获取得到所述时间触发调度类的时隙任务,从所述目标核心运行的优先级低于所述时间触发调度器的其它调度器中获取其它类的时隙任务;
第二运行子单元,用于在所述目标核心上运行所述其它类的时隙任务。
优选的,所述分配单元包括:
传入子单元,用于通过指定内存文件系统,将用户输入的任务调度需求传入时隙转移管理器,所述任务调度需求至少包含时隙任务的类别、优先级、属性和数量;
分配子单元,用于调用所述时隙转移管理器在第一核心启动时间触发调度器,并调用所述时隙转移管理器基于所述任务调度需求执行分区时隙移动算法,以向多个所述第一核心分配需运行的时隙任务。
优选的,所述分配子单元还用于:调用所述时隙转移管理器在第二核心上设置定时器以在新时隙开始之前产生中断。
基于上述本发明实施例提供的一种内核级时间触发调度方法及装置,该方法为:调用时隙转移管理器向多个第一核心分配需运行的时隙任务,时隙转移管理器运行在第二核心上,第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,时间触发调度器的优先级高于截止期调度器,第二核心为未运行时间触发调度器的Linux内核;根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心;利用时间触发调度器,重新为目标核心分配需运行的时隙任务。本方案中,通过运行在第二核心上的时隙转移管理器向多个第一核心分配需运行的时隙任务,第一核心上运行有优先级高于截止期调度器的时间触发调度器。根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。利用时间触发调度器重新为目标核心分配需运行的时隙任务,在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种内核级时间触发调度方法的流程图;
图2为本发明实施例提供的第一核心中各调度器的优先级示例图;
图3为本发明实施例提供的确定需重新调度的目标核心的流程图;
图4为本发明实施例提供的Linux内核的相关构造示例图;
图5为本发明实施例提供的TSR调度器的使用流程图;
图6为本发明实施例提供的一种内核级时间触发调度装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
随着计算机的发展,Linux操作系统被广泛使用,如Linux操作系统用于在诸如嵌入式系统、桌面系统和服务器系统等场景中使用;为提供更快速且可预测的响应时间,及为提供固定和动态优先级的实时调度机制,Linux操作系统通过时间触发机制不断改进。
发明人经研究发现,实时应用领域对任务的响应时间有着极高的要求,实时系统中的大多数应用程序都需要考虑复杂的抖动和多速率任务依赖关系;对于一些现代应用程序而言,这些现代应用程序可能存在一些复杂的时间依赖关系,这就使得这些现代应用程序需要更严格的确定性,复杂的时间依赖关系意味着任务之间存在更多的约束和依赖,例如:某些任务可能需要在其它任务完成之后才能开始执行,或者任务之间存在紧密的时间关联;此外,现代应用程序具有更高的资源需求和较长的执行时间,这就可能使得实时调度变得更加复杂;由于Linux内核在默认情况下并不保证实时性,也就无法提供现代应用程序所需要的检测级别。
为解决以上问题,本发明实施例提供一种内核级时间触发调度方法及装置,通过运行在第二核心上的时隙转移管理器向多个第一核心分配需运行的时隙任务,第一核心上运行有优先级高于截止期调度器的时间触发调度器。根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。利用时间触发调度器重新为目标核心分配需运行的时隙任务,在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
为更好理解后续本方案各个实施例的内容,先对本方案所涉及的部分术语进行解释说明。
Linux及其内核:Linux是一种开源的操作系统,被广泛应用于各种计算机设备,包括个人计算机、服务器、移动设备和嵌入式系统。Linux内核是一种开源操作系统内核,它是Linux操作系统的核心组成部分;内核是操作系统的最底层软件层,负责管理计算机的硬件资源和提供基本的系统功能。
CFS调度器:全称为Completely Fair Scheduleduler(完全公平调度器),设计目标是在多任务环境下,公平地分配CPU资源,同时提供良好的系统响应性能。
RT调度器:RT调度器是Linux内核中的一种实时调度算法,全称为Real-TimeScheduleduler(实时调度器),它的设计目标是保证实时任务的响应性能和可靠性,使得任务能够按照预定的时间要求得到及时地执行。RT调度器使用固定优先级的调度策略,将任务按照优先级的高低进行排序。
DEADLINE调度器:DEADLINE调度器称为截止期调度器,使用截止期(deadline)作为任务的调度依据,每个任务都有一个截止期,即任务完成的最后期限。DEADLINE调度器根据任务的截止期来决定任务的优先级和调度顺序,优先执行截止期最近的任务。
时间触发调度(Time Scheduling Request,TSR);时间触发调度是一种应用在实时系统的调度方法,用于按照预定的时间表执行任务和处理事件。在时间触发调度中,系统中的任务和事件被分配到不同的时间槽或周期性框架中。每个时间槽都有固定的时间段,并在每个时间槽中执行相应的任务或处理相应的事件。
参见图1,示出了本发明实施例提供的一种内核级时间触发调度方法的流程图,该内核级时间触发调度方法包括:
步骤S101:调用时隙转移管理器向多个第一核心分配需运行的时隙任务。
需要说明的是,本方案将时间触发调度器(TSR调度器,也称TSR调度类)添加到Linux内核的调度器层次架构中,并将时间触发调度器的优先级设置为高于截止期调度器。
在某一工作场景中(如在嵌入式工作环境中),一个多核处理器具有N个CPU内核(编号分别记为C0至CN-1),每个CPU内核即为Linux内核;N个Linux内核中的M个Linux内核(编号为CN-M至CN-1的Linux内核)执行属于TSR类的调度进程(使用SCHEDULE_TSR策略),这M个执行属于TSR类的调度进程的Linux内核称为第一核心(或称为TSR核心),M小于N;至少一个Linux内核(如编号为C0的Linux内核)不会运行属于TSR类的调度进程,将这个不运行属于TSR类的调度进程的Linux内核称为第二核心(或称为非TSR核心),即第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,第二核心为未运行时间触发调度器的Linux内核。
例如图2示出的第一核心中各调度器的优先级示例图可见,按照调度器优先级由低至高的顺序,第一核心中至少包含IDLE调度器、CFS调度器、RT调度器、DEADLINE调度器(截止期调度器)、时间触发调度器(TSR调度器)、STOP调度器,时间触发调度器的优先级高于截止期调度器。
本方案将时隙转移管理器(slot-shifting manage,SSM)运行在第二核心上。此外,为了从Linux内核获得实时行为(低延迟和高确定性),可以设置每个TSR任务只有一个线程,TSR任务为让TSR类调度进程执行的任务,低延迟可以减少调度耗费时间,高确定性可以保证每次调度行为所花费的时间基本相同;在实现本方案时,可以通过内核配置选择完全可抢占内核(CRT)模型。
基于上述内容,在具体实现步骤S101的过程中,调用时隙转移管理器向多个第一核心分配需运行的时隙任务;时隙转移管理器(SSM管理器)作为一个定时器中断例程,SSM管理器在每个时隙开始之前运行;SSM管理器运行有分区时隙移动算法,该分区时隙移动算法决定每个第一核心(TSR核心)在即将到来的时隙中应该运行什么时隙任务,并通过一个共享结构将决策通知给时间触发调度器(TSR调度器)。
具体来说,通过指定内存文件系统(如sysfs),将用户输入的任务调度需求传入时隙转移管理器,该任务调度需求至少包含时隙任务(可简称为任务)的类别、优先级、属性和数量;时隙转移管理器可以根据该任务调度需求可确定时隙任务的类别、优先级、属性和数量,并估算时隙任务的离线调度时间。
调用时隙转移管理器在第二核心上设置定时器(如高精度定时器)以在新时隙开始之前产生中断。调用时隙转移管理器在第一核心启动时间触发调度器,并调用时隙转移管理器基于任务调度需求执行分区时隙移动算法,以向多个第一核心分配需运行的时隙任务。
步骤S102:根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。
在具体实现步骤S102的过程中,根据为第一核心分配的时隙任务的ID,运行第一核心中预设定时器(如高精度定时器)的回调函数以从多个第一核心中确定需重新调度的目标核心。
步骤S103:利用时间触发调度器,重新为目标核心分配需运行的时隙任务。
在具体实现步骤S103的过程中,确定需重新调度的目标核心之后,通过核心调度器(如Linux核心调度器)从目标核心运行的时间触发调度器中获取时间触发调度类的时隙任务。若能获取得到时间触发调度类的时隙任务,在目标核心上运行所述时间触发调度类的时隙任务。
若未能获取得到时间触发调度类的时隙任务,从目标核心运行的优先级低于时间触发调度器的其它调度器中获取其它类的时隙任务;在目标核心上运行其它类的时隙任务。
具体来说,通过核心调度器使用“pick_next_task_tsr()”这一接口来从目标核心运行的时间触发调度器中获取时间触发调度类的时隙任务(相当于获取新的TSR类任务)。如果能够获取得到时间触发调度类的时隙任务,通过核心调度器执行上下文切换,然后在目标核心的当前槽位上运行该时间触发调度类的时隙任务;如果未能获取得到时间触发调度类的时隙任务(相当于没有新的TSR类任务),通过核心调度器从目标核心运行的优先级低于时间触发调度器的其它调度器中获取可以运行的其它类的时隙任务,并在目标核心上运行其它类的时隙任务。
通过以上方式,重新为目标核心分配时隙任务以完成目标核心的重新调度。
在本发明实施例中,通过运行在第二核心上的时隙转移管理器向多个第一核心分配需运行的时隙任务,第一核心上运行有优先级高于截止期调度器的时间触发调度器。根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。利用时间触发调度器重新为目标核心分配需运行的时隙任务,在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
针对上述本发明实施例图1步骤S102中涉及的确定需重新调度的目标核心的过程,参见图3,示出了本发明实施例提供的确定需重新调度的目标核心的流程图,图3包括以下步骤:
步骤S301:调用时间触发调度器中断第一核心当前运行的程序。
需要说明的是,时间触发调度器(TSR调度器)充当时隙转移管理器(SSM管理器)与核心调度器之间的接口,时间触发调度器可以在每个时隙开始时作为周期性定时器来中断例程运行。
在具体实现步骤S301的过程中,调用时间触发调度器中断第一核心当前运行的程序,然后执行后续步骤S302至步骤S304。
步骤S302:执行第一核心中预设定时器的回调函数,以比对当前时隙分配给第一核心的时隙任务的ID与上一个时隙分配给第一核心的时隙任务的ID。
在具体实现步骤S302的过程中,对于每一个第一核心,执行该第一核心中预设定时器(如高精度定时器)的回调函数,通过该回调函数来比对当前时隙分配给该第一核心的时隙任务的ID与上一个时隙分配给该第一核心的时隙任务的ID是否相同。
步骤S303:针对每一第一核心,确定第一核心是否携带用于指示重新调度的特定标记。
需要说明的是,特定标记由预设定时器的回调函数在当前时隙分配给第一核心的时隙任务的ID与上一个时隙分配给第一核心的时隙任务的ID不同时,添加至第一核心上。
也就是说,对于某一个第一核心,该第一核心的回调函数在确定当前时隙分配给第一核心的时隙任务的ID与上一个时隙分配给第一核心的时隙任务的ID不同时,该回调函数将特定标记添加到该第一核心上,具体是通过“reschedule_curr()”这一方式将特定标记添加到该第一核心上,特定标记用于指示第一核心需要重新调度。
在具体实现步骤S303的过程中,针对每一第一核心,确定该第一核心是否携带用于指示重新调度的特定标记,若该第一核心携带特定标记,执行步骤S304;若该第一核心未携带特定标记,确定该第一核心不需要重新调度。
步骤S304:若第一核心携带特定标记,确定第一核心为需重新调度的目标核心。
在具体实现步骤S304的过程中,若第一核心携带特定标记,确定第一核心为需重新调度的目标核心,目标核心即为需要重新调度的第一核心。
以上本发明实施例图3是关于如何确定需要重新调度的目标核心的相关说明。
针对上述各个实施例中提及的时间触发调度器(TSR调度器)和时隙转移管理器(SSM管理器),以下分别对如何创建TSR调度器和SSM管理器的过程进行详细解释说明。
关于如何创建TSR调度器的说明:
创建TSR调度器(相当于TSR调度类),通过这个TSR调度器实现SCHEDULE_TSR策略并在Linux中实现时间触发调度,例如可以在“v5.19.9”这一Linux内核版本上实现该TSR调度器并应用PREEMPT_RT补丁。
通过以下程序代码,在“include/linux/schedule.h”中定义了一个宏SCHEDULE_TSR,用于声明新的最高优先级调度类,该程序代码的具体内容如下:
本方案在任务结构体中添加了一个新变量,该新变量作为属于TSR类别任务的逻辑标识符(相当于int类型的变量),该新变量取不同的值可以代表不同的任务类;所有就绪进程的信息都存在每个核心运行队列(core run queue,CRQ)数据结构(struct crq)中,通过TSR_CRQ数据结构(struct tsr_crq)来存储内核上就绪的TSR任务的信息;实现前述内容的程序代码如下:
其中,“#endif”这一结构还有一个变量由SSM管理器使用,SSM管理器独立于TSR调度器外,SSM管理器用于指示TSR调度器是否应该开始运行。
TSR调度器对Linux核心调度器的代码进行了轻微修改,以确保Linux内核知道新的最高优先级类,并在需要时对TSR类别进行额外的日志记录,例如:在“include/linux/schedule.h”中定义了一个宏SCHEDULE_TSR,用于声明新的最高优先级调度类。
可以理解的是,模块化的Linux调度器要求每个调度类实现类结构中指定的一些函数,通过以下程序代码来实现TSR调度类与核心Linux调度程序接口的一些关键功能:
“DEFINE_SCHEDULE_CLASS(tsr){
//enqueue new runnable TSR task in Linux CRQ
.enqueuetask=enqueuer_task_tsr,
//dequeue stopped TSR task from Linux CRQ
.dequeuetask=dequeuer_task_tsr,
//pick next appropriate task to run from
//the TSR scheduling class
.pick_next_task=pick_next_task_tsr,
//...
};”。
类的初始化包括设置每个Linux内核的高精度定时器(HCRT)以便在SSM管理器边界具有精确的计时器中断。
在每个第一核心(运行有TSR调度器的Linux内核)上,HCRT的回调函数的主要工作是:检查SSM管理器在当前时隙分配给该第一核心的时隙任务的ID是否与上一个时隙分配的时隙任务的ID不同。如果不同,则使用“reschedule_curr()”将该第一核心标记为需要重新调度,即给该第一核心添加特定标记。如果相同,表征没有更加紧急的时隙任务,第一核心继续运行当前的时隙任务。
对于目标核心(添加了特定标记的第一核心),核心调度器使用“pick_next_task_tsr()”这一TSR类接口来获取需要运行的新的TSR类任务的指针,核心调度器执行上下文切换,然后在目标核心的当前槽位上运行新的TSR类的时隙任务;如果“pick_next_task_tsr()”这一TSR类接口没有提供要运行的任务,核心调度器自动寻找优先级较低的调度类别中可以运行的其它类的时隙任务;前述处理逻辑也可以适用于“TSR类的时隙任务提前完成”这一情况。
上述提及的HCRT的回调函数的定义如下:
通过以上内容可见,只有非DEADLINE调度类应该和TSR调度类一起使用,通过SSM管理器在TSR类的时隙任务的闲暇期间执行新的实时非周期性任务是可以实现的。
以上是关于如何创建TSR调度器的相关解释说明。
关于如何创建SSM管理器的说明:
预先设置有一个外部工具来离线处理以下事项:任务的先行约束解决、最早开始时间的计算、截止时间的计算、将任务分配给内核等。用户通过sysfs接口将从该外部工具接收到的信息(如任务调度需求)提供给SSM管理器;其中,sysfs是一个内存文件系统,用于允许用户与内核对象(如设备、模块和其它组件)进行接口交互。
SSM管理器的sysfs接口允许用户输入时隙任务的数量和时隙任务的属性,并执行特定的时隙移动算法中离线阶段的部分,及检查当前状态和在TSR核心(第一核心)上启动TSR调度器。
在启动TSR调度器之前,用户须使用预设的任务执行工具将任务二进制文件作为Linux进程执行,并将Linux进程标识符(PID)映射到时隙任务的ID,该任务执行工具的调度策略设置为SCHEDULE_TSR。
在启动TSR调度器时,SSM管理器执行一系列步骤来准备时隙移动,并在第二核心(编号为C0的Linux内核)上设置一个高精度定时器(HCRT)以在新时隙开始之前产生精确的中断。设最坏执行时间(WCETssm,Worst-case Execution Time)是SSM管理器观察到的最坏情况下的执行时间,SSM管理器将HCRT这一定时器设置为在时隙边界之前的WCETssm时间单位引发中断。
HCRT中断回调在循环中执行以下算法代码来管理每个TSR核心:
“function SSMOD_TIMER_CB(STRUCT HCRT*TIME)
core:=N-M
while core<N do
Update SlotShifting Intervals()
Update Interal SlotShifting CRQ()
Check and AddNew CRT Tasks()
Set Upcoming Slot Task()
Update SlotShifting Spare Capacities()
core:=core+1
end while
end function”。
上述算法代码会执行下述步骤A1-A4示出的内容:
A1、执行一些时隙移动的日常管理活动,例如:增加时隙号码和更新间隔(Update_SlotShifting_Intervals()),移除已完成的任务并将准备好的周期性任务移动到内部SSM准备队列(Update_Interal_SlotShifting_CRQ())。
A2、检查是否有由用户添加的新的周期性或非周期性任务变为活动状态;SSM管理器将这些变为活动状态的任务添加到现有的调度表(Check_and_Add_New_CRT_Tasks());上述算法代码需执行接受测试,从而检查是否有足够的空余容量来添加这些变为活动状态的任务;如果测试成功,则保证例程将任务临时/永久地添加到该调度表中,并更新所有受影响间隔的剩余容量。
A3、选择要在特定的Linux内核的下一个时隙中运行的任务,并在每个时隙开始时更新通过TSR调度类访问的内部数据结构(Set_Upcoming_Slot_Task()),从而确定在该时隙中运行哪一个任务。
A4、根据需要更新剩余容量(Update_SlotShifting_Spare_Capacities())。
由于SSM管理器运行的是分区时隙移动算法,HCRT回调会为每个TSR核心重复执行上述A1-A4这些步骤。
以上是关于如何创建SSM管理器的相关解释说明。
结合上述各个实施例的内容可见,本方案中的Linux内核的相关构造如图4所示,本方案将新增的TSR调度器添加到Linux内核中。应用本方案时,会使得其中一个应用场景为:将新增的TSR调度器添加到Linux内核中,以便在内核版本为“5.9.1”和搭载了PREEMPT_RT补丁下根据静态定义的调度表执行任务的过程中,实现了在Linux下的时间触发调度;将TSR调度器的优先级设置为高于DEADLINE调度器,由于基于离线调度来执行任务,可以确保没有其它任务可以阻塞TSR类任务;在静态调度的空闲时段时或当TSR类任务提前完成分配的时段时,将执行其它类的任务。在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,这将对各种对时间触发有需求的实时场景任务提供全新的支持。
为更好理解如何利用本方案的TSR调度器,通过图5示出的TSR调度器的使用流程图进行举例说明,图5包括以下步骤:
步骤S501:进行主机配置,使用PREEMPT_RT补丁,禁用RT-Throttling和Hyperthreading,通过调整处理器的性能状态来优化处理器功耗。
步骤S502:将SCHED_FIFO调度的ksoftirq内核线程的优先级提高到CPU后台系统负载之上,搭载TSR调度器。
步骤S503:接收任务调度需求,确定任务类别、任务优先级、任务属性和任务数量,估算任务的离线调度时间。
步骤S504:检查当前状态,并在TSR核心启动TSR调度器,将Linux进程标识符映射到时隙任务,记录调度延时。
需要说明的是,步骤S501至步骤S504的执行原理可参见上述各个实施例的内容,在此不再赘述。
与上述本发明实施例提供的一种内核级时间触发调度方法相对应,参见图6,本发明实施例还提供了一种内核级时间触发调度装置的结构框图,该内核级时间触发调度装置包括:分配单元601、确定单元602和调度单元603;
分配单元601,用于调用时隙转移管理器向多个第一核心分配需运行的时隙任务,时隙转移管理器运行在第二核心上,第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,时间触发调度器的优先级高于截止期调度器,第二核心为未运行所述时间触发调度器的Linux内核。
确定单元602,用于根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。
调度单元603,用于利用时间触发调度器,重新为目标核心分配需运行的时隙任务。
在本发明实施例中,通过运行在第二核心上的时隙转移管理器向多个第一核心分配需运行的时隙任务,第一核心上运行有优先级高于截止期调度器的时间触发调度器。根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。利用时间触发调度器重新为目标核心分配需运行的时隙任务,在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
优选的,结合图6示出的内容,确定单元602包括中断子单元、比对子单元和确定子单元;各个子单元的执行原理如下:
中断子单元,用于调用时间触发调度器中断第一核心当前运行的程序。
比对子单元,用于执行第一核心中预设定时器的回调函数,以比对当前时隙分配给第一核心的时隙任务的ID与上一个时隙分配给第一核心的时隙任务的ID。
确定子单元,用于针对每一第一核心,确定第一核心是否携带用于指示重新调度的特定标记,其中,特定标记由预设定时器的回调函数在当前时隙分配给第一核心的时隙任务的ID与上一个时隙分配给第一核心的时隙任务的ID不同时,添加至第一核心上;若第一核心携带特定标记,确定第一核心为需重新调度的目标核心。
优选的,结合图6示出的内容,调度单元603包括第一获取子单元、第一运行子单元、第二获取子单元、第二运行子单元;各个子单元的执行原理如下:
第一获取子单元,用于通过核心调度器从目标核心运行的时间触发调度器中获取时间触发调度类的时隙任务。
第一运行子单元,用于若能获取得到时间触发调度类的时隙任务,在目标核心上运行时间触发调度类的时隙任务。
第二获取子单元,用于若未能获取得到时间触发调度类的时隙任务,从目标核心运行的优先级低于时间触发调度器的其它调度器中获取其它类的时隙任务。
第二运行子单元,用于在目标核心上运行其它类的时隙任务。
优选的,结合图6示出的内容,分配单元601包括传入子单元和分配子单元;各个子单元的执行原理如下:
传入子单元,用于通过指定内存文件系统,将用户输入的任务调度需求传入时隙转移管理器,任务调度需求至少包含时隙任务的类别、优先级、属性和数量。
分配子单元,用于调用时隙转移管理器在第一核心启动时间触发调度器,并调用时隙转移管理器基于任务调度需求执行分区时隙移动算法,以向多个第一核心分配需运行的时隙任务。
优选的,分配子单元还用于:调用时隙转移管理器在第二核心上设置定时器以在新时隙开始之前产生中断。
综上所述,本发明实施例提供一种内核级时间触发调度方法及装置,通过运行在第二核心上的时隙转移管理器向多个第一核心分配需运行的时隙任务,第一核心上运行有优先级高于截止期调度器的时间触发调度器。根据为第一核心分配的时隙任务,从多个第一核心中确定需重新调度的目标核心。利用时间触发调度器重新为目标核心分配需运行的时隙任务,在Linux内核中使用基于时间触发的调度方式,可以有效减少延迟和抖动,从而满足现代应用程序所需要的检测级别。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种内核级时间触发调度方法,其特征在于,所述方法包括:
调用时隙转移管理器向多个第一核心分配需运行的时隙任务,所述时隙转移管理器运行在第二核心上,所述第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,所述时间触发调度器的优先级高于所述截止期调度器,所述第二核心为未运行所述时间触发调度器的Linux内核;
根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心;
利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务。
2.根据权利要求1所述的方法,其特征在于,根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心,包括:
调用所述时间触发调度器中断所述第一核心当前运行的程序;
执行所述第一核心中预设定时器的回调函数,以比对当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID;
针对每一第一核心,确定所述第一核心是否携带用于指示重新调度的特定标记,其中,所述特定标记由所述预设定时器的回调函数在当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID不同时,添加至所述第一核心上;
若所述第一核心携带所述特定标记,确定所述第一核心为需重新调度的目标核心。
3.根据权利要求1所述的方法,其特征在于,利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务,包括:
通过核心调度器从所述目标核心运行的所述时间触发调度器中获取时间触发调度类的时隙任务;
若能获取得到所述时间触发调度类的时隙任务,在所述目标核心上运行所述时间触发调度类的时隙任务;
若未能获取得到所述时间触发调度类的时隙任务,从所述目标核心运行的优先级低于所述时间触发调度器的其它调度器中获取其它类的时隙任务;
在所述目标核心上运行所述其它类的时隙任务。
4.根据权利要求1-3中任一所述的方法,其特征在于,调用时隙转移管理器向多个第一核心分配需运行的时隙任务,包括:
通过指定内存文件系统,将用户输入的任务调度需求传入时隙转移管理器,所述任务调度需求至少包含时隙任务的类别、优先级、属性和数量;
调用所述时隙转移管理器在第一核心启动时间触发调度器,并调用所述时隙转移管理器基于所述任务调度需求执行分区时隙移动算法,以向多个所述第一核心分配需运行的时隙任务。
5.根据权利要求4所述的方法,其特征在于,调用所述时隙转移管理器在第一核心启动时间触发调度器之前,还包括:
调用所述时隙转移管理器在第二核心上设置定时器以在新时隙开始之前产生中断。
6.一种内核级时间触发调度装置,其特征在于,所述装置包括:
分配单元,用于调用时隙转移管理器向多个第一核心分配需运行的时隙任务,所述时隙转移管理器运行在第二核心上,所述第一核心为至少运行有时间触发调度器和截止期调度器的Linux内核,所述时间触发调度器的优先级高于所述截止期调度器,所述第二核心为未运行所述时间触发调度器的Linux内核;
确定单元,用于根据为所述第一核心分配的时隙任务,从多个所述第一核心中确定需重新调度的目标核心;
调度单元,用于利用所述时间触发调度器,重新为所述目标核心分配需运行的时隙任务。
7.根据权利要求6所述的装置,其特征在于,所述确定单元包括:
中断子单元,用于调用所述时间触发调度器中断所述第一核心当前运行的程序;
比对子单元,用于执行所述第一核心中预设定时器的回调函数,以比对当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID;
确定子单元,用于针对每一第一核心,确定所述第一核心是否携带用于指示重新调度的特定标记,其中,所述特定标记由所述预设定时器的回调函数在当前时隙分配给所述第一核心的时隙任务的ID与上一个时隙分配给所述第一核心的时隙任务的ID不同时,添加至所述第一核心上;若所述第一核心携带所述特定标记,确定所述第一核心为需重新调度的目标核心。
8.根据权利要求6所述的装置,其特征在于,所述调度单元包括:
第一获取子单元,用于通过核心调度器从所述目标核心运行的所述时间触发调度器中获取时间触发调度类的时隙任务;
第一运行子单元,用于若能获取得到所述时间触发调度类的时隙任务,在所述目标核心上运行所述时间触发调度类的时隙任务;
第二获取子单元,用于若未能获取得到所述时间触发调度类的时隙任务,从所述目标核心运行的优先级低于所述时间触发调度器的其它调度器中获取其它类的时隙任务;
第二运行子单元,用于在所述目标核心上运行所述其它类的时隙任务。
9.根据权利要求6-8中任一所述的装置,其特征在于,所述分配单元包括:
传入子单元,用于通过指定内存文件系统,将用户输入的任务调度需求传入时隙转移管理器,所述任务调度需求至少包含时隙任务的类别、优先级、属性和数量;
分配子单元,用于调用所述时隙转移管理器在第一核心启动时间触发调度器,并调用所述时隙转移管理器基于所述任务调度需求执行分区时隙移动算法,以向多个所述第一核心分配需运行的时隙任务。
10.根据权利要求9所述的装置,其特征在于,所述分配子单元还用于:调用所述时隙转移管理器在第二核心上设置定时器以在新时隙开始之前产生中断。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410381757.3A CN118093140A (zh) | 2024-03-29 | 2024-03-29 | 一种内核级时间触发调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410381757.3A CN118093140A (zh) | 2024-03-29 | 2024-03-29 | 一种内核级时间触发调度方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118093140A true CN118093140A (zh) | 2024-05-28 |
Family
ID=91147894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410381757.3A Pending CN118093140A (zh) | 2024-03-29 | 2024-03-29 | 一种内核级时间触发调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118093140A (zh) |
-
2024
- 2024-03-29 CN CN202410381757.3A patent/CN118093140A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lin et al. | Improving soft real-time performance through better slack reclaiming | |
Herman et al. | RTOS support for multicore mixed-criticality systems | |
RU2481618C2 (ru) | Иерархическая инфраструктура планирования резервирования ресурсов | |
US7207042B2 (en) | System and method for robust time partitioning of tasks in a real-time computing environment | |
JP5367816B2 (ja) | オペレーションの保護モードスケジューリング | |
Huang et al. | Implementation and evaluation of mixed-criticality scheduling approaches for sporadic tasks | |
Abeni et al. | Adaptive partitioning of real-time tasks on multiple processors | |
Vardanega et al. | On the dynamic semantics and the timing behavior of ravenscar kernels | |
Golub | Operating system support for coexistence of real-time and conventional scheduling | |
Zouaoui et al. | CPU scheduling algorithms: Case & comparative study | |
Hu et al. | Real-time schedule algorithm with temporal and spatial isolation feature for mixed criticality system | |
Nosrati et al. | Task scheduling algorithms introduction | |
CN118093140A (zh) | 一种内核级时间触发调度方法及装置 | |
Kim et al. | Mixed-criticality on multicore (MC2): A status report | |
Kakkar | Scheduling techniques for operating systems for medical and IoT devices: A review | |
EP1540475A2 (en) | System and method for robust time partitioning of tasks in a real-time computing environment | |
Gu et al. | Synthesis of real-time implementations from component-based software models | |
Suzuki et al. | Execution Right Delegation Scheduling Algorithm for Multiprocessor | |
Springer et al. | Resource synchronization in hierarchically scheduled real-time systems using preemptive critical sections | |
Humphrey et al. | Predictable threads for dynamic, hard real-time environments | |
Liu et al. | A server-based approach for overrun management in multi-core real-time systems | |
Carraro | Implementation and Test of EDF and LLREF Schedulers in FreeRTOS | |
Lin et al. | Efficient soft real-time processing in an integrated system | |
Saraswat et al. | Design and implementation of a process scheduler simulator and an improved process scheduling algorithm for multimedia operating systems | |
Macariu | A Model Checking Approach for Multi-core Time Partitions Design |
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 |