2011-05-23 15 views
4

据我了解,Linux的性能计数器子系统使用perf record命令来执行CPU和硬件计数器(如缓存未命中)的基于样本的分析。使用'perf记录'进行样本分析的设置速率

  1. 如何指定perf record的采样率?我可以从手册页中看到的最接近的是有些神秘的选项“-c,--count =样本”“的事件期限,但不清楚这是指期间持续时间还是反向率期间(如果后者是期望的单位)。

  2. 在移动Android设备上的应用程序中抽样的“良好”采样率是多少?什么比率太低而无用,什么比率过高?

回答

4

首先,您需要获取perf list的活动列表。我没有使用android的经验,所以,如果可以的话,请显示这个列表中最有趣的部分。

1)-c是样本采取之间的事件计数。 (只有第count个事件被抽样,1个抽样所有事件,100000个抽样每隔100000个事件)。如果有一个事件发生在cpu tick(像TSC这样的smth)上,那么count就是tick的数量,我建议你设置采样的次数不要超过1毫秒。要获得滴答计数,请使用公式:CPU_Freq_in_MHz * 1000。这是每毫秒采样的事件计数,例如,对于800 MHz CPU和tick事件使用-c 800000

对于你应该估计的其他事件,他们多久会完成一次。如果您不知道,您可以从滴答的计数值开始,然后检查是否收集了足够的样本。如果不是,请降低计数十次并再次检查。滴答的计数将是安全的,因为滴答是任何CPU中最常见的事件之一。 2)对于各种PMU,使用“-e”或“--event =”选项选择的好率不同。如果事件很少发生,每秒不超过1000次,则可以对每个事件进行采样。如果事件类似缓存未命中,则应该尝试几种变体,因为良好的值取决于采样的代码。过低的采样率会给你少量的样本,结果将不可靠和嘈杂。但是对于太高的速度,结果也会被噪声干扰,因为每个PMU都会影响追踪的程序。我建议你平均每秒使用不超过1000个事件。

+0

PS:通过'-F N'选项可以在perf中找到“反转率周期”,即每秒不超过N个事件。引用[Perf_events(perf)教程](https://perf.wiki.kernel.org/index.php/Tutorial):“*要指定自定义速率,必须使用'-F'选项。实例中,仅在用户级别以平均速率* 250采样/秒对事件指令进行采样**:'perf记录-e指令:u -F 250 ./noploop 4'“ – osgx 2014-02-19 11:09:29