首先,您需要使用 获取事件列表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 个事件。