【发布时间】:2014-05-31 00:52:06
【问题描述】:
Linux perf 工具(前段时间命名为perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clock 和cpu_clock(内部称为PERF_COUNT_SW_CPU_CLOCK 和PERF_COUNT_SW_TASK_CLOCK)。但他们的问题是缺乏描述。
ysdx用户reportsman 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 什么时候会给出不同的值?我应该使用哪一个?
【问题讨论】:
-
两个事件的源文件:
kernel/events/core.c,"Software event: cpu wall time clock" (line 6092,cpu_clock_event_*) 用于 cpu 时钟 (pmu perf_cpu_clock),"Software event: task time clock" (line 6168,task_clock_event_*) 用于任务时钟 (pmu perf_task_clock)。两者都是基于hrtimers,但更新功能不同:cpu_clock_event_update使用local_clock和task_clock_event_update使用event->ctx->time.... -
Robert Haas, "perf: the good, the bad, the ugly", 2012:"但是 perf 还包括软件事件,例如 cpu-clock 和 task-clock,它们除了 Linux 内核之外没有任何意义,并且没有关于这些含义的文档。我通过使用默认事件、周期、任务时钟和 cpu 时钟进行分析,得到大致相同的结果,......没有任何解释有什么区别。为了使 perf 广泛有用,......它需要解释所有内容的文档这些事件是什么,以及如何有效地利用它们。"
-
对我来说,描述看起来像 cpu 时钟可能是操作系统开始时间的 jiffies 数量。任务时钟可能是任务开始后的瞬间。请查看手册页 proc(5) 并在其中搜索 starttime。也许stackoverflow.com/a/44524937/1950345可以给你更多的信息。
-
@reichhart,性能使用值之间的差异,而不是绝对值。你甚至使用过性能记录或性能统计吗?您的评论可能与问题无关:在性能代码中,cpu 时钟为
local_clock(),任务时钟为perf_clock()和一些 hrtimer。
标签: linux-kernel scheduler perf