Gprof

редактировать

Gprof - это инструмент анализа производительности для приложений Unix. Он использовал гибрид инструментальных средств и семплирования и был создан как расширенная версия более старого инструмента "prof". В отличие от prof, gprof поддерживает сбор и печать ограниченного графика вызовов.

Содержание

  • 1 История
  • 2 Реализация
  • 3 Ограничения и точность
  • 4 Прием
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки

История

GPROF изначально был написан группой, возглавляемой Сьюзен Л. Грэм в Калифорнийский университет в Беркли для Berkeley Unix (4.2BSD ). Другая реализация была написана Джеем Фенласоном как часть проекта GNU для GNU Binutils в 1988 году.

Реализация

Инструментальный код автоматически вставляется в программный код во время компиляции (например, с использованием параметра '-pg' компилятора gcc ) для сбора данных вызывающей функции. Вызов функции монитора 'mcount' вставляется перед каждым вызовом функции.

Данные выборки сохраняются в файле 'gmon.out' или в файле 'progname.gmon' непосредственно перед выходом из программы и могут быть проанализированы с помощью инструмента командной строки 'gprof'. Несколько файлов gmon можно объединить с помощью 'gprof -s' для сбора данных из нескольких запусков программы.

Вывод GPROF состоит из двух частей: плоского профиля и графика звонков. Плоский профиль показывает общее время выполнения каждой функции и его процент от общего времени выполнения. Также сообщается количество вызовов функций. Выходные данные сортируются по проценту, с горячими точками вверху списка.

Вторая часть вывода - это текстовый график вызовов, который показывает для каждой функции, которая ее вызвала (родительская) и кого она вызвала (дочерние подпрограммы). Существует внешний инструмент под названием gprof2dot, способный преобразовывать график вызовов из gprof в графическую форму.

Ограничения и точность

Во время выполнения значения времени получаются путем статистической выборки. Выборка осуществляется путем проверки счетчика программ программы целевой программы через регулярные промежутки времени с использованием прерываний операционной системы (программируются через profil (2) или setitimer (2) системные вызовы ). Полученные данные не точные, а скорее статистическое приближение. Сумма ошибки обычно составляет более одного периода выборки. Если значение в n раз превышает период выборки, ожидаемая ошибка в значении является квадратным корнем из n периодов выборки. Типичный период выборки составляет 0,01 секунды (10 миллисекунд) или 0,001 секунды (1 мс), или, другими словами, 100 или 1000 выборок в секунду времени работы ЦП.

В некоторых версиях, таких как BSD, профилирование разделяемых библиотек может быть ограничено из-за ограничений функции profil, которая может быть реализована как библиотечная функция или как системный вызов. В glibc была аналогичная утилита под названием sprof для профилирования динамических библиотек.

Gprof не может измерять время, проведенное в режиме ядра (системные вызовы, ожидание ЦП или ожидание ввода-вывода), и только код пользовательского пространства профилируется.

Функция mcount может быть небезопасной в некоторых реализациях, поэтому профили многопоточных приложений могут быть неверными (обычно она профилирует только основной поток

Накладные расходы на инструментальные средства могут быть высокими (примерно 30–260%) для высокоуровневых или объектно-ориентированных программ. Взаимная рекурсия и нетривиальные циклы не разрешаются с помощью подхода gprof (контекстно-независимый граф вызовов), потому что он записывает только обход дуги, а не полные цепочки вызовов.

Gprof со сбором графа вызовов может использоваться только с совместимыми компиляторами, такими как GCC, clang / LLVM и некоторыми другими.

Приемная

В 2004 году статья GPROF появилась в списке 50 самых влиятельных PLDI статей всех времен как одна из четырех статей 1982 год.

По словам Тиля, «GPROF... произвел революцию в области анализа производительности и быстро стал инструментом, который выбирают разработчики по всему миру... инструмент по-прежнему имеет большое количество поклонников... инструмент по-прежнему активно поддерживается и остается актуальным в современном мире ».

См. Также

Ссылки

Дополнительная литература

  • Сьюзан Л. Грэм, Питер Б. Кесслер и Маршалл К. Маккусик. gprof: профилировщик выполнения графа вызовов // Материалы симпозиума SIGPLAN '82 по созданию компиляторов, Уведомления SIGPLAN, Vol. 17, № 6, с. 120–126; doi: 10.1145 / 800230.806987
  • Грэм, С. Л., Кесслер, П. Б. и МакКусик, М. К. (1983), Профилировщик выполнения для модульных программ. Программное обеспечение: Прак. Эксп., 13: 671–685. doi: 10.1002 / spe.4380130803

Внешние ссылки

Последняя правка сделана 2021-05-22 03:39:46
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте