我正在寻找我的 Linux 内核的时间片(或量子)的值。
具体问题:
- 是否有
/proc
公开此类信息的文件? - (或者)它在我的发行版的 Linux 标头中是否明确定义?
- (或者)Linux API(可能是 sysinfo)的 C 函数是否公开了这个值?
我正在寻找我的 Linux 内核的时间片(或量子)的值。
具体问题:
/proc
公开此类信息的文件?分配给特定进程的量程可能会有所不同:
您可以通过调整sched_latency_ns和 sched_min_granularity_ns来调整“slice” ,但请注意“slice”不是固定量。另请注意,CFS 抢占决策基于瞬时状态。一个任务可能已经收到了一个完整的(可变的)“切片”的 CPU 时间,但只有在更值得的任务可用时才会触发抢占,因此“切片”并不是您可能期望的“最大不间断 CPU 时间”是..但它有点相似。
这是因为完全公平的调度器,默认的 Linux 调度器,将处理器的一部分分配给一个进程,而不是一个固定的时间片。这意味着每个进程的时间片与当前负载成正比,并由进程的优先级值加权。
对于使用 SCHED_RR 的专用实时进程,默认时间片在 Linux 内核中定义为RR_TIMESLICE
include /linux/sched/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 毫秒,并在kernel/sched/fair.c中定义。
但实际时间片不会导出到用户空间。
SCHED_OTHER
在进程(即在(默认)非实时循环分时策略下运行的那些)和进程之间接受的答案存在一些混淆SCHED_RR
。
和文件(用于调试目的,只有在内核配置了 时才可见sched_latency_ns
)影响进程的调度。正如 Alexey Shmalko 的回答中所指出的,CFS 下的时间片不是固定的(并且不会导出到用户空间),并且将取决于内核参数和进程的 nice 值等因素。sched_min_granularity_ns
CONFIG_SCHED_DEBUG
SCHED_OTHER
sched_rr_get_interval()返回一个固定值,该值是SCHED_RR
进程保证获得的量,除非它被抢占或阻塞。在传统 Linux 上,SCHED_RR
时间间隔为 0.1 秒。从 Linux 3.9 开始,限制可以通过文件进行调整/proc/sys/kernel/sched_rr_timeslice_ms
,其中量子表示为毫秒值,默认值为 100。
我试图用谷歌搜索这个问题与 Linux 中时间片的相同疑问SCHED_RR
,但我没有从这里和内核的源代码中得到明确的答案。
经过进一步检查,我发现关键是RR_TIMESLICE
jiffies 中的默认时间片,而不是毫秒!SCHED_RR
因此,无论HZ
您配置了什么,默认时间片始终为 100 毫秒。
与 的值相同/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
有点糊涂,希望能帮助你理解!
sysctl
用于在运行时读取和写入内核参数。可用的参数列在下面/proc/sys/
。此外,Linux 3.9 添加了一种用于调整(和查看)SCHED_RR量程的新机制:/proc/sys/kernel/sched_rr_timeslice_ms 文件将量程公开为毫秒值,默认值为 100。将 0 写入此文件会将量程重置为默认值。所以你可能想尝试:
sysctl kernel.sched_rr_timeslice_ms