linux perf record:计数(-c)和频率(-F)选项之间的差异

S. *_*nco 0 linux frequency count perf

我试图了解perf记录的-c和-F选项实际上是做什么的,但是我无法解释我所看到的。我正在运行以下命令:

perf record -a -F <frequency> sleep 1
Run Code Online (Sandbox Code Playgroud)

perf record -a -c <count> sleep 1
Run Code Online (Sandbox Code Playgroud)

尝试不同的频率计数值。我得到的结果 如下

在第一个表中,我设置频率,在第二个表中,设置计数。频率和计数如何影响事件数量?我认为事件的数量与频率和计数无关,但显然并非如此。性能实际上是做什么的?

Arn*_*ita 6

Countfrequency是两个基本开关,perf record它们可以在使用时调整采样率(内部进行采样)。

计数

运行时perf record -c <number>,您要指定采样周期(其中“数字”是采样周期)。即,对于事件的每“第”次发生,将记录一个样本。当跟踪事件数量的性能计数器溢出时,将记录该样本。

我猜您正在借助来获取事件数perf report。请注意,perf report它将永远不会报告实际的事件数,而只会报告一个近似的事件。当您不断调整采样周期时,事件数将不断变化。perf report只会读取生成的perf.data文件perf record,并且基于生成的文件的大小,它假设记录的样本数(通过知道内存中记录的样本数)来进行假设。记录的实际事件数是通过-获得的

Number of events = Fixed Sample Period * Number of samples collected

其中“固定采样周期”是您指定的perf record -c

频率

这是表示采样周期的另一种方法,即指定每秒的平均采样率(频率)-您可以使用perf记录-F来完成。因此,perf record -F 1000将每秒记录约1000个样本,并且当与事件对应的硬件/ PMU计数器溢出时,将生成这些样本。这意味着内核将动态调整采样周期,以确保该sampling过程符合采样频率。

就是采样周期如何动态更新的方式。

采样频率越高,收集的样本数量越多(几乎成比例)。

可以通过运行以下命令查看采样周期的变化-

sudo perf report -D -i perf.data | fgrep RECORD_SAMPLE

只要采样周期不断变化,事件的总数就会随着采样周期的变化而不断增加。并且当采样周期保持固定时,事件总数保持固定,并且可以通过上面显示的公式获得。在这两种情况下,事件的总数都是近似的。