集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

学习文章

当前位置:首页 > >学习文章 > >

Red Hat Enterprise Linux 8的9种实时进程调度策略

发布时间: 2019-12-22 20:32:18

  Red Hat Enterprise Linux 8的9种实时进程调度策略

  Red Hat Enterprise Linux 8使用是Linux内核版本是Kernel 4.18,其系统进程的实时调度策略有9种。在RHEL 8中,查看ps的帮助手册即可查到:

  # man ps |grep -A 10 policy

  -    not reported

  TS   SCHED_OTHER

  FF   SCHED_FIFO

  RR   SCHED_RR

  B    SCHED_BATCH

  ISO  SCHED_ISO

  IDL  SCHED_IDLE

  DLN  SCHED_DEADLINE

  ?    unknown value

  实际上只有7种,not reported、unknown value可能只是开放的策略,允许用户自定义。查看进程时,可能专门指定查看进程的调度策略,如下:

  # ps axo pid,comm,nice,cls --sort=-nice

  Linux的进程调度意味着,它是CPU的重要助手,总是要为CPU挑选出下一个要执行的进程。在Linux中,进程(process)、线程(thread)和任务(task)都差不多。根据POSIX的定义,进程相当于执行一个程序,特指执行程序时需要的名字空间、内存等资源;而线程则是指执行一行代码时需要的系统资源。即它们关注的对象不同。大家都应该知道,一个程序有很多行代码,几千行,几万行也不稀奇。

  RHEL 8挑选进程的标准有两个(注2):

  一、调度策略(scheduling policy)

  二、静态调度优先度(static scheduling priority)

  既然有静态调度优先度,就有动态调度优先度,也就是NICE值,其取值 范围为-20~19,共40个档次。数值越大,越往后排。看来,调度政策挺重要。那么,各种调度策略是什么意思呢?

  TS - SCHED_OTHER

  优先度为0的进程中,按照NICE值排队,等候被CPU执行。应用SCHED_OTHER或TS策略的进程在执行过一次之后,其NICE值就会增加一次。在这种策略下,进程们拼的不是静态优先度,拼的是动态优先度,即NICE值。这是Linux的缺省调度策略。

  FF - SCHED_FIFO

  正如其名所示,FIFO,First In, First Out,先进先出。它比较霸道,执行完才肯走。在这种策略的指导下,静态优先度为1-99之间的进程会插队到执行SCHED_OTHER、SCHED_IDEL、SCHED_BATCH策略的进程前面,直到它执行完毕或者被更高优先组的进程插队。这种策略没有时间片的限制。执行这种策略的进程是进程中的土匪。

  RR - SCHED_RR

  轮巡,在分配到的、可以使用CPU的时间片里,相同优先度(1-99)的进程们,你一筷子,我一筷子,轮流吃肉。SCHED_RR,是SCHED_FIFO的改进形式。这种机制,可以视为进程土匪中的轮巡。毕竟,在这种策略下,大家还讲点规矩,机会均等。你一筷子没夹着肉,那就等下一轮吧。

  B - SCHED_BATCH

  跟SCHED_OTHER一样,不使用静态优先度,使用动态优先度。不同的是,它要批量执行进程。所以,只适合非交互式的进程。

  ISO - SCHED_ISO

  这种策略是想向进程提供类似于SCHED_OTHER的运行时间片分配机制。与后者不同的是,SCHED_ISO在较大限度地保证不会导致其它进程“饿死”的情况下,尽可能地延长进程的执行时间。适用于游戏、视频和视频捕获场景下,较大限度地利用硬件资源。这个策略仍不完善(注8)。

  IDL - SCHED_IDLE

  跟SCHED_OTHER一样,不使用静态优先度,而且也不大使用动态优先度。进程的优先度为19或20。执行这种策略的进程,是进程中的谦谦君子。它们总是先人后己,与世无争。

  DLN - SCHED_DEADLINE

  这是Linux Kernel 3.14之后新增加的调度机制。同时也被认为是最好的调度方案(注3)。谁的死期先到,谁就先上。这是一种急他人之所急的好作风。不过,这个“死期”是Deadline,是执行任务的“最后期限”。所以,这是进程中的现实主义者的约定。

  RHEL 8的产品文档中,找不到关于SCHED_ISO的介绍,大概也是因为这种调度技术尚未成熟有关吧。

  参考资料:

  1、https://access.redhat.com/articles/3078

  2、http://man7.org/linux/man-pages/man7/sched.7.html

  3、https://stackoverflow.com/questions/9392415/linux-sched-other-sched-fifo-and-sched-rr-differences

  4、https://lwn.net/Articles/723248/

  5、https://www.kernel.org/doc/html/v5.4/scheduler/sched-rt-group.html

  6、https://www.cs.montana.edu/~chandrima.sarkar/AdvancedOS/CSCI560_Proj_main/

  7、https://linux.die.net/man/2/sched_getscheduler

  8、https://www.mankier.com/8/schedtool


上一篇: 【华为HCIE-Cloud compute】FusionCompute中的内存复用技术

下一篇: RHEL 8 YUM仓库的应用序列AppStream

十五年老品牌
微信咨询:togogoi 咨询电话:18922156670 咨询网站客服:在线客服

相关课程推荐

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!