Документация
ОС Аврора 5.1.1

Профилирование выполнения функций

Для выявления проблем, связанных с выполнением функций, можно использовать утилиту Callgrind, которая включена в набор инструментов профилирования Valgrind.

Callgrind записывает историю вызовов функций, которые выполняются во время работы приложения. Он собирает количество выполняемых инструкций, их связь с исходным кодом, отношения между вызываемыми и вызывающими функциями, а также количество таких вызовов.

Сейчас профилирование работает только на эмуляторе. Для профилирования эмулятору рекомендуется выделять не менее 4 гигабайт оперативной памяти.

Установка зависимостей

Установка инструмента Valgrind, включающего в себя утилиту Callgrind, выполняется на эмулятор. Для установки требуется подключиться по ssh к эмулятору и установить пакеты valgrind и valgrind-extratools.

Команды для установки:

devel-su pkcon install valgrind
devel-su pkcon install valgrind-extratools

Предварительная настройка проекта

Чтобы во время сборки в режиме Профилирования не было ошибок и debug-файлы попадали на эмулятор, можно их явно включить в rpm-пакеты в секции %files в spec-файле:

%{_bindir}/%{name}.debug

Либо включить всю папку /usr/bin:

%{_bindir}

Примечание. После завершения профилирования перед запуском приложения в эксплуатацию данные параметры следует исключить из spec-файла.

Профилирование функций

Перед запуском профайлера требуется собрать и установить приложение, используя тип сборки Профилирование.

Для выполнения профилирования функций, необходимо выполнить следующие шаги:

  1. Открыть меню Анализ и выбрать пункт Профайлер функций Valgrind (внешняя программа).
  2. В открывшемся диалоге заполнить поля данными:
    1. Выбрать комплект сборки.
    2. В поле Программа указать название приложения. Например, ru.auroraos.TestApp. Название приложения должно соответствовать значению Name из файла .spec.
    3. В поле Параметры указать передаваемые приложению параметры, при необходимости.
  3. Нажать ОК. Приложение будет запущено.
  4. Выполнить в приложении задуманный сценарий и завершить работу приложения. По окончании работы приложения профайлер создаст файл с результатами профилирования в домашней директории. Файл callgrind.out.*, где * — число, добавленное программой для уникальности названия.

Переместить файл с эмулятора на компьютер разработчика можно, выполнив на компьютере разработчика команду, аналогичную приведённой ниже.

Для эмулятора:

scp -P 2223 -i ~/AuroraOS/vmshare/ssh/private_keys/sdk defaultuser@localhost:callgrind.out.1 /path/to/local/place

где scp — утилита, позволяющая копировать файлы с удалённого ресурса. Команда в данной инструкции приводится для Unix-совместимого терминала. В Linux и macOS можно использовать стандартный терминал, в Windows необходимо использовать Git Bash.

Просмотр результатов

Перед просмотром результатов профилирования необходимо перенести файл callgrind.out.* в систему разработчика, где ведётся работа над проектом (см. шаг 4 Профилирование функций).

Для просмотра результатов следует выполнить следующие шаги:

  1. Переключить IDE в режим Отладка.

  2. Выбрать Callgrind в выпадающем списке панели отладки.

  3. Нажать на и выбрать файл с результатом профилирования callgrind.out.*.

    Для фильтрации результатов нужно указать строку в поле Фильтр.

    Для просмотра подробной информации о функции достаточно навести на неё курсор в одноименной вкладке Функции.

    Для просмотра информации о вызывающих и вызываемых функциях следует дважды кликнуть на функцию в соответствующих вкладках Вызывающие и Вызываемые.

    Для переключения между функциями можно использовать кнопки < и > на вкладке Вызываемые.

    Для установки формата цен следует нажать на $. Цена в Callgrind равна количеству событий, например, вызовов функции. Можно увидеть абсолютные и относительные цены, а также цены, относительные к родительской. Чтобы увидеть информацию, которая получена только из файлов проекта, следует нажать на значок фильтра .

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

    Для удаления списков обобщённых параметров при отображении имен функций, следует нажать <>.

Настройка профайлера

Работу профайлера можно настроить через передачу параметров. Например, можно настроить следующие опции:

  • --callgrind-out-file=<file> записывает данные профиля в заданный файл;
  • --dump-every-bb=<count> создаёт дамп данных профиля для каждого базового блока;
  • --instr-atstart=<yes|no> указывает, запускать ли профилирование с самого начала программы;
  • параметры --collect-* указывают, какие конкретные данные следует собирать или не собирать;
  • --separate-threads=<no|yes> разделяет сбор данных для потоков;
  • --cache-sim=<yes|no> указывает, выполнять ли симуляцию кэша;
  • --branch-sim=<yes|no> указывает, выполнять ли симуляцию предсказания ветвления.

Полный список доступных параметров можно найти в официальной документации инструмента Callgrind.

Параметры Callgrind можно указать глобально для всех проектов и индивидуальные для каждого проекта.

Чтобы указать глобальные настройки Callgrind, нужно открыть меню Инструменты → Параметры и выбрать в списке Анализатор. На вкладке Valgrind в поле Extra Callgrind arguments можно ввести дополнительные аргументы Callgrind.

Чтобы указать для проекта индивидуальные параметры Callgrind, нужно выполнить следующие шаги:

  1. Переключить IDE в режим Проекты.
  2. Выбрать пункт Запуск у сборки.
  3. Перейти в раздел Настройки Valgrind, нажав на Подробнее, и сменить значение в выпадающем списке с Общие на Особые.
  4. Ввести в поле Extra Callgrind arguments дополнительные аргументы Callgrind.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.