Skip to main content
 首页 » 编程设计

linux-kernel之Linux 性能事件 : cpu-clock and task-clock之what is the difference

2024年09月07日15unruledboy

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

ysdx用户 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-clockcpu-clock会给出不同的值吗?我应该使用哪一个?

请您参考如下方法:

1) 默认情况下,perf stat显示 task-clock ,并且不显示 cpu-clock .因此我们可以告诉 task-clock预计会更有用。

2) cpu-clock简直坏掉了,好多年都没修过。最好忽略它。
cpu-clock 的目的是的 sleep 1将显示大约 1 秒。相比之下,task-clock将显示接近于零。使用 cpu-clock 会很有意义阅读挂钟时间。然后您可以查看 cpu-clock 之间的比率。和 task-clock .

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

异常(exception):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 的实现是最清楚的。 .但是您可能会链接到这个问题,以解释您的代码在做什么:-)。

Subject: Re: perf: some questions about perf software events
From: Peter Zijlstra

On Sat, 2010-11-27 at 14:28 +0100, Franck Bui-Huu wrote:

Peter Zijlstra writes:

On Wed, 2010-11-24 at 12:35 +0100, Franck Bui-Huu wrote:




[...]

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 的东西,它在我的待办事项 list 上看(弗朗西斯也递给我
一个小补丁),但我一直被其他东西分心:/


好的。

调整他们两个的期限是否有意义?

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

与 cpu 时钟和 'pid=n' 相同:无论值,事件度量
cpu 挂钟。

也许只在 API 中提出一个时钟并在内部绑定(bind)它
时钟到 cpu 或任务时钟取决于 pid 或 cpu 参数将
好些了吗?


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

在更肤浅的层面上, perf stat cpu-clock 的输出可能与 task-clock 略有不同性能早于 v4.7-rc1。例如,它可能会为 task-clock 打印“CPUs used”。但不适用于 cpu-clock .