Гпроф
Gprof — это анализа производительности инструмент приложений Unix . Он использовал гибрид инструментов и выборки. [1] и был создан как расширенная версия более старого «профессионального» инструмента. В отличие от prof, gprof способен собирать и печатать ограниченный график вызовов . [1] [2]
История
[ редактировать ]GPROF изначально был написан группой под руководством Сьюзан Л. Грэм из Калифорнийского университета в Беркли для Berkeley Unix ( 4.2BSD). [3] ). в рамках проекта GNU для GNU Binutils в 1988 году. Другая реализация была написана Джеем Фенласоном [4] [5]
Выполнение
[ редактировать ]Код инструментирования автоматически вставляется в код программы во время компиляции (например, с помощью ' -pg
'опция компилятора gcc ), чтобы собрать данные вызывающей функции. Вызов функции монитора mcount вставляется перед каждым вызовом функции. [6]
Данные выборки сохраняются в файле «gmon.out» или в файле « имя_программы .gmon» непосредственно перед выходом из программы и могут быть проанализированы с помощью команды « gprof
'инструмент командной строки. Несколько файлов gmon можно объединить с помощью ' gprof -s
' для накопления данных после нескольких запусков программы.
Выходные данные GPROF состоят из двух частей: плоского профиля и графа вызовов. Плоский профиль показывает общее время выполнения, затраченное на каждую функцию, и его процент от общего времени выполнения. Также сообщается количество вызовов функций. Вывод сортируется по проценту, с активными точками вверху списка.
Вторая часть вывода представляет собой текстовый граф вызовов, который показывает для каждой функции, кто ее вызвал (родительская функция) и кого она вызвала (дочерние подпрограммы). Существует внешний инструмент под названием gprof2dot, способный преобразовать граф вызовов из gprof в графическую форму. [7]
Ограничения и точность
[ редактировать ]Во время выполнения значения времени получаются путем статистической выборки. Выборка осуществляется путем проверки счетчика программ целевой программы через регулярные промежутки времени с использованием операционной системы прерываний profil(2) или setitimer(2) (запрограммированных с помощью системных вызовов ). Полученные данные не являются точными, а являются статистическим приближением. Величина ошибки обычно превышает один период выборки. Если значение в n раз превышает период выборки, ожидаемая ошибка значения равна квадратному корню из n периодов выборки. [8] [9] Типичный период выборки составляет 0,01 секунды (10 миллисекунд) или 0,001 секунды (1 мс), или, другими словами, 100 или 1000 выборок в секунду времени работы ЦП.
В некоторых версиях, таких как BSD, профилирование общих библиотек может быть ограничено из-за ограничений функции профиля , которая может быть реализована как библиотечная функция или как системный вызов. существовала аналогичная утилита В glibc под названием «sprof» для профилирования динамических библиотек. [10]
Gprof не может измерять время, проведенное в режиме ядра (системные вызовы, ожидание процессора или ожидание ввода-вывода), и профилируется только код пользовательского пространства. [9]
В некоторых реализациях функция mcount может не быть потокобезопасной, поэтому профили многопоточного приложения могут быть неправильными (обычно она профилирует только основной поток приложения). [11]
Накладные расходы на оборудование могут быть высокими (по оценкам, 30 % [12] -260% [13] ) для программ высшего порядка или объектно-ориентированных программ. Взаимная рекурсия и нетривиальные циклы не разрешаются с помощью подхода gprof (контекстно-независимый граф вызовов), поскольку он записывает только обход дуги, а не полные цепочки вызовов. [13] [14] [15]
Gprof со сбором графа вызовов можно использовать только с совместимыми компиляторами, такими как GCC, clang/LLVM и некоторыми другими.
Прием
[ редактировать ]В 2004 году газета GPROF появилась в списке 50 самых влиятельных газет PLDI всех времен как одна из четырех газет 1982 года. [16]
По словам Тиля, [6] «GPROF... произвел революцию в области анализа производительности и быстро стал инструментом, который выбирают разработчики по всему миру... инструмент до сих пор имеет большое количество поклонников... инструмент по-прежнему активно поддерживается и остается актуальным в современном мире».
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Сьюзен Л. Грэм, Питер Б. Кесслер и Маршалл К. Маккусик. gprof: профилировщик выполнения графа вызовов // Материалы симпозиума SIGPLAN '82 по построению компиляторов, SIGPLAN Notifications, Vol. 17, № 6, стр. 120-126; дои: 10.1145/800230.806987
- ^ gprof --- Граф вызовов // Пин Хуан, Новое изобретение вычислений, Лаборатория искусственного интеллекта Массачусетского технологического института
- ^ ИСТОРИЯ Профилировщик gprof появился в версии 4.2BSD.
- ^ Руководство по GNU gprof : «GNU gprof был написан Джеем Фенласоном».
- ^ Бюллетень GNU, том. 1 нет. 5 (1988): «Сотрудник Фонда, заменяющий Gprof, Джей Фенласон недавно завершил работу над профилировщиком для GNU C, совместимым с GPROF от Berkeley Unix».
- ^ Jump up to: а б Джастин Тиль, Обзор инструментов и методов анализа производительности программного обеспечения: от GProf до DTrace (2006) «2.1.1 Обзор GProf»
- ^ Визуализация графа вызовов Gprof // Поваренная книга для научных вычислений. Кулинарная книга Python. Федеральная политехническая школа Лозанны (EPFL)
- ^ Статистическая неточность gprof Вывод , заархивированный 29 мая 2012 г. на Wayback Machine.
- ^ Jump up to: а б Инструменты профилирования gprof в системах BG/P. Архивировано 21 декабря 2013 г. в Wayback Machine , «Проблемы интерпретации данных профиля», Argonne Leadership Computing Facility.
- ^ «Проект qprof» . HP Labs, Research (в архиве) . Архивировано из оригинала 4 августа 2014 года . Проверено 28 сентября 2023 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ HOWTO: использование gprof с многопоточными приложениями // Сэм Хосевар, 13 декабря 2004 г.
- ^ GNU gprof Profiler. Архивировано 8 декабря 2015 г. в Wayback Machine , Ю Кай Хун, факультет математики Национального тайваньского университета; 19 июля 2008 г.
- ^ Jump up to: а б Профилирование пути вызова с низкими издержками для немодифицированного оптимизированного кода , ACM 1-59593-167/8/06/2005.
- ^ JM Spivey Быстрое и точное профилирование графа вызовов . Архивировано 7 февраля 2012 г. в Wayback Machine , 3 сентября 2003 г. // Архив программного обеспечения - практика и опыт, том 34, выпуск 3, март 2004 г., страницы 249–264. Спиви, Дж. М. (2004). «Быстрое и точное профилирование графа вызовов». Программное обеспечение: практика и опыт . 34 (3): 249–264. CiteSeerX 10.1.1.62.1032 . дои : 10.1002/спе.562 . S2CID 17866706 .
- ^ Йоси Крейнин, Как лгут профилировщики: случаи gprof и KCachegrind // 2 февраля 2013 г.
- ^ 20 лет PLDI (1979–1999): Выбор, Кэтрин С. МакКинли, редактор
Дальнейшее чтение
[ редактировать ]- Сьюзен Л. Грэм, Питер Б. Кесслер и Маршалл К. Маккусик. gprof: профилировщик выполнения графа вызовов // Материалы симпозиума SIGPLAN '82 по построению компиляторов, SIGPLAN Notifications, Vol. 17, № 6, стр. 120–126; дои: 10.1145/800230.806987
- Грэм С.Л., Кесслер П.Б. и МакКьюсик М.К. (1983). Профилировщик выполнения модульных программ. Программное обеспечение: Практика. Эксперимент., 13: 671–685. дои: 10.1002/спе.4380130803
Внешние ссылки
[ редактировать ]- Винаяка Хегде Набор инструментов программиста : Профилирование программ с использованием gprof , Linux Gazette, 2004 г.
- Мартин Ханифорд, Ускорьте свой код с помощью профилировщика GNU. Нацельтесь на части ваших приложений, которые занимают больше всего времени , 3 апреля 2006 г. // IBM DeveloperWorks, Техническая библиотека
- Документация GNU Gprof