【发布时间】:2018-08-19 09:00:11
【问题描述】:
我对 perf record
和 perf stat
在计算页面错误、缓存未命中和来自 perf list
的任何其他事件等事件时的区别感到困惑。我在“问题 1”的答案下面有 2 个问题可能也有助于回答“问题 2”,但如果没有,我会明确写出来。
问题 1:
据我了解,perf stat
获取计数的“摘要”,但是当与 -I 选项一起使用时,以指定的毫秒间隔获取计数。使用此选项,它是对区间内的计数求和还是在区间内获得平均值,或者完全是其他什么?我想总结一下。 perf wiki 声明它是聚合的,但我想这可能意味着。
问题 2:
为什么perf stat -e <event1> -I 1000 sleep 5
给出的计数不与我对以下命令perf record -e <event1> -F 1000 sleep 5
每秒的计数相加一样?
例如,如果我使用“page-faults”作为 event1 的事件,我会在每个命令下得到以下输出。 (我假设 period 字段是 perf record
的 perf.data 文件中事件的计数)
性能统计
perf stat -e page-faults -I 1000 sleep 5
# time counts unit events
1.000252928 54 page-faults
2.000498389 <not counted> page-faults
3.000569957 <not counted> page-faults
4.000659987 <not counted> page-faults
5.000837864 2 page-faults
完美记录
perf record -e page-faults -F 1000 sleep 5
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.016 MB perf.data (6 samples) ]
perf script -F period
1
1
1
5
38
164
我预计如果我将 perf stat
的计数相加,我会得到与 perf record
的总和相同的结果。如果我将 -c 选项与 perf record
一起使用并给出 1 的参数,我确实得到了一个接近的匹配。这仅仅是因为页面错误数量相对较少而导致的巧合吗?
到目前为止我使用过的参考资料:
- brendangregg's perf blog
- this page 上的性能记录和统计链接上面提到的“性能维基”
- 我在here 周围进行了挖掘,以了解 perf 记录实际记录的方式和时间与写入 perf.data 的时间。
提前感谢您提供的任何和所有见解。
【问题讨论】:
-
聚合意味着总结。对于以稳定速率发生的任何事情(如
cycles
),perf stat
的较长-I
间隔将提供更多计数。
标签: perf