我正在寻找Linux内核的时间片(或量子)的值。
是否有/proc
文件公开此类信息?
(或)我的发行版的Linux头文件中是否定义明确?
(或者)是否有Linux API(可能是sysinfo)的C函数公开此值?
提前致谢。
答案 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_granularity
和sysctl_sched_latency
之间,默认分别为0.75毫秒和6毫秒,并在kernel/sched/fair.c中定义。
但实际的时间片不会导出到用户空间。
答案 2 :(得分:9)
SCHED_OTHER
进程(即在(默认)非实时循环分时策略下运行的进程)和SCHED_RR
进程之间的接受答案存在一些混淆。
sched_latency_ns
和sched_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