如何知道linux调度程序的时间片?

时间:2013-05-06 14:48:18

标签: c linux linux-kernel embedded-linux procfs

我正在寻找Linux内核的时间片(或量子)的值。

是否有/proc文件公开此类信息?

(或)我的发行版的Linux头文件中是否定义明确?

(或者)是否有Linux API(可能是sysinfo)的C函数公开此值?

提前致谢。

5 个答案:

答案 0 :(得分:29)

为特定流程may vary分配的量程:

  

您可以通过调整 sched_latency_ns 和来调整“切片”    sched_min_granularity_ns ,但请注意“切片”不是固定的   量子。另请注意,CFS抢占决定是基于   瞬间状态。任务可能已收到完整(可变)   “切片”CPU时间,但只有在更多时才会触发抢占   值得的任务是可用的,因此“切片”不是“最大值”   不间断的CPU时间“你可能期望它......但它确实如此   有点相似。

对于使用SCHED_RR的特殊用途实时进程,默认时间片在Linux内核中定义为include/linux/sched/rt.h中的RR_TIMESLICE

/*
 * default timeslice is 100 msecs (used only for SCHED_RR tasks).
 * Timeslices get refilled after they expire.
 */
#define RR_TIMESLICE            (100 * HZ / 1000)

您可以使用sched_rr_get_interval()获取特定SCHED_RR流程的SCHED_RR间隔。

答案 1 :(得分:26)

CFS(进程的默认调度程序)没有固定的时间片,它是在运行时根据目标延迟(sysctl_sched_latency)和正在运行的进程数计算的。时间片永远不会小于最小粒度(sysctl_sched_min_granularity)。

时间片将始终位于sysctl_sched_min_granularitysysctl_sched_latency之间,默认分别为0.75毫秒和6毫秒,并在kernel/sched/fair.c中定义。

但实际的时间片不会导出到用户空间。

答案 2 :(得分:9)

SCHED_OTHER进程(即在(默认)非实时循环分时策略下运行的进程)和SCHED_RR进程之间的接受答案存在一些混淆。

sched_latency_nssched_min_granularity_ns文件(用于调试目的,仅在内核配置为CONFIG_SCHED_DEBUG时可见)影响SCHED_OTHER进程的调度。正如Alexey Shmalko的回答所述,CFS下的时间片不是固定的(并且不会导出到用户空间),并且取决于内核参数和因素,例如流程的好处值。

sched_rr_get_interval()返回一个固定值,该值是SCHED_RR进程保证获得的量程,除非它被抢占或阻塞。在传统Linux上,SCHED_RR量子为0.1秒。从Linux 3.9开始,通过/proc/sys/kernel/sched_rr_timeslice_ms文件的限制为adjustable,其中量程表示为毫秒值,默认值为100。

答案 3 :(得分:4)

我在谷歌上搜索了关于Linux中SCHED_RR时间片的相同疑问。 但我无法从这里得到明确的答案和内核源代码。 进一步检查后,我发现关键点是“RR_TIMESLICE”是jiffies中的默认时间片,而不是毫秒!因此,无论您配置了什么HZ,SCHED_RR的默认时间片始终为100ms。

与“/ proc / sys / kernel / sched_rr_timeslice_ms”的值相同,其输入值为毫秒,但它存储并输出在 jiffies 中!所以,当你的CONFIG_HZ = 100时,你会发现:

# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
# cat /proc/sys/kernel/sched_rr_timeslice_ms
10

有点困惑。 希望这可以帮助你理解它!

答案 4 :(得分:1)

sysctl用于在运行时读取和写入内核参数。可用的参数是/proc/sys/下列出的参数。 Linux 3.9还添加了一种用于调整(和查看)SCHED_RR量子的新机制:/ proc / sys / kernel / sched_rr_timeslice_ms文件将量子公开为毫秒值,其默认值为100。将0写入此文件将重置量子到默认值。因此,您可能要尝试:

sysctl kernel.sched_rr_timeslice_ms