Ell*_*tus 4 linux scheduling priority
我知道,出于调度目的,Linux 进程具有“nice”值和实时优先级值,并且可以使用nice
和chrt
命令显式更改这些值。如果用户没有明确设置一个进程的实时优先级,它是如何设置的?
引用罗伯特·洛夫的话:
调度程序不会神奇地知道一个进程是否是交互式的。它需要一些能够准确反映任务是受 I/O 限制还是受处理器限制的启发式方法。最具指示性的指标是任务休眠的时间。如果任务大部分时间都处于休眠状态,则它是I/O 绑定的。如果一个任务在 runnable 上花费的时间比在 sleep 上花费的时间多,则它不是交互式的。这延伸到了极端;几乎所有时间都在休眠的任务 完全受 I/O 限制,而几乎所有时间都处于可运行状态的任务完全受处理器限制。
为了实现这种启发式方法,Linux 会保留一个运行选项卡,显示进程睡眠所花费的时间与进程处于可运行状态所花费的时间。此值存储在
sleep_avg member
的task_struct
。它的范围从 0 到MAX_SLEEP_AVG
,默认为 10 毫秒。当一个任务在睡眠后变为可运行时,sleep_avg
它会增加它睡眠的时间,直到该值达到MAX_SLEEP_AVG
。对于任务运行的每个计时器滴答,sleep_avg
递减直到它达到零。
所以,我相信内核会根据上述启发式来决定调度策略。据我所知,对于实时进程,调度策略可以是SCHED_FIFO
或SCHED_RR
。这两种策略是相似的,只是SCHED_RR
有一个时间片而SCHED_FIFO
没有任何时间片。
但是,我们甚至可以更改实时进程调度。您可以参考此问题了解如何更改实时进程调度。
参考
http://www.informit.com/articles/article.aspx?p=101760&seqNum=2