为了账号安全,请及时绑定邮箱和手机立即绑定

如何知道Linux Scheduler时间片?

如何知道Linux Scheduler时间片?

MMMHUHU 2019-10-19 15:14:06
我正在寻找我的Linux内核的时间片(或量子)的值。是否存在/proc公开此类信息的文件?(或者)在我的发行版的Linux标头中是否定义明确?(或者)是否存在公开此值的Linux API的C函数(也许是sysinfo)?提前致谢。
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

分配给特定过程的数量可能有所不同:


您可以通过调整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间隔。


查看完整回答
反对 回复 2019-10-19
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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


Timeslice将始终在sysctl_sched_min_granularity和之间sysctl_sched_latency,默认值分别为0.75 ms和6 ms,并在kernel / sched / fair.c中定义。


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


查看完整回答
反对 回复 2019-10-19
?
慕沐林林

TA贡献2016条经验 获得超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文件进行调整,该文件的量子表示为毫秒值,默认值为100。


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 3915 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信