Сначала вам нужно получить список событий с perf list
. У меня нет опыта работы с android, поэтому, если вы можете, пожалуйста, покажите наиболее интересную часть этого списка.
1) -c
- количество событий между выборками. (выполняется выборка только по одному событию, 1 - выборка всего, а 100 000 - выборка каждого 100-тысячного события) Например. если есть событие для такта процессора (что-то вроде TSC), то count - это количество тактов, и я рекомендую установить выборку не чаще, чем на 1 миллисекунду. Для подсчета тиков используйте формулу: CPU_Freq_in_MHz * 1000
. Это количество событий для выборки каждую миллисекунду, например, для процессора 800 МГц и тикового события используйте -c 800000
.
Для других событий вы должны оценить, как часто они будут проводиться. Если вы не знаете, вы можете начать со значения счетчика для тиков, а затем проверить, достаточно ли было собрано образцов. Если нет, уменьшите счет десять раз и проверьте снова. Счет для тиков будет безопасным, потому что тик является одним из наиболее частых событий в любом процессоре.
2) Хорошая скорость отличается для разных PMU, которые выбираются с помощью опции "-e" или "--event =". Если событие редкое, не более 1000 в секунду, вы можете попробовать даже каждое событие. Если событие похоже на промах кэша, вам следует попробовать несколько вариантов, потому что хорошее значение зависит от образца кода. Слишком низкая частота выборки приведет к небольшому количеству выборок, и результаты будут ненадежными и шумными. Но при слишком высокой скорости результаты будут также зашумлены, потому что каждый PMU может повлиять на отслеживаемую программу. Я рекомендую вам использовать в среднем не более 1000 событий в секунду.