linux 性能记录:计数 (-c) 和频率 (-F) 选项之间的区别

linux perf record: difference between count (-c) and frequency (-F) options

我试图了解 perf record 的 -c 和 -F 选项的真正作用,但我无法解释我所看到的。我是 运行 这些命令:

perf record -a -F <frequency> sleep 1

perf record -a -c <count> sleep 1

尝试 频率计数 的不同值。我得到的结果是 the following

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

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

计数

当您 运行 perf record -c <number> 时,您指定的是采样周期(其中 "number" 是采样周期)。也就是说,对于事件的每 "number" 次出现,将记录一个样本。当跟踪事件数量的性能计数器溢出时,将记录样本。

我猜您是在 perf report 的帮助下获取事件数。请注意,perf report 永远不会报告实际的事件数,而只是一个近似值。随着您不断调整采样周期,事件的数量将不断变化。 perf report 只会读取 perf record 生成的 perf.data 文件,并根据生成的文件的大小,假设记录的样本数(通过知道一个文件的大小样本记录在内存中)。实际记录的事件数通过-

得到

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

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

频率

这是表达采样周期的另一种方式,即指定每秒采样的平均速率(频率)——您可以使用 perf record -F 来实现。因此 perf record -F 1000 将每秒记录大约 1000 个样本,这些样本将在事件对应的 hardware/PMU 计数器溢出时生成。这意味着内核将动态调整采样周期以确保 sampling 进程遵守采样频率。

This 是采样周期动态更新的方式。

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

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

看到

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

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