Всем привет! Сегодня я хотел бы коснутся темы тестирования производительности андроид приложений. Некоторые моменты будут общими и для других платформ. При решении задачи оценки эффективности оптимизации приложения я столкнулся с неприятной проблемой — флуктуацией результатов измерения с разбросом в ряде случаев более чем на 100%. Ясно что такие результаты не позволяют оценить усилия по оптимизации производительности, которые должны были давать прирост скорости в 20%. Ниже я привожу найденные закономерности, которые позволили снизить разброс до приемлемых 1%-2%. Подробности под катом.
Температура имеет значение
Для предотвращения перегрева устройства существует сервис, который следит за температурой и при достижении пороговых значений начинает реализовывать стратегию охлаждения (например ограничивать максимальную тактовую частоту процессора). Обычно он называется thermald, но возможны вариации в зависимости от вендора.
Чем больше мы хотим получить статистически достоверные данные, тем больше раз мы запускаем тест и тем больше мы подогреваем процессор. Характерная картина результатов измерения в этом случае будет иметь примерно такой вид:
Профили governor
Политики управления частотой процессора также сильно влияют на результаты измерений. Тактовая частота современных многоядерных процессоров может меняется по различным алгоритмам, которые реализует governor.
Широко известные: performance, ondemand, powersafe.
В последствии я старался фиксировать при запуске тестов частоту и активность ядер, что конечно является спорным решением.
Работа GC
Garbage collector может так же осложнить жизнь своими срабатываниями в разные моменты времени.
Сторонний софт
Сервисы живущие своей жизнью, виджеты погоды, неожиданно начавшаяся установка обновлений могут внести существенные погрешности в измерения.
Общие рекомендации
- Отключайте по максимуму всё, что не нужно для работы тестируемого приложения, сервисы, в том числе от google.
- Набирайте статистику с паузами, которые позволят остывать процессору.
- Проводите измерения в одних и тех же температурных условиях.
- Освобождайте память перед началом тестов.
Делитесь своими методами по повышению точности измерения в перформанс тестах в комментариях!
Автор: Валера