我正在使用perf
进行性能分析,但监控的PMU事件数量高于硬件计数器的数量,因此会触发循环多路复用策略。但是,我的一些测试用例可能会运行不到一毫秒,这意味着如果执行时间小于默认开关频率(1000Hz)的乘法反转,则可能无法对某些事件进行分析。
如何提高perf stat
perf record -F <freqency>
的采样频率,以确保即使测量开销可能略有增加,也会记录每个事件?
答案 0 :(得分:0)
首先,请记住采样与计数不同。
perf record
将始终对分析期间发生的所有事件进行采样。这意味着它不会计算所有发生的事件(当然可以调整!)。您可以修改样本采集的频率,以增加采集的样本数。它通常类似于每10个(或任何数字> 0)事件发生,perf record
只会记录其中的1个。
perf stat
会对发生的所有事件进行计数。对于发生的每个事件,perf stat
将对其进行计数,并且不会错过任何事件,与采样不同。当然,如果涉及多路复用(即,当测量的事件的数量大于可用硬件计数器的数量时),所计数的事件的数量可能不准确。没有在perf stat
中设置频率的概念,因为它所做的只是您要测量的所有事件的直接计数。
这是来自linux内核源代码的proof: -
你可以看到它将样本周期(样本频率的倒数)设置为0 - 所以你知道什么是样本频率;)
无论如何,你可以做的是使用perf stat
详细阅读perf stat -v
来查看和了解你正在测量的所有事件发生了什么。
要了解有关perf stat
的更多信息,您还可以阅读此answer。