Linux perf事件:cpu-clock和task-clock - 有什么区别

osg*_*sgx 33 scheduler linux-kernel perf

Linux perf工具(前一段时间命名perf_events)有几个内置的通用软件事件.其中最基本的两个是:task-clockcpu_clock(内部称为PERF_COUNT_SW_CPU_CLOCKPERF_COUNT_SW_TASK_CLOCK).但他们的错误在于缺乏描述.

ysdx用户报告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.
Run Code Online (Sandbox Code Playgroud)

但描述很难理解.

有人可以提供有关如何以及何时权威的答案task-clockcpu-clock事件都占?它们与linux内核调度程序有什么关系?

task-clockcpu-clock会给出不同的价值观?我应该使用哪一个?

sou*_*edi 5

1)默认情况下,perf stat显示task-clock和不显示cpu-clock。因此我们可以看出task-clock期望它会有用得多。

2)cpu-clock只是被打破,并且多年未修复。最好忽略它。

cpu-clocksleep 1会显示约1秒。相反,task-clock将显示接近零。cpu-clock用来读取挂钟时间会很有意义。然后,您可以查看cpu-clock和之间的比率task-clock

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

例外:在对一个或多个CPU进行性能分析时,从v4.7-rc1开始 -而不是特定任务-例如perf stat -aperf stat -a显示cpu-clock而不是task-clock。在这种特定的情况下,两个计数器都意图是等价的。cpu-clock在这种情况下,最初的意图更为合理。因此perf stat -a,您可以忽略此差异,并将其解释为task-clock

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

主题:Re:perf:关于perf软件事件的一些问题
来自:Peter Zijlstra

在2010年11月27日星期六14:28 +0100上,Franck Bui-Huu写道:

彼得·齐杰斯特拉(Peter Zijlstra)写道:

在2010年11月24日星期三12:35 +0100时,Franck Bui-Huu写道:

[...]

另外,我目前还没有看到cpu-clock和task-clock事件之间的任何实际差异。它们似乎都在计算任务在CPU上运行时所经过的时间。我错了吗 ?

不,弗朗西斯已经注意到,当我添加多pmu的东西时,我可能会破坏它,在待办事项列表中查看(弗朗西斯还给了我一个小补丁),但是我一直对其他东西分心:/

好。

调整两者的期限是否有意义?

另外,在创建任务时钟事件时,将'pid = -1'传递给sys_perf_event_open()确实没有意义,对吗?

与cpu clock和'pid = n'相同:无论值如何,该事件都会测量cpu挂钟。

也许在API中仅提议一个时钟,然后根据pid或cpu参数在内部将此时钟绑定到cpu或任务时钟会更好?

不,在任务上同时计算cpu和任务时钟实际上是有意义的(cpu时钟基本上是墙上时间)。

从更表面上看,forv的perf stat输出cpu-clock可能与task-clock早于v4.7-rc1的perf中的输出略有不同。例如,它可能为task-clock而不是为打印“已使用的CPU” cpu-clock

  • 您可以链接您在此处引用的邮件列表存档,仅供参考,所以我们知道您在引用谁。 (2认同)