Ram*_*esh 28 process scheduling kernel
我一直在学习一些调度概念。目前我的理解如下。
nice的优先级值可以在-20到+20的范围内。较高的正值表示该进程具有较低的优先级。-如本答案here中所述。这主要是因为实时进程比非实时进程具有更高的优先级,并且niceness 值不适用于它们。chrt来查看进程的实时属性。 对于实时过程,chrt给出的输出为,
chrt -p 5
pid 5's current scheduling policy: SCHED_FIFO
pid 5's current scheduling priority: 99
Run Code Online (Sandbox Code Playgroud)
正如我们在进程5 中看到的,优先级是 99,这是最高的。此外,调度策略是SCHED_FIFO
现在,对于非实时过程,chrt给出的输出为,
chrt -p 22383
pid 22383's current scheduling policy: SCHED_OTHER
pid 22383's current scheduling priority: 0
Run Code Online (Sandbox Code Playgroud)
正如我们所见,进程22383的优先级为 0,调度策略为SCHED_OTHER。
问题
SCHED_OTHER非实时进程之外,我是否可以设置其他一些调度算法?从这里,我还看到我可以修改正在运行的进程的属性,
chrt -p prio pid
Run Code Online (Sandbox Code Playgroud)
另外,我看到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
Run Code Online (Sandbox Code Playgroud)
现在,如上所述,如果我设置chrt -p 55 22383将使用哪种算法?
Ram*_*esh 23
问题 1
用户也可以对进程使用实时优先级。这个配置可以从/etc/security/limits.conf文件中设置。我在该文件中看到以下内容。
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
Run Code Online (Sandbox Code Playgroud)
如果我们检查项目部分,我们会看到以下条目,可以为用户设置实时优先级。
# - rtprio - max realtime priority
Run Code Online (Sandbox Code Playgroud)
问题 2 和问题 3
要将调度策略设置为SCHED_FIFO,请输入:
chrt -f -p [1..99] {pid}
Run Code Online (Sandbox Code Playgroud)
要将调度策略设置为SCHED_RR,请输入:
chrt -r -p [1..99] {pid}
Run Code Online (Sandbox Code Playgroud)
所以要回答问题3,我们应该使用chrt -m命令验证可用的调度算法和优先级,然后使用任何适合我们需要的调度算法。要设置不同的优先级,我们可以使用上述命令。