Time 在使用性能测量周期时,为什么时间间隔大于周期?

Time 在使用性能测量周期时,为什么时间间隔大于周期?,time,cpu,performancecounter,perf,Time,Cpu,Performancecounter,Perf,我使用命令perf record-a测量系统上的性能计数器,并使用perf script获得结果,结果如下所示 [000]109528.087598:1个周期 [000]109528.100038:5072次循环 [000]109528.120034:4878次循环 [000]109528.144032:4514个周期 假设我在3.3GHz的CPU上运行这个。从公式CPU freq=周期数/时间我们得到,在一微秒内,我们有3.3*10^3个周期 我的问题是,为什么测量一个周期平均需要3.95微秒

我使用命令
perf record-a
测量系统上的性能计数器,并使用
perf script
获得结果,结果如下所示

[000]109528.087598:1个周期
[000]109528.100038:5072次循环
[000]109528.120034:4878次循环
[000]109528.144032:4514个周期

假设我在3.3GHz的CPU上运行这个。从公式
CPU freq=周期数/时间
我们得到,在一微秒内,我们有3.3*10^3个周期


我的问题是,为什么测量一个周期平均需要3.95微秒,而从公式上看,它显然需要更少的时间?

perf record
进行采样-这意味着perf每秒将产生大约1000-4000次中断,为了获得这些中断,它将设置性能计数器,使其达到一定数量的周期(中断之间可能有所不同)。它仅记录接收到中断时的性能数据以及此时的指令地址。
perf report
将以“sample”为单位进行报告,而不是以精确的刻度进行报告

Perf记录(或Perf报告/Perf脚本)也可能隐藏命中空闲进程的样本


要获得循环数,请使用
perf stat
/
perf stat-一个使用PMU计数模式的工具。该模式还将为您进行频率计算并打印CPU的平均有效频率。

perf record
进行采样-这意味着perf将每秒产生约1000-4000次中断nd,为了得到它们,它将把性能计数器设置为一定数量的周期(中断之间可能不同)。它只在收到中断时记录到
perf.data
,以及此时的指令地址。
perf report
将以“sample”为单位进行报告,而不是以精确的刻度进行报告

Perf记录(或Perf报告/Perf脚本)也可能隐藏命中空闲进程的样本


要获得周期数,请使用
perf stat
/
perf stat-一个将使用PMU计数模式的工具。该模式还将为您进行频率计算并打印CPU的平均有效频率。

我的第一个直觉想法是,这种情况是由CPU在开始执行之前执行其他操作造成的另一个函数(因此使用循环),但我不确定这是否是真正的原因。
Perf record
进行采样-这意味着Perf每秒将产生大约1000-4000个中断,为了获得这些中断,它将设置性能计数器以达到一定的循环量。Perf record(或Perf report/Perf script)还可能隐藏命中空闲进程的样本。要获取cpu时钟周期数,请使用将使用PMU计数模式的
perf stat
工具。我的第一个直觉想法是,这种情况是由于cpu在开始执行另一个功能(因此使用周期)之前执行其他操作造成的,但我不确定这是否是真正的原因。
Perf record
进行采样-这意味着Perf每秒将产生大约1000-4000个中断,为了获得这些中断,它会将性能计数器设置为一定数量的周期。Perf record(或Perf report/Perf script)还可能隐藏命中空闲进程的样本。要获取cpu时钟周期数,请使用将使用PMU计数模式的
perf stat
工具。