首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux性能事件:cpu-时钟和任务-时钟-有什么区别

Linux性能事件:cpu-时钟和任务-时钟-有什么区别
EN

Stack Overflow用户
提问于 2014-05-31 08:52:07
回答 3查看 12.3K关注 0票数 40

Linux perf tools (不久前命名为perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clockcpu_clock (内部称为PERF_COUNT_SW_CPU_CLOCKPERF_COUNT_SW_TASK_CLOCK)。但它们的错误之处在于缺乏描述。

ysdx user reports man perf_event_open有简短的描述:

代码语言:javascript
复制
    PERF_COUNT_SW_CPU_CLOCK
          This reports the CPU clock, a high-resolution per-
          CPU timer.

    PERF_COUNT_SW_TASK_CLOCK
          This reports a clock count specific to the task
          that is running.

但是它的描述很难理解。

关于task-clockcpu-clock事件是如何以及何时计算的,有人能给出权威的答案吗?它们与linux内核调度器有什么关系?

什么时候task-clockcpu-clock会给出不同的值?我应该使用哪一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-10 17:43:25

1)默认情况下,perf stat显示task-clock,不显示cpu-clock。因此,我们可以告诉我们,task-clock被期望更有用。

2) cpu-clock干脆坏了,多年来一直没有修复。最好忽略它。

sleep 1cpu-clock应该显示大约1秒。相比之下,task-clock显示的值接近于零。使用cpu-clock来读取挂钟时间是很有意义的。然后,您可以查看cpu-clocktask-clock之间的比率。

但在当前的实现中,cpu-clock等同于task-clock。甚至有可能“修复”现有的计数器可能会破坏一些用户空间程序。如果有这样的程序,Linux可能无法“修复”这个计数器。Linux可能需要定义一个新的计数器。

例外:starting with v4.7-rc1,当分析一个或多个CPU时-而不是特定的任务-例如perf stat -aperf stat -a显示cpu-clock而不是task-clock。在这个特定的例子中,这两个计数器应该是等价的。在这种情况下,cpu-clock的初衷更有意义。因此,对于perf stat -a,您可以忽略这种差异,并将其解释为task-clock

如果您编写自己的代码来分析一个或多个CPU -而不是特定的任务-也许遵循perf stat -a的实现将是最清楚的。但是你可以链接到这个问题,来解释你的代码在做什么:-)。

主题:Re: perf: some questions about perf software events

来自: Peter Zijlstra

在星期六,2010-11-27 14:28 +0100,Franck Bui-Huu写道: Peter Zijlstra写道:

在Wed,2010-11-24 12:35 +0100,Franck Bui-Huu写道:

..。

Also I'm currently not seeing any real differences between cpu-clock and task-clock events. They both seem to count the time elapsed when the task is running on a CPU. Am I wrong ? 不,弗朗西斯已经注意到了,当我添加多pmu的东西时,我可能破坏了它,它在我的待办事项列表上要看(弗朗西斯还递给我一个小补丁),但我一直被其他东西分心:/ OK。

调整这两个周期是否有意义?

此外,在创建任务时钟事件时,将'pid=-1‘传递给sys_perf_event_open()也没有什么意义,不是吗?

与cpu时钟和‘pid=n’相同:无论值是什么,该事件都会测量cpu挂钟。

也许在API中只建议一个时钟,并在内部将此时钟绑定到cpu或任务时钟,这取决于pid或cpu参数,会更好吗?不,在一个任务上同时计算cpu和任务时钟是有意义的(cpu时钟基本上就是挂钟时间)。

在更浅显的层面上,在v4.7-rc1之前的perf中,cpu-clockperf stat输出可能与task-clock的输出略有不同。例如,它可能为task-clock打印“CPU已用”,但不为cpu-clock打印“CPU已用”。

票数 10
EN

Stack Overflow用户

发布于 2017-06-29 05:55:13

一般来说: cpu-clock事件衡量的是时间的流逝。它使用Linux CPU时钟作为定时源。

这里有一篇关于使用perf查找执行热点的深入文章:http://sandsoftwaresound.net/perf/perf-tutorial-hot-spots/

任务时钟告诉您作业的并行度/使用了多少cpus。此概要包含由perf:https://doc.zih.tu-dresden.de/hpc-wiki/bin/view/Compendium/PerfTools生成的输出的详细信息

这里还有很多信息:https://stackoverflow.com/a/20378648/8223204

票数 2
EN

Stack Overflow用户

发布于 2017-10-31 03:05:17

根据this message的说法,他们测量的是同样的东西。

他们只是在抽样时有所不同。

cpu-clock是基于挂钟的--因此相对于挂钟时间,采样间隔是固定的。我相信任务时钟是相对于任务运行时间的。因此,相对于进程的运行时,采样的时间间隔是固定的。

当我在我的多线程应用程序上运行它时,它确实显示了几乎相同的值。

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

https://stackoverflow.com/questions/23965363

复制
相关文章

相似问题

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