我试图了解 -c 和 -F 选项性能记录确实如此,但我无法解释我所看到的。我正在运行这些命令:
perf record -a -F <frequency> sleep 1
and
perf record -a -c <count> sleep 1
尝试不同的值频率 and count。我得到的结果是下列
在第一个表中我设置了频率,在第二个表中设置了计数。频率和计数如何影响事件数量?我认为事件的数量与频率和计数无关,但显然情况并非如此。 perf 实际上做了什么?
Count
and frequency
是两个基本开关,用于在使用时调整采样率perf record
(在内部进行采样)。
Count
当你跑步时perf record -c <number>
,您指定采样周期(其中“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 record -F 来完成。所以perf record -F 1000
每秒将记录大约 1000 个样本,这些样本将在与事件对应的硬件/PMU 计数器溢出时生成。这意味着内核将动态调整采样周期以确保sampling
过程遵循采样频率。
This是采样周期动态更新的方式。
采样频率越高,收集的样本数量就越高(几乎成比例)。
可以通过运行命令查看采样周期的变化 -
sudo perf report -D -i perf.data | fgrep RECORD_SAMPLE
每当采样周期不断变化时,事件总数将随着采样周期的变化而不断增加。当采样周期固定时,事件总数也固定,由上式求得。这两种情况下的事件总数都是近似值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)