如果能在linux操作系统上实现自主设计的调度算法,那么现在实时领域的研究或许还有意义吧。
基于linux操作系统,调整调度算法的方法大致分为两种:
- 小调:调整Linux内核提供的14个调度器参数。在Linux内核中,当前定义了五个调度策略:NORMAL(CFS)、FIFO、RR、BATCH、IDLE 。
- SCHED_NORMAL(CFS) 这是Linux内核的默认调度策略。CFS的目的是最大化整体CPU利用率,并为所有任务提供公平的CPU资源。
-
SCHED_FIFO 这是一个固定优先级调度策略,每个任务以1到99的优先级值执行,并且是按高优先级顺序抢占并执行CPU的策略。
-
SCHED_RR 这基本上与SCHED_FIFO的操作相同,但每个任务都有一个时间量子值,这是执行的最长时间。当时间量子过期时,任务以轮询方式切换到下一个任务。
-
SCHED_BATCH 此策略适用于批处理作业。通过避免被其他任务抢占,我们可以运行一个任务更长时间,比其他策略更好地利用硬件缓存;但是,这对于交互式任务效果不佳。
-
SCHED_IDLE 此策略以非交互方式运行,类似于SCHED_BATCH。但是,与SCHED_BATCH不同,当其他进程处于空闲状态时,可以执行SCHED_IDLE。
可以通过Linux提供的schedtool工具/sysctl命令更改这些策略的有关参数,如latency_ns, migration_cost_ns, rt_period_us, rt_runtime_us, cfs_bandwidth_slice_us等。
- 大调:如何部署实验室设计的调度算法到现有的应用程序和操作系统中,一些Google的工程师构建了一个名为ghOSt的框架,该框架可以实现不同的调度策略,并将它们部署到Linux内核中,以方便用户更容易地使用。
具体可参考文章:Humphries J T, Natu N, Chaugule A, et al. ghost: Fast & flexible user-space delegation of linux scheduling[C]//Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles. 2021: 588-604.
github开源代码:
ghOSt kernel code. https://github.com/google/ghost-kernel
ghOSt userspace code. https://github.com/google/ghost-userspace