首页 > 其他分享 >调度器统计 【ChatGPT】

调度器统计 【ChatGPT】

时间:2023-12-11 22:01:58浏览次数:30  
标签:调用 调度 次数 该域 空闲 ChatGPT balance CPU 统计

调度器统计

版本 15 的 schedstats 删除了一些 sched_yield 的计数器:yld_exp_empty、yld_act_empty 和 yld_both_empty。除此之外,它与版本 14 完全相同。

版本 14 的 schedstats 包括对 sched_domains 的支持,这在 2.6.20 的主线内核中实现,尽管它与内核 2.6.13-2.6.19 中的版本 12 的统计信息完全相同(版本 13 从未发布过内核)。一些计数器更适合每个运行队列,另一些适合每个域。请注意,域(及其相关信息)只对使用 CONFIG_SMP 的机器相关和可用。

在版本 14 的 schedstat 中,每个列出的 CPU 至少有一个域统计信息,可能会有多个域。在此实现中,域没有特定的名称,但通常编号最高的域会在机器上所有 CPU 之间进行平衡,而 domain0 是最专注的域,有时只在 CPU 对之间进行平衡。目前没有架构需要超过三个域级别。域统计信息中的第一个字段是一个位图,指示受该域影响的 CPU。

这些字段是计数器,只会递增。使用这些字段的程序需要从基线观察开始,然后计算每个后续观察中计数器的变化。一个 Perl 脚本可以对许多字段执行此操作,该脚本可在以下网址找到:

http://eaglet.pdxhosts.com/rick/linux/schedstat/

请注意,任何此类脚本必然是特定于版本的,因为更改版本的主要原因是输出格式的更改。对于希望编写自己脚本的人,这里描述了这些字段。

CPU 统计信息

cpu<N> 1 2 3 4 5 6 7 8 9

第一个字段是 sched_yield() 统计信息:

  • 调用 sched_yield() 的次数

接下来的三个字段是 schedule() 统计信息:

  • 这个字段是 O(1) 调度器中使用的遗留数组过期计数字段。我们保留它是为了 ABI 兼容性,但它总是被设置为零。
  • 调用 schedule() 的次数
  • schedule() 将处理器空闲的次数

接下来的两个字段是 try_to_wake_up() 统计信息:

  • 调用 try_to_wake_up() 的次数
  • 调用 try_to_wake_up() 唤醒本地 CPU 的次数

接下来的三个字段是描述调度延迟的统计信息:

  • 该处理器上所有任务运行所花费的时间总和(以纳秒为单位)
  • 该处理器上所有任务等待运行所花费的时间总和(以纳秒为单位)
  • 在该 CPU 上运行的时间片数

域统计信息

对于描述的每个 CPU,每个域会产生一个这样的统计信息。(请注意,如果未定义 CONFIG_SMP,则不会使用任何域,并且这些行将不会出现在输出中。)

domain<N> <cpumask> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

第一个字段是一个位掩码,指示该域操作的 CPU。

接下来的 24 个字段是各种 load_balance() 统计信息,分为空闲(idle)、繁忙(busy)和新空闲(newly idle)的类型:

  • 在该域中调用 load_balance() 时 CPU 空闲的次数
  • 在该域中检查但发现负载不需要在 CPU 空闲时平衡的次数
  • 在该域中尝试移动一个或多个任务但失败的 load_balance() 调用次数,当 CPU 空闲时
  • 在该域中每次调用 load_balance() 时发现的不平衡总和(如果有的话),当 CPU 空闲时
  • 在该域中调用 pull_task() 时 CPU 空闲的次数
  • 在该域中即使在 CPU 空闲时也调用 pull_task(),因为目标任务在空闲时是缓存热的次数
  • 在该域中调用 load_balance() 但在 CPU 空闲时未找到更繁忙的队列的次数
  • 在该域中发现更繁忙的队列但未找到更繁忙的组的次数,当 CPU 空闲时
  • 在该域中调用 load_balance() 时 CPU 繁忙的次数
  • 在该域中检查但发现负载不需要在 CPU 繁忙时平衡的次数
  • 在该域中尝试移动一个或多个任务但失败的 load_balance() 调用次数,当 CPU 繁忙时
  • 在该域中每次调用 load_balance() 时发现的不平衡总和(如果有的话),当 CPU 繁忙时
  • 在该域中调用 pull_task() 时 CPU 繁忙的次数
  • 在该域中即使在 CPU 繁忙时也调用 pull_task(),因为目标任务在繁忙时是缓存热的次数
  • 在该域中调用 load_balance() 但在 CPU 繁忙时未找到更繁忙的队列的次数
  • 在该域中发现更繁忙的队列但未找到更繁忙的组的次数,当 CPU 繁忙时
  • 在该域中调用 load_balance() 但在 CPU 刚刚变为空闲时未找到更繁忙的队列的次数
  • 在该域中检查但发现负载不需要在 CPU 刚刚变为空闲时平衡的次数
  • 在该域中尝试移动一个或多个任务但失败的 load_balance() 调用次数,当 CPU 刚刚变为空闲时
  • 在该域中每次调用 load_balance() 时发现的不平衡总和(如果有的话),当 CPU 刚刚变为空闲时
  • 在该域中调用 pull_task() 时 CPU 刚刚变为空闲的次数
  • 在该域中即使在 CPU 刚刚变为空闲时也调用 pull_task(),因为目标任务在刚刚变为空闲时是缓存热的次数
  • 在该域中调用 load_balance() 但在 CPU 刚刚变为空闲时未找到更繁忙的队列的次数
  • 在该域中发现更繁忙的队列但未找到更繁忙的组的次数,当 CPU 刚刚变为空闲时

接下来的三个字段是 active_load_balance() 统计信息:

  • 调用 active_load_balance() 的次数
  • 尝试移动任务但失败的 active_load_balance() 的次数
  • 成功移动任务的 active_load_balance() 的次数

接下来的三个字段是 sched_balance_exec() 统计信息:

  • sbe_cnt 未使用
  • sbe_balanced 未使用
  • sbe_pushed 未使用

接下来的三个字段是 sched_balance_fork() 统计信息:

  • sbf_cnt 未使用
  • sbf_balanced 未使用
  • sbf_pushed 未使用

接下来的三个字段是 try_to_wake_up() 统计信息:

  • 在该域中调用 try_to_wake_up() 唤醒上次在该域中的不同 CPU 上运行的任务的次数
  • 在该域中调用 try_to_wake_up() 将任务移动到唤醒 CPU,因为它在自己的 CPU 上无论如何都是缓存冷的次数
  • 在该域中调用 try_to_wake_up() 开始被动平衡的次数

/proc/<pid>/schedstat

schedstats 还添加了一个新的 /proc/<pid>/schedstat 文件,以在每个进程级别上包含一些相同的信息。该文件中有三个字段,与该进程相关联:

  • 在 CPU 上花费的时间(以纳秒为单位)
  • 在运行队列上等待的时间(以纳秒为单位)
  • 在该 CPU 上运行的时间片数

可以轻松编写一个程序来利用这些额外字段,以报告特定进程或一组进程在调度器策略下的表现如何。这样的程序的简单版本可在以下网址找到:

http://eaglet.pdxhosts.com/rick/linux/schedstat/v12/latency.c

标签:调用,调度,次数,该域,空闲,ChatGPT,balance,CPU,统计
From: https://www.cnblogs.com/pengdonglin137/p/17895669.html

相关文章

  • 调度器调试文件说明 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-debug.html调度器调试文件说明numa_balancing目录numa_balancing目录用于保存控制NUMA平衡功能的文件。如果来自该功能的系统开销过高,则可以通过scan_period_min_ms、scan_delay_ms、scan_period_max_ms和scan_......
  • Scheduler pelt c program 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/text_files.html/**Thefollowingprogramisusedtogeneratetheconstantsfor*computingschedaverages.**==============================================================* Cprogram(compilewith......
  • 调度器 Nice 设计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-nice-design.html调度器Nice设计本文档解释了在新的Linux调度器中重新设计和简化nice-levels实现的思路。在Linux下,nicelevels一直比较弱,人们不断地纠缠我们,希望让nice+19的任务使用更少的CPU时间。不......
  • 实时组调度 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-rt-group.html实时组调度0.警告调整这些设置可能导致系统不稳定,这些旋钮只有root用户才能操作,并且假设root用户知道自己在做什么。最值得注意的是:在sched_rt_period_us中使用非常小的值可能导致系统不稳定,......
  • 利用率夹紧(Utilization Clamping) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-util-clamp.html利用率夹紧1.简介利用率夹紧,也称为utilclamp或uclamp,是一种调度器功能,允许用户空间帮助管理任务的性能需求。它是在v5.3版本中引入的。CGroup支持在v5.4中合并。Uclamp是一种提示机制,允许调度器了解......
  • 能量感知调度(EAS) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-energy.html能量感知调度1.简介能量感知调度(EnergyAwareScheduling,EAS)赋予调度器预测其决策对CPU能量消耗的影响的能力。EAS依赖于CPU的能量模型(EnergyModel,EM)来为每个任务选择一个能效高、对吞吐量影响最小......
  • Schedutil 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/schedutil.htmlSchedutil注意所有这些都假设频率和工作能力之间存在线性关系,我们知道这是有缺陷的,但这是最好的可行近似。PELT(PerEntityLoadTracking)使用PELT,我们跟踪各种调度实体的一些指标,从单个任务到任务组切片到......
  • 容量感知调度 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-capacity.html容量感知调度1.CPU容量1.1简介传统的同质SMP平台由纯粹相同的CPU组成。另一方面,异构平台由具有不同性能特征的CPU组成-在这样的平台上,并非所有CPU都可以被视为相等。CPU容量是衡量CPU可......
  • Completions - "wait for completion" barrier APIs 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/completion.htmlCompletions-"waitforcompletion"barrierAPIs介绍:如果您有一个或多个线程必须等待某些内核活动达到某个点或特定状态,完成(completions)可以为这个问题提供无竞争的解决方案。从语义上讲,它们有点像pthread......
  • CFS调度器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-design-CFS.htmlCFS调度器1.概述CFS代表“完全公平调度器”,是由IngoMolnar实现并合并到Linux2.6.23中的新“桌面”进程调度器。它是替代先前普通调度器SCHED_OTHER交互代码的调度器。CFS设计的80%可以用一句话概括......