(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202211006071.3
(22)申请日 2022.08.22
(71)申请人 麒麟软件有限公司
地址 300450 天津市滨 海新区塘沽海 洋科
技园信安创业广场3号楼6 -8层
(72)发明人 李明强 谭一鸣 陈松 林晓颖
(74)专利代理 机构 北京汇智英财专利代理有限
公司 11301
专利代理师 杨瑞华
(51)Int.Cl.
G06F 9/50(2006.01)
(54)发明名称
一种针对SMP系统的实时任务调度优化方法
(57)摘要
本发明公开了一种针对SMP系统的实时任务
调度优化方法, 具体包括以下步骤: Linux内核启
动; 调度器初始化时, 对SMP系统中的CPU核进行
分组; 对默认的period和ru ntime的值进行修改;
初始化定时器rt_period_timer; 当CPU核上有实
时任务开始运行时, 记录当前CPU核的实时任务
运行时间, 同时调度器获取当前CPU核的period
值并设为当前CPU核的定时器超时时间后, 启动
定时器; 每个调度节点, 计算CP U核上实时任务的
运行时间, 若超过当前CPU核的runtime, 则中止
实时任务运行, 运行普通任务。 本发明增加了任
务调度和CPU资源利用的合理性。
权利要求书1页 说明书8页 附图3页
CN 115437784 A
2022.12.06
CN 115437784 A
1.一种针对SMP系统的实时任务调度优化方法, 其特 征在于, 具体包括以下步骤:
S1、 Linux内核启动进行调度器初始化时, 对SMP系统中的CPU核进行分组: 其中, 每组
CPU核称为CPU组;
S2、 分别为各CPU组设置不同的peri od和runtime的值;
S3、 初始化定时器rt_period_timer: rt_period_timer及超时处理方法的设置为RT
Throttling机制下的相关 设置;
S4、 当某个CPU核上有实时任务开始运行时, 开始记录当前CPU核的实时任务运行 时间,
同时调度器获取当前CPU核的perio d值, 将当前CPU核的perio d值设为当前CPU核的定 时器
超时时间后, 启动该定时器。
S5、 每个调度节点, 计算CPU核上实时任务的运行时间, 并且与当前CPU核对应的
runtime值比较, 如果运行时间超过当前CPU核的runtime, 则中止当前CPU核的实时任务运
行, 转而运行普通任务。
2.根据权利要求1所述的针对SMP系统的实时任务调度优化方法, 其特征在于, 还包括
步骤S6, 步骤S6的具体内容 为:
中止当前CPU核的实时任务运行而运行普通任务后, 时间到达period后, 当前CPU核上
的定时器rt_perio d_timer到 时, 其超时处理函数中进行判断和设置, 操作当前CPU核放弃
正在进行的普通任务调度, 返回步骤S5, 继续 开始调度实时任务。
3.根据权利要求1所述的针对SMP系统的实时任务调度优化方法, 其特征在于, 在步骤
S2中: Linux内核中增加新内核参数, 通过所述新内核参数指定需修改的具体的CPU组或单
个CPU核, Linux内核启动后, 再通过kernel.sched_rt_period_us、 kernel.sched_rt_
runtime_us 分别修改指定的CPU组或CPU 核的peri od值、 runtime值。
4.根据权利要求1所述的针对SMP系统的实时任务调度优化方法, 其特征在于, 步骤S1
中的调度器初始化时, 对SMP系统中的CPU 核进行分组的具体过程 为:
S11、 获取SMP系统的CPU 核的数量 nr_cpu_ids, 并判断是否超过最大组数32;
S12、 如果 不大于32, 则将CPU 核分为nr_cpu_ids组;
否则将CPU核心数分为32个组, 每个CPU组最多包含CPU核的个数为: nr_cpu_ids/32的
值与1的和, 记录 CPU组中的CPU成员为CPUn,其中n =0,1,2, …,nr_cpu_ids ‑1;
S13、 初始化一个结构体数组, 用来表示分组, 结构体数组中包含: cpu核的个数、 cpu
id、 runtime和peri od。
5.根据权利要求3所述的针对SMP系统的实时任务调度优化方法, 其特征在于, 所述新
内核参数包括kernel.sched_rt_cpu_zone、 kernel.sched_rt_cpu_core: 通过
kernel.sched_rt_cpu_zone指定需修改的具体的CPU组; 通过kernel.sched_rt_cpu_core
指定需修改的单个CPU 核。权 利 要 求 书 1/1 页
2
CN 115437784 A
2一种针对SMP系统的实时任务调度优化方 法
技术领域
[0001]本发明涉及多处理器 的实时任务调度技术, 尤指一种针对SMP系统的实时任务调
度优化方法。
背景技术
[0002]Linux内核任务调度机制中, 关于实时任务的调度有以下 特性:
[0003]首先, Linux内核任务调度中, 实时任务 的调度顺序要优于普通任务, 在普通任务
运行过程中, 一旦有实时任务被唤醒加入就绪队列, 便会发生抢占现象, 调 度器会中 断当前
普通任务的运行, 转而 进行实时任务的调度。
[0004]另外, 目前的实时任务调度通常采用两种调度策略: SCHED _FIFO和SCHED_RR, 这两
种调度策略都基于实时任务的优先级, 优先级高的实时任务优先得到调度, 采用SCHED_
FIFO调度策略时, 同一优 先级的实时任务采用先进 先出的办法, 先就绪的任务先被调度; 采
用SCHED_RR调度策略时, 同一优先级的实时任务采用时间片轮转的方法依次得到调度。
[0005]由于Linux实时任务的调度顺序 优于普通任务, 因此在某个CPU核的任务就绪队列
中如果同时存在实时任务和普通任务, 不管采用上述哪种 策略, 实时任务必然会首先得到
调度, 并且会一直占用CPU资源运行, 如果实时任务运行时间过长, 便会导致普通任务长时
间无法得到调度, 情况严重时甚至会导 致整个系统出现无响应等问题。
[0006]目前, 为了避免上述实时任务一直占用CPU, 导致普通任务长时间无法得到调度的
现象, Linux内核也引入了RT Throttling机制。 RT Throttling的思想是: 控制CPU在一定时
间周期(perio d)内, 分配给实时任务固定的运行时间(runtime), 且该运行时间runtime小
于时间周期period, 从而保证CPU在该时间周期(period)内留出一定的时间用于调度普通
任务, 从而避免实时任务一直占用CPU运行的情况出现。 现有RT Throttling中, Linux 内核
提供了两个 内核参数, 供用户灵活修改period和runtime: kernel.sche d_rt_period_us—
表示RT Throttling机制的CPU运行周期时间(period), 默认值为1000000us, 即1s;
kernel.sche d_rt_runtime_us—表示在CPU运行周期时间(period)内, 可用于运行实时任
务的最大时间(runtime), 默认值为9500000us, 即0.95s。 也就是说, 在系统默认情况下, 通
过Rt Throttling机制, 在一个1秒的运行周期内, 可留出0.05s用于运行普通任务, 从而避
免出现普通任务无法得到调度的情况。
[0007]但是现有RT Throttling机制中, 每个CPU核 上的period和runtime都是一致的, 不
会对SMP系统中的多个CPU核进行区分。 由于在SMP系统里, 一个计算机上并不只有一颗CPU,
而是汇集了一组CPU核, 所有CPU核之间共享内存子系统以及总线结构。 因而, RT
Throttling在SMP系统里的实现, 并不区分CPU核, 而是统一为所有CPU核设置了相同的
period和ru ntime值, 即每个CP U核上的period和runtime都是一样的, 这样设置不但缺少灵
活性, 而且在极端情况下存在一些隐患。 例如, 在某个时间段内, 系统中存在大量 实时任务,
每个CPU核的就绪队列中都有一些实时任务和普通任务等待调度, 不同的任务对调度时间
要求各不相同, 必然会出现某些CPU核调度队列中实时任务要求更多的调度时间, 而另外说 明 书 1/8 页
3
CN 115437784 A
3
专利 一种针对SMP系统的实时任务调度优化方法
文档预览
中文文档
13 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共13页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 13:11:14上传分享