【发布时间】:2020-08-24 04:10:15
【问题描述】:
我正在使用Perf 来检测工作负载中 DRAM 访问的数量和位置。对于位置,我需要在采样模式中进行追踪。因此,我以采样模式进行跟踪,为了得到总访问次数,我将访问事件次数乘乘以采样周期(即number 个指令在每个样本之间)。
我还需要总时间应用程序在 CPU 上。换句话说,我需要一个类似于top 报告的值。因为我需要知道单个应用程序中每个 DRAM 访问之间的 idle 时间段(在此期间应用程序也 on CPU)。这在采样模式下没有报告,我不能同时使用两种模式(即perf record 和perf stat)。有什么机制可以实现吗?
【问题讨论】:
-
记录一个单独的事件,比如
task-clock,然后看看它的总数?我认为从 L3 未命中样本推断时间不会得到好的结果。但如果你真的想知道 L3-miss 事件之间的时间,我认为每个事件都应该加上时间戳。 -
谢谢@PeterCordes。我只想要进程在处理器上 on 的 DRAM 空闲时间。换句话说,处理器空闲或正在运行一些其他进程的时间段不是预期的。我编辑了问题。
-
好的,这样就排除了我猜想只对现有事件使用时间戳?
task-clock仅当任务的线程在内核上处于活动状态时才计数。 -
对不起,@PeterCordes。你的意思是我应该同时采样两个事件(
L3-misses和task-clock)?如果task-clock占处理器上某个进程的时间,则可以。那么我应该将样本数乘以周期(即连续样本之间的事件数),对吧? -
我不确定您能否轻松获得
perf report向您展示您想知道的内容;你真正想要的是perf stat -e task-clock以及来自perf record的样本,用于L3 未命中。但是,是的,内核确实会跟踪它何时调度/取消调度任务,因此某个进程已经运行了多少 CPU 纳秒的确切信息就在某个地方。这只是以某种方式记录下来的问题。
标签: linux trace sampling perf utilization