Linux中的实时流程调度


24

我一直在学习一些调度概念。目前,到目前为止,我的理解如下。

  • 有实时过程和非实时过程。
  • 非实时进程nice的优先级值可以在-20+20之间。正值越高,表示该进程的优先级越低。
  • 实时进程将列为正派值-作为这个答案说明这里。这主要是因为实时过程比非实时过程具有更高的优先级,并且niceness值不适用于它们。
  • 现在,我可以chrt用来查看流程的实时属性。

对于实时过程,chrt给出的输出为

chrt -p 5
pid 5's current scheduling policy: SCHED_FIFO
pid 5's current scheduling priority: 99

正如我们在流程5中看到的那样,优先级是最高的99。另外,调度策略是SCHED_FIFO

现在,对于非实时过程,chrt给出的输出为

chrt -p 22383
pid 22383's current scheduling policy: SCHED_OTHER
pid 22383's current scheduling priority: 0

如我们对于进程22383所看到的,优先级为0,调度策略为SCHED_OTHER

问题

  1. 我可以将任何过程都设为实时过程吗?
  2. 除了SCHED_OTHER非实时过程外,我是否可以设置其他调度算法?
  3. 这里,我还看到我可以修改正在运行的进程的属性,因为,

    chrt -p prio pid
    

    另外,我看到chrt -m了调度算法列表。该命令将输出显示为

    SCHED_OTHER min/max priority    : 0/0
    SCHED_FIFO min/max priority     : 1/99
    SCHED_RR min/max priority       : 1/99
    SCHED_BATCH min/max priority    : 0/0
    SCHED_IDLE min/max priority     : 0/0
    

    现在,如上所述,如果我设置chrt -p 55 22383将使用哪种算法?

Answers:


19

问题1

用户也可以将实时优先级用于流程。可以从/etc/security/limits.conf文件中设置此配置。我在该文件中看到以下内容。

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>

如果我们检查项目部分,我们将看到以下条目,该条目可为用户设置实时优先级。

#        - rtprio - max realtime priority

问题2和问题3

要将调度策略设置为SCHED_FIFO,请输入:

chrt -f -p [1..99] {pid}

要将调度策略设置为SCHED_RR,请输入:

chrt -r -p [1..99] {pid}

因此,要回答问题3,我们应该使用chrt -m命令验证可用的调度算法和优先级,然后使用任何适合我们需求的调度算法。要设置不同的优先级,我们可以使用上面的命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.