Установка скорости для профилирования пробы с «перфорированной записью»

Насколько я понимаю, подсистема Performance Counters для Linux использует команду perf record для выполнения выборочного профилирования CPU и аппаратных счетчиков (таких как пропуски кеша).

  1. Как определить частоту дискретизации для perf record ? Самое близкое, что я вижу на странице руководства, – это несколько загадочная опция «-c, –count = период периода для выборки» , но неясно, относится ли это к периоду как продолжительности или периоду обратного курса (И если последний, какие единицы он ожидает).

  2. Что такое «хорошая» частота дискретизации для приложения на мобильном устройстве Android? Какая скорость слишком низкая, чтобы быть полезной, и какая скорость чрезмерно высока?

Сначала вам нужно получить список событий с perf list . У меня нет опыта работы с андроидом, поэтому, если вы можете, пожалуйста, покажите самую интересную часть этого списка.

1) -c – отсчет события между выборками. (Только отсчетное событие отсчитывается, 1 – выборка, а 100000 – выборка каждого 100000-го события) Например, если есть событие для cpu tick (smth like TSC), тогда подсчет количества тиков, и я рекомендую вам Установить выборку не чаще, чем 1 миллисекунду. Чтобы получить количество CPU_Freq_in_MHz * 1000 , используйте формулу: CPU_Freq_in_MHz * 1000 . Это количество событий, чтобы получить образец каждые миллисекунды, например, для процессора с частотой 800 МГц и использования события галочки -c 800000 .

Для других событий вы должны оценить, как часто они будут делать. Если вы не знаете, вы можете начать с значения счета для тиков, а затем проверить, достаточно ли было собрано образцов. Если нет, опустите счет десять раз и снова проверьте. Счет для тиков будет безопасным, поскольку галочка является одним из наиболее часто встречающихся событий в любом процессоре.

2) Хорошая скорость отличается для разных PMU, которая выбирается с опцией «-e» или «–event =». Если событие встречается редко, не более 1000 в секунду, вы можете опробовать даже каждое событие. Если событие похоже на пропуски кеша, вы должны попробовать несколько вариантов, потому что хорошее значение зависит от выбранного кода. Слишком низкая частота дискретизации даст вам небольшое количество образцов, и результаты не будут надежными и шумными. Но для слишком высокой скорости результаты тоже будут помечены, потому что каждый PMU может повлиять на прослеживаемую программу. Я рекомендую вам использовать не более 1000 событий в секунду в среднем.