如何知道Linux调度时间片?(How to know linux scheduler time s

2019-09-02 01:52发布

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

是否有一个/proc其公开这样的信息文件?

(OR)是在我的分布的Linux头明确定义?

(OR)是否有Linux的API(也许SYSINFO),揭露出这个值的C函数?

提前致谢。

Answer 1:

分配给一个特定的过程量子可能会有所不同 :

您可以调整“切片”,通过调整sched_latency_nssched_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进程。



Answer 2:

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

时间片将总是之间sysctl_sched_min_granularitysysctl_sched_latency ,其缺省为分别和在定义0.75毫秒和6毫秒内核/排程/ fair.c 。

但是,实际的时间片不出口到用户空间。



Answer 3:

有介于两者之间公认的答案有些混乱SCHED_OTHER过程(即,那些下(默认操作)非实时轮询分时策略)和SCHED_RR进程。

sched_latency_nssched_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。



Answer 4:

我用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

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



Answer 5:

sysctl用于读取并在运行时写的内核参数。 可用的参数是那些在上市/proc/sys/ 。 也Linux的3.9增加了新的机制用于调整(与观看)的SCHED_RR量子:在/ proc / SYS /内核/ sched_rr_timeslice_ms文件暴露量子作为毫秒值,其默认值为100写0到该文件中的量子复位到默认值。 所以,你可能也想尝试:

sysctl kernel.sched_rr_timeslice_ms


文章来源: How to know linux scheduler time slice?