我一直在学习一些调度概念。目前我的理解如下。
- 有实时过程和非实时过程。
- 非实时进程
nice
的优先级值可以在以下范围内-20到+20。正值越高表示该进程的优先级越低。 - 实时进程将具有一个良好值,如
-
本答案中所述这里。这主要是因为实时进程比非实时进程具有更高的优先级,并且良好值不适用于它们。 - 现在,我可以用来
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
。
问题
- 我可以将任何流程设置为实时流程吗?
SCHED_OTHER
除了非实时进程之外,我是否可以设置其他调度算法?从这里,我还发现我可以将正在运行的进程的属性修改为,
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
将使用哪种算法?
答案1
问题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
,然后使用适合我们需要的任何调度算法。要设置不同的优先级,我们可以使用上面的命令。