osg*_*sgx 33 scheduler linux-kernel perf
Linux perf工具(前一段时间命名perf_events)有几个内置的通用软件事件.其中最基本的两个是:task-clock和cpu_clock(内部称为PERF_COUNT_SW_CPU_CLOCK和PERF_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-clock和cpu-clock事件都占?它们与linux内核调度程序有什么关系?
当task-clock并cpu-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可能需要定义一个新的计数器。
例外:在对一个或多个CPU进行性能分析时,从v4.7-rc1开始 -而不是特定任务-例如perf stat -a。 perf 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。