4

据我了解,Linux 的 Performance Counters 子系统使用该perf record命令对 CPU 和硬件计数器(例如缓存未命中)执行基于样本的分析。

  1. 如何指定采样率perf record?我从手册页中看到的最接近的是有点神秘的选项"-c, --count=Event period to sample",但目前尚不清楚这是指 period-as-duration 还是 inverse-of-rate-period (如果是后者,它期望什么单位)。

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

4

1 回答 1

6

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

1)-c是样本之间的事件计数。(仅对第 count 个事件进行采样,1 是对所有事件进行采样,100000 是对每 100000 个事件进行采样)例如,如果有一个 cpu 滴答事件(类似 TSC),那么 count 是滴答数,我建议您将采样设置为不超过 1 毫秒。要获得滴答计数,请使用公式:CPU_Freq_in_MHz * 1000。这是每毫秒获取样本的事件计数,例如对于 800 MHz CPU 和滴答事件使用-c 800000

对于您应该估计的其他事件,它们会多久进行一次。如果您不知道,您可以从刻度的计数值开始,然后检查是否收集了足够的样本。如果不是,请将计数降低十次并再次检查。滴答计数是安全的,因为滴答是任何 CPU 中最常见的事件之一。

2) 不同PMU的优良率不同,用“-e”或“--event=”选项选择。如果事件很少,每秒不超过 1000 个,您甚至可以对每个事件进行采样。如果事件类似于缓存未命中,您应该尝试几种变体,因为好的值取决于采样的代码。太低的采样率会给你少量的样本,结果将不可靠和嘈杂。但是对于太高的速率,结果也会有噪声,因为每个 PMU 都会影响被跟踪的程序。我建议您平均每秒使用不超过 1000 个事件。

于 2011-05-23T23:53:51.963 回答