我以为我理解CFS但是..。
计划延迟是指每个可运行的进程都可以期望获得处理器份额的时间。在Linux内核代码中,它提供:
(默认值: 6ms * (1 + ilog(ncpus)),单位:纳秒)
对于一台cpu机器来说,它是6毫秒,对于一台4核心机器是18毫秒。我在Rpi零一核和Rpi 4四核上进行了检查,情况似乎是这样的。然而,具有四个核的Pi 4是一台比零更强大的机器,您肯定会期望调度延迟会更小,而不是三倍大?看看sched_min_granularity,在这两种情况下,它们都处理8个任务,然后返回到一个固定的时间片段0.75ms和2.25ms。很明显我在这件事上.
发布于 2020-05-05 09:01:14
当然,您可以预期调度延迟会更小,而不是三倍大。
这就是为什么用_NONE,_LOG来“纠正”它的原因。或_LINEAR.
当您将SMP看作是拆分而不是添加CPU时,SMP的概念也是有效的。这样你就不会获得整体的性能,但仍然有更好的响应能力。
这个短函数(“周期”)同时使用min_granularity和延迟。我改了一点。我不认为你需要了解任何关于C语言的知识--甚至有一个不太可能的暗示:
static u64 __sched_period(unsigned long nr_running)
{
if (unlikely(nr_running > sched_nr_latency))
return nr_running * sysctl_sched_min_granularity;
else
return sysctl_sched_latency;
}
最后,它更多的是关于这个词,而不是这个东西:维基百科,CFS:
...the原子单元,通过它分配单个进程的CPU份额(从而使以前的时间概念变得多余)
这个多余的词仍然存在于kernel/sched/fair.c
中:
* (to see the precise effective timeslice length of your workload,
* run vmstat and monitor the context-switches (cs) field)
值6ms,0.75ms (=1/8)和24 as (= _LOG-校正为ncpus=8)可以被解释为周期,即时间。如果将其转换为赫兹,则它与Kconfig.hz
范围相匹配,该范围为100 it (服务器)到1000 it (高响应度)。
1/.00075 s
1333.3 Hz
超过一千分钟-粒度-“切片”适合在一秒钟。
1/.006 s
166.6 Hz
166条未校正的延迟“片”位于100 the“服务器”和250 the“妥协”之间。
1/.024 s
41.6 Hz
通过对8个核的日志校正,每个核都可以通过因子4减少上下文切换,但“有效延迟”仍然很低。
把它比作理发店,在那里你要保证新顾客不需要等待超过10分钟。这意味着你必须每10分钟在座位上抢占你现在的顾客。至少要花点时间打个招呼。
一家有四个座位和理发师的商店可以减少10分钟的费用.有四个理发师在一个橱柜里工作,他们只需要每40分钟停下来看一次,新进入的顾客平均只需要等待10分钟。
这将是完全的,“线性”的延迟校正:乘以N。
但在最坏的情况下,这四家公司同时检查新客户--因为他们同时开始。如果一位顾客在一分钟后进入,他可能要等39分钟才能得到服务。
因此,作为妥协,你不是用N,而是用log(N)。
1 + ilog(N)
这给出了1+ilog(4) = 1+2,所以这4个理发师可以将他们的切片从10分钟延长到30分钟(而不是40分钟)。它们一起达到10分钟的延迟时间。
四倍到16,只有50分钟。“修正”是对数的,并且有这个+ 1
。
https://unix.stackexchange.com/questions/584024
复制相似问题