我在寻找我的Linux内核的时间片(或量子)的值。
是否有一个/proc
其公开这样的信息文件?
(OR)是在我的分布的Linux头明确定义?
(OR)是否有Linux的API(也许SYSINFO),揭露出这个值的C函数?
提前致谢。
我在寻找我的Linux内核的时间片(或量子)的值。
是否有一个/proc
其公开这样的信息文件?
(OR)是在我的分布的Linux头明确定义?
(OR)是否有Linux的API(也许SYSINFO),揭露出这个值的C函数?
提前致谢。
分配给一个特定的过程量子可能会有所不同 :
您可以调整“切片”,通过调整sched_latency_ns和sched_min_granularity_ns,但请注意,“切片”是不是一个固定的量。 还要注意的是CFS抢占判决是基于瞬时状态。 任务可能已经收到完整的(变量)的CPU时间“切片”,但抢占就会被触发只有在更值得的任务是可用的,所以一个“切片”是不是“最大不间断的CPU时间”,你可能希望它要..但它有些类似。
对于使用SCHED_RR专用实时进程,默认的时间片是在Linux内核的定义RR_TIMESLICE
在在include / linux /排程/ rt.h 。
/*
* 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进程。
CFS(其是用于处理默认调度器)没有固定的时间片,它是在运行时根据目标延迟(计算sysctl_sched_latency
)和运行的进程的数目。 时间片可能永远不会小于最小粒度( sysctl_sched_min_granularity
)。
时间片将总是之间sysctl_sched_min_granularity
和sysctl_sched_latency
,其缺省为分别和在定义0.75毫秒和6毫秒内核/排程/ fair.c 。
但是,实际的时间片不出口到用户空间。
有介于两者之间公认的答案有些混乱SCHED_OTHER
过程(即,那些下(默认操作)非实时轮询分时策略)和SCHED_RR
进程。
的sched_latency_ns
和sched_min_granularity_ns
文件(其旨在用于调试目的,并可见仅在内核配置有CONFIG_SCHED_DEBUG
)影响的调度SCHED_OTHER
过程。 正如阿列克谢Shmalko的回答指出,CFS下的时间片是不固定的(而不是出口到用户空间),并且将取决于内核参数和因素,如进程的nice值。
sched_rr_get_interval()返回一个固定值,它是量子一个SCHED_RR
保证了处理过程得到的,除非它被抢占或块。 在传统的Linux中, SCHED_RR
量子为0.1秒。 由于Linux 3.9,限制是可调节通过/proc/sys/kernel/sched_rr_timeslice_ms
文件,其中,所述量子表示为毫秒值缺省为100。
我用Google搜索这个门票大约在Linux中SCHED_RR时间片的同样的怀疑。 但我不能都从这里内核源代码得到明确的答案。 进一步检查后,我发现关键的一点是“RR_TIMESLICE”是一会儿的默认时间片 ,而不是毫秒! 因此,SCHED_RR的默认时间片始终是100毫秒,不管你是什么配置HZ。
同为“的/ proc / sys目录/内核/ 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
它有点困惑。 希望这可以帮助你去了解它!
sysctl
用于读取并在运行时写的内核参数。 可用的参数是那些在上市/proc/sys/
。 也Linux的3.9增加了新的机制用于调整(与观看)的SCHED_RR量子:在/ proc / SYS /内核/ sched_rr_timeslice_ms文件暴露量子作为毫秒值,其默认值为100写0到该文件中的量子复位到默认值。 所以,你可能也想尝试:
sysctl kernel.sched_rr_timeslice_ms