调研:如何基于Linux平台实现自主设计的调度器

1 针对Linux操作系统的调度器设计

如果能在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等。

  此外,还可以通过一些工具来将任务绑定到特定的CPU核心上执行。这通常被称为CPU亲和性或CPU绑定。在Linux系统上,你可以使用taskset命令来实现这一点。假设你有一个程序或任务的进程ID(PID),你可以使用taskset命令将其绑定到特定的CPU核心上。

  另外,也可以使用编程语言中的相关库来实现CPU绑定,比如在Python中可以使用os.sched_setaffinity()函数。具体可以参考博客:https://blog.csdn.net/ethercat_i7/article/details/105717152

  • 大调:如何部署实验室设计的调度算法到现有的应用程序和操作系统中,一些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

2 linux内核源代码官网下载

官网:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

首先查看ubuntu20.02.4的内核版本:

 

所以下载

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tag/?h=v5.15

下载后解压,找到相关文件夹

 

如果想在服务器端一直跑python代码,可以参考如下博客:

https://blog.csdn.net/u013421629/article/details/79174313

posted @ 2024-04-03 18:13  碳酸钾K2CO3  阅读(13)  评论(0编辑  收藏  举报