首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RHEL7 6/RHEL7 7中参数"kernel.sched_min_granularity_ns“的含义

RHEL7 6/RHEL7 7中参数"kernel.sched_min_granularity_ns“的含义
EN

Unix & Linux用户
提问于 2018-08-16 06:58:10
回答 2查看 6.2K关注 0票数 3

在研究从RHEL6到RHEL7的内核行为时,我们遇到了关于RHEL6 6核参数的一个解释

kernel.sched_min_granularity_ns sched_min_granularity_ns是调度程序周期的初始值。调度程序期间是允许所有可运行任务至少运行一次的时间段。虽然CFS没有时间切片的概念,但您可以将时间看作是最初的时间块,然后将其均匀地划分为时间,每个可运行的过程都有一个。请注意,此可调参数仅指定初始值。当太多的任务变得可运行时,调度程序将增加周期,以避免过多地缩短运行时间。/usr/share/doc/kernel-doc-2.6.32/Documentation/scheduler/sched-design-CFS.txt >kernel.sched_latency_ns它为绑定CPU的任务配置目标抢占延迟。

关于kernel.sched_min_granularity_ns参数的描述使我们感到困惑。我们对参数的理解是,它是每个可运行任务在CPU上运行的最小时间(即提供给每个可运行任务的时间片)。对于kernel.sched_latency_ns来说,这是所有可运行任务(S)至少运行一次的时期。

我们从许多其他文章中获得了我们的理解,比如这一个就是那个。有些链接可能引用不同的内核版本,但是参数的一般描述不应该被颠倒。

EN

回答 2

Unix & Linux用户

发布于 2018-09-02 14:02:56

同意。RHEL6文档与它引用的文档不一致。别理它。

https://elixir.bootlin.com/linux/v2.6.32/source/Documentation/scheduler/sched-design-CFS.txt#L95

因此,CFS调度程序不像以前的调度程序那样有“时间间隔”的概念,也没有任何启发式。只有一个中心可调(您必须打开CONFIG_SCHED_DEBUG):/proc/sys/核/sched_min_ workloads,它可用于将调度程序从“桌面”(即低延迟)调到“服务器”(即良好批处理)工作负载。它默认为适合桌面工作负载的设置。

相同版本中的默认值是1ms,对于时间间隔(对应于旧风格的CONFIG_HZ=1000)来说,这是有意义的。

https://elixir.bootlin.com/linux/v2.6.32/source/kernel/sched_fair.c#L40

对于“允许所有可运行的任务至少运行一次的一段时间”来说,1ms太小了几倍。

代码语言:javascript
复制
/*
 * Targeted preemption latency for CPU-bound tasks:
 * (default: 5ms * (1 + ilog(ncpus)), units: nanoseconds)
 *
 * NOTE: this latency value is not the same as the concept of
 * 'timeslice length' - timeslices in CFS are of variable length
 * and have no persistent notion like in traditional, time-slice
 * based scheduling concepts.
 *
 * (to see the precise effective timeslice length of your workload,
 *  run vmstat and monitor the context-switches (cs) field)
 */
unsigned int sysctl_sched_latency = 5000000ULL;

/*
 * Minimal preemption granularity for CPU-bound tasks:
 * (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
 */
unsigned int sysctl_sched_min_granularity = 1000000ULL;
票数 1
EN

Unix & Linux用户

发布于 2018-09-03 03:47:28

你链接到的文件包含以下定义:

  • kernel.sched_latency_ns sched_latency_ns是调度程序期间的初始值。调度器期间是允许所有可运行任务至少运行一次的时间段。虽然CFS没有时间片的概念,但您可以将时间看作是最初的时间块,然后将其均匀地划分为时间块。对于每个可运行的进程,请注意此可调值只指定初始值。当太多任务变为可运行时,调度程序将使用kernel.sched_min_granularity_ns instead. instead.。
  • kernel.sched_min_granularity_ns sched_min_granularity_ns指定单个任务将运行的目标最小调度周期。此可调性仅在运行负载较高时使用。与sched_latency_ns不同,此可调期指定为每个任务分配的目标时间,而不是所有任务应运行一次的时间。

所以这个网页已经被修复了--上面写着“2018-08-30T21:11:42+00:00”,也就是说,大约四天前,在你发布问题两周后。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/462895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档