Linux perf tools (不久前命名为perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clock和cpu_clock (内部称为PERF_COUNT_SW_CPU_CLOCK和PERF_COUNT_SW_TASK_CLOCK)。但它们的错误之处在于缺乏描述。
ysdx user reports man perf_event_open有简短的描述:
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-clock和cpu-clock事件是如何以及何时计算的,有人能给出权威的答案吗?它们与linux内核调度器有什么关系?
什么时候task-clock和cpu-clock会给出不同的值?我应该使用哪一个?
发布于 2019-07-10 17:43:25
1)默认情况下,perf stat显示task-clock,不显示cpu-clock。因此,我们可以告诉我们,task-clock被期望更有用。
2) cpu-clock干脆坏了,多年来一直没有修复。最好忽略它。
sleep 1的cpu-clock应该显示大约1秒。相比之下,task-clock显示的值接近于零。使用cpu-clock来读取挂钟时间是很有意义的。然后,您可以查看cpu-clock和task-clock之间的比率。
但在当前的实现中,cpu-clock等同于task-clock。甚至有可能“修复”现有的计数器可能会破坏一些用户空间程序。如果有这样的程序,Linux可能无法“修复”这个计数器。Linux可能需要定义一个新的计数器。
例外:starting with v4.7-rc1,当分析一个或多个CPU时-而不是特定的任务-例如perf stat -a。perf stat -a显示cpu-clock而不是task-clock。在这个特定的例子中,这两个计数器应该是等价的。在这种情况下,cpu-clock的初衷更有意义。因此,对于perf stat -a,您可以忽略这种差异,并将其解释为task-clock。
如果您编写自己的代码来分析一个或多个CPU -而不是特定的任务-也许遵循perf stat -a的实现将是最清楚的。但是你可以链接到这个问题,来解释你的代码在做什么:-)。
来自: 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-clock的perf stat输出可能与task-clock的输出略有不同。例如,它可能为task-clock打印“CPU已用”,但不为cpu-clock打印“CPU已用”。
发布于 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生成的输出的详细信息
发布于 2017-10-31 03:05:17
根据this message的说法,他们测量的是同样的东西。
他们只是在抽样时有所不同。
cpu-clock是基于挂钟的--因此相对于挂钟时间,采样间隔是固定的。我相信任务时钟是相对于任务运行时间的。因此,相对于进程的运行时,采样的时间间隔是固定的。
当我在我的多线程应用程序上运行它时,它确实显示了几乎相同的值。
https://stackoverflow.com/questions/23965363
复制相似问题