【发布时间】:2016-08-03 22:00:39
【问题描述】:
我使用命令perf record -a 测量我系统上的性能计数器并使用perf script 获取结果,如下所示
[000] 109528.087598: 1 cycles
[000] 109528.100038: 5072 cycles
[000] 109528.120034: 4878 cycles
[000] 109528.144032: 4514 cycles
假设我在 3.3GHz CPU 上运行它。从公式CPU freq = number of cycles / time 我们得到,在一微秒内我们有 3.3 * 10^3 个周期。
我的问题是,为什么测量一个周期平均需要 3.95 微秒,而从公式来看,它显然应该更少?
【问题讨论】:
-
我第一个直观的想法是,这种情况是由于CPU在开始执行另一个函数之前进行了其他操作(因此使用循环),但我不确定这是否是真正的原因。跨度>
-
Perf record进行采样 - 这意味着 perf 每秒将产生大约 1000 - 4000 个中断,并且为了获得它们,它将设置性能计数器以适应一定数量的周期。性能记录(或性能报告/性能脚本)也可能隐藏命中空闲进程的样本。要获取 cpu 时钟周期数,请使用perf stat工具,该工具将使用 PMU 的计数模式。
标签: time cpu performancecounter perf